ultimate-pi 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) 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/.pi/PACKAGING.md +4 -4
  5. package/.pi/SYSTEM.md +54 -120
  6. package/.pi/agents/harness/incident-recorder.md +0 -1
  7. package/.pi/agents/harness/planning/decompose.md +0 -2
  8. package/.pi/agents/harness/planning/execution-plan-author.md +0 -2
  9. package/.pi/agents/harness/planning/hypothesis-validator.md +0 -2
  10. package/.pi/agents/harness/planning/hypothesis.md +0 -2
  11. package/.pi/agents/harness/planning/implementation-researcher.md +0 -2
  12. package/.pi/agents/harness/planning/plan-adversary.md +0 -2
  13. package/.pi/agents/harness/planning/plan-evaluator.md +1 -3
  14. package/.pi/agents/harness/planning/planning-context.md +0 -2
  15. package/.pi/agents/harness/planning/review-integrator.md +0 -2
  16. package/.pi/agents/harness/planning/sprint-contract-auditor.md +0 -2
  17. package/.pi/agents/harness/planning/stack-researcher.md +0 -2
  18. package/.pi/agents/harness/reviewing/adversary.md +0 -2
  19. package/.pi/agents/harness/reviewing/evaluator.md +0 -2
  20. package/.pi/agents/harness/reviewing/tie-breaker.md +0 -2
  21. package/.pi/agents/harness/running/executor.md +0 -2
  22. package/.pi/agents/harness/sentrux-bootstrap.md +0 -1
  23. package/.pi/agents/harness/sentrux-steward.md +0 -2
  24. package/.pi/agents/harness/trace-librarian.md +0 -1
  25. package/.pi/extensions/00-posthog-network-bootstrap.ts +1 -1
  26. package/.pi/extensions/agt-kill-switch.ts +57 -0
  27. package/.pi/extensions/agt-prompt-guard.ts +32 -0
  28. package/.pi/extensions/custom-footer.ts +46 -145
  29. package/.pi/extensions/custom-header.ts +1 -1
  30. package/.pi/extensions/custom-system-prompt.ts +1 -1
  31. package/.pi/extensions/debate-orchestrator.ts +6 -6
  32. package/.pi/extensions/harness-ask-user.ts +7 -7
  33. package/.pi/extensions/harness-debate-tools.ts +26 -42
  34. package/.pi/extensions/harness-lens.ts +94 -0
  35. package/.pi/extensions/harness-plan-approval.ts +11 -11
  36. package/.pi/extensions/harness-run-context.ts +1070 -876
  37. package/.pi/extensions/harness-subagent-governance.ts +8 -0
  38. package/.pi/extensions/harness-subagent-submit.ts +34 -163
  39. package/.pi/extensions/harness-subagents.ts +3 -3
  40. package/.pi/extensions/harness-telemetry.ts +2 -2
  41. package/.pi/extensions/harness-web-tools.ts +2 -2
  42. package/.pi/extensions/policy-gate.ts +25 -5
  43. package/.pi/extensions/sentrux-rules-sync.ts +1 -1
  44. package/.pi/extensions/subagent-governance.ts +92 -0
  45. package/.pi/extensions/trace-recorder.ts +1 -1
  46. package/.pi/extensions/{ultimate-pi-vcc.ts → vcc-compaction.ts} +1 -1
  47. package/.pi/harness/README.md +6 -2
  48. package/.pi/harness/agents.manifest.json +22 -25
  49. package/.pi/harness/agents.policy.yaml +275 -0
  50. package/.pi/harness/docs/adrs/0030-inhouse-vcc-compaction.md +1 -1
  51. package/.pi/harness/docs/adrs/0035-plan-phase-review-gate.md +1 -1
  52. package/.pi/harness/docs/adrs/0045-harness-lens-minimal-contract.md +49 -0
  53. package/.pi/harness/docs/adrs/0046-agt-policy-engine.md +51 -0
  54. package/.pi/harness/docs/adrs/0047-agt-layered-security.md +39 -0
  55. package/.pi/harness/docs/adrs/0048-tool-call-hook-order.md +25 -0
  56. package/.pi/harness/docs/adrs/0049-agents-policy-manifest.md +36 -0
  57. package/.pi/harness/docs/adrs/README.md +5 -0
  58. package/.pi/harness/evolution/README.md +1 -2
  59. package/.pi/harness/examples/agents.policy.project.yaml +19 -0
  60. package/.pi/harness/examples/policies/custom-deny-bash.yaml +9 -0
  61. package/.pi/harness/policies/bash-denylists.yaml +5 -0
  62. package/.pi/harness/policies/defaults.yaml +51 -0
  63. package/.pi/harness/policies/orchestrator.yaml +18 -0
  64. package/.pi/harness/policies/phases.yaml +10 -0
  65. package/.pi/harness/policies/roles.yaml +5 -0
  66. package/.pi/harness/policies/web-guard.yaml +5 -0
  67. package/.pi/harness/policies/workflow-sequences.yaml +9 -0
  68. package/.pi/harness/sentrux/architecture.manifest.json +26 -4
  69. package/.pi/harness/specs/observation.schema.json +2 -1
  70. package/.pi/lib/agents-policy.d.mts +70 -0
  71. package/.pi/lib/agents-policy.mjs +325 -0
  72. package/.pi/lib/agents-policy.ts +19 -0
  73. package/.pi/lib/agt/audit-run-sink.ts +52 -0
  74. package/.pi/lib/agt/build-evaluation-context.ts +285 -0
  75. package/.pi/lib/agt/config.ts +28 -0
  76. package/.pi/lib/agt/delegation.ts +69 -0
  77. package/.pi/lib/agt/evaluate-policy.ts +56 -0
  78. package/.pi/lib/agt/identity-registry.ts +41 -0
  79. package/.pi/lib/agt/index.ts +55 -0
  80. package/.pi/lib/agt/kill-switch-state.ts +11 -0
  81. package/.pi/lib/agt/legacy-evaluate.ts +101 -0
  82. package/.pi/lib/agt/policy-engine.ts +154 -0
  83. package/.pi/lib/agt/rings.ts +21 -0
  84. package/.pi/lib/agt/sre-hooks.ts +45 -0
  85. package/.pi/lib/agt/trust-run-store.ts +26 -0
  86. package/.pi/lib/agt/workflow-history.ts +29 -0
  87. package/.pi/lib/agt-governance-active.ts +14 -0
  88. package/.pi/lib/agt-tool-guard.ts +78 -0
  89. package/.pi/lib/ask-user/dialog.ts +314 -0
  90. package/.pi/{extensions/lib → lib}/debate-bus-core.ts +10 -10
  91. package/.pi/{extensions/lib → lib}/debate-bus-state.ts +1 -1
  92. package/.pi/{extensions/lib → lib}/extension-load-guard.ts +13 -2
  93. package/.pi/lib/harness-agt-tool-guard.ts +5 -0
  94. package/.pi/{extensions/lib → lib}/harness-artifact-gate.ts +1 -1
  95. package/.pi/lib/harness-debate-core-deps.ts +14 -0
  96. package/.pi/lib/harness-debate-workflow-deps.ts +43 -0
  97. package/.pi/lib/harness-lens/.gitattributes +1 -0
  98. package/.pi/lib/harness-lens/clients/edit-autopatch.ts +88 -0
  99. package/.pi/lib/harness-lens/clients/file-kinds.ts +380 -0
  100. package/.pi/lib/harness-lens/clients/file-time.ts +215 -0
  101. package/.pi/lib/harness-lens/clients/file-utils.ts +484 -0
  102. package/.pi/lib/harness-lens/clients/format-service.ts +276 -0
  103. package/.pi/lib/harness-lens/clients/formatters.ts +1000 -0
  104. package/.pi/lib/harness-lens/clients/git-guard.ts +31 -0
  105. package/.pi/lib/harness-lens/clients/indent-retarget.ts +90 -0
  106. package/.pi/lib/harness-lens/clients/installer/index.ts +2368 -0
  107. package/.pi/lib/harness-lens/clients/latency-logger.ts +80 -0
  108. package/.pi/lib/harness-lens/clients/lens-config.ts +43 -0
  109. package/.pi/lib/harness-lens/clients/lens-events.ts +164 -0
  110. package/.pi/lib/harness-lens/clients/lsp/aggregation.ts +91 -0
  111. package/.pi/lib/harness-lens/clients/lsp/client.ts +1466 -0
  112. package/.pi/lib/harness-lens/clients/lsp/config.ts +216 -0
  113. package/.pi/lib/harness-lens/clients/lsp/edits.ts +297 -0
  114. package/.pi/lib/harness-lens/clients/lsp/index.ts +1355 -0
  115. package/.pi/lib/harness-lens/clients/lsp/interactive-install.ts +424 -0
  116. package/.pi/lib/harness-lens/clients/lsp/language.ts +223 -0
  117. package/.pi/lib/harness-lens/clients/lsp/launch.ts +939 -0
  118. package/.pi/lib/harness-lens/clients/lsp/lsp-index.ts +11 -0
  119. package/.pi/lib/harness-lens/clients/lsp/path-utils.ts +12 -0
  120. package/.pi/lib/harness-lens/clients/lsp/server-strategies.ts +81 -0
  121. package/.pi/lib/harness-lens/clients/lsp/server.ts +1971 -0
  122. package/.pi/lib/harness-lens/clients/path-utils.ts +182 -0
  123. package/.pi/lib/harness-lens/clients/pipeline.ts +360 -0
  124. package/.pi/lib/harness-lens/clients/project-profile.ts +117 -0
  125. package/.pi/lib/harness-lens/clients/runtime-agent-end.ts +112 -0
  126. package/.pi/lib/harness-lens/clients/runtime-config.ts +33 -0
  127. package/.pi/lib/harness-lens/clients/runtime-coordinator.ts +186 -0
  128. package/.pi/lib/harness-lens/clients/runtime-tool-result.ts +171 -0
  129. package/.pi/lib/harness-lens/clients/safe-spawn.ts +339 -0
  130. package/.pi/lib/harness-lens/clients/secrets-scanner.ts +214 -0
  131. package/.pi/lib/harness-lens/clients/tool-policy.ts +2072 -0
  132. package/.pi/lib/harness-lens/clients/types.ts +59 -0
  133. package/.pi/lib/harness-lens/clients/widget-state.ts +283 -0
  134. package/.pi/lib/harness-lens/index.ts +532 -0
  135. package/.pi/lib/harness-lens/tools/lsp-diagnostics.ts +706 -0
  136. package/.pi/lib/harness-lens/tools/lsp-navigation.ts +1246 -0
  137. package/.pi/{extensions/lib → lib}/harness-posthog.ts +3 -0
  138. package/.pi/lib/harness-run-context-responses.ts +9 -0
  139. package/.pi/lib/harness-run-context.ts +0 -2
  140. package/.pi/{extensions/lib/spawn-policy.ts → lib/harness-spawn-policy.ts} +1 -0
  141. package/.pi/{extensions/lib → lib}/harness-spawn-topology.ts +1 -1
  142. package/.pi/lib/harness-subagent-auth.ts +51 -0
  143. package/.pi/{extensions/lib → lib}/harness-subagent-precheck.ts +10 -7
  144. package/.pi/{extensions/lib → lib}/harness-subagent-submit-pipeline.ts +3 -3
  145. package/.pi/lib/harness-subagent-submit-register.ts +163 -0
  146. package/.pi/{extensions/lib → lib}/harness-subagent-submit-registry.ts +1 -37
  147. package/.pi/{extensions/lib → lib}/harness-subagents-bridge.ts +53 -14
  148. package/.pi/{extensions/lib → lib}/harness-subprocess-bootstrap.ts +1 -1
  149. package/.pi/{extensions/lib → lib}/plan-approval/create-plan.ts +2 -2
  150. package/.pi/{extensions/lib → lib}/plan-approval/format-plan.ts +2 -2
  151. package/.pi/{extensions/lib → lib}/plan-approval/plan-review.ts +162 -201
  152. package/.pi/{extensions/lib → lib}/plan-approval/render.ts +1 -1
  153. package/.pi/{extensions/lib → lib}/plan-approval/resolve-disk.ts +2 -2
  154. package/.pi/{extensions/lib → lib}/plan-approval/types.ts +1 -1
  155. package/.pi/{extensions/lib → lib}/plan-approval/validate.ts +3 -3
  156. package/.pi/{extensions/lib → lib}/plan-debate-envelope.ts +1 -1
  157. package/.pi/{extensions/lib → lib}/plan-debate-gate.ts +1 -1
  158. package/.pi/{extensions/lib → lib}/plan-debate-lane.ts +1 -4
  159. package/.pi/{extensions/lib → lib}/plan-messenger.ts +1 -1
  160. package/.pi/prompts/harness-plan.md +1 -1
  161. package/.pi/prompts/harness-setup.md +37 -64
  162. package/.pi/scripts/README.md +2 -5
  163. package/.pi/scripts/generate-agents-policy-yaml.mjs +148 -0
  164. package/.pi/scripts/harness-agents-manifest.mjs +60 -3
  165. package/.pi/scripts/harness-agt-doctor.ts +36 -0
  166. package/.pi/scripts/harness-cli-verify.sh +9 -2
  167. package/.pi/scripts/harness-verify.mjs +113 -39
  168. package/.pi/scripts/harness-web-policy-guard.mjs +2 -2
  169. package/.pi/scripts/validate-plan-dag.mjs +65 -74
  170. package/.pi/scripts/vendor-pi-vcc-settings.stub.ts +2 -2
  171. package/.pi/scripts/vendor-sync-pi-vcc.sh +1 -1
  172. package/.pi/skills/architecture/broker-domain/SKILL.md +65 -0
  173. package/.pi/skills/architecture/cqrs/SKILL.md +63 -0
  174. package/.pi/skills/architecture/event-driven/SKILL.md +60 -0
  175. package/.pi/skills/architecture/hexagonal-ports-adapters/SKILL.md +66 -0
  176. package/.pi/skills/architecture/layered/SKILL.md +68 -0
  177. package/.pi/skills/architecture/microkernel/SKILL.md +62 -0
  178. package/.pi/skills/architecture/microservices/SKILL.md +64 -0
  179. package/.pi/skills/architecture/modular-monolith/SKILL.md +65 -0
  180. package/.pi/skills/architecture/orchestration-driven-soa/SKILL.md +61 -0
  181. package/.pi/skills/architecture/pipeline/SKILL.md +63 -0
  182. package/.pi/skills/architecture/service-based/SKILL.md +64 -0
  183. package/.pi/skills/architecture/service-mesh/SKILL.md +60 -0
  184. package/.pi/skills/architecture/space-based/SKILL.md +60 -0
  185. package/.pi/skills/ast-grep/SKILL.md +40 -321
  186. package/.pi/skills/delivery/debugging-discipline/SKILL.md +36 -0
  187. package/.pi/skills/delivery/documentation-update/SKILL.md +33 -0
  188. package/.pi/skills/delivery/requirements-to-implementation/SKILL.md +34 -0
  189. package/.pi/skills/delivery/risk-based-verification/SKILL.md +43 -0
  190. package/.pi/skills/delivery/tradeoff-analysis/SKILL.md +34 -0
  191. package/.pi/skills/engineering/api-contract-design/SKILL.md +38 -0
  192. package/.pi/skills/engineering/cohesion-coupling/SKILL.md +43 -0
  193. package/.pi/skills/engineering/complexity-control/SKILL.md +31 -0
  194. package/.pi/skills/engineering/defensive-programming/SKILL.md +38 -0
  195. package/.pi/skills/engineering/dependency-management/SKILL.md +29 -0
  196. package/.pi/skills/engineering/domain-modeling/SKILL.md +32 -0
  197. package/.pi/skills/engineering/error-handling/SKILL.md +37 -0
  198. package/.pi/skills/engineering/legacy-code-seams/SKILL.md +35 -0
  199. package/.pi/skills/engineering/naming-and-intent/SKILL.md +29 -0
  200. package/.pi/skills/engineering/refactoring-safe-evolution/SKILL.md +35 -0
  201. package/.pi/skills/engineering/routine-function-design/SKILL.md +34 -0
  202. package/.pi/skills/engineering/small-change-discipline/SKILL.md +35 -0
  203. package/.pi/skills/lsp-navigation/SKILL.md +89 -0
  204. package/.pi/skills/quality/code-review-self-check/SKILL.md +35 -0
  205. package/.pi/skills/quality/privacy-data-handling/SKILL.md +26 -0
  206. package/.pi/skills/quality/security-review/SKILL.md +34 -0
  207. package/.pi/skills/quality/test-strategy/SKILL.md +33 -0
  208. package/.pi/skills/quality/testability-design/SKILL.md +33 -0
  209. package/.pi/skills/systems/concurrency-safety/SKILL.md +32 -0
  210. package/.pi/skills/systems/data-modeling-migrations/SKILL.md +31 -0
  211. package/.pi/skills/systems/observability-instrumentation/SKILL.md +32 -0
  212. package/.pi/skills/systems/performance-measurement/SKILL.md +35 -0
  213. package/.pi/skills/systems/reliability-design/SKILL.md +32 -0
  214. package/.sentrux/rules.toml +20 -4
  215. package/AGENTS.md +5 -0
  216. package/CHANGELOG.md +14 -0
  217. package/README.md +3 -12
  218. package/THIRD_PARTY_NOTICES.md +12 -21
  219. package/package.json +15 -7
  220. package/vendor/pi-subagents/src/agents.ts +45 -1
  221. package/vendor/pi-subagents/src/subagents.ts +866 -811
  222. package/vendor/pi-vcc/src/core/brief.ts +68 -99
  223. package/vendor/pi-vcc/src/core/settings.ts +2 -2
  224. package/.agents/skills/caveman/SKILL.md +0 -67
  225. package/.pi/agents/harness/meta-optimizer.md +0 -36
  226. package/.pi/extensions/lib/ask-user/dialog.ts +0 -260
  227. package/.pi/extensions/lib/harness-subagent-auth.ts +0 -207
  228. package/.pi/extensions/lib/harness-subagent-policy.ts +0 -236
  229. package/.pi/extensions/pi-model-router-harness.ts +0 -42
  230. package/.pi/harness/evolution/meta-optimizer.mjs +0 -99
  231. package/.pi/harness/specs/router-tuning-proposal.schema.json +0 -114
  232. package/.pi/model-router.example.json +0 -36
  233. package/.pi/prompts/harness-critic.md +0 -10
  234. package/.pi/prompts/harness-eval.md +0 -10
  235. package/.pi/prompts/harness-router-tune.md +0 -52
  236. package/.pi/scripts/harness-generate-model-router.mjs +0 -327
  237. package/.pi/scripts/harness-model-router-routing.test.mjs +0 -97
  238. package/.pi/scripts/harness-sync-model-router.mjs +0 -97
  239. package/.pi/scripts/vendor-sync-pi-model-router.sh +0 -47
  240. package/vendor/pi-model-router/.prettierignore +0 -4
  241. package/vendor/pi-model-router/.prettierrc +0 -5
  242. package/vendor/pi-model-router/AGENTS.md +0 -39
  243. package/vendor/pi-model-router/LICENSE +0 -21
  244. package/vendor/pi-model-router/README.md +0 -99
  245. package/vendor/pi-model-router/UPSTREAM_PIN.md +0 -10
  246. package/vendor/pi-model-router/docs/ARCHITECTURE.md +0 -54
  247. package/vendor/pi-model-router/extensions/commands.ts +0 -720
  248. package/vendor/pi-model-router/extensions/config.ts +0 -348
  249. package/vendor/pi-model-router/extensions/constants.ts +0 -1
  250. package/vendor/pi-model-router/extensions/index.ts +0 -478
  251. package/vendor/pi-model-router/extensions/provider.ts +0 -580
  252. package/vendor/pi-model-router/extensions/routing.ts +0 -564
  253. package/vendor/pi-model-router/extensions/state.ts +0 -52
  254. package/vendor/pi-model-router/extensions/types.ts +0 -95
  255. package/vendor/pi-model-router/extensions/ui.ts +0 -144
  256. package/vendor/pi-model-router/model-router.example.json +0 -48
  257. package/vendor/pi-model-router/package.json +0 -48
  258. package/vendor/pi-model-router/tsconfig.json +0 -16
  259. /package/.pi/{prompts → harness/docs}/planning-rubrics.md +0 -0
  260. /package/.pi/{extensions/lib → lib}/ask-user/fallback.ts +0 -0
  261. /package/.pi/{extensions/lib → lib}/ask-user/render.ts +0 -0
  262. /package/.pi/{extensions/lib → lib}/ask-user/schema.ts +0 -0
  263. /package/.pi/{extensions/lib → lib}/ask-user/types.ts +0 -0
  264. /package/.pi/{extensions/lib → lib}/ask-user/validate-core.mjs +0 -0
  265. /package/.pi/{extensions/lib → lib}/ask-user/validate.ts +0 -0
  266. /package/.pi/{extensions/lib → lib}/harness-cocoindex-refresh.ts +0 -0
  267. /package/.pi/{extensions/lib → lib}/harness-paths.ts +0 -0
  268. /package/.pi/{extensions/lib → lib}/harness-spawn-budget.ts +0 -0
  269. /package/.pi/{extensions/lib → lib}/harness-vcc-settings.ts +0 -0
  270. /package/.pi/{extensions/lib → lib}/harness-web/run-cli.ts +0 -0
  271. /package/.pi/{extensions/lib → lib}/plan-approval/dialog.ts +0 -0
  272. /package/.pi/{extensions/lib → lib}/plan-approval/schema.ts +0 -0
  273. /package/.pi/{extensions/lib → lib}/plan-approval-readiness.ts +0 -0
  274. /package/.pi/{extensions/lib → lib}/plan-debate-eligibility.ts +0 -0
  275. /package/.pi/{extensions/lib → lib}/plan-debate-focus.ts +0 -0
  276. /package/.pi/{extensions/lib → lib}/plan-debate-id.ts +0 -0
  277. /package/.pi/{extensions/lib → lib}/plan-debate-lanes.ts +0 -0
  278. /package/.pi/{extensions/lib → lib}/plan-debate-round-status.ts +0 -0
  279. /package/.pi/{extensions/lib → lib}/plan-debate-write-guard.ts +0 -0
  280. /package/.pi/{extensions/lib → lib}/plan-review-gate.ts +0 -0
  281. /package/.pi/{extensions/lib → lib}/plan-review-integrator-rules.ts +0 -0
  282. /package/.pi/{extensions/lib → lib}/plan-scope-guard.ts +0 -0
  283. /package/.pi/{extensions/lib → lib}/posthog-client.ts +0 -0
  284. /package/.pi/{extensions/lib → lib}/posthog-node.d.ts +0 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @deprecated Use subagent-governance.ts — re-export for subprocess -e path stability.
3
+ */
4
+ export {
5
+ default,
6
+ harnessSubagentGovernanceExtensionPath,
7
+ subagentGovernanceExtensionPath,
8
+ } from "./subagent-governance.js";
@@ -1,85 +1,42 @@
1
1
  /**
2
2
  * Subprocess-only harness submit tools — validate + write artifacts under run_dir.
3
- * Loaded via `pi --no-extensions -e harness-subagent-submit.ts` for harness agents.
3
+ * Prefer harness-subagent-governance.ts bundle (AGT + submit) for harness spawns.
4
4
  */
5
5
 
6
6
  import { join } from "node:path";
7
7
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
8
- import { Type } from "@sinclair/typebox";
9
- import { resolveGuardedRunDir } from "../lib/harness-subagent-submit-path.js";
10
- import { claimHarnessGovernanceLoad } from "./lib/extension-load-guard.js";
11
- import { getHarnessPackageRoot } from "./lib/harness-paths.js";
12
- import { evaluateHarnessSubagentToolCall } from "./lib/harness-subagent-policy.js";
8
+ import { claimHarnessGovernanceLoad } from "../lib/extension-load-guard.js";
9
+ import { evaluateAgtHarnessToolCall } from "../lib/harness-agt-tool-guard.js";
10
+ import { getHarnessPackageRoot } from "../lib/harness-paths.js";
13
11
  import {
14
- executeSubmitPipeline,
15
- loadSubmitDocument,
16
- } from "./lib/harness-subagent-submit-pipeline.js";
17
- import { SUBMIT_TOOL_SPECS } from "./lib/harness-subagent-submit-registry.js";
12
+ isSubprocessHarnessSubmit,
13
+ registerHarnessSubagentSubmitTools,
14
+ resolveHarnessSubmitRunContext,
15
+ } from "../lib/harness-subagent-submit-register.js";
18
16
 
19
17
  // @ts-expect-error pi extensions run as ESM
20
18
  const MODULE_URL = import.meta.url;
21
19
 
22
- const DocumentSchema = Type.Object(
23
- {
24
- document: Type.Optional(
25
- Type.Record(Type.String(), Type.Unknown(), {
26
- description:
27
- "Artifact fields (deprecated when source_path is set; ADR 0043)",
28
- }),
29
- ),
30
- source_path: Type.Optional(
31
- Type.String({
32
- description:
33
- "Relative path under run dir, e.g. artifacts/.draft/decomposition.yaml",
34
- }),
35
- ),
36
- },
37
- { additionalProperties: false },
38
- );
39
-
40
- function resolveRunContext(): {
41
- projectRoot: string;
42
- specsDir: string;
43
- runId: string;
44
- runDirEnv?: string;
45
- agentId: string;
46
- } {
47
- const projectRoot = process.env.HARNESS_PKG_ROOT ?? process.cwd();
48
- const specsDir = join(projectRoot, ".pi", "harness", "specs");
49
- const runId = process.env.HARNESS_RUN_ID?.trim() ?? "";
50
- const runDirEnv = process.env.HARNESS_RUN_DIR?.trim();
51
- const agentId = process.env.HARNESS_AGENT_ID?.trim() ?? "";
52
- return { projectRoot, specsDir, runId, runDirEnv, agentId };
53
- }
54
-
55
- function isSubprocessHarness(): boolean {
56
- return (
57
- process.env.PI_HARNESS_SUBPROCESS === "1" &&
58
- Boolean(process.env.HARNESS_RUN_ID?.trim())
59
- );
60
- }
61
-
62
20
  export default function harnessSubagentSubmit(pi: ExtensionAPI) {
63
21
  if (!claimHarnessGovernanceLoad("harness-subagent-submit", MODULE_URL))
64
22
  return;
65
- // Option A: only load submit tools in subprocess (`-e` bundle), not parent discovery.
66
23
  if (process.env.PI_HARNESS_SUBPROCESS !== "1") {
67
24
  return;
68
25
  }
69
26
 
70
- const _packageRoot = getHarnessPackageRoot(MODULE_URL);
27
+ const packageRoot = getHarnessPackageRoot(MODULE_URL);
28
+ registerHarnessSubagentSubmitTools(pi, packageRoot);
71
29
 
72
- pi.on("tool_call", async (event) => {
30
+ pi.on("tool_call", async (event, ctx) => {
73
31
  if (!event.toolName.startsWith("submit_")) return undefined;
74
- const subprocessOk = isSubprocessHarness();
75
- if (!subprocessOk) {
32
+ if (!isSubprocessHarnessSubmit()) {
76
33
  return {
77
34
  block: true,
78
35
  reason:
79
36
  "harness-subagent-submit: submit_* tools are only available in harness subagent subprocesses.",
80
37
  };
81
38
  }
82
- const { agentId } = resolveRunContext();
39
+ const { agentId } = resolveHarnessSubmitRunContext(packageRoot);
83
40
  if (!agentId) {
84
41
  return {
85
42
  block: true,
@@ -87,118 +44,32 @@ export default function harnessSubagentSubmit(pi: ExtensionAPI) {
87
44
  "harness-subagent-submit: HARNESS_AGENT_ID is required for submit tools.",
88
45
  };
89
46
  }
90
- const decision = evaluateHarnessSubagentToolCall(
91
- event.toolName,
92
- event.input as Record<string, unknown>,
93
- agentId,
94
- );
95
- if (decision.action === "block") {
96
- return { block: true, reason: decision.reason };
97
- }
98
- return undefined;
99
- });
100
47
 
101
- for (const spec of SUBMIT_TOOL_SPECS) {
102
- pi.registerTool({
103
- name: spec.toolName,
104
- label: spec.toolName.replace(/^submit_/, "Submit "),
105
- description: `Terminal harness artifact submit for ${spec.agents.join(", ")}. Call once with the full schema document before ending the turn.`,
106
- parameters: DocumentSchema,
107
- async execute(_id, params, _signal, _onUpdate, _ctx) {
108
- if (!isSubprocessHarness()) {
109
- return {
110
- content: [
111
- {
112
- type: "text",
113
- text: "submit tools require PI_HARNESS_SUBPROCESS and HARNESS_RUN_ID",
114
- },
115
- ],
116
- details: {},
117
- isError: true,
118
- };
119
- }
120
- const { projectRoot, specsDir, runId, runDirEnv, agentId } =
121
- resolveRunContext();
122
- if (!spec.agents.includes(agentId)) {
123
- return {
124
- content: [
125
- {
126
- type: "text",
127
- text: `${spec.toolName} is not allowed for agent ${agentId}`,
128
- },
129
- ],
130
- details: { agentId, tool: spec.toolName },
131
- isError: true,
132
- };
133
- }
134
- const runResolved = await resolveGuardedRunDir({
135
- projectRoot,
136
- runId,
137
- runDirEnv,
138
- });
139
- if (!runResolved.ok) {
140
- return {
141
- content: [{ type: "text", text: runResolved.error }],
142
- details: {},
143
- isError: true,
144
- };
145
- }
146
- const loaded = await loadSubmitDocument({
147
- projectRoot,
148
- runDir: runResolved.runDir,
149
- document: (params as { document?: Record<string, unknown> }).document,
150
- source_path: (params as { source_path?: string }).source_path,
151
- });
152
- if (!loaded.ok) {
153
- return {
154
- content: [
155
- {
156
- type: "text",
157
- text: `Validation failed:\n${loaded.validation_errors.join("\n")}`,
158
- },
159
- ],
160
- isError: true,
161
- details: loaded,
162
- };
163
- }
164
- const result = await executeSubmitPipeline({
165
- projectRoot,
166
- specsDir,
167
- spec,
168
- agentId,
169
- document: loaded.document,
170
- runId,
171
- runDirEnv,
172
- });
173
- if (!result.ok) {
174
- return {
175
- content: [
176
- {
177
- type: "text",
178
- text: `Validation failed:\n${(result.validation_errors ?? []).join("\n")}`,
179
- },
180
- ],
181
- isError: true,
182
- details: result,
183
- };
184
- }
185
- const lines = [`ok: wrote ${result.artifact_path}`];
186
- if (result.lane_result?.messenger_posted) {
187
- lines.push("messenger updated");
188
- }
189
- if (result.human_required) {
190
- lines.push("human_required: parent must call ask_user");
191
- }
192
- return {
193
- content: [{ type: "text", text: lines.join("\n") }],
194
- details: result as unknown,
195
- };
48
+ return evaluateAgtHarnessToolCall({
49
+ moduleUrl: MODULE_URL,
50
+ toolName: event.toolName,
51
+ toolInput: event.input as Record<string, unknown>,
52
+ policyState: {
53
+ phase:
54
+ (process.env.HARNESS_SUBAGENT_PHASE_HINT as
55
+ | "plan"
56
+ | "execute"
57
+ | "evaluate"
58
+ | "adversary"
59
+ | "merge") ?? "plan",
60
+ approvedPlan: true,
61
+ planId: null,
62
+ aborted: false,
63
+ budgetBypass: false,
196
64
  },
65
+ entries: ctx.sessionManager.getEntries(),
66
+ sessionId: ctx.sessionManager.getSessionId(),
67
+ projectRoot: ctx.cwd,
197
68
  });
198
- }
69
+ });
199
70
  }
200
71
 
201
- /** Absolute path to the subprocess submit extension (Option A). */
72
+ /** Absolute path to the subprocess submit extension (legacy standalone). */
202
73
  export function harnessSubagentSubmitExtensionPath(
203
74
  packageRoot: string,
204
75
  ): string {
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
9
- import { claimHarnessGovernanceLoad } from "./lib/extension-load-guard.js";
9
+ import { claimHarnessGovernanceLoad } from "../lib/extension-load-guard.js";
10
10
 
11
11
  // @ts-expect-error pi extensions run as ESM
12
12
  const MODULE_URL = import.meta.url;
@@ -15,9 +15,9 @@ async function loadHarnessSubagents(): Promise<(pi: ExtensionAPI) => void> {
15
15
  if (!claimHarnessGovernanceLoad("harness-subagents", MODULE_URL)) {
16
16
  return () => {};
17
17
  }
18
- const { getHarnessPackageRoot } = await import("./lib/harness-paths.js");
18
+ const { getHarnessPackageRoot } = await import("../lib/harness-paths.js");
19
19
  const { createHarnessSubagentsExtension } = await import(
20
- "./lib/harness-subagents-bridge.js"
20
+ "../lib/harness-subagents-bridge.js"
21
21
  );
22
22
  return createHarnessSubagentsExtension(getHarnessPackageRoot(MODULE_URL));
23
23
  }
@@ -9,12 +9,12 @@
9
9
 
10
10
  import { createHash } from "node:crypto";
11
11
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
12
- import { isHarnessProjectEnabled } from "../lib/harness-project-config.js";
13
12
  import {
14
13
  captureHarnessEvent,
15
14
  type HarnessPostHogEventName,
16
15
  shutdownHarnessPostHog,
17
- } from "./lib/harness-posthog.js";
16
+ } from "../lib/harness-posthog.js";
17
+ import { isHarnessProjectEnabled } from "../lib/harness-project-config.js";
18
18
 
19
19
  type HarnessPhase = "plan" | "execute" | "evaluate" | "adversary" | "merge";
20
20
 
@@ -4,13 +4,13 @@
4
4
 
5
5
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
6
6
  import { Type } from "@sinclair/typebox";
7
- import { claimHarnessGovernanceLoad } from "./lib/extension-load-guard.js";
7
+ import { claimHarnessGovernanceLoad } from "../lib/extension-load-guard.js";
8
8
  import {
9
9
  harnessWebContextLine,
10
10
  readTextExcerpt,
11
11
  runHarnessWeb,
12
12
  summarizeSearchJson,
13
- } from "./lib/harness-web/run-cli.js";
13
+ } from "../lib/harness-web/run-cli.js";
14
14
 
15
15
  // @ts-expect-error pi extensions run as ESM
16
16
  const MODULE_URL = import.meta.url;
@@ -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.18.1",
5
+ "generated_at": "2026-05-24T19:33:40.491Z",
6
+ "policy_sha256": "4c1cf8f0377e70bbcd34eecc26a2e02717fea950af3898ef03ebbab9260dfd17",
6
7
  "agents": {
7
8
  "pi-pi/agent-expert": {
8
9
  "path": ".pi/agents/pi-pi/agent-expert.md",
@@ -46,67 +47,63 @@
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"
66
63
  },
67
64
  "harness/running/executor": {
68
65
  "path": ".pi/agents/harness/running/executor.md",
69
- "sha256": "a48c37b2922b98fe20156367ae8c8fe761ae139153d402035a5aa35c9a14f106"
66
+ "sha256": "219c9307567acc95a9c1b1340f899fac860406fb2c2e84f51b4a8c3ba3a0e2ec"
70
67
  },
71
68
  "harness/reviewing/adversary": {
72
69
  "path": ".pi/agents/harness/reviewing/adversary.md",
73
- "sha256": "697ee7c784e8eb30ce96f4f16e9bb5f9cdcaae76a4a7083ace2fe4272e6d732f"
70
+ "sha256": "01ae05b38943c1d1fea373701dc060cc3a3f5125f2a03af468a6a1a877f1c83c"
74
71
  },
75
72
  "harness/reviewing/evaluator": {
76
73
  "path": ".pi/agents/harness/reviewing/evaluator.md",
77
- "sha256": "587ae14d6e91fd8af2b2842f568b9a1fa0b1d84fa6e18b4bc21c0ba2a9e62218"
74
+ "sha256": "5d6d34654d5c223e5549de9b7b0277b4e28745b2409545ecf3034bd0789c3fa3"
78
75
  },
79
76
  "harness/reviewing/tie-breaker": {
80
77
  "path": ".pi/agents/harness/reviewing/tie-breaker.md",
81
- "sha256": "1c54c1c3274291dea1ea8826563a7ad4fe1d9c4302984e907bfcd22cfc4f5eba"
78
+ "sha256": "80312a10772fde4bccc294a4ba7c470bf46d3054207393d2af42af277e5edad6"
82
79
  },
83
80
  "harness/planning/decompose": {
84
81
  "path": ".pi/agents/harness/planning/decompose.md",
85
- "sha256": "734eaa1bc87c337f6582c8f1c97baabf51e807731ab3c075c8960a9d207145e2"
82
+ "sha256": "944c7221b7bf8e15cd8cf324c3d5ae135c643c6387d8f611cf9128f9ea922963"
86
83
  },
87
84
  "harness/planning/execution-plan-author": {
88
85
  "path": ".pi/agents/harness/planning/execution-plan-author.md",
89
- "sha256": "55ece0f1ee14abd17fe7b3e478b548240f637eacbfc2a34758e98d3878dc82fd"
86
+ "sha256": "3b83edca1eb393941e04213c5cabe0e4b180e52df59169ba24904341a369ead5"
90
87
  },
91
88
  "harness/planning/hypothesis-validator": {
92
89
  "path": ".pi/agents/harness/planning/hypothesis-validator.md",
93
- "sha256": "20411e5d734b14b05ae11153133089e044f46784e5b4741712f608665bbf4376"
90
+ "sha256": "ee68aa5c04b903320116cfa21cea8f130199fd21e1fd1a8a747830bf53920fdb"
94
91
  },
95
92
  "harness/planning/hypothesis": {
96
93
  "path": ".pi/agents/harness/planning/hypothesis.md",
97
- "sha256": "bbb91ac0de39c9de4bf388f0cf926151b6b6a7771d2a0d01d1009a1860daef77"
94
+ "sha256": "c974f5381aa562589942e8d52b48bdace6663e10caed6bf5f2fb9ce11d84b0bc"
98
95
  },
99
96
  "harness/planning/implementation-researcher": {
100
97
  "path": ".pi/agents/harness/planning/implementation-researcher.md",
101
- "sha256": "d1bbaaf1e67ad98350319f973062f01a25ca70874c99cb335c99bec866da1f6d"
98
+ "sha256": "8664ad35c63adcc3a6c52b84360d5e8217f9f581b0a9f23b565187a8f7c7bf22"
102
99
  },
103
100
  "harness/planning/plan-adversary": {
104
101
  "path": ".pi/agents/harness/planning/plan-adversary.md",
105
- "sha256": "d9a953c0f8f900dc9a95816ada401955dafade7bf5907406cbe3bf3ba760c469"
102
+ "sha256": "305cfa6cd0d4e6493a2dad2f01d8cb0b0dddc06df11f871746f6da7124c9d16b"
106
103
  },
107
104
  "harness/planning/plan-evaluator": {
108
105
  "path": ".pi/agents/harness/planning/plan-evaluator.md",
109
- "sha256": "825f296c487d6aeacad5d320e155a3f23d0db6dea822fccc99a1305941a43da2"
106
+ "sha256": "1a6f465f4d400bcf32b9e82a1032ae789354f264af31c8d358b2a0dde7df81bf"
110
107
  },
111
108
  "harness/planning/plan-synthesizer": {
112
109
  "path": ".pi/agents/harness/planning/plan-synthesizer.md",
@@ -114,19 +111,19 @@
114
111
  },
115
112
  "harness/planning/planning-context": {
116
113
  "path": ".pi/agents/harness/planning/planning-context.md",
117
- "sha256": "96a51d1f2daafc9eaa8869a06ede9d04fc9e19076d58a81041e346e4c81c8b08"
114
+ "sha256": "4427e3c50fe0970a753df458ee41fde93b8c9d4ee7034c7541df7a97e978b17e"
118
115
  },
119
116
  "harness/planning/review-integrator": {
120
117
  "path": ".pi/agents/harness/planning/review-integrator.md",
121
- "sha256": "bba385463ca8833654cd0dc80f666344332293fe86d7420d2c36755a3f9e743a"
118
+ "sha256": "3f60c41768cad24150718b4a415b9636b0df6892195986a90fc77e2d0a6be537"
122
119
  },
123
120
  "harness/planning/sprint-contract-auditor": {
124
121
  "path": ".pi/agents/harness/planning/sprint-contract-auditor.md",
125
- "sha256": "2321298529f70d03798d23346231c4c43ad4b7490a43f291430ca65b3ef93757"
122
+ "sha256": "402c585168c5510b5f22837d2fb157726b928fa59108a8580437ac6ac08d04f5"
126
123
  },
127
124
  "harness/planning/stack-researcher": {
128
125
  "path": ".pi/agents/harness/planning/stack-researcher.md",
129
- "sha256": "ce546ef3aca19da7f334f07cef8f510b79068bffeb7f276c428f3e6236bbe96b"
126
+ "sha256": "641bcd714df327579ff28db04aeabf5d7ee5f36e333e5ae6971967c591863ca4"
130
127
  }
131
128
  }
132
129
  }