@ai-agent-forge/agent-forge 0.88.1 → 0.88.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +71 -0
- package/README.md +1 -1
- package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
- package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
- package/bundled-plugins/coding-tools/agent-forge.json +1 -1
- package/bundled-plugins/coding-tools/plugin.json +1 -1
- package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
- package/bundled-plugins/compaction-policy/plugin.json +1 -1
- package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
- package/bundled-plugins/overflow-policy/plugin.json +1 -1
- package/bundled-plugins/provider-failover/agent-forge.json +1 -1
- package/bundled-plugins/provider-failover/plugin.json +1 -1
- package/bundled-plugins/retry-policy/agent-forge.json +1 -1
- package/bundled-plugins/retry-policy/plugin.json +1 -1
- package/dist/artifacts/paged-read.d.ts +6 -1
- package/dist/artifacts/paged-read.d.ts.map +1 -1
- package/dist/artifacts/paged-read.js.map +1 -1
- package/dist/bundle/.build-manifest.json +283 -263
- package/dist/bundle/chunks/{anthropic-messages-PLAKXR73.js → anthropic-messages-3FJHRAJL.js} +2 -2
- package/dist/bundle/chunks/anthropic.js +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-OUWQ2AZD.js → azure-openai-responses-GCL47IDS.js} +1 -1
- package/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
- package/dist/bundle/chunks/{chunk-Z72JWUZ4.js → chunk-32YDZI4J.js} +1 -1
- package/dist/bundle/chunks/{chunk-AQLNTW2B.js → chunk-755VNWIF.js} +17 -16
- package/dist/bundle/chunks/{chunk-LZOEQITZ.js → chunk-B42Y2VME.js} +120 -104
- package/dist/bundle/chunks/{chunk-DRQDKNXA.js → chunk-BVVSHK6W.js} +1 -1
- package/dist/bundle/chunks/{chunk-6R7UI4IY.js → chunk-QDLOMKF6.js} +1 -1
- package/dist/bundle/chunks/{chunk-D3ARGZFR.js → chunk-V3ACW7VD.js} +3 -3
- package/dist/bundle/chunks/{google-generative-ai-DLII6DAT.js → google-generative-ai-6BMXWA44.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-G7BZL7GM.js → google-vertex-6H7NLRTK.js} +1 -1
- package/dist/bundle/chunks/image-resize-worker.js +3 -3
- package/dist/bundle/chunks/{mistral-conversations-JXUK24ID.js → mistral-conversations-IXUHSFSJ.js} +1 -1
- package/dist/bundle/chunks/{openai-codex-responses-5GSGFIPG.js → openai-codex-responses-YHUAEVCM.js} +1 -1
- package/dist/bundle/chunks/openai-codex.js +1 -1
- package/dist/bundle/chunks/{openai-completions-EI2I6DTG.js → openai-completions-ULQCFC72.js} +1 -1
- package/dist/bundle/chunks/openai-responses-NLLAJDPS.js +2 -0
- package/dist/bundle/chunks/{openrouter-images-G4GQRUSG.js → openrouter-images-GZZQZXMS.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +1 -1
- package/dist/bundle/chunks/{pi-messages-PWU2VJMR.js → pi-messages-EJTI2EJ3.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-TQWEGNNZ.js +5 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts +0 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/experimental/cli.d.ts +3 -3
- package/dist/cli/experimental/cli.d.ts.map +1 -1
- package/dist/cli/experimental/cli.js +2 -2
- package/dist/cli/experimental/cli.js.map +1 -1
- package/dist/cli/experimental/commands/agent-forge.d.ts +15 -0
- package/dist/cli/experimental/commands/agent-forge.d.ts.map +1 -0
- package/dist/cli/experimental/commands/{pi.js → agent-forge.js} +4 -4
- package/dist/cli/experimental/commands/agent-forge.js.map +1 -0
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +8 -2
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -7
- package/dist/config.js.map +1 -1
- package/dist/core/agent-forge-manifest.d.ts +7 -0
- package/dist/core/agent-forge-manifest.d.ts.map +1 -0
- package/dist/core/{pi-manifest.js → agent-forge-manifest.js} +4 -4
- package/dist/core/agent-forge-manifest.js.map +1 -0
- package/dist/core/agent-session-compaction.d.ts +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +3 -3
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +2 -0
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.js.map +1 -1
- package/dist/core/agent-session-lifecycle.d.ts.map +1 -1
- package/dist/core/agent-session-lifecycle.js +12 -1
- package/dist/core/agent-session-lifecycle.js.map +1 -1
- package/dist/core/agent-session-projection.d.ts.map +1 -1
- package/dist/core/agent-session-projection.js +3 -3
- package/dist/core/agent-session-projection.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +3 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-store.d.ts.map +1 -1
- package/dist/core/agent-session-store.js +6 -1
- package/dist/core/agent-session-store.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +13 -0
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +24 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +58 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +1 -3
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensions/capability-runtime-store.d.ts +20 -1
- package/dist/core/extensions/capability-runtime-store.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-store.js +67 -0
- package/dist/core/extensions/capability-runtime-store.js.map +1 -1
- package/dist/core/extensions/capability-runtime-types.d.ts +14 -0
- package/dist/core/extensions/capability-runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-types.js +7 -1
- package/dist/core/extensions/capability-runtime-types.js.map +1 -1
- package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime.js +144 -42
- package/dist/core/extensions/capability-runtime.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/virtual-modules.js +6 -1
- package/dist/core/extensions/virtual-modules.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +1 -1
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.js +2 -0
- package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js +3 -3
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.js +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.js +2 -0
- package/dist/core/i18n/locales/zh-cn/index.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +5 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js +15 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/slash-commands.js +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +2 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +4 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-resource-collection.d.ts.map +1 -1
- package/dist/core/package-resource-collection.js +5 -5
- package/dist/core/package-resource-collection.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +3 -3
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +30 -8
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cleanup.d.ts +49 -0
- package/dist/core/session-cleanup.d.ts.map +1 -0
- package/dist/core/session-cleanup.js +159 -0
- package/dist/core/session-cleanup.js.map +1 -0
- package/dist/core/session-index.d.ts +75 -0
- package/dist/core/session-index.d.ts.map +1 -0
- package/dist/core/session-index.js +455 -0
- package/dist/core/session-index.js.map +1 -0
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +206 -51
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +5 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +5 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +12 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +1 -3
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/capability-mount.d.ts +40 -0
- package/dist/core/tools/capability-mount.d.ts.map +1 -0
- package/dist/core/tools/capability-mount.js +112 -0
- package/dist/core/tools/capability-mount.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition.d.ts +1 -1
- package/dist/core/tools/tool-definition.d.ts.map +1 -1
- package/dist/core/tools/tool-definition.js.map +1 -1
- package/dist/core/trace-retention.d.ts +16 -1
- package/dist/core/trace-retention.d.ts.map +1 -1
- package/dist/core/trace-retention.js +43 -20
- package/dist/core/trace-retention.js.map +1 -1
- package/dist/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/export-html/ansi-to-html.js.map +1 -0
- package/dist/{core/export-html → export-html}/index.d.ts +1 -1
- package/dist/export-html/index.d.ts.map +1 -0
- package/dist/{core/export-html → export-html}/index.js +5 -5
- package/dist/export-html/index.js.map +1 -0
- package/dist/{core/export-html → export-html}/tool-renderer.d.ts +2 -2
- package/dist/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/export-html/tool-renderer.js.map +1 -0
- package/dist/{modes/interactive → host}/model-catalog-refresh.d.ts +1 -1
- package/dist/host/model-catalog-refresh.d.ts.map +1 -0
- package/dist/{modes/interactive → host}/model-catalog-refresh.js +1 -1
- package/dist/host/model-catalog-refresh.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -14
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-view.js +1 -1
- package/dist/modes/interactive/components/agents-view.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +108 -27
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.js +1 -1
- package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
- package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-input.js +1 -1
- package/dist/modes/interactive/components/dialog-input.js.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.js +1 -1
- package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.js +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -1
- package/dist/modes/interactive/components/render-types.d.ts +1 -1
- package/dist/modes/interactive/components/render-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/render-types.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +5 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +11 -2
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js +1 -1
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +1 -1
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +19 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +139 -4
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.d.ts +44 -0
- package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-run-group.js +121 -0
- package/dist/modes/interactive/components/tool-run-group.js.map +1 -0
- package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-list.js +1 -1
- package/dist/modes/interactive/components/tree-list.js.map +1 -1
- package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-render.js +1 -1
- package/dist/modes/interactive/components/tree-render.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/workflow-view.js +1 -1
- package/dist/modes/interactive/components/workflow-view.js.map +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth.js +1 -1
- package/dist/modes/interactive/interactive-auth.js.map +1 -1
- package/dist/modes/interactive/interactive-commands.d.ts +125 -6
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +698 -4
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-events.d.ts +174 -0
- package/dist/modes/interactive/interactive-events.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-events.js +704 -0
- package/dist/modes/interactive/interactive-events.js.map +1 -0
- package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-format.js +1 -1
- package/dist/modes/interactive/interactive-format.js.map +1 -1
- package/dist/modes/interactive/interactive-lifecycle.d.ts +94 -0
- package/dist/modes/interactive/interactive-lifecycle.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-lifecycle.js +177 -0
- package/dist/modes/interactive/interactive-lifecycle.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +254 -129
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +275 -2101
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-queues.d.ts +96 -0
- package/dist/modes/interactive/interactive-queues.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-queues.js +183 -0
- package/dist/modes/interactive/interactive-queues.js.map +1 -0
- package/dist/modes/interactive/interactive-selectors.d.ts +95 -5
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +517 -6
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/startup-services.d.ts +31 -0
- package/dist/modes/interactive/startup-services.d.ts.map +1 -0
- package/dist/modes/interactive/startup-services.js +123 -0
- package/dist/modes/interactive/startup-services.js.map +1 -0
- package/dist/modes/memory-preheat.d.ts +11 -0
- package/dist/modes/memory-preheat.d.ts.map +1 -0
- package/dist/modes/memory-preheat.js +20 -0
- package/dist/modes/memory-preheat.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +3 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +6 -3
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +7 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +50 -3
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +28 -16
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +35 -33
- package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
- package/dist/profile/plugin-profiles.d.ts +1 -1
- package/dist/profile/plugin-profiles.d.ts.map +1 -1
- package/dist/profile/plugin-profiles.js +18 -0
- package/dist/profile/plugin-profiles.js.map +1 -1
- package/dist/remote/server-assembly.d.ts.map +1 -1
- package/dist/remote/server-assembly.js +7 -2
- package/dist/remote/server-assembly.js.map +1 -1
- package/dist/{profiles → suites}/builtin-suites.d.ts +14 -4
- package/dist/suites/builtin-suites.d.ts.map +1 -0
- package/dist/{profiles → suites}/builtin-suites.js +20 -5
- package/dist/suites/builtin-suites.js.map +1 -0
- package/dist/suites/resolved-agent-profile.d.ts.map +1 -0
- package/dist/suites/resolved-agent-profile.js.map +1 -0
- package/dist/suites/suite-lifecycle.d.ts.map +1 -0
- package/dist/suites/suite-lifecycle.js.map +1 -0
- package/dist/suites/suite-loader.d.ts.map +1 -0
- package/dist/suites/suite-loader.js.map +1 -0
- package/dist/{modes/interactive/theme → theme}/dark.json +1 -1
- package/dist/{modes/interactive/theme → theme}/light.json +1 -1
- package/dist/{modes/interactive/theme → theme}/theme-controller.d.ts +1 -1
- package/dist/theme/theme-controller.d.ts.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme-controller.js +1 -1
- package/dist/theme/theme-controller.js.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme.d.ts +1 -1
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme.js +5 -5
- package/dist/theme/theme.js.map +1 -0
- package/docs/compaction.md +7 -7
- package/docs/environment-variables.md +10 -4
- package/docs/keybindings.md +3 -3
- package/docs/models.md +17 -17
- package/docs/packages.md +1 -1
- package/docs/prompt-templates.md +1 -1
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +5 -5
- package/docs/session-format.md +3 -3
- package/docs/settings.md +368 -354
- package/docs/shell-aliases.md +1 -1
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +17 -17
- package/docs/themes.md +5 -5
- package/docs/tmux.md +4 -4
- package/docs/tui.md +1 -1
- package/docs/windows.md +1 -1
- package/examples/extensions/bash-spawn-hook/index.ts +1 -1
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -6
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +2 -2
- package/dist/bundle/chunks/openai-responses-AUJQ3NWT.js +0 -2
- package/dist/bundle/chunks/virtual-modules-WF6WRHP7.js +0 -5
- package/dist/cli/experimental/commands/pi.d.ts +0 -15
- package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
- package/dist/cli/experimental/commands/pi.js.map +0 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
- package/dist/core/export-html/ansi-to-html.js.map +0 -1
- package/dist/core/export-html/index.d.ts.map +0 -1
- package/dist/core/export-html/index.js.map +0 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
- package/dist/core/export-html/tool-renderer.js.map +0 -1
- package/dist/core/pi-manifest.d.ts +0 -7
- package/dist/core/pi-manifest.d.ts.map +0 -1
- package/dist/core/pi-manifest.js.map +0 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +0 -1
- package/dist/modes/interactive/model-catalog-refresh.js.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme.js.map +0 -1
- package/dist/profiles/builtin-suites.d.ts.map +0 -1
- package/dist/profiles/builtin-suites.js.map +0 -1
- package/dist/profiles/resolved-agent-profile.d.ts.map +0 -1
- package/dist/profiles/resolved-agent-profile.js.map +0 -1
- package/dist/profiles/suite-lifecycle.d.ts.map +0 -1
- package/dist/profiles/suite-lifecycle.js.map +0 -1
- package/dist/profiles/suite-loader.d.ts.map +0 -1
- package/dist/profiles/suite-loader.js.map +0 -1
- package/dist/utils/deprecation.d.ts +0 -4
- package/dist/utils/deprecation.d.ts.map +0 -1
- package/dist/utils/deprecation.js +0 -13
- package/dist/utils/deprecation.js.map +0 -1
- /package/dist/{core/export-html → export-html}/ansi-to-html.d.ts +0 -0
- /package/dist/{core/export-html → export-html}/ansi-to-html.js +0 -0
- /package/dist/{core/export-html → export-html}/template.css +0 -0
- /package/dist/{core/export-html → export-html}/template.html +0 -0
- /package/dist/{core/export-html → export-html}/template.js +0 -0
- /package/dist/{core/export-html → export-html}/tool-renderer.js +0 -0
- /package/dist/{core/export-html → export-html}/vendor/highlight.min.js +0 -0
- /package/dist/{core/export-html → export-html}/vendor/marked.min.js +0 -0
- /package/dist/{profiles → suites}/resolved-agent-profile.d.ts +0 -0
- /package/dist/{profiles → suites}/resolved-agent-profile.js +0 -0
- /package/dist/{profiles → suites}/suite-lifecycle.d.ts +0 -0
- /package/dist/{profiles → suites}/suite-lifecycle.js +0 -0
- /package/dist/{profiles → suites}/suite-loader.d.ts +0 -0
- /package/dist/{profiles → suites}/suite-loader.js +0 -0
- /package/dist/{modes/interactive/theme → theme}/theme-schema.json +0 -0
|
@@ -10,6 +10,7 @@ import { normalizePath, resolvePath } from "../utils/paths.js";
|
|
|
10
10
|
import { AGENT_SESSIONS_DIR_NAME } from "./agent-session-paths.js";
|
|
11
11
|
import { t } from "./i18n/index.js";
|
|
12
12
|
import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, createInterruptedToolResultMessage, } from "./messages.js";
|
|
13
|
+
import { listSessionsViaIndex, recordSessionUpdate } from "./session-index.js";
|
|
13
14
|
import { FileSessionStorageProvider, SessionHeaderScanLimitError, } from "./session-storage.js";
|
|
14
15
|
export const CURRENT_SESSION_VERSION = 3;
|
|
15
16
|
function sameSessionRevision(left, right) {
|
|
@@ -564,6 +565,73 @@ async function buildSessionInfo(filePath, signal, fileStats) {
|
|
|
564
565
|
return null;
|
|
565
566
|
}
|
|
566
567
|
}
|
|
568
|
+
/**
|
|
569
|
+
* 从内存 fileEntries 派生会话索引字段(设计 docs/design/会话索引.md §4)。
|
|
570
|
+
*
|
|
571
|
+
* 与 buildSessionInfo() 逐语义对应(该函数从磁盘重读同一文件应得到相同值):
|
|
572
|
+
* - name = 最新一条 session_info(显式空串清除);
|
|
573
|
+
* - messageCount = 全部 message 条目数(不限角色);
|
|
574
|
+
* - modifiedMs = 最后一条 user/assistant 消息活动时间(getMessageActivityTime),
|
|
575
|
+
* 缺失时回退 header 时间戳,再缺失(畸形 header)时回退当前时间——对应
|
|
576
|
+
* buildSessionInfo 的 stats.mtime 兜底,钩子侧文件刚写完,mtime≈now;
|
|
577
|
+
* - firstMessage = 首条有正文的 user 消息文本,无则 "(no messages)";
|
|
578
|
+
* - createdMs = header 时间戳;
|
|
579
|
+
* - profileId/profileVersion = header 的 profile 锁(与 buildSessionInfo 读回一致)。
|
|
580
|
+
* 返回 null 表示无会话头(无可索引字段)。
|
|
581
|
+
*/
|
|
582
|
+
function deriveSessionIndexFields(entries) {
|
|
583
|
+
const header = entries.find((e) => e.type === "session");
|
|
584
|
+
if (!header)
|
|
585
|
+
return null;
|
|
586
|
+
let name;
|
|
587
|
+
let messageCount = 0;
|
|
588
|
+
let firstMessage = "";
|
|
589
|
+
let lastActivityTime;
|
|
590
|
+
for (const entry of entries) {
|
|
591
|
+
if (entry.type === "session")
|
|
592
|
+
continue;
|
|
593
|
+
if (entry.type === "session_info") {
|
|
594
|
+
name = entry.name?.trim() || undefined;
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
if (entry.type !== "message")
|
|
598
|
+
continue;
|
|
599
|
+
messageCount++;
|
|
600
|
+
const activityTime = getMessageActivityTime(entry);
|
|
601
|
+
if (typeof activityTime === "number") {
|
|
602
|
+
lastActivityTime = Math.max(lastActivityTime ?? 0, activityTime);
|
|
603
|
+
}
|
|
604
|
+
const message = entry.message;
|
|
605
|
+
if (!isMessageWithContent(message))
|
|
606
|
+
continue;
|
|
607
|
+
if (message.role !== "user" && message.role !== "assistant")
|
|
608
|
+
continue;
|
|
609
|
+
const textContent = extractTextContent(message);
|
|
610
|
+
if (!textContent)
|
|
611
|
+
continue;
|
|
612
|
+
if (!firstMessage && message.role === "user") {
|
|
613
|
+
firstMessage = textContent;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
const headerTime = typeof header.timestamp === "string" ? new Date(header.timestamp).getTime() : NaN;
|
|
617
|
+
return {
|
|
618
|
+
sessionId: header.id,
|
|
619
|
+
cwd: typeof header.cwd === "string" ? header.cwd : "",
|
|
620
|
+
name,
|
|
621
|
+
parentSessionPath: header.parentSession,
|
|
622
|
+
// 与 buildSessionInfo 相同的守卫:畸形 header 的非字符串值读作缺席。
|
|
623
|
+
profileId: typeof header.profileId === "string" ? header.profileId : undefined,
|
|
624
|
+
profileVersion: typeof header.profileVersion === "string" ? header.profileVersion : undefined,
|
|
625
|
+
createdMs: headerTime,
|
|
626
|
+
modifiedMs: typeof lastActivityTime === "number" && lastActivityTime > 0
|
|
627
|
+
? lastActivityTime
|
|
628
|
+
: Number.isNaN(headerTime)
|
|
629
|
+
? Date.now()
|
|
630
|
+
: headerTime,
|
|
631
|
+
messageCount,
|
|
632
|
+
firstMessage: firstMessage || "(no messages)",
|
|
633
|
+
};
|
|
634
|
+
}
|
|
567
635
|
const MAX_CONCURRENT_SESSION_INFO_LOADS = 10;
|
|
568
636
|
const MAX_CONCURRENT_SESSION_DISCOVERY_LOADS = 64;
|
|
569
637
|
const CURRENT_SESSION_LIST_PUBLISH_INTERVAL = 10;
|
|
@@ -618,6 +686,59 @@ async function listSessionsFromDir(dir, onProgress, signal) {
|
|
|
618
686
|
return [];
|
|
619
687
|
}
|
|
620
688
|
}
|
|
689
|
+
/**
|
|
690
|
+
* 旧的全量扫描:遍历 sessions 根下全部项目目录并逐文件构建 SessionInfo。
|
|
691
|
+
* 保留为索引缺失/损坏/版本不符时的重建源与 listAll 的 fail-open 降级路径
|
|
692
|
+
* (设计 docs/design/会话索引.md §5),行为与抽出前逐字节一致。
|
|
693
|
+
*/
|
|
694
|
+
async function scanAllSessionsFromRoot(sessionsDir, onProgress, signal) {
|
|
695
|
+
try {
|
|
696
|
+
if (!existsSync(sessionsDir))
|
|
697
|
+
return [];
|
|
698
|
+
const entries = await readdir(sessionsDir, { withFileTypes: true });
|
|
699
|
+
const dirs = entries
|
|
700
|
+
.filter((entry) => (entry.isDirectory() || entry.isSymbolicLink()) && entry.name !== AGENT_SESSIONS_DIR_NAME)
|
|
701
|
+
.map((entry) => join(sessionsDir, entry.name));
|
|
702
|
+
const dirFiles = await mapWithConcurrency(dirs, MAX_CONCURRENT_SESSION_DISCOVERY_LOADS, async (dir) => {
|
|
703
|
+
try {
|
|
704
|
+
return (await readdir(dir)).filter((file) => file.endsWith(".jsonl")).map((file) => join(dir, file));
|
|
705
|
+
}
|
|
706
|
+
catch {
|
|
707
|
+
return [];
|
|
708
|
+
}
|
|
709
|
+
}, signal);
|
|
710
|
+
const allFiles = dirFiles.flat();
|
|
711
|
+
const candidates = await mapWithConcurrency(allFiles, MAX_CONCURRENT_SESSION_DISCOVERY_LOADS, async (path) => {
|
|
712
|
+
try {
|
|
713
|
+
return { path, stats: await stat(path) };
|
|
714
|
+
}
|
|
715
|
+
catch {
|
|
716
|
+
return { path };
|
|
717
|
+
}
|
|
718
|
+
}, signal);
|
|
719
|
+
candidates.sort((a, b) => (b.stats?.mtimeMs ?? Number.NEGATIVE_INFINITY) - (a.stats?.mtimeMs ?? Number.NEGATIVE_INFINITY) ||
|
|
720
|
+
basename(b.path).localeCompare(basename(a.path)));
|
|
721
|
+
const totalFiles = candidates.length;
|
|
722
|
+
let loaded = 0;
|
|
723
|
+
let firstCandidateLoaded = false;
|
|
724
|
+
const partialSessions = [];
|
|
725
|
+
const results = await buildSessionInfosWithConcurrency(candidates, (info, index) => {
|
|
726
|
+
loaded++;
|
|
727
|
+
if (index === 0)
|
|
728
|
+
firstCandidateLoaded = true;
|
|
729
|
+
if (info)
|
|
730
|
+
partialSessions.push(info);
|
|
731
|
+
const publishPartial = firstCandidateLoaded &&
|
|
732
|
+
(index === 0 || loaded % ALL_SESSION_LIST_PUBLISH_INTERVAL === 0 || loaded === totalFiles);
|
|
733
|
+
onProgress?.(loaded, totalFiles, publishPartial ? sortSessionInfos([...partialSessions]) : undefined);
|
|
734
|
+
}, signal);
|
|
735
|
+
return sortSessionInfos(results.filter((info) => info !== null));
|
|
736
|
+
}
|
|
737
|
+
catch {
|
|
738
|
+
signal?.throwIfAborted();
|
|
739
|
+
return [];
|
|
740
|
+
}
|
|
741
|
+
}
|
|
621
742
|
/**
|
|
622
743
|
* Manages conversation sessions as append-only trees stored in JSONL files.
|
|
623
744
|
*
|
|
@@ -836,14 +957,46 @@ export class SessionManager {
|
|
|
836
957
|
return;
|
|
837
958
|
this.storage.createExclusive(this.sessionFile, this.fileEntries);
|
|
838
959
|
this.flushed = true;
|
|
960
|
+
// 首次落盘即预热索引条目(设计 docs/design/会话索引.md §4:写钩子是预热
|
|
961
|
+
// 优化,不承担正确性——条目缺失/过期由读路径的 mtime 令牌对账刷新)。
|
|
962
|
+
this.notifySessionIndex(true);
|
|
839
963
|
}
|
|
840
964
|
else {
|
|
841
965
|
this.storage.append(this.sessionFile, entry);
|
|
842
966
|
}
|
|
843
967
|
}
|
|
968
|
+
/**
|
|
969
|
+
* 会话索引写钩子(设计 docs/design/会话索引.md §4)。定位是预热优化,不承担
|
|
970
|
+
* 正确性:条目缺失或过期由读路径的 mtime 令牌对账刷新。仅在默认布局且已落盘
|
|
971
|
+
* (flushed = 会话文件已存在于磁盘)时生效;自定义 --session-dir 与 inMemory
|
|
972
|
+
* 会话不进索引。字段从内存 fileEntries 派生(deriveSessionIndexFields,与
|
|
973
|
+
* buildSessionInfo 逐语义对齐)。索引维护的任何失败都在 recordSessionUpdate
|
|
974
|
+
* 内部吞掉,绝不影响会话持久化。
|
|
975
|
+
*/
|
|
976
|
+
notifySessionIndex(immediate) {
|
|
977
|
+
if (!this.persist || !this.flushed || !this.sessionFile)
|
|
978
|
+
return;
|
|
979
|
+
if (this.sessionDir !== getDefaultSessionDirPath(this.cwd))
|
|
980
|
+
return;
|
|
981
|
+
const fields = deriveSessionIndexFields(this.fileEntries);
|
|
982
|
+
if (!fields)
|
|
983
|
+
return;
|
|
984
|
+
recordSessionUpdate({
|
|
985
|
+
sessionPath: this.sessionFile,
|
|
986
|
+
sessionId: fields.sessionId,
|
|
987
|
+
cwd: fields.cwd,
|
|
988
|
+
name: fields.name,
|
|
989
|
+
parentSessionPath: fields.parentSessionPath,
|
|
990
|
+
profileId: fields.profileId,
|
|
991
|
+
profileVersion: fields.profileVersion,
|
|
992
|
+
createdMs: fields.createdMs,
|
|
993
|
+
modifiedMs: fields.modifiedMs,
|
|
994
|
+
messageCount: fields.messageCount,
|
|
995
|
+
firstMessage: fields.firstMessage,
|
|
996
|
+
immediate,
|
|
997
|
+
});
|
|
998
|
+
}
|
|
844
999
|
_appendEntry(entry) {
|
|
845
|
-
const previousEntries = this.fileEntries.slice();
|
|
846
|
-
const previousById = new Map(this.byId);
|
|
847
1000
|
const previousLeafId = this.leafId;
|
|
848
1001
|
const previousFlushed = this.flushed;
|
|
849
1002
|
const sessionFile = this.sessionFile;
|
|
@@ -854,10 +1007,16 @@ export class SessionManager {
|
|
|
854
1007
|
this.leafId = entry.id;
|
|
855
1008
|
try {
|
|
856
1009
|
this._persist(entry);
|
|
1010
|
+
// 已落盘会话的每轮追加走节流路径(10s 窗口);首 flush 由 _persist 内的
|
|
1011
|
+
// immediate 钩子覆盖,此处不重复(previousFlushed=false)。
|
|
1012
|
+
if (previousFlushed)
|
|
1013
|
+
this.notifySessionIndex(false);
|
|
857
1014
|
}
|
|
858
1015
|
catch (error) {
|
|
859
|
-
|
|
860
|
-
this.
|
|
1016
|
+
// push 与 catch 之间全同步,不可能有并发追加,pop 撤销的必是本次 entry。
|
|
1017
|
+
this.fileEntries.pop();
|
|
1018
|
+
if (this.byId.get(entry.id) === entry)
|
|
1019
|
+
this.byId.delete(entry.id);
|
|
861
1020
|
this.leafId = previousLeafId;
|
|
862
1021
|
this.flushed = previousFlushed;
|
|
863
1022
|
try {
|
|
@@ -1061,6 +1220,10 @@ export class SessionManager {
|
|
|
1061
1220
|
name: sanitizedName,
|
|
1062
1221
|
};
|
|
1063
1222
|
this._appendEntry(entry);
|
|
1223
|
+
// 重命名的预热同步(设计 docs/design/会话索引.md §4):文件已存在时立即
|
|
1224
|
+
// 落盘索引;未落盘会话由 notifySessionIndex 的 flushed 守卫拦截。
|
|
1225
|
+
if (this.flushed)
|
|
1226
|
+
this.notifySessionIndex(true);
|
|
1064
1227
|
return entry.id;
|
|
1065
1228
|
}
|
|
1066
1229
|
/** Get the current session name from the latest session_info entry, if any. */
|
|
@@ -1394,6 +1557,7 @@ export class SessionManager {
|
|
|
1394
1557
|
if (this._hasConversation()) {
|
|
1395
1558
|
this._rewriteFile();
|
|
1396
1559
|
this.flushed = true;
|
|
1560
|
+
this.notifySessionIndex(true);
|
|
1397
1561
|
}
|
|
1398
1562
|
else {
|
|
1399
1563
|
this.flushed = false;
|
|
@@ -1519,11 +1683,33 @@ export class SessionManager {
|
|
|
1519
1683
|
cwd: resolvedTargetCwd,
|
|
1520
1684
|
parentSession: resolvedSourcePath,
|
|
1521
1685
|
};
|
|
1522
|
-
|
|
1686
|
+
const forkedEntries = [
|
|
1523
1687
|
newHeader,
|
|
1524
1688
|
// Copy all non-header entries from source
|
|
1525
1689
|
...sourceEntries.filter((entry) => entry.type !== "session"),
|
|
1526
|
-
]
|
|
1690
|
+
];
|
|
1691
|
+
storage.createExclusive(newSessionFile, forkedEntries);
|
|
1692
|
+
// fork 直接写文件(不经 _persist),成功后预热索引条目(设计 §4:写钩子是
|
|
1693
|
+
// 预热优化,不承担正确性);仅在默认布局生效,失败吞掉(对账自愈)。
|
|
1694
|
+
if (dir === getDefaultSessionDirPath(resolvedTargetCwd)) {
|
|
1695
|
+
const fields = deriveSessionIndexFields(forkedEntries);
|
|
1696
|
+
if (fields) {
|
|
1697
|
+
recordSessionUpdate({
|
|
1698
|
+
sessionPath: newSessionFile,
|
|
1699
|
+
sessionId: fields.sessionId,
|
|
1700
|
+
cwd: fields.cwd,
|
|
1701
|
+
name: fields.name,
|
|
1702
|
+
parentSessionPath: fields.parentSessionPath,
|
|
1703
|
+
profileId: fields.profileId,
|
|
1704
|
+
profileVersion: fields.profileVersion,
|
|
1705
|
+
createdMs: fields.createdMs,
|
|
1706
|
+
modifiedMs: fields.modifiedMs,
|
|
1707
|
+
messageCount: fields.messageCount,
|
|
1708
|
+
firstMessage: fields.firstMessage,
|
|
1709
|
+
immediate: true,
|
|
1710
|
+
});
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1527
1713
|
return new SessionManager(resolvedTargetCwd, dir, newSessionFile, true, undefined, undefined, storage);
|
|
1528
1714
|
}
|
|
1529
1715
|
/**
|
|
@@ -1585,52 +1771,21 @@ export class SessionManager {
|
|
|
1585
1771
|
return sortSessionInfos(await listSessionsFromDir(customSessionDir, progress, abortSignal));
|
|
1586
1772
|
}
|
|
1587
1773
|
const sessionsDir = getSessionsDir();
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
}
|
|
1602
|
-
}, abortSignal);
|
|
1603
|
-
const allFiles = dirFiles.flat();
|
|
1604
|
-
const candidates = await mapWithConcurrency(allFiles, MAX_CONCURRENT_SESSION_DISCOVERY_LOADS, async (path) => {
|
|
1605
|
-
try {
|
|
1606
|
-
return { path, stats: await stat(path) };
|
|
1607
|
-
}
|
|
1608
|
-
catch {
|
|
1609
|
-
return { path };
|
|
1610
|
-
}
|
|
1611
|
-
}, abortSignal);
|
|
1612
|
-
candidates.sort((a, b) => (b.stats?.mtimeMs ?? Number.NEGATIVE_INFINITY) - (a.stats?.mtimeMs ?? Number.NEGATIVE_INFINITY) ||
|
|
1613
|
-
basename(b.path).localeCompare(basename(a.path)));
|
|
1614
|
-
const totalFiles = candidates.length;
|
|
1615
|
-
let loaded = 0;
|
|
1616
|
-
let firstCandidateLoaded = false;
|
|
1617
|
-
const partialSessions = [];
|
|
1618
|
-
const results = await buildSessionInfosWithConcurrency(candidates, (info, index) => {
|
|
1619
|
-
loaded++;
|
|
1620
|
-
if (index === 0)
|
|
1621
|
-
firstCandidateLoaded = true;
|
|
1622
|
-
if (info)
|
|
1623
|
-
partialSessions.push(info);
|
|
1624
|
-
const publishPartial = firstCandidateLoaded &&
|
|
1625
|
-
(index === 0 || loaded % ALL_SESSION_LIST_PUBLISH_INTERVAL === 0 || loaded === totalFiles);
|
|
1626
|
-
progress?.(loaded, totalFiles, publishPartial ? sortSessionInfos([...partialSessions]) : undefined);
|
|
1627
|
-
}, abortSignal);
|
|
1628
|
-
return sortSessionInfos(results.filter((info) => info !== null));
|
|
1629
|
-
}
|
|
1630
|
-
catch {
|
|
1631
|
-
abortSignal?.throwIfAborted();
|
|
1632
|
-
return [];
|
|
1774
|
+
// 默认布局走会话元数据索引(设计 docs/design/会话索引.md §5):命中时亚秒级
|
|
1775
|
+
// 返回;undefined(索引层意外 IO 失败等)fail-open 到旧全量扫描兜底。
|
|
1776
|
+
const viaIndex = await listSessionsViaIndex({
|
|
1777
|
+
sessionsRoot: sessionsDir,
|
|
1778
|
+
buildInfo: (path) => buildSessionInfo(path, abortSignal),
|
|
1779
|
+
scanAll: () => scanAllSessionsFromRoot(sessionsDir, progress, abortSignal),
|
|
1780
|
+
// 索引命中路径发布单次完整已排序快照(loaded === total);重建路径的进度
|
|
1781
|
+
// 由 scanAll 按旧语义发布,不重复。
|
|
1782
|
+
onHit: (sessions) => progress?.(sessions.length, sessions.length, sessions),
|
|
1783
|
+
signal: abortSignal,
|
|
1784
|
+
});
|
|
1785
|
+
if (viaIndex !== undefined) {
|
|
1786
|
+
return viaIndex;
|
|
1633
1787
|
}
|
|
1788
|
+
return scanAllSessionsFromRoot(sessionsDir, progress, abortSignal);
|
|
1634
1789
|
}
|
|
1635
1790
|
}
|
|
1636
1791
|
//# sourceMappingURL=session-manager.js.map
|