@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
package/dist/core/messages.d.ts
CHANGED
|
@@ -92,6 +92,7 @@ declare const ModelDefinitionSchema: Type.TObject<{
|
|
|
92
92
|
deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
|
|
93
93
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
94
94
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
95
|
+
vllmPriority: Type.TOptional<Type.TNumber>;
|
|
95
96
|
}>, Type.TObject<{
|
|
96
97
|
supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
|
|
97
98
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
@@ -100,6 +101,7 @@ declare const ModelDefinitionSchema: Type.TObject<{
|
|
|
100
101
|
supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
|
|
101
102
|
supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
|
|
102
103
|
supportsToolSearch: Type.TOptional<Type.TBoolean>;
|
|
104
|
+
supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
|
|
103
105
|
}>, Type.TObject<{
|
|
104
106
|
supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
|
|
105
107
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
@@ -109,6 +111,7 @@ declare const ModelDefinitionSchema: Type.TObject<{
|
|
|
109
111
|
forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
|
|
110
112
|
allowEmptySignature: Type.TOptional<Type.TBoolean>;
|
|
111
113
|
supportsStrictTools: Type.TOptional<Type.TBoolean>;
|
|
114
|
+
supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
|
|
112
115
|
supportsToolReferences: Type.TOptional<Type.TBoolean>;
|
|
113
116
|
}>]>>;
|
|
114
117
|
}>;
|
|
@@ -201,6 +204,7 @@ declare const ModelOverrideSchema: Type.TObject<{
|
|
|
201
204
|
deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
|
|
202
205
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
203
206
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
207
|
+
vllmPriority: Type.TOptional<Type.TNumber>;
|
|
204
208
|
}>, Type.TObject<{
|
|
205
209
|
supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
|
|
206
210
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
@@ -209,6 +213,7 @@ declare const ModelOverrideSchema: Type.TObject<{
|
|
|
209
213
|
supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
|
|
210
214
|
supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
|
|
211
215
|
supportsToolSearch: Type.TOptional<Type.TBoolean>;
|
|
216
|
+
supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
|
|
212
217
|
}>, Type.TObject<{
|
|
213
218
|
supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
|
|
214
219
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
@@ -218,6 +223,7 @@ declare const ModelOverrideSchema: Type.TObject<{
|
|
|
218
223
|
forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
|
|
219
224
|
allowEmptySignature: Type.TOptional<Type.TBoolean>;
|
|
220
225
|
supportsStrictTools: Type.TOptional<Type.TBoolean>;
|
|
226
|
+
supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
|
|
221
227
|
supportsToolReferences: Type.TOptional<Type.TBoolean>;
|
|
222
228
|
}>]>>;
|
|
223
229
|
}>;
|
|
@@ -288,6 +294,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
288
294
|
deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
|
|
289
295
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
290
296
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
297
|
+
vllmPriority: Type.TOptional<Type.TNumber>;
|
|
291
298
|
}>, Type.TObject<{
|
|
292
299
|
supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
|
|
293
300
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
@@ -296,6 +303,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
296
303
|
supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
|
|
297
304
|
supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
|
|
298
305
|
supportsToolSearch: Type.TOptional<Type.TBoolean>;
|
|
306
|
+
supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
|
|
299
307
|
}>, Type.TObject<{
|
|
300
308
|
supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
|
|
301
309
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
@@ -305,6 +313,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
305
313
|
forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
|
|
306
314
|
allowEmptySignature: Type.TOptional<Type.TBoolean>;
|
|
307
315
|
supportsStrictTools: Type.TOptional<Type.TBoolean>;
|
|
316
|
+
supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
|
|
308
317
|
supportsToolReferences: Type.TOptional<Type.TBoolean>;
|
|
309
318
|
}>]>>;
|
|
310
319
|
authHeader: Type.TOptional<Type.TBoolean>;
|
|
@@ -400,6 +409,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
400
409
|
deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
|
|
401
410
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
402
411
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
412
|
+
vllmPriority: Type.TOptional<Type.TNumber>;
|
|
403
413
|
}>, Type.TObject<{
|
|
404
414
|
supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
|
|
405
415
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
@@ -408,6 +418,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
408
418
|
supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
|
|
409
419
|
supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
|
|
410
420
|
supportsToolSearch: Type.TOptional<Type.TBoolean>;
|
|
421
|
+
supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
|
|
411
422
|
}>, Type.TObject<{
|
|
412
423
|
supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
|
|
413
424
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
@@ -417,6 +428,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
417
428
|
forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
|
|
418
429
|
allowEmptySignature: Type.TOptional<Type.TBoolean>;
|
|
419
430
|
supportsStrictTools: Type.TOptional<Type.TBoolean>;
|
|
431
|
+
supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
|
|
420
432
|
supportsToolReferences: Type.TOptional<Type.TBoolean>;
|
|
421
433
|
}>]>>;
|
|
422
434
|
}>>>;
|
|
@@ -509,6 +521,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
509
521
|
deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
|
|
510
522
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
511
523
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
524
|
+
vllmPriority: Type.TOptional<Type.TNumber>;
|
|
512
525
|
}>, Type.TObject<{
|
|
513
526
|
supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
|
|
514
527
|
sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
|
|
@@ -517,6 +530,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
517
530
|
supportsOpenAIGrammarTools: Type.TOptional<Type.TBoolean>;
|
|
518
531
|
supportsAdditionalTools: Type.TOptional<Type.TBoolean>;
|
|
519
532
|
supportsToolSearch: Type.TOptional<Type.TBoolean>;
|
|
533
|
+
supportsMaxOutputTokens: Type.TOptional<Type.TBoolean>;
|
|
520
534
|
}>, Type.TObject<{
|
|
521
535
|
supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
|
|
522
536
|
supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
|
|
@@ -526,6 +540,7 @@ declare const ProviderConfigSchema: Type.TObject<{
|
|
|
526
540
|
forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
|
|
527
541
|
allowEmptySignature: Type.TOptional<Type.TBoolean>;
|
|
528
542
|
supportsStrictTools: Type.TOptional<Type.TBoolean>;
|
|
543
|
+
supportsMidConvoEffort: Type.TOptional<Type.TBoolean>;
|
|
529
544
|
supportsToolReferences: Type.TOptional<Type.TBoolean>;
|
|
530
545
|
}>]>>;
|
|
531
546
|
}>>>;
|
|
@@ -89,6 +89,7 @@ const OpenAICompletionsCompatSchema = Type.Object({
|
|
|
89
89
|
deferredToolsMode: Type.Optional(Type.Literal("kimi")),
|
|
90
90
|
sessionAffinityFormat: Type.Optional(Type.Union([Type.Literal("openai"), Type.Literal("openai-nosession"), Type.Literal("openrouter")])),
|
|
91
91
|
supportsLongCacheRetention: Type.Optional(Type.Boolean()),
|
|
92
|
+
vllmPriority: Type.Optional(Type.Number()),
|
|
92
93
|
});
|
|
93
94
|
const OpenAIResponsesCompatSchema = Type.Object({
|
|
94
95
|
supportsDeveloperRole: Type.Optional(Type.Boolean()),
|
|
@@ -98,6 +99,7 @@ const OpenAIResponsesCompatSchema = Type.Object({
|
|
|
98
99
|
supportsOpenAIGrammarTools: Type.Optional(Type.Boolean()),
|
|
99
100
|
supportsAdditionalTools: Type.Optional(Type.Boolean()),
|
|
100
101
|
supportsToolSearch: Type.Optional(Type.Boolean()),
|
|
102
|
+
supportsMaxOutputTokens: Type.Optional(Type.Boolean()),
|
|
101
103
|
});
|
|
102
104
|
const AnthropicMessagesCompatSchema = Type.Object({
|
|
103
105
|
supportsEagerToolInputStreaming: Type.Optional(Type.Boolean()),
|
|
@@ -108,6 +110,7 @@ const AnthropicMessagesCompatSchema = Type.Object({
|
|
|
108
110
|
forceAdaptiveThinking: Type.Optional(Type.Boolean()),
|
|
109
111
|
allowEmptySignature: Type.Optional(Type.Boolean()),
|
|
110
112
|
supportsStrictTools: Type.Optional(Type.Boolean()),
|
|
113
|
+
supportsMidConvoEffort: Type.Optional(Type.Boolean()),
|
|
111
114
|
supportsToolReferences: Type.Optional(Type.Boolean()),
|
|
112
115
|
});
|
|
113
116
|
const ProviderCompatSchema = Type.Union([
|
|
@@ -73,6 +73,7 @@ export declare class ModelRuntime implements Models {
|
|
|
73
73
|
complete<TApi extends Api>(model: Model<TApi>, context: Context, options?: ModelsApiStreamOptions<TApi>): Promise<AssistantMessage>;
|
|
74
74
|
streamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream;
|
|
75
75
|
completeSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): Promise<AssistantMessage>;
|
|
76
|
+
streamDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredFetchOptions): AssistantMessageEventStream;
|
|
76
77
|
fetchDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredFetchOptions): Promise<AssistantMessage>;
|
|
77
78
|
cancelDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredCancelOptions): Promise<void>;
|
|
78
79
|
login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential>;
|
|
@@ -357,14 +357,17 @@ export class ModelRuntime {
|
|
|
357
357
|
completeSimple(model, context, options) {
|
|
358
358
|
return this.streamSimple(model, context, options).result();
|
|
359
359
|
}
|
|
360
|
-
|
|
360
|
+
streamDeferred(model, handle, options) {
|
|
361
361
|
return lazyStream(model, async () => {
|
|
362
362
|
const prepared = await this.prepareRequest(model, options);
|
|
363
363
|
if (!prepared.provider.fetchDeferred) {
|
|
364
364
|
throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
|
|
365
365
|
}
|
|
366
366
|
return prepared.provider.fetchDeferred(prepared.model, handle, prepared.options);
|
|
367
|
-
})
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
async fetchDeferred(model, handle, options) {
|
|
370
|
+
return this.streamDeferred(model, handle, options).result();
|
|
368
371
|
}
|
|
369
372
|
async cancelDeferred(model, handle, options) {
|
|
370
373
|
const prepared = await this.prepareRequest(model, options);
|
|
@@ -85,6 +85,12 @@ function modelFromJson(providerId, definition, providerConfig, defaults) {
|
|
|
85
85
|
compat: mergeCompat(providerConfig.compat, definition.compat),
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
+
function findModelDefaults(models, modelId, api) {
|
|
89
|
+
return (models.find((model) => model.id === modelId) ??
|
|
90
|
+
(api ? models.find((model) => model.api === api) : undefined) ??
|
|
91
|
+
models.find((model) => model.api === "openai-completions") ??
|
|
92
|
+
models[0]);
|
|
93
|
+
}
|
|
88
94
|
function applyModelsJson(providerId, baseModels, config) {
|
|
89
95
|
if (!config)
|
|
90
96
|
return [...baseModels];
|
|
@@ -109,7 +115,7 @@ function applyModelsJson(providerId, baseModels, config) {
|
|
|
109
115
|
}));
|
|
110
116
|
for (const definition of config.models ?? []) {
|
|
111
117
|
const existingIndex = models.findIndex((model) => model.id === definition.id);
|
|
112
|
-
const defaults =
|
|
118
|
+
const defaults = findModelDefaults(models, definition.id, definition.api ?? config.api);
|
|
113
119
|
const model = modelFromJson(providerId, definition, config, defaults);
|
|
114
120
|
if (existingIndex >= 0)
|
|
115
121
|
models[existingIndex] = model;
|
|
@@ -125,7 +131,7 @@ function applyExtension(providerId, models, config) {
|
|
|
125
131
|
return config.baseUrl ? models.map((model) => ({ ...model, baseUrl: config.baseUrl })) : [...models];
|
|
126
132
|
}
|
|
127
133
|
return config.models.map((definition) => {
|
|
128
|
-
const defaults = models
|
|
134
|
+
const defaults = findModelDefaults(models, definition.id, definition.api ?? config.api);
|
|
129
135
|
const api = definition.api ?? config.api ?? defaults?.api;
|
|
130
136
|
if (!api) {
|
|
131
137
|
throw new Error(`Provider ${providerId}, model ${definition.id}: no "api" specified. Set at provider or model level.`);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type SessionManager } from "./session-manager.ts";
|
|
2
|
+
/** Write the current session branch and optional trailing export-only entries as JSONL. */
|
|
3
|
+
export declare function exportSessionToJsonl(sessionManager: SessionManager, outputPath?: string, createTrailingEntries?: (parentId: string | null, timestamp: string) => readonly object[]): string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { resolvePath } from "../utils/paths.js";
|
|
4
|
+
import { CURRENT_SESSION_VERSION } from "./session-manager.js";
|
|
5
|
+
/** Write the current session branch and optional trailing export-only entries as JSONL. */
|
|
6
|
+
export function exportSessionToJsonl(sessionManager, outputPath, createTrailingEntries) {
|
|
7
|
+
const filePath = resolvePath(outputPath ?? `session-${new Date().toISOString().replace(/[:.]/g, "-")}.jsonl`, process.cwd());
|
|
8
|
+
const dir = dirname(filePath);
|
|
9
|
+
if (!existsSync(dir)) {
|
|
10
|
+
mkdirSync(dir, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
const timestamp = new Date().toISOString();
|
|
13
|
+
const header = {
|
|
14
|
+
type: "session",
|
|
15
|
+
version: CURRENT_SESSION_VERSION,
|
|
16
|
+
id: sessionManager.getSessionId(),
|
|
17
|
+
timestamp,
|
|
18
|
+
cwd: sessionManager.getCwd(),
|
|
19
|
+
};
|
|
20
|
+
const lines = [JSON.stringify(header)];
|
|
21
|
+
let parentId = null;
|
|
22
|
+
for (const entry of sessionManager.getBranch()) {
|
|
23
|
+
lines.push(JSON.stringify({ ...entry, parentId }));
|
|
24
|
+
parentId = entry.id;
|
|
25
|
+
}
|
|
26
|
+
for (const entry of createTrailingEntries?.(parentId, timestamp) ?? []) {
|
|
27
|
+
lines.push(JSON.stringify(entry));
|
|
28
|
+
}
|
|
29
|
+
writeFileSync(filePath, `${lines.join("\n")}\n`);
|
|
30
|
+
return filePath;
|
|
31
|
+
}
|
|
@@ -198,6 +198,7 @@ export declare class SessionManager {
|
|
|
198
198
|
setSessionFile(sessionFile: string): void;
|
|
199
199
|
private _setSessionFile;
|
|
200
200
|
newSession(options?: NewSessionOptions): string | undefined;
|
|
201
|
+
private _loadEntries;
|
|
201
202
|
private _buildIndex;
|
|
202
203
|
private _rewriteFile;
|
|
203
204
|
isPersisted(): boolean;
|
|
@@ -329,8 +330,8 @@ export declare class SessionManager {
|
|
|
329
330
|
* @param sessionDir Optional session directory. If omitted, uses the configured agent sessions directory.
|
|
330
331
|
*/
|
|
331
332
|
static continueRecent(cwd: string, sessionDir?: string): SessionManager;
|
|
332
|
-
/** Create an in-memory session (no file persistence) */
|
|
333
|
-
static inMemory(cwd?: string, options?: NewSessionOptions): SessionManager;
|
|
333
|
+
/** Create an in-memory session (no file persistence), optionally from entries held outside the filesystem. */
|
|
334
|
+
static inMemory(cwd?: string, options?: NewSessionOptions, entries?: FileEntry[]): SessionManager;
|
|
334
335
|
/**
|
|
335
336
|
* Fork a session from another project directory into the current project.
|
|
336
337
|
* Creates a new session in the target cwd with the full history from the source session.
|
|
@@ -605,6 +605,9 @@ export class SessionManager {
|
|
|
605
605
|
if (sessionFile) {
|
|
606
606
|
this._setSessionFile(sessionFile, preloadedFileEntries);
|
|
607
607
|
}
|
|
608
|
+
else if (preloadedFileEntries?.length) {
|
|
609
|
+
this._loadEntries(preloadedFileEntries, newSessionOptions);
|
|
610
|
+
}
|
|
608
611
|
else {
|
|
609
612
|
this.newSession(newSessionOptions);
|
|
610
613
|
}
|
|
@@ -616,10 +619,10 @@ export class SessionManager {
|
|
|
616
619
|
_setSessionFile(sessionFile, preloadedFileEntries) {
|
|
617
620
|
this.sessionFile = resolvePath(sessionFile);
|
|
618
621
|
if (existsSync(this.sessionFile)) {
|
|
619
|
-
|
|
622
|
+
const entries = preloadedFileEntries ?? loadEntriesFromFile(this.sessionFile);
|
|
620
623
|
// If file was empty, initialize it with a valid session header. If it was
|
|
621
624
|
// non-empty but did not parse as a pi session, fail without modifying it.
|
|
622
|
-
if (
|
|
625
|
+
if (entries.length === 0) {
|
|
623
626
|
const explicitPath = this.sessionFile;
|
|
624
627
|
if (statSync(explicitPath).size > 0) {
|
|
625
628
|
throw new Error(`Session file is not a valid ${APP_NAME} session: ${explicitPath}`);
|
|
@@ -630,12 +633,7 @@ export class SessionManager {
|
|
|
630
633
|
this.flushed = true;
|
|
631
634
|
return;
|
|
632
635
|
}
|
|
633
|
-
|
|
634
|
-
this.sessionId = header?.id ?? createSessionId();
|
|
635
|
-
if (migrateToCurrentVersion(this.fileEntries)) {
|
|
636
|
-
this._rewriteFile();
|
|
637
|
-
}
|
|
638
|
-
this._buildIndex();
|
|
636
|
+
this._loadEntries(entries);
|
|
639
637
|
this.flushed = true;
|
|
640
638
|
}
|
|
641
639
|
else {
|
|
@@ -670,6 +668,21 @@ export class SessionManager {
|
|
|
670
668
|
}
|
|
671
669
|
return this.sessionFile;
|
|
672
670
|
}
|
|
671
|
+
_loadEntries(entries, options) {
|
|
672
|
+
const header = entries.find((e) => e.type === "session");
|
|
673
|
+
if (header) {
|
|
674
|
+
this.fileEntries = entries;
|
|
675
|
+
this.sessionId = header.id;
|
|
676
|
+
if (migrateToCurrentVersion(this.fileEntries)) {
|
|
677
|
+
this._rewriteFile();
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
else {
|
|
681
|
+
this.newSession(options);
|
|
682
|
+
this.fileEntries = this.fileEntries.concat(entries);
|
|
683
|
+
}
|
|
684
|
+
this._buildIndex();
|
|
685
|
+
}
|
|
673
686
|
_buildIndex() {
|
|
674
687
|
this.byId.clear();
|
|
675
688
|
this.labelsById.clear();
|
|
@@ -1086,11 +1099,25 @@ export class SessionManager {
|
|
|
1086
1099
|
// Because labels are real tree entries, later entries can be children of labels;
|
|
1087
1100
|
// removing labels requires re-chaining the retained path to avoid orphaned subtrees.
|
|
1088
1101
|
const pathWithoutLabels = [];
|
|
1102
|
+
const replacementByLabelId = new Map();
|
|
1103
|
+
const pendingLabelIds = [];
|
|
1089
1104
|
let pathParentId = null;
|
|
1090
1105
|
for (const entry of path) {
|
|
1091
|
-
if (entry.type === "label")
|
|
1106
|
+
if (entry.type === "label") {
|
|
1107
|
+
pendingLabelIds.push(entry.id);
|
|
1092
1108
|
continue;
|
|
1093
|
-
|
|
1109
|
+
}
|
|
1110
|
+
for (const labelId of pendingLabelIds) {
|
|
1111
|
+
replacementByLabelId.set(labelId, entry.id);
|
|
1112
|
+
}
|
|
1113
|
+
pendingLabelIds.length = 0;
|
|
1114
|
+
pathWithoutLabels.push(entry.type === "compaction"
|
|
1115
|
+
? {
|
|
1116
|
+
...entry,
|
|
1117
|
+
parentId: pathParentId,
|
|
1118
|
+
firstKeptEntryId: replacementByLabelId.get(entry.firstKeptEntryId) ?? entry.firstKeptEntryId,
|
|
1119
|
+
}
|
|
1120
|
+
: { ...entry, parentId: pathParentId });
|
|
1094
1121
|
pathParentId = entry.id;
|
|
1095
1122
|
}
|
|
1096
1123
|
const newSessionId = createSessionId();
|
|
@@ -1222,9 +1249,9 @@ export class SessionManager {
|
|
|
1222
1249
|
}
|
|
1223
1250
|
return new SessionManager(cwd, dir, undefined, true);
|
|
1224
1251
|
}
|
|
1225
|
-
/** Create an in-memory session (no file persistence) */
|
|
1226
|
-
static inMemory(cwd = process.cwd(), options) {
|
|
1227
|
-
return new SessionManager(cwd, "", undefined, false, options);
|
|
1252
|
+
/** Create an in-memory session (no file persistence), optionally from entries held outside the filesystem. */
|
|
1253
|
+
static inMemory(cwd = process.cwd(), options, entries) {
|
|
1254
|
+
return new SessionManager(cwd, "", undefined, false, options, entries);
|
|
1228
1255
|
}
|
|
1229
1256
|
/**
|
|
1230
1257
|
* Fork a session from another project directory into the current project.
|
package/dist/core/skills.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ export declare function loadSkillsFromDir(options: LoadSkillsFromDirOptions): Lo
|
|
|
52
52
|
* Skills with disableModelInvocation=true are excluded from the prompt
|
|
53
53
|
* (they can only be invoked explicitly via /skill:name commands).
|
|
54
54
|
*/
|
|
55
|
-
export declare function formatSkillsForPrompt(skills: Skill[]): string;
|
|
55
|
+
export declare function formatSkillsForPrompt(skills: Skill[], fileReadTool?: "read" | "bash"): string;
|
|
56
56
|
export interface LoadSkillsOptions {
|
|
57
57
|
/** Working directory for project-local skills. */
|
|
58
58
|
cwd: string;
|
package/dist/core/skills.js
CHANGED
|
@@ -255,14 +255,16 @@ function loadSkillFromFile(filePath, source) {
|
|
|
255
255
|
* Skills with disableModelInvocation=true are excluded from the prompt
|
|
256
256
|
* (they can only be invoked explicitly via /skill:name commands).
|
|
257
257
|
*/
|
|
258
|
-
export function formatSkillsForPrompt(skills) {
|
|
258
|
+
export function formatSkillsForPrompt(skills, fileReadTool = "read") {
|
|
259
259
|
const visibleSkills = skills.filter((s) => !s.disableModelInvocation);
|
|
260
260
|
if (visibleSkills.length === 0) {
|
|
261
261
|
return "";
|
|
262
262
|
}
|
|
263
263
|
const lines = [
|
|
264
264
|
"\n\nThe following skills provide specialized instructions for specific tasks.",
|
|
265
|
-
|
|
265
|
+
fileReadTool === "read"
|
|
266
|
+
? "Use the read tool to load a skill's file when the task matches its description, unless its full instructions are already embedded in the current user message inside a <skill> block."
|
|
267
|
+
: "Use bash to load a skill's file when the task matches its description, unless its full instructions are already embedded in the current user message inside a <skill> block.",
|
|
266
268
|
"When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.",
|
|
267
269
|
"",
|
|
268
270
|
"<available_skills>",
|
|
@@ -18,6 +18,9 @@ export function buildSystemPrompt(options) {
|
|
|
18
18
|
const contextFiles = providedContextFiles ?? [];
|
|
19
19
|
const skills = providedSkills ?? [];
|
|
20
20
|
const agents = options.agents ?? [];
|
|
21
|
+
const tools = selectedTools || ["read", "bash", "edit", "write"];
|
|
22
|
+
const hasRead = tools.includes("read");
|
|
23
|
+
const skillFileReadTool = ["read", "bash"].find((tool) => tools.includes(tool));
|
|
21
24
|
if (customPrompt) {
|
|
22
25
|
let prompt = customPrompt;
|
|
23
26
|
if (appendSection) {
|
|
@@ -32,12 +35,11 @@ export function buildSystemPrompt(options) {
|
|
|
32
35
|
}
|
|
33
36
|
prompt += "</project_context>\n";
|
|
34
37
|
}
|
|
35
|
-
// Append skills
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
prompt += formatSkillsForPrompt(skills);
|
|
38
|
+
// Append skills when a tool capable of reading their files is available.
|
|
39
|
+
if (skillFileReadTool && skills.length > 0) {
|
|
40
|
+
prompt += formatSkillsForPrompt(skills, skillFileReadTool);
|
|
39
41
|
}
|
|
40
|
-
if (
|
|
42
|
+
if (hasRead && agents.length > 0) {
|
|
41
43
|
prompt += formatAgentsForPrompt(agents);
|
|
42
44
|
}
|
|
43
45
|
// Render active-tool guidelines (e.g., mandatory delegation contracts) in
|
|
@@ -60,7 +62,6 @@ export function buildSystemPrompt(options) {
|
|
|
60
62
|
const examplesPath = getExamplesPath();
|
|
61
63
|
// Build tools list based on selected tools.
|
|
62
64
|
// A tool appears in Available tools only when the caller provides a one-line snippet.
|
|
63
|
-
const tools = selectedTools || ["read", "bash", "edit", "write", "grep", "find", "ls"];
|
|
64
65
|
const visibleTools = tools.filter((name) => !!toolSnippets?.[name]);
|
|
65
66
|
const toolsList = visibleTools.length > 0 ? visibleTools.map((name) => `- ${name}: ${toolSnippets[name]}`).join("\n") : "(none)";
|
|
66
67
|
// Build guidelines based on which tools are actually available
|
|
@@ -77,7 +78,6 @@ export function buildSystemPrompt(options) {
|
|
|
77
78
|
const hasGrep = tools.includes("grep");
|
|
78
79
|
const hasFind = tools.includes("find");
|
|
79
80
|
const hasLs = tools.includes("ls");
|
|
80
|
-
const hasRead = tools.includes("read");
|
|
81
81
|
// File exploration guidelines
|
|
82
82
|
if (hasBash && !hasGrep && !hasFind && !hasLs) {
|
|
83
83
|
addGuideline("Use bash for file operations like ls, rg, find");
|
|
@@ -117,9 +117,9 @@ When working on pi topics, resolve docs/... and examples/... under those paths (
|
|
|
117
117
|
}
|
|
118
118
|
prompt += "</project_context>\n";
|
|
119
119
|
}
|
|
120
|
-
// Append skills
|
|
121
|
-
if (
|
|
122
|
-
prompt += formatSkillsForPrompt(skills);
|
|
120
|
+
// Append skills when a tool capable of reading their files is available.
|
|
121
|
+
if (skillFileReadTool && skills.length > 0) {
|
|
122
|
+
prompt += formatSkillsForPrompt(skills, skillFileReadTool);
|
|
123
123
|
}
|
|
124
124
|
if (hasRead && agents.length > 0) {
|
|
125
125
|
prompt += formatAgentsForPrompt(agents);
|
package/dist/core/tools/bash.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import { access as fsAccess } from "node:fs/promises";
|
|
3
|
-
import { Container, Text, truncateToWidth } from "@earendil-works/pi-tui";
|
|
4
3
|
import { spawn } from "child_process";
|
|
5
4
|
import { Type } from "typebox";
|
|
6
|
-
import { keyHint } from "../../modes/interactive/components/keybinding-hints.js";
|
|
7
|
-
import { truncateToVisualLines } from "../../modes/interactive/components/visual-truncate.js";
|
|
8
|
-
import { theme } from "../../modes/interactive/theme/theme.js";
|
|
9
5
|
import { waitForChildProcess } from "../../utils/child-process.js";
|
|
10
6
|
import { getShellConfig, getShellEnv, killProcessTree, trackDetachedChildPid, untrackDetachedChildPid, } from "../../utils/shell.js";
|
|
11
7
|
import { getExperimentalToolSampling } from "../experimental.js";
|
|
12
8
|
import { OutputAccumulator } from "./output-accumulator.js";
|
|
13
|
-
import {
|
|
9
|
+
import { BASH_UPDATE_THROTTLE_MS, createShellRenderers } from "./renderers/bash.js";
|
|
14
10
|
import { wrapToolDefinition } from "./tool-definition-wrapper.js";
|
|
15
11
|
import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "./truncate.js";
|
|
16
12
|
const MAX_TIMEOUT_MS = 2_147_483_647;
|
|
@@ -143,90 +139,6 @@ function resolveSpawnContext(command, cwd, spawnHook, exposeSessionEnvironment,
|
|
|
143
139
|
const baseContext = { command, cwd, env };
|
|
144
140
|
return spawnHook ? spawnHook(baseContext) : baseContext;
|
|
145
141
|
}
|
|
146
|
-
const BASH_PREVIEW_LINES = 5;
|
|
147
|
-
const BASH_UPDATE_THROTTLE_MS = 100;
|
|
148
|
-
class BashResultRenderComponent extends Container {
|
|
149
|
-
state = {
|
|
150
|
-
cachedWidth: undefined,
|
|
151
|
-
cachedLines: undefined,
|
|
152
|
-
cachedSkipped: undefined,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
function formatDuration(ms) {
|
|
156
|
-
return `${(ms / 1000).toFixed(1)}s`;
|
|
157
|
-
}
|
|
158
|
-
function formatShellCall(args, prompt) {
|
|
159
|
-
const command = str(args?.command);
|
|
160
|
-
const timeout = args?.timeout;
|
|
161
|
-
const timeoutSuffix = timeout ? theme.fg("muted", ` (timeout ${timeout}s)`) : "";
|
|
162
|
-
const commandDisplay = command === null ? invalidArgText(theme) : command ? command : theme.fg("toolOutput", "...");
|
|
163
|
-
return theme.fg("toolTitle", theme.bold(`${prompt} ${commandDisplay}`)) + timeoutSuffix;
|
|
164
|
-
}
|
|
165
|
-
function rebuildBashResultRenderComponent(component, result, options, showImages, startedAt, endedAt) {
|
|
166
|
-
const state = component.state;
|
|
167
|
-
component.clear();
|
|
168
|
-
let output = getTextOutput(result, showImages).trim();
|
|
169
|
-
const truncation = result.details?.truncation;
|
|
170
|
-
const fullOutputPath = result.details?.fullOutputPath;
|
|
171
|
-
if (!options.isPartial && truncation?.truncated && fullOutputPath && output.endsWith("]")) {
|
|
172
|
-
const footerStart = output.lastIndexOf("\n\n[");
|
|
173
|
-
if (footerStart !== -1 && output.slice(footerStart).includes(fullOutputPath)) {
|
|
174
|
-
output = output.slice(0, footerStart).trimEnd();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (output) {
|
|
178
|
-
const styledOutput = output
|
|
179
|
-
.split("\n")
|
|
180
|
-
.map((line) => theme.fg("toolOutput", line))
|
|
181
|
-
.join("\n");
|
|
182
|
-
if (options.expanded) {
|
|
183
|
-
component.addChild(new Text(`\n${styledOutput}`, 0, 0));
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
component.addChild({
|
|
187
|
-
render: (width) => {
|
|
188
|
-
if (state.cachedLines === undefined || state.cachedWidth !== width) {
|
|
189
|
-
const preview = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);
|
|
190
|
-
state.cachedLines = preview.visualLines;
|
|
191
|
-
state.cachedSkipped = preview.skippedCount;
|
|
192
|
-
state.cachedWidth = width;
|
|
193
|
-
}
|
|
194
|
-
if (state.cachedSkipped && state.cachedSkipped > 0) {
|
|
195
|
-
const hint = theme.fg("muted", `... (${state.cachedSkipped} earlier lines,`) +
|
|
196
|
-
` ${keyHint("app.tools.expand", "to expand")}${theme.fg("muted", ")")}`;
|
|
197
|
-
return ["", truncateToWidth(hint, width, "..."), ...(state.cachedLines ?? [])];
|
|
198
|
-
}
|
|
199
|
-
return ["", ...(state.cachedLines ?? [])];
|
|
200
|
-
},
|
|
201
|
-
invalidate: () => {
|
|
202
|
-
state.cachedWidth = undefined;
|
|
203
|
-
state.cachedLines = undefined;
|
|
204
|
-
state.cachedSkipped = undefined;
|
|
205
|
-
},
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (truncation?.truncated || fullOutputPath) {
|
|
210
|
-
const warnings = [];
|
|
211
|
-
if (fullOutputPath) {
|
|
212
|
-
warnings.push(`Full output: ${fullOutputPath}`);
|
|
213
|
-
}
|
|
214
|
-
if (truncation?.truncated) {
|
|
215
|
-
if (truncation.truncatedBy === "lines") {
|
|
216
|
-
warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
warnings.push(`Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
component.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
|
|
223
|
-
}
|
|
224
|
-
if (startedAt !== undefined) {
|
|
225
|
-
const label = options.isPartial ? "Elapsed" : "Took";
|
|
226
|
-
const endTime = endedAt ?? Date.now();
|
|
227
|
-
component.addChild(new Text(`\n${theme.fg("muted", `${label} ${formatDuration(endTime - startedAt)}`)}`, 0, 0));
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
142
|
export function createShellToolDefinition(cwd, config, options) {
|
|
231
143
|
const ops = options?.operations ?? createLocalBashOperations({ shellPath: options?.shellPath });
|
|
232
144
|
const commandPrefix = options?.commandPrefix;
|
|
@@ -242,7 +154,7 @@ export function createShellToolDefinition(cwd, config, options) {
|
|
|
242
154
|
constrainedSampling: getExperimentalToolSampling(),
|
|
243
155
|
async execute(_toolCallId, { command, timeout }, signal, onUpdate, ctx) {
|
|
244
156
|
const resolvedCommand = commandPrefix ? `${commandPrefix}\n${command}` : command;
|
|
245
|
-
const spawnContext = resolveSpawnContext(resolvedCommand, cwd, spawnHook, exposeSessionEnvironment, ctx);
|
|
157
|
+
const spawnContext = resolveSpawnContext(resolvedCommand, ctx?.cwd || cwd, spawnHook, exposeSessionEnvironment, ctx);
|
|
246
158
|
const output = new OutputAccumulator({ tempFilePrefix: config.tempFilePrefix });
|
|
247
159
|
let acceptingOutput = true;
|
|
248
160
|
let updateTimer;
|
|
@@ -357,33 +269,7 @@ export function createShellToolDefinition(cwd, config, options) {
|
|
|
357
269
|
clearUpdateTimer();
|
|
358
270
|
}
|
|
359
271
|
},
|
|
360
|
-
|
|
361
|
-
const state = context.state;
|
|
362
|
-
if (context.executionStarted && state.startedAt === undefined) {
|
|
363
|
-
state.startedAt = Date.now();
|
|
364
|
-
state.endedAt = undefined;
|
|
365
|
-
}
|
|
366
|
-
const text = context.lastComponent ?? new Text("", 0, 0);
|
|
367
|
-
text.setText(formatShellCall(args, config.prompt));
|
|
368
|
-
return text;
|
|
369
|
-
},
|
|
370
|
-
renderResult(result, options, _theme, context) {
|
|
371
|
-
const state = context.state;
|
|
372
|
-
if (state.startedAt !== undefined && options.isPartial && !state.interval) {
|
|
373
|
-
state.interval = setInterval(() => context.invalidate(), 1000);
|
|
374
|
-
}
|
|
375
|
-
if (!options.isPartial || context.isError) {
|
|
376
|
-
state.endedAt ??= Date.now();
|
|
377
|
-
if (state.interval) {
|
|
378
|
-
clearInterval(state.interval);
|
|
379
|
-
state.interval = undefined;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
const component = context.lastComponent ?? new BashResultRenderComponent();
|
|
383
|
-
rebuildBashResultRenderComponent(component, result, options, context.showImages, state.startedAt, state.endedAt);
|
|
384
|
-
component.invalidate();
|
|
385
|
-
return component;
|
|
386
|
-
},
|
|
272
|
+
...createShellRenderers(config.prompt),
|
|
387
273
|
};
|
|
388
274
|
}
|
|
389
275
|
const bashToolConfig = {
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import { Box } from "@earendil-works/pi-tui";
|
|
3
2
|
import { type Static, Type } from "typebox";
|
|
4
3
|
import type { ToolDefinition } from "../extensions/types.ts";
|
|
5
|
-
import { type
|
|
6
|
-
type EditPreview = EditDiffResult | EditDiffError;
|
|
7
|
-
type EditRenderState = {
|
|
8
|
-
callComponent?: EditCallRenderComponent;
|
|
9
|
-
};
|
|
4
|
+
import { type EditRenderState } from "./renderers/edit.ts";
|
|
10
5
|
declare const editSchema: Type.TObject<{
|
|
11
6
|
path: Type.TString;
|
|
12
7
|
edits: Type.TArray<Type.TObject<{
|
|
@@ -39,12 +34,6 @@ export interface EditToolOptions {
|
|
|
39
34
|
/** Custom operations for file editing. Default: local filesystem */
|
|
40
35
|
operations?: EditOperations;
|
|
41
36
|
}
|
|
42
|
-
type EditCallRenderComponent = Box & {
|
|
43
|
-
preview?: EditPreview;
|
|
44
|
-
previewArgsKey?: string;
|
|
45
|
-
previewPending?: boolean;
|
|
46
|
-
settledError?: boolean;
|
|
47
|
-
};
|
|
48
37
|
export declare function createEditToolDefinition(cwd: string, options?: EditToolOptions): ToolDefinition<typeof editSchema, EditToolDetails | undefined, EditRenderState>;
|
|
49
38
|
export declare function createEditTool(cwd: string, options?: EditToolOptions): AgentTool<typeof editSchema>;
|
|
50
39
|
export {};
|