gsd-pi 2.34.0 → 2.35.0-dev.cd3b7ea
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/resources/extensions/gsd/changelog.js +162 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +5 -1
- package/dist/resources/extensions/gsd/commands.js +8 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/dist/resources/extensions/gsd/doctor-checks.js +113 -5
- package/dist/resources/extensions/gsd/doctor-proactive.js +22 -0
- package/dist/resources/extensions/gsd/doctor.js +36 -0
- package/dist/resources/extensions/gsd/guided-flow.js +4 -2
- package/dist/resources/extensions/gsd/preferences-validation.js +38 -0
- package/dist/resources/extensions/gsd/preferences.js +2 -0
- package/dist/resources/extensions/mcp-client/index.js +2 -1
- package/dist/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
- package/package.json +1 -1
- package/packages/native/dist/native.d.ts +0 -2
- package/packages/native/dist/native.js +0 -2
- package/packages/native/src/native.ts +0 -3
- package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +24 -27
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +1 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +11 -22
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
- package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/proxy.js +3 -9
- package/packages/pi-agent-core/dist/proxy.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +30 -27
- package/packages/pi-agent-core/src/agent.ts +12 -23
- package/packages/pi-agent-core/src/proxy.ts +3 -9
- package/packages/pi-ai/dist/api-registry.d.ts +0 -2
- package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/packages/pi-ai/dist/api-registry.js +0 -10
- package/packages/pi-ai/dist/api-registry.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js +5 -41
- package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
- package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +10 -73
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.js +8 -79
- package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts +65 -0
- package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/openai-shared.js +146 -0
- package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -0
- package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
- package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.js +0 -4
- package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +7 -135
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +7 -135
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts +46 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js +160 -0
- package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js.map +1 -0
- package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
- package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/overflow.js +0 -6
- package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
- package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
- package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/validation.js +0 -14
- package/packages/pi-ai/dist/utils/validation.js.map +1 -1
- package/packages/pi-ai/src/api-registry.ts +0 -12
- package/packages/pi-ai/src/providers/anthropic.ts +1 -1
- package/packages/pi-ai/src/providers/azure-openai-responses.ts +11 -45
- package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
- package/packages/pi-ai/src/providers/google-shared.ts +1 -1
- package/packages/pi-ai/src/providers/openai-completions.ts +16 -86
- package/packages/pi-ai/src/providers/openai-responses.ts +15 -95
- package/packages/pi-ai/src/providers/openai-shared.ts +193 -0
- package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
- package/packages/pi-ai/src/utils/event-stream.ts +0 -5
- package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +14 -162
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +13 -161
- package/packages/pi-ai/src/utils/oauth/google-oauth-utils.ts +201 -0
- package/packages/pi-ai/src/utils/overflow.ts +1 -8
- package/packages/pi-ai/src/utils/validation.ts +0 -15
- package/packages/pi-coding-agent/dist/config.d.ts +0 -9
- package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/config.js +4 -8
- package/packages/pi-coding-agent/dist/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +16 -63
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +104 -641
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +4 -35
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +5 -43
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +11 -69
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +40 -0
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +78 -0
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +77 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +331 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
- package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +15 -5
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +129 -256
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +49 -42
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js +2 -21
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
- package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lock-utils.d.ts +39 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.js +89 -0
- package/packages/pi-coding-agent/dist/core/lock-utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js +2 -6
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/index.js +52 -107
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -22
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/types.js +0 -28
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +5 -5
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +2 -4
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
- package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
- package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +2 -4
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +33 -58
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +87 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.js +295 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -5
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +5 -32
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +1 -3
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
- package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/migrations.js +2 -2
- package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +9 -26
- package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +61 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +6 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +15 -0
- package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +2 -30
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -28
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts +19 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js +45 -0
- package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js.map +1 -0
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
- package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
- package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/error.d.ts +5 -0
- package/packages/pi-coding-agent/dist/utils/error.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/utils/error.js +7 -0
- package/packages/pi-coding-agent/dist/utils/error.js.map +1 -0
- package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
- package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
- package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
- package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/config.ts +5 -10
- package/packages/pi-coding-agent/src/core/agent-session.ts +117 -745
- package/packages/pi-coding-agent/src/core/auth-storage.ts +4 -38
- package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +7 -53
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +14 -74
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +100 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +424 -0
- package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
- package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -21
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +119 -256
- package/packages/pi-coding-agent/src/core/extensions/types.ts +50 -69
- package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
- package/packages/pi-coding-agent/src/core/lock-utils.ts +113 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
- package/packages/pi-coding-agent/src/core/lsp/config.ts +2 -10
- package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
- package/packages/pi-coding-agent/src/core/lsp/index.ts +83 -152
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -23
- package/packages/pi-coding-agent/src/core/lsp/types.ts +0 -29
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
- package/packages/pi-coding-agent/src/core/messages.ts +5 -5
- package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
- package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
- package/packages/pi-coding-agent/src/core/package-manager.ts +1 -4
- package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
- package/packages/pi-coding-agent/src/core/resource-loader.ts +43 -67
- package/packages/pi-coding-agent/src/core/retry-handler.ts +359 -0
- package/packages/pi-coding-agent/src/core/session-manager.ts +5 -34
- package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
- package/packages/pi-coding-agent/src/core/skills.ts +1 -4
- package/packages/pi-coding-agent/src/index.ts +1 -7
- package/packages/pi-coding-agent/src/migrations.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +17 -29
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -13
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +81 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +14 -19
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +14 -0
- package/packages/pi-coding-agent/src/modes/print-mode.ts +2 -30
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -28
- package/packages/pi-coding-agent/src/modes/shared/command-context-actions.ts +53 -0
- package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
- package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
- package/packages/pi-coding-agent/src/utils/error.ts +6 -0
- package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
- package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +0 -10
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +1 -1
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/components/markdown.d.ts +5 -0
- package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/markdown.js +25 -31
- package/packages/pi-tui/dist/components/markdown.js.map +1 -1
- package/packages/pi-tui/dist/keys.d.ts +0 -4
- package/packages/pi-tui/dist/keys.d.ts.map +1 -1
- package/packages/pi-tui/dist/keys.js +94 -162
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
- package/packages/pi-tui/dist/overlay-layout.js +288 -0
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +0 -22
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +6 -272
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts +0 -7
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +0 -44
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/src/components/editor.ts +1 -1
- package/packages/pi-tui/src/components/markdown.ts +25 -29
- package/packages/pi-tui/src/keys.ts +94 -173
- package/packages/pi-tui/src/overlay-layout.ts +372 -0
- package/packages/pi-tui/src/tui.ts +11 -312
- package/packages/pi-tui/src/utils.ts +0 -43
- package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
- package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
- package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +6 -23
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/themes.js +175 -0
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/changelog.ts +213 -0
- package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +5 -1
- package/src/resources/extensions/gsd/commands.ts +9 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/src/resources/extensions/gsd/doctor-checks.ts +107 -5
- package/src/resources/extensions/gsd/doctor-proactive.ts +24 -0
- package/src/resources/extensions/gsd/doctor-types.ts +9 -1
- package/src/resources/extensions/gsd/doctor.ts +35 -0
- package/src/resources/extensions/gsd/guided-flow.ts +4 -2
- package/src/resources/extensions/gsd/preferences-validation.ts +38 -0
- package/src/resources/extensions/gsd/preferences.ts +2 -0
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +98 -2
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +59 -3
- package/src/resources/extensions/gsd/tests/preferences.test.ts +28 -0
- package/src/resources/extensions/mcp-client/index.ts +2 -1
- package/src/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
- package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
- package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
- package/pkg/dist/modes/interactive/theme/dark.json +0 -85
- package/pkg/dist/modes/interactive/theme/light.json +0 -84
- package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
|
@@ -18,9 +18,9 @@ import {
|
|
|
18
18
|
import { getOAuthApiKey, getOAuthProvider, getOAuthProviders } from "@gsd/pi-ai/oauth";
|
|
19
19
|
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
20
20
|
import { dirname, join } from "path";
|
|
21
|
-
import lockfile from "proper-lockfile";
|
|
22
21
|
import { getAgentDir } from "../config.js";
|
|
23
22
|
import { AUTH_LOCK_STALE_MS } from "./constants.js";
|
|
23
|
+
import { acquireLockAsync, acquireLockSyncWithRetry } from "./lock-utils.js";
|
|
24
24
|
import { resolveConfigValue } from "./resolve-config-value.js";
|
|
25
25
|
|
|
26
26
|
export type ApiKeyCredential = {
|
|
@@ -67,40 +67,13 @@ export class FileAuthStorageBackend implements AuthStorageBackend {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
private acquireLockSyncWithRetry(path: string): () => void {
|
|
71
|
-
const maxAttempts = 10;
|
|
72
|
-
const delayMs = 20;
|
|
73
|
-
let lastError: unknown;
|
|
74
|
-
|
|
75
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
76
|
-
try {
|
|
77
|
-
return lockfile.lockSync(path, { realpath: false });
|
|
78
|
-
} catch (error) {
|
|
79
|
-
const code =
|
|
80
|
-
typeof error === "object" && error !== null && "code" in error
|
|
81
|
-
? String((error as { code?: unknown }).code)
|
|
82
|
-
: undefined;
|
|
83
|
-
if (code !== "ELOCKED" || attempt === maxAttempts) {
|
|
84
|
-
throw error;
|
|
85
|
-
}
|
|
86
|
-
lastError = error;
|
|
87
|
-
const start = Date.now();
|
|
88
|
-
while (Date.now() - start < delayMs) {
|
|
89
|
-
// Sleep synchronously to avoid changing callers to async.
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
throw (lastError as Error) ?? new Error("Failed to acquire auth storage lock");
|
|
95
|
-
}
|
|
96
|
-
|
|
97
70
|
withLock<T>(fn: (current: string | undefined) => LockResult<T>): T {
|
|
98
71
|
this.ensureParentDir();
|
|
99
72
|
this.ensureFileExists();
|
|
100
73
|
|
|
101
74
|
let release: (() => void) | undefined;
|
|
102
75
|
try {
|
|
103
|
-
release =
|
|
76
|
+
release = acquireLockSyncWithRetry(this.authPath);
|
|
104
77
|
const current = existsSync(this.authPath) ? readFileSync(this.authPath, "utf-8") : undefined;
|
|
105
78
|
const { result, next } = fn(current);
|
|
106
79
|
if (next !== undefined) {
|
|
@@ -129,15 +102,8 @@ export class FileAuthStorageBackend implements AuthStorageBackend {
|
|
|
129
102
|
};
|
|
130
103
|
|
|
131
104
|
try {
|
|
132
|
-
release = await
|
|
133
|
-
|
|
134
|
-
retries: 10,
|
|
135
|
-
factor: 2,
|
|
136
|
-
minTimeout: 100,
|
|
137
|
-
maxTimeout: 10000,
|
|
138
|
-
randomize: true,
|
|
139
|
-
},
|
|
140
|
-
stale: AUTH_LOCK_STALE_MS,
|
|
105
|
+
release = await acquireLockAsync(this.authPath, {
|
|
106
|
+
staleMs: AUTH_LOCK_STALE_MS,
|
|
141
107
|
onCompromised: (err) => {
|
|
142
108
|
lockCompromised = true;
|
|
143
109
|
lockCompromisedError = err;
|
|
@@ -9,20 +9,18 @@ import type { AgentMessage } from "@gsd/pi-agent-core";
|
|
|
9
9
|
import type { Model } from "@gsd/pi-ai";
|
|
10
10
|
import { completeSimple } from "@gsd/pi-ai";
|
|
11
11
|
import { COMPACTION_RESERVE_TOKENS } from "../constants.js";
|
|
12
|
-
import {
|
|
13
|
-
convertToLlm,
|
|
14
|
-
createBranchSummaryMessage,
|
|
15
|
-
createCompactionSummaryMessage,
|
|
16
|
-
createCustomMessage,
|
|
17
|
-
} from "../messages.js";
|
|
12
|
+
import { convertToLlm } from "../messages.js";
|
|
18
13
|
import type { ReadonlySessionManager, SessionEntry } from "../session-manager.js";
|
|
19
14
|
import { estimateTokens } from "./compaction.js";
|
|
20
15
|
import {
|
|
21
16
|
computeFileLists,
|
|
22
17
|
createFileOps,
|
|
18
|
+
createSummarizationMessage,
|
|
23
19
|
extractFileOpsFromMessage,
|
|
20
|
+
extractTextContent,
|
|
24
21
|
type FileOperations,
|
|
25
22
|
formatFileOperations,
|
|
23
|
+
getMessageFromEntry,
|
|
26
24
|
SUMMARIZATION_SYSTEM_PROMPT,
|
|
27
25
|
serializeConversation,
|
|
28
26
|
} from "./utils.js";
|
|
@@ -134,39 +132,6 @@ export function collectEntriesForBranchSummary(
|
|
|
134
132
|
return { entries, commonAncestorId };
|
|
135
133
|
}
|
|
136
134
|
|
|
137
|
-
// ============================================================================
|
|
138
|
-
// Entry to Message Conversion
|
|
139
|
-
// ============================================================================
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Extract AgentMessage from a session entry.
|
|
143
|
-
* Similar to getMessageFromEntry in compaction.ts but also handles compaction entries.
|
|
144
|
-
*/
|
|
145
|
-
function getMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {
|
|
146
|
-
switch (entry.type) {
|
|
147
|
-
case "message":
|
|
148
|
-
// Skip tool results - context is in assistant's tool call
|
|
149
|
-
if (entry.message.role === "toolResult") return undefined;
|
|
150
|
-
return entry.message;
|
|
151
|
-
|
|
152
|
-
case "custom_message":
|
|
153
|
-
return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);
|
|
154
|
-
|
|
155
|
-
case "branch_summary":
|
|
156
|
-
return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
|
|
157
|
-
|
|
158
|
-
case "compaction":
|
|
159
|
-
return createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);
|
|
160
|
-
|
|
161
|
-
// These don't contribute to conversation content
|
|
162
|
-
case "thinking_level_change":
|
|
163
|
-
case "model_change":
|
|
164
|
-
case "custom":
|
|
165
|
-
case "label":
|
|
166
|
-
return undefined;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
135
|
/**
|
|
171
136
|
* Prepare entries for summarization with token budget.
|
|
172
137
|
*
|
|
@@ -206,7 +171,7 @@ export function prepareBranchEntries(entries: SessionEntry[], tokenBudget: numbe
|
|
|
206
171
|
// Second pass: walk from newest to oldest, adding messages until token budget
|
|
207
172
|
for (let i = entries.length - 1; i >= 0; i--) {
|
|
208
173
|
const entry = entries[i];
|
|
209
|
-
const message = getMessageFromEntry(entry);
|
|
174
|
+
const message = getMessageFromEntry(entry, /* skipToolResults */ true);
|
|
210
175
|
if (!message) continue;
|
|
211
176
|
|
|
212
177
|
// Extract file ops from assistant messages (tool calls)
|
|
@@ -310,18 +275,10 @@ export async function generateBranchSummary(
|
|
|
310
275
|
}
|
|
311
276
|
const promptText = `<conversation>\n${conversationText}\n</conversation>\n\n${instructions}`;
|
|
312
277
|
|
|
313
|
-
const summarizationMessages = [
|
|
314
|
-
{
|
|
315
|
-
role: "user" as const,
|
|
316
|
-
content: [{ type: "text" as const, text: promptText }],
|
|
317
|
-
timestamp: Date.now(),
|
|
318
|
-
},
|
|
319
|
-
];
|
|
320
|
-
|
|
321
278
|
// Call LLM for summarization
|
|
322
279
|
const response = await completeSimple(
|
|
323
280
|
model,
|
|
324
|
-
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages:
|
|
281
|
+
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: createSummarizationMessage(promptText) },
|
|
325
282
|
{ apiKey, signal, maxTokens: 2048 },
|
|
326
283
|
);
|
|
327
284
|
|
|
@@ -333,10 +290,7 @@ export async function generateBranchSummary(
|
|
|
333
290
|
return { error: response.errorMessage || "Summarization failed" };
|
|
334
291
|
}
|
|
335
292
|
|
|
336
|
-
let summary = response.content
|
|
337
|
-
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
338
|
-
.map((c) => c.text)
|
|
339
|
-
.join("\n");
|
|
293
|
+
let summary = extractTextContent(response.content);
|
|
340
294
|
|
|
341
295
|
// Prepend preamble to provide context about the branch summary
|
|
342
296
|
summary = BRANCH_SUMMARY_PREAMBLE + summary;
|
|
@@ -9,19 +9,18 @@ import type { AgentMessage } from "@gsd/pi-agent-core";
|
|
|
9
9
|
import type { AssistantMessage, Model, Usage } from "@gsd/pi-ai";
|
|
10
10
|
import { completeSimple } from "@gsd/pi-ai";
|
|
11
11
|
import { COMPACTION_KEEP_RECENT_TOKENS, COMPACTION_RESERVE_TOKENS } from "../constants.js";
|
|
12
|
-
import {
|
|
13
|
-
convertToLlm,
|
|
14
|
-
createBranchSummaryMessage,
|
|
15
|
-
createCompactionSummaryMessage,
|
|
16
|
-
createCustomMessage,
|
|
17
|
-
} from "../messages.js";
|
|
12
|
+
import { convertToLlm } from "../messages.js";
|
|
18
13
|
import type { CompactionEntry, SessionEntry } from "../session-manager.js";
|
|
19
14
|
import {
|
|
15
|
+
collectMessages,
|
|
20
16
|
computeFileLists,
|
|
21
17
|
createFileOps,
|
|
18
|
+
createSummarizationMessage,
|
|
22
19
|
extractFileOpsFromMessage,
|
|
20
|
+
extractTextContent,
|
|
23
21
|
type FileOperations,
|
|
24
22
|
formatFileOperations,
|
|
23
|
+
getMessageFromEntry,
|
|
25
24
|
SUMMARIZATION_SYSTEM_PROMPT,
|
|
26
25
|
serializeConversation,
|
|
27
26
|
} from "./utils.js";
|
|
@@ -69,30 +68,6 @@ function extractFileOperations(
|
|
|
69
68
|
return fileOps;
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
// ============================================================================
|
|
73
|
-
// Message Extraction
|
|
74
|
-
// ============================================================================
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Extract AgentMessage from an entry if it produces one.
|
|
78
|
-
* Returns undefined for entries that don't contribute to LLM context.
|
|
79
|
-
*/
|
|
80
|
-
function getMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {
|
|
81
|
-
if (entry.type === "message") {
|
|
82
|
-
return entry.message;
|
|
83
|
-
}
|
|
84
|
-
if (entry.type === "custom_message") {
|
|
85
|
-
return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);
|
|
86
|
-
}
|
|
87
|
-
if (entry.type === "branch_summary") {
|
|
88
|
-
return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
|
|
89
|
-
}
|
|
90
|
-
if (entry.type === "compaction") {
|
|
91
|
-
return createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);
|
|
92
|
-
}
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
71
|
/** Result from compact() - SessionManager adds uuid/parentUuid when saving */
|
|
97
72
|
export interface CompactionResult<T = unknown> {
|
|
98
73
|
summary: string;
|
|
@@ -547,21 +522,13 @@ export async function generateSummary(
|
|
|
547
522
|
}
|
|
548
523
|
promptText += basePrompt;
|
|
549
524
|
|
|
550
|
-
const summarizationMessages = [
|
|
551
|
-
{
|
|
552
|
-
role: "user" as const,
|
|
553
|
-
content: [{ type: "text" as const, text: promptText }],
|
|
554
|
-
timestamp: Date.now(),
|
|
555
|
-
},
|
|
556
|
-
];
|
|
557
|
-
|
|
558
525
|
const completionOptions = model.reasoning
|
|
559
526
|
? { maxTokens, signal, apiKey, reasoning: "high" as const }
|
|
560
527
|
: { maxTokens, signal, apiKey };
|
|
561
528
|
|
|
562
529
|
const response = await completeSimple(
|
|
563
530
|
model,
|
|
564
|
-
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages:
|
|
531
|
+
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: createSummarizationMessage(promptText) },
|
|
565
532
|
completionOptions,
|
|
566
533
|
);
|
|
567
534
|
|
|
@@ -569,12 +536,7 @@ export async function generateSummary(
|
|
|
569
536
|
throw new Error(`Summarization failed: ${response.errorMessage || "Unknown error"}`);
|
|
570
537
|
}
|
|
571
538
|
|
|
572
|
-
|
|
573
|
-
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
574
|
-
.map((c) => c.text)
|
|
575
|
-
.join("\n");
|
|
576
|
-
|
|
577
|
-
return textContent;
|
|
539
|
+
return extractTextContent(response.content);
|
|
578
540
|
}
|
|
579
541
|
|
|
580
542
|
// ============================================================================
|
|
@@ -618,11 +580,7 @@ export function prepareCompaction(
|
|
|
618
580
|
const boundaryEnd = pathEntries.length;
|
|
619
581
|
|
|
620
582
|
const usageStart = prevCompactionIndex >= 0 ? prevCompactionIndex : 0;
|
|
621
|
-
const usageMessages
|
|
622
|
-
for (let i = usageStart; i < boundaryEnd; i++) {
|
|
623
|
-
const msg = getMessageFromEntry(pathEntries[i]);
|
|
624
|
-
if (msg) usageMessages.push(msg);
|
|
625
|
-
}
|
|
583
|
+
const usageMessages = collectMessages(pathEntries, usageStart, boundaryEnd);
|
|
626
584
|
const tokensBefore = estimateContextTokens(usageMessages).tokens;
|
|
627
585
|
|
|
628
586
|
const cutPoint = findCutPoint(pathEntries, boundaryStart, boundaryEnd, settings.keepRecentTokens);
|
|
@@ -637,20 +595,12 @@ export function prepareCompaction(
|
|
|
637
595
|
const historyEnd = cutPoint.isSplitTurn ? cutPoint.turnStartIndex : cutPoint.firstKeptEntryIndex;
|
|
638
596
|
|
|
639
597
|
// Messages to summarize (will be discarded after summary)
|
|
640
|
-
const messagesToSummarize
|
|
641
|
-
for (let i = boundaryStart; i < historyEnd; i++) {
|
|
642
|
-
const msg = getMessageFromEntry(pathEntries[i]);
|
|
643
|
-
if (msg) messagesToSummarize.push(msg);
|
|
644
|
-
}
|
|
598
|
+
const messagesToSummarize = collectMessages(pathEntries, boundaryStart, historyEnd);
|
|
645
599
|
|
|
646
600
|
// Messages for turn prefix summary (if splitting a turn)
|
|
647
|
-
const turnPrefixMessages
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
const msg = getMessageFromEntry(pathEntries[i]);
|
|
651
|
-
if (msg) turnPrefixMessages.push(msg);
|
|
652
|
-
}
|
|
653
|
-
}
|
|
601
|
+
const turnPrefixMessages = cutPoint.isSplitTurn
|
|
602
|
+
? collectMessages(pathEntries, cutPoint.turnStartIndex, cutPoint.firstKeptEntryIndex)
|
|
603
|
+
: [];
|
|
654
604
|
|
|
655
605
|
// Get previous summary for iterative update
|
|
656
606
|
let previousSummary: string | undefined;
|
|
@@ -789,17 +739,10 @@ async function generateTurnPrefixSummary(
|
|
|
789
739
|
const llmMessages = convertToLlm(messages);
|
|
790
740
|
const conversationText = serializeConversation(llmMessages);
|
|
791
741
|
const promptText = `<conversation>\n${conversationText}\n</conversation>\n\n${TURN_PREFIX_SUMMARIZATION_PROMPT}`;
|
|
792
|
-
const summarizationMessages = [
|
|
793
|
-
{
|
|
794
|
-
role: "user" as const,
|
|
795
|
-
content: [{ type: "text" as const, text: promptText }],
|
|
796
|
-
timestamp: Date.now(),
|
|
797
|
-
},
|
|
798
|
-
];
|
|
799
742
|
|
|
800
743
|
const response = await completeSimple(
|
|
801
744
|
model,
|
|
802
|
-
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages:
|
|
745
|
+
{ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: createSummarizationMessage(promptText) },
|
|
803
746
|
{ maxTokens, signal, apiKey },
|
|
804
747
|
);
|
|
805
748
|
|
|
@@ -807,8 +750,5 @@ async function generateTurnPrefixSummary(
|
|
|
807
750
|
throw new Error(`Turn prefix summarization failed: ${response.errorMessage || "Unknown error"}`);
|
|
808
751
|
}
|
|
809
752
|
|
|
810
|
-
return response.content
|
|
811
|
-
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
812
|
-
.map((c) => c.text)
|
|
813
|
-
.join("\n");
|
|
753
|
+
return extractTextContent(response.content);
|
|
814
754
|
}
|
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
import type { AgentMessage } from "@gsd/pi-agent-core";
|
|
6
6
|
import type { Message } from "@gsd/pi-ai";
|
|
7
7
|
import { TOOL_RESULT_MAX_CHARS } from "../constants.js";
|
|
8
|
+
import {
|
|
9
|
+
createBranchSummaryMessage,
|
|
10
|
+
createCompactionSummaryMessage,
|
|
11
|
+
createCustomMessage,
|
|
12
|
+
} from "../messages.js";
|
|
13
|
+
import type { SessionEntry } from "../session-manager.js";
|
|
8
14
|
|
|
9
15
|
// ============================================================================
|
|
10
16
|
// File Operation Tracking
|
|
@@ -82,6 +88,100 @@ export function formatFileOperations(readFiles: string[], modifiedFiles: string[
|
|
|
82
88
|
return `\n\n${sections.join("\n\n")}`;
|
|
83
89
|
}
|
|
84
90
|
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// Message Extraction
|
|
93
|
+
// ============================================================================
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Extract AgentMessage from a session entry.
|
|
97
|
+
*
|
|
98
|
+
* Handles all entry types: message, custom_message, branch_summary, and compaction.
|
|
99
|
+
* Returns undefined for entries that don't contribute to LLM context (e.g., settings changes).
|
|
100
|
+
*
|
|
101
|
+
* @param skipToolResults - If true, skips toolResult messages (used by branch summarization
|
|
102
|
+
* where tool call context is sufficient). Default false.
|
|
103
|
+
*/
|
|
104
|
+
export function getMessageFromEntry(entry: SessionEntry, skipToolResults = false): AgentMessage | undefined {
|
|
105
|
+
switch (entry.type) {
|
|
106
|
+
case "message":
|
|
107
|
+
if (skipToolResults && entry.message.role === "toolResult") return undefined;
|
|
108
|
+
return entry.message;
|
|
109
|
+
|
|
110
|
+
case "custom_message":
|
|
111
|
+
return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);
|
|
112
|
+
|
|
113
|
+
case "branch_summary":
|
|
114
|
+
return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
|
|
115
|
+
|
|
116
|
+
case "compaction":
|
|
117
|
+
return createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);
|
|
118
|
+
|
|
119
|
+
case "thinking_level_change":
|
|
120
|
+
case "model_change":
|
|
121
|
+
case "custom":
|
|
122
|
+
case "label":
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Collect AgentMessages from a range of session entries.
|
|
129
|
+
*
|
|
130
|
+
* @param entries - Session entries array
|
|
131
|
+
* @param startIndex - First index (inclusive)
|
|
132
|
+
* @param endIndex - Last index (exclusive)
|
|
133
|
+
* @param skipToolResults - If true, skips toolResult messages. Default false.
|
|
134
|
+
*/
|
|
135
|
+
export function collectMessages(
|
|
136
|
+
entries: SessionEntry[],
|
|
137
|
+
startIndex: number,
|
|
138
|
+
endIndex: number,
|
|
139
|
+
skipToolResults = false,
|
|
140
|
+
): AgentMessage[] {
|
|
141
|
+
const result: AgentMessage[] = [];
|
|
142
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
143
|
+
const msg = getMessageFromEntry(entries[i], skipToolResults);
|
|
144
|
+
if (msg) result.push(msg);
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// Text Content Extraction
|
|
151
|
+
// ============================================================================
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Extract text from an array of content blocks, filtering to text-type blocks.
|
|
155
|
+
* Replaces the recurring `.filter(c => c.type === "text").map(c => c.text).join(sep)` pattern.
|
|
156
|
+
*/
|
|
157
|
+
export function extractTextContent(
|
|
158
|
+
content: Array<{ type: string; text?: string }>,
|
|
159
|
+
separator = "\n",
|
|
160
|
+
): string {
|
|
161
|
+
return content
|
|
162
|
+
.filter((c): c is { type: "text"; text: string } => c.type === "text")
|
|
163
|
+
.map((c) => c.text)
|
|
164
|
+
.join(separator);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Summarization Message Construction
|
|
169
|
+
// ============================================================================
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Create a single-message array for summarization prompts.
|
|
173
|
+
* Wraps promptText in the standard `[{ role: "user", content: [{ type: "text", text }], timestamp }]` shape.
|
|
174
|
+
*/
|
|
175
|
+
export function createSummarizationMessage(promptText: string): [{ role: "user"; content: [{ type: "text"; text: string }]; timestamp: number }] {
|
|
176
|
+
return [
|
|
177
|
+
{
|
|
178
|
+
role: "user" as const,
|
|
179
|
+
content: [{ type: "text" as const, text: promptText }],
|
|
180
|
+
timestamp: Date.now(),
|
|
181
|
+
},
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
|
|
85
185
|
// ============================================================================
|
|
86
186
|
// Message Serialization
|
|
87
187
|
// ============================================================================
|