macro-agent 0.1.8 → 0.1.11

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 (306) hide show
  1. package/CLAUDE.md +263 -33
  2. package/README.md +781 -131
  3. package/dist/acp/claude-code-replay.d.ts +11 -0
  4. package/dist/acp/claude-code-replay.d.ts.map +1 -0
  5. package/dist/acp/claude-code-replay.js +190 -0
  6. package/dist/acp/claude-code-replay.js.map +1 -0
  7. package/dist/acp/macro-agent.d.ts.map +1 -1
  8. package/dist/acp/macro-agent.js +192 -7
  9. package/dist/acp/macro-agent.js.map +1 -1
  10. package/dist/acp/types.d.ts +9 -0
  11. package/dist/acp/types.d.ts.map +1 -1
  12. package/dist/acp/types.js.map +1 -1
  13. package/dist/adapters/tasks-adapter.d.ts.map +1 -1
  14. package/dist/adapters/tasks-adapter.js +3 -0
  15. package/dist/adapters/tasks-adapter.js.map +1 -1
  16. package/dist/adapters/types.d.ts +1 -0
  17. package/dist/adapters/types.d.ts.map +1 -1
  18. package/dist/agent/agent-manager-v2.d.ts +21 -0
  19. package/dist/agent/agent-manager-v2.d.ts.map +1 -1
  20. package/dist/agent/agent-manager-v2.js +308 -54
  21. package/dist/agent/agent-manager-v2.js.map +1 -1
  22. package/dist/agent/agent-manager.d.ts +12 -0
  23. package/dist/agent/agent-manager.d.ts.map +1 -1
  24. package/dist/agent/agent-manager.js.map +1 -1
  25. package/dist/agent/agent-store.d.ts +10 -0
  26. package/dist/agent/agent-store.d.ts.map +1 -1
  27. package/dist/agent/agent-store.js +22 -0
  28. package/dist/agent/agent-store.js.map +1 -1
  29. package/dist/agent/types.d.ts +15 -2
  30. package/dist/agent/types.d.ts.map +1 -1
  31. package/dist/agent/types.js.map +1 -1
  32. package/dist/boot-v2.d.ts +129 -1
  33. package/dist/boot-v2.d.ts.map +1 -1
  34. package/dist/boot-v2.js +359 -8
  35. package/dist/boot-v2.js.map +1 -1
  36. package/dist/cli/acp.js +4 -0
  37. package/dist/cli/acp.js.map +1 -1
  38. package/dist/cli/index.js +56 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -1
  41. package/dist/cognitive/macro-agent-backend.js +40 -22
  42. package/dist/cognitive/macro-agent-backend.js.map +1 -1
  43. package/dist/integrations/skilltree.d.ts.map +1 -1
  44. package/dist/integrations/skilltree.js +1 -0
  45. package/dist/integrations/skilltree.js.map +1 -1
  46. package/dist/lifecycle/cascade.d.ts +25 -2
  47. package/dist/lifecycle/cascade.d.ts.map +1 -1
  48. package/dist/lifecycle/cascade.js +70 -2
  49. package/dist/lifecycle/cascade.js.map +1 -1
  50. package/dist/lifecycle/cleanup.d.ts +33 -2
  51. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  52. package/dist/lifecycle/cleanup.js +28 -6
  53. package/dist/lifecycle/cleanup.js.map +1 -1
  54. package/dist/lifecycle/handlers-v2.d.ts +7 -0
  55. package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
  56. package/dist/lifecycle/handlers-v2.js +28 -2
  57. package/dist/lifecycle/handlers-v2.js.map +1 -1
  58. package/dist/lifecycle/types.d.ts +11 -0
  59. package/dist/lifecycle/types.d.ts.map +1 -1
  60. package/dist/lifecycle/types.js.map +1 -1
  61. package/dist/map/acp-bridge.d.ts +9 -0
  62. package/dist/map/acp-bridge.d.ts.map +1 -1
  63. package/dist/map/acp-bridge.js +15 -2
  64. package/dist/map/acp-bridge.js.map +1 -1
  65. package/dist/map/cascade-action-handler.d.ts +24 -0
  66. package/dist/map/cascade-action-handler.d.ts.map +1 -0
  67. package/dist/map/cascade-action-handler.js +170 -0
  68. package/dist/map/cascade-action-handler.js.map +1 -0
  69. package/dist/map/cascade-bridge.d.ts +44 -0
  70. package/dist/map/cascade-bridge.d.ts.map +1 -0
  71. package/dist/map/cascade-bridge.js +294 -0
  72. package/dist/map/cascade-bridge.js.map +1 -0
  73. package/dist/map/coordination-handler.d.ts.map +1 -1
  74. package/dist/map/coordination-handler.js +12 -1
  75. package/dist/map/coordination-handler.js.map +1 -1
  76. package/dist/map/lifecycle-bridge.d.ts +1 -1
  77. package/dist/map/lifecycle-bridge.d.ts.map +1 -1
  78. package/dist/map/lifecycle-bridge.js +58 -23
  79. package/dist/map/lifecycle-bridge.js.map +1 -1
  80. package/dist/map/server.d.ts.map +1 -1
  81. package/dist/map/server.js +219 -7
  82. package/dist/map/server.js.map +1 -1
  83. package/dist/map/sidecar.d.ts.map +1 -1
  84. package/dist/map/sidecar.js +49 -2
  85. package/dist/map/sidecar.js.map +1 -1
  86. package/dist/map/types.d.ts +22 -0
  87. package/dist/map/types.d.ts.map +1 -1
  88. package/dist/mcp/tools/done-v2.d.ts.map +1 -1
  89. package/dist/mcp/tools/done-v2.js +8 -0
  90. package/dist/mcp/tools/done-v2.js.map +1 -1
  91. package/dist/teams/team-manager-v2.d.ts.map +1 -1
  92. package/dist/teams/team-manager-v2.js +26 -0
  93. package/dist/teams/team-manager-v2.js.map +1 -1
  94. package/dist/teams/team-runtime-v2.d.ts.map +1 -1
  95. package/dist/teams/team-runtime-v2.js +16 -3
  96. package/dist/teams/team-runtime-v2.js.map +1 -1
  97. package/dist/workspace/config.d.ts +10 -10
  98. package/dist/workspace/config.d.ts.map +1 -1
  99. package/dist/workspace/config.js +4 -4
  100. package/dist/workspace/config.js.map +1 -1
  101. package/dist/workspace/git-cascade-adapter.d.ts +510 -0
  102. package/dist/workspace/git-cascade-adapter.d.ts.map +1 -0
  103. package/dist/workspace/git-cascade-adapter.js +934 -0
  104. package/dist/workspace/git-cascade-adapter.js.map +1 -0
  105. package/dist/workspace/index.d.ts +3 -3
  106. package/dist/workspace/index.d.ts.map +1 -1
  107. package/dist/workspace/index.js +4 -4
  108. package/dist/workspace/index.js.map +1 -1
  109. package/dist/workspace/landing/direct-push.d.ts +20 -0
  110. package/dist/workspace/landing/direct-push.d.ts.map +1 -0
  111. package/dist/workspace/landing/direct-push.js +74 -0
  112. package/dist/workspace/landing/direct-push.js.map +1 -0
  113. package/dist/workspace/landing/index.d.ts +29 -0
  114. package/dist/workspace/landing/index.d.ts.map +1 -0
  115. package/dist/workspace/landing/index.js +37 -0
  116. package/dist/workspace/landing/index.js.map +1 -0
  117. package/dist/workspace/landing/merge-to-parent.d.ts +41 -0
  118. package/dist/workspace/landing/merge-to-parent.d.ts.map +1 -0
  119. package/dist/workspace/landing/merge-to-parent.js +186 -0
  120. package/dist/workspace/landing/merge-to-parent.js.map +1 -0
  121. package/dist/workspace/landing/optimistic-push.d.ts +16 -0
  122. package/dist/workspace/landing/optimistic-push.d.ts.map +1 -0
  123. package/dist/workspace/landing/optimistic-push.js +27 -0
  124. package/dist/workspace/landing/optimistic-push.js.map +1 -0
  125. package/dist/workspace/landing/queue-to-branch.d.ts +24 -0
  126. package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -0
  127. package/dist/workspace/landing/queue-to-branch.js +79 -0
  128. package/dist/workspace/landing/queue-to-branch.js.map +1 -0
  129. package/dist/workspace/merge-queue/merge-queue.d.ts +10 -0
  130. package/dist/workspace/merge-queue/merge-queue.d.ts.map +1 -1
  131. package/dist/workspace/merge-queue/merge-queue.js +10 -0
  132. package/dist/workspace/merge-queue/merge-queue.js.map +1 -1
  133. package/dist/workspace/merge-queue/types.d.ts +16 -2
  134. package/dist/workspace/merge-queue/types.d.ts.map +1 -1
  135. package/dist/workspace/merge-queue/types.js +9 -0
  136. package/dist/workspace/merge-queue/types.js.map +1 -1
  137. package/dist/workspace/pool/types.d.ts +1 -0
  138. package/dist/workspace/pool/types.d.ts.map +1 -1
  139. package/dist/workspace/pool/worktree-pool.d.ts.map +1 -1
  140. package/dist/workspace/pool/worktree-pool.js +1 -0
  141. package/dist/workspace/pool/worktree-pool.js.map +1 -1
  142. package/dist/workspace/recovery/abandon.d.ts +15 -0
  143. package/dist/workspace/recovery/abandon.d.ts.map +1 -0
  144. package/dist/workspace/recovery/abandon.js +45 -0
  145. package/dist/workspace/recovery/abandon.js.map +1 -0
  146. package/dist/workspace/recovery/auto-resolve.d.ts +27 -0
  147. package/dist/workspace/recovery/auto-resolve.d.ts.map +1 -0
  148. package/dist/workspace/recovery/auto-resolve.js +99 -0
  149. package/dist/workspace/recovery/auto-resolve.js.map +1 -0
  150. package/dist/workspace/recovery/defer.d.ts +15 -0
  151. package/dist/workspace/recovery/defer.d.ts.map +1 -0
  152. package/dist/workspace/recovery/defer.js +16 -0
  153. package/dist/workspace/recovery/defer.js.map +1 -0
  154. package/dist/workspace/recovery/escalate.d.ts +16 -0
  155. package/dist/workspace/recovery/escalate.d.ts.map +1 -0
  156. package/dist/workspace/recovery/escalate.js +24 -0
  157. package/dist/workspace/recovery/escalate.js.map +1 -0
  158. package/dist/workspace/recovery/index.d.ts +32 -0
  159. package/dist/workspace/recovery/index.d.ts.map +1 -0
  160. package/dist/workspace/recovery/index.js +45 -0
  161. package/dist/workspace/recovery/index.js.map +1 -0
  162. package/dist/workspace/recovery/spawn-resolver.d.ts +45 -0
  163. package/dist/workspace/recovery/spawn-resolver.d.ts.map +1 -0
  164. package/dist/workspace/recovery/spawn-resolver.js +118 -0
  165. package/dist/workspace/recovery/spawn-resolver.js.map +1 -0
  166. package/dist/workspace/recovery/types.d.ts +63 -0
  167. package/dist/workspace/recovery/types.d.ts.map +1 -0
  168. package/dist/workspace/recovery/types.js +12 -0
  169. package/dist/workspace/recovery/types.js.map +1 -0
  170. package/dist/workspace/topology/index.d.ts +9 -0
  171. package/dist/workspace/topology/index.d.ts.map +1 -0
  172. package/dist/workspace/topology/index.js +8 -0
  173. package/dist/workspace/topology/index.js.map +1 -0
  174. package/dist/workspace/topology/no-workspace.d.ts +18 -0
  175. package/dist/workspace/topology/no-workspace.d.ts.map +1 -0
  176. package/dist/workspace/topology/no-workspace.js +25 -0
  177. package/dist/workspace/topology/no-workspace.js.map +1 -0
  178. package/dist/workspace/topology/types.d.ts +97 -0
  179. package/dist/workspace/topology/types.d.ts.map +1 -0
  180. package/dist/workspace/topology/types.js +20 -0
  181. package/dist/workspace/topology/types.js.map +1 -0
  182. package/dist/workspace/topology/yaml-driven.d.ts +69 -0
  183. package/dist/workspace/topology/yaml-driven.d.ts.map +1 -0
  184. package/dist/workspace/topology/yaml-driven.js +273 -0
  185. package/dist/workspace/topology/yaml-driven.js.map +1 -0
  186. package/dist/workspace/types-v3.d.ts +117 -0
  187. package/dist/workspace/types-v3.d.ts.map +1 -0
  188. package/dist/workspace/types-v3.js +20 -0
  189. package/dist/workspace/types-v3.js.map +1 -0
  190. package/dist/workspace/types.d.ts +162 -17
  191. package/dist/workspace/types.d.ts.map +1 -1
  192. package/dist/workspace/workspace-manager.d.ts +101 -13
  193. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  194. package/dist/workspace/workspace-manager.js +416 -13
  195. package/dist/workspace/workspace-manager.js.map +1 -1
  196. package/dist/workspace/yaml-schema.d.ts +254 -0
  197. package/dist/workspace/yaml-schema.d.ts.map +1 -0
  198. package/dist/workspace/yaml-schema.js +170 -0
  199. package/dist/workspace/yaml-schema.js.map +1 -0
  200. package/docs/conflict-recovery.md +472 -0
  201. package/docs/design/task-dispatcher.md +880 -0
  202. package/docs/git-cascade-integration-gaps.md +678 -0
  203. package/docs/workspace-interfaces.md +731 -0
  204. package/docs/workspace-redesign-plan.md +302 -0
  205. package/package.json +6 -5
  206. package/src/__tests__/boot-v2.test.ts +435 -0
  207. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +92 -0
  208. package/src/__tests__/e2e/auto-sync.e2e.test.ts +257 -0
  209. package/src/__tests__/e2e/bootstrap.e2e.test.ts +319 -0
  210. package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +254 -0
  211. package/src/__tests__/e2e/cli-run.e2e.test.ts +167 -0
  212. package/src/__tests__/e2e/dispatch-coordination.e2e.test.ts +495 -0
  213. package/src/__tests__/e2e/dispatch-live.e2e.test.ts +564 -0
  214. package/src/__tests__/e2e/dispatch-opentasks.e2e.test.ts +496 -0
  215. package/src/__tests__/e2e/dispatch-phase2-live.e2e.test.ts +456 -0
  216. package/src/__tests__/e2e/dispatch-phase2.e2e.test.ts +386 -0
  217. package/src/__tests__/e2e/dispatch.e2e.test.ts +376 -0
  218. package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +197 -0
  219. package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +200 -0
  220. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +30 -22
  221. package/src/__tests__/e2e/workspace-v3.e2e.test.ts +413 -0
  222. package/src/acp/__tests__/claude-code-replay.test.ts +225 -0
  223. package/src/acp/__tests__/macro-agent.test.ts +39 -1
  224. package/src/acp/claude-code-replay.ts +208 -0
  225. package/src/acp/macro-agent.ts +203 -10
  226. package/src/acp/types.ts +10 -0
  227. package/src/adapters/__tests__/tasks-adapter.test.ts +1 -0
  228. package/src/adapters/tasks-adapter.ts +3 -0
  229. package/src/adapters/types.ts +1 -0
  230. package/src/agent/__tests__/agent-manager-topology.test.ts +73 -0
  231. package/src/agent/__tests__/agent-manager-v2.test.ts +66 -0
  232. package/src/agent/__tests__/agent-store.test.ts +52 -0
  233. package/src/agent/__tests__/task-ref-resolution.test.ts +231 -0
  234. package/src/agent/agent-manager-v2.ts +372 -59
  235. package/src/agent/agent-manager.ts +14 -0
  236. package/src/agent/agent-store.ts +24 -0
  237. package/src/agent/types.ts +16 -2
  238. package/src/boot-v2.ts +589 -35
  239. package/src/cli/acp.ts +4 -0
  240. package/src/cli/index.ts +61 -0
  241. package/src/cognitive/macro-agent-backend.ts +45 -29
  242. package/src/integrations/skilltree.ts +1 -0
  243. package/src/lifecycle/__tests__/cascade-consolidation.test.ts +240 -0
  244. package/src/lifecycle/cascade.ts +77 -2
  245. package/src/lifecycle/cleanup.ts +52 -3
  246. package/src/lifecycle/handlers-v2.ts +40 -3
  247. package/src/lifecycle/types.ts +12 -0
  248. package/src/map/__tests__/cascade-bridge.test.ts +229 -0
  249. package/src/map/__tests__/emit-event.test.ts +71 -0
  250. package/src/map/__tests__/lifecycle-bridge.test.ts +86 -10
  251. package/src/map/acp-bridge.ts +26 -3
  252. package/src/map/cascade-action-handler.ts +205 -0
  253. package/src/map/cascade-bridge.ts +339 -0
  254. package/src/map/coordination-handler.ts +13 -1
  255. package/src/map/lifecycle-bridge.ts +52 -17
  256. package/src/map/server.ts +225 -7
  257. package/src/map/sidecar.ts +48 -1
  258. package/src/map/types.ts +23 -0
  259. package/src/mcp/tools/done-v2.ts +9 -0
  260. package/src/teams/team-manager-v2.ts +37 -0
  261. package/src/teams/team-runtime-v2.ts +23 -3
  262. package/src/workspace/__tests__/{dataplane-adapter.test.ts → git-cascade-adapter.test.ts} +209 -14
  263. package/src/workspace/__tests__/land-dispatch.test.ts +214 -0
  264. package/src/workspace/__tests__/self-driving-yaml.test.ts +114 -0
  265. package/src/workspace/__tests__/shared-worktree-refcount.test.ts +154 -0
  266. package/src/workspace/__tests__/standalone-mode.test.ts +118 -0
  267. package/src/workspace/__tests__/workspace-manager-v3.test.ts +245 -0
  268. package/src/workspace/__tests__/yaml-schema.test.ts +210 -0
  269. package/src/workspace/config.ts +11 -11
  270. package/src/workspace/git-cascade-adapter.ts +1213 -0
  271. package/src/workspace/index.ts +11 -11
  272. package/src/workspace/landing/__tests__/strategies.test.ts +184 -0
  273. package/src/workspace/landing/direct-push.ts +91 -0
  274. package/src/workspace/landing/index.ts +40 -0
  275. package/src/workspace/landing/merge-to-parent.ts +229 -0
  276. package/src/workspace/landing/optimistic-push.ts +36 -0
  277. package/src/workspace/landing/queue-to-branch.ts +108 -0
  278. package/src/workspace/merge-queue/merge-queue.ts +10 -0
  279. package/src/workspace/merge-queue/types.ts +16 -2
  280. package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +5 -5
  281. package/src/workspace/pool/types.ts +1 -0
  282. package/src/workspace/pool/worktree-pool.ts +1 -0
  283. package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +127 -0
  284. package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +139 -0
  285. package/src/workspace/recovery/__tests__/strategies.test.ts +145 -0
  286. package/src/workspace/recovery/abandon.ts +51 -0
  287. package/src/workspace/recovery/auto-resolve.ts +119 -0
  288. package/src/workspace/recovery/defer.ts +23 -0
  289. package/src/workspace/recovery/escalate.ts +30 -0
  290. package/src/workspace/recovery/index.ts +58 -0
  291. package/src/workspace/recovery/spawn-resolver.ts +152 -0
  292. package/src/workspace/recovery/types.ts +54 -0
  293. package/src/workspace/topology/__tests__/yaml-driven.test.ts +345 -0
  294. package/src/workspace/topology/index.ts +18 -0
  295. package/src/workspace/topology/no-workspace.ts +39 -0
  296. package/src/workspace/topology/types.ts +116 -0
  297. package/src/workspace/topology/yaml-driven.ts +316 -0
  298. package/src/workspace/types-v3.ts +162 -0
  299. package/src/workspace/types.ts +211 -20
  300. package/src/workspace/workspace-manager.ts +533 -19
  301. package/src/workspace/yaml-schema.ts +216 -0
  302. package/dist/workspace/dataplane-adapter.d.ts +0 -260
  303. package/dist/workspace/dataplane-adapter.d.ts.map +0 -1
  304. package/dist/workspace/dataplane-adapter.js +0 -416
  305. package/dist/workspace/dataplane-adapter.js.map +0 -1
  306. package/src/workspace/dataplane-adapter.ts +0 -546
@@ -0,0 +1,216 @@
1
+ /**
2
+ * YAML Zod schema for `macro_agent.workspace`.
3
+ *
4
+ * Teams declare workspace topology via `macro_agent.workspace` in their
5
+ * `team.yaml`. This module validates that section and exposes typed config
6
+ * objects that the TopologyPolicy compiler (Phase 3) consumes.
7
+ *
8
+ * @module workspace/yaml-schema
9
+ * @see docs/workspace-interfaces.md §8
10
+ * @see docs/workspace-redesign-plan.md Phase 2
11
+ */
12
+
13
+ import { z } from 'zod';
14
+
15
+ // ─────────────────────────────────────────────────────────────────────────────
16
+ // Enums
17
+ // ─────────────────────────────────────────────────────────────────────────────
18
+
19
+ export const StreamLineageSchema = z.enum([
20
+ 'from_team_root', // attach to the team's root stream (no new stream)
21
+ 'fork_from_team_root', // fork a new stream off the team root
22
+ 'fork_from_parent', // fork a new stream off the spawner's stream
23
+ 'independent', // fork a new stream off a branch (no parent stream)
24
+ 'track_existing_branch', // track an existing branch (no new stream/<id>)
25
+ ]);
26
+
27
+ export const LandingStrategyNameSchema = z.enum([
28
+ 'merge_to_parent_stream',
29
+ 'queue_to_branch',
30
+ 'cherry_pick_stack',
31
+ 'direct_push',
32
+ 'optimistic_push',
33
+ 'none',
34
+ ]);
35
+
36
+ export const ConflictStrategyNameSchema = z.enum([
37
+ 'abort',
38
+ 'ours',
39
+ 'theirs',
40
+ 'defer',
41
+ 'agent',
42
+ ]);
43
+
44
+ /**
45
+ * Recovery strategies for landing conflicts.
46
+ * See docs/conflict-recovery.md §4.
47
+ */
48
+ export const ConflictRecoveryStrategyNameSchema = z.enum([
49
+ 'auto-resolve',
50
+ 'defer',
51
+ 'spawn-resolver',
52
+ 'abandon',
53
+ 'escalate',
54
+ ]);
55
+
56
+ export const WorkspaceKindSchema = z.enum([
57
+ 'new_stream', // agent gets its own stream
58
+ 'attach_to_team_root', // agent works on team root stream
59
+ 'share_with_agent', // agent shares another agent's worktree (ref-counted)
60
+ 'share_parent_cwd', // agent inherits spawner's cwd (no isolation)
61
+ 'none', // no workspace; agent has no streaming concerns
62
+ ]);
63
+
64
+ export const AllocationSchema = z.enum([
65
+ 'new_worktree',
66
+ 'inherit_parent_cwd',
67
+ 'pooled_worktree',
68
+ ]);
69
+
70
+ export const OnParentAdvancedSchema = z.enum([
71
+ 'sync_with_parent',
72
+ 'none',
73
+ ]);
74
+
75
+ export const OnTeamCompleteSchema = z.enum([
76
+ 'keep',
77
+ 'merge_to_main',
78
+ 'abandon',
79
+ ]);
80
+
81
+ // ─────────────────────────────────────────────────────────────────────────────
82
+ // Schemas
83
+ // ─────────────────────────────────────────────────────────────────────────────
84
+
85
+ export const RoleWorkspaceConfigSchema = z.object({
86
+ workspace: WorkspaceKindSchema,
87
+ stream_lineage: StreamLineageSchema.optional(),
88
+ allocation: AllocationSchema.optional(),
89
+
90
+ // Landing
91
+ landing: LandingStrategyNameSchema.optional(),
92
+ landing_config: z.record(z.string(), z.unknown()).optional(),
93
+
94
+ // Conflict handling at landing time
95
+ on_conflict: ConflictStrategyNameSchema.optional(),
96
+ on_conflict_recovery: ConflictRecoveryStrategyNameSchema.optional(),
97
+ conflict_recovery_config: z.record(z.string(), z.unknown()).optional(),
98
+
99
+ // Cascade behavior
100
+ cascade_on_parent_update: z.boolean().optional(),
101
+ on_parent_advanced: OnParentAdvancedSchema.optional(),
102
+
103
+ // Cross-role references
104
+ share_with: z.string().optional(), // role name (for workspace: share_with_agent)
105
+ track_branch: z.string().optional(), // branch name (for stream_lineage: track_existing_branch)
106
+
107
+ // Capabilities granted to this role for MCP tool gating
108
+ capabilities: z.array(z.string()).optional(),
109
+ }).superRefine((val, ctx) => {
110
+ if (val.workspace === 'share_with_agent' && !val.share_with) {
111
+ ctx.addIssue({
112
+ code: 'custom',
113
+ path: ['share_with'],
114
+ message: 'share_with is required when workspace = share_with_agent',
115
+ });
116
+ }
117
+ if (val.stream_lineage === 'track_existing_branch' && !val.track_branch) {
118
+ ctx.addIssue({
119
+ code: 'custom',
120
+ path: ['track_branch'],
121
+ message: 'track_branch is required when stream_lineage = track_existing_branch',
122
+ });
123
+ }
124
+ if (val.workspace === 'new_stream' && !val.stream_lineage) {
125
+ ctx.addIssue({
126
+ code: 'custom',
127
+ path: ['stream_lineage'],
128
+ message: 'stream_lineage is required when workspace = new_stream',
129
+ });
130
+ }
131
+ });
132
+
133
+ export const PoolConfigSchema = z.object({
134
+ enabled: z.boolean().default(true),
135
+ max_size: z.number().int().positive().default(10),
136
+ reuse_across_streams: z.boolean().default(false),
137
+ });
138
+
139
+ export const DefaultStreamConfigSchema = z.object({
140
+ fork_from: z.string().default('main'),
141
+ name_template: z.string().default('{team}'),
142
+ change_id_tracking: z.boolean().default(true),
143
+ });
144
+
145
+ export const ConflictRecoveryTeamConfigSchema = z.object({
146
+ default_strategy: ConflictRecoveryStrategyNameSchema.default('defer'),
147
+ default_config: z.record(z.string(), z.unknown()).optional(),
148
+ escalation_target: z.string().optional(),
149
+ max_recovery_depth: z.number().int().positive().default(3),
150
+ });
151
+
152
+ export const TeamWorkspaceConfigSchema = z.object({
153
+ default_stream: DefaultStreamConfigSchema.optional(),
154
+ on_team_complete: OnTeamCompleteSchema.default('keep'),
155
+ pool: PoolConfigSchema.optional(),
156
+ roles: z.record(z.string(), RoleWorkspaceConfigSchema),
157
+ conflict_recovery: ConflictRecoveryTeamConfigSchema.optional(),
158
+ });
159
+
160
+ // ─────────────────────────────────────────────────────────────────────────────
161
+ // Types (inferred)
162
+ // ─────────────────────────────────────────────────────────────────────────────
163
+
164
+ export type StreamLineage = z.infer<typeof StreamLineageSchema>;
165
+ export type LandingStrategyName = z.infer<typeof LandingStrategyNameSchema>;
166
+ export type ConflictStrategyName = z.infer<typeof ConflictStrategyNameSchema>;
167
+ export type ConflictRecoveryStrategyName = z.infer<typeof ConflictRecoveryStrategyNameSchema>;
168
+ export type WorkspaceKind = z.infer<typeof WorkspaceKindSchema>;
169
+ export type Allocation = z.infer<typeof AllocationSchema>;
170
+ export type OnParentAdvanced = z.infer<typeof OnParentAdvancedSchema>;
171
+ export type OnTeamComplete = z.infer<typeof OnTeamCompleteSchema>;
172
+ export type RoleWorkspaceConfig = z.infer<typeof RoleWorkspaceConfigSchema>;
173
+ export type PoolConfig = z.infer<typeof PoolConfigSchema>;
174
+ export type DefaultStreamConfig = z.infer<typeof DefaultStreamConfigSchema>;
175
+ export type ConflictRecoveryTeamConfig = z.infer<typeof ConflictRecoveryTeamConfigSchema>;
176
+ export type TeamWorkspaceConfig = z.infer<typeof TeamWorkspaceConfigSchema>;
177
+
178
+ // ─────────────────────────────────────────────────────────────────────────────
179
+ // Parsing helpers
180
+ // ─────────────────────────────────────────────────────────────────────────────
181
+
182
+ /**
183
+ * Parse and validate a `macro_agent.workspace` block from a team manifest.
184
+ *
185
+ * Returns `null` when the block is absent (indicating no workspace isolation
186
+ * is configured for the team). Throws on validation failure with a helpful
187
+ * error message.
188
+ */
189
+ export function parseTeamWorkspaceConfig(
190
+ raw: unknown
191
+ ): TeamWorkspaceConfig | null {
192
+ if (raw === undefined || raw === null) return null;
193
+ const result = TeamWorkspaceConfigSchema.safeParse(raw);
194
+ if (!result.success) {
195
+ const issues = result.error.issues
196
+ .map((i) => ` • ${i.path.join('.')}: ${i.message}`)
197
+ .join('\n');
198
+ throw new Error(
199
+ `Invalid macro_agent.workspace configuration:\n${issues}`
200
+ );
201
+ }
202
+ return result.data;
203
+ }
204
+
205
+ /**
206
+ * Extract the workspace block from a loaded openteams `TeamManifest`.
207
+ *
208
+ * openteams treats `macro_agent` as `Record<string, unknown>` — macro-agent
209
+ * owns the schema inside.
210
+ */
211
+ export function extractWorkspaceConfig(
212
+ manifest: { macro_agent?: Record<string, unknown> }
213
+ ): TeamWorkspaceConfig | null {
214
+ const workspaceRaw = manifest.macro_agent?.workspace;
215
+ return parseTeamWorkspaceConfig(workspaceRaw);
216
+ }
@@ -1,260 +0,0 @@
1
- /**
2
- * Dataplane Adapter
3
- *
4
- * Wraps MultiAgentRepoTracker to integrate with macro-agent's event system
5
- * and provide a simplified interface for workspace management.
6
- *
7
- * @module workspace/dataplane-adapter
8
- * @implements [[s-7ktd]] Dataplane Integration section
9
- */
10
- import Database from 'better-sqlite3';
11
- import { MultiAgentRepoTracker, type Stream, type StreamStatus, type CreateStreamOptions, type AgentWorktree, type CreateWorktreeOptions, type WorkerTask, type CreateTaskOptions, type StartTaskOptions, type CompleteTaskOptions, type StartTaskResult, type CompleteTaskResult, type ListTasksOptions, type CleanupWorkerBranchesOptions, type CleanupResult, type Checkpoint } from 'git-cascade';
12
- import type { DataplaneConfig } from './config.js';
13
- /**
14
- * Event types emitted by DataplaneAdapter
15
- */
16
- export type DataplaneEventType = 'stream:created' | 'stream:updated' | 'stream:abandoned' | 'worktree:created' | 'worktree:deallocated' | 'task:created' | 'task:started' | 'task:completed' | 'task:abandoned';
17
- /**
18
- * Event payload for dataplane events
19
- */
20
- export interface DataplaneEvent {
21
- type: DataplaneEventType;
22
- timestamp: number;
23
- data: Record<string, unknown>;
24
- }
25
- /**
26
- * Callback for dataplane events
27
- */
28
- export type DataplaneEventCallback = (event: DataplaneEvent) => void;
29
- /**
30
- * DataplaneAdapter wraps MultiAgentRepoTracker for macro-agent integration.
31
- *
32
- * Key responsibilities:
33
- * - Initialize dataplane with shared or dedicated database
34
- * - Emit events on dataplane operations
35
- * - Provide simplified API for workspace management
36
- */
37
- export declare class DataplaneAdapter {
38
- private readonly tracker;
39
- private readonly config;
40
- private readonly eventListeners;
41
- private readonly ownsDb;
42
- /**
43
- * Create a new DataplaneAdapter.
44
- *
45
- * @param config - Dataplane configuration
46
- */
47
- constructor(config: DataplaneConfig);
48
- /**
49
- * Get whether dataplane is enabled.
50
- */
51
- get enabled(): boolean;
52
- /**
53
- * Get the repository path.
54
- */
55
- get repoPath(): string;
56
- /**
57
- * Get the underlying database connection.
58
- * Use with caution - prefer adapter methods for operations.
59
- */
60
- get db(): Database.Database;
61
- /**
62
- * Get the underlying tracker.
63
- * Use with caution - prefer adapter methods for operations.
64
- */
65
- get rawTracker(): MultiAgentRepoTracker;
66
- /**
67
- * Subscribe to dataplane events.
68
- *
69
- * @param callback - Function called when events occur
70
- * @returns Unsubscribe function
71
- */
72
- onEvent(callback: DataplaneEventCallback): () => void;
73
- /**
74
- * Emit an event to all listeners.
75
- */
76
- private emit;
77
- /**
78
- * Create a new stream (integration branch).
79
- *
80
- * @param options - Stream creation options
81
- * @returns Stream ID
82
- */
83
- createStream(options: CreateStreamOptions): string;
84
- /**
85
- * Get a stream by ID.
86
- */
87
- getStream(streamId: string): Stream | null;
88
- /**
89
- * List streams with optional filters.
90
- */
91
- listStreams(options?: {
92
- agentId?: string;
93
- status?: StreamStatus;
94
- }): Stream[];
95
- /**
96
- * Update a stream.
97
- */
98
- updateStream(streamId: string, updates: Partial<Pick<Stream, 'name' | 'status' | 'metadata'>>): void;
99
- /**
100
- * Abandon a stream.
101
- */
102
- abandonStream(streamId: string, options?: {
103
- reason?: string;
104
- cascade?: boolean;
105
- }): void;
106
- /**
107
- * Get the git branch name for a stream.
108
- */
109
- getStreamBranchName(streamId: string): string;
110
- /**
111
- * Get the HEAD commit of a stream.
112
- */
113
- getStreamHead(streamId: string): string;
114
- /**
115
- * Create a worktree for an agent.
116
- *
117
- * @param options - Worktree creation options
118
- * @returns Created worktree info
119
- */
120
- createWorktree(options: CreateWorktreeOptions): AgentWorktree;
121
- /**
122
- * Get a worktree by agent ID.
123
- */
124
- getWorktree(agentId: string): AgentWorktree | null;
125
- /**
126
- * List all worktrees.
127
- */
128
- listWorktrees(): AgentWorktree[];
129
- /**
130
- * Update the stream associated with a worktree.
131
- */
132
- updateWorktreeStream(agentId: string, streamId: string | null): void;
133
- /**
134
- * Deallocate a worktree.
135
- */
136
- deallocateWorktree(agentId: string): void;
137
- /**
138
- * Create a worker task under a stream.
139
- *
140
- * @param options - Task creation options
141
- * @returns Task ID
142
- */
143
- createTask(options: CreateTaskOptions): string;
144
- /**
145
- * Get a task by ID.
146
- */
147
- getTask(taskId: string): WorkerTask | null;
148
- /**
149
- * List tasks for a stream.
150
- */
151
- listTasks(streamId: string, options?: ListTasksOptions): WorkerTask[];
152
- /**
153
- * Start a task - assigns agent and creates worker branch.
154
- *
155
- * @param options - Start task options
156
- * @returns Branch name and start commit
157
- */
158
- startTask(options: StartTaskOptions): StartTaskResult;
159
- /**
160
- * Complete a task - merges worker branch to stream.
161
- *
162
- * @param options - Complete task options
163
- * @returns Merge result
164
- */
165
- completeTask(options: CompleteTaskOptions): CompleteTaskResult;
166
- /**
167
- * Abandon a task.
168
- *
169
- * @param taskId - Task ID
170
- * @param options - Options
171
- */
172
- abandonTask(taskId: string, options?: {
173
- deleteBranch?: boolean;
174
- }): void;
175
- /**
176
- * Release a task back to 'open' status.
177
- */
178
- releaseTask(taskId: string): void;
179
- /**
180
- * Detect conflicts for a task before completing.
181
- *
182
- * @param taskId - Task ID
183
- * @param worktree - Worktree path
184
- * @returns Array of conflicting file paths, empty if no conflicts
185
- */
186
- detectTaskConflicts(taskId: string, worktree: string): string[];
187
- /**
188
- * Recover stale tasks that have been in_progress too long.
189
- *
190
- * @param thresholdMs - Tasks older than this are considered stale
191
- * @returns Result with released task IDs
192
- */
193
- recoverStaleTasks(thresholdMs?: number): {
194
- released: string[];
195
- };
196
- /**
197
- * Create checkpoints for commits made during a task.
198
- *
199
- * Creates a checkpoint for each commit between the task's startCommit and
200
- * the current HEAD of the task's stream. This captures the work done during
201
- * the task for future review and merge workflows.
202
- *
203
- * @param taskId - Task ID to create checkpoints for
204
- * @param agentId - Agent ID (used as createdBy)
205
- * @returns Array of created checkpoints
206
- */
207
- createCheckpointsForTask(taskId: string, agentId: string): Checkpoint[];
208
- /**
209
- * Commit changes in a worktree with Change tracking.
210
- *
211
- * @param options - Commit options
212
- * @returns Commit hash and change ID
213
- */
214
- commitChanges(options: {
215
- streamId: string;
216
- agentId: string;
217
- worktree: string;
218
- message: string;
219
- }): {
220
- commit: string;
221
- changeId: string;
222
- };
223
- /**
224
- * Clean up old worker branches.
225
- *
226
- * Deletes branches for:
227
- * - Completed tasks older than threshold (default 24h)
228
- * - Abandoned tasks
229
- * - Orphaned branches (no task record)
230
- *
231
- * @param options - Cleanup options
232
- * @returns Deleted branches and any errors
233
- */
234
- cleanupWorkerBranches(options?: CleanupWorkerBranchesOptions): CleanupResult;
235
- /**
236
- * Delete a specific worker branch.
237
- *
238
- * @param branchName - Branch name to delete
239
- * @returns true if deleted, false if branch didn't exist
240
- */
241
- deleteWorkerBranch(branchName: string): boolean;
242
- /**
243
- * Check system health.
244
- */
245
- healthCheck(): ReturnType<MultiAgentRepoTracker['healthCheck']>;
246
- /**
247
- * Close the adapter and release resources.
248
- *
249
- * Only closes the database if we created it (not if using shared DB).
250
- */
251
- close(): void;
252
- }
253
- /**
254
- * Create a DataplaneAdapter instance.
255
- *
256
- * @param config - Configuration options
257
- * @returns DataplaneAdapter instance
258
- */
259
- export declare function createDataplaneAdapter(config: DataplaneConfig): DataplaneAdapter;
260
- //# sourceMappingURL=dataplane-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataplane-adapter.d.ts","sourceRoot":"","sources":["../../src/workspace/dataplane-adapter.ts"],"names":[],"mappings":"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"}