@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
|
@@ -1,192 +1,267 @@
|
|
|
1
|
-
import { isDeepStrictEqual } from "node:util";
|
|
2
|
-
import { createStructuredOutputRuntime, readStructuredOutput, validateStructuredOutputValue } from "./structured-output.js";
|
|
3
1
|
import { acceptanceFailureMessage, evaluateAcceptance } from "./acceptance-evaluation.js";
|
|
4
|
-
import { acceptanceSelfReviewConfig, formatEvidenceReportFieldMapping, shouldRunAcceptanceFinalization } from "./acceptance-contract.js";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
answer: publicOutputSchema ? { $id: "urn:pi-subagents:public-output", ...publicOutputSchema }
|
|
12
|
-
: { type: "string", pattern: "\\S", description: "Complete standalone final answer, including every requested handoff detail." },
|
|
13
|
-
report: ACCEPTANCE_REPORT_SCHEMA,
|
|
14
|
-
}, required: ["answer", "report"], additionalProperties: false,
|
|
15
|
-
});
|
|
16
|
-
return { ...runtime, publicOutputSchema };
|
|
2
|
+
import { acceptanceSelfReviewConfig, formatEvidenceReportFieldMapping, formatAcceptanceRequirements, shouldRunAcceptanceFinalization, } from "./acceptance-contract.js";
|
|
3
|
+
export { resolveExecutionOutcome } from "./acceptance-outcome.js";
|
|
4
|
+
import { formatAcceptanceReportExample, parseAcceptanceReport, stripAcceptanceReport, } from "./acceptance-reports.js";
|
|
5
|
+
import { reportAuditOutput } from "./acceptance-submission.js";
|
|
6
|
+
export { createFinalizationReportRuntime, readFinalizationReport, } from "./acceptance-submission.js";
|
|
7
|
+
export function formatUnconfirmedFinalizationOutput(output) {
|
|
8
|
+
return `UNCONFIRMED task report — retained for audit only; finalization did not deliver a current complete report.\n\n${stripAcceptanceReport(output)}`;
|
|
17
9
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (!publicOutputSchema && "report" in value && typeof value.report === "string") {
|
|
23
|
-
const parsed = parseAcceptanceReport(value.report);
|
|
24
|
-
if (parsed.report)
|
|
25
|
-
return { output: value.report, report: parsed.report };
|
|
10
|
+
export function resolveFinalizationOutput(rawOutput, previousOutput) {
|
|
11
|
+
const prose = stripAcceptanceReport(rawOutput);
|
|
12
|
+
if (prose.trim().length > 0) {
|
|
13
|
+
return prose;
|
|
26
14
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
return;
|
|
31
|
-
if (publicOutputSchema) {
|
|
32
|
-
if (validateStructuredOutputValue(publicOutputSchema, value.answer).status === "invalid")
|
|
33
|
-
return;
|
|
34
|
-
return { output: JSON.stringify(value.answer), structuredOutput: value.answer, report: value.report };
|
|
15
|
+
const report = parseAcceptanceReport(rawOutput).report;
|
|
16
|
+
const summary = report?.diffSummary?.trim() ?? "";
|
|
17
|
+
if (summary.length > 0) {
|
|
18
|
+
return summary;
|
|
35
19
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return { output: value.answer, report: value.report };
|
|
20
|
+
const notes = report?.notes?.trim() ?? "";
|
|
21
|
+
return notes.length > 0 ? notes : previousOutput;
|
|
39
22
|
}
|
|
40
|
-
function
|
|
41
|
-
return
|
|
42
|
-
|
|
23
|
+
function skipSelfReview(input, ledger) {
|
|
24
|
+
return (ledger.status === "blocked" ||
|
|
25
|
+
!shouldRunAcceptanceFinalization(input.acceptance) ||
|
|
26
|
+
input.initial.exitCode !== 0 ||
|
|
27
|
+
(input.initial.error ?? "").length > 0 ||
|
|
28
|
+
input.initial.interrupted === true ||
|
|
29
|
+
(input.signal?.aborted === true && (input.recordedTurns ?? 0) === 0));
|
|
43
30
|
}
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
31
|
+
/** Owns ordered continuation, cumulative audit evidence, and the authoritative current ledger. */
|
|
32
|
+
class AcceptanceReview {
|
|
33
|
+
input;
|
|
34
|
+
initialLedger;
|
|
35
|
+
selfReview;
|
|
36
|
+
turns = [];
|
|
37
|
+
authoritativeLedger;
|
|
38
|
+
previousFailure;
|
|
39
|
+
auditOutput;
|
|
40
|
+
constructor(input, initialLedger, selfReview) {
|
|
41
|
+
this.input = input;
|
|
42
|
+
this.initialLedger = initialLedger;
|
|
43
|
+
this.selfReview = selfReview;
|
|
44
|
+
this.authoritativeLedger = initialLedger;
|
|
45
|
+
this.previousFailure = acceptanceFailureMessage(initialLedger);
|
|
46
|
+
this.auditOutput = reportAuditOutput({
|
|
47
|
+
output: input.initialOutput,
|
|
48
|
+
report: input.initialReport,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
finish(status) {
|
|
52
|
+
return attachFinalizationToLedger({
|
|
53
|
+
initialLedger: this.initialLedger,
|
|
54
|
+
authoritativeLedger: this.authoritativeLedger,
|
|
55
|
+
turns: this.turns,
|
|
56
|
+
status,
|
|
57
|
+
maxTurns: this.input.acceptance.finalization.maxTurns,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
processFailure(result, turn, prompt) {
|
|
61
|
+
if (result.error === undefined || result.error.length === 0) {
|
|
62
|
+
return undefined;
|
|
62
63
|
}
|
|
64
|
+
this.turns.push({
|
|
65
|
+
...createFinalizationProcessFailureTurn({
|
|
66
|
+
turn,
|
|
67
|
+
prompt,
|
|
68
|
+
rawOutput: result.output,
|
|
69
|
+
message: result.error,
|
|
70
|
+
}),
|
|
71
|
+
...(this.input.nativeReport === true ? { unconfirmedOutput: this.auditOutput } : {}),
|
|
72
|
+
});
|
|
73
|
+
const ledger = buildFinalizationProcessFailureLedger({
|
|
74
|
+
initialLedger: this.initialLedger,
|
|
75
|
+
turns: this.turns,
|
|
76
|
+
maxTurns: this.input.acceptance.finalization.maxTurns,
|
|
77
|
+
message: result.error,
|
|
78
|
+
});
|
|
79
|
+
return this.input.nativeReport === true
|
|
80
|
+
? {
|
|
81
|
+
...ledger,
|
|
82
|
+
childReport: undefined,
|
|
83
|
+
childReportParseError: result.reportSubmissionError,
|
|
84
|
+
unconfirmedOutput: this.auditOutput,
|
|
85
|
+
}
|
|
86
|
+
: ledger;
|
|
63
87
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
88
|
+
async evaluateTurn(result) {
|
|
89
|
+
const submissionError = result.reportSubmissionError;
|
|
90
|
+
const rejectedSubmission = submissionError !== undefined && submissionError.length > 0;
|
|
91
|
+
// Replay the native boundary's checks, not the workspace left by a later repair.
|
|
92
|
+
let ledger = !rejectedSubmission && result.acceptance
|
|
93
|
+
? result.acceptance
|
|
94
|
+
: await evaluateAcceptance({
|
|
95
|
+
acceptance: this.selfReview,
|
|
96
|
+
governing: this.input.acceptance,
|
|
97
|
+
output: rejectedSubmission ? "" : result.output,
|
|
98
|
+
report: rejectedSubmission ? undefined : result.report,
|
|
99
|
+
cwd: this.input.cwd,
|
|
100
|
+
signal: this.input.signal,
|
|
101
|
+
});
|
|
102
|
+
if (rejectedSubmission) {
|
|
103
|
+
ledger = {
|
|
104
|
+
...ledger,
|
|
105
|
+
childReportParseError: submissionError,
|
|
106
|
+
runtimeChecks: [{ id: "finalization-report", status: "failed", message: submissionError }],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (this.input.nativeReport === true && (ledger.childReportParseError ?? "").length > 0) {
|
|
110
|
+
ledger = { ...ledger, unconfirmedOutput: this.auditOutput };
|
|
111
|
+
}
|
|
112
|
+
return ledger;
|
|
71
113
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
114
|
+
async completeReview(result) {
|
|
115
|
+
if (result.acceptance || this.selfReview !== this.input.acceptance) {
|
|
116
|
+
this.authoritativeLedger = await evaluateAcceptance({
|
|
117
|
+
acceptance: this.input.acceptance,
|
|
118
|
+
output: result.output,
|
|
119
|
+
report: result.report,
|
|
120
|
+
cwd: this.input.cwd,
|
|
121
|
+
signal: this.input.signal,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return this.finish(this.input.signal?.aborted === true ? "failed" : "completed");
|
|
77
125
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
126
|
+
runTurn(turn, prompt) {
|
|
127
|
+
if (this.input.signal?.aborted === true && turn > (this.input.recordedTurns ?? 0)) {
|
|
128
|
+
return Promise.resolve({ output: "", error: "Acceptance finalization cancelled." });
|
|
129
|
+
}
|
|
130
|
+
return this.input.runTurn(prompt, turn, this.input.sessionFile);
|
|
131
|
+
}
|
|
132
|
+
retainAudit(result) {
|
|
133
|
+
const retained = result.unconfirmedOutput ?? reportAuditOutput(result);
|
|
134
|
+
if (this.input.nativeReport === true && parseAcceptanceReport(retained).report) {
|
|
135
|
+
this.auditOutput = retained;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async performTurn(turn) {
|
|
139
|
+
const prompt = formatAcceptanceFinalizationPrompt({
|
|
140
|
+
acceptance: this.input.acceptance,
|
|
141
|
+
initialOutput: this.input.initialOutput,
|
|
142
|
+
initialLedger: this.initialLedger,
|
|
143
|
+
turn,
|
|
144
|
+
maxTurns: this.input.acceptance.finalization.maxTurns,
|
|
145
|
+
previousFailure: this.previousFailure,
|
|
146
|
+
nativeReport: this.input.nativeReport,
|
|
147
|
+
outputSchema: this.input.outputSchema,
|
|
148
|
+
});
|
|
149
|
+
const result = await this.runTurn(turn, prompt);
|
|
150
|
+
this.retainAudit(result);
|
|
151
|
+
const processFailure = this.processFailure(result, turn, prompt);
|
|
152
|
+
if (processFailure) {
|
|
153
|
+
return processFailure;
|
|
154
|
+
}
|
|
155
|
+
this.authoritativeLedger = await this.evaluateTurn(result);
|
|
156
|
+
this.turns.push(createFinalizationTurn({
|
|
157
|
+
turn,
|
|
158
|
+
prompt,
|
|
159
|
+
rawOutput: result.output,
|
|
160
|
+
ledger: this.authoritativeLedger,
|
|
161
|
+
}));
|
|
162
|
+
if (this.authoritativeLedger.status === "blocked") {
|
|
163
|
+
return this.finish("blocked");
|
|
164
|
+
}
|
|
165
|
+
const failure = acceptanceFailureMessage(this.authoritativeLedger);
|
|
166
|
+
if (failure === undefined && this.input.signal?.aborted !== true) {
|
|
167
|
+
return this.completeReview(result);
|
|
168
|
+
}
|
|
169
|
+
if (this.input.signal?.aborted === true) {
|
|
170
|
+
return this.finish("failed");
|
|
171
|
+
}
|
|
172
|
+
this.previousFailure = failure;
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
async run() {
|
|
176
|
+
for (let turn = 1; turn <= this.input.acceptance.finalization.maxTurns; turn++) {
|
|
177
|
+
// Each repair resumes the same session and consumes the preceding turn's authoritative outcome.
|
|
178
|
+
// oxlint-disable-next-line no-await-in-loop
|
|
179
|
+
const finished = await this.performTurn(turn);
|
|
180
|
+
if (finished) {
|
|
181
|
+
return finished;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return this.finish("failed");
|
|
107
185
|
}
|
|
108
|
-
if (input.signal?.aborted)
|
|
109
|
-
return { ...result, exitCode: 1, interrupted: false, error: "Subagent cancelled." };
|
|
110
|
-
if (isFailFastAbort(input.interruptSignal))
|
|
111
|
-
return { ...result, exitCode: -1, interrupted: false, error: "Interrupted due to fail-fast" };
|
|
112
|
-
if (result.timedOut || result.resourceLimitExceeded)
|
|
113
|
-
return { ...result, exitCode: result.timedOut ? 124 : 1, interrupted: result.interrupted === undefined ? undefined : false };
|
|
114
|
-
if (input.interruptSignal?.aborted || result.interrupted)
|
|
115
|
-
return { ...result, exitCode: 0, interrupted: true, error: undefined };
|
|
116
|
-
const failure = input.acceptance?.explicit ? acceptanceFailureMessage(input.acceptance) : undefined;
|
|
117
|
-
if (failure && result.exitCode === 0)
|
|
118
|
-
return { ...result, exitCode: 1, error: result.error ? `${result.error}\n${failure}` : failure };
|
|
119
|
-
return result;
|
|
120
186
|
}
|
|
121
187
|
export async function evaluateRunAcceptance(input) {
|
|
122
188
|
const review = shouldRunAcceptanceFinalization(input.acceptance);
|
|
123
189
|
const selfReview = review ? acceptanceSelfReviewConfig(input.acceptance) : input.acceptance;
|
|
124
|
-
const initialLedger = input.initialAcceptance ??
|
|
125
|
-
|
|
190
|
+
const initialLedger = input.initialAcceptance ??
|
|
191
|
+
(await evaluateAcceptance({
|
|
192
|
+
acceptance: selfReview,
|
|
193
|
+
governing: input.acceptance,
|
|
194
|
+
output: input.initialOutput,
|
|
195
|
+
report: input.initialReport,
|
|
196
|
+
cwd: input.cwd,
|
|
197
|
+
signal: input.signal,
|
|
198
|
+
}));
|
|
199
|
+
if (skipSelfReview(input, initialLedger)) {
|
|
126
200
|
return initialLedger;
|
|
127
|
-
const maxTurns = input.acceptance.finalization.maxTurns;
|
|
128
|
-
const turns = [];
|
|
129
|
-
if (!input.sessionFile) {
|
|
130
|
-
const message = "Acceptance finalization requires a session file for same-session continuation.";
|
|
131
|
-
turns.push(createFinalizationProcessFailureTurn({ turn: 1, prompt: "", message }));
|
|
132
|
-
return buildFinalizationProcessFailureLedger({ initialLedger, turns, maxTurns, message });
|
|
133
201
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (input.nativeReport && parseAcceptanceReport(retained).report)
|
|
144
|
-
auditOutput = retained;
|
|
145
|
-
if (result.error) {
|
|
146
|
-
turns.push({ ...createFinalizationProcessFailureTurn({ turn, prompt, rawOutput: result.output, message: result.error }),
|
|
147
|
-
...(input.nativeReport ? { unconfirmedOutput: auditOutput } : {}) });
|
|
148
|
-
const ledger = buildFinalizationProcessFailureLedger({ initialLedger, turns, maxTurns, message: result.error });
|
|
149
|
-
return input.nativeReport ? { ...ledger, childReport: undefined, childReportParseError: result.reportSubmissionError, unconfirmedOutput: auditOutput } : ledger;
|
|
150
|
-
}
|
|
151
|
-
// Replay each native boundary's checks, not the workspace left by a later repair.
|
|
152
|
-
authoritativeLedger = !result.reportSubmissionError && result.acceptance
|
|
153
|
-
? result.acceptance
|
|
154
|
-
: await evaluateAcceptance({ acceptance: selfReview, governing: input.acceptance, output: result.reportSubmissionError ? "" : result.output, report: result.reportSubmissionError ? undefined : result.report, cwd: input.cwd, signal: input.signal });
|
|
155
|
-
if (result.reportSubmissionError) {
|
|
156
|
-
authoritativeLedger.childReportParseError = result.reportSubmissionError;
|
|
157
|
-
authoritativeLedger.runtimeChecks = [{ id: "finalization-report", status: "failed", message: result.reportSubmissionError }];
|
|
158
|
-
}
|
|
159
|
-
if (input.nativeReport && authoritativeLedger.childReportParseError)
|
|
160
|
-
authoritativeLedger.unconfirmedOutput = auditOutput;
|
|
161
|
-
turns.push(createFinalizationTurn({ turn, prompt, rawOutput: result.output, ledger: authoritativeLedger }));
|
|
162
|
-
if (authoritativeLedger.status === "blocked")
|
|
163
|
-
return attachFinalizationToLedger({ initialLedger, authoritativeLedger, turns, status: "blocked", maxTurns });
|
|
164
|
-
const failure = acceptanceFailureMessage(authoritativeLedger);
|
|
165
|
-
if (!failure && !input.signal?.aborted) {
|
|
166
|
-
if (result.acceptance || selfReview !== input.acceptance)
|
|
167
|
-
authoritativeLedger = await evaluateAcceptance({ acceptance: input.acceptance, output: result.output, report: result.report, cwd: input.cwd, signal: input.signal });
|
|
168
|
-
return attachFinalizationToLedger({ initialLedger, authoritativeLedger, turns, status: input.signal?.aborted ? "failed" : "completed", maxTurns });
|
|
169
|
-
}
|
|
170
|
-
if (input.signal?.aborted)
|
|
171
|
-
break;
|
|
172
|
-
previousFailure = failure;
|
|
202
|
+
if (input.sessionFile === undefined || input.sessionFile.length === 0) {
|
|
203
|
+
const message = "Acceptance finalization requires a session file for same-session continuation.";
|
|
204
|
+
const turns = [createFinalizationProcessFailureTurn({ turn: 1, prompt: "", message })];
|
|
205
|
+
return buildFinalizationProcessFailureLedger({
|
|
206
|
+
initialLedger,
|
|
207
|
+
turns,
|
|
208
|
+
maxTurns: input.acceptance.finalization.maxTurns,
|
|
209
|
+
message,
|
|
210
|
+
});
|
|
173
211
|
}
|
|
174
|
-
return
|
|
212
|
+
return new AcceptanceReview({ ...input, sessionFile: input.sessionFile }, initialLedger, selfReview).run();
|
|
175
213
|
}
|
|
176
214
|
const INITIAL_OUTPUT_LIMIT = 8_000;
|
|
177
215
|
function truncateForPrompt(value) {
|
|
178
216
|
const trimmed = stripAcceptanceReport(value).trim();
|
|
179
|
-
if (trimmed.length <= INITIAL_OUTPUT_LIMIT)
|
|
180
|
-
return trimmed
|
|
217
|
+
if (trimmed.length <= INITIAL_OUTPUT_LIMIT) {
|
|
218
|
+
return trimmed.length > 0
|
|
219
|
+
? trimmed
|
|
220
|
+
: "(initial output was empty after removing acceptance-report)";
|
|
221
|
+
}
|
|
181
222
|
return `${trimmed.slice(0, INITIAL_OUTPUT_LIMIT)}\n...[truncated]`;
|
|
182
223
|
}
|
|
183
224
|
function formatReportForPrompt(ledger) {
|
|
184
|
-
if (ledger.childReport)
|
|
225
|
+
if (ledger.childReport) {
|
|
185
226
|
return JSON.stringify(ledger.childReport, null, 2);
|
|
227
|
+
}
|
|
186
228
|
return `Missing or malformed acceptance report: ${ledger.childReportParseError ?? "no parse detail"}`;
|
|
187
229
|
}
|
|
230
|
+
function initialReviewEvidence(output, ledger, previousFailure) {
|
|
231
|
+
const lines = [
|
|
232
|
+
"",
|
|
233
|
+
"Initial visible output:",
|
|
234
|
+
truncateForPrompt(output),
|
|
235
|
+
"",
|
|
236
|
+
"Initial acceptance report:",
|
|
237
|
+
formatReportForPrompt(ledger),
|
|
238
|
+
];
|
|
239
|
+
if (previousFailure !== undefined && previousFailure.length > 0) {
|
|
240
|
+
lines.push("", "Previous finalization failure to address:", previousFailure);
|
|
241
|
+
}
|
|
242
|
+
return lines;
|
|
243
|
+
}
|
|
244
|
+
function finalizationInstructions(nativeReport, schema) {
|
|
245
|
+
if (schema) {
|
|
246
|
+
const action = nativeReport
|
|
247
|
+
? "Your final action must be a sole `structured_output` tool call with {value:{answer,report}}."
|
|
248
|
+
: "Return the schema-constrained JSON object {answer,report}.";
|
|
249
|
+
return [
|
|
250
|
+
`${action} answer must be the complete current public payload matching outputSchema below, including all repairs; do not embed it in a prose string. report is the private typed acceptance object. This submission replaces the initial payload. If more activity follows submission, resubmit the complete current answer and report.\noutputSchema: ${JSON.stringify(schema)}`,
|
|
251
|
+
];
|
|
252
|
+
}
|
|
253
|
+
const action = nativeReport
|
|
254
|
+
? "Now do the self-check. Your final action must be a sole `structured_output` tool call with {value:{answer,report}}. answer must contain the complete standalone final answer with the current result and every requested handoff detail (including paths, identifiers, findings, and evidence), repairs or remaining blockers. report is a typed object matching the schema, never JSON embedded in a string. This answer replaces the initial answer; do not replace useful details with only a statement that you rechecked them. If additional messages prompt more activity after submission, resubmit the complete current answer and report as your final action; a prose-only reply does not finalize the task."
|
|
255
|
+
: "Now do the self-check. Return a standalone final answer with the current result and every requested handoff detail (including paths, identifiers, findings, and evidence). This answer replaces the initial answer; do not replace useful details with only a statement that you rechecked them. Include repairs or remaining blockers, then finish with exactly one fenced JSON block tagged `acceptance-report`.";
|
|
256
|
+
return [action, formatAcceptanceReportExample(nativeReport)];
|
|
257
|
+
}
|
|
188
258
|
export function formatAcceptanceFinalizationPrompt(input) {
|
|
189
|
-
const evidence = [
|
|
259
|
+
const evidence = [
|
|
260
|
+
...new Set([
|
|
261
|
+
...input.acceptance.evidence,
|
|
262
|
+
...input.acceptance.criteria.flatMap((criterion) => criterion.evidence),
|
|
263
|
+
]),
|
|
264
|
+
];
|
|
190
265
|
const lines = [
|
|
191
266
|
"## Acceptance Finalization",
|
|
192
267
|
"You are continuing the same subagent session. Before this run can be accepted, compare the current work to the acceptance contract and the evidence below.",
|
|
@@ -198,13 +273,10 @@ export function formatAcceptanceFinalizationPrompt(input) {
|
|
|
198
273
|
"Report cumulative evidence for the whole delegated task, not just this finalization turn. Retain still-valid changed files, tests, commands, and other evidence from the initial report; correct or remove evidence only when the final state invalidates it. No new edits during review does not mean changedFiles is empty.",
|
|
199
274
|
"",
|
|
200
275
|
"## Acceptance Contract",
|
|
201
|
-
"
|
|
202
|
-
...(input.acceptance.criteria.length ? input.acceptance.criteria.map((criterion) => `- ${criterion.id}: ${criterion.must}${criterion.evidence.length ? ` (evidence: ${criterion.evidence.join(", ")})` : ""}`) : ["- No explicit criteria were configured; satisfy the requested task and required evidence/checks."]),
|
|
203
|
-
"",
|
|
204
|
-
`Required evidence: ${evidence.join(", ") || "none explicitly requested"}`,
|
|
276
|
+
...formatAcceptanceRequirements(input.acceptance.criteria, evidence, "- No explicit criteria were configured; satisfy the requested task and required evidence/checks."),
|
|
205
277
|
];
|
|
206
278
|
if (evidence.length > 0) {
|
|
207
|
-
lines.push("", `Structured evidence must be present in the ${input.nativeReport || input.outputSchema ? "typed report object" : "final `acceptance-report` JSON fields"}. Markdown sections in the visible answer do not satisfy required evidence by themselves. If the previous visible output already included the evidence, copy or summarize it into the matching JSON field.`, "Evidence field mapping:", ...formatEvidenceReportFieldMapping(evidence));
|
|
279
|
+
lines.push("", `Structured evidence must be present in the ${input.nativeReport === true || input.outputSchema ? "typed report object" : "final `acceptance-report` JSON fields"}. Markdown sections in the visible answer do not satisfy required evidence by themselves. If the previous visible output already included the evidence, copy or summarize it into the matching JSON field.`, "Evidence field mapping:", ...formatEvidenceReportFieldMapping(evidence));
|
|
208
280
|
}
|
|
209
281
|
if (input.acceptance.verify.length > 0) {
|
|
210
282
|
lines.push("", "Runtime verification commands that must pass:", ...input.acceptance.verify.map((command) => `- ${command.id}: ${command.command}`));
|
|
@@ -212,15 +284,7 @@ export function formatAcceptanceFinalizationPrompt(input) {
|
|
|
212
284
|
if (input.acceptance.stopRules.length > 0) {
|
|
213
285
|
lines.push("", "Stop rules are hard constraints while deciding whether to continue, stop as blocked, or report success:", ...input.acceptance.stopRules.map((rule) => `- ${rule}`));
|
|
214
286
|
}
|
|
215
|
-
lines.push(
|
|
216
|
-
if (input.previousFailure) {
|
|
217
|
-
lines.push("", "Previous finalization failure to address:", input.previousFailure);
|
|
218
|
-
}
|
|
219
|
-
lines.push("", input.outputSchema
|
|
220
|
-
? `${input.nativeReport ? "Your final action must be a sole `structured_output` tool call with {value:{answer,report}}." : "Return the schema-constrained JSON object {answer,report}."} answer must be the complete current public payload matching outputSchema below, including all repairs; do not embed it in a prose string. report is the private typed acceptance object. This submission replaces the initial payload. If more activity follows submission, resubmit the complete current answer and report.\noutputSchema: ${JSON.stringify(input.outputSchema)}`
|
|
221
|
-
: input.nativeReport
|
|
222
|
-
? "Now do the self-check. Your final action must be a sole `structured_output` tool call with {value:{answer,report}}. answer must contain the complete standalone final answer with the current result and every requested handoff detail (including paths, identifiers, findings, and evidence), repairs or remaining blockers. report is a typed object matching the schema, never JSON embedded in a string. This answer replaces the initial answer; do not replace useful details with only a statement that you rechecked them. If additional messages prompt more activity after submission, resubmit the complete current answer and report as your final action; a prose-only reply does not finalize the task."
|
|
223
|
-
: "Now do the self-check. Return a standalone final answer with the current result and every requested handoff detail (including paths, identifiers, findings, and evidence). This answer replaces the initial answer; do not replace useful details with only a statement that you rechecked them. Include repairs or remaining blockers, then finish with exactly one fenced JSON block tagged `acceptance-report`.", ...(input.outputSchema ? [] : [formatAcceptanceReportExample(input.nativeReport)]));
|
|
287
|
+
lines.push(...initialReviewEvidence(input.initialOutput, input.initialLedger, input.previousFailure), "", ...finalizationInstructions(input.nativeReport === true, input.outputSchema));
|
|
224
288
|
return lines.join("\n");
|
|
225
289
|
}
|
|
226
290
|
export function createFinalizationTurn(input) {
|
|
@@ -230,12 +294,17 @@ export function createFinalizationTurn(input) {
|
|
|
230
294
|
prompt: input.prompt,
|
|
231
295
|
status: input.ledger.status,
|
|
232
296
|
rawOutput: input.rawOutput,
|
|
233
|
-
...(input.ledger.unconfirmedOutput !== undefined
|
|
297
|
+
...(input.ledger.unconfirmedOutput !== undefined
|
|
298
|
+
? { unconfirmedOutput: input.ledger.unconfirmedOutput }
|
|
299
|
+
: {}),
|
|
234
300
|
...(input.ledger.childReport ? { report: input.ledger.childReport } : {}),
|
|
235
|
-
...(input.ledger.childReportParseError
|
|
301
|
+
...(input.ledger.childReportParseError !== undefined &&
|
|
302
|
+
input.ledger.childReportParseError.length > 0
|
|
303
|
+
? { parseError: input.ledger.childReportParseError }
|
|
304
|
+
: {}),
|
|
236
305
|
runtimeChecks: input.ledger.runtimeChecks,
|
|
237
306
|
verifyRuns: input.ledger.verifyRuns,
|
|
238
|
-
...(failureMessage ? { failureMessage } : {}),
|
|
307
|
+
...(failureMessage !== undefined && failureMessage.length > 0 ? { failureMessage } : {}),
|
|
239
308
|
};
|
|
240
309
|
}
|
|
241
310
|
export function createFinalizationProcessFailureTurn(input) {
|
|
@@ -243,7 +312,9 @@ export function createFinalizationProcessFailureTurn(input) {
|
|
|
243
312
|
turn: input.turn,
|
|
244
313
|
prompt: input.prompt,
|
|
245
314
|
status: "rejected",
|
|
246
|
-
...(input.rawOutput
|
|
315
|
+
...(input.rawOutput !== undefined && input.rawOutput.length > 0
|
|
316
|
+
? { rawOutput: input.rawOutput }
|
|
317
|
+
: {}),
|
|
247
318
|
runtimeChecks: [{ id: "finalization-process", status: "failed", message: input.message }],
|
|
248
319
|
verifyRuns: [],
|
|
249
320
|
failureMessage: `Acceptance rejected: ${input.message}`,
|
|
@@ -252,8 +323,13 @@ export function createFinalizationProcessFailureTurn(input) {
|
|
|
252
323
|
export function attachFinalizationToLedger(input) {
|
|
253
324
|
return {
|
|
254
325
|
...input.authoritativeLedger,
|
|
255
|
-
...(input.initialLedger.childReport
|
|
256
|
-
|
|
326
|
+
...(input.initialLedger.childReport
|
|
327
|
+
? { initialChildReport: input.initialLedger.childReport }
|
|
328
|
+
: {}),
|
|
329
|
+
...(input.initialLedger.childReportParseError !== undefined &&
|
|
330
|
+
input.initialLedger.childReportParseError.length > 0
|
|
331
|
+
? { initialChildReportParseError: input.initialLedger.childReportParseError }
|
|
332
|
+
: {}),
|
|
257
333
|
finalization: {
|
|
258
334
|
mode: "self-review-loop",
|
|
259
335
|
status: input.status,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { acceptanceFailureMessage } from "./acceptance-evaluation.js";
|
|
2
|
+
import { isFailFastAbort } from "./parallel-utils.js";
|
|
3
|
+
function cancellationOutcome(input) {
|
|
4
|
+
const { signal, result } = input;
|
|
5
|
+
if (signal?.aborted === true) {
|
|
6
|
+
const reason = signal.reason;
|
|
7
|
+
if (reason instanceof Error && reason.name === "TimeoutError") {
|
|
8
|
+
return {
|
|
9
|
+
...result,
|
|
10
|
+
exitCode: 124,
|
|
11
|
+
timedOut: true,
|
|
12
|
+
interrupted: false,
|
|
13
|
+
error: reason.message.length > 0 ? reason.message : "Subagent timed out.",
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return { ...result, exitCode: 1, interrupted: false, error: "Subagent cancelled." };
|
|
17
|
+
}
|
|
18
|
+
if (isFailFastAbort(input.interruptSignal)) {
|
|
19
|
+
return { ...result, exitCode: -1, interrupted: false, error: "Interrupted due to fail-fast" };
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function executionStopOutcome(input) {
|
|
24
|
+
const { result } = input;
|
|
25
|
+
if (result.timedOut === true || result.resourceLimitExceeded) {
|
|
26
|
+
return {
|
|
27
|
+
...result,
|
|
28
|
+
exitCode: result.timedOut === true ? 124 : 1,
|
|
29
|
+
interrupted: result.interrupted === undefined ? undefined : false,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (input.interruptSignal?.aborted === true || result.interrupted === true) {
|
|
33
|
+
return { ...result, exitCode: 0, interrupted: true, error: undefined };
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
function configuredAcceptanceFailure(acceptance) {
|
|
38
|
+
return acceptance?.explicit === true ? acceptanceFailureMessage(acceptance) : undefined;
|
|
39
|
+
}
|
|
40
|
+
/** Cancellation and resource limits outrank interruption; acceptance only rejects successful execution. */
|
|
41
|
+
export function resolveExecutionOutcome(input) {
|
|
42
|
+
const stopped = cancellationOutcome(input) ?? executionStopOutcome(input);
|
|
43
|
+
if (stopped) {
|
|
44
|
+
return stopped;
|
|
45
|
+
}
|
|
46
|
+
const { result } = input;
|
|
47
|
+
const failure = configuredAcceptanceFailure(input.acceptance);
|
|
48
|
+
if (failure !== undefined && failure.length > 0 && result.exitCode === 0) {
|
|
49
|
+
const error = (result.error ?? "").length > 0 ? `${result.error ?? ""}\n${failure}` : failure;
|
|
50
|
+
return { ...result, exitCode: 1, error };
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|