@moxxy/sdk 0.14.1 → 0.14.3
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/mode/collect-stream.d.ts +68 -0
- package/dist/mode/collect-stream.d.ts.map +1 -0
- package/dist/mode/collect-stream.js +181 -0
- package/dist/mode/collect-stream.js.map +1 -0
- package/dist/mode/project-messages.d.ts +84 -0
- package/dist/mode/project-messages.d.ts.map +1 -0
- package/dist/mode/project-messages.js +392 -0
- package/dist/mode/project-messages.js.map +1 -0
- package/dist/mode/single-shot.d.ts +17 -0
- package/dist/mode/single-shot.d.ts.map +1 -0
- package/dist/mode/single-shot.js +53 -0
- package/dist/mode/single-shot.js.map +1 -0
- package/dist/mode/stable-hash.d.ts +7 -0
- package/dist/mode/stable-hash.d.ts.map +1 -0
- package/dist/mode/stable-hash.js +20 -0
- package/dist/mode/stable-hash.js.map +1 -0
- package/dist/mode/stuck-loop.d.ts +39 -0
- package/dist/mode/stuck-loop.d.ts.map +1 -0
- package/dist/mode/stuck-loop.js +51 -0
- package/dist/mode/stuck-loop.js.map +1 -0
- package/dist/mode-helpers.d.ts +15 -175
- package/dist/mode-helpers.d.ts.map +1 -1
- package/dist/mode-helpers.js +14 -666
- package/dist/mode-helpers.js.map +1 -1
- package/dist/provider-utils.d.ts.map +1 -1
- package/dist/provider-utils.js +24 -0
- package/dist/provider-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/elision-state.test.ts +46 -0
- package/src/mode/collect-stream.ts +247 -0
- package/src/mode/project-messages.test.ts +121 -0
- package/src/mode/project-messages.ts +461 -0
- package/src/mode/single-shot.ts +63 -0
- package/src/mode/stable-hash.ts +20 -0
- package/src/mode/stuck-loop.ts +89 -0
- package/src/mode-helpers.ts +32 -850
- package/src/mode.test.ts +20 -0
- package/src/provider-utils.ts +24 -0
- package/src/token-accounting.test.ts +90 -0
package/dist/mode-helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-helpers.js","sourceRoot":"","sources":["../src/mode-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mode-helpers.js","sourceRoot":"","sources":["../src/mode-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,eAAe,GAGhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,GAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,uBAAuB,GAGxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -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;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,
|
|
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;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAiIxD"}
|
package/dist/provider-utils.js
CHANGED
|
@@ -163,6 +163,30 @@ export function zodToJsonSchema(schema) {
|
|
|
163
163
|
const items = zodToJsonSchema(def.type);
|
|
164
164
|
return { type: 'array', items };
|
|
165
165
|
}
|
|
166
|
+
if (typeName === 'ZodRecord') {
|
|
167
|
+
// `z.record(keyType, valueType)` — an open-ended object whose values share
|
|
168
|
+
// one schema. Carry the value schema through `additionalProperties` rather
|
|
169
|
+
// than discarding it to the permissive fallback below.
|
|
170
|
+
const valueType = def.valueType;
|
|
171
|
+
return { type: 'object', additionalProperties: zodToJsonSchema(valueType) };
|
|
172
|
+
}
|
|
173
|
+
if (typeName === 'ZodTuple') {
|
|
174
|
+
// ZodTuple._def.items is the ordered element schemas; `rest` (if set) is the
|
|
175
|
+
// variadic tail. Emit a fixed-position `items` array + an `additionalItems`
|
|
176
|
+
// schema for the rest, mirroring JSON-schema's positional-tuple form.
|
|
177
|
+
const tupleDef = def;
|
|
178
|
+
const items = tupleDef.items.map((i) => zodToJsonSchema(i));
|
|
179
|
+
return {
|
|
180
|
+
type: 'array',
|
|
181
|
+
items,
|
|
182
|
+
...(tupleDef.rest != null ? { additionalItems: zodToJsonSchema(tupleDef.rest) } : {}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (typeName === 'ZodAny' || typeName === 'ZodUnknown') {
|
|
186
|
+
// Genuinely unconstrained — advertise an empty (permissive) schema instead
|
|
187
|
+
// of a false `object` shape that would reject non-object values.
|
|
188
|
+
return {};
|
|
189
|
+
}
|
|
166
190
|
// Truly unknown — fall back to a permissive "any object" but spell out
|
|
167
191
|
// `properties: {}` and `additionalProperties: true` so strict validators
|
|
168
192
|
// accept the schema instead of bailing on a missing `properties` field.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../src/provider-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -190,6 +190,52 @@ describe('computeElisionState (golden: fused == 4-pass reference)', () => {
|
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
|
|
193
|
+
it('auto-disables conversational elision once seq-recalls reach the threshold', () => {
|
|
194
|
+
// effectiveElideConversational = elideConversational && seqRecalls < threshold.
|
|
195
|
+
// Two seq-recalls (recall({ seq })) drive seqRecalls to 2; with a threshold of
|
|
196
|
+
// 2 the guard flips OFF (2 < 2 is false) — the adaptive signal that text
|
|
197
|
+
// elision is hurting, so we stop collapsing conversational turns.
|
|
198
|
+
const base: MoxxyEvent[] = [
|
|
199
|
+
event(0, { type: 'user_prompt', turnId: t1, source: 'user', text: 'the task' }),
|
|
200
|
+
event(1, { type: 'tool_call_requested', turnId: t1, source: 'model', callId: asToolCallId('s1'), name: 'recall', input: { seq: 0 } }),
|
|
201
|
+
event(2, { type: 'tool_call_requested', turnId: t1, source: 'model', callId: asToolCallId('s2'), name: 'recall', input: { seq: 0 } }),
|
|
202
|
+
];
|
|
203
|
+
const withElision = (threshold: number): MoxxyEvent[] => [
|
|
204
|
+
...base,
|
|
205
|
+
event(3, {
|
|
206
|
+
type: 'elision', turnId: t2, source: 'system', elidedThrough: 2, stubbedRanges: [[0, 2]],
|
|
207
|
+
elideConversational: true, conversationalRecallThreshold: threshold, maxRecallBytes: 1000, neverElideTools: [], tokensSaved: 10,
|
|
208
|
+
}),
|
|
209
|
+
event(4, { type: 'user_prompt', turnId: t2, source: 'user', text: 'next' }),
|
|
210
|
+
];
|
|
211
|
+
|
|
212
|
+
// threshold 3 > 2 seq-recalls → conversational elision stays ON.
|
|
213
|
+
const on = computeElisionState(withElision(3));
|
|
214
|
+
expect(on.effectiveElideConversational).toBe(true);
|
|
215
|
+
assertSameState(on, computeElisionStateOld(withElision(3)));
|
|
216
|
+
|
|
217
|
+
// threshold 2 == 2 seq-recalls → guard flips OFF.
|
|
218
|
+
const off = computeElisionState(withElision(2));
|
|
219
|
+
expect(off.effectiveElideConversational).toBe(false);
|
|
220
|
+
assertSameState(off, computeElisionStateOld(withElision(2)));
|
|
221
|
+
|
|
222
|
+
// callId-recalls (recall({ callId })) do NOT count toward seqRecalls, so the
|
|
223
|
+
// threshold is never reached and conversational elision stays ON.
|
|
224
|
+
const callIdRecalls: MoxxyEvent[] = [
|
|
225
|
+
event(0, { type: 'user_prompt', turnId: t1, source: 'user', text: 'the task' }),
|
|
226
|
+
event(1, { type: 'tool_call_requested', turnId: t1, source: 'model', callId: asToolCallId('c1'), name: 'recall', input: { callId: 'x' } }),
|
|
227
|
+
event(2, { type: 'tool_call_requested', turnId: t1, source: 'model', callId: asToolCallId('c2'), name: 'recall', input: { callId: 'y' } }),
|
|
228
|
+
event(3, {
|
|
229
|
+
type: 'elision', turnId: t2, source: 'system', elidedThrough: 2, stubbedRanges: [[0, 2]],
|
|
230
|
+
elideConversational: true, conversationalRecallThreshold: 1, maxRecallBytes: 1000, neverElideTools: [], tokensSaved: 10,
|
|
231
|
+
}),
|
|
232
|
+
event(4, { type: 'user_prompt', turnId: t2, source: 'user', text: 'next' }),
|
|
233
|
+
];
|
|
234
|
+
const callId = computeElisionState(callIdRecalls);
|
|
235
|
+
expect(callId.effectiveElideConversational).toBe(true);
|
|
236
|
+
assertSameState(callId, computeElisionStateOld(callIdRecalls));
|
|
237
|
+
});
|
|
238
|
+
|
|
193
239
|
it('matches on the cap boundary fixture (oldest aged recall over the cap is stubbed)', () => {
|
|
194
240
|
const events: MoxxyEvent[] = [
|
|
195
241
|
event(0, { type: 'user_prompt', turnId: t1, source: 'user', text: 'task' }),
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import type { ProviderEvent, ProviderMessage, TokenUsage } from '../provider.js';
|
|
2
|
+
import type { ModeContext } from '../mode.js';
|
|
3
|
+
import type { StopReason } from '../provider-utils.js';
|
|
4
|
+
import { applyLazyTools } from '../tool-gating.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Shared bits used by every loop strategy: a typed tool-use struct and a
|
|
8
|
+
* common stream-collection helper that runs `onBeforeProviderCall` hooks
|
|
9
|
+
* and reduces a provider stream down to `{text, toolUses, stopReason}`.
|
|
10
|
+
*
|
|
11
|
+
* Lives in core (not in each loop package) so a new loop strategy stays
|
|
12
|
+
* consistent — and so behavioral fixes here propagate. Previously
|
|
13
|
+
* loop-plan-execute had its own copy that skipped the hook (audit bug).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export interface CollectedToolUse {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly input: unknown;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface StreamResult {
|
|
23
|
+
readonly text: string;
|
|
24
|
+
readonly toolUses: ReadonlyArray<CollectedToolUse>;
|
|
25
|
+
readonly stopReason: StopReason;
|
|
26
|
+
readonly error: { readonly message: string; readonly retryable: boolean } | null;
|
|
27
|
+
/** Token usage reported by the provider on `message_end`, including cache hits/writes. */
|
|
28
|
+
readonly usage?: TokenUsage;
|
|
29
|
+
/**
|
|
30
|
+
* Reasoning/thinking summary for this provider call, when the model emitted
|
|
31
|
+
* any. The mode emits it as a `reasoning_message` event (so it persists and
|
|
32
|
+
* round-trips). `signature`/`encrypted` carry Anthropic's signed thinking
|
|
33
|
+
* block / redacted blob; `redacted` marks display-suppressed reasoning.
|
|
34
|
+
*/
|
|
35
|
+
readonly reasoning?: {
|
|
36
|
+
readonly text: string;
|
|
37
|
+
readonly signature?: string;
|
|
38
|
+
readonly redacted?: boolean;
|
|
39
|
+
readonly encrypted?: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Pulls a provider stream, emits `assistant_chunk` events for text deltas,
|
|
45
|
+
* collects tool_use blocks, and returns the final `{text, toolUses, stopReason}`.
|
|
46
|
+
* Runs `onBeforeProviderCall` lifecycle hooks before the call.
|
|
47
|
+
*/
|
|
48
|
+
export async function collectProviderStream(
|
|
49
|
+
ctx: ModeContext,
|
|
50
|
+
messages: ReadonlyArray<ProviderMessage>,
|
|
51
|
+
opts: {
|
|
52
|
+
iteration?: number;
|
|
53
|
+
includeTools?: boolean;
|
|
54
|
+
maxTokens?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Index (into `messages`) of the last stable-prefix message, from
|
|
57
|
+
* {@link projectMessages}. Passed to the active cache strategy as
|
|
58
|
+
* `stablePrefixMessageIndex` so it can place a long-lived cross-turn
|
|
59
|
+
* breakpoint at the elision boundary. Omit (or -1) when unknown — the
|
|
60
|
+
* strategy then falls back to its tools/system/tail breakpoints only.
|
|
61
|
+
*/
|
|
62
|
+
stablePrefixIndex?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Number of trailing messages in `messages` that are volatile — injected
|
|
65
|
+
* for this call only (e.g. goal mode's `trailingUserText` nudge) and
|
|
66
|
+
* absent from the append-only log, so they won't recur at the same
|
|
67
|
+
* position next call. Forwarded to the cache strategy as
|
|
68
|
+
* `volatileTailMessageCount` so it keeps its rolling tail breakpoint
|
|
69
|
+
* before them instead of paying a guaranteed-wasted cache write.
|
|
70
|
+
*/
|
|
71
|
+
volatileTailCount?: number;
|
|
72
|
+
} = {},
|
|
73
|
+
): Promise<StreamResult> {
|
|
74
|
+
// Lazy tool gating (opt-in): send only always-on + loaded tool schemas, and
|
|
75
|
+
// index the rest in the system prompt. Runs BEFORE cache planning since it
|
|
76
|
+
// rewrites the system message and the tool list.
|
|
77
|
+
let effectiveMessages = messages;
|
|
78
|
+
let toolList: ReadonlyArray<import('../tool.js').ToolDef> | undefined =
|
|
79
|
+
opts.includeTools === false ? undefined : ctx.tools.list();
|
|
80
|
+
if (ctx.lazyTools && toolList) {
|
|
81
|
+
const gated = applyLazyTools(messages, toolList, ctx.log);
|
|
82
|
+
effectiveMessages = gated.messages;
|
|
83
|
+
toolList = gated.tools;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Ask the active cache strategy where to place prompt-cache breakpoints.
|
|
87
|
+
// The strategy is provider-neutral (returns CacheHints); the provider
|
|
88
|
+
// translates them (Anthropic → cache_control). Falls back to no hints when
|
|
89
|
+
// no strategy is registered. The onBeforeProviderCall hook can still adjust.
|
|
90
|
+
const descriptor = ctx.provider.models.find((m) => m.id === ctx.model);
|
|
91
|
+
const cacheHints = ctx.cacheStrategy
|
|
92
|
+
? ctx.cacheStrategy.plan(effectiveMessages, {
|
|
93
|
+
model: ctx.model,
|
|
94
|
+
contextWindow: descriptor?.contextWindow ?? 0,
|
|
95
|
+
log: ctx.log,
|
|
96
|
+
...(opts.stablePrefixIndex != null && opts.stablePrefixIndex >= 0
|
|
97
|
+
? { stablePrefixMessageIndex: opts.stablePrefixIndex }
|
|
98
|
+
: {}),
|
|
99
|
+
...(opts.volatileTailCount != null && opts.volatileTailCount > 0
|
|
100
|
+
? { volatileTailMessageCount: opts.volatileTailCount }
|
|
101
|
+
: {}),
|
|
102
|
+
})
|
|
103
|
+
: undefined;
|
|
104
|
+
|
|
105
|
+
// NOTE: `system` is deliberately NOT prefilled with ctx.systemPrompt — the
|
|
106
|
+
// composed system prompt already rides as the leading system-role message
|
|
107
|
+
// (see projectMessages), and providers deliver `req.system` IN ADDITION to
|
|
108
|
+
// message-derived system text. Prefilling it would duplicate the prompt.
|
|
109
|
+
// It stays as the side channel `onBeforeProviderCall` hooks use to inject
|
|
110
|
+
// per-request system text (e.g. the memory consolidation nudge).
|
|
111
|
+
// Forward the per-provider reasoning preference, but only when THIS model
|
|
112
|
+
// advertises `supportsReasoning` — providers ignore the knob otherwise, but
|
|
113
|
+
// gating here keeps requests clean and avoids unsupported-param errors.
|
|
114
|
+
const reqReasoning = descriptor?.supportsReasoning ? ctx.reasoning : undefined;
|
|
115
|
+
const req = {
|
|
116
|
+
model: ctx.model,
|
|
117
|
+
messages: effectiveMessages,
|
|
118
|
+
...(toolList ? { tools: toolList } : {}),
|
|
119
|
+
...(cacheHints && cacheHints.length > 0 ? { cacheHints } : {}),
|
|
120
|
+
...(opts.maxTokens !== undefined ? { maxTokens: opts.maxTokens } : {}),
|
|
121
|
+
...(reqReasoning ? { reasoning: reqReasoning } : {}),
|
|
122
|
+
signal: ctx.signal,
|
|
123
|
+
};
|
|
124
|
+
const transformed = await ctx.hooks.dispatchBeforeProviderCall(req, {
|
|
125
|
+
sessionId: ctx.sessionId,
|
|
126
|
+
cwd: '',
|
|
127
|
+
log: ctx.log,
|
|
128
|
+
env: {},
|
|
129
|
+
turnId: ctx.turnId,
|
|
130
|
+
iteration: opts.iteration ?? 0,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
let text = '';
|
|
134
|
+
const toolUses = new Map<string, { name?: string; input?: unknown }>();
|
|
135
|
+
let stopReason: StopReason = 'end_turn';
|
|
136
|
+
let error: StreamResult['error'] = null;
|
|
137
|
+
let usage: TokenUsage | undefined;
|
|
138
|
+
// Reasoning/thinking accumulation for this single provider call. Emitted as a
|
|
139
|
+
// finalized `reasoning_message` by the mode (turn-iterator / goal-loop) so it
|
|
140
|
+
// persists and round-trips; `signature`/`encrypted` carry Anthropic's signed
|
|
141
|
+
// thinking block / redacted blob for replay.
|
|
142
|
+
let reasoningText = '';
|
|
143
|
+
let reasoningSignature: string | undefined;
|
|
144
|
+
let reasoningRedacted = false;
|
|
145
|
+
let reasoningEncrypted: string | undefined;
|
|
146
|
+
|
|
147
|
+
let stream: AsyncIterable<ProviderEvent>;
|
|
148
|
+
try {
|
|
149
|
+
stream = ctx.provider.stream(transformed);
|
|
150
|
+
} catch (err) {
|
|
151
|
+
return {
|
|
152
|
+
text: '',
|
|
153
|
+
toolUses: [],
|
|
154
|
+
stopReason: 'error',
|
|
155
|
+
error: { message: err instanceof Error ? err.message : String(err), retryable: false },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
for await (const event of stream) {
|
|
161
|
+
switch (event.type) {
|
|
162
|
+
case 'text_delta': {
|
|
163
|
+
text += event.delta;
|
|
164
|
+
await ctx.emit({
|
|
165
|
+
type: 'assistant_chunk',
|
|
166
|
+
sessionId: ctx.sessionId,
|
|
167
|
+
turnId: ctx.turnId,
|
|
168
|
+
source: 'model',
|
|
169
|
+
delta: event.delta,
|
|
170
|
+
});
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case 'tool_use_start': {
|
|
174
|
+
toolUses.set(event.id, { name: event.name });
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'tool_use_end': {
|
|
178
|
+
const existing = toolUses.get(event.id) ?? {};
|
|
179
|
+
toolUses.set(event.id, { ...existing, input: event.input });
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'message_end': {
|
|
183
|
+
stopReason = event.stopReason;
|
|
184
|
+
if (event.usage) usage = event.usage;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case 'error': {
|
|
188
|
+
error = { message: event.message, retryable: event.retryable };
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case 'reasoning_delta': {
|
|
192
|
+
reasoningText += event.delta;
|
|
193
|
+
// Live preview only — parallels `assistant_chunk`; renderers
|
|
194
|
+
// accumulate ephemerally and clear on the finalized reasoning_message.
|
|
195
|
+
await ctx.emit({
|
|
196
|
+
type: 'reasoning_chunk',
|
|
197
|
+
sessionId: ctx.sessionId,
|
|
198
|
+
turnId: ctx.turnId,
|
|
199
|
+
source: 'model',
|
|
200
|
+
delta: event.delta,
|
|
201
|
+
});
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case 'reasoning_signature': {
|
|
205
|
+
if (event.signature) reasoningSignature = event.signature;
|
|
206
|
+
if (event.encrypted) reasoningEncrypted = event.encrypted;
|
|
207
|
+
if (event.redacted) reasoningRedacted = true;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'message_start':
|
|
211
|
+
case 'tool_use_delta':
|
|
212
|
+
default:
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
} catch (err) {
|
|
217
|
+
error = {
|
|
218
|
+
message: err instanceof Error ? err.message : String(err),
|
|
219
|
+
retryable: false,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const finalToolUses: CollectedToolUse[] = [];
|
|
224
|
+
for (const [id, partial] of toolUses) {
|
|
225
|
+
if (!partial.name) continue;
|
|
226
|
+
finalToolUses.push({ id, name: partial.name, input: partial.input ?? {} });
|
|
227
|
+
}
|
|
228
|
+
// Surface reasoning when there's visible text OR an opaque blob to replay
|
|
229
|
+
// (a redacted_thinking block has no text but must still round-trip).
|
|
230
|
+
const reasoning =
|
|
231
|
+
reasoningText.trim().length > 0 || reasoningEncrypted
|
|
232
|
+
? {
|
|
233
|
+
text: reasoningText,
|
|
234
|
+
...(reasoningSignature ? { signature: reasoningSignature } : {}),
|
|
235
|
+
...(reasoningRedacted ? { redacted: true } : {}),
|
|
236
|
+
...(reasoningEncrypted ? { encrypted: reasoningEncrypted } : {}),
|
|
237
|
+
}
|
|
238
|
+
: undefined;
|
|
239
|
+
return {
|
|
240
|
+
text,
|
|
241
|
+
toolUses: finalToolUses,
|
|
242
|
+
stopReason,
|
|
243
|
+
error,
|
|
244
|
+
...(usage ? { usage } : {}),
|
|
245
|
+
...(reasoning ? { reasoning } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { projectUserPrompt, resolvedCallIdSet } from './project-messages.js';
|
|
3
|
+
import { computeElisionState } from '../elision-state.js';
|
|
4
|
+
import { asEventId, asSessionId, asTurnId } from '../ids.js';
|
|
5
|
+
import type { MoxxyEvent, UserPromptEvent } from '../events.js';
|
|
6
|
+
|
|
7
|
+
const sid = asSessionId('s1');
|
|
8
|
+
const t1 = asTurnId('t1');
|
|
9
|
+
|
|
10
|
+
// No-elision state — computeElisionState returns the empty/inactive state when
|
|
11
|
+
// the log has no elision events, which is the only state these pure sub-steps
|
|
12
|
+
// branch on for a fresh (non-stubbed) prompt.
|
|
13
|
+
const noElision = computeElisionState([]);
|
|
14
|
+
|
|
15
|
+
function userPrompt(seq: number, partial: Partial<UserPromptEvent>): UserPromptEvent {
|
|
16
|
+
return {
|
|
17
|
+
id: asEventId(`e${seq}`),
|
|
18
|
+
seq,
|
|
19
|
+
ts: seq,
|
|
20
|
+
sessionId: sid,
|
|
21
|
+
turnId: t1,
|
|
22
|
+
source: 'user',
|
|
23
|
+
type: 'user_prompt',
|
|
24
|
+
text: 'hi',
|
|
25
|
+
...partial,
|
|
26
|
+
} as UserPromptEvent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function event(seq: number, partial: Omit<MoxxyEvent, 'id' | 'seq' | 'ts' | 'sessionId'>): MoxxyEvent {
|
|
30
|
+
return {
|
|
31
|
+
id: asEventId(`e${seq}`),
|
|
32
|
+
seq,
|
|
33
|
+
ts: seq,
|
|
34
|
+
sessionId: sid,
|
|
35
|
+
...partial,
|
|
36
|
+
} as MoxxyEvent;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
describe('projectUserPrompt', () => {
|
|
40
|
+
it('projects a plain prompt to a single text block', () => {
|
|
41
|
+
const blocks = projectUserPrompt(userPrompt(0, { text: 'hello world' }), noElision);
|
|
42
|
+
expect(blocks).toEqual([{ type: 'text', text: 'hello world' }]);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('expands an image attachment to an image block (default mediaType)', () => {
|
|
46
|
+
const blocks = projectUserPrompt(
|
|
47
|
+
userPrompt(0, {
|
|
48
|
+
text: 'look',
|
|
49
|
+
attachments: [{ kind: 'image', content: 'BASE64' }],
|
|
50
|
+
}),
|
|
51
|
+
noElision,
|
|
52
|
+
);
|
|
53
|
+
expect(blocks).toEqual([
|
|
54
|
+
{ type: 'text', text: 'look' },
|
|
55
|
+
{ type: 'image', mediaType: 'image/png', data: 'BASE64' },
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('expands a document attachment, carrying name + mediaType', () => {
|
|
60
|
+
const blocks = projectUserPrompt(
|
|
61
|
+
userPrompt(0, {
|
|
62
|
+
text: 'read',
|
|
63
|
+
attachments: [{ kind: 'document', content: 'PDF64', name: 'spec.pdf', mediaType: 'application/pdf' }],
|
|
64
|
+
}),
|
|
65
|
+
noElision,
|
|
66
|
+
);
|
|
67
|
+
expect(blocks).toEqual([
|
|
68
|
+
{ type: 'text', text: 'read' },
|
|
69
|
+
{ type: 'document', mediaType: 'application/pdf', data: 'PDF64', name: 'spec.pdf' },
|
|
70
|
+
]);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('renders a text/file attachment inline with a labeled header', () => {
|
|
74
|
+
const blocks = projectUserPrompt(
|
|
75
|
+
userPrompt(0, {
|
|
76
|
+
text: 'see file',
|
|
77
|
+
attachments: [{ kind: 'file', content: 'console.log(1)', name: 'a.ts' }],
|
|
78
|
+
}),
|
|
79
|
+
noElision,
|
|
80
|
+
);
|
|
81
|
+
expect(blocks).toEqual([
|
|
82
|
+
{ type: 'text', text: 'see file' },
|
|
83
|
+
{ type: 'text', text: '[file a.ts]\nconsole.log(1)' },
|
|
84
|
+
]);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('resolvedCallIdSet', () => {
|
|
89
|
+
it('collects callIds from tool_result and tool_call_denied events only', () => {
|
|
90
|
+
const events = [
|
|
91
|
+
event(0, { type: 'user_prompt', turnId: t1, source: 'user', text: 'go' }),
|
|
92
|
+
event(1, {
|
|
93
|
+
type: 'tool_call_requested',
|
|
94
|
+
turnId: t1,
|
|
95
|
+
source: 'model',
|
|
96
|
+
callId: 'orphan',
|
|
97
|
+
name: 'x',
|
|
98
|
+
input: {},
|
|
99
|
+
}),
|
|
100
|
+
event(2, { type: 'tool_result', turnId: t1, source: 'tool', callId: 'resolved', ok: true, output: 'ok' }),
|
|
101
|
+
event(3, {
|
|
102
|
+
type: 'tool_call_denied',
|
|
103
|
+
turnId: t1,
|
|
104
|
+
source: 'system',
|
|
105
|
+
callId: 'denied',
|
|
106
|
+
decidedBy: 'policy',
|
|
107
|
+
reason: 'nope',
|
|
108
|
+
}),
|
|
109
|
+
];
|
|
110
|
+
const set = resolvedCallIdSet(events);
|
|
111
|
+
expect([...set].sort()).toEqual(['denied', 'resolved']);
|
|
112
|
+
expect(set.has('orphan')).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('returns a fresh mutable set (callers augment it for orphan synthesis)', () => {
|
|
116
|
+
const set = resolvedCallIdSet([]);
|
|
117
|
+
expect(set.size).toBe(0);
|
|
118
|
+
set.add('later');
|
|
119
|
+
expect(set.has('later')).toBe(true);
|
|
120
|
+
});
|
|
121
|
+
});
|