@fitchmultz/pi-subagents 0.44.7 → 0.45.0
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 +258 -7
- package/LICENSE +1 -0
- package/README.md +58 -1483
- package/agents/context-builder.md +19 -1
- package/agents/debugger.md +10 -3
- package/agents/delegate.md +1 -0
- package/agents/fixer.md +4 -1
- package/agents/oracle.md +13 -2
- package/agents/planner.md +14 -3
- package/agents/researcher.md +11 -2
- package/agents/reviewer-claude.md +11 -2
- package/agents/reviewer-gpt.md +12 -2
- package/agents/reviewer-ponytail.md +11 -1
- package/agents/reviewer-security.md +13 -2
- package/agents/reviewer.md +12 -3
- package/agents/scout.md +12 -1
- package/agents/ui-designer.md +10 -3
- package/agents/watcher.md +1 -0
- package/agents/worker.md +8 -2
- package/agents/writer.md +6 -3
- package/dist/agents/agent-defaults.js +9 -0
- package/dist/agents/agent-definition.js +196 -0
- package/dist/agents/agent-management.js +64 -905
- package/dist/agents/agent-scope.js +4 -2
- package/dist/agents/agent-selection.js +10 -5
- package/dist/agents/agent-serializer.js +55 -67
- package/dist/agents/agents.js +75 -716
- package/dist/agents/builtin-overrides.js +218 -0
- package/dist/agents/chain-serializer.js +3 -367
- package/dist/agents/config-values.js +52 -0
- package/dist/agents/discovery-paths.js +91 -0
- package/dist/agents/frontmatter.js +15 -5
- package/dist/agents/identity.js +25 -8
- package/dist/agents/json-chain.js +254 -0
- package/dist/agents/management-config.js +332 -0
- package/dist/agents/management-format.js +231 -0
- package/dist/agents/management-persistence.js +287 -0
- package/dist/agents/management-targets.js +136 -0
- package/dist/agents/management-warnings.js +81 -0
- package/dist/agents/markdown-chain.js +210 -0
- package/dist/agents/package-agents.js +154 -0
- package/dist/agents/skill-files.js +157 -0
- package/dist/agents/skill-search-paths.js +246 -0
- package/dist/agents/skill-types.js +1 -0
- package/dist/agents/skills.js +54 -499
- package/dist/extension/acceptance-schema.js +55 -0
- package/dist/extension/build-info.js +1 -1
- package/dist/extension/chain-schema.js +196 -0
- package/dist/extension/child-runtime.js +237 -0
- package/dist/extension/compact-tools.js +122 -51
- package/dist/extension/config-schema.js +29 -0
- package/dist/extension/config.js +27 -11
- package/dist/extension/control-notice-schema.js +37 -0
- package/dist/extension/control-notices.js +13 -6
- package/dist/extension/delegation-bridges.js +43 -0
- package/dist/extension/doctor.js +48 -25
- package/dist/extension/everyday-schemas.js +207 -0
- package/dist/extension/fanout-child.js +18 -319
- package/dist/extension/index.js +8 -563
- package/dist/extension/message-renderers.js +225 -0
- package/dist/extension/nested-control-inbox.js +154 -0
- package/dist/extension/parent-runtime.js +339 -0
- package/dist/extension/primary-tool.js +69 -0
- package/dist/extension/result-snapshot.js +22 -0
- package/dist/extension/runtime-reload.js +62 -0
- package/dist/extension/runtime-storage.js +43 -0
- package/dist/extension/schema-overrides.js +75 -0
- package/dist/extension/schemas.js +265 -336
- package/dist/extension/tool-input.js +27 -12
- package/dist/extension/tool-result.js +19 -4
- package/dist/history/answer-texts.js +57 -0
- package/dist/history/canonical-result.js +76 -43
- package/dist/history/canonical-selection.js +40 -0
- package/dist/history/database-generation.js +82 -0
- package/dist/history/database.js +57 -33
- package/dist/history/entry-ingestion.js +61 -0
- package/dist/history/index.js +242 -97
- package/dist/history/ingest.js +168 -331
- package/dist/history/output-digests.js +40 -0
- package/dist/history/preview.js +210 -0
- package/dist/history/prune.js +33 -0
- package/dist/history/queries.js +60 -349
- package/dist/history/query-scope.js +190 -0
- package/dist/history/rows.js +77 -0
- package/dist/history/run-projection.js +137 -0
- package/dist/history/run-queries.js +153 -0
- package/dist/history/schema.js +31 -0
- package/dist/history/search-queries.js +163 -0
- package/dist/history/selected-record.js +108 -0
- package/dist/history/source-file.js +45 -0
- package/dist/history/source-watches.js +141 -0
- package/dist/history/store.js +164 -153
- package/dist/history/text-chunks.js +169 -0
- package/dist/history/text.js +35 -0
- package/dist/history/transcript-queries.js +177 -0
- package/dist/history/types.js +5 -1
- package/dist/history/values.js +36 -0
- package/dist/history/wire-inputs.js +122 -0
- package/dist/history/wire-models.js +38 -0
- package/dist/history/worker-runtime.js +441 -0
- package/dist/history/worker.js +66 -462
- package/dist/intercom/intercom-bridge.js +48 -20
- package/dist/intercom/live-intercom.js +80 -23
- package/dist/intercom/nested-result-tree.js +163 -0
- package/dist/intercom/result-delivery.js +40 -0
- package/dist/intercom/result-intercom.js +178 -261
- package/dist/pi-intercom/agent-dir.js +7 -3
- package/dist/pi-intercom/async.js +27 -0
- package/dist/pi-intercom/bridge-ask.js +57 -0
- package/dist/pi-intercom/bridge-config.js +79 -0
- package/dist/pi-intercom/bridge-http.js +86 -0
- package/dist/pi-intercom/bridge-protocol.js +106 -0
- package/dist/pi-intercom/bridge-routes.js +64 -0
- package/dist/pi-intercom/bridge-session.js +416 -0
- package/dist/pi-intercom/bridge.js +182 -603
- package/dist/pi-intercom/broker/broker.js +236 -244
- package/dist/pi-intercom/broker/client.js +189 -304
- package/dist/pi-intercom/broker/connection.js +165 -0
- package/dist/pi-intercom/broker/framing.js +5 -3
- package/dist/pi-intercom/broker/paths.js +4 -1
- package/dist/pi-intercom/broker/pid.js +53 -25
- package/dist/pi-intercom/broker/snapshot-reader.js +78 -0
- package/dist/pi-intercom/broker/snapshots.js +188 -0
- package/dist/pi-intercom/broker/spawn.js +36 -25
- package/dist/pi-intercom/config.js +85 -71
- package/dist/pi-intercom/connection.js +297 -0
- package/dist/pi-intercom/identity.js +58 -0
- package/dist/pi-intercom/inbound-delivery.js +356 -0
- package/dist/pi-intercom/inbound-journal.js +303 -0
- package/dist/pi-intercom/inbound-record.js +113 -0
- package/dist/pi-intercom/inbound.js +179 -0
- package/dist/pi-intercom/index.js +79 -2933
- package/dist/pi-intercom/inspection.js +62 -0
- package/dist/pi-intercom/interview.js +236 -0
- package/dist/pi-intercom/lifecycle.js +168 -0
- package/dist/pi-intercom/message-format.js +69 -0
- package/dist/pi-intercom/outbound.js +304 -0
- package/dist/pi-intercom/peer-awareness.js +66 -0
- package/dist/pi-intercom/reply-tracker.js +62 -43
- package/dist/pi-intercom/reply-wait.js +201 -0
- package/dist/pi-intercom/runtime-types.js +3 -0
- package/dist/pi-intercom/session-events.js +180 -0
- package/dist/pi-intercom/session-targets.js +42 -34
- package/dist/pi-intercom/subagent-events.js +238 -0
- package/dist/pi-intercom/subagent-live-events.js +129 -86
- package/dist/pi-intercom/supervisor.js +282 -0
- package/dist/pi-intercom/tool-arguments.js +74 -0
- package/dist/pi-intercom/tool-registration.js +95 -0
- package/dist/pi-intercom/tool-results.js +38 -0
- package/dist/pi-intercom/tool-schemas.js +82 -0
- package/dist/pi-intercom/tools.js +51 -0
- package/dist/pi-intercom/topic-actions.js +177 -0
- package/dist/pi-intercom/topics.js +177 -92
- package/dist/pi-intercom/transport.js +1 -0
- package/dist/pi-intercom/types.js +151 -114
- package/dist/pi-intercom/ui/compose-paste.js +93 -0
- package/dist/pi-intercom/ui/compose.js +121 -143
- package/dist/pi-intercom/ui/inline-message.js +59 -59
- package/dist/pi-intercom/ui/message-renderers.js +147 -0
- package/dist/pi-intercom/ui/overlay.js +181 -0
- package/dist/pi-intercom/ui/session-format.js +124 -0
- package/dist/pi-intercom/ui/session-list.js +76 -43
- package/dist/pi-intercom/ui/tool-renderers.js +110 -0
- package/dist/pi-intercom/ui/topic-view.js +88 -0
- package/dist/pi-intercom/validation.js +59 -0
- package/dist/runs/background/async-chain-plan.js +265 -0
- package/dist/runs/background/async-control.js +134 -58
- package/dist/runs/background/async-execution.js +136 -633
- package/dist/runs/background/async-job-admission.js +40 -0
- package/dist/runs/background/async-job-projection.js +169 -0
- package/dist/runs/background/async-job-tracker.js +297 -327
- package/dist/runs/background/async-launch.js +216 -0
- package/dist/runs/background/async-plan.js +116 -0
- package/dist/runs/background/async-result-file.js +47 -23
- package/dist/runs/background/async-resume.js +195 -253
- package/dist/runs/background/async-run-discovery.js +213 -0
- package/dist/runs/background/async-run-location.js +135 -0
- package/dist/runs/background/async-run-record.js +1 -0
- package/dist/runs/background/async-run-repair.js +223 -0
- package/dist/runs/background/async-run-summary.js +1 -0
- package/dist/runs/background/async-single-plan.js +105 -0
- package/dist/runs/background/async-status-projection.js +155 -0
- package/dist/runs/background/async-status-render.js +117 -0
- package/dist/runs/background/async-status-validation.js +181 -0
- package/dist/runs/background/async-status.js +3 -442
- package/dist/runs/background/async-value.js +21 -0
- package/dist/runs/background/completion-dedupe.js +36 -12
- package/dist/runs/background/completion-delivery.js +211 -205
- package/dist/runs/background/completion-receipts.js +237 -0
- package/dist/runs/background/legacy-status-acceptance.js +34 -0
- package/dist/runs/background/notify.js +96 -48
- package/dist/runs/background/parallel-groups.js +36 -19
- package/dist/runs/background/result-payload.js +178 -0
- package/dist/runs/background/result-watcher.js +348 -339
- package/dist/runs/background/run-id-resolver.js +53 -33
- package/dist/runs/background/run-schemas.js +189 -0
- package/dist/runs/background/run-status-contracts.js +14 -0
- package/dist/runs/background/run-status-render.js +270 -0
- package/dist/runs/background/run-status.js +231 -339
- package/dist/runs/background/runner-attempt-output.js +155 -0
- package/dist/runs/background/runner-attempt.js +263 -0
- package/dist/runs/background/runner-child-executor.js +166 -0
- package/dist/runs/background/runner-child-observer.js +192 -0
- package/dist/runs/background/runner-completion-summary.js +71 -0
- package/dist/runs/background/runner-completion.js +211 -0
- package/dist/runs/background/runner-config.js +1 -0
- package/dist/runs/background/runner-contract.js +1 -0
- package/dist/runs/background/runner-dynamic.js +121 -0
- package/dist/runs/background/runner-finalization.js +149 -0
- package/dist/runs/background/runner-graph.js +68 -0
- package/dist/runs/background/runner-initial-status.js +60 -0
- package/dist/runs/background/runner-lifecycle.js +142 -0
- package/dist/runs/background/runner-monitor.js +309 -0
- package/dist/runs/background/runner-parallel.js +204 -0
- package/dist/runs/background/runner-prepare-step.js +86 -0
- package/dist/runs/background/runner-reporting.js +153 -0
- package/dist/runs/background/runner-status.js +148 -0
- package/dist/runs/background/runner-step-output.js +92 -0
- package/dist/runs/background/runner-step-record.js +45 -0
- package/dist/runs/background/runner-step.js +112 -0
- package/dist/runs/background/runner-streaming.js +173 -0
- package/dist/runs/background/runner-workflow.js +213 -0
- package/dist/runs/background/stale-run-reconciler.js +155 -292
- package/dist/runs/background/subagent-runner-launcher.js +33 -13
- package/dist/runs/background/subagent-runner.js +51 -1842
- package/dist/runs/background/top-level-async.js +2 -1
- package/dist/runs/foreground/chain-clarify.js +293 -1017
- package/dist/runs/foreground/clarification-draft.js +87 -0
- package/dist/runs/foreground/clarify-contracts.js +1 -0
- package/dist/runs/foreground/clarify-invocation.js +129 -38
- package/dist/runs/foreground/clarify-text-editor.js +210 -0
- package/dist/runs/foreground/clarify-view.js +167 -0
- package/dist/runs/foreground/execution-input.js +226 -353
- package/dist/runs/foreground/execution-routing.js +33 -0
- package/dist/runs/foreground/execution-timeout.js +81 -0
- package/dist/runs/foreground/foreground-control.js +222 -763
- package/dist/runs/foreground/foreground-memory.js +99 -0
- package/dist/runs/foreground/invocation-context.js +55 -0
- package/dist/runs/foreground/invocation-execution.js +331 -0
- package/dist/runs/foreground/invocation-expansion.js +48 -0
- package/dist/runs/foreground/management-actions.js +295 -0
- package/dist/runs/foreground/nested-control.js +179 -0
- package/dist/runs/foreground/question-continuation.js +78 -0
- package/dist/runs/foreground/question-control.js +155 -50
- package/dist/runs/foreground/resume-target.js +221 -0
- package/dist/runs/foreground/revival-launch-policy.js +58 -0
- package/dist/runs/foreground/run-async-path.js +190 -178
- package/dist/runs/foreground/run-interrupt.js +164 -0
- package/dist/runs/foreground/run-nudge.js +278 -0
- package/dist/runs/foreground/saved-revival.js +251 -0
- package/dist/runs/foreground/subagent-executor.js +135 -424
- package/dist/runs/foreground/subagent-params.js +67 -30
- package/dist/runs/foreground/wait-observation.js +104 -0
- package/dist/runs/foreground/wait-registration.js +17 -0
- package/dist/runs/foreground/wait-run.js +283 -123
- package/dist/runs/shared/acceptance-contract.js +193 -99
- package/dist/runs/shared/acceptance-defaults.js +1 -0
- package/dist/runs/shared/acceptance-evaluation.js +201 -181
- package/dist/runs/shared/acceptance-finalization.js +256 -180
- package/dist/runs/shared/acceptance-outcome.js +53 -0
- package/dist/runs/shared/acceptance-reports.js +137 -72
- package/dist/runs/shared/acceptance-submission.js +167 -0
- package/dist/runs/shared/acceptance-verification.js +100 -0
- package/dist/runs/shared/chain-outputs.js +80 -52
- package/dist/runs/shared/child-attempt-types.js +1 -0
- package/dist/runs/shared/child-attempt.js +314 -667
- package/dist/runs/shared/child-boundaries.js +173 -0
- package/dist/runs/shared/child-context-filter.js +44 -0
- package/dist/runs/shared/child-event-observer.js +390 -0
- package/dist/runs/shared/child-execution-cwd.js +73 -43
- package/dist/runs/shared/child-execution-outcome.js +72 -0
- package/dist/runs/shared/child-invocation.js +54 -0
- package/dist/runs/shared/child-message-validation.js +215 -0
- package/dist/runs/shared/child-native-accounting.js +106 -0
- package/dist/runs/shared/child-native-observation.js +69 -0
- package/dist/runs/shared/child-observation-spool.js +164 -0
- package/dist/runs/shared/child-observations.js +157 -76
- package/dist/runs/shared/child-presence.js +3 -0
- package/dist/runs/shared/child-route-env.js +119 -0
- package/dist/runs/shared/child-stream-observer.js +221 -0
- package/dist/runs/shared/child-stream-projection.js +137 -0
- package/dist/runs/shared/child-structured-tool.js +27 -0
- package/dist/runs/shared/claude-code.js +121 -158
- package/dist/runs/shared/claude-model.js +42 -0
- package/dist/runs/shared/claude-session.js +83 -0
- package/dist/runs/shared/claude-types.js +1 -0
- package/dist/runs/shared/completion-guard.js +18 -18
- package/dist/runs/shared/control-event-policy.js +8 -0
- package/dist/runs/shared/control-notification-owner.js +13 -0
- package/dist/runs/shared/dynamic-fanout.js +188 -173
- package/dist/runs/shared/dynamic-item.js +102 -0
- package/dist/runs/shared/history-index.js +62 -36
- package/dist/runs/shared/legacy-async-recovery.js +114 -0
- package/dist/runs/shared/legacy-output-recovery.js +148 -0
- package/dist/runs/shared/mcp-config-schema.js +36 -0
- package/dist/runs/shared/mcp-direct-tool-allowlist.js +147 -116
- package/dist/runs/shared/model-fallback.js +97 -38
- package/dist/runs/shared/mutating-tool-guard.js +128 -88
- package/dist/runs/shared/native-finalization-types.js +1 -0
- package/dist/runs/shared/native-finalization.js +155 -76
- package/dist/runs/shared/native-usage.js +238 -98
- package/dist/runs/shared/nested-control-records.js +128 -0
- package/dist/runs/shared/nested-events.js +8 -700
- package/dist/runs/shared/nested-path.js +32 -28
- package/dist/runs/shared/nested-projection.js +155 -0
- package/dist/runs/shared/nested-protocol.js +18 -0
- package/dist/runs/shared/nested-registry.js +191 -0
- package/dist/runs/shared/nested-render.js +106 -58
- package/dist/runs/shared/nested-route.js +220 -0
- package/dist/runs/shared/nested-validation.js +216 -0
- package/dist/runs/shared/owned-child-evidence.js +125 -0
- package/dist/runs/shared/owned-run-list.js +146 -0
- package/dist/runs/shared/owned-run-observation.js +267 -0
- package/dist/runs/shared/owned-run-progress.js +109 -0
- package/dist/runs/shared/owned-run-read-state.js +1 -0
- package/dist/runs/shared/owned-run-results.js +202 -0
- package/dist/runs/shared/owned-run-status.js +180 -0
- package/dist/runs/shared/owned-run-view.js +51 -0
- package/dist/runs/shared/owned-workflow-details.js +17 -0
- package/dist/runs/shared/owner-output.js +43 -0
- package/dist/runs/shared/parallel-utils.js +36 -28
- package/dist/runs/shared/parent-receipts.js +90 -32
- package/dist/runs/shared/parent-usage.js +169 -57
- package/dist/runs/shared/pi-args.js +108 -201
- package/dist/runs/shared/pi-launch-input.js +1 -0
- package/dist/runs/shared/pi-session-launch.js +86 -0
- package/dist/runs/shared/pi-spawn.js +35 -21
- package/dist/runs/shared/run-history-queries.js +126 -35
- package/dist/runs/shared/run-history.js +101 -35
- package/dist/runs/shared/run-metadata-paths.js +14 -0
- package/dist/runs/shared/run-metadata.js +158 -0
- package/dist/runs/shared/run-persistence.js +131 -0
- package/dist/runs/shared/run-records.js +9 -679
- package/dist/runs/shared/run-restoration.js +338 -0
- package/dist/runs/shared/run-state-owner.js +26 -0
- package/dist/runs/shared/session-cwd-preload.js +27 -18
- package/dist/runs/shared/single-output.js +148 -70
- package/dist/runs/shared/stable-value.js +15 -0
- package/dist/runs/shared/streaming-text.js +23 -12
- package/dist/runs/shared/structured-output.js +25 -13
- package/dist/runs/shared/subagent-control.js +167 -100
- package/dist/runs/shared/subagent-prompt-runtime.js +27 -130
- package/dist/runs/shared/subagent-tool-loop-guard.js +81 -52
- package/dist/runs/shared/supervisor-question-state.js +145 -0
- package/dist/runs/shared/supervisor-questions.js +185 -254
- package/dist/runs/shared/workflow-graph.js +259 -167
- package/dist/runs/shared/workflow-policy.js +120 -48
- package/dist/runs/shared/worktree-contract.js +1 -0
- package/dist/runs/shared/worktree-hook.js +138 -0
- package/dist/runs/shared/worktree-location.js +47 -0
- package/dist/runs/shared/worktree-preservation.js +8 -0
- package/dist/runs/shared/worktree-process.js +107 -0
- package/dist/runs/shared/worktree.js +183 -322
- package/dist/shared/agent-context-policy.js +34 -44
- package/dist/shared/agent-dir.js +14 -0
- package/dist/shared/artifacts.js +30 -12
- package/dist/shared/atomic-json.js +4 -1
- package/dist/shared/chain-files.js +72 -0
- package/dist/shared/concurrency.js +18 -0
- package/dist/shared/content-preview.js +115 -0
- package/dist/shared/cooperative.js +5 -2
- package/dist/shared/execution-cwd.js +13 -5
- package/dist/shared/file-coalescer.js +2 -1
- package/dist/shared/fork-context.js +10 -12
- package/dist/shared/formatters.js +45 -19
- package/dist/shared/journal-frames.js +164 -0
- package/dist/shared/journal-projections.js +121 -0
- package/dist/shared/journal-reader.js +6 -407
- package/dist/shared/json-projection.js +191 -0
- package/dist/shared/lazy-tools.js +19 -8
- package/dist/shared/message-output.js +116 -0
- package/dist/shared/model-info.js +31 -14
- package/dist/shared/native-import.js +20 -0
- package/dist/shared/native-journal.js +140 -0
- package/dist/shared/native-session.js +5 -2
- package/dist/shared/native-tui.js +7 -2
- package/dist/shared/native-typebox.js +15 -3
- package/dist/shared/output-page.js +63 -0
- package/dist/shared/post-exit-stdio-guard.js +128 -88
- package/dist/shared/prompt-sections.js +2 -0
- package/dist/shared/session-entries.js +70 -35
- package/dist/shared/session-identity.js +5 -3
- package/dist/shared/settings.js +62 -192
- package/dist/shared/status-format.js +97 -37
- package/dist/shared/task-file-policy.js +24 -0
- package/dist/shared/temp-root.js +44 -15
- package/dist/shared/types/acceptance.js +1 -0
- package/dist/shared/types/async.js +1 -0
- package/dist/shared/types/config.js +1 -0
- package/dist/shared/types/details.js +1 -0
- package/dist/shared/types/history.js +1 -0
- package/dist/shared/types/inputs.js +1 -0
- package/dist/shared/types/intercom.js +1 -0
- package/dist/shared/types/launch.js +1 -0
- package/dist/shared/types/messages.js +1 -0
- package/dist/shared/types/nested.js +1 -0
- package/dist/shared/types/owned-runs.js +1 -0
- package/dist/shared/types/progress.js +1 -0
- package/dist/shared/types/questions.js +1 -0
- package/dist/shared/types/results.js +1 -0
- package/dist/shared/types/state.js +1 -0
- package/dist/shared/types/usage.js +1 -0
- package/dist/shared/types/workflow.js +1 -0
- package/dist/shared/types.js +75 -30
- package/dist/shared/unknown.js +52 -0
- package/dist/shared/utils.js +54 -260
- package/dist/slash/command-discovery.js +82 -0
- package/dist/slash/command-input.js +190 -0
- package/dist/slash/prompt-template-bridge.js +94 -270
- package/dist/slash/prompt-template-contract.js +77 -0
- package/dist/slash/prompt-template-results.js +125 -0
- package/dist/slash/request-protocol.js +68 -0
- package/dist/slash/result-delivery.js +237 -0
- package/dist/slash/saved-chain.js +78 -0
- package/dist/slash/slash-bridge.js +123 -89
- package/dist/slash/slash-commands.js +101 -572
- package/dist/slash/slash-live-state.js +68 -47
- package/dist/tui/action-hints.js +50 -22
- package/dist/tui/activity-lines.js +32 -0
- package/dist/tui/agent-browser.js +290 -0
- package/dist/tui/agent-controls.js +289 -0
- package/dist/tui/agent-conversation.js +444 -0
- package/dist/tui/agent-dock.js +171 -0
- package/dist/tui/agent-history.js +50 -183
- package/dist/tui/agent-model.js +62 -0
- package/dist/tui/agent-picker.js +262 -0
- package/dist/tui/agent-view.js +232 -1564
- package/dist/tui/compact-results.js +193 -0
- package/dist/tui/conversation-details.js +190 -0
- package/dist/tui/conversation-frame.js +135 -0
- package/dist/tui/conversation-history.js +201 -0
- package/dist/tui/conversation-menu.js +78 -0
- package/dist/tui/conversation-notices.js +79 -0
- package/dist/tui/conversation-selection.js +58 -0
- package/dist/tui/conversation-viewport.js +129 -0
- package/dist/tui/direction-message.js +27 -0
- package/dist/tui/display.js +282 -0
- package/dist/tui/editor-viewport.js +18 -0
- package/dist/tui/expanded-content.js +87 -0
- package/dist/tui/expanded-multi.js +170 -0
- package/dist/tui/expanded-single.js +65 -0
- package/dist/tui/history-cards.js +216 -0
- package/dist/tui/history-display.js +238 -0
- package/dist/tui/history-json.js +16 -0
- package/dist/tui/history-metadata.js +152 -0
- package/dist/tui/history-record.js +251 -0
- package/dist/tui/history-text.js +34 -0
- package/dist/tui/indexed-history.js +116 -0
- package/dist/tui/nested-widget.js +120 -0
- package/dist/tui/picker-page.js +59 -0
- package/dist/tui/render.js +58 -1501
- package/dist/tui/result-facts.js +64 -0
- package/dist/tui/task-observation.js +59 -0
- package/dist/tui/task-store.js +366 -0
- package/dist/tui/text-values.js +16 -0
- package/dist/tui/view-connections.js +47 -0
- package/dist/tui/view-model.js +94 -0
- package/dist/tui/view-persistence.js +51 -0
- package/dist/tui/view-ports.js +1 -0
- package/dist/tui/view-session.js +37 -0
- package/dist/tui/widget-details.js +144 -0
- package/dist/tui/widget-status.js +245 -0
- package/dist/tui/widget.js +145 -0
- package/dist/tui/workflow-labels.js +223 -0
- package/dist/tui/workflow-outcomes.js +124 -0
- package/docs/code-quality.md +38 -0
- package/docs/development.md +99 -0
- package/docs/intercom-bridge.md +22 -17
- package/docs/intercom.md +132 -106
- package/docs/performance.md +19 -17
- package/docs/reference.md +1472 -0
- package/generated/RunValidators.d.ts +28 -0
- package/generated/RunValidators.js +2 -0
- package/package.json +27 -6
- package/prompts/parallel-cleanup.md +3 -0
- package/prompts/parallel-context-build.md +3 -0
- package/prompts/parallel-handoff-plan.md +6 -0
- package/prompts/parallel-research.md +4 -0
- package/prompts/parallel-review.md +2 -0
- package/prompts/review-loop.md +2 -0
- package/scripts/build.mjs +129 -85
- package/scripts/check-compat.mjs +48 -11
- package/scripts/compat-host.mjs +35 -7
- package/scripts/generate-run-schemas.mjs +210 -0
- package/scripts/intercom-bridge-credentials.mjs +155 -28
- package/scripts/intercom-remote.mjs +175 -50
- package/scripts/local-install-smoke.mjs +47 -37
- package/scripts/native-package-smoke.mjs +135 -25
- package/scripts/package-smoke.mjs +360 -140
- package/scripts/prepare.mjs +54 -34
- package/scripts/real-pi-processes.mjs +261 -0
- package/scripts/real-pi-smoke.mjs +432 -351
- package/scripts/run-tests.mjs +29 -15
- package/skills/pi-intercom/SKILL.md +11 -11
- package/skills/pi-intercom/references/peer-sessions.md +7 -2
- package/skills/pi-subagents/SKILL.md +1 -1
- package/skills/pi-subagents/references/full-orchestration-guide.md +254 -112
- package/src/agents/agent-defaults.ts +13 -0
- package/src/agents/agent-definition.ts +253 -0
- package/src/agents/agent-management.ts +111 -808
- package/src/agents/agent-scope.ts +7 -3
- package/src/agents/agent-selection.ts +26 -16
- package/src/agents/agent-serializer.ts +84 -93
- package/src/agents/agents.ts +199 -906
- package/src/agents/builtin-overrides.ts +297 -0
- package/src/agents/chain-serializer.ts +3 -329
- package/src/agents/config-values.ts +57 -0
- package/src/agents/discovery-paths.ts +134 -0
- package/src/agents/frontmatter.ts +35 -17
- package/src/agents/identity.ts +49 -18
- package/src/agents/json-chain.ts +305 -0
- package/src/agents/management-config.ts +342 -0
- package/src/agents/management-format.ts +243 -0
- package/src/agents/management-persistence.ts +408 -0
- package/src/agents/management-targets.ts +260 -0
- package/src/agents/management-warnings.ts +115 -0
- package/src/agents/markdown-chain.ts +237 -0
- package/src/agents/package-agents.ts +231 -0
- package/src/agents/skill-files.ts +182 -0
- package/src/agents/skill-search-paths.ts +289 -0
- package/src/agents/skill-types.ts +31 -0
- package/src/agents/skills.ts +152 -610
- package/src/extension/acceptance-schema.ts +88 -0
- package/src/extension/chain-schema.ts +276 -0
- package/src/extension/child-runtime.ts +302 -0
- package/src/extension/compact-tools.ts +259 -102
- package/src/extension/config-schema.ts +59 -0
- package/src/extension/config.ts +39 -17
- package/src/extension/control-notice-schema.ts +55 -0
- package/src/extension/control-notices.ts +57 -33
- package/src/extension/delegation-bridges.ts +59 -0
- package/src/extension/doctor.ts +171 -135
- package/src/extension/everyday-schemas.ts +252 -0
- package/src/extension/fanout-child.ts +29 -308
- package/src/extension/index.ts +17 -642
- package/src/extension/message-renderers.ts +334 -0
- package/src/extension/nested-control-inbox.ts +196 -0
- package/src/extension/parent-runtime.ts +405 -0
- package/src/extension/primary-tool.ts +130 -0
- package/src/extension/result-snapshot.ts +35 -0
- package/src/extension/runtime-reload.ts +72 -0
- package/src/extension/runtime-storage.ts +49 -0
- package/src/extension/schema-overrides.ts +114 -0
- package/src/extension/schemas.ts +451 -418
- package/src/extension/tool-input.ts +40 -13
- package/src/extension/tool-result.ts +45 -14
- package/src/history/answer-texts.ts +74 -0
- package/src/history/canonical-result.ts +127 -51
- package/src/history/canonical-selection.ts +54 -0
- package/src/history/database-generation.ts +86 -0
- package/src/history/database.ts +86 -48
- package/src/history/entry-ingestion.ts +129 -0
- package/src/history/index.ts +426 -148
- package/src/history/ingest.ts +372 -342
- package/src/history/output-digests.ts +41 -0
- package/src/history/preview.ts +235 -0
- package/src/history/prune.ts +48 -0
- package/src/history/queries.ts +122 -256
- package/src/history/query-scope.ts +278 -0
- package/src/history/rows.ts +118 -0
- package/src/history/run-projection.ts +164 -0
- package/src/history/run-queries.ts +199 -0
- package/src/history/schema.ts +34 -0
- package/src/history/search-queries.ts +216 -0
- package/src/history/selected-record.ts +140 -0
- package/src/history/source-file.ts +51 -0
- package/src/history/source-watches.ts +156 -0
- package/src/history/store.ts +310 -197
- package/src/history/text-chunks.ts +181 -0
- package/src/history/text.ts +43 -0
- package/src/history/transcript-queries.ts +251 -0
- package/src/history/types.ts +27 -164
- package/src/history/values.ts +36 -0
- package/src/history/wire-inputs.ts +141 -0
- package/src/history/wire-models.ts +51 -0
- package/src/history/worker-runtime.ts +502 -0
- package/src/history/worker.ts +94 -336
- package/src/intercom/intercom-bridge.ts +136 -69
- package/src/intercom/live-intercom.ts +197 -92
- package/src/intercom/nested-result-tree.ts +213 -0
- package/src/intercom/result-delivery.ts +56 -0
- package/src/intercom/result-intercom.ts +364 -382
- package/src/pi-intercom/agent-dir.ts +9 -3
- package/src/pi-intercom/async.ts +33 -0
- package/src/pi-intercom/bridge-ask.ts +64 -0
- package/src/pi-intercom/bridge-config.ts +101 -0
- package/src/pi-intercom/bridge-http.ts +97 -0
- package/src/pi-intercom/bridge-protocol.ts +123 -0
- package/src/pi-intercom/bridge-routes.ts +90 -0
- package/src/pi-intercom/bridge-session.ts +506 -0
- package/src/pi-intercom/bridge.ts +258 -547
- package/src/pi-intercom/broker/broker.ts +326 -263
- package/src/pi-intercom/broker/client.ts +273 -354
- package/src/pi-intercom/broker/connection.ts +192 -0
- package/src/pi-intercom/broker/framing.ts +11 -6
- package/src/pi-intercom/broker/paths.ts +28 -25
- package/src/pi-intercom/broker/pid.ts +68 -24
- package/src/pi-intercom/broker/snapshot-reader.ts +91 -0
- package/src/pi-intercom/broker/snapshots.ts +241 -0
- package/src/pi-intercom/broker/spawn.ts +58 -34
- package/src/pi-intercom/config.ts +113 -108
- package/src/pi-intercom/connection.ts +346 -0
- package/src/pi-intercom/identity.ts +71 -0
- package/src/pi-intercom/inbound-delivery.ts +450 -0
- package/src/pi-intercom/inbound-journal.ts +350 -0
- package/src/pi-intercom/inbound-record.ts +141 -0
- package/src/pi-intercom/inbound.ts +237 -0
- package/src/pi-intercom/index.ts +86 -2923
- package/src/pi-intercom/inspection.ts +82 -0
- package/src/pi-intercom/interview.ts +295 -0
- package/src/pi-intercom/lifecycle.ts +183 -0
- package/src/pi-intercom/message-format.ts +77 -0
- package/src/pi-intercom/outbound.ts +418 -0
- package/src/pi-intercom/peer-awareness.ts +84 -0
- package/src/pi-intercom/reply-tracker.ts +121 -59
- package/src/pi-intercom/reply-wait.ts +247 -0
- package/src/pi-intercom/runtime-types.ts +97 -0
- package/src/pi-intercom/session-events.ts +247 -0
- package/src/pi-intercom/session-targets.ts +124 -72
- package/src/pi-intercom/subagent-events.ts +299 -0
- package/src/pi-intercom/subagent-live-events.ts +212 -109
- package/src/pi-intercom/supervisor.ts +362 -0
- package/src/pi-intercom/tool-arguments.ts +120 -0
- package/src/pi-intercom/tool-registration.ts +121 -0
- package/src/pi-intercom/tool-results.ts +54 -0
- package/src/pi-intercom/tool-schemas.ts +134 -0
- package/src/pi-intercom/tools.ts +80 -0
- package/src/pi-intercom/topic-actions.ts +243 -0
- package/src/pi-intercom/topics.ts +267 -121
- package/src/pi-intercom/transport.ts +14 -0
- package/src/pi-intercom/types.ts +288 -190
- package/src/pi-intercom/ui/compose-paste.ts +109 -0
- package/src/pi-intercom/ui/compose.ts +173 -157
- package/src/pi-intercom/ui/inline-message.ts +80 -62
- package/src/pi-intercom/ui/message-renderers.ts +182 -0
- package/src/pi-intercom/ui/overlay.ts +238 -0
- package/src/pi-intercom/ui/session-format.ts +146 -0
- package/src/pi-intercom/ui/session-list.ts +145 -62
- package/src/pi-intercom/ui/tool-renderers.ts +148 -0
- package/src/pi-intercom/ui/topic-view.ts +107 -0
- package/src/pi-intercom/validation.ts +69 -0
- package/src/runs/background/async-chain-plan.ts +451 -0
- package/src/runs/background/async-control.ts +201 -71
- package/src/runs/background/async-execution.ts +206 -829
- package/src/runs/background/async-job-admission.ts +54 -0
- package/src/runs/background/async-job-projection.ts +225 -0
- package/src/runs/background/async-job-tracker.ts +416 -360
- package/src/runs/background/async-launch.ts +319 -0
- package/src/runs/background/async-plan.ts +285 -0
- package/src/runs/background/async-result-file.ts +79 -37
- package/src/runs/background/async-resume.ts +338 -285
- package/src/runs/background/async-run-discovery.ts +270 -0
- package/src/runs/background/async-run-location.ts +194 -0
- package/src/runs/background/async-run-record.ts +14 -0
- package/src/runs/background/async-run-repair.ts +307 -0
- package/src/runs/background/async-run-summary.ts +71 -0
- package/src/runs/background/async-single-plan.ts +168 -0
- package/src/runs/background/async-status-projection.ts +188 -0
- package/src/runs/background/async-status-render.ts +164 -0
- package/src/runs/background/async-status-validation.ts +238 -0
- package/src/runs/background/async-status.ts +9 -481
- package/src/runs/background/async-value.ts +29 -0
- package/src/runs/background/completion-dedupe.ts +103 -54
- package/src/runs/background/completion-delivery.ts +313 -187
- package/src/runs/background/completion-receipts.ts +309 -0
- package/src/runs/background/legacy-status-acceptance.ts +38 -0
- package/src/runs/background/notify.ts +167 -106
- package/src/runs/background/parallel-groups.ts +95 -46
- package/src/runs/background/result-payload.ts +268 -0
- package/src/runs/background/result-watcher.ts +484 -387
- package/src/runs/background/run-id-resolver.ts +126 -57
- package/src/runs/background/run-schemas.ts +240 -0
- package/src/runs/background/run-status-contracts.ts +46 -0
- package/src/runs/background/run-status-render.ts +364 -0
- package/src/runs/background/run-status.ts +338 -356
- package/src/runs/background/runner-attempt-output.ts +281 -0
- package/src/runs/background/runner-attempt.ts +354 -0
- package/src/runs/background/runner-child-executor.ts +232 -0
- package/src/runs/background/runner-child-observer.ts +270 -0
- package/src/runs/background/runner-completion-summary.ts +106 -0
- package/src/runs/background/runner-completion.ts +274 -0
- package/src/runs/background/runner-config.ts +52 -0
- package/src/runs/background/runner-contract.ts +51 -0
- package/src/runs/background/runner-dynamic.ts +185 -0
- package/src/runs/background/runner-finalization.ts +203 -0
- package/src/runs/background/runner-graph.ts +91 -0
- package/src/runs/background/runner-initial-status.ts +72 -0
- package/src/runs/background/runner-lifecycle.ts +159 -0
- package/src/runs/background/runner-monitor.ts +399 -0
- package/src/runs/background/runner-parallel.ts +280 -0
- package/src/runs/background/runner-prepare-step.ts +128 -0
- package/src/runs/background/runner-reporting.ts +192 -0
- package/src/runs/background/runner-status.ts +220 -0
- package/src/runs/background/runner-step-output.ts +158 -0
- package/src/runs/background/runner-step-record.ts +76 -0
- package/src/runs/background/runner-step.ts +150 -0
- package/src/runs/background/runner-streaming.ts +220 -0
- package/src/runs/background/runner-workflow.ts +284 -0
- package/src/runs/background/stale-run-reconciler.ts +279 -336
- package/src/runs/background/subagent-runner-launcher.ts +67 -35
- package/src/runs/background/subagent-runner.ts +80 -2048
- package/src/runs/background/top-level-async.ts +9 -7
- package/src/runs/foreground/chain-clarify.ts +499 -1334
- package/src/runs/foreground/clarification-draft.ts +92 -0
- package/src/runs/foreground/clarify-contracts.ts +33 -0
- package/src/runs/foreground/clarify-invocation.ts +192 -65
- package/src/runs/foreground/clarify-text-editor.ts +229 -0
- package/src/runs/foreground/clarify-view.ts +222 -0
- package/src/runs/foreground/execution-input.ts +358 -424
- package/src/runs/foreground/execution-routing.ts +41 -0
- package/src/runs/foreground/execution-timeout.ts +92 -0
- package/src/runs/foreground/foreground-control.ts +333 -812
- package/src/runs/foreground/foreground-memory.ts +132 -0
- package/src/runs/foreground/invocation-context.ts +88 -0
- package/src/runs/foreground/invocation-execution.ts +465 -0
- package/src/runs/foreground/invocation-expansion.ts +58 -0
- package/src/runs/foreground/management-actions.ts +360 -0
- package/src/runs/foreground/nested-control.ts +248 -0
- package/src/runs/foreground/question-continuation.ts +112 -0
- package/src/runs/foreground/question-control.ts +297 -70
- package/src/runs/foreground/resume-target.ts +330 -0
- package/src/runs/foreground/revival-launch-policy.ts +112 -0
- package/src/runs/foreground/run-async-path.ts +307 -223
- package/src/runs/foreground/run-interrupt.ts +202 -0
- package/src/runs/foreground/run-nudge.ts +355 -0
- package/src/runs/foreground/saved-revival.ts +356 -0
- package/src/runs/foreground/subagent-executor.ts +195 -493
- package/src/runs/foreground/subagent-params.ts +314 -242
- package/src/runs/foreground/wait-observation.ts +160 -0
- package/src/runs/foreground/wait-registration.ts +18 -0
- package/src/runs/foreground/wait-run.ts +361 -119
- package/src/runs/shared/acceptance-contract.ts +410 -209
- package/src/runs/shared/acceptance-defaults.ts +1 -0
- package/src/runs/shared/acceptance-evaluation.ts +314 -240
- package/src/runs/shared/acceptance-finalization.ts +447 -305
- package/src/runs/shared/acceptance-outcome.ts +69 -0
- package/src/runs/shared/acceptance-reports.ts +220 -126
- package/src/runs/shared/acceptance-submission.ts +251 -0
- package/src/runs/shared/acceptance-verification.ts +118 -0
- package/src/runs/shared/acceptance.ts +25 -25
- package/src/runs/shared/chain-outputs.ts +190 -98
- package/src/runs/shared/child-attempt-types.ts +118 -0
- package/src/runs/shared/child-attempt.ts +372 -608
- package/src/runs/shared/child-boundaries.ts +217 -0
- package/src/runs/shared/child-context-filter.ts +53 -0
- package/src/runs/shared/child-event-observer.ts +496 -0
- package/src/runs/shared/child-execution-cwd.ts +139 -68
- package/src/runs/shared/child-execution-outcome.ts +103 -0
- package/src/runs/shared/child-invocation.ts +74 -0
- package/src/runs/shared/child-message-validation.ts +233 -0
- package/src/runs/shared/child-native-accounting.ts +154 -0
- package/src/runs/shared/child-native-observation.ts +79 -0
- package/src/runs/shared/child-observation-spool.ts +188 -0
- package/src/runs/shared/child-observations.ts +219 -89
- package/src/runs/shared/child-presence.ts +6 -0
- package/src/runs/shared/child-route-env.ts +142 -0
- package/src/runs/shared/child-stream-observer.ts +302 -0
- package/src/runs/shared/child-stream-projection.ts +160 -0
- package/src/runs/shared/child-structured-tool.ts +38 -0
- package/src/runs/shared/claude-code.ts +201 -228
- package/src/runs/shared/claude-model.ts +67 -0
- package/src/runs/shared/claude-session.ts +124 -0
- package/src/runs/shared/claude-types.ts +31 -0
- package/src/runs/shared/completion-guard.ts +35 -26
- package/src/runs/shared/control-event-policy.ts +15 -0
- package/src/runs/shared/control-notification-owner.ts +20 -0
- package/src/runs/shared/dynamic-fanout.ts +402 -238
- package/src/runs/shared/dynamic-item.ts +114 -0
- package/src/runs/shared/history-index.ts +112 -51
- package/src/runs/shared/legacy-async-recovery.ts +153 -0
- package/src/runs/shared/legacy-output-recovery.ts +214 -0
- package/src/runs/shared/mcp-config-schema.ts +46 -0
- package/src/runs/shared/mcp-direct-tool-allowlist.ts +396 -307
- package/src/runs/shared/model-fallback.ts +302 -180
- package/src/runs/shared/mutating-tool-guard.ts +259 -158
- package/src/runs/shared/native-finalization-types.ts +29 -0
- package/src/runs/shared/native-finalization.ts +233 -109
- package/src/runs/shared/native-usage.ts +379 -96
- package/src/runs/shared/nested-control-records.ts +178 -0
- package/src/runs/shared/nested-events.ts +45 -752
- package/src/runs/shared/nested-path.ts +47 -34
- package/src/runs/shared/nested-projection.ts +230 -0
- package/src/runs/shared/nested-protocol.ts +67 -0
- package/src/runs/shared/nested-registry.ts +273 -0
- package/src/runs/shared/nested-render.ts +198 -100
- package/src/runs/shared/nested-route.ts +292 -0
- package/src/runs/shared/nested-validation.ts +291 -0
- package/src/runs/shared/owned-child-evidence.ts +184 -0
- package/src/runs/shared/owned-run-list.ts +187 -0
- package/src/runs/shared/owned-run-observation.ts +368 -0
- package/src/runs/shared/owned-run-progress.ts +172 -0
- package/src/runs/shared/owned-run-read-state.ts +7 -0
- package/src/runs/shared/owned-run-results.ts +289 -0
- package/src/runs/shared/owned-run-status.ts +239 -0
- package/src/runs/shared/owned-run-view.ts +65 -0
- package/src/runs/shared/owned-workflow-details.ts +24 -0
- package/src/runs/shared/owner-output.ts +73 -0
- package/src/runs/shared/parallel-utils.ts +93 -129
- package/src/runs/shared/parent-receipts.ts +177 -50
- package/src/runs/shared/parent-usage.ts +314 -91
- package/src/runs/shared/pi-args.ts +241 -311
- package/src/runs/shared/pi-launch-input.ts +48 -0
- package/src/runs/shared/pi-session-launch.ts +94 -0
- package/src/runs/shared/pi-spawn.ts +57 -33
- package/src/runs/shared/run-history-queries.ts +189 -38
- package/src/runs/shared/run-history.ts +197 -76
- package/src/runs/shared/run-id-ambiguity.ts +7 -3
- package/src/runs/shared/run-metadata-paths.ts +17 -0
- package/src/runs/shared/run-metadata.ts +240 -0
- package/src/runs/shared/run-persistence.ts +181 -0
- package/src/runs/shared/run-records.ts +19 -607
- package/src/runs/shared/run-restoration.ts +455 -0
- package/src/runs/shared/run-state-owner.ts +31 -0
- package/src/runs/shared/session-cwd-preload.ts +39 -19
- package/src/runs/shared/single-output.ts +358 -205
- package/src/runs/shared/stable-value.ts +15 -0
- package/src/runs/shared/streaming-text.ts +39 -12
- package/src/runs/shared/structured-output.ts +76 -46
- package/src/runs/shared/subagent-control.ts +330 -197
- package/src/runs/shared/subagent-prompt-runtime.ts +92 -174
- package/src/runs/shared/subagent-tool-loop-guard.ts +118 -68
- package/src/runs/shared/supervisor-question-state.ts +221 -0
- package/src/runs/shared/supervisor-questions.ts +396 -401
- package/src/runs/shared/workflow-graph.ts +400 -198
- package/src/runs/shared/workflow-policy.ts +245 -110
- package/src/runs/shared/worktree-contract.ts +29 -0
- package/src/runs/shared/worktree-hook.ts +181 -0
- package/src/runs/shared/worktree-location.ts +61 -0
- package/src/runs/shared/worktree-preservation.ts +10 -0
- package/src/runs/shared/worktree-process.ts +132 -0
- package/src/runs/shared/worktree.ts +459 -587
- package/src/shared/agent-context-policy.ts +176 -145
- package/src/shared/agent-dir.ts +15 -0
- package/src/shared/artifacts.ts +99 -68
- package/src/shared/atomic-json.ts +14 -11
- package/src/shared/chain-files.ts +72 -0
- package/src/shared/concurrency.ts +27 -0
- package/src/shared/content-preview.ts +117 -0
- package/src/shared/cooperative.ts +17 -13
- package/src/shared/execution-cwd.ts +34 -9
- package/src/shared/file-coalescer.ts +24 -22
- package/src/shared/fork-context.ts +52 -48
- package/src/shared/formatters.ts +88 -47
- package/src/shared/journal-frames.ts +197 -0
- package/src/shared/journal-projections.ts +133 -0
- package/src/shared/journal-reader.ts +18 -333
- package/src/shared/json-projection.ts +224 -0
- package/src/shared/lazy-tools.ts +76 -27
- package/src/shared/message-output.ts +146 -0
- package/src/shared/model-info.ts +94 -58
- package/src/shared/native-import.ts +25 -0
- package/src/shared/native-journal.ts +172 -0
- package/src/shared/native-session.ts +8 -3
- package/src/shared/native-tui.ts +13 -3
- package/src/shared/native-typebox.ts +18 -3
- package/src/shared/output-page.ts +76 -0
- package/src/shared/post-exit-stdio-guard.ts +232 -172
- package/src/shared/prompt-sections.ts +13 -7
- package/src/shared/session-entries.ts +103 -44
- package/src/shared/session-identity.ts +17 -10
- package/src/shared/settings.ts +182 -367
- package/src/shared/status-format.ts +207 -98
- package/src/shared/stream-json.d.ts +10 -0
- package/src/shared/task-file-policy.ts +35 -0
- package/src/shared/temp-root.ts +122 -71
- package/src/shared/types/acceptance.ts +149 -0
- package/src/shared/types/async.ts +247 -0
- package/src/shared/types/config.ts +139 -0
- package/src/shared/types/details.ts +104 -0
- package/src/shared/types/history.ts +217 -0
- package/src/shared/types/inputs.ts +4 -0
- package/src/shared/types/intercom.ts +57 -0
- package/src/shared/types/launch.ts +39 -0
- package/src/shared/types/messages.ts +104 -0
- package/src/shared/types/nested.ts +153 -0
- package/src/shared/types/owned-runs.ts +148 -0
- package/src/shared/types/progress.ts +106 -0
- package/src/shared/types/questions.ts +103 -0
- package/src/shared/types/results.ts +119 -0
- package/src/shared/types/state.ts +56 -0
- package/src/shared/types/usage.ts +36 -0
- package/src/shared/types/workflow.ts +187 -0
- package/src/shared/types.ts +222 -1161
- package/src/shared/ui-mode.ts +1 -1
- package/src/shared/unknown.ts +59 -0
- package/src/shared/utils.ts +111 -305
- package/src/slash/command-discovery.ts +109 -0
- package/src/slash/command-input.ts +232 -0
- package/src/slash/prompt-template-bridge.ts +153 -400
- package/src/slash/prompt-template-contract.ts +152 -0
- package/src/slash/prompt-template-results.ts +189 -0
- package/src/slash/request-protocol.ts +87 -0
- package/src/slash/result-delivery.ts +312 -0
- package/src/slash/saved-chain.ts +115 -0
- package/src/slash/slash-bridge.ts +202 -156
- package/src/slash/slash-commands.ts +176 -598
- package/src/slash/slash-live-state.ts +287 -229
- package/src/tui/action-hints.ts +147 -61
- package/src/tui/activity-lines.ts +40 -0
- package/src/tui/agent-browser.ts +354 -0
- package/src/tui/agent-controls.ts +355 -0
- package/src/tui/agent-conversation.ts +514 -0
- package/src/tui/agent-dock.ts +250 -0
- package/src/tui/agent-history.ts +78 -203
- package/src/tui/agent-model.ts +78 -0
- package/src/tui/agent-picker.ts +325 -0
- package/src/tui/agent-view.ts +391 -1333
- package/src/tui/compact-results.ts +342 -0
- package/src/tui/conversation-details.ts +206 -0
- package/src/tui/conversation-frame.ts +184 -0
- package/src/tui/conversation-history.ts +246 -0
- package/src/tui/conversation-menu.ts +119 -0
- package/src/tui/conversation-notices.ts +116 -0
- package/src/tui/conversation-selection.ts +66 -0
- package/src/tui/conversation-viewport.ts +169 -0
- package/src/tui/direction-message.ts +35 -0
- package/src/tui/display.ts +409 -0
- package/src/tui/editor-viewport.ts +19 -0
- package/src/tui/expanded-content.ts +134 -0
- package/src/tui/expanded-multi.ts +264 -0
- package/src/tui/expanded-single.ts +92 -0
- package/src/tui/history-cards.ts +316 -0
- package/src/tui/history-display.ts +334 -0
- package/src/tui/history-json.ts +17 -0
- package/src/tui/history-metadata.ts +177 -0
- package/src/tui/history-record.ts +321 -0
- package/src/tui/history-text.ts +34 -0
- package/src/tui/indexed-history.ts +149 -0
- package/src/tui/nested-widget.ts +192 -0
- package/src/tui/picker-page.ts +80 -0
- package/src/tui/render.ts +100 -1546
- package/src/tui/result-facts.ts +99 -0
- package/src/tui/task-observation.ts +96 -0
- package/src/tui/task-store.ts +432 -0
- package/src/tui/text-values.ts +20 -0
- package/src/tui/view-connections.ts +64 -0
- package/src/tui/view-model.ts +181 -0
- package/src/tui/view-persistence.ts +57 -0
- package/src/tui/view-ports.ts +55 -0
- package/src/tui/view-session.ts +42 -0
- package/src/tui/widget-details.ts +220 -0
- package/src/tui/widget-status.ts +331 -0
- package/src/tui/widget.ts +208 -0
- package/src/tui/workflow-labels.ts +340 -0
- package/src/tui/workflow-outcomes.ts +150 -0
- package/tsconfig.build.json +11 -10
- package/tsconfig.json +30 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fitchmultz/pi-subagents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.45.0",
|
|
4
4
|
"description": "Pi extension for subagent orchestration and local session coordination",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -26,12 +26,16 @@
|
|
|
26
26
|
"files": [
|
|
27
27
|
"dist",
|
|
28
28
|
"src/**/*.ts",
|
|
29
|
+
"generated",
|
|
29
30
|
"tsconfig.build.json",
|
|
30
31
|
"tsconfig.json",
|
|
31
32
|
"scripts/",
|
|
32
33
|
"agents/",
|
|
33
34
|
"skills/**/*",
|
|
34
35
|
"prompts/**/*",
|
|
36
|
+
"docs/reference.md",
|
|
37
|
+
"docs/development.md",
|
|
38
|
+
"docs/code-quality.md",
|
|
35
39
|
"docs/intercom.md",
|
|
36
40
|
"docs/intercom-bridge.md",
|
|
37
41
|
"docs/performance.md",
|
|
@@ -46,10 +50,16 @@
|
|
|
46
50
|
"test:integration": "node scripts/run-tests.mjs integration",
|
|
47
51
|
"test:all": "node scripts/run-tests.mjs all",
|
|
48
52
|
"check:compat": "node scripts/check-compat.mjs",
|
|
49
|
-
"typecheck": "tsc --noEmit",
|
|
53
|
+
"typecheck": "node node_modules/typescript/bin/tsc --noEmit",
|
|
50
54
|
"smoke:package": "node scripts/package-smoke.mjs",
|
|
51
55
|
"smoke:install": "node scripts/local-install-smoke.mjs",
|
|
52
|
-
"
|
|
56
|
+
"generate:schemas": "patch-package --patch-dir patches/npm --error-on-fail && node scripts/generate-run-schemas.mjs",
|
|
57
|
+
"check:schemas": "patch-package --patch-dir patches/npm --error-on-fail && node scripts/generate-run-schemas.mjs --check",
|
|
58
|
+
"lint": "oxlint --type-aware .",
|
|
59
|
+
"lint:fix": "oxlint --type-aware --fix .",
|
|
60
|
+
"format": "oxfmt --write .",
|
|
61
|
+
"format:check": "oxfmt --check .",
|
|
62
|
+
"ci": "npm run lint && npm run format:check && npm run typecheck && npm run smoke:package && npm run smoke:install && npm run test:all",
|
|
53
63
|
"smoke:real-pi": "node scripts/real-pi-smoke.mjs"
|
|
54
64
|
},
|
|
55
65
|
"pi": {
|
|
@@ -91,14 +101,25 @@
|
|
|
91
101
|
"@earendil-works/pi-coding-agent": "1.0.0",
|
|
92
102
|
"@earendil-works/pi-tui": "1.0.0",
|
|
93
103
|
"@types/node": "24.19.1",
|
|
104
|
+
"@types/sinon": "22.0.0",
|
|
105
|
+
"ajv": "8.20.0",
|
|
106
|
+
"oxfmt": "0.72.0",
|
|
107
|
+
"oxlint": "1.87.0",
|
|
108
|
+
"oxlint-tsgolint": "7.0.2003",
|
|
109
|
+
"patch-package": "8.0.1",
|
|
110
|
+
"sinon": "22.1.0",
|
|
94
111
|
"typebox": "1.3.34",
|
|
95
|
-
"typescript": "7.0.2"
|
|
112
|
+
"typescript": "7.0.2",
|
|
113
|
+
"typescript-json-schema": "0.68.0"
|
|
114
|
+
},
|
|
115
|
+
"publishConfig": {
|
|
116
|
+
"access": "public"
|
|
96
117
|
},
|
|
97
|
-
"publishConfig": { "access": "public" },
|
|
98
118
|
"engines": {
|
|
99
119
|
"node": ">=24.21.0"
|
|
100
120
|
},
|
|
101
121
|
"dependencies": {
|
|
102
|
-
"stream-json": "3.7.0"
|
|
122
|
+
"stream-json": "3.7.0",
|
|
123
|
+
"type-fest": "5.10.0"
|
|
103
124
|
}
|
|
104
125
|
}
|
|
@@ -14,6 +14,7 @@ Do not write reviewer output files into the repository unless I explicitly ask f
|
|
|
14
14
|
Reviewer 1: deslop pass.
|
|
15
15
|
|
|
16
16
|
If the `deslop` skill is available, pass it to this reviewer. If not, inline the guidance below. Ask this reviewer to look for AI-slop patterns in the changed scope:
|
|
17
|
+
|
|
17
18
|
- comments that restate code, placeholder text, stale rationale, or debug leftovers;
|
|
18
19
|
- defensive checks that hide useful errors, return vague defaults, or validate trusted internal data after a real boundary was already crossed;
|
|
19
20
|
- type escapes, broad casts, duplicated type definitions, or object-bag typing where a local source-of-truth type exists;
|
|
@@ -27,6 +28,7 @@ Tell this reviewer to treat tool output and slop-scan-style findings as leads, n
|
|
|
27
28
|
Reviewer 2: verbosity pass.
|
|
28
29
|
|
|
29
30
|
If the `verbosity-cleaner` skill is available, pass it to this reviewer. If not, inline the guidance below. Ask this reviewer to look for needless verbosity in code, tests, docs, status text, grouped messages, receipts, and changelog wording:
|
|
31
|
+
|
|
30
32
|
- single-use helpers that merely paraphrase an expression;
|
|
31
33
|
- temporary variables that only name obvious expressions;
|
|
32
34
|
- nested returns or branches that can become direct returns without hiding intent;
|
|
@@ -41,6 +43,7 @@ Tell this reviewer that shorter is only better when it is clearer and preserves
|
|
|
41
43
|
Both reviewers are review-only. They must not edit files unless I explicitly ask for a writer pass. Their response should be review feedback, not a context summary. Ask them to return concise, evidence-backed findings with file/line references and suggested fixes.
|
|
42
44
|
|
|
43
45
|
While reviewers run, do your own narrow inspection if useful. After they return, synthesize the feedback into:
|
|
46
|
+
|
|
44
47
|
- fixes worth doing now;
|
|
45
48
|
- optional improvements;
|
|
46
49
|
- feedback to ignore or defer, with a short reason.
|
|
@@ -33,6 +33,7 @@ Choose two or three strong builders based on the request. Prefer three only when
|
|
|
33
33
|
Identify likely failure modes, edge cases, test strategy, commands to run, dependency/API concerns, and escalation rules.
|
|
34
34
|
|
|
35
35
|
Adapt the angles when the request calls for it:
|
|
36
|
+
|
|
36
37
|
- Issue or PR URL: include issue requirements, acceptance criteria, linked discussion, and likely affected files.
|
|
37
38
|
- Plan file: include plan consistency, missing context, implementation sequence, and validation readiness.
|
|
38
39
|
- External API/library work: include current docs or primary sources through `web_search` when needed.
|
|
@@ -40,6 +41,7 @@ Adapt the angles when the request calls for it:
|
|
|
40
41
|
- UI/product work: include user flow, accessibility, copy, visual constraints, and implementation touchpoints.
|
|
41
42
|
|
|
42
43
|
Ask each builder to produce a compact handoff file with:
|
|
44
|
+
|
|
43
45
|
- relevant files and line ranges;
|
|
44
46
|
- key snippets or patterns, not full dumps;
|
|
45
47
|
- constraints and invariants;
|
|
@@ -48,6 +50,7 @@ Ask each builder to produce a compact handoff file with:
|
|
|
48
50
|
- a `meta-prompt` section for the next planner or role subagent.
|
|
49
51
|
|
|
50
52
|
After the builders return, synthesize their outputs into:
|
|
53
|
+
|
|
51
54
|
- the most important context the next agent needs;
|
|
52
55
|
- the recommended meta-prompt to use next;
|
|
53
56
|
- open questions or assumptions;
|
|
@@ -21,6 +21,7 @@ Use the `subagent` tool in chain mode:
|
|
|
21
21
|
2. Second step: a synthesis `context-builder` that reads the parallel findings and writes the final handoff plan and meta-prompt.
|
|
22
22
|
|
|
23
23
|
Use distinct output paths, `label` values, and `as` names under the chain directory. Example outputs:
|
|
24
|
+
|
|
24
25
|
- `handoff/external-reference.md`
|
|
25
26
|
- `handoff/local-context.md`
|
|
26
27
|
- `handoff/implementation-strategy.md`
|
|
@@ -33,27 +34,32 @@ Do not write these artifacts into the repository unless I explicitly ask for per
|
|
|
33
34
|
Role guidance:
|
|
34
35
|
|
|
35
36
|
External reference researcher:
|
|
37
|
+
|
|
36
38
|
- Study linked projects, docs, issues, examples, source code, or prompt guidance.
|
|
37
39
|
- Identify the behavior, API, implementation files, constraints, and transferable ideas.
|
|
38
40
|
- Conduct web research if needed. Use `web_search` if it is available; otherwise use whatever equivalent research capability is available.
|
|
39
41
|
- Return source links, repo paths, key evidence, risks, and what matters for this implementation.
|
|
40
42
|
|
|
41
43
|
Local context-builder:
|
|
44
|
+
|
|
42
45
|
- Read all files needed to fully understand the local issue, not just the first match.
|
|
43
46
|
- Follow imports, callers, tests, fixtures, configuration, docs, and adjacent patterns until the local problem, solution space, and validation path are clear.
|
|
44
47
|
- Return relevant file paths and line ranges, current architecture, constraints, tests, risks, and open questions.
|
|
45
48
|
|
|
46
49
|
Implementation-strategy context-builder, when used:
|
|
50
|
+
|
|
47
51
|
- Compare the external evidence against the local architecture.
|
|
48
52
|
- Propose the safest implementation shape, files likely to change, edge cases, validation commands, and decisions that need approval.
|
|
49
53
|
- Stay review/planning-only unless I explicitly ask for implementation.
|
|
50
54
|
|
|
51
55
|
Final synthesis context-builder:
|
|
56
|
+
|
|
52
57
|
- Read the parallel outputs and produce one concise handoff plan.
|
|
53
58
|
- Include what the feature/change should do, what the external reference teaches, what the local codebase implies, the recommended approach, likely files to change, constraints, non-goals, validation, risks, and unresolved questions.
|
|
54
59
|
- End with a compact implementation-ready meta-prompt for the next worker/planner.
|
|
55
60
|
|
|
56
61
|
After the chain returns, synthesize the result for me with:
|
|
62
|
+
|
|
57
63
|
- the recommended approach;
|
|
58
64
|
- artifact paths;
|
|
59
65
|
- the final meta-prompt;
|
|
@@ -8,6 +8,7 @@ Launch parallel research subagents to build a grounded answer to the current que
|
|
|
8
8
|
Use fresh context, not forked context, unless I explicitly ask for forked context. Researchers and scouts should inspect sources directly instead of relying on the main conversation history.
|
|
9
9
|
|
|
10
10
|
Use a combination of `researcher` and `scout` subagents:
|
|
11
|
+
|
|
11
12
|
- Use `researcher` for web, docs, standards, ecosystem, recent changes, benchmarks, and primary-source evidence.
|
|
12
13
|
- Use `scout` for local codebase context, existing implementation patterns, repo constraints, and files that would be affected.
|
|
13
14
|
|
|
@@ -23,6 +24,7 @@ Give each subagent a distinct angle. Unless I specify angles, use these three:
|
|
|
23
24
|
Use `researcher` or `scout`, whichever fits the question, to compare options, risks, edge cases, maintenance cost, and what would be easiest to validate.
|
|
24
25
|
|
|
25
26
|
Adapt the angles when the question calls for it:
|
|
27
|
+
|
|
26
28
|
- Library/API questions: include official docs and recent examples.
|
|
27
29
|
- Architecture decisions: include local module boundaries, dependency direction, and migration cost.
|
|
28
30
|
- Debugging questions: include likely failure modes, local call paths, and exact error evidence.
|
|
@@ -32,6 +34,7 @@ Adapt the angles when the question calls for it:
|
|
|
32
34
|
Prefer two or three strong subagents over many vague ones. The parent agent should frame the question and assign angles; the child agents should research or scout, not invent broad plans.
|
|
33
35
|
|
|
34
36
|
Ask each subagent to return concise findings with evidence:
|
|
37
|
+
|
|
35
38
|
- file paths and line ranges for local findings
|
|
36
39
|
- source links for external findings
|
|
37
40
|
- confidence level and gaps
|
|
@@ -40,6 +43,7 @@ Ask each subagent to return concise findings with evidence:
|
|
|
40
43
|
Do not ask subagents to edit files. This is a research pass only unless I explicitly ask for implementation.
|
|
41
44
|
|
|
42
45
|
After the subagents return, synthesize the answer into:
|
|
46
|
+
|
|
43
47
|
- what we know
|
|
44
48
|
- what the local codebase implies
|
|
45
49
|
- tradeoffs and risks
|
|
@@ -25,6 +25,7 @@ These are examples, not fixed defaults:
|
|
|
25
25
|
Check for unnecessary complexity, duplicate structure, single-use wrappers, brittle abstractions, confusing names, verbosity, and cleanup that is clearly worth doing.
|
|
26
26
|
|
|
27
27
|
Choose or adapt angles when the work calls for it:
|
|
28
|
+
|
|
28
29
|
- TypeScript-heavy changes: include type safety, source-of-truth types, casts, and error-boundary discipline.
|
|
29
30
|
- UI-heavy changes: include UX, accessibility, copy, and visual quality.
|
|
30
31
|
- Security-sensitive changes: include unsafe input/output handling, auth boundaries, privacy, and data exposure.
|
|
@@ -36,6 +37,7 @@ Prefer three strong reviewers over many vague reviewers.
|
|
|
36
37
|
Give every reviewer a specific task prompt naming its angle. Ask reviewers to return concise, evidence-backed findings with file/line references and suggested fixes. The response should be review feedback, not a context summary. Reviewers must not edit files unless I explicitly ask for a writer pass.
|
|
37
38
|
|
|
38
39
|
While reviewers run, do your own narrow inspection if useful. After they return, synthesize the feedback into:
|
|
40
|
+
|
|
39
41
|
- fixes worth doing now
|
|
40
42
|
- optional improvements
|
|
41
43
|
- feedback to ignore or defer, with a short reason
|
package/prompts/review-loop.md
CHANGED
|
@@ -16,6 +16,7 @@ For each review round, launch fresh-context `reviewer` agents as separate async
|
|
|
16
16
|
Choose review angles from the actual change. Common angles are correctness/regressions, tests/validation, and simplicity/maintainability. Add security, performance, docs/API contracts, or user-flow validation when the work calls for it. Prefer three strong reviewers over many vague reviewers.
|
|
17
17
|
|
|
18
18
|
After reviewers return, synthesize their feedback into:
|
|
19
|
+
|
|
19
20
|
- concrete blockers or decisions outside the existing authority;
|
|
20
21
|
- fixes worth doing now;
|
|
21
22
|
- optional improvements;
|
|
@@ -30,6 +31,7 @@ When there are fixes worth doing now and the workflow is implementation-authoriz
|
|
|
30
31
|
After a fix worker returns, run another review round only when it made material changes or addressed non-trivial findings. Do not keep looping for optional polish, speculative improvements, or findings already deferred by the parent.
|
|
31
32
|
|
|
32
33
|
Stop and summarize when one of these is true:
|
|
34
|
+
|
|
33
35
|
- reviewers find no blockers or fixes worth doing now;
|
|
34
36
|
- remaining feedback is optional, speculative, or intentionally deferred;
|
|
35
37
|
- reviewers surface a concrete decision outside the existing authority that needs me;
|
package/scripts/build.mjs
CHANGED
|
@@ -24,111 +24,155 @@ const RENAME_RETRY_MS = 50;
|
|
|
24
24
|
// Use the current Node binary without a shell, including install paths with spaces.
|
|
25
25
|
const tscPath = process.argv[2] ?? join(process.cwd(), "node_modules", "typescript", "bin", "tsc");
|
|
26
26
|
|
|
27
|
+
if (process.argv.includes("--help") || process.argv.includes("-h")) {
|
|
28
|
+
console.log(
|
|
29
|
+
"Usage: node scripts/build.mjs [compiler-path]\n\nCompile into PID-owned staging, stamp the package version/content hash, then publish dist.\nA failed compiler preserves existing dist. Concurrent publishers retain the winning tree.\nExample: npm run build\nExit codes: 0 published or concurrent winner retained; 1 compile/publish failed.",
|
|
30
|
+
);
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
27
34
|
async function discardStaging(path) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
try {
|
|
36
|
+
await rm(path, RM_OPTIONS);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
// Cleanup is always best-effort: it must not turn a successful race loss
|
|
39
|
+
// into failure or replace the compiler/publish error that matters.
|
|
40
|
+
console.warn(`could not remove staging ${path}: ${error?.message ?? error}`);
|
|
41
|
+
}
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
function isOwnerGone(pid) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
try {
|
|
46
|
+
process.kill(pid, 0);
|
|
47
|
+
return false;
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return error?.code === "ESRCH";
|
|
50
|
+
}
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
async function hasPublishedDist(path) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
try {
|
|
55
|
+
return (await readdir(path)).length > 0;
|
|
56
|
+
} catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
async function reapStrandedStaging(cwd) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
// Signal 0 proves only that the owner was gone at probe time. Pid reuse
|
|
63
|
+
// between this probe and removal is inherent to pid-based reaping.
|
|
64
|
+
for (const entry of await readdir(cwd, { withFileTypes: true })) {
|
|
65
|
+
const match = /^dist\.staging\.(\d+)$/.exec(entry.name);
|
|
66
|
+
if (!match || !entry.isDirectory()) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const ownerPid = Number(match[1]);
|
|
70
|
+
if (ownerPid === process.pid || !isOwnerGone(ownerPid)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// Reap abandoned trees sequentially to bound filesystem removal pressure.
|
|
74
|
+
// oxlint-disable-next-line no-await-in-loop
|
|
75
|
+
await discardStaging(join(cwd, entry.name));
|
|
76
|
+
}
|
|
64
77
|
}
|
|
65
78
|
|
|
66
79
|
async function compileToStaging(cwd, stagingDir) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
try {
|
|
81
|
+
const { stderr, stdout } = await execFile(
|
|
82
|
+
process.execPath,
|
|
83
|
+
[tscPath, "-p", "tsconfig.build.json", "--outDir", stagingDir],
|
|
84
|
+
{ cwd, maxBuffer: 10 * 1024 * 1024 },
|
|
85
|
+
);
|
|
86
|
+
if (stdout) {
|
|
87
|
+
process.stdout.write(stdout);
|
|
88
|
+
}
|
|
89
|
+
if (stderr) {
|
|
90
|
+
process.stderr.write(stderr);
|
|
91
|
+
}
|
|
92
|
+
await stampBuild(cwd, stagingDir);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (error?.stdout) {
|
|
95
|
+
process.stdout.write(error.stdout);
|
|
96
|
+
}
|
|
97
|
+
if (error?.stderr) {
|
|
98
|
+
process.stderr.write(error.stderr);
|
|
99
|
+
}
|
|
100
|
+
await discardStaging(stagingDir);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async function stampBuild(cwd, stagingDir) {
|
|
106
|
+
const stamp = "extension/build-info.js";
|
|
107
|
+
const hash = createHash("sha256");
|
|
108
|
+
const files = (await readdir(stagingDir, { recursive: true }))
|
|
109
|
+
.filter((entry) => entry.endsWith(".js") && entry !== stamp)
|
|
110
|
+
.sort();
|
|
111
|
+
for (const file of files) {
|
|
112
|
+
// Hash sorted path/content pairs in order without buffering the whole emitted tree.
|
|
113
|
+
// oxlint-disable-next-line no-await-in-loop
|
|
114
|
+
const content = await readFile(join(stagingDir, file));
|
|
115
|
+
hash.update(file).update("\0").update(content).update("\0");
|
|
116
|
+
}
|
|
117
|
+
const { version } = JSON.parse(await readFile(join(cwd, "package.json"), "utf8"));
|
|
118
|
+
await writeFile(
|
|
119
|
+
join(stagingDir, stamp),
|
|
120
|
+
`export const EXTENSION_BUILD = Object.freeze(${JSON.stringify({ version, sha256: hash.digest("hex") })});\n`,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function tryPublish(stagingDir, distDir, retry) {
|
|
125
|
+
try {
|
|
126
|
+
await rename(stagingDir, distDir);
|
|
127
|
+
return true;
|
|
128
|
+
} catch (error) {
|
|
129
|
+
// A bare directory is not proof that a concurrent publisher finished.
|
|
130
|
+
if (await hasPublishedDist(distDir)) {
|
|
131
|
+
console.warn(
|
|
132
|
+
"dist/ was published by a concurrent build; discarding this build's staging tree.",
|
|
133
|
+
);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
if (!existsSync(stagingDir) || retry >= RENAME_RETRY_LIMIT) {
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
await delay(RENAME_RETRY_MS);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
88
142
|
}
|
|
89
143
|
|
|
90
144
|
async function publishStaging(stagingDir, distDir) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// At most 50 retries (~2.5s) keep persistent filesystem errors bounded.
|
|
107
|
-
if (existsSync(stagingDir) && retry < RENAME_RETRY_LIMIT) {
|
|
108
|
-
await delay(RENAME_RETRY_MS);
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
throw error;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
} finally {
|
|
115
|
-
// Safe after success too: rename moved stagingDir, so force makes this a no-op.
|
|
116
|
-
await discardStaging(stagingDir);
|
|
117
|
-
}
|
|
145
|
+
try {
|
|
146
|
+
// A failed dist removal must fail loudly; keep it outside the retry loop.
|
|
147
|
+
// Remove dist exactly once so retries never delete a concurrent winner.
|
|
148
|
+
await rm(distDir, RM_OPTIONS);
|
|
149
|
+
for (let retry = 0; ; retry++) {
|
|
150
|
+
// Each retry must observe publication before another rename can race it.
|
|
151
|
+
// oxlint-disable-next-line no-await-in-loop
|
|
152
|
+
if (await tryPublish(stagingDir, distDir, retry)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} finally {
|
|
157
|
+
// Safe after success too: rename moved stagingDir, so force makes this a no-op.
|
|
158
|
+
await discardStaging(stagingDir);
|
|
159
|
+
}
|
|
118
160
|
}
|
|
119
161
|
|
|
120
162
|
async function main() {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
163
|
+
const cwd = process.cwd();
|
|
164
|
+
if (!existsSync(tscPath)) {
|
|
165
|
+
throw new Error(`typescript is not installed at ${tscPath}; run npm install first.`);
|
|
166
|
+
}
|
|
167
|
+
await reapStrandedStaging(cwd);
|
|
168
|
+
// Pid-scoped staging isolates concurrent emits; only a complete tree publishes.
|
|
169
|
+
const stagingDir = join(cwd, `dist.staging.${process.pid}`);
|
|
170
|
+
await rm(stagingDir, RM_OPTIONS);
|
|
171
|
+
await compileToStaging(cwd, stagingDir);
|
|
172
|
+
await publishStaging(stagingDir, join(cwd, "dist"));
|
|
129
173
|
}
|
|
130
174
|
|
|
131
175
|
main().catch((error) => {
|
|
132
|
-
|
|
133
|
-
|
|
176
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
177
|
+
process.exitCode = 1;
|
|
134
178
|
});
|
package/scripts/check-compat.mjs
CHANGED
|
@@ -6,18 +6,28 @@ import { join, resolve } from "node:path";
|
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
|
|
8
8
|
if (process.argv.includes("--help") || process.argv.includes("-h")) {
|
|
9
|
-
console.log(
|
|
9
|
+
console.log(
|
|
10
|
+
"Usage: node scripts/check-compat.mjs\n\nRun selected-host full CI and native package checks with actual editor receipts.\nAn owned temporary editor checkout is removed after checks; supplied sources stay read-only.\nEnvironment: PI_EDITOR_RECEIPT_TEST_ROOT optionally supplies a clean frozen Git checkout.\nExamples:\n npm run check:compat\n PI_EDITOR_RECEIPT_TEST_ROOT=/path/to/pi-apply-edits npm run check:compat\nExit codes: 0 passed; 1 invalid input, unavailable source or failed checks.",
|
|
11
|
+
);
|
|
10
12
|
process.exit(0);
|
|
11
13
|
}
|
|
12
14
|
assert.equal(process.argv.length, 2, "Expected no arguments; use --help");
|
|
13
15
|
await import("./compat-host.mjs");
|
|
14
16
|
const run = (command, args, options = {}) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
// Outlasts the 1_200_000 ms integration watchdog in scripts/run-tests.mjs.
|
|
18
|
+
const result = spawnSync(command, args, { stdio: "inherit", timeout: 1_500_000, ...options });
|
|
19
|
+
if (result.error) {
|
|
20
|
+
throw result.error;
|
|
21
|
+
}
|
|
22
|
+
assert.equal(
|
|
23
|
+
result.status,
|
|
24
|
+
0,
|
|
25
|
+
`${command} ${args.join(" ")} failed (${result.status ?? result.signal})`,
|
|
26
|
+
);
|
|
18
27
|
return result.stdout?.trim();
|
|
19
28
|
};
|
|
20
|
-
const git = (cwd, args) =>
|
|
29
|
+
const git = (cwd, args) =>
|
|
30
|
+
run("git", args, { cwd, stdio: ["ignore", "pipe", "inherit"], encoding: "utf8" });
|
|
21
31
|
const root = mkdtempSync(join(tmpdir(), "ps-editor-"));
|
|
22
32
|
const editor = join(root, "source");
|
|
23
33
|
try {
|
|
@@ -26,20 +36,47 @@ try {
|
|
|
26
36
|
if (supplied) {
|
|
27
37
|
const source = resolve(supplied);
|
|
28
38
|
expectedRef = git(source, ["rev-parse", "HEAD"]);
|
|
29
|
-
assert.equal(
|
|
39
|
+
assert.equal(
|
|
40
|
+
git(source, ["status", "--porcelain", "--untracked-files=all"]),
|
|
41
|
+
"",
|
|
42
|
+
"Supplied editor source must be clean",
|
|
43
|
+
);
|
|
30
44
|
run("git", ["clone", "--no-hardlinks", "--quiet", source, editor]);
|
|
31
45
|
git(editor, ["checkout", "--quiet", "--detach", expectedRef]);
|
|
32
46
|
} else {
|
|
33
|
-
run("git", [
|
|
47
|
+
run("git", [
|
|
48
|
+
"clone",
|
|
49
|
+
"--depth",
|
|
50
|
+
"1",
|
|
51
|
+
"--branch",
|
|
52
|
+
"main",
|
|
53
|
+
"--single-branch",
|
|
54
|
+
"--quiet",
|
|
55
|
+
"https://github.com/fitchmultz/pi-apply-edits.git",
|
|
56
|
+
editor,
|
|
57
|
+
]);
|
|
34
58
|
}
|
|
35
59
|
const ref = git(editor, ["rev-parse", "HEAD"]);
|
|
36
60
|
assert.match(ref, /^[a-f0-9]{40}$/);
|
|
37
|
-
if (expectedRef)
|
|
38
|
-
|
|
61
|
+
if (expectedRef) {
|
|
62
|
+
assert.equal(ref, expectedRef);
|
|
63
|
+
}
|
|
64
|
+
assert.ok(
|
|
65
|
+
existsSync(join(editor, "extensions", "apply-edits.ts")),
|
|
66
|
+
"Editor source lacks its native extension",
|
|
67
|
+
);
|
|
39
68
|
// Only the editor's real third-party runtime dependencies; Pi supplies its own peers through the loader.
|
|
40
|
-
run(
|
|
69
|
+
run(
|
|
70
|
+
"npm",
|
|
71
|
+
["ci", "--omit=dev", "--ignore-scripts", "--legacy-peer-deps", "--no-audit", "--no-fund"],
|
|
72
|
+
{ cwd: editor },
|
|
73
|
+
);
|
|
41
74
|
git(editor, ["diff", "--exit-code"]);
|
|
42
|
-
console.log(
|
|
75
|
+
console.log(
|
|
76
|
+
JSON.stringify({
|
|
77
|
+
nativeEditor: { ref, source: editor, supplied: supplied ? resolve(supplied) : null },
|
|
78
|
+
}),
|
|
79
|
+
);
|
|
43
80
|
const env = { ...process.env, PI_EDITOR_RECEIPT_TEST_ROOT: editor };
|
|
44
81
|
run("npm", ["run", "ci"], { env });
|
|
45
82
|
run(process.execPath, ["scripts/native-package-smoke.mjs"], { env });
|
package/scripts/compat-host.mjs
CHANGED
|
@@ -6,14 +6,42 @@ import { findPackageJSON } from "node:module";
|
|
|
6
6
|
import { dirname, join } from "node:path";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
|
|
9
|
-
export const hostRoot = realpathSync(
|
|
9
|
+
export const hostRoot = realpathSync(
|
|
10
|
+
dirname(findPackageJSON("@earendil-works/pi-coding-agent", import.meta.url)),
|
|
11
|
+
);
|
|
10
12
|
export const hostIndex = join(hostRoot, "dist/index.js");
|
|
11
13
|
const manifest = JSON.parse(readFileSync(join(hostRoot, "package.json"), "utf8"));
|
|
12
14
|
export const hostCli = realpathSync(join(hostRoot, manifest.bin.pi));
|
|
13
|
-
for (const [name, actual] of [
|
|
14
|
-
|
|
15
|
+
for (const [name, actual] of [
|
|
16
|
+
["PI_COMPAT_EXPECTED_PACKAGE_DIR", hostRoot],
|
|
17
|
+
["PI_HOST_INDEX", hostIndex],
|
|
18
|
+
["PI_HOST_CLI", hostCli],
|
|
19
|
+
]) {
|
|
20
|
+
if (process.env[name]) {
|
|
21
|
+
assert.equal(
|
|
22
|
+
realpathSync(process.env[name]),
|
|
23
|
+
realpathSync(actual),
|
|
24
|
+
`${name} must select the installed graph`,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
15
27
|
}
|
|
16
|
-
if (process.env.PI_COMPAT_EXPECTED_VERSION)
|
|
17
|
-
assert.equal(
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
if (process.env.PI_COMPAT_EXPECTED_VERSION) {
|
|
29
|
+
assert.equal(manifest.version, process.env.PI_COMPAT_EXPECTED_VERSION);
|
|
30
|
+
}
|
|
31
|
+
assert.equal(
|
|
32
|
+
realpathSync(fileURLToPath(import.meta.resolve("@earendil-works/pi-coding-agent"))),
|
|
33
|
+
realpathSync(hostIndex),
|
|
34
|
+
);
|
|
35
|
+
const hash = (path) => createHash("sha256").update(readFileSync(path)).digest("hex");
|
|
36
|
+
console.log(
|
|
37
|
+
JSON.stringify({
|
|
38
|
+
host: process.env.PI_COMPAT_HOST ?? "local",
|
|
39
|
+
version: manifest.version,
|
|
40
|
+
node: process.version,
|
|
41
|
+
hostRoot,
|
|
42
|
+
hostIndex,
|
|
43
|
+
hostCli,
|
|
44
|
+
indexSha256: hash(hostIndex),
|
|
45
|
+
cliSha256: hash(hostCli),
|
|
46
|
+
}),
|
|
47
|
+
);
|