@code-yeongyu/senpi 2026.9.23-5 → 2026.9.24-2
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 +51 -0
- package/dist/bundle/chunks/{anthropic-messages-77YBORJ5.js → anthropic-messages-UPLQFNTT.js} +2 -2
- package/dist/bundle/chunks/{app-server-command-BGT65PGC.js → app-server-command-UHPJ2C4D.js} +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-PSESFNHN.js → azure-openai-responses-XAR2E66I.js} +1 -1
- package/dist/bundle/chunks/{chunk-WXIRFRXY.js → chunk-2PLPSKHD.js} +1 -1
- package/dist/bundle/chunks/{chunk-7PANH3NB.js → chunk-3WBSBDBX.js} +1 -1
- package/dist/bundle/chunks/{chunk-BBOQ5H4W.js → chunk-6WBYI25N.js} +1 -1
- package/dist/bundle/chunks/{chunk-RG3UEFSF.js → chunk-7DY7UYLL.js} +1 -1
- package/dist/bundle/chunks/{chunk-VKBY4F76.js → chunk-BSOJHK4W.js} +1 -1
- package/dist/bundle/chunks/{chunk-3XHWW7SQ.js → chunk-CLZVNQW3.js} +1 -1
- package/dist/bundle/chunks/{chunk-ORCF262V.js → chunk-EJKCBRYK.js} +3 -3
- package/dist/bundle/chunks/chunk-J7IUURQ6.js +8 -0
- package/dist/bundle/chunks/{chunk-PSMTQDII.js → chunk-JRQSHZPP.js} +15 -9
- package/dist/bundle/chunks/{chunk-DUV3UFKX.js → chunk-MKAM7IRH.js} +1 -1
- package/dist/bundle/chunks/chunk-MO2U7YRX.js +11 -0
- package/dist/bundle/chunks/{chunk-ZEFQYQOU.js → chunk-NGHOUIPR.js} +1 -1
- package/dist/bundle/chunks/{chunk-XDSQYM4F.js → chunk-NKVUDCGZ.js} +2 -2
- package/dist/bundle/chunks/{chunk-J3QXPP4T.js → chunk-ONR57UMO.js} +1 -1
- package/dist/bundle/chunks/{chunk-TQDWU3ZQ.js → chunk-SYQVC7UM.js} +1 -1
- package/dist/bundle/chunks/chunk-TTHMOL5G.js +2 -0
- package/dist/bundle/chunks/{chunk-NNHFMZD5.js → chunk-UBPMXBOJ.js} +1 -1
- package/dist/bundle/chunks/chunk-WASCMT6Y.js +2 -0
- package/dist/bundle/chunks/{chunk-EN6KDFY2.js → chunk-WISJJQ4K.js} +1 -1
- package/dist/bundle/chunks/{chunk-IVYZMSFY.js → chunk-WL5EQYNL.js} +1 -1
- package/dist/bundle/chunks/{chunk-LC6SZTVE.js → chunk-WTSAB6AE.js} +1 -1
- package/dist/bundle/chunks/{chunk-HKE42SWX.js → chunk-Y54V65MS.js} +1 -1
- package/dist/bundle/chunks/{chunk-3RN6BFG2.js → chunk-YBC274GY.js} +4 -4
- package/dist/bundle/chunks/{chunk-RRSND33J.js → chunk-YKU45B65.js} +54 -54
- package/dist/bundle/chunks/{chunk-WUYBEF7C.js → chunk-YWO3OBYK.js} +1 -1
- package/dist/bundle/chunks/cli-main-O5Y3TBID.js +3 -0
- package/dist/bundle/chunks/{google-generative-ai-YJHSZAY5.js → google-generative-ai-B5QMFONL.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-JTFWEDNJ.js → google-vertex-O2TGMVWF.js} +1 -1
- package/dist/bundle/chunks/{help-fast-path-QXVCHTP3.js → help-fast-path-Y33OIZBU.js} +1 -1
- package/dist/bundle/chunks/{host-command-3PUZYQOK.js → host-command-WJOL27Q7.js} +1 -1
- package/dist/bundle/chunks/{host-lifecycle-OHPSU5VU.js → host-lifecycle-YBFXYFZP.js} +1 -1
- package/dist/bundle/chunks/{interactive-host-runtime-57LEAJPU.js → interactive-host-runtime-XVTF3NUD.js} +1 -1
- package/dist/bundle/chunks/interactive-mode-OO3NGM4G.js +2 -0
- package/dist/bundle/chunks/{list-tips-Z62FXPOJ.js → list-tips-EBRNBPBM.js} +1 -1
- package/dist/bundle/chunks/{mistral-conversations-VJPMPQ5T.js → mistral-conversations-AS3SAWPA.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-GFSDQQUJ.js → multi-session-host-6MKBBOKF.js} +1 -1
- package/dist/bundle/chunks/{openai-codex-responses-IQ35QACK.js → openai-codex-responses-CK7T4WNM.js} +1 -1
- package/dist/bundle/chunks/{openai-completions-74OLE55U.js → openai-completions-OPQKN7FH.js} +3 -3
- package/dist/bundle/chunks/openai-responses-QHWM3KPO.js +2 -0
- package/dist/bundle/chunks/{openrouter-images-T4GY3JYM.js → openrouter-images-MW5TXV7L.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-J7244EJE.js → package-manager-cli-BMEWLAI2.js} +1 -1
- package/dist/bundle/chunks/{rotation-stream-CZT4TRPD.js → rotation-stream-ZFA6ELXJ.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-75CRTY24.js → rpc-mode-5653CV65.js} +1 -1
- package/dist/bundle/chunks/{session-picker-ZIBANFBQ.js → session-picker-PPYK56TA.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +265 -259
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +13 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +28 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +75 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/dynamic-prompt/build.d.ts +6 -1
- package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
- package/dist/core/dynamic-prompt/build.js +0 -7
- package/dist/core/dynamic-prompt/build.js.map +1 -1
- package/dist/core/environment-context.d.ts +32 -0
- package/dist/core/environment-context.d.ts.map +1 -0
- package/dist/core/environment-context.js +63 -0
- package/dist/core/environment-context.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-sync.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-sync.js +1 -15
- package/dist/core/extensions/builtin/anthropic-subscription/session-sync.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +3 -0
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts +19 -2
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.js +28 -2
- package/dist/core/extensions/builtin/goal/cache-warm.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +4 -2
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/parked-wait.js +2 -0
- package/dist/core/extensions/builtin/goal/parked-wait.js.map +1 -1
- package/dist/core/extensions/builtin/goal/prompt.js +1 -1
- package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/herdr/herdr-state.d.ts +5 -0
- package/dist/core/extensions/builtin/herdr/herdr-state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/herdr/herdr-state.js +28 -3
- package/dist/core/extensions/builtin/herdr/herdr-state.js.map +1 -1
- package/dist/core/extensions/builtin/herdr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/herdr/index.js +7 -1
- package/dist/core/extensions/builtin/herdr/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.js +3 -15
- package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/stop-lifecycle.d.ts +26 -0
- package/dist/core/extensions/builtin/hooks/stop-lifecycle.d.ts.map +1 -0
- package/dist/core/extensions/builtin/hooks/stop-lifecycle.js +88 -0
- package/dist/core/extensions/builtin/hooks/stop-lifecycle.js.map +1 -0
- package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +28 -10
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/rules/commands.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/commands.js +5 -1
- package/dist/core/extensions/builtin/rules/commands.js.map +1 -1
- package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/index.js +25 -3
- package/dist/core/extensions/builtin/rules/index.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.js +22 -14
- package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/engine.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/engine.js +39 -9
- package/dist/core/extensions/builtin/rules/rules/engine.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/finder.js +3 -0
- package/dist/core/extensions/builtin/rules/rules/finder.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/project-root.d.ts +17 -0
- package/dist/core/extensions/builtin/rules/rules/project-root.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/project-root.js +67 -5
- package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/types.d.ts +2 -2
- package/dist/core/extensions/builtin/rules/rules/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/types.js.map +1 -1
- package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts +3 -1
- package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/ui/rules-banner.js +1 -1
- package/dist/core/extensions/builtin/rules/ui/rules-banner.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-storage.js +10 -2
- package/dist/core/extensions/builtin/todotools/todo-storage.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js +2 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js +2 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +2 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/kagi.d.ts +3 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/kagi.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/kagi.js +34 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/kagi.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/serpdive.d.ts +3 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/serpdive.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/serpdive.js +22 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/serpdive.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers.js +4 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
- package/dist/core/session-discovery.d.ts +9 -3
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +19 -8
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +8 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-summary-cache.d.ts +16 -3
- package/dist/core/session-summary-cache.d.ts.map +1 -1
- package/dist/core/session-summary-cache.js +19 -3
- package/dist/core/session-summary-cache.js.map +1 -1
- package/dist/core/session-summary-index-file.d.ts +38 -0
- package/dist/core/session-summary-index-file.d.ts.map +1 -0
- package/dist/core/session-summary-index-file.js +119 -0
- package/dist/core/session-summary-index-file.js.map +1 -0
- package/dist/core/session-summary-index.d.ts +52 -0
- package/dist/core/session-summary-index.d.ts.map +1 -0
- package/dist/core/session-summary-index.js +157 -0
- package/dist/core/session-summary-index.js.map +1 -0
- package/dist/core/session-summary.d.ts +21 -2
- package/dist/core/session-summary.d.ts.map +1 -1
- package/dist/core/session-summary.js +53 -14
- package/dist/core/session-summary.js.map +1 -1
- package/dist/core/timings.d.ts +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/renderers/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +7 -2
- package/dist/core/tools/renderers/read.js.map +1 -1
- package/dist/core/tools/renderers/skill-read-path.d.ts +9 -0
- package/dist/core/tools/renderers/skill-read-path.d.ts.map +1 -0
- package/dist/core/tools/renderers/skill-read-path.js +49 -0
- package/dist/core/tools/renderers/skill-read-path.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +7 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/exploration-call.d.ts +1 -1
- package/dist/modes/interactive/components/exploration-call.d.ts.map +1 -1
- package/dist/modes/interactive/components/exploration-call.js +3 -1
- package/dist/modes/interactive/components/exploration-call.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 +32 -16
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-tree.d.ts +32 -0
- package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-tree.js +82 -0
- package/dist/modes/interactive/components/session-selector-tree.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +6 -71
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +4 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +32 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +8 -4
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/AGENTS.md +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/code-preview.ts +31 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-code.ts +34 -131
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-js-ast.ts +65 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-js-layout.ts +90 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-js-mask.ts +178 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-js.ts +100 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-python-script.ts +127 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/display-python.ts +150 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +18 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +9 -25
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +16 -9
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +22 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +3 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.d.ts +6 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.js +6 -19
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +8 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js +8 -35
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +10 -6
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +53 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/chatgpt-subscription.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +71 -14
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-name-match.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-name-match.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-name-match.js +71 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-name-match.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts +5 -0
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +7 -2
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/chunk-KLDLZHHS.js +0 -11
- package/dist/bundle/chunks/chunk-LTIMMSDM.js +0 -8
- package/dist/bundle/chunks/chunk-XYM54ZWK.js +0 -2
- package/dist/bundle/chunks/cli-main-W55CWPEI.js +0 -3
- package/dist/bundle/chunks/interactive-mode-EDJZ4CSY.js +0 -2
- package/dist/bundle/chunks/openai-responses-7IGZSW33.js +0 -2
|
@@ -18,7 +18,7 @@ import { rm } from "node:fs/promises";
|
|
|
18
18
|
import { dirname } from "node:path";
|
|
19
19
|
import { isDeepStrictEqual } from "node:util";
|
|
20
20
|
import { ProviderRetryWatchdogAbortError, prepareAgentToolCall, resolveToolNameAlias, } from "@earendil-works/pi-agent-core";
|
|
21
|
-
import { contentText, providerNotConfiguredMessage, SERVER_FALLBACK_ABORTED_DIAGNOSTIC, } from "@earendil-works/pi-ai";
|
|
21
|
+
import { contentText, providerNotConfiguredMessage, SERVER_FALLBACK_ABORTED_DIAGNOSTIC, supportsAllowedToolChoice, supportsConfigurationUpdate, } from "@earendil-works/pi-ai";
|
|
22
22
|
import { cleanupSessionResources, cursorOverflowCompactionSettings, describeProviderFailureForUser, isClassifierRefusal, isContextOverflow, isCursorPayloadResourceExhausted, isCursorQuotaResourceExhausted, isCursorZeroTokenResourceExhausted, isProviderStreamStallError, isProviderTimeoutError, isRecoverableLength, isRetryableAssistantError, modelsAreEqual, resetApiProviders, shouldRetryOverflowWithoutCompact, streamSimple, stripTurnRetrySuppressionPrefix, } from "@earendil-works/pi-ai/compat";
|
|
23
23
|
import { getCursorContextLimit } from "@earendil-works/pi-ai/utils/cursor-context-limit";
|
|
24
24
|
import { extract429RetryAfterMs, parseRetryAfterMsMarker } from "@earendil-works/pi-ai/utils/retry-hint";
|
|
@@ -44,6 +44,7 @@ import { resolveDiscoveredResourcePaths } from "./discovered-resource-scope.js";
|
|
|
44
44
|
import { buildDynamicSystemPrompt } from "./dynamic-prompt/index.js";
|
|
45
45
|
import { AssistantEditError, assertExpectedLeaf, assistantTextEquals, buildEditedAssistantMessage, SessionStreamingError, } from "./edited-assistant-message.js";
|
|
46
46
|
import { assertExpectedUserLeaf, buildEditedUserMessage, UserEditError, userTextEquals, } from "./edited-user-message.js";
|
|
47
|
+
import { environmentContextMessageIfChanged, resolveEnvironmentContext, } from "./environment-context.js";
|
|
47
48
|
import { areExperimentalFeaturesEnabled } from "./experimental.js";
|
|
48
49
|
import { exportSessionToHtml } from "./export-html/index.js";
|
|
49
50
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
@@ -329,6 +330,12 @@ export class AgentSession {
|
|
|
329
330
|
this._withheldEvalOnlyToolNames = new Set();
|
|
330
331
|
/** Eval-only hint names this session published, so a disarm can withdraw exactly those. */
|
|
331
332
|
this._publishedEvalOnlyHintNames = new Set();
|
|
333
|
+
/** Every tool that has been active this session, in first-activation order (senpi#2095). */
|
|
334
|
+
this._declaredToolNames = [];
|
|
335
|
+
/** Tool names the base system prompt was last built from. */
|
|
336
|
+
this._promptToolNames = [];
|
|
337
|
+
/** Whether the last tool declaration used the session-wide declared set. */
|
|
338
|
+
this._promptDeclaresSessionTools = false;
|
|
332
339
|
this._extensionMode = "print";
|
|
333
340
|
// Tool registry for extension getTools/setTools
|
|
334
341
|
this._toolRegistry = new Map();
|
|
@@ -429,6 +436,7 @@ export class AgentSession {
|
|
|
429
436
|
this._selectorCooldowns = new SelectorCooldowns(config.fallbackNow ?? (() => Date.now()));
|
|
430
437
|
this._fallbackNow = config.fallbackNow ?? (() => Date.now());
|
|
431
438
|
this._retryRandom = config.retryRandom ?? Math.random;
|
|
439
|
+
this._environmentContextEnabled = config.environmentContext ?? true;
|
|
432
440
|
this._retryFallback = new RetryFallbackController({
|
|
433
441
|
getSettings: () => this.settingsManager.getRetryFallbackSettings(),
|
|
434
442
|
registry: this._modelRegistry,
|
|
@@ -821,6 +829,7 @@ export class AgentSession {
|
|
|
821
829
|
};
|
|
822
830
|
previousContext = previousSnapshot.context ?? postLateCompactionTurn.context;
|
|
823
831
|
}
|
|
832
|
+
this._refreshToolDeclarationsForModel();
|
|
824
833
|
return {
|
|
825
834
|
...previousSnapshot,
|
|
826
835
|
context: {
|
|
@@ -828,6 +837,7 @@ export class AgentSession {
|
|
|
828
837
|
messages: previousContext.messages,
|
|
829
838
|
systemPrompt: this._systemPromptOverride ?? this._baseSystemPrompt,
|
|
830
839
|
tools: this.agent.state.tools.slice(),
|
|
840
|
+
declaredTools: this.agent.state.declaredTools?.slice(),
|
|
831
841
|
},
|
|
832
842
|
model: this.agent.state.model,
|
|
833
843
|
thinkingLevel: this.agent.state.thinkingLevel,
|
|
@@ -2424,9 +2434,12 @@ export class AgentSession {
|
|
|
2424
2434
|
const activeToolNamesChanged = validToolNames.length !== this.agent.state.tools.length ||
|
|
2425
2435
|
validToolNames.some((name, index) => name !== this.agent.state.tools[index]?.name);
|
|
2426
2436
|
this.agent.state.tools = tools;
|
|
2437
|
+
for (const name of validToolNames) {
|
|
2438
|
+
if (!this._declaredToolNames.includes(name))
|
|
2439
|
+
this._declaredToolNames.push(name);
|
|
2440
|
+
}
|
|
2427
2441
|
// Rebuild base system prompt with new tool set
|
|
2428
|
-
this.
|
|
2429
|
-
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
2442
|
+
this._applyToolDeclarations(validToolNames);
|
|
2430
2443
|
if (activeToolNamesChanged) {
|
|
2431
2444
|
// A tool change emitted while extensions are still binding belongs to the
|
|
2432
2445
|
// binding itself, not to a mid-session change. The session was already
|
|
@@ -2438,6 +2451,45 @@ export class AgentSession {
|
|
|
2438
2451
|
}
|
|
2439
2452
|
}
|
|
2440
2453
|
}
|
|
2454
|
+
/**
|
|
2455
|
+
* senpi#2095: a model that accepts `allowed_tools` is declared every tool this session has
|
|
2456
|
+
* activated, and the prompt's tool section lists that same set, so the active set shrinking or
|
|
2457
|
+
* re-growing restricts callability through `tool_choice` instead of rewriting the cached prefix.
|
|
2458
|
+
* Any other model is declared exactly the active tools.
|
|
2459
|
+
*/
|
|
2460
|
+
_declaresSessionTools() {
|
|
2461
|
+
const model = this.model;
|
|
2462
|
+
return model !== undefined && supportsAllowedToolChoice(model);
|
|
2463
|
+
}
|
|
2464
|
+
_toolDeclarationNames(activeToolNames) {
|
|
2465
|
+
if (!this._declaresSessionTools())
|
|
2466
|
+
return [...activeToolNames];
|
|
2467
|
+
return this._declaredToolNames.filter((name) => this._toolRegistry.has(name));
|
|
2468
|
+
}
|
|
2469
|
+
_applyToolDeclarations(activeToolNames) {
|
|
2470
|
+
this._promptDeclaresSessionTools = this._declaresSessionTools();
|
|
2471
|
+
const declaredNames = this._toolDeclarationNames(activeToolNames);
|
|
2472
|
+
const declaresInactiveTools = declaredNames.length !== activeToolNames.length ||
|
|
2473
|
+
declaredNames.some((name, index) => name !== activeToolNames[index]);
|
|
2474
|
+
this.agent.state.declaredTools = declaresInactiveTools
|
|
2475
|
+
? declaredNames.flatMap((name) => this._toolRegistry.get(name) ?? [])
|
|
2476
|
+
: undefined;
|
|
2477
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(declaredNames);
|
|
2478
|
+
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
2479
|
+
}
|
|
2480
|
+
/**
|
|
2481
|
+
* Re-derive the declaration after a model change. Only a switch into or out of a model that declares
|
|
2482
|
+
* the session set can move it, and the prompt is rebuilt only when its tool list actually moves.
|
|
2483
|
+
*/
|
|
2484
|
+
_refreshToolDeclarationsForModel() {
|
|
2485
|
+
if (!this._declaresSessionTools() && !this._promptDeclaresSessionTools)
|
|
2486
|
+
return;
|
|
2487
|
+
const declaredNames = this._toolDeclarationNames(this.getActiveToolNames());
|
|
2488
|
+
const unchanged = declaredNames.length === this._promptToolNames.length &&
|
|
2489
|
+
declaredNames.every((name, index) => name === this._promptToolNames[index]);
|
|
2490
|
+
if (!unchanged)
|
|
2491
|
+
this._applyToolDeclarations(this.getActiveToolNames());
|
|
2492
|
+
}
|
|
2441
2493
|
/** Whether compaction or branch summarization is currently running */
|
|
2442
2494
|
get isCompacting() {
|
|
2443
2495
|
return (this._compactionLifecycle.state.status === "running" ||
|
|
@@ -2550,6 +2602,7 @@ export class AgentSession {
|
|
|
2550
2602
|
}
|
|
2551
2603
|
_rebuildSystemPrompt(toolNames) {
|
|
2552
2604
|
const validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));
|
|
2605
|
+
this._promptToolNames = validToolNames;
|
|
2553
2606
|
// An eval-only tool is hidden from the model but still callable as `tool.<name>(...)`,
|
|
2554
2607
|
// so its own snippet and guidelines still apply and must survive the withholding.
|
|
2555
2608
|
// `selectedTools` stays the model-visible list; only the contributions are widened.
|
|
@@ -2956,8 +3009,11 @@ export class AgentSession {
|
|
|
2956
3009
|
}
|
|
2957
3010
|
// The user's new prompt is sent below, so do not call agent.continue() here.
|
|
2958
3011
|
await this._enforceCompactionBeforeProvider(this._findLastAssistantMessage(), false, "pre_prompt");
|
|
2959
|
-
// Build messages array (
|
|
3012
|
+
// Build messages array (environment context if it changed, user message, then custom messages)
|
|
2960
3013
|
messages = [];
|
|
3014
|
+
const environmentContext = this._pendingEnvironmentContextMessage();
|
|
3015
|
+
if (environmentContext)
|
|
3016
|
+
messages.push(environmentContext);
|
|
2961
3017
|
// Add user message
|
|
2962
3018
|
const userContent = [{ type: "text", text: expandedText }];
|
|
2963
3019
|
if (currentImages) {
|
|
@@ -2977,6 +3033,7 @@ export class AgentSession {
|
|
|
2977
3033
|
messages.push(msg);
|
|
2978
3034
|
}
|
|
2979
3035
|
// Emit before_agent_start extension event
|
|
3036
|
+
this._refreshToolDeclarationsForModel();
|
|
2980
3037
|
const result = await this._extensionRunner.emitBeforeAgentStart(expandedText, currentImages, this._baseSystemPrompt, this._baseSystemPromptOptions);
|
|
2981
3038
|
this._applyBeforeAgentStartResult(messages, result);
|
|
2982
3039
|
// The preflight above only sees persisted session context. These prompt,
|
|
@@ -3429,7 +3486,8 @@ export class AgentSession {
|
|
|
3429
3486
|
}
|
|
3430
3487
|
else if (options?.triggerTurn) {
|
|
3431
3488
|
finishSessionWork ??= this._sessionWorkBarrier.begin();
|
|
3432
|
-
const
|
|
3489
|
+
const environmentContext = this._pendingEnvironmentContextMessage();
|
|
3490
|
+
const messages = environmentContext ? [environmentContext, appMessage] : [appMessage];
|
|
3433
3491
|
const queueTriggerForLater = () => {
|
|
3434
3492
|
if (options.deliverAs === "followUp") {
|
|
3435
3493
|
this.agent.followUp(appMessage);
|
|
@@ -3441,6 +3499,7 @@ export class AgentSession {
|
|
|
3441
3499
|
this._triggerTurnAdmissionAbortGeneration = userAbortGeneration;
|
|
3442
3500
|
try {
|
|
3443
3501
|
await this._enforceCompactionBeforeProvider(this._findLastAssistantMessage(), false, "pre_prompt");
|
|
3502
|
+
this._refreshToolDeclarationsForModel();
|
|
3444
3503
|
const result = await this._extensionRunner.emitBeforeAgentStart(contentText(appMessage.content, ""), undefined, this._baseSystemPrompt, this._baseSystemPromptOptions);
|
|
3445
3504
|
if (userAbortGeneration !== this._userAbortGeneration) {
|
|
3446
3505
|
queueTriggerForLater();
|
|
@@ -3478,6 +3537,12 @@ export class AgentSession {
|
|
|
3478
3537
|
finishSessionWork?.();
|
|
3479
3538
|
}
|
|
3480
3539
|
}
|
|
3540
|
+
/** Environment context a new turn must carry: set when cwd or date differs from the latest one visible (senpi#2093). */
|
|
3541
|
+
_pendingEnvironmentContextMessage() {
|
|
3542
|
+
if (!this._environmentContextEnabled)
|
|
3543
|
+
return undefined;
|
|
3544
|
+
return environmentContextMessageIfChanged(this.agent.state.messages, resolveEnvironmentContext(this._cwd));
|
|
3545
|
+
}
|
|
3481
3546
|
_appendCustomMessage(appMessage) {
|
|
3482
3547
|
this.agent.state.messages.push(appMessage);
|
|
3483
3548
|
this._emitEntryAppended(this.sessionManager.appendCustomMessageEntry(appMessage.customType, appMessage.content, appMessage.display, appMessage.details));
|
|
@@ -4050,7 +4115,7 @@ export class AgentSession {
|
|
|
4050
4115
|
const previousReasoningBaseline = this.agent.state.reasoningBaseline;
|
|
4051
4116
|
const previousAbortServerSideFallback = this.agent.abortServerSideFallback;
|
|
4052
4117
|
this.agent.state.model = model;
|
|
4053
|
-
if (!(model
|
|
4118
|
+
if (!supportsConfigurationUpdate(model)) {
|
|
4054
4119
|
this.agent.state.reasoningBaseline = undefined;
|
|
4055
4120
|
}
|
|
4056
4121
|
const scopedMatch = this._scopedModels.find((sm) => modelsAreEqual(sm.model, model));
|
|
@@ -4345,9 +4410,7 @@ export class AgentSession {
|
|
|
4345
4410
|
if (isChanging || selectionChanged) {
|
|
4346
4411
|
this.sessionManager.appendThinkingLevelChange(effectiveLevel, effectiveSelection);
|
|
4347
4412
|
const model = this.model;
|
|
4348
|
-
if (isChanging &&
|
|
4349
|
-
model?.id === "gpt-6-astra" &&
|
|
4350
|
-
(model.provider === "openai" || model.provider === "chatgpt-subscription")) {
|
|
4413
|
+
if (isChanging && model !== undefined && supportsConfigurationUpdate(model)) {
|
|
4351
4414
|
this.agent.state.reasoningBaseline ??= previousLevel;
|
|
4352
4415
|
this.sessionManager.appendConfigurationUpdate(effectiveLevel);
|
|
4353
4416
|
this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
|
|
@@ -4995,8 +5058,8 @@ export class AgentSession {
|
|
|
4995
5058
|
}
|
|
4996
5059
|
const modelAfterCompaction = this.model;
|
|
4997
5060
|
if (latestConfigurationEffort !== undefined &&
|
|
4998
|
-
modelAfterCompaction
|
|
4999
|
-
(modelAfterCompaction
|
|
5061
|
+
modelAfterCompaction !== undefined &&
|
|
5062
|
+
supportsConfigurationUpdate(modelAfterCompaction)) {
|
|
5000
5063
|
this.sessionManager.appendConfigurationUpdate(latestConfigurationEffort);
|
|
5001
5064
|
}
|
|
5002
5065
|
const sessionContext = this.sessionManager.buildSessionContext();
|
|
@@ -5977,7 +6040,7 @@ export class AgentSession {
|
|
|
5977
6040
|
};
|
|
5978
6041
|
this._resourceLoader.extendResources(extensionPaths);
|
|
5979
6042
|
if (skillPaths.length > 0 || promptPaths.length > 0 || themePaths.length > 0) {
|
|
5980
|
-
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
|
|
6043
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(this._toolDeclarationNames(this.getActiveToolNames()));
|
|
5981
6044
|
this.agent.state.systemPrompt = this._baseSystemPrompt;
|
|
5982
6045
|
}
|
|
5983
6046
|
}
|