@soku-ai/cli 0.1.0-alpha.17 → 0.1.0-alpha.18

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 (44) hide show
  1. package/dist/commands/auth.d.ts +1 -3
  2. package/dist/commands/auth.d.ts.map +1 -1
  3. package/dist/commands/auth.js +18 -3
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/automation.d.ts +46 -0
  6. package/dist/commands/automation.d.ts.map +1 -1
  7. package/dist/commands/automation.js +150 -0
  8. package/dist/commands/automation.js.map +1 -1
  9. package/dist/commands/changelog.d.ts +79 -0
  10. package/dist/commands/changelog.d.ts.map +1 -0
  11. package/dist/commands/changelog.js +123 -0
  12. package/dist/commands/changelog.js.map +1 -0
  13. package/dist/commands/context.d.ts +54 -0
  14. package/dist/commands/context.d.ts.map +1 -1
  15. package/dist/commands/context.js +362 -43
  16. package/dist/commands/context.js.map +1 -1
  17. package/dist/commands/egress.d.ts +49 -1
  18. package/dist/commands/egress.d.ts.map +1 -1
  19. package/dist/commands/egress.js +222 -33
  20. package/dist/commands/egress.js.map +1 -1
  21. package/dist/commands/workspace.d.ts +13 -0
  22. package/dist/commands/workspace.d.ts.map +1 -1
  23. package/dist/commands/workspace.js +34 -7
  24. package/dist/commands/workspace.js.map +1 -1
  25. package/dist/generated/capabilities.json +4250 -1619
  26. package/dist/generated/changelog.json +1448 -0
  27. package/dist/http/client.d.ts +16 -0
  28. package/dist/http/client.d.ts.map +1 -1
  29. package/dist/http/client.js +25 -5
  30. package/dist/http/client.js.map +1 -1
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/upload-journal.d.ts +46 -0
  34. package/dist/upload-journal.d.ts.map +1 -0
  35. package/dist/upload-journal.js +102 -0
  36. package/dist/upload-journal.js.map +1 -0
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +3 -3
  40. package/skills/soku/SKILL.md +17 -2
  41. package/skills/soku/references/auth-workspace.md +27 -12
  42. package/skills/soku/references/egress-security.md +44 -0
  43. package/skills/soku/references/seo-automation-files.md +67 -3
  44. package/skills/soku/references/skills-updates.md +23 -0
@@ -19,5 +19,59 @@ export interface UploadTask {
19
19
  export declare function expandUploadPaths(rawPaths: string[], opts: {
20
20
  dir: string;
21
21
  }): UploadTask[];
22
+ /** How many attempts a single file gets before the run gives up on it. */
23
+ export declare const DEFAULT_UPLOAD_ATTEMPTS = 3;
24
+ /** Failures worth retrying: the request never reached a decision, or the server
25
+ * said it could not answer *right now*. A 4xx other than 408/429 is a decision
26
+ * (bad path, unauthorized, too large) and retrying it only wastes time. */
27
+ export declare function isRetriableStatus(status: number): boolean;
28
+ /** Exponential backoff with jitter, capped so a long batch cannot stall.
29
+ * Jitter matters here specifically: without it, a concurrent pool that trips a
30
+ * rate limit retries in lockstep and trips it again. */
31
+ export declare function retryDelayMs(attempt: number, random?: () => number): number;
32
+ /** Base64 MD5 of a local file, in the same shape the server reports. */
33
+ export declare function md5Base64(bytes: Buffer): string;
34
+ interface ManifestFile {
35
+ path: string;
36
+ name: string;
37
+ size_bytes: number;
38
+ md5?: string | null;
39
+ }
40
+ interface ManifestResponse {
41
+ dir: string;
42
+ checksums: boolean;
43
+ count: number;
44
+ total_bytes: number;
45
+ files: ManifestFile[];
46
+ }
47
+ export type VerifyStatus = 'ok' | 'missing' | 'size_mismatch' | 'checksum_mismatch' | 'unverified';
48
+ export interface VerifyRow {
49
+ path: string;
50
+ status: VerifyStatus;
51
+ localBytes: number;
52
+ remoteBytes?: number;
53
+ }
54
+ export interface VerifyReport {
55
+ dir: string;
56
+ checked: number;
57
+ ok: number;
58
+ mismatched: number;
59
+ missing: number;
60
+ unverified: number;
61
+ rows: VerifyRow[];
62
+ }
63
+ /** Compare planned local files against the server's manifest.
64
+ *
65
+ * Size alone catches a truncated upload; only the checksum catches bytes that
66
+ * arrived intact but wrong. When the server reports no checksum for a file the
67
+ * row is `unverified` rather than `ok`, so a missing hash never reads as proof.
68
+ */
69
+ export declare function buildVerifyReport(tasks: UploadTask[], manifest: ManifestResponse, localOf: (task: UploadTask) => {
70
+ sizeBytes: number;
71
+ md5: string;
72
+ }): VerifyReport;
73
+ export declare function verificationClean(report: VerifyReport | null): boolean;
74
+ export declare function renderVerifyReport(report: VerifyReport): string;
22
75
  export declare function registerContextCommands(program: Command): void;
76
+ export {};
23
77
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6FnC,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;wCAGwC;AACxC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACpB,UAAU,EAAE,CAoCd;AAmGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsH9D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAyGnC,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;wCAGwC;AACxC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACpB,UAAU,EAAE,CAoCd;AAWD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;2EAE2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;wDAEwD;AACxD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,MAAoB,GAAG,MAAM,CAGxF;AA2BD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,mBAAmB,GAAG,YAAY,CAAA;AAElG,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EAAE,EACnB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChE,YAAY,CA+Cd;AA0LD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAGtE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAuB/D;AA8BD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoQ9D"}
@@ -6,13 +6,17 @@
6
6
  * POST to mint a signed URL, then PUT the bytes straight to storage.
7
7
  */
8
8
  import { basename, extname, join, relative } from 'node:path';
9
+ import { createHash } from 'node:crypto';
9
10
  import { readFileSync, readdirSync, statSync } from 'node:fs';
10
- import { apiRequest } from '../http/client.js';
11
+ import { loadConfig } from '../config.js';
12
+ import { ApiError, apiRequest } from '../http/client.js';
13
+ import { deleteJournal, listJournals, loadJournal, newRunId, pendingEntries, pruneJournals, saveJournal, } from '../upload-journal.js';
11
14
  import { bold, dim, emitError, emitSuccess, emitSuccessExit, ExitCode, table } from '../output/envelope.js';
12
15
  const FILES_PATH = '/api/cli/context-hub/files';
13
16
  const UPLOAD_PATH = '/api/cli/context-hub/upload';
14
17
  const DIRECTORY_PATH = '/api/cli/context-hub/directory';
15
18
  const RENAME_PATH = '/api/cli/context-hub/rename';
19
+ const MANIFEST_PATH = '/api/cli/context-hub/manifest';
16
20
  /** Minimal extension → MIME map. The content-type signed in the POST must match
17
21
  * the PUT header exactly, so we compute it once and reuse it for both. */
18
22
  const MIME_BY_EXT = {
@@ -122,42 +126,164 @@ function walk(root, visit) {
122
126
  visit(abs);
123
127
  }
124
128
  }
129
+ /** How many attempts a single file gets before the run gives up on it. */
130
+ export const DEFAULT_UPLOAD_ATTEMPTS = 3;
131
+ /** Failures worth retrying: the request never reached a decision, or the server
132
+ * said it could not answer *right now*. A 4xx other than 408/429 is a decision
133
+ * (bad path, unauthorized, too large) and retrying it only wastes time. */
134
+ export function isRetriableStatus(status) {
135
+ return status === 408 || status === 429 || status >= 500;
136
+ }
137
+ /** Exponential backoff with jitter, capped so a long batch cannot stall.
138
+ * Jitter matters here specifically: without it, a concurrent pool that trips a
139
+ * rate limit retries in lockstep and trips it again. */
140
+ export function retryDelayMs(attempt, random = Math.random) {
141
+ const base = Math.min(1000 * 2 ** (attempt - 1), 8000);
142
+ return Math.round(base * (0.5 + random() * 0.5));
143
+ }
144
+ function sleep(ms) {
145
+ return new Promise((resolve) => setTimeout(resolve, ms));
146
+ }
147
+ /** Retriable-failure marker, so `withRetries` can tell a transient error from a
148
+ * permanent one without parsing message strings. */
149
+ class TransientUploadError extends Error {
150
+ }
151
+ async function withRetries(attempts, run) {
152
+ let lastError;
153
+ for (let attempt = 1; attempt <= attempts; attempt++) {
154
+ try {
155
+ return await run();
156
+ }
157
+ catch (err) {
158
+ lastError = err;
159
+ if (!(err instanceof TransientUploadError) || attempt === attempts)
160
+ throw lastError;
161
+ await sleep(retryDelayMs(attempt));
162
+ }
163
+ }
164
+ throw lastError ?? new Error('upload failed');
165
+ }
166
+ /** Base64 MD5 of a local file, in the same shape the server reports. */
167
+ export function md5Base64(bytes) {
168
+ return createHash('md5').update(bytes).digest('base64');
169
+ }
170
+ /** Compare planned local files against the server's manifest.
171
+ *
172
+ * Size alone catches a truncated upload; only the checksum catches bytes that
173
+ * arrived intact but wrong. When the server reports no checksum for a file the
174
+ * row is `unverified` rather than `ok`, so a missing hash never reads as proof.
175
+ */
176
+ export function buildVerifyReport(tasks, manifest, localOf) {
177
+ const remote = new Map(manifest.files.map((file) => [file.path, file]));
178
+ const rows = [];
179
+ for (const task of tasks) {
180
+ const path = task.targetDir ? `${task.targetDir}/${task.filename}` : task.filename;
181
+ const local = localOf(task);
182
+ const found = remote.get(path);
183
+ if (!found) {
184
+ rows.push({ path, status: 'missing', localBytes: local.sizeBytes });
185
+ continue;
186
+ }
187
+ if (found.size_bytes !== local.sizeBytes) {
188
+ rows.push({
189
+ path,
190
+ status: 'size_mismatch',
191
+ localBytes: local.sizeBytes,
192
+ remoteBytes: found.size_bytes,
193
+ });
194
+ continue;
195
+ }
196
+ if (!found.md5) {
197
+ rows.push({
198
+ path,
199
+ status: 'unverified',
200
+ localBytes: local.sizeBytes,
201
+ remoteBytes: found.size_bytes,
202
+ });
203
+ continue;
204
+ }
205
+ rows.push({
206
+ path,
207
+ status: found.md5 === local.md5 ? 'ok' : 'checksum_mismatch',
208
+ localBytes: local.sizeBytes,
209
+ remoteBytes: found.size_bytes,
210
+ });
211
+ }
212
+ return {
213
+ dir: manifest.dir,
214
+ checked: rows.length,
215
+ ok: rows.filter((r) => r.status === 'ok').length,
216
+ mismatched: rows.filter((r) => r.status === 'size_mismatch' || r.status === 'checksum_mismatch').length,
217
+ missing: rows.filter((r) => r.status === 'missing').length,
218
+ unverified: rows.filter((r) => r.status === 'unverified').length,
219
+ rows,
220
+ };
221
+ }
125
222
  /** Mint a presigned PUT URL then PUT the bytes — the two-step Context Hub
126
223
  * upload, isolated to one file. The presigned URL carries its own auth; the
127
224
  * Content-Type MUST match the one signed at mint time. */
128
225
  async function uploadOne(task, opts) {
129
226
  const { localPath, targetDir, filename } = task;
130
227
  const contentType = opts.contentType ?? guessContentType(filename);
228
+ const attempts = opts.attempts ?? DEFAULT_UPLOAD_ATTEMPTS;
131
229
  let bytes;
132
230
  try {
133
231
  bytes = readFileSync(localPath);
134
232
  }
135
233
  catch (err) {
234
+ // A local read failure is never transient in the way a network call is:
235
+ // the file is missing or unreadable and will be on the next attempt too.
136
236
  return { task, ok: false, error: `read failed: ${err.message}` };
137
237
  }
138
238
  let minted;
139
239
  try {
140
- minted = await apiRequest(UPLOAD_PATH, {
141
- method: 'POST',
142
- body: { filename, content_type: contentType, target_dir: targetDir },
143
- workspace: true,
240
+ minted = await withRetries(attempts, async () => {
241
+ try {
242
+ return await apiRequest(UPLOAD_PATH, {
243
+ method: 'POST',
244
+ body: { filename, content_type: contentType, target_dir: targetDir },
245
+ workspace: true,
246
+ // Without this the client exits the process on any error, so one
247
+ // file's transient 503 would end a run of hundreds.
248
+ throwOnError: true,
249
+ });
250
+ }
251
+ catch (err) {
252
+ // status 0 means the request never reached the server.
253
+ if (err instanceof ApiError && (err.status === 0 || isRetriableStatus(err.status))) {
254
+ throw new TransientUploadError(err.message);
255
+ }
256
+ throw err;
257
+ }
144
258
  });
145
259
  }
146
260
  catch (err) {
147
261
  return { task, ok: false, error: `mint failed: ${err.message}` };
148
262
  }
149
263
  try {
150
- const putRes = await fetch(minted.upload_url, {
151
- method: 'PUT',
152
- headers: { 'Content-Type': contentType },
153
- body: bytes,
264
+ await withRetries(attempts, async () => {
265
+ let putRes;
266
+ try {
267
+ putRes = await fetch(minted.upload_url, {
268
+ method: 'PUT',
269
+ headers: { 'Content-Type': contentType },
270
+ body: new Uint8Array(bytes),
271
+ });
272
+ }
273
+ catch (err) {
274
+ // The request never got an answer — the classic transient case.
275
+ throw new TransientUploadError(`PUT failed: ${err.message}`);
276
+ }
277
+ if (putRes.ok)
278
+ return;
279
+ const message = `PUT failed (HTTP ${putRes.status})`;
280
+ if (isRetriableStatus(putRes.status))
281
+ throw new TransientUploadError(message);
282
+ throw new Error(message);
154
283
  });
155
- if (!putRes.ok) {
156
- return { task, ok: false, error: `PUT failed (HTTP ${putRes.status})` };
157
- }
158
284
  }
159
285
  catch (err) {
160
- return { task, ok: false, error: `PUT failed: ${err.message}` };
286
+ return { task, ok: false, error: err.message };
161
287
  }
162
288
  return { task, ok: true, path: minted.path, sizeBytes: bytes.length, contentType };
163
289
  }
@@ -172,12 +298,103 @@ async function uploadAll(tasks, opts) {
172
298
  if (i >= tasks.length)
173
299
  return;
174
300
  outcomes[i] = await uploadOne(tasks[i], opts);
301
+ opts.onSettled?.(outcomes[i]);
175
302
  }
176
303
  });
177
304
  await Promise.all(workers);
178
305
  return outcomes;
179
306
  }
180
- function renderUploadSummary(outcomes) {
307
+ function parsePositiveIntFlag(raw, flag) {
308
+ const n = Number(raw);
309
+ if (!Number.isInteger(n) || n < 1) {
310
+ emitError('usage', `${flag} must be a positive integer, got: ${raw}`, ExitCode.USAGE);
311
+ }
312
+ return n;
313
+ }
314
+ /** Snapshot the plan so a killed run can be finished later. */
315
+ function startJournal(tasks, dir) {
316
+ const cfg = loadConfig();
317
+ const now = new Date().toISOString();
318
+ return {
319
+ runId: newRunId(),
320
+ createdAt: now,
321
+ updatedAt: now,
322
+ orgId: process.env.SOKU_ORG_ID || cfg.activeOrgId || null,
323
+ brandId: process.env.SOKU_BRAND_ID || cfg.activeBrandId || null,
324
+ dir,
325
+ entries: tasks.map((task) => ({
326
+ localPath: task.localPath,
327
+ targetDir: task.targetDir,
328
+ filename: task.filename,
329
+ status: 'pending',
330
+ })),
331
+ };
332
+ }
333
+ /** Refuse a resume that would push a recorded run into a different brand.
334
+ *
335
+ * Silently retargeting is the exact failure the run journal is supposed to
336
+ * prevent: the files would land, in the wrong workspace, and look successful. */
337
+ function assertSameWorkspace(journal) {
338
+ const cfg = loadConfig();
339
+ const orgId = process.env.SOKU_ORG_ID || cfg.activeOrgId || null;
340
+ const brandId = process.env.SOKU_BRAND_ID || cfg.activeBrandId || null;
341
+ if (journal.brandId && journal.brandId !== brandId) {
342
+ emitError('workspace_mismatch', `Run ${journal.runId} uploaded to brand ${journal.brandId}, but the active brand is ${brandId ?? '(none)'}.`, ExitCode.USAGE, `Switch back with \`soku workspace use-brand ${journal.brandId}\` before resuming.`);
343
+ }
344
+ if (journal.orgId && journal.orgId !== orgId) {
345
+ emitError('workspace_mismatch', `Run ${journal.runId} uploaded to org ${journal.orgId}, but the active org is ${orgId ?? '(none)'}.`, ExitCode.USAGE);
346
+ }
347
+ }
348
+ function recordOutcome(journal, outcome) {
349
+ const entry = journal.entries.find((item) => item.targetDir === outcome.task.targetDir && item.filename === outcome.task.filename);
350
+ if (!entry)
351
+ return;
352
+ entry.status = outcome.ok ? 'done' : 'failed';
353
+ entry.error = outcome.ok ? undefined : outcome.error;
354
+ entry.sizeBytes = outcome.sizeBytes;
355
+ entry.contentType = outcome.contentType;
356
+ }
357
+ /** Fetch the server manifest and compare it against what was just uploaded. */
358
+ async function verifyUploaded(tasks, dir) {
359
+ if (tasks.length === 0)
360
+ return null;
361
+ const query = new URLSearchParams({ checksums: 'true' });
362
+ if (dir)
363
+ query.set('dir', dir);
364
+ const manifest = await apiRequest(`${MANIFEST_PATH}?${query.toString()}`, {
365
+ workspace: true,
366
+ });
367
+ return buildVerifyReport(tasks, manifest, (task) => {
368
+ const bytes = readFileSync(task.localPath);
369
+ return { sizeBytes: bytes.length, md5: md5Base64(bytes) };
370
+ });
371
+ }
372
+ export function verificationClean(report) {
373
+ if (report === null)
374
+ return true;
375
+ return report.missing === 0 && report.mismatched === 0 && report.unverified === 0;
376
+ }
377
+ export function renderVerifyReport(report) {
378
+ const problems = report.rows.filter((row) => row.status !== 'ok');
379
+ const head = `${bold('Verified')} ${report.ok}/${report.checked} file${report.checked === 1 ? '' : 's'}`;
380
+ if (problems.length === 0)
381
+ return `${head}\n${dim('All sizes and checksums match.')}`;
382
+ return [
383
+ head,
384
+ table(problems.map((row) => ({
385
+ status: row.status,
386
+ path: row.path,
387
+ local: row.localBytes,
388
+ remote: row.remoteBytes ?? '-',
389
+ })), [
390
+ { key: 'status', header: 'STATUS' },
391
+ { key: 'path', header: 'PATH' },
392
+ { key: 'local', header: 'LOCAL BYTES' },
393
+ { key: 'remote', header: 'REMOTE BYTES' },
394
+ ]),
395
+ ].join('\n');
396
+ }
397
+ function renderUploadSummary(outcomes, resumeCommand, verification) {
181
398
  const ok = outcomes.filter((o) => o.ok);
182
399
  const failed = outcomes.filter((o) => !o.ok);
183
400
  const head = `${bold('Uploaded')} ${ok.length}/${outcomes.length} file${outcomes.length === 1 ? '' : 's'}`;
@@ -188,6 +405,14 @@ function renderUploadSummary(outcomes) {
188
405
  for (const o of failed) {
189
406
  lines.push(` ${dim('x')} ${o.task.targetDir}/${o.task.filename} — ${o.error}`);
190
407
  }
408
+ if (resumeCommand) {
409
+ lines.push('');
410
+ lines.push(`${bold('Resume the rest with')}: ${resumeCommand}`);
411
+ }
412
+ if (verification) {
413
+ lines.push('');
414
+ lines.push(renderVerifyReport(verification));
415
+ }
191
416
  return lines.join('\n');
192
417
  }
193
418
  export function registerContextCommands(program) {
@@ -204,59 +429,153 @@ export function registerContextCommands(program) {
204
429
  emitSuccess(data, renderList);
205
430
  });
206
431
  context
207
- .command('upload <paths...>')
432
+ .command('upload [paths...]')
208
433
  .description('Upload one or more files (or directories) to the Context Hub. ' +
209
434
  'Directories recurse and preserve structure under --dir; globs expand. ' +
210
- 'Runs uploads concurrently; failures are isolated and summarized.')
435
+ 'Runs uploads concurrently, retries transient failures, and records a ' +
436
+ 'resumable run so a partial batch can be finished with --resume.')
211
437
  .option('--dir <dir>', 'Context-relative target directory (e.g. docs)', '')
212
438
  .option('--name <name>', 'Override the stored filename (only valid with a single input file)')
213
439
  .option('--content-type <type>', 'Override the content type (defaults to a guess by extension)')
214
- .option('--concurrency <n>', 'Max simultaneous uploads (default 4)', (v) => {
215
- const n = Number(v);
216
- if (!Number.isInteger(n) || n < 1) {
217
- emitError('usage', `--concurrency must be a positive integer, got: ${v}`, ExitCode.USAGE);
218
- }
219
- return n;
220
- }, 4)
440
+ .option('--concurrency <n>', 'Max simultaneous uploads (default 4)', (v) => parsePositiveIntFlag(v, '--concurrency'), 4)
441
+ .option('--retries <n>', `Attempts per file before giving up (default ${DEFAULT_UPLOAD_ATTEMPTS})`, (v) => parsePositiveIntFlag(v, '--retries'), DEFAULT_UPLOAD_ATTEMPTS)
442
+ .option('--resume <run_id>', 'Finish a previous run, re-uploading only the files that never landed')
443
+ .option('--verify', 'After uploading, reconcile the uploaded files against the server by size and checksum')
221
444
  .action(async (paths, opts) => {
222
- if (paths.length === 0) {
223
- emitError('usage', 'upload requires at least one file or directory', ExitCode.USAGE);
224
- }
225
- // `--name` only makes sense for a single file; reject ambiguity early.
226
- if (opts.name && paths.length > 1) {
227
- emitError('usage', '--name can only be used with a single input file', ExitCode.USAGE);
228
- }
445
+ pruneJournals();
446
+ const inputPaths = paths ?? [];
447
+ let journal;
229
448
  let tasks;
230
- try {
231
- tasks = expandUploadPaths(paths, { dir: opts.dir });
232
- }
233
- catch (err) {
234
- emitError('usage', err.message, ExitCode.USAGE);
449
+ if (opts.resume) {
450
+ if (inputPaths.length > 0) {
451
+ emitError('usage', '--resume replays a recorded run; do not also pass paths.', ExitCode.USAGE, `Run: soku context upload --resume ${opts.resume}`);
452
+ }
453
+ const loaded = loadJournal(opts.resume);
454
+ if (!loaded) {
455
+ emitError('not_found', `No upload run recorded with id ${opts.resume}.`, ExitCode.NOT_FOUND, 'List recorded runs with `soku context uploads`.');
456
+ }
457
+ assertSameWorkspace(loaded);
458
+ journal = loaded;
459
+ const pending = pendingEntries(journal);
460
+ if (pending.length === 0) {
461
+ emitSuccess({ run_id: journal.runId, uploaded: 0, failed: 0, remaining: 0, files: [], failures: [] }, () => `${bold('Nothing to resume')} — run ${journal.runId} already completed.`);
462
+ return;
463
+ }
464
+ tasks = pending.map((entry) => ({
465
+ localPath: entry.localPath,
466
+ targetDir: entry.targetDir,
467
+ filename: entry.filename,
468
+ }));
235
469
  }
236
- if (tasks.length === 0) {
237
- emitError('usage', 'no files to upload (only dotfiles/cruft found?)', ExitCode.USAGE);
470
+ else {
471
+ if (inputPaths.length === 0) {
472
+ emitError('usage', 'upload requires at least one file or directory (or --resume <run_id>)', ExitCode.USAGE);
473
+ }
474
+ // `--name` only makes sense for a single file; reject ambiguity early.
475
+ if (opts.name && inputPaths.length > 1) {
476
+ emitError('usage', '--name can only be used with a single input file', ExitCode.USAGE);
477
+ }
478
+ try {
479
+ tasks = expandUploadPaths(inputPaths, { dir: opts.dir });
480
+ }
481
+ catch (err) {
482
+ emitError('usage', err.message, ExitCode.USAGE);
483
+ }
484
+ if (tasks.length === 0) {
485
+ emitError('usage', 'no files to upload (only dotfiles/cruft found?)', ExitCode.USAGE);
486
+ }
487
+ // Apply a single-file rename last, after expansion validated it.
488
+ if (opts.name && tasks.length === 1)
489
+ tasks[0].filename = opts.name;
490
+ journal = startJournal(tasks, opts.dir);
238
491
  }
239
- // Apply a single-file rename last, after expansion validated it.
240
- if (opts.name && tasks.length === 1)
241
- tasks[0].filename = opts.name;
492
+ // Persist before the first byte moves: a run killed mid-batch must
493
+ // still be resumable, which needs the plan on disk up front.
494
+ saveJournal(journal);
242
495
  const outcomes = await uploadAll(tasks, {
243
496
  contentType: opts.contentType,
244
497
  concurrency: opts.concurrency,
498
+ attempts: opts.retries,
499
+ onSettled: (outcome) => {
500
+ recordOutcome(journal, outcome);
501
+ saveJournal(journal);
502
+ },
245
503
  });
246
504
  const ok = outcomes.filter((o) => o.ok);
505
+ const failures = outcomes.filter((o) => !o.ok);
506
+ const remaining = pendingEntries(journal).length;
507
+ // Only a fully settled run may drop its journal; anything left pending
508
+ // is exactly what --resume exists to pick up.
509
+ if (remaining === 0)
510
+ deleteJournal(journal.runId);
511
+ // The journal's dir, not `opts.dir`: on a resume the caller passes only
512
+ // --resume, so `opts.dir` is the empty default and would widen the
513
+ // manifest query to the whole hub.
514
+ const verification = opts.verify
515
+ ? await verifyUploaded(ok.map((o) => o.task), journal.dir)
516
+ : null;
247
517
  const data = {
518
+ run_id: journal.runId,
248
519
  uploaded: ok.length,
249
- failed: outcomes.length - ok.length,
520
+ failed: failures.length,
521
+ remaining,
250
522
  total_bytes: ok.reduce((sum, o) => sum + (o.sizeBytes ?? 0), 0),
251
523
  files: ok.map((o) => ({ path: o.path, size_bytes: o.sizeBytes, content_type: o.contentType })),
252
- failures: outcomes.filter((o) => !o.ok).map((o) => ({
524
+ failures: failures.map((o) => ({
253
525
  path: `${o.task.targetDir}/${o.task.filename}`,
254
526
  error: o.error,
255
527
  })),
528
+ resume_command: remaining > 0 ? `soku context upload --resume ${journal.runId}` : null,
529
+ verification,
256
530
  };
257
531
  // Partial failure still emits the success-shaped summary (callers want
258
532
  // the JSON results) but exits non-zero so scripts detect the failures.
259
- emitSuccessExit(data, data.failed > 0 ? ExitCode.RUNTIME : ExitCode.OK, renderUploadSummary.bind(null, outcomes));
533
+ const clean = data.failed === 0 && (verification === null || verificationClean(verification));
534
+ emitSuccessExit(data, clean ? ExitCode.OK : ExitCode.RUNTIME, () => renderUploadSummary(outcomes, data.resume_command, verification));
535
+ });
536
+ context
537
+ .command('verify <paths...>')
538
+ .description('Reconcile local files against the Context Hub by size and checksum, ' +
539
+ 'without uploading anything.')
540
+ .option('--dir <dir>', 'Context-relative directory the files were uploaded to', '')
541
+ .action(async (paths, opts) => {
542
+ let tasks;
543
+ try {
544
+ tasks = expandUploadPaths(paths, { dir: opts.dir });
545
+ }
546
+ catch (err) {
547
+ emitError('usage', err.message, ExitCode.USAGE);
548
+ }
549
+ if (tasks.length === 0) {
550
+ emitError('usage', 'no local files to verify (only dotfiles/cruft found?)', ExitCode.USAGE);
551
+ }
552
+ const report = await verifyUploaded(tasks, opts.dir);
553
+ if (report === null) {
554
+ emitError('usage', 'no local files to verify', ExitCode.USAGE);
555
+ }
556
+ emitSuccessExit(report, verificationClean(report) ? ExitCode.OK : ExitCode.RUNTIME, renderVerifyReport);
557
+ });
558
+ context
559
+ .command('uploads')
560
+ .description('List upload runs that recorded unfinished files and can be resumed')
561
+ .action(() => {
562
+ pruneJournals();
563
+ const runs = listJournals().map((journal) => ({
564
+ run_id: journal.runId,
565
+ created_at: journal.createdAt,
566
+ dir: journal.dir,
567
+ total: journal.entries.length,
568
+ remaining: pendingEntries(journal).length,
569
+ }));
570
+ emitSuccess({ runs, count: runs.length }, (d) => d.runs.length === 0
571
+ ? dim('No resumable upload runs.')
572
+ : table(d.runs, [
573
+ { key: 'run_id', header: 'RUN ID' },
574
+ { key: 'created_at', header: 'CREATED' },
575
+ { key: 'dir', header: 'DIR' },
576
+ { key: 'total', header: 'FILES' },
577
+ { key: 'remaining', header: 'REMAINING' },
578
+ ]));
260
579
  });
261
580
  context
262
581
  .command('rm <path>')
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC3G,MAAM,UAAU,GAAG,4BAA4B,CAAA;AAC/C,MAAM,WAAW,GAAG,6BAA6B,CAAA;AACjD,MAAM,cAAc,GAAG,gCAAgC,CAAA;AACvD,MAAM,WAAW,GAAG,6BAA6B,CAAA;AAsBjD;0EAC0E;AAC1E,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,yEAAyE;IAClF,MAAM,EAAE,0BAA0B;IAClC,OAAO,EAAE,mEAAmE;CAC7E,CAAA;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAA;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAA;IACpE,MAAM,KAAK,GAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5E,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CACR,KAAK,CACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,SAAS;YACjB,IAAI,EAAE,CAAC,CAAC,UAAU;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,EACH;YACE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;YAChC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;SAChC,CACF,CACF,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,+EAA+E;AAC/E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;AAS9E;;;wCAGwC;AACxC,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,IAAqB;IAErB,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAQ,EAAE;QAC5E,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAM;QAC9C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAM;QACpC,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAA;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAM;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC,CAAA;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,wEAAwE;YACxE,2CAA2C;YAC3C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAClC,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,8BAA8B;gBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC3E,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,SAAS,IAAI,CAAC,IAAY,EAAE,KAAgC;IAC1D,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;aACpC,IAAI,KAAK,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAaD;;0DAE0D;AAC1D,KAAK,UAAU,SAAS,CACtB,IAAgB,EAChB,IAA8B;IAE9B,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,KAAa,CAAA;IACjB,IAAI,CAAC;QACH,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAiB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAA;IAC7E,CAAC;IAED,IAAI,MAAyB,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAoB,WAAW,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE;YACpE,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAiB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAA;IAC7E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;YACxC,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAA;QACzE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAgB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAA;IAC5E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAA;AACpF,CAAC;AAED;0DAC0D;AAC1D,KAAK,UAAU,SAAS,CACtB,KAAmB,EACnB,IAAmD;IAEnD,MAAM,QAAQ,GAAoB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACzD,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC1F,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,EAAE,CAAA;YAChB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAM;YAC7B,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAyB;IACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,QAC9D,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/B,EAAE,CAAA;IACF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;IACpB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,CAAA;IAC9D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC,CAAA;IAE1F,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,aAAa,EAAE,wCAAwC,EAAE,EAAE,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAChE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAe,GAAG,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrF,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CACV,gEAAgE;QAC9D,wEAAwE;QACxE,kEAAkE,CACrE;SACA,MAAM,CAAC,aAAa,EAAE,+CAA+C,EAAE,EAAE,CAAC;SAC1E,MAAM,CACL,eAAe,EACf,oEAAoE,CACrE;SACA,MAAM,CAAC,uBAAuB,EAAE,8DAA8D,CAAC;SAC/F,MAAM,CACL,mBAAmB,EACnB,sCAAsC,EACtC,CAAC,CAAS,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,OAAO,EAAE,kDAAkD,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC3F,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC,EACD,CAAC,CACF;SACA,MAAM,CACL,KAAK,EAAE,KAAe,EAAE,IAA+E,EAAE,EAAE;QACzG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,EAAE,gDAAgD,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtF,CAAC;QACD,uEAAuE;QACvE,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,OAAO,EAAE,kDAAkD,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QACxF,CAAC;QAED,IAAI,KAAmB,CAAA;QACvB,IAAI,CAAC;YACH,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,EAAE,iDAAiD,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QACvF,CAAC;QACD,iEAAiE;QACjE,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;QAElE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE;YACtC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAA;QAEF,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,EAAE,CAAC,MAAM;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;YACnC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/D,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9F,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC9C,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;SACJ,CAAA;QACD,uEAAuE;QACvE,uEAAuE;QACvE,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnH,CAAC,CACF,CAAA;IAEH,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,GAAG,UAAU,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAChD,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CACtC,CAAA;QACD,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAsB,cAAc,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAkC,WAAW,EAAE;YAC1E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC9C,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}