@guyghost/swarm-dao-core 0.4.0 → 0.6.0

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 (276) hide show
  1. package/dist/adapters/attention/fs-attention.store.d.ts +17 -0
  2. package/dist/adapters/attention/fs-attention.store.d.ts.map +1 -0
  3. package/dist/adapters/attention/fs-attention.store.js +59 -0
  4. package/dist/adapters/attention/fs-attention.store.js.map +1 -0
  5. package/dist/adapters/git-workspace.d.ts +26 -0
  6. package/dist/adapters/git-workspace.d.ts.map +1 -0
  7. package/dist/adapters/git-workspace.js +84 -0
  8. package/dist/adapters/git-workspace.js.map +1 -0
  9. package/dist/adapters/index.d.ts +7 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +7 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/persistence/file-dao-state.repository.d.ts +15 -0
  14. package/dist/adapters/persistence/file-dao-state.repository.d.ts.map +1 -0
  15. package/dist/adapters/persistence/file-dao-state.repository.js +85 -0
  16. package/dist/adapters/persistence/file-dao-state.repository.js.map +1 -0
  17. package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts +10 -0
  18. package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts.map +1 -0
  19. package/dist/adapters/persistence/in-memory-dao-state.repository.js +14 -0
  20. package/dist/adapters/persistence/in-memory-dao-state.repository.js.map +1 -0
  21. package/dist/adapters/persistence/legacy-dao-state.repository.d.ts +11 -0
  22. package/dist/adapters/persistence/legacy-dao-state.repository.d.ts.map +1 -0
  23. package/dist/adapters/persistence/legacy-dao-state.repository.js +14 -0
  24. package/dist/adapters/persistence/legacy-dao-state.repository.js.map +1 -0
  25. package/dist/adapters/ship-audit/fs-ship-audit.store.d.ts +12 -0
  26. package/dist/adapters/ship-audit/fs-ship-audit.store.d.ts.map +1 -0
  27. package/dist/adapters/ship-audit/fs-ship-audit.store.js +69 -0
  28. package/dist/adapters/ship-audit/fs-ship-audit.store.js.map +1 -0
  29. package/dist/application/index.d.ts +16 -0
  30. package/dist/application/index.d.ts.map +1 -0
  31. package/dist/application/index.js +16 -0
  32. package/dist/application/index.js.map +1 -0
  33. package/dist/application/initialize-dao.use-case.d.ts +20 -0
  34. package/dist/application/initialize-dao.use-case.d.ts.map +1 -0
  35. package/dist/application/initialize-dao.use-case.js +17 -0
  36. package/dist/application/initialize-dao.use-case.js.map +1 -0
  37. package/dist/application/proposals/control-proposal.use-case.d.ts +23 -0
  38. package/dist/application/proposals/control-proposal.use-case.d.ts.map +1 -0
  39. package/dist/application/proposals/control-proposal.use-case.js +53 -0
  40. package/dist/application/proposals/control-proposal.use-case.js.map +1 -0
  41. package/dist/application/proposals/create-amendment-proposal.use-case.d.ts +25 -0
  42. package/dist/application/proposals/create-amendment-proposal.use-case.d.ts.map +1 -0
  43. package/dist/application/proposals/create-amendment-proposal.use-case.js +39 -0
  44. package/dist/application/proposals/create-amendment-proposal.use-case.js.map +1 -0
  45. package/dist/application/proposals/create-proposal.use-case.d.ts +34 -0
  46. package/dist/application/proposals/create-proposal.use-case.d.ts.map +1 -0
  47. package/dist/application/proposals/create-proposal.use-case.js +49 -0
  48. package/dist/application/proposals/create-proposal.use-case.js.map +1 -0
  49. package/dist/application/proposals/deliberate-proposal.use-case.d.ts +35 -0
  50. package/dist/application/proposals/deliberate-proposal.use-case.d.ts.map +1 -0
  51. package/dist/application/proposals/deliberate-proposal.use-case.js +67 -0
  52. package/dist/application/proposals/deliberate-proposal.use-case.js.map +1 -0
  53. package/dist/application/proposals/dry-run-proposal.use-case.d.ts +21 -0
  54. package/dist/application/proposals/dry-run-proposal.use-case.d.ts.map +1 -0
  55. package/dist/application/proposals/dry-run-proposal.use-case.js +20 -0
  56. package/dist/application/proposals/dry-run-proposal.use-case.js.map +1 -0
  57. package/dist/application/proposals/execute-proposal.use-case.d.ts +29 -0
  58. package/dist/application/proposals/execute-proposal.use-case.d.ts.map +1 -0
  59. package/dist/application/proposals/execute-proposal.use-case.js +66 -0
  60. package/dist/application/proposals/execute-proposal.use-case.js.map +1 -0
  61. package/dist/application/proposals/rate-proposal.use-case.d.ts +24 -0
  62. package/dist/application/proposals/rate-proposal.use-case.d.ts.map +1 -0
  63. package/dist/application/proposals/rate-proposal.use-case.js +33 -0
  64. package/dist/application/proposals/rate-proposal.use-case.js.map +1 -0
  65. package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts +21 -0
  66. package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts.map +1 -0
  67. package/dist/application/proposals/record-deliberation-outputs.use-case.js +65 -0
  68. package/dist/application/proposals/record-deliberation-outputs.use-case.js.map +1 -0
  69. package/dist/application/proposals/rollback-proposal.use-case.d.ts +20 -0
  70. package/dist/application/proposals/rollback-proposal.use-case.d.ts.map +1 -0
  71. package/dist/application/proposals/rollback-proposal.use-case.js +17 -0
  72. package/dist/application/proposals/rollback-proposal.use-case.js.map +1 -0
  73. package/dist/application/proposals/round-table.use-case.d.ts +27 -0
  74. package/dist/application/proposals/round-table.use-case.d.ts.map +1 -0
  75. package/dist/application/proposals/round-table.use-case.js +55 -0
  76. package/dist/application/proposals/round-table.use-case.js.map +1 -0
  77. package/dist/application/proposals/ship-proposal.use-case.d.ts +26 -0
  78. package/dist/application/proposals/ship-proposal.use-case.d.ts.map +1 -0
  79. package/dist/application/proposals/ship-proposal.use-case.js +60 -0
  80. package/dist/application/proposals/ship-proposal.use-case.js.map +1 -0
  81. package/dist/application/proposals/start-deliberation.use-case.d.ts +21 -0
  82. package/dist/application/proposals/start-deliberation.use-case.d.ts.map +1 -0
  83. package/dist/application/proposals/start-deliberation.use-case.js +30 -0
  84. package/dist/application/proposals/start-deliberation.use-case.js.map +1 -0
  85. package/dist/application/proposals/transition-proposal.use-case.d.ts +20 -0
  86. package/dist/application/proposals/transition-proposal.use-case.d.ts.map +1 -0
  87. package/dist/application/proposals/transition-proposal.use-case.js +19 -0
  88. package/dist/application/proposals/transition-proposal.use-case.js.map +1 -0
  89. package/dist/application/proposals/update-proposal.use-case.d.ts +26 -0
  90. package/dist/application/proposals/update-proposal.use-case.d.ts.map +1 -0
  91. package/dist/application/proposals/update-proposal.use-case.js +19 -0
  92. package/dist/application/proposals/update-proposal.use-case.js.map +1 -0
  93. package/dist/commands/registry.d.ts.map +1 -1
  94. package/dist/commands/registry.js +18 -3
  95. package/dist/commands/registry.js.map +1 -1
  96. package/dist/config.d.ts +23 -0
  97. package/dist/config.d.ts.map +1 -1
  98. package/dist/config.js +9 -1
  99. package/dist/config.js.map +1 -1
  100. package/dist/control/gates.d.ts +4 -1
  101. package/dist/control/gates.d.ts.map +1 -1
  102. package/dist/control/gates.js +5 -10
  103. package/dist/control/gates.js.map +1 -1
  104. package/dist/delivery/dry-run.d.ts.map +1 -1
  105. package/dist/delivery/dry-run.js +3 -44
  106. package/dist/delivery/dry-run.js.map +1 -1
  107. package/dist/delivery/execution-isolation.d.ts +34 -0
  108. package/dist/delivery/execution-isolation.d.ts.map +1 -0
  109. package/dist/delivery/execution-isolation.js +97 -0
  110. package/dist/delivery/execution-isolation.js.map +1 -0
  111. package/dist/delivery/index.d.ts +2 -0
  112. package/dist/delivery/index.d.ts.map +1 -1
  113. package/dist/delivery/index.js +2 -0
  114. package/dist/delivery/index.js.map +1 -1
  115. package/dist/delivery/plans.d.ts +3 -1
  116. package/dist/delivery/plans.d.ts.map +1 -1
  117. package/dist/delivery/plans.js +2 -2
  118. package/dist/delivery/plans.js.map +1 -1
  119. package/dist/delivery/ship-audit.d.ts +36 -0
  120. package/dist/delivery/ship-audit.d.ts.map +1 -0
  121. package/dist/delivery/ship-audit.js +155 -0
  122. package/dist/delivery/ship-audit.js.map +1 -0
  123. package/dist/domain/dry-run.d.ts +3 -0
  124. package/dist/domain/dry-run.d.ts.map +1 -0
  125. package/dist/domain/dry-run.js +28 -0
  126. package/dist/domain/dry-run.js.map +1 -0
  127. package/dist/domain/index.d.ts +6 -0
  128. package/dist/domain/index.d.ts.map +1 -0
  129. package/dist/domain/index.js +7 -0
  130. package/dist/domain/index.js.map +1 -0
  131. package/dist/governance/agents.d.ts.map +1 -1
  132. package/dist/governance/agents.js +107 -169
  133. package/dist/governance/agents.js.map +1 -1
  134. package/dist/governance/charter.d.ts +14 -0
  135. package/dist/governance/charter.d.ts.map +1 -0
  136. package/dist/governance/charter.js +65 -0
  137. package/dist/governance/charter.js.map +1 -0
  138. package/dist/governance/edit-gate.d.ts +47 -0
  139. package/dist/governance/edit-gate.d.ts.map +1 -0
  140. package/dist/governance/edit-gate.js +156 -0
  141. package/dist/governance/edit-gate.js.map +1 -0
  142. package/dist/governance/index.d.ts +1 -0
  143. package/dist/governance/index.d.ts.map +1 -1
  144. package/dist/governance/index.js +1 -0
  145. package/dist/governance/index.js.map +1 -1
  146. package/dist/governance/proposal.machine.d.ts +2 -114
  147. package/dist/governance/proposal.machine.d.ts.map +1 -1
  148. package/dist/governance/proposal.machine.js +2 -180
  149. package/dist/governance/proposal.machine.js.map +1 -1
  150. package/dist/governance/proposal.utils.d.ts +5 -2
  151. package/dist/governance/proposal.utils.d.ts.map +1 -1
  152. package/dist/governance/proposal.utils.js +7 -4
  153. package/dist/governance/proposal.utils.js.map +1 -1
  154. package/dist/governance/voting.d.ts.map +1 -1
  155. package/dist/governance/voting.js +24 -14
  156. package/dist/governance/voting.js.map +1 -1
  157. package/dist/host-tools/github-config.d.ts.map +1 -1
  158. package/dist/host-tools/github-config.js +17 -5
  159. package/dist/host-tools/github-config.js.map +1 -1
  160. package/dist/host-tools/handlers.d.ts +14 -11
  161. package/dist/host-tools/handlers.d.ts.map +1 -1
  162. package/dist/host-tools/handlers.js +247 -341
  163. package/dist/host-tools/handlers.js.map +1 -1
  164. package/dist/index.d.ts +5 -0
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +10 -0
  167. package/dist/index.js.map +1 -1
  168. package/dist/integrations/github.d.ts.map +1 -1
  169. package/dist/integrations/github.js +5 -2
  170. package/dist/integrations/github.js.map +1 -1
  171. package/dist/intelligence/delegation.d.ts +3 -2
  172. package/dist/intelligence/delegation.d.ts.map +1 -1
  173. package/dist/intelligence/delegation.js.map +1 -1
  174. package/dist/intelligence/index.d.ts +1 -0
  175. package/dist/intelligence/index.d.ts.map +1 -1
  176. package/dist/intelligence/index.js +1 -0
  177. package/dist/intelligence/index.js.map +1 -1
  178. package/dist/intelligence/roundtable.d.ts +4 -2
  179. package/dist/intelligence/roundtable.d.ts.map +1 -1
  180. package/dist/intelligence/roundtable.js +2 -2
  181. package/dist/intelligence/roundtable.js.map +1 -1
  182. package/dist/intelligence/sequential.d.ts +36 -0
  183. package/dist/intelligence/sequential.d.ts.map +1 -0
  184. package/dist/intelligence/sequential.js +91 -0
  185. package/dist/intelligence/sequential.js.map +1 -0
  186. package/dist/intelligence/swarm.d.ts +8 -4
  187. package/dist/intelligence/swarm.d.ts.map +1 -1
  188. package/dist/intelligence/swarm.js +10 -3
  189. package/dist/intelligence/swarm.js.map +1 -1
  190. package/dist/intelligence/synthesis.d.ts.map +1 -1
  191. package/dist/intelligence/synthesis.js +16 -4
  192. package/dist/intelligence/synthesis.js.map +1 -1
  193. package/dist/models/graph-engineering.machine.d.ts +219 -0
  194. package/dist/models/graph-engineering.machine.d.ts.map +1 -0
  195. package/dist/models/graph-engineering.machine.js +214 -0
  196. package/dist/models/graph-engineering.machine.js.map +1 -0
  197. package/dist/models/improvement-loop.machine.d.ts +239 -0
  198. package/dist/models/improvement-loop.machine.d.ts.map +1 -0
  199. package/dist/models/improvement-loop.machine.js +254 -0
  200. package/dist/models/improvement-loop.machine.js.map +1 -0
  201. package/dist/models/index.d.ts +6 -0
  202. package/dist/models/index.d.ts.map +1 -0
  203. package/dist/models/index.js +6 -0
  204. package/dist/models/index.js.map +1 -0
  205. package/dist/models/product-loop.machine.d.ts +531 -0
  206. package/dist/models/product-loop.machine.d.ts.map +1 -0
  207. package/dist/models/product-loop.machine.js +699 -0
  208. package/dist/models/product-loop.machine.js.map +1 -0
  209. package/dist/models/proposal.machine.d.ts +82 -0
  210. package/dist/models/proposal.machine.d.ts.map +1 -0
  211. package/dist/models/proposal.machine.js +68 -0
  212. package/dist/models/proposal.machine.js.map +1 -0
  213. package/dist/models/ship-audit.machine.d.ts +103 -0
  214. package/dist/models/ship-audit.machine.d.ts.map +1 -0
  215. package/dist/models/ship-audit.machine.js +113 -0
  216. package/dist/models/ship-audit.machine.js.map +1 -0
  217. package/dist/observability/attention.d.ts +40 -0
  218. package/dist/observability/attention.d.ts.map +1 -0
  219. package/dist/observability/attention.js +119 -0
  220. package/dist/observability/attention.js.map +1 -0
  221. package/dist/observability/index.d.ts +1 -0
  222. package/dist/observability/index.d.ts.map +1 -1
  223. package/dist/observability/index.js +1 -0
  224. package/dist/observability/index.js.map +1 -1
  225. package/dist/observability/logging.d.ts +6 -0
  226. package/dist/observability/logging.d.ts.map +1 -1
  227. package/dist/observability/logging.js +36 -6
  228. package/dist/observability/logging.js.map +1 -1
  229. package/dist/observability/metrics.d.ts +7 -0
  230. package/dist/observability/metrics.d.ts.map +1 -1
  231. package/dist/observability/metrics.js +179 -43
  232. package/dist/observability/metrics.js.map +1 -1
  233. package/dist/persistence.d.ts +3 -0
  234. package/dist/persistence.d.ts.map +1 -1
  235. package/dist/persistence.js +88 -17
  236. package/dist/persistence.js.map +1 -1
  237. package/dist/ports/clock.d.ts +7 -0
  238. package/dist/ports/clock.d.ts.map +1 -0
  239. package/dist/ports/clock.js +5 -0
  240. package/dist/ports/clock.js.map +1 -0
  241. package/dist/ports/host.d.ts +8 -0
  242. package/dist/ports/host.d.ts.map +1 -0
  243. package/dist/ports/host.js +2 -0
  244. package/dist/ports/host.js.map +1 -0
  245. package/dist/ports/index.d.ts +6 -0
  246. package/dist/ports/index.d.ts.map +1 -0
  247. package/dist/ports/index.js +6 -0
  248. package/dist/ports/index.js.map +1 -0
  249. package/dist/ports/repository.d.ts +7 -0
  250. package/dist/ports/repository.d.ts.map +1 -0
  251. package/dist/ports/repository.js +2 -0
  252. package/dist/ports/repository.js.map +1 -0
  253. package/dist/ports/ship-audit.d.ts +26 -0
  254. package/dist/ports/ship-audit.d.ts.map +1 -0
  255. package/dist/ports/ship-audit.js +9 -0
  256. package/dist/ports/ship-audit.js.map +1 -0
  257. package/dist/ports/workspace.d.ts +14 -0
  258. package/dist/ports/workspace.d.ts.map +1 -0
  259. package/dist/ports/workspace.js +14 -0
  260. package/dist/ports/workspace.js.map +1 -0
  261. package/dist/presenters/index.d.ts +2 -0
  262. package/dist/presenters/index.d.ts.map +1 -0
  263. package/dist/presenters/index.js +2 -0
  264. package/dist/presenters/index.js.map +1 -0
  265. package/dist/presenters/proposal.presenter.d.ts +30 -0
  266. package/dist/presenters/proposal.presenter.d.ts.map +1 -0
  267. package/dist/presenters/proposal.presenter.js +47 -0
  268. package/dist/presenters/proposal.presenter.js.map +1 -0
  269. package/dist/utils/host.d.ts.map +1 -1
  270. package/dist/utils/host.js +77 -6
  271. package/dist/utils/host.js.map +1 -1
  272. package/dist/utils/security.d.ts +7 -1
  273. package/dist/utils/security.d.ts.map +1 -1
  274. package/dist/utils/security.js +18 -2
  275. package/dist/utils/security.js.map +1 -1
  276. package/package.json +13 -1
@@ -0,0 +1,17 @@
1
+ import { type AttentionSnapshot, type AttentionSource, type AttentionStorePort } from "../../observability/attention.js";
2
+ /**
3
+ * Filesystem attention store over the documented evidence roots
4
+ * (`evidence/graph-runs`, `evidence/improvement-cycles`,
5
+ * `evidence/product-loops`), each run directory holding a `snapshot.json`.
6
+ *
7
+ * Read-only and fail-soft: a missing root or an unreadable/corrupted
8
+ * snapshot yields no attention rather than an error — a corrupted run must
9
+ * never hide the gates pending in other runs.
10
+ */
11
+ export declare class FsAttentionStore implements AttentionStorePort {
12
+ #private;
13
+ constructor(root: string);
14
+ listRuns(source: AttentionSource): Promise<readonly string[]>;
15
+ readSnapshot(source: AttentionSource, runId: string): Promise<AttentionSnapshot | null>;
16
+ }
17
+ //# sourceMappingURL=fs-attention.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-attention.store.d.ts","sourceRoot":"","sources":["../../../src/adapters/attention/fs-attention.store.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;;gBAGtC,IAAI,EAAE,MAAM;IAIlB,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAY7D,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAwBrG"}
@@ -0,0 +1,59 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join, resolve, sep } from "node:path";
3
+ import { ATTENTION_EVIDENCE_DIRS, } from "../../observability/attention.js";
4
+ const SAFE_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
5
+ /**
6
+ * Filesystem attention store over the documented evidence roots
7
+ * (`evidence/graph-runs`, `evidence/improvement-cycles`,
8
+ * `evidence/product-loops`), each run directory holding a `snapshot.json`.
9
+ *
10
+ * Read-only and fail-soft: a missing root or an unreadable/corrupted
11
+ * snapshot yields no attention rather than an error — a corrupted run must
12
+ * never hide the gates pending in other runs.
13
+ */
14
+ export class FsAttentionStore {
15
+ #root;
16
+ constructor(root) {
17
+ this.#root = resolve(root);
18
+ }
19
+ async listRuns(source) {
20
+ try {
21
+ const entries = await readdir(join(this.#root, ATTENTION_EVIDENCE_DIRS[source]), { withFileTypes: true });
22
+ return entries
23
+ .filter((entry) => entry.isDirectory() && SAFE_RUN_ID.test(entry.name))
24
+ .map((entry) => entry.name)
25
+ .sort();
26
+ }
27
+ catch {
28
+ return [];
29
+ }
30
+ }
31
+ async readSnapshot(source, runId) {
32
+ if (!SAFE_RUN_ID.test(runId) || runId.includes(".."))
33
+ return null;
34
+ const directory = resolve(this.#root, ATTENTION_EVIDENCE_DIRS[source]);
35
+ const file = resolve(directory, runId, "snapshot.json");
36
+ if (!file.startsWith(`${directory}${sep}`))
37
+ return null;
38
+ try {
39
+ const parsed = JSON.parse(await readFile(file, "utf8"));
40
+ if (typeof parsed !== "object" || parsed === null)
41
+ return null;
42
+ const record = parsed;
43
+ if (typeof record.state !== "string" || record.state.length === 0)
44
+ return null;
45
+ return {
46
+ runId: typeof record.runId === "string" && record.runId.length > 0 ? record.runId : runId,
47
+ state: record.state,
48
+ status: typeof record.status === "string" ? record.status : "unknown",
49
+ context: typeof record.context === "object" && record.context !== null
50
+ ? record.context
51
+ : null,
52
+ };
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=fs-attention.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-attention.store.js","sourceRoot":"","sources":["../../../src/adapters/attention/fs-attention.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,uBAAuB,GAIxB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IAClB,KAAK,CAAS;IAEvB,YAAmB,IAAY;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,MAAuB;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1G,OAAO,OAAO;iBACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBACtE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAuB,EAAE,KAAa;QAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACjE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAiC,CAAC;YACjD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/E,OAAO;gBACL,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBACzF,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACrE,OAAO,EACL,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;oBAC3D,CAAC,CAAE,MAAM,CAAC,OAAmC;oBAC7C,CAAC,CAAC,IAAI;aACX,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { type ExecutionIsolationOptions } from "../delivery/execution-isolation.js";
2
+ import type { CommandRunnerPort } from "../ports/host.js";
3
+ import type { ExecutionWorkspacePort, ExecutionWorkspaceResult } from "../ports/workspace.js";
4
+ import type { Proposal } from "../types/index.js";
5
+ /**
6
+ * Build the workspace port from a project config: undefined (no isolation)
7
+ * unless config.execution.isolation === "worktree". Fails closed — an absent
8
+ * or malformed config never enables isolation.
9
+ */
10
+ export declare function createExecutionWorkspace(execution: {
11
+ isolation?: string;
12
+ worktreeRoot?: string;
13
+ baseBranch?: string;
14
+ } | undefined, runner: CommandRunnerPort, repositoryRoot: string): ExecutionWorkspacePort | undefined;
15
+ export interface GitWorkspaceOptions extends ExecutionIsolationOptions {
16
+ /** Runs shell commands (typically the host adapter's exec). */
17
+ runner: CommandRunnerPort;
18
+ /** Absolute path of the repository the worktrees are carved from. */
19
+ repositoryRoot: string;
20
+ }
21
+ export declare class GitWorkspace implements ExecutionWorkspacePort {
22
+ #private;
23
+ constructor(options: GitWorkspaceOptions);
24
+ prepare(proposal: Pick<Proposal, "id" | "title">): Promise<ExecutionWorkspaceResult>;
25
+ }
26
+ //# sourceMappingURL=git-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-workspace.d.ts","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,yBAAyB,EAA0B,MAAM,oCAAoC,CAAC;AAE5G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACzF,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,GACrB,sBAAsB,GAAG,SAAS,CASpC;AAED,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,+DAA+D;IAC/D,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,qBAAa,YAAa,YAAW,sBAAsB;;gBAGtC,OAAO,EAAE,mBAAmB;IAIlC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAqDlG"}
@@ -0,0 +1,84 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Git Worktree Workspace Adapter
3
+ // ============================================================
4
+ // Implements ExecutionWorkspacePort with `git worktree add`, the swarm-forge
5
+ // isolation pattern: each execution gets its own branch checked out in its
6
+ // own directory, so concurrent executions never collide in the shared
7
+ // checkout. Read-only with respect to DAO state; it only touches git.
8
+ import { planExecutionIsolation } from "../delivery/execution-isolation.js";
9
+ import { slugify } from "../integrations/utils.js";
10
+ const GIT_TIMEOUT_MS = 60_000;
11
+ /**
12
+ * Build the workspace port from a project config: undefined (no isolation)
13
+ * unless config.execution.isolation === "worktree". Fails closed — an absent
14
+ * or malformed config never enables isolation.
15
+ */
16
+ export function createExecutionWorkspace(execution, runner, repositoryRoot) {
17
+ if (execution?.isolation !== "worktree")
18
+ return undefined;
19
+ return new GitWorkspace({
20
+ runner,
21
+ repositoryRoot,
22
+ isolation: "worktree",
23
+ worktreeRoot: execution.worktreeRoot,
24
+ baseBranch: execution.baseBranch ?? null,
25
+ });
26
+ }
27
+ const BRANCH_EXISTS = /already exists/i;
28
+ export class GitWorkspace {
29
+ #options;
30
+ constructor(options) {
31
+ this.#options = options;
32
+ }
33
+ async prepare(proposal) {
34
+ const plan = planExecutionIsolation(proposal, this.#options);
35
+ if (plan.mode === "invalid") {
36
+ // Unsafe configuration (absolute root, `..`, metacharacters, …) must
37
+ // never reach a shell command line. Fail closed.
38
+ return { ok: false, error: `invalid execution isolation config: ${plan.error}` };
39
+ }
40
+ if (plan.mode === "none") {
41
+ // No isolation: still report the deterministic branch name so the
42
+ // execution snapshot can carry it, but change nothing on disk.
43
+ return { ok: true, branch: `dao/${proposal.id}-${slugify(proposal.title) || "proposal"}`, path: null };
44
+ }
45
+ // Idempotent retry: the worktree may already exist and be checked out on
46
+ // the target branch (previous attempt, re-run of dao_execute).
47
+ const current = await this.#exec(`git -C ${plan.path} rev-parse --abbrev-ref HEAD`);
48
+ if (current.ok && current.stdout.trim() === plan.branch) {
49
+ return { ok: true, branch: plan.branch, path: `${this.#options.repositoryRoot}/${plan.path}` };
50
+ }
51
+ const base = plan.baseBranch ? ` ${plan.baseBranch}` : "";
52
+ const created = await this.#exec(`git worktree add -b ${plan.branch} ${plan.path}${base}`);
53
+ if (created.ok) {
54
+ return { ok: true, branch: plan.branch, path: `${this.#options.repositoryRoot}/${plan.path}` };
55
+ }
56
+ // The branch may already exist from a previous attempt: attach a new
57
+ // worktree to the existing branch instead of failing.
58
+ if (BRANCH_EXISTS.test(created.error)) {
59
+ const attached = await this.#exec(`git worktree add ${plan.path} ${plan.branch}`);
60
+ if (attached.ok) {
61
+ return { ok: true, branch: plan.branch, path: `${this.#options.repositoryRoot}/${plan.path}` };
62
+ }
63
+ return { ok: false, error: attached.error };
64
+ }
65
+ return { ok: false, error: created.error };
66
+ }
67
+ async #exec(command) {
68
+ try {
69
+ const { stdout, stderr, exitCode } = await this.#options.runner.exec(command, {
70
+ cwd: this.#options.repositoryRoot,
71
+ timeout: GIT_TIMEOUT_MS,
72
+ });
73
+ if (exitCode === 0)
74
+ return { ok: true, stdout };
75
+ const detail = [stderr.trim(), stdout.trim()].find((value) => value.length > 0) ?? "git failed";
76
+ return { ok: false, error: detail };
77
+ }
78
+ catch (err) {
79
+ const message = err instanceof Error ? err.message : "git exec failed";
80
+ return { ok: false, error: message };
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=git-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-workspace.js","sourceRoot":"","sources":["../../src/adapters/git-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./attention/fs-attention.store.js";
2
+ export * from "./git-workspace.js";
3
+ export * from "./persistence/file-dao-state.repository.js";
4
+ export * from "./persistence/in-memory-dao-state.repository.js";
5
+ export * from "./persistence/legacy-dao-state.repository.js";
6
+ export * from "./ship-audit/fs-ship-audit.store.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./attention/fs-attention.store.js";
2
+ export * from "./git-workspace.js";
3
+ export * from "./persistence/file-dao-state.repository.js";
4
+ export * from "./persistence/in-memory-dao-state.repository.js";
5
+ export * from "./persistence/legacy-dao-state.repository.js";
6
+ export * from "./ship-audit/fs-ship-audit.store.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { DaoStateRepositoryPort } from "../../ports/repository.js";
2
+ import { type DAOState } from "../../types/index.js";
3
+ /** Instance-owned filesystem adapter. No process-global DAO state or write cache. */
4
+ export declare class FileDaoStateRepository implements DaoStateRepositoryPort {
5
+ private readonly state;
6
+ private readonly daoRoot;
7
+ private readonly writeCache;
8
+ private constructor();
9
+ static open(cwd: string): Promise<FileDaoStateRepository>;
10
+ get(): DAOState;
11
+ persist(): Promise<void>;
12
+ private persistDecisions;
13
+ private writeIfChanged;
14
+ }
15
+ //# sourceMappingURL=file-dao-state.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-dao-state.repository.d.ts","sourceRoot":"","sources":["../../../src/adapters/persistence/file-dao-state.repository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAsB,KAAK,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AA2B9F,qFAAqF;AACrF,qBAAa,sBAAuB,YAAW,sBAAsB;IAIjE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IAExD,OAAO;WAKa,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAc/D,GAAG,IAAI,QAAQ;IAIT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMvB,gBAAgB;YAyBhB,cAAc;CAM7B"}
@@ -0,0 +1,85 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { createInitialState } from "../../types/index.js";
4
+ function formatJson(value) {
5
+ return `${JSON.stringify(value, null, 2)}\n`;
6
+ }
7
+ function repairState(value, daoRoot) {
8
+ const fallback = createInitialState(daoRoot);
9
+ const state = { ...fallback, ...value, daoRoot };
10
+ state.proposals = Array.isArray(value.proposals) ? value.proposals : [];
11
+ state.agents = Array.isArray(value.agents) ? value.agents : [];
12
+ state.auditLog = Array.isArray(value.auditLog) ? value.auditLog : [];
13
+ state.controlResults = value.controlResults && !Array.isArray(value.controlResults) ? value.controlResults : {};
14
+ state.deliveryPlans = value.deliveryPlans && !Array.isArray(value.deliveryPlans) ? value.deliveryPlans : {};
15
+ state.artefacts = value.artefacts && !Array.isArray(value.artefacts) ? value.artefacts : {};
16
+ state.outcomes = value.outcomes && !Array.isArray(value.outcomes) ? value.outcomes : {};
17
+ state.snapshots = value.snapshots && !Array.isArray(value.snapshots) ? value.snapshots : {};
18
+ state.verifications = value.verifications && !Array.isArray(value.verifications) ? value.verifications : {};
19
+ const nextProposalId = value.nextProposalId;
20
+ const nextAuditId = value.nextAuditId;
21
+ state.nextProposalId =
22
+ typeof nextProposalId === "number" && Number.isInteger(nextProposalId) && nextProposalId > 0 ? nextProposalId : 1;
23
+ state.nextAuditId =
24
+ typeof nextAuditId === "number" && Number.isInteger(nextAuditId) && nextAuditId > 0 ? nextAuditId : 1;
25
+ return state;
26
+ }
27
+ /** Instance-owned filesystem adapter. No process-global DAO state or write cache. */
28
+ export class FileDaoStateRepository {
29
+ state;
30
+ daoRoot;
31
+ writeCache = new Map();
32
+ constructor(state, daoRoot) {
33
+ this.state = state;
34
+ this.daoRoot = daoRoot;
35
+ }
36
+ static async open(cwd) {
37
+ const daoRoot = path.join(cwd, ".dao");
38
+ await fs.mkdir(daoRoot, { recursive: true });
39
+ const statePath = path.join(daoRoot, "state.json");
40
+ let state = createInitialState(daoRoot);
41
+ try {
42
+ const parsed = JSON.parse(await fs.readFile(statePath, "utf8"));
43
+ state = repairState(parsed, daoRoot);
44
+ }
45
+ catch (error) {
46
+ if (error.code !== "ENOENT")
47
+ throw error;
48
+ }
49
+ return new FileDaoStateRepository(state, daoRoot);
50
+ }
51
+ get() {
52
+ return this.state;
53
+ }
54
+ async persist() {
55
+ await fs.mkdir(this.daoRoot, { recursive: true });
56
+ await this.writeIfChanged(path.join(this.daoRoot, "state.json"), this.state);
57
+ await this.persistDecisions();
58
+ }
59
+ async persistDecisions() {
60
+ const decisionsDir = path.join(this.daoRoot, "decisions");
61
+ await fs.mkdir(decisionsDir, { recursive: true });
62
+ const decisions = this.state.proposals
63
+ .filter((proposal) => proposal.status !== "open" && proposal.status !== "deliberating")
64
+ .map((proposal) => ({
65
+ id: proposal.id,
66
+ title: proposal.title,
67
+ type: proposal.type,
68
+ status: proposal.status,
69
+ riskZone: proposal.riskZone,
70
+ createdAt: proposal.createdAt,
71
+ resolvedAt: proposal.resolvedAt,
72
+ }))
73
+ .sort((left, right) => left.id - right.id);
74
+ await this.writeIfChanged(path.join(decisionsDir, "index.json"), decisions);
75
+ await Promise.all(decisions.map((decision) => this.writeIfChanged(path.join(decisionsDir, `${decision.id.toString().padStart(3, "0")}.json`), decision)));
76
+ }
77
+ async writeIfChanged(filePath, value) {
78
+ const serialized = formatJson(value);
79
+ if (this.writeCache.get(filePath) === serialized)
80
+ return;
81
+ await fs.writeFile(filePath, serialized, "utf8");
82
+ this.writeCache.set(filePath, serialized);
83
+ }
84
+ }
85
+ //# sourceMappingURL=file-dao-state.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-dao-state.repository.js","sourceRoot":"","sources":["../../../src/adapters/persistence/file-dao-state.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { DaoStateRepositoryPort } from "../../ports/repository.js";
2
+ import type { DAOState } from "../../types/index.js";
3
+ /** Fast isolated repository for pure application tests and embedded hosts. */
4
+ export declare class InMemoryDaoStateRepository implements DaoStateRepositoryPort {
5
+ private readonly state;
6
+ constructor(state: DAOState);
7
+ get(): DAOState;
8
+ persist(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=in-memory-dao-state.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-dao-state.repository.d.ts","sourceRoot":"","sources":["../../../src/adapters/persistence/in-memory-dao-state.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,8EAA8E;AAC9E,qBAAa,0BAA2B,YAAW,sBAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,QAAQ;IAE5C,GAAG,IAAI,QAAQ;IAIT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
@@ -0,0 +1,14 @@
1
+ /** Fast isolated repository for pure application tests and embedded hosts. */
2
+ export class InMemoryDaoStateRepository {
3
+ state;
4
+ constructor(state) {
5
+ this.state = state;
6
+ }
7
+ get() {
8
+ return this.state;
9
+ }
10
+ async persist() {
11
+ // State already lives in this isolated instance.
12
+ }
13
+ }
14
+ //# sourceMappingURL=in-memory-dao-state.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-dao-state.repository.js","sourceRoot":"","sources":["../../../src/adapters/persistence/in-memory-dao-state.repository.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,MAAM,OAAO,0BAA0B;IACD;IAApC,YAAoC,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;IAAG,CAAC;IAEhD,GAAG;QACR,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,iDAAiD;IACnD,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { DaoStateRepositoryPort } from "../../ports/repository.js";
2
+ import type { DAOState } from "../../types/index.js";
3
+ /**
4
+ * Compatibility adapter for hosts not yet migrated to repository instances.
5
+ * New hosts should own an isolated repository and inject it into use cases.
6
+ */
7
+ export declare class LegacyDaoStateRepository implements DaoStateRepositoryPort {
8
+ get(): DAOState;
9
+ persist(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=legacy-dao-state.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-dao-state.repository.d.ts","sourceRoot":"","sources":["../../../src/adapters/persistence/legacy-dao-state.repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,sBAAsB;IAC9D,GAAG,IAAI,QAAQ;IAIf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
@@ -0,0 +1,14 @@
1
+ import { getState, saveState } from "../../persistence.js";
2
+ /**
3
+ * Compatibility adapter for hosts not yet migrated to repository instances.
4
+ * New hosts should own an isolated repository and inject it into use cases.
5
+ */
6
+ export class LegacyDaoStateRepository {
7
+ get() {
8
+ return getState();
9
+ }
10
+ persist() {
11
+ return saveState();
12
+ }
13
+ }
14
+ //# sourceMappingURL=legacy-dao-state.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-dao-state.repository.js","sourceRoot":"","sources":["../../../src/adapters/persistence/legacy-dao-state.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;GAGG;AACH,MAAM,OAAO,wBAAwB;IAC5B,GAAG;QACR,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,OAAO;QACZ,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { ShipAuditSnapshot, ShipAuditStorePort } from "../../ports/ship-audit.js";
2
+ export declare class FsShipAuditStore implements ShipAuditStorePort {
3
+ #private;
4
+ constructor(repositoryRoot: string);
5
+ load(proposalId: number): Promise<ShipAuditSnapshot | null>;
6
+ save(snapshot: ShipAuditSnapshot): Promise<void>;
7
+ claim(proposalId: number): Promise<{
8
+ acquired: boolean;
9
+ release: () => Promise<void>;
10
+ }>;
11
+ }
12
+ //# sourceMappingURL=fs-ship-audit.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-ship-audit.store.d.ts","sourceRoot":"","sources":["../../../src/adapters/ship-audit/fs-ship-audit.store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIvF,qBAAa,gBAAiB,YAAW,kBAAkB;;gBAGtC,cAAc,EAAE,MAAM;IAI5B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAgB3D,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CA0BrG"}
@@ -0,0 +1,69 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Ship Audit Filesystem Store
3
+ // ============================================================
4
+ // Persists audit-challenge snapshots under <repositoryRoot>/.dao/ship-audits/
5
+ // as <proposalId>.json. Read-soft: a missing or unreadable file yields null
6
+ // (a fresh cycle), never an error — the challenge must still gate.
7
+ import { promises as fs } from "node:fs";
8
+ import { join, resolve, sep } from "node:path";
9
+ const SAFE_ID = /^\d+$/;
10
+ export class FsShipAuditStore {
11
+ #directory;
12
+ constructor(repositoryRoot) {
13
+ this.#directory = resolve(repositoryRoot, ".dao", "ship-audits");
14
+ }
15
+ async load(proposalId) {
16
+ if (!Number.isInteger(proposalId) || proposalId <= 0)
17
+ return null;
18
+ const file = this.#fileFor(proposalId);
19
+ try {
20
+ const parsed = JSON.parse(await fs.readFile(file, "utf8"));
21
+ if (typeof parsed !== "object" || parsed === null)
22
+ return null;
23
+ const record = parsed;
24
+ if (typeof record.state !== "string" || record.state.length === 0)
25
+ return null;
26
+ const context = record.context;
27
+ if (typeof context !== "object" || context === null)
28
+ return null;
29
+ return parsed;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ async save(snapshot) {
36
+ const file = this.#fileFor(snapshot.proposalId);
37
+ await fs.mkdir(this.#directory, { recursive: true });
38
+ await fs.writeFile(file, `${JSON.stringify(snapshot, null, 2)}\n`, "utf8");
39
+ }
40
+ async claim(proposalId) {
41
+ const lock = this.#fileFor(proposalId).replace(/\.json$/, ".lock");
42
+ await fs.mkdir(this.#directory, { recursive: true });
43
+ try {
44
+ // O_EXCL ('wx'): exactly one concurrent caller across processes wins.
45
+ const handle = await fs.open(lock, "wx");
46
+ await handle.write(`${process.pid}\n`);
47
+ await handle.close();
48
+ return {
49
+ acquired: true,
50
+ release: async () => {
51
+ await fs.rm(lock, { force: true }).catch(() => undefined);
52
+ },
53
+ };
54
+ }
55
+ catch {
56
+ return { acquired: false, release: async () => undefined };
57
+ }
58
+ }
59
+ #fileFor(proposalId) {
60
+ const name = String(proposalId);
61
+ if (!SAFE_ID.test(name))
62
+ throw new Error("proposalId must be a positive integer");
63
+ const file = resolve(join(this.#directory, `${name}.json`));
64
+ if (!file.startsWith(`${this.#directory}${sep}`))
65
+ throw new Error("snapshot path escapes the store directory");
66
+ return file;
67
+ }
68
+ }
69
+ //# sourceMappingURL=fs-ship-audit.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-ship-audit.store.js","sourceRoot":"","sources":["../../../src/adapters/ship-audit/fs-ship-audit.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from "./initialize-dao.use-case.js";
2
+ export * from "./proposals/control-proposal.use-case.js";
3
+ export * from "./proposals/create-amendment-proposal.use-case.js";
4
+ export * from "./proposals/create-proposal.use-case.js";
5
+ export * from "./proposals/deliberate-proposal.use-case.js";
6
+ export * from "./proposals/dry-run-proposal.use-case.js";
7
+ export * from "./proposals/execute-proposal.use-case.js";
8
+ export * from "./proposals/rate-proposal.use-case.js";
9
+ export * from "./proposals/record-deliberation-outputs.use-case.js";
10
+ export * from "./proposals/rollback-proposal.use-case.js";
11
+ export * from "./proposals/round-table.use-case.js";
12
+ export * from "./proposals/ship-proposal.use-case.js";
13
+ export * from "./proposals/start-deliberation.use-case.js";
14
+ export * from "./proposals/transition-proposal.use-case.js";
15
+ export * from "./proposals/update-proposal.use-case.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,qDAAqD,CAAC;AACpE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yCAAyC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from "./initialize-dao.use-case.js";
2
+ export * from "./proposals/control-proposal.use-case.js";
3
+ export * from "./proposals/create-amendment-proposal.use-case.js";
4
+ export * from "./proposals/create-proposal.use-case.js";
5
+ export * from "./proposals/deliberate-proposal.use-case.js";
6
+ export * from "./proposals/dry-run-proposal.use-case.js";
7
+ export * from "./proposals/execute-proposal.use-case.js";
8
+ export * from "./proposals/rate-proposal.use-case.js";
9
+ export * from "./proposals/record-deliberation-outputs.use-case.js";
10
+ export * from "./proposals/rollback-proposal.use-case.js";
11
+ export * from "./proposals/round-table.use-case.js";
12
+ export * from "./proposals/ship-proposal.use-case.js";
13
+ export * from "./proposals/start-deliberation.use-case.js";
14
+ export * from "./proposals/transition-proposal.use-case.js";
15
+ export * from "./proposals/update-proposal.use-case.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,qDAAqD,CAAC;AACpE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yCAAyC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { DaoStateRepositoryPort } from "../ports/repository.js";
2
+ import type { DAOAgent } from "../types/index.js";
3
+ export type InitializeDaoResult = {
4
+ ok: true;
5
+ agents: DAOAgent[];
6
+ } | {
7
+ ok: false;
8
+ error: string;
9
+ agents: DAOAgent[];
10
+ };
11
+ export declare class InitializeDaoUseCase {
12
+ private readonly dependencies;
13
+ constructor(dependencies: {
14
+ repository: DaoStateRepositoryPort;
15
+ });
16
+ execute(command: {
17
+ agents: DAOAgent[];
18
+ }): Promise<InitializeDaoResult>;
19
+ }
20
+ //# sourceMappingURL=initialize-dao.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize-dao.use-case.d.ts","sourceRoot":"","sources":["../../src/application/initialize-dao.use-case.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC;AAEtH,qBAAa,oBAAoB;IACZ,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE;QAAE,UAAU,EAAE,sBAAsB,CAAA;KAAE;IAE3E,OAAO,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAUpF"}
@@ -0,0 +1,17 @@
1
+ export class InitializeDaoUseCase {
2
+ dependencies;
3
+ constructor(dependencies) {
4
+ this.dependencies = dependencies;
5
+ }
6
+ async execute(command) {
7
+ const state = this.dependencies.repository.get();
8
+ if (state.initialized) {
9
+ return { ok: false, error: `DAO already initialized with ${state.agents.length} agents.`, agents: state.agents };
10
+ }
11
+ state.agents = command.agents;
12
+ state.initialized = true;
13
+ await this.dependencies.repository.persist();
14
+ return { ok: true, agents: state.agents };
15
+ }
16
+ }
17
+ //# sourceMappingURL=initialize-dao.use-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize-dao.use-case.js","sourceRoot":"","sources":["../../src/application/initialize-dao.use-case.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,oBAAoB;IACK;IAApC,YAAoC,YAAoD;QAApD,iBAAY,GAAZ,YAAY,CAAwC;IAAG,CAAC;IAErF,KAAK,CAAC,OAAO,CAAC,OAA+B;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,KAAK,CAAC,MAAM,CAAC,MAAM,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QACnH,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;CACF"}