@fitchmultz/pi-subagents 0.44.6 → 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 +265 -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 -1537
- 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 +23 -18
- 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 -1310
- 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/src/extension/schemas.ts
CHANGED
|
@@ -4,441 +4,474 @@
|
|
|
4
4
|
|
|
5
5
|
import { Type } from "../shared/native-typebox.ts";
|
|
6
6
|
import { SUBAGENT_ACTIONS } from "../shared/types.ts";
|
|
7
|
+
import { AcceptanceOverride } from "./acceptance-schema.ts";
|
|
8
|
+
import { ChainItemSchema } from "./chain-schema.ts";
|
|
9
|
+
import { AgentRunsValidationParams } from "./everyday-schemas.ts";
|
|
10
|
+
import {
|
|
11
|
+
HistoryQueryFields,
|
|
12
|
+
JsonSchemaObject,
|
|
13
|
+
ModelOverride,
|
|
14
|
+
OutputModeOverride,
|
|
15
|
+
SkillOverride,
|
|
16
|
+
TaskItem,
|
|
17
|
+
requiredObject,
|
|
18
|
+
} from "./schema-overrides.ts";
|
|
19
|
+
export { AcceptanceOverride, DelegateAcceptance } from "./acceptance-schema.ts";
|
|
20
|
+
export { ChainItemSchema } from "./chain-schema.ts";
|
|
21
|
+
export { DelegateParams, AgentRunsValidationParams, AgentRunsParams } from "./everyday-schemas.ts";
|
|
7
22
|
|
|
8
|
-
const
|
|
23
|
+
const MaxOutputOverride = Type.Object(
|
|
24
|
+
{
|
|
25
|
+
bytes: Type.Optional(
|
|
26
|
+
Type.Integer({ minimum: 1, description: "Max output bytes before truncation." }),
|
|
27
|
+
),
|
|
28
|
+
lines: Type.Optional(
|
|
29
|
+
Type.Integer({ minimum: 1, description: "Max output lines before truncation." }),
|
|
30
|
+
),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
additionalProperties: false,
|
|
34
|
+
description: "Final output truncation limits. Defaults: 200KB, 5000 lines.",
|
|
35
|
+
},
|
|
36
|
+
);
|
|
9
37
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
38
|
+
const ControlOverrides = Type.Object(
|
|
39
|
+
{
|
|
40
|
+
enabled: Type.Optional(
|
|
41
|
+
Type.Boolean({
|
|
42
|
+
description: "Enable/disable subagent control attention tracking for this run",
|
|
43
|
+
}),
|
|
44
|
+
),
|
|
45
|
+
needsAttentionAfterMs: Type.Optional(
|
|
46
|
+
Type.Integer({
|
|
47
|
+
minimum: 1,
|
|
48
|
+
description:
|
|
49
|
+
"No-activity window (ms) before a run needs attention. Default 600000 (10 min).",
|
|
50
|
+
}),
|
|
51
|
+
),
|
|
52
|
+
failedToolAttemptsBeforeAttention: Type.Optional(
|
|
53
|
+
Type.Integer({
|
|
54
|
+
minimum: 1,
|
|
55
|
+
description: "Consecutive mutating-tool failures before needs_attention (default: 3)",
|
|
56
|
+
}),
|
|
57
|
+
),
|
|
58
|
+
notifyOn: Type.Optional(
|
|
59
|
+
Type.Array(Type.Enum(["needs_attention"] as const, { type: "string" }), {
|
|
60
|
+
description:
|
|
61
|
+
"Control event types that should notify the parent/orchestrator. Defaults to needs_attention.",
|
|
62
|
+
}),
|
|
63
|
+
),
|
|
64
|
+
notifyChannels: Type.Optional(
|
|
65
|
+
Type.Array(Type.Enum(["event", "async", "intercom"] as const, { type: "string" }), {
|
|
66
|
+
description:
|
|
67
|
+
"Notification channels to use when available. Defaults to event, async, and intercom.",
|
|
68
|
+
}),
|
|
69
|
+
),
|
|
70
|
+
},
|
|
71
|
+
{ additionalProperties: false },
|
|
72
|
+
);
|
|
18
73
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
74
|
+
export const SubagentParams = Type.Object(
|
|
75
|
+
{
|
|
76
|
+
agent: Type.Optional(
|
|
77
|
+
Type.String({
|
|
78
|
+
minLength: 1,
|
|
79
|
+
description:
|
|
80
|
+
"Agent name; on resume/answer, adopt the current profile including model, thinking and fallbacks; a separate model override wins. Otherwise keep saved settings.",
|
|
81
|
+
}),
|
|
82
|
+
),
|
|
83
|
+
task: Type.Optional(
|
|
84
|
+
Type.String({
|
|
85
|
+
minLength: 1,
|
|
86
|
+
description: "Task (SINGLE mode, optional for self-contained agents)",
|
|
87
|
+
}),
|
|
88
|
+
),
|
|
89
|
+
label: TaskItem.properties.label,
|
|
90
|
+
// Management action (when present, tool operates in management mode)
|
|
91
|
+
action: Type.Optional(
|
|
92
|
+
Type.Enum([...SUBAGENT_ACTIONS] as const, {
|
|
93
|
+
type: "string",
|
|
94
|
+
description:
|
|
95
|
+
"Management/control action. Omit for execution mode. nudge sends a live intercom nudge to a running child.",
|
|
96
|
+
}),
|
|
97
|
+
),
|
|
98
|
+
id: Type.Optional(
|
|
99
|
+
Type.String({
|
|
100
|
+
description:
|
|
101
|
+
"Run id or prefix for status/interrupt/extend/resume/nudge/questions/answer/review actions.",
|
|
102
|
+
}),
|
|
103
|
+
),
|
|
104
|
+
runId: Type.Optional(
|
|
105
|
+
Type.String({
|
|
106
|
+
description:
|
|
107
|
+
"Target run ID; prefer id. Defaults to the most recently active controllable run for interrupt/extend/nudge.",
|
|
108
|
+
}),
|
|
109
|
+
),
|
|
110
|
+
questionId: AgentRunsValidationParams.properties.questionId,
|
|
111
|
+
decision: Type.Optional(
|
|
112
|
+
Type.Enum(["accepted", "needs_changes"] as const, {
|
|
113
|
+
type: "string",
|
|
114
|
+
description:
|
|
115
|
+
"Parent-only review decision; not sent to the child. Put actionable instructions in resume/nudge. Does not launch work or change runtime acceptance.",
|
|
116
|
+
}),
|
|
117
|
+
),
|
|
118
|
+
offset: Type.Optional(
|
|
119
|
+
Type.Integer({ minimum: 0, description: "Status list/questions offset." }),
|
|
120
|
+
),
|
|
121
|
+
limit: AgentRunsValidationParams.properties.limit,
|
|
122
|
+
...HistoryQueryFields,
|
|
123
|
+
full: Type.Optional(
|
|
124
|
+
Type.Boolean({
|
|
125
|
+
description:
|
|
126
|
+
"Exact status only: include the full task and saved launch configuration; default is concise.",
|
|
127
|
+
}),
|
|
128
|
+
),
|
|
129
|
+
dir: Type.Optional(
|
|
130
|
+
Type.String({
|
|
131
|
+
description: "Async run directory for status/resume.",
|
|
132
|
+
}),
|
|
133
|
+
),
|
|
134
|
+
index: Type.Optional(
|
|
135
|
+
Type.Integer({
|
|
136
|
+
minimum: 0,
|
|
137
|
+
description: "Zero-based child index for actions that target a specific child.",
|
|
138
|
+
}),
|
|
139
|
+
),
|
|
140
|
+
message: Type.Optional(
|
|
141
|
+
Type.String({
|
|
142
|
+
description:
|
|
143
|
+
"Follow-up for resume, nudge text, answer, or parent-only review note. Review notes are not sent to the child; put actionable instructions in resume/nudge. Use index for multi-child runs.",
|
|
144
|
+
}),
|
|
145
|
+
),
|
|
146
|
+
extendMs: Type.Optional(
|
|
147
|
+
Type.Integer({
|
|
148
|
+
minimum: 1,
|
|
149
|
+
description: "Additional ms for extend; defaults to timeoutMs/maxRuntimeMs.",
|
|
150
|
+
}),
|
|
151
|
+
),
|
|
152
|
+
// Chain identifier for management (can't reuse 'chain' — that's the execution array)
|
|
153
|
+
chainName: Type.Optional(
|
|
154
|
+
Type.String({
|
|
155
|
+
description: "Chain name for get/update/delete management actions",
|
|
156
|
+
}),
|
|
157
|
+
),
|
|
158
|
+
// Agent/chain configuration for create/update (nested to avoid conflicts with execution fields)
|
|
159
|
+
config: Type.Optional(
|
|
160
|
+
Type.Unsafe({
|
|
161
|
+
anyOf: [{ type: "object", additionalProperties: true }, { type: "string" }],
|
|
162
|
+
description:
|
|
163
|
+
"Agent or chain config for create/update (object or JSON string). Agent keys: name, package, description, scope ('user'|'project'), systemPrompt, systemPromptMode, inheritProjectContext, inheritSkills, defaultContext, model, tools, allowSubagents, extensions, skills, thinking, output, reads, progress, maxSubagentDepth, maxExecutionTimeMs, maxTokens. Chain keys: name, package, description, scope, steps (array of {agent, task?, output?, outputMode?, reads?, model?, skills?, progress?}). Presence of 'steps' creates a chain.",
|
|
164
|
+
}),
|
|
165
|
+
),
|
|
166
|
+
tasks: Type.Optional(
|
|
167
|
+
Type.Array(TaskItem, {
|
|
168
|
+
minItems: 1,
|
|
169
|
+
description: "PARALLEL mode: concurrent [{agent, task, ...}] tasks.",
|
|
170
|
+
}),
|
|
171
|
+
),
|
|
172
|
+
concurrency: Type.Optional(
|
|
173
|
+
Type.Integer({
|
|
174
|
+
minimum: 1,
|
|
175
|
+
description: "PARALLEL mode: max concurrent parallel tasks (default 4).",
|
|
176
|
+
}),
|
|
177
|
+
),
|
|
178
|
+
timeoutMs: Type.Optional(
|
|
179
|
+
Type.Integer({
|
|
180
|
+
minimum: 1,
|
|
181
|
+
description:
|
|
182
|
+
"Foreground wall-clock timeout (ms); on expiry children are soft-interrupted. When async is omitted, a timeout implies foreground execution; explicit async runs reject it. Short reviewer budgets are raised to a floor; planner/researcher budgets only from run-history data.",
|
|
183
|
+
}),
|
|
184
|
+
),
|
|
185
|
+
maxRuntimeMs: Type.Optional(
|
|
186
|
+
Type.Integer({
|
|
187
|
+
minimum: 1,
|
|
188
|
+
description: "Alias for timeoutMs; same foreground-only policy.",
|
|
189
|
+
}),
|
|
190
|
+
),
|
|
191
|
+
maxOutput: Type.Optional(MaxOutputOverride),
|
|
192
|
+
worktree: Type.Optional(
|
|
193
|
+
Type.Boolean({
|
|
194
|
+
description:
|
|
195
|
+
"Isolated git worktrees per parallel task; requires clean git state; per-worktree diffs included.",
|
|
196
|
+
}),
|
|
197
|
+
),
|
|
198
|
+
chain: Type.Optional(
|
|
199
|
+
Type.Array(ChainItemSchema, {
|
|
200
|
+
minItems: 1,
|
|
201
|
+
description:
|
|
202
|
+
"CHAIN mode: sequential pipeline; each step's response becomes {previous} for the next.",
|
|
203
|
+
}),
|
|
204
|
+
),
|
|
205
|
+
context: Type.Optional(
|
|
206
|
+
Type.Enum(["fresh", "fork"] as const, {
|
|
207
|
+
type: "string",
|
|
208
|
+
description:
|
|
209
|
+
"'fresh' or 'fork' (branch from parent session); overrides each agent's defaultContext. Fork is rejected for agents whose effective model uses the anthropic/ provider.",
|
|
210
|
+
}),
|
|
211
|
+
),
|
|
212
|
+
chainDir: Type.Optional(
|
|
213
|
+
Type.String({
|
|
214
|
+
description: "Directory for chain artifacts (default: temp, auto-cleaned after 24h)",
|
|
215
|
+
}),
|
|
216
|
+
),
|
|
217
|
+
async: Type.Optional(
|
|
218
|
+
Type.Boolean({
|
|
219
|
+
description:
|
|
220
|
+
"Run in background. Stock top-level default: true; set false for foreground execution.",
|
|
221
|
+
}),
|
|
222
|
+
),
|
|
223
|
+
agentScope: Type.Optional(
|
|
224
|
+
Type.Enum(["user", "project", "both"] as const, {
|
|
225
|
+
type: "string",
|
|
226
|
+
description:
|
|
227
|
+
"Agent discovery scope: 'user', 'project', or 'both' (default; project wins collisions)",
|
|
228
|
+
}),
|
|
229
|
+
),
|
|
230
|
+
cwd: Type.Optional(Type.String()),
|
|
231
|
+
artifacts: Type.Optional(
|
|
232
|
+
Type.Boolean({ description: "Write debug artifacts (default: true)" }),
|
|
233
|
+
),
|
|
234
|
+
includeProgress: Type.Optional(
|
|
235
|
+
Type.Boolean({ description: "Include full progress in result (default: false)" }),
|
|
236
|
+
),
|
|
237
|
+
progress: Type.Optional(
|
|
238
|
+
Type.Boolean({ description: "Enable progress.md tracking for a single agent run" }),
|
|
239
|
+
),
|
|
240
|
+
share: Type.Optional(
|
|
241
|
+
Type.Boolean({ description: "Upload session to GitHub Gist for sharing (default: false)" }),
|
|
242
|
+
),
|
|
243
|
+
sessionDir: Type.Optional(
|
|
244
|
+
Type.String({ description: "Directory for session logs (default: temp)" }),
|
|
245
|
+
),
|
|
246
|
+
// Clarification TUI
|
|
247
|
+
clarify: Type.Optional(
|
|
248
|
+
Type.Boolean({
|
|
249
|
+
description: "Show TUI to preview/edit before execution; explicit true forces foreground.",
|
|
250
|
+
}),
|
|
251
|
+
),
|
|
252
|
+
control: Type.Optional(ControlOverrides),
|
|
253
|
+
// Solo agent overrides
|
|
254
|
+
output: Type.Optional(
|
|
255
|
+
Type.Unsafe({
|
|
256
|
+
anyOf: [{ type: "string" }, { type: "boolean" }],
|
|
257
|
+
description:
|
|
258
|
+
"Output file for single agent, or false to disable. Relative paths resolve against cwd.",
|
|
259
|
+
}),
|
|
260
|
+
),
|
|
261
|
+
outputMode: Type.Optional(OutputModeOverride),
|
|
262
|
+
skill: Type.Optional(SkillOverride),
|
|
263
|
+
model: ModelOverride,
|
|
264
|
+
outputSchema: Type.Optional(JsonSchemaObject),
|
|
265
|
+
acceptance: Type.Optional(AcceptanceOverride),
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
additionalProperties: false,
|
|
269
|
+
allOf: [
|
|
270
|
+
{
|
|
271
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["answer"] } } },
|
|
26
272
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
273
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
274
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
275
|
+
then: {
|
|
276
|
+
allOf: [
|
|
277
|
+
requiredObject("questionId", "message"),
|
|
278
|
+
{ anyOf: [requiredObject("id"), requiredObject("runId")] },
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["review"] } } },
|
|
31
284
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
285
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
286
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
287
|
+
then: {
|
|
288
|
+
allOf: [
|
|
289
|
+
requiredObject("decision"),
|
|
290
|
+
{ anyOf: [requiredObject("id"), requiredObject("runId")] },
|
|
291
|
+
],
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
not: {
|
|
296
|
+
anyOf: [
|
|
297
|
+
requiredObject("agent", "tasks"),
|
|
298
|
+
requiredObject("agent", "chain"),
|
|
299
|
+
requiredObject("tasks", "chain"),
|
|
300
|
+
requiredObject("cursor", "offset"),
|
|
301
|
+
requiredObject("cursor", "before"),
|
|
302
|
+
],
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
if: requiredObject("decision"),
|
|
39
307
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
308
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
309
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
310
|
+
then: { ...requiredObject("action"), properties: { action: { enum: ["review"] } } },
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["history"] } } },
|
|
47
314
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
315
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
316
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
317
|
+
then: { anyOf: [requiredObject("id"), requiredObject("runId")] },
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } },
|
|
53
321
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"no-staged-files",
|
|
61
|
-
"diff-summary",
|
|
62
|
-
"review-findings",
|
|
63
|
-
"manual-notes",
|
|
64
|
-
] as const, { type: "string" });
|
|
322
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
323
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
324
|
+
then: requiredObject("query"),
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
if: requiredObject("offset"),
|
|
65
328
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
},
|
|
329
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
330
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
331
|
+
then: {
|
|
332
|
+
...requiredObject("action"),
|
|
333
|
+
properties: { action: { enum: ["status", "questions"] } },
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
if: requiredObject("limit"),
|
|
338
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
339
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
340
|
+
then: {
|
|
341
|
+
...requiredObject("action"),
|
|
342
|
+
properties: { action: { enum: ["status", "questions", "history", "search"] } },
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
if: requiredObject("cursor"),
|
|
72
347
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
348
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
349
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
350
|
+
then: {
|
|
351
|
+
...requiredObject("action"),
|
|
352
|
+
properties: { action: { enum: ["status", "history", "search"] } },
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
if: requiredObject("sort"),
|
|
81
357
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
stopRules: { type: "array", items: { type: "string", minLength: 1 } },
|
|
97
|
-
maxFinalizationTurns: { type: "integer", minimum: 1, maximum: 10 },
|
|
98
|
-
},
|
|
99
|
-
additionalProperties: false,
|
|
100
|
-
description: "Optional acceptance contract. criteria=definition of done, evidence/verify=proof, stopRules=constraints, maxFinalizationTurns=self-review budget; at least one required. no-staged-files requires the entire Git index to be empty, including pre-existing staged paths. Continue/resume/answer overrides apply only to newly started continuations, never to a live child's acceptance. See the pi-subagents skill.",
|
|
101
|
-
});
|
|
358
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
359
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
360
|
+
then: {
|
|
361
|
+
...requiredObject("action"),
|
|
362
|
+
properties: { action: { enum: ["status", "search"] } },
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
if: {
|
|
367
|
+
allOf: [
|
|
368
|
+
{ ...requiredObject("action"), properties: { action: { enum: ["search"] } } },
|
|
369
|
+
requiredObject("index"),
|
|
370
|
+
],
|
|
371
|
+
},
|
|
102
372
|
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
env: Type.Optional(Type.Array(Type.Object({ name: Type.String({ minLength: 1 }), value: Type.String() }, { additionalProperties: false }))),
|
|
110
|
-
}, { additionalProperties: false }))),
|
|
111
|
-
stopRules: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
|
|
112
|
-
maxFinalizationTurns: Type.Optional(Type.Integer({ minimum: 1, maximum: 10 })),
|
|
113
|
-
}, { additionalProperties: false, description: "Acceptance criteria, evidence, verification commands and stop rules. Criteria use objects; verification environment uses unique name/value pairs. Self-review budget: 1–10 turns." });
|
|
373
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
374
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
375
|
+
then: { anyOf: [requiredObject("id"), requiredObject("runId")] },
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
if: { anyOf: [requiredObject("state"), requiredObject("text")] },
|
|
114
379
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
380
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
381
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
382
|
+
then: { ...requiredObject("action"), properties: { action: { enum: ["status"] } } },
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
if: requiredObject("query"),
|
|
118
386
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
outputSchema: Type.Optional(JsonSchemaObject),
|
|
126
|
-
output: Type.Optional(OutputOverride),
|
|
127
|
-
outputMode: Type.Optional(OutputModeOverride),
|
|
128
|
-
reads: Type.Optional(ReadsOverride),
|
|
129
|
-
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking for this task" })),
|
|
130
|
-
model: ModelOverride,
|
|
131
|
-
skill: Type.Optional(SkillOverride),
|
|
132
|
-
acceptance: Type.Optional(AcceptanceOverride),
|
|
133
|
-
}, { additionalProperties: false });
|
|
387
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
388
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
389
|
+
then: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } },
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
if: requiredObject("before"),
|
|
134
393
|
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
as: Type.Optional(Type.String({ description: "Safe identifier used as {outputs.name} in later chain steps." })),
|
|
142
|
-
outputSchema: Type.Optional(JsonSchemaObject),
|
|
143
|
-
cwd: Type.Optional(Type.String()),
|
|
144
|
-
count: Type.Optional(Type.Integer({ minimum: 1, description: "Repeat this parallel task N times." })),
|
|
145
|
-
output: Type.Optional(OutputOverride),
|
|
146
|
-
outputMode: Type.Optional(OutputModeOverride),
|
|
147
|
-
reads: Type.Optional(ReadsOverride),
|
|
148
|
-
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
149
|
-
skill: Type.Optional(SkillOverride),
|
|
150
|
-
model: ModelOverride,
|
|
151
|
-
acceptance: Type.Optional(AcceptanceOverride),
|
|
152
|
-
}, { additionalProperties: false });
|
|
394
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
395
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
396
|
+
then: { ...requiredObject("action"), properties: { action: { enum: ["history"] } } },
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["status"] } } },
|
|
153
400
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
key: Type.Optional(Type.String({ description: "JSON Pointer relative to each item for stable child ids." })),
|
|
161
|
-
maxItems: Type.Optional(Type.Integer({ minimum: 0, description: "Required fanout bound unless configured globally." })),
|
|
162
|
-
onEmpty: Type.Optional(Type.Enum(["skip", "fail"] as const, { type: "string", description: "Empty input behavior. Defaults to skip." })),
|
|
163
|
-
}, { additionalProperties: false });
|
|
401
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
402
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
403
|
+
then: { properties: { sort: { enum: ["attention", "newest", "oldest"] } } },
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
if: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } },
|
|
164
407
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
cwd: Type.Optional(Type.String()),
|
|
172
|
-
output: Type.Optional(OutputOverride),
|
|
173
|
-
outputMode: Type.Optional(OutputModeOverride),
|
|
174
|
-
reads: Type.Optional(ReadsOverride),
|
|
175
|
-
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
176
|
-
skill: Type.Optional(SkillOverride),
|
|
177
|
-
model: ModelOverride,
|
|
178
|
-
acceptance: Type.Optional(AcceptanceOverride),
|
|
179
|
-
}, { additionalProperties: false });
|
|
408
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
409
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
410
|
+
then: { properties: { sort: { enum: ["relevance", "newest"] } } },
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
if: requiredObject("full"),
|
|
180
414
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
415
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
416
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
417
|
+
then: {
|
|
418
|
+
allOf: [
|
|
419
|
+
{ ...requiredObject("action"), properties: { action: { enum: ["status"] } } },
|
|
420
|
+
{ anyOf: [requiredObject("id"), requiredObject("runId"), requiredObject("dir")] },
|
|
421
|
+
],
|
|
422
|
+
},
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
if: requiredObject("worktree"),
|
|
426
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
427
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
428
|
+
then: requiredObject("tasks"),
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
if: requiredObject("concurrency"),
|
|
432
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
433
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
434
|
+
then: requiredObject("tasks"),
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
if: requiredObject("chainDir"),
|
|
438
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
439
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
440
|
+
then: requiredObject("chain"),
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
if: {
|
|
444
|
+
anyOf: [
|
|
445
|
+
requiredObject("output"),
|
|
446
|
+
requiredObject("outputMode"),
|
|
447
|
+
requiredObject("skill"),
|
|
448
|
+
requiredObject("model"),
|
|
449
|
+
requiredObject("outputSchema"),
|
|
450
|
+
requiredObject("progress"),
|
|
451
|
+
],
|
|
452
|
+
},
|
|
185
453
|
|
|
186
|
-
//
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
cwd: Type.Optional(Type.String()),
|
|
198
|
-
output: Type.Optional(OutputOverride),
|
|
199
|
-
outputMode: Type.Optional(OutputModeOverride),
|
|
200
|
-
reads: Type.Optional(ReadsOverride),
|
|
201
|
-
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking in {chain_dir}" })),
|
|
202
|
-
skill: Type.Optional(SkillOverride),
|
|
203
|
-
model: ModelOverride,
|
|
204
|
-
acceptance: Type.Optional(AcceptanceOverride),
|
|
205
|
-
parallel: Type.Optional(Type.Unsafe({
|
|
206
|
-
anyOf: [
|
|
207
|
-
Type.Array(ParallelTaskSchema, { minItems: 1, description: "Tasks to run in parallel" }),
|
|
208
|
-
DynamicParallelTemplateSchema,
|
|
209
|
-
],
|
|
210
|
-
description: "Static parallel tasks array, or a single dynamic fanout child template when expand/collect are present.",
|
|
211
|
-
})),
|
|
212
|
-
expand: Type.Optional(DynamicExpandSchema),
|
|
213
|
-
collect: Type.Optional(DynamicCollectSchema),
|
|
214
|
-
concurrency: Type.Optional(Type.Integer({ minimum: 1, description: "Max concurrent tasks (default: 4)" })),
|
|
215
|
-
failFast: Type.Optional(Type.Boolean({ description: "Stop on first failure (default: false)" })),
|
|
216
|
-
worktree: Type.Optional(Type.Boolean({
|
|
217
|
-
description: "Create isolated git worktrees for each parallel task."
|
|
218
|
-
})),
|
|
219
|
-
}, {
|
|
220
|
-
description: "Chain step: {agent, task?} sequential, {parallel: [...]} concurrent, or {expand, parallel: {...}, collect} dynamic fanout.",
|
|
221
|
-
additionalProperties: false,
|
|
222
|
-
allOf: [
|
|
223
|
-
{ anyOf: [requiredObject("agent"), requiredObject("parallel")] },
|
|
224
|
-
{ not: { anyOf: [
|
|
225
|
-
requiredObject("agent", "parallel"),
|
|
226
|
-
{ ...requiredObject("expand"), properties: { parallel: { type: "array", items: {} } } },
|
|
227
|
-
] } },
|
|
228
|
-
{ if: requiredObject("expand"), then: { ...requiredObject("parallel", "collect"), properties: { parallel: { type: "object" } } } },
|
|
229
|
-
{ if: requiredObject("collect"), then: { ...requiredObject("expand", "parallel"), properties: { parallel: { type: "object" } } } },
|
|
230
|
-
{ if: { ...requiredObject("parallel"), properties: { parallel: { type: "object" } } }, then: requiredObject("expand", "collect") },
|
|
231
|
-
{ if: requiredObject("agent"), then: { not: { anyOf: [requiredObject("concurrency"), requiredObject("failFast"), requiredObject("worktree")] } } },
|
|
232
|
-
{ if: { ...requiredObject("parallel"), properties: { parallel: { type: "array", items: {} } } }, then: { not: { anyOf: [
|
|
233
|
-
requiredObject("task"), requiredObject("phase"), requiredObject("label"), requiredObject("as"), requiredObject("outputSchema"),
|
|
234
|
-
requiredObject("output"), requiredObject("outputMode"), requiredObject("reads"), requiredObject("progress"),
|
|
235
|
-
requiredObject("skill"), requiredObject("model"), requiredObject("acceptance"), requiredObject("expand"), requiredObject("collect"),
|
|
236
|
-
] } } },
|
|
237
|
-
{ if: { ...requiredObject("parallel"), properties: { parallel: { type: "object" } } }, then: { not: { anyOf: [
|
|
238
|
-
requiredObject("task"), requiredObject("as"), requiredObject("outputSchema"), requiredObject("cwd"), requiredObject("output"),
|
|
239
|
-
requiredObject("outputMode"), requiredObject("reads"), requiredObject("progress"), requiredObject("skill"),
|
|
240
|
-
requiredObject("model"), requiredObject("acceptance"), requiredObject("worktree"),
|
|
241
|
-
] } } },
|
|
242
|
-
],
|
|
243
|
-
});
|
|
454
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
455
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
456
|
+
then: {
|
|
457
|
+
anyOf: [
|
|
458
|
+
requiredObject("agent"),
|
|
459
|
+
{ ...requiredObject("action"), properties: { action: { enum: ["resume", "answer"] } } },
|
|
460
|
+
],
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
if: requiredObject("acceptance"),
|
|
244
465
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
},
|
|
256
|
-
|
|
257
|
-
export const DelegateParams = Type.Object({
|
|
258
|
-
agent: TaskItem.properties.agent,
|
|
259
|
-
task: TaskItem.properties.task,
|
|
260
|
-
label: TaskItem.properties.label,
|
|
261
|
-
cwd: TaskItem.properties.cwd,
|
|
262
|
-
model: TaskItem.properties.model,
|
|
263
|
-
context: Type.Optional(Type.Enum(["fresh", "fork"] as const, { type: "string", description: "Override the profile's context policy." })),
|
|
264
|
-
async: Type.Optional(Type.Boolean({ description: "Background by default; false waits for the result." })),
|
|
265
|
-
worktree: Type.Optional(Type.Boolean({ description: "Isolate this writer in a Git worktree; return its patch. Requires a clean checkout." })),
|
|
266
|
-
output: TaskItem.properties.output,
|
|
267
|
-
acceptance: Type.Optional(DelegateAcceptance),
|
|
268
|
-
}, { additionalProperties: false });
|
|
269
|
-
|
|
270
|
-
const HistoryQueryFields = {
|
|
271
|
-
cursor: Type.Optional(Type.String({ minLength: 1, description: "Opaque page cursor returned by list/history/search; expires when the indexed snapshot changes." })),
|
|
272
|
-
sort: Type.Optional(Type.Enum(["attention", "newest", "oldest", "relevance"] as const, { type: "string", description: "List: attention (default), newest, oldest. Search: relevance (default), newest." })),
|
|
273
|
-
state: Type.Optional(Type.Enum(["live", "completed", "failed", "blocked", "paused", "unknown"] as const, { type: "string", description: "List only: execution-state filter, applied before paging." })),
|
|
274
|
-
text: Type.Optional(Type.String({ minLength: 1, description: "List only: filter saved task/assignment text before paging." })),
|
|
275
|
-
query: Type.Optional(Type.String({ minLength: 1, description: 'Search visible saved text using 1–12 lexical words (all must match) or one double-quoted phrase. Operators, punctuation and prefixes are rejected. Thinking, images, tool arguments and hidden data are excluded.' })),
|
|
276
|
-
before: Type.Optional(Type.Integer({ minimum: 1, description: "History only: exclusive native-entry position returned by the earlier page; omit for the latest page." })),
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
export const AgentRunsValidationParams = Type.Object({
|
|
280
|
-
action: Type.Enum(["list", "inspect", "history", "search", "nudge", "stop", "continue", "profiles", "questions", "answer", "review"] as const, { type: "string" }),
|
|
281
|
-
id: Type.Optional(Type.String({ minLength: 1, description: "Run ID or unambiguous prefix." })),
|
|
282
|
-
questionId: Type.Optional(Type.String({ minLength: 1, description: "Durable supervisor question ID for exact questions lookup or answer." })),
|
|
283
|
-
async: Type.Optional(Type.Boolean({ description: "Continue/answer: false waits for the actual continuation result." })),
|
|
284
|
-
index: Type.Optional(Type.Integer({ minimum: 0, description: "Child index for a multi-child run." })),
|
|
285
|
-
message: Type.Optional(Type.String({ minLength: 1, description: "Guidance, follow-up, answer, or optional parent-only review note. Review notes are not sent to the child; put actionable instructions in continue/nudge. Only continue/answer can start a saved child." })),
|
|
286
|
-
decision: Type.Optional(Type.Enum(["accepted", "needs_changes"] as const, { type: "string", description: "Parent-only review outcome; not sent to the child. Separate from execution and runtime acceptance checks." })),
|
|
287
|
-
offset: Type.Optional(Type.Integer({ minimum: 0, description: "List/questions offset; history is retained regardless of page size." })),
|
|
288
|
-
limit: Type.Optional(Type.Integer({ minimum: 1, maximum: 100, description: "Results per list/questions/search/history page (default 20; history 100)." })),
|
|
289
|
-
...HistoryQueryFields,
|
|
290
|
-
full: Type.Optional(Type.Boolean({ description: "Inspect only: include the full task and saved launch configuration. Default is a concise report; stored data is unchanged." })),
|
|
291
|
-
agent: Type.Optional(Type.String({ minLength: 1, description: "List/search: filter by child agent. Continue/answer: adopt this current profile, including model, thinking and fallbacks; a separate model override wins. Otherwise keep saved settings. Required for old runs without a saved profile." })),
|
|
292
|
-
model: TaskItem.properties.model,
|
|
293
|
-
cwd: TaskItem.properties.cwd,
|
|
294
|
-
output: TaskItem.properties.output,
|
|
295
|
-
acceptance: TaskItem.properties.acceptance,
|
|
296
|
-
}, {
|
|
297
|
-
additionalProperties: false,
|
|
298
|
-
allOf: [
|
|
299
|
-
{ if: { properties: { action: { enum: ["inspect", "history", "nudge", "stop", "continue", "answer", "review"] } } }, then: requiredObject("id") },
|
|
300
|
-
{ if: { properties: { action: { enum: ["search"] } } }, then: requiredObject("query") },
|
|
301
|
-
{ if: { properties: { action: { enum: ["nudge", "continue", "answer"] } } }, then: requiredObject("message") },
|
|
302
|
-
{ if: { properties: { action: { enum: ["answer"] } } }, then: requiredObject("questionId") },
|
|
303
|
-
{ if: { properties: { action: { enum: ["review"] } } }, then: requiredObject("decision") },
|
|
304
|
-
{ if: { anyOf: [requiredObject("async"), requiredObject("model"), requiredObject("cwd"), requiredObject("output"), requiredObject("acceptance")] }, then: { properties: { action: { enum: ["continue", "answer"] } } } },
|
|
305
|
-
{ if: requiredObject("agent"), then: { properties: { action: { enum: ["list", "search", "continue", "answer"] } } } },
|
|
306
|
-
{ if: requiredObject("offset"), then: { properties: { action: { enum: ["list", "questions"] } } } },
|
|
307
|
-
{ if: requiredObject("limit"), then: { properties: { action: { enum: ["list", "questions", "history", "search"] } } } },
|
|
308
|
-
{ if: requiredObject("cursor"), then: { properties: { action: { enum: ["list", "history", "search"] } } } },
|
|
309
|
-
{ if: requiredObject("sort"), then: { properties: { action: { enum: ["list", "search"] } } } },
|
|
310
|
-
{ not: { anyOf: [requiredObject("cursor", "offset"), requiredObject("cursor", "before")] } },
|
|
311
|
-
{ if: { allOf: [{ properties: { action: { enum: ["search"] } } }, requiredObject("index")] }, then: requiredObject("id") },
|
|
312
|
-
{ if: { anyOf: [requiredObject("state"), requiredObject("text")] }, then: { properties: { action: { enum: ["list"] } } } },
|
|
313
|
-
{ if: requiredObject("query"), then: { properties: { action: { enum: ["search"] } } } },
|
|
314
|
-
{ if: requiredObject("before"), then: { properties: { action: { enum: ["history"] } } } },
|
|
315
|
-
{ if: { properties: { action: { enum: ["list"] } } }, then: { properties: { sort: { enum: ["attention", "newest", "oldest"] } } } },
|
|
316
|
-
{ if: { properties: { action: { enum: ["search"] } } }, then: { properties: { sort: { enum: ["relevance", "newest"] } } } },
|
|
317
|
-
{ if: requiredObject("decision"), then: { properties: { action: { enum: ["review"] } } } },
|
|
318
|
-
{ if: requiredObject("full"), then: { properties: { action: { enum: ["inspect"] } } } },
|
|
319
|
-
],
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
export const AgentRunsParams = Type.Object({
|
|
323
|
-
...AgentRunsValidationParams.properties,
|
|
324
|
-
acceptance: Type.Optional(DelegateAcceptance),
|
|
325
|
-
}, { additionalProperties: false });
|
|
326
|
-
|
|
327
|
-
export const SubagentParams = Type.Object({
|
|
328
|
-
agent: Type.Optional(Type.String({ minLength: 1, description: "Agent name; on resume/answer, adopt the current profile including model, thinking and fallbacks; a separate model override wins. Otherwise keep saved settings." })),
|
|
329
|
-
task: Type.Optional(Type.String({ minLength: 1, description: "Task (SINGLE mode, optional for self-contained agents)" })),
|
|
330
|
-
label: TaskItem.properties.label,
|
|
331
|
-
// Management action (when present, tool operates in management mode)
|
|
332
|
-
action: Type.Optional(Type.Enum([...SUBAGENT_ACTIONS] as const, {
|
|
333
|
-
type: "string",
|
|
334
|
-
description: "Management/control action. Omit for execution mode. nudge sends a live intercom nudge to a running child."
|
|
335
|
-
})),
|
|
336
|
-
id: Type.Optional(Type.String({
|
|
337
|
-
description: "Run id or prefix for status/interrupt/extend/resume/nudge/questions/answer/review actions."
|
|
338
|
-
})),
|
|
339
|
-
runId: Type.Optional(Type.String({
|
|
340
|
-
description: "Target run ID; prefer id. Defaults to the most recently active controllable run for interrupt/extend/nudge."
|
|
341
|
-
})),
|
|
342
|
-
questionId: AgentRunsValidationParams.properties.questionId,
|
|
343
|
-
decision: Type.Optional(Type.Enum(["accepted", "needs_changes"] as const, { type: "string", description: "Parent-only review decision; not sent to the child. Put actionable instructions in resume/nudge. Does not launch work or change runtime acceptance." })),
|
|
344
|
-
offset: Type.Optional(Type.Integer({ minimum: 0, description: "Status list/questions offset." })),
|
|
345
|
-
limit: AgentRunsValidationParams.properties.limit,
|
|
346
|
-
...HistoryQueryFields,
|
|
347
|
-
full: Type.Optional(Type.Boolean({ description: "Exact status only: include the full task and saved launch configuration; default is concise." })),
|
|
348
|
-
dir: Type.Optional(Type.String({
|
|
349
|
-
description: "Async run directory for status/resume."
|
|
350
|
-
})),
|
|
351
|
-
index: Type.Optional(Type.Integer({ minimum: 0, description: "Zero-based child index for actions that target a specific child." })),
|
|
352
|
-
message: Type.Optional(Type.String({ description: "Follow-up for resume, nudge text, answer, or parent-only review note. Review notes are not sent to the child; put actionable instructions in resume/nudge. Use index for multi-child runs." })),
|
|
353
|
-
extendMs: Type.Optional(Type.Integer({ minimum: 1, description: "Additional ms for extend; defaults to timeoutMs/maxRuntimeMs." })),
|
|
354
|
-
// Chain identifier for management (can't reuse 'chain' — that's the execution array)
|
|
355
|
-
chainName: Type.Optional(Type.String({
|
|
356
|
-
description: "Chain name for get/update/delete management actions"
|
|
357
|
-
})),
|
|
358
|
-
// Agent/chain configuration for create/update (nested to avoid conflicts with execution fields)
|
|
359
|
-
config: Type.Optional(Type.Unsafe({
|
|
360
|
-
anyOf: [
|
|
361
|
-
{ type: "object", additionalProperties: true },
|
|
362
|
-
{ type: "string" },
|
|
363
|
-
],
|
|
364
|
-
description: "Agent or chain config for create/update (object or JSON string). Agent keys: name, package, description, scope ('user'|'project'), systemPrompt, systemPromptMode, inheritProjectContext, inheritSkills, defaultContext, model, tools, allowSubagents, extensions, skills, thinking, output, reads, progress, maxSubagentDepth, maxExecutionTimeMs, maxTokens. Chain keys: name, package, description, scope, steps (array of {agent, task?, output?, outputMode?, reads?, model?, skills?, progress?}). Presence of 'steps' creates a chain."
|
|
365
|
-
})),
|
|
366
|
-
tasks: Type.Optional(Type.Array(TaskItem, { minItems: 1, description: "PARALLEL mode: concurrent [{agent, task, ...}] tasks." })),
|
|
367
|
-
concurrency: Type.Optional(Type.Integer({ minimum: 1, description: "PARALLEL mode: max concurrent parallel tasks (default 4)." })),
|
|
368
|
-
timeoutMs: Type.Optional(Type.Integer({ minimum: 1, description: "Foreground wall-clock timeout (ms); on expiry children are soft-interrupted. When async is omitted, a timeout implies foreground execution; explicit async runs reject it. Short reviewer budgets are raised to a floor; planner/researcher budgets only from run-history data." })),
|
|
369
|
-
maxRuntimeMs: Type.Optional(Type.Integer({ minimum: 1, description: "Alias for timeoutMs; same foreground-only policy." })),
|
|
370
|
-
maxOutput: Type.Optional(MaxOutputOverride),
|
|
371
|
-
worktree: Type.Optional(Type.Boolean({
|
|
372
|
-
description: "Isolated git worktrees per parallel task; requires clean git state; per-worktree diffs included."
|
|
373
|
-
})),
|
|
374
|
-
chain: Type.Optional(Type.Array(ChainItemSchema, { minItems: 1, description: "CHAIN mode: sequential pipeline; each step's response becomes {previous} for the next." })),
|
|
375
|
-
context: Type.Optional(Type.Enum(["fresh", "fork"] as const, {
|
|
376
|
-
type: "string",
|
|
377
|
-
description: "'fresh' or 'fork' (branch from parent session); overrides each agent's defaultContext. Fork is rejected for agents whose effective model uses the anthropic/ provider.",
|
|
378
|
-
})),
|
|
379
|
-
chainDir: Type.Optional(Type.String({ description: "Directory for chain artifacts (default: temp, auto-cleaned after 24h)" })),
|
|
380
|
-
async: Type.Optional(Type.Boolean({ description: "Run in background. Stock top-level default: true; set false for foreground execution." })),
|
|
381
|
-
agentScope: Type.Optional(Type.Enum(["user", "project", "both"] as const, { type: "string", description: "Agent discovery scope: 'user', 'project', or 'both' (default; project wins collisions)" })),
|
|
382
|
-
cwd: Type.Optional(Type.String()),
|
|
383
|
-
artifacts: Type.Optional(Type.Boolean({ description: "Write debug artifacts (default: true)" })),
|
|
384
|
-
includeProgress: Type.Optional(Type.Boolean({ description: "Include full progress in result (default: false)" })),
|
|
385
|
-
progress: Type.Optional(Type.Boolean({ description: "Enable progress.md tracking for a single agent run" })),
|
|
386
|
-
share: Type.Optional(Type.Boolean({ description: "Upload session to GitHub Gist for sharing (default: false)" })),
|
|
387
|
-
sessionDir: Type.Optional(
|
|
388
|
-
Type.String({ description: "Directory for session logs (default: temp)" }),
|
|
389
|
-
),
|
|
390
|
-
// Clarification TUI
|
|
391
|
-
clarify: Type.Optional(Type.Boolean({ description: "Show TUI to preview/edit before execution; explicit true forces foreground." })),
|
|
392
|
-
control: Type.Optional(ControlOverrides),
|
|
393
|
-
// Solo agent overrides
|
|
394
|
-
output: Type.Optional(Type.Unsafe({
|
|
395
|
-
anyOf: [
|
|
396
|
-
{ type: "string" },
|
|
397
|
-
{ type: "boolean" },
|
|
398
|
-
],
|
|
399
|
-
description: "Output file for single agent, or false to disable. Relative paths resolve against cwd.",
|
|
400
|
-
})),
|
|
401
|
-
outputMode: Type.Optional(OutputModeOverride),
|
|
402
|
-
skill: Type.Optional(SkillOverride),
|
|
403
|
-
model: ModelOverride,
|
|
404
|
-
outputSchema: Type.Optional(JsonSchemaObject),
|
|
405
|
-
acceptance: Type.Optional(AcceptanceOverride),
|
|
406
|
-
}, {
|
|
407
|
-
additionalProperties: false,
|
|
408
|
-
allOf: [
|
|
409
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["answer"] } } }, then: { allOf: [requiredObject("questionId", "message"), { anyOf: [requiredObject("id"), requiredObject("runId")] }] } },
|
|
410
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["review"] } } }, then: { allOf: [requiredObject("decision"), { anyOf: [requiredObject("id"), requiredObject("runId")] }] } },
|
|
411
|
-
{ not: { anyOf: [
|
|
412
|
-
requiredObject("agent", "tasks"),
|
|
413
|
-
requiredObject("agent", "chain"),
|
|
414
|
-
requiredObject("tasks", "chain"),
|
|
415
|
-
requiredObject("cursor", "offset"),
|
|
416
|
-
requiredObject("cursor", "before"),
|
|
417
|
-
] } },
|
|
418
|
-
{ if: requiredObject("decision"), then: { ...requiredObject("action"), properties: { action: { enum: ["review"] } } } },
|
|
419
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["history"] } } }, then: { anyOf: [requiredObject("id"), requiredObject("runId")] } },
|
|
420
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } }, then: requiredObject("query") },
|
|
421
|
-
{ if: requiredObject("offset"), then: { ...requiredObject("action"), properties: { action: { enum: ["status", "questions"] } } } },
|
|
422
|
-
{ if: requiredObject("limit"), then: { ...requiredObject("action"), properties: { action: { enum: ["status", "questions", "history", "search"] } } } },
|
|
423
|
-
{ if: requiredObject("cursor"), then: { ...requiredObject("action"), properties: { action: { enum: ["status", "history", "search"] } } } },
|
|
424
|
-
{ if: requiredObject("sort"), then: { ...requiredObject("action"), properties: { action: { enum: ["status", "search"] } } } },
|
|
425
|
-
{ if: { allOf: [{ ...requiredObject("action"), properties: { action: { enum: ["search"] } } }, requiredObject("index")] }, then: { anyOf: [requiredObject("id"), requiredObject("runId")] } },
|
|
426
|
-
{ if: { anyOf: [requiredObject("state"), requiredObject("text")] }, then: { ...requiredObject("action"), properties: { action: { enum: ["status"] } } } },
|
|
427
|
-
{ if: requiredObject("query"), then: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } } },
|
|
428
|
-
{ if: requiredObject("before"), then: { ...requiredObject("action"), properties: { action: { enum: ["history"] } } } },
|
|
429
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["status"] } } }, then: { properties: { sort: { enum: ["attention", "newest", "oldest"] } } } },
|
|
430
|
-
{ if: { ...requiredObject("action"), properties: { action: { enum: ["search"] } } }, then: { properties: { sort: { enum: ["relevance", "newest"] } } } },
|
|
431
|
-
{ if: requiredObject("full"), then: { allOf: [{ ...requiredObject("action"), properties: { action: { enum: ["status"] } } }, { anyOf: [requiredObject("id"), requiredObject("runId"), requiredObject("dir")] }] } },
|
|
432
|
-
{ if: requiredObject("worktree"), then: requiredObject("tasks") },
|
|
433
|
-
{ if: requiredObject("concurrency"), then: requiredObject("tasks") },
|
|
434
|
-
{ if: requiredObject("chainDir"), then: requiredObject("chain") },
|
|
435
|
-
{ if: { anyOf: [
|
|
436
|
-
requiredObject("output"), requiredObject("outputMode"), requiredObject("skill"), requiredObject("model"),
|
|
437
|
-
requiredObject("outputSchema"), requiredObject("progress"),
|
|
438
|
-
] }, then: { anyOf: [requiredObject("agent"), { ...requiredObject("action"), properties: { action: { enum: ["resume", "answer"] } } }] } },
|
|
439
|
-
{ if: requiredObject("acceptance"), then: { anyOf: [
|
|
440
|
-
requiredObject("agent"),
|
|
441
|
-
{ ...requiredObject("action"), properties: { action: { enum: ["resume", "answer"] } } },
|
|
442
|
-
] } },
|
|
443
|
-
],
|
|
444
|
-
});
|
|
466
|
+
// JSON Schema's non-callable consequence keyword is not a Promise method.
|
|
467
|
+
// oxlint-disable-next-line unicorn/no-thenable
|
|
468
|
+
then: {
|
|
469
|
+
anyOf: [
|
|
470
|
+
requiredObject("agent"),
|
|
471
|
+
{ ...requiredObject("action"), properties: { action: { enum: ["resume", "answer"] } } },
|
|
472
|
+
],
|
|
473
|
+
},
|
|
474
|
+
},
|
|
475
|
+
],
|
|
476
|
+
},
|
|
477
|
+
);
|