Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
9bf2e38
use agent instead of host, improve multi selector ux
hemarina Jul 7, 2026
fd075f4
add tip for grey and multi selector no filter for less than 6 options
hemarina Jul 7, 2026
f6476b1
add spinner
hemarina Jul 8, 2026
02705a9
Merge branch 'main' of https://github.com/Azure/azure-dev into hemari…
hemarina Jul 8, 2026
a81eeeb
fix spinner bar and host detection
hemarina Jul 9, 2026
0c45433
fix host bug
hemarina Jul 9, 2026
0123ca4
update ux message
hemarina Jul 9, 2026
8f345de
azd tool upgrade
hemarina Jul 9, 2026
862ed4f
azd tool list, check, upgrade --all
hemarina Jul 9, 2026
7ed6598
update azd tool upgrade ux
hemarina Jul 9, 2026
ef27990
add more test coverage
hemarina Jul 9, 2026
9dfdeda
clean up UX for install
hemarina Jul 9, 2026
07baa35
go fix
hemarina Jul 9, 2026
27f5194
use display name
hemarina Jul 10, 2026
bea1c04
make availability check case-insensitive
hemarina Jul 10, 2026
75c7ee1
default to --all if no prompt or no tty
hemarina Jul 10, 2026
8f55d98
only use version comparison for non-skill tools to prevent UX bug
hemarina Jul 10, 2026
8b87a5e
add mutex
hemarina Jul 10, 2026
969c79f
make sure command is not empty
hemarina Jul 10, 2026
d5fb913
make UpdateAvailable to be true for any agent skill updated
hemarina Jul 10, 2026
f52c5b9
add version on upgrade to non skill tools
hemarina Jul 10, 2026
8c85677
update comment
hemarina Jul 10, 2026
8dc4a4f
fix the wrapping on narrower terminal widths
hemarina Jul 10, 2026
0bc0d0b
fix ux bug
hemarina Jul 10, 2026
c63de06
fix ux bug
hemarina Jul 10, 2026
6479b0b
Merge branch 'hemarina/issue-8990-tool-ux' of https://github.com/hema…
hemarina Jul 10, 2026
144b7e7
update ux to include number of skills installed
hemarina Jul 10, 2026
faf5d61
address the feedback
hemarina Jul 11, 2026
87e7131
remove all behavior for uninstall/upgrade/install if not specific in …
hemarina Jul 11, 2026
aa1fcbf
revert ux for number of skills, need more discussion with designer
hemarina Jul 11, 2026
8fe6970
Merge branch 'main' of https://github.com/Azure/azure-dev into hemari…
hemarina Jul 11, 2026
f7a737b
fix bug
hemarina Jul 11, 2026
5721fb9
address feedback
hemarina Jul 11, 2026
b6dcb83
use short name for agent
hemarina Jul 13, 2026
090381d
address feedback
hemarina Jul 13, 2026
e4337d1
add changelog
hemarina Jul 13, 2026
0ce96b2
rename to agent
hemarina Jul 13, 2026
ba0d906
address feedback
hemarina Jul 13, 2026
a3474e5
address Kristen's feedback
hemarina Jul 13, 2026
49c3cf7
use upgrade instead of update, address Hiyo feedback
hemarina Jul 14, 2026
422a2bc
update check for multi selector, have stout under spinner grey section
hemarina Jul 14, 2026
d5b7191
address all feedback
hemarina Jul 14, 2026
59ce64e
address another round of feedback
hemarina Jul 14, 2026
786b7b2
Merge branch 'main' of https://github.com/Azure/azure-dev into hemari…
hemarina Jul 14, 2026
972886f
address feedback, update comment
hemarina Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cli/azd/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

### Breaking Changes

- [[#9045]](https://github.com/Azure/azure-dev/pull/9045) The `--host` skill flag on `azd tool install`, `azd tool upgrade`, and `azd tool uninstall` has been renamed to `--agent`. Installed skills in `azd tool list --output json` and `azd tool check --output json` now expand into one row per agent and include the `agent` field. Update scripts and JSON consumers accordingly.

### Bugs Fixed

### Other Changes
Expand Down
6 changes: 3 additions & 3 deletions cli/azd/cmd/extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ func (a *extensionListAction) Run(ctx context.Context) (*actions.ActionResult, e
// Status indicator constants for extension list display.
const (
statusUpToDate = "Up to date"
statusUpdate = "Update available"
statusUpgrade = "Upgrade available"
statusIncompat = "Incompatible"
statusNotInstall = "Not installed"
)
Expand All @@ -518,7 +518,7 @@ func extensionStatus(installed, updateAvailable, incompatible bool) string {
case incompatible:
return statusIncompat
case updateAvailable:
return statusUpdate
return statusUpgrade
case installed:
return statusUpToDate
default:
Expand All @@ -531,7 +531,7 @@ func extensionStatusColor(s string) string {
switch s {
case statusUpToDate:
return output.WithSuccessFormat(s)
case statusUpdate:
case statusUpgrade:
return output.WithWarningFormat(s)
case statusIncompat:
return output.WithErrorFormat(s)
Expand Down
4 changes: 2 additions & 2 deletions cli/azd/cmd/extension_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ func TestExtensionStatus(t *testing.T) {
}{
{"not installed", false, false, false, statusNotInstall},
{"up to date", true, false, false, statusUpToDate},
{"update available", true, true, false, statusUpdate},
{"update available", true, true, false, statusUpgrade},
{"incompatible", true, false, true, statusIncompat},
}
for _, tt := range tests {
Expand All @@ -679,7 +679,7 @@ func TestExtensionStatusColor(t *testing.T) {

// Verify no panics and non-empty colored output for each status value.
for _, s := range []string{
statusUpToDate, statusUpdate, statusIncompat, statusNotInstall,
statusUpToDate, statusUpgrade, statusIncompat, statusNotInstall,
} {
result := extensionStatusColor(s)
assert.NotEmpty(t, result, "color function should return non-empty for %q", s)
Expand Down
60 changes: 32 additions & 28 deletions cli/azd/cmd/testdata/TestFigSpec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6466,12 +6466,22 @@ const completionSpec: Fig.Spec = {
subcommands: [
{
name: ['check'],
description: 'Check for tool updates.',
description: 'Check for tool upgrades.',
},
{
name: ['install'],
description: 'Install specified tools.',
options: [
{
name: ['--agent'],
description: 'Install the skill for the specified agent(s): copilot, claude. Use --agent all for every detected agent (skill tools only)',
isRepeatable: true,
args: [
{
name: 'agent',
},
],
},
{
name: ['--all'],
description: 'Install all recommended tools',
Expand All @@ -6480,16 +6490,6 @@ const completionSpec: Fig.Spec = {
name: ['--dry-run'],
description: 'Preview what would be installed without making changes',
},
{
name: ['--host'],
description: 'Install the skill for the specified agent host(s): copilot, claude. Use --host all for every detected host (skill tools only)',
isRepeatable: true,
args: [
{
name: 'host',
},
],
},
],
args: {
name: 'tool-name...',
Expand All @@ -6511,6 +6511,16 @@ const completionSpec: Fig.Spec = {
name: ['uninstall'],
description: 'Uninstall installed tools.',
options: [
{
name: ['--agent'],
description: 'Uninstall the skill from the specified agent(s): copilot, claude. Use --agent all (or omit --agent) to remove the skill from every agent it is installed through (skill tools only)',
isRepeatable: true,
args: [
{
name: 'agent',
},
],
},
{
name: ['--all'],
description: 'Uninstall all installed tools',
Expand All @@ -6519,16 +6529,6 @@ const completionSpec: Fig.Spec = {
name: ['--dry-run'],
description: 'Preview what would be uninstalled without making changes',
},
{
name: ['--host'],
description: 'Uninstall the skill from the specified agent host(s): copilot, claude. Use --host all (or omit --host) to remove the skill from every host it is installed through (skill tools only)',
isRepeatable: true,
args: [
{
name: 'host',
},
],
},
],
args: {
name: 'tool-name...',
Expand All @@ -6540,19 +6540,23 @@ const completionSpec: Fig.Spec = {
description: 'Upgrade installed tools.',
options: [
{
name: ['--dry-run'],
description: 'Preview what would be upgraded without making changes',
},
{
name: ['--host'],
description: 'Upgrade the skill for the specified agent host(s): copilot, claude. Use --host all for every detected host (skill tools only)',
name: ['--agent'],
description: 'Upgrade the skill for the specified agent(s): copilot, claude. Use --agent all for every detected agent (skill tools only)',
isRepeatable: true,
args: [
{
name: 'host',
name: 'agent',
},
],
},
{
name: ['--all'],
description: 'Upgrade all installed tools',
},
{
name: ['--dry-run'],
description: 'Preview what would be upgraded without making changes',
},
],
args: {
name: 'tool-name...',
Expand Down
2 changes: 1 addition & 1 deletion cli/azd/cmd/testdata/TestUsage-azd-tool-check.snap
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

Check for tool updates.
Check for tool upgrades.

Usage
azd tool check [flags]
Expand Down
6 changes: 3 additions & 3 deletions cli/azd/cmd/testdata/TestUsage-azd-tool-install.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ Usage
azd tool install [tool-name...] [flags]

Flags
--all : Install all recommended tools
--dry-run : Preview what would be installed without making changes
--host strings : Install the skill for the specified agent host(s): copilot, claude. Use --host all for every detected host (skill tools only)
--agent strings : Install the skill for the specified agent(s): copilot, claude. Use --agent all for every detected agent (skill tools only)
--all : Install all recommended tools
--dry-run : Preview what would be installed without making changes

Global Flags
-C, --cwd string : Sets the current working directory.
Expand Down
6 changes: 3 additions & 3 deletions cli/azd/cmd/testdata/TestUsage-azd-tool-uninstall.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ Usage
azd tool uninstall [tool-name...] [flags]

Flags
--all : Uninstall all installed tools
--dry-run : Preview what would be uninstalled without making changes
--host strings : Uninstall the skill from the specified agent host(s): copilot, claude. Use --host all (or omit --host) to remove the skill from every host it is installed through (skill tools only)
--agent strings : Uninstall the skill from the specified agent(s): copilot, claude. Use --agent all (or omit --agent) to remove the skill from every agent it is installed through (skill tools only)
--all : Uninstall all installed tools
--dry-run : Preview what would be uninstalled without making changes

Global Flags
-C, --cwd string : Sets the current working directory.
Expand Down
5 changes: 3 additions & 2 deletions cli/azd/cmd/testdata/TestUsage-azd-tool-upgrade.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ Usage
azd tool upgrade [tool-name...] [flags]

Flags
--dry-run : Preview what would be upgraded without making changes
--host strings : Upgrade the skill for the specified agent host(s): copilot, claude. Use --host all for every detected host (skill tools only)
--agent strings : Upgrade the skill for the specified agent(s): copilot, claude. Use --agent all for every detected agent (skill tools only)
--all : Upgrade all installed tools
--dry-run : Preview what would be upgraded without making changes

Global Flags
-C, --cwd string : Sets the current working directory.
Expand Down
2 changes: 1 addition & 1 deletion cli/azd/cmd/testdata/TestUsage-azd-tool.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Usage
azd tool [command]

Available Commands
check : Check for tool updates.
check : Check for tool upgrades.
install : Install specified tools.
list : List all tools with status.
show : Show details for a specific tool.
Expand Down
Loading
Loading