@selesai/code 0.9.11 → 0.9.12
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 +11 -0
- package/dist/config.d.ts +4 -6
- package/dist/config.js +10 -14
- package/dist/core/agent-session.d.ts +0 -1
- package/dist/core/agent-session.js +3 -49
- package/dist/core/extensions/types.d.ts +0 -2
- package/dist/core/settings-manager.d.ts +0 -2
- package/dist/core/settings-manager.js +0 -3
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/defaults/settings.json +0 -1
- package/dist/extensions/model-prompt-injector/index.test.ts +0 -10
- package/dist/extensions/model-prompt-injector/index.ts +0 -3
- package/dist/extensions/pi-intercom/CHANGELOG.md +53 -16
- package/dist/extensions/pi-intercom/README.md +41 -8
- package/dist/extensions/pi-intercom/banner.png +0 -0
- package/dist/extensions/pi-intercom/broker/broker.ts +498 -215
- package/dist/extensions/pi-intercom/broker/client.ts +39 -12
- package/dist/extensions/pi-intercom/broker/extension.test.ts +102 -3
- package/dist/extensions/pi-intercom/broker/paths.test.ts +2 -2
- package/dist/extensions/pi-intercom/broker/protocol.ts +26 -0
- package/dist/extensions/pi-intercom/broker/spawn.test.ts +5 -20
- package/dist/extensions/pi-intercom/config.test.ts +41 -0
- package/dist/extensions/pi-intercom/config.ts +21 -0
- package/dist/extensions/pi-intercom/extension-api.ts +40 -0
- package/dist/extensions/pi-intercom/index.ts +362 -26
- package/dist/extensions/pi-intercom/intercom.integration.test.ts +819 -13
- package/dist/extensions/pi-intercom/package.json +1 -1
- package/dist/extensions/pi-intercom/project-agent.ts +2 -2
- package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +8 -110
- package/dist/extensions/pi-intercom/types.ts +32 -5
- package/dist/extensions/pi-intercom/ui/inline-message.ts +6 -0
- package/dist/extensions/pi-subagents/.github/assets/subagent-fleet-inspector.png +0 -0
- package/dist/extensions/pi-subagents/.github/workflows/release.yml +28 -0
- package/dist/extensions/pi-subagents/.github/workflows/test.yml +51 -0
- package/dist/extensions/pi-subagents/.greptile/config.json +33 -0
- package/dist/extensions/pi-subagents/.greptile/files.json +8 -0
- package/dist/extensions/pi-subagents/.greptile/rules.md +16 -0
- package/dist/extensions/pi-subagents/CHANGELOG.md +309 -87
- package/dist/extensions/pi-subagents/README.md +15 -17
- package/dist/extensions/pi-subagents/agents/oracle.md +3 -1
- package/dist/extensions/pi-subagents/agents/researcher.md +32 -13
- package/dist/extensions/pi-subagents/agents/reviewer.md +13 -2
- package/dist/extensions/pi-subagents/agents/scout.md +2 -2
- package/dist/extensions/pi-subagents/agents/worker.md +2 -1
- package/dist/extensions/pi-subagents/async-retention-discovery-worker.mjs +180 -0
- package/dist/extensions/pi-subagents/docs/configuration.md +106 -27
- package/dist/extensions/pi-subagents/docs/extension-api.md +85 -21
- package/dist/extensions/pi-subagents/docs/missions.md +41 -4
- package/dist/extensions/pi-subagents/docs/models.md +52 -9
- package/dist/extensions/pi-subagents/docs/observability.md +103 -16
- package/dist/extensions/pi-subagents/docs/tool-reference.md +60 -45
- package/dist/extensions/pi-subagents/docs/watchdog.md +60 -3
- package/dist/extensions/pi-subagents/docs/workflows.md +181 -7
- package/dist/extensions/pi-subagents/index.ts +10 -1
- package/dist/extensions/pi-subagents/install.mjs +4 -4
- package/dist/extensions/pi-subagents/package-lock.json +1483 -1470
- package/dist/extensions/pi-subagents/package.json +6 -3
- package/dist/extensions/pi-subagents/prompts/council.md +60 -0
- package/dist/extensions/pi-subagents/prompts/parallel-review.md +5 -1
- package/dist/extensions/pi-subagents/prompts/review-loop.md +9 -5
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +254 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +18 -17
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +107 -140
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +44 -92
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +261 -368
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +6 -2
- package/dist/extensions/pi-subagents/src/agents/agents.ts +388 -85
- package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +14 -0
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +418 -0
- package/dist/extensions/pi-subagents/src/agents/skills.ts +1 -1
- package/dist/extensions/pi-subagents/src/api/agents.ts +7 -0
- package/dist/extensions/pi-subagents/src/api/external-job-provider.ts +195 -0
- package/dist/extensions/pi-subagents/src/api/preflight.ts +88 -27
- package/dist/extensions/pi-subagents/src/api/project-panes.ts +2 -0
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +20 -11
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +14 -6
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -4
- package/dist/extensions/pi-subagents/src/extension/index.ts +270 -187
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +65 -28
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +120 -11
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +46 -64
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +51 -37
- package/dist/extensions/pi-subagents/src/extension/tool-result.ts +19 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -2
- package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +3 -3
- package/dist/extensions/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
- package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -1
- package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -46
- package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +26 -4
- package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +32 -10
- package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +6 -1
- package/dist/extensions/pi-subagents/src/missions/store.ts +4 -9
- package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +2 -2
- package/dist/extensions/pi-subagents/src/policy/authority.ts +2 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +31 -8
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +210 -52
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +63 -33
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +71 -17
- package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +886 -0
- package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +14 -5
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +49 -56
- package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +1 -0
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -33
- package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +5 -0
- package/dist/extensions/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
- package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +22 -12
- package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +105 -71
- package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +68 -19
- package/dist/extensions/pi-subagents/src/runs/background/index-segment.ts +59 -0
- package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +94 -10
- package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +158 -90
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +141 -53
- package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +8 -5
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +14 -4
- package/dist/extensions/pi-subagents/src/runs/background/run-id-query.ts +7 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +13 -14
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +46 -25
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +823 -0
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +9 -3
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +11 -1
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +594 -216
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -13
- package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +23 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +82 -4
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +5 -3
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +21 -14
- package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +153 -58
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +7 -9
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1283 -1657
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +274 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +59 -10
- package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
- package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +36 -0
- package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +52 -2
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +2 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
- package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +14 -0
- package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +243 -0
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +201 -85
- package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +106 -39
- package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +145 -0
- package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +150 -27
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +46 -4
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +19 -15
- package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +5 -1
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +86 -2
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +9 -9
- package/dist/extensions/pi-subagents/src/runs/shared/session-lease.ts +0 -6
- package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +18 -4
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +51 -7
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +62 -21
- package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
- package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -3
- package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +1 -23
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +14 -2
- package/dist/extensions/pi-subagents/src/shared/artifacts.ts +2 -2
- package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +22 -2
- package/dist/extensions/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
- package/dist/extensions/pi-subagents/src/shared/completion-owner.ts +14 -0
- package/dist/extensions/pi-subagents/src/shared/file-system-retry.ts +49 -1
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +59 -1
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +12 -5
- package/dist/extensions/pi-subagents/src/shared/model-info.ts +20 -0
- package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +0 -40
- package/dist/extensions/pi-subagents/src/shared/settings.ts +11 -30
- package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +228 -49
- package/dist/extensions/pi-subagents/src/shared/utils.ts +11 -3
- package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +10 -0
- package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +0 -162
- package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +2 -5
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +105 -13
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +6 -36
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +829 -0
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +1415 -0
- package/dist/extensions/pi-subagents/src/tui/render.ts +78 -7
- package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
- package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
- package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +59 -51
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +8 -2
- package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +2 -1
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +4 -4
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +471 -86
- package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +140 -0
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +1 -1
- package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +0 -54
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1053 -414
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +194 -4
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +59 -4
- package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +0 -77
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +107 -6
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +211 -897
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +265 -375
- package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +77 -7
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +10 -10
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +547 -30
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +2112 -310
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +274 -34
- package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +20 -3
- package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +9 -0
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +30 -5
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -2
- package/dist/extensions/pi-subagents/test/support/register-loader.mjs +1 -0
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +197 -0
- package/dist/extensions/pi-subagents/test/unit/agent-contract.test.ts +14 -0
- package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +204 -27
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +444 -145
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +256 -4
- package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +9 -7
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +152 -22
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +29 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +205 -23
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +579 -0
- package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +3 -3
- package/dist/extensions/pi-subagents/test/unit/capacity-resilient-json.test.ts +155 -0
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +7 -0
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +123 -0
- package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +81 -3
- package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +109 -7
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +5 -2
- package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +3 -2
- package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +79 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/external-job-runner.test.ts +961 -0
- package/dist/extensions/pi-subagents/test/unit/file-system-retry.test.ts +64 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +1110 -0
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +1664 -0
- package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +81 -1
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +138 -11
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +41 -2
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +210 -79
- package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +95 -0
- package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +596 -0
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
- package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +3 -5
- package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +167 -0
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +319 -18
- package/dist/extensions/pi-subagents/test/unit/model-info.test.ts +78 -0
- package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +19 -5
- package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +44 -0
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +129 -0
- package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +231 -2
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +28 -1
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +106 -2
- package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +204 -7
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +59 -4
- package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +2 -6
- package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +34 -2
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -6
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +12 -3
- package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +56 -61
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +416 -1
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +9 -2
- package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +42 -0
- package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +21 -30
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +86 -11
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +49 -1
- package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +233 -5
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +28 -5
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +323 -20
- package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +66 -10
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -5
- package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +174 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +679 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +55 -44
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +399 -84
- package/dist/extensions/pi-subagents/test/unit/session-lease.test.ts +13 -0
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +15 -10
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +11 -7
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -0
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +40 -1
- package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +10 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +38 -3
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +110 -12
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +204 -19
- package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +25 -0
- package/dist/extensions/pi-subagents/test/unit/thinking-ceiling.test.ts +73 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +90 -50
- package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +1 -2
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +234 -7
- package/dist/extensions/pi-subagents/test/unit/watch-strategy.test.ts +24 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +36 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +37 -9
- package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +302 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +167 -7
- package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +113 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +6 -6
- package/dist/extensions/ponytail/index.js +31 -25
- package/dist/extensions/ponytail/ponytail-config.cjs +34 -7
- package/dist/extensions/ponytail/ponytail-instructions.cjs +7 -9
- package/dist/extensions/ponytail/test/extension.test.js +7 -8
- package/dist/extensions/ponytail/test/helpers.test.js +1 -1
- package/dist/skills/brandkit/SKILL.md +799 -0
- package/dist/skills/design-taste-frontend/SKILL.md +1207 -0
- package/dist/skills/design-taste-frontend-v1/SKILL.md +227 -0
- package/dist/skills/full-output-enforcement/SKILL.md +50 -0
- package/dist/skills/gpt-taste/SKILL.md +75 -0
- package/dist/skills/high-end-visual-design/SKILL.md +99 -0
- package/dist/skills/image-to-code/SKILL.md +1229 -0
- package/dist/skills/imagegen-frontend-mobile/SKILL.md +1466 -0
- package/dist/skills/imagegen-frontend-web/SKILL.md +988 -0
- package/dist/skills/industrial-brutalist-ui/SKILL.md +93 -0
- package/dist/skills/minimalist-ui/SKILL.md +86 -0
- package/dist/skills/pi-subagents/SKILL.md +18 -17
- package/dist/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
- package/dist/skills/pi-subagents/references/execution-controls.md +95 -143
- package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
- package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
- package/dist/skills/pi-subagents/references/prompting-and-roles.md +45 -94
- package/dist/skills/ponytail/SKILL.md +12 -8
- package/dist/skills/ponytail-audit/SKILL.md +0 -1
- package/dist/skills/ponytail-debt/SKILL.md +0 -1
- package/dist/skills/ponytail-gain/SKILL.md +0 -1
- package/dist/skills/ponytail-help/SKILL.md +4 -3
- package/dist/skills/ponytail-review/SKILL.md +0 -1
- package/dist/skills/redesign-existing-projects/SKILL.md +179 -0
- package/dist/skills/stitch-design-taste/SKILL.md +185 -0
- package/dist/skills/unlazy/CHANGELOG.md +100 -0
- package/dist/skills/unlazy/CONTRIBUTING.md +66 -0
- package/dist/skills/unlazy/LICENSE +21 -0
- package/dist/skills/unlazy/README.md +242 -0
- package/dist/skills/unlazy/SECURITY.md +70 -0
- package/dist/skills/unlazy/SKILL.md +100 -0
- package/dist/skills/unlazy/package.json +13 -0
- package/dist/skills/unlazy/references/dispatch.md +82 -0
- package/dist/skills/unlazy/references/gates.md +132 -0
- package/dist/skills/unlazy/references/method.md +49 -0
- package/dist/skills/unlazy/references/orchestration.md +99 -0
- package/dist/skills/unlazy/references/parallel.md +123 -0
- package/dist/skills/unlazy/references/token-economy.md +39 -0
- package/dist/skills/unlazy/research/validation-protocol.md +81 -0
- package/dist/skills/unlazy/scripts/dispatch-check.mjs +108 -0
- package/dist/skills/unlazy/scripts/gate-check.mjs +894 -0
- package/dist/skills/unlazy/scripts/gate-lint.mjs +178 -0
- package/dist/skills/unlazy/scripts/install-hooks.mjs +206 -0
- package/dist/skills/unlazy/scripts/lib/check-supervisor.mjs +46 -0
- package/dist/skills/unlazy/scripts/lib/dispatch.mjs +283 -0
- package/dist/skills/unlazy/scripts/lib/gates.mjs +629 -0
- package/dist/skills/unlazy/scripts/lib/process-tree.mjs +161 -0
- package/dist/skills/unlazy/scripts/lib/regex-worker.mjs +9 -0
- package/dist/skills/unlazy/scripts/stop-hook.mjs +174 -0
- package/dist/skills/unlazy/templates/PLAN.md +65 -0
- package/dist/skills/unlazy/templates/gates-leaf.md +51 -0
- package/dist/skills/unlazy/templates/gates-node.md +50 -0
- package/dist/skills/unlazy/tests/contract-tests.mjs +127 -0
- package/dist/skills/unlazy/tests/dispatch-tests.mjs +481 -0
- package/dist/skills/unlazy/tests/hardening-tests.mjs +903 -0
- package/dist/skills/unlazy/tests/lint-tests.mjs +242 -0
- package/dist/skills/unlazy/tests/run-tests.mjs +554 -0
- package/dist/skills/unlazy/tests/self-check.mjs +165 -0
- package/dist/skills/unlazy/tests/stress-tests.mjs +356 -0
- package/dist/skills/web-design-guidelines/SKILL.md +40 -0
- package/docs/settings.md +0 -5
- package/package.json +1 -1
- package/dist/core/tools/schema-prune.d.ts +0 -16
- package/dist/core/tools/schema-prune.js +0 -39
- package/dist/core/tools/schema-prune.test.d.ts +0 -1
- package/dist/core/tools/schema-prune.test.js +0 -111
- package/dist/extensions/pi-subagents/UPSTREAM-V0.50-MAPPING.md +0 -172
- package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +0 -55
- package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +0 -61
- package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +0 -132
- package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +0 -181
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
- package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1581
- package/dist/extensions/pi-subagents/src/shared/env.ts +0 -16
- package/dist/extensions/pi-subagents/src/shared/session-lineage.ts +0 -71
- package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +0 -136
- package/dist/extensions/pi-subagents/src/workflows/workflow-auto-relaunch.ts +0 -41
- package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +0 -466
- package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +0 -1859
- package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +0 -733
- package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +0 -63
- package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +0 -326
- package/dist/extensions/pi-subagents/test/unit/handoff-adoption.test.ts +0 -103
- package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +0 -127
- package/dist/extensions/pi-subagents/test/unit/session-lineage.test.ts +0 -73
- package/dist/extensions/pi-subagents/test/unit/task-aware-routing.test.ts +0 -213
- package/dist/extensions/pi-subagents/test/unit/workflow-auto-relaunch.test.ts +0 -65
|
@@ -13,8 +13,6 @@ export interface ChildToolDiagnostic {
|
|
|
13
13
|
missingMcpDirectTools?: string[];
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const PI_CORE_CHILD_TOOLS = new Set(["bash", "edit", "find", "grep", "ls", "read", "write"]);
|
|
17
|
-
|
|
18
16
|
export function writeChildToolDiagnostic(
|
|
19
17
|
filePath: string,
|
|
20
18
|
required: string[],
|
|
@@ -22,7 +20,7 @@ export function writeChildToolDiagnostic(
|
|
|
22
20
|
agent?: string,
|
|
23
21
|
mcpDirectTools?: string[],
|
|
24
22
|
): ChildToolDiagnostic | undefined {
|
|
25
|
-
const availableNames = new Set(
|
|
23
|
+
const availableNames = new Set(available);
|
|
26
24
|
const missing = required.filter((name) => !availableNames.has(name));
|
|
27
25
|
if (missing.length === 0) {
|
|
28
26
|
fs.rmSync(filePath, { force: true });
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { readSubagentEnv } from "../../shared/env.ts";
|
|
2
|
-
|
|
3
1
|
export const TOOL_TIMEOUT_ENV = "SELESAI_SUBAGENT_TOOL_TIMEOUT_MS";
|
|
4
2
|
|
|
5
3
|
/** Maximum delay a Node.js timer accepts without overflow. */
|
|
@@ -91,5 +89,5 @@ export function resolveToolTimeoutMs(input: ToolTimeoutResolutionInput): { toolT
|
|
|
91
89
|
|
|
92
90
|
/** Read the environment override without requiring callers to know the name. */
|
|
93
91
|
export function toolTimeoutFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {
|
|
94
|
-
return
|
|
92
|
+
return env[TOOL_TIMEOUT_ENV];
|
|
95
93
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isDynamicParallelStep, isParallelStep, type ChainStep, type SequentialStep } from "../../shared/settings.ts";
|
|
2
2
|
import type { SingleResult, SubagentRunMode, WorkflowGraphNode, WorkflowGraphSnapshot, WorkflowNodeStatus } from "../../shared/types.ts";
|
|
3
3
|
|
|
4
4
|
export interface WorkflowGraphBuildInput {
|
|
@@ -81,28 +81,6 @@ export function buildWorkflowGraphSnapshot(input: WorkflowGraphBuildInput): Work
|
|
|
81
81
|
|
|
82
82
|
for (let stepIndex = 0; stepIndex < input.steps.length; stepIndex++) {
|
|
83
83
|
const step = input.steps[stepIndex]!;
|
|
84
|
-
if (isCheckpointStep(step)) {
|
|
85
|
-
const status = normalizeStatus(input.stepStatuses?.[flatIndex]?.status)
|
|
86
|
-
?? (input.currentStepIndex === stepIndex ? "paused" : "pending");
|
|
87
|
-
const checkpoint = { name: step.checkpoint, ...(step.message ? { message: step.message } : {}), status: status === "rejected" ? "rejected" as const : status === "completed" ? "approved" as const : "pending" as const, stepIndex };
|
|
88
|
-
const id = `step-${stepIndex}`;
|
|
89
|
-
nodes.push({
|
|
90
|
-
id,
|
|
91
|
-
kind: "checkpoint",
|
|
92
|
-
phase: step.phase,
|
|
93
|
-
label: step.label?.trim() || step.checkpoint,
|
|
94
|
-
status,
|
|
95
|
-
flatIndex,
|
|
96
|
-
stepIndex,
|
|
97
|
-
checkpoint,
|
|
98
|
-
error: input.stepStatuses?.[flatIndex]?.error,
|
|
99
|
-
});
|
|
100
|
-
pushPhase(phases, step.phase, id);
|
|
101
|
-
if (status === "paused" || input.currentStepIndex === stepIndex) currentNodeId = id;
|
|
102
|
-
flatIndex++;
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
84
|
if (isParallelStep(step)) {
|
|
107
85
|
const groupId = `step-${stepIndex}`;
|
|
108
86
|
const children: WorkflowGraphNode[] = [];
|
|
@@ -46,7 +46,7 @@ export interface WorktreeCleanupTask {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
export type WorktreeCleanupIntent =
|
|
49
|
-
| { kind: "preserve"; capturedDiffs?: WorktreeDiff[]; handoffManifestPath?: string }
|
|
49
|
+
| { kind: "preserve"; capturedDiffs?: WorktreeDiff[]; handoffManifestPath?: string; cleanupBlocker?: string }
|
|
50
50
|
| {
|
|
51
51
|
kind: "discard";
|
|
52
52
|
authorization:
|
|
@@ -115,7 +115,7 @@ interface RepoState {
|
|
|
115
115
|
const DEFAULT_WORKTREE_SETUP_HOOK_TIMEOUT_MS = 30000;
|
|
116
116
|
|
|
117
117
|
function runGit(cwd: string, args: string[]): GitResult {
|
|
118
|
-
const result = spawnSync("git", ["-C", cwd, ...args], { encoding: "utf-8" });
|
|
118
|
+
const result = spawnSync("git", ["-C", cwd, ...args], { encoding: "utf-8", windowsHide: true });
|
|
119
119
|
return {
|
|
120
120
|
stdout: result.stdout ?? "",
|
|
121
121
|
stderr: result.stderr ?? "",
|
|
@@ -338,6 +338,7 @@ function runWorktreeSetupHook(
|
|
|
338
338
|
input: WorktreeSetupHookInput,
|
|
339
339
|
): string[] {
|
|
340
340
|
const result = spawnSync(hook.hookPath, [], {
|
|
341
|
+
windowsHide: true,
|
|
341
342
|
cwd: input.worktreePath,
|
|
342
343
|
encoding: "utf-8",
|
|
343
344
|
input: JSON.stringify(input),
|
|
@@ -571,6 +572,17 @@ function cleanupSingleWorktree(
|
|
|
571
572
|
const errors: string[] = [];
|
|
572
573
|
let worktreeRemoved = false;
|
|
573
574
|
let branchRemoved = false;
|
|
575
|
+
if (intent.kind === "preserve" && intent.cleanupBlocker) {
|
|
576
|
+
return {
|
|
577
|
+
index: worktree.index,
|
|
578
|
+
path: worktree.path,
|
|
579
|
+
branch: worktree.branch,
|
|
580
|
+
worktreeRemoved: false,
|
|
581
|
+
branchRemoved: false,
|
|
582
|
+
preserved: true,
|
|
583
|
+
reason: intent.cleanupBlocker,
|
|
584
|
+
};
|
|
585
|
+
}
|
|
574
586
|
if (intent.kind !== "setup-rollback") {
|
|
575
587
|
try {
|
|
576
588
|
removeSyntheticPathsBeforeDiff(worktree);
|
|
@@ -140,7 +140,7 @@ export function getProjectChainRunsDir(cwd: string): string {
|
|
|
140
140
|
|
|
141
141
|
export function getChainRunsDir(
|
|
142
142
|
projectCwd: string,
|
|
143
|
-
dirPreference: ArtifactDirPreference = "
|
|
143
|
+
dirPreference: ArtifactDirPreference = "session",
|
|
144
144
|
): string {
|
|
145
145
|
switch (dirPreference) {
|
|
146
146
|
case "project":
|
|
@@ -156,7 +156,7 @@ export function getChainRunsDir(
|
|
|
156
156
|
export function getArtifactsDir(
|
|
157
157
|
sessionFile: string | null,
|
|
158
158
|
projectCwd?: string,
|
|
159
|
-
dirPreference: ArtifactDirPreference = "
|
|
159
|
+
dirPreference: ArtifactDirPreference = "session",
|
|
160
160
|
): string {
|
|
161
161
|
switch (dirPreference) {
|
|
162
162
|
case "session":
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import * as fs from "node:fs";
|
|
2
3
|
import * as path from "node:path";
|
|
3
4
|
import { DEFAULT_FILE_SYSTEM_RETRY_DELAYS_MS, runFileSystemOperationWithRetry, waitForFileSystemRetry } from "./file-system-retry.ts";
|
|
4
5
|
|
|
5
6
|
type AtomicJsonFs = Pick<typeof fs, "mkdirSync" | "writeFileSync" | "renameSync" | "rmSync">;
|
|
6
7
|
|
|
8
|
+
const MAX_PATH_COMPONENT_BYTES = 255;
|
|
9
|
+
|
|
7
10
|
type AtomicJsonWriterOptions = {
|
|
8
11
|
fs?: AtomicJsonFs;
|
|
9
12
|
now?: () => number;
|
|
@@ -28,6 +31,13 @@ function renameWithRetry(
|
|
|
28
31
|
}, { retryDelaysMs, wait });
|
|
29
32
|
}
|
|
30
33
|
|
|
34
|
+
function tempBaseName(filePath: string, pid: number, nowMs: number, randomId: string): string {
|
|
35
|
+
const suffix = `.${pid}.${nowMs}.${randomId}.tmp`;
|
|
36
|
+
const preferred = `.${path.basename(filePath)}${suffix}`;
|
|
37
|
+
if (Buffer.byteLength(preferred, "utf-8") <= MAX_PATH_COMPONENT_BYTES) return preferred;
|
|
38
|
+
return `.${createHash("sha256").update(path.basename(filePath)).digest("hex")}${suffix}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
31
41
|
export function createAtomicJsonWriter(options: AtomicJsonWriterOptions = {}): (filePath: string, payload: object) => void {
|
|
32
42
|
const fsImpl = options.fs ?? fs;
|
|
33
43
|
const now = options.now ?? Date.now;
|
|
@@ -46,13 +56,23 @@ export function createAtomicJsonWriter(options: AtomicJsonWriterOptions = {}): (
|
|
|
46
56
|
}, { retryDelaysMs: directoryRetryDelaysMs, wait });
|
|
47
57
|
const tempPath = path.join(
|
|
48
58
|
path.dirname(filePath),
|
|
49
|
-
|
|
59
|
+
tempBaseName(filePath, pid, now(), random().toString(36).slice(2)),
|
|
50
60
|
);
|
|
61
|
+
let writeError: unknown;
|
|
51
62
|
try {
|
|
52
63
|
fsImpl.writeFileSync(tempPath, JSON.stringify(payload, null, 2), mode === undefined ? "utf-8" : { encoding: "utf-8", mode });
|
|
53
64
|
renameWithRetry(fsImpl, tempPath, filePath, renameRetryDelaysMs, wait);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
writeError = error;
|
|
67
|
+
throw error;
|
|
54
68
|
} finally {
|
|
55
|
-
|
|
69
|
+
try {
|
|
70
|
+
fsImpl.rmSync(tempPath, { force: true });
|
|
71
|
+
} catch (cleanupError) {
|
|
72
|
+
// Preserve the write/rename failure: cleanup is best effort and must
|
|
73
|
+
// not hide the error callers need to classify or report.
|
|
74
|
+
if (writeError === undefined) throw cleanupError;
|
|
75
|
+
}
|
|
56
76
|
}
|
|
57
77
|
};
|
|
58
78
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { isStorageCapacityError } from "./file-system-retry.ts";
|
|
2
|
+
import { writeAtomicJson } from "./atomic-json.ts";
|
|
3
|
+
|
|
4
|
+
type TimerApi = {
|
|
5
|
+
setTimeout(handler: () => void, delayMs: number): unknown;
|
|
6
|
+
clearTimeout(handle: unknown): void;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const defaultTimerApi: TimerApi = {
|
|
10
|
+
setTimeout: (handler, delayMs) => setTimeout(handler, delayMs),
|
|
11
|
+
clearTimeout: (handle) => clearTimeout(handle as ReturnType<typeof setTimeout>),
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type CapacityResilientJsonWriterOptions = {
|
|
15
|
+
/** The underlying write operation. It must be atomic for each target path. */
|
|
16
|
+
write?: (filePath: string, payload: object) => void;
|
|
17
|
+
/** Keep retry timers referenced by the event loop (needed by child runners). */
|
|
18
|
+
keepAlive?: boolean;
|
|
19
|
+
retryDelayMs?: number;
|
|
20
|
+
timerApi?: TimerApi;
|
|
21
|
+
onError?: (error: unknown, filePath: string) => void;
|
|
22
|
+
onSuccess?: (filePath: string, payload: object) => void;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type CapacityResilientJsonWriter = {
|
|
26
|
+
write(filePath: string, payload: object, writeOperation?: (filePath: string, payload: object) => void): void;
|
|
27
|
+
pendingCount(): number;
|
|
28
|
+
dispose(): void;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Defers only storage-capacity failures, retaining the newest payload per path.
|
|
33
|
+
* Initial/ordinary writes remain synchronous and preserve their throwing contract;
|
|
34
|
+
* only ENOSPC-like failures enter the guarded retry loop.
|
|
35
|
+
*/
|
|
36
|
+
export function createCapacityResilientJsonWriter(options: CapacityResilientJsonWriterOptions = {}): CapacityResilientJsonWriter {
|
|
37
|
+
const defaultWrite = options.write ?? writeAtomicJson;
|
|
38
|
+
const keepAlive = options.keepAlive ?? false;
|
|
39
|
+
const retryDelayMs = options.retryDelayMs ?? 1_000;
|
|
40
|
+
const timerApi = options.timerApi ?? defaultTimerApi;
|
|
41
|
+
const onError = options.onError ?? ((error, filePath) => console.error(`Failed to persist JSON '${filePath}':`, error));
|
|
42
|
+
const onSuccess = options.onSuccess;
|
|
43
|
+
const reportError = (error: unknown, filePath: string): void => {
|
|
44
|
+
try {
|
|
45
|
+
onError(error, filePath);
|
|
46
|
+
} catch (callbackError) {
|
|
47
|
+
console.error(`Failed to report JSON persistence error for '${filePath}':`, callbackError);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const notifySuccess = (filePath: string, payload: object): void => {
|
|
51
|
+
if (!onSuccess) return;
|
|
52
|
+
try {
|
|
53
|
+
onSuccess(filePath, payload);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
reportError(error, filePath);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const pending = new Map<string, { payload: object; write: (filePath: string, payload: object) => void }>();
|
|
59
|
+
let retryTimer: unknown;
|
|
60
|
+
|
|
61
|
+
const scheduleRetry = (): void => {
|
|
62
|
+
if (retryTimer !== undefined) return;
|
|
63
|
+
retryTimer = timerApi.setTimeout(() => {
|
|
64
|
+
retryTimer = undefined;
|
|
65
|
+
for (const [filePath, entry] of pending) {
|
|
66
|
+
try {
|
|
67
|
+
entry.write(filePath, entry.payload);
|
|
68
|
+
pending.delete(filePath);
|
|
69
|
+
notifySuccess(filePath, entry.payload);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
if (isStorageCapacityError(error)) continue;
|
|
72
|
+
pending.delete(filePath);
|
|
73
|
+
reportError(error, filePath);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (pending.size > 0) scheduleRetry();
|
|
77
|
+
}, retryDelayMs);
|
|
78
|
+
if (!keepAlive && typeof retryTimer === "object" && retryTimer !== null && "unref" in retryTimer && typeof retryTimer.unref === "function") {
|
|
79
|
+
retryTimer.unref();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
write(filePath, payload, writeOperation = defaultWrite): void {
|
|
85
|
+
try {
|
|
86
|
+
writeOperation(filePath, payload);
|
|
87
|
+
pending.delete(filePath);
|
|
88
|
+
notifySuccess(filePath, payload);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
if (!isStorageCapacityError(error)) throw error;
|
|
91
|
+
pending.set(filePath, { payload, write: writeOperation });
|
|
92
|
+
scheduleRetry();
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
pendingCount: () => pending.size,
|
|
96
|
+
dispose: (): void => {
|
|
97
|
+
if (retryTimer !== undefined) timerApi.clearTimeout(retryTimer);
|
|
98
|
+
retryTimer = undefined;
|
|
99
|
+
pending.clear();
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
const COMPLETION_OWNER_KEY = Symbol.for("pi-subagents.completion-owner-id");
|
|
4
|
+
|
|
5
|
+
type CompletionOwnerGlobal = typeof globalThis & {
|
|
6
|
+
[COMPLETION_OWNER_KEY]?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/** Stable for one parent Pi process across extension reloads. */
|
|
10
|
+
export function currentCompletionOwnerId(): string {
|
|
11
|
+
const runtime = globalThis as CompletionOwnerGlobal;
|
|
12
|
+
runtime[COMPLETION_OWNER_KEY] ??= randomUUID();
|
|
13
|
+
return runtime[COMPLETION_OWNER_KEY];
|
|
14
|
+
}
|
|
@@ -1,8 +1,51 @@
|
|
|
1
1
|
const WAIT_BUFFER = typeof SharedArrayBuffer !== "undefined" ? new SharedArrayBuffer(4) : undefined;
|
|
2
2
|
const WAIT_VIEW = WAIT_BUFFER ? new Int32Array(WAIT_BUFFER) : undefined;
|
|
3
3
|
const RETRYABLE_FILE_SYSTEM_ERROR_CODES = new Set(["EACCES", "EBUSY", "EPERM"]);
|
|
4
|
+
const STORAGE_CAPACITY_ERROR_CODES = new Set(["EDQUOT", "EMFILE", "ENFILE", "ENOSPC"]);
|
|
4
5
|
|
|
5
|
-
export const
|
|
6
|
+
export const FS_RETRY_MAX_TOTAL_MS_ENV = "SELESAI_SUBAGENT_FS_RETRY_MAX_TOTAL_MS";
|
|
7
|
+
|
|
8
|
+
const BASE_FILE_SYSTEM_RETRY_DELAYS_MS = [10, 25, 50, 100, 200, 500, 1000, 2000, 4000] as const;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Clamp the retry ladder to a total sleep budget, preserving its length.
|
|
12
|
+
*
|
|
13
|
+
* waitForFileSystemRetry blocks the calling thread, so the ladder above is also
|
|
14
|
+
* a ceiling on how long a single contended rename can stall that thread: about
|
|
15
|
+
* 7.9s. That is fine for a short-lived CLI. A long-lived host that loads this
|
|
16
|
+
* extension in-process runs the same writers on its event loop, where an 8s
|
|
17
|
+
* stall stops it serving anything at all -- and because Atomics.wait parks
|
|
18
|
+
* rather than spins, it presents as an unresponsive process at 0% CPU.
|
|
19
|
+
*
|
|
20
|
+
* The length is preserved deliberately: run-fanout-budget.ts and
|
|
21
|
+
* workflow-state.ts index this array by attempt number and treat running off
|
|
22
|
+
* the end as "timed out acquiring lock". Shortening it would quietly shrink
|
|
23
|
+
* those attempt budgets too, so only the sleeps shrink here.
|
|
24
|
+
*
|
|
25
|
+
* Unset by default, so behaviour is unchanged unless a host opts in. Opting in
|
|
26
|
+
* trades lock-wait tolerance for responsiveness: entries clamped to 0 return
|
|
27
|
+
* immediately, so contention that would previously have been waited out is
|
|
28
|
+
* surfaced as an error sooner.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveFileSystemRetryDelays(
|
|
31
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
32
|
+
base: readonly number[] = BASE_FILE_SYSTEM_RETRY_DELAYS_MS,
|
|
33
|
+
): readonly number[] {
|
|
34
|
+
const raw = env[FS_RETRY_MAX_TOTAL_MS_ENV];
|
|
35
|
+
if (raw === undefined || raw.trim() === "") return base;
|
|
36
|
+
const budget = Number(raw);
|
|
37
|
+
if (!Number.isInteger(budget) || budget < 0) {
|
|
38
|
+
throw new Error(`${FS_RETRY_MAX_TOTAL_MS_ENV} must be a non-negative integer number of milliseconds.`);
|
|
39
|
+
}
|
|
40
|
+
let spent = 0;
|
|
41
|
+
return base.map((delayMs) => {
|
|
42
|
+
const allowed = Math.max(0, Math.min(delayMs, budget - spent));
|
|
43
|
+
spent += allowed;
|
|
44
|
+
return allowed;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const DEFAULT_FILE_SYSTEM_RETRY_DELAYS_MS = resolveFileSystemRetryDelays();
|
|
6
49
|
|
|
7
50
|
export type FileSystemRetryOptions = {
|
|
8
51
|
retryDelaysMs?: readonly number[];
|
|
@@ -32,6 +75,11 @@ export function isRetryableFileSystemError(error: unknown): boolean {
|
|
|
32
75
|
return typeof code === "string" && RETRYABLE_FILE_SYSTEM_ERROR_CODES.has(code);
|
|
33
76
|
}
|
|
34
77
|
|
|
78
|
+
export function isStorageCapacityError(error: unknown): boolean {
|
|
79
|
+
const code = (error as NodeJS.ErrnoException | undefined)?.code;
|
|
80
|
+
return typeof code === "string" && STORAGE_CAPACITY_ERROR_CODES.has(code);
|
|
81
|
+
}
|
|
82
|
+
|
|
35
83
|
export function runFileSystemOperationWithRetry<T>(operation: () => T, options: FileSystemRetryOptions = {}): T {
|
|
36
84
|
const retryDelaysMs = options.retryDelaysMs ?? DEFAULT_FILE_SYSTEM_RETRY_DELAYS_MS;
|
|
37
85
|
const wait = options.wait ?? waitForFileSystemRetry;
|
|
@@ -56,6 +56,48 @@ export function resolveSubagentContext(value: unknown): SubagentExecutionContext
|
|
|
56
56
|
return value === "fork" ? "fork" : "fresh";
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
export interface PreferredForkAvailability {
|
|
60
|
+
getSessionFile(): string | undefined;
|
|
61
|
+
getLeafId?: () => string | null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface PreferredForkSnapshot {
|
|
65
|
+
parentSessionFile?: string | null;
|
|
66
|
+
leafId?: string | null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface SubagentLaunchContextInput {
|
|
70
|
+
explicitContext?: SubagentExecutionContext;
|
|
71
|
+
agentDefaultContext?: SubagentExecutionContext;
|
|
72
|
+
defaultSubagentContext?: SubagentExecutionContext;
|
|
73
|
+
canUseImplicitFork: boolean;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Resolve the actual launch context from explicit, global, and agent preferences. */
|
|
77
|
+
export function resolveSubagentLaunchContext(input: SubagentLaunchContextInput): SubagentExecutionContext {
|
|
78
|
+
if (input.explicitContext !== undefined) return input.explicitContext;
|
|
79
|
+
const preferredContext = input.defaultSubagentContext ?? input.agentDefaultContext ?? "fresh";
|
|
80
|
+
return preferredContext === "fork" && input.canUseImplicitFork ? "fork" : "fresh";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** True when an implicit `defaultContext: fork` can create a real branch now.
|
|
84
|
+
* Explicit `context: "fork"` stays strict and does not use this preference. */
|
|
85
|
+
export function canPreferFork(sessionManager: PreferredForkAvailability): boolean {
|
|
86
|
+
return canPreferForkFromSnapshot({
|
|
87
|
+
parentSessionFile: sessionManager.getSessionFile(),
|
|
88
|
+
leafId: sessionManager.getLeafId?.() ?? null,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function canPreferForkFromSnapshot(input: PreferredForkSnapshot): boolean {
|
|
93
|
+
if (!input.parentSessionFile || !input.leafId) return false;
|
|
94
|
+
try {
|
|
95
|
+
return fs.existsSync(input.parentSessionFile);
|
|
96
|
+
} catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
59
101
|
/** Decide whether a resolved child model uses Anthropic's provider or message API, which
|
|
60
102
|
* requires the sanitized fork to disable thinking. Unknown models stay conservative. */
|
|
61
103
|
export function forkedChildRequiresThinkingOff(
|
|
@@ -166,7 +208,23 @@ export function createForkContextResolver(
|
|
|
166
208
|
const openSession = options.openSession
|
|
167
209
|
?? sessionManager.openSession
|
|
168
210
|
?? ((file: string, dir?: string) => SessionManager.open(file, dir));
|
|
169
|
-
|
|
211
|
+
// Fork files must not land in the parent's top-level session directory.
|
|
212
|
+
// Pi's recent-session discovery (`pi -c` → findMostRecentSession) is
|
|
213
|
+
// non-recursive and picks the largest-mtime *.jsonl in that directory, so
|
|
214
|
+
// a still-running forked subagent — which keeps appending after the parent
|
|
215
|
+
// went idle — would hijack the next `pi -c` away from the conversation the
|
|
216
|
+
// user actually left. Nesting fork sessions in a per-parent directory keeps
|
|
217
|
+
// them invisible to that discovery; the `parentSession` header still
|
|
218
|
+
// records the tree relationship. The directory mirrors
|
|
219
|
+
// getSubagentSessionRoot() plus a "forks" level so fork files never sit
|
|
220
|
+
// loose next to run-N/ result directories. Derived from the file path
|
|
221
|
+
// rather than getSessionDir() so it also works when the manager cannot
|
|
222
|
+
// report its directory.
|
|
223
|
+
const sessionDir = path.join(
|
|
224
|
+
path.dirname(parentSessionFile),
|
|
225
|
+
path.basename(parentSessionFile, ".jsonl"),
|
|
226
|
+
"forks",
|
|
227
|
+
);
|
|
170
228
|
const cachedResolutions = new Map<number, ForkContextResolution>();
|
|
171
229
|
|
|
172
230
|
const resolveFork = (index = 0): ForkContextResolution => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import type { AgentConfig } from "../agents/agents.ts";
|
|
4
|
+
import type { ExtensionBindings } from "../runs/shared/extension-bindings.ts";
|
|
4
5
|
|
|
5
6
|
export const AGENT_DEFINITION_PROJECTION_VERSION = 1 as const;
|
|
6
7
|
export const LAUNCH_BINDING_PROJECTION_VERSION = 1 as const;
|
|
@@ -17,7 +18,7 @@ function stableJson(value: unknown): string {
|
|
|
17
18
|
return JSON.stringify(value);
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
function
|
|
21
|
+
export function stableJsonDigest(value: unknown): string {
|
|
21
22
|
return createHash("sha256").update(stableJson(value)).digest("hex");
|
|
22
23
|
}
|
|
23
24
|
|
|
@@ -44,7 +45,9 @@ export function projectAgentDefinition(agent: AgentConfig): Record<string, unkno
|
|
|
44
45
|
inheritProjectContext: agent.inheritProjectContext,
|
|
45
46
|
inheritSkills: agent.inheritSkills,
|
|
46
47
|
model: agent.model,
|
|
48
|
+
modelProvider: agent.modelProvider,
|
|
47
49
|
fallbackModels: agent.fallbackModels,
|
|
50
|
+
fast: agent.fast,
|
|
48
51
|
thinking: agent.thinking,
|
|
49
52
|
tools: agent.tools,
|
|
50
53
|
mcpDirectTools: agent.mcpDirectTools,
|
|
@@ -70,7 +73,7 @@ export function projectAgentDefinition(agent: AgentConfig): Record<string, unkno
|
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
export function agentDefinitionDigest(agent: AgentConfig): string {
|
|
73
|
-
return
|
|
76
|
+
return stableJsonDigest(projectAgentDefinition(agent));
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
export interface LaunchBindingInput {
|
|
@@ -79,6 +82,7 @@ export interface LaunchBindingInput {
|
|
|
79
82
|
task?: string;
|
|
80
83
|
model?: string;
|
|
81
84
|
modelCandidates?: string[];
|
|
85
|
+
fast?: boolean;
|
|
82
86
|
thinking?: string;
|
|
83
87
|
systemPrompt?: string | null;
|
|
84
88
|
systemPromptMode?: AgentConfig["systemPromptMode"];
|
|
@@ -92,6 +96,7 @@ export interface LaunchBindingInput {
|
|
|
92
96
|
outputPath?: string;
|
|
93
97
|
outputMode?: string;
|
|
94
98
|
structuredOutputSchema?: unknown;
|
|
99
|
+
extensionBindings?: ExtensionBindings;
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
/** Canonical projection of the resolved inputs handed to the child. */
|
|
@@ -99,12 +104,13 @@ export function projectLaunchBinding(input: LaunchBindingInput): Record<string,
|
|
|
99
104
|
return {
|
|
100
105
|
version: LAUNCH_BINDING_PROJECTION_VERSION,
|
|
101
106
|
definitionDigest: input.definitionDigest,
|
|
102
|
-
taskDigest: input.task === undefined ? undefined :
|
|
107
|
+
taskDigest: input.task === undefined ? undefined : stableJsonDigest(input.task),
|
|
103
108
|
// The ordered candidate set already contains each attempted model; keeping only
|
|
104
109
|
// this set makes retries correlate to the same preflight binding.
|
|
105
110
|
modelCandidates: input.modelCandidates,
|
|
111
|
+
fast: input.fast,
|
|
106
112
|
thinking: input.thinking,
|
|
107
|
-
systemPromptDigest: input.systemPrompt === undefined || input.systemPrompt === null ? undefined :
|
|
113
|
+
systemPromptDigest: input.systemPrompt === undefined || input.systemPrompt === null ? undefined : stableJsonDigest(input.systemPrompt),
|
|
108
114
|
systemPromptMode: input.systemPromptMode,
|
|
109
115
|
inheritProjectContext: input.inheritProjectContext,
|
|
110
116
|
inheritSkills: input.inheritSkills,
|
|
@@ -116,9 +122,10 @@ export function projectLaunchBinding(input: LaunchBindingInput): Record<string,
|
|
|
116
122
|
outputPath: input.outputPath,
|
|
117
123
|
outputMode: input.outputMode,
|
|
118
124
|
structuredOutputSchema: input.structuredOutputSchema,
|
|
125
|
+
extensionBindings: input.extensionBindings,
|
|
119
126
|
};
|
|
120
127
|
}
|
|
121
128
|
|
|
122
129
|
export function launchBindingDigest(input: LaunchBindingInput): string {
|
|
123
|
-
return
|
|
130
|
+
return stableJsonDigest(projectLaunchBinding(input));
|
|
124
131
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ModelCost } from "@earendil-works/pi-ai";
|
|
2
|
+
|
|
1
3
|
export const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"] as const;
|
|
2
4
|
export type ThinkingLevel = typeof THINKING_LEVELS[number];
|
|
3
5
|
export type ThinkingLevelMap = Partial<Record<ThinkingLevel, string | null>>;
|
|
@@ -9,6 +11,14 @@ export interface ModelInfo {
|
|
|
9
11
|
api?: string;
|
|
10
12
|
reasoning?: boolean;
|
|
11
13
|
thinkingLevelMap?: ThinkingLevelMap;
|
|
14
|
+
/** Context window in tokens, when the host model registry reports one. */
|
|
15
|
+
contextWindow?: number;
|
|
16
|
+
/** Maximum output tokens, when the host model registry reports one. */
|
|
17
|
+
maxTokens?: number;
|
|
18
|
+
/** Input modalities reported by the registry, e.g. ["text", "image"]. */
|
|
19
|
+
input?: string[];
|
|
20
|
+
/** Per-token pricing from the registry (USD per 1M tokens). */
|
|
21
|
+
cost?: ModelCost;
|
|
12
22
|
}
|
|
13
23
|
|
|
14
24
|
interface RegistryModelLike {
|
|
@@ -17,6 +27,10 @@ interface RegistryModelLike {
|
|
|
17
27
|
api?: string;
|
|
18
28
|
reasoning?: boolean;
|
|
19
29
|
thinkingLevelMap?: ThinkingLevelMap;
|
|
30
|
+
contextWindow?: number;
|
|
31
|
+
maxTokens?: number;
|
|
32
|
+
input?: string[];
|
|
33
|
+
cost?: ModelCost;
|
|
20
34
|
}
|
|
21
35
|
|
|
22
36
|
export function toModelInfo(model: RegistryModelLike): ModelInfo {
|
|
@@ -27,6 +41,12 @@ export function toModelInfo(model: RegistryModelLike): ModelInfo {
|
|
|
27
41
|
api: model.api,
|
|
28
42
|
reasoning: model.reasoning,
|
|
29
43
|
thinkingLevelMap: model.thinkingLevelMap,
|
|
44
|
+
...(typeof model.contextWindow === "number" && Number.isFinite(model.contextWindow) && model.contextWindow > 0 ? { contextWindow: model.contextWindow } : {}),
|
|
45
|
+
...(typeof model.maxTokens === "number" && Number.isFinite(model.maxTokens) && model.maxTokens > 0 ? { maxTokens: model.maxTokens } : {}),
|
|
46
|
+
...(Array.isArray(model.input) && model.input.length > 0 ? { input: [...model.input] } : {}),
|
|
47
|
+
...(model.cost && Number.isFinite(model.cost.input) && Number.isFinite(model.cost.output)
|
|
48
|
+
? { cost: { ...model.cost, ...(model.cost.tiers ? { tiers: model.cost.tiers.map((tier) => ({ ...tier })) } : {}) } }
|
|
49
|
+
: {}),
|
|
30
50
|
};
|
|
31
51
|
}
|
|
32
52
|
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
1
|
import * as path from "node:path";
|
|
3
2
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { parseFrontmatter } from "../agents/frontmatter.ts";
|
|
5
3
|
import { getAgentDir, getProjectConfigDir } from "./utils.ts";
|
|
6
4
|
|
|
7
|
-
const PROMPT_REF_PATTERN = /^(package|user|project):([A-Za-z0-9][A-Za-z0-9._-]{0,127})$/;
|
|
8
|
-
const PROMPT_VARIABLE_PATTERN = /\{\{(\w+)\}\}/g;
|
|
9
|
-
|
|
10
|
-
type PromptVariable = string | number | boolean;
|
|
11
|
-
|
|
12
5
|
export function getPromptDirectories(cwd: string) {
|
|
13
6
|
return {
|
|
14
7
|
package: path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "prompts"),
|
|
@@ -16,36 +9,3 @@ export function getPromptDirectories(cwd: string) {
|
|
|
16
9
|
project: path.join(getProjectConfigDir(cwd), "prompts"),
|
|
17
10
|
};
|
|
18
11
|
}
|
|
19
|
-
|
|
20
|
-
function promptVariables(vars: unknown): Record<string, PromptVariable> {
|
|
21
|
-
if (vars === undefined) return {};
|
|
22
|
-
if (!vars || typeof vars !== "object" || Array.isArray(vars)) throw new Error("prompts.render vars must be a plain object.");
|
|
23
|
-
const prototype = Object.getPrototypeOf(vars);
|
|
24
|
-
if (prototype !== null && prototype !== Object.prototype) throw new Error("prompts.render vars must be a plain object.");
|
|
25
|
-
for (const [name, value] of Object.entries(vars)) {
|
|
26
|
-
if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
|
|
27
|
-
throw new Error(`prompts.render variable '${name}' must be a string, number, or boolean.`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return vars as Record<string, PromptVariable>;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function renderWorkflowPrompt(ref: string, vars: unknown, cwd: string): string {
|
|
34
|
-
const match = ref.match(PROMPT_REF_PATTERN);
|
|
35
|
-
if (!match) throw new Error("prompts.render ref must use package:<name>, user:<name>, or project:<name>.");
|
|
36
|
-
const scope = match[1] as keyof ReturnType<typeof getPromptDirectories>;
|
|
37
|
-
const name = match[2]!;
|
|
38
|
-
const filePath = path.join(getPromptDirectories(cwd)[scope], `${name}.md`);
|
|
39
|
-
let content: string;
|
|
40
|
-
try {
|
|
41
|
-
if (!fs.lstatSync(filePath).isFile()) throw new Error("not a regular file");
|
|
42
|
-
content = fs.readFileSync(filePath, "utf-8");
|
|
43
|
-
} catch (error) {
|
|
44
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
45
|
-
throw new Error(`Could not read prompt fragment '${ref}': ${detail}`);
|
|
46
|
-
}
|
|
47
|
-
const variables = promptVariables(vars);
|
|
48
|
-
return parseFrontmatter(content).body.trim().replace(PROMPT_VARIABLE_PATTERN, (placeholder, variable: string) => {
|
|
49
|
-
return Object.hasOwn(variables, variable) ? String(variables[variable]) : placeholder;
|
|
50
|
-
});
|
|
51
|
-
}
|