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,16 +1,16 @@
1
1
  import { appendFileSync, existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
- import { loadProjectAgents } from "../agents.js";
5
- import { BLOCKED_CHAIN_TOOLS, READ_ONLY_CHAIN_TOOLS } from "../constants.js";
6
- import { validateOutputContractId } from "../output-contracts.js";
7
- import { validateToolList } from "../safety.js";
8
- import type { ChainDefinition, ChainRunInput, ChainRunResult, ChainStepDefinition } from "../types.js";
9
- import { sha256 } from "../utils/hashing.js";
10
- import { parseJsonFile } from "../utils/json.js";
11
- import { isSafeArtifactName, safeFileStem, safeRunId } from "../utils/paths.js";
12
- import { isRecord } from "../utils/records.js";
13
- import { listZobResourceJsonStems, readableZobResourcePath } from "../utils/resources.js";
4
+ import { loadProjectAgents } from "../delegation/agents.js";
5
+ import { BLOCKED_CHAIN_TOOLS, READ_ONLY_CHAIN_TOOLS } from "../../core/constants.js";
6
+ import { validateOutputContractId } from "../delegation/output-contracts.js";
7
+ import { validateToolList } from "../governance/safety.js";
8
+ import type { ChainDefinition, ChainRunInput, ChainRunResult, ChainStepDefinition } from "../../types.js";
9
+ import { sha256 } from "../../core/utils/hashing.js";
10
+ import { parseJsonFile } from "../../core/utils/json.js";
11
+ import { isSafeArtifactName, safeFileStem, safeRunId } from "../../core/utils/paths.js";
12
+ import { isRecord } from "../../core/utils/records.js";
13
+ import { listZobResourceJsonStems, readableZobResourcePath } from "../../core/utils/resources.js";
14
14
  import { isStringArray } from "./teams.js";
15
15
 
16
16
  function chainsDir(repoRoot: string): string {
@@ -1,9 +1,9 @@
1
1
  import { appendFileSync, mkdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
- import type { TeamDefinition, ZobComsMessageInput } from "../types.js";
5
- import { sha256 } from "../utils/hashing.js";
6
- import { readJsonl } from "../utils/json.js";
4
+ import type { TeamDefinition, ZobComsMessageInput } from "../../types.js";
5
+ import { sha256 } from "../../core/utils/hashing.js";
6
+ import { readJsonl } from "../../core/utils/json.js";
7
7
 
8
8
  function comsDir(repoRoot: string): string {
9
9
  return join(repoRoot, ".pi", "coms");
@@ -1,15 +1,15 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
- import { loadProjectAgents } from "../agents.js";
4
+ import { loadProjectAgents } from "../delegation/agents.js";
5
5
  import { normalizeAdaptiveDelegationPolicy, validateAdaptiveDelegationPolicy } from "../orchestration/adaptive-delegation.js";
6
- import { validateOutputContractId } from "../output-contracts.js";
7
- import { validateAllowedPathPolicy, validateDelegateTaskWriteScope, validateForbiddenPathPolicy, validateToolList } from "../safety.js";
8
- import type { OrchestrateRunInput, OrchestrationProfileDefinition, OrchestrationProfilePhase, OrchestrationProfileRole, TeamDefinition } from "../types.js";
9
- import { parseJsonFile } from "../utils/json.js";
10
- import { isSafeArtifactName, safeFileStem } from "../utils/paths.js";
11
- import { isRecord } from "../utils/records.js";
12
- import { listZobResourceJsonStems, readableZobResourcePath } from "../utils/resources.js";
6
+ import { validateOutputContractId } from "../delegation/output-contracts.js";
7
+ import { validateAllowedPathPolicy, validateDelegateTaskWriteScope, validateForbiddenPathPolicy, validateToolList } from "../governance/safety.js";
8
+ import type { OrchestrateRunInput, OrchestrationProfileDefinition, OrchestrationProfilePhase, OrchestrationProfileRole, TeamDefinition } from "../../types.js";
9
+ import { parseJsonFile } from "../../core/utils/json.js";
10
+ import { isSafeArtifactName, safeFileStem } from "../../core/utils/paths.js";
11
+ import { isRecord } from "../../core/utils/records.js";
12
+ import { listZobResourceJsonStems, readableZobResourcePath } from "../../core/utils/resources.js";
13
13
  import { isStringArray, loadTeamDefinition, validateTeamDefinition } from "./teams.js";
14
14
 
15
15
  function orchestrationProfilesDir(repoRoot: string): string {
@@ -1,14 +1,14 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
 
4
- import { loadProjectAgents } from "../agents.js";
5
- import { validateOutputContractId } from "../output-contracts.js";
6
- import { validateToolList } from "../safety.js";
7
- import type { HarnessAgent, TeamDefinition, TeamLead, TeamRoleBase, TeamWorker } from "../types.js";
8
- import { parseJsonFile } from "../utils/json.js";
9
- import { isSafeArtifactName, safeFileStem } from "../utils/paths.js";
10
- import { isRecord } from "../utils/records.js";
11
- import { readableZobResourcePath } from "../utils/resources.js";
4
+ import { loadProjectAgents } from "../delegation/agents.js";
5
+ import { validateOutputContractId } from "../delegation/output-contracts.js";
6
+ import { validateToolList } from "../governance/safety.js";
7
+ import type { HarnessAgent, TeamDefinition, TeamLead, TeamRoleBase, TeamWorker } from "../../types.js";
8
+ import { parseJsonFile } from "../../core/utils/json.js";
9
+ import { isSafeArtifactName, safeFileStem } from "../../core/utils/paths.js";
10
+ import { isRecord } from "../../core/utils/records.js";
11
+ import { readableZobResourcePath } from "../../core/utils/resources.js";
12
12
 
13
13
  function isStringArray(value: unknown): value is string[] {
14
14
  return Array.isArray(value) && value.every((item) => typeof item === "string");
@@ -1,6 +1,6 @@
1
1
  import type { ModeName } from "../types.js";
2
- import { sha256 } from "../utils/hashing.js";
3
- import { isRecord } from "../utils/records.js";
2
+ import { sha256 } from "../core/utils/hashing.js";
3
+ import { isRecord } from "../core/utils/records.js";
4
4
 
5
5
  export type AdaptiveZmodeAlias = "orchestrator";
6
6
 
@@ -2,8 +2,8 @@ import { randomUUID } from "node:crypto";
2
2
  import type { CompactionResult, ExtensionAPI, ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent";
3
3
  import { compact, estimateTokens, findCutPoint } from "@earendil-works/pi-coding-agent";
4
4
 
5
- import { sha256 } from "../utils/hashing.js";
6
- import { isRecord } from "../utils/records.js";
5
+ import { sha256 } from "../core/utils/hashing.js";
6
+ import { isRecord } from "../core/utils/records.js";
7
7
  import { buildZobCompactionInstructions, withZobCompactionDetails, ZOB_COMPACTION_TARGET_TOKENS, type ZobCompactionDetails } from "./compaction-policy.js";
8
8
  import type { HarnessRuntimeState } from "./state.js";
9
9
 
@@ -1,26 +1,26 @@
1
1
  import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
2
  import type { AutocompleteItem } from "@earendil-works/pi-tui";
3
3
 
4
- import { MODE_PROMPTS } from "../constants.js";
4
+ import { MODE_PROMPTS } from "../core/constants.js";
5
5
  import type { ModeName, QueueTickResult } from "../types.js";
6
- import { discoverAgents, formatAgentList } from "../agents.js";
7
- import { buildComputePreview, resolveComputeProfile, type ComputeRequestedProfile } from "../compute-profile.js";
8
- import { buildComputeWorkflowShape } from "../compute-workflow-shape.js";
9
- import { buildDaemonRuntimeState, buildDaemonTickPlan, type DaemonRuntimeState, type DaemonTickPlan } from "../daemon-runtime.js";
10
- import { runQueueDaemonTick } from "../queue.js";
11
- import { buildProjectDnaAgenticPlan, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit } from "../project-dna.js";
12
- import { formatZagentList, formatZteamList, listZagentManifests, listZteamManifests, loadZagentManifest, loadZteamManifest, normalizeZagentRoomBindings, readZagentPrompt, type ZAgentManifest, type ZAgentRoomBinding, type ZTeamAgentManifest, type ZTeamManifest, type ZTeamMemberManifest } from "../zagents.js";
6
+ import { discoverAgents, formatAgentList } from "../domains/delegation/agents.js";
7
+ import { buildComputePreview, resolveComputeProfile, type ComputeRequestedProfile } from "../domains/compute/compute-profile.js";
8
+ import { buildComputeWorkflowShape } from "../domains/compute/compute-workflow-shape.js";
9
+ import { buildDaemonRuntimeState, buildDaemonTickPlan, type DaemonRuntimeState, type DaemonTickPlan } from "../domains/autonomy/daemon-runtime.js";
10
+ import { runQueueDaemonTick } from "../domains/telemetry/queue.js";
11
+ import { buildProjectDnaAgenticPlan, buildProjectDnaQueryResult, buildProjectDnaReadinessAudit } from "../domains/project-dna/project-dna.js";
12
+ import { formatZagentList, formatZteamList, listZagentManifests, listZteamManifests, loadZagentManifest, loadZteamManifest, normalizeZagentRoomBindings, readZagentPrompt, resolveZagentRuntimeRoomBindings, type ZAgentManifest, type ZAgentRoomBinding, type ZTeamAgentManifest, type ZTeamManifest, type ZTeamMemberManifest } from "../domains/coms/zagents.js";
13
13
  import { resolveAdaptiveZmodeEntrypoint, renderAdaptiveZmodeTemplate } from "./adaptive-zmode.js";
14
14
  import { handleZcompactCommand } from "./auto-compaction.js";
15
- import { sha256 } from "../utils/hashing.js";
16
- import { buildZcommitPlan, formatZcommitPlan, formatZcommitStatus, readZcommitPolicy, runGovernedZcommitAdopt, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitAdoptResult, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitToggleState } from "../git-ops.js";
17
- import { clearZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer } from "../coms-v2/zpeer-profile.js";
18
- import { buildZpeerRoomSummary, changeZpeerAlias, changeZpeerRoom, clearZpeerRoom, joinZpeerRoom, leaveZpeerRoom, peerAliasInRoom, refreshZpeerSelf, sendZpeerPrompt, useZpeerRoom, zpeerMembershipsForPeer, type ZpeerSendMode } from "../coms-v2/zpeer.js";
15
+ import { sha256 } from "../core/utils/hashing.js";
16
+ import { buildZcommitPlan, formatZcommitPlan, formatZcommitStatus, readZcommitPolicy, runGovernedZcommitAdopt, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitAdoptResult, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitToggleState } from "../domains/git/git-ops.js";
17
+ import { clearZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer } from "../domains/coms/coms-v2/zpeer-profile.js";
18
+ import { buildZpeerRoomSummary, changeZpeerAlias, changeZpeerRoom, clearZpeerRoom, joinZpeerRoom, leaveZpeerRoom, peerAliasInRoom, refreshZpeerSelf, sendZpeerPrompt, useZpeerRoom, zpeerMembershipsForPeer, type ZpeerSendMode } from "../domains/coms/coms-v2/zpeer.js";
19
19
  import { markZpeerNewHardResetPending } from "./events.js";
20
- import { parseBillableJobIntake, validateBillableJobIntake } from "../goal.js";
21
- import { handleGoalCommand, handleGoalGateCommand, pauseRuntimeGoalForStop } from "../goal-runtime.js";
22
- import { formatRuleResolution, resolveRuleProfile } from "../rules.js";
23
- import { formatContractTemplate } from "../safety.js";
20
+ import { parseBillableJobIntake, validateBillableJobIntake } from "../domains/goal/goal.js";
21
+ import { handleGoalCommand, handleGoalGateCommand, pauseRuntimeGoalForStop } from "./goal-runtime.js";
22
+ import { formatRuleResolution, resolveRuleProfile } from "../domains/governance/rules.js";
23
+ import { formatContractTemplate } from "../domains/governance/safety.js";
24
24
  import { showDelegationOverlay } from "./delegation-overlay.js";
25
25
  import { finishDelegationRun } from "./delegation-monitor.js";
26
26
  import { showGoalTodoOverlay } from "./goal-todo-overlay.js";
@@ -33,7 +33,7 @@ import {
33
33
  scoreMissionReadiness,
34
34
  toAutonomyStateLedgerEntry,
35
35
  toMissionReadinessLedgerEntry,
36
- } from "../interactive-autonomy.js";
36
+ } from "../domains/autonomy/interactive-autonomy.js";
37
37
  import { applyMode, renderHarnessWidget } from "./widget.js";
38
38
 
39
39
  const COMPUTE_PROFILES = ["auto", "low", "medium", "high", "xhigh", "max"] as const;
@@ -598,6 +598,7 @@ function formatZagentShow(loaded: ReturnType<typeof loadZagentManifest>): string
598
598
  loaded.manifest.team ? `team: ${loaded.manifest.team}` : undefined,
599
599
  loaded.manifest.role ? `role: ${loaded.manifest.role}` : undefined,
600
600
  loaded.manifest.alias ? `alias: @${loaded.manifest.alias}` : undefined,
601
+ loaded.manifest.defaultMode ? `defaultMode: ${loaded.manifest.defaultMode}` : undefined,
601
602
  rooms.length ? `rooms: ${rooms.map((room) => `${room.id}${room.alias ? `@${room.alias}` : ""}${room.active ? "*" : ""}`).join(", ")}` : "rooms: none",
602
603
  loaded.manifest.promptRef ? `promptRef: ${loaded.manifest.promptRef}` : "promptRef: none",
603
604
  loaded.promptPath ? `promptPath: ${loaded.promptPath}` : undefined,
@@ -627,7 +628,7 @@ function normalizeZpeerRole(role: string | undefined): "member" | "bridge" | "ob
627
628
 
628
629
  async function applyZagentToZpeer(repoRoot: string, peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]>, manifest: ZAgentManifest): Promise<{ ok: true; peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]> } | { ok: false; reason: string; peer: NonNullable<HarnessRuntimeState["zobLive"]["peerCard"]> }> {
629
630
  let current = refreshZpeerSelf(repoRoot, peer);
630
- const rooms = normalizeZagentRoomBindings(manifest.rooms, manifest.defaultRoom, manifest.activeRoom);
631
+ const rooms = resolveZagentRuntimeRoomBindings(repoRoot, manifest).rooms;
631
632
  if (rooms.length === 0 && manifest.alias) {
632
633
  const changed = await changeZpeerAlias(repoRoot, current, manifest.alias);
633
634
  if (!changed.ok) return { ok: false, reason: changed.reason, peer: current };
@@ -663,25 +664,44 @@ function zteamMembers(team: ZTeamManifest): Array<{ id: string; alias?: string;
663
664
  }));
664
665
  }
665
666
 
666
- function zteamLaunchPlanText(team: ZTeamManifest): { text: string; roomIds: string[]; agentIds: string[] } {
667
+ function safeLaunchPlanModel(value: string | undefined): string | undefined {
668
+ const trimmed = value?.trim();
669
+ if (!trimmed || trimmed.length > 160) return undefined;
670
+ if (trimmed.includes("\0") || trimmed.includes("\n") || trimmed.includes("\r") || trimmed.includes("..")) return undefined;
671
+ if (trimmed.startsWith("/") || trimmed.startsWith("~")) return undefined;
672
+ return /^[a-zA-Z0-9._:/+@-]+$/.test(trimmed) ? trimmed : undefined;
673
+ }
674
+
675
+ function zteamLaunchPlanText(repoRoot: string, team: ZTeamManifest): { text: string; roomIds: string[]; agentIds: string[]; modelIds: string[]; defaultModes: string[] } {
667
676
  const teamRooms = normalizeZagentRoomBindings(team.rooms, team.defaultRoom, team.activeRoom).map((room) => room.id);
668
677
  const members = zteamMembers(team);
669
678
  const roomIds = [...new Set([...teamRooms, ...members.flatMap((member) => (member.rooms ?? []).map((room) => room.id))])];
670
679
  const agentIds = members.map((member) => member.id);
680
+ const loadedAgents = members.map((member) => ({ member, loaded: loadZagentManifest(repoRoot, member.id) }));
681
+ const modelIds = [...new Set(loadedAgents.map(({ loaded }) => safeLaunchPlanModel(loaded.manifest.model)).filter((model): model is string => Boolean(model)))];
682
+ const defaultModes = [...new Set(loadedAgents.map(({ loaded }) => loaded.manifest.defaultMode).filter((mode): mode is ModeName => Boolean(mode)))];
671
683
  const lines = [
672
684
  `# ZTeam launch-plan: ${team.id}`,
673
685
  "No processes spawned. Copy/paste each command in a separate terminal when approved.",
674
686
  "",
675
- ...members.map((member) => {
687
+ ...loadedAgents.map(({ member, loaded }) => {
688
+ const rawModel = loaded.manifest.model;
689
+ const model = safeLaunchPlanModel(rawModel);
690
+ const defaultMode = loaded.manifest.defaultMode;
676
691
  const rooms = (member.rooms ?? []).map((room) => `${room.id}${room.active ? "*" : ""}`).join(", ") || teamRooms.join(", ") || "default";
677
692
  const alias = member.alias ? ` alias=@${member.alias}` : "";
678
- return `ZOB_ZAGENT_ID=${member.id} pi # expected_rooms=${rooms}${alias}`;
693
+ const modelArg = model ? ` --model ${model}` : "";
694
+ const modelNote = rawModel ? (model ? ` model=${model}` : " model=invalid_omitted") : "";
695
+ const modeNote = defaultMode ? ` defaultMode=${defaultMode}` : "";
696
+ return `ZOB_ZAGENT_ID=${member.id} pi${modelArg} # expected_rooms=${rooms}${alias}${modelNote}${modeNote}`;
679
697
  }),
680
698
  "",
681
699
  `Expected rooms: ${roomIds.join(", ") || "default"}`,
700
+ modelIds.length ? `Models: ${modelIds.join(", ")}` : "Models: default Pi model unless each ZAgent manifest sets a safe model",
701
+ defaultModes.length ? `Default modes: ${defaultModes.join(", ")}` : "Default modes: restored/current ZOB mode unless each ZAgent manifest sets defaultMode",
682
702
  "After each session starts, run /zagent use <id> to bind its ZPeer alias/rooms.",
683
703
  ];
684
- return { text: lines.join("\n"), roomIds, agentIds };
704
+ return { text: lines.join("\n"), roomIds, agentIds, modelIds, defaultModes };
685
705
  }
686
706
 
687
707
  function delegationArgumentCompletions(state: HarnessRuntimeState, prefix: string): AutocompleteItem[] | null {
@@ -874,11 +894,13 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
874
894
  }
875
895
  const loaded = loadZagentManifest(ctx.cwd, id);
876
896
  const prompt = readZagentPrompt(ctx.cwd, loaded.manifest.promptRef);
877
- const rooms = normalizeZagentRoomBindings(loaded.manifest.rooms, loaded.manifest.defaultRoom, loaded.manifest.activeRoom);
897
+ const resolved = resolveZagentRuntimeRoomBindings(ctx.cwd, loaded.manifest);
898
+ const rooms = resolved.rooms;
878
899
  const errors = [...loaded.errors, ...prompt.errors];
879
900
  state.zagent = {
880
901
  id: loaded.manifest.id,
881
- team: loaded.manifest.team,
902
+ team: loaded.manifest.team ?? resolved.teamIds[0],
903
+ teams: resolved.teamIds,
882
904
  role: loaded.manifest.role,
883
905
  alias: loaded.manifest.alias,
884
906
  description: loaded.manifest.description,
@@ -967,11 +989,11 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
967
989
  return;
968
990
  }
969
991
  const loaded = loadZteamManifest(ctx.cwd, id);
970
- const plan = zteamLaunchPlanText(loaded.manifest);
992
+ const plan = zteamLaunchPlanText(ctx.cwd, loaded.manifest);
971
993
  pi.appendEntry("zob-zagent", zagentLedgerEntry("zteam_launch_plan", { teamId: loaded.manifest.id, status: loaded.errors.length === 0 ? "ok" : "blocked", roomIds: plan.roomIds, path: loaded.path, errors: loaded.errors }));
972
994
  renderHarnessWidget(pi, state, ctx);
973
- void pi.sendMessage({ customType: "zob-zteam-launch-plan", content: loaded.errors.length ? `${plan.text}\n\nBlocked manifest errors:\n- ${loaded.errors.join("\n- ")}` : plan.text, display: true, details: { id: loaded.manifest.id, agentIdHashes: plan.agentIds.map((agentId) => sha256(agentId)), roomIdHashes: plan.roomIds.map((roomId) => sha256(roomId)), bodyStored: false } }, { triggerTurn: false });
974
- ctx.ui.notify(`zteam ${loaded.manifest.id} launch-plan printed; spawn count=0; expectedRooms=${plan.roomIds.join(",") || "default"}`, loaded.errors.length === 0 ? "info" : "warning");
995
+ void pi.sendMessage({ customType: "zob-zteam-launch-plan", content: loaded.errors.length ? `${plan.text}\n\nBlocked manifest errors:\n- ${loaded.errors.join("\n- ")}` : plan.text, display: true, details: { id: loaded.manifest.id, agentIdHashes: plan.agentIds.map((agentId) => sha256(agentId)), roomIdHashes: plan.roomIds.map((roomId) => sha256(roomId)), modelIdHashes: plan.modelIds.map((modelId) => sha256(modelId)), defaultModeHashes: plan.defaultModes.map((mode) => sha256(mode)), bodyStored: false } }, { triggerTurn: false });
996
+ ctx.ui.notify(`zteam ${loaded.manifest.id} launch-plan printed; spawn count=0; expectedRooms=${plan.roomIds.join(",") || "default"}; models=${plan.modelIds.length || "default"}; defaultModes=${plan.defaultModes.length || "current"}`, loaded.errors.length === 0 ? "info" : "warning");
975
997
  return;
976
998
  }
977
999
  ctx.ui.notify("Usage: /zteam list | /zteam show <id> | /zteam launch-plan <id>", "warning");
@@ -1010,9 +1032,9 @@ export function registerHarnessCommands(pi: ExtensionAPI, state: HarnessRuntimeS
1010
1032
  });
1011
1033
  emitZpeerEvent({ kind: "status", roomId: summary.roomId, fromAlias: summary.selfAlias, status: `online=${summary.online}/${summary.peerCount}`, reason: `stale=${summary.stale} offline=${summary.offline}` });
1012
1034
  renderHarnessWidget(pi, state, ctx);
1013
- const availableAliases = summary.aliases.filter((alias) => alias !== summary.selfAlias).map((alias) => `@${alias}`).join(", ") || "none";
1035
+ const availableAliases = summary.onlineAliases.filter((alias) => alias !== summary.selfAlias).map((alias) => `@${alias}`).join(", ") || "none";
1014
1036
  const unavailable = summary.stale + summary.offline;
1015
- ctx.ui.notify(`zpeer room=${summary.roomId} memberships=${summary.membershipCount ?? zpeerMembershipsForPeer(self).length} self=@${summary.selfAlias ?? "?"} onlinePeers=${Math.max(0, summary.online - 1)} unavailable=${unavailable} peers=${availableAliases} · usage: /zpeer @alias <prompt> | /zpeer in <room> @alias <prompt> · safety: local-only/hash-only/bodyStored=false`, "info");
1037
+ ctx.ui.notify(`zpeer room=${summary.roomId} memberships=${summary.membershipCount ?? zpeerMembershipsForPeer(self).length} self=@${summary.selfAlias ?? "?"} onlinePeers=${Math.max(0, summary.online - 1)} unavailable=${unavailable} livePeers=${availableAliases} · usage: /zpeer @alias <prompt> | /zpeer in <room> @alias <prompt> · safety: local-only/hash-only/bodyStored=false`, "info");
1016
1038
  return;
1017
1039
  }
1018
1040
  const parts = trimmed.split(/\s+/);
@@ -1,7 +1,7 @@
1
1
  import type { CompactionResult } from "@earendil-works/pi-coding-agent";
2
2
 
3
- import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../goal-todos.js";
4
- import { sha256 } from "../utils/hashing.js";
3
+ import { goalTodoCompletionDiagnostics, summarizeGoalTodos } from "../domains/goal/goal-todos.js";
4
+ import { sha256 } from "../core/utils/hashing.js";
5
5
  import type { HarnessRuntimeState } from "./state.js";
6
6
 
7
7
  export const ZOB_COMPACTION_ENTRY_TYPE = "zob-compaction";
@@ -5,7 +5,7 @@ import { Markdown, truncateToWidth, visibleWidth, type MarkdownTheme } from "@ea
5
5
 
6
6
  import { delegationDurationMs, delegationSignalBadge, delegationSignalColor, formatDelegationContextLabel, formatDelegationCostLabel, formatDelegationModelLabel, formatDelegationSignalBadge, formatDuration, statusIcon, type DelegationRunView } from "./delegation-monitor.js";
7
7
  import { sanitizeDelegationText } from "./delegation-markdown.js";
8
- import { isRecord } from "../utils/records.js";
8
+ import { isRecord } from "../core/utils/records.js";
9
9
 
10
10
  const FEED_MAX_BYTES = 240_000;
11
11
  const FEED_MAX_LINES = 1_200;
@@ -2,7 +2,7 @@ import { closeSync, existsSync, openSync, readFileSync, readSync, statSync } fro
2
2
  import { resolve, sep } from "node:path";
3
3
 
4
4
  import type { ChildResult, DelegationFailureKind } from "../types.js";
5
- import { isRecord } from "../utils/records.js";
5
+ import { isRecord } from "../core/utils/records.js";
6
6
 
7
7
  export type DelegationRunSource = "delegate_agent" | "delegate_task";
8
8
  export type DelegationRunMode = "single" | "parallel" | "chain";
@@ -2,31 +2,31 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
2
2
  import { compact, generateBranchSummary, isToolCallEventType } from "@earendil-works/pi-coding-agent";
3
3
  import { Text } from "@earendil-works/pi-tui";
4
4
 
5
- import { MODE_PROMPTS, ZOB_COMPACTION_CONTINUITY_CONTRACT, ZOB_TOOL_ROUTING_CONTRACT } from "../constants.js";
6
- import { buildCurrentZobLivePeerCard } from "../coms-v2/identity.js";
7
- import { buildZobLiveAckEnvelope, buildZobLiveErrorEnvelope, buildZobLivePongEnvelope } from "../coms-v2/envelope.js";
8
- import { appendLiveCompletedRef } from "../coms-v2/ledger-bridge.js";
9
- import { bindZobLocalEndpoint, makeZobLocalEndpoint, sendZobLocalEnvelope } from "../coms-v2/local-transport.js";
10
- import { readZobComsV2Policy } from "../coms-v2/policy.js";
11
- import { registerCurrentZobLivePeer, touchCurrentZobLivePeer, unregisterCurrentZobLivePeer, writeZobLivePeerCard } from "../coms-v2/registry.js";
12
- import { clearZpeerNewCarryoverProfile, readZpeerLocalProfile, readZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer, writeZpeerNewCarryoverProfile, zpeerProfileIdIsSharedFallback } from "../coms-v2/zpeer-profile.js";
13
- import { buildZpeerRoomSummary, ensureZpeerFields, refreshZpeerSelf } from "../coms-v2/zpeer.js";
14
- import type { ZpeerRoomMembership } from "../coms-v2/types.js";
15
- import { buildZobLiveResponseEnvelope } from "../coms-v2/response-capture.js";
16
- import { writeZobComsRedactedCapture } from "../coms-v2/transcript-capture.js";
17
- import { formatGoalActivationMode, runtimeGoalStatusLine } from "../goal-runtime.js";
18
- import { formatInteractiveAutonomyPromptHint, formatMissionReadinessForUi, scoreMissionReadiness, toMissionReadinessLedgerEntry } from "../interactive-autonomy.js";
19
- import { formatGoalTodoPromptHint } from "../goal-todos.js";
20
- import { resolveRuleProfile } from "../rules.js";
21
- import { loadDamageRules } from "../safety.js";
22
- import { loadTeamDefinition, validateTeamDefinition } from "../topology/teams.js";
23
- import { loadZagentManifest, normalizeZagentRoomBindings, readZagentPrompt } from "../zagents.js";
5
+ import { EXTERNAL_PACKAGE_TOOLS_CONTRACT, MODE_PROMPTS, ZOB_COMPACTION_CONTINUITY_CONTRACT, ZOB_TOOL_ROUTING_CONTRACT } from "../core/constants.js";
6
+ import { buildCurrentZobLivePeerCard } from "../domains/coms/coms-v2/identity.js";
7
+ import { buildZobLiveAckEnvelope, buildZobLiveErrorEnvelope, buildZobLivePongEnvelope } from "../domains/coms/coms-v2/envelope.js";
8
+ import { appendLiveCompletedRef } from "../domains/coms/coms-v2/ledger-bridge.js";
9
+ import { bindZobLocalEndpoint, makeZobLocalEndpoint, sendZobLocalEnvelope } from "../domains/coms/coms-v2/local-transport.js";
10
+ import { readZobComsV2Policy } from "../domains/coms/coms-v2/policy.js";
11
+ import { pruneExpiredZobLivePeers, registerCurrentZobLivePeer, touchCurrentZobLivePeer, unregisterCurrentZobLivePeer, writeZobLivePeerCard } from "../domains/coms/coms-v2/registry.js";
12
+ import { clearZpeerNewCarryoverProfile, readZpeerLocalProfile, readZpeerNewCarryoverProfile, writeZpeerLocalProfileFromPeer, writeZpeerNewCarryoverProfile, zpeerProfileIdIsSharedFallback } from "../domains/coms/coms-v2/zpeer-profile.js";
13
+ import { buildZpeerPeerRoomSummaries, ensureZpeerFields, refreshZpeerSelf } from "../domains/coms/coms-v2/zpeer.js";
14
+ import type { ZpeerRoomMembership } from "../domains/coms/coms-v2/types.js";
15
+ import { buildZobLiveResponseEnvelope } from "../domains/coms/coms-v2/response-capture.js";
16
+ import { writeZobComsRedactedCapture } from "../domains/coms/coms-v2/transcript-capture.js";
17
+ import { formatGoalActivationMode, runtimeGoalStatusLine } from "./goal-runtime.js";
18
+ import { formatInteractiveAutonomyPromptHint, formatMissionReadinessForUi, scoreMissionReadiness, toMissionReadinessLedgerEntry } from "../domains/autonomy/interactive-autonomy.js";
19
+ import { formatGoalTodoPromptHint } from "../domains/goal/goal-todos.js";
20
+ import { resolveRuleProfile } from "../domains/governance/rules.js";
21
+ import { loadDamageRules } from "../domains/governance/safety.js";
22
+ import { loadTeamDefinition, validateTeamDefinition } from "../domains/topology/teams.js";
23
+ import { loadZagentManifest, readZagentPrompt, resolveZagentRuntimeRoomBindings } from "../domains/coms/zagents.js";
24
24
  import type { AssistantLikeMessage } from "../types.js";
25
- import { blockedFeedback } from "../utils/formatting.js";
26
- import { sha256 } from "../utils/hashing.js";
27
- import { buildZcommitPlan, recordZcommitTouchedFile, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitPlan } from "../git-ops.js";
28
- import { pathMatches } from "../utils/paths.js";
29
- import { isRecord, textFromMessage } from "../utils/records.js";
25
+ import { blockedFeedback } from "../core/utils/formatting.js";
26
+ import { sha256 } from "../core/utils/hashing.js";
27
+ import { buildZcommitPlan, recordZcommitTouchedFile, runGovernedZcommitCommit, runGovernedZcommitPush, type ZcommitCommandResult, type ZcommitOwnedPathRef, type ZcommitPlan } from "../domains/git/git-ops.js";
28
+ import { pathMatches } from "../core/utils/paths.js";
29
+ import { isRecord, textFromMessage } from "../core/utils/records.js";
30
30
  import { showDelegationOverlay } from "./delegation-overlay.js";
31
31
  import { buildDeterministicZobCompactionResult, buildDeterministicZobCompactionSummary, buildZobCompactionInstructions, buildZobCompactionLedgerEntry, withZobCompactionDetails, ZOB_COMPACTION_ENTRY_TYPE, zobCompactionBodyFreeViolations } from "./compaction-policy.js";
32
32
  import { buildZcompactPreparation, cancelZcompactPending, maybeTriggerZcompact, runZcompactCompactionHook } from "./auto-compaction.js";
@@ -78,17 +78,20 @@ function loadActiveZagentById(state: HarnessRuntimeState, repoRoot: string, zage
78
78
  const loaded = loadZagentManifest(repoRoot, zagentId);
79
79
  const manifest = loaded.manifest;
80
80
  const prompt = readZagentPrompt(repoRoot, manifest.promptRef);
81
- const rooms = normalizeZagentRoomBindings(manifest.rooms, manifest.defaultRoom, manifest.activeRoom);
81
+ const resolved = resolveZagentRuntimeRoomBindings(repoRoot, manifest);
82
+ const rooms = resolved.rooms;
82
83
  const activeRoom = manifest.activeRoom ?? rooms.find((room) => room.active)?.id ?? manifest.defaultRoom;
83
84
  const errors = [...loaded.errors, ...prompt.errors];
84
85
  const nextZagent: ActiveZagentState = {
85
86
  id: manifest.id,
86
- team: manifest.team,
87
+ team: manifest.team ?? resolved.teamIds[0],
88
+ teams: resolved.teamIds,
87
89
  role: manifest.role,
88
90
  alias: manifest.alias,
89
91
  description: manifest.description,
90
92
  rooms,
91
93
  activeRoom,
94
+ defaultMode: manifest.defaultMode,
92
95
  prompt: prompt.body,
93
96
  promptRef: manifest.promptRef,
94
97
  path: loaded.path,
@@ -136,7 +139,7 @@ function formatZagentPromptHint(state: HarnessRuntimeState): string {
136
139
  const policy = zagent.communicationPolicy ? JSON.stringify(zagent.communicationPolicy) : "not specified";
137
140
  const errors = zagent.errors.length > 0 ? `\n- load warnings: ${zagent.errors.slice(0, 5).join(" | ")}` : "";
138
141
  const promptBody = zagent.prompt?.trim() ? `\n\nZAGENT PROMPT BODY\n${zagent.prompt.trim()}` : "";
139
- return `\n\nZAGENT RUNTIME ACTIVATION\n- id: ${zagent.id}\n- team: ${zagent.team ?? "default"}\n- role: ${zagent.role ?? "not specified"}\n- alias: ${zagent.alias ? `@${zagent.alias}` : "not specified"}\n- rooms: ${rooms.join(", ") || "none"}\n- activeRoom: ${zagent.activeRoom ?? "not specified"}\n- communicationPolicy: ${policy}\n- promptRef: ${zagent.promptRef ?? "none"}\n- ZAgents are full Pi sessions tied to ZPeer/live coordination, not delegate subagents.${errors}${promptBody}`;
142
+ return `\n\nZAGENT RUNTIME ACTIVATION\n- id: ${zagent.id}\n- team: ${zagent.team ?? "default"}\n- teams: ${zagent.teams?.join(", ") || zagent.team || "default"}\n- role: ${zagent.role ?? "not specified"}\n- alias: ${zagent.alias ? `@${zagent.alias}` : "not specified"}\n- rooms: ${rooms.join(", ") || "none"}\n- activeRoom: ${zagent.activeRoom ?? "not specified"}\n- defaultMode: ${zagent.defaultMode ?? "not specified"}\n- communicationPolicy: ${policy}\n- promptRef: ${zagent.promptRef ?? "none"}\n- ZAgents are full Pi sessions tied to ZPeer/live coordination, not delegate subagents.${errors}${promptBody}`;
140
143
  }
141
144
 
142
145
  function zpeerRuntimeProfileId(ctx: ExtensionContext): string {
@@ -309,13 +312,22 @@ function buildZpeerAwarenessPrompt(state: HarnessRuntimeState, repoRoot: string)
309
312
  if (!state.zobLive.peerCard) {
310
313
  return "\n\nZPEER AWARENESS\n- local peer endpoint: unavailable this turn\n- Use zpeer_ask with mode=\"async\" or /zpeer only when useful or user-requested for peer coordination; avoid spam/loops and do not invent hidden worker-to-worker chat.";
311
314
  }
312
- const summary = buildZpeerRoomSummary(repoRoot, state.zobLive.peerCard);
313
- const memberships = state.zobLive.peerCard.zpeerMemberships?.length ?? summary.membershipCount ?? 1;
314
- const selfAlias = summary.selfAlias ?? "?";
315
- const peerAliases = summary.aliases.filter((alias) => alias !== selfAlias).slice(0, 8).map((alias) => `@${alias}`);
316
- const unavailable = summary.stale + summary.offline;
317
- const duplicateLine = summary.duplicateAliases.length > 0 ? `\n- duplicate aliases: ${summary.duplicateAliases.map((alias) => `@${alias}`).join(", ")}` : "";
318
- return `\n\nZPEER AWARENESS (transient, rebuilt each turn)\n- room: ${summary.roomId}\n- memberships: ${memberships}\n- self: @${selfAlias}\n- online peers: ${peerAliases.join(", ") || "none"}\n- unavailable peers: ${unavailable} (stale=${summary.stale}, offline=${summary.offline})${duplicateLine}\n- posture: local_socket-only, room-scoped, hash-only durable ledgers, bodyStored=false, networkEnabled=false\n- For non-trivial review/debug/planning peer coordination, agents may use zpeer_ask with mode=\"async\" so the request is visible, governed, and non-blocking; /zpeer remains the interactive command path.\n- Passive wait rule: if the only remaining action is waiting for ZPeer/coms replies, stop the turn and remain idle; do not poll, call tools, or continue just to wait.\n- Use ZPeer only when useful or user-requested; avoid spam, duplicate asks, and reply loops; do not use it for hidden free chat or to bypass topology/safety gates.\n- Raw ZPeer bodies are transient; durable records must remain hash-only/bodyStored=false.\n- last ZPeer event: ${formatZpeerLastEvent(state.zobLive.lastEvent)}`;
315
+ const summaries = buildZpeerPeerRoomSummaries(repoRoot, state.zobLive.peerCard);
316
+ const activeSummary = summaries.find((summary) => summary.active) ?? summaries[0];
317
+ const memberships = (state.zobLive.peerCard.zpeerMemberships?.length ?? summaries.length) || 1;
318
+ const roomLines = summaries.slice(0, 6).map((summary) => {
319
+ const selfAlias = summary.selfAlias ?? "?";
320
+ const peerAliases = summary.onlineAliases.filter((alias) => alias !== selfAlias).slice(0, 6).map((alias) => `@${alias}`);
321
+ const unavailable = summary.stale + summary.offline;
322
+ const duplicateText = summary.duplicateAliases.length > 0 ? ` liveDuplicates=${summary.duplicateAliases.map((alias) => `@${alias}`).join(",")}` : "";
323
+ return ` - ${summary.active ? "*" : " "} ${summary.roomId}: self=@${selfAlias}; online=${peerAliases.join(",") || "none"}; unavailable=${unavailable} (stale=${summary.stale}, offline=${summary.offline})${duplicateText}`;
324
+ });
325
+ if (summaries.length > 6) roomLines.push(` - +${summaries.length - 6} more room${summaries.length - 6 === 1 ? "" : "s"}`);
326
+ const activeSelfAlias = activeSummary?.selfAlias ?? "?";
327
+ const activePeerAliases = (activeSummary?.onlineAliases ?? []).filter((alias) => alias !== activeSelfAlias).slice(0, 8).map((alias) => `@${alias}`);
328
+ const activeUnavailable = (activeSummary?.stale ?? 0) + (activeSummary?.offline ?? 0);
329
+ const activeDuplicateLine = activeSummary && activeSummary.duplicateAliases.length > 0 ? `\n- duplicate live aliases: ${activeSummary.duplicateAliases.map((alias) => `@${alias}`).join(", ")}` : "";
330
+ return `\n\nZPEER AWARENESS (transient, rebuilt each turn)\n- active room: ${activeSummary?.roomId ?? "default"}\n- memberships: ${memberships}\n- self: @${activeSelfAlias}\n- online peers: ${activePeerAliases.join(", ") || "none"}\n- unavailable peers: ${activeUnavailable} (stale=${activeSummary?.stale ?? 0}, offline=${activeSummary?.offline ?? 0})${activeDuplicateLine}\n- rooms:\n${roomLines.join("\n") || " - none"}\n- Use zpeer_ask with explicit roomId when targeting a non-active room.\n- posture: local_socket-only, room-scoped, hash-only durable ledgers, bodyStored=false, networkEnabled=false\n- For non-trivial review/debug/planning peer coordination, agents may use zpeer_ask with mode=\"async\" so the request is visible, governed, and non-blocking; /zpeer remains the interactive command path.\n- Passive wait rule: if the only remaining action is waiting for ZPeer/coms replies, stop the turn and remain idle; do not poll, call tools, or continue just to wait.\n- Use ZPeer only when useful or user-requested; avoid spam, duplicate asks, and reply loops; do not use it for hidden free chat or to bypass topology/safety gates.\n- Raw ZPeer bodies are transient; durable records must remain hash-only/bodyStored=false.\n- last ZPeer event: ${formatZpeerLastEvent(state.zobLive.lastEvent)}`;
319
331
  }
320
332
 
321
333
  const SAME_AGENT_MODE_INTENT_PROMPT = [
@@ -377,6 +389,7 @@ function handleSameAgentModeIntent(pi: ExtensionAPI, state: HarnessRuntimeState,
377
389
  async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRuntimeState, ctx: ExtensionContext): Promise<void> {
378
390
  const repoRoot = ctx.cwd;
379
391
  const profileId = zpeerRuntimeProfileId(ctx);
392
+ try { pruneExpiredZobLivePeers(repoRoot); } catch { /* best-effort ghost peer cleanup; live runtime must remain available */ }
380
393
  const policy = readZobComsV2Policy(repoRoot);
381
394
  if (policy.mode === "off" || policy.mode === "required_network") {
382
395
  safelyUpdateZobLivePeer(repoRoot, state.zobLive.peerCard ? "touch" : "register");
@@ -407,7 +420,7 @@ async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRunt
407
420
  const server = await bindZobLocalEndpoint(endpoint, async (envelope) => {
408
421
  if (envelope.type === "ping") return buildZobLivePongEnvelope(envelope);
409
422
  if (envelope.type === "response") {
410
- state.zobLive.pendingReplies.complete(envelope.msgId, envelope);
423
+ const completedActiveWait = state.zobLive.pendingReplies.complete(envelope.msgId, envelope);
411
424
  clearPassivePeerWaitForResponse(state, envelope);
412
425
  setZpeerLastEvent(state, {
413
426
  kind: "reply",
@@ -425,7 +438,7 @@ async function startOrRefreshZobLiveRuntime(pi: ExtensionAPI, state: HarnessRunt
425
438
  display: true,
426
439
  details: { kind: "reply", roomId: state.zobLive.lastEvent?.roomId, fromAlias: envelope.sender, toAlias: envelope.receiver, status: "reply", msgId: envelope.msgId, taskHash: envelope.taskHash, outputHash: envelope.outputHash, bodyStored: false, localOnly: true, networkEnabled: false },
427
440
  }, { triggerTurn: false });
428
- if (envelope.transientResponse) {
441
+ if (!completedActiveWait && envelope.transientResponse) {
429
442
  void pi.sendMessage({
430
443
  customType: "zob-zpeer-response",
431
444
  content: `ZPeer async reply received from @${envelope.sender ?? "?"} to @${envelope.receiver ?? "?"}. Continue the prior task using this response; do not poll or wait further only for this reply.\n\n${envelope.transientResponse}`,
@@ -948,7 +961,7 @@ export function registerHarnessEvents(pi: ExtensionAPI, state: HarnessRuntimeSta
948
961
  if (state.activeMode === "vanilla") {
949
962
  return { systemPrompt: `${event.systemPrompt}\n\n${MODE_PROMPTS.vanilla}` };
950
963
  }
951
- const contractHint = `\n\nZOB HARNESS OPERATING CONTRACT\n- Prefer Explore -> Plan -> Implement -> Oracle for non-trivial work.\n- Use the six-part contract for delegated work: TASK / EXPECTED OUTCOME / REQUIRED TOOLS / MUST DO / MUST NOT DO / CONTEXT.\n- Do not claim completion without concrete evidence.\n- If output may truncate, prioritize verdict, blockers, and next steps over exhaustive listings.\n\n${SAME_AGENT_MODE_INTENT_PROMPT}\n\n${ZOB_TOOL_ROUTING_CONTRACT}\n\n${ZOB_COMPACTION_CONTINUITY_CONTRACT}\n\n${MODE_PROMPTS[state.activeMode]}${goalHint}${runtimeGoalHint}${rulesHint}${autonomyHint}${zagentHint}${zpeerHint}`;
964
+ const contractHint = `\n\nZOB HARNESS OPERATING CONTRACT\n- Prefer Explore -> Plan -> Implement -> Oracle for non-trivial work.\n- Use the six-part contract for delegated work: TASK / EXPECTED OUTCOME / REQUIRED TOOLS / MUST DO / MUST NOT DO / CONTEXT.\n- Do not claim completion without concrete evidence.\n- If output may truncate, prioritize verdict, blockers, and next steps over exhaustive listings.\n\n${SAME_AGENT_MODE_INTENT_PROMPT}\n\n${ZOB_TOOL_ROUTING_CONTRACT}\n\n${ZOB_COMPACTION_CONTINUITY_CONTRACT}\n\n${EXTERNAL_PACKAGE_TOOLS_CONTRACT}\n\n${MODE_PROMPTS[state.activeMode]}${goalHint}${runtimeGoalHint}${rulesHint}${autonomyHint}${zagentHint}${zpeerHint}`;
952
965
  return { systemPrompt: `${event.systemPrompt}${contractHint}` };
953
966
  });
954
967
 
@@ -958,6 +971,9 @@ export function registerHarnessEvents(pi: ExtensionAPI, state: HarnessRuntimeSta
958
971
  state.delegations.runs = [];
959
972
  restoreHarnessState(state, ctx);
960
973
  loadActiveZagentFromEnv(state, ctx.cwd);
974
+ if (state.zagent.defaultMode && state.zagent.defaultMode !== state.activeMode) {
975
+ applyMode(pi, state, ctx, state.zagent.defaultMode, false);
976
+ }
961
977
  state.activeRuleResolution = resolveRuleProfile({ repoRoot: ctx.cwd, mode: state.activeMode });
962
978
  await startOrRefreshZobLiveRuntime(pi, state, ctx);
963
979
  applyMode(pi, state, ctx, state.activeMode, false);
@@ -4,12 +4,12 @@ import { StringEnum } from "@earendil-works/pi-ai";
4
4
  import { Text } from "@earendil-works/pi-tui";
5
5
  import { Type } from "typebox";
6
6
 
7
- import { parseGoalState, validateGoalState } from "./goal.js";
7
+ import { parseGoalState, validateGoalState } from "../domains/goal/goal.js";
8
8
  import {
9
9
  importChainRunTodos,
10
10
  importFactoryRunTodos,
11
11
  importOrchestrationRunTodos,
12
- } from "./goal-todo-imports.js";
12
+ } from "../domains/goal/goal-todo-imports.js";
13
13
  import {
14
14
  addGoalTodo,
15
15
  formatGoalTodoSummary,
@@ -28,12 +28,12 @@ import {
28
28
  type GoalTodoStatus,
29
29
  type GoalTodoSummary,
30
30
  type ResolveGoalTodoAction,
31
- } from "./goal-todos.js";
32
- import type { GoalState } from "./types.js";
33
- import type { HarnessRuntimeState } from "./runtime/state.js";
34
- import { sha256 } from "./utils/hashing.js";
35
- import { isRecord } from "./utils/records.js";
36
- import { buildZobCompactionInstructions } from "./runtime/compaction-policy.js";
31
+ } from "../domains/goal/goal-todos.js";
32
+ import type { GoalState } from "../types.js";
33
+ import type { HarnessRuntimeState } from "./state.js";
34
+ import { sha256 } from "../core/utils/hashing.js";
35
+ import { isRecord } from "../core/utils/records.js";
36
+ import { buildZobCompactionInstructions } from "./compaction-policy.js";
37
37
 
38
38
  export const ZOB_RUNTIME_GOAL_ENTRY_TYPE = "zob-runtime-goal";
39
39
  export const ZOB_GOAL_MODE_ENTRY_TYPE = "zob-goal-mode";
@@ -755,7 +755,7 @@ export async function handleGoalCommand(pi: ExtensionAPI, state: HarnessRuntimeS
755
755
  if (text === "todo overlay" || text.startsWith("todo overlay ") || text === "todo view" || text.startsWith("todo view ")) {
756
756
  const parts = text.split(/\s+/);
757
757
  const initialTodoId = parts[2];
758
- const { showGoalTodoOverlay } = await import("./runtime/goal-todo-overlay.js");
758
+ const { showGoalTodoOverlay } = await import("./goal-todo-overlay.js");
759
759
  await showGoalTodoOverlay(ctx, state, initialTodoId);
760
760
  render();
761
761
  return;
@@ -1,7 +1,7 @@
1
1
  import type { ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
2
2
  import { matchesKey, truncateToWidth, visibleWidth, type Component } from "@earendil-works/pi-tui";
3
3
 
4
- import { formatGoalTodoSummary, summarizeGoalTodos, type GoalTodoNode } from "../goal-todos.js";
4
+ import { formatGoalTodoSummary, summarizeGoalTodos, type GoalTodoNode } from "../domains/goal/goal-todos.js";
5
5
  import type { HarnessRuntimeState } from "./state.js";
6
6
 
7
7
  function padToWidth(text: string, width: number): string {
@@ -2,8 +2,8 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
 
4
4
  import type { ModeName } from "../types.js";
5
- import { sha256 } from "../utils/hashing.js";
6
- import { safeFileStem } from "../utils/paths.js";
5
+ import { sha256 } from "../core/utils/hashing.js";
6
+ import { safeFileStem } from "../core/utils/paths.js";
7
7
  import { looksLikeCompletePlanResponse, stripModeIntentMarkup } from "./mode-intent.js";
8
8
 
9
9
  const PLAN_INDEX_SCHEMA = "zob.plan-index.v1";
@@ -1,23 +1,23 @@
1
1
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
  import type { TUI } from "@earendil-works/pi-tui";
3
3
 
4
- import { DEFAULT_RULES, MODE_PROMPTS } from "../constants.js";
4
+ import { DEFAULT_RULES, MODE_PROMPTS } from "../core/constants.js";
5
5
  import type { ChildResult, DamageRules, DelegationFailureKind, GoalState, ModeName, QueueTickResult, RuleResolution } from "../types.js";
6
- import { validateGoalState, validateStrictGoalSpecAnchor, type StrictGoalSpecAnchor } from "../goal.js";
7
- import { DEFAULT_GOAL_ACTIVATION_MODE, restoreGoalActivationModeFromBranch, restoreRuntimeGoalFromBranch, type GoalActivationMode, type RuntimeGoal } from "../goal-runtime.js";
8
- import { createGoalTodoState, restoreGoalTodosFromBranch, type GoalTodoState } from "../goal-todos.js";
9
- import { isRecord } from "../utils/records.js";
10
- import type { ZobLiveEnvelope } from "../coms-v2/envelope.js";
11
- import type { ZobLocalTransportServer } from "../coms-v2/local-transport.js";
12
- import { ZobPendingReplies } from "../coms-v2/pending-replies.js";
13
- import type { ZobLivePeerCard } from "../coms-v2/types.js";
6
+ import { validateGoalState, validateStrictGoalSpecAnchor, type StrictGoalSpecAnchor } from "../domains/goal/goal.js";
7
+ import { DEFAULT_GOAL_ACTIVATION_MODE, restoreGoalActivationModeFromBranch, restoreRuntimeGoalFromBranch, type GoalActivationMode, type RuntimeGoal } from "./goal-runtime.js";
8
+ import { createGoalTodoState, restoreGoalTodosFromBranch, type GoalTodoState } from "../domains/goal/goal-todos.js";
9
+ import { isRecord } from "../core/utils/records.js";
10
+ import type { ZobLiveEnvelope } from "../domains/coms/coms-v2/envelope.js";
11
+ import type { ZobLocalTransportServer } from "../domains/coms/coms-v2/local-transport.js";
12
+ import { ZobPendingReplies } from "../domains/coms/coms-v2/pending-replies.js";
13
+ import type { ZobLivePeerCard } from "../domains/coms/coms-v2/types.js";
14
14
  import { createDelegationMonitorState, trimDelegationRuns, type DelegationMonitorState, type DelegationRunMode, type DelegationRunSource, type DelegationRunStatus, type DelegationRunView } from "./delegation-monitor.js";
15
- import { DEFAULT_DAEMON_RUNTIME_POLICY, type DaemonLoopSnapshot, type DaemonRuntimePolicy, type DaemonRuntimeState, type DaemonTickPlan } from "../daemon-runtime.js";
16
- import { createInteractiveAutonomyRuntimeState, restoreInteractiveAutonomyState, type InteractiveAutonomyRuntimeState } from "../interactive-autonomy.js";
15
+ import { DEFAULT_DAEMON_RUNTIME_POLICY, type DaemonLoopSnapshot, type DaemonRuntimePolicy, type DaemonRuntimeState, type DaemonTickPlan } from "../domains/autonomy/daemon-runtime.js";
16
+ import { createInteractiveAutonomyRuntimeState, restoreInteractiveAutonomyState, type InteractiveAutonomyRuntimeState } from "../domains/autonomy/interactive-autonomy.js";
17
17
  import type { ZobModeIntent } from "./mode-intent.js";
18
- import type { ZAgentRoomBinding } from "../zagents.js";
18
+ import type { ZAgentRoomBinding } from "../domains/coms/zagents.js";
19
19
  import { createZcompactRuntimeState, restoreZcompactStateFromBranch, type ZcompactRuntimeState } from "./auto-compaction.js";
20
- import { createZcommitRuntimeState, recordZcommitOwnedPath, type ZcommitLastCommitRecord, type ZcommitOwnershipSource, type ZcommitRuntimeState, type ZcommitToggleState } from "../git-ops.js";
20
+ import { createZcommitRuntimeState, recordZcommitOwnedPath, type ZcommitLastCommitRecord, type ZcommitOwnershipSource, type ZcommitRuntimeState, type ZcommitToggleState } from "../domains/git/git-ops.js";
21
21
 
22
22
  export interface DelegationMouseRuntimeState {
23
23
  tui?: TUI;
@@ -91,11 +91,13 @@ export interface DaemonHarnessRuntimeState {
91
91
  export interface ZagentRuntimeState {
92
92
  id?: string;
93
93
  team?: string;
94
+ teams?: string[];
94
95
  role?: string;
95
96
  alias?: string;
96
97
  description?: string;
97
98
  rooms: ZAgentRoomBinding[];
98
99
  activeRoom?: string;
100
+ defaultMode?: ModeName;
99
101
  prompt?: string;
100
102
  promptRef?: string;
101
103
  path?: string;