@ai-agent-forge/agent-forge 0.88.2 → 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 +27 -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 +240 -230
- 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-6F5JWGKE.js → chunk-32YDZI4J.js} +1 -1
- package/dist/bundle/chunks/{chunk-LSP24WNH.js → chunk-755VNWIF.js} +12 -12
- package/dist/bundle/chunks/{chunk-HTC5K5SM.js → chunk-B42Y2VME.js} +94 -89
- 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-44I47ACN.js → chunk-V3ACW7VD.js} +1 -1
- 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 +1 -1
- 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/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-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 +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -1
- package/dist/core/agent-session-services.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/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/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 +6 -7
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +4 -4
- 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/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/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 +25 -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 +3 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +83 -24
- 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.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +2 -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 +2 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +96 -4
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.js +1 -1
- package/dist/modes/interactive/components/tool-run-group.js.map +1 -1
- 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 +123 -6
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +691 -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 +240 -133
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +251 -2159
- 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/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/suites/builtin-suites.d.ts.map +1 -0
- 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 +15 -1
- 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/usage.md +292 -292
- 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/mcp-stdio/index.d.ts +64 -0
- package/examples/extensions/mcp-stdio/index.d.ts.map +1 -0
- package/examples/extensions/mcp-stdio/index.js +292 -0
- package/examples/extensions/mcp-stdio/index.js.map +1 -0
- 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-MRXD3RWG.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}/builtin-suites.d.ts +0 -0
- /package/dist/{profiles → suites}/builtin-suites.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
package/CHANGELOG.md
CHANGED
|
@@ -2,8 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.88.3] - 2026-10-07
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- `CapabilityRuntime` gained a required member `hasLifecycleSubscribers(type, version)`: whether the registration map currently holds at least one lifecycle registration for the event key (owner activity is still rechecked at delivery). Structural implementers of this exported interface must add the member; in-repo `createCapabilityRuntime` is the only implementation and plugins only consume the interface, so external structural implementers are the affected surface.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Tool result cards now carry a per-item display budget (M2, docs/design/终端输出模式设计.md §3.2, ruling 2026-10-07): a `BoundedResultView` wraps every result renderer component (third-party plugin renderers included) plus the definition-less generic fallback, capping the rendered output at 400 visual lines — head plus the last 100 lines survive and the middle collapses to one hint line naming the omitted count (and the `fullOutputPath` reference when the tool's details carry one). The ctrl+o expanded view is capped by the same budget, so expansion is no longer an unbounded-output escape hatch; renderer contracts are untouched (`renderResult` still receives the raw `expanded` value and `lastComponent` gets the unwrapped child), and error results stay exempt (error visibility beats compactness). Small outputs render byte-for-byte unchanged. Covered by `test/tool-execution-component.test.ts` (M2 block).
|
|
14
|
+
- Trace files now default to 14-day retention plus a per-directory cap of 500 files (M6 default retention, docs/design/会话轨迹与日志设计.md §6, ruling 2026-10-07): the startup sweep in main.ts runs by default and removes expired `*.trace.jsonl` files plus, per swept directory, the oldest-by-mtime survivors beyond the cap (age retention always wins a file over the cap — no double removal). `AGENT_FORGE_TRACE_MAX_AGE_DAYS` and the new `AGENT_FORGE_TRACE_MAX_FILES` override the defaults; an explicit `0` disables the respective mechanism (restoring keep-forever), an invalid value falls back to the default (previously: forever). Scope is unchanged: only the default sessions root (root + one level), never session files or custom `--session-dir`.
|
|
15
|
+
- `output.put` resident artifact buffers are capped at 1 MiB (`OUTPUT_ARTIFACT_MAX_BUFFER_BYTES`, M4 double-layer limit, docs/design/终端输出模式设计.md 缓冲上限契约): buffering stops once the ceiling is exceeded while the `AsyncIterable` is still fully consumed (an early return would backpressure the producer — excess data is only dropped), and the resident view becomes head + ASCII marker (`\n[agent-forge artifact truncated: {N} bytes omitted]\n`) + the final 64 KiB of the completed stream, never exceeding the cap. `ref.sizeBytes`/`ref.truncated` are now runtime-computed (`sizeBytes` is always the original total including dropped bytes; caller-provided values are overridden), and the `onOutputArtifactCommit` observer intentionally receives the truncated resident view, so durable mirrors persist the truncated view (the bash tool collection layer keeps its own hard cap plus the `fullOutputPath` full spill, unaffected). Under-cap puts are byte-for-byte unchanged. Covered by `test/output-artifact-buffer-cap.test.ts`.
|
|
16
|
+
- `model.stream` lifecycle dispatch is subscriber-gated: `dispatchModelStreamLifecycle` checks `hasLifecycleSubscribers` before the per-stream sequence increment, so with zero subscribers no per-delta envelope snapshot, clones, or dispatch happen and no sequence number is consumed — a late subscriber observes a contiguous stream starting at 1 (docs/design/插件基础能力设计.md §model.stream). With the bundled observability plugin attached (default), a subscriber is always present and the dispatch path is unchanged.
|
|
17
|
+
- The four process-level diagnostic containers exposed through the inspector are now bounded, evicting oldest-first on overflow (docs/design/插件基础能力设计.md §8.3): `operations` 1024 (a `running` entry is never evicted because `reportOperationStep` rejects steps for non-running ids; when every entry is running the insert proceeds above the limit and the size stays at that high-water mark, since statuses have no terminal-state removal path), `spans` 1024 (terminal spans evicted first; when all are running it falls back to the oldest in insertion order, and a later `annotate`/`end` on an evicted span throws "not available"), `logs` 1000, `pluginRejections` 128.
|
|
18
|
+
- Streaming assistant messages re-render incrementally: `AssistantMessageComponent.updateContent` diffs the rendered segment sequence and reuses unchanged prefix component instances (setText on the growing tail block), so a streaming frame no longer clears and rebuilds the whole message — per-frame cost drops from O(all blocks) to O(changed blocks) and the markdown token/line caches hit across frames instead of missing on every fresh instance. An `isStreaming` flip (turn end) still rebuilds fully, preserving the D-083 streaming/final transform split; terminal output is identical. Characterization tests pin the old streaming/thinking-collapse behavior.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- The host module supply contract now covers the root `@agent-forge/protocol` specifier: the memory plugin's inference client/protocol modules import it bare, and the jiti VIRTUAL_MODULES table only supplied the `protocol/subagent` subpath — in the install-store shape (no host node_modules) the bare import failed, the memory plugin was silently rejected on load (D-028), and zero memory tools registered. The boundary checker's host-supplied specifier list gains the same root so the three supply places stay synchronized (`test/host-module-supply.test.ts`).
|
|
23
|
+
- `SessionManager` no longer copies `fileEntries` and `byId` on every append: `_appendEntry` rolls a failed storage write back in place (pop the pushed entry + conditional `byId` delete) instead of restoring an O(n) snapshot per append (O(n²) accumulation over a long session). Covered by deterministic failure-injection tests for a failed append and a failed first flush.
|
|
24
|
+
|
|
5
25
|
## [0.88.2] - 2026-10-05
|
|
6
26
|
|
|
27
|
+
### Breaking Changes
|
|
28
|
+
|
|
29
|
+
- pi 品牌除名收口(用户裁决 2026-10-05):环境变量只认 `AGENT_FORGE_*`,删除 `PI_TIMING` / `PI_EXPERIMENTAL` / `PI_CLEAR_ON_SHRINK` / `PI_HARDWARE_CURSOR` 的 legacy fallback 读取;package.json 包资源 manifest 键由 `pi`(`pi.skills` / `pi.prompts` / `pi.themes`)改为 `agent-forge`,旧键不再读取(`readPiManifest` → `readAgentForgeManifest`,`pi-manifest.ts` → `agent-forge-manifest.ts`);experimental CLI 根命令 `pi` 更名 `agent-forge`(`PiCommand` → `AgentForgeCommand`,`runPi` → `runAgentForge`)。
|
|
30
|
+
|
|
7
31
|
### Added
|
|
8
32
|
|
|
9
33
|
- Plugin on-demand activation (插件按需挂载与能力手册设计): capability manifests may declare `activation: "on-demand"`, a one-line `description`, and an optional `manual` path. On-demand plugins register their tools but keep them out of the initial active surface; the system prompt carries a mountable-capabilities card per still-deferred plugin, and the new built-in `capability_mount` tool activates the full tool set (next request) and returns the plugin's AI manual, while `capability_unmount` removes only the schema (runtime state follows the plugin's own idle timeout; session teardown clears all mounts). The framework never unmounts automatically — default `activation` stays `always`, so existing and third-party plugins are unaffected (user ruling 2026-10-05 "临时/常驻分级、渐进式按需加载"). First batch on-demand (7): browser-playwright, the four desktop plugins, subagent-delegate, and image-generation — each ships an AI `MANUAL.md` and joins the package `files` whitelist. Deployment semantics: activation reads the install-store copy, so manifest changes require a `plugin install` re-run. Known defect (logged, workaround verified): local-directory installs package the tree inconsistently and may include `tsconfig.json`, whose repo-relative `extends` breaks jiti loading in the store; installing the `npm pack` tarball (files whitelist) is clean. Covered by `test/capability-mount.test.ts` and verified against a real grok-4.7 session: the model mounted the capability itself before any browser call, and a non-browser session sent zero browser tool schemas.
|
|
@@ -43,6 +67,9 @@
|
|
|
43
67
|
- TUI transcript silencing (D-083, 设计 `docs/design/终端输出模式设计.md` §3): interactive mode's transcript is now quiet by default — one assistant turn's tool calls merge into a single dim marker line (`⏺ bash` while running, `⏺ 3 个工具`/`⏺ 3 tools` when done; the sole tool keeps its name), with an error-colored failure count appended when any result was an error (`· 1 个失败`). Thinking blocks stay fully visible while streaming, then collapse to one dim line (`✻ 思考`/`✻ thinking`); `hideThinkingBlock` hides even that line. `Ctrl+O` (`app.tools.expand`, unchanged key) enters detail mode: per-tool full cards and full thinking text. Quiet rendering skips child tool components entirely (no kv arg lines, no result previews, no "(ctrl+o to expand)" meta hints); session records and tool results are untouched. Tool rendering contracts (`ToolExecutionComponent`, plugin `renderCall`/`renderResult`) are unchanged — only the transcript assembly (streaming and session-restore paths) groups per turn.
|
|
44
68
|
- TUI quiet transcript follow-up (D-083 增补): a failing turn's marker now carries the failing result's first output line (single line, error color) under the `· N failed` count, and tool-result images (desktop/browser screenshots) render under the marker in quiet mode — both are user-visible conclusions, so neither stays hidden behind a global ctrl+o expansion. Text cards stay hidden; plugin render contracts unchanged.
|
|
45
69
|
- Startup plugin bootstrap now realigns factory-listed first-party plugins automatically instead of warning (2026-10-04 install-and-use ruling, 设计 `插件独立分发与启动装配设计.md` §1 G5 例外 + §4.4): an active installation whose version misses the factory range (`^framework version`) is upgraded in place at startup — previously it only produced a `range_not_satisfied` diagnostic with a manual `plugin install`/`update --all` command, leaving every CLI upgrade one manual step away from a working tool surface. The `range_not_satisfied` diagnostic code, the `diagnosed` action status, and the `degraded` aggregate status are removed accordingly; aligned entries report `installed` with reason `range_aligned`, failures report `align_failed` with a "next startup retries automatically" diagnostic, and `AGENT_FORGE_PLUGIN_BOOTSTRAP=off` plus the offline posture gate still skip the whole run. Download failures retry 3 times with exponential backoff at the node wiring layer (the decision loop stays pure), and each install/align/failure now renders one stderr progress line (`{pluginId}: installed {version}` / install-failed with retry note, i18n'd) so a fresh install or upgrade shows live state instead of silence; fully-satisfied startups stay silent. `plugin install` of a factory plugin now prints "restart agent-forge to load it" instead of directing users to edit suite.json (factory plugins resolve through the suite's `builtin.*` capability aliases that default suites already declare).
|
|
70
|
+
- Memory factory default flips off → light (user ruling 2026-10-05 "默认值按主流编程助手来、别默认关闭"): an unconfigured session now assembles the memory family (`memory_write`/`memory_recall`/`memory_list`/`memory_forget`, auto recall, bash error lessons) through the bundled memory package, matching mainstream coding assistants that ship memory enabled. Explicit `off` (settings `memory.mode`, env `AGENT_FORGE_MEMORY_MODE`, or the SDK `memoryCapability.mode` option) restores the previous privacy-first face, and invalid string values still fail closed to off with the same one-line diagnostics. Type-invalid `memoryMode`/`memorySettingsMode` config values now fail closed to off explicitly in the plugin entry instead of silently leaning on the old off default. The resolution chain (explicit > env > settings > legacy alias > default) is mirrored point by point between `resolveSdkMemoryMode` and the plugin's `resolveMemoryMode`; the golden default-session contract, the memory gating suite, and the default-value registry (`docs/design/产品默认值清单.md`) are re-pinned in the same change.
|
|
71
|
+
- Memory model downloads now run as a background preheat that never blocks a prompt (2026-10-05 user ruling 「后台预热、不阻塞提问」): interactive mode kicks the one-time download right after session bind through the public `memory_enable` tool face — missing models start downloading immediately (progress in the plugin log), models already present settle in seconds, declined/absent memory is a no-op. Recall during an in-flight load returns a warming unavailable packet instead of awaiting the download (the old behavior silently blocked the first prompt's auto-recall for the whole download). Plugin-side controls ship in `plugins/memory`: `/memory` shows status, `/memory off` persists a decline (suppressing only the factory-default tier; explicit `memory.mode` re-enables and the preheat re-arms next session), `/memory retry` re-runs after a failure, and the AI-facing `memory_enable` tool shares the same closures.
|
|
72
|
+
- Custom models.json models now default to `reasoning: true`, `maxTokens: 32768`, and `contextWindow: 256000` (user rulings 2026-10-05 "reasoning 默认 false 没有思考不合适" and "默认值按主流编程助手来、往大设置"): a minimal `{"id": ...}` entry gets thinking enabled at the default `medium` level instead of silently never thinking, and the window default no longer sits below mainstream 200K+ models (which triggered premature compaction). For models without thinking support, set `reasoning: false` explicitly — a wrongly-`true` model fails visibly (server rejects `reasoning_effort`) instead of the old silent capability loss; a true window below the default compacts late, caught by overflow detection. The `maxTokens` default moves 16384 → 32768 because reasoning models bill hidden thinking tokens against that budget and the docs already required ≥32768 for them. `cost` (all zero) default is unchanged; the values are registered in `docs/design/产品默认值清单.md`.
|
|
46
73
|
|
|
47
74
|
## [0.88.1] - 2026-10-04
|
|
48
75
|
|
package/README.md
CHANGED
|
@@ -342,7 +342,7 @@ Create a plugin directory under `~/.agent-forge/agent/plugins/` or `.agent-forge
|
|
|
342
342
|
}
|
|
343
343
|
```
|
|
344
344
|
|
|
345
|
-
Capability plugin manifests are validated before loading. See [examples/extensions/](examples/extensions/) for MCP, CLI bridge, Goal/Plan and multi-Agent templates.
|
|
345
|
+
Capability plugin manifests are validated before loading. See [examples/extensions/](examples/extensions/) for MCP, CLI bridge, Goal/Plan and multi-Agent templates. Package resource manifests are declared under the `agent-forge` key of a package.json; capability plugins via `plugin.json` are the recommended extension path.
|
|
346
346
|
|
|
347
347
|
See [docs/packages.md](docs/packages.md).
|
|
348
348
|
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* `planArtifactPages` derives a deterministic page directory from the
|
|
6
6
|
* artifact's stat size; `readArtifactPage` serves one page by slicing the
|
|
7
|
-
* 2.6a store's read.
|
|
7
|
+
* 2.6a store's read. Store contract this pager depends on: `stat().sizeBytes`
|
|
8
|
+
* MUST equal the byte length `read` serves. A store exposing a runtime-capped
|
|
9
|
+
* resident view (see OUTPUT_ARTIFACT_MAX_BUFFER_BYTES) keeps that invariant by
|
|
10
|
+
* statting with the resident length, not the original total — planning pages
|
|
11
|
+
* from a stat larger than the served bytes would produce silent empty tail
|
|
12
|
+
* pages here. Every unavailability (ended lifecycle, cross-session
|
|
8
13
|
* read, unknown id, invalid page size) is a structured `unavailable`
|
|
9
14
|
* result — never a crash and never a silent empty page. No new Agent
|
|
10
15
|
* business API is introduced; the 2.6a store remains the only bytes source.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paged-read.d.ts","sourceRoot":"","sources":["../../src/artifacts/paged-read.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paged-read.d.ts","sourceRoot":"","sources":["../../src/artifacts/paged-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAC3B;IACA,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,4BAA4B,EAAE,CAAC;CACvD,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAC3B;IACA,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC5B,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/D,kBAAkB,CAkBpB;AAED,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,EAC7C,KAAK,EAAE;IACN,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B,GACC,kBAAkB,CAgCpB","sourcesContent":["/**\n * Paged artifact reading (3.5c) — expands large artifacts through reference\n * pages instead of one unbounded read.\n *\n * `planArtifactPages` derives a deterministic page directory from the\n * artifact's stat size; `readArtifactPage` serves one page by slicing the\n * 2.6a store's read. Store contract this pager depends on: `stat().sizeBytes`\n * MUST equal the byte length `read` serves. A store exposing a runtime-capped\n * resident view (see OUTPUT_ARTIFACT_MAX_BUFFER_BYTES) keeps that invariant by\n * statting with the resident length, not the original total — planning pages\n * from a stat larger than the served bytes would produce silent empty tail\n * pages here. Every unavailability (ended lifecycle, cross-session\n * read, unknown id, invalid page size) is a structured `unavailable`\n * result — never a crash and never a silent empty page. No new Agent\n * business API is introduced; the 2.6a store remains the only bytes source.\n */\nimport type { ArtifactStoreV1 } from \"./artifact-store.ts\";\n\nexport interface ArtifactPageDirectoryEntryV1 {\n\treadonly index: number;\n\treadonly offset: number;\n\treadonly size: number;\n}\n\nexport type ArtifactPagePlanV1 =\n\t| {\n\t\t\treadonly status: \"planned\";\n\t\t\treadonly totalBytes: number;\n\t\t\treadonly pageSize: number;\n\t\t\treadonly pages: readonly ArtifactPageDirectoryEntryV1[];\n\t }\n\t| { readonly status: \"invalid_page_size\"; readonly pageSize: number }\n\t| { readonly status: \"unavailable\"; readonly reason: string };\n\nexport type ArtifactPageReadV1 =\n\t| {\n\t\t\treadonly status: \"ok\";\n\t\t\treadonly index: number;\n\t\t\treadonly offset: number;\n\t\t\treadonly bytes: Uint8Array;\n\t\t\treadonly hasMore: boolean;\n\t\t\treadonly nextOffset?: number;\n\t }\n\t| { readonly status: \"unavailable\"; readonly reason: string };\n\nexport function planArtifactPages(\n\tstore: Pick<ArtifactStoreV1, \"stat\">,\n\tinput: { readonly artifactId: string; readonly pageSize: number },\n): ArtifactPagePlanV1 {\n\tif (!Number.isSafeInteger(input.pageSize) || input.pageSize < 1) {\n\t\treturn { status: \"invalid_page_size\", pageSize: input.pageSize };\n\t}\n\tconst stat = store.stat(input.artifactId);\n\tif (!stat) return { status: \"unavailable\", reason: `Artifact not found: ${input.artifactId}` };\n\tif (stat.state === \"ended\") {\n\t\treturn {\n\t\t\tstatus: \"unavailable\",\n\t\t\treason: `Artifact ${input.artifactId} lifecycle has ended: ${stat.endReason ?? \"ended\"}`,\n\t\t};\n\t}\n\tconst totalBytes = stat.sizeBytes ?? 0;\n\tconst pages: ArtifactPageDirectoryEntryV1[] = [];\n\tfor (let offset = 0; offset < totalBytes; offset += input.pageSize) {\n\t\tpages.push({ index: pages.length, offset, size: Math.min(input.pageSize, totalBytes - offset) });\n\t}\n\treturn { status: \"planned\", totalBytes, pageSize: input.pageSize, pages: Object.freeze(pages) };\n}\n\nexport function readArtifactPage(\n\tstore: Pick<ArtifactStoreV1, \"read\" | \"stat\">,\n\tinput: {\n\t\treadonly artifactId: string;\n\t\treadonly sessionId: string;\n\t\treadonly index: number;\n\t\treadonly pageSize: number;\n\t},\n): ArtifactPageReadV1 {\n\tif (!Number.isSafeInteger(input.pageSize) || input.pageSize < 1) {\n\t\treturn { status: \"unavailable\", reason: `Invalid page size: ${input.pageSize}` };\n\t}\n\tconst plan = planArtifactPages(store, { artifactId: input.artifactId, pageSize: input.pageSize });\n\tif (plan.status !== \"planned\")\n\t\treturn {\n\t\t\tstatus: \"unavailable\",\n\t\t\t// v8 ignore next -- pageSize 已在入口校验,plan 不可能返回 invalid_page_size\n\t\t\treason: plan.status === \"unavailable\" ? plan.reason : `Invalid page size: ${plan.pageSize}`,\n\t\t};\n\tconst page = plan.pages[input.index];\n\tif (!page) {\n\t\treturn { status: \"unavailable\", reason: `Page ${input.index} is outside the plan (${plan.pages.length} pages)` };\n\t}\n\tlet bytes: Uint8Array;\n\ttry {\n\t\tbytes = store.read({ artifactId: input.artifactId, sessionId: input.sessionId }).bytes;\n\t} catch (error) {\n\t\treturn { status: \"unavailable\", reason: error instanceof Error ? error.message : String(error) };\n\t}\n\tconst slice = bytes.slice(page.offset, page.offset + page.size);\n\tconst nextOffset = page.offset + page.size;\n\tconst hasMore = nextOffset < plan.totalBytes;\n\treturn {\n\t\tstatus: \"ok\",\n\t\tindex: page.index,\n\t\toffset: page.offset,\n\t\tbytes: slice,\n\t\thasMore,\n\t\t...(hasMore ? { nextOffset } : {}),\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paged-read.js","sourceRoot":"","sources":["../../src/artifacts/paged-read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paged-read.js","sourceRoot":"","sources":["../../src/artifacts/paged-read.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Paged artifact reading (3.5c) — expands large artifacts through reference\n * pages instead of one unbounded read.\n *\n * `planArtifactPages` derives a deterministic page directory from the\n * artifact's stat size; `readArtifactPage` serves one page by slicing the\n * 2.6a store's read. Store contract this pager depends on: `stat().sizeBytes`\n * MUST equal the byte length `read` serves. A store exposing a runtime-capped\n * resident view (see OUTPUT_ARTIFACT_MAX_BUFFER_BYTES) keeps that invariant by\n * statting with the resident length, not the original total — planning pages\n * from a stat larger than the served bytes would produce silent empty tail\n * pages here. Every unavailability (ended lifecycle, cross-session\n * read, unknown id, invalid page size) is a structured `unavailable`\n * result — never a crash and never a silent empty page. No new Agent\n * business API is introduced; the 2.6a store remains the only bytes source.\n */\nimport type { ArtifactStoreV1 } from \"./artifact-store.ts\";\n\nexport interface ArtifactPageDirectoryEntryV1 {\n\treadonly index: number;\n\treadonly offset: number;\n\treadonly size: number;\n}\n\nexport type ArtifactPagePlanV1 =\n\t| {\n\t\t\treadonly status: \"planned\";\n\t\t\treadonly totalBytes: number;\n\t\t\treadonly pageSize: number;\n\t\t\treadonly pages: readonly ArtifactPageDirectoryEntryV1[];\n\t }\n\t| { readonly status: \"invalid_page_size\"; readonly pageSize: number }\n\t| { readonly status: \"unavailable\"; readonly reason: string };\n\nexport type ArtifactPageReadV1 =\n\t| {\n\t\t\treadonly status: \"ok\";\n\t\t\treadonly index: number;\n\t\t\treadonly offset: number;\n\t\t\treadonly bytes: Uint8Array;\n\t\t\treadonly hasMore: boolean;\n\t\t\treadonly nextOffset?: number;\n\t }\n\t| { readonly status: \"unavailable\"; readonly reason: string };\n\nexport function planArtifactPages(\n\tstore: Pick<ArtifactStoreV1, \"stat\">,\n\tinput: { readonly artifactId: string; readonly pageSize: number },\n): ArtifactPagePlanV1 {\n\tif (!Number.isSafeInteger(input.pageSize) || input.pageSize < 1) {\n\t\treturn { status: \"invalid_page_size\", pageSize: input.pageSize };\n\t}\n\tconst stat = store.stat(input.artifactId);\n\tif (!stat) return { status: \"unavailable\", reason: `Artifact not found: ${input.artifactId}` };\n\tif (stat.state === \"ended\") {\n\t\treturn {\n\t\t\tstatus: \"unavailable\",\n\t\t\treason: `Artifact ${input.artifactId} lifecycle has ended: ${stat.endReason ?? \"ended\"}`,\n\t\t};\n\t}\n\tconst totalBytes = stat.sizeBytes ?? 0;\n\tconst pages: ArtifactPageDirectoryEntryV1[] = [];\n\tfor (let offset = 0; offset < totalBytes; offset += input.pageSize) {\n\t\tpages.push({ index: pages.length, offset, size: Math.min(input.pageSize, totalBytes - offset) });\n\t}\n\treturn { status: \"planned\", totalBytes, pageSize: input.pageSize, pages: Object.freeze(pages) };\n}\n\nexport function readArtifactPage(\n\tstore: Pick<ArtifactStoreV1, \"read\" | \"stat\">,\n\tinput: {\n\t\treadonly artifactId: string;\n\t\treadonly sessionId: string;\n\t\treadonly index: number;\n\t\treadonly pageSize: number;\n\t},\n): ArtifactPageReadV1 {\n\tif (!Number.isSafeInteger(input.pageSize) || input.pageSize < 1) {\n\t\treturn { status: \"unavailable\", reason: `Invalid page size: ${input.pageSize}` };\n\t}\n\tconst plan = planArtifactPages(store, { artifactId: input.artifactId, pageSize: input.pageSize });\n\tif (plan.status !== \"planned\")\n\t\treturn {\n\t\t\tstatus: \"unavailable\",\n\t\t\t// v8 ignore next -- pageSize 已在入口校验,plan 不可能返回 invalid_page_size\n\t\t\treason: plan.status === \"unavailable\" ? plan.reason : `Invalid page size: ${plan.pageSize}`,\n\t\t};\n\tconst page = plan.pages[input.index];\n\tif (!page) {\n\t\treturn { status: \"unavailable\", reason: `Page ${input.index} is outside the plan (${plan.pages.length} pages)` };\n\t}\n\tlet bytes: Uint8Array;\n\ttry {\n\t\tbytes = store.read({ artifactId: input.artifactId, sessionId: input.sessionId }).bytes;\n\t} catch (error) {\n\t\treturn { status: \"unavailable\", reason: error instanceof Error ? error.message : String(error) };\n\t}\n\tconst slice = bytes.slice(page.offset, page.offset + page.size);\n\tconst nextOffset = page.offset + page.size;\n\tconst hasMore = nextOffset < plan.totalBytes;\n\treturn {\n\t\tstatus: \"ok\",\n\t\tindex: page.index,\n\t\toffset: page.offset,\n\t\tbytes: slice,\n\t\thasMore,\n\t\t...(hasMore ? { nextOffset } : {}),\n\t};\n}\n"]}
|