macro-agent 0.1.7 → 0.1.10

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 (259) hide show
  1. package/CLAUDE.md +179 -38
  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 +155 -6
  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/agent/agent-manager-v2.d.ts +21 -0
  14. package/dist/agent/agent-manager-v2.d.ts.map +1 -1
  15. package/dist/agent/agent-manager-v2.js +234 -71
  16. package/dist/agent/agent-manager-v2.js.map +1 -1
  17. package/dist/agent/agent-manager.d.ts +12 -0
  18. package/dist/agent/agent-manager.d.ts.map +1 -1
  19. package/dist/agent/agent-manager.js.map +1 -1
  20. package/dist/agent/types.d.ts +15 -2
  21. package/dist/agent/types.d.ts.map +1 -1
  22. package/dist/agent/types.js.map +1 -1
  23. package/dist/boot-v2.d.ts +41 -0
  24. package/dist/boot-v2.d.ts.map +1 -1
  25. package/dist/boot-v2.js +34 -37
  26. package/dist/boot-v2.js.map +1 -1
  27. package/dist/cli/index.js +56 -0
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -1
  30. package/dist/cognitive/macro-agent-backend.js +40 -22
  31. package/dist/cognitive/macro-agent-backend.js.map +1 -1
  32. package/dist/integrations/skilltree.d.ts.map +1 -1
  33. package/dist/integrations/skilltree.js +1 -0
  34. package/dist/integrations/skilltree.js.map +1 -1
  35. package/dist/lifecycle/cleanup.d.ts +33 -2
  36. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  37. package/dist/lifecycle/cleanup.js +28 -6
  38. package/dist/lifecycle/cleanup.js.map +1 -1
  39. package/dist/lifecycle/handlers-v2.d.ts +7 -0
  40. package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
  41. package/dist/lifecycle/handlers-v2.js +28 -2
  42. package/dist/lifecycle/handlers-v2.js.map +1 -1
  43. package/dist/lifecycle/types.d.ts +11 -0
  44. package/dist/lifecycle/types.d.ts.map +1 -1
  45. package/dist/lifecycle/types.js.map +1 -1
  46. package/dist/map/acp-bridge.d.ts +9 -0
  47. package/dist/map/acp-bridge.d.ts.map +1 -1
  48. package/dist/map/acp-bridge.js +15 -2
  49. package/dist/map/acp-bridge.js.map +1 -1
  50. package/dist/map/cascade-bridge.d.ts +44 -0
  51. package/dist/map/cascade-bridge.d.ts.map +1 -0
  52. package/dist/map/cascade-bridge.js +257 -0
  53. package/dist/map/cascade-bridge.js.map +1 -0
  54. package/dist/map/lifecycle-bridge.d.ts +1 -8
  55. package/dist/map/lifecycle-bridge.d.ts.map +1 -1
  56. package/dist/map/lifecycle-bridge.js +76 -22
  57. package/dist/map/lifecycle-bridge.js.map +1 -1
  58. package/dist/map/server.d.ts.map +1 -1
  59. package/dist/map/server.js +47 -6
  60. package/dist/map/server.js.map +1 -1
  61. package/dist/map/sidecar.d.ts.map +1 -1
  62. package/dist/map/sidecar.js +33 -4
  63. package/dist/map/sidecar.js.map +1 -1
  64. package/dist/map/types.d.ts +20 -0
  65. package/dist/map/types.d.ts.map +1 -1
  66. package/dist/mcp/tools/done-v2.d.ts.map +1 -1
  67. package/dist/mcp/tools/done-v2.js +8 -0
  68. package/dist/mcp/tools/done-v2.js.map +1 -1
  69. package/dist/teams/team-manager-v2.d.ts.map +1 -1
  70. package/dist/teams/team-manager-v2.js +26 -0
  71. package/dist/teams/team-manager-v2.js.map +1 -1
  72. package/dist/teams/team-runtime-v2.d.ts.map +1 -1
  73. package/dist/teams/team-runtime-v2.js +16 -3
  74. package/dist/teams/team-runtime-v2.js.map +1 -1
  75. package/dist/workspace/config.d.ts +10 -10
  76. package/dist/workspace/config.d.ts.map +1 -1
  77. package/dist/workspace/config.js +4 -4
  78. package/dist/workspace/config.js.map +1 -1
  79. package/dist/workspace/git-cascade-adapter.d.ts +510 -0
  80. package/dist/workspace/git-cascade-adapter.d.ts.map +1 -0
  81. package/dist/workspace/git-cascade-adapter.js +908 -0
  82. package/dist/workspace/git-cascade-adapter.js.map +1 -0
  83. package/dist/workspace/index.d.ts +3 -3
  84. package/dist/workspace/index.d.ts.map +1 -1
  85. package/dist/workspace/index.js +4 -4
  86. package/dist/workspace/index.js.map +1 -1
  87. package/dist/workspace/landing/direct-push.d.ts +20 -0
  88. package/dist/workspace/landing/direct-push.d.ts.map +1 -0
  89. package/dist/workspace/landing/direct-push.js +74 -0
  90. package/dist/workspace/landing/direct-push.js.map +1 -0
  91. package/dist/workspace/landing/index.d.ts +29 -0
  92. package/dist/workspace/landing/index.d.ts.map +1 -0
  93. package/dist/workspace/landing/index.js +37 -0
  94. package/dist/workspace/landing/index.js.map +1 -0
  95. package/dist/workspace/landing/merge-to-parent.d.ts +41 -0
  96. package/dist/workspace/landing/merge-to-parent.d.ts.map +1 -0
  97. package/dist/workspace/landing/merge-to-parent.js +185 -0
  98. package/dist/workspace/landing/merge-to-parent.js.map +1 -0
  99. package/dist/workspace/landing/optimistic-push.d.ts +16 -0
  100. package/dist/workspace/landing/optimistic-push.d.ts.map +1 -0
  101. package/dist/workspace/landing/optimistic-push.js +27 -0
  102. package/dist/workspace/landing/optimistic-push.js.map +1 -0
  103. package/dist/workspace/landing/queue-to-branch.d.ts +24 -0
  104. package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -0
  105. package/dist/workspace/landing/queue-to-branch.js +79 -0
  106. package/dist/workspace/landing/queue-to-branch.js.map +1 -0
  107. package/dist/workspace/merge-queue/merge-queue.d.ts +10 -0
  108. package/dist/workspace/merge-queue/merge-queue.d.ts.map +1 -1
  109. package/dist/workspace/merge-queue/merge-queue.js +10 -0
  110. package/dist/workspace/merge-queue/merge-queue.js.map +1 -1
  111. package/dist/workspace/merge-queue/types.d.ts +16 -2
  112. package/dist/workspace/merge-queue/types.d.ts.map +1 -1
  113. package/dist/workspace/merge-queue/types.js +9 -0
  114. package/dist/workspace/merge-queue/types.js.map +1 -1
  115. package/dist/workspace/pool/types.d.ts +1 -0
  116. package/dist/workspace/pool/types.d.ts.map +1 -1
  117. package/dist/workspace/pool/worktree-pool.d.ts.map +1 -1
  118. package/dist/workspace/pool/worktree-pool.js +1 -0
  119. package/dist/workspace/pool/worktree-pool.js.map +1 -1
  120. package/dist/workspace/recovery/abandon.d.ts +15 -0
  121. package/dist/workspace/recovery/abandon.d.ts.map +1 -0
  122. package/dist/workspace/recovery/abandon.js +45 -0
  123. package/dist/workspace/recovery/abandon.js.map +1 -0
  124. package/dist/workspace/recovery/auto-resolve.d.ts +27 -0
  125. package/dist/workspace/recovery/auto-resolve.d.ts.map +1 -0
  126. package/dist/workspace/recovery/auto-resolve.js +99 -0
  127. package/dist/workspace/recovery/auto-resolve.js.map +1 -0
  128. package/dist/workspace/recovery/defer.d.ts +15 -0
  129. package/dist/workspace/recovery/defer.d.ts.map +1 -0
  130. package/dist/workspace/recovery/defer.js +16 -0
  131. package/dist/workspace/recovery/defer.js.map +1 -0
  132. package/dist/workspace/recovery/escalate.d.ts +16 -0
  133. package/dist/workspace/recovery/escalate.d.ts.map +1 -0
  134. package/dist/workspace/recovery/escalate.js +24 -0
  135. package/dist/workspace/recovery/escalate.js.map +1 -0
  136. package/dist/workspace/recovery/index.d.ts +32 -0
  137. package/dist/workspace/recovery/index.d.ts.map +1 -0
  138. package/dist/workspace/recovery/index.js +45 -0
  139. package/dist/workspace/recovery/index.js.map +1 -0
  140. package/dist/workspace/recovery/spawn-resolver.d.ts +45 -0
  141. package/dist/workspace/recovery/spawn-resolver.d.ts.map +1 -0
  142. package/dist/workspace/recovery/spawn-resolver.js +111 -0
  143. package/dist/workspace/recovery/spawn-resolver.js.map +1 -0
  144. package/dist/workspace/recovery/types.d.ts +63 -0
  145. package/dist/workspace/recovery/types.d.ts.map +1 -0
  146. package/dist/workspace/recovery/types.js +12 -0
  147. package/dist/workspace/recovery/types.js.map +1 -0
  148. package/dist/workspace/topology/index.d.ts +9 -0
  149. package/dist/workspace/topology/index.d.ts.map +1 -0
  150. package/dist/workspace/topology/index.js +8 -0
  151. package/dist/workspace/topology/index.js.map +1 -0
  152. package/dist/workspace/topology/no-workspace.d.ts +18 -0
  153. package/dist/workspace/topology/no-workspace.d.ts.map +1 -0
  154. package/dist/workspace/topology/no-workspace.js +25 -0
  155. package/dist/workspace/topology/no-workspace.js.map +1 -0
  156. package/dist/workspace/topology/types.d.ts +97 -0
  157. package/dist/workspace/topology/types.d.ts.map +1 -0
  158. package/dist/workspace/topology/types.js +20 -0
  159. package/dist/workspace/topology/types.js.map +1 -0
  160. package/dist/workspace/topology/yaml-driven.d.ts +69 -0
  161. package/dist/workspace/topology/yaml-driven.d.ts.map +1 -0
  162. package/dist/workspace/topology/yaml-driven.js +273 -0
  163. package/dist/workspace/topology/yaml-driven.js.map +1 -0
  164. package/dist/workspace/types-v3.d.ts +110 -0
  165. package/dist/workspace/types-v3.d.ts.map +1 -0
  166. package/dist/workspace/types-v3.js +20 -0
  167. package/dist/workspace/types-v3.js.map +1 -0
  168. package/dist/workspace/types.d.ts +145 -17
  169. package/dist/workspace/types.d.ts.map +1 -1
  170. package/dist/workspace/workspace-manager.d.ts +92 -13
  171. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  172. package/dist/workspace/workspace-manager.js +373 -13
  173. package/dist/workspace/workspace-manager.js.map +1 -1
  174. package/dist/workspace/yaml-schema.d.ts +254 -0
  175. package/dist/workspace/yaml-schema.d.ts.map +1 -0
  176. package/dist/workspace/yaml-schema.js +170 -0
  177. package/dist/workspace/yaml-schema.js.map +1 -0
  178. package/docs/conflict-recovery.md +472 -0
  179. package/docs/git-cascade-integration-gaps.md +678 -0
  180. package/docs/workspace-interfaces.md +731 -0
  181. package/docs/workspace-redesign-plan.md +302 -0
  182. package/package.json +4 -4
  183. package/src/__tests__/e2e/auto-sync.e2e.test.ts +257 -0
  184. package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +254 -0
  185. package/src/__tests__/e2e/cli-run.e2e.test.ts +167 -0
  186. package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +197 -0
  187. package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +200 -0
  188. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +30 -22
  189. package/src/__tests__/e2e/workspace-v3.e2e.test.ts +413 -0
  190. package/src/acp/__tests__/claude-code-replay.test.ts +225 -0
  191. package/src/acp/__tests__/macro-agent.test.ts +39 -1
  192. package/src/acp/claude-code-replay.ts +208 -0
  193. package/src/acp/macro-agent.ts +167 -9
  194. package/src/acp/types.ts +10 -0
  195. package/src/agent/__tests__/agent-manager-topology.test.ts +73 -0
  196. package/src/agent/__tests__/agent-manager-v2.test.ts +71 -11
  197. package/src/agent/__tests__/task-ref-resolution.test.ts +231 -0
  198. package/src/agent/agent-manager-v2.ts +293 -77
  199. package/src/agent/agent-manager.ts +14 -0
  200. package/src/agent/types.ts +16 -2
  201. package/src/boot-v2.ts +87 -36
  202. package/src/cli/index.ts +61 -0
  203. package/src/cognitive/__tests__/macro-agent-backend.test.ts +47 -5
  204. package/src/cognitive/macro-agent-backend.ts +45 -29
  205. package/src/integrations/skilltree.ts +1 -0
  206. package/src/lifecycle/cleanup.ts +52 -3
  207. package/src/lifecycle/handlers-v2.ts +40 -3
  208. package/src/lifecycle/types.ts +12 -0
  209. package/src/map/__tests__/cascade-bridge.test.ts +229 -0
  210. package/src/map/__tests__/lifecycle-bridge.test.ts +165 -22
  211. package/src/map/acp-bridge.ts +26 -3
  212. package/src/map/cascade-bridge.ts +301 -0
  213. package/src/map/lifecycle-bridge.ts +77 -27
  214. package/src/map/server.ts +47 -6
  215. package/src/map/sidecar.ts +31 -3
  216. package/src/map/types.ts +20 -0
  217. package/src/mcp/tools/done-v2.ts +9 -0
  218. package/src/teams/team-manager-v2.ts +37 -0
  219. package/src/teams/team-runtime-v2.ts +23 -3
  220. package/src/workspace/__tests__/{dataplane-adapter.test.ts → git-cascade-adapter.test.ts} +209 -14
  221. package/src/workspace/__tests__/self-driving-yaml.test.ts +114 -0
  222. package/src/workspace/__tests__/shared-worktree-refcount.test.ts +154 -0
  223. package/src/workspace/__tests__/standalone-mode.test.ts +118 -0
  224. package/src/workspace/__tests__/workspace-manager-v3.test.ts +245 -0
  225. package/src/workspace/__tests__/yaml-schema.test.ts +210 -0
  226. package/src/workspace/config.ts +11 -11
  227. package/src/workspace/git-cascade-adapter.ts +1186 -0
  228. package/src/workspace/index.ts +11 -11
  229. package/src/workspace/landing/__tests__/strategies.test.ts +142 -0
  230. package/src/workspace/landing/direct-push.ts +91 -0
  231. package/src/workspace/landing/index.ts +40 -0
  232. package/src/workspace/landing/merge-to-parent.ts +228 -0
  233. package/src/workspace/landing/optimistic-push.ts +36 -0
  234. package/src/workspace/landing/queue-to-branch.ts +108 -0
  235. package/src/workspace/merge-queue/merge-queue.ts +10 -0
  236. package/src/workspace/merge-queue/types.ts +16 -2
  237. package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +5 -5
  238. package/src/workspace/pool/types.ts +1 -0
  239. package/src/workspace/pool/worktree-pool.ts +1 -0
  240. package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +127 -0
  241. package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +139 -0
  242. package/src/workspace/recovery/__tests__/strategies.test.ts +145 -0
  243. package/src/workspace/recovery/abandon.ts +51 -0
  244. package/src/workspace/recovery/auto-resolve.ts +119 -0
  245. package/src/workspace/recovery/defer.ts +23 -0
  246. package/src/workspace/recovery/escalate.ts +30 -0
  247. package/src/workspace/recovery/index.ts +58 -0
  248. package/src/workspace/recovery/spawn-resolver.ts +145 -0
  249. package/src/workspace/recovery/types.ts +54 -0
  250. package/src/workspace/topology/__tests__/yaml-driven.test.ts +345 -0
  251. package/src/workspace/topology/index.ts +18 -0
  252. package/src/workspace/topology/no-workspace.ts +39 -0
  253. package/src/workspace/topology/types.ts +116 -0
  254. package/src/workspace/topology/yaml-driven.ts +316 -0
  255. package/src/workspace/types-v3.ts +155 -0
  256. package/src/workspace/types.ts +191 -20
  257. package/src/workspace/workspace-manager.ts +474 -19
  258. package/src/workspace/yaml-schema.ts +216 -0
  259. package/src/workspace/dataplane-adapter.ts +0 -546
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `defer` conflict recovery strategy — no-op.
3
+ *
4
+ * Leaves the conflict record in place; stream stays `conflicted`. Something
5
+ * else (human, external process, scheduled recovery) resolves later.
6
+ *
7
+ * @module workspace/recovery/defer
8
+ */
9
+ export class DeferStrategy {
10
+ name = 'defer';
11
+ mode = 'sync';
12
+ async recover(_ctx) {
13
+ return { kind: 'deferred', reason: 'no recovery strategy configured' };
14
+ }
15
+ }
16
+ //# sourceMappingURL=defer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defer.js","sourceRoot":"","sources":["../../../src/workspace/recovery/defer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,OAAO,CAAC;IACf,IAAI,GAAG,MAAe,CAAC;IAEhC,KAAK,CAAC,OAAO,CAAC,IAAqB;QACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACzE,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `escalate` conflict recovery strategy — human-in-the-loop.
3
+ *
4
+ * Pauses the stream and emits an escalation marker. External systems (UI,
5
+ * on-call agent, operator) resolve the conflict manually, then call
6
+ * `resolve_conflict` MCP tool to unblock.
7
+ *
8
+ * @module workspace/recovery/escalate
9
+ */
10
+ import type { ConflictContext, ConflictRecoveryStrategy, ConflictResolution } from './types.js';
11
+ export declare class EscalateStrategy implements ConflictRecoveryStrategy {
12
+ readonly name = "escalate";
13
+ readonly mode: "async";
14
+ recover(ctx: ConflictContext): Promise<ConflictResolution>;
15
+ }
16
+ //# sourceMappingURL=escalate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalate.d.ts","sourceRoot":"","sources":["../../../src/workspace/recovery/escalate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAiB,YAAW,wBAAwB;IAC/D,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAE3B,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CASjE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `escalate` conflict recovery strategy — human-in-the-loop.
3
+ *
4
+ * Pauses the stream and emits an escalation marker. External systems (UI,
5
+ * on-call agent, operator) resolve the conflict manually, then call
6
+ * `resolve_conflict` MCP tool to unblock.
7
+ *
8
+ * @module workspace/recovery/escalate
9
+ */
10
+ export class EscalateStrategy {
11
+ name = 'escalate';
12
+ mode = 'async';
13
+ async recover(ctx) {
14
+ try {
15
+ ctx.workspaceManager.pauseStream(ctx.streamId, 'awaiting human resolution');
16
+ }
17
+ catch {
18
+ // Non-fatal — stream may already be in a paused/conflicted state
19
+ }
20
+ const target = ctx.strategyConfig?.notify ?? 'human';
21
+ return { kind: 'escalated', escalatedTo: target };
22
+ }
23
+ }
24
+ //# sourceMappingURL=escalate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalate.js","sourceRoot":"","sources":["../../../src/workspace/recovery/escalate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,UAAU,CAAC;IAClB,IAAI,GAAG,OAAgB,CAAC;IAEjC,KAAK,CAAC,OAAO,CAAC,GAAoB;QAChC,IAAI,CAAC;YACH,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;QACD,MAAM,MAAM,GAAI,GAAG,CAAC,cAAc,EAAE,MAA6B,IAAI,OAAO,CAAC;QAC7E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAiB,EAAE,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Conflict recovery strategies.
3
+ *
4
+ * Register via `WorkspaceManager.registerConflictRecoveryStrategy` (Phase 7b).
5
+ * Selected via per-role YAML `on_conflict_recovery` or team default.
6
+ *
7
+ * Built-ins:
8
+ * - `defer` — no-op; leave conflict record for external resolution
9
+ * - `abandon` — abandon the conflicted stream
10
+ * - `escalate` — pause stream; notify human
11
+ * - `auto-resolve` — git strategies (ours/theirs/union) — scaffold only
12
+ * - `spawn-resolver` — LLM resolver agent (Phase 7b; requires AgentManager)
13
+ *
14
+ * @module workspace/recovery
15
+ * @see docs/conflict-recovery.md
16
+ */
17
+ export type { ConflictContext, ConflictRecoveryStrategy, ConflictResolution, ConflictResolutionMode, } from './types.js';
18
+ export { DeferStrategy } from './defer.js';
19
+ export { AbandonStrategy } from './abandon.js';
20
+ export { EscalateStrategy } from './escalate.js';
21
+ export { AutoResolveStrategy } from './auto-resolve.js';
22
+ export { SpawnResolverStrategy, createSpawnResolverStrategy, type SpawnResolverStrategyOptions, } from './spawn-resolver.js';
23
+ import type { ConflictRecoveryStrategy } from './types.js';
24
+ /**
25
+ * Build a registry of built-in conflict recovery strategies.
26
+ *
27
+ * Returns a Map keyed by strategy name. Callers plug this into their dispatch
28
+ * layer (Phase 7b). `spawn-resolver` is not included — it requires
29
+ * AgentManager injection and is added by the consumer.
30
+ */
31
+ export declare function buildBuiltinRecoveryRegistry(): Map<string, ConflictRecoveryStrategy>;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workspace/recovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,4BAA4B,GAClC,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAUpF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Conflict recovery strategies.
3
+ *
4
+ * Register via `WorkspaceManager.registerConflictRecoveryStrategy` (Phase 7b).
5
+ * Selected via per-role YAML `on_conflict_recovery` or team default.
6
+ *
7
+ * Built-ins:
8
+ * - `defer` — no-op; leave conflict record for external resolution
9
+ * - `abandon` — abandon the conflicted stream
10
+ * - `escalate` — pause stream; notify human
11
+ * - `auto-resolve` — git strategies (ours/theirs/union) — scaffold only
12
+ * - `spawn-resolver` — LLM resolver agent (Phase 7b; requires AgentManager)
13
+ *
14
+ * @module workspace/recovery
15
+ * @see docs/conflict-recovery.md
16
+ */
17
+ export { DeferStrategy } from './defer.js';
18
+ export { AbandonStrategy } from './abandon.js';
19
+ export { EscalateStrategy } from './escalate.js';
20
+ export { AutoResolveStrategy } from './auto-resolve.js';
21
+ export { SpawnResolverStrategy, createSpawnResolverStrategy, } from './spawn-resolver.js';
22
+ import { DeferStrategy } from './defer.js';
23
+ import { AbandonStrategy } from './abandon.js';
24
+ import { EscalateStrategy } from './escalate.js';
25
+ import { AutoResolveStrategy } from './auto-resolve.js';
26
+ /**
27
+ * Build a registry of built-in conflict recovery strategies.
28
+ *
29
+ * Returns a Map keyed by strategy name. Callers plug this into their dispatch
30
+ * layer (Phase 7b). `spawn-resolver` is not included — it requires
31
+ * AgentManager injection and is added by the consumer.
32
+ */
33
+ export function buildBuiltinRecoveryRegistry() {
34
+ const map = new Map();
35
+ const strategies = [
36
+ new DeferStrategy(),
37
+ new AbandonStrategy(),
38
+ new EscalateStrategy(),
39
+ new AutoResolveStrategy(),
40
+ ];
41
+ for (const s of strategies)
42
+ map.set(s.name, s);
43
+ return map;
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workspace/recovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoC,CAAC;IACxD,MAAM,UAAU,GAA+B;QAC7C,IAAI,aAAa,EAAE;QACnB,IAAI,eAAe,EAAE;QACrB,IAAI,gBAAgB,EAAE;QACtB,IAAI,mBAAmB,EAAE;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `spawn-resolver` conflict recovery strategy.
3
+ *
4
+ * Async strategy that spawns a dedicated resolver agent on the conflicted
5
+ * stream. The resolver reads conflict markers, resolves, commits, and calls
6
+ * the `resolve_conflict` MCP tool — unblocking the original landing.
7
+ *
8
+ * Strategy config:
9
+ * - `role`: string (default 'resolver') — role to spawn
10
+ * - `max_concurrent`: number (default 2) — cap on simultaneous resolvers per stream
11
+ * - `timeout_ms`: number (default 1,800,000 = 30 min) — fallback to escalate
12
+ *
13
+ * Unlike the other built-in strategies, this one requires an `AgentManager`
14
+ * reference at construction time. Callers inject it via the factory. That's
15
+ * why it's not in `buildBuiltinRecoveryRegistry()` — consumers register it
16
+ * explicitly after constructing AgentManager.
17
+ *
18
+ * @module workspace/recovery/spawn-resolver
19
+ * @see docs/conflict-recovery.md §4.3
20
+ */
21
+ import type { AgentManager } from '../../agent/agent-manager.js';
22
+ import type { ConflictContext, ConflictRecoveryStrategy, ConflictResolution } from './types.js';
23
+ export interface SpawnResolverStrategyOptions {
24
+ agentManager: AgentManager;
25
+ /** Default role to spawn if not overridden in strategyConfig. */
26
+ defaultRole?: string;
27
+ /** Default timeout in ms. */
28
+ defaultTimeoutMs?: number;
29
+ /** Default concurrency cap per stream. */
30
+ defaultMaxConcurrent?: number;
31
+ }
32
+ export declare class SpawnResolverStrategy implements ConflictRecoveryStrategy {
33
+ private readonly opts;
34
+ readonly name = "spawn-resolver";
35
+ readonly mode: "async";
36
+ private readonly activeByStream;
37
+ constructor(opts: SpawnResolverStrategyOptions);
38
+ recover(ctx: ConflictContext): Promise<ConflictResolution>;
39
+ private awaitResolution;
40
+ }
41
+ /**
42
+ * Factory for SpawnResolverStrategy — requires AgentManager.
43
+ */
44
+ export declare function createSpawnResolverStrategy(opts: SpawnResolverStrategyOptions): SpawnResolverStrategy;
45
+ //# sourceMappingURL=spawn-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-resolver.d.ts","sourceRoot":"","sources":["../../../src/workspace/recovery/spawn-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,qBAAsB,YAAW,wBAAwB;IAOxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAGjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;gBAEpC,IAAI,EAAE,4BAA4B;IAEzD,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2DhE,OAAO,CAAC,eAAe;CA4BxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,4BAA4B,GACjC,qBAAqB,CAEvB"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * `spawn-resolver` conflict recovery strategy.
3
+ *
4
+ * Async strategy that spawns a dedicated resolver agent on the conflicted
5
+ * stream. The resolver reads conflict markers, resolves, commits, and calls
6
+ * the `resolve_conflict` MCP tool — unblocking the original landing.
7
+ *
8
+ * Strategy config:
9
+ * - `role`: string (default 'resolver') — role to spawn
10
+ * - `max_concurrent`: number (default 2) — cap on simultaneous resolvers per stream
11
+ * - `timeout_ms`: number (default 1,800,000 = 30 min) — fallback to escalate
12
+ *
13
+ * Unlike the other built-in strategies, this one requires an `AgentManager`
14
+ * reference at construction time. Callers inject it via the factory. That's
15
+ * why it's not in `buildBuiltinRecoveryRegistry()` — consumers register it
16
+ * explicitly after constructing AgentManager.
17
+ *
18
+ * @module workspace/recovery/spawn-resolver
19
+ * @see docs/conflict-recovery.md §4.3
20
+ */
21
+ export class SpawnResolverStrategy {
22
+ opts;
23
+ name = 'spawn-resolver';
24
+ mode = 'async';
25
+ // Tracks in-progress resolvers per stream to enforce max_concurrent.
26
+ activeByStream = new Map();
27
+ constructor(opts) {
28
+ this.opts = opts;
29
+ }
30
+ async recover(ctx) {
31
+ const role = ctx.strategyConfig?.role ??
32
+ this.opts.defaultRole ??
33
+ 'resolver';
34
+ const timeoutMs = ctx.strategyConfig?.timeout_ms ??
35
+ this.opts.defaultTimeoutMs ??
36
+ 30 * 60 * 1000;
37
+ const maxConcurrent = ctx.strategyConfig?.max_concurrent ??
38
+ this.opts.defaultMaxConcurrent ??
39
+ 2;
40
+ // Concurrency cap
41
+ const active = this.activeByStream.get(ctx.streamId) ?? new Set();
42
+ if (active.size >= maxConcurrent) {
43
+ return {
44
+ kind: 'retry-after',
45
+ backoffMs: 30_000,
46
+ reason: `max concurrent resolvers (${maxConcurrent}) on stream ${ctx.streamId}`,
47
+ };
48
+ }
49
+ // Spawn the resolver
50
+ let resolverAgentId;
51
+ try {
52
+ const spawnOpts = {
53
+ role,
54
+ task: `Resolve conflict ${ctx.conflictId} on stream ${ctx.streamId}`,
55
+ parent: ctx.landingAgentId,
56
+ capabilities: ['workspace.commit', 'workspace.resolve', 'workspace.read'],
57
+ };
58
+ const spawned = await this.opts.agentManager.spawn(spawnOpts);
59
+ resolverAgentId = spawned.id;
60
+ }
61
+ catch (err) {
62
+ return {
63
+ kind: 'failed',
64
+ error: `spawn-resolver: failed to spawn resolver — ${err instanceof Error ? err.message : String(err)}`,
65
+ };
66
+ }
67
+ active.add(resolverAgentId);
68
+ this.activeByStream.set(ctx.streamId, active);
69
+ // Wait for conflict.resolved event OR timeout. The resolver agent calls
70
+ // `resolve_conflict` MCP tool, which invokes workspaceManager.resolveConflict,
71
+ // which emits 'conflict:resolved' event.
72
+ try {
73
+ const resolution = await this.awaitResolution(ctx, timeoutMs);
74
+ return resolution;
75
+ }
76
+ finally {
77
+ active.delete(resolverAgentId);
78
+ if (active.size === 0)
79
+ this.activeByStream.delete(ctx.streamId);
80
+ }
81
+ }
82
+ awaitResolution(ctx, timeoutMs) {
83
+ return new Promise((resolve) => {
84
+ const unsubscribe = ctx.workspaceManager.onEvent((event) => {
85
+ if (event.type === 'conflict:resolved' &&
86
+ event.data.conflictId === ctx.conflictId) {
87
+ clearTimeout(timer);
88
+ unsubscribe();
89
+ resolve({
90
+ kind: 'resolved',
91
+ resolutionCommit: event.data.resolutionCommit ?? 'unknown',
92
+ });
93
+ }
94
+ });
95
+ const timer = setTimeout(() => {
96
+ unsubscribe();
97
+ resolve({
98
+ kind: 'escalated',
99
+ escalatedTo: 'human',
100
+ });
101
+ }, timeoutMs);
102
+ });
103
+ }
104
+ }
105
+ /**
106
+ * Factory for SpawnResolverStrategy — requires AgentManager.
107
+ */
108
+ export function createSpawnResolverStrategy(opts) {
109
+ return new SpawnResolverStrategy(opts);
110
+ }
111
+ //# sourceMappingURL=spawn-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-resolver.js","sourceRoot":"","sources":["../../../src/workspace/recovery/spawn-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Conflict recovery types.
3
+ *
4
+ * Parallel to LandingStrategy. Dispatched from the agent's done() flow when
5
+ * a landing returns a conflict. Registered globally; selected via per-role
6
+ * YAML `on_conflict_recovery` or team default.
7
+ *
8
+ * @module workspace/recovery/types
9
+ * @see docs/conflict-recovery.md
10
+ */
11
+ import type { AgentId, StreamId, Principal } from '../types-v3.js';
12
+ import type { WorkspaceManager } from '../types.js';
13
+ export interface ConflictContext {
14
+ conflictId: string;
15
+ streamId: StreamId;
16
+ sourceCommit?: string;
17
+ targetCommit?: string;
18
+ targetStreamId?: StreamId;
19
+ paths: string[];
20
+ operation: 'merge' | 'sync' | 'rebase' | 'cascade';
21
+ landingAgentId?: AgentId;
22
+ /**
23
+ * Worktree path where the conflict occurred. Required for
24
+ * `auto-resolve` and any other strategy that needs to replay git
25
+ * operations. Optional because some strategies (`defer`, `abandon`,
26
+ * `escalate`) don't need filesystem access.
27
+ */
28
+ worktree?: string;
29
+ recoveryDepth: number;
30
+ strategyConfig?: Record<string, unknown>;
31
+ workspaceManager: WorkspaceManager;
32
+ }
33
+ export type ConflictResolution = {
34
+ kind: 'resolved';
35
+ resolutionCommit: string;
36
+ } | {
37
+ kind: 'deferred';
38
+ reason: string;
39
+ } | {
40
+ kind: 'abandoned';
41
+ streamId: StreamId;
42
+ reason: string;
43
+ } | {
44
+ kind: 'escalated';
45
+ escalatedTo: Principal | 'human';
46
+ } | {
47
+ kind: 'retry-after';
48
+ backoffMs: number;
49
+ reason: string;
50
+ } | {
51
+ kind: 'failed';
52
+ error: string;
53
+ };
54
+ export type ConflictResolutionMode = 'sync' | 'async';
55
+ export interface ConflictRecoveryStrategy {
56
+ readonly name: string;
57
+ readonly mode: ConflictResolutionMode;
58
+ canHandle?(ctx: ConflictContext): boolean;
59
+ recover(ctx: ConflictContext): Promise<ConflictResolution>;
60
+ initialize?(): Promise<void>;
61
+ close?(): Promise<void>;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workspace/recovery/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAEtC,SAAS,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3D,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Conflict recovery types.
3
+ *
4
+ * Parallel to LandingStrategy. Dispatched from the agent's done() flow when
5
+ * a landing returns a conflict. Registered globally; selected via per-role
6
+ * YAML `on_conflict_recovery` or team default.
7
+ *
8
+ * @module workspace/recovery/types
9
+ * @see docs/conflict-recovery.md
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/workspace/recovery/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Topology policies — compile team YAML into workspace decisions.
3
+ *
4
+ * @module workspace/topology
5
+ */
6
+ export type { TopologyPolicy, TeamStartContext, TeamStartPlan, SpawnContext, WorkspaceDecision, AgentCompleteContext, TeamStopContext, } from './types.js';
7
+ export { YamlDrivenTopology } from './yaml-driven.js';
8
+ export { NoWorkspaceTopology } from './no-workspace.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workspace/topology/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Topology policies — compile team YAML into workspace decisions.
3
+ *
4
+ * @module workspace/topology
5
+ */
6
+ export { YamlDrivenTopology } from './yaml-driven.js';
7
+ export { NoWorkspaceTopology } from './no-workspace.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workspace/topology/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NoWorkspaceTopology — null TopologyPolicy.
3
+ *
4
+ * Returns `share-parent-cwd` for every spawn. Used when no team YAML declares
5
+ * `macro_agent.workspace` — agents run in the spawner's cwd with no git-cascade
6
+ * state. Safe default for teams that don't need isolation.
7
+ *
8
+ * @module workspace/topology/no-workspace
9
+ */
10
+ import type { TopologyPolicy, TeamStartContext, TeamStartPlan, SpawnContext, WorkspaceDecision, AgentCompleteContext, TeamStopContext } from './types.js';
11
+ export declare class NoWorkspaceTopology implements TopologyPolicy {
12
+ readonly name = "no-workspace";
13
+ onTeamStart(_ctx: TeamStartContext): Promise<TeamStartPlan>;
14
+ onAgentSpawn(_ctx: SpawnContext): Promise<WorkspaceDecision>;
15
+ onAgentComplete(_ctx: AgentCompleteContext): Promise<void>;
16
+ onTeamStop(_ctx: TeamStopContext): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=no-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/topology/no-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,IAAI,kBAAkB;IAEzB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI3D,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5D,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAGvD"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * NoWorkspaceTopology — null TopologyPolicy.
3
+ *
4
+ * Returns `share-parent-cwd` for every spawn. Used when no team YAML declares
5
+ * `macro_agent.workspace` — agents run in the spawner's cwd with no git-cascade
6
+ * state. Safe default for teams that don't need isolation.
7
+ *
8
+ * @module workspace/topology/no-workspace
9
+ */
10
+ export class NoWorkspaceTopology {
11
+ name = 'no-workspace';
12
+ async onTeamStart(_ctx) {
13
+ return {};
14
+ }
15
+ async onAgentSpawn(_ctx) {
16
+ return { kind: 'share-parent-cwd' };
17
+ }
18
+ async onAgentComplete(_ctx) {
19
+ // No-op
20
+ }
21
+ async onTeamStop(_ctx) {
22
+ // No-op
23
+ }
24
+ }
25
+ //# sourceMappingURL=no-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-workspace.js","sourceRoot":"","sources":["../../../src/workspace/topology/no-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,cAAc,CAAC;IAE/B,KAAK,CAAC,WAAW,CAAC,IAAsB;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAkB;QACnC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAA0B;QAC9C,QAAQ;IACV,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAqB;QACpC,QAAQ;IACV,CAAC;CACF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * TopologyPolicy — compiles team YAML into per-spawn workspace decisions.
3
+ *
4
+ * A topology policy sits between AgentManagerV2 and WorkspaceManager. It
5
+ * translates declarative team configuration (role shape, stream lineage,
6
+ * landing strategy) into imperative `WorkspaceDecision`s that AgentManager
7
+ * executes via the WorkspaceManager v3 surface.
8
+ *
9
+ * Three built-in policies:
10
+ * - `YamlDrivenTopology` — primary; compiles TeamWorkspaceConfig (default)
11
+ * - `NoWorkspaceTopology` — null policy; returns `none` for every agent
12
+ * - `CognitiveCoreTopology` — programmatic policy for cognitive-core style
13
+ * callers that bypass YAML (deferred; stub for now)
14
+ *
15
+ * @module workspace/topology/types
16
+ * @see docs/workspace-interfaces.md §7
17
+ * @see docs/workspace-redesign-plan.md Phase 3
18
+ */
19
+ import type { AgentId, StreamId, StreamSpec } from '../types-v3.js';
20
+ import type { WorkspaceManager } from '../types.js';
21
+ import type { TeamWorkspaceConfig, RoleWorkspaceConfig } from '../yaml-schema.js';
22
+ export interface TeamStartContext {
23
+ teamName: string;
24
+ teamInstanceId: string;
25
+ workspaceConfig: TeamWorkspaceConfig | null;
26
+ workspaceManager: WorkspaceManager;
27
+ }
28
+ export interface TeamStartPlan {
29
+ teamStreamId?: StreamId;
30
+ additionalStreams?: StreamId[];
31
+ }
32
+ export interface SpawnContext {
33
+ agentId: AgentId;
34
+ role: string;
35
+ parentAgentId?: AgentId;
36
+ parentStreamId?: StreamId;
37
+ teamStreamId?: StreamId;
38
+ workspaceManager: WorkspaceManager;
39
+ /** Look up a live agent ID by role (for workspace: share_with_agent). */
40
+ getAgentByRole?: (role: string) => AgentId | null;
41
+ }
42
+ export interface AgentCompleteContext {
43
+ agentId: AgentId;
44
+ role: string;
45
+ reason: 'completed' | 'failed' | 'cascade' | 'interrupted';
46
+ streamId?: StreamId;
47
+ workspaceManager: WorkspaceManager;
48
+ }
49
+ export interface TeamStopContext {
50
+ teamName: string;
51
+ teamInstanceId: string;
52
+ teamStreamId?: StreamId;
53
+ workspaceManager: WorkspaceManager;
54
+ }
55
+ /**
56
+ * Declarative description of what workspace the spawning agent should get.
57
+ * AgentManagerV2 executes this via WorkspaceManager calls.
58
+ */
59
+ export type WorkspaceDecision = {
60
+ kind: 'none';
61
+ } | {
62
+ kind: 'share-parent-cwd';
63
+ } | {
64
+ kind: 'share-with-agent';
65
+ agentId: AgentId;
66
+ } | {
67
+ kind: 'attach-to-stream';
68
+ streamId: StreamId;
69
+ allocateWorktree: boolean;
70
+ } | {
71
+ kind: 'new-stream';
72
+ streamSpec: StreamSpec;
73
+ allocateWorktree: boolean;
74
+ };
75
+ export interface TopologyPolicy {
76
+ readonly name: string;
77
+ onTeamStart(ctx: TeamStartContext): Promise<TeamStartPlan>;
78
+ onAgentSpawn(ctx: SpawnContext): Promise<WorkspaceDecision>;
79
+ onAgentComplete(ctx: AgentCompleteContext): Promise<void>;
80
+ onTeamStop(ctx: TeamStopContext): Promise<void>;
81
+ /**
82
+ * Optional: subscribed when the topology cares about parent-stream updates.
83
+ * Used by roles with `on_parent_advanced: sync_with_parent`.
84
+ */
85
+ onParentStreamAdvanced?(ctx: {
86
+ parentStreamId: StreamId;
87
+ affectedAgents: AgentId[];
88
+ workspaceManager: WorkspaceManager;
89
+ }): Promise<void>;
90
+ /**
91
+ * Look up the per-role config if this policy is YAML-driven. Other code
92
+ * (e.g., the conflict recovery dispatcher) consults this to find
93
+ * `on_conflict_recovery` overrides at dispatch time.
94
+ */
95
+ getRoleConfig?(role: string): RoleWorkspaceConfig | null;
96
+ }
97
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workspace/topology/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAa,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAC3D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAMD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,GAC3E;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAMN,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3D,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5D,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;OAGG;IACH,sBAAsB,CAAC,CAAC,GAAG,EAAE;QAC3B,cAAc,EAAE,QAAQ,CAAC;QACzB,cAAc,EAAE,OAAO,EAAE,CAAC;QAC1B,gBAAgB,EAAE,gBAAgB,CAAC;KACpC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;;;OAIG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;CAC1D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TopologyPolicy — compiles team YAML into per-spawn workspace decisions.
3
+ *
4
+ * A topology policy sits between AgentManagerV2 and WorkspaceManager. It
5
+ * translates declarative team configuration (role shape, stream lineage,
6
+ * landing strategy) into imperative `WorkspaceDecision`s that AgentManager
7
+ * executes via the WorkspaceManager v3 surface.
8
+ *
9
+ * Three built-in policies:
10
+ * - `YamlDrivenTopology` — primary; compiles TeamWorkspaceConfig (default)
11
+ * - `NoWorkspaceTopology` — null policy; returns `none` for every agent
12
+ * - `CognitiveCoreTopology` — programmatic policy for cognitive-core style
13
+ * callers that bypass YAML (deferred; stub for now)
14
+ *
15
+ * @module workspace/topology/types
16
+ * @see docs/workspace-interfaces.md §7
17
+ * @see docs/workspace-redesign-plan.md Phase 3
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/workspace/topology/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}