agents-inc 0.173.0 → 0.174.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/{chunk-Q4UNHVPX.js → chunk-3PJZ4QNJ.js} +7 -7
  3. package/dist/{chunk-3N4FSTVX.js → chunk-6PGXTLA4.js} +2 -2
  4. package/dist/{chunk-ITQF35UQ.js → chunk-7BHDKEGK.js} +3 -3
  5. package/dist/{chunk-7OG635DK.js → chunk-AIBVAYHS.js} +6 -2
  6. package/dist/{chunk-7OG635DK.js.map → chunk-AIBVAYHS.js.map} +1 -1
  7. package/dist/{chunk-AARQBW5L.js → chunk-APWMMZOK.js} +30 -23
  8. package/dist/chunk-APWMMZOK.js.map +1 -0
  9. package/dist/{chunk-WVFBBZEP.js → chunk-E45IT3HC.js} +117 -22
  10. package/dist/chunk-E45IT3HC.js.map +1 -0
  11. package/dist/{chunk-F437ICEG.js → chunk-ECPFYHDX.js} +2 -2
  12. package/dist/{chunk-EHJIQDXR.js → chunk-EFXVYQGT.js} +4 -4
  13. package/dist/{chunk-G7NUK3BF.js → chunk-FQF6VHO3.js} +29 -19
  14. package/dist/chunk-FQF6VHO3.js.map +1 -0
  15. package/dist/chunk-H5E6IO2L.js +116 -0
  16. package/dist/chunk-H5E6IO2L.js.map +1 -0
  17. package/dist/{chunk-3R3LHA4Q.js → chunk-I3WF6L43.js} +2 -2
  18. package/dist/{chunk-LJQXQTFC.js → chunk-IAQFZFWD.js} +4 -4
  19. package/dist/{chunk-BRZA7ZCX.js → chunk-IXVGBUWI.js} +5 -5
  20. package/dist/{chunk-2RTBSLSR.js → chunk-ORO2T4K2.js} +19 -5
  21. package/dist/chunk-ORO2T4K2.js.map +1 -0
  22. package/dist/{chunk-A3ZAXL5T.js → chunk-QCX66KBM.js} +3 -3
  23. package/dist/{chunk-VSPC74SS.js → chunk-R7GKQBZJ.js} +10 -9
  24. package/dist/chunk-R7GKQBZJ.js.map +1 -0
  25. package/dist/{chunk-VR6QTK5Z.js → chunk-REHVGFJE.js} +5 -5
  26. package/dist/{chunk-SPQSNZMM.js → chunk-TVEDNGVP.js} +2 -2
  27. package/dist/{chunk-MHAQWMNJ.js → chunk-WUSEZFER.js} +1 -5
  28. package/dist/{chunk-MHAQWMNJ.js.map → chunk-WUSEZFER.js.map} +1 -1
  29. package/dist/commands/build/marketplace.js +4 -4
  30. package/dist/commands/build/plugins.js +6 -6
  31. package/dist/commands/compile.js +12 -12
  32. package/dist/commands/doctor.js +7 -7
  33. package/dist/commands/edit.js +56 -59
  34. package/dist/commands/edit.js.map +1 -1
  35. package/dist/commands/eject.js +10 -10
  36. package/dist/commands/init.js +17 -18
  37. package/dist/commands/list.js +41 -16
  38. package/dist/commands/list.js.map +1 -1
  39. package/dist/commands/new/marketplace.js +4 -4
  40. package/dist/commands/search.js +9 -9
  41. package/dist/commands/share.js +9 -9
  42. package/dist/commands/uninstall.js +25 -24
  43. package/dist/commands/uninstall.js.map +1 -1
  44. package/dist/commands/update.js +6 -6
  45. package/dist/components/common/select-list.js +2 -2
  46. package/dist/components/common/skill-agent-summary.js +3 -3
  47. package/dist/components/common/summary-panel.js +4 -7
  48. package/dist/hooks/init.js +40 -25
  49. package/dist/hooks/init.js.map +1 -1
  50. package/dist/load-agent-defs-5U5KAURA.js +14 -0
  51. package/dist/{recompile-project-agents-6G6M2RS6.js → recompile-project-agents-KYK44C24.js} +8 -8
  52. package/dist/{source-loader-W7XCNKNA.js → source-loader-G5I4RNUP.js} +4 -4
  53. package/package.json +1 -1
  54. package/dist/chunk-2RTBSLSR.js.map +0 -1
  55. package/dist/chunk-AARQBW5L.js.map +0 -1
  56. package/dist/chunk-G7NUK3BF.js.map +0 -1
  57. package/dist/chunk-N33AKFLR.js +0 -24
  58. package/dist/chunk-N33AKFLR.js.map +0 -1
  59. package/dist/chunk-Q6WRR4BN.js +0 -195
  60. package/dist/chunk-Q6WRR4BN.js.map +0 -1
  61. package/dist/chunk-VSPC74SS.js.map +0 -1
  62. package/dist/chunk-WVFBBZEP.js.map +0 -1
  63. package/dist/components/common/scroll-affordance.js +0 -9
  64. package/dist/load-agent-defs-E67DSYTN.js +0 -14
  65. package/dist/source-loader-W7XCNKNA.js.map +0 -1
  66. /package/dist/{chunk-Q4UNHVPX.js.map → chunk-3PJZ4QNJ.js.map} +0 -0
  67. /package/dist/{chunk-3N4FSTVX.js.map → chunk-6PGXTLA4.js.map} +0 -0
  68. /package/dist/{chunk-ITQF35UQ.js.map → chunk-7BHDKEGK.js.map} +0 -0
  69. /package/dist/{chunk-F437ICEG.js.map → chunk-ECPFYHDX.js.map} +0 -0
  70. /package/dist/{chunk-EHJIQDXR.js.map → chunk-EFXVYQGT.js.map} +0 -0
  71. /package/dist/{chunk-3R3LHA4Q.js.map → chunk-I3WF6L43.js.map} +0 -0
  72. /package/dist/{chunk-LJQXQTFC.js.map → chunk-IAQFZFWD.js.map} +0 -0
  73. /package/dist/{chunk-BRZA7ZCX.js.map → chunk-IXVGBUWI.js.map} +0 -0
  74. /package/dist/{chunk-A3ZAXL5T.js.map → chunk-QCX66KBM.js.map} +0 -0
  75. /package/dist/{chunk-VR6QTK5Z.js.map → chunk-REHVGFJE.js.map} +0 -0
  76. /package/dist/{chunk-SPQSNZMM.js.map → chunk-TVEDNGVP.js.map} +0 -0
  77. /package/dist/{components/common/scroll-affordance.js.map → load-agent-defs-5U5KAURA.js.map} +0 -0
  78. /package/dist/{recompile-project-agents-6G6M2RS6.js.map → recompile-project-agents-KYK44C24.js.map} +0 -0
  79. /package/dist/{load-agent-defs-E67DSYTN.js.map → source-loader-G5I4RNUP.js.map} +0 -0
@@ -3,31 +3,33 @@ import {
3
3
  render
4
4
  } from "../chunk-KIK5EZYD.js";
5
5
  import {
6
- SkillAgentSummary
7
- } from "../chunk-G7NUK3BF.js";
6
+ SkillAgentSummary,
7
+ computeScopeDiff
8
+ } from "../chunk-FQF6VHO3.js";
8
9
  import {
9
10
  otherInstallationsInThisScope,
10
11
  providerFlag,
11
12
  providerNamedBy
12
- } from "../chunk-2RTBSLSR.js";
13
+ } from "../chunk-ORO2T4K2.js";
13
14
  import {
14
15
  BaseCommand
15
- } from "../chunk-LJQXQTFC.js";
16
+ } from "../chunk-IAQFZFWD.js";
16
17
  import {
17
18
  INSTALL_MODE_LABELS,
18
19
  chooseProviderForThisRun,
19
20
  detectInstallation,
20
21
  formatInstallationDisplay,
21
22
  getInstallationInfo,
22
- loadProjectConfig,
23
- providerInUse
24
- } from "../chunk-WVFBBZEP.js";
25
- import "../chunk-7OG635DK.js";
23
+ loadProjectConfig
24
+ } from "../chunk-E45IT3HC.js";
25
+ import {
26
+ getSkillEntryDisplayName
27
+ } from "../chunk-AIBVAYHS.js";
26
28
  import {
27
29
  CLI_COLORS,
28
30
  CLI_INVOKE_COMMAND,
29
31
  DEFAULT_BRANDING
30
- } from "../chunk-MHAQWMNJ.js";
32
+ } from "../chunk-WUSEZFER.js";
31
33
  import "../chunk-GHHJYNAN.js";
32
34
 
33
35
  // src/cli/commands/list.tsx
@@ -79,8 +81,7 @@ var List = class _List extends BaseCommand {
79
81
  chooseProviderForThisRun(named);
80
82
  return;
81
83
  }
82
- const cwd = process.cwd();
83
- const line = await otherInstallationsInThisScope(cwd, providerInUse(cwd));
84
+ const line = await otherInstallationsInThisScope(process.cwd());
84
85
  if (line !== null) this.log(line);
85
86
  }
86
87
  async run() {
@@ -90,18 +91,21 @@ var List = class _List extends BaseCommand {
90
91
  const installation = await detectInstallation();
91
92
  if (!installation) return this.reportNoInstallation();
92
93
  const loaded = await loadProjectConfig(installation.projectDir);
93
- if (!loaded?.config || !process.stdin.isTTY) return this.printInstallationInfo();
94
+ if (loaded === null) return this.printInstallationInfo([]);
95
+ if (!process.stdin.isTTY) {
96
+ return this.printInstallationInfo(skillLinesOf(activeRosterOf(loaded.config)));
97
+ }
94
98
  await showListView(installation, loaded.config);
95
99
  }
96
100
  reportNoInstallation() {
97
101
  this.log("No installation found.");
98
102
  this.log(`Run '${CLI_INVOKE_COMMAND} init' to create one.`);
99
103
  }
100
- async printInstallationInfo() {
104
+ async printInstallationInfo(skillLines) {
101
105
  const info = await getInstallationInfo();
102
106
  if (!info) return;
103
107
  this.log("");
104
- this.log(formatInstallationDisplay(info));
108
+ this.log(formatInstallationDisplay(info, skillLines));
105
109
  this.log("");
106
110
  }
107
111
  };
@@ -112,14 +116,35 @@ async function showListView(installation, config) {
112
116
  {
113
117
  mode: INSTALL_MODE_LABELS[installation.mode],
114
118
  source: config.marketplace,
115
- skillConfigs: config.skills.filter((skill) => !skill.excluded),
116
- agentConfigs: config.agents.filter((agent) => !agent.excluded)
119
+ ...activeRosterOf(config)
117
120
  }
118
121
  )
119
122
  );
120
123
  await waitUntilExit();
121
124
  clear();
122
125
  }
126
+ function activeRosterOf(config) {
127
+ return {
128
+ skillConfigs: config.skills.filter((skill) => !skill.excluded),
129
+ agentConfigs: config.agents.filter((agent) => !agent.excluded)
130
+ };
131
+ }
132
+ function skillLinesOf({ skillConfigs, agentConfigs }) {
133
+ const { projectSkillRows, globalSkillRows } = computeScopeDiff({
134
+ currentSkills: skillConfigs,
135
+ currentAgents: agentConfigs,
136
+ installedSkillConfigs: skillConfigs,
137
+ installedAgentConfigs: agentConfigs,
138
+ isInitMode: false
139
+ });
140
+ return [
141
+ ...projectSkillRows.map((row) => skillLine(row, "project")),
142
+ ...globalSkillRows.map((row) => skillLine(row, "global"))
143
+ ];
144
+ }
145
+ function skillLine(row, scope) {
146
+ return `${getSkillEntryDisplayName(row)} (${scope})`;
147
+ }
123
148
  export {
124
149
  List as default
125
150
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/list.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\n\nimport { Box, Text, useApp } from \"ink\";\nimport { render } from \"../components/render.js\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { CLI_INVOKE_COMMAND, CLI_COLORS, DEFAULT_BRANDING } from \"../consts.js\";\nimport { chooseProviderForThisRun, providerInUse } from \"../lib/installation/install-layout.js\";\nimport {\n otherInstallationsInThisScope,\n providerFlag,\n providerNamedBy,\n} from \"../lib/installation/provider-flag.js\";\nimport { getInstallationInfo, formatInstallationDisplay } from \"../lib/plugins/index.js\";\nimport {\n detectInstallation,\n INSTALL_MODE_LABELS,\n type Installation,\n} from \"../lib/installation/installation.js\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport { SkillAgentSummary } from \"../components/common/skill-agent-summary.js\";\nimport type { AgentScopeConfig, ProjectConfig, SkillConfig } from \"../types/config.js\";\n\ntype ListViewProps = {\n mode: string;\n source?: string | undefined;\n skillConfigs: SkillConfig[];\n agentConfigs: AgentScopeConfig[];\n};\n\n/** The label never shrinks: a value too long for the line wraps beside it instead. */\nconst HeaderRow: React.FC<{ label: string; value: string }> = ({ label, value }) => (\n <Box flexDirection=\"row\" columnGap={1}>\n <Box flexShrink={0}>\n <Text color={CLI_COLORS.WARNING} bold>\n {label}\n </Text>\n </Box>\n <Text color={CLI_COLORS.NEUTRAL}>{value}</Text>\n </Box>\n);\n\nconst ListView: React.FC<ListViewProps> = ({ mode, source, skillConfigs, agentConfigs }) => {\n const { exit } = useApp();\n\n useEffect(() => {\n const timer = setTimeout(() => exit(), 0);\n return () => clearTimeout(timer);\n }, [exit]);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <HeaderRow label=\"Mode\" value={mode} />\n {source && <HeaderRow label=\"Marketplace\" value={source} />}\n </Box>\n\n {/* Installed and current are one configuration, so every row reads unchanged. */}\n <SkillAgentSummary\n skillConfigs={skillConfigs}\n agentConfigs={agentConfigs}\n installedSkillConfigs={skillConfigs}\n installedAgentConfigs={agentConfigs}\n isInitMode={false}\n />\n </Box>\n );\n};\n\nexport default class List extends BaseCommand {\n static summary = \"Show installation information\";\n static description = `Display details about the ${DEFAULT_BRANDING.NAME} installation (local or plugin mode)`;\n static aliases = [\"ls\"];\n\n static flags = { provider: providerFlag() };\n\n static examples = [\n {\n description: \"Show current installation details\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n ];\n\n /** Names the other installation in this scope; reports rather than refuses, like `doctor`. */\n private async sayWhichInstallationThisIs(providerFlagValue: string | undefined): Promise<void> {\n const named = providerNamedBy(providerFlagValue);\n if (named !== undefined) {\n chooseProviderForThisRun(named);\n return;\n }\n\n const cwd = process.cwd();\n const line = await otherInstallationsInThisScope(cwd, providerInUse(cwd));\n if (line !== null) this.log(line);\n }\n\n async run(): Promise<void> {\n const { flags } = await this.parse(List);\n await this.sayWhichInstallationThisIs(flags.provider);\n await this.ensureConfigReadable(process.cwd());\n\n const installation = await detectInstallation();\n if (!installation) return this.reportNoInstallation();\n\n const loaded = await loadProjectConfig(installation.projectDir);\n if (!loaded?.config || !process.stdin.isTTY) return this.printInstallationInfo();\n\n await showListView(installation, loaded.config);\n }\n\n private reportNoInstallation(): void {\n this.log(\"No installation found.\");\n this.log(`Run '${CLI_INVOKE_COMMAND} init' to create one.`);\n }\n\n private async printInstallationInfo(): Promise<void> {\n const info = await getInstallationInfo();\n if (!info) return;\n\n this.log(\"\");\n this.log(formatInstallationDisplay(info));\n this.log(\"\");\n }\n}\n\nasync function showListView(installation: Installation, config: ProjectConfig): Promise<void> {\n const { waitUntilExit, clear } = render(\n <ListView\n mode={INSTALL_MODE_LABELS[installation.mode]}\n source={config.marketplace}\n skillConfigs={config.skills.filter((skill) => !skill.excluded)}\n agentConfigs={config.agents.filter((agent) => !agent.excluded)}\n />,\n );\n\n await waitUntilExit();\n clear();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/commands/list.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\n\nimport { Box, Text, useApp } from \"ink\";\nimport { render } from \"../components/render.js\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { CLI_INVOKE_COMMAND, CLI_COLORS, DEFAULT_BRANDING } from \"../consts.js\";\nimport { chooseProviderForThisRun } from \"../lib/installation/install-layout.js\";\nimport {\n otherInstallationsInThisScope,\n providerFlag,\n providerNamedBy,\n} from \"../lib/installation/provider-flag.js\";\nimport { getInstallationInfo, formatInstallationDisplay } from \"../lib/plugins/index.js\";\nimport {\n detectInstallation,\n INSTALL_MODE_LABELS,\n type Installation,\n} from \"../lib/installation/installation.js\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport { computeScopeDiff, type SkillDiffRow } from \"../lib/configuration/scope-diff.js\";\nimport { getSkillEntryDisplayName } from \"../lib/matrix/matrix-provider.js\";\nimport { SkillAgentSummary } from \"../components/common/skill-agent-summary.js\";\nimport type { AgentScopeConfig, ProjectConfig, SkillConfig, SkillScope } from \"../types/config.js\";\n\ntype ListViewProps = {\n mode: string;\n source?: string | undefined;\n skillConfigs: SkillConfig[];\n agentConfigs: AgentScopeConfig[];\n};\n\ntype ActiveRoster = Pick<ListViewProps, \"skillConfigs\" | \"agentConfigs\">;\n\n/** The label never shrinks: a value too long for the line wraps beside it instead. */\nconst HeaderRow: React.FC<{ label: string; value: string }> = ({ label, value }) => (\n <Box flexDirection=\"row\" columnGap={1}>\n <Box flexShrink={0}>\n <Text color={CLI_COLORS.WARNING} bold>\n {label}\n </Text>\n </Box>\n <Text color={CLI_COLORS.NEUTRAL}>{value}</Text>\n </Box>\n);\n\nconst ListView: React.FC<ListViewProps> = ({ mode, source, skillConfigs, agentConfigs }) => {\n const { exit } = useApp();\n\n useEffect(() => {\n const timer = setTimeout(() => exit(), 0);\n return () => clearTimeout(timer);\n }, [exit]);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <HeaderRow label=\"Mode\" value={mode} />\n {source && <HeaderRow label=\"Marketplace\" value={source} />}\n </Box>\n\n {/* Installed and current are one configuration, so every row reads unchanged. */}\n <SkillAgentSummary\n skillConfigs={skillConfigs}\n agentConfigs={agentConfigs}\n installedSkillConfigs={skillConfigs}\n installedAgentConfigs={agentConfigs}\n isInitMode={false}\n />\n </Box>\n );\n};\n\nexport default class List extends BaseCommand {\n static summary = \"Show installation information\";\n static description = `Display details about the ${DEFAULT_BRANDING.NAME} installation (local or plugin mode)`;\n static aliases = [\"ls\"];\n\n static flags = { provider: providerFlag() };\n\n static examples = [\n {\n description: \"Show current installation details\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n ];\n\n /** Names the other installation in this scope; reports rather than refuses, like `doctor`. */\n private async sayWhichInstallationThisIs(providerFlagValue: string | undefined): Promise<void> {\n const named = providerNamedBy(providerFlagValue);\n if (named !== undefined) {\n chooseProviderForThisRun(named);\n return;\n }\n\n const line = await otherInstallationsInThisScope(process.cwd());\n if (line !== null) this.log(line);\n }\n\n async run(): Promise<void> {\n const { flags } = await this.parse(List);\n await this.sayWhichInstallationThisIs(flags.provider);\n await this.ensureConfigReadable(process.cwd());\n\n const installation = await detectInstallation();\n if (!installation) return this.reportNoInstallation();\n\n const loaded = await loadProjectConfig(installation.projectDir);\n if (loaded === null) return this.printInstallationInfo([]);\n if (!process.stdin.isTTY) {\n return this.printInstallationInfo(skillLinesOf(activeRosterOf(loaded.config)));\n }\n\n await showListView(installation, loaded.config);\n }\n\n private reportNoInstallation(): void {\n this.log(\"No installation found.\");\n this.log(`Run '${CLI_INVOKE_COMMAND} init' to create one.`);\n }\n\n private async printInstallationInfo(skillLines: string[]): Promise<void> {\n const info = await getInstallationInfo();\n if (!info) return;\n\n this.log(\"\");\n this.log(formatInstallationDisplay(info, skillLines));\n this.log(\"\");\n }\n}\n\nasync function showListView(installation: Installation, config: ProjectConfig): Promise<void> {\n const { waitUntilExit, clear } = render(\n <ListView\n mode={INSTALL_MODE_LABELS[installation.mode]}\n source={config.marketplace}\n {...activeRosterOf(config)}\n />,\n );\n\n await waitUntilExit();\n clear();\n}\n\nfunction activeRosterOf(config: ProjectConfig): ActiveRoster {\n return {\n skillConfigs: config.skills.filter((skill) => !skill.excluded),\n agentConfigs: config.agents.filter((agent) => !agent.excluded),\n };\n}\n\n/** The panel's skill rows, read as it reads them: project rows first, each under the panel's name. */\nfunction skillLinesOf({ skillConfigs, agentConfigs }: ActiveRoster): string[] {\n const { projectSkillRows, globalSkillRows } = computeScopeDiff({\n currentSkills: skillConfigs,\n currentAgents: agentConfigs,\n installedSkillConfigs: skillConfigs,\n installedAgentConfigs: agentConfigs,\n isInitMode: false,\n });\n\n return [\n ...projectSkillRows.map((row) => skillLine(row, \"project\")),\n ...globalSkillRows.map((row) => skillLine(row, \"global\")),\n ];\n}\n\nfunction skillLine(row: SkillDiffRow, scope: SkillScope): string {\n return `${getSkillEntryDisplayName(row)} (${scope})`;\n}\n"],"mappings":"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","names":[]}
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../../chunk-LJQXQTFC.js";
5
+ } from "../../chunk-IAQFZFWD.js";
6
6
  import {
7
7
  isDirectoryEmpty,
8
8
  validateKebabCaseName,
9
9
  validateMarketplaceName,
10
10
  writeFile
11
- } from "../../chunk-WVFBBZEP.js";
12
- import "../../chunk-7OG635DK.js";
11
+ } from "../../chunk-E45IT3HC.js";
12
+ import "../../chunk-AIBVAYHS.js";
13
13
  import {
14
14
  CLI_INVOKE_COMMAND,
15
15
  DEFAULT_VERSION,
@@ -19,7 +19,7 @@ import {
19
19
  SKILL_RULES_PATH,
20
20
  STACKS_FILE_PATH,
21
21
  STANDARD_FILES
22
- } from "../../chunk-MHAQWMNJ.js";
22
+ } from "../../chunk-WUSEZFER.js";
23
23
  import "../../chunk-GHHJYNAN.js";
24
24
 
25
25
  // src/cli/commands/new/marketplace.ts
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  loadSource
4
- } from "../chunk-VSPC74SS.js";
5
- import "../chunk-VR6QTK5Z.js";
6
- import "../chunk-ITQF35UQ.js";
7
- import "../chunk-BRZA7ZCX.js";
8
- import "../chunk-EHJIQDXR.js";
4
+ } from "../chunk-R7GKQBZJ.js";
5
+ import "../chunk-REHVGFJE.js";
6
+ import "../chunk-7BHDKEGK.js";
7
+ import "../chunk-IXVGBUWI.js";
8
+ import "../chunk-EFXVYQGT.js";
9
9
  import {
10
10
  BaseCommand
11
- } from "../chunk-LJQXQTFC.js";
11
+ } from "../chunk-IAQFZFWD.js";
12
12
  import {
13
13
  STATUS_MESSAGES
14
- } from "../chunk-WVFBBZEP.js";
14
+ } from "../chunk-E45IT3HC.js";
15
15
  import {
16
16
  plural,
17
17
  stripTerminalControls,
18
18
  truncateText,
19
19
  typedValues
20
- } from "../chunk-7OG635DK.js";
20
+ } from "../chunk-AIBVAYHS.js";
21
21
  import {
22
22
  EDITOR_ADDRESS
23
- } from "../chunk-MHAQWMNJ.js";
23
+ } from "../chunk-WUSEZFER.js";
24
24
  import "../chunk-GHHJYNAN.js";
25
25
 
26
26
  // src/cli/commands/search.ts
@@ -2,21 +2,21 @@
2
2
  import {
3
3
  publishSeedConfig,
4
4
  seedPayloadForInstallation
5
- } from "../chunk-Q4UNHVPX.js";
5
+ } from "../chunk-3PJZ4QNJ.js";
6
6
  import {
7
7
  unofferablePlacementsFound
8
- } from "../chunk-F437ICEG.js";
9
- import "../chunk-A3ZAXL5T.js";
10
- import "../chunk-EHJIQDXR.js";
8
+ } from "../chunk-ECPFYHDX.js";
9
+ import "../chunk-QCX66KBM.js";
10
+ import "../chunk-EFXVYQGT.js";
11
11
  import {
12
12
  providerFlag,
13
13
  providerNamedBy,
14
14
  refuseAnAmbiguousInstallation
15
- } from "../chunk-2RTBSLSR.js";
15
+ } from "../chunk-ORO2T4K2.js";
16
16
  import {
17
17
  BaseCommand,
18
18
  EXIT_CODES
19
- } from "../chunk-LJQXQTFC.js";
19
+ } from "../chunk-IAQFZFWD.js";
20
20
  import {
21
21
  formatZodErrors,
22
22
  getErrorMessage,
@@ -26,15 +26,15 @@ import {
26
26
  sharedIdNamesAFolder,
27
27
  sharedSkillsLeftBehind,
28
28
  warn
29
- } from "../chunk-WVFBBZEP.js";
29
+ } from "../chunk-E45IT3HC.js";
30
30
  import {
31
31
  stripTerminalControls,
32
32
  truncateText,
33
33
  typedEntries
34
- } from "../chunk-7OG635DK.js";
34
+ } from "../chunk-AIBVAYHS.js";
35
35
  import {
36
36
  installableSeedPayloadSchema
37
- } from "../chunk-MHAQWMNJ.js";
37
+ } from "../chunk-WUSEZFER.js";
38
38
  import "../chunk-GHHJYNAN.js";
39
39
 
40
40
  // src/cli/commands/share.ts
@@ -7,33 +7,32 @@ import {
7
7
  } from "../chunk-P6CYS4JK.js";
8
8
  import {
9
9
  summaryPanelBlock
10
- } from "../chunk-Q6WRR4BN.js";
11
- import "../chunk-N33AKFLR.js";
10
+ } from "../chunk-H5E6IO2L.js";
12
11
  import {
13
12
  lazyGateDeps,
14
13
  mutateGlobal,
15
14
  propagateGlobalRemoval
16
- } from "../chunk-VSPC74SS.js";
17
- import "../chunk-VR6QTK5Z.js";
15
+ } from "../chunk-R7GKQBZJ.js";
16
+ import "../chunk-REHVGFJE.js";
18
17
  import {
19
18
  loadAgentDefs
20
- } from "../chunk-ITQF35UQ.js";
21
- import "../chunk-BRZA7ZCX.js";
19
+ } from "../chunk-7BHDKEGK.js";
20
+ import "../chunk-IXVGBUWI.js";
22
21
  import {
23
22
  listAgentFilesOf,
24
23
  splitAgentsByProvenance
25
- } from "../chunk-EHJIQDXR.js";
24
+ } from "../chunk-EFXVYQGT.js";
26
25
  import "../chunk-KIK5EZYD.js";
27
- import "../chunk-G7NUK3BF.js";
26
+ import "../chunk-FQF6VHO3.js";
28
27
  import {
29
28
  providerFlag,
30
29
  providerNamedBy,
31
30
  refuseAnAmbiguousInstallation
32
- } from "../chunk-2RTBSLSR.js";
31
+ } from "../chunk-ORO2T4K2.js";
33
32
  import {
34
33
  BaseCommand,
35
34
  EXIT_CODES
36
- } from "../chunk-LJQXQTFC.js";
35
+ } from "../chunk-IAQFZFWD.js";
37
36
  import {
38
37
  ConfigLoadError,
39
38
  INFO_MESSAGES,
@@ -69,17 +68,17 @@ import {
69
68
  uninstallNeedsTerminal,
70
69
  uninstallSkillMetadataUnreadable,
71
70
  unmarkedAgentsKept
72
- } from "../chunk-WVFBBZEP.js";
71
+ } from "../chunk-E45IT3HC.js";
73
72
  import {
74
73
  plural
75
- } from "../chunk-7OG635DK.js";
74
+ } from "../chunk-AIBVAYHS.js";
76
75
  import {
77
76
  CLAUDE_DIR,
78
77
  DEFAULT_BRANDING,
79
78
  EJECT_SOURCE,
80
79
  STANDARD_FILES,
81
80
  isActiveAt
82
- } from "../chunk-MHAQWMNJ.js";
81
+ } from "../chunk-WUSEZFER.js";
83
82
  import "../chunk-GHHJYNAN.js";
84
83
 
85
84
  // src/cli/commands/uninstall.tsx
@@ -102,23 +101,17 @@ function buildRemovalPlan(target) {
102
101
  }
103
102
  function removalPanel(plan, target) {
104
103
  const kept = target.scope === "project" ? globalEntriesOf(target.config) : NOTHING_KEPT;
104
+ const removed = removedSkills(plan, target);
105
105
  return {
106
106
  skillConfigs: kept.skills,
107
107
  agentConfigs: kept.agents,
108
- installedSkillConfigs: [...removedSkills(plan, target), ...kept.skills],
108
+ installedSkillConfigs: [...removed, ...kept.skills],
109
109
  installedAgentConfigs: [...namedAgentRemovals(plan, target.scope).named, ...kept.agents],
110
110
  isInitMode: false,
111
- skillNames: namesTheCopiesRecord(target.cliSkills),
112
- stackName: void 0
111
+ stackName: void 0,
112
+ headerSkillConfigs: removed.length > 0 ? removed : kept.skills
113
113
  };
114
114
  }
115
- function namesTheCopiesRecord(cliSkills) {
116
- return new Map(
117
- cliSkills.flatMap(
118
- ({ skillId, displayName }) => displayName === void 0 ? [] : [[skillId, displayName]]
119
- )
120
- );
121
- }
122
115
  var NOTHING_KEPT = { skills: [], agents: [] };
123
116
  function globalEntriesOf(config) {
124
117
  if (config === null) return NOTHING_KEPT;
@@ -131,10 +124,18 @@ function removedSkills(plan, target) {
131
124
  const copied = new Set(planEntries(plan, "skills").flatMap((entry) => entry.skillNames));
132
125
  const plugins = new Set(planEntries(plan, "plugins").flatMap((entry) => entry.names));
133
126
  const marketplaceName = target.config?.marketplaceName;
134
- const copies = target.cliSkills.filter(({ dirName }) => copied.has(dirName)).map(({ skillId }) => ({ id: skillId, scope: target.scope, origin: EJECT_SOURCE }));
127
+ const copies = target.cliSkills.filter(({ dirName }) => copied.has(dirName)).map((copy) => copyEntryOf(copy, target.scope));
135
128
  const pluginSkills = (target.config?.skills ?? []).filter((skill) => !skill.excluded).filter((skill) => pluginRefsOf(skill, marketplaceName).some((ref) => plugins.has(ref))).map((skill) => ({ ...skill, scope: target.scope }));
136
129
  return uniqueBy([...copies, ...pluginSkills], (skill) => skill.id);
137
130
  }
131
+ function copyEntryOf({ skillId, displayName }, scope) {
132
+ return {
133
+ id: skillId,
134
+ scope,
135
+ origin: EJECT_SOURCE,
136
+ ...displayName !== void 0 && { displayName }
137
+ };
138
+ }
138
139
  function namedAgentRemovals(plan, scope) {
139
140
  const entries = planEntries(plan, "agents");
140
141
  const names = entries.flatMap((entry) => entry.agentNames);