@openrouter/agent 0.7.2 → 0.8.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/README.md +248 -17
- package/esm/index.d.ts +8 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +12 -4
- package/esm/index.js.map +1 -1
- package/esm/inner-loop/call-model.d.ts +8 -5
- package/esm/inner-loop/call-model.d.ts.map +1 -1
- package/esm/inner-loop/call-model.js +16 -6
- package/esm/inner-loop/call-model.js.map +1 -1
- package/esm/lib/async-params.d.ts +25 -6
- package/esm/lib/async-params.d.ts.map +1 -1
- package/esm/lib/async-params.js +3 -1
- package/esm/lib/async-params.js.map +1 -1
- package/esm/lib/conversation-state.d.ts +44 -1
- package/esm/lib/conversation-state.d.ts.map +1 -1
- package/esm/lib/conversation-state.js +111 -0
- package/esm/lib/conversation-state.js.map +1 -1
- package/esm/lib/hooks-emit.d.ts +50 -0
- package/esm/lib/hooks-emit.d.ts.map +1 -0
- package/esm/lib/hooks-emit.js +307 -0
- package/esm/lib/hooks-emit.js.map +1 -0
- package/esm/lib/hooks-manager.d.ts +141 -0
- package/esm/lib/hooks-manager.d.ts.map +1 -0
- package/esm/lib/hooks-manager.js +282 -0
- package/esm/lib/hooks-manager.js.map +1 -0
- package/esm/lib/hooks-matchers.d.ts +12 -0
- package/esm/lib/hooks-matchers.d.ts.map +1 -0
- package/esm/lib/hooks-matchers.js +26 -0
- package/esm/lib/hooks-matchers.js.map +1 -0
- package/esm/lib/hooks-resolve.d.ts +17 -0
- package/esm/lib/hooks-resolve.d.ts.map +1 -0
- package/esm/lib/hooks-resolve.js +42 -0
- package/esm/lib/hooks-resolve.js.map +1 -0
- package/esm/lib/hooks-schemas.d.ts +188 -0
- package/esm/lib/hooks-schemas.d.ts.map +1 -0
- package/esm/lib/hooks-schemas.js +184 -0
- package/esm/lib/hooks-schemas.js.map +1 -0
- package/esm/lib/hooks-types.d.ts +174 -0
- package/esm/lib/hooks-types.d.ts.map +1 -0
- package/esm/lib/hooks-types.js +45 -0
- package/esm/lib/hooks-types.js.map +1 -0
- package/esm/lib/model-result.d.ts +209 -9
- package/esm/lib/model-result.d.ts.map +1 -1
- package/esm/lib/model-result.js +1397 -348
- package/esm/lib/model-result.js.map +1 -1
- package/esm/lib/reusable-stream.d.ts +6 -0
- package/esm/lib/reusable-stream.d.ts.map +1 -1
- package/esm/lib/reusable-stream.js +8 -0
- package/esm/lib/reusable-stream.js.map +1 -1
- package/esm/lib/tool-executor.d.ts.map +1 -1
- package/esm/lib/tool-executor.js +11 -1
- package/esm/lib/tool-executor.js.map +1 -1
- package/esm/lib/tool-orchestrator.d.ts.map +1 -1
- package/esm/lib/tool-orchestrator.js +4 -1
- package/esm/lib/tool-orchestrator.js.map +1 -1
- package/esm/lib/tool-types.d.ts +137 -45
- package/esm/lib/tool-types.d.ts.map +1 -1
- package/esm/lib/tool-types.js +13 -0
- package/esm/lib/tool-types.js.map +1 -1
- package/esm/lib/tool.d.ts +35 -25
- package/esm/lib/tool.d.ts.map +1 -1
- package/esm/lib/tool.js +19 -0
- package/esm/lib/tool.js.map +1 -1
- package/package.json +6 -2
|
@@ -5,16 +5,59 @@ import type { ConversationState, ParsedToolCall, Tool, TurnContext, UnsentToolRe
|
|
|
5
5
|
* Uses crypto.randomUUID if available, falls back to timestamp + random
|
|
6
6
|
*/
|
|
7
7
|
export declare function generateConversationId(): string;
|
|
8
|
+
/** Currently supported ConversationState serialization version. */
|
|
9
|
+
export declare const CONVERSATION_STATE_VERSION: 1;
|
|
8
10
|
/**
|
|
9
11
|
* Create an initial conversation state
|
|
10
12
|
* @param id - Optional custom ID, generates one if not provided
|
|
11
13
|
*/
|
|
12
14
|
export declare function createInitialState<TTools extends readonly Tool[] = readonly Tool[]>(id?: string): ConversationState<TTools>;
|
|
15
|
+
/**
|
|
16
|
+
* Thrown when {@link deserializeConversationState} encounters a state blob whose
|
|
17
|
+
* `version` is not supported by this SDK build.
|
|
18
|
+
*/
|
|
19
|
+
export declare class UnsupportedStateVersionError extends Error {
|
|
20
|
+
readonly found: number;
|
|
21
|
+
readonly supported: readonly number[];
|
|
22
|
+
constructor(found: number, supported?: readonly number[]);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Thrown when {@link deserializeConversationState} receives JSON that is not a
|
|
26
|
+
* well-formed ConversationState (missing/wrong required fields, or invalid JSON).
|
|
27
|
+
*/
|
|
28
|
+
export declare class InvalidStateError extends Error {
|
|
29
|
+
constructor(message: string);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Serialize a {@link ConversationState} to a stable JSON string for durable storage.
|
|
33
|
+
*
|
|
34
|
+
* Guarantees the `version` field is present (injects `1` when the input state
|
|
35
|
+
* lacks it). Treat the returned JSON as **opaque**: consumers should round-trip
|
|
36
|
+
* via these helpers rather than introspecting item shapes.
|
|
37
|
+
*
|
|
38
|
+
* **Compat policy:** additive field changes within a major version. On version
|
|
39
|
+
* bumps, migrations run inside {@link deserializeConversationState}. The
|
|
40
|
+
* StateAccessor load/save contract is unchanged — these helpers are opt-in.
|
|
41
|
+
*/
|
|
42
|
+
export declare function serializeConversationState<TTools extends readonly Tool[] = readonly Tool[]>(state: ConversationState<TTools>): string;
|
|
43
|
+
/**
|
|
44
|
+
* Parse and validate a previously serialized {@link ConversationState}.
|
|
45
|
+
*
|
|
46
|
+
* Accepts version-less legacy blobs and states with `version: 1`, normalizing
|
|
47
|
+
* both to `version: 1`. Throws {@link UnsupportedStateVersionError} for any
|
|
48
|
+
* other version (fail loudly so stores don't silently misinterpret future
|
|
49
|
+
* shapes). Throws {@link InvalidStateError} for malformed JSON or missing
|
|
50
|
+
* required fields (`id`, `messages`, `status`).
|
|
51
|
+
*
|
|
52
|
+
* **Compat policy:** absence of `version` means v1. Migrations for future
|
|
53
|
+
* versions happen here; callers should treat the JSON as opaque.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deserializeConversationState<TTools extends readonly Tool[] = readonly Tool[]>(json: string): ConversationState<TTools>;
|
|
13
56
|
/**
|
|
14
57
|
* Update a conversation state with new values
|
|
15
58
|
* Automatically updates the updatedAt timestamp
|
|
16
59
|
*/
|
|
17
|
-
export declare function updateState<TTools extends readonly Tool[] = readonly Tool[]>(state: ConversationState<TTools>, updates: Partial<Omit<ConversationState<TTools>, 'id' | 'createdAt' | 'updatedAt'>>): ConversationState<TTools>;
|
|
60
|
+
export declare function updateState<TTools extends readonly Tool[] = readonly Tool[]>(state: ConversationState<TTools>, updates: Partial<Omit<ConversationState<TTools>, 'id' | 'createdAt' | 'updatedAt' | 'version'>>): ConversationState<TTools>;
|
|
18
61
|
/**
|
|
19
62
|
* Append new items to the message history
|
|
20
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,IAAI,EACJ,WAAW,EACX,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAyCzB;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAM/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,EACjF,EAAE,CAAC,EAAE,MAAM,GACV,iBAAiB,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../../src/lib/conversation-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export function generateConversationId() {
|
|
|
37
37
|
// Fallback for environments without crypto.randomUUID
|
|
38
38
|
return `conv_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
|
|
39
39
|
}
|
|
40
|
+
/** Currently supported ConversationState serialization version. */
|
|
41
|
+
export const CONVERSATION_STATE_VERSION = 1;
|
|
40
42
|
/**
|
|
41
43
|
* Create an initial conversation state
|
|
42
44
|
* @param id - Optional custom ID, generates one if not provided
|
|
@@ -44,6 +46,7 @@ export function generateConversationId() {
|
|
|
44
46
|
export function createInitialState(id) {
|
|
45
47
|
const now = Date.now();
|
|
46
48
|
return {
|
|
49
|
+
version: CONVERSATION_STATE_VERSION,
|
|
47
50
|
id: id ?? generateConversationId(),
|
|
48
51
|
messages: [],
|
|
49
52
|
status: 'in_progress',
|
|
@@ -51,6 +54,114 @@ export function createInitialState(id) {
|
|
|
51
54
|
updatedAt: now,
|
|
52
55
|
};
|
|
53
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Thrown when {@link deserializeConversationState} encounters a state blob whose
|
|
59
|
+
* `version` is not supported by this SDK build.
|
|
60
|
+
*/
|
|
61
|
+
export class UnsupportedStateVersionError extends Error {
|
|
62
|
+
constructor(found, supported = [
|
|
63
|
+
CONVERSATION_STATE_VERSION,
|
|
64
|
+
]) {
|
|
65
|
+
super(`Unsupported ConversationState version ${found}; supported version(s): ${supported.join(', ')}`);
|
|
66
|
+
this.name = 'UnsupportedStateVersionError';
|
|
67
|
+
this.found = found;
|
|
68
|
+
this.supported = supported;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Thrown when {@link deserializeConversationState} receives JSON that is not a
|
|
73
|
+
* well-formed ConversationState (missing/wrong required fields, or invalid JSON).
|
|
74
|
+
*/
|
|
75
|
+
export class InvalidStateError extends Error {
|
|
76
|
+
constructor(message) {
|
|
77
|
+
super(message);
|
|
78
|
+
this.name = 'InvalidStateError';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Serialize a {@link ConversationState} to a stable JSON string for durable storage.
|
|
83
|
+
*
|
|
84
|
+
* Guarantees the `version` field is present (injects `1` when the input state
|
|
85
|
+
* lacks it). Treat the returned JSON as **opaque**: consumers should round-trip
|
|
86
|
+
* via these helpers rather than introspecting item shapes.
|
|
87
|
+
*
|
|
88
|
+
* **Compat policy:** additive field changes within a major version. On version
|
|
89
|
+
* bumps, migrations run inside {@link deserializeConversationState}. The
|
|
90
|
+
* StateAccessor load/save contract is unchanged — these helpers are opt-in.
|
|
91
|
+
*/
|
|
92
|
+
export function serializeConversationState(state) {
|
|
93
|
+
return JSON.stringify({
|
|
94
|
+
...state,
|
|
95
|
+
version: state.version ?? CONVERSATION_STATE_VERSION,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse and validate a previously serialized {@link ConversationState}.
|
|
100
|
+
*
|
|
101
|
+
* Accepts version-less legacy blobs and states with `version: 1`, normalizing
|
|
102
|
+
* both to `version: 1`. Throws {@link UnsupportedStateVersionError} for any
|
|
103
|
+
* other version (fail loudly so stores don't silently misinterpret future
|
|
104
|
+
* shapes). Throws {@link InvalidStateError} for malformed JSON or missing
|
|
105
|
+
* required fields (`id`, `messages`, `status`).
|
|
106
|
+
*
|
|
107
|
+
* **Compat policy:** absence of `version` means v1. Migrations for future
|
|
108
|
+
* versions happen here; callers should treat the JSON as opaque.
|
|
109
|
+
*/
|
|
110
|
+
export function deserializeConversationState(json) {
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = JSON.parse(json);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new InvalidStateError(`Invalid ConversationState JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
119
|
+
throw new InvalidStateError('ConversationState must be a JSON object');
|
|
120
|
+
}
|
|
121
|
+
const obj = parsed;
|
|
122
|
+
// Version check runs before structural validation: a future-version blob may
|
|
123
|
+
// have a different shape, and it must fail with UnsupportedStateVersionError
|
|
124
|
+
// rather than a misleading InvalidStateError about v1 fields.
|
|
125
|
+
const version = obj['version'];
|
|
126
|
+
if (version !== undefined && version !== CONVERSATION_STATE_VERSION) {
|
|
127
|
+
if (typeof version !== 'number') {
|
|
128
|
+
throw new InvalidStateError(`ConversationState field "version" must be a number when present (got ${describeType(version)})`);
|
|
129
|
+
}
|
|
130
|
+
throw new UnsupportedStateVersionError(version, [
|
|
131
|
+
CONVERSATION_STATE_VERSION,
|
|
132
|
+
]);
|
|
133
|
+
}
|
|
134
|
+
if (typeof obj['id'] !== 'string') {
|
|
135
|
+
throw new InvalidStateError(`ConversationState missing or invalid field "id" (expected string, got ${describeType(obj['id'])})`);
|
|
136
|
+
}
|
|
137
|
+
// messages is models.InputsUnion — typically an array of items, but the type
|
|
138
|
+
// also allows a single item / string; require array for durable store blobs.
|
|
139
|
+
if (!Array.isArray(obj['messages'])) {
|
|
140
|
+
throw new InvalidStateError(`ConversationState missing or invalid field "messages" (expected array, got ${describeType(obj['messages'])})`);
|
|
141
|
+
}
|
|
142
|
+
if (typeof obj['status'] !== 'string') {
|
|
143
|
+
throw new InvalidStateError(`ConversationState missing or invalid field "status" (expected string, got ${describeType(obj['status'])})`);
|
|
144
|
+
}
|
|
145
|
+
if (typeof obj['createdAt'] !== 'number') {
|
|
146
|
+
throw new InvalidStateError(`ConversationState missing or invalid field "createdAt" (expected number, got ${describeType(obj['createdAt'])})`);
|
|
147
|
+
}
|
|
148
|
+
if (typeof obj['updatedAt'] !== 'number') {
|
|
149
|
+
throw new InvalidStateError(`ConversationState missing or invalid field "updatedAt" (expected number, got ${describeType(obj['updatedAt'])})`);
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
...obj,
|
|
153
|
+
version: CONVERSATION_STATE_VERSION,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function describeType(value) {
|
|
157
|
+
if (value === null) {
|
|
158
|
+
return 'null';
|
|
159
|
+
}
|
|
160
|
+
if (Array.isArray(value)) {
|
|
161
|
+
return 'array';
|
|
162
|
+
}
|
|
163
|
+
return typeof value;
|
|
164
|
+
}
|
|
54
165
|
/**
|
|
55
166
|
* Update a conversation state with new values
|
|
56
167
|
* Automatically updates the updatedAt timestamp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-state.js","sourceRoot":"","sources":["../../src/lib/conversation-state.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,SAAS,uBAAuB,CAC9B,GAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,QAAQ,IAAI,GAAG;QACf,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,MAAM,IAAI,GAAG;QACb,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,QAAQ,IAAI,GAAG,CAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,GAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,IAAI,IAAI,GAAG;QACX,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,MAAM,IAAI,GAAG;QACb,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,WAAW,IAAI,GAAG,CACnB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACvC,CAAC;IACD,sDAAsD;IACtD,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAW;IAEX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACL,EAAE,EAAE,EAAE,IAAI,sBAAsB,EAAE;QAClC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAgC,EAChC,
|
|
1
|
+
{"version":3,"file":"conversation-state.js","sourceRoot":"","sources":["../../src/lib/conversation-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { $ZodType } from 'zod/v4/core';
|
|
2
|
+
import type { EmitResult, HookEntry, LifecycleHookContext } from './hooks-types.js';
|
|
3
|
+
export interface ExecuteChainOptions {
|
|
4
|
+
readonly hookName: string;
|
|
5
|
+
readonly throwOnHandlerError: boolean;
|
|
6
|
+
readonly toolName?: string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Optional Zod schema to validate each handler's result BEFORE the chain
|
|
9
|
+
* applies mutation piping or short-circuit logic. Validation errors are
|
|
10
|
+
* handled the same way as handler throws: either re-thrown (strict mode) or
|
|
11
|
+
* logged as a warning (default).
|
|
12
|
+
*
|
|
13
|
+
* Void-typed hooks typically pass `undefined` here; results in that case are
|
|
14
|
+
* not validated.
|
|
15
|
+
*/
|
|
16
|
+
readonly resultSchema?: $ZodType | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Invoked when a handler's fire-and-forget `work` exceeds its
|
|
19
|
+
* `asyncTimeout`. The manager uses this to abort the emit's signal so
|
|
20
|
+
* handlers that observe `context.signal` can cancel the stale work.
|
|
21
|
+
*/
|
|
22
|
+
readonly onAsyncTimeout?: ((hookName: string) => void) | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Execute a chain of hook handlers sequentially.
|
|
26
|
+
*
|
|
27
|
+
* Supports:
|
|
28
|
+
* - ToolMatcher and filter-based skipping (matcher fails closed: a handler with
|
|
29
|
+
* a matcher and no `options.toolName` is skipped)
|
|
30
|
+
* - Sync results validated against `options.resultSchema` and collected into `results`
|
|
31
|
+
* - Async fire-and-forget via a returned {@link AsyncOutput} -- the handler's
|
|
32
|
+
* `work` promise is pushed to `pending` without being awaited; the manager is
|
|
33
|
+
* responsible for draining/timing out that work
|
|
34
|
+
* - Per-hook mutation piping (driven by {@link HOOK_BEHAVIOR})
|
|
35
|
+
* - Short-circuit on block/reject fields (non-empty string or `true`)
|
|
36
|
+
* - Cooperative abort via `context.signal`: the chain checks
|
|
37
|
+
* `signal.aborted` between handlers and bails out when set so
|
|
38
|
+
* `abortInflight()` has a deterministic effect on the chain itself (not just
|
|
39
|
+
* on handlers that happen to consult the signal).
|
|
40
|
+
*
|
|
41
|
+
* Payload isolation: the initial payload is shallow-cloned before entering the
|
|
42
|
+
* chain so mutation piping (via {@link HOOK_BEHAVIOR}) doesn't mutate the
|
|
43
|
+
* caller's payload at the top level. This is a top-level-only guarantee:
|
|
44
|
+
* handlers that directly mutate a nested object (e.g.
|
|
45
|
+
* `payload.toolInput.foo = 'bar'`) still reach the caller's original nested
|
|
46
|
+
* reference. Handlers MUST return mutations via the documented result fields
|
|
47
|
+
* (e.g. `mutatedInput`) rather than mutating nested payload fields in place.
|
|
48
|
+
*/
|
|
49
|
+
export declare function executeHandlerChain<P, R>(entries: ReadonlyArray<HookEntry<P, R>>, initialPayload: P, context: LifecycleHookContext, options: ExecuteChainOptions): Promise<EmitResult<R, P>>;
|
|
50
|
+
//# sourceMappingURL=hooks-emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-emit.d.ts","sourceRoot":"","sources":["../../src/lib/hooks-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAEV,UAAU,EAEV,SAAS,EACT,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAC5C,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACvC,cAAc,EAAE,CAAC,EACjB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CA6F3B"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { safeParse } from 'zod/v4/core';
|
|
2
|
+
import { matchesTool } from './hooks-matchers.js';
|
|
3
|
+
import { DEFAULT_ASYNC_TIMEOUT, HOOK_BEHAVIOR, isAsyncOutput } from './hooks-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Returns true only for plain objects (prototype of `Object.prototype` or
|
|
6
|
+
* `null`) -- values where object-spread cloning is safe. Custom hooks can
|
|
7
|
+
* register payload schemas like `z.number()`, `z.string()`, `z.array(...)`,
|
|
8
|
+
* or `z.date()`; spreading a primitive silently produces `{}`, spreading an
|
|
9
|
+
* array reindexes it into an object, and spreading a `Date`/`Map`/class
|
|
10
|
+
* instance flattens it to a near-empty POJO. All of those would hand handlers
|
|
11
|
+
* a mangled value, so only true plain objects are cloned; everything else
|
|
12
|
+
* passes through untouched (and does not participate in mutation piping).
|
|
13
|
+
*/
|
|
14
|
+
function isPlainMutableObject(value) {
|
|
15
|
+
if (typeof value !== 'object' || value === null) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const proto = Object.getPrototypeOf(value);
|
|
19
|
+
return proto === Object.prototype || proto === null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute a chain of hook handlers sequentially.
|
|
23
|
+
*
|
|
24
|
+
* Supports:
|
|
25
|
+
* - ToolMatcher and filter-based skipping (matcher fails closed: a handler with
|
|
26
|
+
* a matcher and no `options.toolName` is skipped)
|
|
27
|
+
* - Sync results validated against `options.resultSchema` and collected into `results`
|
|
28
|
+
* - Async fire-and-forget via a returned {@link AsyncOutput} -- the handler's
|
|
29
|
+
* `work` promise is pushed to `pending` without being awaited; the manager is
|
|
30
|
+
* responsible for draining/timing out that work
|
|
31
|
+
* - Per-hook mutation piping (driven by {@link HOOK_BEHAVIOR})
|
|
32
|
+
* - Short-circuit on block/reject fields (non-empty string or `true`)
|
|
33
|
+
* - Cooperative abort via `context.signal`: the chain checks
|
|
34
|
+
* `signal.aborted` between handlers and bails out when set so
|
|
35
|
+
* `abortInflight()` has a deterministic effect on the chain itself (not just
|
|
36
|
+
* on handlers that happen to consult the signal).
|
|
37
|
+
*
|
|
38
|
+
* Payload isolation: the initial payload is shallow-cloned before entering the
|
|
39
|
+
* chain so mutation piping (via {@link HOOK_BEHAVIOR}) doesn't mutate the
|
|
40
|
+
* caller's payload at the top level. This is a top-level-only guarantee:
|
|
41
|
+
* handlers that directly mutate a nested object (e.g.
|
|
42
|
+
* `payload.toolInput.foo = 'bar'`) still reach the caller's original nested
|
|
43
|
+
* reference. Handlers MUST return mutations via the documented result fields
|
|
44
|
+
* (e.g. `mutatedInput`) rather than mutating nested payload fields in place.
|
|
45
|
+
*/
|
|
46
|
+
export async function executeHandlerChain(entries, initialPayload, context, options) {
|
|
47
|
+
const results = [];
|
|
48
|
+
const pending = [];
|
|
49
|
+
// Only clone when the payload is a plain mutable object. Spreading a
|
|
50
|
+
// primitive (e.g. a custom hook's `z.number()` payload) would silently
|
|
51
|
+
// produce `{}`; spreading an array reindexes it into an object. For those
|
|
52
|
+
// cases we pass the value through untouched so handlers see the original
|
|
53
|
+
// typed-`P` value. For plain objects we still clone so the chain can apply
|
|
54
|
+
// mutation piping without mutating the caller's payload at the top level.
|
|
55
|
+
// Nested fields are shared with the caller; see the function-level docstring
|
|
56
|
+
// for the invariant handlers are expected to respect.
|
|
57
|
+
let currentPayload = isPlainMutableObject(initialPayload)
|
|
58
|
+
? {
|
|
59
|
+
...initialPayload,
|
|
60
|
+
}
|
|
61
|
+
: initialPayload;
|
|
62
|
+
let blocked = false;
|
|
63
|
+
let mutated = false;
|
|
64
|
+
// Per-hook mutation/block behavior. Hooks absent from the table (all
|
|
65
|
+
// observation-only hooks and every custom hook) collect results without
|
|
66
|
+
// altering the payload or short-circuiting.
|
|
67
|
+
const behavior = HOOK_BEHAVIOR[options.hookName];
|
|
68
|
+
for (let i = 0; i < entries.length; i++) {
|
|
69
|
+
// Cooperative abort: bail out of the chain when abortInflight() has fired.
|
|
70
|
+
// Checked before each handler so synchronous chains stop promptly instead
|
|
71
|
+
// of running to completion with only advisory notice to each handler.
|
|
72
|
+
if (context.signal.aborted) {
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
const entry = entries[i];
|
|
76
|
+
if (!entry) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Matcher and filter checks run under the same error policy as handlers:
|
|
80
|
+
// in non-strict mode a throwing user-supplied matcher function or filter
|
|
81
|
+
// is logged and the entry skipped, instead of crashing the whole chain.
|
|
82
|
+
const gate = evaluateEntryGate(entry, currentPayload, i, options);
|
|
83
|
+
if (gate === 'skip') {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const returnValue = await entry.handler(currentPayload, context);
|
|
88
|
+
const outcome = classifyHandlerReturn(returnValue, i, options);
|
|
89
|
+
if (outcome.kind === 'async') {
|
|
90
|
+
// Fire-and-forget: track the (optional) work promise for drain/timeout.
|
|
91
|
+
if (outcome.trackedWork !== undefined) {
|
|
92
|
+
pending.push(outcome.trackedWork);
|
|
93
|
+
}
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (outcome.kind === 'skip') {
|
|
97
|
+
// Void return, or result-schema validation failed in non-strict mode.
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const result = outcome.result;
|
|
101
|
+
results.push(result);
|
|
102
|
+
// Apply mutation piping -- only hooks with declared mutations participate.
|
|
103
|
+
if (behavior?.mutations) {
|
|
104
|
+
const applied = applyMutations(currentPayload, result, behavior.mutations);
|
|
105
|
+
if (applied !== currentPayload) {
|
|
106
|
+
currentPayload = applied;
|
|
107
|
+
mutated = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Short-circuit on the hook's declared block field.
|
|
111
|
+
if (behavior?.blockField && isBlockTriggered(result, behavior.blockField)) {
|
|
112
|
+
blocked = true;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (options.throwOnHandlerError) {
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
console.warn(`[HooksManager] Handler ${i} for hook "${options.hookName}" threw:`, error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
results,
|
|
125
|
+
pending,
|
|
126
|
+
finalPayload: currentPayload,
|
|
127
|
+
blocked,
|
|
128
|
+
mutated,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Evaluate an entry's matcher and filter under the chain's error policy.
|
|
133
|
+
*
|
|
134
|
+
* Matchers fail closed: if a matcher is registered and no toolName is
|
|
135
|
+
* available for this emit, the handler is skipped rather than invoked
|
|
136
|
+
* globally. A throwing matcher function or filter is re-thrown in strict
|
|
137
|
+
* mode, or logged and treated as a skip otherwise.
|
|
138
|
+
*/
|
|
139
|
+
function evaluateEntryGate(entry, payload, index, options) {
|
|
140
|
+
try {
|
|
141
|
+
// Matcher first; the filter must not run when the matcher already
|
|
142
|
+
// rejected the entry (filters can be effectful or expensive).
|
|
143
|
+
const matcherPasses = entry.matcher === undefined ||
|
|
144
|
+
(options.toolName !== undefined && matchesTool(entry.matcher, options.toolName));
|
|
145
|
+
if (!matcherPasses) {
|
|
146
|
+
return 'skip';
|
|
147
|
+
}
|
|
148
|
+
return !entry.filter || Boolean(entry.filter(payload)) ? 'run' : 'skip';
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (options.throwOnHandlerError) {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
console.warn(`[HooksManager] Matcher/filter for handler ${index} of hook "${options.hookName}" threw:`, error);
|
|
155
|
+
return 'skip';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Classify a handler's return value into one of three outcomes:
|
|
160
|
+
*
|
|
161
|
+
* - `async`: an {@link AsyncOutput} fire-and-forget signal (with the tracked
|
|
162
|
+
* work promise, if any)
|
|
163
|
+
* - `skip`: void/undefined/null (side-effect only), or a result that failed
|
|
164
|
+
* schema validation in non-strict mode
|
|
165
|
+
* - `result`: a validated result. When a result schema is supplied, the
|
|
166
|
+
* parsed output is returned -- which may differ from the input for schemas
|
|
167
|
+
* with .transform() / .default() / .catch() / .coerce -- so downstream
|
|
168
|
+
* callers see transformed values. Validation failure in strict mode throws.
|
|
169
|
+
*/
|
|
170
|
+
function classifyHandlerReturn(returnValue, index, options) {
|
|
171
|
+
if (isAsyncOutput(returnValue)) {
|
|
172
|
+
return {
|
|
173
|
+
kind: 'async',
|
|
174
|
+
trackedWork: trackAsyncWork(returnValue, options.hookName, options.onAsyncTimeout),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (returnValue === undefined || returnValue === null) {
|
|
178
|
+
return {
|
|
179
|
+
kind: 'skip',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (!options.resultSchema) {
|
|
183
|
+
return {
|
|
184
|
+
kind: 'result',
|
|
185
|
+
result: returnValue,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
const validation = safeParse(options.resultSchema, returnValue);
|
|
189
|
+
if (!validation.success) {
|
|
190
|
+
const err = new Error(`[HooksManager] Handler ${index} for hook "${options.hookName}" returned an invalid result: ${validation.error.message}`);
|
|
191
|
+
if (options.throwOnHandlerError) {
|
|
192
|
+
throw err;
|
|
193
|
+
}
|
|
194
|
+
console.warn(err.message);
|
|
195
|
+
return {
|
|
196
|
+
kind: 'skip',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
kind: 'result',
|
|
201
|
+
result: validation.data,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Given an {@link AsyncOutput} signal, return a Promise<void> that resolves
|
|
206
|
+
* when the handler's detached `work` settles OR the timeout fires -- whichever
|
|
207
|
+
* is first. Returns `undefined` if there is no work to track.
|
|
208
|
+
*
|
|
209
|
+
* On timeout, `onTimeout` is invoked (the manager uses it to abort the emit's
|
|
210
|
+
* signal) and the tracking promise resolves so `drain()` stops waiting. The
|
|
211
|
+
* detached `work` itself cannot be forcibly cancelled -- handlers must observe
|
|
212
|
+
* `context.signal` to actually stop; the timeout only bounds how long the
|
|
213
|
+
* manager waits and signals cancellation cooperatively.
|
|
214
|
+
*
|
|
215
|
+
* Rejections of the detached `work` promise are logged as warnings. Note:
|
|
216
|
+
* `throwOnHandlerError` governs synchronous handler failures only -- detached
|
|
217
|
+
* fire-and-forget work never re-throws here, it just surfaces via the warning.
|
|
218
|
+
*/
|
|
219
|
+
function trackAsyncWork(output, hookName, onTimeout) {
|
|
220
|
+
if (output.work === undefined) {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
const timeout = output.asyncTimeout ?? DEFAULT_ASYNC_TIMEOUT;
|
|
224
|
+
return new Promise((resolve) => {
|
|
225
|
+
let settled = false;
|
|
226
|
+
const finish = () => {
|
|
227
|
+
if (settled) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
settled = true;
|
|
231
|
+
clearTimeout(timeoutId);
|
|
232
|
+
resolve();
|
|
233
|
+
};
|
|
234
|
+
const timeoutId = setTimeout(() => {
|
|
235
|
+
if (!settled) {
|
|
236
|
+
console.warn(`[HooksManager] Async work for hook "${hookName}" exceeded its ${timeout}ms timeout; abandoning wait.`);
|
|
237
|
+
onTimeout?.(hookName);
|
|
238
|
+
}
|
|
239
|
+
finish();
|
|
240
|
+
}, timeout);
|
|
241
|
+
// In Node.js, Timeout objects expose `.unref()` to remove the reference
|
|
242
|
+
// the timer holds on the event loop. Without this, a leaked hook whose
|
|
243
|
+
// `work` never settles keeps the process alive for the full
|
|
244
|
+
// DEFAULT_ASYNC_TIMEOUT window after the main workload has finished.
|
|
245
|
+
// Guarded for browsers / other environments that return a plain number
|
|
246
|
+
// from setTimeout and don't expose the method.
|
|
247
|
+
if (isUnrefable(timeoutId)) {
|
|
248
|
+
timeoutId.unref();
|
|
249
|
+
}
|
|
250
|
+
output.work?.then(finish, (error) => {
|
|
251
|
+
console.warn(`[HooksManager] Async work for hook "${hookName}" rejected:`, error);
|
|
252
|
+
finish();
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Typeguard for the Node.js Timeout object that carries a `.unref()` method.
|
|
258
|
+
* Browsers and other environments return a number from setTimeout, which has
|
|
259
|
+
* no such method.
|
|
260
|
+
*/
|
|
261
|
+
function isUnrefable(handle) {
|
|
262
|
+
if (typeof handle !== 'object' || handle === null || !('unref' in handle)) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
const candidate = handle;
|
|
266
|
+
return typeof candidate.unref === 'function';
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Apply mutation fields from a result onto the current payload.
|
|
270
|
+
*/
|
|
271
|
+
function applyMutations(payload, result, mutationMap) {
|
|
272
|
+
if (typeof result !== 'object' || result === null) {
|
|
273
|
+
return payload;
|
|
274
|
+
}
|
|
275
|
+
let mutated = payload;
|
|
276
|
+
for (const [resultField, payloadField] of Object.entries(mutationMap)) {
|
|
277
|
+
if (resultField in result) {
|
|
278
|
+
const value = result[resultField];
|
|
279
|
+
if (value !== undefined) {
|
|
280
|
+
mutated = {
|
|
281
|
+
...mutated,
|
|
282
|
+
[payloadField]: value,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return mutated;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Check if a result triggers a short-circuit block.
|
|
291
|
+
*
|
|
292
|
+
* A block fires when the field is `=== true` or a non-empty string. Empty
|
|
293
|
+
* strings are treated as "no block reason supplied" -- they do NOT trigger a
|
|
294
|
+
* short-circuit, which keeps emit consistent with callers that look up the
|
|
295
|
+
* first block reason with a truthy check.
|
|
296
|
+
*/
|
|
297
|
+
function isBlockTriggered(result, blockField) {
|
|
298
|
+
if (typeof result !== 'object' || result === null) {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
const value = result[blockField];
|
|
302
|
+
if (value === true) {
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
return typeof value === 'string' && value.length > 0;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=hooks-emit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-emit.js","sourceRoot":"","sources":["../../src/lib/hooks-emit.ts"],"names":[],"mappings":"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"}
|