pi-crew 0.9.50 → 0.9.52
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 +150 -0
- package/README.md +216 -20
- package/dist/build-meta.json +2222 -1761
- package/dist/index.mjs +18636 -17603
- package/docs/actions-reference.md +431 -1
- package/package.json +19 -9
- package/schema.json +41 -0
- package/scripts/check-bundle-size.mjs +38 -0
- package/scripts/test-runner.mjs +11 -1
- package/skills/distill-software/SKILL.md +24 -1
- package/dist/index.mjs.map +0 -7
- package/docs/FEATURE_INTAKE.md +0 -126
- package/docs/HARNESS.md +0 -87
- package/docs/HARNESS_BACKLOG.md +0 -89
- package/docs/PROJECT_REVIEW.md +0 -270
- package/docs/PROJECT_REVIEW_FIXES.md +0 -342
- package/docs/PROJECT_REVIEW_ROUND4.md +0 -156
- package/docs/PROJECT_REVIEW_ROUND5.md +0 -86
- package/docs/REVIEW-FINDINGS-2026-06 +0 -357
- package/docs/REVIEW-FINDINGS-2026-07-CORE.md +0 -139
- package/docs/REVIEW-FINDINGS-2026-07.md +0 -125
- package/docs/TEST_MATRIX.md +0 -51
- package/docs/archive/README.md +0 -91
- package/docs/archive/followup-review-round3-2026-05-12.md +0 -342
- package/docs/archive/followup-review-round4-2026-05-13.md +0 -107
- package/docs/archive/pi-crew-bugs.md +0 -961
- package/docs/archive/pi-crew-test-final.md +0 -120
- package/docs/archive/pi-crew-test-results.md +0 -260
- package/docs/archive/pi-crew-test-round2.md +0 -136
- package/docs/archive/pi-crew-test-round4.md +0 -100
- package/docs/archive/pi-crew-test-round5.md +0 -70
- package/docs/archive/pi-crew-test-round6.md +0 -110
- package/docs/archive/pi-crew-v0.5.10-audit-fix-plan.md +0 -60
- package/docs/archive/pi-crew-v0.5.11-audit-fix-plan.md +0 -92
- package/docs/archive/pi-crew-v0.5.12-audit-fix-plan.md +0 -76
- package/docs/archive/pi-crew-v0.5.13-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.14-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.16-audit-fix-plan.md +0 -35
- package/docs/archive/pi-crew-v0.5.17-audit-fix-plan.md +0 -80
- package/docs/archive/pi-crew-v0.5.5-audit-fix-plan.md +0 -133
- package/docs/archive/pi-crew-v0.5.9-audit-fix-plan.md +0 -88
- package/docs/archive/pi-mono-opportunities.md +0 -969
- package/docs/archive/pi-mono-review.md +0 -291
- package/docs/archive/pi-subagent4-comparison.md +0 -261
- package/docs/archive/pi-subagents3-deep-analysis.md +0 -508
- package/docs/bugs/bug-021-notification-badge-counter-misleading.md +0 -293
- package/docs/bugs/bug-023-chain-windows-path-resolution.md +0 -106
- package/docs/bugs/bug-quota-display-truncation.md +0 -223
- package/docs/bugs/cross-session-notification-leakage.md +0 -82
- package/docs/code-review-2026-05-11.md +0 -592
- package/docs/coding-agent-optimization.md +0 -268
- package/docs/comparison-pi-subagents-vs-pi-crew.md +0 -303
- package/docs/decisions/0001-durable-state.md +0 -41
- package/docs/decisions/0002-child-process-for-async.md +0 -42
- package/docs/decisions/0003-depth-guard.md +0 -36
- package/docs/decisions/0004-execfile-over-exec.md +0 -34
- package/docs/decisions/0005-no-parameter-properties.md +0 -49
- package/docs/decisions/0006-publish-bundled-esm.md +0 -63
- package/docs/decisions/0007-active-run-binary-index.md +0 -54
- package/docs/decisions/0008-child-pi-warm-pool.md +0 -61
- package/docs/decisions/2026-07-21-broker-phase4-default-on.md +0 -77
- package/docs/decisions/2026-07-21-broker-windows-perms.md +0 -91
- package/docs/decisions/2026-07-22-broker-phase4-gated-on.md +0 -99
- package/docs/decisions/2026-07-24-oidc-trusted-publishing.md +0 -112
- package/docs/decisions/README.md +0 -26
- package/docs/deep-review-report.md +0 -384
- package/docs/distillation/cybersecurity-patterns.md +0 -294
- package/docs/feature-analysis-subagent4.md +0 -305
- package/docs/fix-plan-disabletools-exit-null.md +0 -219
- package/docs/fixes/BATCH_A_H1_H2.md +0 -86
- package/docs/fixes/bug-006-foreground-cancel-concurrent.md +0 -78
- package/docs/fixes/bug-007-async-notifier-stale-ctx.md +0 -112
- package/docs/fixes/bug-008-child-process-silent-timeout.md +0 -100
- package/docs/fixes/bug-009-executor-yield-limit-needs-attention.md +0 -75
- package/docs/fixes/bug-010-child-process-api-key-filtered.md +0 -109
- package/docs/fixes/bug-011-spawn-pi-enoent.md +0 -92
- package/docs/fixes/bug-012-essential-env-stripped.md +0 -89
- package/docs/fixes/bug-013-background-runner-death.md +0 -84
- package/docs/fixes/bug-014-infinite-retry-loop-needs-attention.md +0 -82
- package/docs/fixes/bug-015-background-runner-sigterm.md +0 -65
- package/docs/fixes/bug-017-background-runner-session-shutdown.md +0 -66
- package/docs/fixes/bug-017-background-runner-sigkill-double-fork.md +0 -28
- package/docs/fixes/bug-018-child-pi-worker-stdin-hang.md +0 -61
- package/docs/fixes/bug-019-phantom-runs-temp-workspace.md +0 -52
- package/docs/fixes/bug-020-infinite-retry-loop-needs-attention.md +0 -47
- package/docs/fixes/v0.9.10/locks-fix-verify.md +0 -3
- package/docs/fixes/v0.9.10/smoke-test.md +0 -12
- package/docs/followup-plan-2026-05-12.md +0 -463
- package/docs/followup-review-2026-05-12.md +0 -297
- package/docs/goals.md +0 -59
- package/docs/implementation-plan-top3.md +0 -333
- package/docs/issue-29-analysis.md +0 -189
- package/docs/live-mailbox-runtime.md +0 -36
- package/docs/migration/atomic-write-v2-migration.md +0 -299
- package/docs/next-upgrade-roadmap.md +0 -808
- package/docs/oh-my-pi-research.md +0 -509
- package/docs/optimization-plan-2026-07.md +0 -366
- package/docs/optimization-plan.md +0 -644
- package/docs/patterns/command-agent-skill.md +0 -71
- package/docs/perf/baseline-2026-05.md +0 -113
- package/docs/perf/final-report-2026-05.md +0 -206
- package/docs/perf/optimization-plan-2026-07-verified.md +0 -396
- package/docs/perf/performance-audit-report-2026-07.md +0 -948
- package/docs/perf/performance-review-2026-07.md +0 -287
- package/docs/perf/sprint-1-report.md +0 -71
- package/docs/perf/sprint-2-report.md +0 -81
- package/docs/perf/sprint-2.5-report.md +0 -53
- package/docs/perf/sprint-3-report.md +0 -36
- package/docs/perf/sprint-4-report.md +0 -47
- package/docs/perf/sprint-5-report.md +0 -51
- package/docs/perf/sprint-6-report.md +0 -94
- package/docs/perf/sprint-7-report.md +0 -74
- package/docs/perf/upgrade-plan-2026-05.md +0 -147
- package/docs/performance-optimization-execution-plan.md +0 -520
- package/docs/phase4-triage.md +0 -58
- package/docs/pi-crew-investigation-report.md +0 -411
- package/docs/product/README.md +0 -31
- package/docs/product/platform.md +0 -27
- package/docs/product/runtime-safety.md +0 -37
- package/docs/product/team-run.md +0 -39
- package/docs/product/team-tool.md +0 -37
- package/docs/runtime-analysis-child-vs-live.md +0 -171
- package/docs/runtime-migration-in-process-analysis.md +0 -250
- package/docs/skills/REFERENCE.md +0 -138
- package/docs/stories/README.md +0 -32
- package/docs/stories/US-DEPS-major-upgrade.md +0 -62
- package/docs/stories/backlog.md +0 -36
- package/docs/superpowers/plans/2026-06-09-fallow-patterns-adoption.md +0 -1270
- package/docs/templates/decision.md +0 -27
- package/docs/templates/story.md +0 -44
- package/docs/templates/validation-report.md +0 -32
- package/docs/ui-optimization-plan.md +0 -447
- package/src/adapters/claude-adapter.ts +0 -23
- package/src/adapters/codex-adapter.ts +0 -21
- package/src/adapters/cursor-adapter.ts +0 -17
- package/src/adapters/export-util.ts +0 -143
- package/src/adapters/index.ts +0 -15
- package/src/adapters/registry.ts +0 -18
- package/src/adapters/types.ts +0 -23
- package/src/agents/agent-config.ts +0 -194
- package/src/agents/agent-search.ts +0 -98
- package/src/agents/agent-serializer.ts +0 -38
- package/src/agents/discover-agents.ts +0 -623
- package/src/benchmark/benchmark-runner.ts +0 -313
- package/src/benchmark/feedback-loop.ts +0 -73
- package/src/config/config.ts +0 -1269
- package/src/config/defaults.ts +0 -193
- package/src/config/drift-detector.ts +0 -290
- package/src/config/markers.ts +0 -330
- package/src/config/resilient-parser.ts +0 -117
- package/src/config/role-tools.ts +0 -118
- package/src/config/suggestions.ts +0 -75
- package/src/config/types.ts +0 -278
- package/src/errors.ts +0 -194
- package/src/extension/action-suggestions.ts +0 -117
- package/src/extension/async-notifier.ts +0 -179
- package/src/extension/autonomous-policy.ts +0 -209
- package/src/extension/command-completions.ts +0 -120
- package/src/extension/context-status-injection.ts +0 -185
- package/src/extension/crew-autocomplete.ts +0 -131
- package/src/extension/crew-cleanup.ts +0 -168
- package/src/extension/crew-input-router.ts +0 -93
- package/src/extension/crew-shortcuts.ts +0 -87
- package/src/extension/crew-vibes/cat-frames.ts +0 -18
- package/src/extension/crew-vibes/config.ts +0 -195
- package/src/extension/crew-vibes/figures.ts +0 -101
- package/src/extension/crew-vibes/font-detect.ts +0 -71
- package/src/extension/crew-vibes/footer.ts +0 -292
- package/src/extension/crew-vibes/index.ts +0 -432
- package/src/extension/crew-vibes/provider-usage.ts +0 -396
- package/src/extension/crew-vibes/render.ts +0 -206
- package/src/extension/crew-vibes/speed.ts +0 -286
- package/src/extension/cross-extension-rpc.ts +0 -350
- package/src/extension/help.ts +0 -62
- package/src/extension/import-index.ts +0 -74
- package/src/extension/knowledge-injection.ts +0 -402
- package/src/extension/management.ts +0 -571
- package/src/extension/message-renderers.ts +0 -108
- package/src/extension/notification-router.ts +0 -152
- package/src/extension/notification-sink.ts +0 -54
- package/src/extension/pi-api.ts +0 -56
- package/src/extension/plan-orchestrate.ts +0 -302
- package/src/extension/project-init.ts +0 -170
- package/src/extension/register.ts +0 -113
- package/src/extension/registration/artifact-cleanup.ts +0 -20
- package/src/extension/registration/command-registration.ts +0 -58
- package/src/extension/registration/command-utils.ts +0 -58
- package/src/extension/registration/commands.ts +0 -1228
- package/src/extension/registration/compaction-guard.ts +0 -333
- package/src/extension/registration/context-builder.ts +0 -135
- package/src/extension/registration/crash-recovery-cache.ts +0 -54
- package/src/extension/registration/foreground-run-controller.ts +0 -238
- package/src/extension/registration/hook-registration.ts +0 -119
- package/src/extension/registration/lazy-configurers.ts +0 -124
- package/src/extension/registration/lifecycle-handlers.ts +0 -923
- package/src/extension/registration/lifecycle.ts +0 -259
- package/src/extension/registration/observability.ts +0 -322
- package/src/extension/registration/registration-types.ts +0 -158
- package/src/extension/registration/runtime-cleanup.ts +0 -230
- package/src/extension/registration/subagent-helpers.ts +0 -125
- package/src/extension/registration/subagent-manager-setup.ts +0 -330
- package/src/extension/registration/subagent-tools.ts +0 -456
- package/src/extension/registration/team-tool.ts +0 -220
- package/src/extension/registration/tool-registration.ts +0 -50
- package/src/extension/registration/ui.ts +0 -172
- package/src/extension/registration/viewers.ts +0 -121
- package/src/extension/registration/wire-cross-extension.ts +0 -37
- package/src/extension/result-watcher.ts +0 -139
- package/src/extension/rpc-hmac.ts +0 -256
- package/src/extension/run-bundle-schema.ts +0 -104
- package/src/extension/run-export.ts +0 -97
- package/src/extension/run-import.ts +0 -168
- package/src/extension/run-index.ts +0 -131
- package/src/extension/run-maintenance.ts +0 -190
- package/src/extension/session-summary.ts +0 -18
- package/src/extension/team-manager-command.ts +0 -153
- package/src/extension/team-onboard.ts +0 -177
- package/src/extension/team-recommendation.ts +0 -288
- package/src/extension/team-tool/anchor.ts +0 -172
- package/src/extension/team-tool/api.ts +0 -1244
- package/src/extension/team-tool/auto-summarize.ts +0 -142
- package/src/extension/team-tool/cache-control.ts +0 -19
- package/src/extension/team-tool/cancel.ts +0 -337
- package/src/extension/team-tool/chain-dispatch.ts +0 -95
- package/src/extension/team-tool/chain-executor.ts +0 -379
- package/src/extension/team-tool/config-patch.ts +0 -50
- package/src/extension/team-tool/context.ts +0 -149
- package/src/extension/team-tool/destructive-gate.ts +0 -52
- package/src/extension/team-tool/doctor.ts +0 -431
- package/src/extension/team-tool/explain.ts +0 -282
- package/src/extension/team-tool/failure-patterns.ts +0 -118
- package/src/extension/team-tool/goal-wrap.ts +0 -330
- package/src/extension/team-tool/goal.ts +0 -556
- package/src/extension/team-tool/handle-schedule.ts +0 -332
- package/src/extension/team-tool/handle-settings.ts +0 -520
- package/src/extension/team-tool/health-monitor.ts +0 -481
- package/src/extension/team-tool/inspect.ts +0 -88
- package/src/extension/team-tool/intent-policy.ts +0 -45
- package/src/extension/team-tool/lifecycle-actions.ts +0 -615
- package/src/extension/team-tool/orchestrate.ts +0 -98
- package/src/extension/team-tool/parallel-dispatch.ts +0 -183
- package/src/extension/team-tool/plan.ts +0 -50
- package/src/extension/team-tool/respond.ts +0 -150
- package/src/extension/team-tool/run-not-found.ts +0 -49
- package/src/extension/team-tool/run.ts +0 -1035
- package/src/extension/team-tool/status.ts +0 -260
- package/src/extension/team-tool/workflow-manage.ts +0 -261
- package/src/extension/team-tool-types.ts +0 -26
- package/src/extension/team-tool.ts +0 -1116
- package/src/extension/tool-result.ts +0 -16
- package/src/extension/validate-resources.ts +0 -108
- package/src/hooks/registry.ts +0 -200
- package/src/hooks/types.ts +0 -69
- package/src/i18n.ts +0 -212
- package/src/observability/correlation.ts +0 -50
- package/src/observability/event-bus.ts +0 -86
- package/src/observability/event-to-metric.ts +0 -170
- package/src/observability/exporters/adapter.ts +0 -27
- package/src/observability/exporters/otlp-exporter.ts +0 -356
- package/src/observability/exporters/prometheus-exporter.ts +0 -54
- package/src/observability/metric-registry.ts +0 -100
- package/src/observability/metric-retention.ts +0 -64
- package/src/observability/metric-sink.ts +0 -99
- package/src/observability/metrics-primitives.ts +0 -219
- package/src/plugins/plugin-define.ts +0 -6
- package/src/plugins/plugin-registry.ts +0 -32
- package/src/plugins/plugins/index.ts +0 -3
- package/src/plugins/plugins/nextjs.ts +0 -19
- package/src/plugins/plugins/vite.ts +0 -10
- package/src/plugins/plugins/vitest.ts +0 -9
- package/src/prompt/prompt-runtime.ts +0 -380
- package/src/runtime/adaptive-plan.ts +0 -563
- package/src/runtime/agent-control.ts +0 -215
- package/src/runtime/agent-memory.ts +0 -81
- package/src/runtime/agent-observability.ts +0 -122
- package/src/runtime/anchor-manager.ts +0 -475
- package/src/runtime/async-marker.ts +0 -32
- package/src/runtime/async-runner.ts +0 -381
- package/src/runtime/attention-events.ts +0 -28
- package/src/runtime/auto-summarize.ts +0 -344
- package/src/runtime/background-runner.ts +0 -837
- package/src/runtime/batch-barrier.ts +0 -147
- package/src/runtime/broker-issuer.ts +0 -37
- package/src/runtime/cancellation-token.ts +0 -99
- package/src/runtime/cancellation.ts +0 -99
- package/src/runtime/capability-inventory.ts +0 -137
- package/src/runtime/chain-parser.ts +0 -237
- package/src/runtime/chain-runner.ts +0 -606
- package/src/runtime/checkpoint.ts +0 -291
- package/src/runtime/child-pi-constants.ts +0 -42
- package/src/runtime/child-pi-kill.ts +0 -180
- package/src/runtime/child-pi-pool.ts +0 -68
- package/src/runtime/child-pi-spawn.ts +0 -287
- package/src/runtime/child-pi-steering.ts +0 -128
- package/src/runtime/child-pi-streams.ts +0 -296
- package/src/runtime/child-pi-transcript.ts +0 -169
- package/src/runtime/child-pi.ts +0 -1105
- package/src/runtime/coalesce-tasks.ts +0 -268
- package/src/runtime/code-summary.ts +0 -292
- package/src/runtime/command-trace.ts +0 -105
- package/src/runtime/compact-pipeline.ts +0 -56
- package/src/runtime/compact-stages/ansi-strip-stage.ts +0 -25
- package/src/runtime/compact-stages/blank-collapse-stage.ts +0 -31
- package/src/runtime/compact-stages/deduplicate-stage.ts +0 -34
- package/src/runtime/compact-stages/head-snap-stage.ts +0 -57
- package/src/runtime/compact-stages/index.ts +0 -23
- package/src/runtime/compact-stages/tail-capture-stage.ts +0 -77
- package/src/runtime/compact-stages/truncation-stage.ts +0 -74
- package/src/runtime/compaction-summary.ts +0 -278
- package/src/runtime/completion-guard.ts +0 -207
- package/src/runtime/concurrency.ts +0 -58
- package/src/runtime/crash-classification.ts +0 -229
- package/src/runtime/crash-recovery.ts +0 -577
- package/src/runtime/crew-agent-records.ts +0 -593
- package/src/runtime/crew-agent-runtime.ts +0 -62
- package/src/runtime/crew-broker-child.ts +0 -88
- package/src/runtime/crew-broker-client.ts +0 -673
- package/src/runtime/crew-broker-tokens.ts +0 -84
- package/src/runtime/crew-broker.ts +0 -1276
- package/src/runtime/crew-hooks.ts +0 -227
- package/src/runtime/cross-extension-rpc.ts +0 -143
- package/src/runtime/custom-tools/irc-tool.ts +0 -282
- package/src/runtime/custom-tools/submit-result-tool.ts +0 -102
- package/src/runtime/deadletter.ts +0 -47
- package/src/runtime/delivery-coordinator.ts +0 -211
- package/src/runtime/delta-conflict.ts +0 -348
- package/src/runtime/deterministic-ast.ts +0 -161
- package/src/runtime/diagnostic-export.ts +0 -171
- package/src/runtime/direct-run.ts +0 -45
- package/src/runtime/dwf-state-store.ts +0 -102
- package/src/runtime/dynamic-workflow-context.ts +0 -1016
- package/src/runtime/dynamic-workflow-runner.ts +0 -310
- package/src/runtime/effectiveness.ts +0 -90
- package/src/runtime/errors/crew-errors.ts +0 -162
- package/src/runtime/event-stream-bridge.ts +0 -98
- package/src/runtime/foreground-control.ts +0 -193
- package/src/runtime/foreground-watchdog.ts +0 -132
- package/src/runtime/global-worker-cap.ts +0 -96
- package/src/runtime/goal-achievement.ts +0 -148
- package/src/runtime/goal-evaluator.ts +0 -361
- package/src/runtime/goal-loop-runner.ts +0 -828
- package/src/runtime/goal-state-store.ts +0 -219
- package/src/runtime/green-contract.ts +0 -55
- package/src/runtime/group-join.ts +0 -267
- package/src/runtime/handoff-manager.ts +0 -598
- package/src/runtime/heartbeat-gradient.ts +0 -36
- package/src/runtime/heartbeat-watcher.ts +0 -239
- package/src/runtime/hidden-handoff.ts +0 -407
- package/src/runtime/important-line-classifier.ts +0 -140
- package/src/runtime/intercom-bridge.ts +0 -187
- package/src/runtime/iteration-hooks.ts +0 -305
- package/src/runtime/live-agent-control.ts +0 -136
- package/src/runtime/live-agent-manager.ts +0 -704
- package/src/runtime/live-control-realtime.ts +0 -56
- package/src/runtime/live-extension-bridge.ts +0 -148
- package/src/runtime/live-irc.ts +0 -97
- package/src/runtime/live-session-health.ts +0 -108
- package/src/runtime/live-session-runtime.ts +0 -1139
- package/src/runtime/loop-gates.ts +0 -128
- package/src/runtime/manifest-cache.ts +0 -375
- package/src/runtime/mcp-proxy.ts +0 -105
- package/src/runtime/metric-parser.ts +0 -36
- package/src/runtime/model-fallback.ts +0 -409
- package/src/runtime/model-resolver.ts +0 -126
- package/src/runtime/model-scope.ts +0 -158
- package/src/runtime/orphan-worker-registry.ts +0 -465
- package/src/runtime/output-validator.ts +0 -202
- package/src/runtime/overflow-recovery.ts +0 -206
- package/src/runtime/parallel-research.ts +0 -68
- package/src/runtime/parallel-utils.ts +0 -160
- package/src/runtime/parent-guard.ts +0 -134
- package/src/runtime/path-overlap.ts +0 -150
- package/src/runtime/peer-dep.ts +0 -292
- package/src/runtime/per-write-validator.ts +0 -181
- package/src/runtime/phase-progress.ts +0 -217
- package/src/runtime/phase-tracker.ts +0 -385
- package/src/runtime/pi-args.ts +0 -655
- package/src/runtime/pi-json-output.ts +0 -170
- package/src/runtime/pi-spawn.ts +0 -273
- package/src/runtime/pipeline-runner.ts +0 -523
- package/src/runtime/plan-templates.ts +0 -201
- package/src/runtime/policy-engine.ts +0 -115
- package/src/runtime/post-checks.ts +0 -142
- package/src/runtime/post-exit-stdio-guard.ts +0 -104
- package/src/runtime/process-lifecycle.ts +0 -491
- package/src/runtime/process-status.ts +0 -154
- package/src/runtime/progress-event-coalescer.ts +0 -44
- package/src/runtime/progress-tracker.ts +0 -124
- package/src/runtime/prose-compressor.ts +0 -162
- package/src/runtime/recovery-recipes.ts +0 -203
- package/src/runtime/replace.ts +0 -570
- package/src/runtime/resilient-edit.ts +0 -153
- package/src/runtime/result-extractor.ts +0 -213
- package/src/runtime/retry-executor.ts +0 -100
- package/src/runtime/retry-runner.ts +0 -336
- package/src/runtime/role-permission.ts +0 -59
- package/src/runtime/run-coalesced-task-group.ts +0 -308
- package/src/runtime/run-drift.ts +0 -219
- package/src/runtime/run-tracker.ts +0 -116
- package/src/runtime/runtime-policy.ts +0 -29
- package/src/runtime/runtime-resolver.ts +0 -172
- package/src/runtime/runtime-warmup.ts +0 -160
- package/src/runtime/scheduler.ts +0 -353
- package/src/runtime/semaphore.ts +0 -141
- package/src/runtime/sensitive-paths.ts +0 -93
- package/src/runtime/session-resources.ts +0 -25
- package/src/runtime/session-snapshot.ts +0 -59
- package/src/runtime/session-usage.ts +0 -79
- package/src/runtime/settings-store.ts +0 -155
- package/src/runtime/sidechain-output.ts +0 -35
- package/src/runtime/single-agent-compose.ts +0 -84
- package/src/runtime/skill-effectiveness.ts +0 -524
- package/src/runtime/skill-instructions.ts +0 -391
- package/src/runtime/stale-reconciler.ts +0 -680
- package/src/runtime/stream-preview.ts +0 -184
- package/src/runtime/streaming-output.ts +0 -50
- package/src/runtime/subagent-manager.ts +0 -561
- package/src/runtime/subprocess-tool-registry.ts +0 -70
- package/src/runtime/supervisor-contact.ts +0 -64
- package/src/runtime/task-display.ts +0 -52
- package/src/runtime/task-graph-scheduler.ts +0 -227
- package/src/runtime/task-graph.ts +0 -290
- package/src/runtime/task-health.ts +0 -83
- package/src/runtime/task-id.ts +0 -161
- package/src/runtime/task-output-context.ts +0 -602
- package/src/runtime/task-packet.ts +0 -268
- package/src/runtime/task-quality.ts +0 -199
- package/src/runtime/task-runner/capabilities.ts +0 -78
- package/src/runtime/task-runner/context-retrieval.ts +0 -163
- package/src/runtime/task-runner/live-executor.ts +0 -227
- package/src/runtime/task-runner/output-splitter.ts +0 -152
- package/src/runtime/task-runner/progress.ts +0 -157
- package/src/runtime/task-runner/prompt-builder.ts +0 -278
- package/src/runtime/task-runner/prompt-pipeline.ts +0 -88
- package/src/runtime/task-runner/result-utils.ts +0 -16
- package/src/runtime/task-runner/retrieval-orchestrator.ts +0 -310
- package/src/runtime/task-runner/run-projection.ts +0 -125
- package/src/runtime/task-runner/state-helpers.ts +0 -176
- package/src/runtime/task-runner/tail-read.ts +0 -34
- package/src/runtime/task-runner.ts +0 -1420
- package/src/runtime/team-runner-artifacts.ts +0 -13
- package/src/runtime/team-runner.ts +0 -1993
- package/src/runtime/tool-output-pruner.ts +0 -333
- package/src/runtime/tool-progress.ts +0 -278
- package/src/runtime/usage-tracker.ts +0 -73
- package/src/runtime/verification-gates.ts +0 -571
- package/src/runtime/verification-integrity.ts +0 -105
- package/src/runtime/verification-worktree.ts +0 -186
- package/src/runtime/worker-heartbeat.ts +0 -25
- package/src/runtime/worker-startup.ts +0 -83
- package/src/runtime/workflow-state.ts +0 -195
- package/src/runtime/workspace-lock.ts +0 -443
- package/src/runtime/workspace-tree.ts +0 -312
- package/src/runtime/yield-handler.ts +0 -224
- package/src/runtime/zombie-scanner.ts +0 -298
- package/src/schema/config-schema.ts +0 -327
- package/src/schema/team-tool-schema.ts +0 -415
- package/src/schema/validation-types.ts +0 -159
- package/src/skills/discover-skills.ts +0 -197
- package/src/skills/skill-templates.ts +0 -456
- package/src/skills/validate.ts +0 -285
- package/src/state/active-run-registry.ts +0 -439
- package/src/state/artifact-store.ts +0 -176
- package/src/state/atomic-write.ts +0 -903
- package/src/state/blob-store.ts +0 -308
- package/src/state/contracts.ts +0 -158
- package/src/state/crew-init.ts +0 -269
- package/src/state/decision-ledger.ts +0 -345
- package/src/state/event-log-rotation.ts +0 -342
- package/src/state/event-log.ts +0 -1311
- package/src/state/event-reconstructor.ts +0 -229
- package/src/state/gitignore-manager.ts +0 -46
- package/src/state/health-store.ts +0 -79
- package/src/state/hook-instinct-bridge.ts +0 -94
- package/src/state/hook-integrations.ts +0 -51
- package/src/state/instinct-store.ts +0 -275
- package/src/state/jsonl-writer.ts +0 -107
- package/src/state/locks.ts +0 -562
- package/src/state/mailbox.ts +0 -916
- package/src/state/observation-store.ts +0 -176
- package/src/state/run-cache.ts +0 -193
- package/src/state/run-graph.ts +0 -183
- package/src/state/run-metrics.ts +0 -165
- package/src/state/schedule.ts +0 -166
- package/src/state/session-state-map.ts +0 -51
- package/src/state/state-store.ts +0 -958
- package/src/state/task-claims.ts +0 -61
- package/src/state/tiered-eval.ts +0 -480
- package/src/state/types-eval.ts +0 -58
- package/src/state/types.ts +0 -440
- package/src/state/usage.ts +0 -138
- package/src/state/worker-atomic-writer.ts +0 -194
- package/src/subagents/async-entry.ts +0 -1
- package/src/subagents/index.ts +0 -3
- package/src/subagents/live/control.ts +0 -1
- package/src/subagents/live/manager.ts +0 -1
- package/src/subagents/live/realtime.ts +0 -1
- package/src/subagents/live/session-runtime.ts +0 -1
- package/src/subagents/manager.ts +0 -1
- package/src/subagents/spawn.ts +0 -1
- package/src/teams/discover-teams.ts +0 -187
- package/src/teams/team-config.ts +0 -27
- package/src/teams/team-serializer.ts +0 -38
- package/src/tools/safe-bash-extension.ts +0 -54
- package/src/tools/safe-bash.ts +0 -505
- package/src/types/diff.d.ts +0 -18
- package/src/types/new-api-types.ts +0 -35
- package/src/ui/agent-management-overlay.ts +0 -160
- package/src/ui/card-colors.ts +0 -139
- package/src/ui/crew-footer.ts +0 -102
- package/src/ui/crew-select-list.ts +0 -111
- package/src/ui/dashboard-panes/agents-pane.ts +0 -164
- package/src/ui/dashboard-panes/cancellation-pane.ts +0 -66
- package/src/ui/dashboard-panes/capability-pane.ts +0 -77
- package/src/ui/dashboard-panes/health-pane.ts +0 -31
- package/src/ui/dashboard-panes/mailbox-pane.ts +0 -35
- package/src/ui/dashboard-panes/metrics-pane.ts +0 -37
- package/src/ui/dashboard-panes/progress-pane.ts +0 -38
- package/src/ui/dashboard-panes/transcript-pane.ts +0 -10
- package/src/ui/deploy-bundled-themes.ts +0 -71
- package/src/ui/dwf-phase-display.ts +0 -151
- package/src/ui/dynamic-border.ts +0 -35
- package/src/ui/heartbeat-aggregator.ts +0 -74
- package/src/ui/key-utils.ts +0 -42
- package/src/ui/keybinding-map.ts +0 -248
- package/src/ui/layout-primitives.ts +0 -106
- package/src/ui/live-conversation-overlay.ts +0 -183
- package/src/ui/live-duration.ts +0 -55
- package/src/ui/live-run-sidebar.ts +0 -301
- package/src/ui/loaders.ts +0 -176
- package/src/ui/mascot.ts +0 -436
- package/src/ui/overlays/agent-picker-overlay.ts +0 -65
- package/src/ui/overlays/confirm-overlay.ts +0 -60
- package/src/ui/overlays/help-overlay.ts +0 -177
- package/src/ui/overlays/mailbox-compose-overlay.ts +0 -181
- package/src/ui/overlays/mailbox-compose-preview.ts +0 -78
- package/src/ui/overlays/mailbox-detail-overlay.ts +0 -154
- package/src/ui/pi-ui-compat.ts +0 -68
- package/src/ui/powerbar-publisher.ts +0 -459
- package/src/ui/render-coalescer.ts +0 -101
- package/src/ui/render-diff.ts +0 -160
- package/src/ui/render-scheduler.ts +0 -224
- package/src/ui/run-action-dispatcher.ts +0 -182
- package/src/ui/run-dashboard.ts +0 -913
- package/src/ui/run-event-bus.ts +0 -381
- package/src/ui/run-snapshot-cache.ts +0 -1057
- package/src/ui/settings-overlay.ts +0 -1067
- package/src/ui/snapshot-types.ts +0 -90
- package/src/ui/spinner.ts +0 -17
- package/src/ui/status-colors.ts +0 -143
- package/src/ui/syntax-highlight.ts +0 -136
- package/src/ui/terminal-status.ts +0 -269
- package/src/ui/theme-adapter.ts +0 -271
- package/src/ui/theme-discovery.ts +0 -199
- package/src/ui/tool-progress-formatter.ts +0 -93
- package/src/ui/tool-render.ts +0 -453
- package/src/ui/tool-renderers/brief-mode.ts +0 -225
- package/src/ui/tool-renderers/index.ts +0 -726
- package/src/ui/transcript-cache.ts +0 -128
- package/src/ui/transcript-entries.ts +0 -256
- package/src/ui/transcript-viewer.ts +0 -424
- package/src/ui/widget/index.ts +0 -357
- package/src/ui/widget/widget-formatters.ts +0 -182
- package/src/ui/widget/widget-model.ts +0 -110
- package/src/ui/widget/widget-renderer.ts +0 -182
- package/src/ui/widget/widget-types.ts +0 -36
- package/src/utils/bm25-search.ts +0 -235
- package/src/utils/completion-dedupe.ts +0 -63
- package/src/utils/conflict-detect.ts +0 -668
- package/src/utils/env-allowlist.ts +0 -30
- package/src/utils/env-filter.ts +0 -155
- package/src/utils/file-coalescer.ts +0 -98
- package/src/utils/fingerprint.ts +0 -180
- package/src/utils/frontmatter.ts +0 -70
- package/src/utils/fs-watch.ts +0 -37
- package/src/utils/gh-protocol.ts +0 -556
- package/src/utils/git.ts +0 -260
- package/src/utils/guards.ts +0 -107
- package/src/utils/ids.ts +0 -24
- package/src/utils/incremental-reader.ts +0 -220
- package/src/utils/internal-error.ts +0 -10
- package/src/utils/names.ts +0 -36
- package/src/utils/ndjson.ts +0 -115
- package/src/utils/paths.ts +0 -227
- package/src/utils/project-detector.ts +0 -160
- package/src/utils/redaction.ts +0 -347
- package/src/utils/resolve-shell.ts +0 -36
- package/src/utils/run-watcher-registry.ts +0 -152
- package/src/utils/safe-paths.ts +0 -383
- package/src/utils/scan-cache.ts +0 -144
- package/src/utils/session-utils.ts +0 -110
- package/src/utils/sleep.ts +0 -54
- package/src/utils/socket-path.ts +0 -127
- package/src/utils/sse-parser.ts +0 -129
- package/src/utils/task-name-generator.ts +0 -337
- package/src/utils/timings.ts +0 -33
- package/src/utils/token-counter.ts +0 -200
- package/src/utils/visual.ts +0 -207
- package/src/workflows/cost-estimator.ts +0 -34
- package/src/workflows/discover-workflows.ts +0 -290
- package/src/workflows/intermediate-store.ts +0 -166
- package/src/workflows/preflight-validator.ts +0 -168
- package/src/workflows/topology-analyzer.ts +0 -203
- package/src/workflows/validate-workflow.ts +0 -50
- package/src/workflows/workflow-config.ts +0 -70
- package/src/workflows/workflow-serializer.ts +0 -32
- package/src/worktree/branch-freshness.ts +0 -112
- package/src/worktree/cleanup.ts +0 -341
- package/src/worktree/worktree-manager.ts +0 -1200
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* zombie-scanner.ts — safely detect orphaned pi-crew sub-agent processes.
|
|
3
|
-
*
|
|
4
|
-
* LESSON (learned the hard way): a heuristic like "old `pi` process + high RSS +
|
|
5
|
-
* orphaned (ppid=1/bash)" will match a user's interactive MAIN session just as
|
|
6
|
-
* readily as a real zombie. The result is a live main session being killed by
|
|
7
|
-
* accident. This module replaces that heuristic with an authoritative signal.
|
|
8
|
-
*
|
|
9
|
-
* Authoritative marker (set by buildPiWorkerArgs on every child-pi spawn):
|
|
10
|
-
* - argv: `--crew-subagent` is the first positional arg
|
|
11
|
-
* - env: `PI_CREW_KIND=subagent` is the machine-readable signal
|
|
12
|
-
*
|
|
13
|
-
* A process is a "pi-crew sub-agent" ONLY IF it carries `PI_CREW_KIND=subagent`
|
|
14
|
-
* in its environment. The user's main `pi` session NEVER has this var, so it can
|
|
15
|
-
* never be matched here — by construction.
|
|
16
|
-
*
|
|
17
|
-
* A sub-agent is a "zombie" ONLY IF its `PI_CREW_PARENT_PID` points at a PID that
|
|
18
|
-
* is no longer alive (parent crashed/exited without reaping the child). A sub-agent
|
|
19
|
-
* whose parent is still running is NOT a zombie — it's a legitimate in-flight task.
|
|
20
|
-
*
|
|
21
|
-
* This module is READ-ONLY. It never kills anything. The caller (doctor --zombies)
|
|
22
|
-
* prints the list and asks for explicit confirmation before any kill.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
import * as fs from "node:fs";
|
|
26
|
-
|
|
27
|
-
export interface ZombieSubagent {
|
|
28
|
-
pid: number;
|
|
29
|
-
ppid: number;
|
|
30
|
-
/** PID recorded in PI_CREW_PARENT_PID (may differ from ppid if re-parented to init/bash). */
|
|
31
|
-
crewParentPid: number;
|
|
32
|
-
/** Whether the recorded crew parent PID is still alive. */
|
|
33
|
-
parentAlive: boolean;
|
|
34
|
-
role: string | undefined;
|
|
35
|
-
rssKb: number;
|
|
36
|
-
elapsedSec: number | undefined;
|
|
37
|
-
cmd: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface ZombieScanResult {
|
|
41
|
-
zombies: ZombieSubagent[];
|
|
42
|
-
/** Sub-agents whose parent is still alive — shown for transparency, never killed. */
|
|
43
|
-
live: ZombieSubagent[];
|
|
44
|
-
/** Errors encountered while scanning (per-pid). Never aborts the whole scan. */
|
|
45
|
-
errors: string[];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Read /proc/<pid>/environ as a key=value record. Returns {} if unreadable. */
|
|
49
|
-
function readProcEnviron(pid: number): Record<string, string> {
|
|
50
|
-
try {
|
|
51
|
-
// /proc/<pid>/environ is NUL-separated key=value pairs.
|
|
52
|
-
const raw = fs.readFileSync(`/proc/${pid}/environ`, "utf-8");
|
|
53
|
-
const out: Record<string, string> = {};
|
|
54
|
-
for (const entry of raw.split("\0")) {
|
|
55
|
-
const eq = entry.indexOf("=");
|
|
56
|
-
if (eq > 0) out[entry.slice(0, eq)] = entry.slice(eq + 1);
|
|
57
|
-
}
|
|
58
|
-
return out;
|
|
59
|
-
} catch {
|
|
60
|
-
return {};
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Read /proc/<pid>/stat to get ppid + elapsed. Returns undefined if unreadable. */
|
|
65
|
-
function readProcStat(pid: number): { ppid: number; elapsedSec: number | undefined } | undefined {
|
|
66
|
-
try {
|
|
67
|
-
const stat = fs.readFileSync(`/proc/${pid}/stat`, "utf-8");
|
|
68
|
-
// stat format: pid (comm) state ppid ... starttime ...
|
|
69
|
-
// comm may contain spaces/parens, so parse from the LAST ')' backwards.
|
|
70
|
-
const closeParen = stat.lastIndexOf(")");
|
|
71
|
-
if (closeParen < 0) return undefined;
|
|
72
|
-
const rest = stat
|
|
73
|
-
.slice(closeParen + 2)
|
|
74
|
-
.trim()
|
|
75
|
-
.split(/\s+/);
|
|
76
|
-
// rest[0] = state, rest[1] = ppid
|
|
77
|
-
const ppid = Number.parseInt(rest[1] ?? "", 10);
|
|
78
|
-
// starttime (clock ticks since boot) is field 22 in the full stat → index 19 in `rest`
|
|
79
|
-
const starttimeTicksRaw = Number.parseInt(rest[19] ?? "", 10);
|
|
80
|
-
const starttimeTicks = Number.isFinite(starttimeTicksRaw) ? starttimeTicksRaw : undefined;
|
|
81
|
-
const elapsedSec = computeElapsedSec(starttimeTicks);
|
|
82
|
-
return { ppid: Number.isFinite(ppid) ? ppid : 0, elapsedSec };
|
|
83
|
-
} catch {
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function computeElapsedSec(starttimeTicks: number | undefined): number | undefined {
|
|
89
|
-
if (starttimeTicks === undefined || !Number.isFinite(starttimeTicks)) return undefined;
|
|
90
|
-
try {
|
|
91
|
-
// Linux CLK_TCK is virtually always 100 (sysconf(_SC_CLK_TCK)). Reading it
|
|
92
|
-
// portably from Node requires a native addon; hardcoding 100 matches every
|
|
93
|
-
// mainstream Linux distro and keeps this dependency-free.
|
|
94
|
-
const ticksPerSec = 100;
|
|
95
|
-
// /proc/uptime: first field is seconds since boot.
|
|
96
|
-
const uptimeRaw = fs.readFileSync("/proc/uptime", "utf-8");
|
|
97
|
-
const uptimeSec = Number.parseFloat(uptimeRaw.split(" ")[0] ?? "");
|
|
98
|
-
if (!Number.isFinite(uptimeSec)) return undefined;
|
|
99
|
-
// starttime (ticks since boot) → process age in seconds = uptime - starttime/ticksPerSec.
|
|
100
|
-
const startAgeSec = starttimeTicks / ticksPerSec;
|
|
101
|
-
return Math.max(0, uptimeSec - startAgeSec);
|
|
102
|
-
} catch {
|
|
103
|
-
return undefined;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function isPidAlive(pid: number): boolean {
|
|
108
|
-
if (!Number.isFinite(pid) || pid <= 0) return false;
|
|
109
|
-
try {
|
|
110
|
-
// process.kill(pid, 0) throws if the pid is not alive (or not ours).
|
|
111
|
-
process.kill(pid, 0);
|
|
112
|
-
return true;
|
|
113
|
-
} catch {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function readProcCmdline(pid: number): string {
|
|
119
|
-
try {
|
|
120
|
-
// /proc/<pid>/cmdline is NUL-separated argv.
|
|
121
|
-
const raw = fs.readFileSync(`/proc/${pid}/cmdline`, "utf-8");
|
|
122
|
-
return raw.split("\0").filter(Boolean).join(" ").trim() || `pid ${pid}`;
|
|
123
|
-
} catch {
|
|
124
|
-
return `pid ${pid}`;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function readProcRssKb(pid: number): number {
|
|
129
|
-
try {
|
|
130
|
-
const status = fs.readFileSync(`/proc/${pid}/status`, "utf-8");
|
|
131
|
-
const match = status.match(/^VmRSS:\s+(\d+)\s+kB/m);
|
|
132
|
-
return match ? Number.parseInt(match[1] ?? "", 10) : 0;
|
|
133
|
-
} catch {
|
|
134
|
-
return 0;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Enumerate candidate pi-crew sub-agent PIDs under the current uid.
|
|
140
|
-
*
|
|
141
|
-
* Reads /proc directly (Linux only) — no shelling out to pgrep/ps, so the
|
|
142
|
-
* result is deterministic and unaffected by shell quoting or locale. On
|
|
143
|
-
* non-Linux platforms the scanner returns an empty result with a note in
|
|
144
|
-
* `errors` (zombie detection is best-effort; the doctor report still renders).
|
|
145
|
-
*/
|
|
146
|
-
function listCandidatePids(): number[] {
|
|
147
|
-
if (process.platform !== "linux") return [];
|
|
148
|
-
const pids: number[] = [];
|
|
149
|
-
try {
|
|
150
|
-
for (const entry of fs.readdirSync("/proc")) {
|
|
151
|
-
if (/^\d+$/.test(entry)) pids.push(Number.parseInt(entry, 10));
|
|
152
|
-
}
|
|
153
|
-
} catch {
|
|
154
|
-
// /proc unreadable (e.g. sandboxed). Caller surfaces via errors[].
|
|
155
|
-
}
|
|
156
|
-
return pids;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Scan for orphaned pi-crew sub-agent processes. READ-ONLY — never kills.
|
|
161
|
-
*
|
|
162
|
-
* Returns the full picture: zombies (parent dead), live (parent alive), and
|
|
163
|
-
* any scan errors. Callers decide what to do with the result; this module
|
|
164
|
-
* has no side effects.
|
|
165
|
-
*/
|
|
166
|
-
export function scanZombieSubagents(): ZombieScanResult {
|
|
167
|
-
const result: ZombieScanResult = { zombies: [], live: [], errors: [] };
|
|
168
|
-
if (process.platform !== "linux") {
|
|
169
|
-
result.errors.push("zombie scan is Linux-only (/proc required); skipping on " + process.platform);
|
|
170
|
-
return result;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const myUid = tryGetUid();
|
|
174
|
-
for (const pid of listCandidatePids()) {
|
|
175
|
-
try {
|
|
176
|
-
// Cheap rejection first: only inspect processes we own (avoid scanning system procs).
|
|
177
|
-
if (myUid !== undefined && getProcUid(pid) !== myUid) continue;
|
|
178
|
-
|
|
179
|
-
const environ = readProcEnviron(pid);
|
|
180
|
-
// AUTHORITATIVE GATE: a process is a pi-crew sub-agent ONLY if it carries
|
|
181
|
-
// PI_CREW_KIND=subagent. The user's main session never sets this, so it can
|
|
182
|
-
// never be matched — this is the fix for accidentally killing main sessions.
|
|
183
|
-
if (environ.PI_CREW_KIND !== "subagent") continue;
|
|
184
|
-
|
|
185
|
-
const crewParentPid = Number.parseInt(environ.PI_CREW_PARENT_PID ?? "", 10);
|
|
186
|
-
const stat = readProcStat(pid);
|
|
187
|
-
const entry: ZombieSubagent = {
|
|
188
|
-
pid,
|
|
189
|
-
ppid: stat?.ppid ?? 0,
|
|
190
|
-
crewParentPid: Number.isFinite(crewParentPid) ? crewParentPid : 0,
|
|
191
|
-
parentAlive: Number.isFinite(crewParentPid) && isPidAlive(crewParentPid),
|
|
192
|
-
role: environ.PI_CREW_ROLE,
|
|
193
|
-
rssKb: readProcRssKb(pid),
|
|
194
|
-
elapsedSec: stat?.elapsedSec,
|
|
195
|
-
cmd: readProcCmdline(pid),
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
if (entry.parentAlive) {
|
|
199
|
-
result.live.push(entry);
|
|
200
|
-
} else {
|
|
201
|
-
result.zombies.push(entry);
|
|
202
|
-
}
|
|
203
|
-
} catch (error) {
|
|
204
|
-
// Race: process may have exited between readdir and read. Don't abort the scan.
|
|
205
|
-
result.errors.push(`pid ${pid}: ${error instanceof Error ? error.message : String(error)}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Sort: zombies first by descending RSS (biggest leaks first), live by pid.
|
|
210
|
-
result.zombies.sort((a, b) => b.rssKb - a.rssKb);
|
|
211
|
-
result.live.sort((a, b) => a.pid - b.pid);
|
|
212
|
-
return result;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
function tryGetUid(): number | undefined {
|
|
216
|
-
try {
|
|
217
|
-
return process.getuid?.();
|
|
218
|
-
} catch {
|
|
219
|
-
return undefined;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function getProcUid(pid: number): number | undefined {
|
|
224
|
-
try {
|
|
225
|
-
// /proc/<pid>/status has Uid: <real> <eff> <sav> <fs>
|
|
226
|
-
const status = fs.readFileSync(`/proc/${pid}/status`, "utf-8");
|
|
227
|
-
const match = status.match(/^Uid:\s+(\d+)/m);
|
|
228
|
-
return match ? Number.parseInt(match[1] ?? "", 10) : undefined;
|
|
229
|
-
} catch {
|
|
230
|
-
return undefined;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Render a ZombieScanResult as human-readable text for the doctor report.
|
|
236
|
-
* Explicitly labels main-session safety and never suggests killing live parents.
|
|
237
|
-
*/
|
|
238
|
-
export function formatZombieReport(scan: ZombieScanResult): string {
|
|
239
|
-
const lines: string[] = [];
|
|
240
|
-
lines.push("## Zombie sub-agent scan (read-only — nothing killed)");
|
|
241
|
-
lines.push("");
|
|
242
|
-
lines.push(`Sub-agents identified by PI_CREW_KIND=subagent marker. Main sessions (no marker) are never listed.`);
|
|
243
|
-
lines.push("");
|
|
244
|
-
|
|
245
|
-
if (scan.zombies.length === 0 && scan.live.length === 0) {
|
|
246
|
-
lines.push("No pi-crew sub-agent processes found.");
|
|
247
|
-
if (scan.errors.length > 0) {
|
|
248
|
-
lines.push("");
|
|
249
|
-
lines.push(`Scan notes (${scan.errors.length}):`);
|
|
250
|
-
for (const err of scan.errors.slice(0, 5)) lines.push(` - ${err}`);
|
|
251
|
-
}
|
|
252
|
-
return lines.join("\n");
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (scan.zombies.length > 0) {
|
|
256
|
-
lines.push(`### Zombies — parent dead (${scan.zombies.length})`);
|
|
257
|
-
lines.push("These sub-agents are orphaned. Safe to kill after review:");
|
|
258
|
-
lines.push("");
|
|
259
|
-
lines.push(" PID PARENT RSS ROLE CMD");
|
|
260
|
-
for (const z of scan.zombies) {
|
|
261
|
-
lines.push(
|
|
262
|
-
` ${String(z.pid).padEnd(9)}${String(z.crewParentPid).padEnd(8)}${formatRss(z.rssKb).padEnd(10)}${(z.role ?? "?").padEnd(14)}${z.cmd.slice(0, 60)}`,
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
lines.push("");
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (scan.live.length > 0) {
|
|
269
|
-
lines.push(`### Live — parent still running (${scan.live.length})`);
|
|
270
|
-
lines.push("NOT zombies. Do not kill (parent PID is alive and may still reap them).");
|
|
271
|
-
lines.push("");
|
|
272
|
-
lines.push(" PID PARENT RSS ROLE CMD");
|
|
273
|
-
for (const l of scan.live) {
|
|
274
|
-
lines.push(
|
|
275
|
-
` ${String(l.pid).padEnd(9)}${String(l.crewParentPid).padEnd(8)}${formatRss(l.rssKb).padEnd(10)}${(l.role ?? "?").padEnd(14)}${l.cmd.slice(0, 60)}`,
|
|
276
|
-
);
|
|
277
|
-
}
|
|
278
|
-
lines.push("");
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (scan.errors.length > 0) {
|
|
282
|
-
lines.push(`Scan errors (${scan.errors.length}, first 5 shown):`);
|
|
283
|
-
for (const err of scan.errors.slice(0, 5)) lines.push(` - ${err}`);
|
|
284
|
-
lines.push("");
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
lines.push("To kill a zombie: `kill <PID>` (the OS will reap it). This tool never kills.");
|
|
288
|
-
return lines.join("\n");
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
function formatRss(kb: number): string {
|
|
292
|
-
if (kb >= 1024 * 1024) return `${(kb / 1024 / 1024).toFixed(1)}G`;
|
|
293
|
-
if (kb >= 1024) return `${(kb / 1024).toFixed(0)}M`;
|
|
294
|
-
return `${kb}K`;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// Re-export for tests + callers that want to inspect proc helpers in isolation.
|
|
298
|
-
export const __test = { readProcEnviron, isPidAlive, computeElapsedSec };
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
type ValidationFinding,
|
|
5
|
-
type ValidationMode,
|
|
6
|
-
type ValidationOutcome,
|
|
7
|
-
type ValidationSeverity,
|
|
8
|
-
validateWithSeverity,
|
|
9
|
-
} from "./validation-types.ts";
|
|
10
|
-
|
|
11
|
-
export const PiTeamsAutonomyProfileSchema = Type.Union([
|
|
12
|
-
Type.Literal("manual"),
|
|
13
|
-
Type.Literal("suggested"),
|
|
14
|
-
Type.Literal("assisted"),
|
|
15
|
-
Type.Literal("aggressive"),
|
|
16
|
-
]);
|
|
17
|
-
|
|
18
|
-
export const PiTeamsAutonomousConfigSchema = Type.Object(
|
|
19
|
-
{
|
|
20
|
-
profile: Type.Optional(PiTeamsAutonomyProfileSchema),
|
|
21
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
22
|
-
injectPolicy: Type.Optional(Type.Boolean()),
|
|
23
|
-
preferAsyncForLongTasks: Type.Optional(Type.Boolean()),
|
|
24
|
-
allowWorktreeSuggestion: Type.Optional(Type.Boolean()),
|
|
25
|
-
magicKeywords: Type.Optional(Type.Record(Type.String({ minLength: 1 }), Type.Array(Type.String({ minLength: 1 })))),
|
|
26
|
-
},
|
|
27
|
-
{ additionalProperties: false },
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
export const PiTeamsLimitsConfigSchema = Type.Object(
|
|
31
|
-
{
|
|
32
|
-
maxConcurrentWorkers: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
33
|
-
allowUnboundedConcurrency: Type.Optional(Type.Boolean()),
|
|
34
|
-
maxTaskDepth: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
35
|
-
maxChildrenPerTask: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
36
|
-
maxRunMinutes: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
37
|
-
maxRetriesPerTask: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
38
|
-
maxTasksPerRun: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
39
|
-
heartbeatStaleMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
40
|
-
serializeOnPathOverlap: Type.Optional(Type.Boolean()),
|
|
41
|
-
},
|
|
42
|
-
{ additionalProperties: false },
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
export const PiTeamsRuntimeConfigSchema = Type.Object(
|
|
46
|
-
{
|
|
47
|
-
mode: Type.Optional(
|
|
48
|
-
Type.Union([Type.Literal("auto"), Type.Literal("scaffold"), Type.Literal("child-process"), Type.Literal("live-session")]),
|
|
49
|
-
),
|
|
50
|
-
preferLiveSession: Type.Optional(Type.Boolean()),
|
|
51
|
-
allowChildProcessFallback: Type.Optional(Type.Boolean()),
|
|
52
|
-
maxTurns: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
53
|
-
graceTurns: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
54
|
-
taskTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
55
|
-
inheritContext: Type.Optional(Type.Boolean()),
|
|
56
|
-
promptMode: Type.Optional(Type.Union([Type.Literal("replace"), Type.Literal("append")])),
|
|
57
|
-
groupJoin: Type.Optional(Type.Union([Type.Literal("off"), Type.Literal("group"), Type.Literal("smart")])),
|
|
58
|
-
groupJoinAckTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
59
|
-
requirePlanApproval: Type.Optional(Type.Boolean()),
|
|
60
|
-
completionMutationGuard: Type.Optional(Type.Union([Type.Literal("off"), Type.Literal("warn"), Type.Literal("fail")])),
|
|
61
|
-
effectivenessGuard: Type.Optional(
|
|
62
|
-
Type.Union([Type.Literal("off"), Type.Literal("warn"), Type.Literal("block"), Type.Literal("fail")]),
|
|
63
|
-
),
|
|
64
|
-
yield: Type.Optional(
|
|
65
|
-
Type.Object(
|
|
66
|
-
{
|
|
67
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
68
|
-
maxReminders: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
69
|
-
reminderPrompt: Type.Optional(Type.String({ maxLength: 1000 })),
|
|
70
|
-
},
|
|
71
|
-
{ additionalProperties: false },
|
|
72
|
-
),
|
|
73
|
-
),
|
|
74
|
-
excludeContextBash: Type.Optional(Type.Boolean()),
|
|
75
|
-
isolationPolicy: Type.Optional(
|
|
76
|
-
Type.Object(
|
|
77
|
-
{
|
|
78
|
-
isolatedRoles: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
|
|
79
|
-
defaultRuntime: Type.Optional(Type.Union([Type.Literal("live-session"), Type.Literal("child-process")])),
|
|
80
|
-
},
|
|
81
|
-
{ additionalProperties: false },
|
|
82
|
-
),
|
|
83
|
-
),
|
|
84
|
-
},
|
|
85
|
-
{ additionalProperties: false },
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
export const PiTeamsControlConfigSchema = Type.Object(
|
|
89
|
-
{
|
|
90
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
91
|
-
needsAttentionAfterMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
92
|
-
},
|
|
93
|
-
{ additionalProperties: false },
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
export const PiTeamsWorktreeConfigSchema = Type.Object(
|
|
97
|
-
{
|
|
98
|
-
setupHook: Type.Optional(Type.String({ minLength: 1 })),
|
|
99
|
-
setupHookTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
100
|
-
linkNodeModules: Type.Optional(Type.Boolean()),
|
|
101
|
-
seedPaths: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
|
|
102
|
-
},
|
|
103
|
-
{ additionalProperties: false },
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Goal-wrap config (RFC v0.5 vision: apply `goal` completion-guarantee to builtin workflows).
|
|
108
|
-
* Per-workflow toggle. When enabled, a builtin workflow runs as the WORKER TURN inside a
|
|
109
|
-
* goal loop (worker → judge → feedback → redo until achieved / maxTurns / budget / stuck).
|
|
110
|
-
* Default OFF — opt-in per workflow. Only applies to builtin workflows that have a clear
|
|
111
|
-
* 'done' condition (implementation, fast-fix). Read-only workflows (review, research) are
|
|
112
|
-
* not goal-wrappable.
|
|
113
|
-
*/
|
|
114
|
-
export const GoalWrapWorkflowConfigSchema = Type.Object(
|
|
115
|
-
{
|
|
116
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
117
|
-
maxTurns: Type.Optional(Type.Integer({ minimum: 1, maximum: 50 })),
|
|
118
|
-
evaluatorModel: Type.Optional(Type.String({ minLength: 1 })),
|
|
119
|
-
verification: Type.Optional(
|
|
120
|
-
Type.Object(
|
|
121
|
-
{
|
|
122
|
-
commands: Type.Array(Type.String({ minLength: 1 })),
|
|
123
|
-
mode: Type.Optional(Type.Literal("text-only")),
|
|
124
|
-
},
|
|
125
|
-
{ additionalProperties: false },
|
|
126
|
-
),
|
|
127
|
-
),
|
|
128
|
-
budgetTotal: Type.Optional(Type.Integer({ minimum: 1000 })),
|
|
129
|
-
budgetUnlimited: Type.Optional(Type.Boolean()),
|
|
130
|
-
},
|
|
131
|
-
{ additionalProperties: false },
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
export const PiTeamsGoalWrapConfigSchema = Type.Record(Type.String({ minLength: 1 }), GoalWrapWorkflowConfigSchema);
|
|
135
|
-
|
|
136
|
-
export const AgentOverrideSchema = Type.Object(
|
|
137
|
-
{
|
|
138
|
-
disabled: Type.Optional(Type.Boolean()),
|
|
139
|
-
model: Type.Optional(Type.Union([Type.String({ minLength: 1 }), Type.Literal(false)])),
|
|
140
|
-
fallbackModels: Type.Optional(Type.Union([Type.Array(Type.String({ minLength: 1 })), Type.Literal(false)])),
|
|
141
|
-
thinking: Type.Optional(Type.Union([Type.String({ minLength: 1 }), Type.Literal(false)])),
|
|
142
|
-
tools: Type.Optional(Type.Union([Type.Array(Type.String({ minLength: 1 })), Type.Literal(false)])),
|
|
143
|
-
skills: Type.Optional(Type.Union([Type.Array(Type.String({ minLength: 1 })), Type.Literal(false)])),
|
|
144
|
-
},
|
|
145
|
-
{ additionalProperties: false },
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
export const PiTeamsAgentsConfigSchema = Type.Object(
|
|
149
|
-
{
|
|
150
|
-
disableBuiltins: Type.Optional(Type.Boolean()),
|
|
151
|
-
overrides: Type.Optional(Type.Record(Type.String({ minLength: 1 }), AgentOverrideSchema)),
|
|
152
|
-
},
|
|
153
|
-
{ additionalProperties: false },
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
export const PiTeamsToolsConfigSchema = Type.Object(
|
|
157
|
-
{
|
|
158
|
-
enableClaudeStyleAliases: Type.Optional(Type.Boolean()),
|
|
159
|
-
enableSteer: Type.Optional(Type.Boolean()),
|
|
160
|
-
terminateOnForeground: Type.Optional(Type.Boolean()),
|
|
161
|
-
},
|
|
162
|
-
{ additionalProperties: false },
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
export const PiTeamsTelemetryConfigSchema = Type.Object(
|
|
166
|
-
{
|
|
167
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
168
|
-
},
|
|
169
|
-
{ additionalProperties: false },
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
export const PiTeamsPolicyConfigSchema = Type.Object(
|
|
173
|
-
{
|
|
174
|
-
requireIntentForDestructiveActions: Type.Optional(Type.Boolean()),
|
|
175
|
-
disabledCapabilities: Type.Optional(Type.Array(Type.String())),
|
|
176
|
-
},
|
|
177
|
-
{ additionalProperties: false },
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
export const PiTeamsNotificationsConfigSchema = Type.Object(
|
|
181
|
-
{
|
|
182
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
183
|
-
severityFilter: Type.Optional(
|
|
184
|
-
Type.Array(Type.Union([Type.Literal("info"), Type.Literal("warning"), Type.Literal("error"), Type.Literal("critical")])),
|
|
185
|
-
),
|
|
186
|
-
dedupWindowMs: Type.Optional(Type.Integer({ minimum: 1000 })),
|
|
187
|
-
batchWindowMs: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
188
|
-
quietHours: Type.Optional(Type.String({ pattern: "^\\d{2}:\\d{2}-\\d{2}:\\d{2}$" })),
|
|
189
|
-
sinkRetentionDays: Type.Optional(Type.Integer({ minimum: 1, maximum: 90 })),
|
|
190
|
-
},
|
|
191
|
-
{ additionalProperties: false },
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
export const PiTeamsObservabilityConfigSchema = Type.Object(
|
|
195
|
-
{
|
|
196
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
197
|
-
pollIntervalMs: Type.Optional(Type.Integer({ minimum: 1000, maximum: 60000 })),
|
|
198
|
-
metricRetentionDays: Type.Optional(Type.Integer({ minimum: 1, maximum: 90 })),
|
|
199
|
-
},
|
|
200
|
-
{ additionalProperties: false },
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
export const PiTeamsReliabilityConfigSchema = Type.Object(
|
|
204
|
-
{
|
|
205
|
-
autoRetry: Type.Optional(Type.Boolean()),
|
|
206
|
-
retryPolicy: Type.Optional(
|
|
207
|
-
Type.Object(
|
|
208
|
-
{
|
|
209
|
-
maxAttempts: Type.Optional(Type.Integer({ minimum: 1, maximum: 10 })),
|
|
210
|
-
backoffMs: Type.Optional(Type.Integer({ minimum: 100, maximum: 60000 })),
|
|
211
|
-
jitterRatio: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })),
|
|
212
|
-
exponentialFactor: Type.Optional(Type.Number({ minimum: 1, maximum: 5 })),
|
|
213
|
-
retryableErrors: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
|
|
214
|
-
},
|
|
215
|
-
{ additionalProperties: false },
|
|
216
|
-
),
|
|
217
|
-
),
|
|
218
|
-
autoRecover: Type.Optional(Type.Boolean()),
|
|
219
|
-
deadletterThreshold: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
220
|
-
cleanupOrphanedTempDirs: Type.Optional(Type.Boolean()),
|
|
221
|
-
autoRepairIntervalMs: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
222
|
-
forcePreflight: Type.Optional(Type.Boolean()),
|
|
223
|
-
ambientStatusInjection: Type.Optional(Type.Boolean()),
|
|
224
|
-
perWriteValidation: Type.Optional(Type.Boolean()),
|
|
225
|
-
scopeModels: Type.Optional(Type.Boolean()),
|
|
226
|
-
},
|
|
227
|
-
{ additionalProperties: false },
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
export const PiTeamsOtlpConfigSchema = Type.Object(
|
|
231
|
-
{
|
|
232
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
233
|
-
endpoint: Type.Optional(
|
|
234
|
-
Type.String({
|
|
235
|
-
minLength: 1,
|
|
236
|
-
maxLength: 2048,
|
|
237
|
-
pattern: "^https?://",
|
|
238
|
-
}),
|
|
239
|
-
),
|
|
240
|
-
headers: Type.Optional(Type.Record(Type.String({ minLength: 1, maxLength: 256 }), Type.String({ maxLength: 4096 }))),
|
|
241
|
-
intervalMs: Type.Optional(Type.Integer({ minimum: 5000 })),
|
|
242
|
-
},
|
|
243
|
-
{ additionalProperties: false },
|
|
244
|
-
);
|
|
245
|
-
|
|
246
|
-
export const PiTeamsUiConfigSchema = Type.Object(
|
|
247
|
-
{
|
|
248
|
-
widgetPlacement: Type.Optional(Type.Union([Type.Literal("aboveEditor"), Type.Literal("belowEditor")])),
|
|
249
|
-
widgetMaxLines: Type.Optional(Type.Integer({ minimum: 1, maximum: 50 })),
|
|
250
|
-
powerbar: Type.Optional(Type.Boolean()),
|
|
251
|
-
dashboardPlacement: Type.Optional(Type.Union([Type.Literal("center"), Type.Literal("right")])),
|
|
252
|
-
dashboardWidth: Type.Optional(Type.Integer({ minimum: 32, maximum: 120 })),
|
|
253
|
-
dashboardLiveRefreshMs: Type.Optional(Type.Integer({ minimum: 250, maximum: 60000 })),
|
|
254
|
-
autoOpenDashboard: Type.Optional(Type.Boolean()),
|
|
255
|
-
autoOpenDashboardForForegroundRuns: Type.Optional(Type.Boolean()),
|
|
256
|
-
autoCloseDashboardMs: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
257
|
-
showModel: Type.Optional(Type.Boolean()),
|
|
258
|
-
showTokens: Type.Optional(Type.Boolean()),
|
|
259
|
-
showTools: Type.Optional(Type.Boolean()),
|
|
260
|
-
transcriptTailBytes: Type.Optional(Type.Integer({ minimum: 1024, maximum: 50 * 1024 * 1024 })),
|
|
261
|
-
mascotStyle: Type.Optional(Type.Union([Type.Literal("cat"), Type.Literal("armin")])),
|
|
262
|
-
mascotEffect: Type.Optional(
|
|
263
|
-
Type.Union([
|
|
264
|
-
Type.Literal("random"),
|
|
265
|
-
Type.Literal("none"),
|
|
266
|
-
Type.Literal("typewriter"),
|
|
267
|
-
Type.Literal("scanline"),
|
|
268
|
-
Type.Literal("rain"),
|
|
269
|
-
Type.Literal("fade"),
|
|
270
|
-
Type.Literal("crt"),
|
|
271
|
-
Type.Literal("glitch"),
|
|
272
|
-
Type.Literal("dissolve"),
|
|
273
|
-
]),
|
|
274
|
-
),
|
|
275
|
-
},
|
|
276
|
-
{ additionalProperties: false },
|
|
277
|
-
);
|
|
278
|
-
|
|
279
|
-
/** Phase 0 inter-pi broker config schema. Numeric limits are bounded per
|
|
280
|
-
* the plan: pathHashLen 4..32, maxFrameBytes 1024..1048576 (default 256 KiB),
|
|
281
|
-
* outboundQueueCap 32..4096 (default 256). */
|
|
282
|
-
export const CrewBrokerConfigSchema = Type.Object(
|
|
283
|
-
{
|
|
284
|
-
enabled: Type.Optional(Type.Boolean()),
|
|
285
|
-
pathHashLen: Type.Optional(Type.Integer({ minimum: 4, maximum: 32 })),
|
|
286
|
-
maxFrameBytes: Type.Optional(Type.Integer({ minimum: 1024, maximum: 1_048_576 })),
|
|
287
|
-
outboundQueueCap: Type.Optional(Type.Integer({ minimum: 32, maximum: 4096 })),
|
|
288
|
-
},
|
|
289
|
-
{ additionalProperties: false },
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
export const PiTeamsConfigSchema = Type.Object(
|
|
293
|
-
{
|
|
294
|
-
asyncByDefault: Type.Optional(Type.Boolean()),
|
|
295
|
-
executeWorkers: Type.Optional(Type.Boolean()),
|
|
296
|
-
notifierIntervalMs: Type.Optional(Type.Number({ minimum: 1000 })),
|
|
297
|
-
requireCleanWorktreeLeader: Type.Optional(Type.Boolean()),
|
|
298
|
-
ignoreMethod: Type.Optional(Type.Union([Type.Literal("gitignore"), Type.Literal("exclude")])),
|
|
299
|
-
autonomous: Type.Optional(PiTeamsAutonomousConfigSchema),
|
|
300
|
-
limits: Type.Optional(PiTeamsLimitsConfigSchema),
|
|
301
|
-
runtime: Type.Optional(PiTeamsRuntimeConfigSchema),
|
|
302
|
-
control: Type.Optional(PiTeamsControlConfigSchema),
|
|
303
|
-
worktree: Type.Optional(PiTeamsWorktreeConfigSchema),
|
|
304
|
-
goalWrap: Type.Optional(PiTeamsGoalWrapConfigSchema),
|
|
305
|
-
agents: Type.Optional(PiTeamsAgentsConfigSchema),
|
|
306
|
-
tools: Type.Optional(PiTeamsToolsConfigSchema),
|
|
307
|
-
telemetry: Type.Optional(PiTeamsTelemetryConfigSchema),
|
|
308
|
-
policy: Type.Optional(PiTeamsPolicyConfigSchema),
|
|
309
|
-
notifications: Type.Optional(PiTeamsNotificationsConfigSchema),
|
|
310
|
-
observability: Type.Optional(PiTeamsObservabilityConfigSchema),
|
|
311
|
-
reliability: Type.Optional(PiTeamsReliabilityConfigSchema),
|
|
312
|
-
otlp: Type.Optional(PiTeamsOtlpConfigSchema),
|
|
313
|
-
ui: Type.Optional(PiTeamsUiConfigSchema),
|
|
314
|
-
broker: Type.Optional(CrewBrokerConfigSchema),
|
|
315
|
-
},
|
|
316
|
-
{ additionalProperties: false },
|
|
317
|
-
);
|
|
318
|
-
|
|
319
|
-
import { validateWithSeverity as _validateWithSeverity, type ValidationMode, type ValidationOutcome } from "./validation-types.ts";
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Convenience wrapper — validate a raw config value with severity-tagged findings.
|
|
323
|
-
* Delegates to `validateWithSeverity` from validation-types.ts.
|
|
324
|
-
*/
|
|
325
|
-
export function validateConfig(raw: unknown, mode?: ValidationMode): ValidationOutcome {
|
|
326
|
-
return _validateWithSeverity(raw, mode);
|
|
327
|
-
}
|