@archmax-ai/harness 0.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 (351) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/agent.d.ts +174 -0
  4. package/dist/agent.js +140 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/assembly/compose.d.ts +170 -0
  7. package/dist/assembly/compose.js +391 -0
  8. package/dist/assembly/compose.js.map +1 -0
  9. package/dist/assembly/delegation-registry.d.ts +5 -0
  10. package/dist/assembly/delegation-registry.js +118 -0
  11. package/dist/assembly/delegation-registry.js.map +1 -0
  12. package/dist/assembly/index.d.ts +192 -0
  13. package/dist/assembly/index.js +265 -0
  14. package/dist/assembly/index.js.map +1 -0
  15. package/dist/assembly/plain.d.ts +7 -0
  16. package/dist/assembly/plain.js +41 -0
  17. package/dist/assembly/plain.js.map +1 -0
  18. package/dist/authoring-skill/archmax-harness/README.md +76 -0
  19. package/dist/authoring-skill/archmax-harness/SKILL.md +241 -0
  20. package/dist/authoring-skill/archmax-harness/references/backend-integration.md +626 -0
  21. package/dist/authoring-skill/archmax-harness/references/cases.md +41 -0
  22. package/dist/authoring-skill/archmax-harness/references/diagnostics.md +51 -0
  23. package/dist/authoring-skill/archmax-harness/references/hook-and-test-scripts.md +1070 -0
  24. package/dist/authoring-skill/archmax-harness/references/hooks-and-scripts.md +82 -0
  25. package/dist/authoring-skill/archmax-harness/references/wiring.md +101 -0
  26. package/dist/authoring-skill/archmax-harness/references/workflow-schema.md +1631 -0
  27. package/dist/authoring-skill/archmax-harness/references/workflow-yaml.md +241 -0
  28. package/dist/behaviour/support.d.ts +232 -0
  29. package/dist/behaviour/support.js +339 -0
  30. package/dist/behaviour/support.js.map +1 -0
  31. package/dist/cli/banner.d.ts +11 -0
  32. package/dist/cli/banner.js +29 -0
  33. package/dist/cli/banner.js.map +1 -0
  34. package/dist/cli/bootstrap.d.ts +33 -0
  35. package/dist/cli/bootstrap.js +153 -0
  36. package/dist/cli/bootstrap.js.map +1 -0
  37. package/dist/cli/command.d.ts +39 -0
  38. package/dist/cli/command.js +97 -0
  39. package/dist/cli/command.js.map +1 -0
  40. package/dist/cli/state-flow.d.ts +46 -0
  41. package/dist/cli/state-flow.js +268 -0
  42. package/dist/cli/state-flow.js.map +1 -0
  43. package/dist/cli/style.d.ts +41 -0
  44. package/dist/cli/style.js +64 -0
  45. package/dist/cli/style.js.map +1 -0
  46. package/dist/cli/turn.d.ts +41 -0
  47. package/dist/cli/turn.js +161 -0
  48. package/dist/cli/turn.js.map +1 -0
  49. package/dist/cli.d.ts +10 -0
  50. package/dist/cli.js +426 -0
  51. package/dist/cli.js.map +1 -0
  52. package/dist/core/code-description.d.ts +22 -0
  53. package/dist/core/code-description.js +38 -0
  54. package/dist/core/code-description.js.map +1 -0
  55. package/dist/core/deepagents.d.ts +183 -0
  56. package/dist/core/deepagents.js +128 -0
  57. package/dist/core/deepagents.js.map +1 -0
  58. package/dist/core/events.d.ts +350 -0
  59. package/dist/core/events.js +205 -0
  60. package/dist/core/events.js.map +1 -0
  61. package/dist/core/frontmatter.d.ts +15 -0
  62. package/dist/core/frontmatter.js +32 -0
  63. package/dist/core/frontmatter.js.map +1 -0
  64. package/dist/core/listing-redact.d.ts +37 -0
  65. package/dist/core/listing-redact.js +88 -0
  66. package/dist/core/listing-redact.js.map +1 -0
  67. package/dist/core/match.d.ts +26 -0
  68. package/dist/core/match.js +75 -0
  69. package/dist/core/match.js.map +1 -0
  70. package/dist/core/message-readers.d.ts +84 -0
  71. package/dist/core/message-readers.js +159 -0
  72. package/dist/core/message-readers.js.map +1 -0
  73. package/dist/core/messages.d.ts +49 -0
  74. package/dist/core/messages.js +85 -0
  75. package/dist/core/messages.js.map +1 -0
  76. package/dist/core/mount-prompt.d.ts +28 -0
  77. package/dist/core/mount-prompt.js +55 -0
  78. package/dist/core/mount-prompt.js.map +1 -0
  79. package/dist/core/mount-redact.d.ts +28 -0
  80. package/dist/core/mount-redact.js +32 -0
  81. package/dist/core/mount-redact.js.map +1 -0
  82. package/dist/core/mounts.d.ts +88 -0
  83. package/dist/core/mounts.js +147 -0
  84. package/dist/core/mounts.js.map +1 -0
  85. package/dist/core/path-mapping.d.ts +52 -0
  86. package/dist/core/path-mapping.js +113 -0
  87. package/dist/core/path-mapping.js.map +1 -0
  88. package/dist/core/platform-prompt.generated.d.ts +2 -0
  89. package/dist/core/platform-prompt.generated.js +4 -0
  90. package/dist/core/platform-prompt.generated.js.map +1 -0
  91. package/dist/core/prompt.d.ts +42 -0
  92. package/dist/core/prompt.js +75 -0
  93. package/dist/core/prompt.js.map +1 -0
  94. package/dist/core/session-id.d.ts +38 -0
  95. package/dist/core/session-id.js +61 -0
  96. package/dist/core/session-id.js.map +1 -0
  97. package/dist/core/session-store.d.ts +85 -0
  98. package/dist/core/session-store.js +149 -0
  99. package/dist/core/session-store.js.map +1 -0
  100. package/dist/core/session-zone.d.ts +54 -0
  101. package/dist/core/session-zone.js +82 -0
  102. package/dist/core/session-zone.js.map +1 -0
  103. package/dist/core/skill-prompt.d.ts +31 -0
  104. package/dist/core/skill-prompt.js +54 -0
  105. package/dist/core/skill-prompt.js.map +1 -0
  106. package/dist/core/skill-redact.d.ts +15 -0
  107. package/dist/core/skill-redact.js +27 -0
  108. package/dist/core/skill-redact.js.map +1 -0
  109. package/dist/core/skills.d.ts +172 -0
  110. package/dist/core/skills.js +214 -0
  111. package/dist/core/skills.js.map +1 -0
  112. package/dist/core/tool-mocks.d.ts +23 -0
  113. package/dist/core/tool-mocks.js +39 -0
  114. package/dist/core/tool-mocks.js.map +1 -0
  115. package/dist/core/tool-telemetry.d.ts +16 -0
  116. package/dist/core/tool-telemetry.js +40 -0
  117. package/dist/core/tool-telemetry.js.map +1 -0
  118. package/dist/core/usage.d.ts +114 -0
  119. package/dist/core/usage.js +226 -0
  120. package/dist/core/usage.js.map +1 -0
  121. package/dist/core/workspace-context.d.ts +136 -0
  122. package/dist/core/workspace-context.js +178 -0
  123. package/dist/core/workspace-context.js.map +1 -0
  124. package/dist/core/workspace-prompt.d.ts +7 -0
  125. package/dist/core/workspace-prompt.js +102 -0
  126. package/dist/core/workspace-prompt.js.map +1 -0
  127. package/dist/core/workspace-router.d.ts +61 -0
  128. package/dist/core/workspace-router.js +145 -0
  129. package/dist/core/workspace-router.js.map +1 -0
  130. package/dist/core/workspace.d.ts +85 -0
  131. package/dist/core/workspace.js +193 -0
  132. package/dist/core/workspace.js.map +1 -0
  133. package/dist/core/zones.d.ts +181 -0
  134. package/dist/core/zones.js +202 -0
  135. package/dist/core/zones.js.map +1 -0
  136. package/dist/env.d.ts +99 -0
  137. package/dist/env.js +271 -0
  138. package/dist/env.js.map +1 -0
  139. package/dist/index.d.ts +265 -0
  140. package/dist/index.js +197 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/kernel/kernel.d.ts +192 -0
  143. package/dist/kernel/kernel.js +751 -0
  144. package/dist/kernel/kernel.js.map +1 -0
  145. package/dist/lifecycle/hook-shape.d.ts +44 -0
  146. package/dist/lifecycle/hook-shape.js +66 -0
  147. package/dist/lifecycle/hook-shape.js.map +1 -0
  148. package/dist/lifecycle/runner.d.ts +177 -0
  149. package/dist/lifecycle/runner.js +372 -0
  150. package/dist/lifecycle/runner.js.map +1 -0
  151. package/dist/lifecycle/transcript.d.ts +27 -0
  152. package/dist/lifecycle/transcript.js +43 -0
  153. package/dist/lifecycle/transcript.js.map +1 -0
  154. package/dist/machine/allow.d.ts +65 -0
  155. package/dist/machine/allow.js +107 -0
  156. package/dist/machine/allow.js.map +1 -0
  157. package/dist/machine/delegation.d.ts +9 -0
  158. package/dist/machine/delegation.js +10 -0
  159. package/dist/machine/delegation.js.map +1 -0
  160. package/dist/machine/diagnostic.d.ts +14 -0
  161. package/dist/machine/diagnostic.js +2 -0
  162. package/dist/machine/diagnostic.js.map +1 -0
  163. package/dist/machine/lint-spec.d.ts +4 -0
  164. package/dist/machine/lint-spec.js +266 -0
  165. package/dist/machine/lint-spec.js.map +1 -0
  166. package/dist/machine/load-spec.d.ts +90 -0
  167. package/dist/machine/load-spec.js +120 -0
  168. package/dist/machine/load-spec.js.map +1 -0
  169. package/dist/machine/machine.d.ts +273 -0
  170. package/dist/machine/machine.js +551 -0
  171. package/dist/machine/machine.js.map +1 -0
  172. package/dist/machine/mount-grants.d.ts +25 -0
  173. package/dist/machine/mount-grants.js +24 -0
  174. package/dist/machine/mount-grants.js.map +1 -0
  175. package/dist/machine/slug.d.ts +14 -0
  176. package/dist/machine/slug.js +17 -0
  177. package/dist/machine/slug.js.map +1 -0
  178. package/dist/machine/spec-schema.d.ts +662 -0
  179. package/dist/machine/spec-schema.js +717 -0
  180. package/dist/machine/spec-schema.js.map +1 -0
  181. package/dist/machine/tool-names.d.ts +98 -0
  182. package/dist/machine/tool-names.js +144 -0
  183. package/dist/machine/tool-names.js.map +1 -0
  184. package/dist/machine/triggers.d.ts +114 -0
  185. package/dist/machine/triggers.js +165 -0
  186. package/dist/machine/triggers.js.map +1 -0
  187. package/dist/machine/types.d.ts +186 -0
  188. package/dist/machine/types.js +12 -0
  189. package/dist/machine/types.js.map +1 -0
  190. package/dist/machine/validate-spec.d.ts +42 -0
  191. package/dist/machine/validate-spec.js +29 -0
  192. package/dist/machine/validate-spec.js.map +1 -0
  193. package/dist/machine/variables.d.ts +196 -0
  194. package/dist/machine/variables.js +415 -0
  195. package/dist/machine/variables.js.map +1 -0
  196. package/dist/public/cli.d.ts +15 -0
  197. package/dist/public/cli.js +14 -0
  198. package/dist/public/cli.js.map +1 -0
  199. package/dist/public/messages.d.ts +33 -0
  200. package/dist/public/messages.js +33 -0
  201. package/dist/public/messages.js.map +1 -0
  202. package/dist/public/sandbox.d.ts +99 -0
  203. package/dist/public/sandbox.js +32 -0
  204. package/dist/public/sandbox.js.map +1 -0
  205. package/dist/public/spec.d.ts +147 -0
  206. package/dist/public/spec.js +149 -0
  207. package/dist/public/spec.js.map +1 -0
  208. package/dist/public/testing.d.ts +71 -0
  209. package/dist/public/testing.js +39 -0
  210. package/dist/public/testing.js.map +1 -0
  211. package/dist/rubrics/rubrics.d.ts +135 -0
  212. package/dist/rubrics/rubrics.js +145 -0
  213. package/dist/rubrics/rubrics.js.map +1 -0
  214. package/dist/runtime/contract.d.ts +73 -0
  215. package/dist/runtime/contract.js +96 -0
  216. package/dist/runtime/contract.js.map +1 -0
  217. package/dist/sandbox/assets/parts/core.js +22 -0
  218. package/dist/sandbox/assets/parts/lifecycle-hook.js +47 -0
  219. package/dist/sandbox/bridge.d.ts +16 -0
  220. package/dist/sandbox/bridge.js +95 -0
  221. package/dist/sandbox/bridge.js.map +1 -0
  222. package/dist/sandbox/executor.d.ts +46 -0
  223. package/dist/sandbox/executor.js +119 -0
  224. package/dist/sandbox/executor.js.map +1 -0
  225. package/dist/sandbox/imports.d.ts +33 -0
  226. package/dist/sandbox/imports.js +67 -0
  227. package/dist/sandbox/imports.js.map +1 -0
  228. package/dist/sandbox/prelude.d.ts +12 -0
  229. package/dist/sandbox/prelude.js +51 -0
  230. package/dist/sandbox/prelude.js.map +1 -0
  231. package/dist/sandbox/ptc-gateway.d.ts +104 -0
  232. package/dist/sandbox/ptc-gateway.js +167 -0
  233. package/dist/sandbox/ptc-gateway.js.map +1 -0
  234. package/dist/sandbox/runtime.d.ts +59 -0
  235. package/dist/sandbox/runtime.js +51 -0
  236. package/dist/sandbox/runtime.js.map +1 -0
  237. package/dist/sandbox/tools.d.ts +34 -0
  238. package/dist/sandbox/tools.js +147 -0
  239. package/dist/sandbox/tools.js.map +1 -0
  240. package/dist/sessions/operations.d.ts +79 -0
  241. package/dist/sessions/operations.js +121 -0
  242. package/dist/sessions/operations.js.map +1 -0
  243. package/dist/sessions/resolve.d.ts +97 -0
  244. package/dist/sessions/resolve.js +145 -0
  245. package/dist/sessions/resolve.js.map +1 -0
  246. package/dist/sessions/resume.d.ts +242 -0
  247. package/dist/sessions/resume.js +288 -0
  248. package/dist/sessions/resume.js.map +1 -0
  249. package/dist/sessions/scope.d.ts +99 -0
  250. package/dist/sessions/scope.js +145 -0
  251. package/dist/sessions/scope.js.map +1 -0
  252. package/dist/sessions/summary.d.ts +65 -0
  253. package/dist/sessions/summary.js +56 -0
  254. package/dist/sessions/summary.js.map +1 -0
  255. package/dist/testing/assertions.d.ts +30 -0
  256. package/dist/testing/assertions.js +231 -0
  257. package/dist/testing/assertions.js.map +1 -0
  258. package/dist/testing/case-document.d.ts +141 -0
  259. package/dist/testing/case-document.js +51 -0
  260. package/dist/testing/case-document.js.map +1 -0
  261. package/dist/testing/case-schema.d.ts +29 -0
  262. package/dist/testing/case-schema.js +519 -0
  263. package/dist/testing/case-schema.js.map +1 -0
  264. package/dist/testing/discovery.d.ts +10 -0
  265. package/dist/testing/discovery.js +24 -0
  266. package/dist/testing/discovery.js.map +1 -0
  267. package/dist/testing/driver.d.ts +78 -0
  268. package/dist/testing/driver.js +117 -0
  269. package/dist/testing/driver.js.map +1 -0
  270. package/dist/testing/grade.d.ts +116 -0
  271. package/dist/testing/grade.js +261 -0
  272. package/dist/testing/grade.js.map +1 -0
  273. package/dist/testing/interpreter.d.ts +55 -0
  274. package/dist/testing/interpreter.js +103 -0
  275. package/dist/testing/interpreter.js.map +1 -0
  276. package/dist/testing/mock-middleware.d.ts +5 -0
  277. package/dist/testing/mock-middleware.js +33 -0
  278. package/dist/testing/mock-middleware.js.map +1 -0
  279. package/dist/testing/runner.d.ts +205 -0
  280. package/dist/testing/runner.js +266 -0
  281. package/dist/testing/runner.js.map +1 -0
  282. package/dist/testing/target.d.ts +27 -0
  283. package/dist/testing/target.js +21 -0
  284. package/dist/testing/target.js.map +1 -0
  285. package/dist/validate/validate.d.ts +41 -0
  286. package/dist/validate/validate.js +669 -0
  287. package/dist/validate/validate.js.map +1 -0
  288. package/dist/workflow/agent-tools.d.ts +10 -0
  289. package/dist/workflow/agent-tools.js +10 -0
  290. package/dist/workflow/agent-tools.js.map +1 -0
  291. package/dist/workflow/checkpointer.d.ts +52 -0
  292. package/dist/workflow/checkpointer.js +200 -0
  293. package/dist/workflow/checkpointer.js.map +1 -0
  294. package/dist/workflow/control-tools.d.ts +174 -0
  295. package/dist/workflow/control-tools.js +468 -0
  296. package/dist/workflow/control-tools.js.map +1 -0
  297. package/dist/workflow/governance.d.ts +104 -0
  298. package/dist/workflow/governance.js +546 -0
  299. package/dist/workflow/governance.js.map +1 -0
  300. package/dist/workflow/middleware.d.ts +85 -0
  301. package/dist/workflow/middleware.js +283 -0
  302. package/dist/workflow/middleware.js.map +1 -0
  303. package/dist/workflow/on-error.d.ts +25 -0
  304. package/dist/workflow/on-error.js +58 -0
  305. package/dist/workflow/on-error.js.map +1 -0
  306. package/dist/workflow/parks.d.ts +46 -0
  307. package/dist/workflow/parks.js +513 -0
  308. package/dist/workflow/parks.js.map +1 -0
  309. package/dist/workflow/paths.d.ts +67 -0
  310. package/dist/workflow/paths.js +108 -0
  311. package/dist/workflow/paths.js.map +1 -0
  312. package/dist/workflow/prompt-cache.d.ts +70 -0
  313. package/dist/workflow/prompt-cache.js +103 -0
  314. package/dist/workflow/prompt-cache.js.map +1 -0
  315. package/dist/workflow/prompt-pruning.d.ts +20 -0
  316. package/dist/workflow/prompt-pruning.js +83 -0
  317. package/dist/workflow/prompt-pruning.js.map +1 -0
  318. package/dist/workflow/render-prompt.d.ts +45 -0
  319. package/dist/workflow/render-prompt.js +140 -0
  320. package/dist/workflow/render-prompt.js.map +1 -0
  321. package/dist/workflow/runtime-config.d.ts +7 -0
  322. package/dist/workflow/runtime-config.js +9 -0
  323. package/dist/workflow/runtime-config.js.map +1 -0
  324. package/dist/workflow/session-artifacts.d.ts +90 -0
  325. package/dist/workflow/session-artifacts.js +134 -0
  326. package/dist/workflow/session-artifacts.js.map +1 -0
  327. package/dist/workflow/session-view.d.ts +31 -0
  328. package/dist/workflow/session-view.js +94 -0
  329. package/dist/workflow/session-view.js.map +1 -0
  330. package/dist/workflow/snapshot.d.ts +14 -0
  331. package/dist/workflow/snapshot.js +97 -0
  332. package/dist/workflow/snapshot.js.map +1 -0
  333. package/dist/workflow/state.d.ts +347 -0
  334. package/dist/workflow/state.js +322 -0
  335. package/dist/workflow/state.js.map +1 -0
  336. package/dist/workflow/sub-workflow.d.ts +174 -0
  337. package/dist/workflow/sub-workflow.js +392 -0
  338. package/dist/workflow/sub-workflow.js.map +1 -0
  339. package/dist/workflow/tool-service.d.ts +48 -0
  340. package/dist/workflow/tool-service.js +291 -0
  341. package/dist/workflow/tool-service.js.map +1 -0
  342. package/dist/workflow/turn-boundary.d.ts +39 -0
  343. package/dist/workflow/turn-boundary.js +128 -0
  344. package/dist/workflow/turn-boundary.js.map +1 -0
  345. package/dist/workflow/turn-runner.d.ts +40 -0
  346. package/dist/workflow/turn-runner.js +122 -0
  347. package/dist/workflow/turn-runner.js.map +1 -0
  348. package/dist/workflow/workflow-tools.d.ts +46 -0
  349. package/dist/workflow/workflow-tools.js +90 -0
  350. package/dist/workflow/workflow-tools.js.map +1 -0
  351. package/package.json +119 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Child compositions, composed lazily and memoized by workflow slug **and
3
+ * delegation chain**: the denials a child inherits are every ancestor's, so the
4
+ * same slug reached through two different callers is two compositions.
5
+ *
6
+ * Lazy so a workflow nothing delegates to costs nothing; memoized on the
7
+ * **promise** so concurrent dispatches of one slug under one chain compose it
8
+ * once. Every failure here is a *dispatch* failure, never an assembly failure: a
9
+ * parent must still assemble when a workflow it might delegate to is broken.
10
+ */
11
+ import { loadMachineSpec } from "../machine/load-spec.js";
12
+ import { WorkflowMachine } from "../machine/machine.js";
13
+ import { MANUAL_TRIGGER } from "../machine/triggers.js";
14
+ import { workflowPaths } from "../workflow/paths.js";
15
+ import { SubWorkflowError, } from "../workflow/sub-workflow.js";
16
+ import { rubricsAsSubagents, rubricsFromSpec } from "../rubrics/rubrics.js";
17
+ import { composeGoverned, inheritedDenials, renderSystemPrompt } from "./compose.js";
18
+ /** Build the registry the root composition and every child dispatch through. */
19
+ export function createDelegationRegistry(ctx, root) {
20
+ const composed = new Map();
21
+ /**
22
+ * The child's *machine*, without its agent, so a dispatch can be refused on
23
+ * the target's `requires` for the price of a spec read. Shared with
24
+ * `resolve`, so an accepted dispatch never loads the spec twice.
25
+ */
26
+ const loads = new Map();
27
+ function load(target) {
28
+ let loading = loads.get(target);
29
+ if (!loading) {
30
+ // A failed load is not cached: a spec fixed between dispatches should be
31
+ // picked up rather than remembered as broken forever.
32
+ loading = loadSpec(target).catch((err) => {
33
+ loads.delete(target);
34
+ throw err;
35
+ });
36
+ loads.set(target, loading);
37
+ }
38
+ return loading;
39
+ }
40
+ async function loadSpec(target) {
41
+ const paths = workflowPaths(target);
42
+ const loaded = await loadMachineSpec(ctx.authoring, paths);
43
+ if (!loaded.usable || !loaded.spec) {
44
+ const detail = loaded.issues.some((i) => i.kind === "missing")
45
+ ? `no '${paths.workflowYaml}' found`
46
+ : loaded.issues.map((i) => i.message).join("; ") || "no valid machine spec";
47
+ throw new SubWorkflowError("unknown-workflow", target, `Cannot run sub-workflow '${target}': ${detail}.`);
48
+ }
49
+ // Rubrics are deliberately *not* inherited: a child is graded by the
50
+ // standards its own spec declares, so its registry comes from `loaded.spec`
51
+ // when the child runtime is composed, never from the caller's.
52
+ const machine = WorkflowMachine.fromSpec(loaded.spec, ctx.params.essentialTools);
53
+ // A caller enters where a host would: the `manual` entry. A machine with
54
+ // none cannot be started at all (fail-closed, as at the host ingress).
55
+ if (!machine.startStateForTrigger(MANUAL_TRIGGER)) {
56
+ throw new SubWorkflowError("not-delegatable", target, `Cannot run sub-workflow '${target}': it declares no '${MANUAL_TRIGGER}' trigger ` +
57
+ `entry, so it has no state to start in. Add ` +
58
+ `"trigger: ${MANUAL_TRIGGER}" to the state a session should start in.`);
59
+ }
60
+ return { body: loaded.body, machine };
61
+ }
62
+ async function compose(target, caller) {
63
+ const { body, machine } = await load(target);
64
+ const systemPrompt = await renderSystemPrompt(ctx, machine, body, { workflow: target });
65
+ // The child's graders are its own: a rubric declared in one `workflow.yaml`
66
+ // is not resolvable from another, so a sub-run is held to the standards its
67
+ // own machine declares — and its `task` tool is registered with those.
68
+ const rubrics = rubricsFromSpec(machine.spec);
69
+ const childCtx = {
70
+ ...ctx,
71
+ rubrics,
72
+ subagents: rubricsAsSubagents(rubrics, ctx.rubricModel),
73
+ };
74
+ const child = await composeGoverned(childCtx, {
75
+ machine,
76
+ workflow: target,
77
+ systemPrompt,
78
+ trigger: { id: MANUAL_TRIGGER },
79
+ // Denials compose downward and accumulate: the caller hands down what it
80
+ // inherited plus its own policy, so the child may narrow what is permitted
81
+ // but never re-grant what any ancestor forbade. A caller-less resolve (a
82
+ // direct child of the root) inherits the root's alone.
83
+ inheritedPolicyRules: caller?.inheritedPolicyRules ?? inheritedDenials(ctx, root),
84
+ registry,
85
+ });
86
+ // A child is driven exactly as the top-level agent drives itself: through
87
+ // its turn runner, which binds the child's own session and streams its text.
88
+ return { graph: { invoke: child.driver.invoke }, machine };
89
+ }
90
+ const registry = {
91
+ resolve(target, caller) {
92
+ const key = [...(caller?.chain ?? []), target].join(" > ");
93
+ let composing = composed.get(key);
94
+ if (!composing) {
95
+ composing = compose(target, caller).catch((err) => {
96
+ composed.delete(key);
97
+ throw err;
98
+ });
99
+ composed.set(key, composing);
100
+ }
101
+ return composing;
102
+ },
103
+ async signature(target) {
104
+ const { machine } = await load(target);
105
+ const title = machine.spec.title?.trim();
106
+ return {
107
+ requires: machine.requiresForTrigger(MANUAL_TRIGGER),
108
+ returns: machine.returnsForTrigger(MANUAL_TRIGGER),
109
+ ...(title ? { title } : {}),
110
+ // Reported, not enforced here: a disabled target still binds a tool so
111
+ // disabling a leaf does not fail every caller; the dispatcher refuses.
112
+ ...(machine.disabled ? { disabled: true } : {}),
113
+ };
114
+ },
115
+ };
116
+ return registry;
117
+ }
118
+ //# sourceMappingURL=delegation-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-registry.js","sourceRoot":"","sources":["../../src/assembly/delegation-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
2
+ import type { StructuredTool } from "@langchain/core/tools";
3
+ import type { BaseCheckpointSaver } from "@langchain/langgraph";
4
+ import type { AgentMiddleware } from "langchain";
5
+ import type { BackendProtocolV2, CreateDeepAgentParams } from "deepagents";
6
+ import { type Agent } from "../agent.js";
7
+ import { type WorkflowEventHandler } from "../core/events.js";
8
+ import type { MountSpec } from "../core/mounts.js";
9
+ import type { SessionStore } from "../core/session-store.js";
10
+ import { type PricingTable } from "../core/usage.js";
11
+ import { type ModelFactory } from "../env.js";
12
+ import type { GovernanceRule } from "../kernel/kernel.js";
13
+ import type { HookExecutor } from "../lifecycle/runner.js";
14
+ import { type TriggerInput } from "../machine/triggers.js";
15
+ import type { SandboxRuntime } from "../sandbox/runtime.js";
16
+ import type { PromptCacheOptions } from "../workflow/prompt-cache.js";
17
+ /**
18
+ * Workspace composition, grouped. `rootDir`, `mounts` and `sessionStore` all
19
+ * answer one question — where this agent's files come from and where its
20
+ * sessions go — and none of them exists in Deep Agents.
21
+ */
22
+ export interface AgentWorkspaceParams {
23
+ /**
24
+ * Agent workspace root used by the default filesystem backend. Defaults to
25
+ * the consumer's current working directory (the repository's
26
+ * `examples/customer-support` is the reference workspace).
27
+ */
28
+ rootDir?: string;
29
+ /**
30
+ * Authored mounts as a `CompositeBackend` route table: key → backend, or
31
+ * `{ backend, readOnly }`. A key ending in `/` is a directory mount; a key
32
+ * without one (`"/AGENTS.md"`) is an exact-path file mount. Mounts are
33
+ * read-only unless declared otherwise. Omitted on the default filesystem
34
+ * backend, `defaultMounts(rootDir)` is applied — a convention, not a
35
+ * constraint; spread it to extend. Omitted with a custom `backend`, nothing
36
+ * authored is served: exposing it is an explicit act
37
+ * (`mountSubtree(backend, "skills")`).
38
+ */
39
+ mounts?: Record<string, MountSpec>;
40
+ /**
41
+ * Physical storage for sessions — checkpoints, artifacts, scratchpad and
42
+ * offloaded context. Build one with `createFilesystemSessionStore({ dir })`,
43
+ * `createBackendSessionStore({ backend, prefix? })` or
44
+ * `createMemorySessionStore()`. With the default backend this defaults to a
45
+ * filesystem store at `<rootDir>/sessions`; with a custom `backend` it is
46
+ * required — assembly throws `SessionStoreRequiredError` rather than inferring
47
+ * storage.
48
+ */
49
+ sessionStore?: SessionStore;
50
+ }
51
+ /**
52
+ * Parameters for {@link createAgent}.
53
+ *
54
+ * Every concept shared with LangChain Deep Agents keeps **Deep Agents' own name
55
+ * and meaning** — `model`, `tools`, `systemPrompt`, `middleware`,
56
+ * `backend`, `skills`, `checkpointer`, `store`, `interruptOn`, `name` — so a
57
+ * `createDeepAgent` call ports by changing only the import, with one recorded
58
+ * exception: there is no `subagents` parameter. An agent-facing subagent is not
59
+ * a concept the archmax harness offers — grading is a **rubric** declared in `workflow.yaml`
60
+ * and delegating work is a **sub-workflow** — so `task` is disclosed to no
61
+ * state. The harness's concerns are otherwise strictly additive: `workflow`
62
+ * (governance), `workspace` (file composition), `authoring` (the
63
+ * governance-plane backend), and the extension points below.
64
+ */
65
+ export interface CreateAgentParams {
66
+ /** Chat model; defaults to the env-configured OpenAI-compatible model. */
67
+ model?: BaseChatModel;
68
+ /**
69
+ * Extra tools bound to the agent alongside the built-in sandbox and control
70
+ * tools — e.g. resolved connector/MCP capabilities (see `toolsFromMap`).
71
+ * Workflow governance still gates which of these the agent may call at any
72
+ * given point; this only makes them exist as invokable functions.
73
+ */
74
+ tools?: StructuredTool[];
75
+ /** Appended after the workspace's `AGENTS.md` in the system prompt. */
76
+ systemPrompt?: string;
77
+ /** Extra middleware appended after the runtime's own — the workflow instrumentation when governed (e.g. test mocks). Honoured on both paths. */
78
+ middleware?: AgentMiddleware[];
79
+ /**
80
+ * Declares that authored content comes from somewhere other than the local
81
+ * filesystem root — a store, sandbox, or remote Deep Agents backend. This
82
+ * backend reaches the workspace only through `workspace.mounts`, and its
83
+ * presence withdraws every zero-config default, so `workspace.sessionStore`
84
+ * becomes required.
85
+ */
86
+ backend?: BackendProtocolV2;
87
+ /**
88
+ * Where the workspace's skills live, as **sources** read through the backend
89
+ * — a parent directory of bundles (`"skills/"`) or a single bundle. Defaults
90
+ * to `DEFAULT_SKILL_SOURCES` (`["skills/"]`). Pass `[]` for a workspace with
91
+ * no skills.
92
+ */
93
+ skills?: string[];
94
+ /**
95
+ * LangGraph checkpointer — the custom-adapter escape hatch. Defaults to a
96
+ * `BackendCheckpointSaver` that persists each session durably through the
97
+ * session store (`<sessionId>/checkpoints/`), so sessions survive restarts
98
+ * and can be listed and resumed. Supply a `MemorySaver` for ephemeral runs.
99
+ */
100
+ checkpointer?: BaseCheckpointSaver;
101
+ /** LangGraph store, passed through to the framework untouched. */
102
+ store?: CreateDeepAgentParams["store"];
103
+ /**
104
+ * Framework-level interrupt configuration, passed through untouched. Distinct
105
+ * from a workflow `type: human` state, which parks through the machine.
106
+ */
107
+ interruptOn?: CreateDeepAgentParams["interruptOn"];
108
+ /** Agent name, passed through for tracing and display. */
109
+ name?: string;
110
+ /** Human-readable description, passed through to graph compilation. */
111
+ description?: string;
112
+ /**
113
+ * The governance layer: a named workflow under `workflows/<slug>/`. Omit it
114
+ * and the result is a plain Deep Agent — no machine, no `archmax_advance`, no
115
+ * per-state gating — and `agent.workflow` is `undefined`. A named workflow
116
+ * with no loadable spec throws {@link WorkflowLoadError} rather than silently
117
+ * returning an ungoverned agent.
118
+ *
119
+ * Omitted, the default workflow (`DEFAULT_WORKFLOW`) is still *looked for* on
120
+ * the authoring backend, and governs the agent when found. Pass `false` for an
121
+ * agent that is ungoverned **by declaration**: no spec is read and no rubric
122
+ * discovered, so a stray `workflows/` tree under the resolved root cannot
123
+ * govern it.
124
+ */
125
+ workflow?: string | false;
126
+ /** Where files come from and where sessions go. See {@link AgentWorkspaceParams}. */
127
+ workspace?: AgentWorkspaceParams;
128
+ /**
129
+ * Backend serving the **authored governance plane** — machine specs,
130
+ * `WORKFLOW.md` prose, lifecycle hook scripts, and cases. The agent's
131
+ * workspace composite has no route to them. Defaults to `backend` when one is
132
+ * supplied, else a filesystem backend over the resolved root. Handing it to a
133
+ * *writable* mount fails assembly (`AuthoringPlaneExposedError`).
134
+ */
135
+ authoring?: BackendProtocolV2;
136
+ /** How a session is started when a turn names no trigger. Defaults to `{ id: "manual" }`. */
137
+ trigger?: TriggerInput;
138
+ /**
139
+ * Variables seeded before any turn, keyed by name. Every seed is **locked**:
140
+ * a host-supplied fact is exactly what a `${{name}}` guard should bind to. The
141
+ * same seeds a delivery carries, the CLI takes (`--variables`) and a delegation
142
+ * hands a child — one concept, one name.
143
+ */
144
+ variables?: Record<string, unknown>;
145
+ /**
146
+ * Where a firing's session id lives, as a dotted path over the variables
147
+ * (`triggers.-1.conversationId`) — the same form a `triggers` entry declares,
148
+ * applied to every firing this assembly resolves.
149
+ */
150
+ sessionPath?: string;
151
+ /**
152
+ * Supplies the chat model per role (`agent`, `judge`, `subagent`) so the
153
+ * runtime can run against any LangChain `BaseChatModel`. When both `model`
154
+ * and `modelFactory` are given, `model` wins for the agent role.
155
+ */
156
+ modelFactory?: ModelFactory;
157
+ /**
158
+ * Tool names to treat as always-on: disclosed and permitted in every state,
159
+ * like the file tools. A per-state `tools.allow` entry naming one still
160
+ * narrows it, and the safety/policy rules still bind.
161
+ */
162
+ essentialTools?: string[];
163
+ /**
164
+ * Custom governance rules inserted after the non-overridable safety rules and
165
+ * the workflow `policy` rules, before the per-state `allow` defaults. A custom
166
+ * rule may block a call a state would permit; it cannot loosen a safety rule.
167
+ */
168
+ policyRules?: GovernanceRule[];
169
+ /**
170
+ * Custom lifecycle hook-kind executors, registered alongside `script` and
171
+ * `subagent`. Registering one under a built-in kind fails assembly.
172
+ */
173
+ hookExecutors?: Record<string, HookExecutor>;
174
+ /** Script-execution backend for the sandbox tools and lifecycle scripts. Defaults to QuickJS. */
175
+ sandboxRuntime?: SandboxRuntime;
176
+ /**
177
+ * Lifecycle event subscriber. When supplied, every runtime diagnostic is
178
+ * delivered here as a typed event and the runtime writes nothing to the
179
+ * console; when omitted, a default console subscriber renders them.
180
+ */
181
+ onEvent?: WorkflowEventHandler;
182
+ /** Provider prompt caching for the stable prompt prefix (on by default, 5-minute lifetime). */
183
+ promptCache?: PromptCacheOptions;
184
+ /**
185
+ * Token prices in USD per 1M tokens, keyed by model id (`default` applies to
186
+ * any). Makes `costUsd` appear on usage events, in artifacts and in the CLI
187
+ * footer; without pricing, cost is omitted — never guessed.
188
+ */
189
+ pricing?: PricingTable;
190
+ }
191
+ /** Assemble an agent. See the module note. */
192
+ export declare function createAgent(params?: CreateAgentParams): Promise<Agent>;
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Assembly: `createAgent` and its parameters.
3
+ *
4
+ * Takes Deep Agents' parameters verbatim and adds `workflow`: omit it for a
5
+ * plain Deep Agent, supply it and the same agent is governed by that machine.
6
+ * Every file the assembly reads — machine spec, system prompt, hook scripts,
7
+ * scripts — is served through a configured backend, never via direct `fs`, and
8
+ * the authored governance plane is served by a *separate* backend the agent's
9
+ * workspace has no route to.
10
+ */
11
+ import { randomUUID } from "node:crypto";
12
+ import { mergeConfigs } from "@langchain/core/runnables";
13
+ import { AGENT_DEFAULT_CONFIG, ArchmaxAgent, } from "../agent.js";
14
+ import { consoleEventHandler, createWorkflowEventEmitter } from "../core/events.js";
15
+ import { DEFAULT_SKILL_SOURCES, discoverSkills, skillPrefixes } from "../core/skills.js";
16
+ import { createUsageTracker } from "../core/usage.js";
17
+ import { createWorkspaceContext } from "../core/workspace-context.js";
18
+ import { createChatModel, loadDotenv, loadEnv, loadPricingEnv, } from "../env.js";
19
+ import { loadMachineSpec, WorkflowDisabledError, WorkflowLoadError, } from "../machine/load-spec.js";
20
+ import { WorkflowMachine } from "../machine/machine.js";
21
+ import { assertNoReservedToolNames } from "../machine/tool-names.js";
22
+ import { DEFAULT_TRIGGER_ID, resolveTrigger } from "../machine/triggers.js";
23
+ import { buildSeededVariables } from "../machine/variables.js";
24
+ import { isRuntimeContractSupported, resolveRuntimeContract, UnsupportedRuntimeContractError, } from "../runtime/contract.js";
25
+ import { rubricsAsSubagents, rubricsFromSpec } from "../rubrics/rubrics.js";
26
+ import { createArtifactEmitter, createSessionOperations, createSpecSnapshotReader, } from "../sessions/operations.js";
27
+ import { resolveSession } from "../sessions/resolve.js";
28
+ import { decide, deliver, EmptyMessageError, outcomeOf, reply, resume, settle } from "../sessions/resume.js";
29
+ import { BackendCheckpointSaver } from "../workflow/checkpointer.js";
30
+ import { DEFAULT_WORKFLOW, workflowPaths } from "../workflow/paths.js";
31
+ import { createPlainTurnRunner } from "../workflow/turn-runner.js";
32
+ import { composeGoverned, renderSystemPrompt, sessionBinder } from "./compose.js";
33
+ import { createDelegationRegistry } from "./delegation-registry.js";
34
+ import { composePlain } from "./plain.js";
35
+ /** Assemble an agent. See the module note. */
36
+ export async function createAgent(params = {}) {
37
+ const workspaceParams = params.workspace ?? {};
38
+ loadDotenv(workspaceParams.rootDir);
39
+ // The namespace is a guarantee, not a convention: a host tool wearing it is
40
+ // refused before anything is assembled, on both paths.
41
+ assertNoReservedToolNames(params.tools);
42
+ // `false` declares the agent ungoverned: nothing is looked for. Otherwise a
43
+ // named workflow — or the default — is read off the authoring backend.
44
+ const governed = params.workflow !== false;
45
+ const workflowName = params.workflow === false ? "" : (params.workflow ?? DEFAULT_WORKFLOW);
46
+ const paths = workflowPaths(workflowName);
47
+ // Root resolution and backend selection (session store as the workspace root +
48
+ // read-only authored mounts) are the shared context's. A custom backend without a session store fails here.
49
+ const { backend, workspace, authoring, sessionZone, sessionStore, mountPrefixes } = createWorkspaceContext({
50
+ rootDir: workspaceParams.rootDir,
51
+ backend: params.backend,
52
+ ...(workspaceParams.mounts ? { mounts: workspaceParams.mounts } : {}),
53
+ ...(workspaceParams.sessionStore ? { sessionStore: workspaceParams.sessionStore } : {}),
54
+ ...(params.authoring ? { authoring: params.authoring } : {}),
55
+ });
56
+ // Sessions are durable by default: the checkpointer writes through the
57
+ // session zone, so a session survives restarts and can be listed and resumed.
58
+ const checkpointer = params.checkpointer ?? new BackendCheckpointSaver(workspace);
59
+ // The usage tracker sits in the event chain so a session's totals are known
60
+ // where artifacts are written; every event still reaches `onEvent` (or the
61
+ // console).
62
+ const usage = createUsageTracker({ onEvent: params.onEvent ?? consoleEventHandler });
63
+ const emit = createWorkflowEventEmitter((event) => usage.handler(event));
64
+ // Load the machine spec once from workflow.yaml (the sole spec source).
65
+ const loaded = governed
66
+ ? await loadMachineSpec(authoring, paths)
67
+ : { spec: null, issues: [], lint: [], body: "", specFile: paths.workflowYaml, usable: false };
68
+ for (const issue of [...loaded.issues, ...loaded.lint]) {
69
+ if (issue.kind !== "missing")
70
+ emit({ type: "warning", scope: "workflow", message: issue.message });
71
+ }
72
+ // Grading rubrics come from the spec that was just loaded — no directory to
73
+ // list, no file format to parse, and nothing to merge: a grader is declared on
74
+ // the hook that applies it, so it arrives with the machine and is scoped to it.
75
+ const rubrics = rubricsFromSpec(loaded.spec ?? { states: {} });
76
+ // Skills are discovered once; the resolved registry is the single input to
77
+ // what the kernel refuses, what the prompt names, and what a listing returns.
78
+ const skillSources = params.skills ?? [...DEFAULT_SKILL_SOURCES];
79
+ const skillRegistry = await discoverSkills(workspace, skillSources, emit);
80
+ const machine = loaded.usable && loaded.spec
81
+ ? WorkflowMachine.fromSpec(loaded.spec, params.essentialTools)
82
+ : null;
83
+ // Fail closed when governance was requested but cannot be loaded. The plain
84
+ // agent remains for the unrequested-default case with no definition, and for
85
+ // `workflow: false`.
86
+ if (!machine && governed) {
87
+ const fileMissing = loaded.issues.some((i) => i.kind === "missing");
88
+ if (!fileMissing)
89
+ throw new WorkflowLoadError(workflowName, loaded.specFile, "no valid machine spec");
90
+ if (params.workflow !== undefined) {
91
+ throw new WorkflowLoadError(workflowName, paths.workflowYaml, "no workflow.yaml found");
92
+ }
93
+ }
94
+ // Enforce the runtime contract before any model-driven work.
95
+ const runtimeContract = resolveRuntimeContract(machine?.spec.runtime);
96
+ if (machine && !isRuntimeContractSupported(runtimeContract)) {
97
+ throw new UnsupportedRuntimeContractError(runtimeContract);
98
+ }
99
+ // Models per role. `env` is a thunk, so `.env` variables are required only by
100
+ // what actually reads them: a caller supplying an explicit `model` never loads it.
101
+ let cachedEnv;
102
+ const env = () => (cachedEnv ??= loadEnv());
103
+ const model = params.model ?? (params.modelFactory ? params.modelFactory("agent", env) : createChatModel());
104
+ // The model a *state* runs on: a workflow may name an id at either position
105
+ // (`settings.model`, a state's `model`), resolved through the same factory seam
106
+ // as every other model and memoized per distinct id, so one model is built per
107
+ // id per assembly however many turns run on it.
108
+ //
109
+ // An explicit `model` outranks every declared id: a host that constructed an
110
+ // instance means it, and the SDK cannot rebuild that instance under another id
111
+ // without guessing at its provider. The composition says so once (see
112
+ // `resolveStateModels`) rather than ignoring the declaration in silence.
113
+ const agentModels = new Map([["", model]]);
114
+ const agentModel = (id) => {
115
+ const key = params.model !== undefined ? "" : (id ?? "");
116
+ let resolved = agentModels.get(key);
117
+ if (!resolved) {
118
+ resolved = params.modelFactory
119
+ ? params.modelFactory("agent", env, key)
120
+ : createChatModel({ ...env(), model: key });
121
+ agentModels.set(key, resolved);
122
+ }
123
+ return resolved;
124
+ };
125
+ // Pricing feeds `costUsd` on usage events (host option first, then env).
126
+ const pricing = params.pricing ?? loadPricingEnv();
127
+ // The grader's model: a rubric may name its own id, resolved through the same
128
+ // factory seam as every other model, and memoized per distinct id so one model
129
+ // is built per id per assembly.
130
+ const rubricModels = new Map();
131
+ const rubricModel = (rubric) => {
132
+ const key = rubric.model ?? "";
133
+ if (!rubricModels.has(key)) {
134
+ rubricModels.set(key, params.modelFactory
135
+ ? params.modelFactory("rubric", env, rubric.model)
136
+ : rubric.model !== undefined
137
+ ? createChatModel({ ...env(), model: rubric.model })
138
+ : undefined);
139
+ }
140
+ return rubricModels.get(key);
141
+ };
142
+ const ctx = {
143
+ params,
144
+ workflowName,
145
+ workspace,
146
+ authoring,
147
+ backend,
148
+ sessionZone,
149
+ sessionStore,
150
+ mountPrefixes,
151
+ checkpointer,
152
+ emit,
153
+ usage,
154
+ model,
155
+ agentModel,
156
+ honoursDeclaredModels: params.model === undefined,
157
+ rubrics,
158
+ rubricModel,
159
+ subagents: rubricsAsSubagents(rubrics, rubricModel),
160
+ skillSources,
161
+ skillRegistry,
162
+ skillTable: skillPrefixes(skillRegistry),
163
+ runtimeContract,
164
+ ...(pricing ? { pricing } : {}),
165
+ };
166
+ const systemPrompt = await renderSystemPrompt(ctx, machine, loaded.body, { workflow: workflowName });
167
+ if (skillRegistry.size > 0)
168
+ emit({ type: "skills-loaded", names: [...skillRegistry.keys()] });
169
+ // The session-level members every agent carries, governed or plain.
170
+ const members = (graph, dispose, toolMocks) => ({
171
+ dispose,
172
+ runtimeContract,
173
+ toolMocks,
174
+ emitRunArtifacts: createArtifactEmitter({ graph, machine, workspace, workflowName, runtimeContract, usage, emit }),
175
+ sessions: createSessionOperations({ checkpointer, sessionStore, workspace, mountPrefixes, dispose }),
176
+ getSpecSnapshot: createSpecSnapshotReader(workspace),
177
+ });
178
+ if (!machine) {
179
+ const plain = composePlain(ctx, systemPrompt);
180
+ // Bound like a governed session: `configurable.thread_id` names the session
181
+ // whose zone the agent's id-free paths resolve in.
182
+ const driver = createPlainTurnRunner({ graph: plain.graph, bindSession: sessionBinder(ctx) });
183
+ return new ArchmaxAgent({
184
+ graph: plain.graph,
185
+ members: members(plain.graph, () => { }, plain.toolMocks),
186
+ driver,
187
+ });
188
+ }
189
+ const registry = createDelegationRegistry(ctx, machine);
190
+ const composed = await composeGoverned(ctx, {
191
+ machine,
192
+ workflow: workflowName,
193
+ systemPrompt,
194
+ ...(params.trigger ? { trigger: params.trigger } : {}),
195
+ ...(params.variables ? { variables: params.variables } : {}),
196
+ registry,
197
+ });
198
+ const agentMembers = members(composed.graph, composed.dispose, composed.toolMocks);
199
+ const { resumable, driver } = composed;
200
+ const workflow = {
201
+ name: workflowName,
202
+ machine,
203
+ resolveTrigger: (trigger) => resolveTrigger(machine, trigger),
204
+ decide: (sessionId, resolution) => decide(resumable, sessionId, resolution),
205
+ reply: (sessionId, message) => reply(resumable, sessionId, message),
206
+ respond: (sessionId, message) => reply(resumable, sessionId, message),
207
+ deliver: (sessionId, delivery) => deliver(resumable, sessionId, delivery),
208
+ resolveSession: (input) => resolveSession(machine, {
209
+ // The id *is* the address: one direct projection, no mapping step.
210
+ findSession: (sessionId) => agentMembers.sessions.get(sessionId),
211
+ mintSessionId: () => `session-${randomUUID()}`,
212
+ }, { ...(params.sessionPath ? { sessionPath: params.sessionPath } : {}), ...input }, (message) => emit({ type: "warning", scope: "session", message })),
213
+ send: async (sessionId, input, config) => {
214
+ if ("decision" in input)
215
+ return outcomeOf(await resume(resumable, sessionId, input, config), "decide");
216
+ if ("delivery" in input)
217
+ return outcomeOf(await resume(resumable, sessionId, input, config), "deliver");
218
+ // A turn: the session's disposition decides whether it is a fresh turn, a
219
+ // reply to a person's hold, or a delivery to a waiting park.
220
+ const turn = input;
221
+ const resolved = await workflow.resolveSession({
222
+ sessionId,
223
+ ...(turn.trigger ? { trigger: turn.trigger } : {}),
224
+ ...(turn.variables ? { variables: turn.variables } : {}),
225
+ ...(turn.sessionPath ? { sessionPath: turn.sessionPath } : {}),
226
+ });
227
+ if (resolved.disposition === "reply") {
228
+ return outcomeOf(await resume(resumable, sessionId, { message: turn.message }, config), "reply");
229
+ }
230
+ if (resolved.disposition === "resume") {
231
+ // The person's message travels with the firing rather than being dropped.
232
+ const delivery = {
233
+ trigger: turn.trigger ?? { id: DEFAULT_TRIGGER_ID },
234
+ ...(turn.variables ? { variables: turn.variables } : {}),
235
+ ...(turn.message?.trim() ? { message: turn.message } : {}),
236
+ };
237
+ return outcomeOf(await resume(resumable, sessionId, { delivery }, config), "deliver");
238
+ }
239
+ if (machine.disabled)
240
+ throw new WorkflowDisabledError(workflowName);
241
+ const message = (turn.message ?? "").trim();
242
+ if (!message)
243
+ throw new EmptyMessageError(sessionId);
244
+ const trigger = { id: resolveTrigger(machine, turn.trigger).id };
245
+ const turnConfig = mergeConfigs(AGENT_DEFAULT_CONFIG, config, {
246
+ configurable: { thread_id: sessionId },
247
+ });
248
+ const result = await driver.invoke({
249
+ messages: [{ role: "user", content: message }],
250
+ trigger,
251
+ // Seeded per turn, locked, like a delivery's seeds; the channel's
252
+ // merge keeps the first lock, so a later seed cannot overwrite it.
253
+ ...(turn.variables ? { variables: buildSeededVariables(turn.variables) } : {}),
254
+ }, turnConfig);
255
+ return outcomeOf(settle(result, sessionId), "turn");
256
+ },
257
+ };
258
+ return new ArchmaxAgent({
259
+ graph: composed.graph,
260
+ members: agentMembers,
261
+ driver,
262
+ workflow,
263
+ });
264
+ }
265
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assembly/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type CompiledAgentGraph } from "../core/deepagents.js";
2
+ import { type AssemblyContext } from "./compose.js";
3
+ /** Compose the plain agent: its graph, and whether the host's tool-mock middleware is among its middleware. */
4
+ export declare function composePlain(ctx: AssemblyContext, systemPrompt: string): {
5
+ graph: CompiledAgentGraph;
6
+ toolMocks: boolean;
7
+ };