@namzu/sdk 8.0.0 → 10.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 (104) hide show
  1. package/CHANGELOG.md +244 -0
  2. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  3. package/dist/agents/SupervisorAgent.js +14 -6
  4. package/dist/agents/SupervisorAgent.js.map +1 -1
  5. package/dist/agents/__tests__/a-policy-nobody-can-select.test.d.ts +2 -0
  6. package/dist/agents/__tests__/a-policy-nobody-can-select.test.d.ts.map +1 -0
  7. package/dist/agents/__tests__/a-policy-nobody-can-select.test.js +177 -0
  8. package/dist/agents/__tests__/a-policy-nobody-can-select.test.js.map +1 -0
  9. package/dist/gateway/__tests__/a-knob-nobody-can-turn.test.d.ts +2 -0
  10. package/dist/gateway/__tests__/a-knob-nobody-can-turn.test.d.ts.map +1 -0
  11. package/dist/gateway/__tests__/a-knob-nobody-can-turn.test.js +114 -0
  12. package/dist/gateway/__tests__/a-knob-nobody-can-turn.test.js.map +1 -0
  13. package/dist/gateway/local.d.ts.map +1 -1
  14. package/dist/gateway/local.js +19 -6
  15. package/dist/gateway/local.js.map +1 -1
  16. package/dist/manager/agent/__tests__/lifecycle.test.js +56 -0
  17. package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
  18. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  19. package/dist/manager/agent/lifecycle.js +62 -33
  20. package/dist/manager/agent/lifecycle.js.map +1 -1
  21. package/dist/manager/plan/__tests__/a-plan-that-succeeded-is-not-failed.test.d.ts +2 -0
  22. package/dist/manager/plan/__tests__/a-plan-that-succeeded-is-not-failed.test.d.ts.map +1 -0
  23. package/dist/manager/plan/__tests__/a-plan-that-succeeded-is-not-failed.test.js +73 -0
  24. package/dist/manager/plan/__tests__/a-plan-that-succeeded-is-not-failed.test.js.map +1 -0
  25. package/dist/manager/plan/lifecycle.d.ts +48 -0
  26. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  27. package/dist/manager/plan/lifecycle.js +56 -0
  28. package/dist/manager/plan/lifecycle.js.map +1 -1
  29. package/dist/runtime/query/__tests__/the-plan-graph-reaches-a-host.test.d.ts +2 -0
  30. package/dist/runtime/query/__tests__/the-plan-graph-reaches-a-host.test.d.ts.map +1 -0
  31. package/dist/runtime/query/__tests__/the-plan-graph-reaches-a-host.test.js +62 -0
  32. package/dist/runtime/query/__tests__/the-plan-graph-reaches-a-host.test.js.map +1 -0
  33. package/dist/runtime/query/events.d.ts.map +1 -1
  34. package/dist/runtime/query/events.js +5 -0
  35. package/dist/runtime/query/events.js.map +1 -1
  36. package/dist/runtime/query/index.d.ts +0 -1
  37. package/dist/runtime/query/index.d.ts.map +1 -1
  38. package/dist/runtime/query/index.js +0 -1
  39. package/dist/runtime/query/index.js.map +1 -1
  40. package/dist/runtime/query/iteration/phases/context.d.ts +0 -17
  41. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  42. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  43. package/dist/store/task/disk.d.ts.map +1 -1
  44. package/dist/store/task/disk.js +14 -0
  45. package/dist/store/task/disk.js.map +1 -1
  46. package/dist/store/task/memory.d.ts.map +1 -1
  47. package/dist/store/task/memory.js +14 -0
  48. package/dist/store/task/memory.js.map +1 -1
  49. package/dist/tools/coordinator/__tests__/a-failed-worker-is-not-an-answer.test.d.ts +2 -0
  50. package/dist/tools/coordinator/__tests__/a-failed-worker-is-not-an-answer.test.d.ts.map +1 -0
  51. package/dist/tools/coordinator/__tests__/a-failed-worker-is-not-an-answer.test.js +101 -0
  52. package/dist/tools/coordinator/__tests__/a-failed-worker-is-not-an-answer.test.js.map +1 -0
  53. package/dist/tools/coordinator/__tests__/the-plan-a-human-approves.test.d.ts +2 -0
  54. package/dist/tools/coordinator/__tests__/the-plan-a-human-approves.test.d.ts.map +1 -0
  55. package/dist/tools/coordinator/__tests__/the-plan-a-human-approves.test.js +99 -0
  56. package/dist/tools/coordinator/__tests__/the-plan-a-human-approves.test.js.map +1 -0
  57. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  58. package/dist/tools/coordinator/agent.js +17 -23
  59. package/dist/tools/coordinator/agent.js.map +1 -1
  60. package/dist/tools/coordinator/index.d.ts.map +1 -1
  61. package/dist/tools/coordinator/index.js +33 -3
  62. package/dist/tools/coordinator/index.js.map +1 -1
  63. package/dist/tools/coordinator/outcome.d.ts +60 -0
  64. package/dist/tools/coordinator/outcome.d.ts.map +1 -0
  65. package/dist/tools/coordinator/outcome.js +68 -0
  66. package/dist/tools/coordinator/outcome.js.map +1 -0
  67. package/dist/types/agent/gateway.d.ts +19 -2
  68. package/dist/types/agent/gateway.d.ts.map +1 -1
  69. package/dist/types/agent/supervisor.d.ts +38 -1
  70. package/dist/types/agent/supervisor.d.ts.map +1 -1
  71. package/dist/types/plan/index.d.ts +26 -0
  72. package/dist/types/plan/index.d.ts.map +1 -1
  73. package/dist/types/run/events.d.ts +17 -0
  74. package/dist/types/run/events.d.ts.map +1 -1
  75. package/dist/types/run/events.js.map +1 -1
  76. package/dist/types/task/index.d.ts +19 -1
  77. package/dist/types/task/index.d.ts.map +1 -1
  78. package/dist/types/task/index.js +10 -1
  79. package/dist/types/task/index.js.map +1 -1
  80. package/package.json +1 -1
  81. package/src/agents/SupervisorAgent.ts +15 -9
  82. package/src/agents/__tests__/a-policy-nobody-can-select.test.ts +202 -0
  83. package/src/gateway/__tests__/a-knob-nobody-can-turn.test.ts +139 -0
  84. package/src/gateway/local.ts +19 -7
  85. package/src/manager/agent/__tests__/lifecycle.test.ts +74 -0
  86. package/src/manager/agent/lifecycle.ts +72 -42
  87. package/src/manager/plan/__tests__/a-plan-that-succeeded-is-not-failed.test.ts +88 -0
  88. package/src/manager/plan/lifecycle.ts +61 -0
  89. package/src/runtime/query/__tests__/the-plan-graph-reaches-a-host.test.ts +79 -0
  90. package/src/runtime/query/events.ts +5 -0
  91. package/src/runtime/query/index.ts +0 -6
  92. package/src/runtime/query/iteration/phases/context.ts +0 -19
  93. package/src/store/task/disk.ts +15 -0
  94. package/src/store/task/memory.ts +15 -0
  95. package/src/tools/coordinator/__tests__/a-failed-worker-is-not-an-answer.test.ts +133 -0
  96. package/src/tools/coordinator/__tests__/the-plan-a-human-approves.test.ts +121 -0
  97. package/src/tools/coordinator/agent.ts +17 -25
  98. package/src/tools/coordinator/index.ts +33 -3
  99. package/src/tools/coordinator/outcome.ts +70 -0
  100. package/src/types/agent/gateway.ts +19 -2
  101. package/src/types/agent/supervisor.ts +40 -1
  102. package/src/types/plan/index.ts +29 -0
  103. package/src/types/run/events.ts +17 -0
  104. package/src/types/task/index.ts +22 -3
@@ -10,7 +10,7 @@ import type { ToolRegistryContract } from '../tool/index.js';
10
10
  import type { VerificationGateConfig } from '../verification/index.js';
11
11
  import type { BaseAgentConfig, BaseAgentResult } from './base.js';
12
12
  import type { AgentFactoryOptions } from './factory.js';
13
- import type { TaskGateway } from './gateway.js';
13
+ import type { SiblingFailurePolicy, TaskGateway } from './gateway.js';
14
14
  import type { AgentManagerContract } from './manager.js';
15
15
  import type { WorkingMemoryProvider } from './working-memory.js';
16
16
  export interface SupervisorAgentConfig extends BaseAgentConfig {
@@ -64,6 +64,43 @@ export interface SupervisorAgentConfig extends BaseAgentConfig {
64
64
  * @deprecated Set `maxDepth` on the `AgentManagerConfig` instead.
65
65
  */
66
66
  maxDepth?: number;
67
+ /**
68
+ * How many tools may execute at once in one turn — which, for a
69
+ * supervisor, is how wide a fan-out actually runs.
70
+ *
71
+ * The kernel has honoured this all along and `ReactiveAgent` forwards it.
72
+ * It was missing here, so the agent whose entire job is delegation could
73
+ * not set the gate that bounds delegation, while the agent that does not
74
+ * delegate could. A host wanting a narrower fan-out had to reach past the
75
+ * supervisor to `drainQuery`.
76
+ *
77
+ * Absent leaves the kernel default. Note what it does and does not bound:
78
+ * it limits how many delegated children run CONCURRENTLY, not how many a
79
+ * turn may launch — a model that emits twenty `create_task` blocks still
80
+ * launches twenty, and they queue.
81
+ */
82
+ maxToolConcurrency?: number;
83
+ /**
84
+ * What a failed child means for the siblings still running. Defaults to
85
+ * `'continue'`.
86
+ *
87
+ * `LocalTaskGateway` has honoured this since it was written, and the
88
+ * cancellation machinery behind `'cancel-siblings'` is complete — but the
89
+ * policy was a constructor argument on a gateway the supervisor builds
90
+ * itself, and the supervisor passed nothing. So every host in existence
91
+ * ran `'continue'`, and the only way to reach the other value was to
92
+ * construct the gateway by hand and hand it in. A policy nobody can select
93
+ * is not a policy.
94
+ *
95
+ * `'continue'` stays the default deliberately: partial results are usually
96
+ * worth having, and tearing down healthy siblings on any failure lets one
97
+ * flaky child waste four good ones. `'cancel-siblings'` is for a fan-out
98
+ * whose parts only mean something together — if one leg of a comparison
99
+ * dies, the others are spending budget on an answer nobody can use.
100
+ *
101
+ * Ignored when the host supplies its own `gateway`, which owns its policy.
102
+ */
103
+ siblingFailurePolicy?: SiblingFailurePolicy;
67
104
  taskRouter?: TaskRouterConfig;
68
105
  factoryOptions?: AgentFactoryOptions;
69
106
  advisory?: AdvisoryConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/types/agent/supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC7D,QAAQ,EAAE,WAAW,CAAA;IAErB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAE5B,YAAY,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAEhB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAE7B,cAAc,CAAC,EAAE,mBAAmB,CAAA;IAEpC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IAEzC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAEnC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC7C;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC7D,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CAClB"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/types/agent/supervisor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC7D,QAAQ,EAAE,WAAW,CAAA;IAErB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAE5B,YAAY,EAAE,MAAM,CAAA;IAEpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAEhB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAE3C,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAE7B,cAAc,CAAC,EAAE,mBAAmB,CAAA;IAEpC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IAEzC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAEnC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC7C;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC7D,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CAClB"}
@@ -5,6 +5,32 @@ export interface PlanStep {
5
5
  id: string;
6
6
  description: string;
7
7
  toolName?: string;
8
+ /**
9
+ * Which agent this step is to be delegated to, when it is delegated at all.
10
+ *
11
+ * `approve_plan` invites the model to name an agent per step, and that
12
+ * answer was reduced to a boolean: the step got `toolName: 'create_task'`
13
+ * if any agent was named and nothing if not. So the human approving the
14
+ * plan was shown THAT a step delegates and never TO WHOM — while the model
15
+ * had said, and the approval is the one moment where the difference can
16
+ * still be acted on. Approving "delegate this" is not approving "delegate
17
+ * this to the agent with shell access".
18
+ *
19
+ * Typed rather than folded into {@link estimatedInput}, which is `unknown`:
20
+ * an approval gate's whole job is being readable, and a field a host has to
21
+ * cast before it can render is one a host renders wrong or not at all.
22
+ *
23
+ * Absent means the step is the orchestrator's own work, which is what
24
+ * omitting `agent_id` in `approve_plan` says.
25
+ */
26
+ agentId?: string;
27
+ /**
28
+ * **No producer and no reader.** Nothing in the SDK writes this and
29
+ * nothing reads it; it is declared here and that is all. Noted rather
30
+ * than removed because it is on the published typings — see
31
+ * {@link agentId}, which is the field the plan approval path actually
32
+ * needed and did not have.
33
+ */
8
34
  estimatedInput?: unknown;
9
35
  dependsOn: string[];
10
36
  status: 'pending' | 'running' | 'completed' | 'skipped' | 'failed';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/plan/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,MAAM,UAAU,GACnB,YAAY,GACZ,OAAO,GACP,kBAAkB,GAClB,UAAU,GACV,UAAU,GACV,WAAW,GACX,WAAW,GACX,QAAQ,CAAA;AAEX,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEhE;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/plan/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,MAAM,UAAU,GACnB,YAAY,GACZ,OAAO,GACP,kBAAkB,GAClB,UAAU,GACV,UAAU,GACV,WAAW,GACX,WAAW,GACX,QAAQ,CAAA;AAEX,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEhE;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B"}
@@ -441,6 +441,21 @@ type CoreRunEvent = {
441
441
  taskId: TaskId;
442
442
  subject: string;
443
443
  status: TaskStatus;
444
+ /**
445
+ * What this unit waits on, and who claims it.
446
+ *
447
+ * The store maintains a full dependency graph — `blocks` and
448
+ * `blockedBy` are mirrored on both ends, written under a lock, and
449
+ * deadlock-avoided — and none of it reached the wire. So a host
450
+ * could show a flat list of units and nothing about their order,
451
+ * while the model was already maintaining the order.
452
+ *
453
+ * Absent rather than empty when the unit depends on nothing, so a
454
+ * reader can tell "no dependencies" from an emitter that predates
455
+ * these fields.
456
+ */
457
+ blockedBy?: readonly TaskId[];
458
+ owner?: string;
444
459
  } | {
445
460
  type: 'task_updated';
446
461
  runId: RunId;
@@ -448,6 +463,8 @@ type CoreRunEvent = {
448
463
  subject: string;
449
464
  status: TaskStatus;
450
465
  owner?: string;
466
+ /** See `task_created`. Carried on updates because an edge can be added later. */
467
+ blockedBy?: readonly TaskId[];
451
468
  } | {
452
469
  type: 'plugin_hook_executing';
453
470
  runId: RunId;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/run/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/run/events.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/types/run/events.ts"],"names":[],"mappings":"AAymBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,qBAAqB,GAAkC,IAAI,GAAG,CAAmB;IACtF,YAAY;IACZ,kBAAkB;IAClB,mEAAmE;IACnE,6CAA6C;IAC7C,iBAAiB;IACjB,sEAAsE;IACtE,uEAAuE;IACvE,oCAAoC;IACpC,eAAe;CACf,CAAC,CAAA;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAe;IAC/C,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/types/run/events.ts"],"names":[],"mappings":"AA0nBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,qBAAqB,GAAkC,IAAI,GAAG,CAAmB;IACtF,YAAY;IACZ,kBAAkB;IAClB,mEAAmE;IACnE,6CAA6C;IAC7C,iBAAiB;IACjB,sEAAsE;IACtE,uEAAuE;IACvE,oCAAoC;IACpC,eAAe;CACf,CAAC,CAAA;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAe;IAC/C,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC"}
@@ -1,5 +1,23 @@
1
1
  import type { RunId, TaskId, TenantId } from '../ids/index.js';
2
- export type TaskStatus = 'pending' | 'in_progress' | 'completed';
2
+ /**
3
+ * `failed` exists because a unit that did not succeed had nowhere to say so.
4
+ *
5
+ * Delegation wrote a failed worker's task as `completed` with the failure
6
+ * encoded as prose in `description` — so a reader scanning statuses saw work
7
+ * that had been done, and only a reader of every description saw otherwise. A
8
+ * status nobody can set is a status nobody can act on: a dependent unit cannot
9
+ * decide whether to wait or give up, and a plan cannot report that it did not
10
+ * finish.
11
+ */
12
+ export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
13
+ /**
14
+ * Terminal means "will not change on its own", not "succeeded".
15
+ *
16
+ * `failed` is terminal for the same reason `completed` is: nothing downstream
17
+ * should wait on it. That matters most to the blocker check in the task
18
+ * listing — a dependent unit blocked on something that failed would otherwise
19
+ * wait forever for a status that will never arrive.
20
+ */
3
21
  export declare function isTerminalTaskStatus(status: TaskStatus): boolean;
4
22
  export declare function assertTaskStatus(status: TaskStatus): void;
5
23
  export interface Task {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/task/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/task/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,20 @@
1
+ /**
2
+ * Terminal means "will not change on its own", not "succeeded".
3
+ *
4
+ * `failed` is terminal for the same reason `completed` is: nothing downstream
5
+ * should wait on it. That matters most to the blocker check in the task
6
+ * listing — a dependent unit blocked on something that failed would otherwise
7
+ * wait forever for a status that will never arrive.
8
+ */
1
9
  export function isTerminalTaskStatus(status) {
2
- return status === 'completed';
10
+ return status === 'completed' || status === 'failed';
3
11
  }
4
12
  export function assertTaskStatus(status) {
5
13
  switch (status) {
6
14
  case 'pending':
7
15
  case 'in_progress':
8
16
  case 'completed':
17
+ case 'failed':
9
18
  return;
10
19
  default: {
11
20
  const _exhaustive = status;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/task/index.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACtD,OAAO,MAAM,KAAK,WAAW,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IAClD,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW;YACf,OAAM;QACP,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,WAAW,GAAU,MAAM,CAAA;YACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAA;QACtD,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/task/index.ts"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACtD,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IAClD,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAM;QACP,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,WAAW,GAAU,MAAM,CAAA;YACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAA;QACtD,CAAC;IACF,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/sdk",
3
- "version": "8.0.0",
3
+ "version": "10.0.0",
4
4
  "description": "Open-source AI agent SDK with a built-in runtime. Nothing between you and your agents.",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "type": "module",
@@ -3,7 +3,6 @@ import { CompletionInbox } from '../gateway/completion-inbox.js'
3
3
  import { LocalTaskGateway } from '../gateway/local.js'
4
4
  import { ToolNameCollisionError, ToolRegistry } from '../registry/tool/execute.js'
5
5
  import { drainQuery } from '../runtime/query/index.js'
6
- import type { LaunchedTaskMeta } from '../runtime/query/iteration/phases/context.js'
7
6
  import { PendingAnswers, QuestionParkBinding } from '../runtime/query/question-park.js'
8
7
  import { buildCoordinatorTools } from '../tools/coordinator/index.js'
9
8
  import type { TaskGateway, TaskHandle } from '../types/agent/gateway.js'
@@ -15,7 +14,7 @@ import type {
15
14
  SupervisorAgentResult,
16
15
  } from '../types/agent/index.js'
17
16
  import type { AgentTaskContext } from '../types/agent/task.js'
18
- import type { AgentId, RunId, TaskId } from '../types/ids/index.js'
17
+ import type { AgentId, RunId } from '../types/ids/index.js'
19
18
  import { deriveChildState } from '../types/invocation/index.js'
20
19
  import type { RunEventListener } from '../types/run/index.js'
21
20
  import type { ActorRef } from '../types/session/actor.js'
@@ -159,13 +158,18 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
159
158
  projectId,
160
159
  parentActor,
161
160
  }
162
- gateway = new LocalTaskGateway(config.agentManager, taskContext, listener, input)
161
+ // The only hop between the config and the gateway's policy. Omit it
162
+ // and the field is settable, documented, and read by nothing —
163
+ // which is exactly the state it was in before.
164
+ gateway = new LocalTaskGateway(config.agentManager, taskContext, listener, input, {
165
+ ...(config.siblingFailurePolicy
166
+ ? { siblingFailurePolicy: config.siblingFailurePolicy }
167
+ : {}),
168
+ })
163
169
  } else {
164
170
  throw new Error("SupervisorAgentConfig requires either 'gateway' or 'agentManager'")
165
171
  }
166
172
 
167
- const launchedTasks = new Map<TaskId, LaunchedTaskMeta>()
168
-
169
173
  let planManagerRef: import('../manager/plan/lifecycle.js').PlanManager | undefined
170
174
 
171
175
  // Created here because the TOOLS are created here: the durability
@@ -205,9 +209,6 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
205
209
  taskStore: input.taskStore,
206
210
  runId,
207
211
  getPlanManager: () => planManagerRef,
208
- onTaskLaunched: (agentTaskId, meta) => {
209
- launchedTasks.set(agentTaskId, meta)
210
- },
211
212
  // With a resume handler present the coordinator surface gains
212
213
  // ask_user_question — the model can park the run on a question
213
214
  // routed through the same HITL channel as plan approvals.
@@ -300,6 +301,12 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
300
301
  },
301
302
  questionParks,
302
303
  pendingAnswers,
304
+ // How wide a fan-out actually runs. Absent leaves the kernel
305
+ // default — the same forwarding ReactiveAgent has always done,
306
+ // missing from the one agent whose job is delegation.
307
+ ...(config.maxToolConcurrency !== undefined
308
+ ? { maxToolConcurrency: config.maxToolConcurrency }
309
+ : {}),
303
310
  agentId: this.metadata.id,
304
311
  agentName: this.metadata.name,
305
312
  workingDirectory: input.workingDirectory,
@@ -321,7 +328,6 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
321
328
  runtimeContext: input.runtimeContext,
322
329
  taskGateway: gateway,
323
330
  completionInbox,
324
- launchedTasks,
325
331
  advisory: config.advisory,
326
332
  invocationState: childInvocationState,
327
333
  // HITL surface: forward optional review-time hooks so hosts can
@@ -0,0 +1,202 @@
1
+ import { mkdtemp } from 'node:fs/promises'
2
+ import { tmpdir } from 'node:os'
3
+ import { join } from 'node:path'
4
+ import { describe, expect, it } from 'vitest'
5
+
6
+ import { MockLLMProvider, registerMock } from '../../provider/index.js'
7
+ import { ToolRegistry } from '../../registry/index.js'
8
+ import type { Agent } from '../../types/agent/core.js'
9
+ import type { SiblingFailurePolicy } from '../../types/agent/gateway.js'
10
+ import type { AgentManagerContract } from '../../types/agent/manager.js'
11
+ import type {
12
+ AgentTask,
13
+ AgentTaskContext,
14
+ AgentTaskState,
15
+ SendMessageOptions,
16
+ } from '../../types/agent/task.js'
17
+ import type { RunId, TaskId } from '../../types/ids/index.js'
18
+ import { SupervisorAgent } from '../SupervisorAgent.js'
19
+
20
+ /**
21
+ * `'cancel-siblings'` was unreachable from every entry point.
22
+ *
23
+ * `LocalTaskGateway` has honoured the policy since it was written and the
24
+ * cancellation machinery behind it is complete — but the policy was the fifth
25
+ * constructor argument of a gateway the supervisor builds itself, and the
26
+ * supervisor passed four. So every host in existence ran `'continue'`, and the
27
+ * only way to reach the other value was to construct the gateway by hand and
28
+ * hand it in through `config.gateway`. A policy nobody can select is not a
29
+ * policy, and the tests it had all constructed the gateway directly, so they
30
+ * passed while nothing upstream could turn it on.
31
+ *
32
+ * The assertion is deliberately the cancellation itself. Asserting that the run
33
+ * completed would pass with the forwarding deleted — a fan-out under
34
+ * `'continue'` completes too — and prove nothing.
35
+ */
36
+
37
+ registerMock()
38
+
39
+ const FAILING = 'doomed' as const
40
+ const SLOW = 'patient' as const
41
+
42
+ /**
43
+ * A manager whose slow child only settles when someone cancels it — which is
44
+ * what an abort actually does, and what lets this run terminate at all.
45
+ */
46
+ class FanOutManager implements AgentManagerContract {
47
+ readonly cancelled: TaskId[] = []
48
+ private readonly tasks = new Map<TaskId, AgentTask>()
49
+ private releaseSlow?: () => void
50
+ private readonly slowSettled = new Promise<void>((resolve) => {
51
+ this.releaseSlow = resolve
52
+ })
53
+ private markLaunched?: () => void
54
+ /**
55
+ * The doomed child does not settle until BOTH have launched.
56
+ *
57
+ * Without this the test is a race it usually wins: the sibling policy only
58
+ * cancels tasks the gateway is already tracking, so if the failure lands
59
+ * before the slow child finishes registering, nothing is cancelled, nothing
60
+ * releases the slow child, and the run hangs until the delegation timeout.
61
+ * That happened once here. A fan-out where one leg dies while another is
62
+ * genuinely in flight is the scenario being tested, so the harness states
63
+ * it instead of hoping for it.
64
+ */
65
+ private readonly bothLaunched = new Promise<void>((resolve) => {
66
+ this.markLaunched = resolve
67
+ })
68
+
69
+ async sendMessage(options: SendMessageOptions): Promise<AgentTask> {
70
+ const failing = options.agentId === FAILING
71
+ const taskId = (failing ? 'task_doomed' : 'task_patient') as TaskId
72
+ const task = {
73
+ taskId,
74
+ agentId: options.agentId,
75
+ agent: {} as Agent<never, never>,
76
+ childAbortController: new AbortController(),
77
+ context: {} as AgentTaskContext,
78
+ // The failing child is `completed` at the gateway layer and
79
+ // `failed` in its own result — the two-authority split that makes
80
+ // this worth checking at all.
81
+ state: (failing ? 'completed' : 'running') as AgentTaskState,
82
+ pendingMessages: [],
83
+ createdAt: 1,
84
+ ...(failing
85
+ ? { result: { runId: 'run_child' as RunId, status: 'failed', result: 'it broke' } }
86
+ : {}),
87
+ } as AgentTask
88
+
89
+ this.tasks.set(taskId, task)
90
+ if (this.tasks.size === 2) this.markLaunched?.()
91
+ return task
92
+ }
93
+
94
+ cancel(taskId: TaskId): void {
95
+ this.cancelled.push(taskId)
96
+ const task = this.tasks.get(taskId)
97
+ if (task) task.state = 'failed' as AgentTaskState
98
+ this.releaseSlow?.()
99
+ }
100
+
101
+ async waitForCompletion(taskId: TaskId): Promise<void> {
102
+ if (taskId === ('task_patient' as TaskId)) await this.slowSettled
103
+ // The doomed child fails only once its sibling is actually in flight —
104
+ // see `bothLaunched`. Registration happens inside `createTask` right
105
+ // after `sendMessage` returns, so waiting a further microtask turn is
106
+ // what puts this after it rather than racing it.
107
+ else {
108
+ await this.bothLaunched.then(() => undefined)
109
+ // Safety valve, and it is what makes a REGRESSION legible. If the
110
+ // policy never reaches the gateway, nothing cancels the slow child
111
+ // and this run hangs until the delegation timeout — so the test
112
+ // would report "timed out after 60s" instead of "the sibling was
113
+ // not cancelled". Releasing it here means the assertion below is
114
+ // what fails, and it fails in a second.
115
+ setTimeout(() => this.releaseSlow?.(), 250).unref?.()
116
+ }
117
+ }
118
+
119
+ getInstance(taskId: TaskId): AgentTask | undefined {
120
+ return this.tasks.get(taskId)
121
+ }
122
+
123
+ cancelAll(): void {}
124
+ async continueTask(): Promise<void> {}
125
+ queueMessage(): void {}
126
+ drainMessages() {
127
+ return []
128
+ }
129
+ listByParent(): AgentTask[] {
130
+ return []
131
+ }
132
+ listActive(): AgentTask[] {
133
+ return []
134
+ }
135
+ getState(): AgentTaskState | undefined {
136
+ return undefined
137
+ }
138
+ on(): void {}
139
+ off(): void {}
140
+ cleanup(): void {}
141
+ dispose(): void {}
142
+ }
143
+
144
+ async function fanOut(policy?: SiblingFailurePolicy): Promise<FanOutManager> {
145
+ const agentManager = new FanOutManager()
146
+ const agent = new SupervisorAgent({
147
+ id: 'sup_policy',
148
+ name: 'Supervisor',
149
+ version: '1',
150
+ category: 'test',
151
+ description: 'coordinates workers',
152
+ })
153
+
154
+ await agent.run(
155
+ {
156
+ messages: [{ role: 'user', content: 'go', timestamp: 1 }],
157
+ workingDirectory: await mkdtemp(join(tmpdir(), 'namzu-sibling-policy-')),
158
+ } as never,
159
+ {
160
+ provider: new MockLLMProvider({
161
+ turns: [
162
+ {
163
+ toolCalls: [
164
+ {
165
+ name: 'create_task',
166
+ args: { agent_id: SLOW, prompt: 'long work', description: 'the patient one' },
167
+ },
168
+ {
169
+ name: 'create_task',
170
+ args: { agent_id: FAILING, prompt: 'doomed work', description: 'the doomed one' },
171
+ },
172
+ ],
173
+ },
174
+ { text: 'done' },
175
+ ],
176
+ }),
177
+ agentIds: [SLOW, FAILING],
178
+ agentManager,
179
+ tools: new ToolRegistry(),
180
+ systemPrompt: 'You coordinate.',
181
+ model: 'mock-model',
182
+ tokenBudget: 100_000,
183
+ timeoutMs: 30_000,
184
+ maxIterations: 3,
185
+ sessionId: 'ses_policy',
186
+ threadId: 'thd_policy',
187
+ projectId: 'prj_policy',
188
+ tenantId: 'tnt_policy',
189
+ ...(policy ? { siblingFailurePolicy: policy } : {}),
190
+ } as never,
191
+ )
192
+
193
+ return agentManager
194
+ }
195
+
196
+ describe('a supervisor can say what a failed child means for its siblings', () => {
197
+ it('reaches the gateway, so cancel-siblings actually stops the rest', async () => {
198
+ const manager = await fanOut('cancel-siblings')
199
+
200
+ expect(manager.cancelled).toContain('task_patient' as TaskId)
201
+ }, 60_000)
202
+ })