@code-yeongyu/senpi 2026.8.14 → 2026.8.16
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 +77 -0
- package/README.md +1 -0
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +14 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js +5 -4
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/core/agent-session.d.ts +79 -8
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +190 -30
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +19 -8
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/experimental.d.ts +4 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +4 -0
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/template.js +31 -9
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.d.ts +4 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.js +30 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts +2 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js +13 -47
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +18 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +64 -2
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts +3 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js +27 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts +15 -2
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js +45 -11
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +17 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +48 -6
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js +2 -0
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/overflow-retry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/overflow-retry.js +38 -4
- package/dist/core/extensions/builtin/compaction/overflow-retry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +2 -1
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/summarization-turn-order.d.ts +33 -0
- package/dist/core/extensions/builtin/compaction/summarization-turn-order.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/summarization-turn-order.js +67 -0
- package/dist/core/extensions/builtin/compaction/summarization-turn-order.js.map +1 -0
- package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/index.js +31 -8
- package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
- package/dist/core/extensions/builtin/config-reload/routine-settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/config-reload/routine-settings.js +11 -12
- package/dist/core/extensions/builtin/config-reload/routine-settings.js.map +1 -1
- package/dist/core/extensions/builtin/goal/terminal-provider-error.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js +16 -0
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +4 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/process-tree.js +6 -1
- package/dist/core/extensions/builtin/mcp/process-tree.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/glm-5-3.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/glm-5-3.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/glm-5-3.js +14 -0
- package/dist/core/extensions/builtin/prompt-preset/glm-5-3.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/grok-4.6.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/grok-4.6.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/grok-4.6.js +91 -0
- package/dist/core/extensions/builtin/prompt-preset/grok-4.6.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/index.js +22 -2
- package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +25 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +2 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/reasoning/index.d.ts +3 -0
- package/dist/core/extensions/builtin/reasoning/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/reasoning/index.js +211 -0
- package/dist/core/extensions/builtin/reasoning/index.js.map +1 -0
- package/dist/core/extensions/builtin/service-tier.d.ts +44 -1
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +176 -24
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +4 -4
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +12 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +24 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/lockfile-policy.d.ts +15 -0
- package/dist/core/lockfile-policy.d.ts.map +1 -0
- package/dist/core/lockfile-policy.js +15 -0
- package/dist/core/lockfile-policy.js.map +1 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +34 -7
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +115 -27
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +5 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-api-key-auth.d.ts.map +1 -1
- package/dist/core/provider-api-key-auth.js +45 -2
- package/dist/core/provider-api-key-auth.js.map +1 -1
- package/dist/core/provider-composer.d.ts +12 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +13 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +15 -0
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +1 -1
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +5 -3
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/sdk.d.ts +5 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +14 -8
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +20 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +50 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +258 -15
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/thinking-levels.d.ts +22 -0
- package/dist/core/thinking-levels.d.ts.map +1 -1
- package/dist/core/thinking-levels.js +29 -0
- package/dist/core/thinking-levels.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -0
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +2 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -0
- package/dist/core/tools/write.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/main.d.ts.map +1 -1
- package/dist/main.js +18 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/model-favorites.d.ts +2 -1
- package/dist/modes/interactive/components/model-favorites.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-favorites.js +72 -6
- package/dist/modes/interactive/components/model-favorites.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +5 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +10 -6
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +10 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +22 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +14 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +109 -50
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +36 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +2 -0
- package/dist/modes/interactive/theme/grok-day.json +2 -0
- package/dist/modes/interactive/theme/grok-night.json +2 -0
- package/dist/modes/interactive/theme/light.json +2 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +23 -10
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/interactive/theme/theme.d.ts +5 -3
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +12 -2
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +4 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +5 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +10 -0
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +87 -19
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +3 -3
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +26 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +25 -2
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +60 -0
- 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.map +1 -1
- package/dist/modes/rpc/session-command-router.js +2 -14
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +29 -10
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +229 -50
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js +2 -0
- package/dist/server/create-harness.js.map +1 -1
- package/dist/utils/shell.d.ts +27 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +79 -13
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +10 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +14 -19
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/compaction.md +3 -3
- package/docs/custom-provider.md +1 -1
- package/docs/environment-variables.md +8 -2
- package/docs/extensions.md +4 -0
- package/docs/json.md +6 -4
- package/docs/keybindings.md +8 -2
- package/docs/providers.md +7 -0
- package/docs/rpc.md +128 -6
- package/docs/sdk.md +9 -0
- package/docs/settings.md +93 -1
- package/docs/terminal-setup.md +23 -2
- package/docs/themes.md +24 -3
- package/docs/tui.md +2 -2
- package/docs/usage.md +24 -4
- package/examples/extensions/subagent/agents.ts +40 -9
- package/examples/extensions/subagent/index.ts +26 -3
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +14 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +14 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/call-capture.ts +64 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +45 -61
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +6 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-execution-event.ts +201 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +22 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +25 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +77 -12
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts +43 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.js +67 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.d.ts +4 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js +127 -88
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts +5 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.js +9 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts +12 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js +88 -45
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js +28 -19
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +6 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +7 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js +19 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts +18 -5
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +4 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/search/index.d.ts +21 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/index.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/index.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.d.ts +29 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js +103 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +2 -0
- 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 +40 -14
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +16 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.d.ts +69 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.js +159 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +125 -5
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +13 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +208 -42
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +13 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.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 -7
- 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 +1 -0
- 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 +31 -7
- 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 +8 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/cursor.d.ts +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/cursor.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/cursor.js +234 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/cursor.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js +6 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/github-copilot.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +44 -9
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +32 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.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/alibaba-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.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/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.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/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.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/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.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/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -3
- 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/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/pi-user-agent.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/pi-user-agent.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/pi-user-agent.js +12 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/pi-user-agent.js.map +1 -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 +3 -2
- 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/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
- 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/README.md +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts +26 -0
- package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.js +121 -0
- package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts +6 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js +23 -7
- package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +4 -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 +7 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts +30 -0
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +24 -0
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/layout.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/layout.js +9 -2
- package/node_modules/@earendil-works/pi-tui/dist/layout.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts +8 -2
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +6 -2
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +6 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +18 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +21 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +243 -5
- package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +33 -8
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/search.d.ts +0 -19
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/search.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/search.js +0 -41
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/search.js.map +0 -1
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* - Chain: { chain: [{ agent: "name", task: "... {previous} ..." }, ...] }
|
|
11
11
|
*
|
|
12
12
|
* Uses JSON mode to capture structured output from subagents.
|
|
13
|
+
*
|
|
14
|
+
* Agent definitions live in `~/.pi/agent/agents/*.md` (user scope) and `.pi/agents/*.md`
|
|
15
|
+
* (project scope), with `name`, `description`, optional `tools` (`read, bash` or `[read, bash]`)
|
|
16
|
+
* and optional `model` frontmatter. When `model` is omitted, the subagent inherits the
|
|
17
|
+
* dispatching session's active model and thinking level.
|
|
13
18
|
*/
|
|
14
19
|
|
|
15
20
|
import { spawn } from "node:child_process";
|
|
@@ -23,7 +28,7 @@ import {
|
|
|
23
28
|
getMarkdownTheme,
|
|
24
29
|
withFileMutationQueue,
|
|
25
30
|
} from "@code-yeongyu/senpi";
|
|
26
|
-
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
31
|
+
import type { AgentToolResult, ThinkingLevel } from "@earendil-works/pi-agent-core";
|
|
27
32
|
import type { Message } from "@earendil-works/pi-ai";
|
|
28
33
|
import { StringEnum } from "@earendil-works/pi-ai";
|
|
29
34
|
import { Container, Markdown, Spacer, Text } from "@earendil-works/pi-tui";
|
|
@@ -264,8 +269,14 @@ function getPiInvocation(args: string[]): { command: string; args: string[] } {
|
|
|
264
269
|
|
|
265
270
|
type OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;
|
|
266
271
|
|
|
272
|
+
interface DispatchDefaults {
|
|
273
|
+
model?: string;
|
|
274
|
+
thinkingLevel?: ThinkingLevel;
|
|
275
|
+
}
|
|
276
|
+
|
|
267
277
|
async function runSingleAgent(
|
|
268
278
|
defaultCwd: string,
|
|
279
|
+
dispatchDefaults: DispatchDefaults,
|
|
269
280
|
agents: AgentConfig[],
|
|
270
281
|
agentName: string,
|
|
271
282
|
task: string,
|
|
@@ -292,7 +303,12 @@ async function runSingleAgent(
|
|
|
292
303
|
}
|
|
293
304
|
|
|
294
305
|
const args: string[] = ["--mode", "json", "-p", "--no-session"];
|
|
295
|
-
|
|
306
|
+
const inheritsDispatchConfig = !agent.model;
|
|
307
|
+
const model = agent.model ?? dispatchDefaults.model;
|
|
308
|
+
if (model) args.push("--model", model);
|
|
309
|
+
if (inheritsDispatchConfig && dispatchDefaults.thinkingLevel) {
|
|
310
|
+
args.push("--thinking", dispatchDefaults.thinkingLevel);
|
|
311
|
+
}
|
|
296
312
|
if (agent.tools && agent.tools.length > 0) args.push("--tools", agent.tools.join(","));
|
|
297
313
|
|
|
298
314
|
let tmpPromptDir: string | null = null;
|
|
@@ -306,7 +322,7 @@ async function runSingleAgent(
|
|
|
306
322
|
messages: [],
|
|
307
323
|
stderr: "",
|
|
308
324
|
usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },
|
|
309
|
-
model
|
|
325
|
+
model,
|
|
310
326
|
step,
|
|
311
327
|
};
|
|
312
328
|
|
|
@@ -471,6 +487,10 @@ export default function (pi: ExtensionAPI) {
|
|
|
471
487
|
|
|
472
488
|
async execute(_toolCallId, params, signal, onUpdate, ctx) {
|
|
473
489
|
const agentScope: AgentScope = params.agentScope ?? "user";
|
|
490
|
+
const dispatchDefaults: DispatchDefaults = {
|
|
491
|
+
model: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : undefined,
|
|
492
|
+
thinkingLevel: ctx.thinkingLevel,
|
|
493
|
+
};
|
|
474
494
|
const discovery = discoverAgents(ctx.cwd, agentScope);
|
|
475
495
|
const agents = discovery.agents;
|
|
476
496
|
const confirmProjectAgents = params.confirmProjectAgents ?? true;
|
|
@@ -552,6 +572,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
552
572
|
|
|
553
573
|
const result = await runSingleAgent(
|
|
554
574
|
ctx.cwd,
|
|
575
|
+
dispatchDefaults,
|
|
555
576
|
agents,
|
|
556
577
|
step.agent,
|
|
557
578
|
taskWithContext,
|
|
@@ -624,6 +645,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
624
645
|
const results = await mapWithConcurrencyLimit(params.tasks, MAX_CONCURRENCY, async (t, index) => {
|
|
625
646
|
const result = await runSingleAgent(
|
|
626
647
|
ctx.cwd,
|
|
648
|
+
dispatchDefaults,
|
|
627
649
|
agents,
|
|
628
650
|
t.agent,
|
|
629
651
|
t.task,
|
|
@@ -666,6 +688,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
666
688
|
if (params.agent && params.task) {
|
|
667
689
|
const result = await runSingleAgent(
|
|
668
690
|
ctx.cwd,
|
|
691
|
+
dispatchDefaults,
|
|
669
692
|
agents,
|
|
670
693
|
params.agent,
|
|
671
694
|
params.task,
|
|
@@ -12,6 +12,20 @@
|
|
|
12
12
|
|
|
13
13
|
### Removed
|
|
14
14
|
|
|
15
|
+
## [2026.8.16] - 2026-08-16
|
|
16
|
+
|
|
17
|
+
### Breaking Changes
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Published one versioned `senpi.eval.execution` event per settled eval cell: the in-process bus receives bounded rich call details, while the external RPC projection exposes only byte-capped timing/count metadata for safe OMO analytics; total wall time, kernel runtime, pending calls, exact aggregate totals, and overflow accounting are reported separately ([#897](https://github.com/code-yeongyu/senpi/pull/897)).
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
15
29
|
## [2026.8.14] - 2026-08-14
|
|
16
30
|
|
|
17
31
|
### Breaking Changes
|
|
@@ -20,6 +20,11 @@ task-tool names are known.
|
|
|
20
20
|
- Loopback, bearer-authenticated kernel bridge with bounded JSONL frames.
|
|
21
21
|
- Structured status events for file operations, environment access, phases,
|
|
22
22
|
bridge activity, and delegated task progress.
|
|
23
|
+
- One versioned `senpi.eval.execution` event at terminal cell settlement. The
|
|
24
|
+
in-process event bus receives bounded per-call arguments and result previews
|
|
25
|
+
for extension-owned consumers; external RPC clients receive a 32 KiB-capped
|
|
26
|
+
metadata-only projection with wall time, kernel time, exact call counts,
|
|
27
|
+
pending-call counts, and bounded per-tool aggregates.
|
|
23
28
|
- Bounded streaming output with head/tail previews, column clamping, and
|
|
24
29
|
session-adjacent spill files for large streams.
|
|
25
30
|
- TUI and HTML-export rendering for syntax-highlighted cells, status rows,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/senpi-codemode",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.16",
|
|
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.8.
|
|
34
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.8.16",
|
|
35
35
|
"typebox": "1.3.8"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
38
|
+
"@code-yeongyu/senpi": "2026.8.16"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
41
|
+
"@code-yeongyu/senpi": "2026.8.16"
|
|
42
42
|
},
|
|
43
43
|
"keywords": [
|
|
44
44
|
"senpi",
|
|
@@ -17,6 +17,11 @@ import type { CodemodeSessionManager, CreateCodemodeSessionManagerOptions } from
|
|
|
17
17
|
import { SessionManagerProxy } from "./extension/session-manager-proxy.ts";
|
|
18
18
|
import { WAKE_SOURCE_STATE_EVENT, type WakeSourceState } from "./extension/wake-source-state.ts";
|
|
19
19
|
import { EvalDetachedCellManager, type EvalDetachedCellStatusEntry } from "./tool/detached-cell-manager.ts";
|
|
20
|
+
import {
|
|
21
|
+
EVAL_EXECUTION_EVENT,
|
|
22
|
+
type EvalExecutionEventPayload,
|
|
23
|
+
toEvalExecutionRpcPayload,
|
|
24
|
+
} from "./tool/eval-execution-event.ts";
|
|
20
25
|
import { createEvalTool } from "./tool/eval-tool.ts";
|
|
21
26
|
import { renderEvalCall, renderEvalResult } from "./tool/render.ts";
|
|
22
27
|
|
|
@@ -39,8 +44,10 @@ export interface CodemodeExtensionAPI {
|
|
|
39
44
|
getActiveTools(): string[];
|
|
40
45
|
getAllTools(): readonly EvalSchemaToolInfo[];
|
|
41
46
|
sendUserMessage(content: string, options?: { deliverAs?: "steer" | "followUp" }): void;
|
|
42
|
-
/** Optional host event bus; a host without one turns
|
|
47
|
+
/** Optional host event bus; a host without one turns extension event emission into a harmless no-op. */
|
|
43
48
|
events?: { emit(name: string, data: unknown): void };
|
|
49
|
+
/** Optional host RPC surface for forwarding extension-owned events to connected clients. */
|
|
50
|
+
rpc?: { emit(name: string, data: unknown): void };
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
export interface SenpiCodemodeOptions {
|
|
@@ -90,6 +97,11 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
90
97
|
modelId: string | undefined,
|
|
91
98
|
cellManager: EvalDetachedCellManager,
|
|
92
99
|
): void => {
|
|
100
|
+
const onCellSettled = (payload: EvalExecutionEventPayload): void => {
|
|
101
|
+
if (activeCells !== cellManager) return;
|
|
102
|
+
pi.rpc?.emit(EVAL_EXECUTION_EVENT, toEvalExecutionRpcPayload(payload));
|
|
103
|
+
pi.events?.emit(EVAL_EXECUTION_EVENT, payload);
|
|
104
|
+
};
|
|
93
105
|
pi.registerTool(
|
|
94
106
|
createEvalTool({
|
|
95
107
|
enabledLanguages: runtime.enabledLanguages,
|
|
@@ -102,6 +114,7 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
102
114
|
artifactsDir: runtime.artifactsDir,
|
|
103
115
|
cellManager,
|
|
104
116
|
executionTracker: manager,
|
|
117
|
+
onCellSettled,
|
|
105
118
|
renderers,
|
|
106
119
|
spawns: runtime.spawns,
|
|
107
120
|
spawnDefaultAgent: runtime.settings.taskTools.task,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { type AgentToolResult, sanitizeTerminalLabel } from "@code-yeongyu/senpi";
|
|
2
|
+
import type { EvalToolCallSummary } from "./types.ts";
|
|
2
3
|
|
|
3
4
|
export const MAX_ENRICHED_TOOL_CALLS = 30;
|
|
5
|
+
export const MAX_AGGREGATED_TOOL_NAMES = 64;
|
|
6
|
+
export const MAX_CAPTURED_IDENTIFIER_CODE_POINTS = 128;
|
|
7
|
+
export const MAX_CAPTURED_TOOL_NAME_CODE_POINTS = 128;
|
|
8
|
+
export const MAX_RPC_EVENT_BYTES = 32 * 1024;
|
|
4
9
|
|
|
5
10
|
const MAX_ARGUMENT_STRING_CODE_POINTS = 512;
|
|
6
11
|
const MAX_ARGUMENT_ENTRIES = 32;
|
|
@@ -13,6 +18,22 @@ type BoundedValue = {
|
|
|
13
18
|
readonly truncated: boolean;
|
|
14
19
|
};
|
|
15
20
|
|
|
21
|
+
export interface EvalToolCallMetric {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly startedAt: number;
|
|
24
|
+
ok: boolean | undefined;
|
|
25
|
+
durationMs: number | undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ToolCallCapture {
|
|
29
|
+
readonly callId: string;
|
|
30
|
+
readonly args: unknown;
|
|
31
|
+
readonly startedAt: number;
|
|
32
|
+
readonly metric: EvalToolCallMetric;
|
|
33
|
+
readonly includeDetails: boolean;
|
|
34
|
+
readonly argsTruncated?: true;
|
|
35
|
+
}
|
|
36
|
+
|
|
16
37
|
export function capCodePoints(text: string, max: number): string {
|
|
17
38
|
let end = 0;
|
|
18
39
|
let count = 0;
|
|
@@ -83,6 +104,49 @@ export function boundToolCallArgs(args: unknown): { args: unknown; truncated: bo
|
|
|
83
104
|
}
|
|
84
105
|
}
|
|
85
106
|
|
|
107
|
+
export function createToolCallMetric(name: string, startedAt: number): EvalToolCallMetric {
|
|
108
|
+
return {
|
|
109
|
+
name: capCodePoints(name, MAX_CAPTURED_TOOL_NAME_CODE_POINTS),
|
|
110
|
+
startedAt,
|
|
111
|
+
ok: undefined,
|
|
112
|
+
durationMs: undefined,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function settleToolCallMetric(metric: EvalToolCallMetric, ok: boolean, completedAt: number): void {
|
|
117
|
+
metric.ok = ok;
|
|
118
|
+
metric.durationMs = Math.max(0, completedAt - metric.startedAt);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function recordToolCall(
|
|
122
|
+
toolCalls: EvalToolCallSummary[],
|
|
123
|
+
ok: boolean,
|
|
124
|
+
capture: ToolCallCapture,
|
|
125
|
+
resultPreview: string | undefined,
|
|
126
|
+
error: string | undefined,
|
|
127
|
+
): void {
|
|
128
|
+
const completedAt = Date.now();
|
|
129
|
+
settleToolCallMetric(capture.metric, ok, completedAt);
|
|
130
|
+
const summary = {
|
|
131
|
+
name: capture.metric.name,
|
|
132
|
+
ok,
|
|
133
|
+
...(error === undefined ? {} : { error: capCodePoints(error, 512) }),
|
|
134
|
+
...(capture.includeDetails ? { durationMs: completedAt - capture.startedAt } : {}),
|
|
135
|
+
};
|
|
136
|
+
const enrichedCount = toolCalls.filter((toolCall) => toolCall.callId !== undefined).length;
|
|
137
|
+
if (!capture.includeDetails || enrichedCount >= MAX_ENRICHED_TOOL_CALLS) {
|
|
138
|
+
toolCalls.push(summary);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
toolCalls.push({
|
|
142
|
+
...summary,
|
|
143
|
+
callId: capture.callId,
|
|
144
|
+
args: capture.args,
|
|
145
|
+
...(capture.argsTruncated === true ? { argsTruncated: true } : {}),
|
|
146
|
+
...(resultPreview === undefined ? {} : { resultPreview }),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
86
150
|
export function toolCallResultPreview(result: AgentToolResult<unknown>): string | undefined {
|
|
87
151
|
for (const part of result.content) {
|
|
88
152
|
if (part.type !== "text") continue;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AgentToolResult, type ExtensionContext, sanitizeTerminalLabel } from "@code-yeongyu/senpi";
|
|
2
2
|
import type { KernelToHostMessage } from "../bridge/protocol.ts";
|
|
3
|
+
import { RESERVED_SCHEMA_TOOL } from "../bridge/reserved.ts";
|
|
3
4
|
import type { AgentExecuteTool } from "../bridges/agent-bridge.ts";
|
|
4
5
|
import { isReservedToolName, runReservedTool } from "../bridges/reserved-dispatch.ts";
|
|
5
6
|
import type { EvalSchemaToolInfo } from "../bridges/schema-bridge.ts";
|
|
@@ -7,7 +8,15 @@ import { appendSchemaHint } from "../bridges/schema-hint.ts";
|
|
|
7
8
|
import type { CompletionRequest, CompletionResult } from "../completion/handler.ts";
|
|
8
9
|
import { handleCompletionToolCall } from "../completion/tool-bridge.ts";
|
|
9
10
|
import type { ResolvedCodemodeSettings } from "../config/settings.ts";
|
|
10
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
boundToolCallArgs,
|
|
13
|
+
capCodePoints,
|
|
14
|
+
createToolCallMetric,
|
|
15
|
+
MAX_CAPTURED_IDENTIFIER_CODE_POINTS,
|
|
16
|
+
recordToolCall,
|
|
17
|
+
type ToolCallCapture,
|
|
18
|
+
toolCallResultPreview,
|
|
19
|
+
} from "./call-capture.ts";
|
|
11
20
|
import { CellResultBuilder, type CellState } from "./cell-runtime.ts";
|
|
12
21
|
import { type EvalImageResizer, marshalToolResult, toolResultIsError } from "./image.ts";
|
|
13
22
|
import { upsertStatusEvent } from "./status-events.ts";
|
|
@@ -22,13 +31,6 @@ type ResolvedToolReply = {
|
|
|
22
31
|
readonly errorText?: string;
|
|
23
32
|
};
|
|
24
33
|
|
|
25
|
-
type ToolCallEnrichment = {
|
|
26
|
-
readonly callId: string;
|
|
27
|
-
readonly args: unknown;
|
|
28
|
-
readonly startedAt: number;
|
|
29
|
-
readonly argsTruncated?: true;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
34
|
export interface CellBridgeRuntime {
|
|
33
35
|
readonly executeTool: AgentExecuteTool;
|
|
34
36
|
readonly listTools?: () => readonly EvalSchemaToolInfo[];
|
|
@@ -111,9 +113,21 @@ export class CellHandler {
|
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
async #handleToolCall(message: Extract<KernelToHostMessage, { type: "tool-call" }>): Promise<void> {
|
|
116
|
+
const startedAt = Date.now();
|
|
117
|
+
const metric = createToolCallMetric(message.toolName, startedAt);
|
|
118
|
+
this.#state.toolCallMetrics.push(metric);
|
|
119
|
+
const capturedArgs = boundToolCallArgs(message.args);
|
|
120
|
+
const capture: ToolCallCapture = {
|
|
121
|
+
callId: capCodePoints(message.callId, MAX_CAPTURED_IDENTIFIER_CODE_POINTS),
|
|
122
|
+
args: capturedArgs.args,
|
|
123
|
+
startedAt,
|
|
124
|
+
metric,
|
|
125
|
+
includeDetails: message.toolName !== RESERVED_SCHEMA_TOOL,
|
|
126
|
+
...(capturedArgs.truncated ? { argsTruncated: true } : {}),
|
|
127
|
+
};
|
|
114
128
|
if (message.toolName === "eval") {
|
|
115
129
|
const error = "recursive eval is not allowed";
|
|
116
|
-
this.#state.toolCalls
|
|
130
|
+
recordToolCall(this.#state.toolCalls, false, capture, undefined, error);
|
|
117
131
|
this.#kernel.deliverToolReply({
|
|
118
132
|
type: "tool-reply",
|
|
119
133
|
callId: message.callId,
|
|
@@ -123,20 +137,24 @@ export class CellHandler {
|
|
|
123
137
|
return;
|
|
124
138
|
}
|
|
125
139
|
if (isReservedToolName(message.toolName)) {
|
|
126
|
-
await this.#deliverToolReply(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
140
|
+
await this.#deliverToolReply(
|
|
141
|
+
message,
|
|
142
|
+
async () => ({
|
|
143
|
+
value: await runReservedTool(message.toolName, {
|
|
144
|
+
callId: message.callId,
|
|
145
|
+
args: message.args,
|
|
146
|
+
executeTool: this.#runtime.executeTool,
|
|
147
|
+
taskToolName: this.#runtime.settings.taskTools.task,
|
|
148
|
+
taskOutputToolName: this.#runtime.settings.taskTools.output,
|
|
149
|
+
listTools: this.#runtime.listTools,
|
|
150
|
+
signal: this.#state.signal,
|
|
151
|
+
emitStatus: (event) => this.#recordStatus(event),
|
|
152
|
+
marshalToolResult,
|
|
153
|
+
}),
|
|
154
|
+
toolCallOk: true,
|
|
137
155
|
}),
|
|
138
|
-
|
|
139
|
-
|
|
156
|
+
capture,
|
|
157
|
+
);
|
|
140
158
|
return;
|
|
141
159
|
}
|
|
142
160
|
if (message.toolName === "completion" && this.#runtime.complete) {
|
|
@@ -148,16 +166,10 @@ export class CellHandler {
|
|
|
148
166
|
isActive: () => this.#state.active,
|
|
149
167
|
});
|
|
150
168
|
if (!this.#state.active) return;
|
|
151
|
-
this.#state.toolCalls.
|
|
152
|
-
result.ok
|
|
153
|
-
? { name: message.toolName, ok: true }
|
|
154
|
-
: { name: message.toolName, ok: false, error: result.error },
|
|
155
|
-
);
|
|
169
|
+
recordToolCall(this.#state.toolCalls, result.ok, capture, undefined, result.ok ? undefined : result.error);
|
|
156
170
|
this.#resultBuilder.emitUpdate(false);
|
|
157
171
|
return;
|
|
158
172
|
}
|
|
159
|
-
const capturedArgs = boundToolCallArgs(message.args);
|
|
160
|
-
const startedAt = Date.now();
|
|
161
173
|
await this.#deliverToolReply(
|
|
162
174
|
message,
|
|
163
175
|
async () => {
|
|
@@ -185,24 +197,19 @@ export class CellHandler {
|
|
|
185
197
|
...(errorText === undefined ? {} : { errorText }),
|
|
186
198
|
};
|
|
187
199
|
},
|
|
188
|
-
|
|
189
|
-
callId: message.callId,
|
|
190
|
-
args: capturedArgs.args,
|
|
191
|
-
startedAt,
|
|
192
|
-
...(capturedArgs.truncated ? { argsTruncated: true } : {}),
|
|
193
|
-
},
|
|
200
|
+
capture,
|
|
194
201
|
);
|
|
195
202
|
}
|
|
196
203
|
|
|
197
204
|
async #deliverToolReply(
|
|
198
205
|
message: Extract<KernelToHostMessage, { type: "tool-call" }>,
|
|
199
206
|
resolve: () => Promise<ResolvedToolReply>,
|
|
200
|
-
|
|
207
|
+
capture: ToolCallCapture,
|
|
201
208
|
): Promise<void> {
|
|
202
209
|
try {
|
|
203
210
|
const reply = await resolve();
|
|
204
211
|
if (!this.#state.active) return;
|
|
205
|
-
this.#
|
|
212
|
+
recordToolCall(this.#state.toolCalls, reply.toolCallOk, capture, reply.resultPreview, reply.errorText);
|
|
206
213
|
this.#kernel.deliverToolReply({ type: "tool-reply", callId: message.callId, ok: true, value: reply.value });
|
|
207
214
|
} catch (error) {
|
|
208
215
|
if (!this.#state.active) return;
|
|
@@ -211,7 +218,7 @@ export class CellHandler {
|
|
|
211
218
|
message.toolName,
|
|
212
219
|
this.#toolParameters(message.toolName),
|
|
213
220
|
);
|
|
214
|
-
this.#
|
|
221
|
+
recordToolCall(this.#state.toolCalls, false, capture, undefined, text);
|
|
215
222
|
this.#kernel.deliverToolReply({
|
|
216
223
|
type: "tool-reply",
|
|
217
224
|
callId: message.callId,
|
|
@@ -222,29 +229,6 @@ export class CellHandler {
|
|
|
222
229
|
this.#resultBuilder.emitUpdate(false);
|
|
223
230
|
}
|
|
224
231
|
|
|
225
|
-
#pushToolCall(
|
|
226
|
-
name: string,
|
|
227
|
-
ok: boolean,
|
|
228
|
-
enrich: ToolCallEnrichment | undefined,
|
|
229
|
-
resultPreview: string | undefined,
|
|
230
|
-
error: string | undefined,
|
|
231
|
-
): void {
|
|
232
|
-
const summary = { name, ok, ...(error === undefined ? {} : { error }) };
|
|
233
|
-
const enrichedCount = this.#state.toolCalls.filter((toolCall) => toolCall.callId !== undefined).length;
|
|
234
|
-
if (enrich === undefined || enrichedCount >= MAX_ENRICHED_TOOL_CALLS) {
|
|
235
|
-
this.#state.toolCalls.push(summary);
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
this.#state.toolCalls.push({
|
|
239
|
-
...summary,
|
|
240
|
-
callId: enrich.callId,
|
|
241
|
-
args: enrich.args,
|
|
242
|
-
durationMs: Date.now() - enrich.startedAt,
|
|
243
|
-
...(enrich.argsTruncated === true ? { argsTruncated: true } : {}),
|
|
244
|
-
...(resultPreview === undefined ? {} : { resultPreview }),
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
|
|
248
232
|
#toolParameters(toolName: string): unknown {
|
|
249
233
|
return this.#runtime.listTools?.().find((tool) => tool.name === toolName)?.parameters;
|
|
250
234
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from "@code-yeongyu/senpi";
|
|
2
2
|
import type { KernelToHostMessage } from "../bridge/protocol.ts";
|
|
3
|
+
import type { EvalToolCallMetric } from "./call-capture.ts";
|
|
3
4
|
import { type EvalImageResizer, EvalOutputCollector, type EvalOutputResult } from "./image.ts";
|
|
4
5
|
import type { EvalStatusEvent, EvalToolDetails, EvalToolInput } from "./types.ts";
|
|
5
6
|
|
|
@@ -9,14 +10,17 @@ type ToolCall = EvalToolDetails["toolCalls"] extends readonly (infer Item)[] ? I
|
|
|
9
10
|
|
|
10
11
|
export interface CellState {
|
|
11
12
|
readonly input: EvalToolInput;
|
|
13
|
+
readonly startedAt: number;
|
|
12
14
|
readonly signal: AbortSignal;
|
|
13
15
|
readonly onUpdate: AgentToolUpdateCallback<EvalToolDetails> | undefined;
|
|
14
16
|
readonly toolCalls: ToolCall[];
|
|
17
|
+
readonly toolCallMetrics: EvalToolCallMetric[];
|
|
15
18
|
readonly pendingBridgeCalls: Promise<void>[];
|
|
16
19
|
readonly statusEvents: EvalStatusEvent[];
|
|
17
20
|
active: boolean;
|
|
18
21
|
output: string;
|
|
19
22
|
phase: string | undefined;
|
|
23
|
+
error: string | undefined;
|
|
20
24
|
durationMs: number;
|
|
21
25
|
status: "pending" | "running" | "complete" | "error";
|
|
22
26
|
}
|
|
@@ -70,6 +74,7 @@ export class CellResultBuilder {
|
|
|
70
74
|
if (result.valueRepr) this.#output.push(`${result.valueRepr}\n`);
|
|
71
75
|
this.#state.status = "complete";
|
|
72
76
|
} else {
|
|
77
|
+
this.#state.error = result.error.message;
|
|
73
78
|
this.#output.push(`${result.error.message}\n`);
|
|
74
79
|
this.#state.status = "error";
|
|
75
80
|
}
|
|
@@ -77,6 +82,7 @@ export class CellResultBuilder {
|
|
|
77
82
|
}
|
|
78
83
|
|
|
79
84
|
async finalizeCancellation(error: Error): Promise<AgentToolResult<EvalToolDetails>> {
|
|
85
|
+
this.#state.error = error.message;
|
|
80
86
|
this.#output.push(`${error.message}\n`);
|
|
81
87
|
this.#state.status = "error";
|
|
82
88
|
return await this.#finish(true);
|