@namzu/sdk 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/dist/compaction/__tests__/verifier-empty-reply.test.d.ts +12 -0
- package/dist/compaction/__tests__/verifier-empty-reply.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/verifier-empty-reply.test.js +73 -0
- package/dist/compaction/__tests__/verifier-empty-reply.test.js.map +1 -0
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +10 -1
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/config/__tests__/compaction-budget-schema.test.d.ts +18 -0
- package/dist/config/__tests__/compaction-budget-schema.test.d.ts.map +1 -0
- package/dist/config/__tests__/compaction-budget-schema.test.js +96 -0
- package/dist/config/__tests__/compaction-budget-schema.test.js.map +1 -0
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +20 -11
- package/dist/config/runtime.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +2 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +3 -1
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/provider/__tests__/errors.test.d.ts +2 -0
- package/dist/provider/__tests__/errors.test.d.ts.map +1 -0
- package/dist/provider/__tests__/errors.test.js +61 -0
- package/dist/provider/__tests__/errors.test.js.map +1 -0
- package/dist/provider/errors.d.ts +108 -0
- package/dist/provider/errors.d.ts.map +1 -0
- package/dist/provider/errors.js +311 -0
- package/dist/provider/errors.js.map +1 -0
- package/dist/provider/index.d.ts +2 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +1 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/public-runtime.d.ts +11 -11
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +11 -11
- package/dist/public-runtime.js.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +45 -12
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/execute.test.js +104 -7
- package/dist/registry/tool/execute.test.js.map +1 -1
- package/dist/registry/toolset/catalog.d.ts.map +1 -1
- package/dist/registry/toolset/catalog.js +17 -4
- package/dist/registry/toolset/catalog.js.map +1 -1
- package/dist/registry/toolset/catalog.test.js +101 -0
- package/dist/registry/toolset/catalog.test.js.map +1 -1
- package/dist/runtime/query/__tests__/capability-negotiation.test.js +79 -0
- package/dist/runtime/query/__tests__/capability-negotiation.test.js.map +1 -1
- package/dist/runtime/query/__tests__/deferred-tools.test.js +100 -0
- package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -1
- package/dist/runtime/query/__tests__/long-document-flow.test.js +12 -12
- package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -1
- package/dist/runtime/query/__tests__/stream-recovery.test.js +55 -2
- package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -1
- package/dist/runtime/query/executor.js +2 -2
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +10 -0
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.d.ts +32 -0
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.js +152 -0
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +52 -12
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +11 -5
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +11 -1
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/tools/builtins/__tests__/edit.test.js +216 -10
- package/dist/tools/builtins/__tests__/edit.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/payload-budget.test.js +30 -16
- package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/write-file.test.js +37 -13
- package/dist/tools/builtins/__tests__/write-file.test.js.map +1 -1
- package/dist/tools/builtins/atomic-write-file.d.ts +13 -0
- package/dist/tools/builtins/atomic-write-file.d.ts.map +1 -0
- package/dist/tools/builtins/atomic-write-file.js +46 -0
- package/dist/tools/builtins/atomic-write-file.js.map +1 -0
- package/dist/tools/builtins/bash.js +2 -2
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts +2 -5
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +105 -125
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/file-mutation-lock.d.ts +7 -0
- package/dist/tools/builtins/file-mutation-lock.d.ts.map +1 -0
- package/dist/tools/builtins/file-mutation-lock.js +25 -0
- package/dist/tools/builtins/file-mutation-lock.js.map +1 -0
- package/dist/tools/builtins/index.js +2 -2
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts +1 -2
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +66 -40
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/__tests__/task-list.test.js +14 -0
- package/dist/tools/coordinator/__tests__/task-list.test.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts +6 -8
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +11 -32
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/defineTool.d.ts +3 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +3 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/types/provider/chat.d.ts +9 -0
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/error.d.ts +22 -0
- package/dist/types/provider/error.d.ts.map +1 -0
- package/dist/types/provider/error.js +2 -0
- package/dist/types/provider/error.js.map +1 -0
- package/dist/types/provider/index.d.ts +1 -0
- package/dist/types/provider/index.d.ts.map +1 -1
- package/dist/types/run/entity.d.ts +2 -0
- package/dist/types/run/entity.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +2 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/sandbox/index.d.ts +4 -0
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +20 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/compaction/__tests__/verifier-empty-reply.test.ts +96 -0
- package/src/compaction/verifier.ts +10 -1
- package/src/config/__tests__/compaction-budget-schema.test.ts +114 -0
- package/src/config/runtime.ts +20 -11
- package/src/manager/run/persistence.ts +3 -1
- package/src/provider/__tests__/errors.test.ts +85 -0
- package/src/provider/errors.ts +344 -0
- package/src/provider/index.ts +15 -0
- package/src/public-runtime.ts +53 -10
- package/src/registry/tool/execute.test.ts +121 -7
- package/src/registry/tool/execute.ts +50 -12
- package/src/registry/toolset/catalog.test.ts +118 -0
- package/src/registry/toolset/catalog.ts +26 -4
- package/src/runtime/query/__tests__/capability-negotiation.test.ts +88 -0
- package/src/runtime/query/__tests__/deferred-tools.test.ts +111 -0
- package/src/runtime/query/__tests__/long-document-flow.test.ts +12 -12
- package/src/runtime/query/__tests__/stream-recovery.test.ts +65 -2
- package/src/runtime/query/executor.ts +2 -2
- package/src/runtime/query/iteration/index.ts +15 -0
- package/src/runtime/query/iteration/phases/compaction-safe-cut.test.ts +186 -0
- package/src/runtime/query/iteration/phases/compaction.ts +54 -12
- package/src/runtime/query/iteration/stream-turn.ts +11 -6
- package/src/runtime/query/result.ts +11 -1
- package/src/tools/builtins/__tests__/edit.test.ts +270 -10
- package/src/tools/builtins/__tests__/payload-budget.test.ts +40 -20
- package/src/tools/builtins/__tests__/write-file.test.ts +52 -13
- package/src/tools/builtins/atomic-write-file.ts +58 -0
- package/src/tools/builtins/bash.ts +2 -2
- package/src/tools/builtins/edit.ts +116 -162
- package/src/tools/builtins/file-mutation-lock.ts +27 -0
- package/src/tools/builtins/index.ts +2 -2
- package/src/tools/builtins/write-file.ts +68 -44
- package/src/tools/coordinator/__tests__/task-list.test.ts +16 -0
- package/src/tools/coordinator/agent.ts +6 -8
- package/src/tools/coordinator/index.ts +11 -34
- package/src/tools/defineTool.ts +6 -0
- package/src/types/provider/chat.ts +14 -1
- package/src/types/provider/error.ts +29 -0
- package/src/types/provider/index.ts +5 -0
- package/src/types/run/entity.ts +2 -0
- package/src/types/run/events.ts +7 -1
- package/src/types/sandbox/index.ts +4 -0
- package/src/types/tool/index.ts +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,111 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 6b0fbfd: Replace the built-in filesystem mutation contracts with one strict canonical
|
|
8
|
+
shape per tool: `edit` accepts `path`, `old_string`, `new_string`, and optional
|
|
9
|
+
`replace_all`; `write` accepts `path` and `content`. Remove line insertion and
|
|
10
|
+
legacy aliases, serialize same-process mutations by resolved path, and document
|
|
11
|
+
replay-safe marker advancement for bounded long-document writes. Local writes
|
|
12
|
+
commit through same-directory temp files and atomic rename; sandbox
|
|
13
|
+
implementations are required to provide the same atomic replacement contract.
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 11167dd: Separate runtime tool validation from canonical model-facing JSON Schema,
|
|
18
|
+
propagate constrained-input hints through the agent loop, and map reviewed
|
|
19
|
+
schemas to Anthropic strict tool use with capability-aware overrides. The
|
|
20
|
+
built-in edit tool advertises only canonical arguments.
|
|
21
|
+
|
|
22
|
+
## 1.4.0
|
|
23
|
+
|
|
24
|
+
### Minor Changes
|
|
25
|
+
|
|
26
|
+
- 3fd2524: Normalize request-start and mid-stream failures across all seven provider
|
|
27
|
+
drivers with the new public `ProviderRequestError` taxonomy. Errors expose
|
|
28
|
+
`kind` (`throttle`, `network`, `auth`, `context_overflow`, `bad_request`, or
|
|
29
|
+
`server`), `providerId`, and optional `status` / `retryAfterMs`, with
|
|
30
|
+
`isProviderRequestError` available for structural narrowing across package
|
|
31
|
+
copies.
|
|
32
|
+
|
|
33
|
+
Provider error messages and metadata deliberately omit vendor response bodies,
|
|
34
|
+
URLs, messages, and causes because upstream errors can echo credentials. HTTP
|
|
35
|
+
dialect-mismatch diagnostics now keep only the endpoint origin and status.
|
|
36
|
+
Caller-owned aborts remain unchanged instead of being reclassified.
|
|
37
|
+
|
|
38
|
+
The runtime preserves the classified error through streaming and publishes its
|
|
39
|
+
safe metadata as `Run.lastProviderError` and
|
|
40
|
+
`run_failed.providerError`. Bedrock stream-exception events and provider
|
|
41
|
+
iterator/SSE failures no longer appear as clean end-of-stream.
|
|
42
|
+
|
|
43
|
+
`retryAfterMs` is metadata only; this change does not add retries or alter vendor
|
|
44
|
+
SDK retry settings. Provider packages now require `@namzu/sdk >=1.3.0`, the
|
|
45
|
+
first SDK release containing these runtime helpers and types.
|
|
46
|
+
|
|
47
|
+
Ollama now maps `done_reason: "length"` truthfully so runtime continuation can
|
|
48
|
+
run. LM Studio treats content-free `contextLengthReached` as context overflow,
|
|
49
|
+
while preserving `"length"` after partial content, and creates its WebSocket
|
|
50
|
+
client lazily on first use.
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- c7cf4c7: Compaction can no longer delete the turn it is compacting.
|
|
55
|
+
|
|
56
|
+
The recent-window boundary was snapped FORWARD to avoid splitting a tool pair,
|
|
57
|
+
but that walk skips leading `tool` messages with no stop short of the end of the
|
|
58
|
+
transcript. Whenever the whole suffix from the naive boundary is `tool` messages —
|
|
59
|
+
one assistant turn fanning out at least `keepRecentMessages` parallel calls,
|
|
60
|
+
measured at the start of the very next iteration, which is exactly where the
|
|
61
|
+
compaction check runs — the boundary landed on `messages.length`, the recent
|
|
62
|
+
window came back empty, and the rebuilt transcript held no non-system message at
|
|
63
|
+
all. The model was then asked to answer a conversation whose last turn, including
|
|
64
|
+
the user's own message, had been removed. The existing older-message floor guard
|
|
65
|
+
cannot catch it: in that shape the older half is the whole transcript.
|
|
66
|
+
|
|
67
|
+
The boundary is now the largest safe one AT OR BELOW naive, so a pass never
|
|
68
|
+
removes more than the naive cut would and at least `keepRecentMessages` original
|
|
69
|
+
messages always survive verbatim. When no safe boundary exists the pass is
|
|
70
|
+
skipped and the transcript is left intact — one iteration of context headroom is
|
|
71
|
+
cheaper than the live turn, and the condition clears itself as soon as the next
|
|
72
|
+
assistant message moves the boundary past the tool block. The same change stops
|
|
73
|
+
the leading system prompts being duplicated into the recent window when the naive
|
|
74
|
+
boundary lands inside the system prefix. `findSafeTrimIndex` is unchanged and is
|
|
75
|
+
reused as the safety predicate.
|
|
76
|
+
|
|
77
|
+
Two smaller silent losses in the same area:
|
|
78
|
+
|
|
79
|
+
An empty verification reply is now treated like `COMPLETE`. A truncated turn, a
|
|
80
|
+
refusal, or an exhausted `llmVerificationMaxTokens` produced an empty string,
|
|
81
|
+
which fell through to the append path and stamped a bare
|
|
82
|
+
`## LLM Verification Additions` heading with nothing under it — an empty promise
|
|
83
|
+
that then rode in every subsequent system prompt for the rest of the run.
|
|
84
|
+
|
|
85
|
+
Every compaction count is `z.number().int().positive()` instead of
|
|
86
|
+
`z.number().positive()`. Zod's base number check rejects only non-numbers and
|
|
87
|
+
`NaN`, so `Infinity` and fractional values both parsed. `Infinity` was the
|
|
88
|
+
dangerous one: it disarms the budget it guards rather than failing, so
|
|
89
|
+
`convoTextBudget: Infinity` made `truncateMessages` a no-op and the entire older
|
|
90
|
+
history was pasted into the verification prompt.
|
|
91
|
+
|
|
92
|
+
- f002c44: Add tool-specific validation recovery guidance and use it to show complete,
|
|
93
|
+
safe `edit` call shapes when a model omits `path` or supplies an invalid
|
|
94
|
+
`insertLine`.
|
|
95
|
+
- e9c974c: Remove the model-facing `cancel_task` coordinator tool from the default
|
|
96
|
+
blocking worker protocol. A supervisor learns a `create_task` id only after
|
|
97
|
+
that worker is terminal, and the old tool manufactured a successful
|
|
98
|
+
"cancelled" result even when the gateway silently ignored a missing or
|
|
99
|
+
terminal id. Host-owned run interruption remains available through the task
|
|
100
|
+
gateway.
|
|
101
|
+
|
|
102
|
+
Tighten the builtin `edit` contract so `insertLine` accepts only a
|
|
103
|
+
non-negative JSON integer or the exact string `"end"`. Headings, anchors,
|
|
104
|
+
numeric strings, `null`, and empty strings are rejected before execution;
|
|
105
|
+
schema-bypassing callers receive the same refusal. This prevents `null` and
|
|
106
|
+
empty values from being coerced to line `0` and silently inserting content at
|
|
107
|
+
the beginning of a file.
|
|
108
|
+
|
|
3
109
|
## 1.3.0
|
|
4
110
|
|
|
5
111
|
### Minor Changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The EMPTY VERIFIER REPLY.
|
|
3
|
+
*
|
|
4
|
+
* `buildVerifiedSummary` treats only the literal `COMPLETE` as "nothing to add".
|
|
5
|
+
* Anything else is appended under a `## LLM Verification Additions` heading —
|
|
6
|
+
* including the empty string, which is what a truncated turn, a refusal, or an
|
|
7
|
+
* exhausted `llmVerificationMaxTokens` produces. The result is a heading with
|
|
8
|
+
* nothing under it, and because the summary becomes a leading system message it
|
|
9
|
+
* then rides in EVERY subsequent prompt of the run.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=verifier-empty-reply.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-empty-reply.test.d.ts","sourceRoot":"","sources":["../../../src/compaction/__tests__/verifier-empty-reply.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The EMPTY VERIFIER REPLY.
|
|
3
|
+
*
|
|
4
|
+
* `buildVerifiedSummary` treats only the literal `COMPLETE` as "nothing to add".
|
|
5
|
+
* Anything else is appended under a `## LLM Verification Additions` heading —
|
|
6
|
+
* including the empty string, which is what a truncated turn, a refusal, or an
|
|
7
|
+
* exhausted `llmVerificationMaxTokens` produces. The result is a heading with
|
|
8
|
+
* nothing under it, and because the summary becomes a leading system message it
|
|
9
|
+
* then rides in EVERY subsequent prompt of the run.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, expect, it } from 'vitest';
|
|
12
|
+
import { CompactionConfigSchema } from '../../config/runtime.js';
|
|
13
|
+
import { createAssistantMessage, createUserMessage, } from '../../types/message/index.js';
|
|
14
|
+
import { WorkingStateManager } from '../manager.js';
|
|
15
|
+
import { buildVerifiedSummary } from '../verifier.js';
|
|
16
|
+
const ADDITIONS_HEADING = '## LLM Verification Additions';
|
|
17
|
+
function makeProvider(chunks) {
|
|
18
|
+
const calls = [];
|
|
19
|
+
return {
|
|
20
|
+
id: 'mock',
|
|
21
|
+
name: 'mock',
|
|
22
|
+
calls,
|
|
23
|
+
chatStream(params) {
|
|
24
|
+
calls.push(params);
|
|
25
|
+
return (async function* () {
|
|
26
|
+
for (const c of chunks)
|
|
27
|
+
yield c;
|
|
28
|
+
})();
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function makeManager() {
|
|
33
|
+
const config = CompactionConfigSchema.parse({ llmVerification: true });
|
|
34
|
+
const manager = new WorkingStateManager(config);
|
|
35
|
+
manager.setTask('write the quarterly report');
|
|
36
|
+
manager.addDecision('built the report as .docx');
|
|
37
|
+
return { config, manager };
|
|
38
|
+
}
|
|
39
|
+
const OLDER = [
|
|
40
|
+
createUserMessage('write the quarterly report'),
|
|
41
|
+
createAssistantMessage('on it — reading the source numbers first'),
|
|
42
|
+
];
|
|
43
|
+
describe('buildVerifiedSummary — empty verifier reply', () => {
|
|
44
|
+
it('does not append an empty "Additions" section when the verifier returns nothing', async () => {
|
|
45
|
+
const { config, manager } = makeManager();
|
|
46
|
+
const provider = makeProvider([]);
|
|
47
|
+
const result = await buildVerifiedSummary(manager, OLDER, provider, config);
|
|
48
|
+
expect(result).not.toContain(ADDITIONS_HEADING);
|
|
49
|
+
});
|
|
50
|
+
it('does not append an empty "Additions" section when the turn is truncated by maxTokens', async () => {
|
|
51
|
+
const { config, manager } = makeManager();
|
|
52
|
+
// `length` finish reason with no content — llmVerificationMaxTokens exhausted.
|
|
53
|
+
const provider = makeProvider([{ id: 'c1', delta: { content: '' }, finishReason: 'length' }]);
|
|
54
|
+
const result = await buildVerifiedSummary(manager, OLDER, provider, config);
|
|
55
|
+
expect(result).not.toContain(ADDITIONS_HEADING);
|
|
56
|
+
});
|
|
57
|
+
it('does not append an "Additions" section for a whitespace-only reply', async () => {
|
|
58
|
+
const { config, manager } = makeManager();
|
|
59
|
+
const provider = makeProvider([{ id: 'c1', delta: { content: ' \n\n ' } }]);
|
|
60
|
+
const result = await buildVerifiedSummary(manager, OLDER, provider, config);
|
|
61
|
+
expect(result).not.toContain(ADDITIONS_HEADING);
|
|
62
|
+
});
|
|
63
|
+
it('still appends real additions', async () => {
|
|
64
|
+
const { config, manager } = makeManager();
|
|
65
|
+
const provider = makeProvider([
|
|
66
|
+
{ id: 'c1', delta: { content: '- the user asked for EUR, not USD' } },
|
|
67
|
+
]);
|
|
68
|
+
const result = await buildVerifiedSummary(manager, OLDER, provider, config);
|
|
69
|
+
expect(result).toContain(ADDITIONS_HEADING);
|
|
70
|
+
expect(result).toContain('EUR, not USD');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=verifier-empty-reply.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier-empty-reply.test.js","sourceRoot":"","sources":["../../../src/compaction/__tests__/verifier-empty-reply.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAEN,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,8BAA8B,CAAA;AAIrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,iBAAiB,GAAG,+BAA+B,CAAA;AAEzD,SAAS,YAAY,CAAC,MAAqB;IAC1C,MAAM,KAAK,GAA2B,EAAE,CAAA;IACxC,OAAO;QACN,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,KAAK;QACL,UAAU,CAAC,MAA4B;YACtC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClB,OAAO,CAAC,KAAK,SAAS,CAAC;gBACtB,KAAK,MAAM,CAAC,IAAI,MAAM;oBAAE,MAAM,CAAC,CAAA;YAChC,CAAC,CAAC,EAAE,CAAA;QACL,CAAC;KACD,CAAA;AACF,CAAC;AAED,SAAS,WAAW;IACnB,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC/C,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAA;IAC7C,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAA;IAChD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC3B,CAAC;AAED,MAAM,KAAK,GAAc;IACxB,iBAAiB,CAAC,4BAA4B,CAAC;IAC/C,sBAAsB,CAAC,0CAA0C,CAAC;CAClE,CAAA;AAED,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC5D,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;QAEjC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAA;QACzC,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAE7F,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;QAE9E,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC7B,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mCAAmC,EAAE,EAAE;SACrE,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAwCvD,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,OAAO,EAAE,EACxB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAwCvD,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,OAAO,EAAE,EACxB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
|
|
@@ -61,7 +61,16 @@ export async function buildVerifiedSummary(manager, olderMessages, provider, con
|
|
|
61
61
|
temperature: 0,
|
|
62
62
|
}));
|
|
63
63
|
const responseText = response.message.content?.trim() ?? '';
|
|
64
|
-
|
|
64
|
+
// `COMPLETE` is the verifier saying it found nothing to add. An EMPTY reply
|
|
65
|
+
// says the same thing by accident — a turn truncated at
|
|
66
|
+
// `llmVerificationMaxTokens`, a refusal, or a provider that returned no
|
|
67
|
+
// content at all — and used to fall through to the append below, stamping a
|
|
68
|
+
// bare `## LLM Verification Additions` heading with nothing under it. That
|
|
69
|
+
// empty promise then rides in the compaction summary, and therefore in every
|
|
70
|
+
// subsequent system prompt, for the rest of the run. A heading with no body
|
|
71
|
+
// is not a verification result; treat a silent verifier the same as one that
|
|
72
|
+
// had nothing to say.
|
|
73
|
+
if (responseText === 'COMPLETE' || responseText.length === 0) {
|
|
65
74
|
return serialized;
|
|
66
75
|
}
|
|
67
76
|
return `${serialized}\n\n## LLM Verification Additions\n\n${responseText}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAIhD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,mBAAmB,GAAG;;;;;;;;;;;2KAW+I,CAAA;AAE3K,SAAS,gBAAgB,CAAC,QAAmB,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,SAAQ;QAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAA;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAE3B,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;YACpD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YACzD,CAAC;YACD,MAAK;QACN,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAA;QACjC,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,OAA4B,EAC5B,aAAwB,EACxB,QAAqB,EACrB,MAAwB;IAExB,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtD,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;IAEnF,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,MAAM,oBAAoB,GAAc;QACvC;YACC,IAAI,EAAE,QAAiB;YACvB,OAAO,EAAE,mBAAmB;SAC5B;QACD;YACC,IAAI,EAAE,MAAe;YACrB,OAAO,EAAE,0BAA0B,UAAU,kCAAkC,mBAAmB,EAAE;SACpG;KACD,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC7B,QAAQ,CAAC,UAAU,CAAC;QACnB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,MAAM,CAAC,wBAAwB;QAC1C,WAAW,EAAE,CAAC;KACd,CAAC,CACF,CAAA;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAE3D,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The BUDGET SCHEMA.
|
|
3
|
+
*
|
|
4
|
+
* Every compaction count used to be `z.number().positive()`. Zod's base number
|
|
5
|
+
* check rejects only non-numbers and `NaN`, so `Infinity` and `0.5` both parsed.
|
|
6
|
+
* These are counts of messages, characters, sentences and tokens: a non-integer
|
|
7
|
+
* is meaningless, and `Infinity` does something worse than being meaningless —
|
|
8
|
+
* it turns a bound into a no-op rather than an error. `truncateMessages` compares
|
|
9
|
+
* `charCount > budget`, never true against `Infinity`, so the WHOLE older history
|
|
10
|
+
* was pasted into the verification prompt.
|
|
11
|
+
*
|
|
12
|
+
* They are `.int().positive()` now. `Number.isInteger` is false for `Infinity`
|
|
13
|
+
* and for any fraction, so one validator closes both. These tests are the guard:
|
|
14
|
+
* every count is checked against both illegal shapes, and the documented
|
|
15
|
+
* defaults are pinned so tightening the validator cannot have moved them.
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=compaction-budget-schema.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-budget-schema.test.d.ts","sourceRoot":"","sources":["../../../src/config/__tests__/compaction-budget-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The BUDGET SCHEMA.
|
|
3
|
+
*
|
|
4
|
+
* Every compaction count used to be `z.number().positive()`. Zod's base number
|
|
5
|
+
* check rejects only non-numbers and `NaN`, so `Infinity` and `0.5` both parsed.
|
|
6
|
+
* These are counts of messages, characters, sentences and tokens: a non-integer
|
|
7
|
+
* is meaningless, and `Infinity` does something worse than being meaningless —
|
|
8
|
+
* it turns a bound into a no-op rather than an error. `truncateMessages` compares
|
|
9
|
+
* `charCount > budget`, never true against `Infinity`, so the WHOLE older history
|
|
10
|
+
* was pasted into the verification prompt.
|
|
11
|
+
*
|
|
12
|
+
* They are `.int().positive()` now. `Number.isInteger` is false for `Infinity`
|
|
13
|
+
* and for any fraction, so one validator closes both. These tests are the guard:
|
|
14
|
+
* every count is checked against both illegal shapes, and the documented
|
|
15
|
+
* defaults are pinned so tightening the validator cannot have moved them.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, expect, it } from 'vitest';
|
|
18
|
+
import { WorkingStateManager } from '../../compaction/manager.js';
|
|
19
|
+
import { buildVerifiedSummary } from '../../compaction/verifier.js';
|
|
20
|
+
import { createUserMessage } from '../../types/message/index.js';
|
|
21
|
+
import { CompactionConfigSchema, RuntimeConfigSchema } from '../runtime.js';
|
|
22
|
+
/** Every integer count on CompactionConfigSchema. */
|
|
23
|
+
const COUNT_FIELDS = [
|
|
24
|
+
'contextWindowTokens',
|
|
25
|
+
'keepRecentMessages',
|
|
26
|
+
'maxToolResults',
|
|
27
|
+
'maxListSize',
|
|
28
|
+
'llmVerificationMaxTokens',
|
|
29
|
+
'richStateThreshold',
|
|
30
|
+
'convoTextBudget',
|
|
31
|
+
'maxSentencesPerTurn',
|
|
32
|
+
'maxCharsPerNote',
|
|
33
|
+
'maxCharsPerRequirement',
|
|
34
|
+
'maxCharsPerTask',
|
|
35
|
+
];
|
|
36
|
+
describe('CompactionConfigSchema — count fields', () => {
|
|
37
|
+
for (const field of COUNT_FIELDS) {
|
|
38
|
+
it(`rejects Infinity for ${field}`, () => {
|
|
39
|
+
expect(() => CompactionConfigSchema.parse({ [field]: Number.POSITIVE_INFINITY })).toThrow();
|
|
40
|
+
});
|
|
41
|
+
it(`rejects a fractional value for ${field}`, () => {
|
|
42
|
+
expect(() => CompactionConfigSchema.parse({ [field]: 0.5 })).toThrow();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
it('rejects Infinity through the RuntimeConfigSchema envelope', () => {
|
|
46
|
+
expect(() => RuntimeConfigSchema.parse({ compaction: { convoTextBudget: Number.POSITIVE_INFINITY } })).toThrow();
|
|
47
|
+
});
|
|
48
|
+
it('still accepts the documented defaults', () => {
|
|
49
|
+
const parsed = CompactionConfigSchema.parse({});
|
|
50
|
+
expect(parsed.convoTextBudget).toBe(12_000);
|
|
51
|
+
expect(parsed.keepRecentMessages).toBe(4);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Why the schema is the only defence, and what that leaves open.
|
|
56
|
+
*
|
|
57
|
+
* `truncateMessages` bounds the verification prompt with `charCount > budget`,
|
|
58
|
+
* which is never true against `Infinity` — that is the consequence the schema
|
|
59
|
+
* fix above exists to prevent, and it can no longer be reached THROUGH the
|
|
60
|
+
* schema. It is still reachable by a host that hand-builds a `CompactionConfig`
|
|
61
|
+
* object literal, because the inferred type is plain `number`; that is a stated
|
|
62
|
+
* limitation, not a covered case. No silent clamp was added inside
|
|
63
|
+
* `truncateMessages` — a budget that quietly repairs an illegal value hides the
|
|
64
|
+
* caller's bug instead of surfacing it, and the schema is where the boundary
|
|
65
|
+
* belongs.
|
|
66
|
+
*
|
|
67
|
+
* What this test does pin: with a LEGAL budget the prompt really is bounded, so
|
|
68
|
+
* the truncation the schema now guarantees is actually performed.
|
|
69
|
+
*/
|
|
70
|
+
describe('truncateMessages bounds the verification prompt at a legal budget', () => {
|
|
71
|
+
it('does not paste the entire older history into the verification prompt', async () => {
|
|
72
|
+
const config = CompactionConfigSchema.parse({
|
|
73
|
+
llmVerification: true,
|
|
74
|
+
convoTextBudget: 12_000,
|
|
75
|
+
});
|
|
76
|
+
const manager = new WorkingStateManager(config);
|
|
77
|
+
manager.setTask('write the quarterly report');
|
|
78
|
+
const calls = [];
|
|
79
|
+
const provider = {
|
|
80
|
+
id: 'mock',
|
|
81
|
+
name: 'mock',
|
|
82
|
+
chatStream(params) {
|
|
83
|
+
calls.push(params);
|
|
84
|
+
return (async function* () {
|
|
85
|
+
yield { id: 'c1', delta: { content: 'COMPLETE' } };
|
|
86
|
+
})();
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
// ~200 KB of older history — far past any sane verification budget.
|
|
90
|
+
const older = Array.from({ length: 200 }, (_, i) => createUserMessage(`turn ${i} ${'y'.repeat(1000)}`));
|
|
91
|
+
await buildVerifiedSummary(manager, older, provider, config);
|
|
92
|
+
const promptChars = (calls[0]?.messages ?? []).reduce((n, m) => n + (m.content?.length ?? 0), 0);
|
|
93
|
+
expect(promptChars).toBeLessThan(100_000);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=compaction-budget-schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-budget-schema.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/compaction-budget-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;GAUvB,CAAA;AAEZ,eAAO,MAAM,sBAAsB;;IAElC;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;GAUvB,CAAA;AAEZ,eAAO,MAAM,sBAAsB;;IAElC;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBF,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA5D/B;;;;;;;WAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEF,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAiC,CAAA"}
|
package/dist/config/runtime.js
CHANGED
|
@@ -23,20 +23,29 @@ export const CompactionConfigSchema = z.object({
|
|
|
23
23
|
* `tokenBudget` unlimited (0) set this so compaction fires on
|
|
24
24
|
* window-pressure instead of being a silent no-op.
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
// Every field below counts something — tokens, messages, characters,
|
|
27
|
+
// sentences. `z.number().positive()` was the wrong validator for all of them:
|
|
28
|
+
// Zod's base number check rejects only non-numbers and NaN, so `Infinity` and
|
|
29
|
+
// `0.5` both passed. `Infinity` is the dangerous one, because it turns a bound
|
|
30
|
+
// into a no-op rather than an error — `convoTextBudget: Infinity` makes the
|
|
31
|
+
// verifier's `charCount > budget` test never true, so `truncateMessages` stops
|
|
32
|
+
// truncating and the WHOLE history is pasted into the verification prompt.
|
|
33
|
+
// A fraction is merely nonsense (`keepRecentMessages: 2.5`). `.int()` rejects
|
|
34
|
+
// both: `Number.isInteger` is false for Infinity and for any fraction.
|
|
35
|
+
contextWindowTokens: z.number().int().positive().optional(),
|
|
27
36
|
triggerThreshold: z.number().min(0).max(1).default(0.7),
|
|
28
37
|
resetThreshold: z.number().min(0).max(1).default(0.4),
|
|
29
|
-
keepRecentMessages: z.number().positive().default(4),
|
|
30
|
-
maxToolResults: z.number().positive().default(30),
|
|
31
|
-
maxListSize: z.number().positive().default(25),
|
|
38
|
+
keepRecentMessages: z.number().int().positive().default(4),
|
|
39
|
+
maxToolResults: z.number().int().positive().default(30),
|
|
40
|
+
maxListSize: z.number().int().positive().default(25),
|
|
32
41
|
llmVerification: z.boolean().default(true),
|
|
33
|
-
llmVerificationMaxTokens: z.number().positive().default(2048),
|
|
34
|
-
richStateThreshold: z.number().positive().default(15),
|
|
35
|
-
convoTextBudget: z.number().positive().default(12_000),
|
|
36
|
-
maxSentencesPerTurn: z.number().positive().default(5),
|
|
37
|
-
maxCharsPerNote: z.number().positive().default(500),
|
|
38
|
-
maxCharsPerRequirement: z.number().positive().default(300),
|
|
39
|
-
maxCharsPerTask: z.number().positive().default(400),
|
|
42
|
+
llmVerificationMaxTokens: z.number().int().positive().default(2048),
|
|
43
|
+
richStateThreshold: z.number().int().positive().default(15),
|
|
44
|
+
convoTextBudget: z.number().int().positive().default(12_000),
|
|
45
|
+
maxSentencesPerTurn: z.number().int().positive().default(5),
|
|
46
|
+
maxCharsPerNote: z.number().int().positive().default(500),
|
|
47
|
+
maxCharsPerRequirement: z.number().int().positive().default(300),
|
|
48
|
+
maxCharsPerTask: z.number().int().positive().default(400),
|
|
40
49
|
});
|
|
41
50
|
export const AgentBusConfigSchema = z.object({
|
|
42
51
|
enabled: z.boolean().default(false),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACrC,MAAM,CAAC;IACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAC7B,CAAC;KACD,QAAQ,EAAE,CAAA;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACpF;;;;;;;OAOG;IACH,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { RunDiskStore } from '../../store/run/disk.js';
|
|
|
2
2
|
import { type CostInfo, type TokenUsage } from '../../types/common/index.js';
|
|
3
3
|
import type { RunId, SessionId, TenantId } from '../../types/ids/index.js';
|
|
4
4
|
import type { Message } from '../../types/message/index.js';
|
|
5
|
+
import type { ProviderErrorInfo } from '../../types/provider/index.js';
|
|
5
6
|
import type { CheckpointRunScope, CheckpointStore } from '../../types/run/checkpoint-store.js';
|
|
6
7
|
import type { EmergencySaveData } from '../../types/run/emergency.js';
|
|
7
8
|
import type { Run, RunPersistenceConfig, StopReason } from '../../types/run/index.js';
|
|
@@ -44,7 +45,7 @@ export declare class RunPersistence {
|
|
|
44
45
|
init(): Promise<void>;
|
|
45
46
|
markRunning(): void;
|
|
46
47
|
markCompleted(stopReason?: StopReason): void;
|
|
47
|
-
markFailed(error: string): void;
|
|
48
|
+
markFailed(error: string, providerError?: ProviderErrorInfo): void;
|
|
48
49
|
markCancelled(): void;
|
|
49
50
|
setStopReason(reason: StopReason): void;
|
|
50
51
|
setLastError(error: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrE,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,MAAM,EAAE,oBAAoB;IAyCxC,IAAI,EAAE,IAAI,KAAK,CAEd;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,MAAM,sDAET;IAED,IAAI,UAAU,2BAEb;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC;IAIvB,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC;IAI3B,WAAW,IAAI,YAAY;IAI3B;;;;;OAKG;IACH,kBAAkB,IAAI,eAAe;IAIrC,sEAAsE;IACtE,WAAW,IAAI,kBAAkB;IAUjC,SAAS,IAAI,MAAM,GAAG,IAAI;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAS5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrE,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,MAAM,EAAE,oBAAoB;IAyCxC,IAAI,EAAE,IAAI,KAAK,CAEd;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,MAAM,sDAET;IAED,IAAI,UAAU,2BAEb;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC;IAIvB,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC;IAI3B,WAAW,IAAI,YAAY;IAI3B;;;;;OAKG;IACH,kBAAkB,IAAI,eAAe;IAIrC,sEAAsE;IACtE,WAAW,IAAI,kBAAkB;IAUjC,SAAS,IAAI,MAAM,GAAG,IAAI;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAS5C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAQlE,aAAa,IAAI,IAAI;IAMrB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,MAAM;IAK5B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQxC,OAAO,CAAC,aAAa;IAqCrB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAchD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc9B"}
|
|
@@ -131,10 +131,12 @@ export class RunPersistence {
|
|
|
131
131
|
this.run.endedAt = Date.now();
|
|
132
132
|
this.resolveResult();
|
|
133
133
|
}
|
|
134
|
-
markFailed(error) {
|
|
134
|
+
markFailed(error, providerError) {
|
|
135
135
|
this.run.status = 'failed';
|
|
136
136
|
this.run.stopReason = 'error';
|
|
137
137
|
this.run.lastError = error;
|
|
138
|
+
if (providerError)
|
|
139
|
+
this.run.lastProviderError = providerError;
|
|
138
140
|
this.run.endedAt = Date.now();
|
|
139
141
|
}
|
|
140
142
|
markCancelled() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAkC,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../../src/provider/__tests__/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ProviderRequestError, bodySaysContextOverflow, classifyProviderHttpStatus, isCallerAbortError, isProviderRequestError, parseRetryAfterMs, providerVendorError, } from '../errors.js';
|
|
3
|
+
describe('provider error taxonomy', () => {
|
|
4
|
+
it('classifies only context-specific limit messages as context overflow', () => {
|
|
5
|
+
expect(bodySaysContextOverflow('input token count exceeds the maximum for this model')).toBe(true);
|
|
6
|
+
expect(bodySaysContextOverflow('tool count exceeds the maximum allowed')).toBe(false);
|
|
7
|
+
expect(bodySaysContextOverflow('reduce the tool list length')).toBe(false);
|
|
8
|
+
});
|
|
9
|
+
it('does not treat a generic HTTP 413 as model context overflow', () => {
|
|
10
|
+
expect(classifyProviderHttpStatus(413, 'request body too large at reverse proxy')).toBe('bad_request');
|
|
11
|
+
expect(classifyProviderHttpStatus(413, 'prompt is too long for requested model')).toBe('context_overflow');
|
|
12
|
+
});
|
|
13
|
+
it('parses both Retry-After forms and rejects stale or invalid values', () => {
|
|
14
|
+
expect(parseRetryAfterMs('2', 0)).toBe(2000);
|
|
15
|
+
expect(parseRetryAfterMs('Thu, 01 Jan 1970 00:00:05 GMT', 1000)).toBe(4000);
|
|
16
|
+
expect(parseRetryAfterMs('Thu, 01 Jan 1970 00:00:01 GMT', 1000)).toBeUndefined();
|
|
17
|
+
expect(parseRetryAfterMs('later', 0)).toBeUndefined();
|
|
18
|
+
});
|
|
19
|
+
it('drops the vendor object and its non-enumerable cause entirely', () => {
|
|
20
|
+
const secret = 'sk-FAKE-DO-NOT-LOG';
|
|
21
|
+
const vendor = new Error(`invalid api key ${secret}`, {
|
|
22
|
+
cause: new Error(`response body ${secret}`),
|
|
23
|
+
});
|
|
24
|
+
Object.assign(vendor, { status: 401 });
|
|
25
|
+
const classified = providerVendorError({
|
|
26
|
+
providerId: 'test-provider',
|
|
27
|
+
error: vendor,
|
|
28
|
+
});
|
|
29
|
+
expect(classified).toMatchObject({
|
|
30
|
+
name: 'ProviderRequestError',
|
|
31
|
+
kind: 'auth',
|
|
32
|
+
status: 401,
|
|
33
|
+
providerId: 'test-provider',
|
|
34
|
+
});
|
|
35
|
+
expect(classified.message).not.toContain(secret);
|
|
36
|
+
expect('cause' in classified).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
it('recognizes a caller abort only when that signal actually aborted', () => {
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
const sdkAbort = Object.assign(new Error('request aborted'), {
|
|
41
|
+
name: 'APIUserAbortError',
|
|
42
|
+
});
|
|
43
|
+
expect(isCallerAbortError(sdkAbort, controller.signal)).toBe(false);
|
|
44
|
+
controller.abort(new Error('user stopped'));
|
|
45
|
+
expect(isCallerAbortError(sdkAbort, controller.signal)).toBe(true);
|
|
46
|
+
expect(isCallerAbortError(controller.signal.reason, controller.signal)).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
it('requires the complete structural contract when SDK copies differ', () => {
|
|
49
|
+
const classified = new ProviderRequestError({
|
|
50
|
+
kind: 'server',
|
|
51
|
+
providerId: 'test-provider',
|
|
52
|
+
});
|
|
53
|
+
expect(isProviderRequestError(classified)).toBe(true);
|
|
54
|
+
const impostor = Object.assign(new Error('not classified'), {
|
|
55
|
+
name: 'ProviderRequestError',
|
|
56
|
+
kind: 'anything',
|
|
57
|
+
});
|
|
58
|
+
expect(isProviderRequestError(impostor)).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../../src/provider/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|