@nifrajs/coding-agent 3.2.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 (211) hide show
  1. package/EXTENSIONS.md +25 -0
  2. package/PERFORMANCE.md +19 -0
  3. package/README.md +69 -0
  4. package/REGISTRY.md +15 -0
  5. package/SECURITY.md +32 -0
  6. package/dist/approvals.d.ts +70 -0
  7. package/dist/approvals.d.ts.map +1 -0
  8. package/dist/approvals.js +174 -0
  9. package/dist/approvals.js.map +1 -0
  10. package/dist/capabilities.d.ts +20 -0
  11. package/dist/capabilities.d.ts.map +1 -0
  12. package/dist/capabilities.js +49 -0
  13. package/dist/capabilities.js.map +1 -0
  14. package/dist/cli.d.ts +24 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +380 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/context.d.ts +17 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +66 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/deployment-adapters.d.ts +40 -0
  23. package/dist/deployment-adapters.d.ts.map +1 -0
  24. package/dist/deployment-adapters.js +147 -0
  25. package/dist/deployment-adapters.js.map +1 -0
  26. package/dist/diff.d.ts +17 -0
  27. package/dist/diff.d.ts.map +1 -0
  28. package/dist/diff.js +61 -0
  29. package/dist/diff.js.map +1 -0
  30. package/dist/errors.d.ts +9 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +35 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/extensions.d.ts +104 -0
  35. package/dist/extensions.d.ts.map +1 -0
  36. package/dist/extensions.js +284 -0
  37. package/dist/extensions.js.map +1 -0
  38. package/dist/handoffs.d.ts +97 -0
  39. package/dist/handoffs.d.ts.map +1 -0
  40. package/dist/handoffs.js +199 -0
  41. package/dist/handoffs.js.map +1 -0
  42. package/dist/healing.d.ts +56 -0
  43. package/dist/healing.d.ts.map +1 -0
  44. package/dist/healing.js +54 -0
  45. package/dist/healing.js.map +1 -0
  46. package/dist/host.d.ts +61 -0
  47. package/dist/host.d.ts.map +1 -0
  48. package/dist/host.js +369 -0
  49. package/dist/host.js.map +1 -0
  50. package/dist/index.d.ts +26 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +26 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/isolated-worker.d.ts +2 -0
  55. package/dist/isolated-worker.d.ts.map +1 -0
  56. package/dist/isolated-worker.js +155 -0
  57. package/dist/isolated-worker.js.map +1 -0
  58. package/dist/isolated.d.ts +52 -0
  59. package/dist/isolated.d.ts.map +1 -0
  60. package/dist/isolated.js +293 -0
  61. package/dist/isolated.js.map +1 -0
  62. package/dist/native.d.ts +92 -0
  63. package/dist/native.d.ts.map +1 -0
  64. package/dist/native.js +339 -0
  65. package/dist/native.js.map +1 -0
  66. package/dist/orchestration/artifact-port.d.ts +30 -0
  67. package/dist/orchestration/artifact-port.d.ts.map +1 -0
  68. package/dist/orchestration/artifact-port.js +59 -0
  69. package/dist/orchestration/artifact-port.js.map +1 -0
  70. package/dist/orchestration/catalog.d.ts +71 -0
  71. package/dist/orchestration/catalog.d.ts.map +1 -0
  72. package/dist/orchestration/catalog.js +46 -0
  73. package/dist/orchestration/catalog.js.map +1 -0
  74. package/dist/orchestration/compile.d.ts +59 -0
  75. package/dist/orchestration/compile.d.ts.map +1 -0
  76. package/dist/orchestration/compile.js +268 -0
  77. package/dist/orchestration/compile.js.map +1 -0
  78. package/dist/orchestration/dispatch.d.ts +115 -0
  79. package/dist/orchestration/dispatch.d.ts.map +1 -0
  80. package/dist/orchestration/dispatch.js +220 -0
  81. package/dist/orchestration/dispatch.js.map +1 -0
  82. package/dist/orchestration/durable-jobs.d.ts +35 -0
  83. package/dist/orchestration/durable-jobs.d.ts.map +1 -0
  84. package/dist/orchestration/durable-jobs.js +273 -0
  85. package/dist/orchestration/durable-jobs.js.map +1 -0
  86. package/dist/orchestration/effect-key.d.ts +23 -0
  87. package/dist/orchestration/effect-key.d.ts.map +1 -0
  88. package/dist/orchestration/effect-key.js +24 -0
  89. package/dist/orchestration/effect-key.js.map +1 -0
  90. package/dist/orchestration/evidence-store.d.ts +75 -0
  91. package/dist/orchestration/evidence-store.d.ts.map +1 -0
  92. package/dist/orchestration/evidence-store.js +183 -0
  93. package/dist/orchestration/evidence-store.js.map +1 -0
  94. package/dist/orchestration/hash.d.ts +12 -0
  95. package/dist/orchestration/hash.d.ts.map +1 -0
  96. package/dist/orchestration/hash.js +43 -0
  97. package/dist/orchestration/hash.js.map +1 -0
  98. package/dist/orchestration/host.d.ts +121 -0
  99. package/dist/orchestration/host.d.ts.map +1 -0
  100. package/dist/orchestration/host.js +334 -0
  101. package/dist/orchestration/host.js.map +1 -0
  102. package/dist/orchestration/index.d.ts +20 -0
  103. package/dist/orchestration/index.d.ts.map +1 -0
  104. package/dist/orchestration/index.js +19 -0
  105. package/dist/orchestration/index.js.map +1 -0
  106. package/dist/orchestration/policy.d.ts +63 -0
  107. package/dist/orchestration/policy.d.ts.map +1 -0
  108. package/dist/orchestration/policy.js +80 -0
  109. package/dist/orchestration/policy.js.map +1 -0
  110. package/dist/orchestration/recovery.d.ts +87 -0
  111. package/dist/orchestration/recovery.d.ts.map +1 -0
  112. package/dist/orchestration/recovery.js +197 -0
  113. package/dist/orchestration/recovery.js.map +1 -0
  114. package/dist/orchestration/tracer.d.ts +31 -0
  115. package/dist/orchestration/tracer.d.ts.map +1 -0
  116. package/dist/orchestration/tracer.js +141 -0
  117. package/dist/orchestration/tracer.js.map +1 -0
  118. package/dist/plans.d.ts +35 -0
  119. package/dist/plans.d.ts.map +1 -0
  120. package/dist/plans.js +63 -0
  121. package/dist/plans.js.map +1 -0
  122. package/dist/presets.d.ts +10 -0
  123. package/dist/presets.d.ts.map +1 -0
  124. package/dist/presets.js +70 -0
  125. package/dist/presets.js.map +1 -0
  126. package/dist/process.d.ts +6 -0
  127. package/dist/process.d.ts.map +1 -0
  128. package/dist/process.js +42 -0
  129. package/dist/process.js.map +1 -0
  130. package/dist/registry.d.ts +37 -0
  131. package/dist/registry.d.ts.map +1 -0
  132. package/dist/registry.js +51 -0
  133. package/dist/registry.js.map +1 -0
  134. package/dist/replay.d.ts +24 -0
  135. package/dist/replay.d.ts.map +1 -0
  136. package/dist/replay.js +154 -0
  137. package/dist/replay.js.map +1 -0
  138. package/dist/rpc.d.ts +51 -0
  139. package/dist/rpc.d.ts.map +1 -0
  140. package/dist/rpc.js +412 -0
  141. package/dist/rpc.js.map +1 -0
  142. package/dist/session-migration.d.ts +59 -0
  143. package/dist/session-migration.d.ts.map +1 -0
  144. package/dist/session-migration.js +315 -0
  145. package/dist/session-migration.js.map +1 -0
  146. package/dist/sessions.d.ts +74 -0
  147. package/dist/sessions.d.ts.map +1 -0
  148. package/dist/sessions.js +222 -0
  149. package/dist/sessions.js.map +1 -0
  150. package/dist/subagents.d.ts +51 -0
  151. package/dist/subagents.d.ts.map +1 -0
  152. package/dist/subagents.js +141 -0
  153. package/dist/subagents.js.map +1 -0
  154. package/dist/tools.d.ts +13 -0
  155. package/dist/tools.d.ts.map +1 -0
  156. package/dist/tools.js +37 -0
  157. package/dist/tools.js.map +1 -0
  158. package/dist/ui.d.ts +42 -0
  159. package/dist/ui.d.ts.map +1 -0
  160. package/dist/ui.js +93 -0
  161. package/dist/ui.js.map +1 -0
  162. package/dist/verification.d.ts +34 -0
  163. package/dist/verification.d.ts.map +1 -0
  164. package/dist/verification.js +91 -0
  165. package/dist/verification.js.map +1 -0
  166. package/dist/workflows.d.ts +98 -0
  167. package/dist/workflows.d.ts.map +1 -0
  168. package/dist/workflows.js +174 -0
  169. package/dist/workflows.js.map +1 -0
  170. package/package.json +84 -0
  171. package/src/approvals.ts +249 -0
  172. package/src/capabilities.ts +74 -0
  173. package/src/cli.ts +405 -0
  174. package/src/context.ts +81 -0
  175. package/src/deployment-adapters.ts +181 -0
  176. package/src/diff.ts +80 -0
  177. package/src/errors.ts +46 -0
  178. package/src/extensions.ts +402 -0
  179. package/src/handoffs.ts +299 -0
  180. package/src/healing.ts +93 -0
  181. package/src/host.ts +465 -0
  182. package/src/index.ts +165 -0
  183. package/src/isolated-worker.ts +177 -0
  184. package/src/isolated.ts +344 -0
  185. package/src/native.ts +478 -0
  186. package/src/orchestration/artifact-port.ts +75 -0
  187. package/src/orchestration/catalog.ts +102 -0
  188. package/src/orchestration/compile.ts +373 -0
  189. package/src/orchestration/dispatch.ts +383 -0
  190. package/src/orchestration/durable-jobs.ts +374 -0
  191. package/src/orchestration/effect-key.ts +35 -0
  192. package/src/orchestration/evidence-store.ts +233 -0
  193. package/src/orchestration/hash.ts +43 -0
  194. package/src/orchestration/host.ts +445 -0
  195. package/src/orchestration/index.ts +131 -0
  196. package/src/orchestration/policy.ts +116 -0
  197. package/src/orchestration/recovery.ts +271 -0
  198. package/src/orchestration/tracer.ts +177 -0
  199. package/src/plans.ts +105 -0
  200. package/src/presets.ts +90 -0
  201. package/src/process.ts +47 -0
  202. package/src/registry.ts +80 -0
  203. package/src/replay.ts +190 -0
  204. package/src/rpc.ts +598 -0
  205. package/src/session-migration.ts +401 -0
  206. package/src/sessions.ts +303 -0
  207. package/src/subagents.ts +210 -0
  208. package/src/tools.ts +52 -0
  209. package/src/ui.ts +137 -0
  210. package/src/verification.ts +133 -0
  211. package/src/workflows.ts +279 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The StepCatalog: the local, closure-holding registry that resolves a plan node's `step` name to a
3
+ * runnable handler. A {@link RunPlan} is serializable and content-free precisely because it names
4
+ * steps by string; the executable behavior lives here, in-process, and never in the plan.
5
+ *
6
+ * A step declares a `version` and the `capabilities` it needs. The compiler uses both to fail closed:
7
+ * a node that pins a drifted version, or a step that needs a capability the host did not grant, is
8
+ * rejected before any node runs (ORC-05, ORC-07).
9
+ */
10
+ /** Thrown on a catalog construction fault: a key collision across merged catalogs. */
11
+ export class CatalogError extends Error {
12
+ reason;
13
+ constructor(reason) {
14
+ super(`step catalog: ${reason}`);
15
+ this.reason = reason;
16
+ this.name = "CatalogError";
17
+ }
18
+ }
19
+ /** The effective version of a step (defaults to 1). */
20
+ export function stepVersion(step) {
21
+ return step.version ?? 1;
22
+ }
23
+ function fromMap(map) {
24
+ return {
25
+ get: (step) => map.get(step),
26
+ has: (step) => map.has(step),
27
+ keys: Object.freeze([...map.keys()].sort()),
28
+ };
29
+ }
30
+ /** Build a StepCatalog from a name -> handler map. */
31
+ export function createStepCatalog(entries) {
32
+ return fromMap(new Map(Object.entries(entries)));
33
+ }
34
+ /** Merge catalogs into one. Throws {@link CatalogError} on any duplicate step key (collision). */
35
+ export function mergeStepCatalogs(...catalogs) {
36
+ const map = new Map();
37
+ for (const catalog of catalogs) {
38
+ for (const key of catalog.keys) {
39
+ if (map.has(key))
40
+ throw new CatalogError(`duplicate step key '${key}'`);
41
+ map.set(key, catalog.get(key));
42
+ }
43
+ }
44
+ return fromMap(map);
45
+ }
46
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/orchestration/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiDH,sFAAsF;AACtF,MAAM,OAAO,YAAa,SAAQ,KAAK;IAChB;IAArB,YAAqB,MAAc;QACjC,KAAK,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;QADb,WAAM,GAAN,MAAM,CAAQ;QAEjC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;AAC1B,CAAC;AAUD,SAAS,OAAO,CAAC,GAAqC;IACpD,OAAO;QACL,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KAC5C,CAAA;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,OAA8C;IAC9E,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAAC,GAAG,QAAgC;IACnE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,YAAY,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAA;YACvE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAgB,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;AACrB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Compile a declarative {@link RunPlan} into the existing {@link WorkflowRunner} step tree. There is
3
+ * no second execution engine and no copied scheduler: the plan's top-level DAG is layered
4
+ * (deterministic, id tie-break) into the kernel's `sequence`/`parallel` primitives, and every node -
5
+ * leaf or structural - is lowered onto `task`/`verify`/`approve`/`checkpoint`/`handoff`/`retry`/
6
+ * `branch` steps or, for a `subagent` node, onto a {@link BoundedSubagentRunner}. Effect-key
7
+ * derivation and the artifact sink are wired into each leaf closure at compile time.
8
+ *
9
+ * All structural ceilings (node count, nesting depth, parallel breadth, pinned version, and the
10
+ * capability authority ceiling) are enforced here, before a single node runs.
11
+ */
12
+ import type { ArtifactPort, ArtifactRef, NodeEffectKey, RunPlan } from "@nifrajs/agent-protocol";
13
+ import type { WorkflowStep } from "../workflows.js";
14
+ import { type StepCatalog } from "./catalog.js";
15
+ /** Thrown when a plan cannot be lowered. `code` is a stable evidence code. */
16
+ export declare class CompileError extends Error {
17
+ readonly code: string;
18
+ constructor(reason: string, code: string);
19
+ }
20
+ /** Host-owned ceilings. A plan can only tighten, never widen, these. */
21
+ export interface OrchestrationLimits {
22
+ /** Total nodes in the whole tree. Default 256. */
23
+ readonly maxNodes?: number;
24
+ /** Maximum structural nesting depth. Default 8. */
25
+ readonly maxDepth?: number;
26
+ /** Host concurrency ceiling for any parallel layer or node. Default: the child count. */
27
+ readonly maxParallel?: number;
28
+ /** Bounded-subagent child ceiling. Default 4. */
29
+ readonly maxChildren?: number;
30
+ /** Capability authority ceiling. `undefined` grants all; otherwise a step's needs must be a subset. */
31
+ readonly allowedCapabilities?: readonly string[];
32
+ }
33
+ /** Stable digest of a plan's canonical form. Structural identity that node effect keys hang from. */
34
+ export declare function digestRunPlan(plan: RunPlan): Promise<string>;
35
+ /** Wiring the compiler injects into every node closure. */
36
+ export interface CompileOptions {
37
+ readonly catalog: StepCatalog;
38
+ readonly planDigest: string;
39
+ readonly artifactPort: ArtifactPort;
40
+ readonly limits?: OrchestrationLimits;
41
+ /** Called once a node's content-free effect key is derived (idempotent steps only). */
42
+ onNodeEffect?(nodeId: string, key: NodeEffectKey): void;
43
+ /** Called for each artifact ref a node produces through its port. */
44
+ collectArtifact?(nodeId: string, ref: ArtifactRef): void;
45
+ }
46
+ /**
47
+ * Compile `source` (a RunPlan or its serialized form) into a single WorkflowStep. The input is
48
+ * always re-parsed through {@link parseRunPlan}, so a malformed or content-bearing plan fails closed.
49
+ */
50
+ export declare function compileRunPlan(source: RunPlan | unknown, options: CompileOptions): WorkflowStep;
51
+ /**
52
+ * Compile `source` into one {@link WorkflowStep} per top-level DAG layer, preserving the same
53
+ * ceilings and lowering as {@link compileRunPlan}. A driver can run the layers in order and hold at
54
+ * a layer boundary (a safe-pause point) without a second scheduler: each layer is still executed by
55
+ * the kernel {@link WorkflowRunner}, and the layer split is the very partition compileRunPlan folds
56
+ * into a single `sequence`.
57
+ */
58
+ export declare function compileRunPlanLayers(source: RunPlan | unknown, options: CompileOptions): readonly WorkflowStep[];
59
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/orchestration/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,aAAa,EAEb,OAAO,EACR,MAAM,yBAAyB,CAAA;AAGhC,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAoB,KAAK,WAAW,EAAoC,MAAM,cAAc,CAAA;AAInG,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;IAGnC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADrB,MAAM,EAAE,MAAM,EACL,IAAI,EAAE,MAAM;CAKxB;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,uGAAuG;IACvG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjD;AAMD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;IACrC,uFAAuF;IACvF,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAAA;IACvD,qEAAqE;IACrE,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CACzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,YAAY,CAK/F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GAAG,OAAO,EACzB,OAAO,EAAE,cAAc,GACtB,SAAS,YAAY,EAAE,CAUzB"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Compile a declarative {@link RunPlan} into the existing {@link WorkflowRunner} step tree. There is
3
+ * no second execution engine and no copied scheduler: the plan's top-level DAG is layered
4
+ * (deterministic, id tie-break) into the kernel's `sequence`/`parallel` primitives, and every node -
5
+ * leaf or structural - is lowered onto `task`/`verify`/`approve`/`checkpoint`/`handoff`/`retry`/
6
+ * `branch` steps or, for a `subagent` node, onto a {@link BoundedSubagentRunner}. Effect-key
7
+ * derivation and the artifact sink are wired into each leaf closure at compile time.
8
+ *
9
+ * All structural ceilings (node count, nesting depth, parallel breadth, pinned version, and the
10
+ * capability authority ceiling) are enforced here, before a single node runs.
11
+ */
12
+ import { parseRunPlan } from "@nifrajs/agent-protocol";
13
+ import { BoundedSubagentRunner } from "../subagents.js";
14
+ import { stepVersion } from "./catalog.js";
15
+ import { deriveNodeEffectKey } from "./effect-key.js";
16
+ import { canonicalJson, sha256HexOf } from "./hash.js";
17
+ /** Thrown when a plan cannot be lowered. `code` is a stable evidence code. */
18
+ export class CompileError extends Error {
19
+ code;
20
+ constructor(reason, code) {
21
+ super(`orchestration compile: ${reason}`);
22
+ this.code = code;
23
+ this.name = "CompileError";
24
+ }
25
+ }
26
+ const DEFAULT_MAX_NODES = 256;
27
+ const DEFAULT_MAX_DEPTH = 8;
28
+ const DEFAULT_MAX_CHILDREN = 4;
29
+ /** Stable digest of a plan's canonical form. Structural identity that node effect keys hang from. */
30
+ export function digestRunPlan(plan) {
31
+ return sha256HexOf(canonicalJson(plan));
32
+ }
33
+ /**
34
+ * Compile `source` (a RunPlan or its serialized form) into a single WorkflowStep. The input is
35
+ * always re-parsed through {@link parseRunPlan}, so a malformed or content-bearing plan fails closed.
36
+ */
37
+ export function compileRunPlan(source, options) {
38
+ const layerSteps = compileRunPlanLayers(source, options);
39
+ return layerSteps.length === 1
40
+ ? layerSteps[0]
41
+ : { type: "sequence", steps: layerSteps };
42
+ }
43
+ /**
44
+ * Compile `source` into one {@link WorkflowStep} per top-level DAG layer, preserving the same
45
+ * ceilings and lowering as {@link compileRunPlan}. A driver can run the layers in order and hold at
46
+ * a layer boundary (a safe-pause point) without a second scheduler: each layer is still executed by
47
+ * the kernel {@link WorkflowRunner}, and the layer split is the very partition compileRunPlan folds
48
+ * into a single `sequence`.
49
+ */
50
+ export function compileRunPlanLayers(source, options) {
51
+ const plan = parseRunPlan(source);
52
+ const limits = options.limits ?? {};
53
+ const total = plan.nodes.reduce((sum, node) => sum + countNodes(node), 0);
54
+ const maxNodes = limits.maxNodes ?? DEFAULT_MAX_NODES;
55
+ if (total > maxNodes)
56
+ throw new CompileError(`plan has ${total} nodes over the ${maxNodes} ceiling`, "E_MAX_NODES");
57
+ const layers = layerTopLevel(plan.nodes);
58
+ return layers.map((layer) => compileLayer(layer, options, 1));
59
+ }
60
+ /** Recursive node count over the whole tree. */
61
+ function countNodes(node) {
62
+ switch (node.kind) {
63
+ case "sequence":
64
+ case "parallel":
65
+ return 1 + node.children.reduce((sum, child) => sum + countNodes(child), 0);
66
+ case "retry":
67
+ return 1 + countNodes(node.child);
68
+ case "branch":
69
+ return 1 + countNodes(node.then) + (node.otherwise ? countNodes(node.otherwise) : 0);
70
+ default:
71
+ return 1;
72
+ }
73
+ }
74
+ /**
75
+ * Kahn layering of the top-level DAG. Each layer is every node whose dependencies are already
76
+ * emitted, sorted by id for determinism. A layer with more than one node becomes a bounded parallel.
77
+ */
78
+ function layerTopLevel(nodes) {
79
+ const byId = new Map(nodes.map((node) => [node.id, node]));
80
+ const remaining = new Set(nodes.map((node) => node.id));
81
+ const emitted = new Set();
82
+ const layers = [];
83
+ while (remaining.size > 0) {
84
+ const ready = [...remaining]
85
+ .filter((id) => (byId.get(id)?.dependsOn ?? []).every((dep) => emitted.has(dep)))
86
+ .sort();
87
+ if (ready.length === 0)
88
+ throw new CompileError("run plan has a dependency cycle", "E_CYCLE");
89
+ for (const id of ready) {
90
+ emitted.add(id);
91
+ remaining.delete(id);
92
+ }
93
+ layers.push(ready.map((id) => byId.get(id)));
94
+ }
95
+ return layers;
96
+ }
97
+ function compileLayer(layer, options, depth) {
98
+ if (layer.length === 1)
99
+ return compileNode(layer[0], options, depth);
100
+ const steps = layer.map((node) => compileNode(node, options, depth));
101
+ return { type: "parallel", steps, maxConcurrency: concurrency(steps.length, undefined, options) };
102
+ }
103
+ /** Effective concurrency: the lower of plan request, host ceiling, and child count. */
104
+ function concurrency(breadth, requested, options) {
105
+ const host = options.limits?.maxParallel ?? breadth;
106
+ return Math.max(1, Math.min(breadth, requested ?? breadth, host));
107
+ }
108
+ function compileNode(node, options, depth) {
109
+ const maxDepth = options.limits?.maxDepth ?? DEFAULT_MAX_DEPTH;
110
+ if (depth > maxDepth)
111
+ throw new CompileError(`node '${node.id}' nests past the ${maxDepth} depth ceiling`, "E_MAX_DEPTH");
112
+ switch (node.kind) {
113
+ case "sequence":
114
+ return {
115
+ type: "sequence",
116
+ steps: node.children.map((c) => compileNode(c, options, depth + 1)),
117
+ };
118
+ case "parallel": {
119
+ const steps = node.children.map((c) => compileNode(c, options, depth + 1));
120
+ return {
121
+ type: "parallel",
122
+ steps,
123
+ maxConcurrency: concurrency(steps.length, node.maxConcurrency, options),
124
+ };
125
+ }
126
+ case "retry": {
127
+ const step = {
128
+ type: "retry",
129
+ step: compileNode(node.child, options, depth + 1),
130
+ attempts: node.attempts,
131
+ ...(node.backoffMs !== undefined ? { backoffMs: node.backoffMs } : {}),
132
+ };
133
+ return step;
134
+ }
135
+ case "branch": {
136
+ const predicate = resolveStep(node, options);
137
+ if (typeof predicate.when !== "function")
138
+ throw new CompileError(`branch node '${node.id}' step declares no predicate`, "E_MISSING_HANDLER");
139
+ return {
140
+ type: "branch",
141
+ id: node.id,
142
+ when: (wf) => Promise.resolve(predicate.when(makeContext(node, options, wf))),
143
+ // biome-ignore lint/suspicious/noThenProperty: the workflow branch step names its arms then/otherwise.
144
+ then: compileNode(node.then, options, depth + 1),
145
+ ...(node.otherwise !== undefined
146
+ ? { otherwise: compileNode(node.otherwise, options, depth + 1) }
147
+ : {}),
148
+ };
149
+ }
150
+ default:
151
+ return compileLeaf(node, options);
152
+ }
153
+ }
154
+ /** Resolve and validate the catalog step behind a leaf or branch node. */
155
+ function resolveStep(node, options) {
156
+ const step = options.catalog.get(node.step);
157
+ if (step === undefined)
158
+ throw new CompileError(`node '${node.id}' references unknown step '${node.step}'`, "E_UNKNOWN_STEP");
159
+ if (step.kind !== node.kind)
160
+ throw new CompileError(`node '${node.id}' kind '${node.kind}' does not match catalog step kind '${step.kind}'`, "E_KIND_MISMATCH");
161
+ if ("stepVersion" in node &&
162
+ node.stepVersion !== undefined &&
163
+ stepVersion(step) !== node.stepVersion)
164
+ throw new CompileError(`node '${node.id}' pins step version ${node.stepVersion} but catalog has ${stepVersion(step)}`, "E_VERSION_DRIFT");
165
+ const allowed = options.limits?.allowedCapabilities;
166
+ if (allowed !== undefined) {
167
+ const granted = new Set(allowed);
168
+ const denied = (step.capabilities ?? []).find((cap) => !granted.has(cap));
169
+ if (denied !== undefined)
170
+ throw new CompileError(`node '${node.id}' needs ungranted capability '${denied}'`, "E_CAPABILITY");
171
+ }
172
+ return step;
173
+ }
174
+ function compileLeaf(node, options) {
175
+ const step = resolveStep(node, options);
176
+ const base = buildLeafStep(node, step, options);
177
+ const retry = "retry" in node ? node.retry : undefined;
178
+ if (retry === undefined)
179
+ return base;
180
+ return {
181
+ type: "retry",
182
+ step: base,
183
+ attempts: retry.attempts,
184
+ ...(retry.backoffMs !== undefined ? { backoffMs: retry.backoffMs } : {}),
185
+ };
186
+ }
187
+ function buildLeafStep(node, step, options) {
188
+ const id = node.id;
189
+ switch (node.kind) {
190
+ case "subagent": {
191
+ if (step.executor === undefined || typeof step.spec !== "function")
192
+ throw new CompileError(`subagent node '${id}' step declares no executor or spec`, "E_MISSING_HANDLER");
193
+ return { type: "task", id, run: (wf) => runSubagent(node, step, options, wf) };
194
+ }
195
+ case "verify":
196
+ return { type: "verify", id, run: (wf) => runLeaf(node, step, options, wf) };
197
+ case "approve":
198
+ return {
199
+ type: "approve",
200
+ id,
201
+ reason: "reason" in node && node.reason !== undefined ? node.reason : "",
202
+ run: (wf) => runLeaf(node, step, options, wf),
203
+ };
204
+ case "checkpoint":
205
+ return { type: "checkpoint", id, run: (wf) => runLeaf(node, step, options, wf) };
206
+ case "handoff":
207
+ return { type: "handoff", id, run: (wf) => runLeaf(node, step, options, wf) };
208
+ default:
209
+ return { type: "task", id, run: (wf) => runLeaf(node, step, options, wf) };
210
+ }
211
+ }
212
+ /** Build the step context, wiring the artifact collector and effect-key derivation. */
213
+ function makeContext(node, options, wf) {
214
+ const artifact = {
215
+ put: async (payload, ctx) => {
216
+ const ref = await options.artifactPort.put(payload, ctx);
217
+ options.collectArtifact?.(node.id, ref);
218
+ return ref;
219
+ },
220
+ };
221
+ return {
222
+ nodeId: node.id,
223
+ planDigest: options.planDigest,
224
+ signal: wf.signal,
225
+ artifact,
226
+ values: wf.values,
227
+ set: (name, value) => wf.set(name, value),
228
+ };
229
+ }
230
+ async function deriveEffect(node, step, options, wf) {
231
+ if (step.selectEffect === undefined)
232
+ return;
233
+ const selector = step.selectEffect({
234
+ nodeId: node.id,
235
+ planDigest: options.planDigest,
236
+ values: wf.values,
237
+ });
238
+ const key = await deriveNodeEffectKey({
239
+ planDigest: options.planDigest,
240
+ nodeId: node.id,
241
+ selector,
242
+ });
243
+ options.onNodeEffect?.(node.id, key);
244
+ }
245
+ async function runLeaf(node, step, options, wf) {
246
+ if (typeof step.run !== "function")
247
+ throw new CompileError(`node '${node.id}' step declares no run body`, "E_MISSING_HANDLER");
248
+ const context = makeContext(node, options, wf);
249
+ await deriveEffect(node, step, options, wf);
250
+ return step.run(context);
251
+ }
252
+ async function runSubagent(node, step, options, wf) {
253
+ const context = makeContext(node, options, wf);
254
+ await deriveEffect(node, step, options, wf);
255
+ const runner = new BoundedSubagentRunner(step.executor, {
256
+ maxChildren: options.limits?.maxChildren ?? DEFAULT_MAX_CHILDREN,
257
+ signal: wf.signal,
258
+ ...(options.limits?.allowedCapabilities !== undefined
259
+ ? { allowedCapabilities: options.limits.allowedCapabilities }
260
+ : {}),
261
+ });
262
+ const spec = await step.spec(context);
263
+ const result = await runner.run(spec);
264
+ if (!result.ok)
265
+ throw new Error(result.error ?? `subagent '${node.id}' failed`);
266
+ return result.output;
267
+ }
268
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/orchestration/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Evidence-only dispatch contracts for at-least-once run execution.
3
+ *
4
+ * These values deliberately contain no job payload, tenant state, credentials, retention policy,
5
+ * error message, or tool/model data. A durable operated adapter may implement the ports, but the
6
+ * public reference adapters are disposable and keep only identifiers, digests, counters, and
7
+ * lifecycle evidence. Delivery is at-least-once; callers make effects idempotent with the key
8
+ * derived below and prove completion before a recovered worker skips the effect.
9
+ */
10
+ export declare const RUN_DISPATCH_VERSION: 1;
11
+ export declare const DISPATCH_JOB_NAME = "nifra.agent.run-node";
12
+ export declare const MAX_DISPATCH_STRING = 256;
13
+ export declare const MAX_DISPATCH_ATTEMPTS = 16;
14
+ export type DispatchBoundary = "before-effect" | "after-effect";
15
+ export type DispatchState = "queued" | "leased" | "checkpointed" | "retrying" | "succeeded" | "failed" | "cancelled" | "dead-lettered";
16
+ export type DispatchResultCode = "accepted" | "stale_lease" | "cancelled" | "terminal" | "invalid_checkpoint" | "idempotency_required";
17
+ export interface InjectedClock {
18
+ readonly now: () => number;
19
+ readonly sleep?: (milliseconds: number) => Promise<void>;
20
+ }
21
+ export declare const systemClock: InjectedClock;
22
+ /** A queued node identity. It is safe to persist and safe to show in evidence. */
23
+ export interface RunDispatch {
24
+ readonly version: typeof RUN_DISPATCH_VERSION;
25
+ readonly dispatchId: string;
26
+ readonly runId: string;
27
+ readonly planDigest: string;
28
+ readonly nodeId: string;
29
+ readonly maxAttempts: number;
30
+ readonly notBefore: number;
31
+ }
32
+ /** A lease with a generation. A completion from any older generation is rejected. */
33
+ export interface RunLease {
34
+ readonly version: typeof RUN_DISPATCH_VERSION;
35
+ readonly leaseId: string;
36
+ readonly dispatch: RunDispatch;
37
+ /** Logical attempt is stable across duplicate delivery while the same attempt is unresolved. */
38
+ readonly attempt: number;
39
+ readonly generation: number;
40
+ readonly leasedAt: number;
41
+ readonly leaseUntil: number;
42
+ readonly scheduleToken: string;
43
+ readonly idempotencyKey: string;
44
+ }
45
+ /** A safe boundary checkpoint. It never contains a result or effect payload. */
46
+ export interface RunCheckpoint {
47
+ readonly version: typeof RUN_DISPATCH_VERSION;
48
+ readonly dispatchId: string;
49
+ readonly runId: string;
50
+ readonly nodeId: string;
51
+ readonly attempt: number;
52
+ readonly generation: number;
53
+ readonly boundary: DispatchBoundary;
54
+ readonly idempotencyKey: string;
55
+ readonly at: number;
56
+ readonly scheduleToken: string;
57
+ }
58
+ /** A terminal or transitional record suitable for a public evidence sink. */
59
+ export interface RunDispatchEvidence {
60
+ readonly version: typeof RUN_DISPATCH_VERSION;
61
+ readonly dispatchId: string;
62
+ readonly runId: string;
63
+ readonly nodeId: string;
64
+ readonly state: DispatchState;
65
+ readonly attempt: number;
66
+ readonly generation: number;
67
+ readonly at: number;
68
+ readonly scheduleToken: string;
69
+ readonly idempotencyKey: string;
70
+ readonly code?: string;
71
+ }
72
+ export interface DispatchWriteResult {
73
+ readonly ok: boolean;
74
+ readonly code: DispatchResultCode;
75
+ }
76
+ export interface DispatchInspection {
77
+ readonly dispatch: RunDispatch;
78
+ readonly state: DispatchState;
79
+ readonly attempt: number;
80
+ readonly generation: number;
81
+ readonly checkpoint?: RunCheckpoint;
82
+ readonly evidence: readonly RunDispatchEvidence[];
83
+ }
84
+ export interface RunDispatchStore {
85
+ enqueue(dispatch: RunDispatch): void | Promise<void>;
86
+ lease(now: number, limit: number, leaseMs: number): RunLease[] | Promise<RunLease[]>;
87
+ checkpoint(lease: RunLease, checkpoint: RunCheckpoint): DispatchWriteResult | Promise<DispatchWriteResult>;
88
+ complete(lease: RunLease, evidence?: RunDispatchEvidence): DispatchWriteResult | Promise<DispatchWriteResult>;
89
+ retry(lease: RunLease, runAt: number, code: string): DispatchWriteResult | Promise<DispatchWriteResult>;
90
+ deadLetter(lease: RunLease, code: string): DispatchWriteResult | Promise<DispatchWriteResult>;
91
+ cancel(runId: string, code?: string): number | Promise<number>;
92
+ inspect(dispatchId: string): DispatchInspection | undefined | Promise<DispatchInspection | undefined>;
93
+ }
94
+ /**
95
+ * Optional operated-depth handoff. The context is intentionally opaque: the public package does not
96
+ * model tenants, rows, RLS policy text, retention periods, credentials, workers, or fleet topology.
97
+ * A private adapter supplies those controls and still implements the evidence-only store port above.
98
+ */
99
+ export interface DurableDispatchAdapter<OpaqueContext = unknown> extends RunDispatchStore {
100
+ authorize(context: OpaqueContext, operation: "enqueue" | "lease" | "inspect" | "settle"): boolean | Promise<boolean>;
101
+ enforceDataLayerPolicy(context: OpaqueContext, operation: "read" | "write"): boolean | Promise<boolean>;
102
+ retainEvidence(context: OpaqueContext, evidence: RunDispatchEvidence): void | Promise<void>;
103
+ reconcile(context: OpaqueContext, dispatchId: string): void | Promise<void>;
104
+ workerHealth(context: OpaqueContext): "ready" | "draining" | "unavailable" | Promise<"ready" | "draining" | "unavailable">;
105
+ }
106
+ /** Parse a dispatch identity and reject content or undeclared fields. */
107
+ export declare function parseRunDispatch(value: unknown): RunDispatch;
108
+ export declare function parseRunLease(value: unknown): RunLease;
109
+ export declare function parseRunCheckpoint(value: unknown): RunCheckpoint;
110
+ export declare function parseRunDispatchEvidence(value: unknown): RunDispatchEvidence;
111
+ /** Stable key for one logical node attempt. Duplicate delivery uses the same boundary number. */
112
+ export declare function deriveRunIdempotencyKey(planDigest: string, runId: string, nodeId: string, logicalAttemptBoundary: number): Promise<string>;
113
+ /** Create a parsed dispatch identity before handing it to any adapter. */
114
+ export declare function createRunDispatch(input: Omit<RunDispatch, "version">): RunDispatch;
115
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/orchestration/dispatch.ts"],"names":[],"mappings":"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"}