@selesai/code 0.13.40 → 0.14.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 +3 -0
- package/dist/bun/runtime-setup.js +4 -1
- package/dist/cli/args.d.ts +3 -1
- package/dist/cli/args.js +76 -33
- package/dist/cli/auth-check.d.ts +18 -0
- package/dist/cli/auth-check.js +49 -0
- package/dist/cli/credential-print.d.ts +5 -15
- package/dist/cli/credential-print.js +42 -82
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.js +2 -2
- package/dist/cli/startup-ui.js +38 -30
- package/dist/config.d.ts +45 -7
- package/dist/config.js +134 -18
- package/dist/core/agent-session-custom-tools.test.js +64 -0
- package/dist/core/agent-session-length-continuation.test.js +7 -3
- package/dist/core/agent-session-runtime.js +2 -2
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.js +14 -0
- package/dist/core/agent-session.d.ts +180 -40
- package/dist/core/agent-session.js +1061 -485
- package/dist/core/auth-storage.d.ts +25 -15
- package/dist/core/auth-storage.js +242 -66
- package/dist/core/bash-executor.js +42 -52
- package/dist/core/bug-report.js +1 -1
- package/dist/core/cache-warmer.d.ts +1 -0
- package/dist/core/cache-warmer.js +15 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/compaction.d.ts +3 -1
- package/dist/core/compaction/compaction.js +156 -79
- package/dist/core/compaction/utils.d.ts +2 -1
- package/dist/core/compaction/utils.js +25 -18
- package/dist/core/crash-log.d.ts +5 -0
- package/dist/core/crash-log.js +69 -0
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.js +1 -1
- package/dist/core/export-html/template.css +10 -0
- package/dist/core/export-html/template.js +72 -18
- package/dist/core/export-html/tool-renderer.d.ts +3 -3
- package/dist/core/export-html/tool-renderer.js +5 -3
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/loader.js +138 -55
- package/dist/core/extensions/runner.d.ts +38 -5
- package/dist/core/extensions/runner.js +220 -7
- package/dist/core/extensions/types.d.ts +438 -51
- package/dist/core/extensions/types.js +3 -0
- package/dist/core/extensions/virtual-modules.js +6 -0
- package/dist/core/extensions/wrapper.d.ts +2 -2
- package/dist/core/extensions/wrapper.js +3 -3
- package/dist/core/footer-data-provider.d.ts +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/handoff.d.ts +0 -1
- package/dist/core/handoff.js +0 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/keybindings.d.ts +25 -24
- package/dist/core/keybindings.js +27 -6
- package/dist/core/mcp-servers.d.ts +134 -0
- package/dist/core/mcp-servers.js +223 -0
- package/dist/core/model-config.d.ts +122 -5
- package/dist/core/model-config.js +35 -1
- package/dist/core/model-registry.d.ts +23 -15
- package/dist/core/model-registry.js +46 -22
- package/dist/core/model-resolver.d.ts +6 -5
- package/dist/core/model-resolver.js +51 -21
- package/dist/core/model-runtime.d.ts +73 -14
- package/dist/core/model-runtime.js +398 -104
- package/dist/core/models-store.d.ts +12 -7
- package/dist/core/models-store.js +85 -15
- package/dist/core/nested-tool-calls.d.ts +102 -0
- package/dist/core/nested-tool-calls.js +178 -0
- package/dist/core/package-manager.d.ts +8 -1
- package/dist/core/package-manager.js +144 -61
- package/dist/core/package-manager.test.js +5 -5
- package/dist/core/pi-manifest.d.ts +9 -0
- package/dist/core/pi-manifest.js +25 -0
- package/dist/core/prompt-templates.d.ts +6 -1
- package/dist/core/prompt-templates.js +61 -35
- package/dist/core/provider-composer.d.ts +44 -19
- package/dist/core/provider-composer.js +166 -64
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.js +2 -0
- package/dist/core/remote-catalog-provider.d.ts +8 -1
- package/dist/core/remote-catalog-provider.js +25 -13
- package/dist/core/resource-loader.d.ts +9 -1
- package/dist/core/resource-loader.js +179 -45
- package/dist/core/runtime-credentials.d.ts +5 -5
- package/dist/core/runtime-credentials.js +11 -8
- package/dist/core/sdk.d.ts +16 -7
- package/dist/core/sdk.js +57 -24
- package/dist/core/session-manager.d.ts +45 -9
- package/dist/core/session-manager.js +124 -31
- package/dist/core/settings-diagnostics.d.ts +8 -0
- package/dist/core/settings-diagnostics.js +20 -0
- package/dist/core/settings-manager.d.ts +62 -32
- package/dist/core/settings-manager.js +147 -69
- package/dist/core/skills.d.ts +5 -2
- package/dist/core/skills.js +58 -35
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/source-info.d.ts +8 -0
- package/dist/core/source-info.js +16 -0
- package/dist/core/system-prompt.d.ts +9 -3
- package/dist/core/system-prompt.js +9 -12
- package/dist/core/system-prompt.test.js +2 -7
- package/dist/core/tools/bash.d.ts +12 -0
- package/dist/core/tools/bash.js +33 -2
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.js +2 -5
- package/dist/core/tools/edit.d.ts +4 -0
- package/dist/core/tools/edit.js +31 -11
- package/dist/core/tools/find.d.ts +7 -0
- package/dist/core/tools/find.js +16 -19
- package/dist/core/tools/grep.d.ts +4 -0
- package/dist/core/tools/grep.js +5 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.js +11 -2
- package/dist/core/tools/ls.d.ts +4 -0
- package/dist/core/tools/ls.js +5 -1
- package/dist/core/tools/output-accumulator.d.ts +11 -0
- package/dist/core/tools/output-accumulator.js +40 -10
- package/dist/core/tools/read.d.ts +17 -2
- package/dist/core/tools/read.js +23 -2
- package/dist/core/tools/render-utils.d.ts +6 -0
- package/dist/core/tools/render-utils.js +26 -0
- package/dist/core/tools/renderers/bash.js +19 -35
- package/dist/core/tools/renderers/edit.js +5 -4
- package/dist/core/tools/renderers/index.d.ts +2 -2
- package/dist/core/tools/renderers/read.js +3 -2
- package/dist/core/tools/tool-definition-wrapper.d.ts +5 -3
- package/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/dist/core/tools/truncate.d.ts +14 -0
- package/dist/core/tools/truncate.js +29 -0
- package/dist/core/tools/write.d.ts +4 -0
- package/dist/core/tools/write.js +6 -2
- package/dist/core/trust-manager.js +3 -1
- package/dist/core/usage-totals.d.ts +2 -0
- package/dist/core/usage-totals.js +23 -0
- package/dist/core/virtual-models.d.ts +116 -0
- package/dist/core/virtual-models.js +123 -0
- package/dist/defaults/models.json +32 -0
- package/dist/defaults/settings.json +1 -9
- package/dist/extensions/codemode/execute.d.ts +15 -0
- package/dist/extensions/codemode/execute.js +645 -0
- package/dist/extensions/codemode/execute.lazy.d.ts +2 -0
- package/dist/extensions/codemode/execute.lazy.js +2 -0
- package/dist/extensions/codemode/index.d.ts +20 -0
- package/dist/extensions/codemode/index.js +31 -0
- package/dist/extensions/codemode/renderer.d.ts +11 -0
- package/dist/extensions/codemode/renderer.js +136 -0
- package/dist/extensions/codemode/tool.d.ts +129 -0
- package/dist/extensions/codemode/tool.js +275 -0
- package/dist/extensions/context-compaction-reminder.ts +1 -1
- package/dist/extensions/grep-app/index.ts +2 -10
- package/dist/extensions/herdr-agent-state.ts +1 -1
- package/dist/extensions/{pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts → index.d.ts} +0 -1
- package/dist/extensions/index.js +12 -0
- package/dist/extensions/jev/classifier-context.ts +54 -0
- package/dist/extensions/jev/classifier.test.ts +150 -0
- package/dist/extensions/jev/classifier.ts +191 -0
- package/dist/extensions/jev/decisions.test.ts +56 -47
- package/dist/extensions/jev/decisions.ts +94 -109
- package/dist/extensions/jev/test-support.ts +33 -38
- package/dist/extensions/jev-advisory-lifecycle.test.ts +12 -12
- package/dist/extensions/jev-advisory-memory.test.ts +9 -9
- package/dist/extensions/jev-advisory-recommendations.test.ts +8 -8
- package/dist/extensions/jev-ask-tool.test.ts +41 -45
- package/dist/extensions/jev-ask-tool.ts +11 -39
- package/dist/extensions/jev-find-source.test.ts +26 -0
- package/dist/extensions/jev-find-source.ts +58 -19
- package/dist/extensions/jev-tool-ranker.test.ts +185 -0
- package/dist/extensions/jev-tool-ranker.ts +169 -0
- package/dist/{core → extensions}/llama/client.d.ts +2 -0
- package/dist/{core → extensions}/llama/client.js +7 -3
- package/dist/{core → extensions}/llama/index.js +13 -2
- package/dist/{core → extensions}/llama/provider.d.ts +1 -1
- package/dist/extensions/llama/provider.js +235 -0
- package/dist/extensions/mcp/cli.d.ts +20 -0
- package/dist/extensions/mcp/cli.js +496 -0
- package/dist/extensions/mcp/cli.lazy.d.ts +2 -0
- package/dist/extensions/mcp/cli.lazy.js +2 -0
- package/dist/extensions/mcp/config.d.ts +83 -0
- package/dist/extensions/mcp/config.js +193 -0
- package/dist/extensions/mcp/index.d.ts +78 -0
- package/dist/extensions/mcp/index.js +1201 -0
- package/dist/extensions/mcp/log.d.ts +15 -0
- package/dist/extensions/mcp/log.js +65 -0
- package/dist/extensions/mcp/oauth.d.ts +97 -0
- package/dist/extensions/mcp/oauth.js +401 -0
- package/dist/extensions/mcp/resources.d.ts +41 -0
- package/dist/extensions/mcp/resources.js +260 -0
- package/dist/extensions/mcp/runtime.d.ts +96 -0
- package/dist/extensions/mcp/runtime.js +412 -0
- package/dist/extensions/mcp/runtime.lazy.d.ts +2 -0
- package/dist/extensions/mcp/runtime.lazy.js +2 -0
- package/dist/extensions/mcp/tools.d.ts +86 -0
- package/dist/extensions/mcp/tools.js +252 -0
- package/dist/extensions/mcp/ui.d.ts +59 -0
- package/dist/extensions/mcp/ui.js +185 -0
- package/dist/extensions/package.json +2 -1
- package/dist/extensions/pi-graft/index.ts +4 -19
- package/dist/extensions/pi-graft/lifecycle.test.ts +32 -25
- package/dist/extensions/pi-graft/tools.ts +6 -0
- package/dist/extensions/pi-hermes-memory/CHANGELOG.md +25 -0
- package/dist/extensions/pi-hermes-memory/README.md +140 -4
- package/dist/extensions/pi-hermes-memory/package-lock.json +624 -2720
- package/dist/extensions/pi-hermes-memory/package.json +9 -7
- package/dist/extensions/pi-hermes-memory/scripts/benchmark-memory-startup.mjs +72 -0
- package/dist/extensions/pi-hermes-memory/scripts/check-production-install.mjs +107 -0
- package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +2 -1
- package/dist/extensions/pi-hermes-memory/src/config.ts +35 -0
- package/dist/extensions/pi-hermes-memory/src/constants.ts +62 -15
- package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +374 -50
- package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +7 -4
- package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +19 -14
- package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +75 -1
- package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +322 -22
- package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +8 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +193 -54
- package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +6 -2
- package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +33 -5
- package/dist/extensions/pi-hermes-memory/src/index.ts +116 -47
- package/dist/extensions/pi-hermes-memory/src/memory-initialization.ts +101 -0
- package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +10 -2
- package/dist/extensions/pi-hermes-memory/src/store/db.ts +34 -9
- package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +44 -8
- package/dist/extensions/pi-hermes-memory/src/store/schema.ts +3 -1
- package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +141 -0
- package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +17 -6
- package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +20 -10
- package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +1 -17
- package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +2 -10
- package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +4 -8
- package/dist/extensions/pi-hermes-memory/src/types.ts +48 -0
- package/dist/extensions/pi-hermes-memory/tests/config.test.ts +108 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +1185 -42
- package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +57 -1
- package/dist/extensions/pi-hermes-memory/tests/handlers/lazy-memory-hooks.test.ts +128 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +844 -1
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +16 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +512 -3
- package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +38 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +183 -2
- package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +1 -3
- package/dist/extensions/pi-hermes-memory/tests/index.test.ts +17 -0
- package/dist/extensions/pi-hermes-memory/tests/integration/corruption-recovery-integration.test.ts +21 -0
- package/dist/extensions/pi-hermes-memory/tests/lazy-startup.test.ts +313 -0
- package/dist/extensions/pi-hermes-memory/tests/memory-initialization.test.ts +182 -0
- package/dist/extensions/pi-hermes-memory/tests/prompt-injection.test.ts +184 -0
- package/dist/extensions/pi-hermes-memory/tests/skill-discovery-contract.test.ts +60 -0
- package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-lazy-probe.test.ts +80 -0
- package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +2 -0
- package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +79 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +268 -0
- package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +29 -0
- package/dist/extensions/pi-hermes-memory/tests/store/usage-tracking.test.ts +170 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +80 -1
- package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +51 -0
- package/dist/extensions/pi-intercom/CHANGELOG.md +66 -0
- package/dist/extensions/pi-intercom/README.md +100 -12
- package/dist/extensions/pi-intercom/broker/broker.ts +28 -12
- package/dist/extensions/pi-intercom/broker/client.ts +3 -0
- package/dist/extensions/pi-intercom/broker/cross-machine-provenance.test.ts +63 -0
- package/dist/extensions/pi-intercom/broker/protocol.ts +64 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +58 -167
- package/dist/extensions/pi-intercom/broker/spawn.ts +40 -87
- package/dist/extensions/pi-intercom/cli.mjs +6 -0
- package/dist/extensions/pi-intercom/cli.test.ts +428 -0
- package/dist/extensions/pi-intercom/cli.ts +343 -0
- package/dist/extensions/pi-intercom/config.test.ts +61 -1
- package/dist/extensions/pi-intercom/config.ts +53 -2
- package/dist/extensions/pi-intercom/cross-machine-discovery.test.ts +218 -0
- package/dist/extensions/pi-intercom/cross-machine-discovery.ts +140 -0
- package/dist/extensions/pi-intercom/cross-machine-envelope.test.ts +106 -0
- package/dist/extensions/pi-intercom/cross-machine-envelope.ts +92 -0
- package/dist/extensions/pi-intercom/cross-machine-integration.test.ts +25 -0
- package/dist/extensions/pi-intercom/cross-machine-transport.test.ts +106 -0
- package/dist/extensions/pi-intercom/cross-machine-transport.ts +110 -0
- package/dist/extensions/pi-intercom/extension-api.ts +14 -0
- package/dist/extensions/pi-intercom/handover.test.ts +88 -0
- package/dist/extensions/pi-intercom/handover.ts +115 -0
- package/dist/extensions/pi-intercom/herdr-location.test.ts +173 -0
- package/dist/extensions/pi-intercom/herdr-location.ts +137 -0
- package/dist/extensions/pi-intercom/human-priority.pi.test.ts +489 -0
- package/dist/extensions/pi-intercom/index.ts +582 -164
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +590 -22
- package/dist/extensions/pi-intercom/package.json +12 -2
- package/dist/extensions/pi-intercom/project-agent.ts +1 -1
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +26 -2
- package/dist/extensions/pi-intercom/test/handover-picker.test.ts +134 -0
- package/dist/extensions/pi-intercom/test/inline-message.test.ts +43 -0
- package/dist/extensions/pi-intercom/types.d.ts +247 -0
- package/dist/extensions/pi-intercom/types.js +2 -0
- package/dist/extensions/pi-intercom/types.ts +39 -1
- package/dist/extensions/pi-intercom/ui/handover-picker.ts +318 -0
- package/dist/extensions/pi-intercom/ui/inline-message.ts +10 -3
- package/dist/extensions/pi-intercom/ui/session-list.ts +28 -15
- package/dist/extensions/pi-subagents/.github/workflows/release.yml +5 -1
- package/dist/extensions/pi-subagents/.github/workflows/test.yml +188 -18
- package/dist/extensions/pi-subagents/CHANGELOG.md +514 -1
- package/dist/extensions/pi-subagents/README.md +7 -5
- package/dist/extensions/pi-subagents/VISION.md +6 -0
- package/dist/extensions/pi-subagents/agents/reviewer.md +7 -5
- package/dist/extensions/pi-subagents/agents/worker.md +1 -1
- package/dist/extensions/pi-subagents/docs/agents.md +75 -35
- package/dist/extensions/pi-subagents/docs/configuration.md +156 -25
- package/dist/extensions/pi-subagents/docs/extension-api.md +113 -29
- package/dist/extensions/pi-subagents/docs/missions.md +46 -14
- package/dist/extensions/pi-subagents/docs/models.md +22 -84
- package/dist/extensions/pi-subagents/docs/observability.md +49 -24
- package/dist/extensions/pi-subagents/docs/standalone-background.md +59 -0
- package/dist/extensions/pi-subagents/docs/tool-reference.md +167 -116
- package/dist/extensions/pi-subagents/docs/watchdog.md +41 -10
- package/dist/extensions/pi-subagents/docs/workflows.md +239 -163
- package/dist/extensions/pi-subagents/examples/typed-gate/.pi/agents/classifier.md +14 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/README.md +42 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/classify +38 -0
- package/dist/extensions/pi-subagents/examples/typed-gate/workflow.js +32 -0
- package/dist/extensions/pi-subagents/index.ts +11 -3
- package/dist/extensions/pi-subagents/inspector-runner.mjs +3 -3
- package/dist/extensions/pi-subagents/package-lock.json +517 -1129
- package/dist/extensions/pi-subagents/package.json +22 -11
- package/dist/extensions/pi-subagents/prompts/council.md +7 -4
- package/dist/extensions/pi-subagents/prompts/parallel-review.md +2 -2
- package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
- package/dist/extensions/pi-subagents/runner-peer-loader.mjs +21 -0
- package/dist/extensions/pi-subagents/runner-peer-preload.mjs +30 -0
- package/dist/extensions/pi-subagents/scripts/build-package.mjs +79 -0
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +46 -27
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +11 -7
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +78 -73
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +4 -5
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +10 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +69 -67
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +3 -3
- package/dist/extensions/pi-subagents/src/agents/advertised-agent-prompt.ts +21 -10
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +113 -113
- package/dist/extensions/pi-subagents/src/agents/agent-memory.ts +91 -4
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +15 -9
- package/dist/extensions/pi-subagents/src/agents/agents.ts +432 -193
- package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +6 -1
- package/dist/extensions/pi-subagents/src/agents/global-npm-root.ts +58 -0
- package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +5 -2
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +22 -18
- package/dist/extensions/pi-subagents/src/agents/skills.ts +43 -10
- package/dist/extensions/pi-subagents/src/api/delegation.ts +20 -1
- package/dist/extensions/pi-subagents/src/api/inspectors.ts +27 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +140 -62
- package/dist/extensions/pi-subagents/src/api/required-child-extensions.ts +6 -0
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +24 -40
- package/dist/extensions/pi-subagents/src/extension/control-notices.ts +4 -1
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +18 -15
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +87 -13
- package/dist/extensions/pi-subagents/src/extension/herdr-pi-bridge.ts +162 -0
- package/dist/extensions/pi-subagents/src/extension/index.ts +280 -268
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +76 -37
- package/dist/extensions/pi-subagents/src/extension/reply-workflow-script.ts +67 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +34 -11
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +116 -205
- package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +13 -5
- package/dist/extensions/pi-subagents/src/extension/tool-activation.ts +146 -0
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +77 -90
- package/dist/extensions/pi-subagents/src/extension/upgrade-notice.ts +40 -0
- package/dist/extensions/pi-subagents/src/inspectors/actions.ts +148 -0
- package/dist/extensions/pi-subagents/src/inspectors/ghostty/actions.ts +74 -0
- package/dist/extensions/pi-subagents/src/inspectors/ghostty/plugin.ts +29 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +100 -180
- package/dist/extensions/pi-subagents/src/inspectors/herdr/plugin.ts +20 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +2 -2
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/inspector-runner.ts → inspector-runner.ts} +13 -13
- package/dist/extensions/pi-subagents/src/inspectors/plugins.ts +75 -0
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/session-roots-codec.ts → session-roots-codec.ts} +4 -15
- package/dist/extensions/pi-subagents/src/inspectors/{herdr/shell-command.ts → shell-command.ts} +1 -1
- package/dist/extensions/pi-subagents/src/inspectors/types.ts +51 -0
- package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +38 -53
- package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +53 -9
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +69 -55
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +7 -2
- package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +45 -32
- package/dist/extensions/pi-subagents/src/missions/store.ts +11 -2
- package/dist/extensions/pi-subagents/src/policy/authority.ts +5 -1
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +30 -18
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +59 -9
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +18 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +463 -248
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +106 -66
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +33 -20
- package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +47 -17
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -5
- package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +24 -11
- package/dist/extensions/pi-subagents/src/runs/background/await-async-run.ts +78 -0
- package/dist/extensions/pi-subagents/src/runs/background/binary-bootstrap.ts +66 -0
- package/dist/extensions/pi-subagents/src/runs/background/calendar-schedule.ts +90 -0
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +19 -38
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +62 -3
- package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +82 -10
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +259 -21
- package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +30 -3
- package/dist/extensions/pi-subagents/src/runs/background/pid-namespace.ts +18 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal-candidate.ts +98 -0
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +18 -97
- package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +14 -5
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +66 -12
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +4 -3
- package/dist/extensions/pi-subagents/src/runs/background/run-child-session.ts +126 -45
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +11 -6
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +18 -7
- package/dist/extensions/pi-subagents/src/runs/background/runner-aliases.ts +43 -51
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-launch.ts +8 -1
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-sessions.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/background/runner-http-dispatcher.ts +119 -0
- package/dist/extensions/pi-subagents/src/runs/background/runner-startup-failure.ts +56 -0
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +233 -69
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +67 -16
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +21 -3
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner-bootstrap.ts +276 -0
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +592 -573
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +177 -29
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +77 -28
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +10 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +7 -13
- package/dist/extensions/pi-subagents/src/runs/background/workflow-terminal-proof.ts +41 -23
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +19 -8
- package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +130 -7
- package/dist/extensions/pi-subagents/src/runs/foreground/command-action.ts +41 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +267 -385
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +4 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +6 -10
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1158 -413
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +2 -1
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +200 -74
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +133 -34
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +6 -1
- package/dist/extensions/pi-subagents/src/runs/shared/child-commands.ts +228 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-hooks.ts +18 -18
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +16 -4
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch.ts +55 -12
- package/dist/extensions/pi-subagents/src/runs/shared/child-lifecycle.ts +6 -3
- package/dist/extensions/pi-subagents/src/runs/shared/child-runtime-config.ts +11 -1
- package/dist/extensions/pi-subagents/src/runs/shared/child-session.ts +367 -74
- package/dist/extensions/pi-subagents/src/runs/shared/child-tool-plan.ts +50 -86
- package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +288 -0
- package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
- package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +5 -5
- package/dist/extensions/pi-subagents/src/runs/shared/effective-system-prompt.ts +33 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +49 -10
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +61 -9
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +16 -9
- package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +55 -1
- package/dist/extensions/pi-subagents/src/runs/shared/git-environment.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-connection.ts +134 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-external-adapters.ts +169 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-machine.ts +279 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-pi-protocol.ts +59 -0
- package/dist/extensions/pi-subagents/src/runs/shared/herdr-placed-run.ts +263 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +6 -2
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +108 -13
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +23 -7
- package/dist/extensions/pi-subagents/src/runs/shared/model-resolution-diagnostic.ts +76 -0
- package/dist/extensions/pi-subagents/src/runs/shared/{model-fallback.ts → model-resolution.ts} +65 -245
- package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +30 -11
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +24 -3
- package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +55 -7
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +14 -4
- package/dist/extensions/pi-subagents/src/runs/shared/partial-output.ts +48 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +12 -4
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +88 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +12 -3
- package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +160 -9
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +35 -34
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +58 -19
- package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +21 -0
- package/dist/extensions/pi-subagents/src/runs/shared/usage-reconciliation.ts +73 -0
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-async-child-guidance.ts +18 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-apply.ts +160 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +42 -20
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-lock.ts +29 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-setup-command.ts +27 -4
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +94 -26
- package/dist/extensions/pi-subagents/src/shared/child-cache-retention.ts +43 -0
- package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +5 -3
- package/dist/extensions/pi-subagents/src/shared/disabled-features.ts +123 -0
- package/dist/extensions/pi-subagents/src/shared/extension-context.ts +14 -1
- package/dist/extensions/pi-subagents/src/shared/file-lease.ts +74 -0
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +27 -77
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +70 -10
- package/dist/extensions/pi-subagents/src/shared/model-info.ts +10 -1
- package/dist/extensions/pi-subagents/src/shared/opencode-session-headers.ts +30 -0
- package/dist/extensions/pi-subagents/src/shared/package-version.ts +17 -0
- package/dist/extensions/pi-subagents/src/shared/parent-wake.ts +66 -0
- package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +71 -58
- package/dist/extensions/pi-subagents/src/shared/required-child-extensions.ts +115 -0
- package/dist/extensions/pi-subagents/src/shared/settings-file-lease.ts +36 -0
- package/dist/extensions/pi-subagents/src/shared/settings.ts +7 -4
- package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +1 -5
- package/dist/extensions/pi-subagents/src/shared/types.ts +146 -48
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +28 -2
- package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +15 -1
- package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +19 -4
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +13 -2
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +15 -15
- package/dist/extensions/pi-subagents/src/slash/subagent-cost.ts +46 -9
- package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +29 -16
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +201 -26
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +33 -16
- package/dist/extensions/pi-subagents/src/tui/render.ts +334 -103
- package/dist/extensions/pi-subagents/src/tui/running-tone.ts +28 -0
- package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +27 -28
- package/dist/extensions/pi-subagents/src/watchdog/diff-tool.ts +47 -12
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +2 -2
- package/dist/extensions/pi-subagents/src/watchdog/model-selection.ts +22 -2
- package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +17 -17
- package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +24 -8
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +43 -39
- package/dist/extensions/pi-subagents/src/watchdog/render.ts +2 -2
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +127 -78
- package/dist/extensions/pi-subagents/src/watchdog/rules.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +107 -31
- package/dist/extensions/pi-subagents/src/watchdog/scope.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/settings.ts +22 -14
- package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +14 -13
- package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +35 -6
- package/dist/extensions/pi-subagents/src/watchdog/types.ts +6 -4
- package/dist/extensions/pi-subagents/src/watchdog/warning-format.ts +2 -2
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -3
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +500 -65
- package/dist/extensions/pi-subagents/src/workflows/structured-workflow-scripts.ts +177 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +8 -2
- package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +5 -3
- package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +70 -10
- package/dist/extensions/pi-subagents/src/workflows/workflow-resources.ts +57 -18
- package/dist/extensions/pi-subagents/src/workflows/workflow-reuse.ts +120 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-revival.ts +123 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +5 -2
- package/dist/extensions/pi-subagents/test/fixtures/cwd-workflow-child.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/herdr-allocation-lock-child.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/herdr-provision-child.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/native-nested-wait-provider.ts +76 -0
- package/dist/extensions/pi-subagents/test/fixtures/runner-bootstrap-harness.ts +36 -0
- package/dist/extensions/pi-subagents/test/fixtures/schedule-history-writer.mjs +48 -0
- package/dist/extensions/pi-subagents/test/fixtures/settings-race-writer.mjs +57 -0
- package/dist/extensions/pi-subagents/test/fixtures/workflow-cwd-access-failure.ts +33 -0
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +40 -7
- package/dist/extensions/pi-subagents/test/integration/async-attention-clearing.test.ts +9 -8
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-1.test.ts +435 -276
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-2.test.ts +435 -397
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-3.test.ts +918 -497
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-4.test.ts +264 -17
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +185 -22
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +3 -2
- package/dist/extensions/pi-subagents/test/integration/claude-code-dispatch.test.ts +127 -0
- package/dist/extensions/pi-subagents/test/integration/deadline-checkpoint.test.ts +126 -0
- package/dist/extensions/pi-subagents/test/integration/doctor-executor.test.ts +29 -1
- package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +88 -0
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +450 -13
- package/dist/extensions/pi-subagents/test/integration/foreign-workflow-steering.test.ts +10 -6
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +105 -86
- package/dist/extensions/pi-subagents/test/integration/in-process-child.test.ts +403 -18
- package/dist/extensions/pi-subagents/test/integration/inline-workflow-visibility.test.ts +351 -0
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +195 -10
- package/dist/extensions/pi-subagents/test/integration/model-resolution-diagnostic.test.ts +108 -0
- package/dist/extensions/pi-subagents/test/integration/nested-async-wait.test.ts +61 -0
- package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +5 -4
- package/dist/extensions/pi-subagents/test/integration/recovered-assistant-error.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +6 -4
- package/dist/extensions/pi-subagents/test/integration/render-widget-mouse.test.ts +84 -0
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +242 -16
- package/dist/extensions/pi-subagents/test/integration/result-publication.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +158 -4
- package/dist/extensions/pi-subagents/test/integration/single-execution.part-1.test.ts +1435 -248
- package/dist/extensions/pi-subagents/test/integration/single-execution.part-2.test.ts +454 -515
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +140 -21
- package/dist/extensions/pi-subagents/test/integration/structured-workflows.test.ts +105 -0
- package/dist/extensions/pi-subagents/test/integration/workflow-result-publication.test.ts +90 -11
- package/dist/extensions/pi-subagents/test/integration/workflow-steer-inbox.test.ts +18 -15
- package/dist/extensions/pi-subagents/test/integration/workflow-worktree-admission.test.ts +100 -0
- package/dist/extensions/pi-subagents/test/smoke/clean-install.mjs +106 -0
- package/dist/extensions/pi-subagents/test/smoke/npm-background.mjs +43 -0
- package/dist/extensions/pi-subagents/test/smoke/packed-runner-selection.mjs +42 -0
- package/dist/extensions/pi-subagents/test/smoke/runner-loader-capability.mjs +50 -0
- package/dist/extensions/pi-subagents/test/smoke/sdk-child.ts +57 -0
- package/dist/extensions/pi-subagents/test/smoke/{pi085-extension.ts → sdk-extension.ts} +2 -2
- package/dist/extensions/pi-subagents/test/smoke/standalone-background.mjs +140 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-fault.ts +43 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-matrix.mjs +65 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-observer.ts +8 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-parent.ts +220 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-provider.ts +58 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-release.json +8 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-revival.ts +109 -0
- package/dist/extensions/pi-subagents/test/smoke/standalone-shared.ts +79 -0
- package/dist/extensions/pi-subagents/test/smoke/tool-activation.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/support/async-execution-fixture.ts +6 -25
- package/dist/extensions/pi-subagents/test/support/async-result-timeout-evidence.ts +61 -0
- package/dist/extensions/pi-subagents/test/support/fake-child-session.ts +122 -9
- package/dist/extensions/pi-subagents/test/support/foreign-workflow-steer-host.mjs +15 -7
- package/dist/extensions/pi-subagents/test/support/helpers.ts +11 -14
- package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +21 -3
- package/dist/extensions/pi-subagents/test/support/native-peer-loader.mjs +15 -0
- package/dist/extensions/pi-subagents/test/support/node-command.ts +29 -6
- package/dist/extensions/pi-subagents/test/support/notify-diagnostics-fixture.ts +5 -3
- package/dist/extensions/pi-subagents/test/support/single-execution-fixture.ts +7 -15
- package/dist/extensions/pi-subagents/test/support/watchdog-stable-host-loader.mjs +23 -0
- package/dist/extensions/pi-subagents/test/unit/acceptance-compaction.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +158 -155
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +52 -1
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-prompt.test.ts +21 -17
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-refresh.test.ts +105 -36
- package/dist/extensions/pi-subagents/test/unit/advertisement-barrier.test.ts +151 -0
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -2
- package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +33 -3
- package/dist/extensions/pi-subagents/test/unit/agent-end-auto-drain.test.ts +149 -0
- package/dist/extensions/pi-subagents/test/unit/agent-exclude-dirs.test.ts +246 -0
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +62 -87
- package/dist/extensions/pi-subagents/test/unit/agent-global-root-override.test.ts +86 -0
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +398 -48
- package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +126 -1
- package/dist/extensions/pi-subagents/test/unit/agent-name-resolution.test.ts +75 -0
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +94 -42
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +73 -3
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +428 -2
- package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +112 -1
- package/dist/extensions/pi-subagents/test/unit/async-result-timeout-evidence.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +92 -4
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +58 -6
- package/dist/extensions/pi-subagents/test/unit/async-run-history.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/async-spawn-package-dir.test.ts +203 -0
- package/dist/extensions/pi-subagents/test/unit/async-spawn-preload.test.ts +26 -35
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +185 -0
- package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +9 -1
- package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +106 -1
- package/dist/extensions/pi-subagents/test/unit/await-async-run.test.ts +202 -0
- package/dist/extensions/pi-subagents/test/unit/binary-async-spawn.test.ts +115 -0
- package/dist/extensions/pi-subagents/test/unit/binary-pi-spawn.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/calendar-schedule.test.ts +70 -0
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +38 -0
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +10 -2
- package/dist/extensions/pi-subagents/test/unit/changelog-format.test.ts +11 -0
- package/dist/extensions/pi-subagents/test/unit/child-cache-retention.test.ts +87 -0
- package/dist/extensions/pi-subagents/test/unit/child-commands.test.ts +243 -0
- package/dist/extensions/pi-subagents/test/unit/child-external-job-bridge.test.ts +126 -0
- package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +12 -1
- package/dist/extensions/pi-subagents/test/unit/child-lifecycle.test.ts +36 -0
- package/dist/extensions/pi-subagents/test/unit/child-runtime-config.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-commands.test.ts +162 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-host-sdk.test.ts +226 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-parent-providers.test.ts +200 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-queued.test.ts +260 -0
- package/dist/extensions/pi-subagents/test/unit/child-tool-plan-permission-system.test.ts +3 -98
- package/dist/extensions/pi-subagents/test/unit/child-tool-plan.test.ts +222 -1
- package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +314 -0
- package/dist/extensions/pi-subagents/test/unit/claude-code-dispatch.test.ts +182 -0
- package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +157 -0
- package/dist/extensions/pi-subagents/test/unit/command-action.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +25 -11
- package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +18 -0
- package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +7 -1
- package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +220 -0
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +104 -32
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +138 -1
- package/dist/extensions/pi-subagents/test/unit/disabled-features.test.ts +227 -0
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +48 -9
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +7 -4
- package/dist/extensions/pi-subagents/test/unit/extension-lazy-loading.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/extension-maintenance-lifecycle.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/extension-module-preload.test.ts +49 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +104 -3
- package/dist/extensions/pi-subagents/test/unit/file-lease.test.ts +17 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +316 -0
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +58 -7
- package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +25 -96
- package/dist/extensions/pi-subagents/test/unit/ghostty-inspector.test.ts +92 -0
- package/dist/extensions/pi-subagents/test/unit/global-npm-root.test.ts +108 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-connection.test.ts +43 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-external-adapters.test.ts +89 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +11 -20
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +113 -19
- package/dist/extensions/pi-subagents/test/unit/herdr-machine.test.ts +161 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-native-placement.test.ts +187 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +7 -12
- package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +182 -87
- package/dist/extensions/pi-subagents/test/unit/host-peer-runtime-imports.test.ts +68 -49
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +295 -135
- package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/inspector-authority-policy.test.ts +144 -0
- package/dist/extensions/pi-subagents/test/unit/inspector-registration.test.ts +128 -0
- package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +49 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +74 -1
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-resolution.test.ts +112 -0
- package/dist/extensions/pi-subagents/test/unit/mission-global-projection.test.ts +215 -0
- package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +65 -1
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +2 -1
- package/dist/extensions/pi-subagents/test/unit/model-resolution-diagnostic.test.ts +78 -0
- package/dist/extensions/pi-subagents/test/unit/model-resolution.test.ts +153 -0
- package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +43 -1
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +1 -21
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +279 -2
- package/dist/extensions/pi-subagents/test/unit/nested-control-fanout.test.ts +73 -0
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +297 -3
- package/dist/extensions/pi-subagents/test/unit/notify-diagnostics.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +431 -23
- package/dist/extensions/pi-subagents/test/unit/opencode-session-headers.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +89 -21
- package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +31 -1
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +18 -24
- package/dist/extensions/pi-subagents/test/unit/parent-wake.test.ts +206 -0
- package/dist/extensions/pi-subagents/test/unit/partial-output.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +216 -32
- package/dist/extensions/pi-subagents/test/unit/pi-spawn-host-root.test.ts +82 -0
- package/dist/extensions/pi-subagents/test/unit/pi-subagents-policy-guidance.test.ts +28 -0
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +193 -104
- package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +16 -1
- package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +17 -1
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +89 -9
- package/dist/extensions/pi-subagents/test/unit/prompt-audit-optional-peers.test.ts +6 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-audit-provider-routing.test.ts +69 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +23 -1
- package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +117 -3
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +35 -14
- package/dist/extensions/pi-subagents/test/unit/readonly-drain-observation.test.ts +3 -2
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +261 -9
- package/dist/extensions/pi-subagents/test/unit/reply-workflow-script.test.ts +37 -0
- package/dist/extensions/pi-subagents/test/unit/required-child-extensions.test.ts +114 -0
- package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +11 -1
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +22 -2
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +125 -18
- package/dist/extensions/pi-subagents/test/unit/run-child-session.test.ts +230 -0
- package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +50 -1
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +301 -4
- package/dist/extensions/pi-subagents/test/unit/runner-bootstrap.test.ts +182 -0
- package/dist/extensions/pi-subagents/test/unit/runner-http-dispatcher.test.ts +136 -0
- package/dist/extensions/pi-subagents/test/unit/runner-peer-loader.test.ts +68 -0
- package/dist/extensions/pi-subagents/test/unit/runner-peer-symlinks.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/running-tone.test.ts +13 -0
- package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +155 -4
- package/dist/extensions/pi-subagents/test/unit/schedule-claim-initialization.test.ts +71 -0
- package/dist/extensions/pi-subagents/test/unit/schedule-claim-preservation.test.ts +98 -0
- package/dist/extensions/pi-subagents/test/unit/schedule-history-transactions.test.ts +201 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-mission.test.ts +317 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +412 -11
- package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +2 -8
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +70 -71
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +748 -5
- package/dist/extensions/pi-subagents/test/unit/session-liveness-delivery.test.ts +337 -0
- package/dist/extensions/pi-subagents/test/unit/settings-atomic-save.test.ts +419 -0
- package/dist/extensions/pi-subagents/test/unit/settings-transactions.test.ts +88 -0
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -1
- package/dist/extensions/pi-subagents/test/unit/skills-disable-model-invocation.test.ts +164 -0
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +35 -2
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +334 -9
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +170 -0
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +34 -5
- package/dist/extensions/pi-subagents/test/unit/structured-output-validation.test.ts +199 -0
- package/dist/extensions/pi-subagents/test/unit/structured-workflow-resources.test.ts +241 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +47 -38
- package/dist/extensions/pi-subagents/test/unit/subagent-cost.test.ts +97 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +343 -44
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +410 -11
- package/dist/extensions/pi-subagents/test/unit/supervisor-ask-registration.test.ts +459 -22
- package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +43 -3
- package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +11 -1
- package/dist/extensions/pi-subagents/test/unit/tool-activation-stale-peer.test.ts +32 -0
- package/dist/extensions/pi-subagents/test/unit/tool-activation.test.ts +313 -0
- package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +14 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -89
- package/dist/extensions/pi-subagents/test/unit/typed-gate-output.test.ts +141 -0
- package/dist/extensions/pi-subagents/test/unit/upgrade-notice.test.ts +31 -0
- package/dist/extensions/pi-subagents/test/unit/usage-reconciliation-owners.test.ts +66 -0
- package/dist/extensions/pi-subagents/test/unit/usage-reconciliation.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +195 -1
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +3 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +48 -45
- package/dist/extensions/pi-subagents/test/unit/watchdog-compaction-scope.test.ts +94 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-diff-tool.test.ts +48 -3
- package/dist/extensions/pi-subagents/test/unit/watchdog-native-scheduling.test.ts +107 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +95 -7
- package/dist/extensions/pi-subagents/test/unit/watchdog-register-child.test.ts +79 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-render.test.ts +7 -4
- package/dist/extensions/pi-subagents/test/unit/watchdog-review.test.ts +111 -24
- package/dist/extensions/pi-subagents/test/unit/watchdog-rules.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +283 -2
- package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +3 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +12 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-stable-host-layout.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-tool-actions.test.ts +30 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-turn-delta.test.ts +39 -2
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +18 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +8 -4
- package/dist/extensions/pi-subagents/test/unit/workflow-child-summary.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +6 -3
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +44 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +28 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-revival.test.ts +85 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-scripts-feature.test.ts +177 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-terminal-proof.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-worktree-admission.test.ts +29 -0
- package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +343 -4
- package/dist/extensions/pi-subagents/test/unit/worktree-lock.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +252 -22
- package/dist/extensions/pi-subagents/tsconfig.build.json +13 -0
- package/dist/extensions/pi-tool-display/tests/custom-tool-overrides.test.ts +1 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-config.test.ts +1 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +24 -1
- package/dist/extensions/pi-tool-display/tests/tool-overrides-registration.test.ts +6 -2
- package/dist/extensions/pi-web-agent/src/extension.ts +1 -5
- package/dist/extensions/pi-zentui/.github/workflows/ci.yml +67 -4
- package/dist/extensions/pi-zentui/AGENTS.md +3 -2
- package/dist/extensions/pi-zentui/README.md +60 -32
- package/dist/extensions/pi-zentui/docs/configuration.md +662 -51
- package/dist/extensions/pi-zentui/docs/footer-format.md +174 -5
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-editor.ts +15 -4
- package/dist/extensions/pi-zentui/extensions/zentui/average-token-rate.ts +146 -0
- package/dist/extensions/pi-zentui/extensions/zentui/codex-quota-display.ts +34 -0
- package/dist/extensions/pi-zentui/extensions/zentui/codex-quota.ts +298 -0
- package/dist/extensions/pi-zentui/extensions/zentui/component-colors.ts +172 -0
- package/dist/extensions/pi-zentui/extensions/zentui/component-settings.ts +243 -0
- package/dist/extensions/pi-zentui/extensions/zentui/config.ts +851 -114
- package/dist/extensions/pi-zentui/extensions/zentui/custom-value-colors.ts +93 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-demand.ts +61 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variable-format.ts +80 -0
- package/dist/extensions/pi-zentui/extensions/zentui/custom-variables.ts +152 -0
- package/dist/extensions/pi-zentui/extensions/zentui/editor-metadata-format.ts +138 -23
- package/dist/extensions/pi-zentui/extensions/zentui/editor-mouse.ts +89 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status-controller.ts +148 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status-settings.ts +40 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +109 -1
- package/dist/extensions/pi-zentui/extensions/zentui/footer-format.ts +203 -23
- package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +80 -3
- package/dist/extensions/pi-zentui/extensions/zentui/footer-text.ts +1 -1
- package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +432 -125
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +92 -4
- package/dist/extensions/pi-zentui/extensions/zentui/git.ts +47 -30
- package/dist/extensions/pi-zentui/extensions/zentui/github-status.ts +575 -0
- package/dist/extensions/pi-zentui/extensions/zentui/host-project-changes.ts +25 -0
- package/dist/extensions/pi-zentui/extensions/zentui/host-template-values.ts +29 -0
- package/dist/extensions/pi-zentui/extensions/zentui/icons.ts +53 -13
- package/dist/extensions/pi-zentui/extensions/zentui/index.ts +778 -258
- package/dist/extensions/pi-zentui/extensions/zentui/interaction-summary.ts +70 -5
- package/dist/extensions/pi-zentui/extensions/zentui/layered-editor.ts +55 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-context.ts +6 -1
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-demand.ts +72 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata-display.ts +21 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-metadata.ts +255 -0
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-editor.ts +476 -36
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-settings.ts +118 -0
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-template.ts +177 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-editor-frame.ts +148 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-statusline.ts +569 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-lookups.ts +344 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-metrics.ts +91 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-template-modes.ts +323 -0
- package/dist/extensions/pi-zentui/extensions/zentui/omp-ui.ts +210 -0
- package/dist/extensions/pi-zentui/extensions/zentui/package-version.ts +30 -12
- package/dist/extensions/pi-zentui/extensions/zentui/project-demand.ts +46 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-discovery.ts +58 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-refresh.ts +10 -3
- package/dist/extensions/pi-zentui/extensions/zentui/project-state.ts +37 -0
- package/dist/extensions/pi-zentui/extensions/zentui/repository-root.ts +1 -0
- package/dist/extensions/pi-zentui/extensions/zentui/runtime.ts +119 -43
- package/dist/extensions/pi-zentui/extensions/zentui/selector-border.ts +40 -29
- package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +1268 -722
- package/dist/extensions/pi-zentui/extensions/zentui/settings-keys.ts +59 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-list-selection.ts +13 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +11 -4
- package/dist/extensions/pi-zentui/extensions/zentui/state.ts +24 -11
- package/dist/extensions/pi-zentui/extensions/zentui/style.ts +6 -0
- package/dist/extensions/pi-zentui/extensions/zentui/telemetry.ts +113 -11
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-experimental.ts +234 -46
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-steps.ts +20 -5
- package/dist/extensions/pi-zentui/extensions/zentui/token-rate.ts +313 -0
- package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-format.ts +59 -0
- package/dist/extensions/pi-zentui/extensions/zentui/turn-summary-rate.ts +52 -0
- package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +640 -172
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +72 -34
- package/dist/extensions/pi-zentui/extensions/zentui/user-message.ts +219 -34
- package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +495 -119
- package/dist/extensions/pi-zentui/omp.ts +157 -0
- package/dist/extensions/pi-zentui/package-lock.json +3762 -1507
- package/dist/extensions/pi-zentui/package.json +50 -12
- package/dist/extensions/pi-zentui/test/accent-rail-editor.test.ts +13 -2
- package/dist/extensions/pi-zentui/test/average-token-rate.test.ts +297 -0
- package/dist/extensions/pi-zentui/test/behavior-compatibility.mjs +89 -0
- package/dist/extensions/pi-zentui/test/codex-quota-lifecycle.test.ts +284 -0
- package/dist/extensions/pi-zentui/test/codex-quota-rendering.test.ts +466 -0
- package/dist/extensions/pi-zentui/test/codex-quota.test.ts +440 -0
- package/dist/extensions/pi-zentui/test/component-colors.test.ts +554 -0
- package/dist/extensions/pi-zentui/test/component-settings.test.ts +364 -0
- package/dist/extensions/pi-zentui/test/config-component-independence.test.ts +402 -0
- package/dist/extensions/pi-zentui/test/config-extension-status-choice.test.ts +233 -0
- package/dist/extensions/pi-zentui/test/config-hidden-extension-status-colors.test.ts +118 -0
- package/dist/extensions/pi-zentui/test/config-hidden-extension-status-placement.test.ts +142 -0
- package/dist/extensions/pi-zentui/test/config-minimalist-templates.test.ts +240 -0
- package/dist/extensions/pi-zentui/test/config-template-variables.test.ts +85 -0
- package/dist/extensions/pi-zentui/test/config.test.ts +80 -17
- package/dist/extensions/pi-zentui/test/custom-value-colors-integration.test.ts +453 -0
- package/dist/extensions/pi-zentui/test/custom-value-colors.test.ts +399 -0
- package/dist/extensions/pi-zentui/test/custom-variable-alias-prototypes.test.ts +177 -0
- package/dist/extensions/pi-zentui/test/custom-variable-consumers.test.ts +194 -0
- package/dist/extensions/pi-zentui/test/custom-variable-demand.test.ts +169 -0
- package/dist/extensions/pi-zentui/test/custom-variable-probe-reservation.test.ts +141 -0
- package/dist/extensions/pi-zentui/test/custom-variables-lifecycle.integration.test.ts +365 -0
- package/dist/extensions/pi-zentui/test/custom-variables.test.ts +330 -0
- package/dist/extensions/pi-zentui/test/editor-metadata-format.test.ts +121 -0
- package/dist/extensions/pi-zentui/test/editor-mouse.test.ts +507 -0
- package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +247 -20
- package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +204 -260
- package/dist/extensions/pi-zentui/test/extension-status-controller.test.ts +323 -0
- package/dist/extensions/pi-zentui/test/extension-status-lifecycle.integration.test.ts +466 -0
- package/dist/extensions/pi-zentui/test/extension-status-settings.test.ts +79 -0
- package/dist/extensions/pi-zentui/test/footer-alignment.test.ts +135 -0
- package/dist/extensions/pi-zentui/test/footer-authority.test.ts +69 -0
- package/dist/extensions/pi-zentui/test/footer-auto-compaction.test.ts +148 -0
- package/dist/extensions/pi-zentui/test/footer-format-cache.test.ts +186 -0
- package/dist/extensions/pi-zentui/test/footer-format.test.ts +154 -4
- package/dist/extensions/pi-zentui/test/footer-hidden.test.ts +312 -0
- package/dist/extensions/pi-zentui/test/footer-hyperlink.test.ts +22 -0
- package/dist/extensions/pi-zentui/test/footer-layout.test.ts +80 -0
- package/dist/extensions/pi-zentui/test/footer-thinking-level.test.ts +123 -0
- package/dist/extensions/pi-zentui/test/format.test.ts +75 -1
- package/dist/extensions/pi-zentui/test/git-probes.test.ts +182 -0
- package/dist/extensions/pi-zentui/test/github-status.test.ts +931 -0
- package/dist/extensions/pi-zentui/test/host-template-surfaces.test.ts +287 -0
- package/dist/extensions/pi-zentui/test/icons.test.ts +86 -16
- package/dist/extensions/pi-zentui/test/layered-editor.test.ts +53 -0
- package/dist/extensions/pi-zentui/test/live-context-integration.test.ts +154 -7
- package/dist/extensions/pi-zentui/test/live-context.test.ts +45 -0
- package/dist/extensions/pi-zentui/test/live-metadata-lifecycle.integration.test.ts +963 -0
- package/dist/extensions/pi-zentui/test/live-metadata.test.ts +767 -0
- package/dist/extensions/pi-zentui/test/minimalist-cache-hit-colors.test.ts +183 -0
- package/dist/extensions/pi-zentui/test/minimalist-editor.test.ts +222 -4
- package/dist/extensions/pi-zentui/test/minimalist-settings.test.ts +103 -0
- package/dist/extensions/pi-zentui/test/minimalist-templates.test.ts +489 -0
- package/dist/extensions/pi-zentui/test/omp-editor-composers.test.ts +324 -0
- package/dist/extensions/pi-zentui/test/omp-statusline.test.ts +579 -0
- package/dist/extensions/pi-zentui/test/omp-template-lookups.test.ts +630 -0
- package/dist/extensions/pi-zentui/test/omp-template-metrics.test.ts +72 -0
- package/dist/extensions/pi-zentui/test/omp-template-modes.test.ts +557 -0
- package/dist/extensions/pi-zentui/test/omp-ui.test.ts +93 -0
- package/dist/extensions/pi-zentui/test/package-contents.mjs +1 -0
- package/dist/extensions/pi-zentui/test/pi-version-policy.test.ts +37 -0
- package/dist/extensions/pi-zentui/test/project-demand-integration.test.ts +542 -0
- package/dist/extensions/pi-zentui/test/project-discovery.test.ts +412 -0
- package/dist/extensions/pi-zentui/test/project-refresh.test.ts +44 -0
- package/dist/extensions/pi-zentui/test/project-state.test.ts +38 -1
- package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +7 -7
- package/dist/extensions/pi-zentui/test/runtime.test.ts +127 -2
- package/dist/extensions/pi-zentui/test/selesai-v030-gate.json +939 -0
- package/dist/extensions/pi-zentui/test/settings-command.test.ts +1330 -82
- package/dist/extensions/pi-zentui/test/settings-keys.test.ts +41 -0
- package/dist/extensions/pi-zentui/test/settings-list-selection.test.ts +88 -0
- package/dist/extensions/pi-zentui/test/settings-previews.test.ts +4 -1
- package/dist/extensions/pi-zentui/test/state.test.ts +15 -1
- package/dist/extensions/pi-zentui/test/telemetry-lifecycle-integration.test.ts +214 -12
- package/dist/extensions/pi-zentui/test/telemetry-snapshot.test.ts +246 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-cache.test.ts +246 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-rows.test.ts +22 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-tui.mjs +113 -51
- package/dist/extensions/pi-zentui/test/thinking-experimental.test.ts +576 -76
- package/dist/extensions/pi-zentui/test/thinking-steps.test.ts +23 -0
- package/dist/extensions/pi-zentui/test/token-rate.test.ts +450 -0
- package/dist/extensions/pi-zentui/test/turn-summary-format.test.ts +207 -0
- package/dist/extensions/pi-zentui/test/turn-summary-lifecycle.integration.test.ts +72 -5
- package/dist/extensions/pi-zentui/test/turn-summary-rate.test.ts +158 -0
- package/dist/extensions/pi-zentui/test/usage-lifecycle-integration.test.ts +421 -0
- package/dist/extensions/pi-zentui/test/usage-snapshot.test.ts +154 -0
- package/dist/extensions/pi-zentui/test/user-message-cache.test.ts +239 -0
- package/dist/extensions/pi-zentui/test/user-message-native-reduced-capabilities.test.ts +61 -0
- package/dist/extensions/pi-zentui/test/user-message-native.test.ts +447 -0
- package/dist/extensions/pi-zentui/test/user-message-styles.test.ts +2 -2
- package/dist/extensions/pi-zentui/test/working-line-editor-placement.test.ts +317 -0
- package/dist/extensions/pi-zentui/test/working-line-generation-cache.test.ts +238 -0
- package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +674 -179
- package/dist/extensions/pi-zentui/test/working-line-message-ownership.test.ts +239 -0
- package/dist/extensions/pi-zentui/test/working-line-metric-animation.test.ts +284 -0
- package/dist/extensions/pi-zentui/test/working-line-placement.test.ts +298 -0
- package/dist/extensions/pi-zentui/test/working-line.test.ts +386 -18
- package/dist/extensions/pi-zentui/test/wrapped-editor-consumers.integration.test.ts +579 -0
- package/dist/extensions/pi-zentui/test/wrapped-editor-usage.integration.test.ts +298 -0
- package/dist/extensions/pi-zentui/tsconfig.json +1 -1
- package/dist/extensions/pi-zentui/vitest.host.config.ts +33 -0
- package/dist/extensions/question/index.ts +1 -5
- package/dist/extensions/rtk.test.ts +28 -15
- package/dist/extensions/rtk.ts +22 -22
- package/dist/extensions/skills-index/index.test.ts +99 -0
- package/dist/extensions/skills-index/index.ts +105 -0
- package/dist/extensions/skills-index/package.json +9 -0
- package/dist/extensions/tokenin-onboarding.ts +48 -208
- package/dist/extensions/tool-search/index.d.ts +11 -0
- package/dist/extensions/tool-search/index.js +14 -0
- package/dist/extensions/tool-search/tool.d.ts +91 -0
- package/dist/extensions/tool-search/tool.js +214 -0
- package/dist/index.d.ts +17 -9
- package/dist/index.js +11 -5
- package/dist/main.d.ts +4 -0
- package/dist/main.js +106 -42
- package/dist/migrations.js +4 -3
- package/dist/modes/index.d.ts +1 -0
- package/dist/modes/interactive/bug-report.js +4 -0
- package/dist/modes/interactive/components/armin.d.ts +3 -0
- package/dist/modes/interactive/components/armin.js +7 -5
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/auth-url.d.ts +13 -0
- package/dist/modes/interactive/components/auth-url.js +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
- package/dist/modes/interactive/components/bash-execution.js +17 -14
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/branch-summary-message.js +5 -2
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +5 -2
- package/dist/modes/interactive/components/config-selector.js +13 -3
- package/dist/modes/interactive/components/custom-editor.js +7 -0
- package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
- package/dist/modes/interactive/components/custom-entry.js +8 -2
- package/dist/modes/interactive/components/custom-message.js +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
- package/dist/modes/interactive/components/first-time-setup.js +8 -2
- package/dist/modes/interactive/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.js +44 -4
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +2 -0
- package/dist/modes/interactive/components/login-dialog.js +11 -5
- package/dist/modes/interactive/components/mermaid.d.ts +10 -0
- package/dist/modes/interactive/components/mermaid.js +74 -0
- package/dist/modes/interactive/components/model-selector.d.ts +14 -9
- package/dist/modes/interactive/components/model-selector.js +79 -31
- package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
- package/dist/modes/interactive/components/oauth-selector.js +24 -21
- package/dist/modes/interactive/components/pi-logo.d.ts +18 -0
- package/dist/modes/interactive/components/pi-logo.js +36 -0
- package/dist/modes/interactive/components/radius-login-selector.d.ts +14 -0
- package/dist/modes/interactive/components/radius-login-selector.js +84 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +26 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -11
- package/dist/modes/interactive/components/settings-selector.js +60 -102
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
- package/dist/modes/interactive/components/themed-text.d.ts +16 -0
- package/dist/modes/interactive/components/themed-text.js +28 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +11 -18
- package/dist/modes/interactive/components/tool-execution.js +34 -47
- package/dist/modes/interactive/components/tree-selector.js +7 -0
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.js +14 -6
- package/dist/modes/interactive/components/visual-truncate.d.ts +27 -3
- package/dist/modes/interactive/components/visual-truncate.js +39 -6
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/interactive-mode.d.ts +41 -8
- package/dist/modes/interactive/interactive-mode.js +854 -492
- package/dist/modes/interactive/program-status-reporter.d.ts +33 -0
- package/dist/modes/interactive/program-status-reporter.js +109 -0
- package/dist/modes/interactive/theme/dark.json +59 -72
- package/dist/modes/interactive/theme/light.json +57 -69
- package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
- package/dist/modes/interactive/theme/system-theme.js +545 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
- package/dist/modes/interactive/theme/theme-controller.js +127 -47
- package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-json.js +3 -1
- package/dist/modes/interactive/theme/theme-schema.json +7 -2
- package/dist/modes/interactive/theme/theme.d.ts +66 -39
- package/dist/modes/interactive/theme/theme.js +243 -320
- package/dist/modes/interactive/tui-renderer.d.ts +2 -1
- package/dist/modes/interactive/tui-renderer.js +1 -0
- package/dist/modes/json-event.d.ts +33 -0
- package/dist/modes/json-event.js +28 -0
- package/dist/modes/print-mode.js +12 -2
- package/dist/modes/rpc/rpc-client.d.ts +11 -19
- package/dist/modes/rpc/rpc-client.js +52 -35
- package/dist/modes/rpc/rpc-mode.js +11 -26
- package/dist/modes/rpc/rpc-types.d.ts +12 -23
- package/dist/package-manager-cli.js +16 -5
- package/dist/rpc-entry.js +1 -0
- package/dist/skills/pi-subagents/SKILL.md +109 -35
- package/dist/skills/pi-subagents/references/constraints-and-recipes.md +38 -238
- package/dist/skills/pi-subagents/references/execution-controls.md +181 -83
- package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -9
- package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +24 -2
- package/dist/skills/pi-subagents/references/prompting-and-roles.md +121 -91
- package/dist/skills/pi-subagents/references/review-and-validation.md +73 -0
- package/dist/utils/ansi.d.ts +8 -0
- package/dist/utils/ansi.js +30 -11
- package/dist/utils/clipboard-image.js +14 -17
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.js +17 -11
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.js +45 -6
- package/dist/utils/image-resize-core.d.ts +12 -0
- package/dist/utils/image-resize-core.js +5 -0
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize.js +9 -10
- package/dist/utils/mime.js +1 -1
- package/dist/utils/output-files.d.ts +14 -0
- package/dist/utils/output-files.js +29 -0
- package/dist/utils/paths.d.ts +6 -3
- package/dist/utils/paths.js +28 -5
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.js +3 -30
- package/dist/utils/syntax-highlight.d.ts +1 -0
- package/dist/utils/syntax-highlight.js +68 -2
- package/dist/utils/tool-result-images.d.ts +20 -0
- package/dist/utils/tool-result-images.js +47 -0
- package/dist/utils/tools-manager.d.ts +5 -0
- package/dist/utils/tools-manager.js +6 -6
- package/dist/utils/version-check.d.ts +4 -0
- package/dist/utils/version-check.js +20 -2
- package/docs/cli-integration.md +104 -0
- package/docs/cli.md +333 -0
- package/docs/codemode.md +230 -0
- package/docs/configuration.md +47 -0
- package/docs/environment-variables.md +5 -0
- package/docs/extensions.md +107 -30
- package/docs/json.md +8 -4
- package/docs/keybindings.md +10 -10
- package/docs/mcp.md +262 -0
- package/docs/models.md +104 -3
- package/docs/providers.md +20 -2
- package/docs/rpc.md +13 -12
- package/docs/sdk.md +41 -33
- package/docs/security.md +21 -20
- package/docs/settings.md +18 -46
- package/docs/terminal-setup.md +14 -0
- package/docs/virtual-models.md +114 -0
- package/examples/extensions/jev-router.ts +113 -0
- package/examples/extensions/tokenin-usage-widget.ts +124 -0
- package/examples/rpc-client.ts +35 -0
- package/examples/sdk/14-codemode-mcp.ts +67 -0
- package/package.json +15 -8
- package/dist/core/agent-session-auto-handoff.test.js +0 -195
- package/dist/core/built-in-extensions.d.ts +0 -2
- package/dist/core/built-in-extensions.js +0 -2
- package/dist/core/llama/provider.js +0 -143
- package/dist/core/settings-manager-auto-handoff.test.d.ts +0 -1
- package/dist/core/settings-manager-auto-handoff.test.js +0 -53
- package/dist/extensions/capability-gateway/catalog.ts +0 -177
- package/dist/extensions/capability-gateway/index.test.ts +0 -226
- package/dist/extensions/capability-gateway/index.ts +0 -669
- package/dist/extensions/capability-gateway/integration.test.ts +0 -803
- package/dist/extensions/capability-gateway/package.json +0 -16
- package/dist/extensions/capability-gateway/routing.test.ts +0 -574
- package/dist/extensions/capability-gateway/routing.ts +0 -403
- package/dist/extensions/pi-subagents/runner-server-preload.mjs +0 -13
- package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +0 -89
- package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +0 -259
- package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +0 -312
- package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +0 -374
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-model-continuation.ts +0 -69
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-session-evidence.ts +0 -307
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +0 -211
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
- package/dist/extensions/pi-subagents/test/smoke/pi085-child.ts +0 -31
- package/dist/extensions/pi-subagents/test/smoke/pi085-clean-install.mjs +0 -74
- package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +0 -150
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +0 -766
- package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +0 -327
- package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +0 -309
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +0 -1093
- package/dist/extensions/pi-subagents/test/unit/readonly-model-continuation.test.ts +0 -94
- package/dist/extensions/pi-subagents/test/unit/readonly-session-evidence.test.ts +0 -1329
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +0 -153
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-layout-patch.ts +0 -457
- package/dist/extensions/pi-zentui/test/accent-rail-layout-patch.test.ts +0 -669
- package/dist/extensions/pi-zentui/test/thinking-experimental-docs.test.ts +0 -51
- package/dist/modes/interactive/components/daxnuts.d.ts +0 -22
- package/dist/modes/interactive/components/daxnuts.js +0 -139
- /package/dist/core/{agent-session-auto-handoff.test.d.ts → agent-session-custom-tools.test.d.ts} +0 -0
- /package/dist/{core → extensions}/llama/huggingface.d.ts +0 -0
- /package/dist/{core → extensions}/llama/huggingface.js +0 -0
- /package/dist/{core → extensions}/llama/index.d.ts +0 -0
- /package/dist/{core → extensions}/llama/ui.d.ts +0 -0
- /package/dist/{core → extensions}/llama/ui.js +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { stripVTControlCharacters } from "node:util";
|
|
2
2
|
import { visibleWidth } from "@earendil-works/pi-tui";
|
|
3
|
+
import { workingLineColor } from "./component-colors";
|
|
3
4
|
import type {
|
|
4
5
|
ColorSpec,
|
|
5
6
|
PolishedTuiColors,
|
|
@@ -39,6 +40,8 @@ export const MAX_WORKING_LINE_NORMALIZED_CODE_UNITS = 256;
|
|
|
39
40
|
export const MAX_WORKING_LINE_STYLE_TOKENS = 4;
|
|
40
41
|
export const MAX_WORKING_LINE_STYLE_CODE_UNITS = 48;
|
|
41
42
|
export const MAX_WORKING_LINE_ENTRIES_EXAMINED = 256;
|
|
43
|
+
/** Minimum interval between metric-only Loader replacements while an assistant streams. */
|
|
44
|
+
export const WORKING_LINE_METRIC_UPDATE_INTERVAL_MS = 50;
|
|
42
45
|
|
|
43
46
|
const WORKING_LINE_FALLBACKS: Record<"low" | "mid" | "high", SourceStyleFallback> = {
|
|
44
47
|
low: { theme: "dim", terminal: "bright-black" },
|
|
@@ -56,6 +59,7 @@ type GraphemeCell = { text: string; start: number; width: number };
|
|
|
56
59
|
type WorkingLineUi = {
|
|
57
60
|
setWorkingMessage(message?: string): void;
|
|
58
61
|
setWorkingIndicator(options?: { frames?: string[]; intervalMs?: number }): void;
|
|
62
|
+
setWorkingVisible?(visible: boolean): void;
|
|
59
63
|
};
|
|
60
64
|
|
|
61
65
|
type WorkingLineContext = {
|
|
@@ -66,6 +70,16 @@ type WorkingLineContext = {
|
|
|
66
70
|
|
|
67
71
|
type AgentDurationListener = (durationMs: number) => void;
|
|
68
72
|
|
|
73
|
+
export type WorkingLineMetricScheduler = {
|
|
74
|
+
setTimeout(callback: () => void, delayMs: number): unknown;
|
|
75
|
+
clearTimeout(handle: unknown): void;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const defaultMetricScheduler: WorkingLineMetricScheduler = {
|
|
79
|
+
setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
80
|
+
clearTimeout: (handle) => clearTimeout(handle as ReturnType<typeof setTimeout>),
|
|
81
|
+
};
|
|
82
|
+
|
|
69
83
|
/** One agent-duration clock shared by minimalist Editor and Working-line consumers. */
|
|
70
84
|
export class AgentDurationClock {
|
|
71
85
|
private startedAt: number | undefined;
|
|
@@ -136,20 +150,35 @@ export class AgentDurationClock {
|
|
|
136
150
|
}
|
|
137
151
|
}
|
|
138
152
|
|
|
139
|
-
|
|
153
|
+
// Creating an `Intl.Segmenter` per call is very expensive (ICU init), so reuse one instance.
|
|
154
|
+
let sharedGraphemeSegmenter: Intl.Segmenter | undefined;
|
|
155
|
+
let sharedGraphemeSegmenterResolved = false;
|
|
156
|
+
|
|
157
|
+
function getSharedGraphemeSegmenter(): Intl.Segmenter | undefined {
|
|
158
|
+
if (sharedGraphemeSegmenterResolved) return sharedGraphemeSegmenter;
|
|
159
|
+
sharedGraphemeSegmenterResolved = true;
|
|
140
160
|
try {
|
|
141
161
|
const Segmenter = Intl.Segmenter;
|
|
142
162
|
if (typeof Segmenter === "function") {
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
*[Symbol.iterator]() {
|
|
146
|
-
for (const part of segments) yield part.segment;
|
|
147
|
-
},
|
|
148
|
-
};
|
|
163
|
+
sharedGraphemeSegmenter = new Segmenter(undefined, { granularity: "grapheme" });
|
|
149
164
|
}
|
|
150
165
|
} catch {
|
|
151
|
-
|
|
166
|
+
sharedGraphemeSegmenter = undefined;
|
|
152
167
|
}
|
|
168
|
+
return sharedGraphemeSegmenter;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function segmentGraphemes(value: string): Iterable<string> {
|
|
172
|
+
const segmenter = getSharedGraphemeSegmenter();
|
|
173
|
+
if (segmenter !== undefined) {
|
|
174
|
+
const segments = segmenter.segment(value);
|
|
175
|
+
return {
|
|
176
|
+
*[Symbol.iterator]() {
|
|
177
|
+
for (const part of segments) yield part.segment;
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Without Intl.Segmenter, treat the complete value as one conservative grapheme.
|
|
153
182
|
return [value];
|
|
154
183
|
}
|
|
155
184
|
|
|
@@ -379,17 +408,6 @@ export function remapWorkingLineTextTick(
|
|
|
379
408
|
);
|
|
380
409
|
}
|
|
381
410
|
|
|
382
|
-
function styleForTier(colors: PolishedTuiColors, tier: Tier): ColorSpec | undefined {
|
|
383
|
-
switch (tier) {
|
|
384
|
-
case "low":
|
|
385
|
-
return colors.workingLineLow;
|
|
386
|
-
case "mid":
|
|
387
|
-
return colors.workingLineMid;
|
|
388
|
-
case "high":
|
|
389
|
-
return colors.workingLineHigh;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
|
|
393
411
|
/** Normalize only Working-line palette specs before they are repeated across generated frames. */
|
|
394
412
|
export function normalizeWorkingLineStyleSpec(value: ColorSpec | undefined): ColorSpec | undefined {
|
|
395
413
|
if (value === undefined) return undefined;
|
|
@@ -416,20 +434,26 @@ export function normalizeWorkingLineStyleSpec(value: ColorSpec | undefined): Col
|
|
|
416
434
|
return tokens.join(" ");
|
|
417
435
|
}
|
|
418
436
|
|
|
419
|
-
function
|
|
437
|
+
function workingLineTierRenderer(
|
|
420
438
|
theme: ThemeLike,
|
|
421
439
|
config: WorkingLineComponentConfig,
|
|
422
440
|
colors: PolishedTuiColors,
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
441
|
+
): (tier: Tier, text: string) => string {
|
|
442
|
+
// Palette validation is invariant within this build, but must not survive a
|
|
443
|
+
// metric/config/theme rebuild. Resolve lazily so unused tiers remain untouched.
|
|
444
|
+
const tierStyles = new Map<Tier, ColorSpec | undefined>();
|
|
445
|
+
return (tier, text) => {
|
|
446
|
+
if (!tierStyles.has(tier)) {
|
|
447
|
+
tierStyles.set(tier, normalizeWorkingLineStyleSpec(workingLineColor(config, colors, tier)));
|
|
448
|
+
}
|
|
449
|
+
return renderStyleForSourceOrFallback(
|
|
450
|
+
theme,
|
|
451
|
+
config.colorSource,
|
|
452
|
+
tierStyles.get(tier),
|
|
453
|
+
WORKING_LINE_FALLBACKS[tier],
|
|
454
|
+
text,
|
|
455
|
+
);
|
|
456
|
+
};
|
|
433
457
|
}
|
|
434
458
|
|
|
435
459
|
/** Resolve the fixed, nonanimated high-tier style used by persisted Turn summaries. */
|
|
@@ -457,7 +481,7 @@ export function snapshotWorkingLineHighStyle(
|
|
|
457
481
|
const rendered = renderWorkingLineHigh(
|
|
458
482
|
theme,
|
|
459
483
|
config.colorSource,
|
|
460
|
-
colors
|
|
484
|
+
workingLineColor(config, colors, "high"),
|
|
461
485
|
sentinel,
|
|
462
486
|
);
|
|
463
487
|
const position = rendered.indexOf(sentinel);
|
|
@@ -466,9 +490,7 @@ export function snapshotWorkingLineHighStyle(
|
|
|
466
490
|
}
|
|
467
491
|
|
|
468
492
|
function renderAnimatedText(
|
|
469
|
-
|
|
470
|
-
config: WorkingLineComponentConfig,
|
|
471
|
-
colors: PolishedTuiColors,
|
|
493
|
+
render: (tier: Tier, text: string) => string,
|
|
472
494
|
cells: GraphemeCell[],
|
|
473
495
|
width: number,
|
|
474
496
|
tick: number,
|
|
@@ -486,7 +508,7 @@ function renderAnimatedText(
|
|
|
486
508
|
if (previous?.tier === tier) previous.text += cell.text;
|
|
487
509
|
else runs.push({ tier, text: cell.text });
|
|
488
510
|
}
|
|
489
|
-
return runs.map((run) =>
|
|
511
|
+
return runs.map((run) => render(run.tier, run.text)).join("");
|
|
490
512
|
}
|
|
491
513
|
|
|
492
514
|
export type WorkingLineRuntimeSegments = {
|
|
@@ -495,6 +517,7 @@ export type WorkingLineRuntimeSegments = {
|
|
|
495
517
|
thought?: { durationMs: number; active: boolean };
|
|
496
518
|
tokens?: { input: number; output: number; outputApproximate?: boolean };
|
|
497
519
|
extensions?: readonly string[];
|
|
520
|
+
tokenRate?: string;
|
|
498
521
|
};
|
|
499
522
|
|
|
500
523
|
export type WorkingLineFrameState = {
|
|
@@ -596,6 +619,12 @@ function fitWorkingLineExtensionSegments(
|
|
|
596
619
|
|
|
597
620
|
export type ComposedWorkingLine = { message: string; row: string };
|
|
598
621
|
|
|
622
|
+
type PreparedWorkingLine = ComposedWorkingLine & {
|
|
623
|
+
spinnerWidth: number;
|
|
624
|
+
rowWidth: number;
|
|
625
|
+
rate?: { text: string; codeStart: number };
|
|
626
|
+
};
|
|
627
|
+
|
|
599
628
|
/** Validate and measure the fixed visible width shared by every frame in a preset. */
|
|
600
629
|
export function workingLineSpinnerWidth(spinnerId: WorkingLineComponentConfig["spinner"]): number {
|
|
601
630
|
const frames: readonly string[] = WORKING_LINE_SPINNERS[spinnerId].frames;
|
|
@@ -612,12 +641,27 @@ export function composeWorkingLineRow(
|
|
|
612
641
|
message: string,
|
|
613
642
|
runtime: WorkingLineRuntimeSegments = {},
|
|
614
643
|
): ComposedWorkingLine {
|
|
644
|
+
const composed = prepareWorkingLineRow(config, message, runtime);
|
|
645
|
+
return { message: composed.message, row: composed.row };
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
function prepareWorkingLineRow(
|
|
649
|
+
config: WorkingLineComponentConfig,
|
|
650
|
+
message: string,
|
|
651
|
+
runtime: WorkingLineRuntimeSegments,
|
|
652
|
+
): PreparedWorkingLine {
|
|
615
653
|
const normalized = normalizeWorkingLineMessage(message) || WORKING_LINE_FALLBACK_MESSAGE;
|
|
616
|
-
const
|
|
617
|
-
|
|
654
|
+
const spinnerWidth = workingLineSpinnerWidth(config.spinner);
|
|
655
|
+
const maximumRowCells = MAX_WORKING_LINE_FRAME_CELLS - spinnerWidth - 1;
|
|
618
656
|
const delimiter = " · ";
|
|
619
657
|
const tokens = config.segments.tokens ? formatWorkingLineTokens(runtime.tokens) : undefined;
|
|
620
|
-
const
|
|
658
|
+
const tokenRate =
|
|
659
|
+
config.segments.tokenRate && /^(?:(?:~)?[1-9]\d*|—) tok\/s$/.test(runtime.tokenRate ?? "")
|
|
660
|
+
? runtime.tokenRate
|
|
661
|
+
: undefined;
|
|
662
|
+
const tokenWidth =
|
|
663
|
+
(tokens ? visibleWidth(delimiter) + visibleWidth(tokens) : 0) +
|
|
664
|
+
(tokenRate ? visibleWidth(delimiter) + visibleWidth(tokenRate) : 0);
|
|
621
665
|
const extensions = fitWorkingLineExtensionSegments(
|
|
622
666
|
runtime.extensions ?? [],
|
|
623
667
|
Math.max(0, maximumRowCells - tokenWidth - 1),
|
|
@@ -661,8 +705,22 @@ export function composeWorkingLineRow(
|
|
|
661
705
|
if (accepted.has("elapsed") && elapsed) segments.push(elapsed);
|
|
662
706
|
if (accepted.has("thought") && thought) segments.push(thought);
|
|
663
707
|
if (tokens) segments.push(tokens);
|
|
708
|
+
const beforeRate = segments.filter(Boolean).join(delimiter);
|
|
709
|
+
if (tokenRate) segments.push(tokenRate);
|
|
664
710
|
segments.push(...extensions);
|
|
665
|
-
|
|
711
|
+
const row = segments.filter(Boolean).join(delimiter);
|
|
712
|
+
return {
|
|
713
|
+
message: normalized,
|
|
714
|
+
row,
|
|
715
|
+
spinnerWidth,
|
|
716
|
+
rowWidth: visibleWidth(row),
|
|
717
|
+
rate: tokenRate
|
|
718
|
+
? {
|
|
719
|
+
text: tokenRate,
|
|
720
|
+
codeStart: beforeRate.length + delimiter.length,
|
|
721
|
+
}
|
|
722
|
+
: undefined,
|
|
723
|
+
};
|
|
666
724
|
}
|
|
667
725
|
|
|
668
726
|
type ScheduleDefinition = {
|
|
@@ -756,12 +814,36 @@ function bestFallbackFrameCount(
|
|
|
756
814
|
return best;
|
|
757
815
|
}
|
|
758
816
|
|
|
817
|
+
function spinnerRowCells(
|
|
818
|
+
frames: readonly string[],
|
|
819
|
+
row: string,
|
|
820
|
+
spinnerWidth: number,
|
|
821
|
+
): Map<string, GraphemeCell[]> {
|
|
822
|
+
const byGlyph = new Map<string, GraphemeCell[]>();
|
|
823
|
+
// Keep the separator attached to the row: a leading combining mark can join that space.
|
|
824
|
+
// Without Intl.Segmenter, preserve the conservative single-grapheme whole-frame fallback.
|
|
825
|
+
const suffix = getSharedGraphemeSegmenter()
|
|
826
|
+
? graphemeCells(` ${row}`).cells.map((cell) => ({
|
|
827
|
+
...cell,
|
|
828
|
+
start: cell.start + spinnerWidth,
|
|
829
|
+
}))
|
|
830
|
+
: undefined;
|
|
831
|
+
for (const glyph of frames) {
|
|
832
|
+
if (byGlyph.has(glyph)) continue;
|
|
833
|
+
byGlyph.set(
|
|
834
|
+
glyph,
|
|
835
|
+
suffix ? [...graphemeCells(glyph).cells, ...suffix] : graphemeCells(`${glyph} ${row}`).cells,
|
|
836
|
+
);
|
|
837
|
+
}
|
|
838
|
+
return byGlyph;
|
|
839
|
+
}
|
|
840
|
+
|
|
759
841
|
function renderWorkingLineSchedule(
|
|
760
842
|
definition: ScheduleDefinition,
|
|
761
843
|
config: WorkingLineComponentConfig,
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
844
|
+
render: (tier: Tier, text: string) => string,
|
|
845
|
+
rowCells: GraphemeCell[],
|
|
846
|
+
spinnerCells: Map<string, GraphemeCell[]> | undefined,
|
|
765
847
|
width: number,
|
|
766
848
|
textCycle: number,
|
|
767
849
|
spinnerStartTick: number,
|
|
@@ -773,6 +855,31 @@ function renderWorkingLineSchedule(
|
|
|
773
855
|
const frameStates: WorkingLineFrameState[] = [];
|
|
774
856
|
let codeUnits = 0;
|
|
775
857
|
const scheduleOrigin = definition.stateAt(scheduleStartFrame);
|
|
858
|
+
// Many frames of the schedule share the same textTick/spinnerTick. Render each
|
|
859
|
+
// distinct value once and reuse — this dominates on slow CPUs (e.g. a Pi).
|
|
860
|
+
const textRenderCache = new Map<number, string>();
|
|
861
|
+
const renderTextForTick = (tick: number): string => {
|
|
862
|
+
let cachedText = textRenderCache.get(tick);
|
|
863
|
+
if (cachedText === undefined) {
|
|
864
|
+
cachedText = renderAnimatedText(render, rowCells, width, tick, config.textAnimation);
|
|
865
|
+
textRenderCache.set(tick, cachedText);
|
|
866
|
+
}
|
|
867
|
+
return cachedText;
|
|
868
|
+
};
|
|
869
|
+
const spinnerRenderCache = new Map<number, string>();
|
|
870
|
+
const renderSpinnerForTick = (tick: number): string => {
|
|
871
|
+
// Key by the glyph index, not the raw tick: the glyph only repeats every
|
|
872
|
+
// `spinner.frames.length` ticks, so keying raw under-caches badly.
|
|
873
|
+
const frameCount = spinner.frames.length;
|
|
874
|
+
const index = ((tick % frameCount) + frameCount) % frameCount;
|
|
875
|
+
let cachedSpinner = spinnerRenderCache.get(index);
|
|
876
|
+
if (cachedSpinner === undefined) {
|
|
877
|
+
const glyph = spinner.frames[index] ?? spinner.frames[0];
|
|
878
|
+
cachedSpinner = render("high", glyph);
|
|
879
|
+
spinnerRenderCache.set(index, cachedSpinner);
|
|
880
|
+
}
|
|
881
|
+
return cachedSpinner;
|
|
882
|
+
};
|
|
776
883
|
for (let index = 0; index < definition.frameCount; index += 1) {
|
|
777
884
|
const scheduled = definition.stateAt(scheduleStartFrame + index);
|
|
778
885
|
const state = {
|
|
@@ -786,23 +893,13 @@ function renderWorkingLineSchedule(
|
|
|
786
893
|
spinner.frames[state.spinnerTick % spinner.frames.length] ?? spinner.frames[0];
|
|
787
894
|
const frame = config.animateSpinnerColor
|
|
788
895
|
? `${renderAnimatedText(
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
colors,
|
|
792
|
-
graphemeCells(`${spinnerGlyph} ${row}`).cells,
|
|
896
|
+
render,
|
|
897
|
+
spinnerCells?.get(spinnerGlyph) ?? rowCells,
|
|
793
898
|
width,
|
|
794
899
|
state.textTick,
|
|
795
900
|
config.textAnimation,
|
|
796
901
|
)}${SGR_RESET}`
|
|
797
|
-
: `${
|
|
798
|
-
theme,
|
|
799
|
-
config,
|
|
800
|
-
colors,
|
|
801
|
-
graphemeCells(row).cells,
|
|
802
|
-
width,
|
|
803
|
-
state.textTick,
|
|
804
|
-
config.textAnimation,
|
|
805
|
-
)}${SGR_RESET}`;
|
|
902
|
+
: `${renderSpinnerForTick(state.spinnerTick)} ${renderTextForTick(state.textTick)}${SGR_RESET}`;
|
|
806
903
|
codeUnits += frame.length;
|
|
807
904
|
if (codeUnits > MAX_WORKING_LINE_FRAME_CODE_UNITS) return undefined;
|
|
808
905
|
frames.push(frame);
|
|
@@ -821,11 +918,29 @@ export function buildWorkingLineFrames(
|
|
|
821
918
|
textStartTick = spinnerStartTick,
|
|
822
919
|
scheduleStartFrame = 0,
|
|
823
920
|
): WorkingLineFrames {
|
|
824
|
-
|
|
921
|
+
return buildPreparedWorkingLineFrames(
|
|
922
|
+
config,
|
|
923
|
+
colors,
|
|
924
|
+
theme,
|
|
925
|
+
prepareWorkingLineRow(config, message, runtime),
|
|
926
|
+
spinnerStartTick,
|
|
927
|
+
textStartTick,
|
|
928
|
+
scheduleStartFrame,
|
|
929
|
+
);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
function buildPreparedWorkingLineFrames(
|
|
933
|
+
config: WorkingLineComponentConfig,
|
|
934
|
+
colors: PolishedTuiColors,
|
|
935
|
+
theme: ThemeLike,
|
|
936
|
+
composed: PreparedWorkingLine,
|
|
937
|
+
spinnerStartTick: number,
|
|
938
|
+
textStartTick: number,
|
|
939
|
+
scheduleStartFrame: number,
|
|
940
|
+
): WorkingLineFrames {
|
|
825
941
|
const spinner = WORKING_LINE_SPINNERS[config.spinner];
|
|
826
|
-
const spinnerWidth =
|
|
827
|
-
const
|
|
828
|
-
const frameWidth = spinnerWidth + visibleWidth(" ") + rowWidth;
|
|
942
|
+
const { spinnerWidth, rowWidth } = composed;
|
|
943
|
+
const frameWidth = spinnerWidth + 1 + rowWidth;
|
|
829
944
|
if (frameWidth > MAX_WORKING_LINE_FRAME_CELLS) {
|
|
830
945
|
throw new Error("Working-line row exceeds its visible-width cap");
|
|
831
946
|
}
|
|
@@ -833,11 +948,23 @@ export function buildWorkingLineFrames(
|
|
|
833
948
|
? Math.max(0, Math.floor(spinnerStartTick))
|
|
834
949
|
: 0;
|
|
835
950
|
const animatedTextWidth = config.animateSpinnerColor ? frameWidth : rowWidth;
|
|
836
|
-
const textOrigin = config.animateSpinnerColor ? 0 : spinnerWidth +
|
|
951
|
+
const textOrigin = config.animateSpinnerColor ? 0 : spinnerWidth + 1;
|
|
837
952
|
const textCycle = textPeriod(config.textAnimation, animatedTextWidth);
|
|
838
953
|
const textPhase = normalizedPhaseTick(textStartTick, textCycle);
|
|
954
|
+
const render = workingLineTierRenderer(theme, config, colors);
|
|
839
955
|
|
|
840
956
|
if (config.textAnimation === "disabled") {
|
|
957
|
+
const rateStyle = normalizeWorkingLineStyleSpec(workingLineColor(config, colors, "tokenRate"));
|
|
958
|
+
const renderRate = (text: string) =>
|
|
959
|
+
rateStyle === undefined
|
|
960
|
+
? render("mid", text)
|
|
961
|
+
: renderStyleForSourceOrFallback(
|
|
962
|
+
theme,
|
|
963
|
+
config.colorSource,
|
|
964
|
+
rateStyle,
|
|
965
|
+
WORKING_LINE_FALLBACKS.mid,
|
|
966
|
+
text,
|
|
967
|
+
);
|
|
841
968
|
const frameStates = Array.from({ length: spinner.frames.length }, (_, index) => ({
|
|
842
969
|
spinnerTick: spinnerPhase + index,
|
|
843
970
|
textTick: 0,
|
|
@@ -845,15 +972,17 @@ export function buildWorkingLineFrames(
|
|
|
845
972
|
let codeUnits = 0;
|
|
846
973
|
const frames = frameStates.map((state) => {
|
|
847
974
|
const glyph = spinner.frames[state.spinnerTick % spinner.frames.length] ?? spinner.frames[0];
|
|
848
|
-
const
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
975
|
+
const row = composed.rate
|
|
976
|
+
? (() => {
|
|
977
|
+
const start = composed.rate.codeStart;
|
|
978
|
+
return (
|
|
979
|
+
render("mid", `${glyph} ${composed.row.slice(0, start)}`) +
|
|
980
|
+
renderRate(composed.rate.text) +
|
|
981
|
+
render("mid", composed.row.slice(start + composed.rate.text.length))
|
|
982
|
+
);
|
|
983
|
+
})()
|
|
984
|
+
: render("mid", `${glyph} ${composed.row}`);
|
|
985
|
+
const frame = `${row}${SGR_RESET}`;
|
|
857
986
|
codeUnits += frame.length;
|
|
858
987
|
if (codeUnits > MAX_WORKING_LINE_FRAME_CODE_UNITS)
|
|
859
988
|
throw new Error("Working-line animation exceeds its memory cap");
|
|
@@ -880,6 +1009,11 @@ export function buildWorkingLineFrames(
|
|
|
880
1009
|
};
|
|
881
1010
|
}
|
|
882
1011
|
|
|
1012
|
+
// These cells are invariant even if the memory cap requires retrying a shorter schedule.
|
|
1013
|
+
const rowCells = config.animateSpinnerColor ? [] : graphemeCells(composed.row).cells;
|
|
1014
|
+
const spinnerCells = config.animateSpinnerColor
|
|
1015
|
+
? spinnerRowCells(spinner.frames, composed.row, spinnerWidth)
|
|
1016
|
+
: undefined;
|
|
883
1017
|
const exact = exactSchedule(
|
|
884
1018
|
config.spinnerIntervalMs,
|
|
885
1019
|
config.textIntervalMs,
|
|
@@ -890,9 +1024,9 @@ export function buildWorkingLineFrames(
|
|
|
890
1024
|
const rendered = renderWorkingLineSchedule(
|
|
891
1025
|
exact,
|
|
892
1026
|
config,
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
1027
|
+
render,
|
|
1028
|
+
rowCells,
|
|
1029
|
+
spinnerCells,
|
|
896
1030
|
animatedTextWidth,
|
|
897
1031
|
textCycle,
|
|
898
1032
|
spinnerPhase,
|
|
@@ -933,9 +1067,9 @@ export function buildWorkingLineFrames(
|
|
|
933
1067
|
const rendered = renderWorkingLineSchedule(
|
|
934
1068
|
fallback,
|
|
935
1069
|
config,
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
1070
|
+
render,
|
|
1071
|
+
rowCells,
|
|
1072
|
+
spinnerCells,
|
|
939
1073
|
animatedTextWidth,
|
|
940
1074
|
textCycle,
|
|
941
1075
|
spinnerPhase,
|
|
@@ -967,6 +1101,7 @@ export function buildWorkingLineSpinnerFrames(
|
|
|
967
1101
|
): { frames: string[]; frameStates: WorkingLineFrameState[]; intervalMs: number } {
|
|
968
1102
|
const spinner = WORKING_LINE_SPINNERS[config.spinner];
|
|
969
1103
|
workingLineSpinnerWidth(config.spinner);
|
|
1104
|
+
const render = workingLineTierRenderer(theme, config, colors);
|
|
970
1105
|
const phase = Number.isFinite(startTick) ? Math.max(0, Math.floor(startTick)) : 0;
|
|
971
1106
|
const frameStates = Array.from({ length: spinner.frames.length }, (_, index) => ({
|
|
972
1107
|
spinnerTick: phase + index,
|
|
@@ -974,7 +1109,7 @@ export function buildWorkingLineSpinnerFrames(
|
|
|
974
1109
|
}));
|
|
975
1110
|
const frames = frameStates.map((state) => {
|
|
976
1111
|
const glyph = spinner.frames[state.spinnerTick % spinner.frames.length] ?? spinner.frames[0];
|
|
977
|
-
return `${
|
|
1112
|
+
return `${render("high", glyph)}${SGR_RESET}`;
|
|
978
1113
|
});
|
|
979
1114
|
return { frames, frameStates, intervalMs: config.spinnerIntervalMs };
|
|
980
1115
|
}
|
|
@@ -997,6 +1132,7 @@ export function buildWorkingLinePreviewFrames(
|
|
|
997
1132
|
elapsedMs: 62_000,
|
|
998
1133
|
thought: { durationMs: 10_000, active: true },
|
|
999
1134
|
tokens: { input: 1234, output: 56 },
|
|
1135
|
+
tokenRate: "~48 tok/s",
|
|
1000
1136
|
},
|
|
1001
1137
|
spinnerStartTick,
|
|
1002
1138
|
textStartTick,
|
|
@@ -1053,11 +1189,19 @@ export class WorkingLineController {
|
|
|
1053
1189
|
private ownsIndicator = false;
|
|
1054
1190
|
private ownsMessage = false;
|
|
1055
1191
|
private agentActive = false;
|
|
1192
|
+
private animationTimer?: ReturnType<typeof setInterval>;
|
|
1193
|
+
private animationIntervalMs: number | undefined;
|
|
1194
|
+
private hiddenWorkingVisible = false;
|
|
1195
|
+
private restoreWorkingVisible: (() => void) | undefined;
|
|
1196
|
+
private installedUi: WorkingLineUi | undefined;
|
|
1197
|
+
private placementContext: WorkingLineContext | undefined;
|
|
1198
|
+
private requestRender: () => void = () => {};
|
|
1056
1199
|
private selectedMessage: string | undefined;
|
|
1057
1200
|
private frameKey: string | undefined;
|
|
1058
1201
|
private installedPhase: InstalledAnimationPhase | undefined;
|
|
1059
1202
|
private installedIndicatorOptions: WorkingIndicatorOptions | undefined;
|
|
1060
1203
|
private tokens: WorkingLineRuntimeSegments["tokens"];
|
|
1204
|
+
private tokenRate = "";
|
|
1061
1205
|
private thought: WorkingLineRuntimeSegments["thought"];
|
|
1062
1206
|
private extensionSegments: readonly string[] = [];
|
|
1063
1207
|
private extensionSegmentsDirty = false;
|
|
@@ -1066,6 +1210,11 @@ export class WorkingLineController {
|
|
|
1066
1210
|
private elapsedUpdatesContext: WorkingLineContext | undefined;
|
|
1067
1211
|
private elapsedUpdatesGeneration = 0;
|
|
1068
1212
|
private stopElapsedUpdates: (() => void) | undefined;
|
|
1213
|
+
private lastMetricWriteAt: number | undefined;
|
|
1214
|
+
private metricUpdateScheduled = false;
|
|
1215
|
+
private metricUpdateHandle: unknown;
|
|
1216
|
+
private metricUpdateContext: WorkingLineContext | undefined;
|
|
1217
|
+
private metricUpdateGeneration = 0;
|
|
1069
1218
|
|
|
1070
1219
|
constructor(
|
|
1071
1220
|
private readonly getConfig: () => ZentuiConfig,
|
|
@@ -1075,9 +1224,12 @@ export class WorkingLineController {
|
|
|
1075
1224
|
private readonly now: () => number = Date.now,
|
|
1076
1225
|
private readonly getThought: () => WorkingLineRuntimeSegments["thought"] = () => this.thought,
|
|
1077
1226
|
private readonly onUnavailable: () => void = () => {},
|
|
1227
|
+
private readonly metricScheduler: WorkingLineMetricScheduler = defaultMetricScheduler,
|
|
1228
|
+
private readonly canEmbedBorder: (ctx: WorkingLineContext) => boolean = () => false,
|
|
1078
1229
|
) {}
|
|
1079
1230
|
|
|
1080
1231
|
startSession(ctx: WorkingLineContext): WorkingLineReconcileResult {
|
|
1232
|
+
this.reset(ctx);
|
|
1081
1233
|
this.clearRuntime();
|
|
1082
1234
|
this.selectedMessage = undefined;
|
|
1083
1235
|
this.installedPhase = undefined;
|
|
@@ -1093,10 +1245,12 @@ export class WorkingLineController {
|
|
|
1093
1245
|
// stored indicator so the subsequently constructed Loader begins at intended frame zero.
|
|
1094
1246
|
this.install(ctx, true, true);
|
|
1095
1247
|
}
|
|
1248
|
+
this.reconcilePlacement(ctx);
|
|
1096
1249
|
this.reconcileElapsedUpdates(ctx);
|
|
1097
1250
|
}
|
|
1098
1251
|
|
|
1099
1252
|
startTurn(ctx: WorkingLineContext): WorkingLineReconcileResult {
|
|
1253
|
+
this.lastMetricWriteAt = undefined;
|
|
1100
1254
|
const config = this.getConfig().components.workingLine;
|
|
1101
1255
|
this.activeTools.clear();
|
|
1102
1256
|
const selectedMessage = selectWorkingLineMessage(config, this.random);
|
|
@@ -1114,12 +1268,21 @@ export class WorkingLineController {
|
|
|
1114
1268
|
): void {
|
|
1115
1269
|
this.tokens = tokens;
|
|
1116
1270
|
this.thought = thought;
|
|
1117
|
-
this.
|
|
1271
|
+
this.scheduleMetricIndicator(ctx);
|
|
1118
1272
|
this.reconcileElapsedUpdates(ctx);
|
|
1119
1273
|
}
|
|
1120
1274
|
|
|
1275
|
+
updateTokenRate(text: string, ctx: WorkingLineContext): void {
|
|
1276
|
+
if (text === this.tokenRate) return;
|
|
1277
|
+
this.tokenRate = text;
|
|
1278
|
+
this.scheduleMetricIndicator(ctx);
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1121
1281
|
updateTokens(tokens: WorkingLineRuntimeSegments["tokens"], ctx: WorkingLineContext): void {
|
|
1122
|
-
this.
|
|
1282
|
+
this.tokens = tokens;
|
|
1283
|
+
this.thought = this.getThought();
|
|
1284
|
+
this.updateIndicator(ctx);
|
|
1285
|
+
this.reconcileElapsedUpdates(ctx);
|
|
1123
1286
|
}
|
|
1124
1287
|
|
|
1125
1288
|
updateExtensionSegments(segments: readonly string[], ctx: WorkingLineContext): boolean {
|
|
@@ -1153,12 +1316,15 @@ export class WorkingLineController {
|
|
|
1153
1316
|
|
|
1154
1317
|
finishAgent(ctx: WorkingLineContext): void {
|
|
1155
1318
|
this.agentActive = false;
|
|
1319
|
+
this.stopAnimationTicks();
|
|
1156
1320
|
this.activeTools.clear();
|
|
1157
1321
|
this.deactivateElapsedUpdates();
|
|
1158
1322
|
this.updateIndicator(ctx);
|
|
1323
|
+
this.releaseWorkingVisibility();
|
|
1324
|
+
this.requestRender();
|
|
1159
1325
|
}
|
|
1160
1326
|
|
|
1161
|
-
|
|
1327
|
+
flushMetrics(
|
|
1162
1328
|
tokens: WorkingLineRuntimeSegments["tokens"],
|
|
1163
1329
|
thought: WorkingLineRuntimeSegments["thought"],
|
|
1164
1330
|
ctx: WorkingLineContext,
|
|
@@ -1169,6 +1335,14 @@ export class WorkingLineController {
|
|
|
1169
1335
|
this.reconcileElapsedUpdates(ctx);
|
|
1170
1336
|
}
|
|
1171
1337
|
|
|
1338
|
+
settle(
|
|
1339
|
+
tokens: WorkingLineRuntimeSegments["tokens"],
|
|
1340
|
+
thought: WorkingLineRuntimeSegments["thought"],
|
|
1341
|
+
ctx: WorkingLineContext,
|
|
1342
|
+
): void {
|
|
1343
|
+
this.flushMetrics(tokens, thought, ctx);
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1172
1346
|
reconcile(ctx: WorkingLineContext): WorkingLineReconcileResult {
|
|
1173
1347
|
const config = this.getConfig().components.workingLine;
|
|
1174
1348
|
if (!config.enabled) {
|
|
@@ -1194,7 +1368,27 @@ export class WorkingLineController {
|
|
|
1194
1368
|
return this.selectedMessage;
|
|
1195
1369
|
}
|
|
1196
1370
|
|
|
1197
|
-
|
|
1371
|
+
setRequestRender(requestRender: () => void): void {
|
|
1372
|
+
this.requestRender = requestRender;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
/** Only the currently capable, owned border renderer may consume this frame. */
|
|
1376
|
+
currentWorkingLineFrame(): string | undefined {
|
|
1377
|
+
if (!this.placementContext || !this.reconcilePlacement(this.placementContext)) return undefined;
|
|
1378
|
+
const frames = this.installedIndicatorOptions?.frames;
|
|
1379
|
+
if (!frames || frames.length === 0) {
|
|
1380
|
+
return this.selectedMessage;
|
|
1381
|
+
}
|
|
1382
|
+
if (!this.installedPhase || this.installedPhase.frameStates.length === 0) {
|
|
1383
|
+
return frames[0];
|
|
1384
|
+
}
|
|
1385
|
+
const interval = this.installedPhase.intervalMs > 0 ? this.installedPhase.intervalMs : 100;
|
|
1386
|
+
const elapsedMs = Math.max(0, this.now() - this.installedPhase.frameEpochMs);
|
|
1387
|
+
const frameIndex = Math.max(0, Math.floor(elapsedMs / interval)) % frames.length;
|
|
1388
|
+
return frames[frameIndex] ?? this.selectedMessage;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
/** Whether this controller owns the host's available Working-row surfaces. */
|
|
1198
1392
|
isAvailable(): boolean {
|
|
1199
1393
|
return (
|
|
1200
1394
|
this.getConfig().components.workingLine.enabled &&
|
|
@@ -1210,25 +1404,25 @@ export class WorkingLineController {
|
|
|
1210
1404
|
rebasePhase = false,
|
|
1211
1405
|
selectedMessage?: string,
|
|
1212
1406
|
): WorkingLineReconcileResult {
|
|
1407
|
+
this.cancelMetricIndicator();
|
|
1213
1408
|
const ui = workingLineUi(ctx);
|
|
1409
|
+
if (this.installedUi && this.installedUi !== ui) this.reset(ctx);
|
|
1214
1410
|
if (!ui) {
|
|
1215
|
-
this.
|
|
1216
|
-
this.deactivateElapsedUpdates();
|
|
1411
|
+
this.reset(ctx);
|
|
1217
1412
|
this.invalidateUnavailableExtensionSegments();
|
|
1218
1413
|
return { applied: false, reason: "Working line requires a newer Pi TUI" };
|
|
1219
1414
|
}
|
|
1415
|
+
this.installedUi = ui;
|
|
1416
|
+
this.placementContext = ctx;
|
|
1220
1417
|
const rootConfig = this.getConfig();
|
|
1221
1418
|
const config = rootConfig.components.workingLine;
|
|
1222
1419
|
const nextMessage =
|
|
1223
1420
|
selectedMessage ?? this.selectedMessage ?? effectiveWorkingLineMessages(config)[0];
|
|
1224
1421
|
const snapshot = this.installationSnapshot();
|
|
1225
1422
|
try {
|
|
1226
|
-
if (!this.ownsMessage) {
|
|
1227
|
-
this.ownsMessage = true;
|
|
1228
|
-
ui.setWorkingMessage("");
|
|
1229
|
-
}
|
|
1230
1423
|
this.applyIndicator(ui, rootConfig, nextMessage, forceIndicator, rebasePhase);
|
|
1231
1424
|
this.selectedMessage = nextMessage;
|
|
1425
|
+
this.reconcilePlacement(ctx, true);
|
|
1232
1426
|
this.reconcileElapsedUpdates(ctx);
|
|
1233
1427
|
return { applied: true };
|
|
1234
1428
|
} catch {
|
|
@@ -1237,27 +1431,27 @@ export class WorkingLineController {
|
|
|
1237
1431
|
}
|
|
1238
1432
|
}
|
|
1239
1433
|
|
|
1240
|
-
private makeFrameKey(rootConfig: ZentuiConfig,
|
|
1434
|
+
private makeFrameKey(rootConfig: ZentuiConfig, row: string): string {
|
|
1241
1435
|
const config = rootConfig.components.workingLine;
|
|
1242
|
-
const { row } = composeWorkingLineRow(
|
|
1243
|
-
config,
|
|
1244
|
-
selectedMessage ?? WORKING_LINE_FALLBACK_MESSAGE,
|
|
1245
|
-
this.runtimeSegments(),
|
|
1246
|
-
);
|
|
1247
1436
|
return JSON.stringify([
|
|
1248
1437
|
"owned",
|
|
1249
1438
|
config.spinner,
|
|
1250
1439
|
config.spinnerIntervalMs,
|
|
1251
1440
|
...(config.textAnimation === "disabled"
|
|
1252
|
-
? [
|
|
1441
|
+
? [
|
|
1442
|
+
config.textAnimation,
|
|
1443
|
+
config.colorSource,
|
|
1444
|
+
workingLineColor(config, rootConfig.colors, "mid"),
|
|
1445
|
+
]
|
|
1253
1446
|
: [
|
|
1254
1447
|
config.textIntervalMs,
|
|
1255
1448
|
config.textAnimation,
|
|
1256
1449
|
config.animateSpinnerColor,
|
|
1257
1450
|
config.colorSource,
|
|
1258
|
-
rootConfig.colors
|
|
1259
|
-
rootConfig.colors
|
|
1260
|
-
rootConfig.colors
|
|
1451
|
+
workingLineColor(config, rootConfig.colors, "low"),
|
|
1452
|
+
workingLineColor(config, rootConfig.colors, "mid"),
|
|
1453
|
+
workingLineColor(config, rootConfig.colors, "high"),
|
|
1454
|
+
workingLineColor(config, rootConfig.colors, "tokenRate"),
|
|
1261
1455
|
]),
|
|
1262
1456
|
row,
|
|
1263
1457
|
]);
|
|
@@ -1270,6 +1464,7 @@ export class WorkingLineController {
|
|
|
1270
1464
|
elapsedMs: this.agentActive ? this.durationClock.elapsedMs() : undefined,
|
|
1271
1465
|
thought,
|
|
1272
1466
|
tokens: this.tokens,
|
|
1467
|
+
tokenRate: this.agentActive ? this.tokenRate : "",
|
|
1273
1468
|
extensions: this.extensionSegments,
|
|
1274
1469
|
};
|
|
1275
1470
|
}
|
|
@@ -1281,12 +1476,21 @@ export class WorkingLineController {
|
|
|
1281
1476
|
force = false,
|
|
1282
1477
|
rebase = false,
|
|
1283
1478
|
): void {
|
|
1284
|
-
|
|
1479
|
+
// Pi stores message separately from indicator frames. Reassert even when the row
|
|
1480
|
+
// is unchanged, without replacing cached frames or restarting Loader animation.
|
|
1481
|
+
this.ownsMessage = true;
|
|
1482
|
+
ui.setWorkingMessage("");
|
|
1483
|
+
const config = rootConfig.components.workingLine;
|
|
1484
|
+
const composed = prepareWorkingLineRow(
|
|
1485
|
+
config,
|
|
1486
|
+
selectedMessage ?? WORKING_LINE_FALLBACK_MESSAGE,
|
|
1487
|
+
this.runtimeSegments(),
|
|
1488
|
+
);
|
|
1489
|
+
const key = this.makeFrameKey(rootConfig, composed.row);
|
|
1285
1490
|
if (!force && this.installed && this.frameKey === key) {
|
|
1286
1491
|
this.extensionSegmentsDirty = false;
|
|
1287
1492
|
return;
|
|
1288
1493
|
}
|
|
1289
|
-
const config = rootConfig.components.workingLine;
|
|
1290
1494
|
const sampledAtMs = this.now();
|
|
1291
1495
|
let spinnerTick = 0;
|
|
1292
1496
|
let spatial: TextSpatialPhase | undefined;
|
|
@@ -1308,16 +1512,11 @@ export class WorkingLineController {
|
|
|
1308
1512
|
sampled?.textTick ?? 0,
|
|
1309
1513
|
);
|
|
1310
1514
|
}
|
|
1311
|
-
const
|
|
1312
|
-
const runtime = this.runtimeSegments();
|
|
1313
|
-
const composed = composeWorkingLineRow(config, message, runtime);
|
|
1314
|
-
const spinnerWidth = workingLineSpinnerWidth(config.spinner);
|
|
1515
|
+
const { spinnerWidth, rowWidth } = composed;
|
|
1315
1516
|
const textWidth =
|
|
1316
|
-
config.textAnimation
|
|
1317
|
-
? spinnerWidth + 1 +
|
|
1318
|
-
:
|
|
1319
|
-
? spinnerWidth + 1 + visibleWidth(composed.row)
|
|
1320
|
-
: visibleWidth(composed.row);
|
|
1517
|
+
config.animateSpinnerColor || config.textAnimation === "disabled"
|
|
1518
|
+
? spinnerWidth + 1 + rowWidth
|
|
1519
|
+
: rowWidth;
|
|
1321
1520
|
const textOrigin =
|
|
1322
1521
|
config.textAnimation !== "disabled" && !config.animateSpinnerColor ? spinnerWidth + 1 : 0;
|
|
1323
1522
|
const relativeSpatial = spatial
|
|
@@ -1327,12 +1526,11 @@ export class WorkingLineController {
|
|
|
1327
1526
|
}
|
|
1328
1527
|
: undefined;
|
|
1329
1528
|
const textTick = textTickForSpatialPhase(config.textAnimation, textWidth, relativeSpatial);
|
|
1330
|
-
const generated =
|
|
1529
|
+
const generated = buildPreparedWorkingLineFrames(
|
|
1331
1530
|
config,
|
|
1332
1531
|
rootConfig.colors,
|
|
1333
1532
|
this.getTheme(),
|
|
1334
|
-
|
|
1335
|
-
runtime,
|
|
1533
|
+
composed,
|
|
1336
1534
|
spinnerTick,
|
|
1337
1535
|
textTick,
|
|
1338
1536
|
scheduleStartFrame,
|
|
@@ -1361,13 +1559,24 @@ export class WorkingLineController {
|
|
|
1361
1559
|
}
|
|
1362
1560
|
|
|
1363
1561
|
private updateIndicator(ctx: WorkingLineContext): boolean {
|
|
1562
|
+
this.cancelMetricIndicator();
|
|
1364
1563
|
const rootConfig = this.getConfig();
|
|
1365
|
-
if (!rootConfig.components.workingLine.enabled
|
|
1564
|
+
if (!rootConfig.components.workingLine.enabled) {
|
|
1565
|
+
this.reset(ctx);
|
|
1566
|
+
return false;
|
|
1567
|
+
}
|
|
1366
1568
|
const ui = workingLineUi(ctx);
|
|
1367
|
-
if (!ui)
|
|
1569
|
+
if (!ui || this.installedUi !== ui) {
|
|
1570
|
+
this.reset(ctx);
|
|
1571
|
+
this.invalidateUnavailableExtensionSegments();
|
|
1572
|
+
return false;
|
|
1573
|
+
}
|
|
1574
|
+
if (!this.installed) return false;
|
|
1575
|
+
this.placementContext = ctx;
|
|
1368
1576
|
const snapshot = this.installationSnapshot();
|
|
1369
1577
|
try {
|
|
1370
1578
|
this.applyIndicator(ui, rootConfig);
|
|
1579
|
+
this.reconcilePlacement(ctx, true);
|
|
1371
1580
|
return !this.extensionSegmentsDirty;
|
|
1372
1581
|
} catch {
|
|
1373
1582
|
// A transient last-writer/public-API failure must not break the agent turn.
|
|
@@ -1376,6 +1585,159 @@ export class WorkingLineController {
|
|
|
1376
1585
|
}
|
|
1377
1586
|
}
|
|
1378
1587
|
|
|
1588
|
+
private scheduleMetricIndicator(ctx: WorkingLineContext): void {
|
|
1589
|
+
const config = this.getConfig().components.workingLine;
|
|
1590
|
+
if (!config.enabled || !this.installed) return;
|
|
1591
|
+
this.metricUpdateContext = ctx;
|
|
1592
|
+
const sampledAt = this.now();
|
|
1593
|
+
const elapsed =
|
|
1594
|
+
this.lastMetricWriteAt === undefined
|
|
1595
|
+
? Number.POSITIVE_INFINITY
|
|
1596
|
+
: Math.max(0, sampledAt - this.lastMetricWriteAt);
|
|
1597
|
+
if (elapsed >= WORKING_LINE_METRIC_UPDATE_INTERVAL_MS) {
|
|
1598
|
+
this.updateIndicator(ctx);
|
|
1599
|
+
this.lastMetricWriteAt = sampledAt;
|
|
1600
|
+
return;
|
|
1601
|
+
}
|
|
1602
|
+
if (this.metricUpdateScheduled) return;
|
|
1603
|
+
this.metricUpdateScheduled = true;
|
|
1604
|
+
const generation = ++this.metricUpdateGeneration;
|
|
1605
|
+
this.metricUpdateHandle = this.metricScheduler.setTimeout(
|
|
1606
|
+
() => {
|
|
1607
|
+
if (!this.metricUpdateScheduled || generation !== this.metricUpdateGeneration) return;
|
|
1608
|
+
this.metricUpdateScheduled = false;
|
|
1609
|
+
this.metricUpdateHandle = undefined;
|
|
1610
|
+
const latest = this.metricUpdateContext;
|
|
1611
|
+
this.metricUpdateContext = undefined;
|
|
1612
|
+
if (latest) {
|
|
1613
|
+
this.updateIndicator(latest);
|
|
1614
|
+
this.lastMetricWriteAt = this.now();
|
|
1615
|
+
}
|
|
1616
|
+
},
|
|
1617
|
+
Math.max(0, WORKING_LINE_METRIC_UPDATE_INTERVAL_MS - elapsed),
|
|
1618
|
+
);
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
private cancelMetricIndicator(): void {
|
|
1622
|
+
this.metricUpdateContext = undefined;
|
|
1623
|
+
this.metricUpdateGeneration++;
|
|
1624
|
+
if (this.metricUpdateScheduled) {
|
|
1625
|
+
this.metricScheduler.clearTimeout(this.metricUpdateHandle);
|
|
1626
|
+
}
|
|
1627
|
+
this.metricUpdateScheduled = false;
|
|
1628
|
+
this.metricUpdateHandle = undefined;
|
|
1629
|
+
}
|
|
1630
|
+
/** Placement is independent of the cached row contents and never changes user choices. */
|
|
1631
|
+
private reconcilePlacement(ctx: WorkingLineContext, messageRefreshed = false): boolean {
|
|
1632
|
+
let canEmbed = false;
|
|
1633
|
+
let ownsCurrentRow = false;
|
|
1634
|
+
const ui = this.installedUi;
|
|
1635
|
+
try {
|
|
1636
|
+
ownsCurrentRow = this.isAvailable() && workingLineUi(ctx) === ui;
|
|
1637
|
+
canEmbed = Boolean(
|
|
1638
|
+
this.agentActive &&
|
|
1639
|
+
ownsCurrentRow &&
|
|
1640
|
+
this.getConfig().components.workingLine.placement === "border" &&
|
|
1641
|
+
ui &&
|
|
1642
|
+
typeof ui.setWorkingVisible === "function" &&
|
|
1643
|
+
this.canEmbedBorder(ctx),
|
|
1644
|
+
);
|
|
1645
|
+
} catch {
|
|
1646
|
+
// Capability probes, including predecessor editor getters, must fail open.
|
|
1647
|
+
}
|
|
1648
|
+
if (!canEmbed || !ui) {
|
|
1649
|
+
if (this.agentActive && ownsCurrentRow && !this.ownsIndicator) this.startAnimationTicks();
|
|
1650
|
+
else this.stopAnimationTicks();
|
|
1651
|
+
// A render/capability change can reveal the native row without applyIndicator.
|
|
1652
|
+
// Clear its separate message before Pi constructs the visible Loader.
|
|
1653
|
+
if (!messageRefreshed && this.hiddenWorkingVisible && ownsCurrentRow && ui) {
|
|
1654
|
+
const snapshot = this.installationSnapshot();
|
|
1655
|
+
try {
|
|
1656
|
+
ui.setWorkingMessage("");
|
|
1657
|
+
} catch {
|
|
1658
|
+
this.recoverOrReleaseAfterFailure(ui, snapshot);
|
|
1659
|
+
return false;
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
this.releaseWorkingVisibility();
|
|
1663
|
+
return false;
|
|
1664
|
+
}
|
|
1665
|
+
if (!this.hiddenWorkingVisible) {
|
|
1666
|
+
// A failed restoration remains attached to its original UI, even after reset.
|
|
1667
|
+
this.releaseWorkingVisibility();
|
|
1668
|
+
if (this.restoreWorkingVisible) return false;
|
|
1669
|
+
try {
|
|
1670
|
+
const setVisible = ui.setWorkingVisible;
|
|
1671
|
+
if (typeof setVisible !== "function") return false;
|
|
1672
|
+
this.restoreWorkingVisible = () => setVisible.call(ui, true);
|
|
1673
|
+
setVisible.call(ui, false);
|
|
1674
|
+
this.hiddenWorkingVisible = true;
|
|
1675
|
+
} catch {
|
|
1676
|
+
// A throwing setter may already have hidden the row. Restore without claiming it.
|
|
1677
|
+
this.stopAnimationTicks();
|
|
1678
|
+
this.releaseWorkingVisibility();
|
|
1679
|
+
return false;
|
|
1680
|
+
}
|
|
1681
|
+
}
|
|
1682
|
+
this.startAnimationTicks();
|
|
1683
|
+
return true;
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
private releaseWorkingVisibility(): void {
|
|
1687
|
+
this.hiddenWorkingVisible = false;
|
|
1688
|
+
if (!this.restoreWorkingVisible) return;
|
|
1689
|
+
try {
|
|
1690
|
+
this.restoreWorkingVisible();
|
|
1691
|
+
this.restoreWorkingVisible = undefined;
|
|
1692
|
+
} catch {
|
|
1693
|
+
// Keep the original setter for a later cleanup attempt, even without row ownership.
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
private startAnimationTicks(): void {
|
|
1698
|
+
const interval = this.installedPhase?.intervalMs;
|
|
1699
|
+
if (
|
|
1700
|
+
!interval ||
|
|
1701
|
+
interval <= 0 ||
|
|
1702
|
+
(!this.ownsIndicator && (this.installedIndicatorOptions?.frames?.length ?? 0) <= 1)
|
|
1703
|
+
) {
|
|
1704
|
+
this.stopAnimationTicks();
|
|
1705
|
+
return;
|
|
1706
|
+
}
|
|
1707
|
+
if (this.animationTimer !== undefined && this.animationIntervalMs === interval) return;
|
|
1708
|
+
this.stopAnimationTicks();
|
|
1709
|
+
this.animationIntervalMs = interval;
|
|
1710
|
+
this.animationTimer = setInterval(() => {
|
|
1711
|
+
const ctx = this.placementContext;
|
|
1712
|
+
if (ctx && this.agentActive && !this.ownsIndicator && this.isAvailable()) {
|
|
1713
|
+
const phase = this.installedPhase;
|
|
1714
|
+
const frames = this.installedIndicatorOptions?.frames;
|
|
1715
|
+
if (phase && frames?.length) {
|
|
1716
|
+
const index =
|
|
1717
|
+
Math.floor(Math.max(0, this.now() - phase.frameEpochMs) / interval) % frames.length;
|
|
1718
|
+
try {
|
|
1719
|
+
this.installedUi?.setWorkingMessage(frames[index]);
|
|
1720
|
+
} catch {
|
|
1721
|
+
if (this.installedUi) this.releaseAfterFailure(this.installedUi);
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
return;
|
|
1725
|
+
}
|
|
1726
|
+
if (!ctx || !this.reconcilePlacement(ctx)) {
|
|
1727
|
+
this.stopAnimationTicks();
|
|
1728
|
+
return;
|
|
1729
|
+
}
|
|
1730
|
+
this.requestRender();
|
|
1731
|
+
}, interval);
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
private stopAnimationTicks(): void {
|
|
1735
|
+
if (this.animationTimer !== undefined) {
|
|
1736
|
+
clearInterval(this.animationTimer);
|
|
1737
|
+
this.animationTimer = undefined;
|
|
1738
|
+
}
|
|
1739
|
+
this.animationIntervalMs = undefined;
|
|
1740
|
+
}
|
|
1379
1741
|
private reconcileElapsedUpdates(ctx: WorkingLineContext): void {
|
|
1380
1742
|
this.elapsedUpdatesContext = ctx;
|
|
1381
1743
|
const config = this.getConfig().components.workingLine;
|
|
@@ -1424,7 +1786,7 @@ export class WorkingLineController {
|
|
|
1424
1786
|
}
|
|
1425
1787
|
|
|
1426
1788
|
private recoverOrReleaseAfterFailure(ui: WorkingLineUi, snapshot: InstallationSnapshot): void {
|
|
1427
|
-
if (!snapshot.installed || !snapshot.
|
|
1789
|
+
if (!snapshot.installed || !snapshot.ownsMessage || !snapshot.indicatorOptions) {
|
|
1428
1790
|
this.releaseAfterFailure(ui);
|
|
1429
1791
|
return;
|
|
1430
1792
|
}
|
|
@@ -1440,8 +1802,10 @@ export class WorkingLineController {
|
|
|
1440
1802
|
this.elapsedUpdatesGeneration = snapshot.elapsedUpdatesGeneration;
|
|
1441
1803
|
this.stopElapsedUpdates = snapshot.stopElapsedUpdates;
|
|
1442
1804
|
try {
|
|
1443
|
-
ui.setWorkingIndicator(snapshot.indicatorOptions);
|
|
1444
|
-
if (snapshot.ownsMessage)
|
|
1805
|
+
if (snapshot.ownsIndicator) ui.setWorkingIndicator?.(snapshot.indicatorOptions);
|
|
1806
|
+
if (snapshot.ownsMessage)
|
|
1807
|
+
ui.setWorkingMessage(snapshot.ownsIndicator ? "" : snapshot.indicatorOptions.frames?.[0]);
|
|
1808
|
+
if (this.placementContext) this.reconcilePlacement(this.placementContext, true);
|
|
1445
1809
|
} catch {
|
|
1446
1810
|
// Recovery is deliberately direct rather than recursive. If either setter cannot
|
|
1447
1811
|
// restore the last successful public state, release both unkeyed surfaces.
|
|
@@ -1459,10 +1823,13 @@ export class WorkingLineController {
|
|
|
1459
1823
|
}
|
|
1460
1824
|
|
|
1461
1825
|
private releaseAfterFailure(ui: WorkingLineUi): void {
|
|
1826
|
+
this.cancelMetricIndicator();
|
|
1462
1827
|
this.deactivateElapsedUpdates();
|
|
1828
|
+
this.stopAnimationTicks();
|
|
1829
|
+
this.releaseWorkingVisibility();
|
|
1463
1830
|
if (this.ownsIndicator) {
|
|
1464
1831
|
try {
|
|
1465
|
-
ui.setWorkingIndicator();
|
|
1832
|
+
ui.setWorkingIndicator?.();
|
|
1466
1833
|
} catch {
|
|
1467
1834
|
// Best-effort release after a partial public-API installation failure.
|
|
1468
1835
|
}
|
|
@@ -1480,16 +1847,20 @@ export class WorkingLineController {
|
|
|
1480
1847
|
this.frameKey = undefined;
|
|
1481
1848
|
this.installedPhase = undefined;
|
|
1482
1849
|
this.installedIndicatorOptions = undefined;
|
|
1850
|
+
this.installedUi = undefined;
|
|
1851
|
+
this.placementContext = undefined;
|
|
1483
1852
|
this.invalidateUnavailableExtensionSegments();
|
|
1484
1853
|
}
|
|
1485
1854
|
|
|
1486
1855
|
private reset(ctx: WorkingLineContext): void {
|
|
1856
|
+
this.cancelMetricIndicator();
|
|
1487
1857
|
this.deactivateElapsedUpdates();
|
|
1488
|
-
|
|
1489
|
-
|
|
1858
|
+
this.stopAnimationTicks();
|
|
1859
|
+
this.releaseWorkingVisibility();
|
|
1860
|
+
const ui = this.installedUi ?? workingLineUi(ctx);
|
|
1490
1861
|
if (ui && this.ownsIndicator) {
|
|
1491
1862
|
try {
|
|
1492
|
-
ui.setWorkingIndicator();
|
|
1863
|
+
ui.setWorkingIndicator?.();
|
|
1493
1864
|
} catch {
|
|
1494
1865
|
// Cleanup is best effort and remains idempotent.
|
|
1495
1866
|
}
|
|
@@ -1507,13 +1878,18 @@ export class WorkingLineController {
|
|
|
1507
1878
|
this.frameKey = undefined;
|
|
1508
1879
|
this.installedPhase = undefined;
|
|
1509
1880
|
this.installedIndicatorOptions = undefined;
|
|
1881
|
+
this.installedUi = undefined;
|
|
1882
|
+
this.placementContext = undefined;
|
|
1510
1883
|
}
|
|
1511
1884
|
|
|
1512
1885
|
private clearRuntime(): void {
|
|
1886
|
+
this.cancelMetricIndicator();
|
|
1887
|
+
this.lastMetricWriteAt = undefined;
|
|
1513
1888
|
this.deactivateElapsedUpdates();
|
|
1514
1889
|
this.agentActive = false;
|
|
1515
1890
|
this.activeTools.clear();
|
|
1516
1891
|
this.tokens = undefined;
|
|
1892
|
+
this.tokenRate = "";
|
|
1517
1893
|
this.thought = undefined;
|
|
1518
1894
|
this.invalidateExtensionSegments();
|
|
1519
1895
|
}
|