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
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: data-modeling-migrations
3
+ description: Safely evolve stored data and schemas. Use when adding or changing database fields, indexes, files, serialized formats, caches, event payloads, search indexes, or migration scripts. Focuses on compatibility, rollout phases, rollback, existing data, and query behavior.
4
+ ---
5
+
6
+ # Data Modeling and Migrations
7
+
8
+ Use this skill when code changes persisted or exchanged data.
9
+
10
+ ## Workflow
11
+
12
+ 1. Identify every reader and writer of the data.
13
+ 2. Separate schema/format change, data backfill, and code behavior change when risk warrants.
14
+ 3. Prefer backward-compatible additions before breaking removals or renames.
15
+ 4. Plan behavior while old and new versions coexist.
16
+ 5. Validate existing production-like data assumptions.
17
+ 6. Add indexes or access paths based on actual query patterns.
18
+ 7. Define rollback or recovery for failed migrations.
19
+ 8. Add tests for old data, new data, missing fields, and mixed-version compatibility.
20
+
21
+ ## Safety checks
22
+
23
+ - Is the migration destructive or irreversible?
24
+ - Does it lock or block critical paths?
25
+ - Are defaults correct for existing records?
26
+ - Can old code read new data and new code read old data during rollout?
27
+ - Are caches/search/projections updated or rebuildable?
28
+
29
+ ## Ask before
30
+
31
+ Destructive deletion, irreversible transformation, broad backfill, or compatibility-breaking format changes.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: observability-instrumentation
3
+ description: Add useful logs, metrics, traces, events, and diagnostics without noise or data leaks. Use when changing failure paths, background jobs, workflows, integrations, performance-sensitive paths, or production-debuggable behavior. Focuses on actionable signals and safe context.
4
+ ---
5
+
6
+ # Observability Instrumentation
7
+
8
+ Use this skill to make behavior diagnosable in real environments.
9
+
10
+ ## Signal types
11
+
12
+ - Logs: discrete decisions, failures, lifecycle transitions, and unusual states.
13
+ - Metrics: counts, durations, rates, queue depth, success/failure, saturation.
14
+ - Traces/spans: cross-boundary request or workflow paths.
15
+ - Audit/events: business-relevant actions that need history.
16
+ - Health checks: readiness, liveness, dependency status.
17
+
18
+ ## Workflow
19
+
20
+ 1. Identify what a maintainer/operator must know when this fails.
21
+ 2. Add signals at boundaries and important state transitions.
22
+ 3. Include correlation identifiers or stable context when available.
23
+ 4. Redact secrets and personal/sensitive data.
24
+ 5. Keep labels/cardinality bounded.
25
+ 6. Avoid logging tight loops or expected noisy paths at high severity.
26
+ 7. Test or inspect that instrumentation executes on success and failure paths.
27
+
28
+ ## Review questions
29
+
30
+ - Can someone diagnose the failure without reproducing locally?
31
+ - Are logs actionable rather than decorative?
32
+ - Will this create noise, cost, or privacy risk?
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: performance-measurement
3
+ description: Improve performance with evidence instead of premature optimization. Use when optimizing latency, throughput, memory, startup, storage, queries, algorithms, rendering, build time, or hot paths. Guides baseline measurement, bottleneck isolation, complexity analysis, and regression guards.
4
+ ---
5
+
6
+ # Performance Measurement
7
+
8
+ Use this skill before and during performance work.
9
+
10
+ ## Workflow
11
+
12
+ 1. Define the performance goal and user/system impact.
13
+ 2. Measure a baseline with representative input or workload.
14
+ 3. Identify the bottleneck before changing code.
15
+ 4. Estimate algorithmic complexity and data-size effects.
16
+ 5. Make the smallest optimization that targets the measured bottleneck.
17
+ 6. Re-measure and compare against the baseline.
18
+ 7. Add a benchmark, regression test, or monitoring signal when future regressions matter.
19
+ 8. Preserve readability unless performance evidence justifies complexity.
20
+
21
+ ## Common bottleneck classes
22
+
23
+ - repeated expensive work
24
+ - inefficient data access pattern
25
+ - unnecessary serialization/parsing
26
+ - blocking IO in hot path
27
+ - unbounded memory growth
28
+ - poor batching/caching strategy
29
+ - algorithmic complexity mismatch
30
+
31
+ ## Avoid
32
+
33
+ - Optimizing cold paths.
34
+ - Adding caches without invalidation rules.
35
+ - Trading correctness or maintainability for unmeasured speed.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: reliability-design
3
+ description: Design code for predictable behavior under faults. Use when touching IO, storage, queues, events, workflows, services, retries, timeouts, background jobs, distributed state, or operator-facing failures. Applies reliability, fault tolerance, partial failure, degradation, and recovery thinking.
4
+ ---
5
+
6
+ # Reliability Design
7
+
8
+ Use this skill when code must keep working, fail safely, or recover under imperfect conditions.
9
+
10
+ ## Workflow
11
+
12
+ 1. Identify failure modes: dependency down, timeout, duplicate work, partial write, stale read, invalid state, resource exhaustion, human/operator error.
13
+ 2. Decide desired behavior for each important failure: reject, retry, compensate, degrade, queue, alert, or fail fast.
14
+ 3. Add timeouts and cancellation where waits can hang.
15
+ 4. Add retries only when operations are safe or idempotent.
16
+ 5. Preserve enough state/context for recovery.
17
+ 6. Add observability for failures and recovery paths.
18
+ 7. Test representative failure modes.
19
+
20
+ ## Design checks
21
+
22
+ - Is there a single source of truth for critical state?
23
+ - Can the operation run twice safely?
24
+ - What happens if the process stops halfway?
25
+ - What does the caller see during partial failure?
26
+ - How will an operator or developer diagnose this?
27
+
28
+ ## Avoid
29
+
30
+ - Infinite retries.
31
+ - Hidden partial success.
32
+ - Treating network/storage/process calls as always reliable.
@@ -23,9 +23,9 @@ order = 0
23
23
 
24
24
  [[layers]]
25
25
  name = "contracts"
26
- paths = [".pi/harness/specs/*", ".pi/harness/docs/*"]
26
+ paths = [".pi/harness/specs/*", ".pi/harness/docs/*", ".pi/harness/policies/*", ".pi/harness/agents.policy.yaml", ".pi/harness/examples/*"]
27
27
  order = 1
28
- # Harness schemas, ADRs, and governance docs
28
+ # Harness schemas, ADRs, AGT policies, and agents.policy SSOT
29
29
 
30
30
  [[layers]]
31
31
  name = "runtime"
@@ -41,9 +41,15 @@ order = 3
41
41
 
42
42
  [[layers]]
43
43
  name = "tooling"
44
- paths = [".pi/scripts/*", "test/*"]
44
+ paths = [".pi/scripts/*"]
45
45
  order = 4
46
- # Harness CLI scripts and tests
46
+ # Harness CLI scripts
47
+
48
+ [[layers]]
49
+ name = "foundation"
50
+ paths = [".pi/lib/*"]
51
+ order = 5
52
+ # Shared harness/AGT libraries (imported by extensions and scripts)
47
53
 
48
54
  [[boundaries]]
49
55
  from = ".agents/skills/*"
@@ -65,6 +71,16 @@ from = ".pi/harness/specs/*"
65
71
  to = ".pi/extensions/*"
66
72
  reason = "Contracts are data-only JSON schemas; extensions implement behavior"
67
73
 
74
+ [[boundaries]]
75
+ from = ".pi/lib/*"
76
+ to = ".pi/extensions/*"
77
+ reason = "Foundation lib must not import extension modules"
78
+
79
+ [[boundaries]]
80
+ from = ".pi/harness/policies/*"
81
+ to = ".pi/extensions/*"
82
+ reason = "Declarative AGT YAML must not depend on extension implementation"
83
+
68
84
  [[boundaries]]
69
85
  from = ".pi/scripts/*"
70
86
  to = ".agents/skills/*"
package/AGENTS.md CHANGED
@@ -4,6 +4,11 @@ Purpose: Agentic coding harness — architecture, research, decisions, implement
4
4
  Owner: pi-mono + user
5
5
  Created: 2026-05-14
6
6
 
7
+ ## Instruction Boundaries
8
+
9
+ - `.pi/SYSTEM.md` is the reusable harness-level agent prompt and should remain project-agnostic for external projects.
10
+ - Keep ultimate-pi-specific paths, ownership, local conventions, and repository facts in this `AGENTS.md` file (or nearby project docs), not in `.pi/SYSTEM.md`.
11
+
7
12
  ## Structure
8
13
 
9
14
  - graphify-out/ → Knowledge graph (run `graphify update .` to build)
@@ -11,7 +16,7 @@ Created: 2026-05-14
11
16
  - docs/adr/ → Repo-level Architectural Decision Records
12
17
  - .pi/harness/docs/adrs/ → Harness ADRs (team-shared; [index](.pi/harness/docs/adrs/README.md))
13
18
  - .pi/harness/docs/practice-map.md → Phase → practice → agent spawn topology for `/harness-plan`, `/harness-run`, `/harness-review`
14
- - .pi/skills/ → Agent skills
19
+ - .pi/skills/ → Agent skills (harness skills symlink to `.agents/skills/`, e.g. `web-retrieval`)
15
20
  - .pi/agents/ → Specialized agents
16
21
 
17
22
  ## Graphify-First Workflow
@@ -31,7 +36,7 @@ Created: 2026-05-14
31
36
  - Harness context: **context-mode only** — never lean-ctx on harness paths (see harness-context skill)
32
37
  - `graphify update .` after significant code changes
33
38
  - ast-grep (`sg`) is the default code search tool — use `sg -p 'pattern'` for structural search, never grep for code
34
- - Web fetch/search via `python3 "$UP_PKG/.pi/scripts/harness-web.py"` (Scrapling; see scrapling-web skill)
39
+ - Non-API web: invoke **`web-retrieval`** skill (WRS tiers; default `tier=deep` with `web-query-expander` → `anglesFile`). CLI: `python3 "$UP_PKG/.pi/scripts/harness-web.py"`
35
40
 
36
41
  ## graphify
37
42
 
package/CHANGELOG.md CHANGED
@@ -6,8 +6,28 @@ All notable changes to this project are documented in this file.
6
6
 
7
7
  ### ✨ Features
8
8
 
9
+ - **Harness lens:** Integrate selected pi-lens capabilities through a harness-owned extension, store lens state under `.pi/harness/.lens`, and route lens findings through harness PostHog telemetry instead of standalone lens health/telemetry surfaces.
9
10
  - **Graphify KB updater:** Productize conservative daily discovery/promotion with explicit repo/release taxonomy, allowlist source-class gates, operator review queue reporting, scheduler smoke validation, and safe Graphify refresh controls.
10
11
 
12
+ ## [v0.19.1] — 2026-05-26
13
+
14
+ ### 🔧 Chores
15
+
16
+ - Prepare web retrieval and harness updates for release.
17
+
18
+ ## [v0.19.0] — 2026-05-24
19
+
20
+ ### ✨ Features
21
+
22
+ - **Harness:** `agents.policy.yaml` as per-agent tool SSOT with manifest alignment; subprocess `subagent-governance` bundle and AGT `tool_allowed` enforcement.
23
+ - **Harness:** Consolidate shared modules under `.pi/lib/` (moved from `.pi/extensions/lib/`); update imports, packaging, verify, and tests.
24
+ - **Harness:** AGT-backed policy gate with subprocess governance bundle (extends v0.18.x AGT work).
25
+
26
+ ### 🔧 Chores
27
+
28
+ - Apply Biome organize-imports and format fixes across moved harness library files.
29
+ - Commit pending harness architecture and context tooling updates.
30
+
11
31
  ## [v0.18.1] — 2026-05-24
12
32
 
13
33
  ### 🔧 Chores
package/README.md CHANGED
@@ -64,7 +64,7 @@ If `/harness-review` returns `implementation_gap`, run:
64
64
 
65
65
  | Command | Purpose |
66
66
  |---|---|
67
- | `/harness-setup [--skip-graphify] [--skip-tools] [--non-interactive] [--force]` | Idempotent project bootstrap: Graphify, harness-web/Scrapling, CLI tools, settings, contracts, Sentrux, model router, and verification. |
67
+ | `/harness-setup [--skip-graphify] [--skip-tools] [--non-interactive] [--force]` | Idempotent project bootstrap: Graphify, harness-web/Scrapling, CLI tools, settings, contracts, Sentrux, harness lens, and verification. |
68
68
  | `/harness-auto "<task>" [--quick] [--risk low\|med\|high]` | Strict full pipeline: plan, execute, review, steer when appropriate. |
69
69
  | `/harness-plan "<task>" [--risk low\|med\|high] [--quick]` | PM-grade planning: reconnaissance, decomposition, hypothesis, external research, ExecutionPlan, DAG validation, Review Gate debate, `approve_plan`, `create_plan`. |
70
70
  | `/harness-run` | Executes the approved active PlanPacket by spawning `harness/running/executor`; no inline implementation. |
@@ -74,19 +74,11 @@ If `/harness-review` returns `implementation_gap`, run:
74
74
  | `/harness-trace [--run <id>] [--phase plan\|execute\|evaluate\|adversary\|merge]` | Summarizes run traces and artifact handoffs for replay/forensics. |
75
75
  | `/harness-incident --trigger <reason> [--run <id>] [--severity low\|med\|high\|critical]` | Records incident, rollback, and override trail for harness failures. |
76
76
  | `/harness-sentrux-steward [--run <id>]` | Ad-hoc architectural intent review for Sentrux manifest/rule alignment. |
77
- | `/harness-router-tune --evidence <evidence.json> --candidate <candidate-router.json> [--proposal <out.json>]` | Proposes model-router updates from evidence; applies only after explicit approval. |
78
77
  | `/graphify [directory]` | Bootstraps or updates the Graphify knowledge graph. |
79
78
  | `/wiki-autoresearch [topic]` | Runs autonomous web research and builds a Graphify-backed research wiki. |
80
79
  | `/wiki-save` | Saves the current conversation or insight as a structured wiki note. |
81
80
  | `/release [patch\|minor\|major] [--dry-run]` | Maintainer release helper. |
82
81
 
83
- Deprecated compatibility aliases:
84
-
85
- | Alias | Use instead |
86
- |---|---|
87
- | `/harness-eval` | `/harness-review` |
88
- | `/harness-critic` | `/harness-review` |
89
-
90
82
  ## Harness phases and agents
91
83
 
92
84
  - **Planning** uses agents under `.pi/agents/harness/planning/` plus parent-led Graphify → `sg` → `ccc` reconnaissance. Legacy tool-tied `planning/scout-*` agents have been removed; planning context is captured in `artifacts/planning-context.yaml`.
@@ -116,8 +108,8 @@ Subagents run isolated from the parent session. They persist canonical YAML thro
116
108
  - **No inline execution:** `/harness-run` delegates to `harness/running/executor` only.
117
109
  - **No inline review:** `/harness-review` delegates verdicts to isolated reviewing agents.
118
110
  - **No auto-merge:** final merge remains a human/operator decision.
119
- - **Sentrux is observational:** structural baselines and gates inform review; executor does not optimize metrics as a goal.
120
- - **Router is gated:** `pi-model-router` activates after `/harness-setup` creates `.pi/model-router.json`; run `/reload` after setup or router changes.
111
+ - **Sentrux is the architecture signal:** structural baselines and gates inform review; executor does not optimize metrics as a goal.
112
+ - **pi-lens is edit-time diagnostics:** LSP/lint/format/ast feedback complements Sentrux and does not replace architecture gating.
121
113
 
122
114
  ## Troubleshooting
123
115
 
@@ -129,7 +121,6 @@ Subagents run isolated from the parent session. They persist canonical YAML thro
129
121
  | Need to restart safely | Run `/harness-abort [reason]`, then create a fresh plan. |
130
122
  | Review says `implementation_gap` | Run `/harness-steer`, then `/harness-review`. |
131
123
  | Review says `plan_gap` | Revise with `/harness-plan "<updated task>"`. |
132
- | Router profile missing | Complete `/harness-setup`, run `/reload`, then check `.pi/model-router.json`. |
133
124
  | Sentrux missing | Install/configure Sentrux or keep it skipped; harness verification still reports the status. |
134
125
 
135
126
  Optional integrations can be configured by copying `.env.example` to `.env`; `/harness-setup` appends missing keys without overwriting existing values.
@@ -1,31 +1,22 @@
1
- # Third-party notices
2
-
3
- ## pi-model-router (vendored)
4
-
5
- - **Project:** https://github.com/yeliu84/pi-model-router
6
- - **License:** MIT ([vendor/pi-model-router/LICENSE](vendor/pi-model-router/LICENSE))
7
- - **Pinned revision:** See [vendor/pi-model-router/UPSTREAM_PIN.md](vendor/pi-model-router/UPSTREAM_PIN.md)
8
- - ultimate-pi loads it from [`vendor/pi-model-router`](vendor/pi-model-router); import specifiers were adapted for `@earendil-works/pi-coding-agent` and related Pi packages.
9
-
10
1
  ## pi-vcc (vendored)
11
2
 
12
- - **Project:** https://github.com/sting8k/pi-vcc
13
- - **Conceptual basis:** https://github.com/lllyasviel/VCC (View-oriented Conversation Compiler)
14
- - **License:** MIT (see upstream repository)
15
- - **Pinned revision:** See [vendor/pi-vcc/UPSTREAM_PIN.md](vendor/pi-vcc/UPSTREAM_PIN.md)
16
- - ultimate-pi loads it from [`vendor/pi-vcc`](vendor/pi-vcc) via [`.pi/extensions/ultimate-pi-vcc.ts`](.pi/extensions/ultimate-pi-vcc.ts). Harness configuration is env-only: `HARNESS_VCC_COMPACTION`, `HARNESS_VCC_DEBUG` ([`.pi/extensions/lib/harness-vcc-settings.ts`](.pi/extensions/lib/harness-vcc-settings.ts)). Maintainer refresh: `npm run vendor:sync-vcc`.
3
+ - **Project:** https://github.com/sting8k/pi-vcc
4
+ - **Conceptual basis:** https://github.com/lllyasviel/VCC (View-oriented Conversation Compiler)
5
+ - **License:** MIT (see upstream repository)
6
+ - **Pinned revision:** See [vendor/pi-vcc/UPSTREAM_PIN.md](vendor/pi-vcc/UPSTREAM_PIN.md)
7
+ - ultimate-pi loads it from [`vendor/pi-vcc`](vendor/pi-vcc) via [`.pi/extensions/ultimate-pi-vcc.ts`](.pi/extensions/ultimate-pi-vcc.ts). Harness configuration is env-only: `HARNESS_VCC_COMPACTION`, `HARNESS_VCC_DEBUG` ([`.pi/lib/harness-vcc-settings.ts`](.pi/lib/harness-vcc-settings.ts)). Maintainer refresh: `npm run vendor:sync-vcc`.
17
8
 
18
9
  ## pi-subagents (vendored)
19
10
 
20
- - **Project:** https://github.com/narumiruna/pi-extensions (`extensions/pi-subagents`)
21
- - **npm:** `@narumitw/pi-subagents@0.1.26`
22
- - **License:** MIT ([vendor/pi-subagents/LICENSE](vendor/pi-subagents/LICENSE))
23
- - **Pinned revision:** See [vendor/pi-subagents/UPSTREAM_PIN.md](vendor/pi-subagents/UPSTREAM_PIN.md)
11
+ - **Project:** https://github.com/narumiruna/pi-extensions (`extensions/pi-subagents`)
12
+ - **npm:** `@narumitw/pi-subagents@0.1.26`
13
+ - **License:** MIT ([vendor/pi-subagents/LICENSE](vendor/pi-subagents/LICENSE))
14
+ - **Pinned revision:** See [vendor/pi-subagents/UPSTREAM_PIN.md](vendor/pi-subagents/UPSTREAM_PIN.md)
24
15
  - ultimate-pi loads it from [`vendor/pi-subagents`](vendor/pi-subagents) via [`.pi/extensions/harness-subagents.ts`](.pi/extensions/harness-subagents.ts) with harness discovery, spawn gates, and subprocess env. Maintainer refresh: `npm run vendor:sync-subagents`.
25
16
 
26
17
  ## CocoIndex Code (CLI + skill)
27
18
 
28
- - **Project:** https://github.com/cocoindex-io/cocoindex-code
29
- - **License:** Apache-2.0
30
- - **Install:** `uv tool install 'cocoindex-code[full]'` (see `/harness-setup` §2.4)
19
+ - **Project:** https://github.com/cocoindex-io/cocoindex-code
20
+ - **License:** Apache-2.0
21
+ - **Install:** `uv tool install 'cocoindex-code[full]'` (see `/harness-setup` §2.4)
31
22
  - ultimate-pi vendors the upstream agent skill at [`.agents/skills/ccc/`](.agents/skills/ccc/) and bootstraps indexes via [`.pi/scripts/harness-cocoindex-bootstrap.sh`](.pi/scripts/harness-cocoindex-bootstrap.sh). Replaces deprecated `@beaconbay/ck-search`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-pi",
3
- "version": "0.18.1",
3
+ "version": "0.19.1",
4
4
  "description": "Ultimate AI coding harness for pi.dev — extensible skills, Obsidian wiki knowledge layer, compressed context, deterministic output",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -46,6 +46,7 @@
46
46
  ".pi/lib",
47
47
  ".pi/sounds",
48
48
  ".pi/harness/env.harness.template",
49
+ ".pi/harness/policies",
49
50
  ".pi/harness/specs",
50
51
  ".pi/harness/docs",
51
52
  ".pi/harness/sentrux",
@@ -53,10 +54,14 @@
53
54
  ".pi/harness/evolution",
54
55
  ".pi/harness/corpus",
55
56
  ".pi/harness/agents.manifest.json",
57
+ ".pi/harness/agents.policy.yaml",
58
+ ".pi/harness/examples",
59
+ ".pi/harness/web-heuristic-angles.yaml",
60
+ ".pi/harness/web-heuristic-angles.json",
61
+ ".pi/lib/harness-lens",
56
62
  ".pi/harness/README.md",
57
63
  ".pi/npm/package.json",
58
64
  ".pi/npm/.gitignore",
59
- ".pi/model-router.example.json",
60
65
  ".pi/settings.example.json",
61
66
  ".pi/auto-commit.json",
62
67
  ".pi/SYSTEM.md",
@@ -66,7 +71,6 @@
66
71
  "CHANGELOG.md",
67
72
  "README.md",
68
73
  "THIRD_PARTY_NOTICES.md",
69
- "vendor/pi-model-router",
70
74
  "vendor/pi-subagents",
71
75
  "vendor/pi-vcc"
72
76
  ],
@@ -74,8 +78,7 @@
74
78
  "@earendil-works/pi-coding-agent": "*"
75
79
  },
76
80
  "scripts": {
77
- "check:ts": "tsc --noEmit --target ES2023 --lib ES2023 --moduleResolution nodenext --module nodenext --skipLibCheck .pi/extensions/00-harness-project-control.ts .pi/extensions/custom-system-prompt.ts .pi/lib/harness-run-context.ts .pi/lib/harness-context-mode-policy.ts .pi/lib/harness-ui-state.ts .pi/extensions/harness-run-context.ts .pi/extensions/lib/harness-vcc-settings.ts .pi/extensions/dotenv-loader.ts .pi/extensions/00-posthog-network-bootstrap.ts .pi/extensions/lib/posthog-client.ts .pi/extensions/lib/posthog-node.d.ts .pi/extensions/lib/harness-posthog.ts .pi/extensions/lib/harness-paths.ts .pi/extensions/pi-model-router-harness.ts .pi/extensions/provider-payload-sanitize.ts .pi/extensions/harness-telemetry.ts .pi/extensions/harness-ask-user.ts .pi/extensions/harness-plan-approval.ts .pi/extensions/lib/ask-user/schema.ts .pi/extensions/lib/ask-user/types.ts .pi/extensions/lib/ask-user/validate.ts .pi/extensions/lib/ask-user/dialog.ts .pi/extensions/lib/ask-user/fallback.ts .pi/extensions/lib/ask-user/render.ts .pi/extensions/lib/plan-approval/types.ts .pi/extensions/lib/plan-approval/schema.ts .pi/extensions/lib/plan-approval/validate.ts .pi/extensions/lib/plan-approval/format-plan.ts .pi/extensions/lib/plan-approval/dialog.ts .pi/extensions/lib/plan-approval/render.ts .pi/extensions/lib/plan-approval/create-plan.ts .pi/extensions/harness-subagents.ts .pi/extensions/lib/harness-subagents-bridge.ts .pi/extensions/lib/harness-cocoindex-refresh.ts .pi/extensions/lib/harness-subagent-auth.ts .pi/extensions/lib/harness-subagent-policy.ts .pi/extensions/lib/harness-subagent-precheck.ts .pi/extensions/lib/harness-spawn-budget.ts .pi/extensions/lib/spawn-policy.ts vendor/pi-subagents/src/agents.ts vendor/pi-subagents/src/subagents.ts .pi/extensions/review-integrity.ts .pi/extensions/trace-recorder.ts .pi/extensions/observation-bus.ts .pi/extensions/drift-monitor.ts .pi/extensions/policy-gate.ts .pi/extensions/budget-guard.ts .pi/extensions/debate-orchestrator.ts .pi/extensions/harness-debate-tools.ts .pi/extensions/lib/debate-bus-core.ts .pi/extensions/lib/debate-bus-state.ts .pi/extensions/lib/plan-debate-gate.ts .pi/extensions/lib/plan-debate-id.ts .pi/extensions/lib/plan-messenger.ts .pi/extensions/lib/plan-debate-envelope.ts .pi/extensions/lib/plan-review-integrator-rules.ts .pi/extensions/lib/plan-scope-guard.ts .pi/extensions/lib/plan-debate-write-guard.ts .pi/extensions/lib/plan-debate-lane.ts .pi/extensions/lib/plan-debate-round-status.ts .pi/extensions/harness-live-widget.ts .pi/extensions/sentrux-rules-sync.ts .pi/extensions/custom-header.ts .pi/extensions/harness-web-tools.ts .pi/extensions/harness-web-guard.ts .pi/extensions/lib/harness-web/run-cli.ts",
78
- "vendor:sync-router": "bash .pi/scripts/vendor-sync-pi-model-router.sh",
81
+ "check:ts": "tsc -p tsconfig.check.json",
79
82
  "vendor:sync-vcc": "bash .pi/scripts/vendor-sync-pi-vcc.sh",
80
83
  "vendor:sync-subagents": "bash .pi/scripts/vendor-sync-pi-subagents.sh",
81
84
  "release": "bash .pi/scripts/release.sh",
@@ -84,7 +87,7 @@
84
87
  "format": "biome format --write",
85
88
  "format:check": "biome format",
86
89
  "prepare": "lefthook install",
87
- "test": "node --test test/harness-verify.test.mjs test/posthog-client.test.mjs test/harness-ask-user.test.mjs test/harness-subagents-loader.test.mjs test/harness-subagent-precheck.test.mjs test/sentrux-rules-sync.test.mjs test/harness-budget-guard.test.mjs && node .pi/harness/evals/smoke/smoke-harness-plan.mjs --fixture && npx -y tsx --test test/harness-vcc-settings.test.ts test/harness-run-context-postrun.test.mjs test/harness-tool-payload.test.mjs test/harness-live-widget-status.test.ts test/harness-project-toggle-tui.test.ts test/harness-plan-phase-policy.test.mjs test/harness-context-mode-policy.test.mjs test/harness-subprocess-bootstrap.test.mjs test/harness-subagent-policy.test.mjs test/harness-subagent-precheck-topology.test.mjs test/plan-approval-readiness.test.mjs test/harness-spawn-budget.test.mjs test/harness-spawn-parse.test.mjs test/harness-schema-validate.test.mjs test/harness-turn-routing.test.mjs test/harness-budget-enforce.test.mjs test/harness-submit-policy.test.mjs test/plan-approval-format.test.mjs test/plan-approval-dialog.test.mjs test/plan-approval-sync.test.mjs test/plan-create-plan.test.mjs test/plan-review-format.test.mjs test/debate-plan-phase.test.mjs test/plan-debate-eligibility.test.mjs test/plan-messenger-gate.test.mjs test/plan-debate-lane-apply.test.mjs test/review-integrity-revise-handoff.test.mjs test/harness-plan-revise-reset.test.mjs",
90
+ "test": "node --test test/harness-verify.test.mjs test/harness-ask-user.test.mjs test/harness-subagents-loader.test.mjs test/harness-subagent-precheck.test.mjs test/sentrux-rules-sync.test.mjs test/harness-budget-guard.test.mjs && node .pi/harness/evals/smoke/smoke-harness-plan.mjs --fixture && npx -y tsx --test test/harness-web-cache.test.mjs test/harness-web-artifacts.test.mjs test/harness-subagent-auth.test.mjs test/posthog-client.test.mjs test/harness-agt-policy-load.test.mjs test/harness-agt-policy-matrix.test.mjs test/harness-agt-policy-parity.test.mjs test/harness-agt-packaging.test.mjs test/harness-tool-call-hook-chain.test.mjs test/harness-vcc-settings.test.ts test/harness-run-context-postrun.test.mjs test/harness-tool-payload.test.mjs test/harness-live-widget-status.test.ts test/harness-project-toggle-tui.test.ts test/harness-plan-phase-policy.test.mjs test/harness-context-mode-policy.test.mjs test/harness-subprocess-bootstrap.test.mjs test/harness-subagent-policy.test.mjs test/harness-subagent-precheck-topology.test.mjs test/plan-approval-readiness.test.mjs test/harness-spawn-budget.test.mjs test/harness-spawn-parse.test.mjs test/harness-schema-validate.test.mjs test/harness-turn-routing.test.mjs test/harness-budget-enforce.test.mjs test/harness-submit-policy.test.mjs test/harness-project-agents-policy.test.mjs test/plan-approval-format.test.mjs test/plan-approval-dialog.test.mjs test/plan-approval-sync.test.mjs test/plan-create-plan.test.mjs test/plan-review-format.test.mjs test/debate-plan-phase.test.mjs test/plan-debate-eligibility.test.mjs test/plan-messenger-gate.test.mjs test/plan-debate-lane-apply.test.mjs test/review-integrity-revise-handoff.test.mjs test/harness-plan-revise-reset.test.mjs",
88
91
  "test:vcc": "npx -y tsx --test vendor/pi-vcc/tests/*.test.ts",
89
92
  "harness:sentrux-bootstrap": "node .pi/scripts/harness-sentrux-bootstrap.mjs",
90
93
  "harness:sentrux-sync": "node .pi/scripts/sentrux-rules-sync.mjs --force",
@@ -102,14 +105,21 @@
102
105
  "yaml": "^2.8.0"
103
106
  },
104
107
  "dependencies": {
108
+ "@ast-grep/napi": "^0.42.2",
109
+ "@microsoft/agent-governance-sdk": "^3.7.0",
105
110
  "@posthog/pi": "latest",
106
111
  "ajv": "^8.17.1",
107
112
  "ajv-formats": "^3.0.1",
108
113
  "croner": "^9.0.0",
109
114
  "jimp": "^1.6.1",
115
+ "minimatch": "^10.2.5",
110
116
  "nanoid": "^5.1.5",
111
117
  "posthog-node": "^5.30.6",
112
- "undici": "^7.16.0"
118
+ "tree-sitter-wasms": "^0.1.13",
119
+ "typebox": "^1.1.38",
120
+ "undici": "^7.16.0",
121
+ "vscode-jsonrpc": "^8.2.1",
122
+ "web-tree-sitter": "^0.25.10"
113
123
  },
114
124
  "overrides": {
115
125
  "@mariozechner/pi-agent-core": "npm:@earendil-works/pi-agent-core@0.74.1",
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import * as fs from "node:fs";
6
+ import { createRequire } from "node:module";
6
7
  import * as path from "node:path";
7
8
  import { getAgentDir, parseFrontmatter } from "@earendil-works/pi-coding-agent";
8
9
 
@@ -294,6 +295,42 @@ function resolvePackageAgentsDir(
294
295
  return null;
295
296
  }
296
297
 
298
+ function resolveProjectRootFromCwd(cwd: string): string {
299
+ const projectAgentsDir = findNearestProjectAgentsDir(cwd);
300
+ if (!projectAgentsDir) return cwd;
301
+ const piDir = path.dirname(projectAgentsDir);
302
+ return piDir.endsWith(`${path.sep}.pi`) ? path.dirname(piDir) : cwd;
303
+ }
304
+
305
+ type ApplyAgentPolicyFn = (
306
+ agent: AgentConfig,
307
+ packageRoot: string,
308
+ projectRoot: string,
309
+ ) => AgentConfig;
310
+
311
+ let cachedApplyPolicy: ApplyAgentPolicyFn | null | undefined;
312
+
313
+ function applyAgentsPolicyIfAvailable(
314
+ agent: AgentConfig,
315
+ packageRoot: string | undefined,
316
+ projectRoot: string,
317
+ ): AgentConfig {
318
+ if (!packageRoot) return agent;
319
+ if (cachedApplyPolicy === undefined) {
320
+ try {
321
+ const req = createRequire(path.join(packageRoot, "package.json"));
322
+ const mod = req("./.pi/lib/agents-policy.mjs") as {
323
+ applyAgentPolicyToConfig?: ApplyAgentPolicyFn;
324
+ };
325
+ cachedApplyPolicy = mod.applyAgentPolicyToConfig ?? null;
326
+ } catch {
327
+ cachedApplyPolicy = null;
328
+ }
329
+ }
330
+ if (!cachedApplyPolicy) return agent;
331
+ return cachedApplyPolicy(agent, packageRoot, projectRoot);
332
+ }
333
+
297
334
  export function discoverAgents(
298
335
  cwd: string,
299
336
  scope: AgentScope,
@@ -316,6 +353,7 @@ export function discoverAgents(
316
353
  }
317
354
 
318
355
  const agentMap = new Map<string, AgentConfig>();
356
+ const projectRoot = resolveProjectRootFromCwd(cwd);
319
357
 
320
358
  for (const agent of BUILT_IN_AGENTS) {
321
359
  agentMap.set(agent.name, { ...agent });
@@ -331,7 +369,13 @@ export function discoverAgents(
331
369
  ? "project"
332
370
  : "user";
333
371
  const parsed = parseMarkdownAgent(id, file.content, source, file.filePath);
334
- if (parsed) agentMap.set(parsed.name, parsed);
372
+ if (!parsed) continue;
373
+ const withPolicy = applyAgentsPolicyIfAvailable(
374
+ parsed,
375
+ packageRoot,
376
+ projectRoot,
377
+ );
378
+ agentMap.set(withPolicy.name, withPolicy);
335
379
  }
336
380
 
337
381
  return {