@oh-my-pi/pi-coding-agent 17.0.8 → 17.1.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 +87 -1
- package/README.md +1 -1
- package/dist/cli.js +5495 -5021
- package/dist/types/async/job-manager.d.ts +37 -1
- package/dist/types/cli/args.d.ts +2 -0
- package/dist/types/cli/bench-cli.d.ts +41 -0
- package/dist/types/commands/bench.d.ts +15 -3
- package/dist/types/commands/launch.d.ts +4 -0
- package/dist/types/config/__tests__/model-registry.test.d.ts +1 -0
- package/dist/types/config/model-registry.d.ts +30 -1
- package/dist/types/config/models-config-schema.d.ts +18 -6
- package/dist/types/config/models-config.d.ts +14 -5
- package/dist/types/config/provider-globals.d.ts +2 -2
- package/dist/types/config/service-tier.d.ts +5 -1
- package/dist/types/config/settings-schema.d.ts +350 -50
- package/dist/types/config/settings.d.ts +7 -0
- package/dist/types/dap/client.d.ts +20 -0
- package/dist/types/exec/bash-executor.d.ts +38 -0
- package/dist/types/exec/direnv.d.ts +33 -0
- package/dist/types/export/html/args.d.ts +15 -0
- package/dist/types/export/html/index.d.ts +11 -26
- package/dist/types/export/html/web-palette.d.ts +55 -116
- package/dist/types/extensibility/extensions/loader.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +17 -2
- package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +1 -0
- package/dist/types/extensibility/legacy-pi-tui-shim.d.ts +10 -0
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +14 -1
- package/dist/types/internal-urls/registry-helpers.d.ts +11 -0
- package/dist/types/live/controller.d.ts +40 -0
- package/dist/types/live/protocol.d.ts +85 -0
- package/dist/types/live/protocol.test.d.ts +1 -0
- package/dist/types/live/transport.d.ts +48 -0
- package/dist/types/live/visualizer.d.ts +33 -0
- package/dist/types/lsp/client.d.ts +18 -1
- package/dist/types/mcp/config-writer.test.d.ts +1 -0
- package/dist/types/mcp/manager.d.ts +6 -2
- package/dist/types/mcp/oauth-discovery.d.ts +2 -0
- package/dist/types/mcp/render.d.ts +2 -2
- package/dist/types/mcp/smithery-auth.d.ts +1 -1
- package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
- package/dist/types/mcp/tool-bridge.d.ts +7 -3
- package/dist/types/mcp/types.d.ts +6 -0
- package/dist/types/memory-backend/tool-names.d.ts +2 -0
- package/dist/types/modes/components/login-dialog.d.ts +2 -2
- package/dist/types/modes/components/oauth-selector.d.ts +8 -0
- package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
- package/dist/types/modes/components/settings-defs.d.ts +8 -1
- package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
- package/dist/types/modes/components/tool-execution.d.ts +9 -1
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/event-controller.d.ts +6 -1
- package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +3 -0
- package/dist/types/modes/interactive-mode.d.ts +5 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +10 -1
- package/dist/types/modes/rpc/rpc-frame.d.ts +16 -0
- package/dist/types/modes/rpc/rpc-messages.d.ts +26 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +40 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +9 -1
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +1 -1
- package/dist/types/modes/types.d.ts +3 -1
- package/dist/types/modes/utils/context-usage.d.ts +12 -2
- package/dist/types/plan-mode/plan-files.d.ts +10 -0
- package/dist/types/registry/agent-lifecycle.d.ts +21 -9
- package/dist/types/registry/agent-registry.d.ts +11 -4
- package/dist/types/sdk.d.ts +15 -1
- package/dist/types/secrets/index.d.ts +15 -2
- package/dist/types/secrets/obfuscator.d.ts +113 -15
- package/dist/types/session/acp-permission-gate.d.ts +19 -0
- package/dist/types/session/agent-session-events.d.ts +84 -0
- package/dist/types/session/agent-session-types.d.ts +314 -0
- package/dist/types/session/agent-session.d.ts +120 -750
- package/dist/types/session/async-job-delivery.d.ts +28 -0
- package/dist/types/session/bash-runner.d.ts +75 -0
- package/dist/types/session/blob-store.d.ts +11 -1
- package/dist/types/session/blob-store.test.d.ts +1 -0
- package/dist/types/session/checkpoint-entries.d.ts +28 -0
- package/dist/types/session/eval-runner.d.ts +49 -0
- package/dist/types/session/irc-bridge.d.ts +46 -0
- package/dist/types/session/messages.d.ts +22 -0
- package/dist/types/session/model-controls.d.ts +180 -0
- package/dist/types/session/prewalk.d.ts +46 -0
- package/dist/types/session/queued-messages.d.ts +22 -0
- package/dist/types/session/redis-session-storage.d.ts +1 -0
- package/dist/types/session/retry-fallback-chains.d.ts +74 -0
- package/dist/types/session/role-models.d.ts +15 -0
- package/dist/types/session/session-advisors.d.ts +228 -0
- package/dist/types/session/session-entries.d.ts +8 -0
- package/dist/types/session/session-handoff.d.ts +70 -0
- package/dist/types/session/session-history-format.d.ts +6 -1
- package/dist/types/session/session-loader.d.ts +6 -4
- package/dist/types/session/session-maintenance.d.ts +246 -0
- package/dist/types/session/session-manager.d.ts +41 -0
- package/dist/types/session/session-memory.d.ts +56 -0
- package/dist/types/session/session-provider-boundary.d.ts +62 -0
- package/dist/types/session/session-stats.d.ts +48 -0
- package/dist/types/session/session-tools.d.ts +143 -0
- package/dist/types/session/session-workspace.d.ts +32 -0
- package/dist/types/session/stream-guards.d.ts +44 -0
- package/dist/types/session/todo-tracker.d.ts +56 -0
- package/dist/types/session/ttsr-coordinator.d.ts +51 -0
- package/dist/types/session/turn-recovery.d.ts +225 -0
- package/dist/types/system-prompt.d.ts +2 -0
- package/dist/types/task/executor.d.ts +4 -1
- package/dist/types/task/output-manager.d.ts +3 -1
- package/dist/types/task/types.d.ts +14 -0
- package/dist/types/tools/approval.d.ts +1 -0
- package/dist/types/tools/browser/launch.d.ts +5 -0
- package/dist/types/tools/hub/jobs.d.ts +1 -1
- package/dist/types/tools/image-gen.d.ts +4 -4
- package/dist/types/tools/image-providers.d.ts +38 -0
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/path-utils.d.ts +8 -0
- package/dist/types/tools/report-tool-issue.d.ts +24 -9
- package/dist/types/tools/todo.d.ts +10 -4
- package/dist/types/tools/xdev.d.ts +5 -1
- package/dist/types/tts/streaming-player.d.ts +14 -0
- package/dist/types/tts/vocalizer.d.ts +5 -0
- package/dist/types/utils/jj.d.ts +29 -0
- package/dist/types/utils/lang-from-path.d.ts +1 -0
- package/dist/types/utils/title-generator.d.ts +30 -0
- package/dist/types/vibe/runtime.d.ts +36 -8
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/provider.d.ts +15 -5
- package/dist/types/web/search/providers/firecrawl.d.ts +9 -0
- package/dist/types/web/search/types.d.ts +95 -1
- package/package.json +13 -12
- package/scripts/generate-share-viewer.ts +4 -6
- package/scripts/legacy-pi-virtual-module.ts +1 -1
- package/src/advisor/__tests__/advisor.test.ts +643 -0
- package/src/advisor/runtime.ts +144 -43
- package/src/async/job-manager.ts +90 -2
- package/src/cli/args.ts +2 -0
- package/src/cli/auth-gateway-cli.ts +18 -3
- package/src/cli/bench-cli.ts +395 -29
- package/src/cli/flag-tables.ts +3 -0
- package/src/cli/gc-cli.ts +2 -2
- package/src/cli/grievances-cli.ts +2 -2
- package/src/cli/usage-cli.ts +11 -2
- package/src/collab/host.ts +3 -2
- package/src/commands/bench.ts +18 -4
- package/src/commands/launch.ts +4 -0
- package/src/config/__tests__/model-registry.test.ts +147 -0
- package/src/config/model-registry.ts +50 -2
- package/src/config/model-resolver.ts +0 -1
- package/src/config/models-config-schema.ts +15 -4
- package/src/config/provider-globals.ts +9 -9
- package/src/config/service-tier.ts +26 -1
- package/src/config/settings-schema.ts +250 -54
- package/src/config/settings.ts +81 -2
- package/src/dap/client.ts +37 -4
- package/src/edit/index.ts +49 -12
- package/src/eval/py/executor.ts +103 -33
- package/src/exec/bash-executor.ts +89 -6
- package/src/exec/direnv.ts +145 -0
- package/src/export/html/args.ts +20 -0
- package/src/export/html/index.ts +45 -47
- package/src/export/html/template.css +19 -1
- package/src/export/html/template.html +6 -0
- package/src/export/html/template.js +21 -0
- package/src/export/html/tool-views.generated.js +31 -31
- package/src/export/html/web-palette.ts +116 -132
- package/src/export/share.ts +249 -49
- package/src/extensibility/extensions/loader.ts +29 -1
- package/src/extensibility/extensions/runner.ts +6 -0
- package/src/extensibility/extensions/types.ts +33 -2
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +1 -0
- package/src/extensibility/legacy-pi-tui-shim.ts +10 -0
- package/src/extensibility/plugins/legacy-pi-compat.ts +870 -311
- package/src/hindsight/state.ts +64 -6
- package/src/internal-urls/local-protocol.ts +2 -1
- package/src/internal-urls/memory-protocol.ts +2 -2
- package/src/internal-urls/registry-helpers.ts +40 -0
- package/src/internal-urls/skill-protocol.ts +2 -2
- package/src/internal-urls/ssh-protocol.ts +2 -1
- package/src/internal-urls/vault-protocol.ts +2 -1
- package/src/live/audio-worklet.txt +59 -0
- package/src/live/browser-runtime.txt +221 -0
- package/src/live/controller.ts +464 -0
- package/src/live/prompts/agent-final-message.md +3 -0
- package/src/live/prompts/live-instructions.md +23 -0
- package/src/live/protocol.test.ts +140 -0
- package/src/live/protocol.ts +233 -0
- package/src/live/transport.ts +490 -0
- package/src/live/visualizer.ts +234 -0
- package/src/lsp/client.ts +52 -9
- package/src/lsp/clients/biome-client.ts +3 -4
- package/src/lsp/index.ts +44 -11
- package/src/main.ts +9 -1
- package/src/mcp/config-writer.test.ts +43 -0
- package/src/mcp/config-writer.ts +109 -82
- package/src/mcp/manager.ts +39 -8
- package/src/mcp/oauth-discovery.ts +10 -2
- package/src/mcp/render.ts +94 -35
- package/src/mcp/smithery-auth.test.ts +29 -0
- package/src/mcp/smithery-auth.ts +3 -2
- package/src/mcp/tool-bridge.ts +107 -11
- package/src/mcp/types.ts +7 -0
- package/src/memories/index.ts +40 -20
- package/src/memory-backend/tool-names.ts +2 -0
- package/src/mnemopi/backend.ts +24 -7
- package/src/modes/acp/acp-agent.ts +56 -10
- package/src/modes/acp/acp-event-mapper.ts +8 -1
- package/src/modes/components/agent-hub.ts +27 -10
- package/src/modes/components/login-dialog.ts +14 -4
- package/src/modes/components/oauth-selector.ts +24 -7
- package/src/modes/components/plan-review-overlay.ts +350 -35
- package/src/modes/components/settings-defs.ts +28 -3
- package/src/modes/components/settings-selector.ts +178 -6
- package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
- package/src/modes/components/status-line/component.ts +123 -2
- package/src/modes/components/tool-execution.test.ts +63 -2
- package/src/modes/components/tool-execution.ts +11 -2
- package/src/modes/controllers/command-controller.ts +70 -22
- package/src/modes/controllers/event-controller.ts +111 -16
- package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
- package/src/modes/controllers/extension-ui-controller.ts +20 -4
- package/src/modes/controllers/live-command-controller.ts +178 -0
- package/src/modes/controllers/mcp-command-controller.ts +80 -41
- package/src/modes/controllers/omfg-controller.ts +44 -40
- package/src/modes/controllers/selector-controller.ts +18 -10
- package/src/modes/controllers/session-focus-controller.ts +6 -1
- package/src/modes/interactive-mode.ts +160 -38
- package/src/modes/rpc/rpc-client.ts +94 -3
- package/src/modes/rpc/rpc-frame.ts +164 -4
- package/src/modes/rpc/rpc-messages.ts +127 -0
- package/src/modes/rpc/rpc-mode.ts +79 -7
- package/src/modes/rpc/rpc-types.ts +34 -2
- package/src/modes/runtime-init.ts +2 -0
- package/src/modes/setup-wizard/scenes/model.ts +5 -7
- package/src/modes/setup-wizard/scenes/providers.ts +3 -2
- package/src/modes/setup-wizard/scenes/sign-in.ts +8 -2
- package/src/modes/setup-wizard/scenes/theme.ts +13 -3
- package/src/modes/setup-wizard/scenes/types.ts +9 -1
- package/src/modes/setup-wizard/scenes/web-search.ts +23 -10
- package/src/modes/setup-wizard/wizard-overlay.ts +1 -1
- package/src/modes/theme/theme.ts +1 -1
- package/src/modes/types.ts +3 -1
- package/src/modes/utils/context-usage.ts +23 -7
- package/src/modes/utils/ui-helpers.ts +10 -5
- package/src/plan-mode/plan-files.ts +40 -0
- package/src/prompts/bench/cache-prefix-chunk.md +1 -0
- package/src/prompts/bench/cache-prefix.md +3 -0
- package/src/prompts/bench/cache-suffix.md +1 -0
- package/src/prompts/goals/guided-goal-system.md +24 -3
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/project-prompt.md +8 -1
- package/src/prompts/system/subagent-async-pending.md +6 -0
- package/src/prompts/system/system-prompt.md +1 -1
- package/src/prompts/system/workflow-notice.md +48 -40
- package/src/prompts/system/xdev-mount-notice.md +4 -0
- package/src/prompts/tools/task.md +12 -2
- package/src/prompts/tools/todo.md +3 -1
- package/src/registry/agent-lifecycle.ts +116 -46
- package/src/registry/agent-registry.ts +35 -8
- package/src/registry/persisted-agents.ts +26 -2
- package/src/sdk.ts +255 -139
- package/src/secrets/index.ts +127 -4
- package/src/secrets/obfuscator.ts +2328 -105
- package/src/session/acp-permission-gate.ts +165 -0
- package/src/session/agent-session-error-log.test.ts +1 -1
- package/src/session/agent-session-events.ts +66 -0
- package/src/session/agent-session-types.ts +334 -0
- package/src/session/agent-session.ts +1910 -12213
- package/src/session/artifacts.ts +6 -5
- package/src/session/async-job-delivery.ts +74 -0
- package/src/session/bash-runner.ts +326 -0
- package/src/session/blob-store.test.ts +56 -0
- package/src/session/blob-store.ts +18 -2
- package/src/session/checkpoint-entries.ts +81 -0
- package/src/session/eval-runner.ts +212 -0
- package/src/session/indexed-session-storage.ts +9 -2
- package/src/session/irc-bridge.ts +203 -0
- package/src/session/messages.ts +263 -1
- package/src/session/model-controls.ts +714 -0
- package/src/session/prewalk.ts +252 -0
- package/src/session/queued-messages.ts +93 -0
- package/src/session/redis-session-storage.ts +51 -11
- package/src/session/retry-fallback-chains.ts +455 -0
- package/src/session/role-models.ts +85 -0
- package/src/session/session-advisors.ts +1679 -0
- package/src/session/session-context.test.ts +224 -1
- package/src/session/session-context.ts +47 -5
- package/src/session/session-entries.ts +8 -0
- package/src/session/session-handoff.ts +308 -0
- package/src/session/session-history-format.ts +20 -9
- package/src/session/session-loader.ts +10 -51
- package/src/session/session-maintenance.ts +2983 -0
- package/src/session/session-manager.ts +390 -30
- package/src/session/session-memory.ts +222 -0
- package/src/session/session-provider-boundary.ts +307 -0
- package/src/session/session-stats.ts +293 -0
- package/src/session/session-tools.ts +943 -0
- package/src/session/session-workspace.ts +53 -0
- package/src/session/stream-guards.ts +417 -0
- package/src/session/todo-tracker.ts +380 -0
- package/src/session/ttsr-coordinator.ts +496 -0
- package/src/session/turn-recovery.ts +1629 -0
- package/src/slash-commands/builtin-registry.ts +92 -11
- package/src/slash-commands/helpers/usage-report.ts +25 -4
- package/src/system-prompt.ts +41 -17
- package/src/task/executor.ts +288 -70
- package/src/task/index.ts +148 -111
- package/src/task/output-manager.ts +25 -3
- package/src/task/persisted-revive.ts +4 -3
- package/src/task/structured-subagent.ts +4 -1
- package/src/task/types.ts +16 -0
- package/src/tools/approval.ts +55 -10
- package/src/tools/bash-interactive.ts +26 -0
- package/src/tools/bash-skill-urls.ts +28 -2
- package/src/tools/bash.ts +339 -123
- package/src/tools/browser/launch.ts +9 -1
- package/src/tools/browser/tab-supervisor.ts +8 -5
- package/src/tools/browser.ts +94 -47
- package/src/tools/hub/index.ts +1 -1
- package/src/tools/hub/jobs.ts +67 -8
- package/src/tools/image-gen.ts +20 -28
- package/src/tools/image-providers.ts +50 -0
- package/src/tools/index.ts +12 -0
- package/src/tools/path-utils.ts +49 -2
- package/src/tools/read.ts +156 -88
- package/src/tools/renderers.ts +7 -1
- package/src/tools/report-tool-issue.ts +79 -28
- package/src/tools/todo.ts +101 -11
- package/src/tools/vibe.ts +1 -2
- package/src/tools/write.ts +51 -1
- package/src/tools/xdev.ts +67 -3
- package/src/tts/streaming-player.ts +62 -4
- package/src/tts/vocalizer.ts +18 -1
- package/src/utils/jj.ts +125 -4
- package/src/utils/lang-from-path.ts +7 -0
- package/src/utils/title-generator.ts +137 -1
- package/src/vibe/runtime.ts +852 -72
- package/src/web/search/index.ts +3 -6
- package/src/web/search/provider.ts +31 -16
- package/src/web/search/providers/firecrawl.ts +46 -13
- package/src/web/search/providers/xai.ts +7 -1
- package/src/web/search/types.ts +8 -1
|
@@ -85,6 +85,10 @@ function oneLine(text: string, max = PRIMARY_ARG_MAX): string {
|
|
|
85
85
|
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
export function formatExecutionSourcePreview(source: string): string {
|
|
89
|
+
return oneLine(source);
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
/** Join the text blocks of a string-or-blocks content field. Images become `[image]`. */
|
|
89
93
|
function contentToText(content: string | readonly (TextContent | ImageContent)[]): string {
|
|
90
94
|
if (typeof content === "string") return content;
|
|
@@ -110,7 +114,7 @@ function primaryArgValue(value: unknown): string {
|
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
/** Pick the most informative scalar argument of a tool call. */
|
|
113
|
-
function
|
|
117
|
+
export function formatToolCallPrimaryArg(name: string, args: Record<string, unknown> | undefined): string {
|
|
114
118
|
if (!args || typeof args !== "object") return "";
|
|
115
119
|
// Advisor note is the most informative summary; preserve severity too.
|
|
116
120
|
if (name === "advise") {
|
|
@@ -158,6 +162,15 @@ function primaryArg(name: string, args: Record<string, unknown> | undefined): st
|
|
|
158
162
|
}
|
|
159
163
|
}
|
|
160
164
|
|
|
165
|
+
export function formatToolCallIntentPreview(args: Record<string, unknown> | undefined): string | undefined {
|
|
166
|
+
const intent = args?.[INTENT_FIELD];
|
|
167
|
+
return typeof intent === "string" && intent.trim() ? oneLine(intent, 80) : undefined;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function formatToolResultErrorPreview(content: string | readonly (TextContent | ImageContent)[]): string {
|
|
171
|
+
return oneLine(contentToText(content).split("\n", 1)[0] ?? "");
|
|
172
|
+
}
|
|
173
|
+
|
|
161
174
|
/**
|
|
162
175
|
* Wrap a diff body in a backtick fence sized to outlast the longest backtick
|
|
163
176
|
* run inside it, so a diff that touches markdown (triple backticks) can't break
|
|
@@ -177,7 +190,7 @@ function toolCallLine(
|
|
|
177
190
|
includeToolIntent?: boolean,
|
|
178
191
|
expandEditDiffs?: boolean,
|
|
179
192
|
): string {
|
|
180
|
-
const head = `→ ${name}(${
|
|
193
|
+
const head = `→ ${name}(${formatToolCallPrimaryArg(name, args)})`;
|
|
181
194
|
let base: string;
|
|
182
195
|
if (!result) {
|
|
183
196
|
base = `${head} ⇒ pending`;
|
|
@@ -186,7 +199,7 @@ function toolCallLine(
|
|
|
186
199
|
const lines = lineCount(text);
|
|
187
200
|
const count = `${lines} ${lines === 1 ? "line" : "lines"}`;
|
|
188
201
|
if (result.isError) {
|
|
189
|
-
const firstLine =
|
|
202
|
+
const firstLine = formatToolResultErrorPreview(result.content);
|
|
190
203
|
base = firstLine ? `${head} ⇒ error · ${count} — ${firstLine}` : `${head} ⇒ error · ${count}`;
|
|
191
204
|
} else {
|
|
192
205
|
base = `${head} ⇒ ok · ${count}`;
|
|
@@ -200,11 +213,8 @@ function toolCallLine(
|
|
|
200
213
|
}
|
|
201
214
|
}
|
|
202
215
|
|
|
203
|
-
const
|
|
204
|
-
if (
|
|
205
|
-
const formattedIntent = oneLine(intent, 80);
|
|
206
|
-
return `// ${formattedIntent}\n${base}`;
|
|
207
|
-
}
|
|
216
|
+
const formattedIntent = includeToolIntent ? formatToolCallIntentPreview(args) : undefined;
|
|
217
|
+
if (formattedIntent) return `// ${formattedIntent}\n${base}`;
|
|
208
218
|
return base;
|
|
209
219
|
}
|
|
210
220
|
|
|
@@ -220,7 +230,8 @@ function executionLine(
|
|
|
220
230
|
? `error · exit ${msg.exitCode}`
|
|
221
231
|
: "ok";
|
|
222
232
|
const lines = lineCount(msg.output);
|
|
223
|
-
|
|
233
|
+
const sourcePreview = formatExecutionSourcePreview(source);
|
|
234
|
+
return `→ ${kind}! ${sourcePreview} ⇒ ${status} · ${lines} ${lines === 1 ? "line" : "lines"}`;
|
|
224
235
|
}
|
|
225
236
|
|
|
226
237
|
/**
|
|
@@ -3,7 +3,6 @@ import { getBlobsDir, isEnoent, parseJsonlLenient } from "@oh-my-pi/pi-utils";
|
|
|
3
3
|
import { BlobStore, isBlobRef, resolveImageData, resolveImageDataUrl } from "./blob-store";
|
|
4
4
|
import { buildSessionContext } from "./session-context";
|
|
5
5
|
import {
|
|
6
|
-
type CompactionEntry,
|
|
7
6
|
type FileEntry,
|
|
8
7
|
type RawFileEntry,
|
|
9
8
|
SESSION_TITLE_SLOT_BYTES,
|
|
@@ -22,8 +21,6 @@ import {
|
|
|
22
21
|
} from "./session-title-slot";
|
|
23
22
|
|
|
24
23
|
const STREAM_LOAD_THRESHOLD_BYTES = 8 * 1024 * 1024;
|
|
25
|
-
const ELIDED_COMPACTION_SUMMARY = "[Superseded compaction summary elided during session load]";
|
|
26
|
-
const ELIDED_COMPACTION_SHORT_SUMMARY = "Superseded compaction elided";
|
|
27
24
|
|
|
28
25
|
function splitTitleSlot(content: string): { body: string; slot: SessionTitleUpdate | undefined } {
|
|
29
26
|
const slot = titleUpdateFromSlot(parseTitleSlotFromContent(content));
|
|
@@ -59,48 +56,6 @@ export function parseSessionContent(content: string): {
|
|
|
59
56
|
return { entries: foldTitleSlot(entries, slot), titleSlot: slot };
|
|
60
57
|
}
|
|
61
58
|
|
|
62
|
-
function elideCompactionSummary(entry: CompactionEntry | undefined): boolean {
|
|
63
|
-
if (!entry) return false;
|
|
64
|
-
if (
|
|
65
|
-
entry.summary === ELIDED_COMPACTION_SUMMARY &&
|
|
66
|
-
entry.shortSummary === ELIDED_COMPACTION_SHORT_SUMMARY &&
|
|
67
|
-
entry.preserveData === undefined
|
|
68
|
-
) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
entry.summary = ELIDED_COMPACTION_SUMMARY;
|
|
72
|
-
entry.shortSummary = ELIDED_COMPACTION_SHORT_SUMMARY;
|
|
73
|
-
entry.preserveData = undefined;
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function collectActiveBranchIds(entries: FileEntry[]): Set<string> {
|
|
78
|
-
const byId = new Map<string, SessionEntry>();
|
|
79
|
-
for (const entry of entries) {
|
|
80
|
-
const id = (entry as SessionEntry).id;
|
|
81
|
-
if (typeof id === "string") byId.set(id, entry as SessionEntry);
|
|
82
|
-
}
|
|
83
|
-
const branchIds = new Set<string>();
|
|
84
|
-
let cursor = entries[entries.length - 1] as SessionEntry | undefined;
|
|
85
|
-
while (cursor && typeof cursor.id === "string" && !branchIds.has(cursor.id)) {
|
|
86
|
-
branchIds.add(cursor.id);
|
|
87
|
-
const parentId = cursor.parentId;
|
|
88
|
-
cursor = parentId ? byId.get(parentId) : undefined;
|
|
89
|
-
}
|
|
90
|
-
return branchIds;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function elideSupersededCompactionEntries(entries: FileEntry[]): void {
|
|
94
|
-
const branchIds = collectActiveBranchIds(entries);
|
|
95
|
-
let previousCompaction: CompactionEntry | undefined;
|
|
96
|
-
for (const entry of entries) {
|
|
97
|
-
if (entry.type !== "compaction") continue;
|
|
98
|
-
if (!branchIds.has(entry.id)) continue;
|
|
99
|
-
elideCompactionSummary(previousCompaction);
|
|
100
|
-
previousCompaction = entry;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
59
|
/** Exported for testing — the ≥8MiB streaming path (works on any file size). */
|
|
105
60
|
export async function loadEntriesFromFileStream(filePath: string): Promise<{
|
|
106
61
|
entries: FileEntry[];
|
|
@@ -215,7 +170,6 @@ export async function loadEntriesFromFile(
|
|
|
215
170
|
throw err;
|
|
216
171
|
}
|
|
217
172
|
const { entries } = loaded;
|
|
218
|
-
elideSupersededCompactionEntries(entries);
|
|
219
173
|
|
|
220
174
|
// Validate session header
|
|
221
175
|
if (entries.length === 0) return entries;
|
|
@@ -306,10 +260,12 @@ export async function resolveBlobRefsInEntries(entries: FileEntry[], blobStore:
|
|
|
306
260
|
}
|
|
307
261
|
|
|
308
262
|
/**
|
|
309
|
-
* Read-only
|
|
310
|
-
* current version, resolve blob refs, and build the
|
|
311
|
-
* persisted leaf path (last entry).
|
|
312
|
-
*
|
|
263
|
+
* Read-only transcript view of a session file: load entries, migrate to the
|
|
264
|
+
* current version, resolve blob refs, and build the display transcript along
|
|
265
|
+
* the persisted leaf path (last entry). Uses transcript mode (collapsed to the
|
|
266
|
+
* latest compaction) so failed/aborted tail turns stay visible, unlike the
|
|
267
|
+
* provider-context builder which drops them. Does NOT create a writer or take
|
|
268
|
+
* the session lock — safe to call against a file another session is writing.
|
|
313
269
|
*/
|
|
314
270
|
export async function loadSessionMessagesReadOnly(filePath: string): Promise<AgentMessage[]> {
|
|
315
271
|
const entries = await loadEntriesFromFile(filePath);
|
|
@@ -317,5 +273,8 @@ export async function loadSessionMessagesReadOnly(filePath: string): Promise<Age
|
|
|
317
273
|
migrateToCurrentVersion(entries);
|
|
318
274
|
await resolveBlobRefsInEntries(entries, new BlobStore(getBlobsDir()));
|
|
319
275
|
const sessionEntries = entries.filter((e): e is SessionEntry => e.type !== "session");
|
|
320
|
-
return buildSessionContext(sessionEntries
|
|
276
|
+
return buildSessionContext(sessionEntries, undefined, undefined, {
|
|
277
|
+
transcript: true,
|
|
278
|
+
collapseCompactedHistory: true,
|
|
279
|
+
}).messages;
|
|
321
280
|
}
|