@relayflows/sdk 2.0.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/dist/authored-flow-error.d.ts +9 -0
- package/dist/authored-flow-error.d.ts.map +1 -0
- package/dist/authored-flow-error.js +13 -0
- package/dist/authored-flow-error.js.map +1 -0
- package/dist/authored-flow-executor.d.ts +28 -0
- package/dist/authored-flow-executor.d.ts.map +1 -0
- package/dist/authored-flow-executor.js +203 -0
- package/dist/authored-flow-executor.js.map +1 -0
- package/dist/authored-flow-lifecycle.d.ts +61 -0
- package/dist/authored-flow-lifecycle.d.ts.map +1 -0
- package/dist/authored-flow-lifecycle.js +284 -0
- package/dist/authored-flow-lifecycle.js.map +1 -0
- package/dist/authored-flow-loader.d.ts +7 -0
- package/dist/authored-flow-loader.d.ts.map +1 -0
- package/dist/authored-flow-loader.js +39 -0
- package/dist/authored-flow-loader.js.map +1 -0
- package/dist/authored-flow-operation.d.ts +43 -0
- package/dist/authored-flow-operation.d.ts.map +1 -0
- package/dist/authored-flow-operation.js +176 -0
- package/dist/authored-flow-operation.js.map +1 -0
- package/dist/authored-flow.d.ts +12 -0
- package/dist/authored-flow.d.ts.map +1 -0
- package/dist/authored-flow.js +13 -0
- package/dist/authored-flow.js.map +1 -0
- package/dist/authored-promise-graph.d.ts +67 -0
- package/dist/authored-promise-graph.d.ts.map +1 -0
- package/dist/authored-promise-graph.js +206 -0
- package/dist/authored-promise-graph.js.map +1 -0
- package/dist/backlog-picker.d.ts +55 -0
- package/dist/backlog-picker.d.ts.map +1 -0
- package/dist/backlog-picker.js +117 -0
- package/dist/backlog-picker.js.map +1 -0
- package/dist/canonical.d.ts +18 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +55 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli/check.d.ts +30 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +324 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/direct-run.d.ts +3 -0
- package/dist/cli/direct-run.d.ts.map +1 -0
- package/dist/cli/direct-run.js +69 -0
- package/dist/cli/direct-run.js.map +1 -0
- package/dist/cli/hn-monitor.d.ts +107 -0
- package/dist/cli/hn-monitor.d.ts.map +1 -0
- package/dist/cli/hn-monitor.js +220 -0
- package/dist/cli/hn-monitor.js.map +1 -0
- package/dist/cli/interruptible-sleep.d.ts +13 -0
- package/dist/cli/interruptible-sleep.d.ts.map +1 -0
- package/dist/cli/interruptible-sleep.js +31 -0
- package/dist/cli/interruptible-sleep.js.map +1 -0
- package/dist/cli/run.d.ts +54 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +316 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/tick-runner.d.ts +151 -0
- package/dist/cli/tick-runner.d.ts.map +1 -0
- package/dist/cli/tick-runner.js +258 -0
- package/dist/cli/tick-runner.js.map +1 -0
- package/dist/cli-adapter.d.ts +29 -0
- package/dist/cli-adapter.d.ts.map +1 -0
- package/dist/cli-adapter.js +92 -0
- package/dist/cli-adapter.js.map +1 -0
- package/dist/cli-executable.d.ts +3 -0
- package/dist/cli-executable.d.ts.map +1 -0
- package/dist/cli-executable.js +10 -0
- package/dist/cli-executable.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +348 -0
- package/dist/cli.js.map +1 -0
- package/dist/compile.d.ts +42 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +515 -0
- package/dist/compile.js.map +1 -0
- package/dist/demo-hn-monitor.d.ts +2 -0
- package/dist/demo-hn-monitor.d.ts.map +1 -0
- package/dist/demo-hn-monitor.js +118 -0
- package/dist/demo-hn-monitor.js.map +1 -0
- package/dist/dir-watcher-poller.d.ts +73 -0
- package/dist/dir-watcher-poller.d.ts.map +1 -0
- package/dist/dir-watcher-poller.js +80 -0
- package/dist/dir-watcher-poller.js.map +1 -0
- package/dist/direct-input.d.ts +10 -0
- package/dist/direct-input.d.ts.map +1 -0
- package/dist/direct-input.js +61 -0
- package/dist/direct-input.js.map +1 -0
- package/dist/failure-kinds.d.ts +25 -0
- package/dist/failure-kinds.d.ts.map +1 -0
- package/dist/failure-kinds.js +64 -0
- package/dist/failure-kinds.js.map +1 -0
- package/dist/gate-contract.d.ts +24 -0
- package/dist/gate-contract.d.ts.map +1 -0
- package/dist/gate-contract.js +50 -0
- package/dist/gate-contract.js.map +1 -0
- package/dist/hn-poller.d.ts +50 -0
- package/dist/hn-poller.d.ts.map +1 -0
- package/dist/hn-poller.js +79 -0
- package/dist/hn-poller.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/journal-client.d.ts +122 -0
- package/dist/journal-client.d.ts.map +1 -0
- package/dist/journal-client.js +277 -0
- package/dist/journal-client.js.map +1 -0
- package/dist/json-schema-bound.d.ts +7 -0
- package/dist/json-schema-bound.d.ts.map +1 -0
- package/dist/json-schema-bound.js +353 -0
- package/dist/json-schema-bound.js.map +1 -0
- package/dist/json-schema.d.ts +5 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +72 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/json-value.d.ts +6 -0
- package/dist/json-value.d.ts.map +1 -0
- package/dist/json-value.js +94 -0
- package/dist/json-value.js.map +1 -0
- package/dist/model-name.d.ts +7 -0
- package/dist/model-name.d.ts.map +1 -0
- package/dist/model-name.js +21 -0
- package/dist/model-name.js.map +1 -0
- package/dist/output-schema.d.ts +8 -0
- package/dist/output-schema.d.ts.map +1 -0
- package/dist/output-schema.js +28 -0
- package/dist/output-schema.js.map +1 -0
- package/dist/preflight.d.ts +80 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +361 -0
- package/dist/preflight.js.map +1 -0
- package/dist/protocol.d.ts +359 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +15 -0
- package/dist/protocol.js.map +1 -0
- package/dist/spec.d.ts +294 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +13 -0
- package/dist/spec.js.map +1 -0
- package/dist/step-dependencies.d.ts +2 -0
- package/dist/step-dependencies.d.ts.map +1 -0
- package/dist/step-dependencies.js +88 -0
- package/dist/step-dependencies.js.map +1 -0
- package/dist/step-fields.d.ts +17 -0
- package/dist/step-fields.d.ts.map +1 -0
- package/dist/step-fields.js +32 -0
- package/dist/step-fields.js.map +1 -0
- package/dist/tick-source.d.ts +205 -0
- package/dist/tick-source.d.ts.map +1 -0
- package/dist/tick-source.js +234 -0
- package/dist/tick-source.js.map +1 -0
- package/dist/unknown-keys.d.ts +7 -0
- package/dist/unknown-keys.d.ts.map +1 -0
- package/dist/unknown-keys.js +47 -0
- package/dist/unknown-keys.js.map +1 -0
- package/dist/validate.d.ts +7 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +458 -0
- package/dist/validate.js.map +1 -0
- package/dist/work-package-consumer.d.ts +33 -0
- package/dist/work-package-consumer.d.ts.map +1 -0
- package/dist/work-package-consumer.js +44 -0
- package/dist/work-package-consumer.js.map +1 -0
- package/dist/work-package-validator.d.ts +15 -0
- package/dist/work-package-validator.d.ts.map +1 -0
- package/dist/work-package-validator.js +72 -0
- package/dist/work-package-validator.js.map +1 -0
- package/dist/worker-cli.d.ts +16 -0
- package/dist/worker-cli.d.ts.map +1 -0
- package/dist/worker-cli.js +77 -0
- package/dist/worker-cli.js.map +1 -0
- package/dist/worker.d.ts +57 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +129 -0
- package/dist/worker.js.map +1 -0
- package/dist/wrapper-runtime.d.ts +10 -0
- package/dist/wrapper-runtime.d.ts.map +1 -0
- package/dist/wrapper-runtime.js +83 -0
- package/dist/wrapper-runtime.js.map +1 -0
- package/dist/wrapper-session.d.ts +16 -0
- package/dist/wrapper-session.d.ts.map +1 -0
- package/dist/wrapper-session.js +244 -0
- package/dist/wrapper-session.js.map +1 -0
- package/package.json +50 -0
- package/src/authored-flow-error.ts +31 -0
- package/src/authored-flow-executor.ts +365 -0
- package/src/authored-flow-lifecycle.ts +344 -0
- package/src/authored-flow-loader.ts +44 -0
- package/src/authored-flow-operation.ts +252 -0
- package/src/authored-flow.ts +21 -0
- package/src/authored-promise-graph.ts +196 -0
- package/src/backlog-picker.ts +153 -0
- package/src/canonical.ts +57 -0
- package/src/cli/check.ts +391 -0
- package/src/cli/direct-run.ts +86 -0
- package/src/cli/hn-monitor.ts +286 -0
- package/src/cli/interruptible-sleep.ts +27 -0
- package/src/cli/run.ts +439 -0
- package/src/cli/tick-runner.ts +378 -0
- package/src/cli-adapter.ts +115 -0
- package/src/cli-executable.ts +12 -0
- package/src/cli.ts +364 -0
- package/src/compile.ts +573 -0
- package/src/demo-hn-monitor.ts +132 -0
- package/src/dir-watcher-poller.ts +122 -0
- package/src/direct-input.ts +69 -0
- package/src/failure-kinds.ts +77 -0
- package/src/gate-contract.ts +72 -0
- package/src/hn-poller.ts +104 -0
- package/src/index.ts +195 -0
- package/src/journal-client.ts +379 -0
- package/src/json-schema-bound.ts +357 -0
- package/src/json-schema.ts +65 -0
- package/src/json-value.ts +110 -0
- package/src/model-name.ts +20 -0
- package/src/output-schema.ts +33 -0
- package/src/preflight.ts +482 -0
- package/src/protocol.ts +364 -0
- package/src/spec.ts +343 -0
- package/src/step-dependencies.ts +100 -0
- package/src/step-fields.ts +36 -0
- package/src/tick-source.ts +334 -0
- package/src/unknown-keys.ts +52 -0
- package/src/validate.ts +503 -0
- package/src/work-package-consumer.ts +73 -0
- package/src/work-package-validator.ts +90 -0
- package/src/worker-cli.ts +110 -0
- package/src/worker.ts +150 -0
- package/src/wrapper-runtime.ts +93 -0
- package/src/wrapper-session.ts +287 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate-3 foundation: choose the next work package from ops/BACKLOG.md.
|
|
3
|
+
*
|
|
4
|
+
* The selection rule lived only inside a shell one-liner in
|
|
5
|
+
* testdata/backlog-picker.flow.yaml, which made the flow's central claim —
|
|
6
|
+
* that selection is DETERMINISTIC — impossible to assert. Review caught the
|
|
7
|
+
* missing test (PR #20, P1). A rule that cannot be tested is a rule nobody can
|
|
8
|
+
* rely on, so it lives here and the flow calls it.
|
|
9
|
+
*
|
|
10
|
+
* The rule: the first top-level bullet whose title is bold. Deliberately dull.
|
|
11
|
+
* A Garden that proposes its own work must be predictable before it is clever
|
|
12
|
+
* — if two runs over identical input can disagree, nothing downstream can
|
|
13
|
+
* reason about what the system decided or why.
|
|
14
|
+
*/
|
|
15
|
+
export interface BacklogEntry {
|
|
16
|
+
title: string;
|
|
17
|
+
body: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ValidatedWorkPackage {
|
|
20
|
+
title: string;
|
|
21
|
+
files_in_scope: string[];
|
|
22
|
+
definition_of_done: string[];
|
|
23
|
+
description?: string;
|
|
24
|
+
gate?: number | null;
|
|
25
|
+
}
|
|
26
|
+
export type WorkPackageValidationReason = 'missing_title' | 'unterminated_backticks' | 'missing_scope' | 'missing_definition_of_done';
|
|
27
|
+
export type WorkPackageValidation = {
|
|
28
|
+
accepted: true;
|
|
29
|
+
work: ValidatedWorkPackage;
|
|
30
|
+
} | {
|
|
31
|
+
accepted: false;
|
|
32
|
+
reason: WorkPackageValidationReason;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Returns the selected entry, or null when the backlog holds no actionable
|
|
36
|
+
* one. Null is a real answer — "nothing to do" — not a failure.
|
|
37
|
+
*/
|
|
38
|
+
export declare function selectBacklogEntry(markdown: string): BacklogEntry | null;
|
|
39
|
+
/** Render the selected entry as a work package. */
|
|
40
|
+
export declare function renderWorkPackage(entry: BacklogEntry): string;
|
|
41
|
+
/** Accept a complete emitted package, or name the first missing requirement. */
|
|
42
|
+
export declare function validateWorkPackage(input: unknown): WorkPackageValidation;
|
|
43
|
+
/** Whether the backlog text used to derive a package has an unmatched backtick. */
|
|
44
|
+
export declare function hasUnterminatedBackticks(input: Record<string, unknown>): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Build a work package from a backlog entry.
|
|
47
|
+
*
|
|
48
|
+
* This lives in the SDK because two flow steps need it: `select-entry` has to
|
|
49
|
+
* build a candidate package to know whether an entry is actionable at all, and
|
|
50
|
+
* `emit-package` has to build the package it emits. When the logic was inlined
|
|
51
|
+
* in both, the two could drift silently — the flow would select an entry on one
|
|
52
|
+
* rule and describe it by another.
|
|
53
|
+
*/
|
|
54
|
+
export declare function packageFromEntry(entry: BacklogEntry): Record<string, unknown>;
|
|
55
|
+
//# sourceMappingURL=backlog-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog-picker.d.ts","sourceRoot":"","sources":["../src/backlog-picker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,2BAA2B,GACnC,eAAe,GACf,wBAAwB,GACxB,eAAe,GACf,4BAA4B,CAAC;AAEjC,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9C;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAIxE;AAED,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAiB7D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAczE;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAKhF;AAcD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8B7E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate-3 foundation: choose the next work package from ops/BACKLOG.md.
|
|
3
|
+
*
|
|
4
|
+
* The selection rule lived only inside a shell one-liner in
|
|
5
|
+
* testdata/backlog-picker.flow.yaml, which made the flow's central claim —
|
|
6
|
+
* that selection is DETERMINISTIC — impossible to assert. Review caught the
|
|
7
|
+
* missing test (PR #20, P1). A rule that cannot be tested is a rule nobody can
|
|
8
|
+
* rely on, so it lives here and the flow calls it.
|
|
9
|
+
*
|
|
10
|
+
* The rule: the first top-level bullet whose title is bold. Deliberately dull.
|
|
11
|
+
* A Garden that proposes its own work must be predictable before it is clever
|
|
12
|
+
* — if two runs over identical input can disagree, nothing downstream can
|
|
13
|
+
* reason about what the system decided or why.
|
|
14
|
+
*/
|
|
15
|
+
/** First bold top-level bullet: `- **Title** rest`. */
|
|
16
|
+
const ENTRY = /^- \*\*(.+?)\*\*\s*(.*(?:\n .*)*)/m;
|
|
17
|
+
const CODE_REFERENCE = /`([^`]+)`/g;
|
|
18
|
+
// Outcomes include explicit changes and concrete defect statements. A list of
|
|
19
|
+
// identifiers or links alone carries neither, so it cannot qualify as work.
|
|
20
|
+
const ENGINEERING_OUTCOME = /\b(?:add|asserts?|breaks?|build|cannot|capture|catches?|change|close|collapses?|cross-compile|delete|document|drift|duplicates?|fails?|fix|implement|invoke|leaks?|make|missing|must|needs?|no (?:end-to-end )?coverage|persist|refuse|register|replace|reserve|restore|run|scope|should|spawn|untested|update|use|validate|verified?|wire|wrong)\b/i;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the selected entry, or null when the backlog holds no actionable
|
|
23
|
+
* one. Null is a real answer — "nothing to do" — not a failure.
|
|
24
|
+
*/
|
|
25
|
+
export function selectBacklogEntry(markdown) {
|
|
26
|
+
const match = ENTRY.exec(markdown);
|
|
27
|
+
if (!match)
|
|
28
|
+
return null;
|
|
29
|
+
return { title: match[1] ?? '', body: (match[2] ?? '').trim() };
|
|
30
|
+
}
|
|
31
|
+
/** Render the selected entry as a work package. */
|
|
32
|
+
export function renderWorkPackage(entry) {
|
|
33
|
+
return [
|
|
34
|
+
`# NEXT — ${entry.title}`,
|
|
35
|
+
'',
|
|
36
|
+
'Selected from ops/BACKLOG.md by the backlog picker (gate 3).',
|
|
37
|
+
'Selection rule: the first top-level bullet whose title is bold.',
|
|
38
|
+
'',
|
|
39
|
+
'## Scope',
|
|
40
|
+
'',
|
|
41
|
+
entry.body || '(the backlog entry carried no detail beyond its title)',
|
|
42
|
+
'',
|
|
43
|
+
'## Definition of done',
|
|
44
|
+
'',
|
|
45
|
+
'Restate the entry as passing commands before building against it. An entry',
|
|
46
|
+
'that cannot be turned into a command is not yet a work package.',
|
|
47
|
+
'',
|
|
48
|
+
].join('\n');
|
|
49
|
+
}
|
|
50
|
+
/** Accept a complete emitted package, or name the first missing requirement. */
|
|
51
|
+
export function validateWorkPackage(input) {
|
|
52
|
+
if (!isRecord(input) || !isNonEmptyString(input['title'])) {
|
|
53
|
+
return { accepted: false, reason: 'missing_title' };
|
|
54
|
+
}
|
|
55
|
+
if (hasUnterminatedBackticks(input)) {
|
|
56
|
+
return { accepted: false, reason: 'unterminated_backticks' };
|
|
57
|
+
}
|
|
58
|
+
if (!isNonEmptyStringArray(input['files_in_scope'])) {
|
|
59
|
+
return { accepted: false, reason: 'missing_scope' };
|
|
60
|
+
}
|
|
61
|
+
if (!isNonEmptyStringArray(input['definition_of_done'])) {
|
|
62
|
+
return { accepted: false, reason: 'missing_definition_of_done' };
|
|
63
|
+
}
|
|
64
|
+
return { accepted: true, work: input };
|
|
65
|
+
}
|
|
66
|
+
/** Whether the backlog text used to derive a package has an unmatched backtick. */
|
|
67
|
+
export function hasUnterminatedBackticks(input) {
|
|
68
|
+
const text = [input['title'], input['description']]
|
|
69
|
+
.filter((value) => typeof value === 'string')
|
|
70
|
+
.join(' ');
|
|
71
|
+
return (text.match(/`/g)?.length ?? 0) % 2 === 1;
|
|
72
|
+
}
|
|
73
|
+
function isRecord(value) {
|
|
74
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
75
|
+
}
|
|
76
|
+
function isNonEmptyString(value) {
|
|
77
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
78
|
+
}
|
|
79
|
+
function isNonEmptyStringArray(value) {
|
|
80
|
+
return Array.isArray(value) && value.length > 0 && value.every(isNonEmptyString);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a work package from a backlog entry.
|
|
84
|
+
*
|
|
85
|
+
* This lives in the SDK because two flow steps need it: `select-entry` has to
|
|
86
|
+
* build a candidate package to know whether an entry is actionable at all, and
|
|
87
|
+
* `emit-package` has to build the package it emits. When the logic was inlined
|
|
88
|
+
* in both, the two could drift silently — the flow would select an entry on one
|
|
89
|
+
* rule and describe it by another.
|
|
90
|
+
*/
|
|
91
|
+
export function packageFromEntry(entry) {
|
|
92
|
+
const blob = `${entry.title} ${entry.body}`;
|
|
93
|
+
const references = [...entry.body.matchAll(CODE_REFERENCE)].map((match) => match[1] ?? '');
|
|
94
|
+
const files = [
|
|
95
|
+
...new Set(references
|
|
96
|
+
.filter((candidate) => /^[A-Za-z_][A-Za-z0-9._-]*(?:\/[A-Za-z0-9._-]*)+$/.test(candidate) &&
|
|
97
|
+
!/^\/|\/\//.test(candidate))),
|
|
98
|
+
];
|
|
99
|
+
const hasEngineeringOutcome = ENGINEERING_OUTCOME.test(entry.body);
|
|
100
|
+
// A symbol or command locates work in this repository, but not necessarily
|
|
101
|
+
// one file. Preserve that honest breadth instead of discarding the signal.
|
|
102
|
+
if (files.length === 0 && references.length > 0 && hasEngineeringOutcome) {
|
|
103
|
+
files.push('.');
|
|
104
|
+
}
|
|
105
|
+
const gate = blob.match(/\bgate[ -]?(\d+)\b/i);
|
|
106
|
+
const definitionOfDone = hasEngineeringOutcome
|
|
107
|
+
? [entry.title.replace(/[.:]\s*$/, '')]
|
|
108
|
+
: [];
|
|
109
|
+
return {
|
|
110
|
+
title: entry.title,
|
|
111
|
+
description: entry.body,
|
|
112
|
+
files_in_scope: files,
|
|
113
|
+
gate: gate ? Number(gate[1]) : null,
|
|
114
|
+
definition_of_done: definitionOfDone,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=backlog-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog-picker.js","sourceRoot":"","sources":["../src/backlog-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a value as canonical JSON: object keys sorted recursively,
|
|
3
|
+
* arrays in order, no whitespace. Numbers are kept as-is (tokens are
|
|
4
|
+
* integers; money is a decimal string, never a float — so no float drift).
|
|
5
|
+
*
|
|
6
|
+
* This is an exported boundary, so runtime input is snapshotted into frozen,
|
|
7
|
+
* behavior-free data before a single byte is serialized — the same guard
|
|
8
|
+
* `validateSpec` and `kernelToAuthoring` use. Without it a Proxy or a plain
|
|
9
|
+
* getter could return one value while the identity is computed and another
|
|
10
|
+
* afterwards, and `specHash` would stamp a spec nobody ever declared.
|
|
11
|
+
*/
|
|
12
|
+
export declare function canonicalize(value: unknown): string;
|
|
13
|
+
/**
|
|
14
|
+
* sha256 of the canonical JSON of a spec. Pass a kernel-dialect spec
|
|
15
|
+
* (`toKernelSpec`) to get the identity the kernel stamps as `spec_hash`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function specHash(spec: unknown): string;
|
|
18
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Canonical JSON for specs — sorted keys, no whitespace, deterministic.
|
|
2
|
+
//
|
|
3
|
+
// The kernel hashes `serde_json::to_vec(to_value(spec))`; serde_json objects
|
|
4
|
+
// are BTreeMaps, so that is exactly this canonical form. Given the same spec
|
|
5
|
+
// value (a kernel-dialect spec from `toKernelSpec`), sha256 here equals the
|
|
6
|
+
// kernel's `spec_hash`. This is pinned by `tests/spec-parity.test.ts` and the
|
|
7
|
+
// kernel's `tests/spec_parity.rs` over the shared `testdata/` fixture — not
|
|
8
|
+
// assumed.
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
10
|
+
import { snapshotJsonValue } from './json-value.js';
|
|
11
|
+
/**
|
|
12
|
+
* Serialize a value as canonical JSON: object keys sorted recursively,
|
|
13
|
+
* arrays in order, no whitespace. Numbers are kept as-is (tokens are
|
|
14
|
+
* integers; money is a decimal string, never a float — so no float drift).
|
|
15
|
+
*
|
|
16
|
+
* This is an exported boundary, so runtime input is snapshotted into frozen,
|
|
17
|
+
* behavior-free data before a single byte is serialized — the same guard
|
|
18
|
+
* `validateSpec` and `kernelToAuthoring` use. Without it a Proxy or a plain
|
|
19
|
+
* getter could return one value while the identity is computed and another
|
|
20
|
+
* afterwards, and `specHash` would stamp a spec nobody ever declared.
|
|
21
|
+
*/
|
|
22
|
+
export function canonicalize(value) {
|
|
23
|
+
return serialize(snapshotJsonValue(value, 'value'));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* sha256 of the canonical JSON of a spec. Pass a kernel-dialect spec
|
|
27
|
+
* (`toKernelSpec`) to get the identity the kernel stamps as `spec_hash`.
|
|
28
|
+
*/
|
|
29
|
+
export function specHash(spec) {
|
|
30
|
+
return createHash('sha256').update(serialize(snapshotJsonValue(spec, 'spec'))).digest('hex');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Serialize an already-snapshotted value. Each key is read EXACTLY ONCE: the
|
|
34
|
+
* previous `keys.filter(k => obj[k] !== undefined).map(k => … obj[k])` read
|
|
35
|
+
* every property twice, which on a live getter is a TOCTOU — the filter and
|
|
36
|
+
* the serialize could disagree, and two `canonicalize` calls on one object
|
|
37
|
+
* could return different strings.
|
|
38
|
+
*/
|
|
39
|
+
function serialize(value) {
|
|
40
|
+
if (value === null || typeof value !== 'object') {
|
|
41
|
+
return JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
return '[' + value.map(serialize).join(',') + ']';
|
|
45
|
+
}
|
|
46
|
+
const parts = [];
|
|
47
|
+
for (const key of Object.keys(value).sort()) {
|
|
48
|
+
const child = value[key];
|
|
49
|
+
if (child === undefined)
|
|
50
|
+
continue;
|
|
51
|
+
parts.push(JSON.stringify(key) + ':' + serialize(child));
|
|
52
|
+
}
|
|
53
|
+
return '{' + parts.join(',') + '}';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,WAAW;AAEX,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,KAAgB;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FlowSpec } from '../spec.js';
|
|
2
|
+
import type { StepGateInspection } from '../gate-contract.js';
|
|
3
|
+
import type { CheckFailureKind } from '../failure-kinds.js';
|
|
4
|
+
import { type CliResolution, type PreflightDiagnostic } from '../preflight.js';
|
|
5
|
+
export interface CheckReport {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
path?: string;
|
|
8
|
+
projectConfigPath?: string;
|
|
9
|
+
gates: StepGateInspection[];
|
|
10
|
+
resolutions: CliResolution[];
|
|
11
|
+
diagnostics: Array<PreflightDiagnostic | CheckInputDiagnostic>;
|
|
12
|
+
}
|
|
13
|
+
export interface CheckInputDiagnostic {
|
|
14
|
+
severity: 'refusal';
|
|
15
|
+
kind: CheckFailureKind;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CheckExecution {
|
|
19
|
+
report: CheckReport;
|
|
20
|
+
flow?: FlowSpec;
|
|
21
|
+
}
|
|
22
|
+
/** Validate and preflight one working-tree spec without starting a run. */
|
|
23
|
+
export declare function checkFlow(path: string): CheckExecution;
|
|
24
|
+
/** Preflight a validated authored flow through the same path as YAML/JSON. */
|
|
25
|
+
export declare function checkAuthoredFlow(authoring: FlowSpec, path: string): CheckExecution;
|
|
26
|
+
export declare function inputFailureReport(failure: {
|
|
27
|
+
kind: CheckFailureKind;
|
|
28
|
+
message: string;
|
|
29
|
+
}, path?: string): CheckReport;
|
|
30
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,mBAAmB,EAEzB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAQD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWtD;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAsCnF;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACpD,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CAQb"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { accessSync, constants, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, isAbsolute, join, parse as parsePath, resolve } from 'node:path';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
import { CompileError, compileSpec, kernelToAuthoring } from '../compile.js';
|
|
6
|
+
import { adapterIdentification, authenticationProbe, cliAdapterKind, displayInvocation, modelReadinessProbe, } from '../cli-adapter.js';
|
|
7
|
+
import { MODEL_ENV } from '../worker-cli.js';
|
|
8
|
+
import { modelNameError } from '../model-name.js';
|
|
9
|
+
import { preflight, CliProbeError, } from '../preflight.js';
|
|
10
|
+
class CheckFailure extends Error {
|
|
11
|
+
kind;
|
|
12
|
+
constructor(kind, message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.kind = kind;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Validate and preflight one working-tree spec without starting a run. */
|
|
18
|
+
export function checkFlow(path) {
|
|
19
|
+
const absolutePath = resolve(path);
|
|
20
|
+
try {
|
|
21
|
+
const flow = readFlow(absolutePath);
|
|
22
|
+
return checkAuthoredFlow(flow, path);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
const failure = error instanceof CheckFailure
|
|
26
|
+
? error
|
|
27
|
+
: new CheckFailure('invalid_spec', `Flow "${path}" could not be checked as a Relayflow spec.`);
|
|
28
|
+
return { report: inputFailureReport(failure, path) };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Preflight a validated authored flow through the same path as YAML/JSON. */
|
|
32
|
+
export function checkAuthoredFlow(authoring, path) {
|
|
33
|
+
const absolutePath = resolve(path);
|
|
34
|
+
try {
|
|
35
|
+
const config = readProjectConfig(dirname(absolutePath));
|
|
36
|
+
const probes = systemProbes(dirname(absolutePath), config);
|
|
37
|
+
const result = preflight(authoring, {
|
|
38
|
+
projectCli: config.cli,
|
|
39
|
+
projectConfigPath: config.path,
|
|
40
|
+
projectSearchStart: dirname(absolutePath),
|
|
41
|
+
models: config.models,
|
|
42
|
+
...(config.path !== undefined ? { modelRegistryPath: config.path } : {}),
|
|
43
|
+
probes,
|
|
44
|
+
});
|
|
45
|
+
const flow = result.ok
|
|
46
|
+
? bindResolvedCliPaths(compileSpec(authoring), result.resolutions, dirname(absolutePath), config.directory)
|
|
47
|
+
: undefined;
|
|
48
|
+
return {
|
|
49
|
+
report: {
|
|
50
|
+
ok: result.ok,
|
|
51
|
+
path,
|
|
52
|
+
...(config.path !== undefined ? { projectConfigPath: config.path } : {}),
|
|
53
|
+
gates: result.gates,
|
|
54
|
+
resolutions: result.resolutions,
|
|
55
|
+
diagnostics: result.diagnostics,
|
|
56
|
+
},
|
|
57
|
+
...(flow !== undefined ? { flow } : {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const failure = error instanceof CheckFailure
|
|
62
|
+
? error
|
|
63
|
+
: new CheckFailure('invalid_spec', `Flow "${path}" could not be checked as a Relayflow spec.`);
|
|
64
|
+
return { report: inputFailureReport(failure, path) };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function inputFailureReport(failure, path) {
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
...(path !== undefined ? { path } : {}),
|
|
71
|
+
gates: [],
|
|
72
|
+
resolutions: [],
|
|
73
|
+
diagnostics: [{ severity: 'refusal', kind: failure.kind, message: failure.message }],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function readFlow(path) {
|
|
77
|
+
let source;
|
|
78
|
+
try {
|
|
79
|
+
source = readFileSync(path, 'utf8');
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new CheckFailure('input_unreadable', `Flow "${path}" is not readable.`);
|
|
83
|
+
}
|
|
84
|
+
let parsed;
|
|
85
|
+
try {
|
|
86
|
+
parsed = parseYaml(source);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
throw new CheckFailure('invalid_spec', `Flow "${path}" contains invalid YAML or JSON.`);
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const marker = kernelDialectMarker(parsed);
|
|
93
|
+
const authoring = marker === undefined ? parsed : kernelToAuthoring(parsed);
|
|
94
|
+
// Public preflight owns the first validation pass. Returning raw authoring
|
|
95
|
+
// here preserves named-agent provenance until every declaration is checked.
|
|
96
|
+
return authoring;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof CheckFailure)
|
|
100
|
+
throw error;
|
|
101
|
+
if (error instanceof CompileError) {
|
|
102
|
+
const marker = kernelDialectMarker(parsed);
|
|
103
|
+
const dialect = marker === undefined
|
|
104
|
+
? ''
|
|
105
|
+
: `Flow "${path}" was read as a compiled kernel spec because ${marker} is present. `;
|
|
106
|
+
throw new CheckFailure('invalid_spec', `${dialect}${error.errors.join('; ')}`);
|
|
107
|
+
}
|
|
108
|
+
throw new CheckFailure('invalid_spec', `Flow "${path}" is not a valid Relayflow spec.`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function readProjectConfig(start) {
|
|
112
|
+
const configPath = findConfig(start);
|
|
113
|
+
if (configPath === undefined)
|
|
114
|
+
return { executors: [], models: [], directory: start };
|
|
115
|
+
let value;
|
|
116
|
+
try {
|
|
117
|
+
value = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" is not valid JSON.`);
|
|
121
|
+
}
|
|
122
|
+
if (!isObject(value) || Object.keys(value).some((key) => !['cli', 'executors', 'models'].includes(key))) {
|
|
123
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" expects only cli, executors, and models.`);
|
|
124
|
+
}
|
|
125
|
+
if (value['cli'] !== undefined && !isNonEmptyString(value['cli'])) {
|
|
126
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" has an invalid cli.`);
|
|
127
|
+
}
|
|
128
|
+
if (value['executors'] !== undefined && (!Array.isArray(value['executors']) || !value['executors'].every(isNonEmptyString))) {
|
|
129
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" has invalid executors.`);
|
|
130
|
+
}
|
|
131
|
+
if (value['models'] !== undefined) {
|
|
132
|
+
if (!Array.isArray(value['models'])) {
|
|
133
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" has invalid models; expected an exact string allowlist.`);
|
|
134
|
+
}
|
|
135
|
+
for (const [index, model] of value['models'].entries()) {
|
|
136
|
+
const problem = modelNameError(model);
|
|
137
|
+
if (problem !== undefined) {
|
|
138
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" models[${index}]: ${problem}.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (new Set(value['models']).size !== value['models'].length) {
|
|
142
|
+
throw new CheckFailure('config_invalid', `Project config "${configPath}" has duplicate models.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
...(value['cli'] !== undefined ? { cli: value['cli'] } : {}),
|
|
147
|
+
executors: value['executors'] ?? [],
|
|
148
|
+
models: value['models'] ?? [],
|
|
149
|
+
directory: dirname(configPath),
|
|
150
|
+
path: configPath,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function findConfig(start) {
|
|
154
|
+
let directory = start;
|
|
155
|
+
while (true) {
|
|
156
|
+
const candidate = join(directory, 'flows.json');
|
|
157
|
+
try {
|
|
158
|
+
accessSync(candidate, constants.R_OK);
|
|
159
|
+
return candidate;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Continue toward the filesystem root.
|
|
163
|
+
}
|
|
164
|
+
const parent = dirname(directory);
|
|
165
|
+
if (parent === directory || directory === parsePath(directory).root)
|
|
166
|
+
return undefined;
|
|
167
|
+
directory = parent;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function systemProbes(flowDirectory, config) {
|
|
171
|
+
return {
|
|
172
|
+
cli: (cli, source, model) => probeCli(cli, source === 'project' ? config.directory : flowDirectory, model),
|
|
173
|
+
executor: (trigger) => config.executors.includes(trigger.executor),
|
|
174
|
+
command: (binary) => executableExists(binary, flowDirectory),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function bindResolvedCliPaths(flow, resolutions, flowDirectory, configDirectory) {
|
|
178
|
+
const byStep = new Map(resolutions.map((resolution) => [resolution.stepId, resolution]));
|
|
179
|
+
return {
|
|
180
|
+
...flow,
|
|
181
|
+
steps: flow.steps.map((step) => {
|
|
182
|
+
if (step.type === 'deterministic')
|
|
183
|
+
return step;
|
|
184
|
+
const resolution = byStep.get(step.id);
|
|
185
|
+
if (resolution === undefined)
|
|
186
|
+
return step;
|
|
187
|
+
const directory = resolution.source === 'project' ? configDirectory : flowDirectory;
|
|
188
|
+
return { ...step, cli: canonicalCli(resolution.cli, directory) };
|
|
189
|
+
}),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function canonicalCli(cli, directory) {
|
|
193
|
+
if (isAbsolute(cli) || (!cli.includes('/') && !cli.includes('\\')))
|
|
194
|
+
return cli;
|
|
195
|
+
return resolve(directory, cli);
|
|
196
|
+
}
|
|
197
|
+
function probeCli(cli, directory, model) {
|
|
198
|
+
const executable = resolveExecutable(cli, directory);
|
|
199
|
+
if (executable === undefined)
|
|
200
|
+
return { exists: false, authenticated: false };
|
|
201
|
+
const kind = cliAdapterKind(executable);
|
|
202
|
+
const identification = adapterIdentification(kind);
|
|
203
|
+
const identified = runProbe(executable, directory, identification.invocation);
|
|
204
|
+
if (identified.status !== 0
|
|
205
|
+
|| (identification.expectedStdout !== undefined
|
|
206
|
+
&& identified.stdout.trim() !== identification.expectedStdout)) {
|
|
207
|
+
return { exists: true, supported: false, authenticated: false };
|
|
208
|
+
}
|
|
209
|
+
const auth = authenticationProbe(kind);
|
|
210
|
+
const authCommand = displayInvocation(cli, auth);
|
|
211
|
+
if (model === undefined) {
|
|
212
|
+
return {
|
|
213
|
+
exists: true,
|
|
214
|
+
supported: true,
|
|
215
|
+
authenticated: runProbe(executable, directory, auth).status === 0,
|
|
216
|
+
authCommand,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
const scoped = modelReadinessProbe(kind, model);
|
|
220
|
+
const modelCommand = displayInvocation(cli, scoped);
|
|
221
|
+
// A successful real provider round trip (or identified wrapper probe)
|
|
222
|
+
// proves both auth and exact-model access. On failure, run the adapter's
|
|
223
|
+
// actual auth command solely to classify auth vs model access truthfully.
|
|
224
|
+
if (runProbe(executable, directory, scoped).status === 0) {
|
|
225
|
+
return {
|
|
226
|
+
exists: true,
|
|
227
|
+
supported: true,
|
|
228
|
+
authenticated: true,
|
|
229
|
+
modelAvailable: true,
|
|
230
|
+
authCommand,
|
|
231
|
+
modelCommand,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const authStatus = runProbe(executable, directory, auth).status;
|
|
235
|
+
return {
|
|
236
|
+
exists: true,
|
|
237
|
+
supported: true,
|
|
238
|
+
authenticated: authStatus === 0,
|
|
239
|
+
modelAvailable: false,
|
|
240
|
+
authCommand,
|
|
241
|
+
modelCommand,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function runProbe(executable, directory, invocation) {
|
|
245
|
+
const env = { ...process.env };
|
|
246
|
+
delete env[MODEL_ENV];
|
|
247
|
+
if (invocation.modelEnv !== undefined)
|
|
248
|
+
env[MODEL_ENV] = invocation.modelEnv;
|
|
249
|
+
const result = spawnSync(executable, invocation.args, {
|
|
250
|
+
cwd: directory,
|
|
251
|
+
encoding: 'utf8',
|
|
252
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
253
|
+
timeout: invocation.timeoutMs,
|
|
254
|
+
env,
|
|
255
|
+
});
|
|
256
|
+
const failure = classifySpawnFailure(result.error, result.signal, invocation.timeoutMs);
|
|
257
|
+
if (failure !== undefined)
|
|
258
|
+
throw failure;
|
|
259
|
+
return { status: result.status, stdout: result.stdout };
|
|
260
|
+
}
|
|
261
|
+
function resolveExecutable(command, directory) {
|
|
262
|
+
if (command.includes('/') || isAbsolute(command)) {
|
|
263
|
+
const path = isAbsolute(command) ? command : resolve(directory, command);
|
|
264
|
+
try {
|
|
265
|
+
accessSync(path, constants.X_OK);
|
|
266
|
+
return path;
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const result = spawnSync('which', [command], { encoding: 'utf8', timeout: 5_000 });
|
|
273
|
+
const failure = classifySpawnFailure(result.error, result.signal, 5_000);
|
|
274
|
+
if (failure !== undefined)
|
|
275
|
+
throw failure;
|
|
276
|
+
return result.status === 0 ? result.stdout.trim() : undefined;
|
|
277
|
+
}
|
|
278
|
+
function classifySpawnFailure(error, signal, timeoutMs) {
|
|
279
|
+
if (error !== undefined) {
|
|
280
|
+
const detail = error.code === 'ETIMEDOUT'
|
|
281
|
+
? `timeout:${timeoutMs}ms`
|
|
282
|
+
: 'spawn_failed';
|
|
283
|
+
return new CliProbeError(detail);
|
|
284
|
+
}
|
|
285
|
+
return signal === null ? undefined : new CliProbeError(`signal:${signal}`);
|
|
286
|
+
}
|
|
287
|
+
function executableExists(command, directory) {
|
|
288
|
+
return resolveExecutable(command, directory) !== undefined;
|
|
289
|
+
}
|
|
290
|
+
function kernelDialectMarker(value) {
|
|
291
|
+
if (!isObject(value) || !Array.isArray(value['steps']))
|
|
292
|
+
return undefined;
|
|
293
|
+
const kernelStepKeys = ['depends_on', 'max_iterations', 'retry', 'timeout_ms', 'recovery_mode'];
|
|
294
|
+
const kernelBudgetKeys = ['max_tokens_in', 'max_tokens_out', 'max_dollars'];
|
|
295
|
+
const kernelVerificationKeys = ['output_contains', 'json_schema'];
|
|
296
|
+
const kernelPermissionKeys = ['file_globs', 'network_allowlist', 'access_preset'];
|
|
297
|
+
const budget = firstPresentKey(value['budget'], kernelBudgetKeys);
|
|
298
|
+
if (budget !== undefined)
|
|
299
|
+
return `spec.budget.${budget}`;
|
|
300
|
+
for (const [index, step] of value['steps'].entries()) {
|
|
301
|
+
if (!isObject(step))
|
|
302
|
+
continue;
|
|
303
|
+
const stepKey = firstPresentKey(step, kernelStepKeys);
|
|
304
|
+
if (stepKey !== undefined)
|
|
305
|
+
return `spec.steps[${index}].${stepKey}`;
|
|
306
|
+
const verification = firstPresentKey(step['verification'], kernelVerificationKeys);
|
|
307
|
+
if (verification !== undefined)
|
|
308
|
+
return `spec.steps[${index}].verification.${verification}`;
|
|
309
|
+
const permission = firstPresentKey(step['permissions'], kernelPermissionKeys);
|
|
310
|
+
if (permission !== undefined)
|
|
311
|
+
return `spec.steps[${index}].permissions.${permission}`;
|
|
312
|
+
}
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
315
|
+
function firstPresentKey(value, keys) {
|
|
316
|
+
return isObject(value) ? keys.find((key) => key in value) : undefined;
|
|
317
|
+
}
|
|
318
|
+
function isObject(value) {
|
|
319
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
320
|
+
}
|
|
321
|
+
function isNonEmptyString(value) {
|
|
322
|
+
return typeof value === 'string' && value.length > 0;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type RunExecution, type RunLifecycleOptions } from './run.js';
|
|
2
|
+
export declare function runDirectFlow(path: string, inputArgument: string | undefined, dataDir: string, _options?: RunLifecycleOptions): Promise<RunExecution>;
|
|
3
|
+
//# sourceMappingURL=direct-run.d.ts.map
|