@thinkingai/ae-cli 6.0.53 → 6.0.55

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-RQBO6MTY.js} +9 -11
  6. package/dist/automation-VAAQBM7Y.js +459 -0
  7. package/dist/{capability-F2RIR5DS.js → capability-JRIFC4AJ.js} +6 -6
  8. package/dist/{chunk-647BRKZK.js → chunk-374V5R6N.js} +3 -3
  9. package/dist/{chunk-KJDOTPYU.js → chunk-3YVEAZUN.js} +59 -26
  10. package/dist/{chunk-KS4DE3MX.js → chunk-5XJYLEVC.js} +4 -4
  11. package/dist/{chunk-BW7JUDEI.js → chunk-6VNIR4AP.js} +514 -213
  12. package/dist/{chunk-5XRQ3CZR.js → chunk-7KU2WNQE.js} +43 -8
  13. package/dist/{chunk-7WZACOAI.js → chunk-AP7YP2NX.js} +2 -2
  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-N4BLPJC7.js → chunk-OP44TT4H.js} +1 -1
  18. package/dist/chunk-Q5US7JC5.js +133 -0
  19. package/dist/{chunk-PGCIKZRE.js → chunk-RGYPSEYD.js} +3 -3
  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-SICKWZ2A.js} +8 -8
  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 +125 -48
  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-V5ZDTKWZ.js → metadata-EMFGUI2W.js} +7 -7
  34. package/dist/{model-ZS7HVGKN.js → model-VX5M2CJ6.js} +9 -5
  35. package/dist/{personal-semantic-preference-2XANU3F6.js → personal-semantic-preference-SLWVVYZ4.js} +117 -11
  36. package/dist/{project-semantic-LP3LY7QP.js → project-semantic-DPSZBKQD.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-3EVYQ3IO.js → te-analysis-ISXKJKRT.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-LFBU6WWH.js → te-engage-BZE3MBKT.js} +6 -6
  43. package/dist/{te-kb-QJLJEX5K.js → te-kb-ULATOTQ3.js} +494 -214
  44. package/dist/{te-system-IXC43QHZ.js → te-system-UGHVKBVV.js} +10 -9
  45. package/dist/{te-team-BIZIKIHZ.js → te-team-YA6SNOJ3.js} +6 -6
  46. package/dist/things-DTCOQIQB.js +1091 -0
  47. package/dist/{update-W2SGQNKT.js → update-ESNYKUVR.js} +59 -51
  48. package/dist/workspace-JEOHKFPX.js +554 -0
  49. package/package.json +21 -9
  50. package/skills/ae-agent/SKILL.md +91 -139
  51. package/skills/ae-agent/references/add-model.md +1 -1
  52. package/skills/ae-agent/references/create-agent.md +1 -1
  53. package/skills/ae-agent/references/find-archived-conversations.md +12 -5
  54. package/skills/ae-agent/references/get-agent.md +1 -1
  55. package/skills/ae-agent/references/list-agents.md +2 -2
  56. package/skills/ae-agent/references/list-models.md +2 -2
  57. package/skills/ae-agent/references/restore-conversation.md +3 -1
  58. package/skills/ae-analysis/SKILL.md +15 -6
  59. package/skills/ae-analysis/references/ai_models/funnel.md +5 -3
  60. package/skills/ae-analysis/references/ai_models.md +27 -0
  61. package/skills/ae-analysis/references/command_index.md +12 -4
  62. package/skills/ae-analysis/references/dashboard_move.md +21 -0
  63. package/skills/ae-analysis/references/dashboard_report_add.md +2 -0
  64. package/skills/ae-analysis/references/dashboard_report_get.md +19 -0
  65. package/skills/ae-analysis/references/dashboard_report_update.md +27 -0
  66. package/skills/ae-analysis/references/dashboard_update.md +1 -1
  67. package/skills/ae-analysis/references/event_report_presentation.md +76 -0
  68. package/skills/ae-analysis/references/feedback_submit.md +37 -0
  69. package/skills/ae-analysis/references/metadata_resolution.md +15 -0
  70. package/skills/ae-analysis/references/personal_semantic_preference_review.md +9 -0
  71. package/skills/ae-analysis/references/personal_semantic_preference_review_list.md +7 -0
  72. package/skills/ae-analysis/references/personal_semantic_preference_submit.md +7 -0
  73. package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +90 -31
  74. package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +99 -1
  75. package/skills/ae-analysis/references/report_create.md +13 -3
  76. package/skills/ae-analysis/references/report_get.md +5 -1
  77. package/skills/ae-analysis/references/report_update.md +15 -4
  78. package/skills/ae-analysis/references/system_query_monitor_overview.md +2 -0
  79. package/skills/ae-analysis/references/system_query_task_cancel.md +2 -0
  80. package/skills/ae-analysis/references/system_query_task_export.md +6 -2
  81. package/skills/ae-analysis/references/system_query_task_get.md +2 -0
  82. package/skills/ae-analysis/references/system_query_task_list.md +7 -3
  83. package/skills/ae-analysis/references/system_query_task_options.md +2 -2
  84. package/skills/ae-analysis/references/system_query_task_realtime_list.md +15 -0
  85. package/skills/ae-analysis/references/user_tag_models.md +2 -0
  86. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-empty-skeleton.mjs +105 -0
  87. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +669 -29
  88. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/company-kb.mjs +21 -8
  89. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-rules.md +28 -10
  90. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-schema.md +66 -0
  91. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +285 -24
  92. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/package-wiki-source-zip.mjs +262 -30
  93. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/plan-kb-source-sync.mjs +1 -1
  94. package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/precompiled-source.mjs +46 -2
  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
@@ -0,0 +1,554 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ WORKSPACE_CLI_BASE_PATH,
4
+ buildWorkspaceCliUrl,
5
+ deleteWorkspaceApi,
6
+ getWorkspaceApi,
7
+ patchWorkspaceApi,
8
+ postWorkspaceApi,
9
+ previewWorkspaceResourcePath,
10
+ putWorkspaceApi,
11
+ resolveWorkspaceTarget,
12
+ uploadWorkspaceApi,
13
+ workspaceResourcePath,
14
+ workspaceTargetFlags,
15
+ workspaceTargetPath
16
+ } from "./chunk-Q5US7JC5.js";
17
+ import "./chunk-RK6GLDGI.js";
18
+ import {
19
+ getAgentBuffer
20
+ } from "./chunk-CI24BDR2.js";
21
+ import "./chunk-3YVEAZUN.js";
22
+ import "./chunk-Y74WTIKJ.js";
23
+ import "./chunk-GHXZK54S.js";
24
+ import "./chunk-ZL7SGNIA.js";
25
+ import {
26
+ CliValidationError
27
+ } from "./chunk-WNGFSIOB.js";
28
+
29
+ // src/commands/workspace/shared.ts
30
+ var WORKSPACE_SERVICE = "workspace";
31
+ function optional(ctx, name) {
32
+ const value = ctx.str(name).trim();
33
+ return value || void 0;
34
+ }
35
+ function queryPath(base, values) {
36
+ const params = new URLSearchParams();
37
+ for (const [key, value] of Object.entries(values)) {
38
+ if (value !== void 0 && value !== "") params.set(key, String(value));
39
+ }
40
+ const query = params.toString();
41
+ return query ? `${base}?${query}` : base;
42
+ }
43
+ function assertOneOf(flag, value, allowed) {
44
+ if (value && !allowed.includes(value)) {
45
+ throw new CliValidationError(`--${flag} must be one of: ${allowed.join(", ")}`);
46
+ }
47
+ }
48
+ function targetDryRun(ctx, method, suffix, body) {
49
+ return {
50
+ method,
51
+ url: buildWorkspaceCliUrl(ctx, previewWorkspaceResourcePath(ctx, suffix)),
52
+ params: { target_url: buildWorkspaceCliUrl(ctx, workspaceTargetPath(ctx)) },
53
+ ...body === void 0 ? {} : { body }
54
+ };
55
+ }
56
+ async function targetCall(ctx, method, suffix, body) {
57
+ const target = await resolveWorkspaceTarget(ctx);
58
+ const path = workspaceResourcePath(target.agentSpaceId, suffix);
59
+ if (method === "GET") return getWorkspaceApi(ctx, path);
60
+ if (method === "POST") return postWorkspaceApi(ctx, path, body ?? {});
61
+ if (method === "PATCH") return patchWorkspaceApi(ctx, path, body ?? {});
62
+ if (method === "PUT") return putWorkspaceApi(ctx, path, body ?? {});
63
+ return deleteWorkspaceApi(ctx, path);
64
+ }
65
+
66
+ // src/commands/workspace/list.ts
67
+ var WORKSPACE_TYPES = ["personal", "shared"];
68
+ var WORKSPACE_STATUSES = ["ACTIVE", "ARCHIVED", "CREATING", "DELETING"];
69
+ function listPath(ctx) {
70
+ return queryPath(`${WORKSPACE_CLI_BASE_PATH}/agent-spaces`, {
71
+ type: optional(ctx, "type"),
72
+ status: optional(ctx, "status"),
73
+ query: optional(ctx, "query"),
74
+ cursor: optional(ctx, "cursor"),
75
+ limit: ctx.num("limit") || 20
76
+ });
77
+ }
78
+ var listWorkspaces = {
79
+ service: WORKSPACE_SERVICE,
80
+ command: "list",
81
+ description: "List AgentSpaces accessible to the current user",
82
+ flags: [
83
+ { name: "type", type: "string", required: false, desc: "Filter by type: personal | shared" },
84
+ { name: "status", type: "string", required: false, desc: "Filter by status: ACTIVE | ARCHIVED | CREATING | DELETING" },
85
+ { name: "query", type: "string", required: false, desc: "Search by AgentSpace name" },
86
+ { name: "cursor", type: "string", required: false, desc: "Pagination cursor" },
87
+ { name: "limit", type: "number", required: false, default: 20, min: 1, max: 50, desc: "Page size, 1-50; default 20" }
88
+ ],
89
+ risk: "read",
90
+ validate: (ctx) => {
91
+ assertOneOf("type", optional(ctx, "type"), WORKSPACE_TYPES);
92
+ assertOneOf("status", optional(ctx, "status"), WORKSPACE_STATUSES);
93
+ },
94
+ dryRun: (ctx) => ({ method: "GET", url: buildWorkspaceCliUrl(ctx, listPath(ctx)) }),
95
+ execute: (ctx) => getWorkspaceApi(ctx, listPath(ctx))
96
+ };
97
+
98
+ // src/commands/workspace/get.ts
99
+ var getWorkspace = {
100
+ service: WORKSPACE_SERVICE,
101
+ command: "get",
102
+ description: "Get the resolved AgentSpace profile and access role",
103
+ flags: workspaceTargetFlags,
104
+ risk: "read",
105
+ validate: (ctx) => {
106
+ workspaceTargetPath(ctx);
107
+ },
108
+ dryRun: (ctx) => targetDryRun(ctx, "GET", ""),
109
+ execute: (ctx) => targetCall(ctx, "GET", "")
110
+ };
111
+
112
+ // src/commands/workspace/current.ts
113
+ var currentWorkspace = {
114
+ service: WORKSPACE_SERVICE,
115
+ command: "current",
116
+ description: "Resolve the current AgentSpace from an explicit ID or conversation context",
117
+ flags: workspaceTargetFlags,
118
+ risk: "read",
119
+ validate: (ctx) => {
120
+ workspaceTargetPath(ctx);
121
+ },
122
+ dryRun: (ctx) => ({ method: "GET", url: buildWorkspaceCliUrl(ctx, workspaceTargetPath(ctx)) }),
123
+ execute: (ctx) => resolveWorkspaceTarget(ctx)
124
+ };
125
+
126
+ // src/commands/workspace/create.ts
127
+ function createBody(ctx) {
128
+ return {
129
+ name: ctx.str("name"),
130
+ description: optional(ctx, "description"),
131
+ type: "personal",
132
+ operationSource: "ae_cli"
133
+ };
134
+ }
135
+ var createWorkspace = {
136
+ service: WORKSPACE_SERVICE,
137
+ command: "create",
138
+ description: "Create a personal AgentSpace",
139
+ flags: [
140
+ { name: "name", type: "string", required: true, minLength: 1, maxLength: 100, desc: "AgentSpace name" },
141
+ { name: "description", type: "string", required: false, maxLength: 500, desc: "Optional AgentSpace description" },
142
+ { name: "type", type: "string", required: false, default: "personal", desc: "Only personal is supported by this command" }
143
+ ],
144
+ risk: "write",
145
+ validate: (ctx) => {
146
+ if (ctx.str("type") !== "personal") {
147
+ throw new CliValidationError("Only personal AgentSpaces can be created with ae-cli workspace create");
148
+ }
149
+ },
150
+ dryRun: (ctx) => ({
151
+ method: "POST",
152
+ url: buildWorkspaceCliUrl(ctx, `${WORKSPACE_CLI_BASE_PATH}/agent-spaces`),
153
+ body: createBody(ctx)
154
+ }),
155
+ execute: (ctx) => postWorkspaceApi(ctx, `${WORKSPACE_CLI_BASE_PATH}/agent-spaces`, createBody(ctx))
156
+ };
157
+
158
+ // src/commands/workspace/update.ts
159
+ function updateBody(ctx) {
160
+ const description = optional(ctx, "description");
161
+ return {
162
+ name: ctx.str("name"),
163
+ ...description === void 0 ? {} : { description },
164
+ operationSource: "ae_cli"
165
+ };
166
+ }
167
+ var updateWorkspace = {
168
+ service: WORKSPACE_SERVICE,
169
+ command: "update",
170
+ description: "Update an AgentSpace profile",
171
+ flags: [
172
+ ...workspaceTargetFlags,
173
+ { name: "name", type: "string", required: true, minLength: 1, maxLength: 100, desc: "New AgentSpace name" },
174
+ { name: "description", type: "string", required: false, maxLength: 500, desc: "New AgentSpace description; omitted values remain unchanged" }
175
+ ],
176
+ risk: "write",
177
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", "", updateBody(ctx)),
178
+ execute: (ctx) => targetCall(ctx, "PATCH", "", updateBody(ctx))
179
+ };
180
+
181
+ // src/commands/workspace/delete.ts
182
+ var deleteWorkspace = {
183
+ service: WORKSPACE_SERVICE,
184
+ command: "delete",
185
+ description: "Soft-delete an AgentSpace",
186
+ flags: workspaceTargetFlags,
187
+ risk: "high-risk-write",
188
+ dryRun: (ctx) => targetDryRun(ctx, "DELETE", ""),
189
+ execute: (ctx) => targetCall(ctx, "DELETE", "")
190
+ };
191
+
192
+ // src/commands/workspace/recover.ts
193
+ var recoverWorkspace = {
194
+ service: WORKSPACE_SERVICE,
195
+ command: "recover",
196
+ description: "Recover the unavailable runtime for an active AgentSpace",
197
+ flags: workspaceTargetFlags,
198
+ risk: "write",
199
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "/recover", { operationSource: "ae_cli" }),
200
+ execute: (ctx) => targetCall(ctx, "POST", "/recover", { operationSource: "ae_cli" })
201
+ };
202
+
203
+ // src/commands/workspace/asset/list.ts
204
+ var listWorkspaceAssets = {
205
+ service: WORKSPACE_SERVICE,
206
+ resource: "asset",
207
+ command: "list",
208
+ description: "List files and folders in an AgentSpace",
209
+ flags: [...workspaceTargetFlags, { name: "path", type: "string", required: false, desc: "Relative folder path; defaults to the root" }],
210
+ risk: "read",
211
+ dryRun: (ctx) => targetDryRun(ctx, "GET", queryPath("/documents", { path: optional(ctx, "path") })),
212
+ execute: (ctx) => targetCall(ctx, "GET", queryPath("/documents", { path: optional(ctx, "path") }))
213
+ };
214
+
215
+ // src/commands/workspace/asset/read.ts
216
+ var readWorkspaceAsset = {
217
+ service: WORKSPACE_SERVICE,
218
+ resource: "asset",
219
+ command: "read",
220
+ description: "Read a text file from an AgentSpace",
221
+ flags: [...workspaceTargetFlags, { name: "path", type: "string", required: true, desc: "Relative file path" }],
222
+ risk: "read",
223
+ dryRun: (ctx) => targetDryRun(ctx, "GET", queryPath("/documents/content", { path: ctx.str("path") })),
224
+ execute: (ctx) => targetCall(ctx, "GET", queryPath("/documents/content", { path: ctx.str("path") }))
225
+ };
226
+
227
+ // src/commands/workspace/asset/upload.ts
228
+ import { existsSync, readFileSync, statSync } from "fs";
229
+ import { basename, extname, resolve } from "path";
230
+ var MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
231
+ function guessMimeType(filePath) {
232
+ const map = {
233
+ ".csv": "text/csv",
234
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
235
+ ".json": "application/json",
236
+ ".md": "text/markdown",
237
+ ".pdf": "application/pdf",
238
+ ".png": "image/png",
239
+ ".txt": "text/plain",
240
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
241
+ ".zip": "application/zip"
242
+ };
243
+ return map[extname(filePath).toLowerCase()] ?? "application/octet-stream";
244
+ }
245
+ var uploadWorkspaceAsset = {
246
+ service: WORKSPACE_SERVICE,
247
+ resource: "asset",
248
+ command: "upload",
249
+ description: "Upload one local file into an AgentSpace folder",
250
+ flags: [
251
+ ...workspaceTargetFlags,
252
+ { name: "file", type: "string", required: true, desc: "Local file path" },
253
+ { name: "path", type: "string", required: false, desc: "Destination folder path; defaults to the root" }
254
+ ],
255
+ risk: "write",
256
+ validate: (ctx) => {
257
+ const file = resolve(ctx.str("file"));
258
+ if (!existsSync(file) || !statSync(file).isFile()) throw new CliValidationError("The --file path must point to an existing regular file.");
259
+ if (statSync(file).size > MAX_UPLOAD_BYTES) throw new CliValidationError("File exceeds the 50 MB upload limit");
260
+ },
261
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "/documents/upload", {
262
+ file: resolve(ctx.str("file")),
263
+ path: optional(ctx, "path") ?? ""
264
+ }),
265
+ execute: async (ctx) => {
266
+ const target = await resolveWorkspaceTarget(ctx);
267
+ const file = resolve(ctx.str("file"));
268
+ const bytes = readFileSync(file);
269
+ const form = new FormData();
270
+ form.append("file", new Blob([new Uint8Array(bytes)], { type: guessMimeType(file) }), basename(file));
271
+ form.append("path", optional(ctx, "path") ?? "");
272
+ return uploadWorkspaceApi(ctx, workspaceResourcePath(target.agentSpaceId, "/documents/upload"), form);
273
+ }
274
+ };
275
+
276
+ // src/commands/workspace/asset/download.ts
277
+ import { existsSync as existsSync2, writeFileSync } from "fs";
278
+ import { resolve as resolve2 } from "path";
279
+ var downloadWorkspaceAsset = {
280
+ service: WORKSPACE_SERVICE,
281
+ resource: "asset",
282
+ command: "download",
283
+ description: "Download an AgentSpace file without changing its bytes",
284
+ flags: [
285
+ ...workspaceTargetFlags,
286
+ { name: "path", type: "string", required: true, desc: "Relative file path" },
287
+ { name: "output", type: "string", required: true, desc: "Local output file path" },
288
+ { name: "overwrite", type: "boolean", required: false, desc: "Allow replacing an existing local file" }
289
+ ],
290
+ risk: "read",
291
+ validate: (ctx) => {
292
+ const output = resolve2(ctx.str("output"));
293
+ if (existsSync2(output) && !ctx.bool("overwrite")) {
294
+ throw new CliValidationError("The output file already exists. Use --overwrite true to replace it.");
295
+ }
296
+ },
297
+ dryRun: (ctx) => targetDryRun(ctx, "GET", queryPath("/documents/download", { path: ctx.str("path") }), {
298
+ output: resolve2(ctx.str("output")),
299
+ overwrite: ctx.bool("overwrite")
300
+ }),
301
+ execute: async (ctx) => {
302
+ const target = await resolveWorkspaceTarget(ctx);
303
+ const path = queryPath(workspaceResourcePath(target.agentSpaceId, "/documents/download"), { path: ctx.str("path") });
304
+ const { buffer, fileName, contentType } = await getAgentBuffer(ctx, path);
305
+ const output = resolve2(ctx.str("output"));
306
+ writeFileSync(output, buffer, { flag: ctx.bool("overwrite") ? "w" : "wx" });
307
+ return { saved: true, path: output, size: buffer.length, file_name: fileName, content_type: contentType };
308
+ }
309
+ };
310
+
311
+ // src/commands/workspace/asset/mkdir.ts
312
+ var mkdirWorkspaceAsset = {
313
+ service: WORKSPACE_SERVICE,
314
+ resource: "asset",
315
+ command: "mkdir",
316
+ description: "Create a folder in an AgentSpace",
317
+ flags: [
318
+ ...workspaceTargetFlags,
319
+ { name: "path", type: "string", required: false, desc: "Parent folder path; defaults to the root" },
320
+ { name: "name", type: "string", required: true, desc: "New folder name" }
321
+ ],
322
+ risk: "write",
323
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "/documents/mkdir", { path: optional(ctx, "path") ?? "", name: ctx.str("name") }),
324
+ execute: (ctx) => targetCall(ctx, "POST", "/documents/mkdir", { path: optional(ctx, "path") ?? "", name: ctx.str("name") })
325
+ };
326
+
327
+ // src/commands/workspace/asset/move.ts
328
+ var moveWorkspaceAsset = {
329
+ service: WORKSPACE_SERVICE,
330
+ resource: "asset",
331
+ command: "move",
332
+ description: "Move an AgentSpace file or folder",
333
+ flags: [
334
+ ...workspaceTargetFlags,
335
+ { name: "path", type: "string", required: true, desc: "Current relative path" },
336
+ { name: "destination", type: "string", required: true, desc: "Destination folder path" }
337
+ ],
338
+ risk: "write",
339
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", "/documents", { operation: "move", path: ctx.str("path"), destination: ctx.str("destination") }),
340
+ execute: (ctx) => targetCall(ctx, "PATCH", "/documents", { operation: "move", path: ctx.str("path"), destination: ctx.str("destination") })
341
+ };
342
+
343
+ // src/commands/workspace/asset/delete.ts
344
+ var deleteWorkspaceAsset = {
345
+ service: WORKSPACE_SERVICE,
346
+ resource: "asset",
347
+ command: "delete",
348
+ description: "Delete an AgentSpace file or folder",
349
+ flags: [...workspaceTargetFlags, { name: "path", type: "string", required: true, desc: "Relative path to delete" }],
350
+ risk: "high-risk-write",
351
+ dryRun: (ctx) => targetDryRun(ctx, "DELETE", queryPath("/documents", { path: ctx.str("path") })),
352
+ execute: (ctx) => targetCall(ctx, "DELETE", queryPath("/documents", { path: ctx.str("path") }))
353
+ };
354
+
355
+ // src/commands/workspace/capability/list.ts
356
+ var listWorkspaceCapabilities = {
357
+ service: WORKSPACE_SERVICE,
358
+ resource: "capability",
359
+ command: "list",
360
+ description: "List AgentSpace capability settings and their revision",
361
+ flags: workspaceTargetFlags,
362
+ risk: "read",
363
+ dryRun: (ctx) => targetDryRun(ctx, "GET", "/capabilities"),
364
+ execute: (ctx) => targetCall(ctx, "GET", "/capabilities")
365
+ };
366
+
367
+ // src/commands/workspace/capability/set.ts
368
+ var CAPABILITY_TYPES = ["agent", "mcp", "skill", "knowledge_base"];
369
+ function requireRevision(ctx) {
370
+ const version = ctx.num("version");
371
+ if (!Number.isInteger(version) || version < 0) throw new CliValidationError("--version must be a non-negative integer");
372
+ return version;
373
+ }
374
+ function requireSelectedIds(ctx) {
375
+ const value = ctx.json("selectedIds");
376
+ if (!Array.isArray(value) || value.length > 100) {
377
+ throw new CliValidationError("--selected-ids must be a JSON array with at most 100 items");
378
+ }
379
+ const ids = value.map((item, index) => {
380
+ if (typeof item !== "string" || !item.trim()) {
381
+ throw new CliValidationError(`--selected-ids item ${index + 1} must be a non-empty string`);
382
+ }
383
+ return item.trim();
384
+ });
385
+ return [...new Set(ids)];
386
+ }
387
+ function capabilityBody(ctx) {
388
+ return {
389
+ revision: requireRevision(ctx),
390
+ capabilityType: ctx.str("capabilityType"),
391
+ selectedIds: requireSelectedIds(ctx),
392
+ ...optional(ctx, "defaultAgentId") ? { defaultAgentId: optional(ctx, "defaultAgentId") } : {},
393
+ operationSource: "ae_cli"
394
+ };
395
+ }
396
+ var setWorkspaceCapabilities = {
397
+ service: WORKSPACE_SERVICE,
398
+ resource: "capability",
399
+ command: "set",
400
+ description: "Replace one AgentSpace capability selection using optimistic concurrency",
401
+ flags: [
402
+ ...workspaceTargetFlags,
403
+ { name: "version", type: "number", required: true, desc: "Capability revision returned by workspace capability list" },
404
+ { name: "capability-type", type: "string", required: true, desc: "agent | mcp | skill | knowledge_base" },
405
+ { name: "selected-ids", type: "json", required: true, desc: "JSON array of selected capability IDs; [] clears the type" },
406
+ { name: "default-agent-id", type: "string", required: false, desc: "Default Agent ID when setting Agent capabilities" }
407
+ ],
408
+ risk: "high-risk-write",
409
+ preflight: (ctx) => {
410
+ capabilityBody(ctx);
411
+ },
412
+ validate: (ctx) => {
413
+ assertOneOf("capability-type", ctx.str("capabilityType"), CAPABILITY_TYPES);
414
+ capabilityBody(ctx);
415
+ },
416
+ dryRun: (ctx) => targetDryRun(ctx, "PUT", "/capabilities", capabilityBody(ctx)),
417
+ execute: (ctx) => targetCall(ctx, "PUT", "/capabilities", capabilityBody(ctx))
418
+ };
419
+
420
+ // src/commands/workspace/member/list.ts
421
+ var listWorkspaceMembers = {
422
+ service: WORKSPACE_SERVICE,
423
+ resource: "member",
424
+ command: "list",
425
+ description: "List shared AgentSpace members and optional add candidates",
426
+ flags: [...workspaceTargetFlags, { name: "candidate-query", type: "string", required: false, desc: "Optional company-user search text" }],
427
+ risk: "read",
428
+ dryRun: (ctx) => targetDryRun(ctx, "GET", queryPath("/members", { candidateQuery: optional(ctx, "candidateQuery") })),
429
+ execute: (ctx) => targetCall(ctx, "GET", queryPath("/members", { candidateQuery: optional(ctx, "candidateQuery") }))
430
+ };
431
+
432
+ // src/commands/workspace/member/shared.ts
433
+ var MEMBER_ROLES = ["ADMIN", "MEMBER"];
434
+ function memberBody(ctx) {
435
+ const role = ctx.str("role");
436
+ assertOneOf("role", role, MEMBER_ROLES);
437
+ return { userId: ctx.str("userId"), role, operationSource: "ae_cli" };
438
+ }
439
+
440
+ // src/commands/workspace/member/add.ts
441
+ var addWorkspaceMember = {
442
+ service: WORKSPACE_SERVICE,
443
+ resource: "member",
444
+ command: "add",
445
+ description: "Add a company user to a shared AgentSpace",
446
+ flags: [...workspaceTargetFlags, { name: "user-id", type: "string", required: true, desc: "Company user ID" }, { name: "role", type: "string", required: true, desc: "ADMIN | MEMBER" }],
447
+ risk: "high-risk-write",
448
+ preflight: memberBody,
449
+ validate: memberBody,
450
+ dryRun: (ctx) => targetDryRun(ctx, "POST", "/members", memberBody(ctx)),
451
+ execute: (ctx) => targetCall(ctx, "POST", "/members", memberBody(ctx))
452
+ };
453
+
454
+ // src/commands/workspace/member/update.ts
455
+ var updateWorkspaceMember = {
456
+ service: WORKSPACE_SERVICE,
457
+ resource: "member",
458
+ command: "update",
459
+ description: "Change a shared AgentSpace member role",
460
+ flags: [...workspaceTargetFlags, { name: "user-id", type: "string", required: true, desc: "Member user ID" }, { name: "role", type: "string", required: true, desc: "ADMIN | MEMBER" }],
461
+ risk: "high-risk-write",
462
+ preflight: memberBody,
463
+ validate: memberBody,
464
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", `/members/${encodeURIComponent(ctx.str("userId"))}`, { role: ctx.str("role"), operationSource: "ae_cli" }),
465
+ execute: (ctx) => targetCall(ctx, "PATCH", `/members/${encodeURIComponent(ctx.str("userId"))}`, { role: ctx.str("role"), operationSource: "ae_cli" })
466
+ };
467
+
468
+ // src/commands/workspace/member/transfer-owner.ts
469
+ var transferWorkspaceOwner = {
470
+ service: WORKSPACE_SERVICE,
471
+ resource: "member",
472
+ command: "transfer-owner",
473
+ description: "Transfer shared AgentSpace ownership to another member",
474
+ flags: [...workspaceTargetFlags, { name: "user-id", type: "string", required: true, desc: "New owner user ID" }],
475
+ risk: "high-risk-write",
476
+ dryRun: (ctx) => targetDryRun(ctx, "PATCH", `/members/${encodeURIComponent(ctx.str("userId"))}`, { role: "OWNER", operationSource: "ae_cli" }),
477
+ execute: (ctx) => targetCall(ctx, "PATCH", `/members/${encodeURIComponent(ctx.str("userId"))}`, { role: "OWNER", operationSource: "ae_cli" })
478
+ };
479
+
480
+ // src/commands/workspace/member/remove.ts
481
+ var removeWorkspaceMember = {
482
+ service: WORKSPACE_SERVICE,
483
+ resource: "member",
484
+ command: "remove",
485
+ description: "Remove a member from a shared AgentSpace",
486
+ flags: [...workspaceTargetFlags, { name: "user-id", type: "string", required: true, desc: "Member user ID" }],
487
+ risk: "high-risk-write",
488
+ dryRun: (ctx) => targetDryRun(ctx, "DELETE", `/members/${encodeURIComponent(ctx.str("userId"))}`),
489
+ execute: (ctx) => targetCall(ctx, "DELETE", `/members/${encodeURIComponent(ctx.str("userId"))}`)
490
+ };
491
+
492
+ // src/commands/workspace/activity/list.ts
493
+ var listWorkspaceActivities = {
494
+ service: WORKSPACE_SERVICE,
495
+ resource: "activity",
496
+ command: "list",
497
+ description: "List recent AgentSpace activities",
498
+ flags: [...workspaceTargetFlags, { name: "limit", type: "number", required: false, default: 8, min: 1, max: 20, desc: "Maximum activities, 1-20; default 8" }],
499
+ risk: "read",
500
+ dryRun: (ctx) => targetDryRun(ctx, "GET", queryPath("/activities", { limit: ctx.num("limit") || 8 })),
501
+ execute: (ctx) => targetCall(ctx, "GET", queryPath("/activities", { limit: ctx.num("limit") || 8 }))
502
+ };
503
+
504
+ // src/commands/workspace/index.ts
505
+ var commands = [
506
+ listWorkspaces,
507
+ getWorkspace,
508
+ currentWorkspace,
509
+ createWorkspace,
510
+ updateWorkspace,
511
+ deleteWorkspace,
512
+ recoverWorkspace,
513
+ listWorkspaceAssets,
514
+ readWorkspaceAsset,
515
+ uploadWorkspaceAsset,
516
+ downloadWorkspaceAsset,
517
+ mkdirWorkspaceAsset,
518
+ moveWorkspaceAsset,
519
+ deleteWorkspaceAsset,
520
+ listWorkspaceCapabilities,
521
+ setWorkspaceCapabilities,
522
+ listWorkspaceMembers,
523
+ addWorkspaceMember,
524
+ updateWorkspaceMember,
525
+ transferWorkspaceOwner,
526
+ removeWorkspaceMember,
527
+ listWorkspaceActivities
528
+ ];
529
+ var workspace_default = commands;
530
+ export {
531
+ addWorkspaceMember,
532
+ createWorkspace,
533
+ currentWorkspace,
534
+ workspace_default as default,
535
+ deleteWorkspace,
536
+ deleteWorkspaceAsset,
537
+ downloadWorkspaceAsset,
538
+ getWorkspace,
539
+ listWorkspaceActivities,
540
+ listWorkspaceAssets,
541
+ listWorkspaceCapabilities,
542
+ listWorkspaceMembers,
543
+ listWorkspaces,
544
+ mkdirWorkspaceAsset,
545
+ moveWorkspaceAsset,
546
+ readWorkspaceAsset,
547
+ recoverWorkspace,
548
+ removeWorkspaceMember,
549
+ setWorkspaceCapabilities,
550
+ transferWorkspaceOwner,
551
+ updateWorkspace,
552
+ updateWorkspaceMember,
553
+ uploadWorkspaceAsset
554
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkingai/ae-cli",
3
- "version": "6.0.53",
3
+ "version": "6.0.55",
4
4
  "description": "CLI tool for ThinkingAI (AE) analytics platform",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,7 +13,8 @@
13
13
  "skills/",
14
14
  "wiki/",
15
15
  "tracking-plan-template/",
16
- "README.md"
16
+ "README.md",
17
+ "cli-installation-guide.md"
17
18
  ],
18
19
  "scripts": {
19
20
  "dev": "tsx src/index.ts",
@@ -31,9 +32,10 @@
31
32
  "verify:analysis-tools": "tsx scripts/verify-te-analysis-tools.mjs",
32
33
  "verify:project-asset-sources": "node --test test/project-asset-source-workflow.test.mjs test/project-semantic-entrypoint.test.mjs",
33
34
  "verify:analysis-skill": "tsx scripts/generate-analysis-skill-index.mts --check",
34
- "verify:analysis-four-modules": "tsx tests/dashboard-filter-transport.test.ts && tsx tests/analysis-report-capability-command.test.ts && tsx tests/analysis-export-flow-command.test.ts && tsx tests/analysis-dashboard-audience-contract.test.ts",
35
+ "verify:analysis-four-modules": "tsx tests/dashboard-filter-transport.test.ts && tsx tests/analysis-report-capability-command.test.ts && npm run verify:analysis-presentation && tsx tests/analysis-export-flow-command.test.ts && tsx tests/analysis-dashboard-audience-contract.test.ts",
35
36
  "verify:analysis-contract-regressions": "tsx test/analysis-contract-regressions.test.mjs && tsx tests/analysis-sql-special-identifiers.test.ts",
36
37
  "verify:analysis-agent-contract": "tsx tests/analysis-agent-skill-contract.test.ts",
38
+ "verify:analysis-presentation": "tsx --test tests/analysis-report-presentation.test.ts",
37
39
  "verify:analysis-system": "tsx tests/analysis-system-capability-command.test.ts",
38
40
  "verify:cross-source-config": "tsx tests/cross-source-config-command.test.ts",
39
41
  "verify:output-contract": "tsx tests/output-contract.test.ts",
@@ -46,15 +48,19 @@
46
48
  "verify:retired-api-command": "node --test test/retired-api-command.test.mjs",
47
49
  "verify:analysis-common-tools": "node scripts/verify-te-common-tools.mjs",
48
50
  "verify:team-tools": "node scripts/verify-te-team-tools.mjs",
49
- "verify:agent-tools": "node --test test/agent-command-registry.test.mjs && tsx tests/te-agent-credentials.test.ts && tsx tests/te-agent-unified-auth.test.ts && tsx tests/te-agent-conversations.test.ts && tsx tests/te-agent-automations.test.ts && tsx scripts/verify-agent-tools.mjs && npm run verify:approval && npm run verify:agent-distribution && npm run verify:agent-context && npm run verify:sandbox-tools && npm run verify:notifications",
51
+ "verify:agent-tools": "node --test test/agent-command-registry.test.mjs && tsx tests/te-agent-credentials.test.ts && tsx tests/te-agent-unified-auth.test.ts && node --import tsx --test tests/te-agent-env-isolation.test.ts && tsx tests/te-agent-conversations.test.ts && tsx scripts/verify-agent-tools.mjs && npm run verify:approval && npm run verify:agent-distribution && npm run verify:agent-context && npm run verify:sandbox-tools && npm run verify:notifications",
50
52
  "verify:agent-context": "tsx tests/agent-context-command.test.ts",
53
+ "verify:cli-agent-model-context": "tsx --test tests/cli-agent-model-context.test.ts",
54
+ "verify:analysis-feedback": "tsx --test tests/analysis-feedback-command.test.ts",
51
55
  "verify:agent-distribution": "tsx tests/agent-distribution-command.test.ts && tsx tests/agent-distribution-skill.test.ts",
52
56
  "verify:approval": "tsx tests/approval-command.test.ts && tsx tests/approval-cli-client.test.ts && tsx tests/approval-skill.test.ts",
57
+ "verify:things": "tsx tests/things-command.test.ts && tsx tests/things-collection.test.ts && tsx tests/things-cli-entry.test.ts && tsx tests/things-agent-context.test.ts",
53
58
  "verify:memory": "tsx tests/memory-command.test.ts && tsx tests/memory-cli-client.test.ts && tsx tests/memory-skill.test.ts",
54
- "verify:current-context": "tsx --test tests/current-page-context-command.test.ts",
59
+ "verify:workspace": "tsx tests/workspace-command.test.ts && tsx tests/workspace-skill.test.ts && node --import tsx --test tests/workspace-errors.test.ts",
60
+ "verify:current-context": "node --import tsx --test tests/current-page-context-command.test.ts tests/current-page-context-run-auth.test.ts tests/current-page-context-run-auth.integration.test.ts",
55
61
  "verify:system-tools": "node scripts/verify-system-tools.mjs && npx tsx tests/system-domain.test.ts && npx tsx tests/channel-cli-http.test.ts && npx tsx tests/te-agent-download.test.ts && npx tsx tests/sandbox-tool-package.test.ts",
56
62
  "verify:kb-skill": "node test/kb-skill-query-workflow.test.mjs && node test/kb-analysis-workflow.test.mjs",
57
- "verify:kb-sources": "tsx test/kb-source-check-updates-command.test.mjs && tsx test/kb-list-sources-command.test.mjs && tsx test/kb-zip-directory-command.test.mjs && tsx test/kb-source-mutation-command.test.mjs",
63
+ "verify:kb-sources": "tsx test/kb-source-check-updates-command.test.mjs && tsx test/kb-source-check-url-command.test.mjs && tsx test/kb-list-sources-command.test.mjs && tsx test/kb-zip-directory-command.test.mjs && tsx test/kb-source-mutation-command.test.mjs && tsx test/kb-text-source-command.test.mjs",
58
64
  "verify:sandbox-tools": "tsx test/sandbox-tools.test.ts",
59
65
  "verify:skill-version-management": "tsx tests/skill-version-management.test.ts",
60
66
  "verify:skill-reference-files": "tsx tests/skill-reference-files.test.ts",
@@ -63,7 +69,7 @@
63
69
  "verify:skill-migration-e2e": "node test/ae-migrate-tracking-code/e2e/diff.mjs",
64
70
  "verify:tracking-tools": "tsx test/tracking-client.test.mjs && tsx test/tracking-skill-flow.test.mjs && node test/tracking-commands.test.mjs && tsx tests/tracking-display-name-sync.test.ts && tsx tests/local-data-inspect-convert.test.ts && tsx tests/local-data-upload-client.test.ts && tsx tests/local-data-upload-command.test.ts && tsx tests/local-data-encoding-sniff.test.ts && tsx tests/local-data-time-formats.test.ts && tsx tests/local-data-xlsx-dates.test.ts && tsx tests/local-data-xlsx-hidden-sheets.test.ts && tsx tests/local-data-xlsx-formulas.test.ts && tsx tests/local-data-title-rows.test.ts && tsx tests/local-data-xlsx-merged-cells.test.ts && tsx tests/local-data-xlsx-shared-strings.test.ts && tsx tests/local-data-xlsx-namespace-prefix.test.ts && tsx tests/local-data-value-distribution.test.ts && tsx tests/local-data-summary-rows.test.ts && tsx tests/local-data-duplicate-keys.test.ts && tsx tests/local-data-row-balance.test.ts && tsx tests/local-data-eight-types.test.ts && tsx tests/local-data-mapping-extras.test.ts && tsx tests/local-data-plan.test.ts && tsx tests/local-data-handoff.test.ts && tsx tests/local-data-reuse.test.ts && tsx tests/local-data-conflicts-resolutions.test.ts && tsx tests/runner-variadic-flags.test.ts && node test/local-data-skill.test.mjs",
65
71
  "verify:self-check-overlay": "node test/self-check-overlay.test.mjs",
66
- "verify:update-check": "npx tsx test/update-check.test.mjs",
72
+ "verify:update-check": "tsx tests/compat-check.test.ts && tsx test/update-check.test.mjs",
67
73
  "verify:version-sync": "npx tsx tests/version-sync.test.ts",
68
74
  "verify:auth-credentials": "npx tsx tests/secure-store.test.ts && npx tsx tests/secure-store-environment.test.ts && npx tsx tests/cli-token-validation.test.ts && npx tsx tests/auth-multi-account.test.ts && npx tsx tests/mcp-no-disk.test.ts && node --import tsx --test tests/secure-store-windows-lock.test.ts",
69
75
  "verify:readme": "node --test test/readme-command-surface.test.mjs",
@@ -76,8 +82,11 @@
76
82
  "check:agents-docs": "node scripts/check-agents-docs-sync.mjs",
77
83
  "prepublishOnly": "npm run check:release && npm run build",
78
84
  "start": "node dist/index.js",
79
- "test": "npx tsx src/index.ts --help && npm run verify:retired-api-command && npm run verify:sandbox-tools && npm run verify:dependency-hygiene && npm run verify:readme",
85
+ "test": "npx tsx src/index.ts --help && npm run verify:retired-api-command && npm run verify:sandbox-tools && npm run verify:dependency-hygiene && npm run verify:readme && npm run verify:cli-agent-model-context && npm run verify:analysis-feedback",
80
86
  "verify:kb-versions": "tsx test/kb-version-management-command.test.mjs",
87
+ "verify:automation": "tsx tests/automation-command.test.ts",
88
+ "verify:project-kb-schema": "tsx --test test/kb-schema-import-command.test.mjs && node --test test/project-semantic-compile-schema.test.mjs test/project-semantic-empty-skeleton.test.mjs && node test/project-semantic-knowledge-wiki-reference.test.mjs",
89
+ "verify:install": "tsx --test tests/installation.test.ts && node --test test/install-entrypoint.test.mjs",
81
90
  "verify:notifications": "tsx tests/notification-command.test.ts"
82
91
  },
83
92
  "repository": {
@@ -98,6 +107,7 @@
98
107
  "@types/json-bigint": "^1.0.4",
99
108
  "cli-table3": "^0.6.5",
100
109
  "commander": "^12.1.0",
110
+ "cross-spawn": "7.0.6",
101
111
  "csv-parse": "^7.0.2",
102
112
  "iconv-lite": "^0.7.3",
103
113
  "jq-wasm": "^3.0.0-jq-1.8.2",
@@ -107,10 +117,12 @@
107
117
  "stream-json": "3.6.0",
108
118
  "turndown": "^7.2.4",
109
119
  "undici": "6.28.1",
110
- "unzipper": "^0.12.5"
120
+ "unzipper": "^0.12.5",
121
+ "yaml": "2.8.3"
111
122
  },
112
123
  "devDependencies": {
113
124
  "@types/archiver": "7.0.0",
125
+ "@types/cross-spawn": "6.0.6",
114
126
  "@types/node": "^22.0.0",
115
127
  "@types/turndown": "^5.0.6",
116
128
  "@types/unzipper": "^0.10.11",