zob-harness 0.2.0 → 0.3.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 (253) hide show
  1. package/.pi/capabilities/zob-public-runtime-capabilities.json +4 -4
  2. package/.pi/extensions/zob-child-safety/AGENTS.md +12 -0
  3. package/.pi/extensions/zob-child-safety/index.ts +4 -105
  4. package/.pi/extensions/zob-child-safety/src/AGENTS.md +10 -0
  5. package/.pi/extensions/zob-child-safety/src/policy.ts +106 -0
  6. package/.pi/extensions/zob-harness/AGENTS.md +2 -0
  7. package/.pi/extensions/zob-harness/index.ts +94 -94
  8. package/.pi/extensions/zob-harness/src/AGENTS.md +4 -0
  9. package/.pi/extensions/zob-harness/src/core/AGENTS.md +24 -0
  10. package/.pi/extensions/zob-harness/src/{constants.ts → core/constants.ts} +10 -1
  11. package/.pi/extensions/zob-harness/src/core/utils/AGENTS.md +23 -0
  12. package/.pi/extensions/zob-harness/src/{utils → core/utils}/formatting.ts +1 -1
  13. package/.pi/extensions/zob-harness/src/{utils → core/utils}/records.ts +1 -1
  14. package/.pi/extensions/zob-harness/src/{utils → core/utils}/resources.ts +1 -1
  15. package/.pi/extensions/zob-harness/src/domains/AGENTS.md +23 -0
  16. package/.pi/extensions/zob-harness/src/domains/autonomy/AGENTS.md +21 -0
  17. package/.pi/extensions/zob-harness/src/{autonomous-runtime.ts → domains/autonomy/autonomous-runtime.ts} +22 -22
  18. package/.pi/extensions/zob-harness/src/{autonomy-readiness.ts → domains/autonomy/autonomy-readiness.ts} +18 -18
  19. package/.pi/extensions/zob-harness/src/{daemon-policy.ts → domains/autonomy/daemon-policy.ts} +6 -6
  20. package/.pi/extensions/zob-harness/src/{daemon-readiness.ts → domains/autonomy/daemon-readiness.ts} +7 -7
  21. package/.pi/extensions/zob-harness/src/{daemon-runtime.ts → domains/autonomy/daemon-runtime.ts} +2 -2
  22. package/.pi/extensions/zob-harness/src/{full-autonomy-test.ts → domains/autonomy/full-autonomy-test.ts} +4 -4
  23. package/.pi/extensions/zob-harness/src/{interactive-autonomy.ts → domains/autonomy/interactive-autonomy.ts} +2 -2
  24. package/.pi/extensions/zob-harness/src/{compute-profile.ts → domains/compute/compute-profile.ts} +3 -3
  25. package/.pi/extensions/zob-harness/src/{compute-workflow-shape.ts → domains/compute/compute-workflow-shape.ts} +3 -3
  26. package/.pi/extensions/zob-harness/src/domains/coms/AGENTS.md +21 -0
  27. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/envelope.ts +2 -2
  28. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/identity.ts +3 -3
  29. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/ledger-bridge.ts +2 -2
  30. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/local-transport.ts +1 -1
  31. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/policy.ts +3 -3
  32. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/presence.ts +1 -1
  33. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/registry.ts +47 -4
  34. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/response-capture.ts +1 -1
  35. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/transcript-capture.ts +2 -2
  36. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/zpeer-profile.ts +3 -3
  37. package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/zpeer.ts +35 -7
  38. package/.pi/extensions/zob-harness/src/{mission-control.ts → domains/coms/mission-control.ts} +12 -9
  39. package/.pi/extensions/zob-harness/src/{zagents.ts → domains/coms/zagents.ts} +86 -4
  40. package/.pi/extensions/zob-harness/src/domains/context/AGENTS.md +20 -0
  41. package/.pi/extensions/zob-harness/src/{context-gbrain.ts → domains/context/context-gbrain.ts} +4 -4
  42. package/.pi/extensions/zob-harness/src/domains/delegation/AGENTS.md +21 -0
  43. package/.pi/extensions/zob-harness/src/{agents.ts → domains/delegation/agents.ts} +2 -2
  44. package/.pi/extensions/zob-harness/src/{capabilities.ts → domains/delegation/capabilities.ts} +6 -6
  45. package/.pi/extensions/zob-harness/src/{child-runner.ts → domains/delegation/child-runner.ts} +8 -8
  46. package/.pi/extensions/zob-harness/src/{output-contracts.ts → domains/delegation/output-contracts.ts} +1 -1
  47. package/.pi/extensions/zob-harness/src/{prompt-packs.ts → domains/delegation/prompt-packs.ts} +4 -4
  48. package/.pi/extensions/zob-harness/src/domains/factory/AGENTS.md +21 -0
  49. package/.pi/extensions/zob-harness/src/{factory → domains/factory}/agentic-plan.ts +1 -1
  50. package/.pi/extensions/zob-harness/src/{factory-selector.ts → domains/factory/factory-selector.ts} +4 -4
  51. package/.pi/extensions/zob-harness/src/{factory → domains/factory}/quarantine.ts +5 -5
  52. package/.pi/extensions/zob-harness/src/{factory → domains/factory}/run.ts +5 -5
  53. package/.pi/extensions/zob-harness/src/{factory → domains/factory}/validation.ts +10 -10
  54. package/.pi/extensions/zob-harness/src/domains/git/AGENTS.md +20 -0
  55. package/.pi/extensions/zob-harness/src/{git-ops.ts → domains/git/git-ops.ts} +3 -3
  56. package/.pi/extensions/zob-harness/src/domains/goal/AGENTS.md +22 -0
  57. package/.pi/extensions/zob-harness/src/{goal-room.ts → domains/goal/goal-room.ts} +7 -7
  58. package/.pi/extensions/zob-harness/src/{goal-todo-imports.ts → domains/goal/goal-todo-imports.ts} +1 -1
  59. package/.pi/extensions/zob-harness/src/{goal-todo-types.ts → domains/goal/goal-todo-types.ts} +1 -1
  60. package/.pi/extensions/zob-harness/src/{goal-todos.ts → domains/goal/goal-todos.ts} +4 -4
  61. package/.pi/extensions/zob-harness/src/{goal.ts → domains/goal/goal.ts} +1 -1
  62. package/.pi/extensions/zob-harness/src/domains/governance/AGENTS.md +21 -0
  63. package/.pi/extensions/zob-harness/src/{budget-policy.ts → domains/governance/budget-policy.ts} +6 -6
  64. package/.pi/extensions/zob-harness/src/{governed-requests.ts → domains/governance/governed-requests.ts} +7 -7
  65. package/.pi/extensions/zob-harness/src/{launch-apply.ts → domains/governance/launch-apply.ts} +4 -4
  66. package/.pi/extensions/zob-harness/src/{merge-queue.ts → domains/governance/merge-queue.ts} +6 -6
  67. package/.pi/extensions/zob-harness/src/{rules.ts → domains/governance/rules.ts} +7 -7
  68. package/.pi/extensions/zob-harness/src/{safety.ts → domains/governance/safety.ts} +3 -3
  69. package/.pi/extensions/zob-harness/src/{sandbox.ts → domains/governance/sandbox.ts} +5 -5
  70. package/.pi/extensions/zob-harness/src/{worker-pool.ts → domains/governance/worker-pool.ts} +7 -7
  71. package/.pi/extensions/zob-harness/src/{workspace-claims.ts → domains/governance/workspace-claims.ts} +6 -6
  72. package/.pi/extensions/zob-harness/src/domains/models/AGENTS.md +20 -0
  73. package/.pi/extensions/zob-harness/src/{model-availability.ts → domains/models/model-availability.ts} +1 -1
  74. package/.pi/extensions/zob-harness/src/{model-routing.ts → domains/models/model-routing.ts} +6 -6
  75. package/.pi/extensions/zob-harness/src/domains/orchestration/AGENTS.md +21 -0
  76. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/adaptive-delegation.ts +8 -8
  77. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/adaptive-workflow.ts +4 -4
  78. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/lead-plan.ts +5 -5
  79. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/plan.ts +5 -5
  80. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/room.ts +4 -4
  81. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/run.ts +6 -6
  82. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/supervised-readonly.ts +6 -6
  83. package/.pi/extensions/zob-harness/src/{orchestration → domains/orchestration}/widget-readers.ts +2 -2
  84. package/.pi/extensions/zob-harness/src/domains/project-dna/AGENTS.md +19 -0
  85. package/.pi/extensions/zob-harness/src/{project-dna.ts → domains/project-dna/project-dna.ts} +4 -4
  86. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/candidate.ts +5 -5
  87. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/coms.ts +3 -3
  88. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/documentation.ts +4 -4
  89. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/factory.ts +2 -2
  90. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/temp-agent.ts +4 -4
  91. package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/write-lane.ts +3 -3
  92. package/.pi/extensions/zob-harness/src/domains/telemetry/AGENTS.md +19 -0
  93. package/.pi/extensions/zob-harness/src/{chronicle.ts → domains/telemetry/chronicle.ts} +3 -3
  94. package/.pi/extensions/zob-harness/src/{queue.ts → domains/telemetry/queue.ts} +7 -7
  95. package/.pi/extensions/zob-harness/src/{telemetry.ts → domains/telemetry/telemetry.ts} +4 -4
  96. package/.pi/extensions/zob-harness/src/{topology → domains/topology}/chains.ts +10 -10
  97. package/.pi/extensions/zob-harness/src/{topology → domains/topology}/coms.ts +3 -3
  98. package/.pi/extensions/zob-harness/src/{topology → domains/topology}/orchestration-profiles.ts +8 -8
  99. package/.pi/extensions/zob-harness/src/{topology → domains/topology}/teams.ts +8 -8
  100. package/.pi/extensions/zob-harness/src/runtime/adaptive-zmode.ts +2 -2
  101. package/.pi/extensions/zob-harness/src/runtime/auto-compaction.ts +2 -2
  102. package/.pi/extensions/zob-harness/src/runtime/commands.ts +51 -29
  103. package/.pi/extensions/zob-harness/src/runtime/compaction-policy.ts +2 -2
  104. package/.pi/extensions/zob-harness/src/runtime/delegation-feed.ts +1 -1
  105. package/.pi/extensions/zob-harness/src/runtime/delegation-monitor.ts +1 -1
  106. package/.pi/extensions/zob-harness/src/runtime/events.ts +53 -37
  107. package/.pi/extensions/zob-harness/src/{goal-runtime.ts → runtime/goal-runtime.ts} +9 -9
  108. package/.pi/extensions/zob-harness/src/runtime/goal-todo-overlay.ts +1 -1
  109. package/.pi/extensions/zob-harness/src/runtime/plan-capture.ts +2 -2
  110. package/.pi/extensions/zob-harness/src/runtime/state.ts +15 -13
  111. package/.pi/extensions/zob-harness/src/runtime/tools-autonomous.ts +2 -2
  112. package/.pi/extensions/zob-harness/src/runtime/tools-compute.ts +3 -3
  113. package/.pi/extensions/zob-harness/src/runtime/tools-coms.ts +15 -12
  114. package/.pi/extensions/zob-harness/src/runtime/tools-context.ts +2 -2
  115. package/.pi/extensions/zob-harness/src/runtime/tools-delegation.ts +13 -13
  116. package/.pi/extensions/zob-harness/src/runtime/tools-factory.ts +19 -19
  117. package/.pi/extensions/zob-harness/src/runtime/tools-goal-room.ts +3 -3
  118. package/.pi/extensions/zob-harness/src/runtime/tools-governed-requests.ts +3 -3
  119. package/.pi/extensions/zob-harness/src/runtime/tools-merge-queue.ts +3 -3
  120. package/.pi/extensions/zob-harness/src/runtime/tools-mission-control.ts +3 -3
  121. package/.pi/extensions/zob-harness/src/runtime/tools-orchestration.ts +9 -9
  122. package/.pi/extensions/zob-harness/src/runtime/tools-project-dna.ts +2 -2
  123. package/.pi/extensions/zob-harness/src/runtime/tools-worker-pool.ts +3 -3
  124. package/.pi/extensions/zob-harness/src/runtime/tools-workspace-claims.ts +3 -3
  125. package/.pi/extensions/zob-harness/src/runtime/tools-zcommit.ts +3 -3
  126. package/.pi/extensions/zob-harness/src/runtime/widget.ts +27 -10
  127. package/.pi/extensions/zob-harness/src/runtime/zobHarness.ts +1 -1
  128. package/.pi/extensions/zob-harness/src/types.ts +2 -2
  129. package/.pi/extensions/zob-switch/AGENTS.md +9 -0
  130. package/.pi/extensions/zob-switch/index.ts +9 -121
  131. package/.pi/extensions/zob-switch/src/AGENTS.md +8 -0
  132. package/.pi/extensions/zob-switch/src/autocomplete.ts +12 -0
  133. package/.pi/extensions/zob-switch/src/paths.ts +8 -0
  134. package/.pi/extensions/zob-switch/src/settings.ts +25 -0
  135. package/.pi/extensions/zob-switch/src/snapshot.ts +34 -0
  136. package/.pi/extensions/zob-switch/src/state.ts +57 -0
  137. package/.pi/factories/agentic-spec-team/README.md +35 -0
  138. package/.pi/factories/agentic-spec-team/batch-manifest.json +11 -0
  139. package/.pi/factories/agentic-spec-team/example-agentic-spec-manifest.json +19 -0
  140. package/.pi/factories/agentic-spec-team/factory.json +98 -0
  141. package/.pi/factories/agentic-spec-team/pilot-manifest.json +11 -0
  142. package/.pi/factories/agentic-spec-team/schemas/final-report.schema.json +15 -0
  143. package/.pi/factories/agentic-spec-team/schemas/manifest.schema.json +14 -0
  144. package/.pi/factories/agentic-spec-team/schemas/question.schema.json +18 -0
  145. package/.pi/factories/agentic-spec-team/schemas/source-register.schema.json +11 -0
  146. package/.pi/factories/agentic-spec-team/schemas/traceability.schema.json +11 -0
  147. package/.pi/factories/agentic-spec-team/smoke-manifest.json +11 -0
  148. package/.pi/skills/zob-agentic-spec-team/SKILL.md +148 -0
  149. package/.pi/skills/zob-coms-safety/SKILL.md +13 -0
  150. package/.pi/skills/zob-coms-v2-live/SKILL.md +11 -0
  151. package/.pi/skills/zob-factory/SKILL.md +21 -0
  152. package/.pi/skills/zob-harness/SKILL.md +14 -0
  153. package/.pi/skills/zob-split-refactor/SKILL.md +1 -1
  154. package/.pi/skills/zob-zagent-creator/SKILL.md +266 -12
  155. package/.pi/zagents/agent-factory-pacman-chief.json +22 -0
  156. package/.pi/zagents/agent-factory-pacman-engine-builder.json +21 -0
  157. package/.pi/zagents/agent-factory-pacman-frontend-builder.json +21 -0
  158. package/.pi/zagents/agent-factory-pacman-game-architect.json +21 -0
  159. package/.pi/zagents/agent-factory-pacman-game-designer.json +21 -0
  160. package/.pi/zagents/agent-factory-pacman-qa-oracle.json +21 -0
  161. package/.pi/zagents/bdd-writer.json +20 -0
  162. package/.pi/zagents/data-profile-analyst.json +20 -0
  163. package/.pi/zagents/domain-modeler.json +20 -0
  164. package/.pi/zagents/planner-handoff-writer.json +20 -0
  165. package/.pi/zagents/prompts/agent-factory-pacman-chief.md +53 -0
  166. package/.pi/zagents/prompts/agent-factory-pacman-engine-builder.md +41 -0
  167. package/.pi/zagents/prompts/agent-factory-pacman-frontend-builder.md +40 -0
  168. package/.pi/zagents/prompts/agent-factory-pacman-game-architect.md +41 -0
  169. package/.pi/zagents/prompts/agent-factory-pacman-game-designer.md +43 -0
  170. package/.pi/zagents/prompts/agent-factory-pacman-qa-oracle.md +51 -0
  171. package/.pi/zagents/prompts/agentic-spec-run-role.md +30 -0
  172. package/.pi/zagents/source-intake-steward.json +20 -0
  173. package/.pi/zagents/spec-chief.json +21 -0
  174. package/.pi/zagents/spec-oracle.json +20 -0
  175. package/.pi/zagents/spec-writer.json +20 -0
  176. package/.pi/zagents/ux-flow-analyst.json +20 -0
  177. package/.pi/zteams/agent-factory-pacman-multiplayer-runtime.mjs +384 -0
  178. package/.pi/zteams/agent-factory-pacman-multiplayer.json +42 -0
  179. package/.pi/zteams/agent-factory-pacman-multiplayer.tmux.sh +256 -0
  180. package/.pi/zteams/agentic-spec-run.json +42 -0
  181. package/.pi/zteams/agentic-spec-run.tmux.sh +134 -0
  182. package/.pi/zteams/templates/agent-factory-pacman-chief-kickoff.template.md +71 -0
  183. package/.pi/zteams/templates/agent-factory-pacman-worker-kickoff.template.md +59 -0
  184. package/README.md +183 -110
  185. package/SOURCE_INDEX.md +5 -1
  186. package/examples/agent-factory-mission-control/AGENTS.md +10 -0
  187. package/examples/agent-factory-mission-control/README.md +17 -0
  188. package/examples/agent-factory-mission-control/apps/api/AGENTS.md +3 -0
  189. package/examples/agent-factory-mission-control/apps/dashboard/AGENTS.md +3 -0
  190. package/examples/agent-factory-mission-control/mission.md +3 -0
  191. package/examples/agent-factory-mission-control/output-contract.md +3 -0
  192. package/examples/agent-factory-mission-control/packages/domain/AGENTS.md +3 -0
  193. package/examples/agent-factory-mission-control/packages/snapshot-reader/AGENTS.md +3 -0
  194. package/examples/agent-factory-pacman-multiplayer/AGENTS.md +27 -0
  195. package/examples/agent-factory-pacman-multiplayer/README.md +84 -0
  196. package/examples/agent-factory-pacman-multiplayer/mission.md +43 -0
  197. package/examples/agent-factory-pacman-multiplayer/output-contract.md +58 -0
  198. package/examples/agent-factory-tmux-comms/README.md +146 -0
  199. package/examples/agent-factory-tmux-comms/chief-kickoff.template.md +54 -0
  200. package/examples/agent-factory-tmux-comms/simple-agent-factory.team.json +92 -0
  201. package/examples/agent-factory-tmux-comms/simple-agent-factory.tmux.sh +248 -0
  202. package/examples/agent-factory-tmux-comms/worker-kickoff.template.md +43 -0
  203. package/package.json +17 -3
  204. package/scripts/README.md +1 -1
  205. package/scripts/agentic-spec-team/validate-bdd.mjs +13 -0
  206. package/scripts/agentic-spec-team/validate-final-report.mjs +14 -0
  207. package/scripts/agentic-spec-team/validate-manifest.mjs +14 -0
  208. package/scripts/agentic-spec-team/validate-oracle-ready.mjs +13 -0
  209. package/scripts/agentic-spec-team/validate-question-loop.mjs +15 -0
  210. package/scripts/agentic-spec-team/validate-run.mjs +11 -0
  211. package/scripts/agentic-spec-team/validate-source-register.mjs +17 -0
  212. package/scripts/agentic-spec-team/validate-traceability.mjs +20 -0
  213. package/scripts/agentic-spec-team/validate-workgraph.mjs +13 -0
  214. package/scripts/autonomy/mission-readiness-secret-smoke.mjs +5 -5
  215. package/scripts/git-ops/commit-policy-smoke.mjs +5 -4
  216. package/scripts/goal-todo/child-goal-ref-smoke.mjs +2 -2
  217. package/scripts/path-policy/validate-smoke.mjs +3 -3
  218. package/scripts/project-dna/AGENTS.md +39 -0
  219. package/scripts/project-dna/{validate-scaffold.mjs → validation/validate-scaffold.mjs} +7 -7
  220. package/scripts/spec-run.mjs +365 -0
  221. package/scripts/worker-pool/static-smoke.mjs +5 -5
  222. package/scripts/zagent-static-smoke.mjs +35 -6
  223. package/scripts/zpeer-local-e2e-smoke.mjs +12 -5
  224. package/scripts/zpeer-static-smoke.mjs +17 -17
  225. /package/.pi/extensions/zob-harness/src/{types → core/types}/core.ts +0 -0
  226. /package/.pi/extensions/zob-harness/src/{utils → core/utils}/hashing.ts +0 -0
  227. /package/.pi/extensions/zob-harness/src/{utils → core/utils}/json.ts +0 -0
  228. /package/.pi/extensions/zob-harness/src/{utils → core/utils}/paths.ts +0 -0
  229. /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/AGENTS.md +0 -0
  230. /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/pending-replies.ts +0 -0
  231. /package/.pi/extensions/zob-harness/src/{coms-v2 → domains/coms/coms-v2}/types.ts +0 -0
  232. /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/ledger.ts +0 -0
  233. /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/types.ts +0 -0
  234. /package/.pi/extensions/zob-harness/src/{promotion → domains/promotion}/validate.ts +0 -0
  235. /package/.pi/extensions/zob-harness/src/{schemas-project-dna.ts → runtime/schemas-project-dna.ts} +0 -0
  236. /package/.pi/extensions/zob-harness/src/{schemas.ts → runtime/schemas.ts} +0 -0
  237. /package/scripts/project-dna/{bench-smoke.mjs → benchmark/bench-smoke.mjs} +0 -0
  238. /package/scripts/project-dna/{build-capsules.mjs → capsules/build-capsules.mjs} +0 -0
  239. /package/scripts/project-dna/{emit-golden-cases.mjs → emit/emit-golden-cases.mjs} +0 -0
  240. /package/scripts/project-dna/{emit-ontology.mjs → emit/emit-ontology.mjs} +0 -0
  241. /package/scripts/project-dna/{oracle-review-smoke.mjs → oracle/oracle-review-smoke.mjs} +0 -0
  242. /package/scripts/project-dna/{query-context.mjs → query/query-context.mjs} +0 -0
  243. /package/scripts/project-dna/{query-steward.mjs → query/query-steward.mjs} +0 -0
  244. /package/scripts/project-dna/{build-sample-spec.mjs → sample/build-sample-spec.mjs} +0 -0
  245. /package/scripts/project-dna/{generate-sample.mjs → sample/generate-sample.mjs} +0 -0
  246. /package/scripts/project-dna/{validate-sample-project.mjs → sample/validate-sample-project.mjs} +0 -0
  247. /package/scripts/project-dna/{scan.mjs → scan/scan.mjs} +0 -0
  248. /package/scripts/project-dna/{validate-scan-artifacts.mjs → scan/validate-scan-artifacts.mjs} +0 -0
  249. /package/scripts/project-dna/{validate-5of5.mjs → validation/validate-5of5.mjs} +0 -0
  250. /package/scripts/project-dna/{validate-golden-cases.mjs → validation/validate-golden-cases.mjs} +0 -0
  251. /package/scripts/project-dna/{validate-ontology.mjs → validation/validate-ontology.mjs} +0 -0
  252. /package/scripts/project-dna/{plan-workflow.mjs → workflow/plan-workflow.mjs} +0 -0
  253. /package/scripts/project-dna/{validate-workflow.mjs → workflow/validate-workflow.mjs} +0 -0
@@ -1,7 +1,7 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { AutonomousDryRunParams, AutonomousReadOnlySmokeParams, AutonomousValidateRunParams, AutonomousValidateSmokeParams } from "../schemas.js";
4
- import { validateAutonomousReadOnlySmokeRunArtifacts, validateAutonomousRuntimeDryRunArtifacts, writeAutonomousReadOnlySmokeRunReport, writeAutonomousRuntimeDryRunReport } from "../autonomous-runtime.js";
3
+ import { AutonomousDryRunParams, AutonomousReadOnlySmokeParams, AutonomousValidateRunParams, AutonomousValidateSmokeParams } from "./schemas.js";
4
+ import { validateAutonomousReadOnlySmokeRunArtifacts, validateAutonomousRuntimeDryRunArtifacts, writeAutonomousReadOnlySmokeRunReport, writeAutonomousRuntimeDryRunReport } from "../domains/autonomy/autonomous-runtime.js";
5
5
 
6
6
  export function registerAutonomousTools(pi: ExtensionAPI): void {
7
7
  pi.registerTool({
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { buildComputePreview, resolveComputeProfile, validateComputeProfileArtifacts, writeComputeProfileReports } from "../compute-profile.js";
4
- import { buildComputeWorkflowShape } from "../compute-workflow-shape.js";
5
- import { ComputePlanWorkflowParams, ComputePreviewParams, ComputeResolveProfileParams, ComputeValidateProfileParams, ComputeWriteProfileReportsParams } from "../schemas.js";
3
+ import { buildComputePreview, resolveComputeProfile, validateComputeProfileArtifacts, writeComputeProfileReports } from "../domains/compute/compute-profile.js";
4
+ import { buildComputeWorkflowShape } from "../domains/compute/compute-workflow-shape.js";
5
+ import { ComputePlanWorkflowParams, ComputePreviewParams, ComputeResolveProfileParams, ComputeValidateProfileParams, ComputeWriteProfileReportsParams } from "./schemas.js";
6
6
 
7
7
  export function registerComputeTools(pi: ExtensionAPI): void {
8
8
  pi.registerTool({
@@ -1,13 +1,13 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- import { readZobComsV2Policy } from "../coms-v2/policy.js";
3
- import { readZobLiveRegistrySnapshot } from "../coms-v2/registry.js";
4
- import { peerAliasInRoom, refreshZpeerSelf, safeZpeerAlias, safeZpeerRoomId, sendZpeerPrompt, type ZpeerSendMode, type ZpeerSendResult } from "../coms-v2/zpeer.js";
5
- import { buildZobLiveEnvelope } from "../coms-v2/envelope.js";
6
- import { sendZobLocalEnvelope } from "../coms-v2/local-transport.js";
7
- import { appendLiveDeliveredStatus, appendLiveErrorStatus, appendLiveSendRequestedRef } from "../coms-v2/ledger-bridge.js";
8
- import { writeZobComsRedactedCapture } from "../coms-v2/transcript-capture.js";
2
+ import { readZobComsV2Policy } from "../domains/coms/coms-v2/policy.js";
3
+ import { readZobLiveRegistrySnapshot } from "../domains/coms/coms-v2/registry.js";
4
+ import { peerAliasInRoom, refreshZpeerSelf, safeZpeerAlias, safeZpeerRoomId, sendZpeerPrompt, type ZpeerSendMode, type ZpeerSendResult } from "../domains/coms/coms-v2/zpeer.js";
5
+ import { buildZobLiveEnvelope } from "../domains/coms/coms-v2/envelope.js";
6
+ import { sendZobLocalEnvelope } from "../domains/coms/coms-v2/local-transport.js";
7
+ import { appendLiveDeliveredStatus, appendLiveErrorStatus, appendLiveSendRequestedRef } from "../domains/coms/coms-v2/ledger-bridge.js";
8
+ import { writeZobComsRedactedCapture } from "../domains/coms/coms-v2/transcript-capture.js";
9
9
  import type { TeamDefinition } from "../types.js";
10
- import { sha256 } from "../utils/hashing.js";
10
+ import { sha256 } from "../core/utils/hashing.js";
11
11
  import {
12
12
  ZobComsAckParams,
13
13
  ZobComsAwaitParams,
@@ -17,7 +17,7 @@ import {
17
17
  ZobComsSendParams,
18
18
  ZobComsStatusParams,
19
19
  ZpeerAskParams,
20
- } from "../schemas.js";
20
+ } from "./schemas.js";
21
21
  import {
22
22
  ackZobComsMessage,
23
23
  appendZobComsMessage,
@@ -26,8 +26,8 @@ import {
26
26
  listZobComsMessages,
27
27
  replyZobComsMessage,
28
28
  transitionZobComsStatus,
29
- } from "../topology/coms.js";
30
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
29
+ } from "../domains/topology/coms.js";
30
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
31
31
  import type { HarnessRuntimeState } from "./state.js";
32
32
 
33
33
  const SHA256_HEX = /^[a-f0-9]{64}$/i;
@@ -240,7 +240,10 @@ export function registerComsTools(pi: ExtensionAPI, state?: HarnessRuntimeState)
240
240
  pi.appendEntry("zob-zpeer", { schema: "zob.zpeer-ask.v1", action: "agent_request", mode, status: result.status, reasonHash: result.reason ? sha256(result.reason) : undefined, msgId: result.msgId, targetAliasHash: result.targetAlias ? sha256(result.targetAlias) : sha256(targetAlias), roomIdHash: sha256(result.roomId ?? requestedRoomId), taskHash: result.taskHash, outputHash: result.outputHash, reasonInputHash: params.reason ? sha256(params.reason) : undefined, localOnly: true, networkEnabled: false, bodyStored: false, promptBodiesStored: false, outputBodiesStored: false, generatedAt: new Date().toISOString() });
241
241
  const ok = result.status === "reply" || result.status === "completed" || result.status === "waiting" || result.status === "delivered";
242
242
  const passiveWaitSuffix = result.status === "waiting" ? " · idle/passive wait: no follow-up turn queued; stop if no other action is actionable" : "";
243
- return { content: [{ type: "text", text: ok ? `zpeer_ask ${result.status}: @${result.targetAlias ?? targetAlias}${result.outputHash ? ` outputHash=${result.outputHash}` : ""}${passiveWaitSuffix}` : `zpeer_ask ${result.status}: ${result.reason ?? "see metadata"}` }], details: { schema: "zob.zpeer-ask-result.v1", mode, ...result } };
243
+ const transientReplyText = (result.status === "reply" || result.status === "completed") && result.transientResponse
244
+ ? `\n\nTransient ZPeer reply (not stored in .pi/coms):\n${result.transientResponse}`
245
+ : "";
246
+ return { content: [{ type: "text", text: ok ? `zpeer_ask ${result.status}: @${result.targetAlias ?? targetAlias}${result.outputHash ? ` outputHash=${result.outputHash}` : ""}${passiveWaitSuffix}${transientReplyText}` : `zpeer_ask ${result.status}: ${result.reason ?? "see metadata"}` }], details: { schema: "zob.zpeer-ask-result.v1", mode, ...result } };
244
247
  },
245
248
  });
246
249
 
@@ -4,13 +4,13 @@ import {
4
4
  ContextReadinessParams,
5
5
  ContextScopeValidateParams,
6
6
  ContextWritebackProposalParams,
7
- } from "../schemas.js";
7
+ } from "./schemas.js";
8
8
  import {
9
9
  buildContextGbrainReadinessAudit,
10
10
  buildDefaultContextScope,
11
11
  validateContextScope,
12
12
  writeContextWritebackProposal,
13
- } from "../context-gbrain.js";
13
+ } from "../domains/context/context-gbrain.js";
14
14
 
15
15
  export function registerContextTools(pi: ExtensionAPI): void {
16
16
  pi.registerTool({
@@ -4,14 +4,14 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
4
4
  import { Text } from "@earendil-works/pi-tui";
5
5
 
6
6
  import type { AgentScope, ChildResult, ChildStopCondition, ChildThinkingLevel, DelegationDetails, DelegationFailureKind } from "../types.js";
7
- import { AwaitDelegationRunParams, DelegateParams, DelegateTaskParams, DelegationCatalogParams, DelegationRunParams } from "../schemas.js";
8
- import { discoverAgents, formatAgentList } from "../agents.js";
9
- import { applyTodoSplitRequest, extractTodoClaimFromText, extractTodoClaimValidationFromText, extractTodoSplitRequestFromText, isActionableTodoClaimValidation, isActionableTodoSplitRequest, linkGoalTodoDelegation, recordGoalTodoClaimValidationResult, requestGoalTodoClaimValidation, resolveGoalTodoReference, returnGoalTodoClaim, type GoalTodoNode } from "../goal-todos.js";
10
- import { isFailed, mapWithConcurrency, runChildAgent, validateChildThinkingOverride } from "../child-runner.js";
11
- import { classifyChildStopCondition, classifyDelegationChronicleCompletion, outputHasEvidenceMarker } from "../chronicle.js";
12
- import { validateExplicitModelOverride } from "../model-availability.js";
13
- import { applyChildGates, getOutputContractDefinitions, inferOutputContract, listOutputContracts, validateOutputContractId } from "../output-contracts.js";
14
- import { captureZcommitChildDirtySnapshot, diffZcommitChildDirtySnapshots, type ZcommitChildChangedPathRef } from "../git-ops.js";
7
+ import { AwaitDelegationRunParams, DelegateParams, DelegateTaskParams, DelegationCatalogParams, DelegationRunParams } from "./schemas.js";
8
+ import { discoverAgents, formatAgentList } from "../domains/delegation/agents.js";
9
+ import { applyTodoSplitRequest, extractTodoClaimFromText, extractTodoClaimValidationFromText, extractTodoSplitRequestFromText, isActionableTodoClaimValidation, isActionableTodoSplitRequest, linkGoalTodoDelegation, recordGoalTodoClaimValidationResult, requestGoalTodoClaimValidation, resolveGoalTodoReference, returnGoalTodoClaim, type GoalTodoNode } from "../domains/goal/goal-todos.js";
10
+ import { isFailed, mapWithConcurrency, runChildAgent, validateChildThinkingOverride } from "../domains/delegation/child-runner.js";
11
+ import { classifyChildStopCondition, classifyDelegationChronicleCompletion, outputHasEvidenceMarker } from "../domains/telemetry/chronicle.js";
12
+ import { validateExplicitModelOverride } from "../domains/models/model-availability.js";
13
+ import { applyChildGates, getOutputContractDefinitions, inferOutputContract, listOutputContracts, validateOutputContractId } from "../domains/delegation/output-contracts.js";
14
+ import { captureZcommitChildDirtySnapshot, diffZcommitChildDirtySnapshots, type ZcommitChildChangedPathRef } from "../domains/git/git-ops.js";
15
15
  import {
16
16
  parseToolList,
17
17
  resolveChildCwd,
@@ -21,11 +21,11 @@ import {
21
21
  validateForbiddenPathPolicy,
22
22
  validateSixPartContract,
23
23
  validateToolList,
24
- } from "../safety.js";
25
- import { usageEmpty, writeDelegationTelemetrySummary } from "../telemetry.js";
26
- import { capOutput, formatChildResultText } from "../utils/formatting.js";
27
- import { sha256 } from "../utils/hashing.js";
28
- import { newRunId } from "../utils/paths.js";
24
+ } from "../domains/governance/safety.js";
25
+ import { usageEmpty, writeDelegationTelemetrySummary } from "../domains/telemetry/telemetry.js";
26
+ import { capOutput, formatChildResultText } from "../core/utils/formatting.js";
27
+ import { sha256 } from "../core/utils/hashing.js";
28
+ import { newRunId } from "../core/utils/paths.js";
29
29
  import {
30
30
  delegationDurationMs,
31
31
  delegationSignalBadge,
@@ -2,25 +2,25 @@ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
4
 
5
- import { buildZobLivePresenceSummary } from "../coms-v2/presence.js";
6
- import { readZobComsV2Policy } from "../coms-v2/policy.js";
7
- import { discoverAgents } from "../agents.js";
8
- import { evaluateStrictBudgetDispatchGate } from "../budget-policy.js";
9
- import { isFailed, runChildAgent } from "../child-runner.js";
10
- import { classifyChronicleCompletion, outputHasEvidenceMarker } from "../chronicle.js";
11
- import { buildAgenticFactoryNoMockFinalGate, factoryLedger, runFactoryRun } from "../factory/run.js";
12
- import { buildInitialAdaptiveDelegationGovernorState, buildParentDispatchContractForDecision, decideDelegationRequest, extractDelegationRequestsFromText, normalizeAdaptiveDelegationPolicy, updateGovernorState } from "../orchestration/adaptive-delegation.js";
13
- import { runFactoryQuarantineActivate, runFactoryQuarantineReview, runFactoryQuarantineVerifyActivation } from "../factory/quarantine.js";
14
- import { evaluateModelRoutingDispatchGate } from "../model-routing.js";
15
- import { applyChildGates, inferOutputContract, validateOutputContractId } from "../output-contracts.js";
16
- import { FactoryQuarantineActivateParams, FactoryQuarantineReviewParams, FactoryQuarantineVerifyActivationParams, FactoryRunParams } from "../schemas.js";
17
- import { factoryPhaseSentinelForMode, loadFactoryDefinition, loadFactoryInputManifest } from "../factory/validation.js";
18
- import { validateToolList } from "../safety.js";
19
- import { addUsage, usageEmpty, writeFactoryTelemetrySummary } from "../telemetry.js";
20
- import { sha256 } from "../utils/hashing.js";
21
- import { parseJsonFile } from "../utils/json.js";
22
- import { safeFileStem } from "../utils/paths.js";
23
- import { isRecord } from "../utils/records.js";
5
+ import { buildZobLivePresenceSummary } from "../domains/coms/coms-v2/presence.js";
6
+ import { readZobComsV2Policy } from "../domains/coms/coms-v2/policy.js";
7
+ import { discoverAgents } from "../domains/delegation/agents.js";
8
+ import { evaluateStrictBudgetDispatchGate } from "../domains/governance/budget-policy.js";
9
+ import { isFailed, runChildAgent } from "../domains/delegation/child-runner.js";
10
+ import { classifyChronicleCompletion, outputHasEvidenceMarker } from "../domains/telemetry/chronicle.js";
11
+ import { buildAgenticFactoryNoMockFinalGate, factoryLedger, runFactoryRun } from "../domains/factory/run.js";
12
+ import { buildInitialAdaptiveDelegationGovernorState, buildParentDispatchContractForDecision, decideDelegationRequest, extractDelegationRequestsFromText, normalizeAdaptiveDelegationPolicy, updateGovernorState } from "../domains/orchestration/adaptive-delegation.js";
13
+ import { runFactoryQuarantineActivate, runFactoryQuarantineReview, runFactoryQuarantineVerifyActivation } from "../domains/factory/quarantine.js";
14
+ import { evaluateModelRoutingDispatchGate } from "../domains/models/model-routing.js";
15
+ import { applyChildGates, inferOutputContract, validateOutputContractId } from "../domains/delegation/output-contracts.js";
16
+ import { FactoryQuarantineActivateParams, FactoryQuarantineReviewParams, FactoryQuarantineVerifyActivationParams, FactoryRunParams } from "./schemas.js";
17
+ import { factoryPhaseSentinelForMode, loadFactoryDefinition, loadFactoryInputManifest } from "../domains/factory/validation.js";
18
+ import { validateToolList } from "../domains/governance/safety.js";
19
+ import { addUsage, usageEmpty, writeFactoryTelemetrySummary } from "../domains/telemetry/telemetry.js";
20
+ import { sha256 } from "../core/utils/hashing.js";
21
+ import { parseJsonFile } from "../core/utils/json.js";
22
+ import { safeFileStem } from "../core/utils/paths.js";
23
+ import { isRecord } from "../core/utils/records.js";
24
24
  import type { DelegationRequestProposal, GovernorDecision, ParentDispatchContract } from "../types.js";
25
25
  import type { HarnessRuntimeState } from "./state.js";
26
26
  import { strictGoalSpecErrors } from "./state.js";
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { appendGoalRoomMessage, listGoalRoomMessages } from "../goal-room.js";
4
- import { ZobGoalRoomListParams, ZobGoalRoomSendParams } from "../schemas.js";
5
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
3
+ import { appendGoalRoomMessage, listGoalRoomMessages } from "../domains/goal/goal-room.js";
4
+ import { ZobGoalRoomListParams, ZobGoalRoomSendParams } from "./schemas.js";
5
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
6
6
  import type { TeamDefinition } from "../types.js";
7
7
 
8
8
  export function registerGoalRoomTools(pi: ExtensionAPI): void {
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { appendGovernedRequestsToGoalRoom, extractGovernedRequestsFromText, governedRequestBodyFreeViolations } from "../governed-requests.js";
4
- import { GovernedRequestExtractParams } from "../schemas.js";
5
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
3
+ import { appendGovernedRequestsToGoalRoom, extractGovernedRequestsFromText, governedRequestBodyFreeViolations } from "../domains/governance/governed-requests.js";
4
+ import { GovernedRequestExtractParams } from "./schemas.js";
5
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
6
6
 
7
7
  export function registerGovernedRequestTools(pi: ExtensionAPI): void {
8
8
  pi.registerTool({
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { decideMergeCandidate, listMergeQueue, mergeQueueBodyFreeViolations, submitMergeCandidate } from "../merge-queue.js";
4
- import { MergeCandidateSubmitParams, MergeQueueDecideParams, MergeQueueListParams } from "../schemas.js";
5
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
3
+ import { decideMergeCandidate, listMergeQueue, mergeQueueBodyFreeViolations, submitMergeCandidate } from "../domains/governance/merge-queue.js";
4
+ import { MergeCandidateSubmitParams, MergeQueueDecideParams, MergeQueueListParams } from "./schemas.js";
5
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
6
6
 
7
7
  export function registerMergeQueueTools(pi: ExtensionAPI): void {
8
8
  pi.registerTool({
@@ -4,14 +4,14 @@ import {
4
4
  MissionControlProposeCommandParams,
5
5
  MissionControlSnapshotParams,
6
6
  ZobComsReadinessParams,
7
- } from "../schemas.js";
7
+ } from "./schemas.js";
8
8
  import type { TeamDefinition } from "../types.js";
9
9
  import {
10
10
  buildMissionControlSnapshot,
11
11
  buildZobCommunicationReadinessAudit,
12
12
  writeMissionControlCommandProposal,
13
- } from "../mission-control.js";
14
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
13
+ } from "../domains/coms/mission-control.js";
14
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
15
15
 
16
16
  function loadValidTeam(repoRoot: string, teamName: string | undefined): { definition?: TeamDefinition; errors: string[] } {
17
17
  const team = loadTeamDefinition(repoRoot, teamName ?? "zob-core");
@@ -1,14 +1,14 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { buildZobLivePresenceSummary } from "../coms-v2/presence.js";
4
- import { readZobComsV2Policy } from "../coms-v2/policy.js";
5
- import { OrchestrateRunParams, ChainRunParams } from "../schemas.js";
6
- import { createSupervisedReadonlyDispatcher } from "../child-runner.js";
7
- import { runOrchestrateRun } from "../orchestration/run.js";
8
- import { runSupervisedReadonlyOrchestration } from "../orchestration/supervised-readonly.js";
9
- import { runChainPlanOnly } from "../topology/chains.js";
10
- import { sha256 } from "../utils/hashing.js";
11
- import { isRecord } from "../utils/records.js";
3
+ import { buildZobLivePresenceSummary } from "../domains/coms/coms-v2/presence.js";
4
+ import { readZobComsV2Policy } from "../domains/coms/coms-v2/policy.js";
5
+ import { OrchestrateRunParams, ChainRunParams } from "./schemas.js";
6
+ import { createSupervisedReadonlyDispatcher } from "../domains/delegation/child-runner.js";
7
+ import { runOrchestrateRun } from "../domains/orchestration/run.js";
8
+ import { runSupervisedReadonlyOrchestration } from "../domains/orchestration/supervised-readonly.js";
9
+ import { runChainPlanOnly } from "../domains/topology/chains.js";
10
+ import { sha256 } from "../core/utils/hashing.js";
11
+ import { isRecord } from "../core/utils/records.js";
12
12
  import type { HarnessRuntimeState } from "./state.js";
13
13
  import { strictGoalSpecErrors } from "./state.js";
14
14
 
@@ -1,7 +1,7 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { buildProjectDnaAgenticPlan, buildProjectDnaFederatedQueryResult, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit, writeProjectDnaWritebackProposal } from "../project-dna.js";
4
- import { ProjectDnaFederatedQueryParams, ProjectDnaPlanWorkflowParams, ProjectDnaQueryParams, ProjectDnaReadinessParams, ProjectDnaWritebackProposalParams } from "../schemas.js";
3
+ import { buildProjectDnaAgenticPlan, buildProjectDnaFederatedQueryResult, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit, writeProjectDnaWritebackProposal } from "../domains/project-dna/project-dna.js";
4
+ import { ProjectDnaFederatedQueryParams, ProjectDnaPlanWorkflowParams, ProjectDnaQueryParams, ProjectDnaReadinessParams, ProjectDnaWritebackProposalParams } from "./schemas.js";
5
5
 
6
6
  export function registerProjectDnaTools(pi: ExtensionAPI): void {
7
7
  pi.registerTool({
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { createWorkerPoolOwnerDecision, createWorkerPoolOwnerRequest, createWorkerPoolPlan, listWorkerPoolPlans, workerPoolBodyFreeViolations } from "../worker-pool.js";
4
- import { WorkerPoolOwnerDecisionParams, WorkerPoolOwnerRequestParams, WorkerPoolPlanParams, WorkerPoolStatusParams } from "../schemas.js";
5
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
3
+ import { createWorkerPoolOwnerDecision, createWorkerPoolOwnerRequest, createWorkerPoolPlan, listWorkerPoolPlans, workerPoolBodyFreeViolations } from "../domains/governance/worker-pool.js";
4
+ import { WorkerPoolOwnerDecisionParams, WorkerPoolOwnerRequestParams, WorkerPoolPlanParams, WorkerPoolStatusParams } from "./schemas.js";
5
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
6
6
 
7
7
  export function registerWorkerPoolTools(pi: ExtensionAPI): void {
8
8
  pi.registerTool({
@@ -1,8 +1,8 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { createWorkspaceClaim, listWorkspaceClaims, releaseWorkspaceClaim, workspaceClaimBodyFreeViolations } from "../workspace-claims.js";
4
- import { WorkspaceClaimParams, WorkspaceClaimsListParams, WorkspaceReleaseParams } from "../schemas.js";
5
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
3
+ import { createWorkspaceClaim, listWorkspaceClaims, releaseWorkspaceClaim, workspaceClaimBodyFreeViolations } from "../domains/governance/workspace-claims.js";
4
+ import { WorkspaceClaimParams, WorkspaceClaimsListParams, WorkspaceReleaseParams } from "./schemas.js";
5
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
6
6
 
7
7
  export function registerWorkspaceClaimTools(pi: ExtensionAPI): void {
8
8
  pi.registerTool({
@@ -1,9 +1,9 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { buildZcommitPlan, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitPlan, type ZcommitPlanOptions } from "../git-ops.js";
4
- import { ZcommitRunParams } from "../schemas.js";
3
+ import { buildZcommitPlan, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitPlan, type ZcommitPlanOptions } from "../domains/git/git-ops.js";
4
+ import { ZcommitRunParams } from "./schemas.js";
5
5
  import type { HarnessRuntimeState } from "./state.js";
6
- import { sha256 } from "../utils/hashing.js";
6
+ import { sha256 } from "../core/utils/hashing.js";
7
7
 
8
8
  function uniqueSorted(values: string[]): string[] {
9
9
  return [...new Set(values.filter((value) => value.trim().length > 0))].sort();
@@ -1,13 +1,13 @@
1
1
  import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
  import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
3
3
 
4
- import { MODE_TOOLS } from "../constants.js";
5
- import { buildDaemonRuntimeState, buildDaemonTickPlan } from "../daemon-runtime.js";
6
- import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../goal-todos.js";
7
- import { isRecord } from "../utils/records.js";
4
+ import { MODE_TOOLS } from "../core/constants.js";
5
+ import { buildDaemonRuntimeState, buildDaemonTickPlan } from "../domains/autonomy/daemon-runtime.js";
6
+ import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../domains/goal/goal-todos.js";
7
+ import { isRecord } from "../core/utils/records.js";
8
8
  import type { AssistantLikeMessage, ModeName } from "../types.js";
9
- import { readHarnessReadinessWidgetData } from "../orchestration/widget-readers.js";
10
- import { buildZpeerPeerRoomSummaries, type ZpeerPeerRoomSummary } from "../coms-v2/zpeer.js";
9
+ import { readHarnessReadinessWidgetData } from "../domains/orchestration/widget-readers.js";
10
+ import { buildZpeerPeerRoomSummaries, type ZpeerPeerRoomSummary } from "../domains/coms/coms-v2/zpeer.js";
11
11
  import { delegationCost, delegationDurationMs, formatDelegationCost, formatDuration, summarizeDelegations } from "./delegation-monitor.js";
12
12
  import { disposeDelegationMouseSupport } from "./delegation-mouse.js";
13
13
  import { formatZcompactHudLine } from "./auto-compaction.js";
@@ -353,8 +353,8 @@ export function renderHarnessWidget(pi: ExtensionAPI, state: HarnessRuntimeState
353
353
  const marker = summary.active ? "*" : " ";
354
354
  const selfAlias = `@${summary.selfAlias ?? "?"}`;
355
355
  const peerState = `${summary.online}/${summary.peerCount}${summary.stale > 0 ? ` s${summary.stale}` : ""}${summary.offline > 0 ? ` off${summary.offline}` : ""}`;
356
- const peerAliases = summary.aliases.filter((alias) => alias !== summary.selfAlias).slice(0, 2).map((alias) => `@${alias}`);
357
- const aliasOverflow = Math.max(0, summary.aliases.length - (summary.selfAlias && summary.aliases.includes(summary.selfAlias) ? 1 : 0) - peerAliases.length);
356
+ const peerAliases = summary.onlineAliases.filter((alias) => alias !== summary.selfAlias).slice(0, 2).map((alias) => `@${alias}`);
357
+ const aliasOverflow = Math.max(0, summary.onlineAliases.length - (summary.selfAlias && summary.onlineAliases.includes(summary.selfAlias) ? 1 : 0) - peerAliases.length);
358
358
  const aliasText = peerAliases.length > 0 ? `${peerAliases.join(" ")}${aliasOverflow > 0 ? ` +${aliasOverflow}` : ""}` : "no peers";
359
359
  return theme.fg("muted", truncateToWidth(`${marker} ${summary.roomId} ${selfAlias} ${peerState} ${aliasText}`, 52, "…"));
360
360
  });
@@ -427,10 +427,27 @@ export function renderHarnessWidget(pi: ExtensionAPI, state: HarnessRuntimeState
427
427
  });
428
428
  }
429
429
 
430
+ type PiToolInfo = ReturnType<ExtensionAPI["getAllTools"]>[number];
431
+
432
+ function isZobInternalTool(tool: PiToolInfo): boolean {
433
+ const path = tool.sourceInfo.path.replace(/\\/g, "/");
434
+ return path.includes("/.pi/extensions/zob-harness/") || path.includes("/.pi/extensions/zob-switch/");
435
+ }
436
+
437
+ function isExternalPackageTool(tool: PiToolInfo): boolean {
438
+ return tool.sourceInfo.source !== "builtin" && tool.sourceInfo.source !== "sdk" && !isZobInternalTool(tool);
439
+ }
440
+
441
+ function uniqueToolNames(names: string[]): string[] {
442
+ return [...new Set(names)];
443
+ }
444
+
430
445
  export function applyMode(pi: ExtensionAPI, state: HarnessRuntimeState, ctx: ExtensionContext, mode: ModeName, persist = true): void {
431
446
  state.activeMode = mode;
432
- const available = new Set(pi.getAllTools().map((tool) => tool.name));
433
- const activeTools = mode === "vanilla" ? [...available] : MODE_TOOLS[mode].filter((tool) => available.has(tool));
447
+ const allTools = pi.getAllTools();
448
+ const available = new Set(allTools.map((tool) => tool.name));
449
+ const externalPackageTools = allTools.filter(isExternalPackageTool).map((tool) => tool.name);
450
+ const activeTools = mode === "vanilla" ? [...available] : uniqueToolNames([...MODE_TOOLS[mode].filter((tool) => available.has(tool)), ...externalPackageTools]);
434
451
  pi.setActiveTools(activeTools);
435
452
  if (persist) pi.appendEntry("zob-mode-state", { mode, timestamp: new Date().toISOString() });
436
453
  ctx.ui.setStatus("zob-mode", ctx.ui.theme.fg("accent", `zob:${mode}`));
@@ -12,7 +12,7 @@ import { registerMissionControlTools } from "./tools-mission-control.js";
12
12
  import { registerFactoryTools } from "./tools-factory.js";
13
13
  import { registerProjectDnaTools } from "./tools-project-dna.js";
14
14
  import { registerOrchestrationTools } from "./tools-orchestration.js";
15
- import { registerGoalRuntimeEvents, registerGoalRuntimeTools } from "../goal-runtime.js";
15
+ import { registerGoalRuntimeEvents, registerGoalRuntimeTools } from "./goal-runtime.js";
16
16
  import { registerGoalRoomTools } from "./tools-goal-room.js";
17
17
  import { registerGovernedRequestTools } from "./tools-governed-requests.js";
18
18
  import { registerWorkspaceClaimTools } from "./tools-workspace-claims.js";
@@ -1,4 +1,4 @@
1
- import type { ChildChangedPathRef, ModeName } from "./types/core.js";
1
+ import type { ChildChangedPathRef, ModeName } from "./core/types/core.js";
2
2
 
3
3
  export type {
4
4
  AgentScope,
@@ -9,7 +9,7 @@ export type {
9
9
  JsonEvent,
10
10
  ModeName,
11
11
  TextBlock,
12
- } from "./types/core.js";
12
+ } from "./core/types/core.js";
13
13
 
14
14
  export interface DamageRule {
15
15
  pattern: string;
@@ -0,0 +1,9 @@
1
+ # zob-switch Extension Guardrails
2
+
3
+ - This folder owns the `/zob` Pi switch extension only.
4
+ - Keep `.pi/extensions/zob-switch/index.ts` as the stable Pi entrypoint and preserve its default export.
5
+ - Split-only refactors are allowed; do not change `/zob` behavior, command registration, aliases/autocomplete behavior, messages, settings paths, snapshot paths, schemas, defaults, or sync/async behavior.
6
+ - Use NodeNext relative imports with `.js` suffix.
7
+ - Use `import type` for type-only imports.
8
+ - No file under `src/` may import from `index.ts`.
9
+ - Do not touch secrets, generated/vendor folders, logs, sessions, reports, or unrelated extensions from this package.
@@ -1,134 +1,22 @@
1
1
  import { existsSync } from "node:fs";
2
- import { mkdir, readFile, writeFile } from "node:fs/promises";
3
- import { dirname, join } from "node:path";
2
+ import { join } from "node:path";
4
3
 
5
4
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
6
- import type { AutocompleteItem } from "@earendil-works/pi-tui";
7
5
 
8
- const SETTINGS_PATH = join(".pi", "settings.json");
9
- const SNAPSHOT_PATH = join(".pi", "tmp", "zob-switch", "settings-snapshot.json");
10
- const SWITCH_EXTENSION = "extensions/zob-switch/index.ts";
11
- const HARNESS_EXTENSION = "extensions/zob-harness/index.ts";
12
- const ZOB_PROMPTS = "prompts";
13
- const ZOB_SKILLS = "skills";
14
-
15
- type JsonObject = Record<string, unknown>;
16
-
17
- type Snapshot = {
18
- schema: "zob.harness-switch.settings-snapshot.v1";
19
- savedAt: string;
20
- settings: JsonObject;
21
- };
22
-
23
- function isObject(value: unknown): value is JsonObject {
24
- return typeof value === "object" && value !== null && !Array.isArray(value);
25
- }
26
-
27
- function asStringArray(value: unknown): string[] {
28
- return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === "string") : [];
29
- }
30
-
31
- function uniqueWithRequiredFirst(values: string[], requiredFirst: string[]): string[] {
32
- const result: string[] = [];
33
- for (const value of [...requiredFirst, ...values]) {
34
- if (!result.includes(value)) result.push(value);
35
- }
36
- return result;
37
- }
38
-
39
- function withoutValues(values: string[], remove: string[]): string[] {
40
- return values.filter((value) => !remove.includes(value));
41
- }
42
-
43
- function hasValue(settings: JsonObject, key: "extensions" | "prompts" | "skills", value: string): boolean {
44
- return asStringArray(settings[key]).includes(value);
45
- }
46
-
47
- async function readSettings(cwd: string): Promise<JsonObject> {
48
- const raw = await readFile(join(cwd, SETTINGS_PATH), "utf8");
49
- const parsed = JSON.parse(raw) as unknown;
50
- if (!isObject(parsed)) throw new Error(`${SETTINGS_PATH} must contain a JSON object`);
51
- return parsed;
52
- }
6
+ import { argumentCompletions } from "./src/autocomplete.js";
7
+ import { HARNESS_EXTENSION, SETTINGS_PATH } from "./src/paths.js";
8
+ import { readSettings, writeSettings } from "./src/settings.js";
9
+ import type { JsonObject } from "./src/settings.js";
10
+ import { readSnapshot, writeSnapshot } from "./src/snapshot.js";
11
+ import type { Snapshot } from "./src/snapshot.js";
12
+ import { buildOffSettings, buildOnSettings, hasValue, statusFor } from "./src/state.js";
53
13
 
54
- async function writeSettings(cwd: string, settings: JsonObject): Promise<void> {
55
- await writeFile(join(cwd, SETTINGS_PATH), `${JSON.stringify(settings, null, 2)}\n`, "utf8");
56
- }
57
-
58
- async function writeSnapshot(cwd: string, settings: JsonObject): Promise<void> {
59
- const snapshot: Snapshot = {
60
- schema: "zob.harness-switch.settings-snapshot.v1",
61
- savedAt: new Date().toISOString(),
62
- settings,
63
- };
64
- const snapshotPath = join(cwd, SNAPSHOT_PATH);
65
- await mkdir(dirname(snapshotPath), { recursive: true });
66
- await writeFile(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\n`, "utf8");
67
- }
68
-
69
- async function readSnapshot(cwd: string): Promise<Snapshot | null> {
70
- const snapshotPath = join(cwd, SNAPSHOT_PATH);
71
- if (!existsSync(snapshotPath)) return null;
72
- const parsed = JSON.parse(await readFile(snapshotPath, "utf8")) as unknown;
73
- if (!isObject(parsed) || parsed.schema !== "zob.harness-switch.settings-snapshot.v1" || !isObject(parsed.settings)) {
74
- throw new Error(`${SNAPSHOT_PATH} is not a valid ZOB switch snapshot`);
75
- }
76
- return parsed as Snapshot;
77
- }
14
+ const SNAPSHOT_PATH = join(".pi", "tmp", "zob-switch", "settings-snapshot.json");
78
15
 
79
16
  function shouldWriteOffSnapshot(current: JsonObject, snapshot: Snapshot | null): boolean {
80
17
  return snapshot === null || hasValue(current, "extensions", HARNESS_EXTENSION);
81
18
  }
82
19
 
83
- function buildOffSettings(current: JsonObject): JsonObject {
84
- return {
85
- ...current,
86
- extensions: uniqueWithRequiredFirst(withoutValues(asStringArray(current.extensions), [HARNESS_EXTENSION]), [SWITCH_EXTENSION]),
87
- prompts: withoutValues(asStringArray(current.prompts), [ZOB_PROMPTS]),
88
- skills: withoutValues(asStringArray(current.skills), [ZOB_SKILLS]),
89
- };
90
- }
91
-
92
- function buildOnSettings(base: JsonObject, usedSnapshot: boolean): JsonObject {
93
- return {
94
- ...base,
95
- extensions: uniqueWithRequiredFirst(asStringArray(base.extensions), [SWITCH_EXTENSION, HARNESS_EXTENSION]),
96
- prompts: usedSnapshot ? asStringArray(base.prompts) : uniqueWithRequiredFirst(asStringArray(base.prompts), [ZOB_PROMPTS]),
97
- skills: usedSnapshot ? asStringArray(base.skills) : uniqueWithRequiredFirst(asStringArray(base.skills), [ZOB_SKILLS]),
98
- };
99
- }
100
-
101
- function statusFor(settings: JsonObject, snapshotPresent: boolean): string {
102
- const switchConfigured = hasValue(settings, "extensions", SWITCH_EXTENSION);
103
- const harnessConfigured = hasValue(settings, "extensions", HARNESS_EXTENSION);
104
- const promptsConfigured = hasValue(settings, "prompts", ZOB_PROMPTS);
105
- const skillsConfigured = hasValue(settings, "skills", ZOB_SKILLS);
106
- const state = switchConfigured && harnessConfigured && promptsConfigured && skillsConfigured
107
- ? "on"
108
- : switchConfigured && !harnessConfigured && !promptsConfigured && !skillsConfigured
109
- ? "off"
110
- : "partial";
111
- return [
112
- `ZOB Harness switch: ${state}`,
113
- `switch extension: ${switchConfigured ? "configured" : "missing"}`,
114
- `harness extension: ${harnessConfigured ? "configured" : "missing"}`,
115
- `prompts: ${promptsConfigured ? "configured" : "missing"}`,
116
- `skills: ${skillsConfigured ? "configured" : "missing"}`,
117
- `snapshot: ${snapshotPresent ? "present" : "missing"}`,
118
- ].join("\n");
119
- }
120
-
121
- function argumentCompletions(prefix: string): AutocompleteItem[] | null {
122
- const query = prefix.trim().toLowerCase();
123
- const items: AutocompleteItem[] = [
124
- { value: "on", label: "on", description: "restore ZOB Harness from snapshot/defaults and reload" },
125
- { value: "off", label: "off", description: "snapshot settings, unload ZOB Harness resources, and reload" },
126
- { value: "status", label: "status", description: "show switch/harness/prompts/skills/snapshot state" },
127
- ];
128
- const filtered = query ? items.filter((item) => item.value.startsWith(query)) : items;
129
- return filtered.length > 0 ? filtered : null;
130
- }
131
-
132
20
  export default function zobSwitch(pi: ExtensionAPI): void {
133
21
  pi.registerCommand("zob", {
134
22
  description: "Switch ZOB Harness on/off or show status: /zob on|off|status",
@@ -0,0 +1,8 @@
1
+ # zob-switch src Guardrails
2
+
3
+ - Modules here are sidecars for `.pi/extensions/zob-switch/index.ts`.
4
+ - Move code only; do not rewrite logic, optimize, reorder behavior, rename helpers for behavior changes, or alter strings/schemas/paths.
5
+ - Preserve `/zob` command behavior exactly, including settings and snapshot semantics.
6
+ - Use NodeNext relative imports with `.js` suffix.
7
+ - Use `import type` for type-only imports.
8
+ - Never import from `../index.ts` or any `index.ts` entrypoint.
@@ -0,0 +1,12 @@
1
+ import type { AutocompleteItem } from "@earendil-works/pi-tui";
2
+
3
+ export function argumentCompletions(prefix: string): AutocompleteItem[] | null {
4
+ const query = prefix.trim().toLowerCase();
5
+ const items: AutocompleteItem[] = [
6
+ { value: "on", label: "on", description: "restore ZOB Harness from snapshot/defaults and reload" },
7
+ { value: "off", label: "off", description: "snapshot settings, unload ZOB Harness resources, and reload" },
8
+ { value: "status", label: "status", description: "show switch/harness/prompts/skills/snapshot state" },
9
+ ];
10
+ const filtered = query ? items.filter((item) => item.value.startsWith(query)) : items;
11
+ return filtered.length > 0 ? filtered : null;
12
+ }
@@ -0,0 +1,8 @@
1
+ import { join } from "node:path";
2
+
3
+ export const SETTINGS_PATH = join(".pi", "settings.json");
4
+ export const SNAPSHOT_PATH = join(".pi", "tmp", "zob-switch", "settings-snapshot.json");
5
+ export const SWITCH_EXTENSION = "extensions/zob-switch/index.ts";
6
+ export const HARNESS_EXTENSION = "extensions/zob-harness/index.ts";
7
+ export const ZOB_PROMPTS = "prompts";
8
+ export const ZOB_SKILLS = "skills";