@soku-ai/cli 0.1.0-alpha.17 → 0.1.0-alpha.19
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.
- package/README.md +33 -22
- package/dist/commands/auth.d.ts +1 -3
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +18 -3
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/automation.d.ts +46 -0
- package/dist/commands/automation.d.ts.map +1 -1
- package/dist/commands/automation.js +150 -0
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/brand-skill.d.ts +23 -0
- package/dist/commands/brand-skill.d.ts.map +1 -1
- package/dist/commands/brand-skill.js +82 -0
- package/dist/commands/brand-skill.js.map +1 -1
- package/dist/commands/changelog.d.ts +79 -0
- package/dist/commands/changelog.d.ts.map +1 -0
- package/dist/commands/changelog.js +123 -0
- package/dist/commands/changelog.js.map +1 -0
- package/dist/commands/context.d.ts +54 -0
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +362 -43
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/egress.d.ts +49 -1
- package/dist/commands/egress.d.ts.map +1 -1
- package/dist/commands/egress.js +287 -33
- package/dist/commands/egress.js.map +1 -1
- package/dist/commands/generated.d.ts +8 -3
- package/dist/commands/generated.d.ts.map +1 -1
- package/dist/commands/generated.js +10 -3
- package/dist/commands/generated.js.map +1 -1
- package/dist/commands/live-surface.d.ts +15 -0
- package/dist/commands/live-surface.d.ts.map +1 -0
- package/dist/commands/live-surface.js +96 -0
- package/dist/commands/live-surface.js.map +1 -0
- package/dist/commands/workspace.d.ts +13 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +34 -7
- package/dist/commands/workspace.js.map +1 -1
- package/dist/generated/capabilities.json +7710 -2318
- package/dist/generated/changelog.json +2232 -0
- package/dist/http/client.d.ts +17 -0
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +34 -5
- package/dist/http/client.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/output/envelope.d.ts +2 -1
- package/dist/output/envelope.d.ts.map +1 -1
- package/dist/output/envelope.js +2 -2
- package/dist/output/envelope.js.map +1 -1
- package/dist/upload-journal.d.ts +46 -0
- package/dist/upload-journal.d.ts.map +1 -0
- package/dist/upload-journal.js +102 -0
- package/dist/upload-journal.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -5
- package/skills/soku/SKILL.md +74 -12
- package/skills/soku/agents/openai.yaml +4 -0
- package/skills/soku/references/ads-write.md +12 -6
- package/skills/soku/references/auth-workspace.md +27 -12
- package/skills/soku/references/data-capabilities.md +22 -1
- package/skills/soku/references/egress-security.md +63 -0
- package/skills/soku/references/seo-automation-files.md +67 -3
- package/skills/soku/references/skills-updates.md +54 -0
package/dist/commands/context.js
CHANGED
|
@@ -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 {
|
|
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
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
223
|
-
|
|
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
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
237
|
-
|
|
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
|
-
//
|
|
240
|
-
|
|
241
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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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"}
|
|
@@ -14,11 +14,59 @@ export interface ParsedCurl {
|
|
|
14
14
|
url?: string;
|
|
15
15
|
headers: Record<string, string>;
|
|
16
16
|
body?: Buffer;
|
|
17
|
+
/** `-o/--output`: write the upstream body here instead of stdout. */
|
|
18
|
+
output?: string;
|
|
17
19
|
}
|
|
18
|
-
|
|
20
|
+
export declare class CurlUsageError extends Error {
|
|
21
|
+
readonly hint?: string | undefined;
|
|
22
|
+
constructor(message: string, hint?: string | undefined);
|
|
23
|
+
}
|
|
24
|
+
/** Encode exactly as curl's `--data-urlencode` does.
|
|
25
|
+
*
|
|
26
|
+
* Measured against curl 8.7.1 rather than assumed, because two details are easy
|
|
27
|
+
* to get wrong and both change the bytes the upstream receives:
|
|
28
|
+
*
|
|
29
|
+
* - a space becomes `+`, NOT `%20` — this is form encoding, not RFC 3986
|
|
30
|
+
* - hex digits are LOWERCASE (`%2c`), where `encodeURIComponent` emits `%2C`
|
|
31
|
+
*
|
|
32
|
+
* Unreserved characters (`A-Za-z0-9-._~`) pass through; everything else is
|
|
33
|
+
* percent-encoded per UTF-8 byte. Matching curl is the point: the whole promise
|
|
34
|
+
* of `soku egress` is that prefixing an existing skill's curl changes nothing
|
|
35
|
+
* about the request that reaches the third party.
|
|
36
|
+
*/
|
|
37
|
+
export declare function curlEscape(value: string): string;
|
|
38
|
+
/** Build one `--data-urlencode` segment, following curl's four forms.
|
|
39
|
+
*
|
|
40
|
+
* content -> encoded content, no name
|
|
41
|
+
* =content -> encoded content, no name (leading `=` dropped)
|
|
42
|
+
* name=content -> `name=` kept literal, content encoded
|
|
43
|
+
* @file -> encoded file bytes, no name
|
|
44
|
+
* name@file -> `name=` kept literal, encoded file bytes
|
|
45
|
+
*
|
|
46
|
+
* Whichever of `=` or `@` appears first decides the form, matching curl.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildUrlEncodedSegment(spec: string, readFile?: (path: string) => string): string;
|
|
49
|
+
/** Expand a bundled short-flag token (`-sSL`) into its parts.
|
|
50
|
+
*
|
|
51
|
+
* Only bundles made entirely of no-value short flags expand; anything else is
|
|
52
|
+
* rejected rather than guessed at, because a bundle ending in a value-taking
|
|
53
|
+
* flag (`-so out.json`) would otherwise silently mis-assign the value.
|
|
54
|
+
*/
|
|
55
|
+
export declare function expandShortBundle(token: string): string[] | null;
|
|
56
|
+
/** Extract method / url / headers / body from a curl-style token list. Pure.
|
|
57
|
+
*
|
|
58
|
+
* Anything this parser does not understand is now an error. The previous
|
|
59
|
+
* behaviour — skip the flag, and do not consume its value — meant an
|
|
60
|
+
* unsupported flag vanished, its value was dropped as a stray token, and the
|
|
61
|
+
* request went out anyway with parameters missing. The upstream then answered
|
|
62
|
+
* about the first thing it noticed missing, which sent every investigation in
|
|
63
|
+
* the wrong direction.
|
|
64
|
+
*/
|
|
19
65
|
export declare function parseCurl(tokens: string[]): ParsedCurl;
|
|
20
66
|
/** Drop empty / bare-scheme auth headers so the server injects the real key
|
|
21
67
|
* (an empty `Authorization: Bearer ` would otherwise be treated as BYO). */
|
|
22
68
|
export declare function stripPlaceholderAuth(headers: Record<string, string>): Record<string, string>;
|
|
69
|
+
/** Where the upstream body goes: the `-o` file, or stdout when none was given. */
|
|
70
|
+
export declare function responseSink(output: string | undefined): NodeJS.WritableStream;
|
|
23
71
|
export declare function registerEgressCommands(program: Command): void;
|
|
24
72
|
//# sourceMappingURL=egress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egress.d.ts","sourceRoot":"","sources":["../../src/commands/egress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"egress.d.ts","sourceRoot":"","sources":["../../src/commands/egress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAA;AAOzD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAMD,qBAAa,cAAe,SAAQ,KAAK;IACV,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBAAvC,OAAO,EAAE,MAAM,EAAW,IAAI,CAAC,EAAE,MAAM,YAAA;CAGpD;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAShD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAA6C,GACxE,MAAM,CAuBR;AAwDD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAKhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAqHtD;AAED;4EAC4E;AAC5E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO5F;AA6BD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,cAAc,CAE9E;AAkGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF7D"}
|