dexto 1.6.12 → 1.6.13

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 (68) hide show
  1. package/README.md +10 -2
  2. package/dist/analytics/events.d.ts +1 -1
  3. package/dist/analytics/events.d.ts.map +1 -1
  4. package/dist/cli/commands/agents/install.d.ts.map +1 -0
  5. package/dist/cli/commands/{install.js → agents/install.js} +4 -4
  6. package/dist/cli/commands/{list-agents.d.ts → agents/list.d.ts} +1 -1
  7. package/dist/cli/commands/agents/list.d.ts.map +1 -0
  8. package/dist/cli/commands/{list-agents.js → agents/list.js} +2 -2
  9. package/dist/cli/commands/agents/register.js +5 -5
  10. package/dist/cli/commands/{sync-agents.d.ts → agents/sync.d.ts} +10 -2
  11. package/dist/cli/commands/agents/sync.d.ts.map +1 -0
  12. package/dist/cli/commands/{sync-agents.js → agents/sync.js} +54 -5
  13. package/dist/cli/commands/agents/uninstall.d.ts +18 -0
  14. package/dist/cli/commands/agents/uninstall.d.ts.map +1 -0
  15. package/dist/cli/commands/agents/uninstall.js +141 -0
  16. package/dist/cli/commands/deploy/client.d.ts +44 -0
  17. package/dist/cli/commands/deploy/client.d.ts.map +1 -0
  18. package/dist/cli/commands/deploy/client.js +232 -0
  19. package/dist/cli/commands/deploy/config.d.ts +81 -0
  20. package/dist/cli/commands/deploy/config.d.ts.map +1 -0
  21. package/dist/cli/commands/deploy/config.js +144 -0
  22. package/dist/cli/commands/deploy/entry-agent.d.ts +3 -0
  23. package/dist/cli/commands/deploy/entry-agent.d.ts.map +1 -0
  24. package/dist/cli/commands/deploy/entry-agent.js +22 -0
  25. package/dist/cli/commands/deploy/index.d.ts +9 -0
  26. package/dist/cli/commands/deploy/index.d.ts.map +1 -0
  27. package/dist/cli/commands/deploy/index.js +204 -0
  28. package/dist/cli/commands/deploy/links.d.ts +3 -0
  29. package/dist/cli/commands/deploy/links.d.ts.map +1 -0
  30. package/dist/cli/commands/deploy/links.js +53 -0
  31. package/dist/cli/commands/deploy/register.d.ts +6 -0
  32. package/dist/cli/commands/deploy/register.d.ts.map +1 -0
  33. package/dist/cli/commands/deploy/register.js +75 -0
  34. package/dist/cli/commands/deploy/snapshot.d.ts +12 -0
  35. package/dist/cli/commands/deploy/snapshot.d.ts.map +1 -0
  36. package/dist/cli/commands/deploy/snapshot.js +76 -0
  37. package/dist/cli/commands/deploy/state.d.ts +21 -0
  38. package/dist/cli/commands/deploy/state.d.ts.map +1 -0
  39. package/dist/cli/commands/deploy/state.js +122 -0
  40. package/dist/cli/commands/index.d.ts +6 -4
  41. package/dist/cli/commands/index.d.ts.map +1 -1
  42. package/dist/cli/commands/index.js +6 -4
  43. package/dist/cli/commands/setup.d.ts.map +1 -1
  44. package/dist/cli/commands/setup.js +304 -31
  45. package/dist/cli/commands/uninstall.d.ts +9 -12
  46. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  47. package/dist/cli/commands/uninstall.js +99 -113
  48. package/dist/cli/commands/upgrade.d.ts +15 -0
  49. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  50. package/dist/cli/commands/upgrade.js +106 -0
  51. package/dist/cli/modes/cli.d.ts.map +1 -1
  52. package/dist/cli/modes/cli.js +0 -12
  53. package/dist/cli/utils/config-validation.d.ts.map +1 -1
  54. package/dist/cli/utils/config-validation.js +34 -20
  55. package/dist/cli/utils/self-management.d.ts +93 -0
  56. package/dist/cli/utils/self-management.d.ts.map +1 -0
  57. package/dist/cli/utils/self-management.js +423 -0
  58. package/dist/cli/utils/version-check.d.ts +1 -1
  59. package/dist/cli/utils/version-check.d.ts.map +1 -1
  60. package/dist/cli/utils/version-check.js +53 -19
  61. package/dist/index-main.js +59 -2
  62. package/dist/webui/assets/{index-CNiOYnOb.js → index-UDAdxmci.js} +187 -187
  63. package/dist/webui/index.html +1 -1
  64. package/package.json +13 -11
  65. package/dist/cli/commands/install.d.ts.map +0 -1
  66. package/dist/cli/commands/list-agents.d.ts.map +0 -1
  67. package/dist/cli/commands/sync-agents.d.ts.map +0 -1
  68. /package/dist/cli/commands/{install.d.ts → agents/install.d.ts} +0 -0
package/README.md CHANGED
@@ -98,14 +98,21 @@ The coding agent is just one example of what you can build. Create your own agen
98
98
  ### Install
99
99
 
100
100
  ```bash
101
- # Install globally via npm
102
- npm install -g dexto
101
+ # macOS / Linux / WSL (native installer, recommended)
102
+ curl -fsSL https://dexto.ai/install | bash
103
+
104
+ # Windows PowerShell
105
+ irm https://dexto.ai/install.ps1 | iex
103
106
 
104
107
  # Or build from source
105
108
  git clone https://github.com/truffle-ai/dexto.git
106
109
  cd dexto && pnpm install && pnpm install-cli
107
110
  ```
108
111
 
112
+ Upgrade/uninstall and migration troubleshooting live in docs:
113
+ - Installation guide: https://docs.dexto.ai/docs/getting-started/installation
114
+ - CLI command reference: https://docs.dexto.ai/docs/guides/cli/overview
115
+
109
116
  ### Run
110
117
 
111
118
  ```bash
@@ -606,6 +613,7 @@ Options:
606
613
 
607
614
  Commands:
608
615
  setup Configure global preferences
616
+ deploy Deploy current workspace to cloud
609
617
  agents install <agents...> Install agents from registry
610
618
  agents list List available agents
611
619
  session list|history Manage sessions
@@ -55,7 +55,7 @@ export interface SetupEvent {
55
55
  model: string;
56
56
  hadApiKeyBefore?: boolean;
57
57
  setupMode: 'interactive' | 'non-interactive';
58
- setupVariant?: 'quick-start' | 'custom' | 'dexto-nova';
58
+ setupVariant?: 'quick-start' | 'custom' | 'dexto-nova' | 'codex-chatgpt';
59
59
  defaultMode?: string;
60
60
  hasBaseURL?: boolean;
61
61
  apiKeySkipped?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/analytics/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agents/install.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAMb,CAAC;AAEd,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAwK1E,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAuKf"}
@@ -1,12 +1,12 @@
1
- // packages/cli/src/cli/commands/install.ts
1
+ // packages/cli/src/cli/commands/agents/install.ts
2
2
  import { existsSync, statSync } from 'fs';
3
3
  import path from 'path';
4
4
  import { z } from 'zod';
5
5
  import * as p from '@clack/prompts';
6
6
  import { getDextoGlobalPath, loadBundledRegistryAgents } from '@dexto/agent-management';
7
- import { textOrExit } from '../utils/prompt-helpers.js';
8
- import { installBundledAgent, installCustomAgent } from '../../utils/agent-helpers.js';
9
- import { capture } from '../../analytics/index.js';
7
+ import { textOrExit } from '../../utils/prompt-helpers.js';
8
+ import { installBundledAgent, installCustomAgent } from '../../../utils/agent-helpers.js';
9
+ import { capture } from '../../../analytics/index.js';
10
10
  // Zod schema for install command validation
11
11
  const InstallCommandSchema = z
12
12
  .object({
@@ -19,4 +19,4 @@ export type ListAgentsCommandOptionsInput = z.input<typeof ListAgentsCommandSche
19
19
  */
20
20
  export declare function handleListAgentsCommand(options: ListAgentsCommandOptionsInput): Promise<void>;
21
21
  export {};
22
- //# sourceMappingURL=list-agents.d.ts.map
22
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agents/list.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAMhB,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAChF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAiIpF;;GAEG;AACH,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,6BAA6B,GACvC,OAAO,CAAC,IAAI,CAAC,CAmIf"}
@@ -1,11 +1,11 @@
1
- // packages/cli/src/cli/commands/list-agents.ts
1
+ // packages/cli/src/cli/commands/agents/list.ts
2
2
  import { existsSync } from 'fs';
3
3
  import { promises as fs } from 'fs';
4
4
  import path from 'path';
5
5
  import chalk from 'chalk';
6
6
  import { z } from 'zod';
7
7
  import { getDextoGlobalPath, globalPreferencesExist, loadGlobalPreferences, loadBundledRegistryAgents, } from '@dexto/agent-management';
8
- import { getProviderDisplayName } from '../utils/provider-setup.js';
8
+ import { getProviderDisplayName } from '../../utils/provider-setup.js';
9
9
  // Zod schema for list-agents command validation
10
10
  const ListAgentsCommandSchema = z
11
11
  .object({
@@ -1,6 +1,6 @@
1
1
  import { withAnalytics, safeExit, ExitSignal } from '../../../analytics/wrapper.js';
2
2
  export function registerAgentsCommand({ program }) {
3
- const agentsCommand = program.command('agents').description('Manage agents');
3
+ const agentsCommand = program.command('agents').alias('agent').description('Manage agents');
4
4
  agentsCommand
5
5
  .command('install [agents...]')
6
6
  .description('Install agents from registry or custom YAML files/directories')
@@ -16,7 +16,7 @@ Examples:
16
16
  $ dexto agents install ./my-agent-dir/ Install custom agent from directory (interactive)`)
17
17
  .action(withAnalytics('agents install', async (agents = [], options) => {
18
18
  try {
19
- const { handleInstallCommand } = await import('../install.js');
19
+ const { handleInstallCommand } = await import('./install.js');
20
20
  await handleInstallCommand(agents, options);
21
21
  safeExit('agents install', 0);
22
22
  }
@@ -34,7 +34,7 @@ Examples:
34
34
  .option('--force', 'Force uninstall even if agent is protected (e.g., coding-agent)')
35
35
  .action(withAnalytics('agents uninstall', async (agents, options) => {
36
36
  try {
37
- const { handleUninstallCommand } = await import('../uninstall.js');
37
+ const { handleUninstallCommand } = await import('./uninstall.js');
38
38
  await handleUninstallCommand(agents, options);
39
39
  safeExit('agents uninstall', 0);
40
40
  }
@@ -53,7 +53,7 @@ Examples:
53
53
  .option('--available', 'Show only available agents')
54
54
  .action(withAnalytics('agents list', async (options) => {
55
55
  try {
56
- const { handleListAgentsCommand } = await import('../list-agents.js');
56
+ const { handleListAgentsCommand } = await import('./list.js');
57
57
  await handleListAgentsCommand(options);
58
58
  safeExit('agents list', 0);
59
59
  }
@@ -71,7 +71,7 @@ Examples:
71
71
  .option('--force', 'Update all agents without prompting')
72
72
  .action(withAnalytics('agents sync', async (options) => {
73
73
  try {
74
- const { handleSyncAgentsCommand } = await import('../sync-agents.js');
74
+ const { handleSyncAgentsCommand } = await import('./sync.js');
75
75
  await handleSyncAgentsCommand(options);
76
76
  safeExit('agents sync', 0);
77
77
  }
@@ -1,3 +1,4 @@
1
+ import { type AgentRegistryEntry } from '@dexto/agent-management';
1
2
  /**
2
3
  * Options for the sync-agents command
3
4
  */
@@ -8,7 +9,14 @@ export interface SyncAgentsCommandOptions {
8
9
  force?: boolean;
9
10
  /** Minimal output - used when called from startup prompt */
10
11
  quiet?: boolean;
12
+ /** Restrict sync to specific bundled agent IDs */
13
+ agentIds?: string[];
11
14
  }
15
+ export interface BundledSyncTarget {
16
+ agentId: string;
17
+ agentEntry: AgentRegistryEntry;
18
+ }
19
+ export declare function getBundledSyncTargetForAgentPath(agentPath: string): BundledSyncTarget | null;
12
20
  /**
13
21
  * Quick check if any installed agents have updates available
14
22
  *
@@ -17,7 +25,7 @@ export interface SyncAgentsCommandOptions {
17
25
  *
18
26
  * @returns true if should prompt for sync
19
27
  */
20
- export declare function shouldPromptForSync(): Promise<boolean>;
28
+ export declare function shouldPromptForSync(agentPath?: string): Promise<boolean>;
21
29
  /**
22
30
  * Main handler for the sync-agents command
23
31
  *
@@ -31,4 +39,4 @@ export declare function shouldPromptForSync(): Promise<boolean>;
31
39
  * ```
32
40
  */
33
41
  export declare function handleSyncAgentsCommand(options: SyncAgentsCommandOptions): Promise<void>;
34
- //# sourceMappingURL=sync-agents.d.ts.map
42
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agents/sync.ts"],"names":[],"mappings":"AASA,OAAO,EAKH,KAAK,kBAAkB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,wCAAwC;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAoBD,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;CAClC;AA0BD,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAuB5F;AAwLD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyC9E;AAoDD;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqO9F"}
@@ -1,11 +1,50 @@
1
- // packages/cli/src/cli/commands/sync-agents.ts
1
+ // packages/cli/src/cli/commands/agents/sync.ts
2
2
  import { promises as fs } from 'fs';
3
3
  import { createHash } from 'crypto';
4
4
  import path from 'path';
5
+ import { realpathSync } from 'fs';
5
6
  import chalk from 'chalk';
6
7
  import * as p from '@clack/prompts';
7
8
  import { logger } from '@dexto/core';
8
9
  import { getDextoGlobalPath, resolveBundledScript, copyDirectory, loadBundledRegistryAgents, } from '@dexto/agent-management';
10
+ function normalizeComparablePath(filePath) {
11
+ try {
12
+ return realpathSync(filePath);
13
+ }
14
+ catch {
15
+ return path.resolve(filePath);
16
+ }
17
+ }
18
+ function getInstalledMainConfigPath(agentId, agentEntry) {
19
+ const installedRoot = path.join(getDextoGlobalPath('agents'), agentId);
20
+ if (agentEntry.source.endsWith('/')) {
21
+ if (!agentEntry.main) {
22
+ return null;
23
+ }
24
+ return path.join(installedRoot, agentEntry.main);
25
+ }
26
+ return path.join(installedRoot, path.basename(agentEntry.source));
27
+ }
28
+ export function getBundledSyncTargetForAgentPath(agentPath) {
29
+ try {
30
+ const normalizedAgentPath = normalizeComparablePath(agentPath);
31
+ const bundledAgents = loadBundledRegistryAgents();
32
+ for (const [agentId, agentEntry] of Object.entries(bundledAgents)) {
33
+ const installedMainConfigPath = getInstalledMainConfigPath(agentId, agentEntry);
34
+ if (!installedMainConfigPath) {
35
+ continue;
36
+ }
37
+ if (normalizeComparablePath(installedMainConfigPath) === normalizedAgentPath) {
38
+ return { agentId, agentEntry };
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ catch (error) {
44
+ logger.debug(`Failed to resolve sync target for agent path '${agentPath}': ${error instanceof Error ? error.message : String(error)}`);
45
+ return null;
46
+ }
47
+ }
9
48
  /**
10
49
  * Calculate SHA256 hash of a file
11
50
  */
@@ -177,9 +216,18 @@ async function getAgentStatus(agentId, agentEntry) {
177
216
  *
178
217
  * @returns true if should prompt for sync
179
218
  */
180
- export async function shouldPromptForSync() {
219
+ export async function shouldPromptForSync(agentPath) {
181
220
  try {
182
221
  const bundledAgents = loadBundledRegistryAgents();
222
+ if (agentPath) {
223
+ const syncTarget = getBundledSyncTargetForAgentPath(agentPath);
224
+ if (!syncTarget) {
225
+ return false;
226
+ }
227
+ const bundledHash = await getBundledAgentHash(syncTarget.agentEntry);
228
+ const installedHash = await getInstalledAgentHash(syncTarget.agentId, syncTarget.agentEntry);
229
+ return Boolean(bundledHash && installedHash && bundledHash !== installedHash);
230
+ }
183
231
  const installedAgentIds = await getInstalledAgentIds();
184
232
  for (const agentId of installedAgentIds) {
185
233
  const agentEntry = bundledAgents[agentId];
@@ -258,7 +306,7 @@ function formatStatus(status) {
258
306
  * ```
259
307
  */
260
308
  export async function handleSyncAgentsCommand(options) {
261
- const { list = false, force = false, quiet = false } = options;
309
+ const { list = false, force = false, quiet = false, agentIds = [] } = options;
262
310
  if (!quiet) {
263
311
  p.intro(chalk.cyan('Agent Sync'));
264
312
  }
@@ -267,11 +315,12 @@ export async function handleSyncAgentsCommand(options) {
267
315
  try {
268
316
  // Load bundled registry (uses existing function from agent-management)
269
317
  const bundledAgents = loadBundledRegistryAgents();
270
- const bundledAgentIds = Object.keys(bundledAgents);
318
+ const targetAgentIds = new Set(agentIds);
319
+ const bundledAgentIds = Object.keys(bundledAgents).filter((agentId) => targetAgentIds.size === 0 || targetAgentIds.has(agentId));
271
320
  // Get installed agents
272
321
  const installedAgentIds = await getInstalledAgentIds();
273
322
  // Find custom agents (installed but not in bundled registry)
274
- const customAgentIds = installedAgentIds.filter((id) => !bundledAgents[id]);
323
+ const customAgentIds = targetAgentIds.size === 0 ? installedAgentIds.filter((id) => !bundledAgents[id]) : [];
275
324
  // Check status of all bundled agents
276
325
  const agentInfos = [];
277
326
  for (const agentId of bundledAgentIds) {
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ declare const UninstallCommandSchema: z.ZodObject<{
3
+ agents: z.ZodArray<z.ZodString, "many">;
4
+ all: z.ZodDefault<z.ZodBoolean>;
5
+ force: z.ZodDefault<z.ZodBoolean>;
6
+ }, "strict", z.ZodTypeAny, {
7
+ agents: string[];
8
+ force: boolean;
9
+ all: boolean;
10
+ }, {
11
+ agents: string[];
12
+ force?: boolean | undefined;
13
+ all?: boolean | undefined;
14
+ }>;
15
+ export type UninstallCommandOptions = z.output<typeof UninstallCommandSchema>;
16
+ export declare function handleUninstallCommand(agents: string[], options: Partial<UninstallCommandOptions>): Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agents/uninstall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,sBAAsB;;;;;;;;;;;;EAMf,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAiC9E,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAkHf"}
@@ -0,0 +1,141 @@
1
+ // packages/cli/src/cli/commands/agents/uninstall.ts
2
+ import { z } from 'zod';
3
+ import { getAgentRegistry } from '@dexto/agent-management';
4
+ import { capture } from '../../../analytics/index.js';
5
+ // Zod schema for uninstall command validation
6
+ const UninstallCommandSchema = z
7
+ .object({
8
+ agents: z.array(z.string().min(1, 'Agent name cannot be empty')),
9
+ all: z.boolean().default(false),
10
+ force: z.boolean().default(false),
11
+ })
12
+ .strict();
13
+ /**
14
+ * Validate uninstall command arguments
15
+ */
16
+ async function validateUninstallCommand(agents, options) {
17
+ const registry = getAgentRegistry();
18
+ // Basic structure validation
19
+ const validated = UninstallCommandSchema.parse({
20
+ ...options,
21
+ agents,
22
+ });
23
+ // Business logic validation
24
+ const installedAgents = await registry.getInstalledAgents();
25
+ if (installedAgents.length === 0) {
26
+ throw new Error('No agents are currently installed.');
27
+ }
28
+ if (!validated.all && validated.agents.length === 0) {
29
+ throw new Error(`No agents specified. Use agent names or --all flag. Installed agents: ${installedAgents.join(', ')}`);
30
+ }
31
+ return validated;
32
+ }
33
+ export async function handleUninstallCommand(agents, options) {
34
+ const registry = getAgentRegistry();
35
+ // Validate command with Zod
36
+ const validated = await validateUninstallCommand(agents, options);
37
+ const installedAgents = await registry.getInstalledAgents();
38
+ if (installedAgents.length === 0) {
39
+ console.log('📋 No agents are currently installed.');
40
+ return;
41
+ }
42
+ // Determine which agents to uninstall
43
+ let agentsToUninstall;
44
+ if (validated.all) {
45
+ agentsToUninstall = installedAgents;
46
+ console.log(`📋 Uninstalling all ${agentsToUninstall.length} installed agents...`);
47
+ }
48
+ else {
49
+ agentsToUninstall = validated.agents;
50
+ // Validate all specified agents are actually installed
51
+ const notInstalled = agentsToUninstall.filter((agent) => !installedAgents.includes(agent));
52
+ if (notInstalled.length > 0) {
53
+ throw new Error(`Agents not installed: ${notInstalled.join(', ')}. ` +
54
+ `Installed agents: ${installedAgents.join(', ')}`);
55
+ }
56
+ }
57
+ console.log(`🗑️ Uninstalling ${agentsToUninstall.length} agents...`);
58
+ let successCount = 0;
59
+ let errorCount = 0;
60
+ const errors = [];
61
+ const uninstalled = [];
62
+ const failed = [];
63
+ // Uninstall each agent
64
+ for (const agentName of agentsToUninstall) {
65
+ try {
66
+ console.log(`\n🗑️ Uninstalling ${agentName}...`);
67
+ await registry.uninstallAgent(agentName, validated.force);
68
+ successCount++;
69
+ console.log(`✅ ${agentName} uninstalled successfully`);
70
+ uninstalled.push(agentName);
71
+ // Per-agent analytics for successful uninstall
72
+ try {
73
+ capture('dexto_uninstall_agent', {
74
+ agent: agentName,
75
+ status: 'uninstalled',
76
+ force: validated.force,
77
+ });
78
+ }
79
+ catch {
80
+ // Analytics failures should not block CLI execution.
81
+ }
82
+ }
83
+ catch (error) {
84
+ errorCount++;
85
+ const errorMsg = `Failed to uninstall ${agentName}: ${error instanceof Error ? error.message : String(error)}`;
86
+ errors.push(errorMsg);
87
+ failed.push(agentName);
88
+ console.error(`❌ ${errorMsg}`);
89
+ // Per-agent analytics for failed uninstall
90
+ try {
91
+ capture('dexto_uninstall_agent', {
92
+ agent: agentName,
93
+ status: 'failed',
94
+ error_message: error instanceof Error ? error.message : String(error),
95
+ force: validated.force,
96
+ });
97
+ }
98
+ catch {
99
+ // Analytics failures should not block CLI execution.
100
+ }
101
+ }
102
+ }
103
+ // Emit analytics for both single- and multi-agent cases
104
+ try {
105
+ capture('dexto_uninstall', {
106
+ requested: agentsToUninstall,
107
+ uninstalled,
108
+ failed,
109
+ successCount,
110
+ errorCount,
111
+ });
112
+ }
113
+ catch {
114
+ // Analytics failures should not block CLI execution.
115
+ }
116
+ // For single agent operations, throw error if it failed (after emitting analytics)
117
+ if (agentsToUninstall.length === 1) {
118
+ if (errorCount > 0) {
119
+ throw new Error(errors[0]);
120
+ }
121
+ return;
122
+ }
123
+ // Show summary if more than 1 agent uninstalled
124
+ console.log(`\n📊 Uninstallation Summary:`);
125
+ console.log(`✅ Successfully uninstalled: ${successCount}`);
126
+ if (errorCount > 0) {
127
+ console.log(`❌ Failed to uninstall: ${errorCount}`);
128
+ errors.forEach((error) => {
129
+ console.log(` • ${error}`);
130
+ });
131
+ }
132
+ if (errorCount > 0 && successCount === 0) {
133
+ throw new Error('All uninstallations failed');
134
+ }
135
+ else if (errorCount > 0) {
136
+ console.log(`⚠️ Some uninstallations failed, but ${successCount} succeeded.`);
137
+ }
138
+ else {
139
+ console.log(`🎉 All agents uninstalled successfully!`);
140
+ }
141
+ }
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ import type { DeployAgent } from './config.js';
3
+ declare const CloudAgentStateSchema: z.ZodObject<{
4
+ status: z.ZodString;
5
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
6
+ status: z.ZodString;
7
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
8
+ status: z.ZodString;
9
+ }, z.ZodTypeAny, "passthrough">>;
10
+ export interface DeployCloudAgentResult {
11
+ cloudAgentId: string;
12
+ agentUrl: string;
13
+ state: z.output<typeof CloudAgentStateSchema>;
14
+ }
15
+ export interface CloudAgentStatusResult {
16
+ cloudAgentId: string;
17
+ agentUrl: string;
18
+ state: z.output<typeof CloudAgentStateSchema>;
19
+ stale: boolean;
20
+ }
21
+ export interface CloudAgentStopResult {
22
+ cloudAgentId: string;
23
+ agentUrl: string;
24
+ stopped: boolean;
25
+ alreadyStopped: boolean;
26
+ snapshotStatus: string;
27
+ }
28
+ export interface CloudAgentDeleteResult {
29
+ cloudAgentId: string;
30
+ agentUrl: string;
31
+ }
32
+ export declare function resolveSandboxBaseUrl(): string;
33
+ export declare function createDeployClient(): {
34
+ deployWorkspace(input: {
35
+ agent: DeployAgent;
36
+ snapshotPath: string;
37
+ cloudAgentId?: string;
38
+ }): Promise<DeployCloudAgentResult>;
39
+ getCloudAgent(cloudAgentId: string): Promise<CloudAgentStatusResult>;
40
+ stopCloudAgent(cloudAgentId: string): Promise<CloudAgentStopResult>;
41
+ deleteCloudAgent(cloudAgentId: string): Promise<CloudAgentDeleteResult>;
42
+ };
43
+ export {};
44
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,QAAA,MAAM,qBAAqB;;;;;;gCAIT,CAAC;AAyEnB,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,qBAAqB,IAAI,MAAM,CAY9C;AAuED,wBAAgB,kBAAkB;2BAEG;QACzB,KAAK,EAAE,WAAW,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,sBAAsB,CAAC;gCAsCD,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;iCAkBvC,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;mCA0BpC,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;EAgBpF"}