@sublang/slc 0.2.0 → 0.4.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.
Files changed (103) hide show
  1. package/README.md +86 -14
  2. package/dist/app.d.ts +13 -2
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +65 -15
  5. package/dist/app.js.map +1 -1
  6. package/dist/build-history.d.ts +74 -0
  7. package/dist/build-history.d.ts.map +1 -0
  8. package/dist/build-history.js +309 -0
  9. package/dist/build-history.js.map +1 -0
  10. package/dist/cli.js +2 -1
  11. package/dist/cli.js.map +1 -1
  12. package/dist/cligent-agent.d.ts +19 -0
  13. package/dist/cligent-agent.d.ts.map +1 -1
  14. package/dist/cligent-agent.js +125 -30
  15. package/dist/cligent-agent.js.map +1 -1
  16. package/dist/compiled-executor.d.ts +7 -1
  17. package/dist/compiled-executor.d.ts.map +1 -1
  18. package/dist/compiled-executor.js +11 -3
  19. package/dist/compiled-executor.js.map +1 -1
  20. package/dist/config-file.d.ts +9 -0
  21. package/dist/config-file.d.ts.map +1 -1
  22. package/dist/config-file.js +29 -5
  23. package/dist/config-file.js.map +1 -1
  24. package/dist/config.d.ts +8 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +9 -3
  27. package/dist/config.js.map +1 -1
  28. package/dist/errors.d.ts +14 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/errors.js +28 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/execution.d.ts +42 -0
  33. package/dist/execution.d.ts.map +1 -1
  34. package/dist/execution.js +224 -29
  35. package/dist/execution.js.map +1 -1
  36. package/dist/hash.d.ts +22 -0
  37. package/dist/hash.d.ts.map +1 -1
  38. package/dist/hash.js +47 -0
  39. package/dist/hash.js.map +1 -1
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpreter.d.ts +1 -1
  45. package/dist/interpreter.d.ts.map +1 -1
  46. package/dist/interpreter.js +9 -0
  47. package/dist/interpreter.js.map +1 -1
  48. package/dist/invocation.d.ts +5 -1
  49. package/dist/invocation.d.ts.map +1 -1
  50. package/dist/invocation.js +14 -3
  51. package/dist/invocation.js.map +1 -1
  52. package/dist/line-diff.d.ts +7 -0
  53. package/dist/line-diff.d.ts.map +1 -0
  54. package/dist/line-diff.js +66 -0
  55. package/dist/line-diff.js.map +1 -0
  56. package/dist/phase.d.ts +2 -0
  57. package/dist/phase.d.ts.map +1 -1
  58. package/dist/phase.js +19 -3
  59. package/dist/phase.js.map +1 -1
  60. package/dist/pin-closure.d.ts +2 -2
  61. package/dist/pin-closure.d.ts.map +1 -1
  62. package/dist/pin-closure.js +4 -3
  63. package/dist/pin-closure.js.map +1 -1
  64. package/dist/pin-currency.d.ts +6 -2
  65. package/dist/pin-currency.d.ts.map +1 -1
  66. package/dist/pin-currency.js +24 -43
  67. package/dist/pin-currency.js.map +1 -1
  68. package/dist/pin-generate.d.ts.map +1 -1
  69. package/dist/pin-generate.js +1 -3
  70. package/dist/pin-generate.js.map +1 -1
  71. package/dist/pin-paths.d.ts.map +1 -1
  72. package/dist/pin-paths.js +2 -13
  73. package/dist/pin-paths.js.map +1 -1
  74. package/dist/pins.d.ts.map +1 -1
  75. package/dist/pins.js +5 -15
  76. package/dist/pins.js.map +1 -1
  77. package/dist/playbook-ports.d.ts +17 -0
  78. package/dist/playbook-ports.d.ts.map +1 -1
  79. package/dist/playbook-ports.js +21 -6
  80. package/dist/playbook-ports.js.map +1 -1
  81. package/dist/progress.d.ts +71 -0
  82. package/dist/progress.d.ts.map +1 -0
  83. package/dist/progress.js +96 -0
  84. package/dist/progress.js.map +1 -0
  85. package/dist/runner.d.ts +8 -0
  86. package/dist/runner.d.ts.map +1 -1
  87. package/dist/runner.js +673 -89
  88. package/dist/runner.js.map +1 -1
  89. package/dist/runtime-package.d.ts.map +1 -1
  90. package/dist/runtime-package.js +3 -11
  91. package/dist/runtime-package.js.map +1 -1
  92. package/dist/slc.config.template.yaml +5 -1
  93. package/dist/verify-coverage.d.ts.map +1 -1
  94. package/dist/verify-coverage.js +2 -0
  95. package/dist/verify-coverage.js.map +1 -1
  96. package/dist/verify-support.d.ts +7 -0
  97. package/dist/verify-support.d.ts.map +1 -1
  98. package/dist/verify-support.js +13 -6
  99. package/dist/verify-support.js.map +1 -1
  100. package/dist/verify.d.ts.map +1 -1
  101. package/dist/verify.js +2 -0
  102. package/dist/verify.js.map +1 -1
  103. package/package.json +5 -3
package/dist/execution.js CHANGED
@@ -15,13 +15,66 @@
15
15
  * report naming the phase, target, and reasons (PHEXEC-7, PHEXEC-9).
16
16
  *
17
17
  * The executor honors PHEXEC-2 by treating the passed definition as the
18
- * semantic source of truth. Broader write-scope enforcement (sandbox or
19
- * allowlist) is a host concern per DR-003 and is left as a future capability.
18
+ * semantic source of truth. The host refuses target/input aliases and verifies
19
+ * protected inputs afterward; sandboxing arbitrary unrelated writes remains a
20
+ * host capability outside this boundary.
20
21
  * See specs/dev/phase-execution.md.
21
22
  */
22
23
  import { createHash } from 'node:crypto';
23
- import { lstat, readFile, readdir, readlink, stat } from 'node:fs/promises';
24
- import { extname, join } from 'node:path';
24
+ import { lstat, readFile, readdir, readlink, realpath, stat, } from 'node:fs/promises';
25
+ import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep, } from 'node:path';
26
+ import { errorCode, isAbsentPathError, messageOf } from './errors.js';
27
+ /**
28
+ * Renders the host-owned update instruction shared by interpreted prompts and
29
+ * compiled performing prompts (INCR-16).
30
+ */
31
+ export function updateContextLines(update, target) {
32
+ const diff = update.diff === null
33
+ ? [
34
+ '- a useful line diff is unavailable; compare the prior and current inputs directly;',
35
+ ]
36
+ : update.diff === ''
37
+ ? [
38
+ '- the input file is byte-identical to the prior input; the definition or another declared input changed instead;',
39
+ ]
40
+ : [
41
+ '- the input changes, as a unified diff of prior to current input:',
42
+ '--- BEGIN INPUT DIFF ---',
43
+ update.diff,
44
+ '--- END INPUT DIFF ---',
45
+ ];
46
+ return [
47
+ 'Incremental update — the artifact to write already holds the accepted output of a previous run (possibly with deliberate manual refinements):',
48
+ `- the prior input is available read-only at: ${update.priorInput};`,
49
+ `- the existing output to update is: ${target};`,
50
+ ...diff,
51
+ '- update the existing artifact under the definition: apply what the input changes imply, preserve everything unaffected including refinements, and keep the artifact complete and consistent;',
52
+ '- if the existing artifact is missing or unusable under the definition, produce a fresh complete artifact instead.',
53
+ ];
54
+ }
55
+ /**
56
+ * Refuses an unsafe planned write without running an executor. This is shared
57
+ * by phase targets and the runner's deterministic completion outputs.
58
+ */
59
+ export async function assertSafeTarget(target, protectedPaths, opts = {}) {
60
+ await inspectTarget(target, protectedPaths, opts);
61
+ }
62
+ /** Whether two writable/readable path spellings currently name one file. */
63
+ export async function pathsAlias(left, right) {
64
+ const leftPath = await prospectiveRealPath(resolve(left));
65
+ const rightPath = await prospectiveRealPath(resolve(right));
66
+ if (leftPath === rightPath)
67
+ return true;
68
+ try {
69
+ const [leftInfo, rightInfo] = await Promise.all([stat(left), stat(right)]);
70
+ return leftInfo.dev === rightInfo.dev && leftInfo.ino === rightInfo.ino;
71
+ }
72
+ catch (error) {
73
+ if (isAbsentPathError(error))
74
+ return false;
75
+ throw error;
76
+ }
77
+ }
25
78
  /**
26
79
  * Runs a single phase through the execution boundary: generic mechanics only,
27
80
  * plus the DR-003 generic checks and blocked protocol (PHEXEC-1, PHEXEC-4..9).
@@ -31,11 +84,35 @@ export async function runPhase(opts) {
31
84
  const signal = opts.signal ?? new AbortController().signal;
32
85
  const target = request.kind === 'compile' ? request.target : request.linked;
33
86
  const inputs = request.kind === 'compile'
34
- ? [request.source, ...(request.references ?? [])]
87
+ ? [
88
+ request.source,
89
+ ...(request.references ?? []),
90
+ ...(request.update === undefined ? [] : [request.update.priorInput]),
91
+ ]
35
92
  : [...request.objects, request.linkTarget];
36
93
  const definitions = [request.definitionPath, ...(opts.definitions ?? [])];
37
- const protectedPaths = [...new Set([...inputs, ...definitions])];
94
+ const protectedPaths = [
95
+ ...new Set([...inputs, ...definitions, ...(opts.protectedInputs ?? [])]),
96
+ ];
97
+ const targetProtectedPaths = [
98
+ ...new Set([...protectedPaths, ...(opts.aliasInputs ?? [])]),
99
+ ];
100
+ let targetBefore;
101
+ try {
102
+ targetBefore = await inspectTarget(target, targetProtectedPaths);
103
+ }
104
+ catch (error) {
105
+ return failure(phase, target, [messageOf(error)]);
106
+ }
38
107
  const before = await snapshot(protectedPaths);
108
+ if (opts.beforeExecute) {
109
+ try {
110
+ await opts.beforeExecute();
111
+ }
112
+ catch (error) {
113
+ return failure(phase, target, [messageOf(error)]);
114
+ }
115
+ }
39
116
  const reasons = [];
40
117
  let result = null;
41
118
  try {
@@ -48,12 +125,23 @@ export async function runPhase(opts) {
48
125
  reasons.push(...reasonsFor(result));
49
126
  }
50
127
  if (result?.status === 'ok') {
51
- if (!(await exists(target))) {
52
- reasons.push(`expected target "${target}" was not written`);
53
- }
54
- else if (extname(target) !== targetExt) {
128
+ if (extname(target) !== targetExt) {
55
129
  reasons.push(`target "${target}" extension does not match the declared "${targetExt}"`);
56
130
  }
131
+ else {
132
+ try {
133
+ const targetAfter = await inspectTarget(target, targetProtectedPaths);
134
+ if (!targetAfter.exists) {
135
+ reasons.push(`expected target "${target}" was not written`);
136
+ }
137
+ else if (targetBefore.path !== targetAfter.path) {
138
+ reasons.push(`target "${target}" changed physical location during the run`);
139
+ }
140
+ }
141
+ catch (error) {
142
+ reasons.push(messageOf(error));
143
+ }
144
+ }
57
145
  }
58
146
  // Protected inputs and chain definitions are re-checked after any outcome, so
59
147
  // a mutation is caught even when the executor blocks, errors, or throws
@@ -114,7 +202,7 @@ async function pathIdentity(path) {
114
202
  return identityForInfo(path, rootInfo);
115
203
  }
116
204
  catch (error) {
117
- if (isMissing(error))
205
+ if (isAbsentPathError(error))
118
206
  return 'missing';
119
207
  return `unreadable:${errorCode(error)}`;
120
208
  }
@@ -124,7 +212,7 @@ async function followedPathIdentity(path) {
124
212
  return await identityForInfo(path, await stat(path));
125
213
  }
126
214
  catch (error) {
127
- if (isMissing(error))
215
+ if (isAbsentPathError(error))
128
216
  return 'missing';
129
217
  return `unreadable:${errorCode(error)}`;
130
218
  }
@@ -179,29 +267,136 @@ async function collectTreeRecords(root, prefix, records) {
179
267
  function compareNames(left, right) {
180
268
  return left < right ? -1 : left > right ? 1 : 0;
181
269
  }
182
- function isMissing(error) {
183
- const code = errorCode(error);
184
- return code === 'ENOENT' || code === 'ENOTDIR';
185
- }
186
- function errorCode(error) {
187
- if (typeof error === 'object' &&
188
- error !== null &&
189
- 'code' in error &&
190
- typeof error.code === 'string') {
191
- return error.code;
270
+ /**
271
+ * Establishes the one pre/post target rule used by every executor: the target
272
+ * is outside host-owned namespaces, does not alias a read input, and is absent
273
+ * or a single-link regular file. An existing target may remain byte-identical when
274
+ * the executor accepts that no semantic output change is needed.
275
+ */
276
+ async function inspectTarget(target, protectedPaths, opts = {}) {
277
+ const lexical = resolve(target);
278
+ rejectReservedTarget(lexical, target, opts);
279
+ let exists = false;
280
+ let targetInfo = null;
281
+ try {
282
+ targetInfo = await lstat(lexical);
283
+ if (targetInfo.isSymbolicLink()) {
284
+ throw new Error(`target "${target}" is a symbolic link`);
285
+ }
286
+ if (!targetInfo.isFile()) {
287
+ throw new Error(`target "${target}" is not a regular file`);
288
+ }
289
+ if (targetInfo.nlink !== 1) {
290
+ throw new Error(`target "${target}" has multiple hard links`);
291
+ }
292
+ exists = true;
293
+ }
294
+ catch (error) {
295
+ if (!isAbsentPathError(error))
296
+ throw error;
192
297
  }
193
- return 'unknown';
298
+ const physical = await prospectiveRealPath(lexical);
299
+ rejectReservedTarget(physical, target, opts);
300
+ for (const input of protectedPaths) {
301
+ const conflict = await aliasesProtectedPath(physical, targetInfo, resolve(input));
302
+ if (conflict) {
303
+ throw new Error(`target "${target}" aliases protected input "${input}"`);
304
+ }
305
+ }
306
+ return { path: physical, exists };
194
307
  }
195
- async function exists(path) {
308
+ async function aliasesProtectedPath(targetPath, targetInfo, input) {
309
+ let inputInfo = null;
310
+ try {
311
+ inputInfo = await stat(input);
312
+ }
313
+ catch (error) {
314
+ if (!isAbsentPathError(error))
315
+ throw error;
316
+ }
317
+ let inputPath;
196
318
  try {
197
- await stat(path);
319
+ inputPath = await prospectiveRealPath(input);
320
+ }
321
+ catch (error) {
322
+ // An impossible protected path cannot itself alias this target, but its
323
+ // existing blocking ancestor remains protected. Permission and I/O errors
324
+ // are indeterminate and continue to fail closed.
325
+ if (error instanceof ImpossiblePathError) {
326
+ const blocker = error.blocker;
327
+ return (blocker !== undefined &&
328
+ (targetPath === blocker.path ||
329
+ (targetInfo !== null &&
330
+ targetInfo.dev === blocker.info.dev &&
331
+ targetInfo.ino === blocker.info.ino)));
332
+ }
333
+ throw error;
334
+ }
335
+ if (targetPath === inputPath)
198
336
  return true;
337
+ if (inputInfo?.isDirectory() && isWithin(inputPath, targetPath))
338
+ return true;
339
+ return (targetInfo !== null &&
340
+ inputInfo !== null &&
341
+ targetInfo.dev === inputInfo.dev &&
342
+ targetInfo.ino === inputInfo.ino);
343
+ }
344
+ class ImpossiblePathError extends Error {
345
+ blocker;
346
+ constructor(message, blocker) {
347
+ super(message);
348
+ this.blocker = blocker;
349
+ }
350
+ }
351
+ /** Resolves a missing leaf through its nearest real directory ancestor. */
352
+ async function prospectiveRealPath(path) {
353
+ const suffix = [];
354
+ let cursor = path;
355
+ while (true) {
356
+ try {
357
+ const resolved = await realpath(cursor);
358
+ if (suffix.length > 0) {
359
+ const info = await stat(resolved);
360
+ if (!info.isDirectory()) {
361
+ throw new ImpossiblePathError(`target parent "${cursor}" is not a directory`, { path: resolved, info });
362
+ }
363
+ }
364
+ return resolve(resolved, ...suffix.reverse());
365
+ }
366
+ catch (error) {
367
+ if (!isAbsentPathError(error))
368
+ throw error;
369
+ }
370
+ // `realpath` reports ENOENT for both an absent path and a dangling link.
371
+ // An existing unresolved link is not a safe ancestor to write through.
372
+ try {
373
+ const info = await lstat(cursor);
374
+ throw new ImpossiblePathError(`target path "${cursor}" cannot be resolved safely`, { path: resolve(cursor), info });
375
+ }
376
+ catch (error) {
377
+ if (!isAbsentPathError(error))
378
+ throw error;
379
+ }
380
+ const parent = dirname(cursor);
381
+ if (parent === cursor) {
382
+ throw new ImpossiblePathError(`target path "${path}" has no existing directory ancestor`);
383
+ }
384
+ suffix.push(basename(cursor));
385
+ cursor = parent;
199
386
  }
200
- catch {
201
- return false;
387
+ }
388
+ function rejectReservedTarget(path, display, opts) {
389
+ const parts = resolve(path).split(sep);
390
+ if (parts.includes('.slc') ||
391
+ (!opts.allowVerifierOutput && parts.includes('.slc-verify'))) {
392
+ throw new Error(`target "${display}" enters a host-owned slc directory`);
202
393
  }
203
394
  }
204
- function messageOf(error) {
205
- return error instanceof Error ? error.message : String(error);
395
+ function isWithin(root, candidate) {
396
+ const rel = relative(root, candidate);
397
+ return (rel !== '' &&
398
+ rel !== '..' &&
399
+ !rel.startsWith(`..${sep}`) &&
400
+ !isAbsolute(rel));
206
401
  }
207
402
  //# sourceMappingURL=execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
package/dist/hash.d.ts CHANGED
@@ -11,4 +11,26 @@ export declare function hashBytes(bytes: Uint8Array): Hash;
11
11
  export declare function hashFile(path: string): Promise<Hash>;
12
12
  /** Reports whether a string is a well-formed `sha256:<64 lowercase hex>` hash (DR-007). */
13
13
  export declare function isHash(value: string): value is Hash;
14
+ /**
15
+ * Orders two strings by their exact UTF-8 bytes (DR-007).
16
+ *
17
+ * This is the ordering every hashed tree record is sorted and validated by,
18
+ * so it belongs beside the hashes themselves: a second implementation that
19
+ * disagreed on one code point would silently change identities.
20
+ */
21
+ export declare function compareUtf8(left: string, right: string): number;
22
+ /** One tree entry: its path, and its frozen serialized form. */
23
+ export interface TreeEntryRecord {
24
+ readonly path: string;
25
+ readonly serialized: string;
26
+ }
27
+ /**
28
+ * Serializes one tree entry as `[kind,path,identity]` (DR-007).
29
+ *
30
+ * Every tree identity — whatever walker produced its entries — is this exact
31
+ * encoding, so it is written once beside the hash it feeds.
32
+ */
33
+ export declare function serializeTreeRecord(kind: 'file' | 'symlink', path: string, identity: string): string;
34
+ /** Hashes tree entries in UTF-8 path order, one LF between entries. */
35
+ export declare function hashTreeRecords(records: readonly TreeEntryRecord[]): Hash;
14
36
  //# sourceMappingURL=hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAkBA,sEAAsE;AACtE,MAAM,MAAM,IAAI,GAAG,UAAU,MAAM,EAAE,CAAC;AAItC,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAEjD;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,2FAA2F;AAC3F,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,CAEnD"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAkBA,sEAAsE;AACtE,MAAM,MAAM,IAAI,GAAG,UAAU,MAAM,EAAE,CAAC;AAItC,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAEjD;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,2FAA2F;AAC3F,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAqBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CASzE"}
package/dist/hash.js CHANGED
@@ -31,4 +31,51 @@ export async function hashFile(path) {
31
31
  export function isHash(value) {
32
32
  return HASH_PATTERN.test(value);
33
33
  }
34
+ /**
35
+ * Orders two strings by their exact UTF-8 bytes (DR-007).
36
+ *
37
+ * This is the ordering every hashed tree record is sorted and validated by,
38
+ * so it belongs beside the hashes themselves: a second implementation that
39
+ * disagreed on one code point would silently change identities.
40
+ */
41
+ export function compareUtf8(left, right) {
42
+ return Buffer.compare(Buffer.from(left, 'utf8'), Buffer.from(right, 'utf8'));
43
+ }
44
+ function canonicalJsonString(value) {
45
+ let serialized = '"';
46
+ for (const character of value) {
47
+ const codePoint = character.codePointAt(0);
48
+ if (codePoint === undefined)
49
+ continue;
50
+ if (codePoint >= 0xd800 && codePoint <= 0xdfff) {
51
+ throw new Error('tree entry contains an unpaired Unicode surrogate');
52
+ }
53
+ if (character === '"' || character === '\\') {
54
+ serialized += `\\${character}`;
55
+ }
56
+ else if (codePoint <= 0x1f) {
57
+ serialized += `\\u${codePoint.toString(16).padStart(4, '0')}`;
58
+ }
59
+ else {
60
+ serialized += character;
61
+ }
62
+ }
63
+ return `${serialized}"`;
64
+ }
65
+ /**
66
+ * Serializes one tree entry as `[kind,path,identity]` (DR-007).
67
+ *
68
+ * Every tree identity — whatever walker produced its entries — is this exact
69
+ * encoding, so it is written once beside the hash it feeds.
70
+ */
71
+ export function serializeTreeRecord(kind, path, identity) {
72
+ return `[${canonicalJsonString(kind)},${canonicalJsonString(path)},${canonicalJsonString(identity)}]`;
73
+ }
74
+ /** Hashes tree entries in UTF-8 path order, one LF between entries. */
75
+ export function hashTreeRecords(records) {
76
+ return hashBytes(new TextEncoder().encode([...records]
77
+ .sort((left, right) => compareUtf8(left.path, right.path))
78
+ .map((record) => record.serialized)
79
+ .join('\n')));
80
+ }
34
81
  //# sourceMappingURL=hash.js.map
package/dist/hash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAE1E;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C,6FAA6F;AAC7F,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAE1E;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C,6FAA6F;AAC7F,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,CAAC;AAQD,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5C,UAAU,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,CAAC;aAAM,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,UAAU,IAAI,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,UAAU,IAAI,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,UAAU,GAAG,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAwB,EACxB,IAAY,EACZ,QAAgB;IAEhB,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;AACxG,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,OAAmC;IACjE,OAAO,SAAS,CACd,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,CAAC,GAAG,OAAO,CAAC;SACT,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CACd,CACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ export * from './invocation.js';
15
15
  export * from './link.js';
16
16
  export * from './phase.js';
17
17
  export * from './pipeline.js';
18
+ export * from './progress.js';
18
19
  export * from './resolver.js';
19
20
  export * from './runner.js';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -17,6 +17,7 @@ export * from './invocation.js';
17
17
  export * from './link.js';
18
18
  export * from './phase.js';
19
19
  export * from './pipeline.js';
20
+ export * from './progress.js';
20
21
  export * from './resolver.js';
21
22
  export * from './runner.js';
22
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAE1E;;;;;;GAMG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAE1E;;;;;;GAMG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ExecuteRequest, PhaseExecutor } from './execution.js';
1
+ import { type ExecuteRequest, type PhaseExecutor } from './execution.js';
2
2
  /** A single agent invocation: a prompt plus per-run configuration. */
3
3
  export interface AgentRunRequest {
4
4
  prompt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,cAAc,EAGd,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IAC3C,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACxD;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CA0CT;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GAAG,aAAa,CAoChB"}
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,cAAc,EAGnB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IAC3C,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACxD;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAkDT;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GAAG,aAAa,CAoChB"}
@@ -14,6 +14,7 @@
14
14
  * specs/dev/phase-execution.md.
15
15
  */
16
16
  import { readFile } from 'node:fs/promises';
17
+ import { updateContextLines, } from './execution.js';
17
18
  /**
18
19
  * Builds the agent-contract prompt for a phase from its definition and inputs
19
20
  * (PHEXEC-11, PHEXEC-14, PHEXEC-15).
@@ -25,6 +26,11 @@ export function buildPhasePrompt(opts) {
25
26
  ? [
26
27
  `source to read: ${request.source}`,
27
28
  ...(request.references ?? []).map((path) => `reference to consult (read-only): ${path}`),
29
+ ...(request.update === undefined
30
+ ? []
31
+ : [
32
+ `prior input to consult (read-only): ${request.update.priorInput}`,
33
+ ]),
28
34
  ]
29
35
  : [
30
36
  `object artifacts to read, in order: ${request.objects.join(', ')}`,
@@ -53,6 +59,9 @@ export function buildPhasePrompt(opts) {
53
59
  '- run only the deterministic tools or commands the definition calls for, and read only the content it cites or references;',
54
60
  '- verify the produced artifact against the definition before finishing.',
55
61
  '',
62
+ ...(request.kind === 'compile' && request.update !== undefined
63
+ ? [...updateContextLines(request.update, request.target), '']
64
+ : []),
56
65
  'When done, reply with a concise summary of what you produced and any ambiguity you resolved.',
57
66
  'If the inputs are malformed under the definition, or the definition is incompatible with them, do not guess: leave the artifact unwritten and reply with a line beginning "BLOCKED:" followed by the concrete reason(s).',
58
67
  ].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAE1E;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0C5C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAGhC;IACC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5E,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,SAAS;QACxB,CAAC,CAAC;YACE,mBAAmB,OAAO,CAAC,MAAM,EAAE;YACnC,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,qCAAqC,IAAI,EAAE,CACtD;SACF;QACH,CAAC,CAAC;YACE,uCAAuC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnE,uBAAuB,OAAO,CAAC,UAAU,EAAE;YAC3C,YAAY,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;SAC7C,CAAC;IAER,OAAO;QACL,4DAA4D;QAC5D,8FAA8F;QAC9F,EAAE;QACF,oBAAoB;QACpB,UAAU;QACV,wBAAwB;QACxB,EAAE;QACF,SAAS;QACT,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,wBAAwB,MAAM,EAAE;QAChC,EAAE;QACF,sBAAsB;QACtB,gBAAgB,MAAM,8CAA8C;QACpE,iHAAiH;QACjH,kDAAkD;QAClD,6DAA6D;QAC7D,0HAA0H;QAC1H,0EAA0E;QAC1E,4HAA4H;QAC5H,yEAAyE;QACzE,EAAE;QACF,8FAA8F;QAC9F,0NAA0N;KAC3N,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAGzC;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAEjC,OAAO;QACL,KAAK,CAAC,GAAG,CACP,OAAuB,EACvB,MAAmB;YAEnB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;gBAC/B,MAAM;gBACN,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;aACP,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,KAAK,YAAY;oBAC9B,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,yBAAyB,CAAC;gBAChC,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;iBAChD,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAkC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,uFAAuF;AACvF,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,QAAiB;IAChD,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export type Invocation = {
21
21
  optimize: boolean;
22
22
  noOptimize: boolean;
23
23
  normalize: boolean;
24
+ /** Bypass reuse and update, then record fresh history (DR-021). */
25
+ rebuild?: true;
24
26
  } | {
25
27
  kind: 'phase';
26
28
  pipeline: string;
@@ -37,6 +39,8 @@ export type Invocation = {
37
39
  optimize: boolean;
38
40
  noOptimize: boolean;
39
41
  normalize: boolean;
42
+ /** Bypass reuse and update, then record fresh history (DR-021). */
43
+ rebuild?: true;
40
44
  } | {
41
45
  kind: 'link';
42
46
  pipeline: string;
@@ -55,7 +59,7 @@ export declare class CliError extends Error {
55
59
  /**
56
60
  * Parses argv (without the node/script prefix) into a routed {@link Invocation}.
57
61
  *
58
- * Options (`-o`, `--link`, `--link-option`) may be interspersed with positionals;
62
+ * Options (`-o`, `--link`, `--link-option`, `--rebuild`) may be interspersed with positionals;
59
63
  * positional roles are assigned by position alone (PIPE-12).
60
64
  *
61
65
  * @throws {CliError} when the grammar is violated.
@@ -1 +1 @@
1
- {"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../src/invocation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AAEN,yDAAyD;AACzD,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,iBAAiB,GACjB,cAAc,GACd,qBAAqB,GACrB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,8EAA8E;AAC9E,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;gBAEhB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAkInE"}
1
+ {"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../src/invocation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AAEN,yDAAyD;AACzD,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,iBAAiB,GACjB,cAAc,GACd,qBAAqB,GACrB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,8EAA8E;AAC9E,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;gBAEhB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA2InE"}
@@ -12,7 +12,7 @@ export class CliError extends Error {
12
12
  /**
13
13
  * Parses argv (without the node/script prefix) into a routed {@link Invocation}.
14
14
  *
15
- * Options (`-o`, `--link`, `--link-option`) may be interspersed with positionals;
15
+ * Options (`-o`, `--link`, `--link-option`, `--rebuild`) may be interspersed with positionals;
16
16
  * positional roles are assigned by position alone (PIPE-12).
17
17
  *
18
18
  * @throws {CliError} when the grammar is violated.
@@ -24,6 +24,7 @@ export function parseInvocation(argv) {
24
24
  let optimize = false;
25
25
  let noOptimize = false;
26
26
  let normalize = false;
27
+ let rebuild = false;
27
28
  const options = [];
28
29
  for (let i = 0; i < argv.length; i++) {
29
30
  const arg = argv[i];
@@ -49,6 +50,11 @@ export function parseInvocation(argv) {
49
50
  else if (arg === '--normalize') {
50
51
  normalize = true;
51
52
  }
53
+ else if (arg === '--rebuild') {
54
+ if (rebuild)
55
+ throw new CliError('duplicate-option', 'repeated --rebuild');
56
+ rebuild = true;
57
+ }
52
58
  else if (arg.startsWith('-') && arg !== '-') {
53
59
  throw new CliError('unknown-option', `unknown option "${arg}"`);
54
60
  }
@@ -70,8 +76,11 @@ export function parseInvocation(argv) {
70
76
  if (optimize && noOptimize) {
71
77
  throw new CliError('duplicate-option', '-O/--optimize conflicts with --no-optimize');
72
78
  }
73
- if (phase !== null && (optimize || noOptimize || normalize)) {
74
- throw new CliError('unexpected-flag', `${optimize ? '-O' : noOptimize ? '--no-optimize' : '--normalize'} is only valid for a full-pipeline invocation`);
79
+ if (phase !== null && (optimize || noOptimize || normalize || rebuild)) {
80
+ throw new CliError('unexpected-flag', `${optimize ? '-O' : noOptimize ? '--no-optimize' : normalize ? '--normalize' : '--rebuild'} is only valid for a full-pipeline invocation`);
81
+ }
82
+ if (rebuild && output !== null) {
83
+ throw new CliError('unexpected-flag', '--rebuild is not valid with -o');
75
84
  }
76
85
  if (phase === 'link') {
77
86
  if (link !== null) {
@@ -112,6 +121,7 @@ export function parseInvocation(argv) {
112
121
  optimize,
113
122
  noOptimize,
114
123
  normalize,
124
+ ...(rebuild ? { rebuild: true } : {}),
115
125
  };
116
126
  }
117
127
  if (options.length > 0) {
@@ -125,6 +135,7 @@ export function parseInvocation(argv) {
125
135
  optimize,
126
136
  noOptimize,
127
137
  normalize,
138
+ ...(rebuild ? { rebuild: true } : {}),
128
139
  };
129
140
  }
130
141
  function takeValue(argv, index, flag) {