ultimate-pi 0.18.1 → 0.19.1

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 (325) hide show
  1. package/.agents/skills/harness-debate-plan/SKILL.md +1 -1
  2. package/.agents/skills/harness-decisions/SKILL.md +1 -2
  3. package/.agents/skills/harness-governor/SKILL.md +6 -5
  4. package/.agents/skills/web-retrieval/SKILL.md +163 -0
  5. package/.agents/skills/wiki-autoresearch/SKILL.md +6 -6
  6. package/.pi/PACKAGING.md +4 -4
  7. package/.pi/SYSTEM.md +75 -123
  8. package/.pi/agents/harness/incident-recorder.md +0 -1
  9. package/.pi/agents/harness/planning/decompose.md +0 -2
  10. package/.pi/agents/harness/planning/execution-plan-author.md +0 -2
  11. package/.pi/agents/harness/planning/hypothesis-validator.md +0 -2
  12. package/.pi/agents/harness/planning/hypothesis.md +0 -2
  13. package/.pi/agents/harness/planning/implementation-researcher.md +1 -3
  14. package/.pi/agents/harness/planning/plan-adversary.md +0 -2
  15. package/.pi/agents/harness/planning/plan-evaluator.md +1 -3
  16. package/.pi/agents/harness/planning/planning-context.md +0 -2
  17. package/.pi/agents/harness/planning/review-integrator.md +0 -2
  18. package/.pi/agents/harness/planning/sprint-contract-auditor.md +0 -2
  19. package/.pi/agents/harness/planning/stack-researcher.md +5 -3
  20. package/.pi/agents/harness/reviewing/adversary.md +0 -2
  21. package/.pi/agents/harness/reviewing/evaluator.md +0 -2
  22. package/.pi/agents/harness/reviewing/tie-breaker.md +0 -2
  23. package/.pi/agents/harness/running/executor.md +0 -2
  24. package/.pi/agents/harness/sentrux-bootstrap.md +0 -1
  25. package/.pi/agents/harness/sentrux-steward.md +0 -2
  26. package/.pi/agents/harness/trace-librarian.md +0 -1
  27. package/.pi/agents/harness/web-retrieval/web-answerer.md +35 -0
  28. package/.pi/agents/harness/web-retrieval/web-criteria-verifier.md +28 -0
  29. package/.pi/agents/harness/web-retrieval/web-gap-analyzer.md +31 -0
  30. package/.pi/agents/harness/web-retrieval/web-query-expander-fast.md +34 -0
  31. package/.pi/agents/harness/web-retrieval/web-query-expander.md +60 -0
  32. package/.pi/agents/harness/web-retrieval/web-summarizer.md +18 -0
  33. package/.pi/extensions/agt-kill-switch.ts +57 -0
  34. package/.pi/extensions/agt-prompt-guard.ts +32 -0
  35. package/.pi/extensions/custom-footer.ts +46 -145
  36. package/.pi/extensions/custom-header.ts +1 -1
  37. package/.pi/extensions/custom-system-prompt.ts +1 -1
  38. package/.pi/extensions/debate-orchestrator.ts +6 -6
  39. package/.pi/extensions/harness-ask-user.ts +7 -7
  40. package/.pi/extensions/harness-debate-tools.ts +26 -42
  41. package/.pi/extensions/harness-lens.ts +94 -0
  42. package/.pi/extensions/harness-plan-approval.ts +11 -11
  43. package/.pi/extensions/harness-run-context.ts +1070 -876
  44. package/.pi/extensions/harness-subagent-governance.ts +8 -0
  45. package/.pi/extensions/harness-subagent-submit.ts +34 -163
  46. package/.pi/extensions/harness-subagents.ts +3 -3
  47. package/.pi/extensions/harness-telemetry.ts +2 -2
  48. package/.pi/extensions/harness-web-guard.ts +2 -1
  49. package/.pi/extensions/harness-web-tools.ts +691 -53
  50. package/.pi/extensions/policy-gate.ts +25 -5
  51. package/.pi/extensions/sentrux-rules-sync.ts +1 -1
  52. package/.pi/extensions/subagent-governance.ts +92 -0
  53. package/.pi/extensions/trace-recorder.ts +1 -1
  54. package/.pi/extensions/{ultimate-pi-vcc.ts → vcc-compaction.ts} +1 -1
  55. package/.pi/harness/README.md +6 -2
  56. package/.pi/harness/agents.manifest.json +46 -25
  57. package/.pi/harness/agents.policy.yaml +309 -0
  58. package/.pi/harness/docs/adrs/0030-inhouse-vcc-compaction.md +1 -1
  59. package/.pi/harness/docs/adrs/0035-plan-phase-review-gate.md +1 -1
  60. package/.pi/harness/docs/adrs/0045-harness-lens-minimal-contract.md +49 -0
  61. package/.pi/harness/docs/adrs/0046-agt-policy-engine.md +51 -0
  62. package/.pi/harness/docs/adrs/0047-agt-layered-security.md +39 -0
  63. package/.pi/harness/docs/adrs/0048-tool-call-hook-order.md +25 -0
  64. package/.pi/harness/docs/adrs/0049-agents-policy-manifest.md +36 -0
  65. package/.pi/harness/docs/adrs/0050-agentic-web-retrieval-stack.md +46 -0
  66. package/.pi/harness/docs/adrs/README.md +5 -0
  67. package/.pi/harness/docs/harness-web-search.md +97 -0
  68. package/.pi/harness/env.harness.template +9 -1
  69. package/.pi/harness/evolution/README.md +1 -2
  70. package/.pi/harness/examples/agents.policy.project.yaml +19 -0
  71. package/.pi/harness/examples/policies/custom-deny-bash.yaml +9 -0
  72. package/.pi/harness/examples/web-heuristic-angles.project.yaml +22 -0
  73. package/.pi/harness/policies/bash-denylists.yaml +5 -0
  74. package/.pi/harness/policies/defaults.yaml +51 -0
  75. package/.pi/harness/policies/orchestrator.yaml +18 -0
  76. package/.pi/harness/policies/phases.yaml +10 -0
  77. package/.pi/harness/policies/roles.yaml +5 -0
  78. package/.pi/harness/policies/web-guard.yaml +5 -0
  79. package/.pi/harness/policies/workflow-sequences.yaml +9 -0
  80. package/.pi/harness/sentrux/architecture.manifest.json +26 -4
  81. package/.pi/harness/specs/observation.schema.json +2 -1
  82. package/.pi/harness/web-heuristic-angles.json +278 -0
  83. package/.pi/harness/web-heuristic-angles.yaml +182 -0
  84. package/.pi/lib/agents-policy.d.mts +70 -0
  85. package/.pi/lib/agents-policy.mjs +331 -0
  86. package/.pi/lib/agents-policy.ts +19 -0
  87. package/.pi/lib/agt/audit-run-sink.ts +52 -0
  88. package/.pi/lib/agt/build-evaluation-context.ts +285 -0
  89. package/.pi/lib/agt/config.ts +28 -0
  90. package/.pi/lib/agt/delegation.ts +69 -0
  91. package/.pi/lib/agt/evaluate-policy.ts +56 -0
  92. package/.pi/lib/agt/identity-registry.ts +41 -0
  93. package/.pi/lib/agt/index.ts +55 -0
  94. package/.pi/lib/agt/kill-switch-state.ts +11 -0
  95. package/.pi/lib/agt/legacy-evaluate.ts +101 -0
  96. package/.pi/lib/agt/policy-engine.ts +154 -0
  97. package/.pi/lib/agt/rings.ts +21 -0
  98. package/.pi/lib/agt/sre-hooks.ts +45 -0
  99. package/.pi/lib/agt/trust-run-store.ts +26 -0
  100. package/.pi/lib/agt/workflow-history.ts +29 -0
  101. package/.pi/lib/agt-governance-active.ts +14 -0
  102. package/.pi/lib/agt-tool-guard.ts +78 -0
  103. package/.pi/lib/ask-user/dialog.ts +314 -0
  104. package/.pi/{extensions/lib → lib}/debate-bus-core.ts +10 -10
  105. package/.pi/{extensions/lib → lib}/debate-bus-state.ts +1 -1
  106. package/.pi/{extensions/lib → lib}/extension-load-guard.ts +13 -2
  107. package/.pi/lib/harness-agt-tool-guard.ts +5 -0
  108. package/.pi/{extensions/lib → lib}/harness-artifact-gate.ts +1 -1
  109. package/.pi/lib/harness-debate-core-deps.ts +14 -0
  110. package/.pi/lib/harness-debate-workflow-deps.ts +43 -0
  111. package/.pi/lib/harness-lens/.gitattributes +1 -0
  112. package/.pi/lib/harness-lens/clients/edit-autopatch.ts +88 -0
  113. package/.pi/lib/harness-lens/clients/file-kinds.ts +380 -0
  114. package/.pi/lib/harness-lens/clients/file-time.ts +215 -0
  115. package/.pi/lib/harness-lens/clients/file-utils.ts +484 -0
  116. package/.pi/lib/harness-lens/clients/format-service.ts +276 -0
  117. package/.pi/lib/harness-lens/clients/formatters.ts +1000 -0
  118. package/.pi/lib/harness-lens/clients/git-guard.ts +31 -0
  119. package/.pi/lib/harness-lens/clients/indent-retarget.ts +90 -0
  120. package/.pi/lib/harness-lens/clients/installer/index.ts +2368 -0
  121. package/.pi/lib/harness-lens/clients/latency-logger.ts +80 -0
  122. package/.pi/lib/harness-lens/clients/lens-config.ts +43 -0
  123. package/.pi/lib/harness-lens/clients/lens-events.ts +164 -0
  124. package/.pi/lib/harness-lens/clients/lsp/aggregation.ts +91 -0
  125. package/.pi/lib/harness-lens/clients/lsp/client.ts +1466 -0
  126. package/.pi/lib/harness-lens/clients/lsp/config.ts +216 -0
  127. package/.pi/lib/harness-lens/clients/lsp/edits.ts +297 -0
  128. package/.pi/lib/harness-lens/clients/lsp/index.ts +1355 -0
  129. package/.pi/lib/harness-lens/clients/lsp/interactive-install.ts +424 -0
  130. package/.pi/lib/harness-lens/clients/lsp/language.ts +223 -0
  131. package/.pi/lib/harness-lens/clients/lsp/launch.ts +939 -0
  132. package/.pi/lib/harness-lens/clients/lsp/lsp-index.ts +11 -0
  133. package/.pi/lib/harness-lens/clients/lsp/path-utils.ts +12 -0
  134. package/.pi/lib/harness-lens/clients/lsp/server-strategies.ts +81 -0
  135. package/.pi/lib/harness-lens/clients/lsp/server.ts +1971 -0
  136. package/.pi/lib/harness-lens/clients/path-utils.ts +182 -0
  137. package/.pi/lib/harness-lens/clients/pipeline.ts +360 -0
  138. package/.pi/lib/harness-lens/clients/project-profile.ts +117 -0
  139. package/.pi/lib/harness-lens/clients/runtime-agent-end.ts +112 -0
  140. package/.pi/lib/harness-lens/clients/runtime-config.ts +33 -0
  141. package/.pi/lib/harness-lens/clients/runtime-coordinator.ts +186 -0
  142. package/.pi/lib/harness-lens/clients/runtime-tool-result.ts +171 -0
  143. package/.pi/lib/harness-lens/clients/safe-spawn.ts +339 -0
  144. package/.pi/lib/harness-lens/clients/secrets-scanner.ts +214 -0
  145. package/.pi/lib/harness-lens/clients/tool-policy.ts +2072 -0
  146. package/.pi/lib/harness-lens/clients/types.ts +59 -0
  147. package/.pi/lib/harness-lens/clients/widget-state.ts +283 -0
  148. package/.pi/lib/harness-lens/index.ts +532 -0
  149. package/.pi/lib/harness-lens/tools/lsp-diagnostics.ts +706 -0
  150. package/.pi/lib/harness-lens/tools/lsp-navigation.ts +1246 -0
  151. package/.pi/{extensions/lib → lib}/harness-posthog.ts +3 -0
  152. package/.pi/lib/harness-run-context-responses.ts +9 -0
  153. package/.pi/lib/harness-run-context.ts +0 -2
  154. package/.pi/{extensions/lib/spawn-policy.ts → lib/harness-spawn-policy.ts} +1 -0
  155. package/.pi/{extensions/lib → lib}/harness-spawn-topology.ts +1 -1
  156. package/.pi/lib/harness-subagent-auth.ts +81 -0
  157. package/.pi/{extensions/lib → lib}/harness-subagent-precheck.ts +10 -7
  158. package/.pi/{extensions/lib → lib}/harness-subagent-submit-pipeline.ts +3 -3
  159. package/.pi/lib/harness-subagent-submit-register.ts +163 -0
  160. package/.pi/{extensions/lib → lib}/harness-subagent-submit-registry.ts +1 -37
  161. package/.pi/{extensions/lib → lib}/harness-subagents-bridge.ts +74 -14
  162. package/.pi/{extensions/lib → lib}/harness-subprocess-bootstrap.ts +1 -1
  163. package/.pi/lib/harness-web/artifacts.ts +200 -0
  164. package/.pi/lib/harness-web/cache.ts +369 -0
  165. package/.pi/{extensions/lib → lib}/harness-web/run-cli.ts +42 -2
  166. package/.pi/{extensions/lib → lib}/plan-approval/create-plan.ts +2 -2
  167. package/.pi/{extensions/lib → lib}/plan-approval/format-plan.ts +2 -2
  168. package/.pi/{extensions/lib → lib}/plan-approval/plan-review.ts +162 -201
  169. package/.pi/{extensions/lib → lib}/plan-approval/render.ts +1 -1
  170. package/.pi/{extensions/lib → lib}/plan-approval/resolve-disk.ts +2 -2
  171. package/.pi/{extensions/lib → lib}/plan-approval/types.ts +1 -1
  172. package/.pi/{extensions/lib → lib}/plan-approval/validate.ts +3 -3
  173. package/.pi/{extensions/lib → lib}/plan-debate-envelope.ts +1 -1
  174. package/.pi/{extensions/lib → lib}/plan-debate-gate.ts +1 -1
  175. package/.pi/{extensions/lib → lib}/plan-debate-lane.ts +1 -4
  176. package/.pi/{extensions/lib → lib}/plan-messenger.ts +1 -1
  177. package/.pi/prompts/harness-plan.md +2 -1
  178. package/.pi/prompts/harness-setup.md +40 -65
  179. package/.pi/scripts/README.md +2 -5
  180. package/.pi/scripts/gen-web-heuristic-angles-json.mjs +24 -0
  181. package/.pi/scripts/generate-agents-policy-yaml.mjs +148 -0
  182. package/.pi/scripts/harness-agents-manifest.mjs +60 -3
  183. package/.pi/scripts/harness-agt-doctor.ts +36 -0
  184. package/.pi/scripts/harness-cli-verify.sh +14 -2
  185. package/.pi/scripts/harness-verify.mjs +191 -39
  186. package/.pi/scripts/harness-web-policy-guard.mjs +3 -3
  187. package/.pi/scripts/harness-web.py +218 -15
  188. package/.pi/scripts/harness_web/deep_search.py +55 -0
  189. package/.pi/scripts/harness_web/evidence_bundle.py +47 -0
  190. package/.pi/scripts/harness_web/find_similar.py +88 -0
  191. package/.pi/scripts/harness_web/heuristic_angles_shipped.py +85 -0
  192. package/.pi/scripts/harness_web/heuristic_config.py +251 -0
  193. package/.pi/scripts/harness_web/highlights.py +47 -0
  194. package/.pi/scripts/harness_web/multi_search.py +59 -0
  195. package/.pi/scripts/harness_web/output.py +24 -0
  196. package/.pi/scripts/harness_web/query_angles.py +116 -0
  197. package/.pi/scripts/harness_web/rank.py +163 -0
  198. package/.pi/scripts/harness_web/scrape.py +30 -0
  199. package/.pi/scripts/tests/test_harness_web_heuristic_config.py +132 -0
  200. package/.pi/scripts/tests/test_harness_web_query_angles.py +45 -0
  201. package/.pi/scripts/tests/test_harness_web_rank.py +56 -0
  202. package/.pi/scripts/validate-plan-dag.mjs +65 -74
  203. package/.pi/scripts/vendor-pi-vcc-settings.stub.ts +2 -2
  204. package/.pi/scripts/vendor-sync-pi-vcc.sh +1 -1
  205. package/.pi/skills/architecture/broker-domain/SKILL.md +65 -0
  206. package/.pi/skills/architecture/cqrs/SKILL.md +63 -0
  207. package/.pi/skills/architecture/event-driven/SKILL.md +60 -0
  208. package/.pi/skills/architecture/hexagonal-ports-adapters/SKILL.md +66 -0
  209. package/.pi/skills/architecture/layered/SKILL.md +68 -0
  210. package/.pi/skills/architecture/microkernel/SKILL.md +62 -0
  211. package/.pi/skills/architecture/microservices/SKILL.md +64 -0
  212. package/.pi/skills/architecture/modular-monolith/SKILL.md +65 -0
  213. package/.pi/skills/architecture/orchestration-driven-soa/SKILL.md +61 -0
  214. package/.pi/skills/architecture/pipeline/SKILL.md +63 -0
  215. package/.pi/skills/architecture/service-based/SKILL.md +64 -0
  216. package/.pi/skills/architecture/service-mesh/SKILL.md +60 -0
  217. package/.pi/skills/architecture/space-based/SKILL.md +60 -0
  218. package/.pi/skills/ast-grep/SKILL.md +40 -321
  219. package/.pi/skills/delivery/debugging-discipline/SKILL.md +36 -0
  220. package/.pi/skills/delivery/documentation-update/SKILL.md +33 -0
  221. package/.pi/skills/delivery/requirements-to-implementation/SKILL.md +34 -0
  222. package/.pi/skills/delivery/risk-based-verification/SKILL.md +43 -0
  223. package/.pi/skills/delivery/tradeoff-analysis/SKILL.md +34 -0
  224. package/.pi/skills/engineering/api-contract-design/SKILL.md +38 -0
  225. package/.pi/skills/engineering/cohesion-coupling/SKILL.md +43 -0
  226. package/.pi/skills/engineering/complexity-control/SKILL.md +31 -0
  227. package/.pi/skills/engineering/defensive-programming/SKILL.md +38 -0
  228. package/.pi/skills/engineering/dependency-management/SKILL.md +29 -0
  229. package/.pi/skills/engineering/domain-modeling/SKILL.md +32 -0
  230. package/.pi/skills/engineering/error-handling/SKILL.md +37 -0
  231. package/.pi/skills/engineering/legacy-code-seams/SKILL.md +35 -0
  232. package/.pi/skills/engineering/naming-and-intent/SKILL.md +29 -0
  233. package/.pi/skills/engineering/refactoring-safe-evolution/SKILL.md +35 -0
  234. package/.pi/skills/engineering/routine-function-design/SKILL.md +34 -0
  235. package/.pi/skills/engineering/small-change-discipline/SKILL.md +35 -0
  236. package/.pi/skills/lsp-navigation/SKILL.md +89 -0
  237. package/.pi/skills/quality/code-review-self-check/SKILL.md +35 -0
  238. package/.pi/skills/quality/privacy-data-handling/SKILL.md +26 -0
  239. package/.pi/skills/quality/security-review/SKILL.md +34 -0
  240. package/.pi/skills/quality/test-strategy/SKILL.md +33 -0
  241. package/.pi/skills/quality/testability-design/SKILL.md +33 -0
  242. package/.pi/skills/systems/concurrency-safety/SKILL.md +32 -0
  243. package/.pi/skills/systems/data-modeling-migrations/SKILL.md +31 -0
  244. package/.pi/skills/systems/observability-instrumentation/SKILL.md +32 -0
  245. package/.pi/skills/systems/performance-measurement/SKILL.md +35 -0
  246. package/.pi/skills/systems/reliability-design/SKILL.md +32 -0
  247. package/.sentrux/rules.toml +20 -4
  248. package/AGENTS.md +7 -2
  249. package/CHANGELOG.md +20 -0
  250. package/README.md +3 -12
  251. package/THIRD_PARTY_NOTICES.md +12 -21
  252. package/package.json +17 -7
  253. package/vendor/pi-subagents/src/agents.ts +45 -1
  254. package/vendor/pi-subagents/src/subagents.ts +866 -811
  255. package/vendor/pi-vcc/src/core/brief.ts +68 -99
  256. package/vendor/pi-vcc/src/core/settings.ts +2 -2
  257. package/.agents/skills/caveman/SKILL.md +0 -67
  258. package/.agents/skills/scrapling-web/SKILL.md +0 -98
  259. package/.pi/agents/harness/meta-optimizer.md +0 -36
  260. package/.pi/extensions/00-posthog-network-bootstrap.ts +0 -11
  261. package/.pi/extensions/lib/ask-user/dialog.ts +0 -260
  262. package/.pi/extensions/lib/harness-subagent-auth.ts +0 -207
  263. package/.pi/extensions/lib/harness-subagent-policy.ts +0 -236
  264. package/.pi/extensions/pi-model-router-harness.ts +0 -42
  265. package/.pi/harness/evolution/meta-optimizer.mjs +0 -99
  266. package/.pi/harness/specs/router-tuning-proposal.schema.json +0 -114
  267. package/.pi/model-router.example.json +0 -36
  268. package/.pi/prompts/harness-critic.md +0 -10
  269. package/.pi/prompts/harness-eval.md +0 -10
  270. package/.pi/prompts/harness-router-tune.md +0 -52
  271. package/.pi/scripts/harness-generate-model-router.mjs +0 -327
  272. package/.pi/scripts/harness-model-router-routing.test.mjs +0 -97
  273. package/.pi/scripts/harness-sync-model-router.mjs +0 -97
  274. package/.pi/scripts/harness_web/__pycache__/__init__.cpython-314.pyc +0 -0
  275. package/.pi/scripts/harness_web/__pycache__/config.cpython-314.pyc +0 -0
  276. package/.pi/scripts/harness_web/__pycache__/output.cpython-314.pyc +0 -0
  277. package/.pi/scripts/harness_web/__pycache__/scrape.cpython-314.pyc +0 -0
  278. package/.pi/scripts/harness_web/__pycache__/search.cpython-314.pyc +0 -0
  279. package/.pi/scripts/harness_web/__pycache__/search_ddg.cpython-314.pyc +0 -0
  280. package/.pi/scripts/harness_web/__pycache__/search_searxng.cpython-314.pyc +0 -0
  281. package/.pi/scripts/vendor-sync-pi-model-router.sh +0 -47
  282. package/vendor/pi-model-router/.prettierignore +0 -4
  283. package/vendor/pi-model-router/.prettierrc +0 -5
  284. package/vendor/pi-model-router/AGENTS.md +0 -39
  285. package/vendor/pi-model-router/LICENSE +0 -21
  286. package/vendor/pi-model-router/README.md +0 -99
  287. package/vendor/pi-model-router/UPSTREAM_PIN.md +0 -10
  288. package/vendor/pi-model-router/docs/ARCHITECTURE.md +0 -54
  289. package/vendor/pi-model-router/extensions/commands.ts +0 -720
  290. package/vendor/pi-model-router/extensions/config.ts +0 -348
  291. package/vendor/pi-model-router/extensions/constants.ts +0 -1
  292. package/vendor/pi-model-router/extensions/index.ts +0 -478
  293. package/vendor/pi-model-router/extensions/provider.ts +0 -580
  294. package/vendor/pi-model-router/extensions/routing.ts +0 -564
  295. package/vendor/pi-model-router/extensions/state.ts +0 -52
  296. package/vendor/pi-model-router/extensions/types.ts +0 -95
  297. package/vendor/pi-model-router/extensions/ui.ts +0 -144
  298. package/vendor/pi-model-router/model-router.example.json +0 -48
  299. package/vendor/pi-model-router/package.json +0 -48
  300. package/vendor/pi-model-router/tsconfig.json +0 -16
  301. /package/.pi/{prompts → harness/docs}/planning-rubrics.md +0 -0
  302. /package/.pi/{extensions/lib → lib}/ask-user/fallback.ts +0 -0
  303. /package/.pi/{extensions/lib → lib}/ask-user/render.ts +0 -0
  304. /package/.pi/{extensions/lib → lib}/ask-user/schema.ts +0 -0
  305. /package/.pi/{extensions/lib → lib}/ask-user/types.ts +0 -0
  306. /package/.pi/{extensions/lib → lib}/ask-user/validate-core.mjs +0 -0
  307. /package/.pi/{extensions/lib → lib}/ask-user/validate.ts +0 -0
  308. /package/.pi/{extensions/lib → lib}/harness-cocoindex-refresh.ts +0 -0
  309. /package/.pi/{extensions/lib → lib}/harness-paths.ts +0 -0
  310. /package/.pi/{extensions/lib → lib}/harness-spawn-budget.ts +0 -0
  311. /package/.pi/{extensions/lib → lib}/harness-vcc-settings.ts +0 -0
  312. /package/.pi/{extensions/lib → lib}/plan-approval/dialog.ts +0 -0
  313. /package/.pi/{extensions/lib → lib}/plan-approval/schema.ts +0 -0
  314. /package/.pi/{extensions/lib → lib}/plan-approval-readiness.ts +0 -0
  315. /package/.pi/{extensions/lib → lib}/plan-debate-eligibility.ts +0 -0
  316. /package/.pi/{extensions/lib → lib}/plan-debate-focus.ts +0 -0
  317. /package/.pi/{extensions/lib → lib}/plan-debate-id.ts +0 -0
  318. /package/.pi/{extensions/lib → lib}/plan-debate-lanes.ts +0 -0
  319. /package/.pi/{extensions/lib → lib}/plan-debate-round-status.ts +0 -0
  320. /package/.pi/{extensions/lib → lib}/plan-debate-write-guard.ts +0 -0
  321. /package/.pi/{extensions/lib → lib}/plan-review-gate.ts +0 -0
  322. /package/.pi/{extensions/lib → lib}/plan-review-integrator-rules.ts +0 -0
  323. /package/.pi/{extensions/lib → lib}/plan-scope-guard.ts +0 -0
  324. /package/.pi/{extensions/lib → lib}/posthog-client.ts +0 -0
  325. /package/.pi/{extensions/lib → lib}/posthog-node.d.ts +0 -0
@@ -9,10 +9,8 @@
9
9
  */
10
10
 
11
11
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
12
- import {
13
- evaluateContextModeMutation,
14
- isMutatingBash,
15
- } from "../lib/harness-context-mode-policy.js";
12
+ import { isHarnessAgtPolicyEnabled } from "../lib/agt/config.js";
13
+ import { evaluateAgtHarnessToolCall } from "../lib/harness-agt-tool-guard.js";
16
14
  import { isHarnessProjectEnabled } from "../lib/harness-project-config.js";
17
15
  import {
18
16
  extractWritePathFromToolInput,
@@ -32,7 +30,7 @@ import {
32
30
  userVisiblePromptSlice,
33
31
  validatePlanPacket,
34
32
  } from "../lib/harness-run-context.js";
35
- import { bootstrapHarnessSubprocessFromEnv } from "./lib/harness-subprocess-bootstrap.js";
33
+ import { bootstrapHarnessSubprocessFromEnv } from "../lib/harness-subprocess-bootstrap.js";
36
34
 
37
35
  type HarnessPhase = "plan" | "execute" | "evaluate" | "adversary" | "merge";
38
36
 
@@ -61,6 +59,9 @@ const PHASE_ORDER: HarnessPhase[] = [
61
59
  "merge",
62
60
  ];
63
61
 
62
+ // @ts-expect-error pi extensions run as ESM
63
+ const MODULE_URL = import.meta.url;
64
+
64
65
  const MUTATING_TOOLS = new Set(["write", "edit"]);
65
66
 
66
67
  function nowIso(): string {
@@ -250,6 +251,19 @@ export default function policyGate(pi: ExtensionAPI) {
250
251
  const entries = ctx.sessionManager.getEntries();
251
252
  const projectRoot = process.cwd();
252
253
  const sessionId = ctx.sessionManager.getSessionId();
254
+
255
+ if (isHarnessAgtPolicyEnabled()) {
256
+ return evaluateAgtHarnessToolCall({
257
+ moduleUrl: MODULE_URL,
258
+ toolName: event.toolName,
259
+ toolInput: event.input as Record<string, unknown>,
260
+ policyState: state,
261
+ entries,
262
+ sessionId,
263
+ projectRoot,
264
+ });
265
+ }
266
+
253
267
  const runCtx = getLatestRunContext(entries);
254
268
 
255
269
  if (MUTATING_TOOLS.has(event.toolName)) {
@@ -274,6 +288,9 @@ export default function policyGate(pi: ExtensionAPI) {
274
288
 
275
289
  if (event.toolName === "bash") {
276
290
  const command = String(event.input.command ?? "");
291
+ const { isMutatingBash } = await import(
292
+ "../lib/harness-context-mode-policy.js"
293
+ );
277
294
  if (!isMutatingBash(command)) return undefined;
278
295
  if (state.aborted) {
279
296
  return {
@@ -290,6 +307,9 @@ export default function policyGate(pi: ExtensionAPI) {
290
307
  }
291
308
  }
292
309
 
310
+ const { evaluateContextModeMutation } = await import(
311
+ "../lib/harness-context-mode-policy.js"
312
+ );
293
313
  const ctxDecision = evaluateContextModeMutation(
294
314
  event.toolName,
295
315
  event.input as Record<string, unknown>,
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { spawn } from "node:child_process";
6
6
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
7
+ import { resolveHarnessScript } from "../lib/harness-paths.js";
7
8
  import { isHarnessProjectEnabled } from "../lib/harness-project-config.js";
8
- import { resolveHarnessScript } from "./lib/harness-paths.js";
9
9
 
10
10
  function resolveSyncScript(): string {
11
11
  return resolveHarnessScript(
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Subprocess governance bundle: AGT policy on all tool_call + harness submit_* tools.
3
+ * Loaded via `pi --no-extensions -e subagent-governance.ts` for every subagent spawn.
4
+ */
5
+
6
+ import { join } from "node:path";
7
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
8
+ import {
9
+ getAgentKind,
10
+ harnessSubagentPhaseHint,
11
+ } from "../lib/agents-policy.mjs";
12
+ import { evaluateAgtToolCall } from "../lib/agt-tool-guard.js";
13
+ import { claimSubagentGovernanceLoad } from "../lib/extension-load-guard.js";
14
+ import { getHarnessPackageRoot } from "../lib/harness-paths.js";
15
+ import { registerHarnessSubagentSubmitTools } from "../lib/harness-subagent-submit-register.js";
16
+
17
+ // @ts-expect-error pi extensions run as ESM
18
+ const MODULE_URL = import.meta.url;
19
+
20
+ function policyStateFromEnv(packageRoot: string, projectRoot: string) {
21
+ const agentId = process.env.HARNESS_AGENT_ID?.trim() ?? "unknown";
22
+ const phase =
23
+ (process.env.HARNESS_SUBAGENT_PHASE_HINT?.trim() as
24
+ | "plan"
25
+ | "execute"
26
+ | "evaluate"
27
+ | "adversary"
28
+ | "merge") ??
29
+ (harnessSubagentPhaseHint(packageRoot, projectRoot, agentId) as
30
+ | "plan"
31
+ | "execute"
32
+ | "evaluate"
33
+ | "adversary"
34
+ | "merge"
35
+ | null) ??
36
+ "plan";
37
+ return {
38
+ phase,
39
+ approvedPlan: phase === "execute" || phase === "merge",
40
+ planId: process.env.HARNESS_PLAN_ID?.trim() || null,
41
+ aborted: false,
42
+ budgetBypass: false,
43
+ };
44
+ }
45
+
46
+ export function subagentGovernanceExtensionPath(packageRoot: string): string {
47
+ return join(packageRoot, ".pi", "extensions", "subagent-governance.ts");
48
+ }
49
+
50
+ /** @deprecated Use subagentGovernanceExtensionPath */
51
+ export function harnessSubagentGovernanceExtensionPath(
52
+ packageRoot: string,
53
+ ): string {
54
+ return subagentGovernanceExtensionPath(packageRoot);
55
+ }
56
+
57
+ export default function subagentGovernance(pi: ExtensionAPI) {
58
+ if (!claimSubagentGovernanceLoad("subagent-governance", MODULE_URL)) return;
59
+ if (process.env.PI_HARNESS_SUBPROCESS !== "1") {
60
+ return;
61
+ }
62
+
63
+ const packageRoot = getHarnessPackageRoot(MODULE_URL);
64
+ const projectRoot = process.env.HARNESS_PROJECT_ROOT?.trim() || process.cwd();
65
+ const agentId = process.env.HARNESS_AGENT_ID?.trim() ?? "unknown";
66
+
67
+ if (agentId.startsWith("harness/")) {
68
+ registerHarnessSubagentSubmitTools(pi, packageRoot);
69
+ const kind = getAgentKind(packageRoot, projectRoot, agentId);
70
+ process.env.HARNESS_SUBAGENT_PHASE_HINT =
71
+ kind === "executor"
72
+ ? "execute"
73
+ : kind === "evaluator"
74
+ ? "evaluate"
75
+ : kind === "adversary"
76
+ ? "adversary"
77
+ : "plan";
78
+ }
79
+
80
+ pi.on("tool_call", async (event, ctx) => {
81
+ const state = policyStateFromEnv(packageRoot, projectRoot);
82
+ return evaluateAgtToolCall({
83
+ moduleUrl: MODULE_URL,
84
+ toolName: event.toolName,
85
+ toolInput: (event.input ?? {}) as Record<string, unknown>,
86
+ policyState: state,
87
+ entries: ctx.sessionManager.getEntries(),
88
+ sessionId: ctx.sessionManager.getSessionId(),
89
+ projectRoot: ctx.cwd,
90
+ });
91
+ });
92
+ }
@@ -10,6 +10,7 @@
10
10
  import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
11
11
  import { join } from "node:path";
12
12
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
13
+ import { captureHarnessEvent } from "../lib/harness-posthog.js";
13
14
  import { isHarnessProjectEnabled } from "../lib/harness-project-config.js";
14
15
  import {
15
16
  getLatestRunContext,
@@ -20,7 +21,6 @@ import {
20
21
  phaseTraceFileName,
21
22
  saveRunContextToDisk,
22
23
  } from "../lib/harness-run-context.js";
23
- import { captureHarnessEvent } from "./lib/harness-posthog.js";
24
24
 
25
25
  interface ToolSpan {
26
26
  tool_call_id: string;
@@ -11,7 +11,7 @@
11
11
 
12
12
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
13
13
  import registerVcc from "../../vendor/pi-vcc/index.js";
14
- import { claimExtensionLoad } from "./lib/extension-load-guard.js";
14
+ import { claimExtensionLoad } from "../lib/extension-load-guard.js";
15
15
 
16
16
  // @ts-expect-error pi extensions run as ESM
17
17
  const MODULE_URL = import.meta.url;
@@ -8,7 +8,7 @@ Phase 1–2 scaffold for the Pi harness runtime surfaces.
8
8
  - `debates/` - debate round artifacts and consensus packets.
9
9
  - `docs/adrs/` - team-shared Architectural Decision Records ([index](docs/adrs/README.md)).
10
10
  - `evals/smoke/` - deterministic fixtures (no CI LLM).
11
- - `evolution/` - self-healing rules + meta-optimizer (JSONL-first).
11
+ - `evolution/` - self-healing rules and chaos drills (JSONL-first).
12
12
  - `corpus/` - ingest notes for graphify/raw sources.
13
13
  - `sentrux/` - `architecture.manifest.json` source for `.sentrux/rules.toml` ([ADR 0009](docs/adrs/0009-sentrux-rules-lifecycle.md)).
14
14
 
@@ -31,7 +31,11 @@ manifest (`package.json`).
31
31
 
32
32
  - `harness-run-context.ts` - active run + plan injection; short commands without run/plan args
33
33
  - `harness-live-widget.ts` - footer status (current/next phase + plain-language status hint; no run id in UI)
34
- - `policy-gate.ts` - phase state machine + plan-before-mutate enforcement
34
+ - `policy-gate.ts` - phase state machine; tool allow/deny via AGT `PolicyEngine` (YAML under `.pi/harness/policies/`, see [ADR 0046](docs/adrs/0046-agt-policy-engine.md))
35
+ - `subagent-governance.ts` (alias `harness-subagent-governance.ts`) - subprocess AGT + `submit_*` for all subagents
36
+ - **Agent tool SSOT:** `.pi/harness/agents.policy.yaml` (package) and optional `<project>/.pi/agents.policy.yaml` — not agent `.md` frontmatter ([ADR 0049](docs/adrs/0049-agents-policy-manifest.md))
37
+ - **Project AGT rules:** `<project>/.pi/policies/*.yaml` merged after package policies
38
+ - `agt-prompt-guard.ts` / `agt-kill-switch.ts` - PromptDefense + kill switch ([ADR 0047](docs/adrs/0047-agt-layered-security.md))
35
39
  - `budget-guard.ts` - hard-stop token budget checks + budget exhausted artifacts
36
40
  - `trace-recorder.ts` - append-only run traces + HarnessRunRecord + compact index
37
41
  - `harness-telemetry.ts` - PostHog `harness_*` domain events (dual layer with `@posthog/pi`)
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "schema_version": "1.0.0",
3
3
  "package": "ultimate-pi",
4
- "package_version": "0.18.0",
5
- "generated_at": "2026-05-23T19:00:12.987Z",
4
+ "package_version": "0.19.0",
5
+ "generated_at": "2026-05-26T06:39:19.250Z",
6
+ "policy_sha256": "f0eb41bc6a877a237087e87762ce11908e93755a42d58f19d6573665b198665f",
6
7
  "agents": {
7
8
  "pi-pi/agent-expert": {
8
9
  "path": ".pi/agents/pi-pi/agent-expert.md",
@@ -46,67 +47,87 @@
46
47
  },
47
48
  "harness/incident-recorder": {
48
49
  "path": ".pi/agents/harness/incident-recorder.md",
49
- "sha256": "d42fa45de1a2fe3842d075c6f319315266588942e314f1b650caabac39bdc29a"
50
- },
51
- "harness/meta-optimizer": {
52
- "path": ".pi/agents/harness/meta-optimizer.md",
53
- "sha256": "cbaab35367126796b7136389a02ab41b4fd1fe7098cf83be562d7b7493ccc297"
50
+ "sha256": "4efbdb9482b1038e2bd08cae9898aed9ef983903107ddab6c84d51436d5d3296"
54
51
  },
55
52
  "harness/sentrux-bootstrap": {
56
53
  "path": ".pi/agents/harness/sentrux-bootstrap.md",
57
- "sha256": "3a0b43b94386a7c541b8a806a37524a5e53f1c8049270db7a420680df5799eeb"
54
+ "sha256": "6132e83b400b6bc381841a09205eda00a2349ec127368f9d164631d73faadd1a"
58
55
  },
59
56
  "harness/sentrux-steward": {
60
57
  "path": ".pi/agents/harness/sentrux-steward.md",
61
- "sha256": "0e63175d817adc0d65876f5c24fb54e4882081caf939ff9c658afee51fc6889c"
58
+ "sha256": "d806cbf2c2e211c6b4c95e35893bc250c8a0fab6fae92190766eab16cd091d51"
62
59
  },
63
60
  "harness/trace-librarian": {
64
61
  "path": ".pi/agents/harness/trace-librarian.md",
65
- "sha256": "336b3f3f6141cef8750ab18d29bbe454caf26973830a86afe099d9e4ad8b0abe"
62
+ "sha256": "083ce6a3508bab2f5bc57e8ab13256c55fff58e0eac95cb6542bdd47fd02de65"
63
+ },
64
+ "harness/web-retrieval/web-answerer": {
65
+ "path": ".pi/agents/harness/web-retrieval/web-answerer.md",
66
+ "sha256": "c9876fb34aa6704c1a8eb9f4db4ada71c5a762790db411a1b01104a81745215d"
67
+ },
68
+ "harness/web-retrieval/web-criteria-verifier": {
69
+ "path": ".pi/agents/harness/web-retrieval/web-criteria-verifier.md",
70
+ "sha256": "bb0a9b514964f6f64ef539c1d766ff28ee23c4d9199dc4cae0f41b0fe7fdc860"
71
+ },
72
+ "harness/web-retrieval/web-gap-analyzer": {
73
+ "path": ".pi/agents/harness/web-retrieval/web-gap-analyzer.md",
74
+ "sha256": "f4487993f561c7141b22c79f9afff52986466c5b3af4f3ffb0e75e30a6da025a"
75
+ },
76
+ "harness/web-retrieval/web-query-expander-fast": {
77
+ "path": ".pi/agents/harness/web-retrieval/web-query-expander-fast.md",
78
+ "sha256": "161c5ce82e013af7aaec219b4ccb6b8c557bf5768f8e0c85b1d8f243056b015c"
79
+ },
80
+ "harness/web-retrieval/web-query-expander": {
81
+ "path": ".pi/agents/harness/web-retrieval/web-query-expander.md",
82
+ "sha256": "b522532e15759c747ff92198aa6db2624accd0998a4e0af4cb086617734f5ce7"
83
+ },
84
+ "harness/web-retrieval/web-summarizer": {
85
+ "path": ".pi/agents/harness/web-retrieval/web-summarizer.md",
86
+ "sha256": "0c25f814ded534f6d190cc50ff141306d26dba98eff2ad6d51b56e42c143861d"
66
87
  },
67
88
  "harness/running/executor": {
68
89
  "path": ".pi/agents/harness/running/executor.md",
69
- "sha256": "a48c37b2922b98fe20156367ae8c8fe761ae139153d402035a5aa35c9a14f106"
90
+ "sha256": "219c9307567acc95a9c1b1340f899fac860406fb2c2e84f51b4a8c3ba3a0e2ec"
70
91
  },
71
92
  "harness/reviewing/adversary": {
72
93
  "path": ".pi/agents/harness/reviewing/adversary.md",
73
- "sha256": "697ee7c784e8eb30ce96f4f16e9bb5f9cdcaae76a4a7083ace2fe4272e6d732f"
94
+ "sha256": "01ae05b38943c1d1fea373701dc060cc3a3f5125f2a03af468a6a1a877f1c83c"
74
95
  },
75
96
  "harness/reviewing/evaluator": {
76
97
  "path": ".pi/agents/harness/reviewing/evaluator.md",
77
- "sha256": "587ae14d6e91fd8af2b2842f568b9a1fa0b1d84fa6e18b4bc21c0ba2a9e62218"
98
+ "sha256": "5d6d34654d5c223e5549de9b7b0277b4e28745b2409545ecf3034bd0789c3fa3"
78
99
  },
79
100
  "harness/reviewing/tie-breaker": {
80
101
  "path": ".pi/agents/harness/reviewing/tie-breaker.md",
81
- "sha256": "1c54c1c3274291dea1ea8826563a7ad4fe1d9c4302984e907bfcd22cfc4f5eba"
102
+ "sha256": "80312a10772fde4bccc294a4ba7c470bf46d3054207393d2af42af277e5edad6"
82
103
  },
83
104
  "harness/planning/decompose": {
84
105
  "path": ".pi/agents/harness/planning/decompose.md",
85
- "sha256": "734eaa1bc87c337f6582c8f1c97baabf51e807731ab3c075c8960a9d207145e2"
106
+ "sha256": "944c7221b7bf8e15cd8cf324c3d5ae135c643c6387d8f611cf9128f9ea922963"
86
107
  },
87
108
  "harness/planning/execution-plan-author": {
88
109
  "path": ".pi/agents/harness/planning/execution-plan-author.md",
89
- "sha256": "55ece0f1ee14abd17fe7b3e478b548240f637eacbfc2a34758e98d3878dc82fd"
110
+ "sha256": "3b83edca1eb393941e04213c5cabe0e4b180e52df59169ba24904341a369ead5"
90
111
  },
91
112
  "harness/planning/hypothesis-validator": {
92
113
  "path": ".pi/agents/harness/planning/hypothesis-validator.md",
93
- "sha256": "20411e5d734b14b05ae11153133089e044f46784e5b4741712f608665bbf4376"
114
+ "sha256": "ee68aa5c04b903320116cfa21cea8f130199fd21e1fd1a8a747830bf53920fdb"
94
115
  },
95
116
  "harness/planning/hypothesis": {
96
117
  "path": ".pi/agents/harness/planning/hypothesis.md",
97
- "sha256": "bbb91ac0de39c9de4bf388f0cf926151b6b6a7771d2a0d01d1009a1860daef77"
118
+ "sha256": "c974f5381aa562589942e8d52b48bdace6663e10caed6bf5f2fb9ce11d84b0bc"
98
119
  },
99
120
  "harness/planning/implementation-researcher": {
100
121
  "path": ".pi/agents/harness/planning/implementation-researcher.md",
101
- "sha256": "d1bbaaf1e67ad98350319f973062f01a25ca70874c99cb335c99bec866da1f6d"
122
+ "sha256": "4559fc93ccf867ee199821a781cfd1b4a863e1f35ea8520d15ff389e61e17fd2"
102
123
  },
103
124
  "harness/planning/plan-adversary": {
104
125
  "path": ".pi/agents/harness/planning/plan-adversary.md",
105
- "sha256": "d9a953c0f8f900dc9a95816ada401955dafade7bf5907406cbe3bf3ba760c469"
126
+ "sha256": "305cfa6cd0d4e6493a2dad2f01d8cb0b0dddc06df11f871746f6da7124c9d16b"
106
127
  },
107
128
  "harness/planning/plan-evaluator": {
108
129
  "path": ".pi/agents/harness/planning/plan-evaluator.md",
109
- "sha256": "825f296c487d6aeacad5d320e155a3f23d0db6dea822fccc99a1305941a43da2"
130
+ "sha256": "1a6f465f4d400bcf32b9e82a1032ae789354f264af31c8d358b2a0dde7df81bf"
110
131
  },
111
132
  "harness/planning/plan-synthesizer": {
112
133
  "path": ".pi/agents/harness/planning/plan-synthesizer.md",
@@ -114,19 +135,19 @@
114
135
  },
115
136
  "harness/planning/planning-context": {
116
137
  "path": ".pi/agents/harness/planning/planning-context.md",
117
- "sha256": "96a51d1f2daafc9eaa8869a06ede9d04fc9e19076d58a81041e346e4c81c8b08"
138
+ "sha256": "4427e3c50fe0970a753df458ee41fde93b8c9d4ee7034c7541df7a97e978b17e"
118
139
  },
119
140
  "harness/planning/review-integrator": {
120
141
  "path": ".pi/agents/harness/planning/review-integrator.md",
121
- "sha256": "bba385463ca8833654cd0dc80f666344332293fe86d7420d2c36755a3f9e743a"
142
+ "sha256": "3f60c41768cad24150718b4a415b9636b0df6892195986a90fc77e2d0a6be537"
122
143
  },
123
144
  "harness/planning/sprint-contract-auditor": {
124
145
  "path": ".pi/agents/harness/planning/sprint-contract-auditor.md",
125
- "sha256": "2321298529f70d03798d23346231c4c43ad4b7490a43f291430ca65b3ef93757"
146
+ "sha256": "402c585168c5510b5f22837d2fb157726b928fa59108a8580437ac6ac08d04f5"
126
147
  },
127
148
  "harness/planning/stack-researcher": {
128
149
  "path": ".pi/agents/harness/planning/stack-researcher.md",
129
- "sha256": "ce546ef3aca19da7f334f07cef8f510b79068bffeb7f276c428f3e6236bbe96b"
150
+ "sha256": "0f19febc96bc65fd22b2d3f1c3bbed02e021f7c8129a7bb21423ea29d8429d67"
130
151
  }
131
152
  }
132
153
  }
@@ -0,0 +1,309 @@
1
+ # Generated/maintained SSOT for harness agent tools (see ADR 0049).
2
+ # Regenerate hints: node .pi/scripts/generate-agents-policy-yaml.mjs
3
+
4
+ apiVersion: harness.toolkit/v1
5
+ kinds:
6
+ planner:
7
+ tools:
8
+ - read
9
+ - grep
10
+ - find
11
+ - ls
12
+ - ctx_read
13
+ - ctx_search
14
+ - ctx_execute
15
+ - ctx_batch_execute
16
+ - ctx_tree
17
+ extensions: false
18
+ read_only: true
19
+ executor:
20
+ tools:
21
+ - read
22
+ - write
23
+ - edit
24
+ - bash
25
+ - grep
26
+ - find
27
+ - ls
28
+ extensions: true
29
+ read_only: false
30
+ evaluator:
31
+ tools:
32
+ - read
33
+ - grep
34
+ - find
35
+ - ls
36
+ - ctx_read
37
+ - ctx_search
38
+ - ctx_execute
39
+ - ctx_batch_execute
40
+ - ctx_tree
41
+ extensions: false
42
+ read_only: true
43
+ adversary:
44
+ tools:
45
+ - read
46
+ - grep
47
+ - find
48
+ - ls
49
+ - ctx_read
50
+ - ctx_search
51
+ - ctx_execute
52
+ - ctx_batch_execute
53
+ - ctx_tree
54
+ extensions: false
55
+ read_only: true
56
+ tie_breaker:
57
+ tools:
58
+ - read
59
+ - grep
60
+ - find
61
+ - ls
62
+ - ctx_read
63
+ - ctx_search
64
+ - ctx_execute
65
+ - ctx_batch_execute
66
+ - ctx_tree
67
+ extensions: false
68
+ read_only: true
69
+ trace:
70
+ tools:
71
+ - read
72
+ - grep
73
+ - find
74
+ - ls
75
+ - ctx_read
76
+ - ctx_search
77
+ - ctx_execute
78
+ - ctx_batch_execute
79
+ - ctx_tree
80
+ extensions: false
81
+ read_only: true
82
+ incident:
83
+ tools:
84
+ - read
85
+ - grep
86
+ - find
87
+ - ls
88
+ - ctx_read
89
+ - ctx_search
90
+ - ctx_execute
91
+ - ctx_batch_execute
92
+ - ctx_tree
93
+ extensions: false
94
+ read_only: true
95
+ other:
96
+ tools:
97
+ - read
98
+ - grep
99
+ - find
100
+ - ls
101
+ - ctx_read
102
+ - ctx_search
103
+ - ctx_execute
104
+ - ctx_tree
105
+ extensions: false
106
+ read_only: true
107
+ agents:
108
+ harness/incident-recorder:
109
+ kind: incident
110
+ tools_add:
111
+ - submit_human_required
112
+ extensions: false
113
+ max_turns: 15
114
+ thinking: medium
115
+ submit_tool: submit_human_required
116
+ harness/sentrux-bootstrap:
117
+ kind: planner
118
+ tools_add:
119
+ - bash
120
+ extensions: true
121
+ max_turns: 12
122
+ thinking: low
123
+ harness/sentrux-steward:
124
+ kind: planner
125
+ tools_add:
126
+ - bash
127
+ - submit_sentrux_manifest_proposal
128
+ extensions: false
129
+ max_turns: 16
130
+ thinking: high
131
+ submit_tool: submit_sentrux_manifest_proposal
132
+ harness/trace-librarian:
133
+ kind: trace
134
+ tools_add:
135
+ - submit_human_required
136
+ extensions: false
137
+ max_turns: 20
138
+ thinking: medium
139
+ submit_tool: submit_human_required
140
+ harness/running/executor:
141
+ kind: executor
142
+ tools_add:
143
+ - submit_executor_handoff
144
+ extensions: true
145
+ max_turns: 20
146
+ thinking: medium
147
+ submit_tool: submit_executor_handoff
148
+ harness/reviewing/adversary:
149
+ kind: adversary
150
+ tools_add:
151
+ - submit_adversary_report
152
+ extensions: false
153
+ max_turns: 20
154
+ thinking: high
155
+ submit_tool: submit_adversary_report
156
+ harness/reviewing/evaluator:
157
+ kind: evaluator
158
+ tools_add:
159
+ - submit_eval_verdict
160
+ extensions: false
161
+ max_turns: 20
162
+ thinking: high
163
+ submit_tool: submit_eval_verdict
164
+ harness/reviewing/tie-breaker:
165
+ kind: tie_breaker
166
+ tools_add:
167
+ - submit_human_required
168
+ extensions: false
169
+ max_turns: 15
170
+ thinking: high
171
+ submit_tool: submit_human_required
172
+ harness/planning/decompose:
173
+ kind: planner
174
+ tools_add:
175
+ - bash
176
+ - submit_decomposition_brief
177
+ - submit_human_required
178
+ extensions: false
179
+ max_turns: 12
180
+ thinking: medium
181
+ harness/planning/execution-plan-author:
182
+ kind: planner
183
+ tools_add:
184
+ - submit_execution_plan_brief
185
+ extensions: false
186
+ max_turns: 18
187
+ thinking: high
188
+ submit_tool: submit_execution_plan_brief
189
+ harness/planning/hypothesis-validator:
190
+ kind: planner
191
+ tools_add:
192
+ - submit_hypothesis_validation
193
+ extensions: false
194
+ max_turns: 10
195
+ thinking: medium
196
+ submit_tool: submit_hypothesis_validation
197
+ harness/planning/hypothesis:
198
+ kind: planner
199
+ tools_add:
200
+ - bash
201
+ - submit_hypothesis_brief
202
+ extensions: false
203
+ max_turns: 14
204
+ thinking: medium
205
+ submit_tool: submit_hypothesis_brief
206
+ harness/web-retrieval/web-query-expander:
207
+ kind: other
208
+ extensions: false
209
+ max_turns: 8
210
+ thinking: low
211
+ harness/web-retrieval/web-query-expander-fast:
212
+ kind: other
213
+ extensions: false
214
+ max_turns: 5
215
+ thinking: off
216
+ harness/web-retrieval/web-gap-analyzer:
217
+ kind: other
218
+ extensions: false
219
+ max_turns: 8
220
+ thinking: low
221
+ harness/web-retrieval/web-answerer:
222
+ kind: other
223
+ extensions: false
224
+ max_turns: 12
225
+ thinking: medium
226
+ harness/web-retrieval/web-summarizer:
227
+ kind: other
228
+ extensions: false
229
+ max_turns: 6
230
+ thinking: low
231
+ harness/web-retrieval/web-criteria-verifier:
232
+ kind: other
233
+ extensions: false
234
+ max_turns: 14
235
+ thinking: medium
236
+ harness/planning/implementation-researcher:
237
+ kind: planner
238
+ tools_add:
239
+ - bash
240
+ - web_search
241
+ - web_fetch
242
+ - web_find_similar
243
+ - web_contents
244
+ - submit_implementation_research
245
+ extensions: false
246
+ max_turns: 14
247
+ thinking: medium
248
+ submit_tool: submit_implementation_research
249
+ harness/planning/plan-adversary:
250
+ kind: planner
251
+ tools_add:
252
+ - submit_adversary_brief
253
+ extensions: false
254
+ max_turns: 14
255
+ thinking: medium
256
+ submit_tool: submit_adversary_brief
257
+ harness/planning/plan-evaluator:
258
+ kind: planner
259
+ tools_add:
260
+ - submit_validation_turn
261
+ extensions: false
262
+ max_turns: 14
263
+ thinking: medium
264
+ submit_tool: submit_validation_turn
265
+ harness/planning/plan-synthesizer:
266
+ kind: planner
267
+ tools_add:
268
+ - submit_decomposition_brief
269
+ - submit_hypothesis_brief
270
+ - submit_execution_plan_brief
271
+ extensions: false
272
+ harness/planning/planning-context:
273
+ kind: planner
274
+ tools_add:
275
+ - bash
276
+ - submit_planning_context
277
+ extensions: false
278
+ max_turns: 12
279
+ thinking: low
280
+ submit_tool: submit_planning_context
281
+ harness/planning/review-integrator:
282
+ kind: planner
283
+ tools_add:
284
+ - submit_review_round_draft
285
+ extensions: false
286
+ max_turns: 12
287
+ thinking: medium
288
+ submit_tool: submit_review_round_draft
289
+ harness/planning/sprint-contract-auditor:
290
+ kind: planner
291
+ tools_add:
292
+ - submit_sprint_audit
293
+ extensions: false
294
+ max_turns: 12
295
+ thinking: medium
296
+ submit_tool: submit_sprint_audit
297
+ harness/planning/stack-researcher:
298
+ kind: planner
299
+ tools_add:
300
+ - bash
301
+ - web_search
302
+ - web_fetch
303
+ - web_find_similar
304
+ - web_contents
305
+ - submit_stack_brief
306
+ extensions: false
307
+ max_turns: 16
308
+ thinking: medium
309
+ submit_tool: submit_stack_brief
@@ -10,7 +10,7 @@ ultimate-pi depended on the npm package `@sting8k/pi-vcc` for deterministic, vie
10
10
 
11
11
  ## Decision
12
12
 
13
- 1. Vendor [sting8k/pi-vcc](https://github.com/sting8k/pi-vcc) under `vendor/pi-vcc/` (refresh via `npm run vendor:sync-vcc`), following the same pattern as `vendor/pi-model-router`.
13
+ 1. Vendor [sting8k/pi-vcc](https://github.com/sting8k/pi-vcc) under `vendor/pi-vcc/` (refresh via `npm run vendor:sync-vcc`), following the pinned-vendor pattern documented in `THIRD_PARTY_NOTICES.md`.
14
14
  2. Load compaction through [`.pi/extensions/ultimate-pi-vcc.ts`](../../../extensions/ultimate-pi-vcc.ts).
15
15
  3. Remove `@sting8k/pi-vcc` from `package.json` dependencies and from `.pi/settings*.json` `packages` arrays.
16
16
  4. **Configuration is env-only** — no JSON config files (`PI_VCC_CONFIG_PATH` and `.pi/pi-vcc-config.json` are not used).