scoutline 0.16.0 → 0.17.0
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 +47 -0
- package/dist/command-invocation.d.ts +2 -2
- package/dist/command-invocation.d.ts.map +1 -1
- package/dist/command-invocation.js +1 -1
- package/dist/command-invocation.js.map +1 -1
- package/dist/commands/research.d.ts +45 -0
- package/dist/commands/research.d.ts.map +1 -1
- package/dist/commands/research.js +152 -4
- package/dist/commands/research.js.map +1 -1
- package/dist/commands/search.d.ts +11 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +31 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/usage.d.ts +101 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +228 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/vision.d.ts +28 -0
- package/dist/commands/vision.d.ts.map +1 -1
- package/dist/commands/vision.js +452 -0
- package/dist/commands/vision.js.map +1 -1
- package/dist/index.d.ts +25 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +572 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/batch-assign.d.ts +61 -0
- package/dist/lib/batch-assign.d.ts.map +1 -0
- package/dist/lib/batch-assign.js +118 -0
- package/dist/lib/batch-assign.js.map +1 -0
- package/dist/lib/batch-manifest.d.ts +183 -0
- package/dist/lib/batch-manifest.d.ts.map +1 -0
- package/dist/lib/batch-manifest.js +644 -0
- package/dist/lib/batch-manifest.js.map +1 -0
- package/dist/lib/batch-runner.d.ts +169 -0
- package/dist/lib/batch-runner.d.ts.map +1 -0
- package/dist/lib/batch-runner.js +357 -0
- package/dist/lib/batch-runner.js.map +1 -0
- package/dist/lib/consumption.d.ts +17 -0
- package/dist/lib/consumption.d.ts.map +1 -1
- package/dist/lib/consumption.js +38 -0
- package/dist/lib/consumption.js.map +1 -1
- package/dist/lib/context-file.d.ts +90 -0
- package/dist/lib/context-file.d.ts.map +1 -0
- package/dist/lib/context-file.js +244 -0
- package/dist/lib/context-file.js.map +1 -0
- package/dist/lib/trigger-detection.d.ts +21 -0
- package/dist/lib/trigger-detection.d.ts.map +1 -1
- package/dist/lib/trigger-detection.js +63 -0
- package/dist/lib/trigger-detection.js.map +1 -1
- package/dist/lib/usage-ledger.d.ts +221 -0
- package/dist/lib/usage-ledger.d.ts.map +1 -0
- package/dist/lib/usage-ledger.js +408 -0
- package/dist/lib/usage-ledger.js.map +1 -0
- package/dist/node-command-invocation-adapter.d.ts +25 -0
- package/dist/node-command-invocation-adapter.d.ts.map +1 -1
- package/dist/node-command-invocation-adapter.js +73 -38
- package/dist/node-command-invocation-adapter.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/vision.js
CHANGED
|
@@ -14,8 +14,15 @@
|
|
|
14
14
|
* limits stay in the Adapter media Modules. Vision never uses the
|
|
15
15
|
* response cache (FR-022).
|
|
16
16
|
*/
|
|
17
|
+
import { randomUUID } from "node:crypto";
|
|
18
|
+
import * as path from "node:path";
|
|
19
|
+
import { existsSync } from "node:fs";
|
|
20
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
17
21
|
import { executeProviderOperation } from "../lib/execution.js";
|
|
18
22
|
import { ValidationError } from "../lib/errors.js";
|
|
23
|
+
import { parseBatchManifest } from "../lib/batch-manifest.js";
|
|
24
|
+
import { assignBatchProviders } from "../lib/batch-assign.js";
|
|
25
|
+
import { runBatch } from "../lib/batch-runner.js";
|
|
19
26
|
import { defaultAmountForCapability } from "../lib/consumption.js";
|
|
20
27
|
import { isMiniMaxVisionOperationSupported, SPECIALIZED_VISION_OPERATION_SET, } from "../providers/minimax/vision-conformance.js";
|
|
21
28
|
const DEFAULT_PROMPTS = {
|
|
@@ -82,6 +89,11 @@ Commands:
|
|
|
82
89
|
chart <image> [prompt] Analyze data visualizations${chartSuffix}
|
|
83
90
|
diff <expected> <actual> [prompt] Compare two UI screenshots${diffSuffix}
|
|
84
91
|
video <video> [prompt] Analyze video content${videoSuffix}
|
|
92
|
+
batch <manifest|glob> [options] Run many inputs through the shared
|
|
93
|
+
batch runner (one op per media file,
|
|
94
|
+
distributed across eligible vision
|
|
95
|
+
providers, routing preferences
|
|
96
|
+
ignored; concurrency default 1)
|
|
85
97
|
|
|
86
98
|
Options:
|
|
87
99
|
--language <lang> Programming language hint (extract-text)
|
|
@@ -90,6 +102,15 @@ Options:
|
|
|
90
102
|
--focus <focus> Analysis focus (chart)
|
|
91
103
|
--output <type> Output type for ui-to-code: code, prompt, spec, description
|
|
92
104
|
|
|
105
|
+
Vision batch options (batch subcommand only):
|
|
106
|
+
--out <dir> Output directory (required for more than one input;
|
|
107
|
+
created if missing; writes one JSON file per input
|
|
108
|
+
plus <dir>/summary.json)
|
|
109
|
+
--prompt <tpl> Glob-mode prompt template ({filename}/{filepath});
|
|
110
|
+
manifest mode uses the manifest's promptTemplate
|
|
111
|
+
--concurrency <n> Parallel operations (integer 1-8; default 1)
|
|
112
|
+
--dry-run Validate inputs and preview the assignment only
|
|
113
|
+
|
|
93
114
|
Constraints:
|
|
94
115
|
Z.AI images: <=5MB, JPG/PNG/JPEG ; Z.AI videos: <=8MB, MP4/MOV/M4V (URLs supported)
|
|
95
116
|
MiniMax images: <=50MB, JPG/JPEG/PNG/WebP
|
|
@@ -103,6 +124,7 @@ Examples:
|
|
|
103
124
|
scoutline vision diagram ./arch.png --type architecture
|
|
104
125
|
scoutline vision diff ./expected.png ./actual.png "Check alignment"
|
|
105
126
|
scoutline vision video ./demo.mp4 "Summarize the key steps"
|
|
127
|
+
scoutline vision batch './shots/*.png' --out ./out --prompt "Describe {filename}"
|
|
106
128
|
`.trim();
|
|
107
129
|
}
|
|
108
130
|
export const VISION_HELP = buildVisionHelp();
|
|
@@ -241,4 +263,434 @@ export async function video(videoSource, prompt, deps, context) {
|
|
|
241
263
|
const result = await runVision({ operation: "video", source: videoSource, instruction }, deps);
|
|
242
264
|
return { kind: "data", data: result };
|
|
243
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* D10 media-extension filter: the UNION of the enrolled vision
|
|
268
|
+
* providers' extension sets (Z.AI image `.jpg/.jpeg/.png` + video
|
|
269
|
+
* `.mp4/.mov/.m4v/.avi/.webm/.wmv`, MiniMax image `.jpg/.jpeg/.png/
|
|
270
|
+
* .webp`) so no file any eligible provider accepts is silently dropped
|
|
271
|
+
* at expansion — a provider that cannot accept a given op's file
|
|
272
|
+
* rejects it inside the handler as a per-op failure.
|
|
273
|
+
*/
|
|
274
|
+
const VISION_BATCH_ZAI_IMAGE_EXTENSIONS = new Set([
|
|
275
|
+
".jpg",
|
|
276
|
+
".jpeg",
|
|
277
|
+
".png",
|
|
278
|
+
]);
|
|
279
|
+
/**
|
|
280
|
+
* Image extensions any ELIGIBLE provider accepts for an image
|
|
281
|
+
* operation: Z.AI's `.jpg/.jpeg/.png` plus MiniMax's `.webp`. Kept as a
|
|
282
|
+
* per-operation union (not the full media union) so dry-run extension
|
|
283
|
+
* validation can be operation-aware (review fix).
|
|
284
|
+
*/
|
|
285
|
+
const VISION_BATCH_IMAGE_EXTENSIONS = new Set([
|
|
286
|
+
...VISION_BATCH_ZAI_IMAGE_EXTENSIONS,
|
|
287
|
+
".webp",
|
|
288
|
+
]);
|
|
289
|
+
/** Video extensions (D10): these infer the `video` subcommand. */
|
|
290
|
+
const VISION_BATCH_VIDEO_EXTENSIONS = new Set([
|
|
291
|
+
".mp4",
|
|
292
|
+
".mov",
|
|
293
|
+
".m4v",
|
|
294
|
+
".avi",
|
|
295
|
+
".webm",
|
|
296
|
+
".wmv",
|
|
297
|
+
]);
|
|
298
|
+
/**
|
|
299
|
+
* D10 media-extension filter: the UNION of the enrolled vision
|
|
300
|
+
* providers' image and video sets so no file any eligible provider
|
|
301
|
+
* accepts is silently dropped at expansion — a provider that cannot
|
|
302
|
+
* accept a given op's file rejects it inside the handler as a per-op
|
|
303
|
+
* failure.
|
|
304
|
+
*/
|
|
305
|
+
const VISION_BATCH_MEDIA_EXTENSIONS = new Set([
|
|
306
|
+
...VISION_BATCH_IMAGE_EXTENSIONS,
|
|
307
|
+
...VISION_BATCH_VIDEO_EXTENSIONS,
|
|
308
|
+
]);
|
|
309
|
+
/**
|
|
310
|
+
* Per-operation dry-run extension set (review fix): `video` sources are
|
|
311
|
+
* video files, `diff` is advertised only by Z.AI (its image set —
|
|
312
|
+
* MiniMax's `.webp` never applies), and every other vision operation is
|
|
313
|
+
* an image operation served by the image union. Keeps `--dry-run` from
|
|
314
|
+
* reporting ready for media the real handler will reject, while
|
|
315
|
+
* provider-specific acceptance WITHIN an operation class (e.g. `.webp`
|
|
316
|
+
* on Z.AI analyze) still defers to the handler per D10's rationale.
|
|
317
|
+
*/
|
|
318
|
+
function visionBatchAcceptedExtensions(subcommand) {
|
|
319
|
+
if (subcommand === "video")
|
|
320
|
+
return VISION_BATCH_VIDEO_EXTENSIONS;
|
|
321
|
+
if (subcommand === "diff")
|
|
322
|
+
return VISION_BATCH_ZAI_IMAGE_EXTENSIONS;
|
|
323
|
+
return VISION_BATCH_IMAGE_EXTENSIONS;
|
|
324
|
+
}
|
|
325
|
+
/** Flags `vision batch` itself accepts (the D1 surface; strict). */
|
|
326
|
+
const VISION_BATCH_FLAGS = new Set([
|
|
327
|
+
"help",
|
|
328
|
+
"h",
|
|
329
|
+
"out",
|
|
330
|
+
"prompt",
|
|
331
|
+
"concurrency",
|
|
332
|
+
"dry-run",
|
|
333
|
+
]);
|
|
334
|
+
function isPlainRecord(value) {
|
|
335
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* D10 op-name sanitization: runs of characters outside `[A-Za-z0-9._-]`
|
|
339
|
+
* collapse to one `_`, the result truncates to 64 chars (D2's op-name
|
|
340
|
+
* ceiling).
|
|
341
|
+
*/
|
|
342
|
+
function sanitizeVisionBatchName(basename) {
|
|
343
|
+
return basename.replace(/[^A-Za-z0-9._-]+/g, "_").slice(0, 64);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Hand-rolled single-directory glob matcher: `*` and `?` only (no
|
|
347
|
+
* `**` — the wrapper rejects recursive globs up front), anchored to
|
|
348
|
+
* the full leaf segment.
|
|
349
|
+
*/
|
|
350
|
+
function visionBatchGlobToRegExp(pattern) {
|
|
351
|
+
let source = "";
|
|
352
|
+
for (const ch of pattern) {
|
|
353
|
+
if (ch === "*") {
|
|
354
|
+
source += "[^/]*";
|
|
355
|
+
}
|
|
356
|
+
else if (ch === "?") {
|
|
357
|
+
source += "[^/]";
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
source += ch.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return new RegExp(`^${source}$`);
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Expand a single-directory glob into op inputs (D10): lexicographic
|
|
367
|
+
* order, media-extension filter, extension-driven subcommand
|
|
368
|
+
* inference, name sanitization with collision rejection naming both
|
|
369
|
+
* files. Zero matches reject — an empty batch is never run.
|
|
370
|
+
*/
|
|
371
|
+
async function expandVisionBatchGlob(glob) {
|
|
372
|
+
if (glob.includes("**")) {
|
|
373
|
+
throw new ValidationError(`vision batch globs are single-directory only: "**" is not supported ("${glob}")`, "Point the glob at one directory, e.g. 'shots/*.png'.");
|
|
374
|
+
}
|
|
375
|
+
const directory = path.dirname(glob);
|
|
376
|
+
const leaf = path.basename(glob);
|
|
377
|
+
let entries;
|
|
378
|
+
try {
|
|
379
|
+
entries = await readdir(directory, { withFileTypes: true });
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
383
|
+
throw new ValidationError(`failed to expand vision batch glob "${glob}": ${message}`);
|
|
384
|
+
}
|
|
385
|
+
const matcher = visionBatchGlobToRegExp(leaf);
|
|
386
|
+
const inputs = [];
|
|
387
|
+
for (const name of entries
|
|
388
|
+
.filter((entry) => entry.isFile() && matcher.test(entry.name))
|
|
389
|
+
.map((entry) => entry.name)
|
|
390
|
+
.sort()) {
|
|
391
|
+
const ext = path.extname(name).toLowerCase();
|
|
392
|
+
// The union filter: a non-media extension never becomes an op.
|
|
393
|
+
if (!VISION_BATCH_MEDIA_EXTENSIONS.has(ext))
|
|
394
|
+
continue;
|
|
395
|
+
inputs.push({
|
|
396
|
+
file: path.resolve(directory, name),
|
|
397
|
+
opName: sanitizeVisionBatchName(name),
|
|
398
|
+
subcommand: VISION_BATCH_VIDEO_EXTENSIONS.has(ext) ? "video" : "analyze",
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
if (inputs.length === 0) {
|
|
402
|
+
throw new ValidationError(`vision batch glob "${glob}" matched no media files`, `Accepted extensions: ${[...VISION_BATCH_MEDIA_EXTENSIONS].sort().join(" ")}.`);
|
|
403
|
+
}
|
|
404
|
+
const seen = new Map();
|
|
405
|
+
for (const input of inputs) {
|
|
406
|
+
const prior = seen.get(input.opName);
|
|
407
|
+
if (prior !== undefined) {
|
|
408
|
+
throw new ValidationError(`vision batch name collision: "${prior}" and "${input.file}" both sanitize to "${input.opName}"`, "Rename one of the inputs so every op name is unique.");
|
|
409
|
+
}
|
|
410
|
+
seen.set(input.opName, input.file);
|
|
411
|
+
}
|
|
412
|
+
return inputs;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* `{filename}` → basename, `{filepath}` → the op's source path (an
|
|
416
|
+
* absolute path in glob mode; the manifest's own `source` verbatim in
|
|
417
|
+
* manifest mode). Callback replacements insert the source text
|
|
418
|
+
* LITERALLY — a replacement string would treat `$&`, `$\``, or `$'` in
|
|
419
|
+
* a filename as replacement tokens and corrupt the prompt.
|
|
420
|
+
*/
|
|
421
|
+
function substituteVisionBatchPrompt(template, source) {
|
|
422
|
+
return template
|
|
423
|
+
.replaceAll("{filename}", () => path.basename(source))
|
|
424
|
+
.replaceAll("{filepath}", () => source);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* `--concurrency` for vision batch: integer in 1..8 with a default of 1
|
|
428
|
+
* (D8 — vision is credit-heavy), validated at the wrapper so the error
|
|
429
|
+
* names vision batch's own default.
|
|
430
|
+
*/
|
|
431
|
+
function parseVisionBatchConcurrency(raw) {
|
|
432
|
+
if (raw === undefined)
|
|
433
|
+
return 1;
|
|
434
|
+
const value = typeof raw === "string" ? Number(raw) : Number.NaN;
|
|
435
|
+
if (!Number.isInteger(value) || value < 1 || value > 8) {
|
|
436
|
+
throw new ValidationError("vision batch concurrency must be an integer between 1 and 8", "Omit --concurrency for the default of 1, or pass an integer in 1..8.");
|
|
437
|
+
}
|
|
438
|
+
return value;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* `vision batch <manifest|glob>` (batch-runner DESIGN D10, Ticket 7).
|
|
442
|
+
*
|
|
443
|
+
* The wrapper NEVER resolves a vision provider and never calls
|
|
444
|
+
* `descriptor.create()` — per-op assignment happens inside the shared
|
|
445
|
+
* runner (D4), exactly as in `scoutline batch`. It owns: strict flag
|
|
446
|
+
* surface, input discrimination (manifest vs glob), glob expansion
|
|
447
|
+
* (single directory, lexicographic, media union, sanitization,
|
|
448
|
+
* collisions), `promptTemplate` extraction from the RAW manifest JSON
|
|
449
|
+
* before the strict D2 parse (a wrapper field, not a D2 schema field),
|
|
450
|
+
* the `--out` contract (per-input `output` targets + the wrapper's own
|
|
451
|
+
* `<out>/summary.json` write after the runner returns — the only extra
|
|
452
|
+
* write path), concurrency default 1, and the dry-run boundary
|
|
453
|
+
* (existence + extension validation only; media size validation stays
|
|
454
|
+
* in the handler). The shared runner still performs the ONE stdout
|
|
455
|
+
* write (the summary envelope); the wrapper adds none.
|
|
456
|
+
*/
|
|
457
|
+
export async function handleVisionBatch(positional, flags, outputMode, deps, handlers) {
|
|
458
|
+
// Unknown flags reject BEFORE the help short-circuit (the
|
|
459
|
+
// handleBatch precedent: parseArgs would otherwise swallow the
|
|
460
|
+
// input into the unknown flag and render help instead of naming
|
|
461
|
+
// the offender).
|
|
462
|
+
for (const key of Object.keys(flags)) {
|
|
463
|
+
if (!VISION_BATCH_FLAGS.has(key)) {
|
|
464
|
+
throw new ValidationError(`unknown vision batch flag "--${key}"`, 'Run "scoutline vision --help" for the accepted flags.');
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// Boolean-only flags never take a value: `--dry-run false` would
|
|
468
|
+
// otherwise silently disable the safety boundary and RUN providers.
|
|
469
|
+
if (flags["dry-run"] !== undefined && flags["dry-run"] !== true) {
|
|
470
|
+
throw new ValidationError("--dry-run is a boolean flag and takes no value", "Pass the bare --dry-run to enable it, or omit it.");
|
|
471
|
+
}
|
|
472
|
+
// A valueless `--prompt` must reject rather than silently fall back
|
|
473
|
+
// to the default prompt (the template is the user's whole intent).
|
|
474
|
+
if (flags.prompt === true) {
|
|
475
|
+
throw new ValidationError("--prompt requires a template", 'Pass e.g. --prompt "Describe {filename} in detail."');
|
|
476
|
+
}
|
|
477
|
+
if (flags.help || flags.h || positional.length === 0) {
|
|
478
|
+
deps.invocation.writeStdout(VISION_HELP);
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
if (positional.length > 1) {
|
|
482
|
+
throw new ValidationError("vision batch takes exactly one input (a manifest file or a single-directory glob)");
|
|
483
|
+
}
|
|
484
|
+
const dryRun = flags["dry-run"] === true;
|
|
485
|
+
if (flags.out === true) {
|
|
486
|
+
throw new ValidationError("--out requires a directory path");
|
|
487
|
+
}
|
|
488
|
+
const outDir = typeof flags.out === "string" ? flags.out : undefined;
|
|
489
|
+
const concurrency = parseVisionBatchConcurrency(flags.concurrency);
|
|
490
|
+
const input = positional[0] ?? "";
|
|
491
|
+
// `--out <dir>` creates its directory (recursively) so the strict D2
|
|
492
|
+
// dirname-existence check passes for the wrapper-generated targets —
|
|
493
|
+
// the user is never required to pre-create the output directory.
|
|
494
|
+
if (outDir !== undefined) {
|
|
495
|
+
try {
|
|
496
|
+
await mkdir(outDir, { recursive: true });
|
|
497
|
+
}
|
|
498
|
+
catch (error) {
|
|
499
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
500
|
+
throw new ValidationError(`failed to create vision batch --out directory "${outDir}": ${message}`);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* The wrapper's own `<out>/summary.json` write reserves the name: an
|
|
505
|
+
* op whose per-input target would land on `summary.json` would be
|
|
506
|
+
* silently overwritten by (or silently overwrite) the summary, losing
|
|
507
|
+
* one captured result.
|
|
508
|
+
*/
|
|
509
|
+
const assertNotReservedOpName = (opName, detail) => {
|
|
510
|
+
if (outDir !== undefined && opName === "summary") {
|
|
511
|
+
throw new ValidationError(`vision batch operation name "summary" is reserved when --out is used ` +
|
|
512
|
+
`(the wrapper writes ${path.join(outDir, "summary.json")}); ${detail}`, "Rename the input or manifest operation so per-input results do not collide with summary.json.");
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
let manifest;
|
|
516
|
+
let manifestPromptTemplate;
|
|
517
|
+
// Input discrimination (D10): a `.json` path without glob
|
|
518
|
+
// metacharacters is a manifest; everything else is a glob.
|
|
519
|
+
const looksLikeManifest = !input.includes("*") && !input.includes("?") && input.toLowerCase().endsWith(".json");
|
|
520
|
+
if (looksLikeManifest) {
|
|
521
|
+
let rawText;
|
|
522
|
+
try {
|
|
523
|
+
rawText = await readFile(input, "utf8");
|
|
524
|
+
}
|
|
525
|
+
catch (error) {
|
|
526
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
527
|
+
throw new ValidationError(`failed to read vision batch manifest "${input}": ${message}`);
|
|
528
|
+
}
|
|
529
|
+
let raw;
|
|
530
|
+
try {
|
|
531
|
+
raw = JSON.parse(rawText);
|
|
532
|
+
}
|
|
533
|
+
catch (error) {
|
|
534
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
535
|
+
throw new ValidationError(`vision batch manifest is not valid JSON: ${message}`);
|
|
536
|
+
}
|
|
537
|
+
if (!isPlainRecord(raw)) {
|
|
538
|
+
throw new ValidationError("vision batch manifest must be a JSON object");
|
|
539
|
+
}
|
|
540
|
+
// `promptTemplate` is a WRAPPER-level field, not a D2 schema field:
|
|
541
|
+
// extract it from the raw JSON BEFORE the strict parse so plain
|
|
542
|
+
// `batch` manifests still reject it as an unknown top-level field.
|
|
543
|
+
if ("promptTemplate" in raw) {
|
|
544
|
+
if (typeof raw.promptTemplate !== "string") {
|
|
545
|
+
throw new ValidationError('vision batch manifest "promptTemplate" must be a string');
|
|
546
|
+
}
|
|
547
|
+
manifestPromptTemplate = raw.promptTemplate;
|
|
548
|
+
delete raw.promptTemplate;
|
|
549
|
+
}
|
|
550
|
+
// Wrapper shape gate (D10): exactly one op, and it must be vision.
|
|
551
|
+
if (!Array.isArray(raw.operations)) {
|
|
552
|
+
throw new ValidationError("vision batch manifest must carry an operations array");
|
|
553
|
+
}
|
|
554
|
+
if (raw.operations.length !== 1) {
|
|
555
|
+
throw new ValidationError(`vision batch manifest must contain exactly one operation (found ${raw.operations.length})`);
|
|
556
|
+
}
|
|
557
|
+
const rawOp = raw.operations[0];
|
|
558
|
+
if (!isPlainRecord(rawOp) || rawOp.command !== "vision") {
|
|
559
|
+
throw new ValidationError('vision batch manifest operation must have "command": "vision"');
|
|
560
|
+
}
|
|
561
|
+
// Reserved-name gate runs BEFORE the strict parse: a manifest op
|
|
562
|
+
// named "summary" with --out would collide with summary.json.
|
|
563
|
+
if (typeof rawOp.name === "string") {
|
|
564
|
+
assertNotReservedOpName(rawOp.name, `manifest operation "${rawOp.name}"`);
|
|
565
|
+
}
|
|
566
|
+
// `--out` overrides the op's own output target (never rejected),
|
|
567
|
+
// set BEFORE the strict parse so the D2 dirname-existence check
|
|
568
|
+
// covers it.
|
|
569
|
+
if (outDir !== undefined && typeof rawOp.name === "string") {
|
|
570
|
+
rawOp.output = path.join(outDir, `${rawOp.name}.json`);
|
|
571
|
+
}
|
|
572
|
+
manifest = parseBatchManifest(raw, {
|
|
573
|
+
descriptors: deps.providerDescriptors,
|
|
574
|
+
dirExists: (dir) => existsSync(dir),
|
|
575
|
+
});
|
|
576
|
+
// `promptTemplate` overrides `input.prompt`, substituted against
|
|
577
|
+
// the op's own `source`.
|
|
578
|
+
if (manifestPromptTemplate !== undefined) {
|
|
579
|
+
const op = manifest.operations[0];
|
|
580
|
+
if (typeof op.input.source !== "string" &&
|
|
581
|
+
(manifestPromptTemplate.includes("{filename}") ||
|
|
582
|
+
manifestPromptTemplate.includes("{filepath}"))) {
|
|
583
|
+
// Review fix: {filename}/{filepath} substitute against the op's
|
|
584
|
+
// own single `input.source` (D10); diff carries expected/actual
|
|
585
|
+
// instead — leaving tokens unsubstituted would send them to the
|
|
586
|
+
// provider verbatim. Token-free templates need no substitution
|
|
587
|
+
// and pass through untouched.
|
|
588
|
+
throw new ValidationError(`vision batch promptTemplate {filename}/{filepath} need a single input.source, but subcommand "${op.input.subcommand}" uses expected/actual`, "Use the literal file names in the template, or drop {filename}/{filepath}.");
|
|
589
|
+
}
|
|
590
|
+
const substituted = typeof op.input.source === "string"
|
|
591
|
+
? substituteVisionBatchPrompt(manifestPromptTemplate, op.input.source)
|
|
592
|
+
: manifestPromptTemplate;
|
|
593
|
+
manifest = {
|
|
594
|
+
schemaVersion: 1,
|
|
595
|
+
operations: [{ ...op, input: { ...op.input, prompt: substituted } }],
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
const inputs = await expandVisionBatchGlob(input);
|
|
601
|
+
for (const entry of inputs) {
|
|
602
|
+
assertNotReservedOpName(entry.opName, `input file "${entry.file}"`);
|
|
603
|
+
}
|
|
604
|
+
if (inputs.length > 1 && outDir === undefined) {
|
|
605
|
+
throw new ValidationError(`--out is required when the vision batch input matches more than one file (matched ${inputs.length})`, "Pass --out <dir>; per-input results land next to <dir>/summary.json.");
|
|
606
|
+
}
|
|
607
|
+
// `--prompt` is glob-mode only (manifest mode ignores it — the
|
|
608
|
+
// manifest's `promptTemplate` is the only template source there).
|
|
609
|
+
const promptTemplate = typeof flags.prompt === "string" ? flags.prompt : undefined;
|
|
610
|
+
const raw = {
|
|
611
|
+
schemaVersion: 1,
|
|
612
|
+
operations: inputs.map((entry) => ({
|
|
613
|
+
name: entry.opName,
|
|
614
|
+
command: "vision",
|
|
615
|
+
input: {
|
|
616
|
+
subcommand: entry.subcommand,
|
|
617
|
+
source: entry.file,
|
|
618
|
+
...(promptTemplate !== undefined
|
|
619
|
+
? { prompt: substituteVisionBatchPrompt(promptTemplate, entry.file) }
|
|
620
|
+
: {}),
|
|
621
|
+
},
|
|
622
|
+
...(outDir !== undefined ? { output: path.join(outDir, `${entry.opName}.json`) } : {}),
|
|
623
|
+
})),
|
|
624
|
+
};
|
|
625
|
+
manifest = parseBatchManifest(raw, {
|
|
626
|
+
descriptors: deps.providerDescriptors,
|
|
627
|
+
dirExists: (dir) => existsSync(dir),
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
// Dry-run boundary (D10): existence + extension validation ONLY —
|
|
631
|
+
// media SIZE validation stays inside the handler. Local paths only;
|
|
632
|
+
// URL sources are the provider's to validate. A `diff` op validates
|
|
633
|
+
// BOTH of its sources (`expected` + `actual`), not `input.source`,
|
|
634
|
+
// which diff ops do not carry.
|
|
635
|
+
if (dryRun) {
|
|
636
|
+
for (const op of manifest.operations) {
|
|
637
|
+
const input = op.input;
|
|
638
|
+
const sources = input.subcommand === "diff" ? [input.expected, input.actual] : [input.source];
|
|
639
|
+
for (const source of sources) {
|
|
640
|
+
if (typeof source !== "string" || /^https?:\/\//i.test(source))
|
|
641
|
+
continue;
|
|
642
|
+
if (!existsSync(source)) {
|
|
643
|
+
throw new ValidationError(`vision batch dry run: input file not found: "${source}"`, "Fix the source path, or drop --dry-run to let the handler report it per op.");
|
|
644
|
+
}
|
|
645
|
+
const ext = path.extname(source).toLowerCase();
|
|
646
|
+
const accepted = visionBatchAcceptedExtensions(input.subcommand);
|
|
647
|
+
if (!accepted.has(ext)) {
|
|
648
|
+
throw new ValidationError(`vision batch dry run: extension "${ext || "(none)"}" is not accepted for vision subcommand "${input.subcommand}" (source "${source}")`, `Accepted extensions for ${input.subcommand}: ${[...accepted].sort().join(" ")}.`);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
// Per-op assignment happens HERE (D4), never at the `handleVision`
|
|
654
|
+
// seam: precedence per-op pin > global --provider > distribution.
|
|
655
|
+
const assignments = assignBatchProviders(manifest, {
|
|
656
|
+
descriptors: deps.providerDescriptors,
|
|
657
|
+
env: deps.env,
|
|
658
|
+
globalProvider: deps.provider,
|
|
659
|
+
});
|
|
660
|
+
const { envelope, exitCode } = await runBatch(manifest, assignments, {
|
|
661
|
+
handlerDeps: deps,
|
|
662
|
+
handlers,
|
|
663
|
+
invocation: deps.invocation,
|
|
664
|
+
outputMode,
|
|
665
|
+
now: deps.now,
|
|
666
|
+
}, { concurrency, dryRun });
|
|
667
|
+
// The wrapper's one extra write path: `<out>/summary.json` after the
|
|
668
|
+
// runner returns, through the SAME write-temp-then-rename seam the
|
|
669
|
+
// runner uses for per-op outputs so a concurrent reader never
|
|
670
|
+
// observes a truncated summary. Dry runs write nothing (D7), so the
|
|
671
|
+
// summary file appears only in real runs.
|
|
672
|
+
if (outDir !== undefined && !dryRun) {
|
|
673
|
+
const summaryPath = path.join(outDir, "summary.json");
|
|
674
|
+
// Unique temp name (review fix, mirroring the runner's per-op
|
|
675
|
+
// temps): a fixed "<summary>.tmp" is predictable — a concurrent
|
|
676
|
+
// vision batch run against the same --out would clobber it, and a
|
|
677
|
+
// failed write's cleanup could then remove the other run's temp.
|
|
678
|
+
const tempPath = `${summaryPath}.tmp-${randomUUID()}`;
|
|
679
|
+
try {
|
|
680
|
+
await writeFile(tempPath, `${JSON.stringify(envelope, null, 2)}\n`, "utf8");
|
|
681
|
+
await rename(tempPath, summaryPath);
|
|
682
|
+
}
|
|
683
|
+
catch (error) {
|
|
684
|
+
try {
|
|
685
|
+
await rm(tempPath, { force: true });
|
|
686
|
+
}
|
|
687
|
+
catch {
|
|
688
|
+
// Best-effort cleanup of an already-failing write.
|
|
689
|
+
}
|
|
690
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
691
|
+
throw new ValidationError(`failed to write vision batch summary "${summaryPath}": ${message}`);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
return exitCode;
|
|
695
|
+
}
|
|
244
696
|
//# sourceMappingURL=vision.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/commands/vision.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -226,6 +226,28 @@ export declare function parseAndValidateType(raw: unknown): "video" | undefined;
|
|
|
226
226
|
* envelope with exit 1.
|
|
227
227
|
*/
|
|
228
228
|
export declare function handleCache(args: string[], outputMode: OutputMode, deps: HandlerDependencies): Promise<number>;
|
|
229
|
+
/**
|
|
230
|
+
* `scoutline usage [--days N] [--provider <id>]` — report the local
|
|
231
|
+
* usage ledger (usage-ledger plan, Ticket 5). Credential-free and
|
|
232
|
+
* read-only: like `cache` it bypasses Provider resolution entirely, and
|
|
233
|
+
* like `handleCache` it keeps the injection-free posture — the ledger
|
|
234
|
+
* path resolves at handler time via
|
|
235
|
+
* `resolveConfigRootPure(deps.env, ...)` (no new `MainDependencies`
|
|
236
|
+
* field, no injected reader object). Production reads
|
|
237
|
+
* `readUsageLedger(resolveUsageLedgerPath(...))` with DEFAULT deps
|
|
238
|
+
* (real reader, no `onWarning`) so DESIGN D8's silent-on-corrupt
|
|
239
|
+
* contract holds: a missing, corrupt, or wrong-version ledger yields an
|
|
240
|
+
* empty window with exit 0 and no stderr noise.
|
|
241
|
+
*
|
|
242
|
+
* Flag contract (DESIGN D8): `--days` must be an integer ≥ 1 (unlike
|
|
243
|
+
* `--count`, 0 is invalid) and defaults to 7; `--provider` must be a
|
|
244
|
+
* known registry id (unknown ids are a VALIDATION_ERROR listing the
|
|
245
|
+
* accepted ids; a known-but-unrecorded id is an empty result, exit 0).
|
|
246
|
+
* `--provider` may appear before or after the command token —
|
|
247
|
+
* `extractGlobalOptions` strips it either way, so the handler recovers
|
|
248
|
+
* it from `deps.provider` (same recovery as `cache prune`).
|
|
249
|
+
*/
|
|
250
|
+
export declare function handleUsage(args: string[], outputMode: OutputMode, deps: HandlerDependencies): Promise<number>;
|
|
229
251
|
export interface MainDependencies {
|
|
230
252
|
readonly invocation: CommandInvocationAdapter;
|
|
231
253
|
readonly env: NodeJS.ProcessEnv;
|
|
@@ -393,8 +415,9 @@ export interface MainDependencies {
|
|
|
393
415
|
readonly verificationRecords?: Partial<Record<ProviderId, ProviderVerificationSummary>>;
|
|
394
416
|
/**
|
|
395
417
|
* Optional injectable consumption sink (PB-T2 — Plan B). Production
|
|
396
|
-
* defaults to `
|
|
397
|
-
*
|
|
418
|
+
* defaults to `createCompositeConsumptionSink(quotaStoreSink,
|
|
419
|
+
* usageLedgerSink)` — the PB-T1 snapshot store (advancing
|
|
420
|
+
* `locallyUpdatedAt` and
|
|
398
421
|
* adjusting the matching category's count set); tests inject an
|
|
399
422
|
* in-memory double so event-sequence assertions stay hermetic.
|
|
400
423
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|