@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.
- package/dist/adapters/attention/fs-attention.store.d.ts +17 -0
- package/dist/adapters/attention/fs-attention.store.d.ts.map +1 -0
- package/dist/adapters/attention/fs-attention.store.js +59 -0
- package/dist/adapters/attention/fs-attention.store.js.map +1 -0
- package/dist/adapters/git-workspace.d.ts +26 -0
- package/dist/adapters/git-workspace.d.ts.map +1 -0
- package/dist/adapters/git-workspace.js +84 -0
- package/dist/adapters/git-workspace.js.map +1 -0
- package/dist/adapters/index.d.ts +7 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +7 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/persistence/file-dao-state.repository.d.ts +15 -0
- package/dist/adapters/persistence/file-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/file-dao-state.repository.js +85 -0
- package/dist/adapters/persistence/file-dao-state.repository.js.map +1 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts +10 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.js +14 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.js.map +1 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.d.ts +11 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.js +14 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.js.map +1 -0
- package/dist/adapters/ship-audit/fs-ship-audit.store.d.ts +12 -0
- package/dist/adapters/ship-audit/fs-ship-audit.store.d.ts.map +1 -0
- package/dist/adapters/ship-audit/fs-ship-audit.store.js +69 -0
- package/dist/adapters/ship-audit/fs-ship-audit.store.js.map +1 -0
- package/dist/application/index.d.ts +16 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +16 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/initialize-dao.use-case.d.ts +20 -0
- package/dist/application/initialize-dao.use-case.d.ts.map +1 -0
- package/dist/application/initialize-dao.use-case.js +17 -0
- package/dist/application/initialize-dao.use-case.js.map +1 -0
- package/dist/application/proposals/control-proposal.use-case.d.ts +23 -0
- package/dist/application/proposals/control-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/control-proposal.use-case.js +53 -0
- package/dist/application/proposals/control-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.d.ts +25 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.js +39 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/create-proposal.use-case.d.ts +34 -0
- package/dist/application/proposals/create-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/create-proposal.use-case.js +49 -0
- package/dist/application/proposals/create-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts +35 -0
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/deliberate-proposal.use-case.js +67 -0
- package/dist/application/proposals/deliberate-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/dry-run-proposal.use-case.d.ts +21 -0
- package/dist/application/proposals/dry-run-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/dry-run-proposal.use-case.js +20 -0
- package/dist/application/proposals/dry-run-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/execute-proposal.use-case.d.ts +29 -0
- package/dist/application/proposals/execute-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/execute-proposal.use-case.js +66 -0
- package/dist/application/proposals/execute-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/rate-proposal.use-case.d.ts +24 -0
- package/dist/application/proposals/rate-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/rate-proposal.use-case.js +33 -0
- package/dist/application/proposals/rate-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts +21 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts.map +1 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.js +65 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.js.map +1 -0
- package/dist/application/proposals/rollback-proposal.use-case.d.ts +20 -0
- package/dist/application/proposals/rollback-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/rollback-proposal.use-case.js +17 -0
- package/dist/application/proposals/rollback-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/round-table.use-case.d.ts +27 -0
- package/dist/application/proposals/round-table.use-case.d.ts.map +1 -0
- package/dist/application/proposals/round-table.use-case.js +55 -0
- package/dist/application/proposals/round-table.use-case.js.map +1 -0
- package/dist/application/proposals/ship-proposal.use-case.d.ts +26 -0
- package/dist/application/proposals/ship-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/ship-proposal.use-case.js +60 -0
- package/dist/application/proposals/ship-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/start-deliberation.use-case.d.ts +21 -0
- package/dist/application/proposals/start-deliberation.use-case.d.ts.map +1 -0
- package/dist/application/proposals/start-deliberation.use-case.js +30 -0
- package/dist/application/proposals/start-deliberation.use-case.js.map +1 -0
- package/dist/application/proposals/transition-proposal.use-case.d.ts +20 -0
- package/dist/application/proposals/transition-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/transition-proposal.use-case.js +19 -0
- package/dist/application/proposals/transition-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/update-proposal.use-case.d.ts +26 -0
- package/dist/application/proposals/update-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/update-proposal.use-case.js +19 -0
- package/dist/application/proposals/update-proposal.use-case.js.map +1 -0
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +18 -3
- package/dist/commands/registry.js.map +1 -1
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/control/gates.d.ts +4 -1
- package/dist/control/gates.d.ts.map +1 -1
- package/dist/control/gates.js +5 -10
- package/dist/control/gates.js.map +1 -1
- package/dist/delivery/dry-run.d.ts.map +1 -1
- package/dist/delivery/dry-run.js +3 -44
- package/dist/delivery/dry-run.js.map +1 -1
- package/dist/delivery/execution-isolation.d.ts +34 -0
- package/dist/delivery/execution-isolation.d.ts.map +1 -0
- package/dist/delivery/execution-isolation.js +97 -0
- package/dist/delivery/execution-isolation.js.map +1 -0
- package/dist/delivery/index.d.ts +2 -0
- package/dist/delivery/index.d.ts.map +1 -1
- package/dist/delivery/index.js +2 -0
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/plans.d.ts +3 -1
- package/dist/delivery/plans.d.ts.map +1 -1
- package/dist/delivery/plans.js +2 -2
- package/dist/delivery/plans.js.map +1 -1
- package/dist/delivery/ship-audit.d.ts +36 -0
- package/dist/delivery/ship-audit.d.ts.map +1 -0
- package/dist/delivery/ship-audit.js +155 -0
- package/dist/delivery/ship-audit.js.map +1 -0
- package/dist/domain/dry-run.d.ts +3 -0
- package/dist/domain/dry-run.d.ts.map +1 -0
- package/dist/domain/dry-run.js +28 -0
- package/dist/domain/dry-run.js.map +1 -0
- package/dist/domain/index.d.ts +6 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/governance/agents.d.ts.map +1 -1
- package/dist/governance/agents.js +107 -169
- package/dist/governance/agents.js.map +1 -1
- package/dist/governance/charter.d.ts +14 -0
- package/dist/governance/charter.d.ts.map +1 -0
- package/dist/governance/charter.js +65 -0
- package/dist/governance/charter.js.map +1 -0
- package/dist/governance/edit-gate.d.ts +47 -0
- package/dist/governance/edit-gate.d.ts.map +1 -0
- package/dist/governance/edit-gate.js +156 -0
- package/dist/governance/edit-gate.js.map +1 -0
- package/dist/governance/index.d.ts +1 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/proposal.machine.d.ts +2 -114
- package/dist/governance/proposal.machine.d.ts.map +1 -1
- package/dist/governance/proposal.machine.js +2 -180
- package/dist/governance/proposal.machine.js.map +1 -1
- package/dist/governance/proposal.utils.d.ts +5 -2
- package/dist/governance/proposal.utils.d.ts.map +1 -1
- package/dist/governance/proposal.utils.js +7 -4
- package/dist/governance/proposal.utils.js.map +1 -1
- package/dist/governance/voting.d.ts.map +1 -1
- package/dist/governance/voting.js +24 -14
- package/dist/governance/voting.js.map +1 -1
- package/dist/host-tools/github-config.d.ts.map +1 -1
- package/dist/host-tools/github-config.js +17 -5
- package/dist/host-tools/github-config.js.map +1 -1
- package/dist/host-tools/handlers.d.ts +14 -11
- package/dist/host-tools/handlers.d.ts.map +1 -1
- package/dist/host-tools/handlers.js +247 -341
- package/dist/host-tools/handlers.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/github.d.ts.map +1 -1
- package/dist/integrations/github.js +5 -2
- package/dist/integrations/github.js.map +1 -1
- package/dist/intelligence/delegation.d.ts +3 -2
- package/dist/intelligence/delegation.d.ts.map +1 -1
- package/dist/intelligence/delegation.js.map +1 -1
- package/dist/intelligence/index.d.ts +1 -0
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/index.js +1 -0
- package/dist/intelligence/index.js.map +1 -1
- package/dist/intelligence/roundtable.d.ts +4 -2
- package/dist/intelligence/roundtable.d.ts.map +1 -1
- package/dist/intelligence/roundtable.js +2 -2
- package/dist/intelligence/roundtable.js.map +1 -1
- package/dist/intelligence/sequential.d.ts +36 -0
- package/dist/intelligence/sequential.d.ts.map +1 -0
- package/dist/intelligence/sequential.js +91 -0
- package/dist/intelligence/sequential.js.map +1 -0
- package/dist/intelligence/swarm.d.ts +8 -4
- package/dist/intelligence/swarm.d.ts.map +1 -1
- package/dist/intelligence/swarm.js +10 -3
- package/dist/intelligence/swarm.js.map +1 -1
- package/dist/intelligence/synthesis.d.ts.map +1 -1
- package/dist/intelligence/synthesis.js +16 -4
- package/dist/intelligence/synthesis.js.map +1 -1
- package/dist/models/graph-engineering.machine.d.ts +219 -0
- package/dist/models/graph-engineering.machine.d.ts.map +1 -0
- package/dist/models/graph-engineering.machine.js +214 -0
- package/dist/models/graph-engineering.machine.js.map +1 -0
- package/dist/models/improvement-loop.machine.d.ts +239 -0
- package/dist/models/improvement-loop.machine.d.ts.map +1 -0
- package/dist/models/improvement-loop.machine.js +254 -0
- package/dist/models/improvement-loop.machine.js.map +1 -0
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +6 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/product-loop.machine.d.ts +531 -0
- package/dist/models/product-loop.machine.d.ts.map +1 -0
- package/dist/models/product-loop.machine.js +699 -0
- package/dist/models/product-loop.machine.js.map +1 -0
- package/dist/models/proposal.machine.d.ts +82 -0
- package/dist/models/proposal.machine.d.ts.map +1 -0
- package/dist/models/proposal.machine.js +68 -0
- package/dist/models/proposal.machine.js.map +1 -0
- package/dist/models/ship-audit.machine.d.ts +103 -0
- package/dist/models/ship-audit.machine.d.ts.map +1 -0
- package/dist/models/ship-audit.machine.js +113 -0
- package/dist/models/ship-audit.machine.js.map +1 -0
- package/dist/observability/attention.d.ts +40 -0
- package/dist/observability/attention.d.ts.map +1 -0
- package/dist/observability/attention.js +119 -0
- package/dist/observability/attention.js.map +1 -0
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +1 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/logging.d.ts +6 -0
- package/dist/observability/logging.d.ts.map +1 -1
- package/dist/observability/logging.js +36 -6
- package/dist/observability/logging.js.map +1 -1
- package/dist/observability/metrics.d.ts +7 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +179 -43
- package/dist/observability/metrics.js.map +1 -1
- package/dist/persistence.d.ts +3 -0
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +88 -17
- package/dist/persistence.js.map +1 -1
- package/dist/ports/clock.d.ts +7 -0
- package/dist/ports/clock.d.ts.map +1 -0
- package/dist/ports/clock.js +5 -0
- package/dist/ports/clock.js.map +1 -0
- package/dist/ports/host.d.ts +8 -0
- package/dist/ports/host.d.ts.map +1 -0
- package/dist/ports/host.js +2 -0
- package/dist/ports/host.js.map +1 -0
- package/dist/ports/index.d.ts +6 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +6 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/repository.d.ts +7 -0
- package/dist/ports/repository.d.ts.map +1 -0
- package/dist/ports/repository.js +2 -0
- package/dist/ports/repository.js.map +1 -0
- package/dist/ports/ship-audit.d.ts +26 -0
- package/dist/ports/ship-audit.d.ts.map +1 -0
- package/dist/ports/ship-audit.js +9 -0
- package/dist/ports/ship-audit.js.map +1 -0
- package/dist/ports/workspace.d.ts +14 -0
- package/dist/ports/workspace.d.ts.map +1 -0
- package/dist/ports/workspace.js +14 -0
- package/dist/ports/workspace.js.map +1 -0
- package/dist/presenters/index.d.ts +2 -0
- package/dist/presenters/index.d.ts.map +1 -0
- package/dist/presenters/index.js +2 -0
- package/dist/presenters/index.js.map +1 -0
- package/dist/presenters/proposal.presenter.d.ts +30 -0
- package/dist/presenters/proposal.presenter.d.ts.map +1 -0
- package/dist/presenters/proposal.presenter.js +47 -0
- package/dist/presenters/proposal.presenter.js.map +1 -0
- package/dist/utils/host.d.ts.map +1 -1
- package/dist/utils/host.js +77 -6
- package/dist/utils/host.js.map +1 -1
- package/dist/utils/security.d.ts +7 -1
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +18 -2
- package/dist/utils/security.js.map +1 -1
- package/package.json +13 -1
|
@@ -1,181 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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":"AAAA
|
|
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
|
|
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,
|
|
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 "
|
|
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
|
-
|
|
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 =
|
|
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;
|
|
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,
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
43
|
-
//
|
|
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":"AAAA,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAI/D,gEAAgE;AAEhE,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAExE,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,SAAiB,EACjB,MAAc,EACd,OAAe;IAEf,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAmB,IAAI,SAAS,CAAC;IAC9E,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,uBAAuB,CAAC;IAEzE,OAAO;QACL,OAAO;QACP,SAAS;QACT,QAAQ;QACR,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAmB;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClF,CAAC;AAED,gEAAgE;AAEhE,MAAM,UAAU,UAAU,CAAC,QAAkB,EAAE,MAAiB;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAElE,
|
|
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":"
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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;
|
|
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(
|
|
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(
|
|
85
|
-
export declare function handleDaoGithubOpenPr(
|
|
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":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/host-tools/handlers.ts"],"names":[],"mappings":"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"}
|