@autonome-research/thread-phase 3.3.0 → 4.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 (101) hide show
  1. package/dist/agent/index.d.ts +1 -1
  2. package/dist/agent/index.d.ts.map +1 -1
  3. package/dist/agent/index.js +1 -1
  4. package/dist/agent/index.js.map +1 -1
  5. package/dist/agent/parse-json.d.ts +12 -0
  6. package/dist/agent/parse-json.d.ts.map +1 -1
  7. package/dist/agent/parse-json.js +24 -7
  8. package/dist/agent/parse-json.js.map +1 -1
  9. package/dist/agent/runner.d.ts.map +1 -1
  10. package/dist/agent/runner.js +16 -12
  11. package/dist/agent/runner.js.map +1 -1
  12. package/dist/agent-runner.d.ts +1 -1
  13. package/dist/agent-runner.d.ts.map +1 -1
  14. package/dist/agent-runner.js +1 -1
  15. package/dist/agent-runner.js.map +1 -1
  16. package/dist/agents/authoring/index.d.ts +49 -0
  17. package/dist/agents/authoring/index.d.ts.map +1 -0
  18. package/dist/agents/authoring/index.js +56 -0
  19. package/dist/agents/authoring/index.js.map +1 -0
  20. package/dist/agents/event-bus.d.ts +0 -2
  21. package/dist/agents/event-bus.d.ts.map +1 -1
  22. package/dist/agents/event-bus.js +0 -2
  23. package/dist/agents/event-bus.js.map +1 -1
  24. package/dist/agents/index.d.ts +19 -9
  25. package/dist/agents/index.d.ts.map +1 -1
  26. package/dist/agents/index.js +25 -15
  27. package/dist/agents/index.js.map +1 -1
  28. package/dist/agents/inference-adapter.d.ts +0 -3
  29. package/dist/agents/inference-adapter.d.ts.map +1 -1
  30. package/dist/agents/inference-adapter.js +0 -2
  31. package/dist/agents/inference-adapter.js.map +1 -1
  32. package/dist/agents/job-store-bridge.d.ts +0 -3
  33. package/dist/agents/job-store-bridge.d.ts.map +1 -1
  34. package/dist/agents/job-store-bridge.js +0 -2
  35. package/dist/agents/job-store-bridge.js.map +1 -1
  36. package/dist/agents/memory.d.ts +0 -3
  37. package/dist/agents/memory.d.ts.map +1 -1
  38. package/dist/agents/memory.js +0 -1
  39. package/dist/agents/memory.js.map +1 -1
  40. package/dist/agents/protocol.d.ts +0 -15
  41. package/dist/agents/protocol.d.ts.map +1 -1
  42. package/dist/agents/protocol.js +0 -3
  43. package/dist/agents/protocol.js.map +1 -1
  44. package/dist/agents/structured-output.d.ts +16 -5
  45. package/dist/agents/structured-output.d.ts.map +1 -1
  46. package/dist/agents/structured-output.js +16 -3
  47. package/dist/agents/structured-output.js.map +1 -1
  48. package/dist/agents/thread.d.ts +0 -7
  49. package/dist/agents/thread.d.ts.map +1 -1
  50. package/dist/agents/thread.js +0 -6
  51. package/dist/agents/thread.js.map +1 -1
  52. package/dist/agents/with-memory.d.ts +0 -3
  53. package/dist/agents/with-memory.d.ts.map +1 -1
  54. package/dist/agents/with-memory.js +0 -2
  55. package/dist/agents/with-memory.js.map +1 -1
  56. package/dist/agents/with-thread.d.ts +0 -3
  57. package/dist/agents/with-thread.d.ts.map +1 -1
  58. package/dist/agents/with-thread.js +0 -2
  59. package/dist/agents/with-thread.js.map +1 -1
  60. package/dist/helpers/hook.d.ts +34 -2
  61. package/dist/helpers/hook.d.ts.map +1 -1
  62. package/dist/helpers/hook.js +72 -5
  63. package/dist/helpers/hook.js.map +1 -1
  64. package/dist/helpers/index.d.ts +11 -1
  65. package/dist/helpers/index.d.ts.map +1 -1
  66. package/dist/helpers/index.js +11 -1
  67. package/dist/helpers/index.js.map +1 -1
  68. package/dist/index.d.ts +2 -2
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -2
  71. package/dist/index.js.map +1 -1
  72. package/dist/internal/error-message.d.ts +20 -0
  73. package/dist/internal/error-message.d.ts.map +1 -0
  74. package/dist/internal/error-message.js +57 -0
  75. package/dist/internal/error-message.js.map +1 -0
  76. package/dist/messages.d.ts +11 -1
  77. package/dist/messages.d.ts.map +1 -1
  78. package/dist/orchestrator.d.ts +1 -1
  79. package/dist/orchestrator.d.ts.map +1 -1
  80. package/dist/orchestrator.js +14 -1
  81. package/dist/orchestrator.js.map +1 -1
  82. package/dist/patterns/bounded-fanout-of.d.ts +2 -6
  83. package/dist/patterns/bounded-fanout-of.d.ts.map +1 -1
  84. package/dist/patterns/bounded-fanout-of.js +1 -4
  85. package/dist/patterns/bounded-fanout-of.js.map +1 -1
  86. package/dist/patterns/index.d.ts +22 -0
  87. package/dist/patterns/index.d.ts.map +1 -1
  88. package/dist/patterns/index.js +22 -0
  89. package/dist/patterns/index.js.map +1 -1
  90. package/dist/phase.d.ts +3 -0
  91. package/dist/phase.d.ts.map +1 -1
  92. package/dist/phase.js.map +1 -1
  93. package/dist/session/sse.d.ts +5 -1
  94. package/dist/session/sse.d.ts.map +1 -1
  95. package/dist/session/sse.js +56 -16
  96. package/dist/session/sse.js.map +1 -1
  97. package/dist/tools/registry.d.ts +6 -1
  98. package/dist/tools/registry.d.ts.map +1 -1
  99. package/dist/tools/registry.js +2 -2
  100. package/dist/tools/registry.js.map +1 -1
  101. package/package.json +2 -1
@@ -1,6 +1,28 @@
1
1
  /**
2
2
  * Reusable phase patterns. Each pattern is a small, opinionated helper that
3
3
  * captures a recurring shape — not a black-box framework. Compose freely.
4
+ *
5
+ * # API convention
6
+ *
7
+ * Patterns in this barrel use ONE of two signature shapes — pick the one
8
+ * that matches what the pattern returns:
9
+ *
10
+ * - Pattern factories: (name: string, options) => Phase<TCtx>
11
+ * parallelPhases, intentGate, match, whileCondition, subPipeline.
12
+ * Use when you return a Phase. The `name` survives into telemetry
13
+ * and event metadata.
14
+ *
15
+ * - Eager runners: (options) => Promise<T>
16
+ * boundedFanout, boundedFanoutOf.
17
+ * Use when the function executes immediately and returns a Promise.
18
+ * No `name` because there's no Phase identity to attach.
19
+ *
20
+ * `withRetry` is a Phase WRAPPER — (innerPhase, options) => Phase<TCtx> —
21
+ * a minor variant of the factory shape that takes the wrapped phase first.
22
+ *
23
+ * Registration helpers (oneShot/schedule/hook in ../helpers) form a third
24
+ * category with their own convention. See AGENTS.md "API conventions —
25
+ * three factory shapes" for the full rationale.
4
26
  */
5
27
  export { parallelPhases } from './parallel-phases.js';
6
28
  export { boundedFanout, } from './bounded-fanout.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EACL,UAAU,GAIX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,GAEN,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,GAEV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAGf,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EACL,UAAU,GAIX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,GAEN,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,GAEV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAGf,MAAM,mBAAmB,CAAC"}
package/dist/phase.d.ts CHANGED
@@ -66,6 +66,9 @@ export type PipelineEvent = {
66
66
  } | {
67
67
  type: 'done';
68
68
  reason?: string;
69
+ } | {
70
+ type: 'cancelled';
71
+ reason: string;
69
72
  } | {
70
73
  type: 'error';
71
74
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../src/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,yDAAyD;IACzD,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAWD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAcvC,MAAM,WAAW,KAAK,CACpB,IAAI,SAAS,mBAAmB,GAAG,mBAAmB,EACtD,MAAM,GAAG,aAAa;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C;AAMD,wBAAgB,UAAU,CAAC,IAAI,SAAS,mBAAmB,EAAE,CAAC,SAAS,MAAM,IAAI,EAC/E,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,MAAM,GAChB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAStB"}
1
+ {"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../src/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,yDAAyD;IACzD,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAWD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAKjC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAcvC,MAAM,WAAW,KAAK,CACpB,IAAI,SAAS,mBAAmB,GAAG,mBAAmB,EACtD,MAAM,GAAG,aAAa;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C;AAMD,wBAAgB,UAAU,CAAC,IAAI,SAAS,mBAAmB,EAAE,CAAC,SAAS,MAAM,IAAI,EAC/E,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,MAAM,GAChB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAStB"}
package/dist/phase.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"phase.js","sourceRoot":"","sources":["../src/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA6DH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,UAAU,UAAU,CACxB,GAAS,EACT,GAAM,EACN,SAAiB;IAEjB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,IAAI,SAAS,8BAA8B,MAAM,CAAC,GAAG,CAAC,eAAe;YACnE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAA6B,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"phase.js","sourceRoot":"","sources":["../src/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkEH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,UAAU,UAAU,CACxB,GAAS,EACT,GAAM,EACN,SAAiB;IAEjB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,IAAI,SAAS,8BAA8B,MAAM,CAAC,GAAG,CAAC,eAAe;YACnE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAA6B,CAAC;AACvC,CAAC"}
@@ -28,12 +28,16 @@ import type { JobStore } from './job-store.js';
28
28
  import type { JobRunner } from './job-runner.js';
29
29
  /**
30
30
  * Minimal response interface — `http.ServerResponse` and Express's `Response`
31
- * both satisfy this without modification.
31
+ * both satisfy this without modification. `once(drain)` is required for
32
+ * backpressure handling: when `write()` returns false the socket buffer is
33
+ * full and writes must pause until `drain` fires, or memory grows
34
+ * unboundedly behind a slow client.
32
35
  */
33
36
  export interface SSEResponse {
34
37
  write(chunk: string): boolean;
35
38
  end(): void;
36
39
  on(event: 'close', listener: () => void): void;
40
+ once(event: 'drain', listener: () => void): void;
37
41
  }
38
42
  export interface StreamToSSEOptions {
39
43
  runner: JobRunner;
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,iBAAiB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,GAAG,IAAI,IAAI,CAAC;IACZ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,WAAW,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE5E"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,iBAAiB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,GAAG,IAAI,IAAI,CAAC;IACZ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,WAAW,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G5E"}
@@ -41,19 +41,30 @@ export async function streamToSSE(options) {
41
41
  res.on('close', () => {
42
42
  closed = true;
43
43
  });
44
- const writeFrame = (id, type, data) => {
44
+ // Backpressure: when res.write() returns false the socket buffer is full
45
+ // and we must wait for 'drain' before continuing. Without this, slow
46
+ // clients cause unbounded Node-side memory growth as writes accumulate.
47
+ const writeWithBackpressure = async (payload) => {
45
48
  if (closed)
46
- return false;
47
- const payload = `id: ${id}\n` +
49
+ return;
50
+ if (!res.write(payload)) {
51
+ await new Promise((resolve) => res.once('drain', resolve));
52
+ }
53
+ };
54
+ const writeFrame = async (id, type, data) => {
55
+ if (closed)
56
+ return;
57
+ await writeWithBackpressure(`id: ${id}\n` +
48
58
  `event: ${type}\n` +
49
- `data: ${JSON.stringify(data)}\n\n`;
50
- return res.write(payload);
59
+ `data: ${JSON.stringify(data)}\n\n`);
51
60
  };
52
61
  // Step 1: replay anything the client has missed.
53
62
  let lastId = afterId;
54
63
  const replay = await store.getEvents(jobId, afterId);
55
64
  for (const evt of replay) {
56
- writeFrame(evt.id, evt.eventType, evt.data);
65
+ if (closed)
66
+ return;
67
+ await writeFrame(evt.id, evt.eventType, evt.data);
57
68
  lastId = Math.max(lastId, evt.id);
58
69
  }
59
70
  // If the job is already finished and replay covered everything, close.
@@ -62,27 +73,56 @@ export async function streamToSSE(options) {
62
73
  close();
63
74
  return;
64
75
  }
65
- // Step 2: subscribe to live events. Buffer events that arrived during
66
- // replay if their id is past lastId (otherwise they're already sent).
76
+ // Step 2: subscribe to live events. The EventEmitter listener is sync
77
+ // and fire-and-forget by API; we buffer events and drain them serially
78
+ // through writeFrame so backpressure stays honored and ordering is
79
+ // preserved even when multiple events arrive while a write is pending.
67
80
  const channel = `job:${jobId}`;
81
+ const liveBuffer = [];
82
+ let draining = false;
83
+ const drainLive = async () => {
84
+ if (draining)
85
+ return;
86
+ draining = true;
87
+ try {
88
+ while (!closed && liveBuffer.length > 0) {
89
+ const evt = liveBuffer.shift();
90
+ if (evt.id <= lastId)
91
+ continue;
92
+ lastId = evt.id;
93
+ await writeFrame(evt.id, evt.eventType, evt.data);
94
+ if (evt.eventType === 'done' || evt.eventType === 'error') {
95
+ close();
96
+ return;
97
+ }
98
+ }
99
+ }
100
+ finally {
101
+ draining = false;
102
+ }
103
+ };
68
104
  const onLive = (evt) => {
69
105
  if (closed)
70
106
  return;
71
- if (evt.id <= lastId)
72
- return;
73
- lastId = evt.id;
74
- writeFrame(evt.id, evt.eventType, evt.data);
75
- if (evt.eventType === 'done' || evt.eventType === 'error') {
76
- close();
77
- }
107
+ liveBuffer.push(evt);
108
+ // Promise rejection here would be unobserved by the EventEmitter, so
109
+ // catch and swallow — writes that fail close the socket anyway.
110
+ void drainLive().catch(() => {
111
+ /* connection error during drain; close listener will fire */
112
+ });
78
113
  };
79
114
  runner.on(channel, onLive);
80
- // Heartbeat: comment line every N seconds to keep proxies from idling out.
115
+ // Heartbeat: comment line every N seconds to keep proxies from idling
116
+ // out. Skip the heartbeat when the socket is back-pressured rather than
117
+ // queueing — heartbeats are advisory and stale ones are not useful.
81
118
  let heartbeat = null;
82
119
  if (heartbeatMs > 0) {
83
120
  heartbeat = setInterval(() => {
84
121
  if (closed)
85
122
  return;
123
+ // Discard the boolean intentionally: this is a hint, not data.
124
+ // Backpressure is handled by event writes, which will pause the
125
+ // pipeline once drain is pending.
86
126
  res.write(`: keepalive ${Date.now()}\n\n`);
87
127
  }, heartbeatMs);
88
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,14 @@ import type { ToolDefinition, ToolExecutor, ToolResult } from '../messages.js';
19
19
  * Handler signature — receives parsed args plus optional context, returns the
20
20
  * tool's result content as a string. Anything string-shaped works (JSON,
21
21
  * markdown, plain text); the agent sees it raw.
22
+ *
23
+ * `context.signal` is the agent runner's AbortSignal when one was provided.
24
+ * Long-running tools (fetch, subprocess, file I/O) can observe it to cancel
25
+ * cooperatively. Synchronous or fast tools may ignore it.
22
26
  */
23
27
  export type ToolHandler = (args: Record<string, unknown>, context: {
24
28
  toolCallId: string;
29
+ signal?: AbortSignal;
25
30
  }) => Promise<string>;
26
31
  export interface ToolRegistryOptions {
27
32
  /** When false, skip schema validation. Default: true. */
@@ -39,6 +44,6 @@ export declare class ToolRegistry implements ToolExecutor {
39
44
  /** All registered tool definitions, in registration order. Hand to AgentConfig.tools. */
40
45
  definitions(): ToolDefinition[];
41
46
  has(name: string): boolean;
42
- execute(name: string, toolCallId: string, args: Record<string, unknown>): Promise<ToolResult>;
47
+ execute(name: string, toolCallId: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult>;
43
48
  }
44
49
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,KAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AASD,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,GAAG,CAAa;gBAEZ,OAAO,GAAE,mBAAwB;IAI7C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAShE,yFAAyF;IACzF,WAAW,IAAI,cAAc,EAAE;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpB,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC;CA+BvB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAClD,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AASD,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,GAAG,CAAa;gBAEZ,OAAO,GAAE,mBAAwB;IAI7C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAShE,yFAAyF;IACzF,WAAW,IAAI,cAAc,EAAE;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpB,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;CA+BvB"}
@@ -40,7 +40,7 @@ export class ToolRegistry {
40
40
  has(name) {
41
41
  return this.tools.has(name);
42
42
  }
43
- async execute(name, toolCallId, args) {
43
+ async execute(name, toolCallId, args, signal) {
44
44
  const entry = this.tools.get(name);
45
45
  if (!entry) {
46
46
  return {
@@ -62,7 +62,7 @@ export class ToolRegistry {
62
62
  }
63
63
  }
64
64
  try {
65
- const content = await entry.handler(args, { toolCallId });
65
+ const content = await entry.handler(args, { toolCallId, signal });
66
66
  return { toolCallId, content };
67
67
  }
68
68
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autonome-research/thread-phase",
3
- "version": "3.3.0",
3
+ "version": "4.0.0",
4
4
  "description": "TypeScript substrate for building automation workflows that coordinate AI agents. Phase ordering, typed shared state, persistence, fanout, event flow.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,6 +13,7 @@
13
13
  "./session": "./dist/session/index.js",
14
14
  "./tools": "./dist/tools/index.js",
15
15
  "./agents": "./dist/agents/index.js",
16
+ "./agents/authoring": "./dist/agents/authoring/index.js",
16
17
  "./agents/test-utils": "./dist/agents/test-utils/index.js",
17
18
  "./triggers": "./dist/triggers/index.js"
18
19
  },