@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.
Files changed (231) hide show
  1. package/dist/authored-flow-error.d.ts +9 -0
  2. package/dist/authored-flow-error.d.ts.map +1 -0
  3. package/dist/authored-flow-error.js +13 -0
  4. package/dist/authored-flow-error.js.map +1 -0
  5. package/dist/authored-flow-executor.d.ts +28 -0
  6. package/dist/authored-flow-executor.d.ts.map +1 -0
  7. package/dist/authored-flow-executor.js +203 -0
  8. package/dist/authored-flow-executor.js.map +1 -0
  9. package/dist/authored-flow-lifecycle.d.ts +61 -0
  10. package/dist/authored-flow-lifecycle.d.ts.map +1 -0
  11. package/dist/authored-flow-lifecycle.js +284 -0
  12. package/dist/authored-flow-lifecycle.js.map +1 -0
  13. package/dist/authored-flow-loader.d.ts +7 -0
  14. package/dist/authored-flow-loader.d.ts.map +1 -0
  15. package/dist/authored-flow-loader.js +39 -0
  16. package/dist/authored-flow-loader.js.map +1 -0
  17. package/dist/authored-flow-operation.d.ts +43 -0
  18. package/dist/authored-flow-operation.d.ts.map +1 -0
  19. package/dist/authored-flow-operation.js +176 -0
  20. package/dist/authored-flow-operation.js.map +1 -0
  21. package/dist/authored-flow.d.ts +12 -0
  22. package/dist/authored-flow.d.ts.map +1 -0
  23. package/dist/authored-flow.js +13 -0
  24. package/dist/authored-flow.js.map +1 -0
  25. package/dist/authored-promise-graph.d.ts +67 -0
  26. package/dist/authored-promise-graph.d.ts.map +1 -0
  27. package/dist/authored-promise-graph.js +206 -0
  28. package/dist/authored-promise-graph.js.map +1 -0
  29. package/dist/backlog-picker.d.ts +55 -0
  30. package/dist/backlog-picker.d.ts.map +1 -0
  31. package/dist/backlog-picker.js +117 -0
  32. package/dist/backlog-picker.js.map +1 -0
  33. package/dist/canonical.d.ts +18 -0
  34. package/dist/canonical.d.ts.map +1 -0
  35. package/dist/canonical.js +55 -0
  36. package/dist/canonical.js.map +1 -0
  37. package/dist/cli/check.d.ts +30 -0
  38. package/dist/cli/check.d.ts.map +1 -0
  39. package/dist/cli/check.js +324 -0
  40. package/dist/cli/check.js.map +1 -0
  41. package/dist/cli/direct-run.d.ts +3 -0
  42. package/dist/cli/direct-run.d.ts.map +1 -0
  43. package/dist/cli/direct-run.js +69 -0
  44. package/dist/cli/direct-run.js.map +1 -0
  45. package/dist/cli/hn-monitor.d.ts +107 -0
  46. package/dist/cli/hn-monitor.d.ts.map +1 -0
  47. package/dist/cli/hn-monitor.js +220 -0
  48. package/dist/cli/hn-monitor.js.map +1 -0
  49. package/dist/cli/interruptible-sleep.d.ts +13 -0
  50. package/dist/cli/interruptible-sleep.d.ts.map +1 -0
  51. package/dist/cli/interruptible-sleep.js +31 -0
  52. package/dist/cli/interruptible-sleep.js.map +1 -0
  53. package/dist/cli/run.d.ts +54 -0
  54. package/dist/cli/run.d.ts.map +1 -0
  55. package/dist/cli/run.js +316 -0
  56. package/dist/cli/run.js.map +1 -0
  57. package/dist/cli/tick-runner.d.ts +151 -0
  58. package/dist/cli/tick-runner.d.ts.map +1 -0
  59. package/dist/cli/tick-runner.js +258 -0
  60. package/dist/cli/tick-runner.js.map +1 -0
  61. package/dist/cli-adapter.d.ts +29 -0
  62. package/dist/cli-adapter.d.ts.map +1 -0
  63. package/dist/cli-adapter.js +92 -0
  64. package/dist/cli-adapter.js.map +1 -0
  65. package/dist/cli-executable.d.ts +3 -0
  66. package/dist/cli-executable.d.ts.map +1 -0
  67. package/dist/cli-executable.js +10 -0
  68. package/dist/cli-executable.js.map +1 -0
  69. package/dist/cli.d.ts +9 -0
  70. package/dist/cli.d.ts.map +1 -0
  71. package/dist/cli.js +348 -0
  72. package/dist/cli.js.map +1 -0
  73. package/dist/compile.d.ts +42 -0
  74. package/dist/compile.d.ts.map +1 -0
  75. package/dist/compile.js +515 -0
  76. package/dist/compile.js.map +1 -0
  77. package/dist/demo-hn-monitor.d.ts +2 -0
  78. package/dist/demo-hn-monitor.d.ts.map +1 -0
  79. package/dist/demo-hn-monitor.js +118 -0
  80. package/dist/demo-hn-monitor.js.map +1 -0
  81. package/dist/dir-watcher-poller.d.ts +73 -0
  82. package/dist/dir-watcher-poller.d.ts.map +1 -0
  83. package/dist/dir-watcher-poller.js +80 -0
  84. package/dist/dir-watcher-poller.js.map +1 -0
  85. package/dist/direct-input.d.ts +10 -0
  86. package/dist/direct-input.d.ts.map +1 -0
  87. package/dist/direct-input.js +61 -0
  88. package/dist/direct-input.js.map +1 -0
  89. package/dist/failure-kinds.d.ts +25 -0
  90. package/dist/failure-kinds.d.ts.map +1 -0
  91. package/dist/failure-kinds.js +64 -0
  92. package/dist/failure-kinds.js.map +1 -0
  93. package/dist/gate-contract.d.ts +24 -0
  94. package/dist/gate-contract.d.ts.map +1 -0
  95. package/dist/gate-contract.js +50 -0
  96. package/dist/gate-contract.js.map +1 -0
  97. package/dist/hn-poller.d.ts +50 -0
  98. package/dist/hn-poller.d.ts.map +1 -0
  99. package/dist/hn-poller.js +79 -0
  100. package/dist/hn-poller.js.map +1 -0
  101. package/dist/index.d.ts +21 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +30 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/journal-client.d.ts +122 -0
  106. package/dist/journal-client.d.ts.map +1 -0
  107. package/dist/journal-client.js +277 -0
  108. package/dist/journal-client.js.map +1 -0
  109. package/dist/json-schema-bound.d.ts +7 -0
  110. package/dist/json-schema-bound.d.ts.map +1 -0
  111. package/dist/json-schema-bound.js +353 -0
  112. package/dist/json-schema-bound.js.map +1 -0
  113. package/dist/json-schema.d.ts +5 -0
  114. package/dist/json-schema.d.ts.map +1 -0
  115. package/dist/json-schema.js +72 -0
  116. package/dist/json-schema.js.map +1 -0
  117. package/dist/json-value.d.ts +6 -0
  118. package/dist/json-value.d.ts.map +1 -0
  119. package/dist/json-value.js +94 -0
  120. package/dist/json-value.js.map +1 -0
  121. package/dist/model-name.d.ts +7 -0
  122. package/dist/model-name.d.ts.map +1 -0
  123. package/dist/model-name.js +21 -0
  124. package/dist/model-name.js.map +1 -0
  125. package/dist/output-schema.d.ts +8 -0
  126. package/dist/output-schema.d.ts.map +1 -0
  127. package/dist/output-schema.js +28 -0
  128. package/dist/output-schema.js.map +1 -0
  129. package/dist/preflight.d.ts +80 -0
  130. package/dist/preflight.d.ts.map +1 -0
  131. package/dist/preflight.js +361 -0
  132. package/dist/preflight.js.map +1 -0
  133. package/dist/protocol.d.ts +359 -0
  134. package/dist/protocol.d.ts.map +1 -0
  135. package/dist/protocol.js +15 -0
  136. package/dist/protocol.js.map +1 -0
  137. package/dist/spec.d.ts +294 -0
  138. package/dist/spec.d.ts.map +1 -0
  139. package/dist/spec.js +13 -0
  140. package/dist/spec.js.map +1 -0
  141. package/dist/step-dependencies.d.ts +2 -0
  142. package/dist/step-dependencies.d.ts.map +1 -0
  143. package/dist/step-dependencies.js +88 -0
  144. package/dist/step-dependencies.js.map +1 -0
  145. package/dist/step-fields.d.ts +17 -0
  146. package/dist/step-fields.d.ts.map +1 -0
  147. package/dist/step-fields.js +32 -0
  148. package/dist/step-fields.js.map +1 -0
  149. package/dist/tick-source.d.ts +205 -0
  150. package/dist/tick-source.d.ts.map +1 -0
  151. package/dist/tick-source.js +234 -0
  152. package/dist/tick-source.js.map +1 -0
  153. package/dist/unknown-keys.d.ts +7 -0
  154. package/dist/unknown-keys.d.ts.map +1 -0
  155. package/dist/unknown-keys.js +47 -0
  156. package/dist/unknown-keys.js.map +1 -0
  157. package/dist/validate.d.ts +7 -0
  158. package/dist/validate.d.ts.map +1 -0
  159. package/dist/validate.js +458 -0
  160. package/dist/validate.js.map +1 -0
  161. package/dist/work-package-consumer.d.ts +33 -0
  162. package/dist/work-package-consumer.d.ts.map +1 -0
  163. package/dist/work-package-consumer.js +44 -0
  164. package/dist/work-package-consumer.js.map +1 -0
  165. package/dist/work-package-validator.d.ts +15 -0
  166. package/dist/work-package-validator.d.ts.map +1 -0
  167. package/dist/work-package-validator.js +72 -0
  168. package/dist/work-package-validator.js.map +1 -0
  169. package/dist/worker-cli.d.ts +16 -0
  170. package/dist/worker-cli.d.ts.map +1 -0
  171. package/dist/worker-cli.js +77 -0
  172. package/dist/worker-cli.js.map +1 -0
  173. package/dist/worker.d.ts +57 -0
  174. package/dist/worker.d.ts.map +1 -0
  175. package/dist/worker.js +129 -0
  176. package/dist/worker.js.map +1 -0
  177. package/dist/wrapper-runtime.d.ts +10 -0
  178. package/dist/wrapper-runtime.d.ts.map +1 -0
  179. package/dist/wrapper-runtime.js +83 -0
  180. package/dist/wrapper-runtime.js.map +1 -0
  181. package/dist/wrapper-session.d.ts +16 -0
  182. package/dist/wrapper-session.d.ts.map +1 -0
  183. package/dist/wrapper-session.js +244 -0
  184. package/dist/wrapper-session.js.map +1 -0
  185. package/package.json +50 -0
  186. package/src/authored-flow-error.ts +31 -0
  187. package/src/authored-flow-executor.ts +365 -0
  188. package/src/authored-flow-lifecycle.ts +344 -0
  189. package/src/authored-flow-loader.ts +44 -0
  190. package/src/authored-flow-operation.ts +252 -0
  191. package/src/authored-flow.ts +21 -0
  192. package/src/authored-promise-graph.ts +196 -0
  193. package/src/backlog-picker.ts +153 -0
  194. package/src/canonical.ts +57 -0
  195. package/src/cli/check.ts +391 -0
  196. package/src/cli/direct-run.ts +86 -0
  197. package/src/cli/hn-monitor.ts +286 -0
  198. package/src/cli/interruptible-sleep.ts +27 -0
  199. package/src/cli/run.ts +439 -0
  200. package/src/cli/tick-runner.ts +378 -0
  201. package/src/cli-adapter.ts +115 -0
  202. package/src/cli-executable.ts +12 -0
  203. package/src/cli.ts +364 -0
  204. package/src/compile.ts +573 -0
  205. package/src/demo-hn-monitor.ts +132 -0
  206. package/src/dir-watcher-poller.ts +122 -0
  207. package/src/direct-input.ts +69 -0
  208. package/src/failure-kinds.ts +77 -0
  209. package/src/gate-contract.ts +72 -0
  210. package/src/hn-poller.ts +104 -0
  211. package/src/index.ts +195 -0
  212. package/src/journal-client.ts +379 -0
  213. package/src/json-schema-bound.ts +357 -0
  214. package/src/json-schema.ts +65 -0
  215. package/src/json-value.ts +110 -0
  216. package/src/model-name.ts +20 -0
  217. package/src/output-schema.ts +33 -0
  218. package/src/preflight.ts +482 -0
  219. package/src/protocol.ts +364 -0
  220. package/src/spec.ts +343 -0
  221. package/src/step-dependencies.ts +100 -0
  222. package/src/step-fields.ts +36 -0
  223. package/src/tick-source.ts +334 -0
  224. package/src/unknown-keys.ts +52 -0
  225. package/src/validate.ts +503 -0
  226. package/src/work-package-consumer.ts +73 -0
  227. package/src/work-package-validator.ts +90 -0
  228. package/src/worker-cli.ts +110 -0
  229. package/src/worker.ts +150 -0
  230. package/src/wrapper-runtime.ts +93 -0
  231. package/src/wrapper-session.ts +287 -0
@@ -0,0 +1,28 @@
1
+ import { jsonSchemaError } from './json-schema.js';
2
+ /** Validate authoring sugar before it can be compiled or submitted. */
3
+ export function validateOutputDeclaration(step, at) {
4
+ if (step.output === undefined)
5
+ return [];
6
+ const errors = [];
7
+ if (!isObject(step.output)) {
8
+ errors.push(`${at}.output: expected a JSON Schema object`);
9
+ }
10
+ else {
11
+ // `output` lowers to a `json_schema` gate at compile time, so it must clear
12
+ // exactly the gate a hand-written `verification: {type: json_schema}` does.
13
+ // Without this the kernel refuses at `run.start` a declaration `flows check`
14
+ // had just reported as a gate — the divergence this PR exists to close.
15
+ const invalid = jsonSchemaError(step.output);
16
+ if (invalid !== undefined) {
17
+ errors.push(`${at}.output: invalid JSON Schema: ${invalid}`);
18
+ }
19
+ }
20
+ if (step.verification !== undefined) {
21
+ errors.push(`${at}: output already declares json_schema verification; remove verification`);
22
+ }
23
+ return errors;
24
+ }
25
+ function isObject(value) {
26
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
27
+ }
28
+ //# sourceMappingURL=output-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schema.js","sourceRoot":"","sources":["../src/output-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,uEAAuE;AACvE,MAAM,UAAU,yBAAyB,CACvC,IAAkD,EAClD,EAAU;IAEV,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,wEAAwE;QACxE,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,yEAAyE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { FlowSpec, TriggerSpec } from './spec.js';
2
+ import { type StepGateInspection } from './gate-contract.js';
3
+ import type { PreflightFailureKind, PreflightWarningKind } from './failure-kinds.js';
4
+ export type CliResolutionSource = 'step' | 'named' | 'flow' | 'project';
5
+ export interface CliResolution {
6
+ stepId: string;
7
+ cli: string;
8
+ source: CliResolutionSource;
9
+ /** Model the step or selected named agent declared, probed with the CLI. */
10
+ model?: string;
11
+ }
12
+ export interface CliProbeResult {
13
+ exists: boolean;
14
+ authenticated: boolean;
15
+ /** False when a custom executable did not identify as a wrapper adapter. */
16
+ supported?: boolean;
17
+ /** Exact declared model passed the CLI's model-scoped readiness probe. */
18
+ modelAvailable?: boolean;
19
+ authCommand?: string;
20
+ modelCommand?: string;
21
+ }
22
+ export type CliProbeFailureDetail = 'spawn_failed' | `timeout:${number}ms` | `signal:${string}`;
23
+ export declare class CliProbeError extends Error {
24
+ readonly detail: CliProbeFailureDetail;
25
+ constructor(detail: CliProbeFailureDetail);
26
+ }
27
+ /**
28
+ * Environment facts are injected; this module performs no I/O. A probe may
29
+ * throw when its fact cannot be collected. Preflight catches that boundary and
30
+ * emits `probe_failed` (or `command_unprovable` for a deterministic command).
31
+ */
32
+ export interface PreflightProbes {
33
+ /**
34
+ * Resolve relative paths against the file implied by `source`, then probe
35
+ * `auth status`. When the step declared a `model`, the probe runs with that
36
+ * model in scope, so readiness answers "can this CLI use THIS model" rather
37
+ * than the weaker "is this CLI authenticated at all".
38
+ */
39
+ cli(cli: string, source: CliResolutionSource, model?: string): CliProbeResult;
40
+ executor(trigger: TriggerSpec): boolean;
41
+ command(binary: string): boolean;
42
+ }
43
+ export interface PreflightOptions {
44
+ projectCli?: string;
45
+ projectConfigPath?: string;
46
+ projectSearchStart?: string;
47
+ /** Exact, project-owned model allowlist from the nearest flows.json. */
48
+ models?: readonly string[];
49
+ modelRegistryPath?: string;
50
+ probes: PreflightProbes;
51
+ }
52
+ export interface PreflightRefusal {
53
+ severity: 'refusal';
54
+ kind: PreflightFailureKind;
55
+ message: string;
56
+ stepId?: string;
57
+ cli?: string;
58
+ agent?: string;
59
+ model?: string;
60
+ triggerId?: string;
61
+ executor?: string;
62
+ detail?: CliProbeFailureDetail;
63
+ /** Author-facing validation errors when kind is `invalid_spec`. */
64
+ errors?: string[];
65
+ }
66
+ export interface PreflightWarning {
67
+ severity: 'warning';
68
+ kind: PreflightWarningKind;
69
+ message: string;
70
+ stepId?: string;
71
+ }
72
+ export type PreflightDiagnostic = PreflightRefusal | PreflightWarning;
73
+ export interface PreflightResult {
74
+ ok: boolean;
75
+ gates: StepGateInspection[];
76
+ resolutions: CliResolution[];
77
+ diagnostics: PreflightDiagnostic[];
78
+ }
79
+ export declare function preflight(flow: FlowSpec, options: PreflightOptions): PreflightResult;
80
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,361 @@
1
+ import { acceptsAnyOutput, inspectStepGate } from './gate-contract.js';
2
+ import { compileSpec, CompileError } from './compile.js';
3
+ export class CliProbeError extends Error {
4
+ detail;
5
+ constructor(detail) {
6
+ super('CLI probe failed');
7
+ this.detail = detail;
8
+ }
9
+ }
10
+ export function preflight(flow, options) {
11
+ // Compile before touching any environment fact. `compileSpec` snapshots raw
12
+ // input into inert data, validates it against the closed authoring schema,
13
+ // and lowers `output` sugar into its json_schema gate — so the gate plan
14
+ // below describes what the kernel will actually judge, and no probe or gate
15
+ // inspection ever reads a live accessor. The failure is a named refusal
16
+ // rather than a thrown error (RFC covenant 2), which is the contract main
17
+ // settled for this boundary.
18
+ let compiled;
19
+ try {
20
+ compiled = compileSpec(flow);
21
+ }
22
+ catch (error) {
23
+ const errors = error instanceof CompileError
24
+ ? error.errors
25
+ : [error instanceof Error ? error.message : 'spec: expected JSON-compatible data'];
26
+ return {
27
+ ok: false,
28
+ gates: [],
29
+ resolutions: [],
30
+ diagnostics: [{
31
+ severity: 'refusal',
32
+ kind: 'invalid_spec',
33
+ message: `Relayflow spec is invalid: ${errors.join('; ')}`,
34
+ errors,
35
+ }],
36
+ };
37
+ }
38
+ const diagnostics = [];
39
+ const resolutions = [];
40
+ const resolutionByStep = new Map();
41
+ const cliProbeResults = new Map();
42
+ diagnostics.push(...unknownModelDiagnostics(compiled, options));
43
+ // Resolve the complete flow before touching any environment fact. A later
44
+ // statically unresolved CLI makes the whole submission impossible, so no
45
+ // earlier command, provider/model, or trigger probe may run first.
46
+ for (const step of compiled.steps) {
47
+ if (step.type === 'deterministic')
48
+ continue;
49
+ const resolution = resolveCli(step, compiled, options.projectCli);
50
+ if (resolution === undefined) {
51
+ diagnostics.push({
52
+ severity: 'refusal',
53
+ kind: 'cli_unresolved',
54
+ stepId: step.id,
55
+ message: unresolvedCliMessage(step.id, options),
56
+ });
57
+ }
58
+ else {
59
+ resolutions.push(resolution);
60
+ resolutionByStep.set(step.id, resolution);
61
+ }
62
+ }
63
+ if (diagnostics.length > 0) {
64
+ return { ok: false, gates: compiled.steps.map(inspectStepGate), resolutions, diagnostics };
65
+ }
66
+ for (const step of compiled.steps) {
67
+ warnOnVacuousGate(step, diagnostics);
68
+ warnOnUnprovableEffects(step, options.probes, diagnostics);
69
+ if (step.type === 'deterministic')
70
+ continue;
71
+ const resolution = resolutionByStep.get(step.id);
72
+ probeResolvedCli(resolution, options.probes, cliProbeResults, diagnostics);
73
+ }
74
+ for (const trigger of compiled.triggers ?? []) {
75
+ probeTrigger(trigger, options.probes, diagnostics);
76
+ }
77
+ return {
78
+ ok: !diagnostics.some((diagnostic) => diagnostic.severity === 'refusal'),
79
+ gates: compiled.steps.map(inspectStepGate),
80
+ resolutions,
81
+ diagnostics,
82
+ };
83
+ }
84
+ /** Pure authoring validation: no executable, command, trigger, or daemon probe. */
85
+ function unknownModelDiagnostics(flow, options) {
86
+ const diagnostics = [];
87
+ // Named declarations remain in the normalized authoring object until this
88
+ // boundary so even unused or step-shadowed models are checked. toKernelSpec
89
+ // erases the map and selector only after this pass has had a chance to fail.
90
+ for (const [agent, declaration] of Object.entries(flow.agents ?? {})) {
91
+ if (isKnownModel(declaration.model, options.models))
92
+ continue;
93
+ diagnostics.push({
94
+ severity: 'refusal',
95
+ kind: 'model_unknown',
96
+ agent,
97
+ cli: declaration.cli,
98
+ model: declaration.model,
99
+ message: unknownNamedAgentModelMessage(agent, declaration.cli, declaration.model, options.modelRegistryPath),
100
+ });
101
+ }
102
+ for (const step of flow.steps) {
103
+ if (step.type === 'deterministic' || step.model === undefined)
104
+ continue;
105
+ if (isKnownModel(step.model, options.models))
106
+ continue;
107
+ const resolution = resolveCli(step, flow, options.projectCli);
108
+ diagnostics.push({
109
+ severity: 'refusal',
110
+ kind: 'model_unknown',
111
+ stepId: step.id,
112
+ ...(resolution === undefined ? {} : { cli: resolution.cli }),
113
+ model: step.model,
114
+ message: unknownModelMessage(step.id, step.model, resolution?.cli, options.modelRegistryPath),
115
+ });
116
+ }
117
+ return diagnostics;
118
+ }
119
+ function unknownNamedAgentModelMessage(agent, cli, model, registryPath) {
120
+ const source = registryPath === undefined
121
+ ? 'the nearest project config (no model registry was found)'
122
+ : `project model registry "${registryPath}"`;
123
+ return `Named agent "${agent}" declares model "${model}" for CLI "${cli}", but it is not listed in ${source}; add the exact model only after verifying that project is allowed to use it.`;
124
+ }
125
+ function isKnownModel(model, models) {
126
+ return models?.includes(model) === true;
127
+ }
128
+ function unknownModelMessage(stepId, model, cli, registryPath) {
129
+ const source = registryPath === undefined
130
+ ? 'the nearest project config (no model registry was found)'
131
+ : `project model registry "${registryPath}"`;
132
+ const cliContext = cli === undefined ? '' : ` for CLI "${cli}"`;
133
+ return `Step "${stepId}" declares model "${model}"${cliContext}, but it is not listed in ${source}; add the exact model only after verifying that project is allowed to use it.`;
134
+ }
135
+ function unresolvedCliMessage(stepId, options) {
136
+ const context = options.projectConfigPath !== undefined
137
+ ? ` Nearest project config "${options.projectConfigPath}" declares no cli; outer configs are shadowed.`
138
+ : options.projectSearchStart !== undefined
139
+ ? ` No flows.json was found from "${options.projectSearchStart}" to the filesystem root.`
140
+ : '';
141
+ return `Step "${stepId}" has no CLI at step, flow, or project level.${context}`;
142
+ }
143
+ function resolveCli(step, flow, projectCli) {
144
+ const named = step.type === 'agent' && step.agent !== undefined
145
+ ? flow.agents?.[step.agent]
146
+ : undefined;
147
+ // Model comes only from the step or its explicitly selected declaration.
148
+ // There is deliberately no flow/project or host default.
149
+ const effectiveModel = step.model ?? named?.model;
150
+ const model = effectiveModel !== undefined ? { model: effectiveModel } : {};
151
+ if (step.cli !== undefined)
152
+ return { stepId: step.id, cli: step.cli, source: 'step', ...model };
153
+ if (named !== undefined)
154
+ return { stepId: step.id, cli: named.cli, source: 'named', ...model };
155
+ if (flow.cli !== undefined)
156
+ return { stepId: step.id, cli: flow.cli, source: 'flow', ...model };
157
+ if (projectCli !== undefined)
158
+ return { stepId: step.id, cli: projectCli, source: 'project', ...model };
159
+ return undefined;
160
+ }
161
+ function probeResolvedCli(resolution, probes, cache, diagnostics) {
162
+ // Source is load-bearing: the same relative CLI string resolves from the
163
+ // flow directory for step/named/flow declarations and the config directory for
164
+ // project declarations.
165
+ // Model is part of the key: the same CLI probed with two different models
166
+ // is two different questions, and caching on the CLI alone would let a
167
+ // model that the CLI cannot resolve inherit an earlier model's pass.
168
+ const cacheKey = JSON.stringify([resolution.cli, resolution.source, resolution.model ?? null]);
169
+ let outcome = cache.get(cacheKey);
170
+ if (outcome === undefined) {
171
+ try {
172
+ outcome = { result: probes.cli(resolution.cli, resolution.source, resolution.model) };
173
+ }
174
+ catch (error) {
175
+ const detail = error instanceof CliProbeError ? error.detail : undefined;
176
+ outcome = { failure: detail ?? null };
177
+ }
178
+ cache.set(cacheKey, outcome);
179
+ }
180
+ if ('failure' in outcome) {
181
+ const detail = outcome.failure ?? undefined;
182
+ diagnostics.push({
183
+ severity: 'refusal',
184
+ kind: 'probe_failed',
185
+ stepId: resolution.stepId,
186
+ cli: resolution.cli,
187
+ ...(detail !== undefined ? { detail } : {}),
188
+ message: probeFailedMessage(resolution, detail),
189
+ });
190
+ return;
191
+ }
192
+ const { result } = outcome;
193
+ if (!result.exists) {
194
+ diagnostics.push({
195
+ severity: 'refusal',
196
+ kind: 'cli_missing',
197
+ stepId: resolution.stepId,
198
+ cli: resolution.cli,
199
+ message: `Step "${resolution.stepId}" declares CLI "${resolution.cli}", but it does not resolve as an executable.`,
200
+ });
201
+ }
202
+ else if (result.supported === false) {
203
+ diagnostics.push({
204
+ severity: 'refusal',
205
+ kind: 'cli_unsupported',
206
+ stepId: resolution.stepId,
207
+ cli: resolution.cli,
208
+ message: `Step "${resolution.stepId}" declares CLI "${resolution.cli}", but it is neither a supported raw Claude/Codex executable nor a conforming Relayflows wrapper; custom wrappers must identify with the relayflows-agent-cli-v1 contract.`,
209
+ });
210
+ }
211
+ else if (!result.authenticated) {
212
+ const command = result.authCommand ?? `${resolution.cli} auth status`;
213
+ diagnostics.push({
214
+ severity: 'refusal',
215
+ kind: 'cli_unauthenticated',
216
+ stepId: resolution.stepId,
217
+ cli: resolution.cli,
218
+ message: `Step "${resolution.stepId}" declares CLI "${resolution.cli}", but "${command}" exited non-zero; authenticate it or repair that adapter's authentication probe.`,
219
+ });
220
+ }
221
+ else if (resolution.model !== undefined && result.modelAvailable !== true) {
222
+ diagnostics.push({
223
+ severity: 'refusal',
224
+ kind: 'model_unavailable',
225
+ stepId: resolution.stepId,
226
+ cli: resolution.cli,
227
+ model: resolution.model,
228
+ message: `Step "${resolution.stepId}" declares model "${resolution.model}" for CLI "${resolution.cli}", but its model-scoped "${result.modelCommand ?? `${resolution.cli} auth status`}" probe exited non-zero; verify the model name and this credential's access.`,
229
+ });
230
+ }
231
+ }
232
+ function probeFailedMessage(resolution, detail) {
233
+ const prefix = `Could not verify CLI "${resolution.cli}" for step "${resolution.stepId}"`;
234
+ if (detail === undefined)
235
+ return `${prefix}.`;
236
+ if (detail === 'spawn_failed')
237
+ return `${prefix}: the probe process could not be started.`;
238
+ if (detail.startsWith('signal:')) {
239
+ return `${prefix}: the probe was terminated by signal "${detail.slice('signal:'.length)}".`;
240
+ }
241
+ return `${prefix}: the probe timed out after ${detail.slice('timeout:'.length)}.`;
242
+ }
243
+ function probeTrigger(trigger, probes, diagnostics) {
244
+ let registered;
245
+ try {
246
+ registered = probes.executor(trigger);
247
+ }
248
+ catch {
249
+ diagnostics.push({
250
+ severity: 'refusal',
251
+ kind: 'probe_failed',
252
+ triggerId: trigger.id,
253
+ executor: trigger.executor,
254
+ message: `Could not verify executor "${trigger.executor}" for trigger "${trigger.id}".`,
255
+ });
256
+ return;
257
+ }
258
+ if (!registered) {
259
+ diagnostics.push({
260
+ severity: 'refusal',
261
+ kind: 'no_executor',
262
+ triggerId: trigger.id,
263
+ executor: trigger.executor,
264
+ message: `Trigger "${trigger.id}" has no registered executor "${trigger.executor}".`,
265
+ });
266
+ }
267
+ }
268
+ /**
269
+ * A deterministic step is never silently accepted. An unresolved bare command
270
+ * may still be a shell builtin, function, or assignment, so it warns. A command
271
+ * containing `/` names a path rather than relying on shell resolution, so a
272
+ * failed existence probe refuses the flow.
273
+ */
274
+ /**
275
+ * A declared `json_schema` gate that accepts every output is legal and stays
276
+ * legal — but it is indistinguishable in the gate plan from one that judges
277
+ * something, which is exactly the confusion AGENTS.md's "never edit a gate that
278
+ * judges your own work" rail exists to prevent.
279
+ */
280
+ function warnOnVacuousGate(step, diagnostics) {
281
+ if (step.verification?.type !== 'json_schema')
282
+ return;
283
+ if (!acceptsAnyOutput(step.verification.schema))
284
+ return;
285
+ diagnostics.push({
286
+ severity: 'warning',
287
+ kind: 'vacuous_gate',
288
+ stepId: step.id,
289
+ message: `Step "${step.id}" declares a json_schema gate that accepts every possible output, so it judges nothing.`,
290
+ });
291
+ }
292
+ function warnOnUnprovableEffects(step, probes, diagnostics) {
293
+ if (step.type !== 'deterministic')
294
+ return;
295
+ const binary = firstCommandWord(step.command);
296
+ if (binary === undefined) {
297
+ diagnostics.push({
298
+ severity: 'warning',
299
+ kind: 'command_unprovable',
300
+ stepId: step.id,
301
+ message: `Step "${step.id}" has no command word to check, so nothing about it can be proven before execution.`,
302
+ });
303
+ return;
304
+ }
305
+ let exists;
306
+ try {
307
+ exists = probes.command(binary);
308
+ }
309
+ catch {
310
+ diagnostics.push({
311
+ severity: 'warning',
312
+ kind: 'command_unprovable',
313
+ stepId: step.id,
314
+ message: `Step "${step.id}" command "${binary}" could not be probed, so its presence is unproven before execution.`,
315
+ });
316
+ return;
317
+ }
318
+ diagnostics.push(exists
319
+ ? {
320
+ severity: 'warning',
321
+ kind: 'unprovable_effects',
322
+ stepId: step.id,
323
+ message: `Step "${step.id}" command "${binary}" resolves, but its effects cannot be proven before execution.`,
324
+ }
325
+ : binary.includes('/')
326
+ ? {
327
+ severity: 'refusal',
328
+ kind: 'command_missing',
329
+ stepId: step.id,
330
+ message: `Step "${step.id}" command path "${binary}" does not exist.`,
331
+ }
332
+ : {
333
+ severity: 'warning',
334
+ kind: 'command_unresolved',
335
+ stepId: step.id,
336
+ message: `Step "${step.id}" command "${binary}" does not resolve as an executable; it runs only if the shell supplies it.`,
337
+ });
338
+ }
339
+ function firstCommandWord(command) {
340
+ // Skip the shell prefixes that can legally precede the command word.
341
+ //
342
+ // Review caught this on PR #47: the new path-like refusal keys on the first
343
+ // word containing a slash, and `TMPDIR=/tmp printf ok`, `>/tmp/out echo hi`
344
+ // and `PATH=/usr/bin:$PATH mkdir x` all have one — but none of them names a
345
+ // path to execute. All three are valid and were being refused outright,
346
+ // which is exactly the "refusing would reject valid flows" failure the warn
347
+ // behaviour exists to avoid.
348
+ //
349
+ // An assignment is NAME=value with a shell-legal name; a redirection starts
350
+ // with < or > (optionally with a leading fd number). Neither is the command.
351
+ let rest = command.trim();
352
+ for (;;) {
353
+ const prefix = rest.match(/^(?:[A-Za-z_][A-Za-z0-9_]*=(?:"[^"]*"|'[^']*'|[^\s]*)|[0-9]*[<>]{1,2}\s*[^\s]+)\s+/);
354
+ if (prefix === null)
355
+ break;
356
+ rest = rest.slice(prefix[0].length);
357
+ }
358
+ const match = rest.match(/^(?:"([^"]+)"|'([^']+)'|([^\s]+))/);
359
+ return match?.[1] ?? match?.[2] ?? match?.[3];
360
+ }
361
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}