@selesai/code 0.13.15 → 0.13.18
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 +37 -0
- package/README.md +2 -14
- package/dist/bun/cli.d.ts +3 -1
- package/dist/bun/cli.js +3 -9
- package/dist/bun/{register-bedrock.js → runtime-setup.js} +5 -0
- package/dist/bun/sandbox-env-setup.d.ts +1 -0
- package/dist/bun/sandbox-env-setup.js +3 -0
- package/dist/cli/auth-command.d.ts +23 -0
- package/dist/cli/auth-command.js +102 -0
- package/dist/cli/config-selector.js +2 -1
- package/dist/cli/setup.d.ts +1 -0
- package/dist/cli/setup.js +11 -0
- package/dist/cli.js +2 -14
- package/dist/config.d.ts +3 -2
- package/dist/config.js +9 -4
- package/dist/core/agent-session-runtime.js +15 -7
- package/dist/core/agent-session.d.ts +2 -6
- package/dist/core/agent-session.js +15 -4
- package/dist/core/compaction/branch-summarization.d.ts +1 -1
- package/dist/core/compaction/branch-summarization.js +2 -1
- package/dist/core/extensions/loader.js +3 -0
- package/dist/core/extensions/types.d.ts +16 -2
- package/dist/core/http-dispatcher.js +2 -0
- package/dist/core/keybindings.d.ts +5 -0
- package/dist/core/keybindings.js +4 -0
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/model-config.d.ts +15 -0
- package/dist/core/model-config.js +3 -0
- package/dist/core/model-runtime.d.ts +1 -0
- package/dist/core/model-runtime.js +5 -2
- package/dist/core/provider-composer.js +8 -2
- package/dist/core/session-export.d.ts +3 -0
- package/dist/core/session-export.js +31 -0
- package/dist/core/session-manager.d.ts +3 -2
- package/dist/core/session-manager.js +40 -13
- package/dist/core/skills.d.ts +1 -1
- package/dist/core/skills.js +4 -2
- package/dist/core/system-prompt.js +10 -10
- package/dist/core/tools/bash.js +3 -117
- package/dist/core/tools/edit.d.ts +1 -12
- package/dist/core/tools/edit.js +5 -163
- package/dist/core/tools/find.js +4 -55
- package/dist/core/tools/grep.js +4 -60
- package/dist/core/tools/ls.js +4 -49
- package/dist/core/tools/read.d.ts +4 -0
- package/dist/core/tools/read.js +10 -122
- package/dist/core/tools/renderers/bash.d.ts +11 -0
- package/dist/core/tools/renderers/bash.js +129 -0
- package/dist/core/tools/renderers/edit.d.ts +22 -0
- package/dist/core/tools/renderers/edit.js +166 -0
- package/dist/core/tools/renderers/find.d.ts +9 -0
- package/dist/core/tools/renderers/find.js +63 -0
- package/dist/core/tools/renderers/grep.d.ts +9 -0
- package/dist/core/tools/renderers/grep.js +68 -0
- package/dist/core/tools/renderers/index.d.ts +27 -0
- package/dist/core/tools/renderers/index.js +46 -0
- package/dist/core/tools/renderers/ls.d.ts +9 -0
- package/dist/core/tools/renderers/ls.js +57 -0
- package/dist/core/tools/renderers/read.d.ts +10 -0
- package/dist/core/tools/renderers/read.js +128 -0
- package/dist/core/tools/renderers/write.d.ts +9 -0
- package/dist/core/tools/renderers/write.js +152 -0
- package/dist/core/tools/write.js +5 -146
- package/dist/extensions/capability-gateway/index.ts +12 -1
- package/dist/extensions/capability-gateway/integration.test.ts +23 -0
- package/dist/extensions/pi-hermes-memory/CHANGELOG.md +18 -0
- package/dist/extensions/pi-hermes-memory/README.md +16 -12
- package/dist/extensions/pi-hermes-memory/docs/ROADMAP.md +1 -1
- package/dist/extensions/pi-hermes-memory/package-lock.json +587 -62
- package/dist/extensions/pi-hermes-memory/package.json +4 -4
- package/dist/extensions/pi-hermes-memory/src/config.ts +32 -0
- package/dist/extensions/pi-hermes-memory/src/constants.ts +12 -2
- package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +109 -51
- package/dist/extensions/pi-hermes-memory/src/handlers/index-sessions.ts +9 -3
- package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +257 -98
- package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +9 -2
- package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +5 -0
- package/dist/extensions/pi-hermes-memory/src/index.ts +22 -2
- package/dist/extensions/pi-hermes-memory/src/paths.ts +1 -1
- package/dist/extensions/pi-hermes-memory/src/store/db.ts +6 -0
- package/dist/extensions/pi-hermes-memory/src/store/fts-query.ts +58 -1
- package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +60 -8
- package/dist/extensions/pi-hermes-memory/src/store/session-indexer.ts +169 -7
- package/dist/extensions/pi-hermes-memory/src/store/session-search.ts +7 -21
- package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +134 -15
- package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +4 -2
- package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +24 -9
- package/dist/extensions/pi-hermes-memory/src/types.ts +11 -0
- package/dist/extensions/pi-hermes-memory/tests/config.test.ts +42 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/background-review.test.ts +159 -3
- package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +452 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +39 -0
- package/dist/extensions/pi-hermes-memory/tests/integration/corruption-recovery-integration.test.ts +91 -0
- package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +29 -0
- package/dist/extensions/pi-hermes-memory/tests/store/fts-query.test.ts +116 -0
- package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +163 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-indexer.test.ts +233 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-search.test.ts +12 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +175 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-native.test.ts +2 -2
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +22 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-tool.test.ts +37 -1
- package/dist/extensions/pi-intercom/CHANGELOG.md +13 -0
- package/dist/extensions/pi-intercom/README.md +16 -2
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +19 -2
- package/dist/extensions/pi-intercom/broker/spawn.ts +4 -4
- package/dist/extensions/pi-intercom/index.ts +1 -1
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +121 -2
- package/dist/extensions/pi-intercom/package.json +1 -1
- package/dist/extensions/pi-intercom/project-agent.test.ts +1 -1
- package/dist/extensions/pi-intercom/project-agent.ts +1 -6
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +7 -6
- package/dist/extensions/pi-rewind-hook/index.test.ts +7 -0
- package/dist/extensions/pi-subagents/.github/workflows/test.yml +36 -4
- package/dist/extensions/pi-subagents/CHANGELOG.md +120 -0
- package/dist/extensions/pi-subagents/README.md +3 -3
- package/dist/extensions/pi-subagents/agents/researcher.md +23 -13
- package/dist/extensions/pi-subagents/agents/reviewer.md +1 -1
- package/dist/extensions/pi-subagents/agents/scout.md +1 -1
- package/dist/extensions/pi-subagents/docs/agents.md +32 -16
- package/dist/extensions/pi-subagents/docs/configuration.md +41 -15
- package/dist/extensions/pi-subagents/docs/extension-api.md +109 -6
- package/dist/extensions/pi-subagents/docs/missions.md +2 -0
- package/dist/extensions/pi-subagents/docs/models.md +58 -1
- package/dist/extensions/pi-subagents/docs/observability.md +50 -12
- package/dist/extensions/pi-subagents/docs/tool-reference.md +17 -10
- package/dist/extensions/pi-subagents/docs/watchdog.md +1 -1
- package/dist/extensions/pi-subagents/docs/workflows.md +26 -9
- package/dist/extensions/pi-subagents/package-lock.json +747 -177
- package/dist/extensions/pi-subagents/package.json +6 -4
- package/dist/extensions/pi-subagents/runner-server-preload.mjs +13 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +2 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +21 -4
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +2 -0
- package/dist/extensions/pi-subagents/src/agents/advertised-agent-prompt.ts +63 -0
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +61 -16
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +2 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +8 -0
- package/dist/extensions/pi-subagents/src/api/capability-ceiling.ts +0 -1
- package/dist/extensions/pi-subagents/src/api/{pi-args.ts → child-tool-plan.ts} +1 -1
- package/dist/extensions/pi-subagents/src/api/preflight.ts +7 -4
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -2
- package/dist/extensions/pi-subagents/src/api/workflow-resources.ts +6 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +4 -2
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +2 -10
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +9 -11
- package/dist/extensions/pi-subagents/src/extension/index.ts +99 -10
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +13 -0
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +7 -23
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +11 -8
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +25 -7
- package/dist/extensions/pi-subagents/src/integrations/pi-web-session-liveness.ts +73 -0
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +228 -136
- package/dist/extensions/pi-subagents/src/intercom/supervisor-ui.ts +244 -0
- package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +37 -16
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +18 -18
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +51 -25
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +46 -3
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +14 -3
- package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +9 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +10 -12
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -15
- package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +40 -29
- package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +8 -0
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +79 -247
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +88 -12
- package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +6 -6
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +24 -24
- package/dist/extensions/pi-subagents/src/runs/background/retained-nested-route-tracker.ts +96 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-child-session.ts +642 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +75 -6
- package/dist/extensions/pi-subagents/src/runs/background/runner-aliases.ts +163 -0
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-launch.ts +86 -0
- package/dist/extensions/pi-subagents/src/runs/background/runner-child-sessions.ts +31 -0
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +18 -4
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +597 -1092
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +3 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +4 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +20 -17
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +296 -394
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +4 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +9 -5
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +630 -283
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +8 -5
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +78 -98
- package/dist/extensions/pi-subagents/src/runs/shared/abort-recovery.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +16 -3
- package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +47 -47
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -2
- package/dist/extensions/pi-subagents/src/runs/shared/child-hooks.ts +174 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +14 -3
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch.ts +319 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-lifecycle.ts +25 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-runtime-config.ts +126 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-session.ts +373 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-tool-plan.ts +530 -0
- package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +2 -1
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +16 -0
- package/dist/extensions/pi-subagents/src/runs/shared/host-step-status.ts +11 -11
- package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +30 -20
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +84 -15
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +88 -12
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +37 -53
- package/dist/extensions/pi-subagents/src/runs/shared/nested-path.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +18 -7
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +57 -12
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -4
- package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +0 -11
- package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +4 -1
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-drain-observation.ts +42 -0
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-model-continuation.ts +69 -0
- package/dist/extensions/pi-subagents/src/runs/shared/readonly-session-evidence.ts +307 -0
- package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +8 -21
- package/dist/extensions/pi-subagents/src/runs/shared/runtime-acknowledged-extensions.ts +3 -30
- package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +17 -4
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +2 -0
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +99 -386
- package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +18 -62
- package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +0 -14
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +31 -9
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-setup-command.ts +190 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +506 -226
- package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +1 -1
- package/dist/extensions/pi-subagents/src/shared/jsonl-writer.ts +11 -0
- package/dist/extensions/pi-subagents/src/shared/model-response-aliases.ts +13 -0
- package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +0 -6
- package/dist/extensions/pi-subagents/src/shared/types.ts +145 -89
- package/dist/extensions/pi-subagents/src/shared/utils.ts +13 -6
- package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +2 -0
- package/dist/extensions/pi-subagents/src/shared/workflow-child-permit.ts +18 -13
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +0 -6
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +1 -1
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +11 -6
- package/dist/extensions/pi-subagents/src/tui/render.ts +277 -46
- package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +0 -1
- package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +12 -12
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -3
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +116 -15
- package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +15 -18
- package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +57 -8
- package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +19 -19
- package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +3 -3
- package/dist/extensions/pi-subagents/src/workflows/workflow-resources.ts +97 -22
- package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +3 -0
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +336 -21
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-1.test.ts +1181 -0
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-2.test.ts +2240 -0
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-3.test.ts +2268 -0
- package/dist/extensions/pi-subagents/test/integration/async-execution.part-4.test.ts +1512 -0
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +231 -16
- package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +4 -18
- package/dist/extensions/pi-subagents/test/integration/foreign-workflow-steering.test.ts +95 -0
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +9 -15
- package/dist/extensions/pi-subagents/test/integration/in-process-child.test.ts +374 -0
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +20 -10
- package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +18 -6
- package/dist/extensions/pi-subagents/test/integration/recovered-assistant-error.test.ts +151 -0
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +42 -1
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +150 -25
- package/dist/extensions/pi-subagents/test/integration/result-publication.test.ts +354 -0
- package/dist/extensions/pi-subagents/test/integration/shared-cwd-terminal-evidence.test.ts +117 -0
- package/dist/extensions/pi-subagents/test/integration/single-execution.part-1.test.ts +3678 -0
- package/dist/extensions/pi-subagents/test/integration/{single-execution.test.ts → single-execution.part-2.test.ts} +500 -4207
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +1 -2
- package/dist/extensions/pi-subagents/test/integration/workflow-result-publication.test.ts +127 -0
- package/dist/extensions/pi-subagents/test/integration/workflow-steer-inbox.test.ts +365 -0
- package/dist/extensions/pi-subagents/test/smoke/pi085-child.ts +31 -0
- package/dist/extensions/pi-subagents/test/smoke/pi085-clean-install.mjs +74 -0
- package/dist/extensions/pi-subagents/test/smoke/pi085-extension.ts +16 -0
- package/dist/extensions/pi-subagents/test/support/async-execution-fixture.ts +699 -0
- package/dist/extensions/pi-subagents/test/support/fake-child-session.ts +418 -0
- package/dist/extensions/pi-subagents/test/support/foreign-workflow-steer-host.mjs +13 -0
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +30 -76
- package/dist/extensions/pi-subagents/test/support/notify-diagnostics-fixture.ts +84 -0
- package/dist/extensions/pi-subagents/test/support/result-publication-capacity-preload.mjs +70 -0
- package/dist/extensions/pi-subagents/test/support/runner-child-session-factory.ts +17 -0
- package/dist/extensions/pi-subagents/test/support/single-execution-fixture.ts +390 -0
- package/dist/extensions/pi-subagents/test/unit/acceptance-compaction.test.ts +120 -0
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +24 -3
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-prompt.test.ts +87 -0
- package/dist/extensions/pi-subagents/test/unit/advertised-agent-refresh.test.ts +163 -0
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +70 -31
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +78 -3
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +2 -8
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +73 -66
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +51 -1
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +49 -1
- package/dist/extensions/pi-subagents/test/unit/async-spawn-preload.test.ts +103 -0
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +9 -8
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling.test.ts +10 -7
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +48 -6
- package/dist/extensions/pi-subagents/test/unit/child-runtime-config.test.ts +90 -0
- package/dist/extensions/pi-subagents/test/unit/{pi-args-permission-system.test.ts → child-tool-plan-permission-system.test.ts} +48 -86
- package/dist/extensions/pi-subagents/test/unit/child-tool-plan.test.ts +33 -0
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +18 -18
- package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +8 -7
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +225 -65
- package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +17 -22
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +11 -1
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +47 -3
- package/dist/extensions/pi-subagents/test/unit/foreign-workflow-steering.test.ts +74 -0
- package/dist/extensions/pi-subagents/test/unit/fork-cache-key.test.ts +23 -29
- package/dist/extensions/pi-subagents/test/unit/host-peer-runtime-imports.test.ts +96 -4
- package/dist/extensions/pi-subagents/test/unit/host-step-status.test.ts +4 -4
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +116 -55
- package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +58 -1
- package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +104 -3
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +31 -1
- package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +102 -51
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +196 -6
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +181 -38
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +62 -70
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +58 -53
- package/dist/extensions/pi-subagents/test/unit/notify-diagnostics.test.ts +42 -0
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +84 -0
- package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +13 -5
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +21 -5
- package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +5 -4
- package/dist/extensions/pi-subagents/test/unit/permissions.test.ts +2 -6
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +28 -2
- package/dist/extensions/pi-subagents/test/unit/pi-web-session-liveness.test.ts +209 -0
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +38 -1
- package/dist/extensions/pi-subagents/test/unit/prompt-audit-optional-peers.test.ts +43 -0
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +24 -2
- package/dist/extensions/pi-subagents/test/unit/readonly-drain-observation.test.ts +174 -0
- package/dist/extensions/pi-subagents/test/unit/readonly-model-continuation.test.ts +94 -0
- package/dist/extensions/pi-subagents/test/unit/readonly-session-evidence.test.ts +1329 -0
- package/dist/extensions/pi-subagents/test/unit/recursion-guard.test.ts +29 -80
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +11 -8
- package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/retained-nested-route-tracker.test.ts +175 -0
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +38 -12
- package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +2 -5
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +89 -1
- package/dist/extensions/pi-subagents/test/unit/runtime-acknowledged-extensions.test.ts +2 -16
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +27 -3
- package/dist/extensions/pi-subagents/test/unit/scheduled-supervisor-demand.test.ts +215 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +15 -11
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +237 -1
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -5
- package/dist/extensions/pi-subagents/test/unit/streamed-progress-bounds.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +14 -1
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +130 -739
- package/dist/extensions/pi-subagents/test/unit/supervisor-ask-registration.test.ts +682 -0
- package/dist/extensions/pi-subagents/test/unit/supervisor-ui.test.ts +137 -0
- package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +1 -11
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +23 -3
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +8 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-tool-actions.test.ts +19 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +72 -4
- package/dist/extensions/pi-subagents/test/unit/workflow-checklist.test.ts +17 -3
- package/dist/extensions/pi-subagents/test/unit/workflow-child-summary.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +12 -2
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +46 -6
- package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/workflow-resources.test.ts +133 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-resume-hint.test.ts +53 -2
- package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +222 -14
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +526 -85
- package/dist/extensions/pi-web-agent/src/backends/config.ts +1 -0
- package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +5 -3
- package/dist/extensions/pi-web-agent/src/search/tokenin.ts +7 -3
- package/dist/extensions/pi-web-agent/src/types.ts +1 -1
- package/dist/extensions/pi-zentui/README.md +17 -0
- package/dist/extensions/pi-zentui/assets/screenshots/footer-status-hyperlink.png +0 -0
- package/dist/extensions/pi-zentui/docs/configuration.md +71 -2
- package/dist/extensions/pi-zentui/extensions/zentui/config.ts +11 -0
- package/dist/extensions/pi-zentui/extensions/zentui/editor-transfer.ts +14 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +29 -13
- package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +5 -4
- package/dist/extensions/pi-zentui/extensions/zentui/footer-text.ts +11 -0
- package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +11 -10
- package/dist/extensions/pi-zentui/extensions/zentui/index.ts +77 -3
- package/dist/extensions/pi-zentui/extensions/zentui/presets.ts +77 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +103 -2
- package/dist/extensions/pi-zentui/extensions/zentui/working-line-extension-segments.ts +115 -0
- package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +87 -5
- package/dist/extensions/pi-zentui/package-lock.json +277 -517
- package/dist/extensions/pi-zentui/package.json +7 -4
- package/dist/extensions/pi-zentui/test/config-presets.test.ts +238 -0
- package/dist/extensions/pi-zentui/test/editor-transfer.test.ts +24 -1
- package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +570 -2
- package/dist/extensions/pi-zentui/test/extension-status.test.ts +90 -0
- package/dist/extensions/pi-zentui/test/footer-hyperlink.test.ts +243 -0
- package/dist/extensions/pi-zentui/test/package-contents.mjs +1 -0
- package/dist/extensions/pi-zentui/test/presets.test.ts +121 -0
- package/dist/extensions/pi-zentui/test/settings-command.test.ts +205 -1
- package/dist/extensions/pi-zentui/test/working-line-extension-segments.test.ts +139 -0
- package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +237 -3
- package/dist/extensions/pi-zentui/test/working-line.test.ts +94 -2
- package/dist/index.d.ts +1 -1
- package/dist/main.js +4 -1
- package/dist/modes/interactive/chat-viewport.d.ts +19 -0
- package/dist/modes/interactive/chat-viewport.js +27 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +6 -2
- package/dist/modes/interactive/components/assistant-message.js +30 -13
- package/dist/modes/interactive/components/custom-editor.d.ts +10 -1
- package/dist/modes/interactive/components/custom-editor.js +39 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +2 -0
- package/dist/modes/interactive/components/markdown-transform.js +18 -0
- package/dist/modes/interactive/components/model-selector.js +19 -17
- package/dist/modes/interactive/components/scoped-models-selector.js +21 -23
- package/dist/modes/interactive/components/settings-selector.d.ts +7 -1
- package/dist/modes/interactive/components/settings-selector.js +128 -20
- package/dist/modes/interactive/components/settings-submenu.d.ts +71 -0
- package/dist/modes/interactive/components/settings-submenu.js +164 -0
- package/dist/modes/interactive/components/status-indicator.d.ts +3 -1
- package/dist/modes/interactive/components/status-indicator.js +10 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.js +75 -18
- package/dist/modes/interactive/components/tool-execution.d.ts +21 -4
- package/dist/modes/interactive/components/tool-execution.js +35 -33
- package/dist/modes/interactive/components/trust-selector.js +2 -2
- package/dist/modes/interactive/interactive-mode.d.ts +13 -15
- package/dist/modes/interactive/interactive-mode.js +144 -80
- package/dist/modes/interactive/session-share.d.ts +15 -0
- package/dist/modes/interactive/session-share.js +183 -0
- package/dist/modes/interactive/theme/dark.json +2 -1
- package/dist/modes/interactive/theme/light.json +2 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +5 -0
- package/dist/modes/interactive/theme/theme-json.d.ts +83 -0
- package/dist/modes/interactive/theme/theme-json.js +129 -0
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/interactive/theme/theme.d.ts +14 -5
- package/dist/modes/interactive/theme/theme.js +18 -119
- package/dist/modes/interactive/tui-renderer.d.ts +20 -0
- package/dist/modes/interactive/tui-renderer.js +65 -0
- package/dist/utils/exif-orientation.js +2 -3
- package/dist/utils/management-http.d.ts +24 -0
- package/dist/utils/management-http.js +53 -0
- package/dist/utils/text.d.ts +7 -0
- package/dist/utils/text.js +8 -0
- package/dist/utils/tools-manager.d.ts +1 -0
- package/dist/utils/tools-manager.js +43 -21
- package/docs/docs.json +0 -4
- package/package.json +4 -4
- package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +0 -415
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +0 -1059
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +0 -116
- package/dist/extensions/pi-subagents/src/shared/post-exit-stdio-guard.ts +0 -85
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +0 -224
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +0 -6986
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +0 -447
- package/dist/extensions/pi-subagents/test/support/real-session-child-cli.mjs +0 -185
- package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +0 -311
- package/dist/extensions/pi-subagents/test/unit/capability-ceiling-pi-args.test.ts +0 -84
- package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +0 -202
- package/dist/extensions/pi-subagents/test/unit/close-grace-timer.test.ts +0 -101
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +0 -2347
- package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +0 -104
- package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +0 -49
- package/dist/skills/imagegen-frontend-mobile/SKILL.md +0 -1465
- package/dist/skills/imagegen-frontend-web/SKILL.md +0 -987
- package/dist/skills/implanger/SKILL.md +0 -70
- package/dist/skills/output/SKILL.md +0 -49
- package/dist/skills/planger/SKILL.md +0 -167
- package/dist/skills/workflow/SKILL.md +0 -95
- package/docs/workflows.md +0 -18
- /package/dist/bun/{register-bedrock.d.ts → runtime-setup.d.ts} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Container, SelectList } from "@earendil-works/pi-tui";
|
|
2
|
-
import { getSelectListTheme } from "../theme/theme.js";
|
|
1
|
+
import { Container, fuzzyFilter, getKeybindings, Input, SelectList, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
2
|
+
import { getSelectListTheme, theme } from "../theme/theme.js";
|
|
3
3
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
4
|
+
import { keyDisplayText } from "./keybinding-hints.js";
|
|
4
5
|
const THINKING_SELECT_LIST_LAYOUT = {
|
|
5
6
|
minPrimaryColumnWidth: 12,
|
|
6
7
|
maxPrimaryColumnWidth: 32,
|
|
@@ -18,33 +19,89 @@ const LEVEL_DESCRIPTIONS = {
|
|
|
18
19
|
* Component that renders a thinking level selector with borders
|
|
19
20
|
*/
|
|
20
21
|
export class ThinkingSelectorComponent extends Container {
|
|
22
|
+
searchInput;
|
|
21
23
|
selectList;
|
|
22
|
-
|
|
24
|
+
selectListChildIndex;
|
|
25
|
+
allItems;
|
|
26
|
+
onSelect;
|
|
27
|
+
onCancel;
|
|
28
|
+
onSelectAsDefault;
|
|
29
|
+
_focused = false;
|
|
30
|
+
get focused() {
|
|
31
|
+
return this._focused;
|
|
32
|
+
}
|
|
33
|
+
set focused(value) {
|
|
34
|
+
this._focused = value;
|
|
35
|
+
this.searchInput.focused = value;
|
|
36
|
+
}
|
|
37
|
+
constructor(currentLevel, availableLevels, onSelect, onCancel, onSelectAsDefault, defaultThinkingLevel) {
|
|
23
38
|
super();
|
|
24
|
-
|
|
39
|
+
this.onSelect = onSelect;
|
|
40
|
+
this.onCancel = onCancel;
|
|
41
|
+
this.onSelectAsDefault = onSelectAsDefault;
|
|
42
|
+
this.allItems = availableLevels.map((level) => ({
|
|
25
43
|
value: level,
|
|
26
|
-
label: level
|
|
27
|
-
description: LEVEL_DESCRIPTIONS[level],
|
|
44
|
+
label: `${level === currentLevel ? "✓ " : " "}${level}`,
|
|
45
|
+
description: level === defaultThinkingLevel ? `${LEVEL_DESCRIPTIONS[level]} · default` : LEVEL_DESCRIPTIONS[level],
|
|
28
46
|
}));
|
|
29
47
|
// Add top border
|
|
30
48
|
this.addChild(new DynamicBorder());
|
|
49
|
+
this.addChild(new Spacer(1));
|
|
50
|
+
this.addChild(new Text("Thinking Level", 0, 0));
|
|
51
|
+
this.addChild(new Spacer(1));
|
|
52
|
+
this.addChild(new Text(`${keyDisplayText("app.thinking.cycle")} cycles thinking levels in-session`, 0, 0));
|
|
53
|
+
this.addChild(new Spacer(1));
|
|
54
|
+
this.searchInput = new Input();
|
|
55
|
+
this.searchInput.onSubmit = () => this.selectList.handleInput("\r");
|
|
56
|
+
this.addChild(this.searchInput);
|
|
57
|
+
this.addChild(new Spacer(1));
|
|
31
58
|
// Create selector
|
|
32
|
-
this.selectList =
|
|
33
|
-
|
|
34
|
-
const currentIndex = thinkingLevels.findIndex((item) => item.value === currentLevel);
|
|
35
|
-
if (currentIndex !== -1) {
|
|
36
|
-
this.selectList.setSelectedIndex(currentIndex);
|
|
37
|
-
}
|
|
38
|
-
this.selectList.onSelect = (item) => {
|
|
39
|
-
onSelect(item.value);
|
|
40
|
-
};
|
|
41
|
-
this.selectList.onCancel = () => {
|
|
42
|
-
onCancel();
|
|
43
|
-
};
|
|
59
|
+
this.selectList = this.buildSelectList(this.allItems, currentLevel);
|
|
60
|
+
this.selectListChildIndex = this.children.length;
|
|
44
61
|
this.addChild(this.selectList);
|
|
62
|
+
this.addChild(new Spacer(1));
|
|
63
|
+
this.addChild(new Text(theme.fg("dim", ` ${keyDisplayText("tui.select.confirm")} to select · ${keyDisplayText("app.thinking.save")} to set as default · ${keyDisplayText("tui.select.cancel")} to cancel`), 0, 0));
|
|
45
64
|
// Add bottom border
|
|
46
65
|
this.addChild(new DynamicBorder());
|
|
47
66
|
}
|
|
67
|
+
buildSelectList(items, preselect) {
|
|
68
|
+
const list = new SelectList(items, Math.max(1, items.length), getSelectListTheme(), THINKING_SELECT_LIST_LAYOUT);
|
|
69
|
+
const currentIndex = items.findIndex((item) => item.value === preselect);
|
|
70
|
+
if (currentIndex !== -1) {
|
|
71
|
+
list.setSelectedIndex(currentIndex);
|
|
72
|
+
}
|
|
73
|
+
list.onSelect = (item) => this.onSelect(item.value);
|
|
74
|
+
list.onCancel = () => this.onCancel();
|
|
75
|
+
return list;
|
|
76
|
+
}
|
|
77
|
+
applyFilter(query) {
|
|
78
|
+
const filtered = query
|
|
79
|
+
? fuzzyFilter(this.allItems, query, (item) => `${item.value} ${item.description ?? ""}`)
|
|
80
|
+
: this.allItems;
|
|
81
|
+
const selectedValue = this.selectList.getSelectedItem()?.value;
|
|
82
|
+
const newList = this.buildSelectList(filtered, selectedValue);
|
|
83
|
+
this.children[this.selectListChildIndex] = newList;
|
|
84
|
+
this.selectList = newList;
|
|
85
|
+
}
|
|
86
|
+
handleInput(keyData) {
|
|
87
|
+
const kb = getKeybindings();
|
|
88
|
+
if (kb.matches(keyData, "app.thinking.save") && this.onSelectAsDefault) {
|
|
89
|
+
const item = this.selectList.getSelectedItem();
|
|
90
|
+
if (item)
|
|
91
|
+
this.onSelectAsDefault(item.value);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const isNav = kb.matches(keyData, "tui.select.up") ||
|
|
95
|
+
kb.matches(keyData, "tui.select.down") ||
|
|
96
|
+
kb.matches(keyData, "tui.select.confirm") ||
|
|
97
|
+
kb.matches(keyData, "tui.select.cancel");
|
|
98
|
+
if (isNav) {
|
|
99
|
+
this.selectList.handleInput(keyData);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.searchInput.handleInput(keyData);
|
|
103
|
+
this.applyFilter(this.searchInput.getValue());
|
|
104
|
+
}
|
|
48
105
|
getSelectList() {
|
|
49
106
|
return this.selectList;
|
|
50
107
|
}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type
|
|
1
|
+
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import { type Component, Container, type TUI, type TuiMouseEvent } from "@earendil-works/pi-tui";
|
|
3
|
+
import type { ToolDefinition, ToolRenderContext, ToolRenderResultOptions } from "../../../core/extensions/types.ts";
|
|
4
|
+
import type { Theme } from "../theme/theme.ts";
|
|
5
|
+
/**
|
|
6
|
+
* What this component needs from a tool: how to draw it. It neither executes tools nor reads their
|
|
7
|
+
* parameter schemas, so a definition and a bare renderer pair are equally acceptable.
|
|
8
|
+
*
|
|
9
|
+
* The renderer parameters are `any` on purpose: a `ToolDefinition` types them from its schema, and
|
|
10
|
+
* narrowing them here would make those definitions unassignable.
|
|
11
|
+
*/
|
|
12
|
+
export interface ToolRenderers {
|
|
13
|
+
renderShell?: "default" | "self";
|
|
14
|
+
renderCall?: (args: any, theme: Theme, context: ToolRenderContext<any, any>) => Component;
|
|
15
|
+
renderResult?: (result: AgentToolResult<any>, options: ToolRenderResultOptions, theme: Theme, context: ToolRenderContext<any, any>) => Component;
|
|
16
|
+
}
|
|
3
17
|
export interface ToolExecutionOptions {
|
|
4
18
|
showImages?: boolean;
|
|
5
19
|
imageWidthCells?: number;
|
|
@@ -7,7 +21,9 @@ export interface ToolExecutionOptions {
|
|
|
7
21
|
export declare class ToolExecutionComponent extends Container {
|
|
8
22
|
private contentBox;
|
|
9
23
|
private contentText;
|
|
24
|
+
private contentTextRegion;
|
|
10
25
|
private selfRenderContainer;
|
|
26
|
+
private selfRenderHeight;
|
|
11
27
|
private callRendererComponent?;
|
|
12
28
|
private resultRendererComponent?;
|
|
13
29
|
private rendererState;
|
|
@@ -21,7 +37,6 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
21
37
|
private imageWidthCells;
|
|
22
38
|
private isPartial;
|
|
23
39
|
private toolDefinition?;
|
|
24
|
-
private builtInToolDefinition?;
|
|
25
40
|
private ui;
|
|
26
41
|
private cwd;
|
|
27
42
|
private executionStarted;
|
|
@@ -29,7 +44,7 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
29
44
|
private result?;
|
|
30
45
|
private convertedImages;
|
|
31
46
|
private hideComponent;
|
|
32
|
-
constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolDefinition<any, any> | undefined, ui: TUI, cwd: string);
|
|
47
|
+
constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
|
|
33
48
|
private getCallRenderer;
|
|
34
49
|
private getResultRenderer;
|
|
35
50
|
private hasRendererDefinition;
|
|
@@ -37,6 +52,7 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
37
52
|
private getRenderContext;
|
|
38
53
|
private createCallFallback;
|
|
39
54
|
private createResultFallback;
|
|
55
|
+
private createResultRegion;
|
|
40
56
|
updateArgs(args: any): void;
|
|
41
57
|
markExecutionStarted(): void;
|
|
42
58
|
setArgsComplete(): void;
|
|
@@ -56,6 +72,7 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
56
72
|
setImageWidthCells(width: number): void;
|
|
57
73
|
invalidate(): void;
|
|
58
74
|
render(width: number): string[];
|
|
75
|
+
handleMouse(event: TuiMouseEvent): ReturnType<Container["handleMouse"]>;
|
|
59
76
|
private updateDisplay;
|
|
60
77
|
private getTextOutput;
|
|
61
78
|
private formatToolExecution;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Box, Container, getCapabilities, Image, Spacer, Text } from "@earendil-works/pi-tui";
|
|
2
|
-
import { createAllToolDefinitions } from "../../../core/tools/index.js";
|
|
1
|
+
import { Box, Container, getCapabilities, Image, MouseRegion, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
3
2
|
import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js";
|
|
4
3
|
import { convertToPng } from "../../../utils/image-convert.js";
|
|
5
4
|
import { keyHint } from "./keybinding-hints.js";
|
|
@@ -8,7 +7,9 @@ const FALLBACK_PREVIEW_LINES = 10;
|
|
|
8
7
|
export class ToolExecutionComponent extends Container {
|
|
9
8
|
contentBox;
|
|
10
9
|
contentText;
|
|
10
|
+
contentTextRegion;
|
|
11
11
|
selfRenderContainer;
|
|
12
|
+
selfRenderHeight = 0;
|
|
12
13
|
callRendererComponent;
|
|
13
14
|
resultRendererComponent;
|
|
14
15
|
rendererState = {};
|
|
@@ -22,7 +23,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
22
23
|
imageWidthCells;
|
|
23
24
|
isPartial = true;
|
|
24
25
|
toolDefinition;
|
|
25
|
-
builtInToolDefinition;
|
|
26
26
|
ui;
|
|
27
27
|
cwd;
|
|
28
28
|
executionStarted = false;
|
|
@@ -36,7 +36,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
36
36
|
this.toolCallId = toolCallId;
|
|
37
37
|
this.args = args;
|
|
38
38
|
this.toolDefinition = toolDefinition;
|
|
39
|
-
this.builtInToolDefinition = createAllToolDefinitions(cwd)[toolName];
|
|
40
39
|
this.showImages = options.showImages ?? true;
|
|
41
40
|
this.imageWidthCells = options.imageWidthCells ?? 60;
|
|
42
41
|
this.ui = ui;
|
|
@@ -47,44 +46,27 @@ export class ToolExecutionComponent extends Container {
|
|
|
47
46
|
// contentText is reserved for generic fallback rendering when no tool definition exists.
|
|
48
47
|
this.contentBox = new Box(1, 1, (text) => theme.bg("toolPendingBg", text));
|
|
49
48
|
this.contentText = new Text("", 1, 1, (text) => theme.bg("toolPendingBg", text));
|
|
49
|
+
this.contentTextRegion = this.createResultRegion(this.contentText);
|
|
50
50
|
this.selfRenderContainer = new Container();
|
|
51
51
|
if (this.hasRendererDefinition()) {
|
|
52
52
|
this.addChild(this.getRenderShell() === "self" ? this.selfRenderContainer : this.contentBox);
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
|
-
this.addChild(this.
|
|
55
|
+
this.addChild(this.contentTextRegion);
|
|
56
56
|
}
|
|
57
57
|
this.updateDisplay();
|
|
58
58
|
}
|
|
59
59
|
getCallRenderer() {
|
|
60
|
-
|
|
61
|
-
return this.toolDefinition?.renderCall;
|
|
62
|
-
}
|
|
63
|
-
if (!this.toolDefinition) {
|
|
64
|
-
return this.builtInToolDefinition.renderCall;
|
|
65
|
-
}
|
|
66
|
-
return this.toolDefinition.renderCall ?? this.builtInToolDefinition.renderCall;
|
|
60
|
+
return this.toolDefinition?.renderCall;
|
|
67
61
|
}
|
|
68
62
|
getResultRenderer() {
|
|
69
|
-
|
|
70
|
-
return this.toolDefinition?.renderResult;
|
|
71
|
-
}
|
|
72
|
-
if (!this.toolDefinition) {
|
|
73
|
-
return this.builtInToolDefinition.renderResult;
|
|
74
|
-
}
|
|
75
|
-
return this.toolDefinition.renderResult ?? this.builtInToolDefinition.renderResult;
|
|
63
|
+
return this.toolDefinition?.renderResult;
|
|
76
64
|
}
|
|
77
65
|
hasRendererDefinition() {
|
|
78
|
-
return this.
|
|
66
|
+
return this.toolDefinition !== undefined;
|
|
79
67
|
}
|
|
80
68
|
getRenderShell() {
|
|
81
|
-
|
|
82
|
-
return this.toolDefinition?.renderShell ?? "default";
|
|
83
|
-
}
|
|
84
|
-
if (!this.toolDefinition) {
|
|
85
|
-
return this.builtInToolDefinition.renderShell ?? "default";
|
|
86
|
-
}
|
|
87
|
-
return this.toolDefinition.renderShell ?? this.builtInToolDefinition.renderShell ?? "default";
|
|
69
|
+
return this.toolDefinition?.renderShell ?? "default";
|
|
88
70
|
}
|
|
89
71
|
getRenderContext(lastComponent) {
|
|
90
72
|
return {
|
|
@@ -122,6 +104,14 @@ export class ToolExecutionComponent extends Container {
|
|
|
122
104
|
}
|
|
123
105
|
return new Text(text, 0, 0);
|
|
124
106
|
}
|
|
107
|
+
createResultRegion(component) {
|
|
108
|
+
return new MouseRegion(component, (event) => {
|
|
109
|
+
if (!this.result || event.type !== "click" || event.button !== "left")
|
|
110
|
+
return undefined;
|
|
111
|
+
this.setExpanded(!this.expanded);
|
|
112
|
+
return { handled: true };
|
|
113
|
+
});
|
|
114
|
+
}
|
|
125
115
|
updateArgs(args) {
|
|
126
116
|
this.args = args;
|
|
127
117
|
this.updateDisplay();
|
|
@@ -189,6 +179,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
189
179
|
}
|
|
190
180
|
if (this.hasRendererDefinition() && this.getRenderShell() === "self") {
|
|
191
181
|
const contentLines = this.selfRenderContainer.render(width);
|
|
182
|
+
this.selfRenderHeight = contentLines.length;
|
|
192
183
|
if (contentLines.length === 0 && this.imageComponents.length === 0) {
|
|
193
184
|
return [];
|
|
194
185
|
}
|
|
@@ -211,6 +202,17 @@ export class ToolExecutionComponent extends Container {
|
|
|
211
202
|
}
|
|
212
203
|
return super.render(width);
|
|
213
204
|
}
|
|
205
|
+
handleMouse(event) {
|
|
206
|
+
if (!this.hasRendererDefinition() || this.getRenderShell() !== "self")
|
|
207
|
+
return super.handleMouse(event);
|
|
208
|
+
if (event.y <= 0 || event.y > this.selfRenderHeight)
|
|
209
|
+
return undefined;
|
|
210
|
+
return this.selfRenderContainer.handleMouse({
|
|
211
|
+
...event,
|
|
212
|
+
y: event.y - 1,
|
|
213
|
+
height: this.selfRenderHeight,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
214
216
|
updateDisplay() {
|
|
215
217
|
const bgFn = this.isPartial
|
|
216
218
|
? (text) => theme.bg("toolPendingBg", text)
|
|
@@ -227,19 +229,19 @@ export class ToolExecutionComponent extends Container {
|
|
|
227
229
|
renderContainer.clear();
|
|
228
230
|
const callRenderer = this.getCallRenderer();
|
|
229
231
|
if (!callRenderer) {
|
|
230
|
-
renderContainer.addChild(this.createCallFallback());
|
|
232
|
+
renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
|
|
231
233
|
hasContent = true;
|
|
232
234
|
}
|
|
233
235
|
else {
|
|
234
236
|
try {
|
|
235
237
|
const component = callRenderer(this.args, theme, this.getRenderContext(this.callRendererComponent));
|
|
236
238
|
this.callRendererComponent = component;
|
|
237
|
-
renderContainer.addChild(component);
|
|
239
|
+
renderContainer.addChild(this.createResultRegion(component));
|
|
238
240
|
hasContent = true;
|
|
239
241
|
}
|
|
240
242
|
catch {
|
|
241
243
|
this.callRendererComponent = undefined;
|
|
242
|
-
renderContainer.addChild(this.createCallFallback());
|
|
244
|
+
renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
|
|
243
245
|
hasContent = true;
|
|
244
246
|
}
|
|
245
247
|
}
|
|
@@ -248,7 +250,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
248
250
|
if (!resultRenderer) {
|
|
249
251
|
const component = this.createResultFallback();
|
|
250
252
|
if (component) {
|
|
251
|
-
renderContainer.addChild(component);
|
|
253
|
+
renderContainer.addChild(this.createResultRegion(component));
|
|
252
254
|
hasContent = true;
|
|
253
255
|
}
|
|
254
256
|
}
|
|
@@ -256,14 +258,14 @@ export class ToolExecutionComponent extends Container {
|
|
|
256
258
|
try {
|
|
257
259
|
const component = resultRenderer({ content: this.result.content, details: this.result.details }, { expanded: this.expanded, isPartial: this.isPartial }, theme, this.getRenderContext(this.resultRendererComponent));
|
|
258
260
|
this.resultRendererComponent = component;
|
|
259
|
-
renderContainer.addChild(component);
|
|
261
|
+
renderContainer.addChild(this.createResultRegion(component));
|
|
260
262
|
hasContent = true;
|
|
261
263
|
}
|
|
262
264
|
catch {
|
|
263
265
|
this.resultRendererComponent = undefined;
|
|
264
266
|
const component = this.createResultFallback();
|
|
265
267
|
if (component) {
|
|
266
|
-
renderContainer.addChild(component);
|
|
268
|
+
renderContainer.addChild(this.createResultRegion(component));
|
|
267
269
|
hasContent = true;
|
|
268
270
|
}
|
|
269
271
|
}
|
|
@@ -61,10 +61,10 @@ export class TrustSelectorComponent extends Container {
|
|
|
61
61
|
}
|
|
62
62
|
const isSelected = i === this.selectedIndex;
|
|
63
63
|
const isCurrent = this.isSavedOption(option);
|
|
64
|
-
const
|
|
64
|
+
const currentMarker = isCurrent ? theme.fg("accent", "✓ ") : " ";
|
|
65
65
|
const prefix = isSelected ? theme.fg("accent", "→ ") : " ";
|
|
66
66
|
const label = isSelected ? theme.fg("accent", option.label) : theme.fg("text", option.label);
|
|
67
|
-
this.listContainer.addChild(new Text(`${prefix}${
|
|
67
|
+
this.listContainer.addChild(new Text(`${prefix}${currentMarker}${label}`, 1, 0));
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
handleInput(keyData) {
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* Handles TUI rendering and user interaction, delegating business logic to AgentSession.
|
|
4
4
|
*/
|
|
5
5
|
import type { ImageContent } from "@earendil-works/pi-ai/compat";
|
|
6
|
-
import type { Terminal } from "@earendil-works/pi-tui";
|
|
7
|
-
import { type TUI, TuiAltScreen, TuiMainScreen } from "@earendil-works/pi-tui";
|
|
8
6
|
import { type AgentSessionRuntime } from "../../core/agent-session-runtime.ts";
|
|
9
7
|
import { SessionManager } from "../../core/session-manager.ts";
|
|
10
8
|
import type { FullscreenExitOutput, TuiMode } from "../../core/settings-manager.ts";
|
|
11
9
|
import { type LatestPiRelease } from "../../utils/version-check.ts";
|
|
10
|
+
export { createInteractiveTui, createInteractiveTuiReference } from "./tui-renderer.ts";
|
|
12
11
|
type PendingUserInput = {
|
|
13
12
|
text: string;
|
|
14
13
|
images?: ImageContent[];
|
|
@@ -37,18 +36,6 @@ export interface InteractiveModeOptions {
|
|
|
37
36
|
/** Initial interactive theme setting for this invocation. */
|
|
38
37
|
initialThemeSetting?: string;
|
|
39
38
|
}
|
|
40
|
-
interface InteractiveTuiOptions {
|
|
41
|
-
tuiMode: TuiMode;
|
|
42
|
-
showHardwareCursor: boolean;
|
|
43
|
-
logDirectory: string;
|
|
44
|
-
terminal?: Terminal;
|
|
45
|
-
onRightClickPaste?: () => void;
|
|
46
|
-
fullscreenCopyOnSelect?: boolean;
|
|
47
|
-
}
|
|
48
|
-
/** Composition root for selecting the interactive terminal renderer. */
|
|
49
|
-
export declare function createInteractiveTui(options: InteractiveTuiOptions): TuiMainScreen | TuiAltScreen;
|
|
50
|
-
/** Stable reference for components while InteractiveMode replaces the active renderer. */
|
|
51
|
-
export declare function createInteractiveTuiReference(getTui: () => TUI): TUI;
|
|
52
39
|
export declare class InteractiveMode {
|
|
53
40
|
private runtimeHost;
|
|
54
41
|
private renderer;
|
|
@@ -78,6 +65,7 @@ export declare class InteractiveMode {
|
|
|
78
65
|
private pendingUserInputs;
|
|
79
66
|
private pendingInputImages;
|
|
80
67
|
private activeStatusIndicator;
|
|
68
|
+
private activeWorkingIndicatorEmbedded;
|
|
81
69
|
private readonly idleStatus;
|
|
82
70
|
private workingMessage;
|
|
83
71
|
private workingVisible;
|
|
@@ -191,6 +179,10 @@ export declare class InteractiveMode {
|
|
|
191
179
|
/**
|
|
192
180
|
* Get a registered tool definition by name (for custom rendering).
|
|
193
181
|
*/
|
|
182
|
+
/**
|
|
183
|
+
* Extension-registered definition, falling back to the built-in one. The renderer components take
|
|
184
|
+
* whatever this returns, so they never reach into the tool registry themselves.
|
|
185
|
+
*/
|
|
194
186
|
private getRegisteredToolDefinition;
|
|
195
187
|
/**
|
|
196
188
|
* Set up keyboard shortcuts registered by extensions.
|
|
@@ -200,6 +192,7 @@ export declare class InteractiveMode {
|
|
|
200
192
|
* Set extension status text in the footer.
|
|
201
193
|
*/
|
|
202
194
|
private setExtensionStatus;
|
|
195
|
+
private setEditorWorkingStatusIndicator;
|
|
203
196
|
private showStatusIndicator;
|
|
204
197
|
private clearStatusIndicator;
|
|
205
198
|
private showWorkingStatusIndicator;
|
|
@@ -304,6 +297,12 @@ export declare class InteractiveMode {
|
|
|
304
297
|
* @param options.populateHistory Add user messages to editor history
|
|
305
298
|
*/
|
|
306
299
|
private renderSessionEntries;
|
|
300
|
+
/**
|
|
301
|
+
* Render billing usage for a compaction or branch summary. The notice is derived
|
|
302
|
+
* from persisted summary usage and is not stored as a separate session entry.
|
|
303
|
+
*/
|
|
304
|
+
private addCompactionCostNotice;
|
|
305
|
+
private maybeShowAssistantDiagnostics;
|
|
307
306
|
/**
|
|
308
307
|
* Show a transcript notice when a completed assistant message paid for a
|
|
309
308
|
* significant cache miss. Only states observable facts: the miss itself,
|
|
@@ -444,4 +443,3 @@ export declare class InteractiveMode {
|
|
|
444
443
|
private handleCompactCommand;
|
|
445
444
|
stop(fullscreenExitOutput?: FullscreenExitOutput): void;
|
|
446
445
|
}
|
|
447
|
-
export {};
|