@code-yeongyu/senpi 2026.9.26 → 2026.9.27-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 +66 -0
- package/dist/bun-runtime.d.ts +18 -2
- package/dist/bun-runtime.d.ts.map +1 -1
- package/dist/bun-runtime.js +60 -8
- package/dist/bun-runtime.js.map +1 -1
- package/dist/bundle/chunks/anthropic-messages-3FGAXYJS.js +8 -0
- package/dist/bundle/chunks/{app-server-command-ZRCKWY2X.js → app-server-command-ZVB35UIJ.js} +1 -1
- package/dist/bundle/chunks/azure-openai-responses-4SUOOZZ4.js +2 -0
- package/dist/bundle/chunks/bun-extension-importer-R4HXF3GD.js +14 -0
- package/dist/bundle/chunks/{chunk-KMJXSXRX.js → chunk-357I4IUU.js} +2 -2
- package/dist/bundle/chunks/chunk-3SIQIY57.js +8 -0
- package/dist/bundle/chunks/chunk-45SZOLCU.js +2 -0
- package/dist/bundle/chunks/{chunk-77ACEMYL.js → chunk-6J6RDMBY.js} +1 -1
- package/dist/bundle/chunks/{chunk-BSOJHK4W.js → chunk-7FXXRPB3.js} +2 -1
- package/dist/bundle/chunks/{chunk-FD34HSJJ.js → chunk-C6LQNMRB.js} +1 -1
- package/dist/bundle/chunks/chunk-ELM77A26.js +2 -0
- package/dist/bundle/chunks/chunk-GZVCRV7I.js +3 -0
- package/dist/bundle/chunks/{chunk-TTY5BHCG.js → chunk-H2SGCPMD.js} +1 -1
- package/dist/bundle/chunks/chunk-KLBKUBDV.js +2 -0
- package/dist/bundle/chunks/chunk-L6QV7NZI.js +2 -0
- package/dist/bundle/chunks/{chunk-ZKZAATFM.js → chunk-LDB5UMH2.js} +2 -2
- package/dist/bundle/chunks/{chunk-HZAKOVHN.js → chunk-LGKKU4VM.js} +1 -1
- package/dist/bundle/chunks/{chunk-6Q6DGME2.js → chunk-NMDALHXH.js} +1 -1
- package/dist/bundle/chunks/chunk-NNILBBOH.js +18 -0
- package/dist/bundle/chunks/{chunk-SUQDU5KM.js → chunk-OQRUK2DK.js} +1 -1
- package/dist/bundle/chunks/{chunk-OZCB6BP3.js → chunk-OZN2KUPR.js} +7 -7
- package/dist/bundle/chunks/{chunk-X3T45623.js → chunk-QK4QKRTF.js} +1 -1
- package/dist/bundle/chunks/{chunk-WM5FVFAP.js → chunk-QPZVJQC5.js} +1 -1
- package/dist/bundle/chunks/{chunk-Y54V65MS.js → chunk-QYAO24GB.js} +1 -1
- package/dist/bundle/chunks/{chunk-MKAM7IRH.js → chunk-RULGEHQM.js} +1 -1
- package/dist/bundle/chunks/{chunk-QGC46CGK.js → chunk-RYI6XR6Z.js} +63 -58
- package/dist/bundle/chunks/chunk-U3VOXCGP.js +2 -0
- package/dist/bundle/chunks/chunk-W3D3ZYDS.js +2 -0
- package/dist/bundle/chunks/{chunk-UBPMXBOJ.js → chunk-XKLR7C5B.js} +1 -1
- package/dist/bundle/chunks/{chunk-CLZVNQW3.js → chunk-Y7EIVDHZ.js} +1 -1
- package/dist/bundle/chunks/chunk-ZIVYE5YK.js +2 -0
- package/dist/bundle/chunks/cli-main-RONHLFWZ.js +3 -0
- package/dist/bundle/chunks/google-generative-ai-ZTGKZTGU.js +2 -0
- package/dist/bundle/chunks/google-vertex-CCZ376YK.js +2 -0
- package/dist/bundle/chunks/help-fast-path-5LRG6FCG.js +2 -0
- package/dist/bundle/chunks/host-command-JVPGQR74.js +2 -0
- package/dist/bundle/chunks/host-lifecycle-R4HLXLBM.js +3 -0
- package/dist/bundle/chunks/host-lifecycle.js +4 -4
- package/dist/bundle/chunks/interactive-host-runtime-FES2G62G.js +4 -0
- package/dist/bundle/chunks/interactive-mode-45EP2FVL.js +2 -0
- package/dist/bundle/chunks/{list-tips-EBRNBPBM.js → list-tips-XXMRDHN6.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-7YX2I7UK.js → multi-session-host-EFCMD5OT.js} +6 -6
- package/dist/bundle/chunks/{openai-completions-4CLXDDHJ.js → openai-completions-OP6VFNUR.js} +1 -1
- package/dist/bundle/chunks/openai-images-6U5FCN5S.js +2 -0
- package/dist/bundle/chunks/openai-responses-7PWMBGYX.js +2 -0
- package/dist/bundle/chunks/openrouter-images-QIKWQZUD.js +2 -0
- package/dist/bundle/chunks/{package-manager-cli-3ISYTEL2.js → package-manager-cli-5XJS3TYM.js} +1 -1
- package/dist/bundle/chunks/rotation-stream-KW7PTEC4.js +2 -0
- package/dist/bundle/chunks/rpc-mode-ZHYECU24.js +2 -0
- package/dist/bundle/chunks/session-picker-QHIYVQP4.js +2 -0
- package/dist/bundle/chunks/session-worker.js +281 -270
- package/dist/bundle/chunks/{state-store-Q5EWEAFG.js → state-store-D4GGGT3J.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/continue-moved.d.ts +15 -0
- package/dist/cli/continue-moved.d.ts.map +1 -0
- package/dist/cli/continue-moved.js +26 -0
- package/dist/cli/continue-moved.js.map +1 -0
- package/dist/cli/cross-project-session.d.ts +22 -0
- package/dist/cli/cross-project-session.d.ts.map +1 -0
- package/dist/cli/cross-project-session.js +38 -0
- package/dist/cli/cross-project-session.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +3 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +43 -10
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +19 -5
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js +5 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts +13 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js +25 -2
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.d.ts +3 -0
- package/dist/core/extensions/builtin/mcp/catalog.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/catalog.js +9 -0
- package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts +2 -0
- package/dist/core/extensions/builtin/mcp/connection-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.js +3 -2
- package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts +3 -0
- package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/expose/session.js +9 -2
- package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-register.js +7 -1
- package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-tools-changed.d.ts +18 -0
- package/dist/core/extensions/builtin/mcp/service-tools-changed.d.ts.map +1 -0
- package/dist/core/extensions/builtin/mcp/service-tools-changed.js +61 -0
- package/dist/core/extensions/builtin/mcp/service-tools-changed.js.map +1 -0
- package/dist/core/extensions/builtin/mcp/service-types.d.ts +13 -0
- package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.js +4 -37
- package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/shared-lease.js +1 -1
- package/dist/core/extensions/builtin/mcp/shared-lease.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/startup-race.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/startup-race.js +11 -1
- package/dist/core/extensions/builtin/mcp/startup-race.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/index.js +5 -2
- package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts +5 -0
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js +13 -0
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/repository-identity.d.ts +6 -0
- package/dist/core/extensions/builtin/repository-identity.d.ts.map +1 -0
- package/dist/core/extensions/builtin/repository-identity.js +33 -0
- package/dist/core/extensions/builtin/repository-identity.js.map +1 -0
- package/dist/core/extensions/bun-extension-importer.d.ts.map +1 -1
- package/dist/core/extensions/bun-extension-importer.js +10 -4
- package/dist/core/extensions/bun-extension-importer.js.map +1 -1
- package/dist/core/extensions/bun-extension-registry.js +6 -5
- package/dist/core/extensions/bun-extension-registry.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/kernel-prelude.d.ts +13 -0
- package/dist/core/extensions/kernel-prelude.d.ts.map +1 -0
- package/dist/core/extensions/kernel-prelude.js +38 -0
- package/dist/core/extensions/kernel-prelude.js.map +1 -0
- package/dist/core/extensions/types.d.ts +44 -2
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +4 -2
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/moved-sessions.d.ts +10 -0
- package/dist/core/moved-sessions.d.ts.map +1 -0
- package/dist/core/moved-sessions.js +84 -0
- package/dist/core/moved-sessions.js.map +1 -0
- package/dist/core/process-crash-record.d.ts +62 -0
- package/dist/core/process-crash-record.d.ts.map +1 -0
- package/dist/core/process-crash-record.js +216 -0
- package/dist/core/process-crash-record.js.map +1 -0
- package/dist/core/provider-rejected-images.d.ts +18 -0
- package/dist/core/provider-rejected-images.d.ts.map +1 -0
- package/dist/core/provider-rejected-images.js +107 -0
- package/dist/core/provider-rejected-images.js.map +1 -0
- package/dist/core/repository-identity.d.ts +18 -0
- package/dist/core/repository-identity.d.ts.map +1 -0
- package/dist/core/repository-identity.js +75 -0
- package/dist/core/repository-identity.js.map +1 -0
- package/dist/core/resume-target.d.ts +20 -0
- package/dist/core/resume-target.d.ts.map +1 -0
- package/dist/core/resume-target.js +30 -0
- package/dist/core/resume-target.js.map +1 -0
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +1 -0
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-hold-errors.d.ts +20 -0
- package/dist/core/session-hold-errors.d.ts.map +1 -0
- package/dist/core/session-hold-errors.js +28 -0
- package/dist/core/session-hold-errors.js.map +1 -0
- package/dist/core/session-holders.d.ts +22 -0
- package/dist/core/session-holders.d.ts.map +1 -0
- package/dist/core/session-holders.js +234 -0
- package/dist/core/session-holders.js.map +1 -0
- package/dist/core/session-manager.d.ts +5 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-rebind.d.ts +23 -0
- package/dist/core/session-rebind.d.ts.map +1 -0
- package/dist/core/session-rebind.js +127 -0
- package/dist/core/session-rebind.js.map +1 -0
- package/dist/core/session-summary-index-file.d.ts.map +1 -1
- package/dist/core/session-summary-index-file.js +5 -2
- package/dist/core/session-summary-index-file.js.map +1 -1
- package/dist/core/session-summary.d.ts +3 -0
- package/dist/core/session-summary.d.ts.map +1 -1
- package/dist/core/session-summary.js +7 -0
- package/dist/core/session-summary.js.map +1 -1
- package/dist/core/session-title-generator.d.ts.map +1 -1
- package/dist/core/session-title-generator.js +21 -3
- package/dist/core/session-title-generator.js.map +1 -1
- package/dist/core/session-title-reasoning.d.ts +14 -0
- package/dist/core/session-title-reasoning.d.ts.map +1 -0
- package/dist/core/session-title-reasoning.js +31 -0
- package/dist/core/session-title-reasoning.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js +13 -0
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-dir-copy.d.ts +9 -0
- package/dist/legacy-dir-copy.d.ts.map +1 -0
- package/dist/legacy-dir-copy.js +69 -0
- package/dist/legacy-dir-copy.js.map +1 -0
- package/dist/legacy-senpi-dir-migration.d.ts.map +1 -1
- package/dist/legacy-senpi-dir-migration.js +64 -48
- package/dist/legacy-senpi-dir-migration.js.map +1 -1
- package/dist/main.d.ts +6 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +129 -22
- package/dist/main.js.map +1 -1
- package/dist/migrations-state.d.ts +1 -1
- package/dist/migrations-state.d.ts.map +1 -1
- package/dist/migrations-state.js +5 -1
- package/dist/migrations-state.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -0
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +5 -3
- 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 +10 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/resume-rebind.d.ts +12 -0
- package/dist/modes/interactive/resume-rebind.d.ts.map +1 -0
- package/dist/modes/interactive/resume-rebind.js +37 -0
- package/dist/modes/interactive/resume-rebind.js.map +1 -0
- package/dist/modes/interactive/runtime-notice-presenter.d.ts +8 -0
- package/dist/modes/interactive/runtime-notice-presenter.d.ts.map +1 -0
- package/dist/modes/interactive/runtime-notice-presenter.js +69 -0
- package/dist/modes/interactive/runtime-notice-presenter.js.map +1 -0
- package/dist/modes/interactive/runtime-notice.d.ts +50 -0
- package/dist/modes/interactive/runtime-notice.d.ts.map +1 -0
- package/dist/modes/interactive/runtime-notice.js +104 -0
- package/dist/modes/interactive/runtime-notice.js.map +1 -0
- package/dist/modes/interactive/tips/catalog/computer-tips.d.ts +7 -0
- package/dist/modes/interactive/tips/catalog/computer-tips.d.ts.map +1 -0
- package/dist/modes/interactive/tips/catalog/computer-tips.js +36 -0
- package/dist/modes/interactive/tips/catalog/computer-tips.js.map +1 -0
- package/dist/modes/interactive/tips/registry.d.ts.map +1 -1
- package/dist/modes/interactive/tips/registry.js +2 -0
- package/dist/modes/interactive/tips/registry.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +3 -0
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/host-child-exit.d.ts.map +1 -1
- package/dist/modes/rpc/host-child-exit.js +4 -0
- package/dist/modes/rpc/host-child-exit.js.map +1 -1
- package/dist/modes/rpc/host-crash-record.d.ts +8 -0
- package/dist/modes/rpc/host-crash-record.d.ts.map +1 -1
- package/dist/modes/rpc/host-crash-record.js.map +1 -1
- package/dist/modes/rpc/host-crash-record.test.js +11 -0
- package/dist/modes/rpc/host-crash-record.test.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +14 -6
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-request-deadline.d.ts +17 -0
- package/dist/modes/rpc/rpc-request-deadline.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-request-deadline.js +27 -0
- package/dist/modes/rpc/rpc-request-deadline.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +9 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +3 -6
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +9 -22
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-path-key.d.ts +10 -0
- package/dist/modes/rpc/session-path-key.d.ts.map +1 -0
- package/dist/modes/rpc/session-path-key.js +33 -0
- package/dist/modes/rpc/session-path-key.js.map +1 -0
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +6 -10
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/session-sweep.d.ts +18 -0
- package/dist/modes/rpc/session-sweep.d.ts.map +1 -0
- package/dist/modes/rpc/session-sweep.js +32 -0
- package/dist/modes/rpc/session-sweep.js.map +1 -0
- package/dist/pi-dir-restore.d.ts +4 -0
- package/dist/pi-dir-restore.d.ts.map +1 -0
- package/dist/pi-dir-restore.js +92 -0
- package/dist/pi-dir-restore.js.map +1 -0
- package/docs/environment-variables.md +2 -0
- package/docs/extensions.md +27 -1
- package/docs/quickstart.md +7 -1
- package/docs/rpc.md +8 -3
- package/docs/sdk.md +29 -0
- package/docs/sessions.md +13 -0
- package/docs/usage.md +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +38 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +9 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/schema-bridge.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/kernel-preludes.ts +30 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +15 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/local-module-loader.ts +16 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +15 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +7 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/kernel-prelude-plan.ts +19 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +2 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +11 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +3 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +2 -2
- 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 +7 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +3 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +3 -1
- 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-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +10 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.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 +9 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.d.ts +33 -0
- package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.js +56 -0
- package/node_modules/@earendil-works/pi-ai/dist/provider-diagnostic.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.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/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/openrouter.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 +3 -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/provider-diagnostic-carrier.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.js +18 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-carrier.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.d.ts +26 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.js +103 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-sources.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.d.ts +36 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.js +129 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-diagnostic-vocabulary.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +5 -4
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/native/prebuilds/darwin-arm64/senpi_pty.darwin-arm64.node +0 -0
- 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/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/anthropic-messages-UYDVRFAS.js +0 -8
- package/dist/bundle/chunks/azure-openai-responses-DODWR4W6.js +0 -2
- package/dist/bundle/chunks/bun-extension-importer-H4IJCWWQ.js +0 -14
- package/dist/bundle/chunks/chunk-34HMVB33.js +0 -2
- package/dist/bundle/chunks/chunk-3WBSBDBX.js +0 -13
- package/dist/bundle/chunks/chunk-L6JO4M6J.js +0 -3
- package/dist/bundle/chunks/chunk-SFYHCFRO.js +0 -2
- package/dist/bundle/chunks/chunk-T3JBT2IK.js +0 -8
- package/dist/bundle/chunks/chunk-TTHMOL5G.js +0 -2
- package/dist/bundle/chunks/chunk-UYCGOK6M.js +0 -2
- package/dist/bundle/chunks/chunk-ZTVQY5V6.js +0 -2
- package/dist/bundle/chunks/cli-main-H6JAXAXV.js +0 -3
- package/dist/bundle/chunks/google-generative-ai-VIEFECKJ.js +0 -2
- package/dist/bundle/chunks/google-vertex-Q64CKFID.js +0 -2
- package/dist/bundle/chunks/help-fast-path-ZGKPSDFO.js +0 -2
- package/dist/bundle/chunks/host-command-BMHJ4YUD.js +0 -2
- package/dist/bundle/chunks/host-lifecycle-2GZAGSGW.js +0 -3
- package/dist/bundle/chunks/interactive-host-runtime-YI75GFD5.js +0 -4
- package/dist/bundle/chunks/interactive-mode-HM7UQYRC.js +0 -2
- package/dist/bundle/chunks/openai-images-JA5N5DUU.js +0 -2
- package/dist/bundle/chunks/openai-responses-IBFGBAJP.js +0 -2
- package/dist/bundle/chunks/openrouter-images-MW5TXV7L.js +0 -2
- package/dist/bundle/chunks/rotation-stream-NATO6IMN.js +0 -2
- package/dist/bundle/chunks/rpc-mode-6PY4TN5F.js +0 -2
- package/dist/bundle/chunks/session-picker-BP7THCWF.js +0 -2
|
@@ -12,6 +12,44 @@
|
|
|
12
12
|
|
|
13
13
|
### Removed
|
|
14
14
|
|
|
15
|
+
## [2026.9.27-3] - 2026-09-27
|
|
16
|
+
|
|
17
|
+
### Breaking Changes
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
### Removed
|
|
26
|
+
|
|
27
|
+
## [2026.9.27-2] - 2026-09-27
|
|
28
|
+
|
|
29
|
+
### Breaking Changes
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- The eval kernels install each active tool's `kernelPrelude`: its JavaScript or Python statements run before a cell whenever one of the prelude's exports is missing, a deactivated tool's exports are removed before the next cell, and each prelude's documentation line joins the eval prompt's helper list. Exports that would shadow a built-in helper are rejected. ([#2178](https://github.com/code-yeongyu/senpi/pull/2178))
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
### Removed
|
|
40
|
+
|
|
41
|
+
## [2026.9.27] - 2026-09-27
|
|
42
|
+
|
|
43
|
+
### Breaking Changes
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
### Removed
|
|
52
|
+
|
|
15
53
|
## [2026.9.26] - 2026-09-26
|
|
16
54
|
|
|
17
55
|
### Breaking Changes
|
|
@@ -162,6 +162,13 @@ into the cell carries the tool's expected parameters, so the cell can correct th
|
|
|
162
162
|
arguments and retry instead of falling back to one-at-a-time tool calls.
|
|
163
163
|
`tool_schema()` exposes the same catalog up front.
|
|
164
164
|
|
|
165
|
+
A tool may also contribute globals of its own through `ToolDefinition.kernelPrelude`
|
|
166
|
+
(JavaScript and Python snippets that call the ordinary `tool.<name>()`, one
|
|
167
|
+
documentation line, and the exported names). While the tool is active, each
|
|
168
|
+
JavaScript and Python cell installs any missing export first and the eval prompt
|
|
169
|
+
lists the documentation line; once the tool is deactivated, the next cell deletes
|
|
170
|
+
those names. Exports that shadow a built-in helper are rejected by the host.
|
|
171
|
+
|
|
165
172
|
`agent()` is available only when the configured task tool is active in the
|
|
166
173
|
session. `output()` similarly requires the configured task-output tool and
|
|
167
174
|
returns immediately: a running task reports its current status, while completed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/senpi-codemode",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.27-3",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Source-only senpi extension package for codemode evaluation tools",
|
|
6
6
|
"type": "module",
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/parser": "8.0.4",
|
|
34
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.
|
|
34
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.27-3",
|
|
35
35
|
"typebox": "1.3.34"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
38
|
+
"@code-yeongyu/senpi": "2026.9.27-3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
41
|
+
"@code-yeongyu/senpi": "2026.9.27-3"
|
|
42
42
|
},
|
|
43
43
|
"keywords": [
|
|
44
44
|
"senpi",
|
|
@@ -37,6 +37,15 @@ const hostToKernelMessageSchema = Type.Union([
|
|
|
37
37
|
cellId: Type.String({ minLength: 1 }),
|
|
38
38
|
code: Type.String(),
|
|
39
39
|
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
40
|
+
/** Python only: active tool globals to install before the cell and deactivated ones to remove. */
|
|
41
|
+
preludes: Type.Optional(
|
|
42
|
+
Type.Object({
|
|
43
|
+
install: Type.Array(
|
|
44
|
+
Type.Object({ exports: Type.Array(Type.String({ minLength: 1 })), python: Type.String() }),
|
|
45
|
+
),
|
|
46
|
+
remove: Type.Array(Type.String({ minLength: 1 })),
|
|
47
|
+
}),
|
|
48
|
+
),
|
|
40
49
|
}),
|
|
41
50
|
Type.Object({
|
|
42
51
|
type: Type.Literal("tool-reply"),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
1
2
|
import { type Static, Type } from "typebox";
|
|
2
3
|
import { Check, Errors } from "typebox/value";
|
|
3
4
|
|
|
@@ -12,6 +13,7 @@ export interface EvalSchemaToolInfo {
|
|
|
12
13
|
readonly name: string;
|
|
13
14
|
readonly description?: string | undefined;
|
|
14
15
|
readonly parameters?: unknown;
|
|
16
|
+
readonly kernelPrelude?: KernelPreludeContribution | undefined;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
export interface RunEvalSchemaOptions {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
2
|
+
import type { CodemodeRuntimeAPI } from "./runtime-factory.ts";
|
|
3
|
+
|
|
4
|
+
type ToolRegistry = Pick<CodemodeRuntimeAPI, "getActiveTools" | "getAllTools">;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Kernel globals of the tools active right now. Read per cell, so a tool activated by `tool_search`, a by-name
|
|
8
|
+
* call, or a command shows up in the next cell and a deactivated one disappears, whatever the registration order.
|
|
9
|
+
*/
|
|
10
|
+
export function activeKernelPreludes(pi: ToolRegistry): readonly KernelPreludeContribution[] {
|
|
11
|
+
const active = new Set(pi.getActiveTools());
|
|
12
|
+
return pi.getAllTools().flatMap((tool) => (tool.kernelPrelude && active.has(tool.name) ? [tool.kernelPrelude] : []));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Identity of the prompt's contribution doc lines; the eval tool re-registers only when it changes. */
|
|
16
|
+
export function kernelPreludeDocsKey(preludes: readonly KernelPreludeContribution[]): string {
|
|
17
|
+
return preludes.map((prelude) => prelude.documentation).join("\n");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The contributions the eval description documents. Like the monitor probe, an unreadable registry (the loader's
|
|
22
|
+
* action methods throw until the runtime binds) teaches nothing; the per-cell read still surfaces any error.
|
|
23
|
+
*/
|
|
24
|
+
export function promptKernelPreludes(pi: ToolRegistry): readonly KernelPreludeContribution[] {
|
|
25
|
+
try {
|
|
26
|
+
return activeKernelPreludes(pi);
|
|
27
|
+
} catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
import { EvalNotifier } from "./extension/eval-notifier.ts";
|
|
14
14
|
import { EVAL_CELLS_STATUS_KEY } from "./extension/eval-status.ts";
|
|
15
15
|
import { EvalStatusTicker } from "./extension/eval-status-ticker.ts";
|
|
16
|
+
import { activeKernelPreludes, kernelPreludeDocsKey, promptKernelPreludes } from "./extension/kernel-preludes.ts";
|
|
16
17
|
import {
|
|
17
18
|
createExecuteTool,
|
|
18
19
|
createRuntime,
|
|
@@ -43,7 +44,7 @@ const SESSION_LIFECYCLE_EVENTS = [
|
|
|
43
44
|
|
|
44
45
|
type SessionLifecycleEvent = (typeof SESSION_LIFECYCLE_EVENTS)[number];
|
|
45
46
|
|
|
46
|
-
type CodemodeEvent = SessionLifecycleEvent | "model_select";
|
|
47
|
+
type CodemodeEvent = SessionLifecycleEvent | "model_select" | "turn_start";
|
|
47
48
|
|
|
48
49
|
export interface CodemodeExtensionAPI {
|
|
49
50
|
registerTool(tool: ReturnType<typeof createEvalTool>): void;
|
|
@@ -91,6 +92,7 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
91
92
|
let activeModelId: string | undefined;
|
|
92
93
|
let activeContext: ExtensionContext | undefined;
|
|
93
94
|
let activeCells: EvalDetachedCellManager | undefined;
|
|
95
|
+
let promptPreludeDocs = "";
|
|
94
96
|
const notifier = new EvalNotifier({
|
|
95
97
|
sendMessage: (message, notifyOptions) => pi.sendMessage(message, notifyOptions),
|
|
96
98
|
getContext: () => activeContext,
|
|
@@ -134,6 +136,8 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
134
136
|
// reaches this before the runtime is bound). An unreadable registry means "do not teach
|
|
135
137
|
// a tool we cannot confirm"; session_start / model_select re-register once it is live.
|
|
136
138
|
const monitor = monitorIsRegistered(pi);
|
|
139
|
+
const preludes = promptKernelPreludes(pi);
|
|
140
|
+
promptPreludeDocs = kernelPreludeDocsKey(preludes);
|
|
137
141
|
pi.registerTool(
|
|
138
142
|
createEvalTool({
|
|
139
143
|
enabledLanguages: runtime.enabledLanguages,
|
|
@@ -156,6 +160,8 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
156
160
|
spawnDefaultAgent: runtime.settings.taskTools.task,
|
|
157
161
|
hostLine: hostLine(),
|
|
158
162
|
runtimes: runtime.runtimes,
|
|
163
|
+
kernelPreludes: () => activeKernelPreludes(pi),
|
|
164
|
+
promptKernelPreludes: preludes,
|
|
159
165
|
...(bunSkillPath === undefined ? {} : { bunSkillPath }),
|
|
160
166
|
...(modelId === undefined ? {} : { modelId }),
|
|
161
167
|
}),
|
|
@@ -252,6 +258,14 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
252
258
|
if (cellManager === undefined) return;
|
|
253
259
|
registerEvalForRuntime(runtime, modelId, cellManager);
|
|
254
260
|
});
|
|
261
|
+
// Tool activation has no event of its own; the next turn re-documents a changed contribution set.
|
|
262
|
+
pi.on("turn_start", async () => {
|
|
263
|
+
const runtime = activeRuntime;
|
|
264
|
+
const cellManager = activeCells;
|
|
265
|
+
if (runtime === undefined || cellManager === undefined) return;
|
|
266
|
+
if (kernelPreludeDocsKey(promptKernelPreludes(pi)) === promptPreludeDocs) return;
|
|
267
|
+
registerEvalForRuntime(runtime, activeModelId, cellManager);
|
|
268
|
+
});
|
|
255
269
|
}
|
|
256
270
|
|
|
257
271
|
function hostLine(): string {
|
|
@@ -195,7 +195,7 @@ export class JavaScriptKernel {
|
|
|
195
195
|
this.#slot.postMessage({
|
|
196
196
|
type: "run",
|
|
197
197
|
cellId: next.input.cellId,
|
|
198
|
-
code: this.#moduleLoader.prepareCell(next.input.code),
|
|
198
|
+
code: this.#moduleLoader.prepareCell(next.input.code, next.input.kernelPreludes),
|
|
199
199
|
timeoutMs: next.input.timeoutMs,
|
|
200
200
|
});
|
|
201
201
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join, resolve, sep } from "node:path";
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
|
+
import type { KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
3
4
|
import type { BridgeConnectionConfig } from "../../bridge/protocol.ts";
|
|
4
5
|
import {
|
|
5
6
|
RESERVED_AGENT_TOOL,
|
|
@@ -8,6 +9,7 @@ import {
|
|
|
8
9
|
TIMEOUT_PAUSE_OP,
|
|
9
10
|
TIMEOUT_RESUME_OP,
|
|
10
11
|
} from "../../bridge/reserved.ts";
|
|
12
|
+
import { type KernelPreludePlan, KernelPreludeTracker } from "../shared/kernel-prelude-plan.ts";
|
|
11
13
|
import type { JavaScriptKernelOptions as BaseJavaScriptKernelOptions } from "./kernel-contract.ts";
|
|
12
14
|
import { rewriteImports } from "./rewrite-imports.ts";
|
|
13
15
|
|
|
@@ -99,14 +101,26 @@ function loaderPrelude(context: RuntimeModuleContext): string {
|
|
|
99
101
|
].join("\n");
|
|
100
102
|
}
|
|
101
103
|
|
|
104
|
+
/** Removes deactivated exports, then installs each contribution only while one of its exports is missing. */
|
|
105
|
+
function contributionPrelude(plan: KernelPreludePlan): string {
|
|
106
|
+
const removals = plan.remove.map((name) => `delete globalThis[${JSON.stringify(name)}];`);
|
|
107
|
+
const installs = plan.install.map((contribution) => {
|
|
108
|
+
const missing = contribution.exports.map((name) => `!globalThis[${JSON.stringify(name)}]`).join(" || ");
|
|
109
|
+
return `if (${missing}) {\n${contribution.javascript}\n}`;
|
|
110
|
+
});
|
|
111
|
+
return [...removals, ...installs].join("\n");
|
|
112
|
+
}
|
|
113
|
+
|
|
102
114
|
export class LocalModuleLoader {
|
|
103
115
|
readonly #prelude: string;
|
|
116
|
+
readonly #contributions = new KernelPreludeTracker();
|
|
104
117
|
|
|
105
118
|
constructor(options: LocalModuleLoaderOptions) {
|
|
106
119
|
this.#prelude = loaderPrelude(runtimeContext(options));
|
|
107
120
|
}
|
|
108
121
|
|
|
109
|
-
prepareCell(code: string): string {
|
|
110
|
-
|
|
122
|
+
prepareCell(code: string, contributions: readonly KernelPreludeContribution[] = []): string {
|
|
123
|
+
const prelude = `${this.#prelude}\n${contributionPrelude(this.#contributions.plan(contributions))}`;
|
|
124
|
+
return `${PREPARED_CELL_PREFIX}${JSON.stringify({ prelude, code: rewriteImports(code) })}`;
|
|
111
125
|
}
|
|
112
126
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { KernelInterruptHandle } from "../../tool/types.ts";
|
|
2
2
|
import type { KernelToolsInvokeOptions } from "../js/kernel-tools-types.ts";
|
|
3
3
|
import { rejectKernelToolsUnavailable } from "../kernel-tools-unavailable.ts";
|
|
4
|
+
import { KernelPreludeTracker } from "../shared/kernel-prelude-plan.ts";
|
|
4
5
|
import type { PendingRun, PythonKernelRunOptions, PythonKernelStartOptions, ResultMessage } from "./kernel-contract.ts";
|
|
5
6
|
import { failedPythonResult, PythonKernelTransport } from "./transport.ts";
|
|
6
7
|
|
|
@@ -20,6 +21,7 @@ export class PythonKernel {
|
|
|
20
21
|
#retirement: Promise<void> | null = null;
|
|
21
22
|
#closePromise: Promise<void> | null = null;
|
|
22
23
|
#failure: Error | null = null;
|
|
24
|
+
readonly #preludes = new KernelPreludeTracker();
|
|
23
25
|
#generation = 0;
|
|
24
26
|
#closed = false;
|
|
25
27
|
|
|
@@ -180,7 +182,10 @@ export class PythonKernel {
|
|
|
180
182
|
if (timeoutMs !== undefined)
|
|
181
183
|
pending.timeoutTimer = setTimeout(() => this.#timeoutRun(pending, timeoutMs), timeoutMs);
|
|
182
184
|
try {
|
|
183
|
-
this.#transport?.run(
|
|
185
|
+
this.#transport?.run({
|
|
186
|
+
...pending.input,
|
|
187
|
+
preludePlan: this.#preludes.plan(pending.input.kernelPreludes ?? []),
|
|
188
|
+
});
|
|
184
189
|
} catch (error) {
|
|
185
190
|
const failure = error instanceof Error ? error : new Error(String(error));
|
|
186
191
|
this.#rejectRun(pending, failure);
|
|
@@ -1020,7 +1020,19 @@ async def run_code(code: Any, want_value: bool) -> Any:
|
|
|
1020
1020
|
return None
|
|
1021
1021
|
|
|
1022
1022
|
|
|
1023
|
-
def
|
|
1023
|
+
def apply_preludes(preludes: Any) -> None:
|
|
1024
|
+
# Host-computed per cell: globals of tools deactivated since the last cell are dropped,
|
|
1025
|
+
# and an active tool's snippet runs only while one of its exports is missing.
|
|
1026
|
+
if not isinstance(preludes, dict):
|
|
1027
|
+
return
|
|
1028
|
+
for name in preludes.get("remove", []):
|
|
1029
|
+
USER_NS.pop(name, None)
|
|
1030
|
+
for contribution in preludes.get("install", []):
|
|
1031
|
+
if any(name not in USER_NS for name in contribution.get("exports", [])):
|
|
1032
|
+
exec(compile(contribution.get("python", ""), "<kernel-prelude>", "exec"), USER_NS)
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
def run_cell(cell_id: str, code: str, preludes: Any = None) -> None:
|
|
1024
1036
|
start = time.monotonic()
|
|
1025
1037
|
stdout = io.StringIO()
|
|
1026
1038
|
stderr = io.StringIO()
|
|
@@ -1029,6 +1041,7 @@ def run_cell(cell_id: str, code: str) -> None:
|
|
|
1029
1041
|
signal.signal(signal.SIGINT, signal.default_int_handler)
|
|
1030
1042
|
try:
|
|
1031
1043
|
with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr):
|
|
1044
|
+
apply_preludes(preludes)
|
|
1032
1045
|
body, expression = compile_cell(code)
|
|
1033
1046
|
LOOP.run_until_complete(run_code(body, False))
|
|
1034
1047
|
value = LOOP.run_until_complete(run_code(expression, True))
|
|
@@ -1075,7 +1088,7 @@ def handle(message: dict[str, Any]) -> bool:
|
|
|
1075
1088
|
emit({"type": "ready"})
|
|
1076
1089
|
return True
|
|
1077
1090
|
if message_type == "run":
|
|
1078
|
-
run_cell(str(message.get("cellId", "")), str(message.get("code", "")))
|
|
1091
|
+
run_cell(str(message.get("cellId", "")), str(message.get("code", "")), message.get("preludes"))
|
|
1079
1092
|
return True
|
|
1080
1093
|
if message_type == "close":
|
|
1081
1094
|
emit({"type": "closed"})
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type KernelToHostMessage,
|
|
10
10
|
} from "../../bridge/protocol.ts";
|
|
11
11
|
import { applySessionEnvironment, type SessionEnvironment } from "../session-env.ts";
|
|
12
|
+
import type { KernelPreludePlan } from "../shared/kernel-prelude-plan.ts";
|
|
12
13
|
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
13
14
|
import {
|
|
14
15
|
defaultSpawn,
|
|
@@ -30,6 +31,7 @@ export interface PythonTransportRunInput {
|
|
|
30
31
|
readonly cellId: string;
|
|
31
32
|
readonly code: string;
|
|
32
33
|
readonly timeoutMs?: number;
|
|
34
|
+
readonly preludePlan?: KernelPreludePlan;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export interface PythonTransportOptions {
|
|
@@ -115,7 +117,11 @@ export class PythonKernelTransport {
|
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
run(input: PythonTransportRunInput): void {
|
|
118
|
-
|
|
120
|
+
const preludes = input.preludePlan && {
|
|
121
|
+
install: input.preludePlan.install.map(({ exports, python }) => ({ exports: [...exports], python })),
|
|
122
|
+
remove: [...input.preludePlan.remove],
|
|
123
|
+
};
|
|
124
|
+
this.#write({ type: "run", cellId: input.cellId, code: input.code, timeoutMs: input.timeoutMs, preludes });
|
|
119
125
|
}
|
|
120
126
|
|
|
121
127
|
interrupt(reason: string): void {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
2
|
+
|
|
3
|
+
/** What a kernel applies before a cell: contributions to (re)install and exports whose tool is no longer active. */
|
|
4
|
+
export interface KernelPreludePlan {
|
|
5
|
+
readonly install: readonly KernelPreludeContribution[];
|
|
6
|
+
readonly remove: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Remembers the exports one kernel was last told to hold, so a deactivated tool's globals are removed. */
|
|
10
|
+
export class KernelPreludeTracker {
|
|
11
|
+
#installed: ReadonlySet<string> = new Set();
|
|
12
|
+
|
|
13
|
+
plan(contributions: readonly KernelPreludeContribution[]): KernelPreludePlan {
|
|
14
|
+
const active = new Set(contributions.flatMap((contribution) => contribution.exports));
|
|
15
|
+
const remove = [...this.#installed].filter((name) => !active.has(name));
|
|
16
|
+
this.#installed = active;
|
|
17
|
+
return { install: contributions, remove };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
1
2
|
import { DEFAULT_MAX_DETACHED_CELLS, DEFAULT_RUN_BUDGET_SECONDS } from "../config/settings.ts";
|
|
2
3
|
import type { EvalRuntimeInfo } from "../tool/types.ts";
|
|
3
4
|
import { EVAL_PROMPT_TEMPLATE } from "./eval-prompt-template.ts";
|
|
@@ -32,6 +33,8 @@ export interface EvalPromptOptions {
|
|
|
32
33
|
readonly runBudgetSeconds?: number;
|
|
33
34
|
/** Global background capacity advertised to the model. */
|
|
34
35
|
readonly maxDetachedCells?: number;
|
|
36
|
+
/** Active tools' kernel globals; each documentation line joins the prelude helper list. */
|
|
37
|
+
readonly kernelPreludes?: readonly KernelPreludeContribution[];
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
/** Prompt dialect for the eval-first batching emphasis. */
|
|
@@ -99,6 +102,7 @@ export function buildEvalPrompt(
|
|
|
99
102
|
bunSkillPath: options.bunSkillPath ?? "",
|
|
100
103
|
runBudgetSeconds: String(options.runBudgetSeconds ?? DEFAULT_RUN_BUDGET_SECONDS),
|
|
101
104
|
maxDetachedCells: String(options.maxDetachedCells ?? DEFAULT_MAX_DETACHED_CELLS),
|
|
105
|
+
kernelPreludeDocs: (options.kernelPreludes ?? []).map((prelude) => prelude.documentation).join("\n"),
|
|
102
106
|
};
|
|
103
107
|
const description = renderTemplate(EVAL_PROMPT_TEMPLATE, context)
|
|
104
108
|
.replace(/\n{3,}/g, "\n\n")
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
AgentToolResult,
|
|
3
|
+
AgentToolUpdateCallback,
|
|
4
|
+
ExtensionContext,
|
|
5
|
+
KernelPreludeContribution,
|
|
6
|
+
ToolDefinition,
|
|
7
|
+
} from "@code-yeongyu/senpi";
|
|
2
8
|
import type { EvalSchemaToolInfo } from "../bridges/schema-bridge.ts";
|
|
3
9
|
import type { CompletionRequest, CompletionResult } from "../completion/handler.ts";
|
|
4
10
|
import type { ResolvedCodemodeSettings } from "../config/settings.ts";
|
|
@@ -58,6 +64,10 @@ export interface CreateEvalToolOptions {
|
|
|
58
64
|
readonly runtimes?: EvalRuntimes;
|
|
59
65
|
/** Absolute path of the active bun-1-4 skill; the prompt names it as MUST READ on a bun kernel. */
|
|
60
66
|
readonly bunSkillPath?: string;
|
|
67
|
+
/** Kernel globals of the tools active when a cell is submitted; read once per cell. */
|
|
68
|
+
readonly kernelPreludes?: () => readonly KernelPreludeContribution[];
|
|
69
|
+
/** Contributions whose documentation lines the description lists; snapshot taken when the tool is (re)registered. */
|
|
70
|
+
readonly promptKernelPreludes?: readonly KernelPreludeContribution[];
|
|
61
71
|
}
|
|
62
72
|
|
|
63
73
|
export interface EvalCellInvocation {
|
|
@@ -54,6 +54,7 @@ export function createEvalTool(options: CreateEvalToolOptions) {
|
|
|
54
54
|
...(options.hostLine === undefined ? {} : { hostLine: options.hostLine }),
|
|
55
55
|
...(options.runtimes?.js === undefined ? {} : { jsRuntime: options.runtimes.js }),
|
|
56
56
|
...(options.bunSkillPath === undefined ? {} : { bunSkillPath: options.bunSkillPath }),
|
|
57
|
+
...(options.promptKernelPreludes === undefined ? {} : { kernelPreludes: options.promptKernelPreludes }),
|
|
57
58
|
});
|
|
58
59
|
const languages = enabledLanguageList(options.enabledLanguages);
|
|
59
60
|
const cellManager =
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentToolResult, AgentToolUpdateCallback } from "@code-yeongyu/senpi";
|
|
1
|
+
import type { AgentToolResult, AgentToolUpdateCallback, KernelPreludeContribution } from "@code-yeongyu/senpi";
|
|
2
2
|
import { type TSchema, type TUnsafe, Type } from "typebox";
|
|
3
3
|
import type { HostToKernelMessage, KernelToHostMessage } from "../bridge/protocol.ts";
|
|
4
4
|
import {
|
|
@@ -141,6 +141,8 @@ export interface EvalKernelRunInput {
|
|
|
141
141
|
readonly timeoutMs?: number;
|
|
142
142
|
readonly onStarted?: () => void;
|
|
143
143
|
readonly onMessage?: (message: KernelToHostMessage) => void;
|
|
144
|
+
/** Globals of the tools active when the cell was submitted; kernels without preludes ignore them. */
|
|
145
|
+
readonly kernelPreludes?: readonly KernelPreludeContribution[];
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
export interface KernelInterruptHandle {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Context, type ImageContent, type Message, type SimpleStreamOptions, type ThinkingBudgets, type Transport } from "@earendil-works/pi-ai";
|
|
2
2
|
import type { AfterToolCallContext, AfterToolCallResult, AgentContext, AgentEvent, AgentLoopConfig, AgentLoopTurnUpdate, AgentMessage, AgentState, BeforeToolCallContext, BeforeToolCallResult, PrepareNextTurnContext, QueueMode, ShouldStopAfterTurnContext, StreamFn, ToolExecutionMode } from "./types.ts";
|
|
3
3
|
export type { QueueMode } from "./types.ts";
|
|
4
4
|
/** Options for constructing an {@link Agent}. */
|
|
5
5
|
export interface AgentOptions {
|
|
6
|
-
initialState?: Partial<Omit<AgentState, "pendingToolCalls" | "isStreaming" | "streamingMessage" | "errorMessage">>;
|
|
6
|
+
initialState?: Partial<Omit<AgentState, "pendingToolCalls" | "isStreaming" | "streamingMessage" | "errorMessage" | "providerDiagnostic">>;
|
|
7
7
|
convertToLlm?: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
|
|
8
8
|
transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
|
|
9
9
|
streamFn: StreamFn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readProviderDiagnostic, sanitizeProviderDiagnostic, } from "@earendil-works/pi-ai";
|
|
1
2
|
import { buildProviderContext as buildProviderContextFromAgentContext, runAgentLoop, runAgentLoopContinue, } from "./agent-loop.js";
|
|
2
3
|
import { ProviderRetryWatchdogAbortError } from "./assistant-terminal-state.js";
|
|
3
4
|
import { getDefaultStreamFn } from "./stream-fn.js";
|
|
@@ -49,6 +50,7 @@ function createMutableAgentState(initialState) {
|
|
|
49
50
|
streamingMessage: undefined,
|
|
50
51
|
pendingToolCalls: new Set(),
|
|
51
52
|
errorMessage: undefined,
|
|
53
|
+
providerDiagnostic: undefined,
|
|
52
54
|
};
|
|
53
55
|
}
|
|
54
56
|
class PendingMessageQueue {
|
|
@@ -225,6 +227,7 @@ export class Agent {
|
|
|
225
227
|
this._state.streamingMessage = undefined;
|
|
226
228
|
this._state.pendingToolCalls = new Set();
|
|
227
229
|
this._state.errorMessage = undefined;
|
|
230
|
+
this._state.providerDiagnostic = undefined;
|
|
228
231
|
this.clearFollowUpQueue();
|
|
229
232
|
this.clearSteeringQueue();
|
|
230
233
|
}
|
|
@@ -416,6 +419,7 @@ export class Agent {
|
|
|
416
419
|
this._state.isStreaming = true;
|
|
417
420
|
this._state.streamingMessage = undefined;
|
|
418
421
|
this._state.errorMessage = undefined;
|
|
422
|
+
this._state.providerDiagnostic = undefined;
|
|
419
423
|
try {
|
|
420
424
|
await executor(abortController.signal);
|
|
421
425
|
// A provider-returned terminal error/abort has no safe implicit owner for
|
|
@@ -453,6 +457,7 @@ export class Agent {
|
|
|
453
457
|
await runAgentLoop(queuedFollowUps, this.createContextSnapshot(), this.createLoopConfig(), (event) => this.processEvents(event), signal, this.streamFunction);
|
|
454
458
|
}
|
|
455
459
|
async handleRunFailure(error, aborted) {
|
|
460
|
+
const providerDiagnostic = aborted ? undefined : readProviderDiagnostic(error);
|
|
456
461
|
const failureMessage = {
|
|
457
462
|
role: "assistant",
|
|
458
463
|
content: [{ type: "text", text: "" }],
|
|
@@ -462,6 +467,7 @@ export class Agent {
|
|
|
462
467
|
usage: EMPTY_USAGE,
|
|
463
468
|
stopReason: aborted ? "aborted" : "error",
|
|
464
469
|
errorMessage: error instanceof Error ? error.message : String(error),
|
|
470
|
+
...(providerDiagnostic === undefined ? {} : { providerDiagnostic }),
|
|
465
471
|
...(error instanceof ProviderRetryWatchdogAbortError ? { abortSource: "provider" } : {}),
|
|
466
472
|
timestamp: Date.now(),
|
|
467
473
|
};
|
|
@@ -511,6 +517,7 @@ export class Agent {
|
|
|
511
517
|
case "turn_end":
|
|
512
518
|
if (event.message.role === "assistant" && event.message.errorMessage) {
|
|
513
519
|
this._state.errorMessage = event.message.errorMessage;
|
|
520
|
+
this._state.providerDiagnostic = sanitizeProviderDiagnostic(event.message.providerDiagnostic);
|
|
514
521
|
}
|
|
515
522
|
break;
|
|
516
523
|
case "agent_end":
|