@moxxy/sdk 0.15.0 → 0.15.1
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/elision-state.js +23 -23
- package/dist/elision-state.js.map +1 -1
- package/dist/errors.js +17 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/json-file-store.d.ts +6 -1
- package/dist/json-file-store.d.ts.map +1 -1
- package/dist/json-file-store.js +20 -4
- package/dist/json-file-store.js.map +1 -1
- package/dist/mode/collect-stream.d.ts.map +1 -1
- package/dist/mode/collect-stream.js +34 -7
- package/dist/mode/collect-stream.js.map +1 -1
- package/dist/mode/project-messages.d.ts.map +1 -1
- package/dist/mode/project-messages.js +25 -1
- package/dist/mode/project-messages.js.map +1 -1
- package/dist/mode/stable-hash.d.ts +8 -0
- package/dist/mode/stable-hash.d.ts.map +1 -1
- package/dist/mode/stable-hash.js +67 -7
- package/dist/mode/stable-hash.js.map +1 -1
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js +7 -1
- package/dist/mode.js.map +1 -1
- package/dist/provider-utils.d.ts +1 -10
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +20 -11
- package/dist/provider-utils.js.map +1 -1
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +13 -3
- package/dist/tool-dispatch.js.map +1 -1
- package/dist/tunnel.d.ts.map +1 -1
- package/dist/tunnel.js +12 -2
- package/dist/tunnel.js.map +1 -1
- package/package.json +1 -1
- package/src/elision-state.ts +22 -22
- package/src/errors.test.ts +19 -0
- package/src/errors.ts +17 -2
- package/src/index.ts +1 -0
- package/src/json-file-store.test.ts +40 -0
- package/src/json-file-store.ts +25 -4
- package/src/mode/collect-stream.ts +37 -7
- package/src/mode/project-messages.test.ts +64 -2
- package/src/mode/project-messages.ts +23 -1
- package/src/mode/stable-hash.ts +69 -9
- package/src/mode.test.ts +18 -0
- package/src/mode.ts +7 -1
- package/src/provider-utils.test.ts +10 -0
- package/src/provider-utils.ts +20 -11
- package/src/stuck-loop.test.ts +77 -1
- package/src/tool-dispatch.test.ts +215 -0
- package/src/tool-dispatch.ts +13 -3
- package/src/tunnel.ts +12 -2
package/dist/mode/stable-hash.js
CHANGED
|
@@ -2,19 +2,79 @@
|
|
|
2
2
|
* Stable, key-order-canonical hash of a tool call's input, so `{a:1,b:2}` and
|
|
3
3
|
* `{b:2,a:1}` produce the same key. Use for any "have I seen this call before"
|
|
4
4
|
* comparison — a raw `JSON.stringify` is NOT order-stable.
|
|
5
|
+
*
|
|
6
|
+
* MUST be total: the input is a tool call's `input`, typed `unknown` and coming
|
|
7
|
+
* straight from whatever the provider deserialized (it can carry a BigInt, a
|
|
8
|
+
* circular reference, or a deeply nested structure). This hashes in the HOT
|
|
9
|
+
* tool-dispatch path (`detector.record` in tool-dispatch.ts), where an
|
|
10
|
+
* unhandled throw or a stack-overflow from unbounded recursion would crash the
|
|
11
|
+
* whole turn. So every leaf is serialized defensively, cycles are detected and
|
|
12
|
+
* collapsed to a stable marker, and recursion is depth-bounded.
|
|
5
13
|
*/
|
|
6
14
|
export function stableHash(input) {
|
|
7
|
-
|
|
15
|
+
try {
|
|
16
|
+
return canonicalize(input, new WeakSet(), 0);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Last-ditch guard: an exotic value (e.g. a Proxy whose ownKeys/get trap
|
|
20
|
+
// throws, or a getter that throws) could still surface a throw out of the
|
|
21
|
+
// recursive walk. Never let it escape into the hot tool-dispatch path —
|
|
22
|
+
// collapse to a stable opaque marker. Two such inputs hash equal, which at
|
|
23
|
+
// worst makes the stuck detector slightly more eager, never crashes.
|
|
24
|
+
return '"[unhashable]"';
|
|
25
|
+
}
|
|
8
26
|
}
|
|
9
|
-
|
|
27
|
+
// Bound recursion so a hostile/pathologically-nested input can't blow the stack
|
|
28
|
+
// (the JS engine throws RangeError well before this, and a tool input that deep
|
|
29
|
+
// is already degenerate for stuck-detection purposes — treat it as opaque).
|
|
30
|
+
const MAX_DEPTH = 100;
|
|
31
|
+
/** Serialize a primitive leaf without ever throwing (BigInt/symbol/etc.). */
|
|
32
|
+
function leaf(value) {
|
|
33
|
+
switch (typeof value) {
|
|
34
|
+
case 'string':
|
|
35
|
+
return JSON.stringify(value);
|
|
36
|
+
case 'number':
|
|
37
|
+
// JSON.stringify(NaN|±Infinity) is 'null'; keep that, but use a stable
|
|
38
|
+
// distinct token so two different non-finite values don't collide.
|
|
39
|
+
return Number.isFinite(value) ? String(value) : `#${String(value)}`;
|
|
40
|
+
case 'boolean':
|
|
41
|
+
return value ? 'true' : 'false';
|
|
42
|
+
case 'bigint':
|
|
43
|
+
// JSON.stringify THROWS on a BigInt — serialize it ourselves, tagged so a
|
|
44
|
+
// bigint and the equal-valued number never collide.
|
|
45
|
+
return `${value.toString()}n`;
|
|
46
|
+
case 'symbol':
|
|
47
|
+
return `@${String(value)}`;
|
|
48
|
+
case 'function':
|
|
49
|
+
return '"[fn]"';
|
|
50
|
+
default:
|
|
51
|
+
return 'null';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function canonicalize(value, seen, depth) {
|
|
10
55
|
if (value === null || value === undefined)
|
|
11
56
|
return 'null';
|
|
12
57
|
if (typeof value !== 'object')
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
58
|
+
return leaf(value);
|
|
59
|
+
// Cycle guard: a circular reference would recurse forever → stack overflow.
|
|
60
|
+
if (seen.has(value))
|
|
61
|
+
return '"[circular]"';
|
|
62
|
+
if (depth >= MAX_DEPTH)
|
|
63
|
+
return '"[deep]"';
|
|
64
|
+
seen.add(value);
|
|
65
|
+
try {
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
return '[' + value.map((v) => canonicalize(v, seen, depth + 1)).join(',') + ']';
|
|
68
|
+
}
|
|
69
|
+
const entries = Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
70
|
+
return ('{' +
|
|
71
|
+
entries.map(([k, v]) => JSON.stringify(k) + ':' + canonicalize(v, seen, depth + 1)).join(',') +
|
|
72
|
+
'}');
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
// Allow the same object to appear in sibling positions (DAG, not a cycle)
|
|
76
|
+
// without being flagged circular — only ancestors are forbidden.
|
|
77
|
+
seen.delete(value);
|
|
16
78
|
}
|
|
17
|
-
const entries = Object.entries(value).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
18
|
-
return '{' + entries.map(([k, v]) => JSON.stringify(k) + ':' + canonicalize(v)).join(',') + '}';
|
|
19
79
|
}
|
|
20
80
|
//# sourceMappingURL=stable-hash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stable-hash.js","sourceRoot":"","sources":["../../src/mode/stable-hash.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stable-hash.js","sourceRoot":"","sources":["../../src/mode/stable-hash.ts"],"names":[],"mappings":"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"}
|
package/dist/mode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"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"}
|
package/dist/mode.js
CHANGED
|
@@ -16,6 +16,12 @@ const LEGACY_MODE_NAMES = {
|
|
|
16
16
|
};
|
|
17
17
|
/** Map a possibly-legacy mode name to its current name (identity if unknown). */
|
|
18
18
|
export function migrateModeName(name) {
|
|
19
|
-
|
|
19
|
+
// Own-property check: `name` is externally-sourced (config / preferences /
|
|
20
|
+
// setMode RPC). A bare `LEGACY_MODE_NAMES[name]` index would resolve inherited
|
|
21
|
+
// Object.prototype members (`toString`, `constructor`, `__proto__`, …) — all
|
|
22
|
+
// truthy Functions, so `?? name` would NOT fall through and the function would
|
|
23
|
+
// return a Function, breaking its `string` contract and shadowing a mode
|
|
24
|
+
// legitimately named `toString`.
|
|
25
|
+
return Object.hasOwn(LEGACY_MODE_NAMES, name) ? LEGACY_MODE_NAMES[name] : name;
|
|
20
26
|
}
|
|
21
27
|
//# sourceMappingURL=mode.js.map
|
package/dist/mode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AA0MA;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAqC;IAC1D,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,UAAU;IAC3B,cAAc,EAAE,SAAS;IACzB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AA0MA;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAqC;IAC1D,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,UAAU;IAC3B,cAAc,EAAE,SAAS;IACzB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,2EAA2E;IAC3E,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,yEAAyE;IACzE,iCAAiC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC"}
|
package/dist/provider-utils.d.ts
CHANGED
|
@@ -33,14 +33,5 @@ export declare function toFriendlyError(err: unknown, ctx?: {
|
|
|
33
33
|
message: string;
|
|
34
34
|
retryable: boolean;
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
* Best-effort zod → JSON-schema conversion for provider tool definitions.
|
|
38
|
-
* Most callers want the basic object/string/number/boolean/array coverage;
|
|
39
|
-
* for richer schemas, plugins can layer `zod-to-json-schema`.
|
|
40
|
-
*
|
|
41
|
-
* The `as unknown as { ... }` casts below probe zod's `_def` internals
|
|
42
|
-
* (`shape`, `type`) which aren't part of zod's public typed surface but are
|
|
43
|
-
* stable enough across versions to rely on for this best-effort path.
|
|
44
|
-
*/
|
|
45
|
-
export declare function zodToJsonSchema(schema: unknown): unknown;
|
|
36
|
+
export declare function zodToJsonSchema(schema: unknown, depth?: number): unknown;
|
|
46
37
|
//# sourceMappingURL=provider-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,CAAC;AAE5F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAYtD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAYzC;
|
|
1
|
+
{"version":3,"file":"provider-utils.d.ts","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,CAAC;AAE5F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAYtD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAYzC;AAmBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAkInE"}
|
package/dist/provider-utils.js
CHANGED
|
@@ -66,7 +66,16 @@ export function toFriendlyError(err, ctx = {}) {
|
|
|
66
66
|
* (`shape`, `type`) which aren't part of zod's public typed surface but are
|
|
67
67
|
* stable enough across versions to rely on for this best-effort path.
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Max recursion depth for {@link zodToJsonSchema}. A legitimately deep finite
|
|
71
|
+
* schema (or a pathological/adversarial tool definition) recurses one frame per
|
|
72
|
+
* level; past this cap we degrade to the permissive `{}` schema instead of
|
|
73
|
+
* blowing the call stack and taking down provider request construction.
|
|
74
|
+
*/
|
|
75
|
+
const MAX_SCHEMA_DEPTH = 32;
|
|
76
|
+
export function zodToJsonSchema(schema, depth = 0) {
|
|
77
|
+
if (depth > MAX_SCHEMA_DEPTH)
|
|
78
|
+
return {};
|
|
70
79
|
const s = schema;
|
|
71
80
|
// Only honor a pre-serialized schema's `toJSON` for NON-zod objects (a plain
|
|
72
81
|
// JSON-schema object passed through). A real zod schema (has `_def`) MUST go
|
|
@@ -83,7 +92,7 @@ export function zodToJsonSchema(schema) {
|
|
|
83
92
|
// Codex's /responses validator reject ("object schema missing properties").
|
|
84
93
|
if (typeName === 'ZodEffects') {
|
|
85
94
|
const inner = def.schema;
|
|
86
|
-
return zodToJsonSchema(inner);
|
|
95
|
+
return zodToJsonSchema(inner, depth + 1);
|
|
87
96
|
}
|
|
88
97
|
// ZodOptional / ZodNullable / ZodDefault / ZodBranded / ZodReadonly all
|
|
89
98
|
// wrap an inner schema we want to unwrap for JSON-schema purposes.
|
|
@@ -93,7 +102,7 @@ export function zodToJsonSchema(schema) {
|
|
|
93
102
|
typeName === 'ZodBranded' ||
|
|
94
103
|
typeName === 'ZodReadonly') {
|
|
95
104
|
const inner = def.innerType;
|
|
96
|
-
return zodToJsonSchema(inner);
|
|
105
|
+
return zodToJsonSchema(inner, depth + 1);
|
|
97
106
|
}
|
|
98
107
|
// `.and(other)` produces a ZodIntersection. The standard JSON-schema
|
|
99
108
|
// representation is `allOf`, but strict validators (Codex again) want
|
|
@@ -102,8 +111,8 @@ export function zodToJsonSchema(schema) {
|
|
|
102
111
|
// and required lists into one object. Fall back to `allOf` otherwise.
|
|
103
112
|
if (typeName === 'ZodIntersection') {
|
|
104
113
|
const intersection = def;
|
|
105
|
-
const left = zodToJsonSchema(intersection.left);
|
|
106
|
-
const right = zodToJsonSchema(intersection.right);
|
|
114
|
+
const left = zodToJsonSchema(intersection.left, depth + 1);
|
|
115
|
+
const right = zodToJsonSchema(intersection.right, depth + 1);
|
|
107
116
|
if (left &&
|
|
108
117
|
right &&
|
|
109
118
|
left.type === 'object' &&
|
|
@@ -127,7 +136,7 @@ export function zodToJsonSchema(schema) {
|
|
|
127
136
|
const properties = {};
|
|
128
137
|
const required = [];
|
|
129
138
|
for (const [key, value] of Object.entries(shape)) {
|
|
130
|
-
properties[key] = zodToJsonSchema(value);
|
|
139
|
+
properties[key] = zodToJsonSchema(value, depth + 1);
|
|
131
140
|
const isOptional = value.isOptional?.();
|
|
132
141
|
if (!isOptional)
|
|
133
142
|
required.push(key);
|
|
@@ -156,11 +165,11 @@ export function zodToJsonSchema(schema) {
|
|
|
156
165
|
}
|
|
157
166
|
if (typeName === 'ZodUnion' || typeName === 'ZodDiscriminatedUnion') {
|
|
158
167
|
const options = def.options;
|
|
159
|
-
return { anyOf: options.map((o) => zodToJsonSchema(o)) };
|
|
168
|
+
return { anyOf: options.map((o) => zodToJsonSchema(o, depth + 1)) };
|
|
160
169
|
}
|
|
161
170
|
if (typeName === 'ZodArray') {
|
|
162
171
|
// ZodArray._def.type is the element schema.
|
|
163
|
-
const items = zodToJsonSchema(def.type);
|
|
172
|
+
const items = zodToJsonSchema(def.type, depth + 1);
|
|
164
173
|
return { type: 'array', items };
|
|
165
174
|
}
|
|
166
175
|
if (typeName === 'ZodRecord') {
|
|
@@ -168,18 +177,18 @@ export function zodToJsonSchema(schema) {
|
|
|
168
177
|
// one schema. Carry the value schema through `additionalProperties` rather
|
|
169
178
|
// than discarding it to the permissive fallback below.
|
|
170
179
|
const valueType = def.valueType;
|
|
171
|
-
return { type: 'object', additionalProperties: zodToJsonSchema(valueType) };
|
|
180
|
+
return { type: 'object', additionalProperties: zodToJsonSchema(valueType, depth + 1) };
|
|
172
181
|
}
|
|
173
182
|
if (typeName === 'ZodTuple') {
|
|
174
183
|
// ZodTuple._def.items is the ordered element schemas; `rest` (if set) is the
|
|
175
184
|
// variadic tail. Emit a fixed-position `items` array + an `additionalItems`
|
|
176
185
|
// schema for the rest, mirroring JSON-schema's positional-tuple form.
|
|
177
186
|
const tupleDef = def;
|
|
178
|
-
const items = tupleDef.items.map((i) => zodToJsonSchema(i));
|
|
187
|
+
const items = tupleDef.items.map((i) => zodToJsonSchema(i, depth + 1));
|
|
179
188
|
return {
|
|
180
189
|
type: 'array',
|
|
181
190
|
items,
|
|
182
|
-
...(tupleDef.rest != null ? { additionalItems: zodToJsonSchema(tupleDef.rest) } : {}),
|
|
191
|
+
...(tupleDef.rest != null ? { additionalItems: zodToJsonSchema(tupleDef.rest, depth + 1) } : {}),
|
|
183
192
|
};
|
|
184
193
|
}
|
|
185
194
|
if (typeName === 'ZodAny' || typeName === 'ZodUnknown') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKnD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,4DAA4D;IAC5D,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAC;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,uBAAuB,IAAI,IAAI,KAAK,uBAAuB;YAAE,OAAO,IAAI,CAAC;QACtF,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,qBAAqB;YAAE,OAAO,IAAI,CAAC;IAChF,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAY,EACZ,MAA6D,EAAE;IAE/D,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,SAAS,EAAE,gBAAgB,CAAC,UAAU,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACzD,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKnD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,4DAA4D;IAC5D,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAC;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,uBAAuB,IAAI,IAAI,KAAK,uBAAuB;YAAE,OAAO,IAAI,CAAC;QACtF,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,qBAAqB;YAAE,OAAO,IAAI,CAAC;IAChF,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAY,EACZ,MAA6D,EAAE;IAE/D,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,SAAS,EAAE,gBAAgB,CAAC,UAAU,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACzD,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,KAAK,GAAG,CAAC;IACxD,IAAI,KAAK,GAAG,gBAAgB;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,GAAG,MAAkE,CAAC;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,+EAA+E;IAC/E,mEAAmE;IACnE,kEAAkE;IAClE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;IACnB,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,CAAC;IAE/B,sEAAsE;IACtE,oEAAoE;IACpE,uEAAuE;IACvE,4EAA4E;IAC5E,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAI,GAAsC,CAAC,MAAM,CAAC;QAC7D,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,wEAAwE;IACxE,mEAAmE;IACnE,IACE,QAAQ,KAAK,aAAa;QAC1B,QAAQ,KAAK,aAAa;QAC1B,QAAQ,KAAK,YAAY;QACzB,QAAQ,KAAK,YAAY;QACzB,QAAQ,KAAK,aAAa,EAC1B,CAAC;QACD,MAAM,KAAK,GAAI,GAAyC,CAAC,SAAS,CAAC;QACnE,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,qEAAqE;IACrE,sEAAsE;IACtE,0EAA0E;IAC1E,sEAAsE;IACtE,sEAAsE;IACtE,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,GAAmD,CAAC;QACzE,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAA4B,CAAC;QACtF,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAA4B,CAAC;QACxF,IACE,IAAI;YACJ,KAAK;YACL,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,KAAK,CAAC,IAAI,KAAK,QAAQ;YACvB,IAAI,CAAC,UAAU;YACf,KAAK,CAAC,UAAU,EAChB,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,GAAI,IAAI,CAAC,UAAqB,EAAE,GAAI,KAAK,CAAC,UAAqB,EAAE;gBAC/E,QAAQ,EAAE,KAAK,CAAC,IAAI,CAClB,IAAI,GAAG,CAAC;oBACN,GAAG,CAAE,IAAI,CAAC,QAAkC,IAAI,EAAE,CAAC;oBACnD,GAAG,CAAE,KAAK,CAAC,QAAkC,IAAI,EAAE,CAAC;iBACrD,CAAC,CACH;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,sEAAsE;QACtE,MAAM,KAAK,GAAI,GAA2D,CAAC,KAAK,EAAE,CAAC;QACnF,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,UAAU,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACpD,MAAM,UAAU,GAAI,KAAwC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC5E,IAAI,CAAC,UAAU;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxD,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxD,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAI,GAAoD,CAAC,MAAM,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CACzB,GAA8D,CAAC,MAAM,CACvE,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAI,GAA8D,CAAC,KAAK,CAAC;QACpF,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QACpE,MAAM,OAAO,GAAI,GAAsD,CAAC,OAAO,CAAC;QAChF,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,4CAA4C;QAC5C,MAAM,KAAK,GAAG,eAAe,CAAE,GAAoC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,2EAA2E;QAC3E,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,SAAS,GAAI,GAAyC,CAAC,SAAS,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,4EAA4E;QAC5E,sEAAsE;QACtE,MAAM,QAAQ,GAAG,GAAmE,CAAC;QACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK;YACL,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjG,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACvD,2EAA2E;QAC3E,iEAAiE;QACjE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-dispatch.d.ts","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAuB,gBAAgB,CACrC,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,gBAAgB,EACnB,SAAS,EAAE,MAAM,GAChB,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tool-dispatch.d.ts","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAuB,gBAAgB,CACrC,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,gBAAgB,EACnB,SAAS,EAAE,MAAM,GAChB,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CA+F3C;AAgCD;;;;;;;GAOG;AACH,wBAAuB,eAAe,CACpC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACzC,SAAS,EAAE,MAAM,GAChB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAmC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;8CAC0C;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC;mCAC+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC1F;0CACsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KAC3B,KAAK,aAAa,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAuB,0BAA0B,CAC/C,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACzC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,eAAe,GACtB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CA2C9C"}
|
package/dist/tool-dispatch.js
CHANGED
|
@@ -14,6 +14,11 @@ import { asToolCallId } from './ids.js';
|
|
|
14
14
|
* then rejects on the next turn.
|
|
15
15
|
*/
|
|
16
16
|
export async function* dispatchToolCall(ctx, t, iteration) {
|
|
17
|
+
// Set once the tool body resolves, so the outer catch can tell a genuine
|
|
18
|
+
// pre-execute failure (hook/permission/emit-before-run threw) apart from a
|
|
19
|
+
// post-run failure (the tool ran — possibly with side effects — but emitting
|
|
20
|
+
// its success result threw). The two warrant different log wording.
|
|
21
|
+
let executed = false;
|
|
17
22
|
try {
|
|
18
23
|
const verdict = await ctx.hooks.dispatchToolCall({
|
|
19
24
|
sessionId: ctx.sessionId,
|
|
@@ -55,6 +60,7 @@ export async function* dispatchToolCall(ctx, t, iteration) {
|
|
|
55
60
|
log: ctx.log,
|
|
56
61
|
...(ctx.subagents ? { subagents: ctx.subagents } : {}),
|
|
57
62
|
});
|
|
63
|
+
executed = true;
|
|
58
64
|
yield await ctx.emit({
|
|
59
65
|
type: 'tool_result',
|
|
60
66
|
sessionId: ctx.sessionId,
|
|
@@ -81,9 +87,13 @@ export async function* dispatchToolCall(ctx, t, iteration) {
|
|
|
81
87
|
}
|
|
82
88
|
catch (err) {
|
|
83
89
|
// Defensive: a hook handler, permission resolver, or the emit itself threw
|
|
84
|
-
// before we could produce a tool_result. Synthesize a failed
|
|
85
|
-
// event log stays well-formed (no orphan tool_call_requested).
|
|
90
|
+
// before (or after) we could produce a tool_result. Synthesize a failed
|
|
91
|
+
// result so the event log stays well-formed (no orphan tool_call_requested).
|
|
92
|
+
// When `executed` is set the tool actually ran (possibly with side effects)
|
|
93
|
+
// and only the success-result emit failed — don't mislabel that as a
|
|
94
|
+
// pre-execute failure.
|
|
86
95
|
const message = err instanceof Error ? err.message : String(err);
|
|
96
|
+
const prefix = executed ? 'tool ran but result emit failed' : 'pre-execute failure';
|
|
87
97
|
yield await ctx.emit({
|
|
88
98
|
type: 'tool_result',
|
|
89
99
|
sessionId: ctx.sessionId,
|
|
@@ -91,7 +101,7 @@ export async function* dispatchToolCall(ctx, t, iteration) {
|
|
|
91
101
|
source: 'tool',
|
|
92
102
|
callId: asToolCallId(t.id),
|
|
93
103
|
ok: false,
|
|
94
|
-
error: { kind: 'threw', message:
|
|
104
|
+
error: { kind: 'threw', message: `${prefix}: ${message}` },
|
|
95
105
|
});
|
|
96
106
|
}
|
|
97
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-dispatch.js","sourceRoot":"","sources":["../src/tool-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMxC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACrC,GAAgB,EAChB,CAAmB,EACnB,SAAiB;IAEjB,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,oEAAoE;IACpE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAC/C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,yEAAyE;YACzE,wEAAwE;YACxE,iEAAiE;YACjE,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS;YACT,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;SACnE,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE3E,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAC1C,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAChE,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAC1F,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,oBAAoB,EAAE,UAAU,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,oBAAoB;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;gBACtE,MAAM,EAAE,CAAC,CAAC,EAAE;gBACZ,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;gBAChC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,CAAC,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,EAAE,EAAE,IAAI;gBACR,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,IAAI,GAAwB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2EAA2E;QAC3E,wEAAwE;QACxE,6EAA6E;QAC7E,4EAA4E;QAC5E,qEAAqE;QACrE,uBAAuB;QACvB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACpF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,OAAO,EAAE,EAAE;SAC3D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAAwB;IACxC,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,UAAU,CACxB,GAAgB,EAChB,CAAmB,EACnB,MAAc,EACd,EAAkC;IAElC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,EAAE;QACb,MAAM;KACP,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,GAAgB,EAChB,QAAyC,EACzC,SAAiB;IAEjB,sEAAsE;IACtE,uEAAuE;IACvE,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,8BAA8B,EAAE;iBACpE,CAAC,CAAC;YACL,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,sCAAsC;aAC/C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA2BD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,0BAA0B,CAC/C,GAAgB,EAChB,QAAyC,EACzC,QAA2B,EAC3B,MAAuB;IAEvB,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,SAAS;QACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,oBAAoB,EAAE;aACjE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC;QAC3E,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5F,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/tunnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,4EAA4E;IAC5E,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,4EAA4E;IAC5E,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;AAqFD,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,iEAAiE;IACjE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAMlE"}
|
package/dist/tunnel.js
CHANGED
|
@@ -63,8 +63,18 @@ function ensureExitHook() {
|
|
|
63
63
|
liveChildren.clear();
|
|
64
64
|
};
|
|
65
65
|
process.once('exit', killAll);
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
// Registering a SIGINT/SIGTERM listener suppresses Node's default
|
|
67
|
+
// terminate-on-signal behavior, so an entrypoint that spawns a tunnel but
|
|
68
|
+
// installs no exit handler of its own would swallow the first Ctrl-C and hang
|
|
69
|
+
// with the process still alive. Re-raise the signal after cleanup so the
|
|
70
|
+
// default termination still fires. `process.once` removes the listener before
|
|
71
|
+
// it runs, so re-raising hits Node's default disposition (terminate).
|
|
72
|
+
const onSignal = (sig) => () => {
|
|
73
|
+
killAll();
|
|
74
|
+
process.kill(process.pid, sig);
|
|
75
|
+
};
|
|
76
|
+
process.once('SIGINT', onSignal('SIGINT'));
|
|
77
|
+
process.once('SIGTERM', onSignal('SIGTERM'));
|
|
68
78
|
}
|
|
69
79
|
/** Track a spawned child; returns an `untrack()` that also kills it cleanly. */
|
|
70
80
|
function trackChild(child) {
|
package/dist/tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAsB9D,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,gFAAgF;AAChF,gEAAgE;AAChE,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgB,CAAC;AAC7C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,SAAS,SAAS,CAAC,KAAmB;IACpC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;QAAE,OAAO;IAC/D,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IACD,4EAA4E;IAC5E,8BAA8B;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;QACxB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IACZ,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,iBAAiB;QAAE,OAAO;IAC9B,iBAAiB,GAAG,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,uDAAuD;YAChF,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU;YACZ,CAAC;QACH,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/elision-state.ts
CHANGED
|
@@ -71,34 +71,34 @@ const EMPTY_STATE: ElisionState = {
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
74
|
+
* Memo of {@link computeElisionState} results, keyed on the IDENTITY of the
|
|
75
|
+
* events array each was folded from.
|
|
76
76
|
*
|
|
77
77
|
* The event log is append-only and every held event is immutable (invariant
|
|
78
78
|
* #6: events at/below the HWM never change), so a given snapshot array is a
|
|
79
79
|
* stable, never-mutated value: the same array reference always denotes the
|
|
80
80
|
* same content and therefore the same state. A new turn produces a NEW snapshot
|
|
81
|
-
* array (the live `log.slice()` returns a fresh array each call), so
|
|
82
|
-
*
|
|
83
|
-
*
|
|
81
|
+
* array (the live `log.slice()` returns a fresh array each call), so a stale
|
|
82
|
+
* array key simply falls out of use — there is no way for an entry to serve a
|
|
83
|
+
* state that is stale for the array it is keyed on.
|
|
84
84
|
*
|
|
85
85
|
* Keying on identity (not a content hash of `id`/`seq`/payload) is the only
|
|
86
|
-
* SOUND
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
86
|
+
* SOUND choice for a pure fold over an arbitrary array: two logically-different
|
|
87
|
+
* logs can share ids/seqs (e.g. a test that rebuilds the same prefix with
|
|
88
|
+
* different payload, or a re-config), and a content hash that missed a payload
|
|
89
|
+
* field would serve a stale state — a correctness bug. Array identity can never
|
|
90
|
+
* collide across distinct values.
|
|
91
91
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
92
|
+
* A `WeakMap` (rather than a single global slot) survives interleaving: the
|
|
93
|
+
* runner serves multiple sessions in ONE process, so two sessions' iterations
|
|
94
|
+
* can alternate; a single slot would evict each other's memo on every call,
|
|
95
|
+
* serving ~zero hits and re-folding O(events) each time. The WeakMap holds an
|
|
96
|
+
* entry per live snapshot array and lets it be GC'd once the array is dropped,
|
|
97
|
+
* so concurrent sessions each keep their own hot snapshot. Threading a
|
|
98
|
+
* precomputed state stays the explicit zero-cost fast path; this memo covers
|
|
99
|
+
* callers that re-pass the same array but can't thread.
|
|
99
100
|
*/
|
|
100
|
-
|
|
101
|
-
let memoState: ElisionState | null = null;
|
|
101
|
+
const memo = new WeakMap<ReadonlyArray<MoxxyEvent>, ElisionState>();
|
|
102
102
|
|
|
103
103
|
/**
|
|
104
104
|
* Derive elision state purely from the log: the active high-water mark + flags
|
|
@@ -110,10 +110,10 @@ let memoState: ElisionState | null = null;
|
|
|
110
110
|
* (and `===` on a cache hit) to a fresh fold.
|
|
111
111
|
*/
|
|
112
112
|
export function computeElisionState(events: ReadonlyArray<MoxxyEvent>): ElisionState {
|
|
113
|
-
|
|
113
|
+
const cached = memo.get(events);
|
|
114
|
+
if (cached !== undefined) return cached;
|
|
114
115
|
const state = computeElisionStateUncached(events);
|
|
115
|
-
|
|
116
|
-
memoState = state;
|
|
116
|
+
memo.set(events, state);
|
|
117
117
|
return state;
|
|
118
118
|
}
|
|
119
119
|
|
package/src/errors.test.ts
CHANGED
|
@@ -117,6 +117,18 @@ describe('classifyNetworkError', () => {
|
|
|
117
117
|
it('returns null for non-network errors so other handlers can take over', () => {
|
|
118
118
|
expect(classifyNetworkError(new Error('something else'))).toBeNull();
|
|
119
119
|
});
|
|
120
|
+
|
|
121
|
+
it('does not throw on a malformed/relative ctx.url — degrades to the raw string', () => {
|
|
122
|
+
// A bad base URL must not make `new URL()` throw from inside the classifier
|
|
123
|
+
// and mask the real network error.
|
|
124
|
+
expect(() =>
|
|
125
|
+
classifyNetworkError(nodeFetchError('ECONNREFUSED'), { url: 'not a url' }),
|
|
126
|
+
).not.toThrow();
|
|
127
|
+
const out = classifyNetworkError(nodeFetchError('ECONNREFUSED'), { url: '/relative/path' });
|
|
128
|
+
expect(out!.code).toBe('NETWORK_UNREACHABLE');
|
|
129
|
+
expect(out!.message).toContain('/relative/path');
|
|
130
|
+
expect(out!.context).toEqual({ url: '/relative/path' });
|
|
131
|
+
});
|
|
120
132
|
});
|
|
121
133
|
|
|
122
134
|
describe('classifyHttpStatus', () => {
|
|
@@ -148,6 +160,13 @@ describe('classifyHttpStatus', () => {
|
|
|
148
160
|
expect(classifyHttpStatus(404)).toBeNull();
|
|
149
161
|
expect(classifyHttpStatus(418)).toBeNull();
|
|
150
162
|
});
|
|
163
|
+
|
|
164
|
+
it('does not throw on a malformed ctx.url — degrades to the raw string', () => {
|
|
165
|
+
expect(() => classifyHttpStatus(401, { url: 'not a url' })).not.toThrow();
|
|
166
|
+
const out = classifyHttpStatus(401, { url: 'not a url' });
|
|
167
|
+
expect(out!.code).toBe('AUTH_INVALID');
|
|
168
|
+
expect(out!.message).toContain('not a url');
|
|
169
|
+
});
|
|
151
170
|
});
|
|
152
171
|
|
|
153
172
|
describe('toFriendlyError', () => {
|
package/src/errors.ts
CHANGED
|
@@ -126,7 +126,7 @@ export function classifyNetworkError(
|
|
|
126
126
|
|
|
127
127
|
const code = extractNodeErrorCode(err);
|
|
128
128
|
const url = ctx.url;
|
|
129
|
-
const target = url ?
|
|
129
|
+
const target = url ? hostOf(url) : (ctx.provider ?? 'the upstream service');
|
|
130
130
|
const baseContext: Record<string, string> = {};
|
|
131
131
|
if (url) baseContext.url = url;
|
|
132
132
|
if (ctx.provider) baseContext.provider = ctx.provider;
|
|
@@ -256,7 +256,7 @@ export function classifyHttpStatus(
|
|
|
256
256
|
status: number,
|
|
257
257
|
ctx: { readonly url?: string; readonly provider?: string; readonly body?: string } = {},
|
|
258
258
|
): MoxxyError | null {
|
|
259
|
-
const target = ctx.provider ?? (ctx.url ?
|
|
259
|
+
const target = ctx.provider ?? (ctx.url ? hostOf(ctx.url) : 'the upstream service');
|
|
260
260
|
const tail = ctx.body ? ` — ${truncate(ctx.body, 200)}` : '';
|
|
261
261
|
const context: Record<string, string | number> = { status };
|
|
262
262
|
if (ctx.url) context.url = ctx.url;
|
|
@@ -305,6 +305,21 @@ export function classifyHttpStatus(
|
|
|
305
305
|
return null;
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Extract a URL's host for display. `url` is caller-supplied (provider base
|
|
310
|
+
* URLs, OAuth token URLs) and may be malformed/relative — `new URL()` would
|
|
311
|
+
* throw `ERR_INVALID_URL` from inside the error classifier, masking the real
|
|
312
|
+
* failure the caller is trying to report. Degrade gracefully to the raw string
|
|
313
|
+
* instead of throwing while classifying an error.
|
|
314
|
+
*/
|
|
315
|
+
function hostOf(url: string): string {
|
|
316
|
+
try {
|
|
317
|
+
return new URL(url).host;
|
|
318
|
+
} catch {
|
|
319
|
+
return url;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
308
323
|
function truncate(s: string, max: number): string {
|
|
309
324
|
if (s.length <= max) return s;
|
|
310
325
|
return `${s.slice(0, max - 1)}…`;
|