@autonome-research/thread-phase 3.3.0 → 3.4.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.
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/parse-json.d.ts +12 -0
- package/dist/agent/parse-json.d.ts.map +1 -1
- package/dist/agent/parse-json.js +24 -7
- package/dist/agent/parse-json.js.map +1 -1
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +16 -12
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent-runner.d.ts +1 -1
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +1 -1
- package/dist/agent-runner.js.map +1 -1
- package/dist/helpers/hook.d.ts +34 -2
- package/dist/helpers/hook.d.ts.map +1 -1
- package/dist/helpers/hook.js +72 -5
- package/dist/helpers/hook.js.map +1 -1
- package/dist/helpers/index.d.ts +11 -1
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +11 -1
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/error-message.d.ts +20 -0
- package/dist/internal/error-message.d.ts.map +1 -0
- package/dist/internal/error-message.js +57 -0
- package/dist/internal/error-message.js.map +1 -0
- package/dist/messages.d.ts +11 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/orchestrator.d.ts +1 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +14 -1
- package/dist/orchestrator.js.map +1 -1
- package/dist/patterns/bounded-fanout-of.d.ts +2 -6
- package/dist/patterns/bounded-fanout-of.d.ts.map +1 -1
- package/dist/patterns/bounded-fanout-of.js +1 -4
- package/dist/patterns/bounded-fanout-of.js.map +1 -1
- package/dist/patterns/index.d.ts +22 -0
- package/dist/patterns/index.d.ts.map +1 -1
- package/dist/patterns/index.js +22 -0
- package/dist/patterns/index.js.map +1 -1
- package/dist/phase.d.ts +3 -0
- package/dist/phase.d.ts.map +1 -1
- package/dist/phase.js.map +1 -1
- package/dist/session/sse.d.ts +5 -1
- package/dist/session/sse.d.ts.map +1 -1
- package/dist/session/sse.js +56 -16
- package/dist/session/sse.js.map +1 -1
- package/dist/tools/registry.d.ts +6 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +2 -2
- package/dist/tools/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal — tolerant extraction of a string message from any thrown value.
|
|
3
|
+
*
|
|
4
|
+
* `try/catch` in TypeScript types the caught binding as `unknown`. Hot paths
|
|
5
|
+
* (agent runner, adapter shells, telemetry hooks) need a string to log, but
|
|
6
|
+
* casting to `{ message?: string }` is a quiet lie — it silences the
|
|
7
|
+
* compiler without checking what `err` actually is. When upstream code
|
|
8
|
+
* throws a string, a primitive, or an object whose `.message` is not a
|
|
9
|
+
* string, downstream `.slice()`/`.includes()`/etc. crash inside the error
|
|
10
|
+
* reporter and mask the original failure.
|
|
11
|
+
*
|
|
12
|
+
* Use this helper anywhere we need a string out of `unknown`:
|
|
13
|
+
* catch (err) {
|
|
14
|
+
* log({ detail: toErrorMessage(err).slice(0, 200) });
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* Mirrors the safety contract of agents/serialize-error.ts: MUST NOT throw.
|
|
18
|
+
*/
|
|
19
|
+
export declare function toErrorMessage(err: unknown): string;
|
|
20
|
+
//# sourceMappingURL=error-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/internal/error-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAcnD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal — tolerant extraction of a string message from any thrown value.
|
|
3
|
+
*
|
|
4
|
+
* `try/catch` in TypeScript types the caught binding as `unknown`. Hot paths
|
|
5
|
+
* (agent runner, adapter shells, telemetry hooks) need a string to log, but
|
|
6
|
+
* casting to `{ message?: string }` is a quiet lie — it silences the
|
|
7
|
+
* compiler without checking what `err` actually is. When upstream code
|
|
8
|
+
* throws a string, a primitive, or an object whose `.message` is not a
|
|
9
|
+
* string, downstream `.slice()`/`.includes()`/etc. crash inside the error
|
|
10
|
+
* reporter and mask the original failure.
|
|
11
|
+
*
|
|
12
|
+
* Use this helper anywhere we need a string out of `unknown`:
|
|
13
|
+
* catch (err) {
|
|
14
|
+
* log({ detail: toErrorMessage(err).slice(0, 200) });
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* Mirrors the safety contract of agents/serialize-error.ts: MUST NOT throw.
|
|
18
|
+
*/
|
|
19
|
+
export function toErrorMessage(err) {
|
|
20
|
+
if (err instanceof Error) {
|
|
21
|
+
return err.message;
|
|
22
|
+
}
|
|
23
|
+
if (typeof err === 'string') {
|
|
24
|
+
return err;
|
|
25
|
+
}
|
|
26
|
+
// Object with a string-ish `.message` field — the common shape for
|
|
27
|
+
// SDK errors and wrapped throws across the JS ecosystem.
|
|
28
|
+
if (typeof err === 'object' && err !== null) {
|
|
29
|
+
const m = err.message;
|
|
30
|
+
if (typeof m === 'string')
|
|
31
|
+
return m;
|
|
32
|
+
}
|
|
33
|
+
return safeStringify(err);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Stringify an arbitrary value without ever propagating an exception.
|
|
37
|
+
* Hostile inputs — Proxies whose traps throw, objects with throwing
|
|
38
|
+
* `Symbol.toPrimitive` or `toString` — would otherwise crash this function.
|
|
39
|
+
*
|
|
40
|
+
* Duplicates the helper in agents/serialize-error.ts intentionally: that
|
|
41
|
+
* one is internal to error serialization; this module is internal to
|
|
42
|
+
* message extraction. Both must be standalone safety nets.
|
|
43
|
+
*/
|
|
44
|
+
function safeStringify(v) {
|
|
45
|
+
try {
|
|
46
|
+
return String(v);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
try {
|
|
50
|
+
return Object.prototype.toString.call(v);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return '<unserializable>';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=error-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.js","sourceRoot":"","sources":["../../src/internal/error-message.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,mEAAmE;IACnE,yDAAyD;IACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAI,GAA6B,CAAC,OAAO,CAAC;QACjD,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/messages.d.ts
CHANGED
|
@@ -59,6 +59,16 @@ export interface ToolResult {
|
|
|
59
59
|
content: string;
|
|
60
60
|
}
|
|
61
61
|
export interface ToolExecutor {
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Dispatch a tool call. `signal` is the agent runner's AbortSignal — when
|
|
64
|
+
* the run is cancelled, long-running tools (HTTP calls, shell commands,
|
|
65
|
+
* file I/O) can observe this to bail cooperatively rather than running
|
|
66
|
+
* to completion before the next agent round checks for cancellation.
|
|
67
|
+
*
|
|
68
|
+
* Implementations may ignore `signal` for synchronous or fast tools;
|
|
69
|
+
* the parameter is optional for backwards compatibility with executors
|
|
70
|
+
* authored before v3.4.0.
|
|
71
|
+
*/
|
|
72
|
+
execute(name: string, toolCallId: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<ToolResult>;
|
|
63
73
|
}
|
|
64
74
|
//# sourceMappingURL=messages.d.ts.map
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAMzF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAMD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAMzF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAMD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;OASG;IACH,OAAO,CACL,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,CAAC;CACxB"}
|
package/dist/orchestrator.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface RunPipelineOptions {
|
|
|
41
41
|
*/
|
|
42
42
|
signal?: AbortSignal;
|
|
43
43
|
}
|
|
44
|
-
export declare function runPipeline<TCtx extends BasePipelineContext, TEvent = PipelineEvent>(phases: ReadonlyArray<Phase<TCtx, TEvent>>, ctx: TCtx, options?: RunPipelineOptions): AsyncGenerator<TEvent, void>;
|
|
44
|
+
export declare function runPipeline<TCtx extends BasePipelineContext, TEvent = PipelineEvent>(phases: ReadonlyArray<Phase<TCtx, TEvent>>, ctx: TCtx, options?: RunPipelineOptions): AsyncGenerator<TEvent | PipelineEvent, void>;
|
|
45
45
|
/**
|
|
46
46
|
* Consume `runPipeline` to completion and return a typed summary.
|
|
47
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG5E;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAuB,WAAW,CAChC,IAAI,SAAS,mBAAmB,EAChC,MAAM,GAAG,aAAa,EAEtB,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAC1C,GAAG,EAAE,IAAI,EACT,OAAO,CAAC,EAAE,kBAAkB,GAO3B,cAAc,CAAC,MAAM,GAAG,aAAa,EAAE,IAAI,CAAC,CAsC9C;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,SAAS,mBAAmB,EAChC,MAAM,SAAS,aAAa,GAAG,aAAa,EAE5C,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAC1C,GAAG,EAAE,IAAI,EACT,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAY1B"}
|
package/dist/orchestrator.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* framework's `done`/`error` shapes (see PipelineEvent), so the simplest
|
|
15
15
|
* downstream pattern is `type MyEvent = PipelineEvent | { type: 'mine' };`.
|
|
16
16
|
*/
|
|
17
|
+
import { toErrorMessage } from './internal/error-message.js';
|
|
17
18
|
export async function* runPipeline(phases, ctx, options) {
|
|
18
19
|
// Signal resolution: options.signal wins if provided; otherwise honor a
|
|
19
20
|
// pre-set ctx.signal (callers that already populated ctx — including
|
|
@@ -25,7 +26,19 @@ export async function* runPipeline(phases, ctx, options) {
|
|
|
25
26
|
try {
|
|
26
27
|
for (const phase of phases) {
|
|
27
28
|
if (signal?.aborted) {
|
|
28
|
-
|
|
29
|
+
// AbortSignal.reason is `any` per spec — most callers pass strings,
|
|
30
|
+
// many pass Error instances, and SDKs occasionally pass arbitrary
|
|
31
|
+
// objects. toErrorMessage extracts a string from any of these
|
|
32
|
+
// without destroying diagnostic information (vs. the prior
|
|
33
|
+
// `as string` cast that silently coerced non-strings to 'aborted').
|
|
34
|
+
const reason = signal.reason === undefined
|
|
35
|
+
? 'aborted'
|
|
36
|
+
: toErrorMessage(signal.reason);
|
|
37
|
+
// Emit a canonical terminal frame BEFORE throwing so for-await
|
|
38
|
+
// consumers (SSE bridges, audit logs) can record the lifecycle
|
|
39
|
+
// cleanly. Promise-style consumers still observe AbortError via
|
|
40
|
+
// the throw on the next iteration.
|
|
41
|
+
yield { type: 'cancelled', reason };
|
|
29
42
|
const err = new Error(`runPipeline aborted: ${reason}`);
|
|
30
43
|
err.name = 'AbortError';
|
|
31
44
|
throw err;
|
package/dist/orchestrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AA8B7D,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,WAAW,CAIhC,MAA0C,EAC1C,GAAS,EACT,OAA4B;IAQ5B,wEAAwE;IACxE,qEAAqE;IACrE,0EAA0E;IAC1E,oEAAoE;IACpE,uDAAuD;IACvD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IAC7C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,oEAAoE;gBACpE,kEAAkE;gBAClE,8DAA8D;gBAC9D,2DAA2D;gBAC3D,oEAAoE;gBACpE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS;oBACxC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,+DAA+D;gBAC/D,+DAA+D;gBAC/D,gEAAgE;gBAChE,mCAAmC;gBACnC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;gBACxD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;gBACxB,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChD,OAAO;YACT,CAAC;QACH,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAIxC,MAA0C,EAC1C,GAAS,EACT,OAA4B;IAE5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAA8B,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,CAAe,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1E,UAAU,EAAE,CAAC;QACb,IAAK,KAAuB,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7C,UAAU,GAAI,KAA6B,CAAC,MAAM,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;QACvD,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -19,12 +19,11 @@
|
|
|
19
19
|
* form is more direct. When you have one item, just call the adapter
|
|
20
20
|
* directly.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* Stable surface — exported via thread-phase/patterns; covered by semver.
|
|
23
23
|
*/
|
|
24
24
|
import type { AgentAdapterMeta, AgentEventBus, AgentRunResult } from '../agents/protocol.js';
|
|
25
|
-
/** Per-item failure handling. Mirrors boundedFanout's mode.
|
|
25
|
+
/** Per-item failure handling. Mirrors boundedFanout's mode. */
|
|
26
26
|
export type BoundedFanoutOfMode = 'fail-fast' | 'collect';
|
|
27
|
-
/** @internal */
|
|
28
27
|
export interface BoundedFanoutOfOptions<TItem, TConfig> {
|
|
29
28
|
items: ReadonlyArray<TItem>;
|
|
30
29
|
concurrency: number;
|
|
@@ -48,11 +47,8 @@ export interface BoundedFanoutOfOptions<TItem, TConfig> {
|
|
|
48
47
|
* error results (finishReason: 'error') and the batch completes. In
|
|
49
48
|
* `fail-fast` (default), the first failure cancels in-flight runs and
|
|
50
49
|
* the function rejects with an Error wrapping the failed item.
|
|
51
|
-
*
|
|
52
|
-
* @internal
|
|
53
50
|
*/
|
|
54
51
|
export declare function boundedFanoutOf<TItem, TConfig>(opts: BoundedFanoutOfOptions<TItem, TConfig>): Promise<AgentRunResult[]>;
|
|
55
|
-
/** @internal */
|
|
56
52
|
export declare class BoundedFanoutOfError extends Error {
|
|
57
53
|
itemIndex: number;
|
|
58
54
|
result: AgentRunResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-fanout-of.d.ts","sourceRoot":"","sources":["../../src/patterns/bounded-fanout-of.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EAEb,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B
|
|
1
|
+
{"version":3,"file":"bounded-fanout-of.d.ts","sourceRoot":"","sources":["../../src/patterns/bounded-fanout-of.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EAEb,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,sBAAsB,CAAC,KAAK,EAAE,OAAO;IACpD,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,oEAAoE;IACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACzE,oFAAoF;IACpF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,EAClD,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,GAC3C,OAAO,CAAC,cAAc,EAAE,CAAC,CAsH3B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAEpC,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,cAAc;gBADtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc;CAKhC"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* form is more direct. When you have one item, just call the adapter
|
|
20
20
|
* directly.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* Stable surface — exported via thread-phase/patterns; covered by semver.
|
|
23
23
|
*/
|
|
24
24
|
/**
|
|
25
25
|
* Run an adapter over N items with capped concurrency. Returns results in
|
|
@@ -27,8 +27,6 @@
|
|
|
27
27
|
* error results (finishReason: 'error') and the batch completes. In
|
|
28
28
|
* `fail-fast` (default), the first failure cancels in-flight runs and
|
|
29
29
|
* the function rejects with an Error wrapping the failed item.
|
|
30
|
-
*
|
|
31
|
-
* @internal
|
|
32
30
|
*/
|
|
33
31
|
export async function boundedFanoutOf(opts) {
|
|
34
32
|
const items = opts.items;
|
|
@@ -126,7 +124,6 @@ export async function boundedFanoutOf(opts) {
|
|
|
126
124
|
}
|
|
127
125
|
return results;
|
|
128
126
|
}
|
|
129
|
-
/** @internal */
|
|
130
127
|
export class BoundedFanoutOfError extends Error {
|
|
131
128
|
itemIndex;
|
|
132
129
|
result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded-fanout-of.js","sourceRoot":"","sources":["../../src/patterns/bounded-fanout-of.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"bounded-fanout-of.js","sourceRoot":"","sources":["../../src/patterns/bounded-fanout-of.ts"],"names":[],"mappings":"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"}
|
package/dist/patterns/index.d.ts
CHANGED
|
@@ -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, type BoundedFanOutOptions, type ItemDoneEvent, type ItemErrorEvent, type FanOutResult, } from './bounded-fanout.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE1F,OAAO,EACL,UAAU,EACV,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,EACL,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
|
package/dist/patterns/index.js
CHANGED
|
@@ -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
|
|
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
package/dist/phase.d.ts.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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"}
|
package/dist/session/sse.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/session/sse.js
CHANGED
|
@@ -41,19 +41,30 @@ export async function streamToSSE(options) {
|
|
|
41
41
|
res.on('close', () => {
|
|
42
42
|
closed = true;
|
|
43
43
|
});
|
|
44
|
-
|
|
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
|
|
47
|
-
|
|
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
|
-
|
|
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.
|
|
66
|
-
//
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
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
|
}
|
package/dist/session/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/session/sse.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,GAAG,EAAyB,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,GAAG,EAAyB,MAAM,KAAK,CAAC;AA6BjD,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IACzC,GAAG,CAAa;IAExB,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,UAA0B,EAAE,OAAoB;QACvD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yFAAyF;IACzF,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,UAAkB,EAClB,IAA6B,EAC7B,MAAoB;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,UAAU;gBACV,OAAO,EAAE,wBAAwB,IAAI,wBAAwB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;aAC9G,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI;qBAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;qBAChE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;oBACL,UAAU;oBACV,OAAO,EAAE,iCAAiC,IAAI,MAAM,MAAM,EAAE;iBAC7D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,IAAI,YAAY,OAAO,EAAE,EAAE,CAAC;QAC5E,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autonome-research/thread-phase",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.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",
|