pi-crew 0.9.68 → 0.10.2

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.
Files changed (253) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/NOTICE.md +21 -0
  3. package/README.md +44 -2
  4. package/agents/analyst.md +1 -1
  5. package/agents/cold-verifier.md +3 -1
  6. package/agents/critic.md +1 -1
  7. package/agents/executor.md +1 -1
  8. package/agents/explorer.md +1 -1
  9. package/agents/planner.md +1 -1
  10. package/agents/reviewer.md +1 -1
  11. package/agents/security-reviewer.md +1 -1
  12. package/agents/test-engineer.md +1 -1
  13. package/agents/verifier.md +1 -1
  14. package/agents/writer.md +1 -1
  15. package/dist/index.mjs +68113 -60774
  16. package/docs/README.md +2 -0
  17. package/docs/actions-reference.md +31 -0
  18. package/docs/commands-reference.md +17 -6
  19. package/docs/resource-formats.md +13 -0
  20. package/package.json +4 -2
  21. package/schema.json +503 -91
  22. package/scripts/resource-sampler.mjs +36 -2
  23. package/skills/requirements-to-task-packet/SKILL.md +26 -0
  24. package/skills/widget-rendering/SKILL.md +7 -7
  25. package/src/agents/agent-config.ts +2 -1
  26. package/src/agents/discover-agents.ts +23 -14
  27. package/src/config/config-merge.ts +183 -0
  28. package/src/config/config-validation.ts +687 -0
  29. package/src/config/config.ts +22 -864
  30. package/src/config/defaults.ts +43 -2
  31. package/src/config/drift-detector.ts +1 -1
  32. package/src/config/env-vars.ts +691 -0
  33. package/src/config/role-tools.ts +11 -9
  34. package/src/config/sanitize-project-config.ts +172 -0
  35. package/src/config/types.ts +49 -1
  36. package/src/extension/async-notifier.ts +25 -2
  37. package/src/extension/crew-cleanup.ts +13 -0
  38. package/src/extension/crew-vibes/config.ts +2 -1
  39. package/src/extension/crew-vibes/footer.ts +19 -0
  40. package/src/extension/crew-vibes/index.ts +11 -1
  41. package/src/extension/plan-orchestrate.ts +132 -0
  42. package/src/extension/register.ts +8 -0
  43. package/src/extension/registration/command-registration.ts +1 -0
  44. package/src/extension/registration/commands/dashboard.ts +158 -0
  45. package/src/extension/registration/commands/index.ts +35 -0
  46. package/src/extension/registration/commands/manage.ts +303 -0
  47. package/src/extension/registration/commands/run.ts +228 -0
  48. package/src/extension/registration/commands/shared.ts +639 -0
  49. package/src/extension/registration/commands/status.ts +60 -0
  50. package/src/extension/registration/commands.ts +13 -1224
  51. package/src/extension/registration/foreground-run-controller.ts +10 -2
  52. package/src/extension/registration/lifecycle-handlers.ts +178 -17
  53. package/src/extension/registration/runtime-cleanup.ts +23 -5
  54. package/src/extension/registration/subagent-tools.ts +218 -9
  55. package/src/extension/registration/team-tool.ts +5 -1
  56. package/src/extension/registration/ui.ts +5 -4
  57. package/src/extension/rpc-hmac.ts +5 -3
  58. package/src/extension/team-tool/api/heartbeat.ts +47 -10
  59. package/src/extension/team-tool/api/plan-approval.ts +9 -0
  60. package/src/extension/team-tool/api/task-claims.ts +109 -40
  61. package/src/extension/team-tool/cancel.ts +84 -50
  62. package/src/extension/team-tool/dispatch/index.ts +1 -0
  63. package/src/extension/team-tool/dispatch/run.ts +4 -1
  64. package/src/extension/team-tool/doctor.ts +103 -1
  65. package/src/extension/team-tool/orchestrate.ts +66 -1
  66. package/src/extension/team-tool/plans.ts +192 -0
  67. package/src/extension/team-tool/respond.ts +197 -65
  68. package/src/extension/team-tool/run-deadline.ts +35 -3
  69. package/src/extension/team-tool/run-intent.ts +63 -0
  70. package/src/extension/team-tool/run.ts +74 -20
  71. package/src/extension/team-tool/status.ts +84 -26
  72. package/src/extension/team-tool.ts +11 -2
  73. package/src/hooks/registry.ts +1 -6
  74. package/src/i18n.ts +9 -0
  75. package/src/prompt/prompt-runtime.ts +521 -2
  76. package/src/prompt/worker-events-channel.ts +173 -0
  77. package/src/runtime/README.md +8 -8
  78. package/src/runtime/async-runner.ts +7 -3
  79. package/src/runtime/background-runner.ts +42 -14
  80. package/src/runtime/broker/broker-issuer.ts +9 -2
  81. package/src/runtime/broker/crew-broker-tokens.ts +43 -6
  82. package/src/runtime/broker/crew-broker.ts +838 -10
  83. package/src/runtime/broker/wait-status-cache.ts +157 -0
  84. package/src/runtime/budget-enforcement.ts +281 -0
  85. package/src/runtime/child-pi/child-pi-constants.ts +8 -0
  86. package/src/runtime/child-pi/child-pi-spawn.ts +60 -14
  87. package/src/runtime/child-pi/child-pi-streams.ts +21 -1
  88. package/src/runtime/child-pi/child-pi-timers.ts +324 -0
  89. package/src/runtime/child-pi/child-pi.ts +97 -201
  90. package/src/runtime/child-pi/mock-fixtures.ts +16 -2
  91. package/src/runtime/crew-agent-records.ts +259 -14
  92. package/src/runtime/delegate-spawn.ts +148 -0
  93. package/src/runtime/detached-run-results.ts +90 -0
  94. package/src/runtime/deterministic-ast.ts +2 -1
  95. package/src/runtime/dispatch-batch.ts +945 -0
  96. package/src/runtime/finalize-run.ts +557 -0
  97. package/src/runtime/goal-workflow/adaptive-plan.ts +116 -15
  98. package/src/runtime/goal-workflow/dynamic-workflow-runner.ts +8 -3
  99. package/src/runtime/goal-workflow/goal-state-store.ts +1 -1
  100. package/src/runtime/group-join.ts +11 -125
  101. package/src/runtime/live-session/live-session-runtime.ts +26 -1
  102. package/src/runtime/merge-gate.ts +32 -10
  103. package/src/runtime/merge-loop.ts +130 -0
  104. package/src/runtime/model/model-budget-summary.ts +53 -0
  105. package/src/runtime/model/model-fallback.ts +36 -2
  106. package/src/runtime/model/pi-args.ts +10 -0
  107. package/src/runtime/model/provider-extensions.ts +10 -0
  108. package/src/runtime/orphan-worker-registry.ts +1 -1
  109. package/src/runtime/output/output-validator.ts +45 -0
  110. package/src/runtime/parent-guard.ts +3 -1
  111. package/src/runtime/peer-dep.ts +2 -1
  112. package/src/runtime/per-write-validator.ts +0 -5
  113. package/src/runtime/pi-spawn.ts +61 -15
  114. package/src/runtime/plan-approval.ts +125 -0
  115. package/src/runtime/plan-replan.ts +151 -0
  116. package/src/runtime/process-status.ts +16 -1
  117. package/src/runtime/recovery/checkpoint.ts +0 -18
  118. package/src/runtime/recovery/crash-recovery.ts +111 -46
  119. package/src/runtime/run-tracker.ts +77 -10
  120. package/src/runtime/scheduler-context.ts +98 -0
  121. package/src/runtime/scheduling/coalesce-tasks.ts +5 -0
  122. package/src/runtime/scheduling/global-worker-cap.ts +2 -1
  123. package/src/runtime/scheduling/nested-slots.ts +70 -0
  124. package/src/runtime/scheduling/run-coalesced-task-group.ts +64 -13
  125. package/src/runtime/scheduling/task-graph-scheduler.ts +0 -10
  126. package/src/runtime/settings-store.ts +219 -0
  127. package/src/runtime/spawn-policy.ts +217 -0
  128. package/src/runtime/stale-reconciler.ts +87 -6
  129. package/src/runtime/subagent-manager.ts +25 -1
  130. package/src/runtime/task-output-context.ts +230 -9
  131. package/src/runtime/task-packet.ts +23 -1
  132. package/src/runtime/task-runner/child-executor.ts +106 -7
  133. package/src/runtime/task-runner/post-execution.ts +125 -1
  134. package/src/runtime/task-runner/pre-execution.ts +39 -1
  135. package/src/runtime/task-runner/prompt-builder.ts +51 -1
  136. package/src/runtime/task-runner/retrieval-orchestrator.ts +72 -18
  137. package/src/runtime/task-runner/spec-evidence.ts +403 -0
  138. package/src/runtime/task-runner/state-helpers.ts +26 -24
  139. package/src/runtime/task-runner.ts +11 -0
  140. package/src/runtime/team-runner.ts +132 -1673
  141. package/src/runtime/verification/spec-sandbox.ts +255 -0
  142. package/src/runtime/verification/verification-gates.ts +3 -2
  143. package/src/runtime/verification/verification-worktree.ts +2 -1
  144. package/src/runtime/workflow-phase-advance.ts +100 -0
  145. package/src/runtime/workspace-tree.ts +9 -0
  146. package/src/schema/config-schema.ts +66 -26
  147. package/src/schema/sensitive-config-paths.ts +64 -0
  148. package/src/schema/team-tool-schema.ts +13 -3
  149. package/src/state/README.md +4 -10
  150. package/src/state/atomic-write.ts +20 -3
  151. package/src/state/contracts.ts +38 -0
  152. package/src/state/coordination/mailbox.ts +12 -2
  153. package/src/state/event-log/cursor.ts +223 -0
  154. package/src/state/event-log/event-log-rotation.ts +12 -4
  155. package/src/state/event-log/event-log.ts +152 -369
  156. package/src/state/event-log/sequence-cache.ts +373 -0
  157. package/src/state/event-log/worker-atomic-writer.ts +2 -1
  158. package/src/state/stores/active-run-registry.ts +3 -2
  159. package/src/state/stores/manifest-io.ts +237 -0
  160. package/src/state/stores/ownership-map.ts +162 -0
  161. package/src/state/stores/plan-store.ts +241 -0
  162. package/src/state/stores/run-cache.ts +0 -90
  163. package/src/state/stores/spec-store.ts +189 -0
  164. package/src/state/stores/state-store.ts +139 -232
  165. package/src/state/types.ts +199 -0
  166. package/src/ui/dashboard-panes/plan-pane.ts +136 -0
  167. package/src/ui/dashboard-panes/progress-pane.ts +6 -0
  168. package/src/ui/dashboard-panes/transcript-pane.ts +31 -0
  169. package/src/ui/dock-footer.ts +49 -0
  170. package/src/ui/heartbeat-aggregator.ts +9 -1
  171. package/src/ui/inline-panel/agent-pane.ts +375 -0
  172. package/src/ui/inline-panel/agent-transcript.ts +338 -0
  173. package/src/ui/inline-panel/agent-view-overlay.ts +225 -0
  174. package/src/ui/inline-panel/crew-editor.ts +192 -0
  175. package/src/ui/inline-panel/index.ts +290 -0
  176. package/src/ui/inline-panel/panel-rows.ts +37 -0
  177. package/src/ui/inline-panel/panel-selection.ts +157 -0
  178. package/src/ui/inline-panel/panel-store.ts +111 -0
  179. package/src/ui/inline-panel/view-session-store.ts +36 -0
  180. package/src/ui/keybinding-map.ts +54 -13
  181. package/src/ui/pi-ui-compat.ts +9 -0
  182. package/src/ui/powerbar-publisher.ts +52 -1
  183. package/src/ui/run-dashboard.ts +31 -5
  184. package/src/ui/run-snapshot-cache.ts +57 -30
  185. package/src/ui/snapshot-types.ts +6 -1
  186. package/src/ui/widget/index.ts +176 -22
  187. package/src/ui/widget/task-list.ts +198 -0
  188. package/src/ui/widget/widget-formatters.ts +240 -4
  189. package/src/ui/widget/widget-renderer.ts +243 -38
  190. package/src/ui/widget/widget-types.ts +11 -0
  191. package/src/utils/child-process-shield.ts +106 -0
  192. package/src/utils/file-coalescer.ts +0 -4
  193. package/src/utils/fs-errno.ts +66 -0
  194. package/src/utils/fs-watch.ts +1 -1
  195. package/src/utils/internal-error.ts +3 -1
  196. package/src/utils/paths.ts +11 -3
  197. package/src/utils/redaction.ts +7 -0
  198. package/src/utils/safe-abort.ts +45 -0
  199. package/src/utils/task-name-generator.ts +1 -8
  200. package/src/workflows/discover-workflows.ts +20 -2
  201. package/src/workflows/validate-workflow.ts +7 -1
  202. package/src/workflows/workflow-config.ts +17 -0
  203. package/src/workflows/workflow-serializer.ts +3 -0
  204. package/src/worktree/worktree-manager.ts +22 -0
  205. package/workflows/default.workflow.md +36 -26
  206. package/workflows/strict-fast-fix.workflow.md +26 -0
  207. package/src/agents/agent-search.ts +0 -98
  208. package/src/benchmark/benchmark-runner.ts +0 -313
  209. package/src/benchmark/feedback-loop.ts +0 -73
  210. package/src/config/resilient-parser.ts +0 -117
  211. package/src/extension/crew-vibes/cat-frames.ts +0 -18
  212. package/src/extension/result-watcher.ts +0 -139
  213. package/src/observability/exporters/prometheus-exporter.ts +0 -54
  214. package/src/observability/metric-retention.ts +0 -64
  215. package/src/runtime/compaction/compaction-summary.ts +0 -278
  216. package/src/runtime/errors/crew-errors.ts +0 -162
  217. package/src/runtime/live-session/intercom-bridge.ts +0 -187
  218. package/src/runtime/loop-gates.ts +0 -128
  219. package/src/runtime/metric-parser.ts +0 -36
  220. package/src/runtime/output/stream-preview.ts +0 -184
  221. package/src/runtime/output/tool-progress.ts +0 -278
  222. package/src/runtime/phase-tracker.ts +0 -385
  223. package/src/runtime/pipeline-runner.ts +0 -523
  224. package/src/runtime/process/process-lifecycle.ts +0 -491
  225. package/src/runtime/recovery/retry-runner.ts +0 -330
  226. package/src/runtime/run-drift.ts +0 -219
  227. package/src/runtime/task-quality.ts +0 -199
  228. package/src/runtime/task-runner/run-projection.ts +0 -128
  229. package/src/runtime/verification/post-checks.ts +0 -142
  230. package/src/state/coordination/schedule.ts +0 -166
  231. package/src/state/event-log/jsonl-writer.ts +0 -115
  232. package/src/state/hook-instinct-bridge.ts +0 -94
  233. package/src/state/hook-integrations.ts +0 -51
  234. package/src/state/session-state-map.ts +0 -51
  235. package/src/state/stores/blob-store.ts +0 -308
  236. package/src/state/stores/instinct-store.ts +0 -275
  237. package/src/state/stores/observation-store.ts +0 -176
  238. package/src/state/tiered-eval.ts +0 -480
  239. package/src/state/types-eval.ts +0 -58
  240. package/src/tools/safe-bash-extension.ts +0 -54
  241. package/src/tools/safe-bash.ts +0 -505
  242. package/src/ui/agent-management-overlay.ts +0 -160
  243. package/src/ui/crew-footer.ts +0 -102
  244. package/src/ui/crew-select-list.ts +0 -114
  245. package/src/ui/dashboard-panes/capability-pane.ts +0 -77
  246. package/src/ui/transcript-entries.ts +0 -256
  247. package/src/utils/conflict-detect.ts +0 -721
  248. package/src/utils/fingerprint.ts +0 -180
  249. package/src/utils/gh-protocol.ts +0 -556
  250. package/src/utils/project-detector.ts +0 -160
  251. package/src/utils/sse-parser.ts +0 -131
  252. package/src/workflows/cost-estimator.ts +0 -34
  253. package/src/workflows/intermediate-store.ts +0 -166
package/schema.json CHANGED
@@ -24,7 +24,10 @@
24
24
  },
25
25
  "ignoreMethod": {
26
26
  "type": "string",
27
- "enum": ["gitignore", "exclude"],
27
+ "enum": [
28
+ "gitignore",
29
+ "exclude"
30
+ ],
28
31
  "default": "gitignore",
29
32
  "description": "Method for ignoring pi-crew generated directories from VCS: 'gitignore' appends to .gitignore, 'exclude' writes to .git/info/exclude."
30
33
  },
@@ -33,16 +36,34 @@
33
36
  "additionalProperties": false,
34
37
  "description": "Autonomous team routing policy injected into the agent system prompt.",
35
38
  "properties": {
36
- "profile": { "type": "string", "enum": ["manual", "suggested", "assisted", "aggressive"] },
37
- "enabled": { "type": "boolean" },
38
- "injectPolicy": { "type": "boolean" },
39
- "preferAsyncForLongTasks": { "type": "boolean" },
40
- "allowWorktreeSuggestion": { "type": "boolean" },
39
+ "profile": {
40
+ "type": "string",
41
+ "enum": [
42
+ "manual",
43
+ "suggested",
44
+ "assisted",
45
+ "aggressive"
46
+ ]
47
+ },
48
+ "enabled": {
49
+ "type": "boolean"
50
+ },
51
+ "injectPolicy": {
52
+ "type": "boolean"
53
+ },
54
+ "preferAsyncForLongTasks": {
55
+ "type": "boolean"
56
+ },
57
+ "allowWorktreeSuggestion": {
58
+ "type": "boolean"
59
+ },
41
60
  "magicKeywords": {
42
61
  "type": "object",
43
62
  "additionalProperties": {
44
63
  "type": "array",
45
- "items": { "type": "string" }
64
+ "items": {
65
+ "type": "string"
66
+ }
46
67
  }
47
68
  }
48
69
  }
@@ -52,14 +73,37 @@
52
73
  "additionalProperties": false,
53
74
  "description": "Runtime safety limits for crew workers and policy decisions.",
54
75
  "properties": {
55
- "maxConcurrentWorkers": { "type": "integer", "minimum": 1 },
56
- "allowUnboundedConcurrency": { "type": "boolean" },
57
- "maxTaskDepth": { "type": "integer", "minimum": 1 },
58
- "maxChildrenPerTask": { "type": "integer", "minimum": 1 },
59
- "maxRunMinutes": { "type": "integer", "minimum": 1 },
60
- "maxRetriesPerTask": { "type": "integer", "minimum": 1 },
61
- "maxTasksPerRun": { "type": "integer", "minimum": 1 },
62
- "heartbeatStaleMs": { "type": "integer", "minimum": 1 }
76
+ "maxConcurrentWorkers": {
77
+ "type": "integer",
78
+ "minimum": 1
79
+ },
80
+ "allowUnboundedConcurrency": {
81
+ "type": "boolean"
82
+ },
83
+ "maxTaskDepth": {
84
+ "type": "integer",
85
+ "minimum": 1
86
+ },
87
+ "maxChildrenPerTask": {
88
+ "type": "integer",
89
+ "minimum": 1
90
+ },
91
+ "maxRunMinutes": {
92
+ "type": "integer",
93
+ "minimum": 1
94
+ },
95
+ "maxRetriesPerTask": {
96
+ "type": "integer",
97
+ "minimum": 1
98
+ },
99
+ "maxTasksPerRun": {
100
+ "type": "integer",
101
+ "minimum": 1
102
+ },
103
+ "heartbeatStaleMs": {
104
+ "type": "integer",
105
+ "minimum": 1
106
+ }
63
107
  }
64
108
  },
65
109
  "runtime": {
@@ -67,18 +111,71 @@
67
111
  "additionalProperties": false,
68
112
  "description": "Crew runtime selection and live-agent behavior knobs.",
69
113
  "properties": {
70
- "mode": { "type": "string", "enum": ["auto", "scaffold", "child-process", "live-session"] },
71
- "preferLiveSession": { "type": "boolean" },
72
- "allowChildProcessFallback": { "type": "boolean" },
73
- "maxTurns": { "type": "integer", "minimum": 1 },
74
- "graceTurns": { "type": "integer", "minimum": 1 },
75
- "inheritContext": { "type": "boolean" },
76
- "promptMode": { "type": "string", "enum": ["replace", "append"] },
77
- "groupJoin": { "type": "string", "enum": ["off", "group", "smart"] },
78
- "groupJoinAckTimeoutMs": { "type": "integer", "minimum": 1 },
79
- "requirePlanApproval": { "type": "boolean" },
80
- "completionMutationGuard": { "type": "string", "enum": ["off", "warn", "fail"] },
81
- "effectivenessGuard": { "type": "string", "enum": ["off", "warn", "block", "fail"] }
114
+ "mode": {
115
+ "type": "string",
116
+ "enum": [
117
+ "auto",
118
+ "scaffold",
119
+ "child-process",
120
+ "live-session"
121
+ ]
122
+ },
123
+ "preferLiveSession": {
124
+ "type": "boolean"
125
+ },
126
+ "allowChildProcessFallback": {
127
+ "type": "boolean"
128
+ },
129
+ "maxTurns": {
130
+ "type": "integer",
131
+ "minimum": 1
132
+ },
133
+ "graceTurns": {
134
+ "type": "integer",
135
+ "minimum": 1
136
+ },
137
+ "inheritContext": {
138
+ "type": "boolean"
139
+ },
140
+ "promptMode": {
141
+ "type": "string",
142
+ "enum": [
143
+ "replace",
144
+ "append"
145
+ ]
146
+ },
147
+ "groupJoin": {
148
+ "type": "string",
149
+ "enum": [
150
+ "off",
151
+ "group",
152
+ "smart"
153
+ ]
154
+ },
155
+ "groupJoinAckTimeoutMs": {
156
+ "type": "integer",
157
+ "minimum": 1
158
+ },
159
+ "requirePlanApproval": {
160
+ "type": "boolean"
161
+ },
162
+ "completionMutationGuard": {
163
+ "type": "string",
164
+ "enum": [
165
+ "off",
166
+ "warn",
167
+ "fail"
168
+ ]
169
+ },
170
+ "effectivenessGuard": {
171
+ "type": "string",
172
+ "enum": [
173
+ "off",
174
+ "warn",
175
+ "block",
176
+ "fail"
177
+ ]
178
+ }
82
179
  }
83
180
  },
84
181
  "control": {
@@ -86,8 +183,13 @@
86
183
  "additionalProperties": false,
87
184
  "description": "Agent control-plane settings for attention/stale activity detection.",
88
185
  "properties": {
89
- "enabled": { "type": "boolean" },
90
- "needsAttentionAfterMs": { "type": "integer", "minimum": 1 }
186
+ "enabled": {
187
+ "type": "boolean"
188
+ },
189
+ "needsAttentionAfterMs": {
190
+ "type": "integer",
191
+ "minimum": 1
192
+ }
91
193
  }
92
194
  },
93
195
  "worktree": {
@@ -95,9 +197,17 @@
95
197
  "additionalProperties": false,
96
198
  "description": "Worktree setup hooks and dependency-linking options.",
97
199
  "properties": {
98
- "setupHook": { "type": "string", "minLength": 1 },
99
- "setupHookTimeoutMs": { "type": "integer", "minimum": 1 },
100
- "linkNodeModules": { "type": "boolean" }
200
+ "setupHook": {
201
+ "type": "string",
202
+ "minLength": 1
203
+ },
204
+ "setupHookTimeoutMs": {
205
+ "type": "integer",
206
+ "minimum": 1
207
+ },
208
+ "linkNodeModules": {
209
+ "type": "boolean"
210
+ }
101
211
  }
102
212
  },
103
213
  "goalWrap": {
@@ -107,20 +217,47 @@
107
217
  "type": "object",
108
218
  "additionalProperties": false,
109
219
  "properties": {
110
- "enabled": { "type": "boolean" },
111
- "maxTurns": { "type": "integer", "minimum": 1, "maximum": 50 },
112
- "evaluatorModel": { "type": "string", "minLength": 1 },
220
+ "enabled": {
221
+ "type": "boolean"
222
+ },
223
+ "maxTurns": {
224
+ "type": "integer",
225
+ "minimum": 1,
226
+ "maximum": 50
227
+ },
228
+ "evaluatorModel": {
229
+ "type": "string",
230
+ "minLength": 1
231
+ },
113
232
  "verification": {
114
233
  "type": "object",
115
234
  "additionalProperties": false,
116
235
  "properties": {
117
- "commands": { "type": "array", "items": { "type": "string", "minLength": 1 } },
118
- "mode": { "type": "string", "enum": ["text-only"] }
236
+ "commands": {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string",
240
+ "minLength": 1
241
+ }
242
+ },
243
+ "mode": {
244
+ "type": "string",
245
+ "enum": [
246
+ "text-only"
247
+ ]
248
+ }
119
249
  },
120
- "required": ["commands"]
250
+ "required": [
251
+ "commands"
252
+ ]
253
+ },
254
+ "budgetTotal": {
255
+ "type": "integer",
256
+ "minimum": 1000
121
257
  },
122
- "budgetTotal": { "type": "integer", "minimum": 1000 },
123
- "budgetUnlimited": { "type": "boolean" }
258
+ "budgetUnlimited": {
259
+ "type": "boolean"
260
+ }
124
261
  }
125
262
  }
126
263
  },
@@ -129,18 +266,61 @@
129
266
  "additionalProperties": false,
130
267
  "description": "Builtin agent override settings.",
131
268
  "properties": {
132
- "disableBuiltins": { "type": "boolean" },
269
+ "disableBuiltins": {
270
+ "type": "boolean"
271
+ },
133
272
  "overrides": {
134
273
  "type": "object",
135
274
  "additionalProperties": {
136
275
  "type": "object",
137
276
  "additionalProperties": false,
138
277
  "properties": {
139
- "disabled": { "type": "boolean" },
140
- "model": { "oneOf": [{ "type": "string", "minLength": 1 }, { "const": false }] },
141
- "fallbackModels": { "oneOf": [{ "type": "array", "items": { "type": "string", "minLength": 1 } }, { "const": false }] },
142
- "thinking": { "oneOf": [{ "type": "string", "minLength": 1 }, { "const": false }] },
143
- "tools": { "type": "array", "items": { "type": "string", "minLength": 1 } }
278
+ "disabled": {
279
+ "type": "boolean"
280
+ },
281
+ "model": {
282
+ "oneOf": [
283
+ {
284
+ "type": "string",
285
+ "minLength": 1
286
+ },
287
+ {
288
+ "const": false
289
+ }
290
+ ]
291
+ },
292
+ "fallbackModels": {
293
+ "oneOf": [
294
+ {
295
+ "type": "array",
296
+ "items": {
297
+ "type": "string",
298
+ "minLength": 1
299
+ }
300
+ },
301
+ {
302
+ "const": false
303
+ }
304
+ ]
305
+ },
306
+ "thinking": {
307
+ "oneOf": [
308
+ {
309
+ "type": "string",
310
+ "minLength": 1
311
+ },
312
+ {
313
+ "const": false
314
+ }
315
+ ]
316
+ },
317
+ "tools": {
318
+ "type": "array",
319
+ "items": {
320
+ "type": "string",
321
+ "minLength": 1
322
+ }
323
+ }
144
324
  }
145
325
  }
146
326
  }
@@ -151,20 +331,93 @@
151
331
  "additionalProperties": false,
152
332
  "description": "Pi UI settings for the crew widget, dashboard, and optional powerbar segments.",
153
333
  "properties": {
154
- "widgetPlacement": { "type": "string", "enum": ["aboveEditor", "belowEditor"] },
155
- "widgetMaxLines": { "type": "integer", "minimum": 1, "maximum": 50 },
156
- "powerbar": { "type": "boolean" },
157
- "dashboardPlacement": { "type": "string", "enum": ["center", "right"], "default": "right", "description": "Place /team-dashboard as a centered overlay or right-side panel." },
158
- "dashboardWidth": { "type": "integer", "minimum": 32, "maximum": 120, "default": 56 },
159
- "dashboardLiveRefreshMs": { "type": "integer", "minimum": 250, "maximum": 60000, "default": 1000 },
160
- "autoOpenDashboard": { "type": "boolean", "default": false, "description": "Opt in to automatically opening the live right sidebar for foreground runs when UI is available. Disabled by default because Pi overlays are modal in some terminals." },
161
- "autoOpenDashboardForForegroundRuns": { "type": "boolean", "default": true },
162
- "showModel": { "type": "boolean", "default": true, "description": "Show worker model attempts in dashboard agent rows." },
163
- "showTokens": { "type": "boolean", "description": "Show token usage in dashboard agent rows." },
164
- "showTools": { "type": "boolean", "description": "Show tool activity in dashboard agent rows." },
165
- "transcriptTailBytes": { "type": "integer", "minimum": 1024, "maximum": 52428800, "default": 262144, "description": "Maximum transcript bytes to parse by default; use viewer hotkey f to load full content." },
166
- "mascotStyle": { "type": "string", "enum": ["cat", "armin"] },
167
- "mascotEffect": { "type": "string", "enum": ["random", "none", "typewriter", "scanline", "rain", "fade", "crt", "glitch", "dissolve"] }
334
+ "widgetPlacement": {
335
+ "type": "string",
336
+ "enum": [
337
+ "aboveEditor",
338
+ "belowEditor",
339
+ "bottom"
340
+ ]
341
+ },
342
+ "widgetMaxLines": {
343
+ "type": "integer",
344
+ "minimum": 1,
345
+ "maximum": 50
346
+ },
347
+ "powerbar": {
348
+ "type": "boolean"
349
+ },
350
+ "dashboardPlacement": {
351
+ "type": "string",
352
+ "enum": [
353
+ "center",
354
+ "right"
355
+ ],
356
+ "default": "right",
357
+ "description": "Place /team-dashboard as a centered overlay or right-side panel."
358
+ },
359
+ "dashboardWidth": {
360
+ "type": "integer",
361
+ "minimum": 32,
362
+ "maximum": 120,
363
+ "default": 56
364
+ },
365
+ "dashboardLiveRefreshMs": {
366
+ "type": "integer",
367
+ "minimum": 250,
368
+ "maximum": 60000,
369
+ "default": 1000
370
+ },
371
+ "autoOpenDashboard": {
372
+ "type": "boolean",
373
+ "default": false,
374
+ "description": "Opt in to automatically opening the live right sidebar for foreground runs when UI is available. Disabled by default because Pi overlays are modal in some terminals."
375
+ },
376
+ "autoOpenDashboardForForegroundRuns": {
377
+ "type": "boolean",
378
+ "default": true
379
+ },
380
+ "showModel": {
381
+ "type": "boolean",
382
+ "default": true,
383
+ "description": "Show worker model attempts in dashboard agent rows."
384
+ },
385
+ "showTokens": {
386
+ "type": "boolean",
387
+ "description": "Show token usage in dashboard agent rows."
388
+ },
389
+ "showTools": {
390
+ "type": "boolean",
391
+ "description": "Show tool activity in dashboard agent rows."
392
+ },
393
+ "transcriptTailBytes": {
394
+ "type": "integer",
395
+ "minimum": 1024,
396
+ "maximum": 52428800,
397
+ "default": 262144,
398
+ "description": "Maximum transcript bytes to parse by default; use viewer hotkey f to load full content."
399
+ },
400
+ "mascotStyle": {
401
+ "type": "string",
402
+ "enum": [
403
+ "cat",
404
+ "armin"
405
+ ]
406
+ },
407
+ "mascotEffect": {
408
+ "type": "string",
409
+ "enum": [
410
+ "random",
411
+ "none",
412
+ "typewriter",
413
+ "scanline",
414
+ "rain",
415
+ "fade",
416
+ "crt",
417
+ "glitch",
418
+ "dissolve"
419
+ ]
420
+ }
168
421
  }
169
422
  },
170
423
  "tools": {
@@ -172,9 +425,19 @@
172
425
  "additionalProperties": false,
173
426
  "description": "Public tool registration and foreground result behavior.",
174
427
  "properties": {
175
- "enableClaudeStyleAliases": { "type": "boolean", "default": true },
176
- "enableSteer": { "type": "boolean", "default": true },
177
- "terminateOnForeground": { "type": "boolean", "default": false, "description": "Opt in to returning terminate:true from foreground Agent/crew_agent calls after the child result is available." }
428
+ "enableClaudeStyleAliases": {
429
+ "type": "boolean",
430
+ "default": true
431
+ },
432
+ "enableSteer": {
433
+ "type": "boolean",
434
+ "default": true
435
+ },
436
+ "terminateOnForeground": {
437
+ "type": "boolean",
438
+ "default": false,
439
+ "description": "Opt in to returning terminate:true from foreground Agent/crew_agent calls after the child result is available."
440
+ }
178
441
  }
179
442
  },
180
443
  "telemetry": {
@@ -182,7 +445,10 @@
182
445
  "additionalProperties": false,
183
446
  "description": "Pi-crew telemetry event controls.",
184
447
  "properties": {
185
- "enabled": { "type": "boolean", "default": true }
448
+ "enabled": {
449
+ "type": "boolean",
450
+ "default": true
451
+ }
186
452
  }
187
453
  },
188
454
  "policy": {
@@ -190,7 +456,11 @@
190
456
  "additionalProperties": false,
191
457
  "description": "Operator policy gates for high-risk pi-crew actions.",
192
458
  "properties": {
193
- "requireIntentForDestructiveActions": { "type": "boolean", "default": false, "description": "Require config.intent or config._intent for destructive actions such as cancel, delete, forget, prune, and forced cleanup." }
459
+ "requireIntentForDestructiveActions": {
460
+ "type": "boolean",
461
+ "default": false,
462
+ "description": "Require config.intent or config._intent for destructive actions such as cancel, delete, forget, prune, and forced cleanup."
463
+ }
194
464
  }
195
465
  },
196
466
  "notifications": {
@@ -198,12 +468,48 @@
198
468
  "additionalProperties": false,
199
469
  "description": "Operator notification routing, quiet-hours, batching, and JSONL sink settings.",
200
470
  "properties": {
201
- "enabled": { "type": "boolean", "default": true },
202
- "severityFilter": { "type": "array", "items": { "type": "string", "enum": ["info", "warning", "error", "critical"] }, "default": ["warning", "error", "critical"] },
203
- "dedupWindowMs": { "type": "integer", "minimum": 1000, "default": 30000 },
204
- "batchWindowMs": { "type": "integer", "minimum": 0, "default": 0 },
205
- "quietHours": { "type": "string", "pattern": "^\\d{2}:\\d{2}-\\d{2}:\\d{2}$", "description": "Local HH:MM-HH:MM quiet-hours range; supports cross-day ranges such as 22:00-07:00." },
206
- "sinkRetentionDays": { "type": "integer", "minimum": 1, "maximum": 90, "default": 7 }
471
+ "enabled": {
472
+ "type": "boolean",
473
+ "default": true
474
+ },
475
+ "severityFilter": {
476
+ "type": "array",
477
+ "items": {
478
+ "type": "string",
479
+ "enum": [
480
+ "info",
481
+ "warning",
482
+ "error",
483
+ "critical"
484
+ ]
485
+ },
486
+ "default": [
487
+ "warning",
488
+ "error",
489
+ "critical"
490
+ ]
491
+ },
492
+ "dedupWindowMs": {
493
+ "type": "integer",
494
+ "minimum": 1000,
495
+ "default": 30000
496
+ },
497
+ "batchWindowMs": {
498
+ "type": "integer",
499
+ "minimum": 0,
500
+ "default": 0
501
+ },
502
+ "quietHours": {
503
+ "type": "string",
504
+ "pattern": "^\\d{2}:\\d{2}-\\d{2}:\\d{2}$",
505
+ "description": "Local HH:MM-HH:MM quiet-hours range; supports cross-day ranges such as 22:00-07:00."
506
+ },
507
+ "sinkRetentionDays": {
508
+ "type": "integer",
509
+ "minimum": 1,
510
+ "maximum": 90,
511
+ "default": 7
512
+ }
207
513
  }
208
514
  },
209
515
  "observability": {
@@ -211,9 +517,22 @@
211
517
  "additionalProperties": false,
212
518
  "description": "Metric registry, heartbeat watcher, and metric file sink settings.",
213
519
  "properties": {
214
- "enabled": { "type": "boolean", "default": true },
215
- "pollIntervalMs": { "type": "integer", "minimum": 1000, "maximum": 60000, "default": 5000 },
216
- "metricRetentionDays": { "type": "integer", "minimum": 1, "maximum": 365, "default": 7 }
520
+ "enabled": {
521
+ "type": "boolean",
522
+ "default": true
523
+ },
524
+ "pollIntervalMs": {
525
+ "type": "integer",
526
+ "minimum": 1000,
527
+ "maximum": 60000,
528
+ "default": 5000
529
+ },
530
+ "metricRetentionDays": {
531
+ "type": "integer",
532
+ "minimum": 1,
533
+ "maximum": 365,
534
+ "default": 7
535
+ }
217
536
  }
218
537
  },
219
538
  "reliability": {
@@ -221,18 +540,54 @@
221
540
  "additionalProperties": false,
222
541
  "description": "Opt-in reliability controls for retry, recovery, and deadletter handling.",
223
542
  "properties": {
224
- "autoRetry": { "type": "boolean", "default": false },
225
- "autoRecover": { "type": "boolean", "default": false },
226
- "deadletterThreshold": { "type": "integer", "minimum": 1, "default": 3 },
543
+ "autoRetry": {
544
+ "type": "boolean",
545
+ "default": false
546
+ },
547
+ "autoRecover": {
548
+ "type": "boolean",
549
+ "default": false
550
+ },
551
+ "deadletterThreshold": {
552
+ "type": "integer",
553
+ "minimum": 1,
554
+ "default": 3
555
+ },
227
556
  "retryPolicy": {
228
557
  "type": "object",
229
558
  "additionalProperties": false,
230
559
  "properties": {
231
- "maxAttempts": { "type": "integer", "minimum": 1, "maximum": 10, "default": 3 },
232
- "backoffMs": { "type": "integer", "minimum": 100, "maximum": 60000, "default": 1000 },
233
- "jitterRatio": { "type": "number", "minimum": 0, "maximum": 1, "default": 0.3 },
234
- "exponentialFactor": { "type": "number", "minimum": 1, "maximum": 5, "default": 2 },
235
- "retryableErrors": { "type": "array", "items": { "type": "string", "minLength": 1 } }
560
+ "maxAttempts": {
561
+ "type": "integer",
562
+ "minimum": 1,
563
+ "maximum": 10,
564
+ "default": 3
565
+ },
566
+ "backoffMs": {
567
+ "type": "integer",
568
+ "minimum": 100,
569
+ "maximum": 60000,
570
+ "default": 1000
571
+ },
572
+ "jitterRatio": {
573
+ "type": "number",
574
+ "minimum": 0,
575
+ "maximum": 1,
576
+ "default": 0.3
577
+ },
578
+ "exponentialFactor": {
579
+ "type": "number",
580
+ "minimum": 1,
581
+ "maximum": 5,
582
+ "default": 2
583
+ },
584
+ "retryableErrors": {
585
+ "type": "array",
586
+ "items": {
587
+ "type": "string",
588
+ "minLength": 1
589
+ }
590
+ }
236
591
  }
237
592
  }
238
593
  }
@@ -242,10 +597,25 @@
242
597
  "additionalProperties": false,
243
598
  "description": "Optional OpenTelemetry metric export. Disabled by default.",
244
599
  "properties": {
245
- "enabled": { "type": "boolean", "default": false },
246
- "endpoint": { "type": "string", "minLength": 1 },
247
- "headers": { "type": "object", "additionalProperties": { "type": "string" } },
248
- "intervalMs": { "type": "integer", "minimum": 5000, "default": 60000 }
600
+ "enabled": {
601
+ "type": "boolean",
602
+ "default": false
603
+ },
604
+ "endpoint": {
605
+ "type": "string",
606
+ "minLength": 1
607
+ },
608
+ "headers": {
609
+ "type": "object",
610
+ "additionalProperties": {
611
+ "type": "string"
612
+ }
613
+ },
614
+ "intervalMs": {
615
+ "type": "integer",
616
+ "minimum": 5000,
617
+ "default": 60000
618
+ }
249
619
  }
250
620
  },
251
621
  "broker": {
@@ -253,11 +623,53 @@
253
623
  "additionalProperties": false,
254
624
  "description": "Phase 0 inter-pi broker config for cross-process communication.",
255
625
  "properties": {
256
- "enabled": { "type": "boolean" },
257
- "pathHashLen": { "type": "integer", "minimum": 4, "maximum": 32 },
258
- "maxFrameBytes": { "type": "integer", "minimum": 1024, "maximum": 1048576 },
259
- "outboundQueueCap": { "type": "integer", "minimum": 32, "maximum": 4096 }
626
+ "enabled": {
627
+ "type": "boolean"
628
+ },
629
+ "pathHashLen": {
630
+ "type": "integer",
631
+ "minimum": 4,
632
+ "maximum": 32
633
+ },
634
+ "maxFrameBytes": {
635
+ "type": "integer",
636
+ "minimum": 1024,
637
+ "maximum": 1048576
638
+ },
639
+ "outboundQueueCap": {
640
+ "type": "integer",
641
+ "minimum": 32,
642
+ "maximum": 4096
643
+ },
644
+ "waitMethodsEnabled": {
645
+ "type": "boolean",
646
+ "description": "WP-2/R2 (ADR-0 2026-08-17-waiting-producer-ask item 7): gate for the broker wait.* methods. Default false - fail-closed."
647
+ }
648
+ }
649
+ },
650
+ "nesting": {
651
+ "type": "object",
652
+ "additionalProperties": false,
653
+ "description": "Governed nesting (ADR-5 docs/decisions/2026-08-17-governed-nesting.md). Worker-to-grandchild delegation via the delegate tool. Default false - fail-closed until WP-5 completes.",
654
+ "properties": {
655
+ "enabled": {
656
+ "type": "boolean",
657
+ "sensitive": true,
658
+ "description": "Master switch. Privilege-raising: user config only; project-level nesting.enabled is ignored."
659
+ },
660
+ "maxSlots": {
661
+ "type": "integer",
662
+ "minimum": 1,
663
+ "maximum": 64,
664
+ "description": "Nested-slot budget override. Default max(1, floor(globalSem/2))."
665
+ },
666
+ "maxDepth": {
667
+ "type": "integer",
668
+ "minimum": 1,
669
+ "maximum": 10,
670
+ "description": "Max crew depth for delegate-driven nesting. Default 2 (mirrors PI_CREW_MAX_DEPTH clamp)."
671
+ }
260
672
  }
261
673
  }
262
674
  }
263
- }
675
+ }