@daniel156161/prism 0.2.101 → 0.2.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/pi/pi-env.d.ts +1 -1
- package/dist/pi/pi-env.js +1 -1
- package/dist/prism-extensions/integrations/ai-memory-system.js +16 -9
- package/dist/prism-extensions/integrations/ai-memory-system.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +23 -25
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +3 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +3 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +38 -6
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +75 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +75 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-client/CHANGELOG.md +1 -1
- package/node_modules/@earendil-works/pi-client/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +47 -3
- package/node_modules/@earendil-works/pi-coding-agent/README.md +5 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-GPPBJGBU.js → chunk-2KVJKXS2.js} +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-E5KXRMZK.js → chunk-OMWWHBTG.js} +69 -68
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/github-copilot.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-generative-ai-XDKMGBCJ.js → google-generative-ai-YMUPJBKR.js} +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-vertex-D5FGEO3Y.js → google-vertex-MPWMV4OF.js} +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{mistral-conversations-YK73UAOZ.js → mistral-conversations-Q3AWZJAZ.js} +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-completions-JD4WAC3R.js → openai-completions-ERMU2SS7.js} +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +2 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +12 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +77 -9
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js +4 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts +5 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +19 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +45 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +18 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +4 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +8 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +17 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.d.ts +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.d.ts +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +27 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +2 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +10 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +55 -31
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +12 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js +6 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/compaction.md +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +7 -7
- package/node_modules/@earendil-works/pi-coding-agent/docs/environment-variables.md +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +18 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/keybindings.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +23 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +12 -4
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +12 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +4 -3
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package-lock.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package-lock.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package-lock.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
- package/node_modules/@earendil-works/pi-protocol/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/README.md +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +36 -3
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +37 -2
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +11 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +58 -15
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.js +105 -45
- package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.buffer.d.ts +5 -0
- package/node_modules/@types/node/crypto.d.ts +0 -2
- package/node_modules/@types/node/dgram.d.ts +119 -4
- package/node_modules/@types/node/fs/promises.d.ts +61 -65
- package/node_modules/@types/node/fs.d.ts +86 -76
- package/node_modules/@types/node/http.d.ts +1 -1
- package/node_modules/@types/node/http2.d.ts +2 -2
- package/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/node/inspector.d.ts +2 -1
- package/node_modules/@types/node/net.d.ts +108 -16
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/quic.d.ts +37 -11
- package/node_modules/@types/node/stream/iter.d.ts +4 -4
- package/node_modules/@types/node/tls.d.ts +24 -0
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
- package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
- package/node_modules/@types/node/tty.d.ts +4 -3
- package/node_modules/@types/node/vfs.d.ts +210 -0
- package/node_modules/@types/node/vm.d.ts +1 -1
- package/package.json +9 -9
- package/src/prism-extensions/integrations/ai-memory-system.ts +14 -9
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/dist-RDWOYWHR.js +0 -13
|
@@ -91,6 +91,8 @@ export class AgentSession {
|
|
|
91
91
|
_followUpMessages = [];
|
|
92
92
|
/** Messages queued to be included with the next user prompt as context ("asides"). */
|
|
93
93
|
_pendingNextTurnMessages = [];
|
|
94
|
+
/** Context-only custom messages queued during a run, flushed once the current turn's tool results are in. */
|
|
95
|
+
_pendingCustomMessages = [];
|
|
94
96
|
// Compaction state
|
|
95
97
|
_compactionAbortController = undefined;
|
|
96
98
|
_autoCompactionAbortController = undefined;
|
|
@@ -269,18 +271,33 @@ export class AgentSession {
|
|
|
269
271
|
};
|
|
270
272
|
};
|
|
271
273
|
}
|
|
274
|
+
async _compactBeforeNextAssistantResponse(context) {
|
|
275
|
+
const model = this.model;
|
|
276
|
+
const settings = this.settingsManager.getCompactionSettings();
|
|
277
|
+
if (!model ||
|
|
278
|
+
model.contextWindow <= 0 ||
|
|
279
|
+
!shouldCompact(estimateContextTokens(context.messages).tokens, model.contextWindow, settings)) {
|
|
280
|
+
return context;
|
|
281
|
+
}
|
|
282
|
+
await this._runAutoCompaction("threshold", false);
|
|
283
|
+
return {
|
|
284
|
+
...context,
|
|
285
|
+
messages: this.agent.state.messages.slice(),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
272
288
|
_installAgentNextTurnRefresh() {
|
|
273
289
|
const previousPrepareNextTurnWithContext = this.agent.prepareNextTurnWithContext ??
|
|
274
290
|
(this.agent.prepareNextTurn
|
|
275
291
|
? async (_turn, signal) => await this.agent.prepareNextTurn?.(signal)
|
|
276
292
|
: undefined);
|
|
277
293
|
this.agent.prepareNextTurnWithContext = async (turn, signal) => {
|
|
278
|
-
const
|
|
279
|
-
const
|
|
294
|
+
const context = await this._compactBeforeNextAssistantResponse(turn.context);
|
|
295
|
+
const previousSnapshot = await previousPrepareNextTurnWithContext?.({ ...turn, context }, signal);
|
|
296
|
+
const nextContext = previousSnapshot?.context ?? context;
|
|
280
297
|
return {
|
|
281
298
|
...previousSnapshot,
|
|
282
299
|
context: {
|
|
283
|
-
...
|
|
300
|
+
...nextContext,
|
|
284
301
|
systemPrompt: this._systemPromptOverride ?? this._baseSystemPrompt,
|
|
285
302
|
tools: this.agent.state.tools.slice(),
|
|
286
303
|
},
|
|
@@ -400,6 +417,14 @@ export class AgentSession {
|
|
|
400
417
|
}
|
|
401
418
|
}
|
|
402
419
|
}
|
|
420
|
+
// A turn ends after its assistant message and every tool result has been appended,
|
|
421
|
+
// so this is the first point in the run where a context-only custom message can be
|
|
422
|
+
// inserted without landing between a tool call and its result. Flushing after the
|
|
423
|
+
// extension and listener dispatch above also picks up messages that turn_end
|
|
424
|
+
// handlers queued.
|
|
425
|
+
if (event.type === "turn_end") {
|
|
426
|
+
this._flushPendingCustomMessages();
|
|
427
|
+
}
|
|
403
428
|
};
|
|
404
429
|
_willRetryAfterAgentEnd(event) {
|
|
405
430
|
const settings = this.settingsManager.getRetrySettings();
|
|
@@ -755,6 +780,7 @@ export class AgentSession {
|
|
|
755
780
|
finally {
|
|
756
781
|
this._systemPromptOverride = undefined;
|
|
757
782
|
this._flushPendingBashMessages();
|
|
783
|
+
this._flushPendingCustomMessages();
|
|
758
784
|
await this._emitAgentSettled();
|
|
759
785
|
}
|
|
760
786
|
}
|
|
@@ -844,8 +870,9 @@ export class AgentSession {
|
|
|
844
870
|
preflightResult?.(true);
|
|
845
871
|
return;
|
|
846
872
|
}
|
|
847
|
-
// Flush any pending bash messages before the new prompt
|
|
873
|
+
// Flush any pending bash and custom messages before the new prompt
|
|
848
874
|
this._flushPendingBashMessages();
|
|
875
|
+
this._flushPendingCustomMessages();
|
|
849
876
|
// Validate model
|
|
850
877
|
if (!this.model) {
|
|
851
878
|
throw new Error(formatNoModelSelectedMessage());
|
|
@@ -1059,8 +1086,9 @@ export class AgentSession {
|
|
|
1059
1086
|
/**
|
|
1060
1087
|
* Send a custom message to the session. Creates a CustomMessageEntry.
|
|
1061
1088
|
*
|
|
1062
|
-
* Handles
|
|
1089
|
+
* Handles four cases:
|
|
1063
1090
|
* - Streaming: queues message, processed when loop pulls from queue
|
|
1091
|
+
* - Streaming + triggerTurn false: appended to state/session once the current turn ends
|
|
1064
1092
|
* - Not streaming + triggerTurn: appends to state/session, starts new turn
|
|
1065
1093
|
* - Not streaming + no trigger: appends to state/session, no turn
|
|
1066
1094
|
*
|
|
@@ -1092,11 +1120,34 @@ export class AgentSession {
|
|
|
1092
1120
|
else if (options?.triggerTurn) {
|
|
1093
1121
|
await this._runAgentPrompt(appMessage);
|
|
1094
1122
|
}
|
|
1123
|
+
else if (this.isStreaming) {
|
|
1124
|
+
// Appending now would put the message between an assistant tool call and its
|
|
1125
|
+
// result, which providers that validate message order reject on replay. Defer
|
|
1126
|
+
// to the end of the turn. Nothing is emitted yet: message events must not
|
|
1127
|
+
// describe messages the session tree does not contain.
|
|
1128
|
+
this._pendingCustomMessages.push(appMessage);
|
|
1129
|
+
}
|
|
1095
1130
|
else {
|
|
1096
|
-
this.
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1131
|
+
this._appendCustomMessage(appMessage);
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
_appendCustomMessage(appMessage) {
|
|
1135
|
+
this.agent.state.messages.push(appMessage);
|
|
1136
|
+
this.sessionManager.appendCustomMessageEntry(appMessage.customType, appMessage.content, appMessage.display, appMessage.details);
|
|
1137
|
+
this._emit({ type: "message_start", message: appMessage });
|
|
1138
|
+
this._emit({ type: "message_end", message: appMessage });
|
|
1139
|
+
}
|
|
1140
|
+
/**
|
|
1141
|
+
* Append custom messages queued while the agent was running.
|
|
1142
|
+
* Called once the current turn's tool results are in agent state and session history.
|
|
1143
|
+
*/
|
|
1144
|
+
_flushPendingCustomMessages() {
|
|
1145
|
+
if (this._pendingCustomMessages.length === 0)
|
|
1146
|
+
return;
|
|
1147
|
+
const pending = this._pendingCustomMessages;
|
|
1148
|
+
this._pendingCustomMessages = [];
|
|
1149
|
+
for (const appMessage of pending) {
|
|
1150
|
+
this._appendCustomMessage(appMessage);
|
|
1100
1151
|
}
|
|
1101
1152
|
}
|
|
1102
1153
|
/**
|
|
@@ -1208,6 +1259,7 @@ export class AgentSession {
|
|
|
1208
1259
|
this.sessionManager.appendModelChange(model.provider, model.id);
|
|
1209
1260
|
if (options.persist) {
|
|
1210
1261
|
this.settingsManager.setDefaultModelAndProvider(model.provider, model.id);
|
|
1262
|
+
this._addPersistedDefaultToNonEmptyScope(model);
|
|
1211
1263
|
}
|
|
1212
1264
|
// Apply thinking level for the new model.
|
|
1213
1265
|
// Per-model thinking level overrides take priority over the global default.
|
|
@@ -1215,6 +1267,20 @@ export class AgentSession {
|
|
|
1215
1267
|
this.setThinkingLevel(thinkingLevel);
|
|
1216
1268
|
await this._emitModelSelect(model, previousModel, "set");
|
|
1217
1269
|
}
|
|
1270
|
+
_addPersistedDefaultToNonEmptyScope(model) {
|
|
1271
|
+
if (this._scopedModels.length === 0)
|
|
1272
|
+
return;
|
|
1273
|
+
if (this._scopedModels.some((scoped) => modelsAreEqual(scoped.model, model)))
|
|
1274
|
+
return;
|
|
1275
|
+
this._scopedModels = [...this._scopedModels, { model }];
|
|
1276
|
+
const enabledModels = this.settingsManager.getEnabledModels();
|
|
1277
|
+
if (!enabledModels?.length)
|
|
1278
|
+
return;
|
|
1279
|
+
const modelReference = `${model.provider}/${model.id}`;
|
|
1280
|
+
if (enabledModels.some((pattern) => pattern.toLowerCase() === modelReference.toLowerCase()))
|
|
1281
|
+
return;
|
|
1282
|
+
this.settingsManager.setEnabledModels([...enabledModels, modelReference]);
|
|
1283
|
+
}
|
|
1218
1284
|
/**
|
|
1219
1285
|
* Cycle to next/previous model.
|
|
1220
1286
|
* Uses scoped models (from --models flag) if available, otherwise all available models.
|
|
@@ -1245,6 +1311,7 @@ export class AgentSession {
|
|
|
1245
1311
|
this.sessionManager.appendModelChange(next.model.provider, next.model.id);
|
|
1246
1312
|
if (options.persist) {
|
|
1247
1313
|
this.settingsManager.setDefaultModelAndProvider(next.model.provider, next.model.id);
|
|
1314
|
+
this._addPersistedDefaultToNonEmptyScope(next.model);
|
|
1248
1315
|
}
|
|
1249
1316
|
// Apply thinking level for the new model.
|
|
1250
1317
|
// - Explicit scoped model thinking level overrides defaults
|
|
@@ -1271,6 +1338,7 @@ export class AgentSession {
|
|
|
1271
1338
|
this.sessionManager.appendModelChange(nextModel.provider, nextModel.id);
|
|
1272
1339
|
if (options.persist) {
|
|
1273
1340
|
this.settingsManager.setDefaultModelAndProvider(nextModel.provider, nextModel.id);
|
|
1341
|
+
this._addPersistedDefaultToNonEmptyScope(nextModel);
|
|
1274
1342
|
}
|
|
1275
1343
|
// Apply thinking level for the new model.
|
|
1276
1344
|
// Model persistence does not implicitly rewrite the global thinking default.
|