@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
@@ -1,181 +1,3 @@
1
- // ============================================================
2
- // Swarm DAO Core — Proposal Lifecycle State Machine
3
- // ------------------------------------------------------------
4
- // Single source of truth for proposal status transitions.
5
- //
6
- // Discipline: "Le modèle décide." The LLM (council/votes) produces
7
- // signals (a TallyResult, a ControlCheckResult). Those signals are
8
- // carried as event payloads and evaluated by guards. No call site
9
- // chooses a target status — it only emits the event that matches
10
- // what happened in the world. The machine owns every edge.
11
- //
12
- // The 7 machine states map 1:1 to `ProposalStatus`. There is no
13
- // hidden `executing`/`postmortem` pipeline: the runtime is
14
- // synchronous (deliberation is one tool call, execution is one
15
- // tool call), so those intermediate states had no observer and
16
- // were removed during distill.
17
- // ============================================================
18
- import { assign, setup } from "xstate";
19
- // ── Terminal statuses ────────────────────────────────────────
20
- export const PROPOSAL_FINAL_STATUSES = new Set(["executed", "failed", "rejected"]);
21
- export function isProposalFinal(status) {
22
- return PROPOSAL_FINAL_STATUSES.has(status);
23
- }
24
- // ── Machine ──────────────────────────────────────────────────
25
- //
26
- // Guards are the two real permission boundaries of the DAO:
27
- // • tallyApproved — the council's vote authorized approval.
28
- // • gatesPassed — quality control cleared the proposal for execution.
29
- //
30
- // Risk-zone / mandatory-dry-run is enforced upstream by the
31
- // `mandatory-dry-run` control gate (control/gates.ts), which makes
32
- // `ControlCheckResult.allGatesPassed` false for red-zone proposals
33
- // without a dry-run. Duplicating that check here would be unearned
34
- // complexity — the invariant already lives at the control boundary.
35
- const proposalSetup = setup({
36
- types: {
37
- context: {},
38
- input: {},
39
- events: {},
40
- },
41
- guards: {
42
- tallyApproved: ({ event }) => event.type === "APPROVE" && event.tally.approved === true,
43
- gatesPassed: ({ event }) => event.type === "CONTROL_PASS" && event.result.allGatesPassed === true && event.result.blockerCount === 0,
44
- },
45
- });
46
- function buildProposalMachine(initial) {
47
- return proposalSetup.createMachine({
48
- id: "proposalLifecycle",
49
- initial,
50
- context: ({ input }) => ({
51
- proposal: input.proposal,
52
- lastTransitionTime: input.lastTransitionTime ?? new Date().toISOString(),
53
- }),
54
- // Note on the escape hatches (DISCARD / ERROR): they are inlined
55
- // into every non-terminal state rather than declared at the root
56
- // `on:`. XState v5 does not resolve root-level `on:` targets that
57
- // reference top-level child states — it reads them as relative to
58
- // the root's (non-existent) parent and rejects the machine. Final
59
- // states (`executed`, `failed`, `rejected`) are `type: "final"`
60
- // and ignore events once the machine is done, so the hatches are
61
- // intentionally absent there.
62
- states: {
63
- open: {
64
- on: {
65
- DELIBERATE: {
66
- target: "deliberating",
67
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
68
- },
69
- DISCARD: {
70
- target: "rejected",
71
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
72
- },
73
- ERROR: {
74
- target: "failed",
75
- actions: assign({
76
- lastTransitionTime: () => new Date().toISOString(),
77
- errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
78
- }),
79
- },
80
- },
81
- },
82
- deliberating: {
83
- on: {
84
- APPROVE: {
85
- target: "approved",
86
- guard: "tallyApproved",
87
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
88
- },
89
- REJECT: {
90
- target: "rejected",
91
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
92
- },
93
- DISCARD: {
94
- target: "rejected",
95
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
96
- },
97
- ERROR: {
98
- target: "failed",
99
- actions: assign({
100
- lastTransitionTime: () => new Date().toISOString(),
101
- errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
102
- }),
103
- },
104
- },
105
- },
106
- approved: {
107
- on: {
108
- CONTROL_PASS: {
109
- target: "controlled",
110
- guard: "gatesPassed",
111
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
112
- },
113
- CONTROL_FAIL: {
114
- target: "failed",
115
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
116
- },
117
- REJECT: {
118
- target: "rejected",
119
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
120
- },
121
- FAIL: {
122
- target: "failed",
123
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
124
- },
125
- DISCARD: {
126
- target: "rejected",
127
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
128
- },
129
- ERROR: {
130
- target: "failed",
131
- actions: assign({
132
- lastTransitionTime: () => new Date().toISOString(),
133
- errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
134
- }),
135
- },
136
- },
137
- },
138
- controlled: {
139
- on: {
140
- EXECUTE_SUCCESS: {
141
- target: "executed",
142
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
143
- },
144
- FAIL: {
145
- target: "failed",
146
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
147
- },
148
- DISCARD: {
149
- target: "rejected",
150
- actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
151
- },
152
- ERROR: {
153
- target: "failed",
154
- actions: assign({
155
- lastTransitionTime: () => new Date().toISOString(),
156
- errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
157
- }),
158
- },
159
- },
160
- },
161
- executed: { type: "final" },
162
- failed: { type: "final" },
163
- rejected: { type: "final" },
164
- },
165
- });
166
- }
167
- // ── Factory (with memoization) ───────────────────────────────
168
- //
169
- // A machine is created per starting status so an actor can be
170
- // rehydrated at the persisted status of a proposal. The machine
171
- // definition is identical; only `initial` differs.
172
- const machineCache = new Map();
173
- export function createProposalMachine(initial) {
174
- let machine = machineCache.get(initial);
175
- if (!machine) {
176
- machine = buildProposalMachine(initial);
177
- machineCache.set(initial, machine);
178
- }
179
- return machine;
180
- }
1
+ /** @deprecated Behavioral models now live in `/models`, the source of truth. */
2
+ export * from "../models/proposal.machine.js";
181
3
  //# sourceMappingURL=proposal.machine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal.machine.js","sourceRoot":"","sources":["../../src/governance/proposal.machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposal.machine.js","sourceRoot":"","sources":["../../src/governance/proposal.machine.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc,+BAA+B,CAAC"}
@@ -1,5 +1,6 @@
1
+ import { type ProposalEvent } from "../models/proposal.machine.js";
2
+ import type { ClockPort } from "../ports/clock.js";
1
3
  import type { Proposal, ProposalStatus } from "../types/index.js";
2
- import { type ProposalEvent } from "./proposal.machine.js";
3
4
  export type DispatchResult = {
4
5
  ok: true;
5
6
  status: ProposalStatus;
@@ -16,5 +17,7 @@ export type DispatchResult = {
16
17
  * from the current status — the caller must surface that error and
17
18
  * MUST NOT mutate the status itself.
18
19
  */
19
- export declare function dispatchProposalEvent(proposal: Proposal, event: ProposalEvent): DispatchResult;
20
+ export declare function dispatchProposalEvent(proposal: Proposal, event: ProposalEvent, options?: {
21
+ clock?: ClockPort;
22
+ }): DispatchResult;
20
23
  //# sourceMappingURL=proposal.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal.utils.d.ts","sourceRoot":"","sources":["../../src/governance/proposal.utils.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,GAAG,cAAc,CAsC9F"}
1
+ {"version":3,"file":"proposal.utils.d.ts","sourceRoot":"","sources":["../../src/governance/proposal.utils.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAO,GAClC,cAAc,CAwChB"}
@@ -9,7 +9,8 @@
9
9
  // status back to the proposal. There is no other status writer.
10
10
  // ============================================================
11
11
  import { createActor } from "xstate";
12
- import { createProposalMachine, isProposalFinal, } from "./proposal.machine.js";
12
+ import { createProposalMachine, isProposalFinal, } from "../models/proposal.machine.js";
13
+ import { systemClock } from "../ports/clock.js";
13
14
  /**
14
15
  * Apply a lifecycle event to a proposal. Enforces the machine's
15
16
  * topology AND its guards. On success, `proposal.status` (and
@@ -19,7 +20,7 @@ import { createProposalMachine, isProposalFinal, } from "./proposal.machine.js";
19
20
  * from the current status — the caller must surface that error and
20
21
  * MUST NOT mutate the status itself.
21
22
  */
22
- export function dispatchProposalEvent(proposal, event) {
23
+ export function dispatchProposalEvent(proposal, event, options = {}) {
23
24
  // Terminal states are final: no event may leave them. This guard
24
25
  // makes the invariant explicit rather than relying on the actor's
25
26
  // "done" status, so the model stays correct regardless of how the
@@ -30,11 +31,13 @@ export function dispatchProposalEvent(proposal, event) {
30
31
  error: `Proposal is in terminal status "${proposal.status}"; no transitions are permitted.`,
31
32
  };
32
33
  }
34
+ const transitionTime = (options.clock ?? systemClock).now();
33
35
  const machine = createProposalMachine(proposal.status);
34
36
  const actor = createActor(machine, {
35
37
  input: {
36
38
  proposal,
37
- lastTransitionTime: new Date().toISOString(),
39
+ transitionTime,
40
+ lastTransitionTime: transitionTime,
38
41
  },
39
42
  });
40
43
  actor.start();
@@ -49,7 +52,7 @@ export function dispatchProposalEvent(proposal, event) {
49
52
  const status = actor.getSnapshot().value;
50
53
  proposal.status = status;
51
54
  if (isProposalFinal(status) && !proposal.resolvedAt) {
52
- proposal.resolvedAt = new Date().toISOString();
55
+ proposal.resolvedAt = transitionTime;
53
56
  }
54
57
  return { ok: true, status };
55
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proposal.utils.js","sourceRoot":"","sources":["../../src/governance/proposal.utils.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAC/D,6DAA6D;AAC7D,kEAAkE;AAClE,iEAAiE;AACjE,kEAAkE;AAClE,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EACL,qBAAqB,EACrB,eAAe,GAGhB,MAAM,uBAAuB,CAAC;AAI/B;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB,EAAE,KAAoB;IAC5E,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mCAAmC,QAAQ,CAAC,MAAM,kCAAkC;SAC5F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE;QACjC,KAAK,EAAE;YACL,QAAQ;YACR,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACd;KACjC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,mCAAmC,QAAQ,CAAC,MAAM,IAAI;SAClF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAuB,CAAC;IAE3D,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,QAAQ,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"proposal.utils.js","sourceRoot":"","sources":["../../src/governance/proposal.utils.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAC/D,6DAA6D;AAC7D,kEAAkE;AAClE,iEAAiE;AACjE,kEAAkE;AAClE,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,eAAe,GAGhB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,KAAoB,EACpB,UAAiC,EAAE;IAEnC,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mCAAmC,QAAQ,CAAC,MAAM,kCAAkC;SAC5F,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE;QACjC,KAAK,EAAE;YACL,QAAQ;YACR,cAAc;YACd,kBAAkB,EAAE,cAAc;SACJ;KACjC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,mCAAmC,QAAQ,CAAC,MAAM,IAAI;SAClF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAuB,CAAC;IAE3D,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,QAAQ,CAAC,UAAU,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"voting.d.ts","sourceRoot":"","sources":["../../src/governance/voting.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAgB,MAAM,mBAAmB,CAAC;AAW3G,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI,GAAG,SAAS,CAclB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAG9E;AAID,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAgD7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAe5D"}
1
+ {"version":3,"file":"voting.d.ts","sourceRoot":"","sources":["../../src/governance/voting.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAgB,MAAM,mBAAmB,CAAC;AAW3G,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI,GAAG,SAAS,CAclB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAG9E;AAID,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAuD7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAe5D"}
@@ -29,21 +29,31 @@ export function parseVoteFromAgentOutput(output) {
29
29
  export function tallyVotes(proposal, config) {
30
30
  const votes = proposal.votes || [];
31
31
  const totalAgents = proposal.agentOutputs?.length || votes.length;
32
- const weightedFor = votes
33
- .filter((v) => v.position === "for")
34
- .reduce((sum, v) => sum + normalizeVoteWeight(v.weight), 0);
35
- const weightedAgainst = votes
36
- .filter((v) => v.position === "against")
37
- .reduce((sum, v) => sum + normalizeVoteWeight(v.weight), 0);
38
- const weightedAbstain = votes
39
- .filter((v) => v.position === "abstain")
40
- .reduce((sum, v) => sum + normalizeVoteWeight(v.weight), 0);
32
+ // Single pass over votes: accumulate weighted totals + voting-agent count.
33
+ let weightedFor = 0;
34
+ let weightedAgainst = 0;
35
+ let weightedAbstain = 0;
36
+ let totalObservedWeight = 0;
37
+ let votingAgents = 0;
38
+ for (const v of votes) {
39
+ const w = normalizeVoteWeight(v.weight);
40
+ totalObservedWeight += w;
41
+ if (v.position === "for") {
42
+ weightedFor += w;
43
+ votingAgents++;
44
+ }
45
+ else if (v.position === "against") {
46
+ weightedAgainst += w;
47
+ votingAgents++;
48
+ }
49
+ else {
50
+ weightedAbstain += w;
51
+ }
52
+ }
41
53
  const totalVotingWeight = weightedFor + weightedAgainst + weightedAbstain;
42
- const votingAgents = votes.filter((v) => v.position !== "abstain").length;
43
- // Quorum check: % of total agent weight that participated
44
- const totalPossibleWeight = totalAgents > 0
45
- ? votes.reduce((sum, v) => sum + normalizeVoteWeight(v.weight), 0) + (totalAgents - votes.length) * 1
46
- : totalVotingWeight;
54
+ // Quorum check: % of total agent weight that participated.
55
+ // Unobserved agents (totalAgents - votes.length) each contribute default weight 1.
56
+ const totalPossibleWeight = totalAgents > 0 ? totalObservedWeight + (totalAgents - votes.length) * 1 : totalVotingWeight;
47
57
  const quorumPercent = totalPossibleWeight > 0 ? Math.round((totalVotingWeight / totalPossibleWeight) * 100) : 0;
48
58
  const quorumMet = quorumPercent >= config.quorumPercent;
49
59
  // Approval: % of non-abstain weight that voted for
@@ -1 +1 @@
1
- {"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/governance/voting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/governance/voting.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"github-config.d.ts","sourceRoot":"","sources":["../../src/host-tools/github-config.ts"],"names":[],"mappings":"AAIA,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAenF;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAYf"}
1
+ {"version":3,"file":"github-config.d.ts","sourceRoot":"","sources":["../../src/host-tools/github-config.ts"],"names":[],"mappings":"AAKA,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBnF;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -1,18 +1,29 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { configureGitHub, isGitHubEnabled } from "../integrations/github.js";
4
+ import { logger } from "../observability/logging.js";
4
5
  export async function loadGitHubConfigFromDaoRoot(daoRoot) {
5
6
  const configPath = path.join(daoRoot, "config.json");
6
7
  try {
7
8
  const configData = JSON.parse(await fs.readFile(configPath, "utf-8"));
8
9
  const github = configData.github;
9
10
  if (github?.owner && github?.repo) {
10
- configureGitHub({ ...github, enabled: github.enabled ?? true });
11
+ // The persisted token is redacted on save; the live token comes from
12
+ // DAO_GITHUB_TOKEN (the mechanism the config output advertises). A
13
+ // redacted literal must never be sent as a credential.
14
+ const persisted = typeof github.token === "string" ? github.token : undefined;
15
+ const token = persisted && persisted !== "[REDACTED]" ? persisted : process.env.DAO_GITHUB_TOKEN;
16
+ if (!token) {
17
+ logger.debug("loadGitHubConfigFromDaoRoot: token redacted and DAO_GITHUB_TOKEN not set");
18
+ return false;
19
+ }
20
+ configureGitHub({ owner: github.owner, repo: github.repo, token, enabled: github.enabled ?? true });
11
21
  return isGitHubEnabled();
12
22
  }
13
23
  }
14
- catch {
15
- // no config file
24
+ catch (error) {
25
+ // Missing or invalid config is a normal cold-start state; log at debug.
26
+ logger.debug("loadGitHubConfigFromDaoRoot: no config (%s)", error instanceof Error ? error.message : String(error));
16
27
  }
17
28
  return false;
18
29
  }
@@ -23,8 +34,9 @@ export async function saveGitHubConfigToDaoRoot(daoRoot, githubConfig) {
23
34
  try {
24
35
  configData = JSON.parse(await fs.readFile(configPath, "utf-8"));
25
36
  }
26
- catch {
27
- // no existing config
37
+ catch (error) {
38
+ // No existing config yet; this is expected on first write.
39
+ logger.debug("saveGitHubConfigToDaoRoot: starting fresh config (%s)", error instanceof Error ? error.message : String(error));
28
40
  }
29
41
  configData.github = { ...githubConfig, enabled: true, token: "[REDACTED]" };
30
42
  await fs.writeFile(configPath, JSON.stringify(configData, null, 2), "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"github-config.js","sourceRoot":"","sources":["../../src/host-tools/github-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAe;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAEnE,CAAC;QACF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YAClC,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,eAAe,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,YAA4D;IAE5D,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,UAAU,GAA4B,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAA4B,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IACD,UAAU,CAAC,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"github-config.js","sourceRoot":"","sources":["../../src/host-tools/github-config.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { DaoStateRepositoryPort } from "../ports/repository.js";
1
2
  import type { AmendmentPayload, HostAdapter, ProposalType } from "../types/index.js";
2
3
  import { PROPOSAL_TYPES } from "../types/index.js";
3
4
  import { DAO_ONBOARDING_MESSAGE } from "./messages.js";
@@ -12,6 +13,7 @@ export interface DaoToolContext {
12
13
  failOnGateFailure?: boolean;
13
14
  getSessionModel?: () => string | undefined;
14
15
  hostDefaultModel?: string | undefined;
16
+ repository?: DaoStateRepositoryPort;
15
17
  onDeliberationProgress?: (update: {
16
18
  agentName: string;
17
19
  phase: string;
@@ -35,31 +37,32 @@ export interface DaoProposeArgs {
35
37
  rollbackConditions?: string[];
36
38
  affectedPaths?: string[];
37
39
  }
38
- export declare function handleDaoPropose(args: DaoProposeArgs): Promise<string>;
40
+ export declare function handleDaoPropose(args: DaoProposeArgs, repository?: DaoStateRepositoryPort): Promise<string>;
39
41
  export declare function handleDaoDeliberate(ctx: DaoToolContext, proposalId: number): Promise<string>;
40
42
  export declare function handleDaoRecordOutputs(ctx: DaoToolContext, proposalId: number, outputs: RecordOutputInput[]): Promise<string>;
41
43
  export declare function handleDaoControl(ctx: DaoToolContext, proposalId: number): Promise<string>;
42
- export declare function handleDaoExecute(proposalId: number): Promise<string>;
44
+ export declare function handleDaoExecute(ctx: DaoToolContext, proposalId: number): Promise<string>;
43
45
  export declare function handleDaoShip(ctx: DaoToolContext, proposalId: number, options?: {
44
46
  cascade?: boolean;
45
47
  force?: boolean;
46
48
  }): Promise<string>;
49
+ export declare function handleDaoCheckEdit(ctx: DaoToolContext, paths: readonly string[]): Promise<string>;
47
50
  export declare function handleDaoList(): Promise<string>;
48
51
  export declare function handleDaoAgents(): Promise<string>;
49
52
  export declare function handleDaoPlan(proposalId: number, controlToolName: ControlToolName): Promise<string>;
50
53
  export declare function handleDaoArtefacts(proposalId: number): Promise<string>;
51
- export declare function handleDaoDryRun(proposalId: number): Promise<string>;
52
- export declare function handleDaoRollback(proposalId: number): Promise<string>;
53
- export declare function handleDaoDashboard(): Promise<string>;
54
+ export declare function handleDaoDryRun(proposalId: number, repository?: DaoStateRepositoryPort): Promise<string>;
55
+ export declare function handleDaoRollback(proposalId: number, repository?: DaoStateRepositoryPort): Promise<string>;
56
+ export declare function handleDaoDashboard(repository?: DaoStateRepositoryPort): Promise<string>;
54
57
  export declare function handleDaoRoundtable(ctx: DaoToolContext): Promise<string>;
55
58
  export declare function handleDaoAudit(proposalId?: number): Promise<string>;
56
- export declare function handleDaoRate(proposalId: number, score: 1 | 2 | 3 | 4 | 5, comment: string): Promise<string>;
59
+ export declare function handleDaoRate(proposalId: number, score: 1 | 2 | 3 | 4 | 5, comment: string, repository?: DaoStateRepositoryPort): Promise<string>;
57
60
  export declare function handleDaoUpdateProposal(proposalId: number, fields: {
58
61
  problemStatement?: string;
59
62
  acceptanceCriteria?: string[];
60
63
  successMetrics?: string[];
61
64
  rollbackConditions?: string[];
62
- }): Promise<string>;
65
+ }, repository?: DaoStateRepositoryPort): Promise<string>;
63
66
  export interface DaoAmendmentArgs {
64
67
  title: string;
65
68
  description: string;
@@ -75,13 +78,13 @@ export interface DaoAmendmentArgs {
75
78
  addGates?: string[];
76
79
  removeGates?: string[];
77
80
  }
78
- export declare function handleDaoProposeAmendment(args: DaoAmendmentArgs): Promise<string>;
79
- export declare function handleDaoConfigGithub(_ctx: DaoToolContext, args: {
81
+ export declare function handleDaoProposeAmendment(args: DaoAmendmentArgs, repository?: DaoStateRepositoryPort): Promise<string>;
82
+ export declare function handleDaoConfigGithub(ctx: DaoToolContext, args: {
80
83
  token: string;
81
84
  owner: string;
82
85
  repo: string;
83
86
  }): Promise<string>;
84
- export declare function handleDaoGithubCreateBranch(_ctx: DaoToolContext, proposalId: number): Promise<string>;
85
- export declare function handleDaoGithubOpenPr(_ctx: DaoToolContext, proposalId: number, headBranch: string): Promise<string>;
87
+ export declare function handleDaoGithubCreateBranch(ctx: DaoToolContext, proposalId: number): Promise<string>;
88
+ export declare function handleDaoGithubOpenPr(ctx: DaoToolContext, proposalId: number, headBranch: string): Promise<string>;
86
89
  export { DAO_ONBOARDING_MESSAGE, PROPOSAL_TYPES };
87
90
  //# sourceMappingURL=handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/host-tools/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/host-tools/handlers.ts"],"names":[],"mappings":"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"}