@thinkingai/ae-cli 6.1.25 → 6.1.27

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 (121) hide show
  1. package/README.md +28 -9
  2. package/README.zh.md +25 -9
  3. package/bin/ae-cli.js +6 -1
  4. package/cli-installation-guide.md +91 -0
  5. package/dist/{auth-LHM7NQPR.js → auth-WA7YGGRT.js} +6 -8
  6. package/dist/automation-VAAQBM7Y.js +459 -0
  7. package/dist/{capability-SJI5KOCK.js → capability-GAAYJ3IQ.js} +6 -6
  8. package/dist/{chunk-KJDOTPYU.js → chunk-3YVEAZUN.js} +59 -26
  9. package/dist/{chunk-KS4DE3MX.js → chunk-5XJYLEVC.js} +4 -4
  10. package/dist/{chunk-BW7JUDEI.js → chunk-6VNIR4AP.js} +514 -213
  11. package/dist/{chunk-5XRQ3CZR.js → chunk-7KU2WNQE.js} +43 -8
  12. package/dist/{chunk-7WZACOAI.js → chunk-AP7YP2NX.js} +2 -2
  13. package/dist/{chunk-XKIW3QMF.js → chunk-AQJPNWZF.js} +3 -3
  14. package/dist/chunk-CI24BDR2.js +43 -0
  15. package/dist/{chunk-SO5LKIWP.js → chunk-CT7QDJS6.js} +2 -2
  16. package/dist/{chunk-DU72X2IO.js → chunk-GHXZK54S.js} +22 -10
  17. package/dist/{chunk-2FJM4HRV.js → chunk-MWIA43UJ.js} +3 -3
  18. package/dist/{chunk-N4BLPJC7.js → chunk-OP44TT4H.js} +1 -1
  19. package/dist/chunk-Q5US7JC5.js +133 -0
  20. package/dist/chunk-RK6GLDGI.js +27 -0
  21. package/dist/chunk-RPBOAQQQ.js +56 -0
  22. package/dist/{chunk-GK7WDY7E.js → chunk-S6M42KND.js} +1 -1
  23. package/dist/{chunk-QYXDJOLA.js → chunk-VZZNLV3I.js} +19 -11
  24. package/dist/{chunk-YVGXGTD6.js → chunk-WNGFSIOB.js} +7 -1
  25. package/dist/{chunk-IG3DYEIR.js → chunk-ZL7SGNIA.js} +5 -3
  26. package/dist/{community-report-client-6VJDDMJJ.js → community-report-client-PEERQCX2.js} +1 -1
  27. package/dist/{config-XQWOPDHN.js → config-JOD5DOPE.js} +4 -4
  28. package/dist/context-NGVFPCBK.js +136 -0
  29. package/dist/{data-integration-XBTCGXQT.js → data-integration-BCLQFTGU.js} +6 -6
  30. package/dist/index.js +123 -46
  31. package/dist/{local-data-upload-client-3P7NIVQ4.js → local-data-upload-client-TWMHFLUA.js} +1 -1
  32. package/dist/memory-CQKH2JAV.js +580 -0
  33. package/dist/{metadata-JRYKNUS5.js → metadata-NR3PHR23.js} +7 -7
  34. package/dist/{model-ZS7HVGKN.js → model-VX5M2CJ6.js} +9 -5
  35. package/dist/{personal-semantic-preference-IDE2GE5T.js → personal-semantic-preference-2RAI36P3.js} +117 -11
  36. package/dist/{project-semantic-36KOCYN7.js → project-semantic-3BUGP3ZM.js} +6 -6
  37. package/dist/{sync-EQLSTUS7.js → sync-RZIAV37C.js} +12 -8
  38. package/dist/{te-agent-Z3HCTKR7.js → te-agent-AORRE2FM.js} +90 -454
  39. package/dist/{te-analysis-5ZZ6YHVH.js → te-analysis-GP7DSQ7Q.js} +297 -20
  40. package/dist/{te-community-Z7JACGF3.js → te-community-42M7ICDO.js} +3 -3
  41. package/dist/{te-dataops-F7GQOIS6.js → te-dataops-BNKNZ4F2.js} +5 -5
  42. package/dist/{te-engage-RNRMYDO3.js → te-engage-2CO6LRCX.js} +6 -6
  43. package/dist/{te-experiment-BTAC2UNK.js → te-experiment-652CLXMU.js} +6 -6
  44. package/dist/{te-kb-QJLJEX5K.js → te-kb-ULATOTQ3.js} +494 -214
  45. package/dist/{te-system-IXC43QHZ.js → te-system-UGHVKBVV.js} +10 -9
  46. package/dist/{te-team-BIZIKIHZ.js → te-team-YA6SNOJ3.js} +6 -6
  47. package/dist/things-DTCOQIQB.js +1091 -0
  48. package/dist/{update-W2SGQNKT.js → update-ESNYKUVR.js} +59 -51
  49. package/dist/workspace-JEOHKFPX.js +554 -0
  50. package/package.json +21 -9
  51. package/skills/ae-agent/SKILL.md +91 -139
  52. package/skills/ae-agent/references/add-model.md +1 -1
  53. package/skills/ae-agent/references/create-agent.md +1 -1
  54. package/skills/ae-agent/references/find-archived-conversations.md +12 -5
  55. package/skills/ae-agent/references/get-agent.md +1 -1
  56. package/skills/ae-agent/references/list-agents.md +2 -2
  57. package/skills/ae-agent/references/list-models.md +2 -2
  58. package/skills/ae-agent/references/restore-conversation.md +3 -1
  59. package/skills/ae-analysis/SKILL.md +15 -6
  60. package/skills/ae-analysis/references/ai_models/funnel.md +5 -3
  61. package/skills/ae-analysis/references/ai_models.md +27 -0
  62. package/skills/ae-analysis/references/command_index.md +12 -4
  63. package/skills/ae-analysis/references/dashboard_move.md +21 -0
  64. package/skills/ae-analysis/references/dashboard_report_add.md +2 -0
  65. package/skills/ae-analysis/references/dashboard_report_get.md +19 -0
  66. package/skills/ae-analysis/references/dashboard_report_update.md +27 -0
  67. package/skills/ae-analysis/references/dashboard_update.md +1 -1
  68. package/skills/ae-analysis/references/event_report_presentation.md +76 -0
  69. package/skills/ae-analysis/references/feedback_submit.md +37 -0
  70. package/skills/ae-analysis/references/metadata_resolution.md +15 -0
  71. package/skills/ae-analysis/references/personal_semantic_preference_review.md +9 -0
  72. package/skills/ae-analysis/references/personal_semantic_preference_review_list.md +7 -0
  73. package/skills/ae-analysis/references/personal_semantic_preference_submit.md +7 -0
  74. package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +68 -27
  75. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +40 -1
  76. package/skills/ae-analysis/references/report_create.md +13 -3
  77. package/skills/ae-analysis/references/report_get.md +5 -1
  78. package/skills/ae-analysis/references/report_update.md +15 -4
  79. package/skills/ae-analysis/references/system_query_monitor_overview.md +2 -0
  80. package/skills/ae-analysis/references/system_query_task_cancel.md +2 -0
  81. package/skills/ae-analysis/references/system_query_task_export.md +6 -2
  82. package/skills/ae-analysis/references/system_query_task_get.md +2 -0
  83. package/skills/ae-analysis/references/system_query_task_list.md +7 -3
  84. package/skills/ae-analysis/references/system_query_task_options.md +2 -2
  85. package/skills/ae-analysis/references/system_query_task_realtime_list.md +15 -0
  86. package/skills/ae-analysis/references/user_tag_models.md +2 -0
  87. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-empty-skeleton.mjs +105 -0
  88. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +337 -22
  89. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/company-kb.mjs +21 -8
  90. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-rules.md +24 -11
  91. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +66 -0
  92. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +1 -0
  93. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/package-wiki-source-zip.mjs +109 -40
  94. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/plan-kb-source-sync.mjs +1 -1
  95. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/prepare-compile-schema.mjs +64 -0
  96. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/refresh-state-parts.mjs +91 -0
  97. package/skills/ae-automation/SKILL.md +16 -0
  98. package/skills/ae-automation/references/cli.md +53 -0
  99. package/skills/ae-automation/references/command_index.md +17 -0
  100. package/skills/ae-capability/SKILL.md +15 -6
  101. package/skills/ae-current-context/SKILL.md +3 -2
  102. package/skills/ae-kb/SKILL.md +62 -12
  103. package/skills/ae-kb/references/analysis-workflow.md +73 -36
  104. package/skills/ae-kb/references/query-workflow.md +67 -33
  105. package/skills/ae-kb/references/schema-import.md +5 -3
  106. package/skills/ae-kb/references/source-mutations.md +6 -4
  107. package/skills/ae-kb/references/text-sources.md +53 -0
  108. package/skills/ae-kb-discovery/SKILL.md +1 -1
  109. package/skills/ae-team/SKILL.md +23 -17
  110. package/skills/ae-things/SKILL.md +85 -0
  111. package/skills/ae-things/references/cli.md +103 -0
  112. package/skills/ae-things-progress/SKILL.md +43 -0
  113. package/skills/ae-things-review/SKILL.md +42 -0
  114. package/skills/ae-workspace/SKILL.md +43 -0
  115. package/skills/ae-workspace/references/commands.md +51 -0
  116. package/dist/chunk-E2JKXMVO.js +0 -29
  117. package/dist/context-M3HDGEIR.js +0 -46
  118. package/dist/memory-6APEB2JB.js +0 -892
  119. package/skills/ae-agent/references/create-automation.md +0 -125
  120. package/skills/ae-agent/references/list-automations.md +0 -56
  121. package/skills/ae-agent/references/update-automation.md +0 -107
@@ -2,7 +2,7 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  import {
3
3
  LocalDataUploadError,
4
4
  logger
5
- } from "./chunk-YVGXGTD6.js";
5
+ } from "./chunk-WNGFSIOB.js";
6
6
 
7
7
  // src/core/local-data-upload-client.ts
8
8
  import { createHash } from "crypto";
@@ -0,0 +1,580 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ buildMemoryCliUrl,
4
+ getMemoryCli,
5
+ patchMemoryCli,
6
+ postMemoryCli
7
+ } from "./chunk-RPBOAQQQ.js";
8
+ import {
9
+ currentAgentSpaceId
10
+ } from "./chunk-RK6GLDGI.js";
11
+ import "./chunk-CI24BDR2.js";
12
+ import "./chunk-3YVEAZUN.js";
13
+ import "./chunk-Y74WTIKJ.js";
14
+ import "./chunk-GHXZK54S.js";
15
+ import "./chunk-ZL7SGNIA.js";
16
+ import {
17
+ CliValidationError
18
+ } from "./chunk-WNGFSIOB.js";
19
+
20
+ // src/commands/memory/shared.ts
21
+ var MEMORY_SERVICE = "memory";
22
+ var MEMORY_STATUSES = ["active", "deleted"];
23
+ var CANDIDATE_VIEWS = ["mine", "pending"];
24
+ var CANDIDATE_STATUSES = ["pending", "approved", "rejected", "withdrawn", "conflicted"];
25
+ function optional(ctx, name) {
26
+ const value = ctx.str(name).trim();
27
+ return value || void 0;
28
+ }
29
+ function envOptional(name) {
30
+ const value = process.env[name]?.trim();
31
+ return value || void 0;
32
+ }
33
+ function compact(input) {
34
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
35
+ }
36
+ function query(values) {
37
+ const params = new URLSearchParams();
38
+ for (const [key, value] of Object.entries(values)) {
39
+ if (value !== void 0 && value !== "") params.set(key, String(value));
40
+ }
41
+ const text = params.toString();
42
+ return text ? `?${text}` : "";
43
+ }
44
+ function assertOneOf(flag, value, allowed) {
45
+ if (value && !allowed.includes(value)) {
46
+ throw new Error(`--${flag} must be one of: ${allowed.join(", ")}`);
47
+ }
48
+ }
49
+ function version(ctx) {
50
+ const value = ctx.num("version");
51
+ if (!Number.isInteger(value) || value < 1) throw new Error("--version must be a positive integer");
52
+ return value;
53
+ }
54
+ function conversationId(ctx) {
55
+ return optional(ctx, "conversationId") ?? envOptional("TE_AGENT_CONVERSATION_ID");
56
+ }
57
+ function agentId(ctx) {
58
+ const value = optional(ctx, "agentId") ?? envOptional("TE_AGENT_CURRENT_AGENT_ID");
59
+ if (!value) throw new Error("--agent-id is required outside an Agent conversation");
60
+ return value;
61
+ }
62
+ function targetQuery(ctx) {
63
+ const workspaceId = optional(ctx, "workspaceId") ?? currentAgentSpaceId();
64
+ const currentConversationId = conversationId(ctx);
65
+ if (!workspaceId && !currentConversationId) {
66
+ throw new Error(
67
+ "Memory target is required. Provide --workspace-id or --conversation-id, or run inside an AgentSpace conversation."
68
+ );
69
+ }
70
+ return query({ agentSpaceId: workspaceId, conversationId: currentConversationId });
71
+ }
72
+ function targetPath(ctx) {
73
+ return `target${targetQuery(ctx)}`;
74
+ }
75
+ async function resolveMemoryTarget(ctx) {
76
+ return getMemoryCli(ctx, targetPath(ctx));
77
+ }
78
+ function resourcePath(agentSpaceId, suffix) {
79
+ return `agent-spaces/${encodeURIComponent(agentSpaceId)}/${suffix.replace(/^\/+/, "")}`;
80
+ }
81
+ function previewResourcePath(ctx, suffix) {
82
+ const id = optional(ctx, "workspaceId") ?? currentAgentSpaceId() ?? ":resolved-workspace-id";
83
+ return resourcePath(id, suffix);
84
+ }
85
+ function targetDryRun(ctx, method, suffix, body2) {
86
+ return {
87
+ method,
88
+ url: buildMemoryCliUrl(ctx, previewResourcePath(ctx, suffix)),
89
+ params: { target_url: buildMemoryCliUrl(ctx, targetPath(ctx)) },
90
+ ...body2 === void 0 ? {} : { body: body2 }
91
+ };
92
+ }
93
+ async function targetGet(ctx, suffix) {
94
+ const target = await resolveMemoryTarget(ctx);
95
+ return getMemoryCli(ctx, resourcePath(target.agentSpaceId, suffix));
96
+ }
97
+ async function targetPost(ctx, suffix, body2) {
98
+ const target = await resolveMemoryTarget(ctx);
99
+ return postMemoryCli(ctx, resourcePath(target.agentSpaceId, suffix), body2);
100
+ }
101
+ async function targetPatch(ctx, suffix, body2) {
102
+ const target = await resolveMemoryTarget(ctx);
103
+ return patchMemoryCli(ctx, resourcePath(target.agentSpaceId, suffix), body2);
104
+ }
105
+ var targetFlags = [
106
+ { name: "workspace-id", type: "string", required: false, desc: "AgentSpace ID; defaults to the current AgentSpace or resolves from the current conversation" },
107
+ { name: "conversation-id", type: "string", required: false, desc: "Conversation ID used to verify or resolve the AgentSpace target" }
108
+ ];
109
+ function memoryBody(ctx) {
110
+ return compact({ title: optional(ctx, "title"), content: ctx.str("content"), scopeType: "space", agentId: null, conversationId: conversationId(ctx) });
111
+ }
112
+ function memoryMutationBody(ctx) {
113
+ return compact({ title: optional(ctx, "title"), content: ctx.str("content"), scopeType: "space", agentId: null, version: version(ctx), conversationId: conversationId(ctx) });
114
+ }
115
+ function memoryStateCommand(action) {
116
+ return {
117
+ service: MEMORY_SERVICE,
118
+ command: `+${action}`,
119
+ description: `${action[0].toUpperCase()}${action.slice(1)} an AgentSpace memory`,
120
+ flags: [...targetFlags, { name: "id", type: "string", required: true, desc: "Memory ID" }, { name: "version", type: "number", required: true, desc: "Current memory version" }],
121
+ risk: action === "delete" ? "high-risk-write" : "write",
122
+ preflight: action === "delete" ? version : void 0,
123
+ validate: version,
124
+ dryRun: (ctx) => targetDryRun(ctx, "POST", `memories/${encodeURIComponent(ctx.str("id"))}/${action}`, compact({ version: version(ctx), conversationId: conversationId(ctx) })),
125
+ execute: (ctx) => targetPost(ctx, `memories/${encodeURIComponent(ctx.str("id"))}/${action}`, compact({ version: version(ctx), conversationId: conversationId(ctx) }))
126
+ };
127
+ }
128
+ function draftContentBody(ctx) {
129
+ return compact({ version: version(ctx), title: optional(ctx, "title"), content: ctx.str("content"), scopeType: "space", agentId: null });
130
+ }
131
+ function draftActionCommand(action) {
132
+ const contentFlags = action === "submit" ? [{ name: "title", type: "string", required: false, desc: "Final title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Final content" }] : [];
133
+ return {
134
+ service: MEMORY_SERVICE,
135
+ command: `+draft-${action}`,
136
+ description: `${action === "delete" ? "Delete" : "Submit"} a private memory draft`,
137
+ flags: [...targetFlags, { name: "draft-id", type: "string", required: true, desc: "Draft ID" }, { name: "version", type: "number", required: true, desc: "Current draft version" }, ...contentFlags],
138
+ risk: action === "delete" ? "high-risk-write" : "write",
139
+ preflight: action === "delete" ? version : void 0,
140
+ validate: version,
141
+ dryRun: (ctx) => targetDryRun(ctx, "POST", `drafts/${encodeURIComponent(ctx.str("draftId"))}/${action}`, action === "delete" ? { version: version(ctx) } : draftContentBody(ctx)),
142
+ execute: (ctx) => targetPost(ctx, `drafts/${encodeURIComponent(ctx.str("draftId"))}/${action}`, action === "delete" ? { version: version(ctx) } : draftContentBody(ctx))
143
+ };
144
+ }
145
+ function candidateBody(ctx) {
146
+ const targetMemoryId = optional(ctx, "targetMemoryId");
147
+ const targetMemoryVersion = ctx.optionalNum("targetMemoryVersion");
148
+ if (targetMemoryId === void 0 !== (targetMemoryVersion === void 0)) {
149
+ throw new Error("--target-memory-id and --target-memory-version must be provided together");
150
+ }
151
+ return compact({ title: optional(ctx, "title"), content: ctx.str("content"), scopeType: "space", agentId: null, targetMemoryId, targetMemoryVersion });
152
+ }
153
+ function candidateActionCommand(action) {
154
+ const reasonFlag = action === "reject" ? [{ name: "reason", type: "string", required: false, maxLength: 1e3, desc: "Optional rejection reason" }] : [];
155
+ return {
156
+ service: MEMORY_SERVICE,
157
+ command: `+candidate-${action}`,
158
+ description: `${action[0].toUpperCase()}${action.slice(1)} a shared AgentSpace memory candidate`,
159
+ flags: [...targetFlags, { name: "candidate-id", type: "string", required: true, desc: "Candidate ID" }, { name: "version", type: "number", required: true, desc: "Current candidate version" }, ...reasonFlag],
160
+ risk: "write",
161
+ validate: version,
162
+ dryRun: (ctx) => targetDryRun(ctx, "POST", `candidates/${encodeURIComponent(ctx.str("candidateId"))}/${action}`, compact({ version: version(ctx), reason: action === "reject" ? optional(ctx, "reason") : void 0 })),
163
+ execute: (ctx) => targetPost(ctx, `candidates/${encodeURIComponent(ctx.str("candidateId"))}/${action}`, compact({ version: version(ctx), reason: action === "reject" ? optional(ctx, "reason") : void 0 }))
164
+ };
165
+ }
166
+ function settingsBody(ctx) {
167
+ const autoExtractionEnabled = ctx.json("autoExtractionEnabled");
168
+ const excluded = ctx.json("excluded");
169
+ const currentConversationId = conversationId(ctx);
170
+ if (autoExtractionEnabled === void 0 && excluded === void 0) throw new Error("Provide --auto-extraction-enabled or --excluded");
171
+ if (excluded !== void 0 && !currentConversationId) throw new Error("--excluded requires --conversation-id outside an Agent conversation");
172
+ return compact({ autoExtractionEnabled, conversationId: excluded === void 0 ? void 0 : currentConversationId, excluded });
173
+ }
174
+ function retiredCommand(name, replacement, flags = []) {
175
+ return {
176
+ service: MEMORY_SERVICE,
177
+ command: name,
178
+ hidden: true,
179
+ description: "Retired legacy user-memory command",
180
+ flags,
181
+ risk: "read",
182
+ execute: async () => {
183
+ throw new CliValidationError(`${name} was retired with AgentSpace memory v2.`, {
184
+ code: "MEMORY_COMMAND_RETIRED",
185
+ hint: replacement
186
+ });
187
+ }
188
+ };
189
+ }
190
+ var retiredIdFlag = { name: "id", type: "string", required: false, desc: "Retired resource ID" };
191
+ var retiredAgentFlag = { name: "agent-id", type: "string", required: false, desc: "Retired Agent target" };
192
+ var retiredScopeFlag = { name: "scope", type: "string", required: false, desc: "Retired memory scope" };
193
+
194
+ // src/commands/memory/list.ts
195
+ var listMemories = {
196
+ service: MEMORY_SERVICE,
197
+ command: "+list",
198
+ description: "List memories in the resolved AgentSpace",
199
+ flags: [...targetFlags, { name: "status", type: "string", required: false, default: "active", desc: "active | deleted" }, { name: "query", type: "string", required: false, desc: "Search text in memory title or content" }, { name: "cursor", type: "string", required: false, desc: "Pagination cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
200
+ risk: "read",
201
+ validate: (ctx) => assertOneOf("status", ctx.str("status"), MEMORY_STATUSES),
202
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `memories${query({ status: ctx.str("status") || "active", query: optional(ctx, "query"), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`),
203
+ execute: (ctx) => targetGet(ctx, `memories${query({ status: ctx.str("status") || "active", query: optional(ctx, "query"), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`)
204
+ };
205
+
206
+ // src/commands/memory/get.ts
207
+ var getMemory = {
208
+ service: MEMORY_SERVICE,
209
+ command: "+get",
210
+ description: "Get one AgentSpace memory and recent revisions",
211
+ flags: [...targetFlags, { name: "id", type: "string", required: true, desc: "Memory ID" }],
212
+ risk: "read",
213
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `memories/${encodeURIComponent(ctx.str("id"))}`),
214
+ execute: (ctx) => targetGet(ctx, `memories/${encodeURIComponent(ctx.str("id"))}`)
215
+ };
216
+
217
+ // src/commands/memory/create.ts
218
+ var createMemory = {
219
+ service: MEMORY_SERVICE,
220
+ command: "+create",
221
+ description: "Create an AgentSpace memory or submit it for shared-space review",
222
+ flags: [...targetFlags, { name: "title", type: "string", required: false, desc: "Optional memory title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Memory content, up to 4000 characters" }],
223
+ risk: "write",
224
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "memories", memoryBody(ctx)),
225
+ execute: (ctx) => targetPost(ctx, "memories", memoryBody(ctx))
226
+ };
227
+
228
+ // src/commands/memory/update.ts
229
+ var updateMemory = {
230
+ service: MEMORY_SERVICE,
231
+ command: "+update",
232
+ description: "Update an AgentSpace memory using optimistic concurrency",
233
+ flags: [...targetFlags, { name: "id", type: "string", required: true, desc: "Memory ID" }, { name: "version", type: "number", required: true, desc: "Current memory version" }, { name: "title", type: "string", required: false, desc: "Replacement title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Replacement content" }],
234
+ risk: "write",
235
+ validate: version,
236
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", `memories/${encodeURIComponent(ctx.str("id"))}`, memoryMutationBody(ctx)),
237
+ execute: (ctx) => targetPatch(ctx, `memories/${encodeURIComponent(ctx.str("id"))}`, memoryMutationBody(ctx))
238
+ };
239
+
240
+ // src/commands/memory/delete.ts
241
+ var deleteMemory = memoryStateCommand("delete");
242
+
243
+ // src/commands/memory/history.ts
244
+ var historyMemory = {
245
+ service: MEMORY_SERVICE,
246
+ command: "+history",
247
+ description: "List revision history for one AgentSpace memory",
248
+ flags: [...targetFlags, { name: "id", type: "string", required: true, desc: "Memory ID" }, { name: "cursor", type: "number", required: false, min: 1, desc: "Revision cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
249
+ risk: "read",
250
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `memories/${encodeURIComponent(ctx.str("id"))}/history${query({ cursor: ctx.optionalNum("cursor"), limit: ctx.num("limit") || 20 })}`),
251
+ execute: (ctx) => targetGet(ctx, `memories/${encodeURIComponent(ctx.str("id"))}/history${query({ cursor: ctx.optionalNum("cursor"), limit: ctx.num("limit") || 20 })}`)
252
+ };
253
+
254
+ // src/commands/memory/pin.ts
255
+ var pinMemory = memoryStateCommand("pin");
256
+
257
+ // src/commands/memory/unpin.ts
258
+ var unpinMemory = memoryStateCommand("unpin");
259
+
260
+ // src/commands/memory/restore.ts
261
+ var restoreMemory = memoryStateCommand("restore");
262
+
263
+ // src/commands/memory/context.ts
264
+ var contextMemory = {
265
+ service: MEMORY_SERVICE,
266
+ command: "+context",
267
+ description: "Preview the memory context that one Agent would receive",
268
+ flags: [...targetFlags, { name: "agent-id", type: "string", required: false, desc: "Agent ID; defaults to TE_AGENT_CURRENT_AGENT_ID" }, { name: "limit", type: "number", required: false, min: 1, max: 50, desc: "Maximum memories, 1-50" }],
269
+ risk: "read",
270
+ validate: agentId,
271
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "context", compact({ agentId: agentId(ctx), conversationId: conversationId(ctx), limit: ctx.optionalNum("limit") })),
272
+ execute: (ctx) => targetPost(ctx, "context", compact({ agentId: agentId(ctx), conversationId: conversationId(ctx), limit: ctx.optionalNum("limit") }))
273
+ };
274
+
275
+ // src/commands/memory/extract.ts
276
+ var extractMemory = {
277
+ service: MEMORY_SERVICE,
278
+ command: "+extract",
279
+ description: "Start asynchronous memory extraction from an AgentSpace conversation",
280
+ flags: targetFlags,
281
+ risk: "write",
282
+ validate: (ctx) => {
283
+ if (!conversationId(ctx)) throw new Error("--conversation-id is required outside an Agent conversation");
284
+ },
285
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "extract", { conversationId: conversationId(ctx) }),
286
+ execute: (ctx) => targetPost(ctx, "extract", { conversationId: conversationId(ctx) })
287
+ };
288
+
289
+ // src/commands/memory/source-list.ts
290
+ var listMemorySources = {
291
+ service: MEMORY_SERVICE,
292
+ command: "+source-list",
293
+ description: "List conversations eligible as AgentSpace memory extraction sources",
294
+ flags: [...targetFlags, { name: "cursor", type: "string", required: false, desc: "Pagination cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
295
+ risk: "read",
296
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `sources${query({ cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`),
297
+ execute: (ctx) => targetGet(ctx, `sources${query({ cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`)
298
+ };
299
+
300
+ // src/commands/memory/job-list.ts
301
+ var listMemoryJobs = {
302
+ service: MEMORY_SERVICE,
303
+ command: "+job-list",
304
+ description: "List AgentSpace memory extraction jobs",
305
+ flags: [...targetFlags, { name: "cursor", type: "string", required: false, desc: "Pagination cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
306
+ risk: "read",
307
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `jobs${query({ conversationId: conversationId(ctx), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`),
308
+ execute: (ctx) => targetGet(ctx, `jobs${query({ conversationId: conversationId(ctx), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`)
309
+ };
310
+
311
+ // src/commands/memory/job-get.ts
312
+ var getMemoryJob = {
313
+ service: MEMORY_SERVICE,
314
+ command: "+job-get",
315
+ description: "Get one AgentSpace memory extraction job",
316
+ flags: [...targetFlags, { name: "job-id", type: "string", required: true, desc: "Extraction job ID returned by +extract or +job-list" }],
317
+ risk: "read",
318
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `jobs/${encodeURIComponent(ctx.str("jobId"))}`),
319
+ execute: (ctx) => targetGet(ctx, `jobs/${encodeURIComponent(ctx.str("jobId"))}`)
320
+ };
321
+
322
+ // src/commands/memory/draft-list.ts
323
+ var listMemoryDrafts = {
324
+ service: MEMORY_SERVICE,
325
+ command: "+draft-list",
326
+ description: "List private memory drafts created by the current user",
327
+ flags: [...targetFlags, { name: "cursor", type: "string", required: false, desc: "Pagination cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
328
+ risk: "read",
329
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `drafts${query({ cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`),
330
+ execute: (ctx) => targetGet(ctx, `drafts${query({ cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`)
331
+ };
332
+
333
+ // src/commands/memory/draft-get.ts
334
+ var getMemoryDraft = {
335
+ service: MEMORY_SERVICE,
336
+ command: "+draft-get",
337
+ description: "Get one private memory draft",
338
+ flags: [...targetFlags, { name: "draft-id", type: "string", required: true, desc: "Draft ID" }],
339
+ risk: "read",
340
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `drafts/${encodeURIComponent(ctx.str("draftId"))}`),
341
+ execute: (ctx) => targetGet(ctx, `drafts/${encodeURIComponent(ctx.str("draftId"))}`)
342
+ };
343
+
344
+ // src/commands/memory/draft-update.ts
345
+ var updateMemoryDraft = {
346
+ service: MEMORY_SERVICE,
347
+ command: "+draft-update",
348
+ description: "Update a private memory draft",
349
+ flags: [...targetFlags, { name: "draft-id", type: "string", required: true, desc: "Draft ID" }, { name: "version", type: "number", required: true, desc: "Current draft version" }, { name: "title", type: "string", required: false, desc: "Replacement title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Replacement content" }],
350
+ risk: "write",
351
+ validate: version,
352
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", `drafts/${encodeURIComponent(ctx.str("draftId"))}`, draftContentBody(ctx)),
353
+ execute: (ctx) => targetPatch(ctx, `drafts/${encodeURIComponent(ctx.str("draftId"))}`, draftContentBody(ctx))
354
+ };
355
+
356
+ // src/commands/memory/draft-delete.ts
357
+ var deleteMemoryDraft = draftActionCommand("delete");
358
+
359
+ // src/commands/memory/draft-submit.ts
360
+ var submitMemoryDraft = draftActionCommand("submit");
361
+
362
+ // src/commands/memory/candidate-list.ts
363
+ var listMemoryCandidates = {
364
+ service: MEMORY_SERVICE,
365
+ command: "+candidate-list",
366
+ description: "List shared AgentSpace memory candidates",
367
+ flags: [...targetFlags, { name: "view", type: "string", required: false, default: "mine", desc: "mine | pending" }, { name: "status", type: "string", required: false, desc: "Filter the mine view by candidate status" }, { name: "cursor", type: "string", required: false, desc: "Pagination cursor" }, { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }],
368
+ risk: "read",
369
+ validate: (ctx) => {
370
+ assertOneOf("view", ctx.str("view"), CANDIDATE_VIEWS);
371
+ assertOneOf("status", optional(ctx, "status"), CANDIDATE_STATUSES);
372
+ if (ctx.str("view") === "pending" && optional(ctx, "status")) throw new Error("--status is only valid with --view mine");
373
+ },
374
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `candidates${query({ view: ctx.str("view") || "mine", status: optional(ctx, "status"), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`),
375
+ execute: (ctx) => targetGet(ctx, `candidates${query({ view: ctx.str("view") || "mine", status: optional(ctx, "status"), cursor: optional(ctx, "cursor"), limit: ctx.num("limit") || 20 })}`)
376
+ };
377
+
378
+ // src/commands/memory/candidate-get.ts
379
+ var getMemoryCandidate = {
380
+ service: MEMORY_SERVICE,
381
+ command: "+candidate-get",
382
+ description: "Get one shared AgentSpace memory candidate",
383
+ flags: [...targetFlags, { name: "candidate-id", type: "string", required: true, desc: "Candidate ID" }],
384
+ risk: "read",
385
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `candidates/${encodeURIComponent(ctx.str("candidateId"))}`),
386
+ execute: (ctx) => targetGet(ctx, `candidates/${encodeURIComponent(ctx.str("candidateId"))}`)
387
+ };
388
+
389
+ // src/commands/memory/candidate-submit.ts
390
+ var submitMemoryCandidate = {
391
+ service: MEMORY_SERVICE,
392
+ command: "+candidate-submit",
393
+ description: "Submit a new or replacement memory candidate to a shared AgentSpace",
394
+ flags: [...targetFlags, { name: "title", type: "string", required: false, desc: "Optional candidate title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Candidate content" }, { name: "target-memory-id", type: "string", required: false, desc: "Existing memory ID for a replacement proposal" }, { name: "target-memory-version", type: "number", required: false, min: 1, desc: "Current version of the replacement target" }],
395
+ risk: "write",
396
+ validate: candidateBody,
397
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "candidates", candidateBody(ctx)),
398
+ execute: (ctx) => targetPost(ctx, "candidates", candidateBody(ctx))
399
+ };
400
+
401
+ // src/commands/memory/candidate-approve.ts
402
+ var approveMemoryCandidate = candidateActionCommand("approve");
403
+
404
+ // src/commands/memory/candidate-reject.ts
405
+ var rejectMemoryCandidate = candidateActionCommand("reject");
406
+
407
+ // src/commands/memory/candidate-withdraw.ts
408
+ var withdrawMemoryCandidate = candidateActionCommand("withdraw");
409
+
410
+ // src/commands/memory/candidate-resubmit.ts
411
+ function body(ctx) {
412
+ return compact({ version: version(ctx), title: optional(ctx, "title"), content: ctx.str("content"), scopeType: "space", agentId: null });
413
+ }
414
+ var resubmitMemoryCandidate = {
415
+ service: MEMORY_SERVICE,
416
+ command: "+candidate-resubmit",
417
+ description: "Resubmit a rejected, withdrawn, or conflicted memory candidate",
418
+ flags: [...targetFlags, { name: "candidate-id", type: "string", required: true, desc: "Previous candidate ID" }, { name: "version", type: "number", required: true, desc: "Current candidate version" }, { name: "title", type: "string", required: false, desc: "Replacement title" }, { name: "content", type: "string", required: true, maxLength: 4e3, desc: "Replacement content" }],
419
+ risk: "write",
420
+ validate: version,
421
+ dryRun: (ctx) => targetDryRun(ctx, "POST", `candidates/${encodeURIComponent(ctx.str("candidateId"))}/resubmit`, body(ctx)),
422
+ execute: (ctx) => targetPost(ctx, `candidates/${encodeURIComponent(ctx.str("candidateId"))}/resubmit`, body(ctx))
423
+ };
424
+
425
+ // src/commands/memory/settings-get.ts
426
+ var getMemorySettings = {
427
+ service: MEMORY_SERVICE,
428
+ command: "+settings-get",
429
+ description: "Get AgentSpace memory extraction settings",
430
+ flags: targetFlags,
431
+ risk: "read",
432
+ dryRun: (ctx) => targetDryRun(ctx, "GET", `settings${query({ conversationId: conversationId(ctx) })}`),
433
+ execute: (ctx) => targetGet(ctx, `settings${query({ conversationId: conversationId(ctx) })}`)
434
+ };
435
+
436
+ // src/commands/memory/settings-update.ts
437
+ var updateMemorySettings = {
438
+ service: MEMORY_SERVICE,
439
+ command: "+settings-update",
440
+ description: "Update AgentSpace automatic memory extraction settings",
441
+ flags: [...targetFlags, { name: "auto-extraction-enabled", type: "boolean", required: false, desc: "Enable or disable automatic extraction for the AgentSpace" }, { name: "excluded", type: "boolean", required: false, desc: "Exclude or include the target conversation" }],
442
+ risk: "write",
443
+ validate: settingsBody,
444
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", "settings", settingsBody(ctx)),
445
+ execute: (ctx) => targetPatch(ctx, "settings", settingsBody(ctx))
446
+ };
447
+
448
+ // src/commands/memory/retired-submit-candidates.ts
449
+ var retiredSubmitCandidates = retiredCommand("+submit-candidates", "Use ae-cli memory +candidate-submit.", [
450
+ { name: "candidates-json", type: "string", required: false, desc: "Retired candidate JSON input" },
451
+ { name: "stdin", type: "boolean", required: false, desc: "Retired stdin input switch" },
452
+ { name: "source-type", type: "string", required: false, desc: "Retired source type" },
453
+ { name: "source-name", type: "string", required: false, desc: "Retired source name" },
454
+ { name: "source-agent", type: "string", required: false, desc: "Retired source Agent name" },
455
+ { name: "source-session-id", type: "string", required: false, desc: "Retired source session ID" },
456
+ retiredScopeFlag,
457
+ retiredAgentFlag,
458
+ { name: "auto-approve", type: "boolean", required: false, desc: "Retired automatic approval switch" }
459
+ ]);
460
+
461
+ // src/commands/memory/retired-pending-list.ts
462
+ var retiredPendingList = retiredCommand("+pending-list", "Use ae-cli memory +candidate-list --view pending.");
463
+
464
+ // src/commands/memory/retired-pending-approve.ts
465
+ var retiredPendingApprove = retiredCommand("+pending-approve", "Use ae-cli memory +candidate-approve.", [retiredIdFlag]);
466
+
467
+ // src/commands/memory/retired-pending-reject.ts
468
+ var retiredPendingReject = retiredCommand("+pending-reject", "Use ae-cli memory +candidate-reject.", [retiredIdFlag]);
469
+
470
+ // src/commands/memory/retired-organize.ts
471
+ var retiredOrganize = retiredCommand("+organize", "Use ae-cli memory +extract.", [retiredAgentFlag, retiredScopeFlag]);
472
+
473
+ // src/commands/memory/retired-default-get.ts
474
+ var retiredDefaultGet = retiredCommand("+default-get", "Use ae-cli workspace capability list.", [retiredAgentFlag]);
475
+
476
+ // src/commands/memory/retired-default-save.ts
477
+ var retiredDefaultSave = retiredCommand("+default-save", "Use ae-cli workspace capability set.", [
478
+ retiredAgentFlag,
479
+ { name: "selection-json", type: "string", required: false, desc: "Retired session selection JSON" }
480
+ ]);
481
+
482
+ // src/commands/memory/retired-default-clear.ts
483
+ var retiredDefaultClear = retiredCommand("+default-clear", "Use ae-cli workspace capability set.", [retiredAgentFlag]);
484
+
485
+ // src/commands/memory/retired-mark-used.ts
486
+ var retiredMarkUsed = retiredCommand("+mark-used", "Memory usage accounting is handled automatically by the AgentSpace runtime.", [
487
+ { name: "ids", type: "json", required: false, desc: "Retired memory ID list" },
488
+ retiredAgentFlag
489
+ ]);
490
+
491
+ // src/commands/memory/retired-write-context.ts
492
+ var retiredWriteContext = retiredCommand("+write-context", "Use ae-cli memory +context; AgentSpace runtime injection is automatic.", [
493
+ { name: "file", type: "string", required: false, desc: "Retired local output file" },
494
+ retiredAgentFlag,
495
+ { name: "limit", type: "number", required: false, desc: "Retired context limit" }
496
+ ]);
497
+
498
+ // src/commands/memory/index.ts
499
+ var commands = [
500
+ listMemories,
501
+ getMemory,
502
+ createMemory,
503
+ updateMemory,
504
+ deleteMemory,
505
+ historyMemory,
506
+ pinMemory,
507
+ unpinMemory,
508
+ restoreMemory,
509
+ contextMemory,
510
+ extractMemory,
511
+ listMemorySources,
512
+ listMemoryJobs,
513
+ getMemoryJob,
514
+ listMemoryDrafts,
515
+ getMemoryDraft,
516
+ updateMemoryDraft,
517
+ deleteMemoryDraft,
518
+ submitMemoryDraft,
519
+ listMemoryCandidates,
520
+ getMemoryCandidate,
521
+ submitMemoryCandidate,
522
+ approveMemoryCandidate,
523
+ rejectMemoryCandidate,
524
+ withdrawMemoryCandidate,
525
+ resubmitMemoryCandidate,
526
+ getMemorySettings,
527
+ updateMemorySettings,
528
+ retiredSubmitCandidates,
529
+ retiredPendingList,
530
+ retiredPendingApprove,
531
+ retiredPendingReject,
532
+ retiredOrganize,
533
+ retiredDefaultGet,
534
+ retiredDefaultSave,
535
+ retiredDefaultClear,
536
+ retiredMarkUsed,
537
+ retiredWriteContext
538
+ ];
539
+ var memory_default = commands;
540
+ export {
541
+ approveMemoryCandidate,
542
+ contextMemory,
543
+ createMemory,
544
+ memory_default as default,
545
+ deleteMemory,
546
+ deleteMemoryDraft,
547
+ extractMemory,
548
+ getMemory,
549
+ getMemoryCandidate,
550
+ getMemoryDraft,
551
+ getMemoryJob,
552
+ getMemorySettings,
553
+ historyMemory,
554
+ listMemories,
555
+ listMemoryCandidates,
556
+ listMemoryDrafts,
557
+ listMemoryJobs,
558
+ listMemorySources,
559
+ pinMemory,
560
+ rejectMemoryCandidate,
561
+ restoreMemory,
562
+ resubmitMemoryCandidate,
563
+ retiredDefaultClear,
564
+ retiredDefaultGet,
565
+ retiredDefaultSave,
566
+ retiredMarkUsed,
567
+ retiredOrganize,
568
+ retiredPendingApprove,
569
+ retiredPendingList,
570
+ retiredPendingReject,
571
+ retiredSubmitCandidates,
572
+ retiredWriteContext,
573
+ submitMemoryCandidate,
574
+ submitMemoryDraft,
575
+ unpinMemory,
576
+ updateMemory,
577
+ updateMemoryDraft,
578
+ updateMemorySettings,
579
+ withdrawMemoryCandidate
580
+ };
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  withAsyncArtifactLifecycle
4
- } from "./chunk-XKIW3QMF.js";
4
+ } from "./chunk-AQJPNWZF.js";
5
5
  import {
6
6
  createCapabilityCommand
7
- } from "./chunk-2FJM4HRV.js";
8
- import "./chunk-QYXDJOLA.js";
7
+ } from "./chunk-MWIA43UJ.js";
8
+ import "./chunk-VZZNLV3I.js";
9
9
  import {
10
10
  registerCapabilityGatewayRoute
11
11
  } from "./chunk-KPQY44JQ.js";
12
- import "./chunk-BW7JUDEI.js";
12
+ import "./chunk-6VNIR4AP.js";
13
13
  import "./chunk-Y74WTIKJ.js";
14
- import "./chunk-DU72X2IO.js";
15
- import "./chunk-IG3DYEIR.js";
16
- import "./chunk-YVGXGTD6.js";
14
+ import "./chunk-GHXZK54S.js";
15
+ import "./chunk-ZL7SGNIA.js";
16
+ import "./chunk-WNGFSIOB.js";
17
17
 
18
18
  // src/commands/metadata/shared.ts
19
19
  function createCapabilityCommand2(config) {
@@ -6,17 +6,20 @@ import {
6
6
  MultiselectCancelled,
7
7
  promptSingleCheckboxSelect
8
8
  } from "./chunk-7K24F7T2.js";
9
+ import {
10
+ assertLegacyWorkspaceCommand
11
+ } from "./chunk-RK6GLDGI.js";
9
12
  import {
10
13
  TeAgentApiError,
11
14
  TeAgentCredentialsError,
12
15
  getClaudeConfigDir,
13
16
  getSandboxModels,
14
17
  postSandboxModelSelection
15
- } from "./chunk-KJDOTPYU.js";
18
+ } from "./chunk-3YVEAZUN.js";
16
19
  import "./chunk-Y74WTIKJ.js";
17
- import "./chunk-DU72X2IO.js";
18
- import "./chunk-IG3DYEIR.js";
19
- import "./chunk-YVGXGTD6.js";
20
+ import "./chunk-GHXZK54S.js";
21
+ import "./chunk-ZL7SGNIA.js";
22
+ import "./chunk-WNGFSIOB.js";
20
23
 
21
24
  // src/commands/model/index.ts
22
25
  import { existsSync, readFileSync } from "fs";
@@ -54,6 +57,7 @@ function isCurrentModel(model, current) {
54
57
  return model.scope === "system" && Boolean(current.providerModelId) && model.modelId === current.providerModelId;
55
58
  }
56
59
  async function runModelPicker() {
60
+ assertLegacyWorkspaceCommand("model");
57
61
  const current = readCurrentModelSelection();
58
62
  const models = await getSandboxModels();
59
63
  if (models.length === 0) {
@@ -99,7 +103,7 @@ async function runModelPicker() {
99
103
  `);
100
104
  }
101
105
  function registerModel(program) {
102
- program.command("model").description("Choose and switch the current workspace model (te-agent sandbox only)").action(async () => {
106
+ program.command("model").description("Choose and switch the legacy sandbox workspace model (not AgentSpace)").action(async () => {
103
107
  try {
104
108
  await runModelPicker();
105
109
  } catch (err) {