@guyghost/swarm-dao-core 0.3.0 → 0.5.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 (304) 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 +6 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +6 -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/application/index.d.ts +16 -0
  26. package/dist/application/index.d.ts.map +1 -0
  27. package/dist/application/index.js +16 -0
  28. package/dist/application/index.js.map +1 -0
  29. package/dist/application/initialize-dao.use-case.d.ts +20 -0
  30. package/dist/application/initialize-dao.use-case.d.ts.map +1 -0
  31. package/dist/application/initialize-dao.use-case.js +17 -0
  32. package/dist/application/initialize-dao.use-case.js.map +1 -0
  33. package/dist/application/proposals/control-proposal.use-case.d.ts +23 -0
  34. package/dist/application/proposals/control-proposal.use-case.d.ts.map +1 -0
  35. package/dist/application/proposals/control-proposal.use-case.js +53 -0
  36. package/dist/application/proposals/control-proposal.use-case.js.map +1 -0
  37. package/dist/application/proposals/create-amendment-proposal.use-case.d.ts +25 -0
  38. package/dist/application/proposals/create-amendment-proposal.use-case.d.ts.map +1 -0
  39. package/dist/application/proposals/create-amendment-proposal.use-case.js +39 -0
  40. package/dist/application/proposals/create-amendment-proposal.use-case.js.map +1 -0
  41. package/dist/application/proposals/create-proposal.use-case.d.ts +34 -0
  42. package/dist/application/proposals/create-proposal.use-case.d.ts.map +1 -0
  43. package/dist/application/proposals/create-proposal.use-case.js +49 -0
  44. package/dist/application/proposals/create-proposal.use-case.js.map +1 -0
  45. package/dist/application/proposals/deliberate-proposal.use-case.d.ts +35 -0
  46. package/dist/application/proposals/deliberate-proposal.use-case.d.ts.map +1 -0
  47. package/dist/application/proposals/deliberate-proposal.use-case.js +67 -0
  48. package/dist/application/proposals/deliberate-proposal.use-case.js.map +1 -0
  49. package/dist/application/proposals/dry-run-proposal.use-case.d.ts +21 -0
  50. package/dist/application/proposals/dry-run-proposal.use-case.d.ts.map +1 -0
  51. package/dist/application/proposals/dry-run-proposal.use-case.js +20 -0
  52. package/dist/application/proposals/dry-run-proposal.use-case.js.map +1 -0
  53. package/dist/application/proposals/execute-proposal.use-case.d.ts +29 -0
  54. package/dist/application/proposals/execute-proposal.use-case.d.ts.map +1 -0
  55. package/dist/application/proposals/execute-proposal.use-case.js +66 -0
  56. package/dist/application/proposals/execute-proposal.use-case.js.map +1 -0
  57. package/dist/application/proposals/rate-proposal.use-case.d.ts +24 -0
  58. package/dist/application/proposals/rate-proposal.use-case.d.ts.map +1 -0
  59. package/dist/application/proposals/rate-proposal.use-case.js +33 -0
  60. package/dist/application/proposals/rate-proposal.use-case.js.map +1 -0
  61. package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts +21 -0
  62. package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts.map +1 -0
  63. package/dist/application/proposals/record-deliberation-outputs.use-case.js +65 -0
  64. package/dist/application/proposals/record-deliberation-outputs.use-case.js.map +1 -0
  65. package/dist/application/proposals/rollback-proposal.use-case.d.ts +20 -0
  66. package/dist/application/proposals/rollback-proposal.use-case.d.ts.map +1 -0
  67. package/dist/application/proposals/rollback-proposal.use-case.js +17 -0
  68. package/dist/application/proposals/rollback-proposal.use-case.js.map +1 -0
  69. package/dist/application/proposals/round-table.use-case.d.ts +27 -0
  70. package/dist/application/proposals/round-table.use-case.d.ts.map +1 -0
  71. package/dist/application/proposals/round-table.use-case.js +55 -0
  72. package/dist/application/proposals/round-table.use-case.js.map +1 -0
  73. package/dist/application/proposals/ship-proposal.use-case.d.ts +26 -0
  74. package/dist/application/proposals/ship-proposal.use-case.d.ts.map +1 -0
  75. package/dist/application/proposals/ship-proposal.use-case.js +60 -0
  76. package/dist/application/proposals/ship-proposal.use-case.js.map +1 -0
  77. package/dist/application/proposals/start-deliberation.use-case.d.ts +21 -0
  78. package/dist/application/proposals/start-deliberation.use-case.d.ts.map +1 -0
  79. package/dist/application/proposals/start-deliberation.use-case.js +30 -0
  80. package/dist/application/proposals/start-deliberation.use-case.js.map +1 -0
  81. package/dist/application/proposals/transition-proposal.use-case.d.ts +20 -0
  82. package/dist/application/proposals/transition-proposal.use-case.d.ts.map +1 -0
  83. package/dist/application/proposals/transition-proposal.use-case.js +19 -0
  84. package/dist/application/proposals/transition-proposal.use-case.js.map +1 -0
  85. package/dist/application/proposals/update-proposal.use-case.d.ts +26 -0
  86. package/dist/application/proposals/update-proposal.use-case.d.ts.map +1 -0
  87. package/dist/application/proposals/update-proposal.use-case.js +19 -0
  88. package/dist/application/proposals/update-proposal.use-case.js.map +1 -0
  89. package/dist/commands/index.d.ts +2 -0
  90. package/dist/commands/index.d.ts.map +1 -0
  91. package/dist/commands/index.js +2 -0
  92. package/dist/commands/index.js.map +1 -0
  93. package/dist/commands/registry.d.ts +46 -0
  94. package/dist/commands/registry.d.ts.map +1 -0
  95. package/dist/commands/registry.js +367 -0
  96. package/dist/commands/registry.js.map +1 -0
  97. package/dist/config.d.ts +17 -0
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +9 -1
  100. package/dist/config.js.map +1 -1
  101. package/dist/control/gates.d.ts +4 -1
  102. package/dist/control/gates.d.ts.map +1 -1
  103. package/dist/control/gates.js +22 -10
  104. package/dist/control/gates.js.map +1 -1
  105. package/dist/delivery/dependencies.d.ts.map +1 -1
  106. package/dist/delivery/dependencies.js +15 -7
  107. package/dist/delivery/dependencies.js.map +1 -1
  108. package/dist/delivery/dry-run.d.ts.map +1 -1
  109. package/dist/delivery/dry-run.js +3 -44
  110. package/dist/delivery/dry-run.js.map +1 -1
  111. package/dist/delivery/execution-isolation.d.ts +34 -0
  112. package/dist/delivery/execution-isolation.d.ts.map +1 -0
  113. package/dist/delivery/execution-isolation.js +97 -0
  114. package/dist/delivery/execution-isolation.js.map +1 -0
  115. package/dist/delivery/execution.d.ts.map +1 -1
  116. package/dist/delivery/execution.js +7 -5
  117. package/dist/delivery/execution.js.map +1 -1
  118. package/dist/delivery/index.d.ts +1 -0
  119. package/dist/delivery/index.d.ts.map +1 -1
  120. package/dist/delivery/index.js +1 -0
  121. package/dist/delivery/index.js.map +1 -1
  122. package/dist/delivery/plans.d.ts +3 -1
  123. package/dist/delivery/plans.d.ts.map +1 -1
  124. package/dist/delivery/plans.js +2 -2
  125. package/dist/delivery/plans.js.map +1 -1
  126. package/dist/domain/dry-run.d.ts +3 -0
  127. package/dist/domain/dry-run.d.ts.map +1 -0
  128. package/dist/domain/dry-run.js +28 -0
  129. package/dist/domain/dry-run.js.map +1 -0
  130. package/dist/domain/index.d.ts +6 -0
  131. package/dist/domain/index.d.ts.map +1 -0
  132. package/dist/domain/index.js +7 -0
  133. package/dist/domain/index.js.map +1 -0
  134. package/dist/governance/agents.d.ts +2 -0
  135. package/dist/governance/agents.d.ts.map +1 -1
  136. package/dist/governance/agents.js +148 -173
  137. package/dist/governance/agents.js.map +1 -1
  138. package/dist/governance/charter.d.ts +14 -0
  139. package/dist/governance/charter.d.ts.map +1 -0
  140. package/dist/governance/charter.js +65 -0
  141. package/dist/governance/charter.js.map +1 -0
  142. package/dist/governance/delegation.machine.d.ts +316 -0
  143. package/dist/governance/delegation.machine.d.ts.map +1 -0
  144. package/dist/governance/delegation.machine.js +387 -0
  145. package/dist/governance/delegation.machine.js.map +1 -0
  146. package/dist/governance/delegation.utils.d.ts +55 -0
  147. package/dist/governance/delegation.utils.d.ts.map +1 -0
  148. package/dist/governance/delegation.utils.js +157 -0
  149. package/dist/governance/delegation.utils.js.map +1 -0
  150. package/dist/governance/edit-gate.d.ts +47 -0
  151. package/dist/governance/edit-gate.d.ts.map +1 -0
  152. package/dist/governance/edit-gate.js +156 -0
  153. package/dist/governance/edit-gate.js.map +1 -0
  154. package/dist/governance/index.d.ts +3 -0
  155. package/dist/governance/index.d.ts.map +1 -1
  156. package/dist/governance/index.js +3 -0
  157. package/dist/governance/index.js.map +1 -1
  158. package/dist/governance/lifecycle.d.ts +0 -6
  159. package/dist/governance/lifecycle.d.ts.map +1 -1
  160. package/dist/governance/lifecycle.js +7 -31
  161. package/dist/governance/lifecycle.js.map +1 -1
  162. package/dist/governance/proposal.machine.d.ts +2 -130
  163. package/dist/governance/proposal.machine.d.ts.map +1 -1
  164. package/dist/governance/proposal.machine.js +2 -377
  165. package/dist/governance/proposal.machine.js.map +1 -1
  166. package/dist/governance/proposal.utils.d.ts +22 -165
  167. package/dist/governance/proposal.utils.d.ts.map +1 -1
  168. package/dist/governance/proposal.utils.js +52 -119
  169. package/dist/governance/proposal.utils.js.map +1 -1
  170. package/dist/governance/scoring.d.ts.map +1 -1
  171. package/dist/governance/scoring.js +36 -16
  172. package/dist/governance/scoring.js.map +1 -1
  173. package/dist/governance/voting.d.ts.map +1 -1
  174. package/dist/governance/voting.js +24 -14
  175. package/dist/governance/voting.js.map +1 -1
  176. package/dist/host-tools/github-config.d.ts.map +1 -1
  177. package/dist/host-tools/github-config.js +17 -5
  178. package/dist/host-tools/github-config.js.map +1 -1
  179. package/dist/host-tools/handlers.d.ts +14 -11
  180. package/dist/host-tools/handlers.d.ts.map +1 -1
  181. package/dist/host-tools/handlers.js +204 -335
  182. package/dist/host-tools/handlers.js.map +1 -1
  183. package/dist/host-tools/messages.d.ts +10 -4
  184. package/dist/host-tools/messages.d.ts.map +1 -1
  185. package/dist/host-tools/messages.js +14 -17
  186. package/dist/host-tools/messages.js.map +1 -1
  187. package/dist/index.d.ts +6 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +12 -0
  190. package/dist/index.js.map +1 -1
  191. package/dist/integrations/github.d.ts.map +1 -1
  192. package/dist/integrations/github.js +5 -2
  193. package/dist/integrations/github.js.map +1 -1
  194. package/dist/integrations/http.d.ts +12 -1
  195. package/dist/integrations/http.d.ts.map +1 -1
  196. package/dist/integrations/http.js +114 -17
  197. package/dist/integrations/http.js.map +1 -1
  198. package/dist/intelligence/delegation.d.ts +41 -0
  199. package/dist/intelligence/delegation.d.ts.map +1 -0
  200. package/dist/intelligence/delegation.js +162 -0
  201. package/dist/intelligence/delegation.js.map +1 -0
  202. package/dist/intelligence/index.d.ts +2 -0
  203. package/dist/intelligence/index.d.ts.map +1 -1
  204. package/dist/intelligence/index.js +2 -0
  205. package/dist/intelligence/index.js.map +1 -1
  206. package/dist/intelligence/model.d.ts +28 -2
  207. package/dist/intelligence/model.d.ts.map +1 -1
  208. package/dist/intelligence/model.js +36 -3
  209. package/dist/intelligence/model.js.map +1 -1
  210. package/dist/intelligence/roundtable.d.ts +4 -2
  211. package/dist/intelligence/roundtable.d.ts.map +1 -1
  212. package/dist/intelligence/roundtable.js +2 -2
  213. package/dist/intelligence/roundtable.js.map +1 -1
  214. package/dist/intelligence/sequential.d.ts +36 -0
  215. package/dist/intelligence/sequential.d.ts.map +1 -0
  216. package/dist/intelligence/sequential.js +91 -0
  217. package/dist/intelligence/sequential.js.map +1 -0
  218. package/dist/intelligence/swarm.d.ts +19 -4
  219. package/dist/intelligence/swarm.d.ts.map +1 -1
  220. package/dist/intelligence/swarm.js +107 -53
  221. package/dist/intelligence/swarm.js.map +1 -1
  222. package/dist/intelligence/synthesis.d.ts.map +1 -1
  223. package/dist/intelligence/synthesis.js +16 -4
  224. package/dist/intelligence/synthesis.js.map +1 -1
  225. package/dist/models/graph-engineering.machine.d.ts +219 -0
  226. package/dist/models/graph-engineering.machine.d.ts.map +1 -0
  227. package/dist/models/graph-engineering.machine.js +214 -0
  228. package/dist/models/graph-engineering.machine.js.map +1 -0
  229. package/dist/models/improvement-loop.machine.d.ts +239 -0
  230. package/dist/models/improvement-loop.machine.d.ts.map +1 -0
  231. package/dist/models/improvement-loop.machine.js +254 -0
  232. package/dist/models/improvement-loop.machine.js.map +1 -0
  233. package/dist/models/index.d.ts +5 -0
  234. package/dist/models/index.d.ts.map +1 -0
  235. package/dist/models/index.js +5 -0
  236. package/dist/models/index.js.map +1 -0
  237. package/dist/models/product-loop.machine.d.ts +531 -0
  238. package/dist/models/product-loop.machine.d.ts.map +1 -0
  239. package/dist/models/product-loop.machine.js +699 -0
  240. package/dist/models/product-loop.machine.js.map +1 -0
  241. package/dist/models/proposal.machine.d.ts +82 -0
  242. package/dist/models/proposal.machine.d.ts.map +1 -0
  243. package/dist/models/proposal.machine.js +68 -0
  244. package/dist/models/proposal.machine.js.map +1 -0
  245. package/dist/observability/attention.d.ts +40 -0
  246. package/dist/observability/attention.d.ts.map +1 -0
  247. package/dist/observability/attention.js +119 -0
  248. package/dist/observability/attention.js.map +1 -0
  249. package/dist/observability/index.d.ts +1 -0
  250. package/dist/observability/index.d.ts.map +1 -1
  251. package/dist/observability/index.js +1 -0
  252. package/dist/observability/index.js.map +1 -1
  253. package/dist/observability/logging.d.ts +6 -0
  254. package/dist/observability/logging.d.ts.map +1 -1
  255. package/dist/observability/logging.js +36 -6
  256. package/dist/observability/logging.js.map +1 -1
  257. package/dist/observability/metrics.d.ts +7 -0
  258. package/dist/observability/metrics.d.ts.map +1 -1
  259. package/dist/observability/metrics.js +179 -43
  260. package/dist/observability/metrics.js.map +1 -1
  261. package/dist/persistence.d.ts +5 -6
  262. package/dist/persistence.d.ts.map +1 -1
  263. package/dist/persistence.js +197 -140
  264. package/dist/persistence.js.map +1 -1
  265. package/dist/ports/clock.d.ts +7 -0
  266. package/dist/ports/clock.d.ts.map +1 -0
  267. package/dist/ports/clock.js +5 -0
  268. package/dist/ports/clock.js.map +1 -0
  269. package/dist/ports/host.d.ts +8 -0
  270. package/dist/ports/host.d.ts.map +1 -0
  271. package/dist/ports/host.js +2 -0
  272. package/dist/ports/host.js.map +1 -0
  273. package/dist/ports/index.d.ts +5 -0
  274. package/dist/ports/index.d.ts.map +1 -0
  275. package/dist/ports/index.js +5 -0
  276. package/dist/ports/index.js.map +1 -0
  277. package/dist/ports/repository.d.ts +7 -0
  278. package/dist/ports/repository.d.ts.map +1 -0
  279. package/dist/ports/repository.js +2 -0
  280. package/dist/ports/repository.js.map +1 -0
  281. package/dist/ports/workspace.d.ts +14 -0
  282. package/dist/ports/workspace.d.ts.map +1 -0
  283. package/dist/ports/workspace.js +14 -0
  284. package/dist/ports/workspace.js.map +1 -0
  285. package/dist/presenters/index.d.ts +2 -0
  286. package/dist/presenters/index.d.ts.map +1 -0
  287. package/dist/presenters/index.js +2 -0
  288. package/dist/presenters/index.js.map +1 -0
  289. package/dist/presenters/proposal.presenter.d.ts +30 -0
  290. package/dist/presenters/proposal.presenter.d.ts.map +1 -0
  291. package/dist/presenters/proposal.presenter.js +47 -0
  292. package/dist/presenters/proposal.presenter.js.map +1 -0
  293. package/dist/types/index.d.ts +70 -0
  294. package/dist/types/index.d.ts.map +1 -1
  295. package/dist/types/index.js +12 -0
  296. package/dist/types/index.js.map +1 -1
  297. package/dist/utils/host.d.ts.map +1 -1
  298. package/dist/utils/host.js +77 -6
  299. package/dist/utils/host.js.map +1 -1
  300. package/dist/utils/security.d.ts +7 -1
  301. package/dist/utils/security.d.ts.map +1 -1
  302. package/dist/utils/security.js +18 -2
  303. package/dist/utils/security.js.map +1 -1
  304. package/package.json +13 -1
@@ -0,0 +1,47 @@
1
+ import { type ActivationMode } from "../config.js";
2
+ /** Proposals whose affectedPaths carry approval authority. */
3
+ export interface EditGateApproval {
4
+ proposalId: number;
5
+ affectedPaths?: string[];
6
+ status: string;
7
+ }
8
+ export interface EditPathVerdict {
9
+ path: string;
10
+ /** True when the path matches a criticalPaths glob. */
11
+ critical: boolean;
12
+ /** May the agent edit this path under the configured mode? */
13
+ allowed: boolean;
14
+ reason: string;
15
+ /** Proposal whose affectedPaths cover this path, when relevant. */
16
+ coveredByProposalId?: number;
17
+ }
18
+ export interface EditGateDecision {
19
+ mode: ActivationMode;
20
+ /** True only when every requested path is allowed. */
21
+ allowed: boolean;
22
+ verdicts: readonly EditPathVerdict[];
23
+ /** Non-blocking nudge (suggest) or required next step (enforce). */
24
+ guidance: string | null;
25
+ }
26
+ /**
27
+ * Lexically normalize a repository-relative path so glob matching cannot be
28
+ * evaded by spelling variants (absolute paths, `./` prefixes, `a/../b`
29
+ * segments, duplicate slashes). Fail closed: anything that cannot be
30
+ * normalized to a deterministic in-repo path is refused, never allowed.
31
+ */
32
+ export declare function normalizeEditPath(raw: string): {
33
+ ok: true;
34
+ path: string;
35
+ } | {
36
+ ok: false;
37
+ reason: string;
38
+ };
39
+ export declare function evaluateEditGate(input: {
40
+ paths: readonly string[];
41
+ mode: ActivationMode;
42
+ criticalPaths: readonly string[];
43
+ approved: readonly EditGateApproval[];
44
+ }): EditGateDecision;
45
+ /** Human-readable rendering; pure formatting. */
46
+ export declare function formatEditGate(decision: EditGateDecision): string;
47
+ //# sourceMappingURL=edit-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-gate.d.ts","sourceRoot":"","sources":["../../src/governance/edit-gate.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,cAAc,CAAC;AAEnE,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuBzG;AAKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACvC,GAAG,gBAAgB,CAgGnB;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAYjE"}
@@ -0,0 +1,156 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Edit Gate (mode-based path governance)
3
+ // ============================================================
4
+ // Wires the `mode` and `criticalPaths` configuration into a deterministic
5
+ // pre-edit decision agents can consult before touching the repository:
6
+ //
7
+ // - opt-in (default): everything is allowed; critical paths are flagged
8
+ // informationally.
9
+ // - suggest: everything is allowed; uncovered critical paths produce a
10
+ // non-blocking nudge toward the proposal workflow.
11
+ // - enforce: critical paths are only editable when an approved,
12
+ // controlled, or executed proposal declares them in affectedPaths.
13
+ //
14
+ // Pure: no I/O, no clock, no host SDK. The host handler feeds it the
15
+ // project config and the approved proposals; the model decides.
16
+ import { isCriticalPath } from "../config.js";
17
+ const AUTHORITY_STATUSES = new Set(["approved", "controlled", "executed"]);
18
+ /**
19
+ * Lexically normalize a repository-relative path so glob matching cannot be
20
+ * evaded by spelling variants (absolute paths, `./` prefixes, `a/../b`
21
+ * segments, duplicate slashes). Fail closed: anything that cannot be
22
+ * normalized to a deterministic in-repo path is refused, never allowed.
23
+ */
24
+ export function normalizeEditPath(raw) {
25
+ if (raw.length === 0)
26
+ return { ok: false, reason: "empty path" };
27
+ if (raw.startsWith("/") || /^[A-Za-z]:[\\/]/.test(raw)) {
28
+ return { ok: false, reason: "absolute paths are not supported — pass repository-relative paths" };
29
+ }
30
+ if (raw.includes("\\")) {
31
+ return { ok: false, reason: "backslashes are not supported — use forward slashes" };
32
+ }
33
+ const segments = [];
34
+ for (const segment of raw.split("/")) {
35
+ if (segment.length === 0 || segment === ".")
36
+ continue;
37
+ if (segment === "..") {
38
+ if (segments.length === 0) {
39
+ return { ok: false, reason: "path escapes the repository root" };
40
+ }
41
+ segments.pop();
42
+ continue;
43
+ }
44
+ segments.push(segment);
45
+ }
46
+ if (segments.length === 0)
47
+ return { ok: false, reason: "path normalizes to the repository root" };
48
+ return { ok: true, path: segments.join("/") };
49
+ }
50
+ const isAuthority = (approval) => AUTHORITY_STATUSES.has(approval.status) && Boolean(approval.affectedPaths?.length);
51
+ export function evaluateEditGate(input) {
52
+ // Fail open on unknown modes, consistent with canEditWithoutProposal():
53
+ // only an explicit "enforce" ever blocks. loadConfig merges unvalidated
54
+ // JSON, so a typo in .dao/config.json must not lock the repository.
55
+ const mode = input.mode === "enforce" || input.mode === "suggest" ? input.mode : "opt-in";
56
+ const authorities = input.approved.filter(isAuthority);
57
+ const seen = new Set();
58
+ const verdicts = [];
59
+ for (const raw of input.paths) {
60
+ const trimmed = raw.trim();
61
+ if (trimmed.length === 0)
62
+ continue;
63
+ // Unmatchable spellings are refused in every mode — a path the gate
64
+ // cannot normalize must never come back as allowed.
65
+ const normalized = normalizeEditPath(trimmed);
66
+ if (!normalized.ok) {
67
+ verdicts.push({
68
+ path: trimmed,
69
+ critical: false,
70
+ allowed: false,
71
+ reason: `unmatchable path: ${normalized.reason}`,
72
+ });
73
+ continue;
74
+ }
75
+ const path = normalized.path;
76
+ if (seen.has(path))
77
+ continue;
78
+ seen.add(path);
79
+ const critical = isCriticalPath(path, [...input.criticalPaths]);
80
+ const covering = critical
81
+ ? authorities.find((approval) => isCriticalPath(path, approval.affectedPaths ?? []))
82
+ : undefined;
83
+ if (!critical) {
84
+ verdicts.push({ path, critical, allowed: true, reason: "not a critical path" });
85
+ continue;
86
+ }
87
+ if (mode === "opt-in") {
88
+ verdicts.push({
89
+ path,
90
+ critical,
91
+ allowed: true,
92
+ reason: covering
93
+ ? `critical path, covered by approved proposal #${covering.proposalId}`
94
+ : "critical path (mode is opt-in: edits allowed, proposal optional)",
95
+ });
96
+ continue;
97
+ }
98
+ if (mode === "suggest") {
99
+ verdicts.push({
100
+ path,
101
+ critical,
102
+ allowed: true,
103
+ reason: covering
104
+ ? `critical path, covered by approved proposal #${covering.proposalId}`
105
+ : "critical path — consider governing this change with a proposal",
106
+ ...(covering ? { coveredByProposalId: covering.proposalId } : {}),
107
+ });
108
+ continue;
109
+ }
110
+ // enforce
111
+ if (covering) {
112
+ verdicts.push({
113
+ path,
114
+ critical,
115
+ allowed: true,
116
+ reason: `critical path covered by approved proposal #${covering.proposalId}`,
117
+ coveredByProposalId: covering.proposalId,
118
+ });
119
+ }
120
+ else {
121
+ verdicts.push({
122
+ path,
123
+ critical,
124
+ allowed: false,
125
+ reason: "enforce mode: critical path without an approved proposal",
126
+ });
127
+ }
128
+ }
129
+ const denied = verdicts.filter((verdict) => !verdict.allowed);
130
+ const uncoveredCritical = verdicts.filter((verdict) => verdict.critical && !verdict.coveredByProposalId);
131
+ let guidance = null;
132
+ if (mode === "suggest" && uncoveredCritical.length > 0) {
133
+ guidance =
134
+ "Suggestion: create a proposal (`dao_propose`) covering these critical paths and deliberate it before proceeding.";
135
+ }
136
+ else if (mode === "enforce" && denied.length > 0) {
137
+ guidance =
138
+ "Blocked by enforce mode: create a proposal (`dao_propose`) with these paths in affectedPaths, deliberate, and get it approved before editing.";
139
+ }
140
+ return { mode, allowed: denied.length === 0, verdicts, guidance };
141
+ }
142
+ /** Human-readable rendering; pure formatting. */
143
+ export function formatEditGate(decision) {
144
+ const header = decision.allowed ? "# ✅ Edit Gate — Allowed" : `# 🛑 Edit Gate — Blocked (${decision.mode} mode)`;
145
+ const rows = decision.verdicts
146
+ .map((verdict) => {
147
+ const flag = verdict.allowed ? "✅" : "❌";
148
+ const critical = verdict.critical ? " [critical]" : "";
149
+ const covered = verdict.coveredByProposalId ? ` (covered by #${verdict.coveredByProposalId})` : "";
150
+ return `- ${flag} \`${verdict.path}\`${critical}${covered} — ${verdict.reason}`;
151
+ })
152
+ .join("\n");
153
+ const guidance = decision.guidance ? `\n\n${decision.guidance}` : "";
154
+ return `${header}\n\nMode: **${decision.mode}**\n\n${rows}${guidance}`;
155
+ }
156
+ //# sourceMappingURL=edit-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-gate.js","sourceRoot":"","sources":["../../src/governance/edit-gate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  export * from "./agents.js";
2
2
  export * from "./amendments.js";
3
+ export * from "./delegation.machine.js";
4
+ export * from "./delegation.utils.js";
5
+ export * from "./edit-gate.js";
3
6
  export * from "./lifecycle.js";
4
7
  export * from "./proposal.machine.js";
5
8
  export * from "./proposal.utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -1,6 +1,9 @@
1
1
  // Governance Layer (L1) — Proposals, Agents, Voting, Lifecycle, Amendments
2
2
  export * from "./agents.js";
3
3
  export * from "./amendments.js";
4
+ export * from "./delegation.machine.js";
5
+ export * from "./delegation.utils.js";
6
+ export * from "./edit-gate.js";
4
7
  export * from "./lifecycle.js";
5
8
  export * from "./proposal.machine.js";
6
9
  export * from "./proposal.utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -1,10 +1,4 @@
1
1
  import type { Proposal, ProposalStatus, RiskZone } from "../types/index.js";
2
- export declare function canTransition(from: ProposalStatus, to: ProposalStatus): boolean;
3
- export declare function transitionProposal(proposal: Proposal, action: "deliberate" | "approve" | "reject" | "control" | "execute" | "fail"): {
4
- success: boolean;
5
- newStatus?: ProposalStatus;
6
- error?: string;
7
- };
8
2
  export declare function classifyRiskZone(proposal: Proposal): RiskZone;
9
3
  export declare function getRequiredApprovals(zone: RiskZone): number;
10
4
  export declare function requiresSecurityReview(zone: RiskZone): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/governance/lifecycle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAe5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAE/E;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAC3E;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBlE;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CA4B7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE9D;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAW1D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEnE"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/governance/lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK5E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CA4B7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE9D;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAW1D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEnE"}
@@ -1,37 +1,13 @@
1
1
  // ============================================================
2
- // Swarm DAO Core — Proposal Lifecycle & State Machine
2
+ // Swarm DAO Core — Proposal Lifecycle Helpers
3
+ // ------------------------------------------------------------
4
+ // Status transitions live in `proposal.machine.ts` (XState) and
5
+ // are applied via `dispatchProposalEvent` (proposal.utils.ts).
6
+ // This module keeps the pure, side-effect-free helpers that the
7
+ // machine guards and the UI consume: risk classification, human
8
+ // approval thresholds, security-review requirements, and labels.
3
9
  // ============================================================
4
10
  import { PROPOSAL_COUNCIL, PROPOSAL_TYPE, RISK_ZONE_DEFINITIONS } from "../types/index.js";
5
- // ── Transitions ──────────────────────────────────────────────
6
- const VALID_TRANSITIONS = {
7
- open: ["deliberating"],
8
- deliberating: ["approved", "rejected"],
9
- approved: ["controlled", "rejected", "failed"],
10
- controlled: ["executed", "failed"],
11
- rejected: [],
12
- executed: [],
13
- failed: [],
14
- };
15
- export function canTransition(from, to) {
16
- return VALID_TRANSITIONS[from]?.includes(to) ?? false;
17
- }
18
- export function transitionProposal(proposal, action) {
19
- const transitions = {
20
- open: { deliberate: "deliberating" },
21
- deliberating: { approve: "approved", reject: "rejected" },
22
- approved: { control: "controlled", reject: "rejected", fail: "failed" },
23
- controlled: { execute: "executed", fail: "failed" },
24
- };
25
- const newStatus = transitions[proposal.status]?.[action];
26
- if (!newStatus) {
27
- return { success: false, error: `Cannot ${action} from ${proposal.status}` };
28
- }
29
- proposal.status = newStatus;
30
- if (["rejected", "executed", "failed"].includes(newStatus)) {
31
- proposal.resolvedAt = new Date().toISOString();
32
- }
33
- return { success: true, newStatus };
34
- }
35
11
  // ── Risk Zone Classification ─────────────────────────────────
36
12
  export function classifyRiskZone(proposal) {
37
13
  // Security and governance changes are classified as red
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/governance/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/governance/lifecycle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8CAA8C;AAC9C,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAC/D,gEAAgE;AAChE,gEAAgE;AAChE,iEAAiE;AACjE,+DAA+D;AAG/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,gEAAgE;AAEhE,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,wDAAwD;IACxD,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,eAAe,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,iBAAiB,EAAE,CAAC;QACzG,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oDAAoD;IACpD,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;IACvE,MAAM,WAAW,GAAG;QAClB,MAAM;QACN,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,QAAQ;QACR,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;KACX,CAAC;IACF,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wBAAwB;IACxB,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC;IACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,eAAe;QAAE,OAAO,QAAQ,CAAC;IAErE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC;AAC5D,CAAC;AAED,gEAAgE;AAEhE,MAAM,UAAU,WAAW,CAAC,MAAsB;IAChD,MAAM,MAAM,GAAmC;QAC7C,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,kBAAkB;QAChC,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,gBAAgB;QAC5B,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,WAAW;KACpB,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC"}
@@ -1,131 +1,3 @@
1
- import type { PipelineStage, Proposal, ProposalStatus, RiskZone } from "../types/index.js";
2
- export interface ProposalContext {
3
- proposal: Proposal;
4
- stage: PipelineStage;
5
- status: ProposalStatus;
6
- riskZone?: RiskZone;
7
- deliberationCount: number;
8
- retryCount: number;
9
- errorMessage?: string;
10
- lastTransitionTime: string;
11
- }
12
- export interface ProposalMachineInput {
13
- proposal: Proposal;
14
- stage?: PipelineStage;
15
- status?: ProposalStatus;
16
- riskZone?: RiskZone;
17
- deliberationCount?: number;
18
- retryCount?: number;
19
- errorMessage?: string;
20
- lastTransitionTime?: string;
21
- }
22
- export type ProposalEvent = {
23
- type: "SUBMIT";
24
- } | {
25
- type: "QUALIFY";
26
- } | {
27
- type: "ANALYZE";
28
- } | {
29
- type: "CRITIQUE";
30
- } | {
31
- type: "SCORE";
32
- } | {
33
- type: "SEND_TO_COUNCIL";
34
- } | {
35
- type: "VOTE";
36
- } | {
37
- type: "APPROVE";
38
- } | {
39
- type: "REJECT";
40
- } | {
41
- type: "REQUEST_SPEC";
42
- } | {
43
- type: "REVIEW_SPEC";
44
- } | {
45
- type: "APPROVE_SPEC";
46
- } | {
47
- type: "EXECUTION_GATE_PASS";
48
- } | {
49
- type: "EXECUTION_GATE_FAIL";
50
- } | {
51
- type: "EXECUTE";
52
- } | {
53
- type: "EXECUTION_SUCCESS";
54
- } | {
55
- type: "EXECUTION_FAILED";
56
- } | {
57
- type: "POSTMORTEM";
58
- } | {
59
- type: "RETRY";
60
- } | {
61
- type: "DISCARD";
62
- } | {
63
- type: "ERROR";
64
- message: string;
65
- };
66
- export declare const proposalMachine: import("xstate").StateMachine<ProposalContext, {
67
- type: "SUBMIT";
68
- } | {
69
- type: "QUALIFY";
70
- } | {
71
- type: "ANALYZE";
72
- } | {
73
- type: "CRITIQUE";
74
- } | {
75
- type: "SCORE";
76
- } | {
77
- type: "SEND_TO_COUNCIL";
78
- } | {
79
- type: "VOTE";
80
- } | {
81
- type: "APPROVE";
82
- } | {
83
- type: "REJECT";
84
- } | {
85
- type: "REQUEST_SPEC";
86
- } | {
87
- type: "REVIEW_SPEC";
88
- } | {
89
- type: "APPROVE_SPEC";
90
- } | {
91
- type: "EXECUTION_GATE_PASS";
92
- } | {
93
- type: "EXECUTION_GATE_FAIL";
94
- } | {
95
- type: "EXECUTE";
96
- } | {
97
- type: "EXECUTION_SUCCESS";
98
- } | {
99
- type: "EXECUTION_FAILED";
100
- } | {
101
- type: "POSTMORTEM";
102
- } | {
103
- type: "RETRY";
104
- } | {
105
- type: "DISCARD";
106
- } | {
107
- type: "ERROR";
108
- message: string;
109
- }, {}, never, never, never, never, "intake" | "qualification" | "analysis" | "critique" | "scoring" | "council" | "postmortem" | "rejected" | "draft" | "voting" | "specDraft" | "specReview" | "executionGate" | "executing" | "executionError" | "completed", string, ProposalMachineInput, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
110
- id: "proposalLifecycle";
111
- states: {
112
- readonly draft: {};
113
- readonly intake: {};
114
- readonly qualification: {};
115
- readonly analysis: {};
116
- readonly critique: {};
117
- readonly scoring: {};
118
- readonly council: {};
119
- readonly voting: {};
120
- readonly specDraft: {};
121
- readonly specReview: {};
122
- readonly executionGate: {};
123
- readonly executing: {};
124
- readonly executionError: {};
125
- readonly postmortem: {};
126
- readonly rejected: {};
127
- readonly completed: {};
128
- };
129
- }>;
130
- export type ProposalMachine = typeof proposalMachine;
1
+ /** @deprecated Behavioral models now live in `/models`, the source of truth. */
2
+ export * from "../models/proposal.machine.js";
131
3
  //# sourceMappingURL=proposal.machine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal.machine.d.ts","sourceRoot":"","sources":["../../src/governance/proposal.machine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAMvC,eAAO,MAAM,eAAe;UA1BhB,QAAQ;;UACR,SAAS;;UACT,SAAS;;UACT,UAAU;;UACV,OAAO;;UACP,iBAAiB;;UACjB,MAAM;;UACN,SAAS;;UACT,QAAQ;;UACR,cAAc;;UACd,aAAa;;UACb,cAAc;;UACd,qBAAqB;;UACrB,qBAAqB;;UACrB,SAAS;;UACT,mBAAmB;;UACnB,kBAAkB;;UAClB,YAAY;;UACZ,OAAO;;UACP,SAAS;;UACT,OAAO;aAAW,MAAM;;;;;;;;;;;;;;;;;;;;;EA2YlC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"proposal.machine.d.ts","sourceRoot":"","sources":["../../src/governance/proposal.machine.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc,+BAA+B,CAAC"}