@guyghost/swarm-dao-core 0.1.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/agents/index.d.ts +2 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +3 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/prompts.d.ts +38 -0
- package/dist/agents/prompts.d.ts.map +1 -0
- package/dist/agents/prompts.js +142 -0
- package/dist/agents/prompts.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +100 -0
- package/dist/config.js.map +1 -0
- package/dist/control/audit.d.ts +7 -0
- package/dist/control/audit.d.ts.map +1 -0
- package/dist/control/audit.js +25 -0
- package/dist/control/audit.js.map +1 -0
- package/dist/control/gates.d.ts +4 -0
- package/dist/control/gates.d.ts.map +1 -0
- package/dist/control/gates.js +252 -0
- package/dist/control/gates.js.map +1 -0
- package/dist/control/index.d.ts +3 -0
- package/dist/control/index.d.ts.map +1 -0
- package/dist/control/index.js +4 -0
- package/dist/control/index.js.map +1 -0
- package/dist/delivery/artefacts.d.ts +20 -0
- package/dist/delivery/artefacts.d.ts.map +1 -0
- package/dist/delivery/artefacts.js +222 -0
- package/dist/delivery/artefacts.js.map +1 -0
- package/dist/delivery/dry-run.d.ts +14 -0
- package/dist/delivery/dry-run.d.ts.map +1 -0
- package/dist/delivery/dry-run.js +100 -0
- package/dist/delivery/dry-run.js.map +1 -0
- package/dist/delivery/execution.d.ts +23 -0
- package/dist/delivery/execution.d.ts.map +1 -0
- package/dist/delivery/execution.js +99 -0
- package/dist/delivery/execution.js.map +1 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +6 -0
- package/dist/delivery/index.js.map +1 -0
- package/dist/delivery/plans.d.ts +7 -0
- package/dist/delivery/plans.d.ts.map +1 -0
- package/dist/delivery/plans.js +172 -0
- package/dist/delivery/plans.js.map +1 -0
- package/dist/governance/agents.d.ts +7 -0
- package/dist/governance/agents.d.ts.map +1 -0
- package/dist/governance/agents.js +310 -0
- package/dist/governance/agents.js.map +1 -0
- package/dist/governance/amendments.d.ts +20 -0
- package/dist/governance/amendments.d.ts.map +1 -0
- package/dist/governance/amendments.js +242 -0
- package/dist/governance/amendments.js.map +1 -0
- package/dist/governance/index.d.ts +6 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +7 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/lifecycle.d.ts +13 -0
- package/dist/governance/lifecycle.d.ts.map +1 -0
- package/dist/governance/lifecycle.js +86 -0
- package/dist/governance/lifecycle.js.map +1 -0
- package/dist/governance/scoring.d.ts +16 -0
- package/dist/governance/scoring.d.ts.map +1 -0
- package/dist/governance/scoring.js +118 -0
- package/dist/governance/scoring.js.map +1 -0
- package/dist/governance/voting.d.ts +6 -0
- package/dist/governance/voting.d.ts.map +1 -0
- package/dist/governance/voting.js +73 -0
- package/dist/governance/voting.js.map +1 -0
- package/dist/health-score.d.ts +25 -0
- package/dist/health-score.d.ts.map +1 -0
- package/dist/health-score.js +201 -0
- package/dist/health-score.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/bitbucket.d.ts +26 -0
- package/dist/integrations/bitbucket.d.ts.map +1 -0
- package/dist/integrations/bitbucket.js +76 -0
- package/dist/integrations/bitbucket.js.map +1 -0
- package/dist/integrations/github.d.ts +39 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +126 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/gitlab.d.ts +29 -0
- package/dist/integrations/gitlab.d.ts.map +1 -0
- package/dist/integrations/gitlab.js +86 -0
- package/dist/integrations/gitlab.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +5 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/utils.d.ts +2 -0
- package/dist/integrations/utils.d.ts.map +1 -0
- package/dist/integrations/utils.js +8 -0
- package/dist/integrations/utils.js.map +1 -0
- package/dist/intelligence/index.d.ts +3 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +4 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/roundtable.d.ts +16 -0
- package/dist/intelligence/roundtable.d.ts.map +1 -0
- package/dist/intelligence/roundtable.js +113 -0
- package/dist/intelligence/roundtable.js.map +1 -0
- package/dist/intelligence/swarm.d.ts +27 -0
- package/dist/intelligence/swarm.d.ts.map +1 -0
- package/dist/intelligence/swarm.js +113 -0
- package/dist/intelligence/swarm.js.map +1 -0
- package/dist/intelligence/synthesis.d.ts +4 -0
- package/dist/intelligence/synthesis.d.ts.map +1 -0
- package/dist/intelligence/synthesis.js +84 -0
- package/dist/intelligence/synthesis.js.map +1 -0
- package/dist/observability/alerts.d.ts +40 -0
- package/dist/observability/alerts.d.ts.map +1 -0
- package/dist/observability/alerts.js +162 -0
- package/dist/observability/alerts.js.map +1 -0
- package/dist/observability/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +64 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +224 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/tracing.d.ts +44 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +129 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/persistence.d.ts +50 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +486 -0
- package/dist/persistence.js.map +1 -0
- package/dist/types/index.d.ts +652 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +131 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/host.d.ts +14 -0
- package/dist/utils/host.d.ts.map +1 -0
- package/dist/utils/host.js +42 -0
- package/dist/utils/host.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Agent Registry & Default Agents
|
|
3
|
+
// ============================================================
|
|
4
|
+
export const DEFAULT_AGENTS = [
|
|
5
|
+
{
|
|
6
|
+
id: "strategist",
|
|
7
|
+
name: "Product Strategist",
|
|
8
|
+
role: "Vision, objectives, hypotheses",
|
|
9
|
+
description: "Evaluates proposals against product vision and strategic objectives. Identifies misalignment risks and opportunity costs.",
|
|
10
|
+
weight: 3,
|
|
11
|
+
systemPrompt: `You are the Product Strategist in a DAO governance system.
|
|
12
|
+
|
|
13
|
+
Your mission: evaluate proposals from a product strategy perspective.
|
|
14
|
+
|
|
15
|
+
For each proposal, analyze:
|
|
16
|
+
1. Strategic alignment — does this fit the product vision?
|
|
17
|
+
2. Objectives — which OKRs or goals does this advance?
|
|
18
|
+
3. Hypotheses — what assumptions underlie this proposal?
|
|
19
|
+
4. Opportunity cost — what are we NOT doing if we do this?
|
|
20
|
+
|
|
21
|
+
Output format:
|
|
22
|
+
## Analysis
|
|
23
|
+
[Your strategic analysis]
|
|
24
|
+
|
|
25
|
+
## Vote
|
|
26
|
+
for | against | abstain
|
|
27
|
+
|
|
28
|
+
## Reasoning
|
|
29
|
+
[Why you voted this way]
|
|
30
|
+
|
|
31
|
+
## Composite Score Inputs (0-10)
|
|
32
|
+
- userImpact: [0-10]
|
|
33
|
+
- businessImpact: [0-10]
|
|
34
|
+
- effort: [0-10] (lower = less effort)
|
|
35
|
+
- securityRisk: [0-10] (lower = less risk)
|
|
36
|
+
- confidence: [0-10]
|
|
37
|
+
|
|
38
|
+
## Risk Score (1-10)
|
|
39
|
+
[Overall risk assessment]`,
|
|
40
|
+
riskLevel: "medium",
|
|
41
|
+
councils: [{ council: "product-council", role: "lead" }],
|
|
42
|
+
enabled: true,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: "researcher",
|
|
46
|
+
name: "Research Agent",
|
|
47
|
+
role: "Market, competition, user signals",
|
|
48
|
+
description: "Gathers and analyzes market data, competitive landscape, and user feedback to inform proposal evaluation.",
|
|
49
|
+
weight: 2,
|
|
50
|
+
systemPrompt: `You are the Research Agent in a DAO governance system.
|
|
51
|
+
|
|
52
|
+
Your mission: provide evidence-based research on proposals.
|
|
53
|
+
|
|
54
|
+
For each proposal, research:
|
|
55
|
+
1. Market context — trends, market size, growth
|
|
56
|
+
2. Competition — what are competitors doing?
|
|
57
|
+
3. User signals — feedback, requests, pain points
|
|
58
|
+
4. Data availability — do we have evidence to support this?
|
|
59
|
+
|
|
60
|
+
Output format:
|
|
61
|
+
## Analysis
|
|
62
|
+
[Your research findings]
|
|
63
|
+
|
|
64
|
+
## Vote
|
|
65
|
+
for | against | abstain
|
|
66
|
+
|
|
67
|
+
## Reasoning
|
|
68
|
+
[Why you voted this way]
|
|
69
|
+
|
|
70
|
+
## Composite Score Inputs (0-10)
|
|
71
|
+
- userImpact: [0-10]
|
|
72
|
+
- businessImpact: [0-10]
|
|
73
|
+
- effort: [0-10]
|
|
74
|
+
- securityRisk: [0-10]
|
|
75
|
+
- confidence: [0-10]
|
|
76
|
+
|
|
77
|
+
## Risk Score (1-10)
|
|
78
|
+
[Overall risk assessment]`,
|
|
79
|
+
riskLevel: "low",
|
|
80
|
+
councils: [{ council: "product-council", role: "member" }],
|
|
81
|
+
enabled: true,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "architect",
|
|
85
|
+
name: "Solution Architect",
|
|
86
|
+
role: "Technical options, tradeoffs",
|
|
87
|
+
description: "Evaluates technical feasibility, architecture impact, and implementation options. Identifies technical debt and scalability concerns.",
|
|
88
|
+
weight: 3,
|
|
89
|
+
systemPrompt: `You are the Solution Architect in a DAO governance system.
|
|
90
|
+
|
|
91
|
+
Your mission: evaluate proposals from a technical architecture perspective.
|
|
92
|
+
|
|
93
|
+
For each proposal, analyze:
|
|
94
|
+
1. Technical feasibility — can we build this?
|
|
95
|
+
2. Architecture impact — how does this affect system design?
|
|
96
|
+
3. Tradeoffs — what are the key technical tradeoffs?
|
|
97
|
+
4. Technical debt — will this create or reduce debt?
|
|
98
|
+
5. Scalability — will this scale with our growth?
|
|
99
|
+
|
|
100
|
+
Output format:
|
|
101
|
+
## Analysis
|
|
102
|
+
[Your technical analysis]
|
|
103
|
+
|
|
104
|
+
## Vote
|
|
105
|
+
for | against | abstain
|
|
106
|
+
|
|
107
|
+
## Reasoning
|
|
108
|
+
[Why you voted this way]
|
|
109
|
+
|
|
110
|
+
## Composite Score Inputs (0-10)
|
|
111
|
+
- userImpact: [0-10]
|
|
112
|
+
- businessImpact: [0-10]
|
|
113
|
+
- effort: [0-10]
|
|
114
|
+
- securityRisk: [0-10]
|
|
115
|
+
- confidence: [0-10]
|
|
116
|
+
|
|
117
|
+
## Risk Score (1-10)
|
|
118
|
+
[Overall risk assessment]`,
|
|
119
|
+
riskLevel: "medium",
|
|
120
|
+
councils: [{ council: "delivery-council", role: "lead" }],
|
|
121
|
+
enabled: true,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: "critic",
|
|
125
|
+
name: "Critic / Risk Agent",
|
|
126
|
+
role: "Risk scoring, objections, guardrails",
|
|
127
|
+
description: "Identifies risks, raises objections, and ensures guardrails are in place. The devil's advocate of the swarm.",
|
|
128
|
+
weight: 3,
|
|
129
|
+
systemPrompt: `You are the Critic / Risk Agent in a DAO governance system.
|
|
130
|
+
|
|
131
|
+
Your mission: identify risks and raise critical objections.
|
|
132
|
+
|
|
133
|
+
For each proposal, scrutinize:
|
|
134
|
+
1. Risks — what could go wrong?
|
|
135
|
+
2. Edge cases — what scenarios aren't covered?
|
|
136
|
+
3. Guardrails — are sufficient protections in place?
|
|
137
|
+
4. Downside — what's the worst-case outcome?
|
|
138
|
+
5. Unknown unknowns — what haven't we considered?
|
|
139
|
+
|
|
140
|
+
Output format:
|
|
141
|
+
## Analysis
|
|
142
|
+
[Your risk analysis and objections]
|
|
143
|
+
|
|
144
|
+
## Vote
|
|
145
|
+
for | against | abstain
|
|
146
|
+
|
|
147
|
+
## Reasoning
|
|
148
|
+
[Why you voted this way]
|
|
149
|
+
|
|
150
|
+
## Composite Score Inputs (0-10)
|
|
151
|
+
- userImpact: [0-10]
|
|
152
|
+
- businessImpact: [0-10]
|
|
153
|
+
- effort: [0-10]
|
|
154
|
+
- securityRisk: [0-10]
|
|
155
|
+
- confidence: [0-10]
|
|
156
|
+
|
|
157
|
+
## Risk Score (1-10)
|
|
158
|
+
[Overall risk assessment]`,
|
|
159
|
+
riskLevel: "high",
|
|
160
|
+
councils: [
|
|
161
|
+
{ council: "security-council", role: "lead" },
|
|
162
|
+
{ council: "product-council", role: "member" },
|
|
163
|
+
],
|
|
164
|
+
enabled: true,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: "prioritizer",
|
|
168
|
+
name: "Prioritization Agent",
|
|
169
|
+
role: "Impact/cost/risk scoring, roadmap fit",
|
|
170
|
+
description: "Scores proposals on impact, cost, and risk dimensions. Evaluates roadmap fit and sequencing.",
|
|
171
|
+
weight: 2,
|
|
172
|
+
systemPrompt: `You are the Prioritization Agent in a DAO governance system.
|
|
173
|
+
|
|
174
|
+
Your mission: evaluate proposals through an impact/cost/risk lens.
|
|
175
|
+
|
|
176
|
+
For each proposal, score:
|
|
177
|
+
1. Impact — user value, business value, strategic value
|
|
178
|
+
2. Cost — implementation effort, maintenance burden
|
|
179
|
+
3. Risk — probability of failure, downside exposure
|
|
180
|
+
4. Roadmap fit — does this belong in our current sequence?
|
|
181
|
+
5. Urgency — how time-sensitive is this?
|
|
182
|
+
|
|
183
|
+
Output format:
|
|
184
|
+
## Analysis
|
|
185
|
+
[Your prioritization analysis]
|
|
186
|
+
|
|
187
|
+
## Vote
|
|
188
|
+
for | against | abstain
|
|
189
|
+
|
|
190
|
+
## Reasoning
|
|
191
|
+
[Why you voted this way]
|
|
192
|
+
|
|
193
|
+
## Composite Score Inputs (0-10)
|
|
194
|
+
- userImpact: [0-10]
|
|
195
|
+
- businessImpact: [0-10]
|
|
196
|
+
- effort: [0-10]
|
|
197
|
+
- securityRisk: [0-10]
|
|
198
|
+
- confidence: [0-10]
|
|
199
|
+
|
|
200
|
+
## Risk Score (1-10)
|
|
201
|
+
[Overall risk assessment]`,
|
|
202
|
+
riskLevel: "low",
|
|
203
|
+
councils: [{ council: "product-council", role: "member" }],
|
|
204
|
+
enabled: true,
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: "spec-writer",
|
|
208
|
+
name: "Spec Writer",
|
|
209
|
+
role: "PRD, user stories, acceptance criteria",
|
|
210
|
+
description: "Analyzes proposals for specification completeness. Evaluates whether requirements are clear and testable.",
|
|
211
|
+
weight: 1,
|
|
212
|
+
systemPrompt: `You are the Spec Writer in a DAO governance system.
|
|
213
|
+
|
|
214
|
+
Your mission: evaluate proposals for specification quality.
|
|
215
|
+
|
|
216
|
+
For each proposal, assess:
|
|
217
|
+
1. Clarity — are requirements unambiguous?
|
|
218
|
+
2. Completeness — what's missing from the spec?
|
|
219
|
+
3. Testability — can we write acceptance criteria?
|
|
220
|
+
4. User stories — can this be broken into stories?
|
|
221
|
+
5. Edge cases — are boundary conditions defined?
|
|
222
|
+
|
|
223
|
+
Output format:
|
|
224
|
+
## Analysis
|
|
225
|
+
[Your specification analysis]
|
|
226
|
+
|
|
227
|
+
## Vote
|
|
228
|
+
for | against | abstain
|
|
229
|
+
|
|
230
|
+
## Reasoning
|
|
231
|
+
[Why you voted this way]
|
|
232
|
+
|
|
233
|
+
## Composite Score Inputs (0-10)
|
|
234
|
+
- userImpact: [0-10]
|
|
235
|
+
- businessImpact: [0-10]
|
|
236
|
+
- effort: [0-10]
|
|
237
|
+
- securityRisk: [0-10]
|
|
238
|
+
- confidence: [0-10]
|
|
239
|
+
|
|
240
|
+
## Risk Score (1-10)
|
|
241
|
+
[Overall risk assessment]`,
|
|
242
|
+
riskLevel: "low",
|
|
243
|
+
councils: [{ council: "product-council", role: "advisor" }],
|
|
244
|
+
enabled: true,
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: "delivery",
|
|
248
|
+
name: "Delivery Agent",
|
|
249
|
+
role: "Implementation plan, tasks, CI/CD",
|
|
250
|
+
description: "Evaluates delivery feasibility, estimates effort, and plans implementation. Considers CI/CD and deployment impact.",
|
|
251
|
+
weight: 1,
|
|
252
|
+
systemPrompt: `You are the Delivery Agent in a DAO governance system.
|
|
253
|
+
|
|
254
|
+
Your mission: evaluate proposals from a delivery and execution perspective.
|
|
255
|
+
|
|
256
|
+
For each proposal, plan:
|
|
257
|
+
1. Implementation approach — how would we build this?
|
|
258
|
+
2. Task breakdown — what are the key tasks?
|
|
259
|
+
3. Effort estimate — rough timeline and resources
|
|
260
|
+
4. CI/CD impact — how does this affect pipelines?
|
|
261
|
+
5. Dependencies — what must happen first?
|
|
262
|
+
|
|
263
|
+
Output format:
|
|
264
|
+
## Analysis
|
|
265
|
+
[Your delivery analysis]
|
|
266
|
+
|
|
267
|
+
## Vote
|
|
268
|
+
for | against | abstain
|
|
269
|
+
|
|
270
|
+
## Reasoning
|
|
271
|
+
[Why you voted this way]
|
|
272
|
+
|
|
273
|
+
## Composite Score Inputs (0-10)
|
|
274
|
+
- userImpact: [0-10]
|
|
275
|
+
- businessImpact: [0-10]
|
|
276
|
+
- effort: [0-10]
|
|
277
|
+
- securityRisk: [0-10]
|
|
278
|
+
- confidence: [0-10]
|
|
279
|
+
|
|
280
|
+
## Risk Score (1-10)
|
|
281
|
+
[Overall risk assessment]`,
|
|
282
|
+
riskLevel: "medium",
|
|
283
|
+
councils: [{ council: "delivery-council", role: "member" }],
|
|
284
|
+
enabled: true,
|
|
285
|
+
},
|
|
286
|
+
];
|
|
287
|
+
export function initializeAgents(customAgents) {
|
|
288
|
+
if (customAgents && customAgents.length > 0) {
|
|
289
|
+
return customAgents;
|
|
290
|
+
}
|
|
291
|
+
return DEFAULT_AGENTS.map((a) => ({ ...a }));
|
|
292
|
+
}
|
|
293
|
+
export function formatAgentsTable(agents) {
|
|
294
|
+
let table = "| Agent | Weight | Role |\n|-------|--------|------|\n";
|
|
295
|
+
for (const agent of agents) {
|
|
296
|
+
table += `| ${agent.name} | ${agent.weight} | ${agent.role} |\n`;
|
|
297
|
+
}
|
|
298
|
+
return table;
|
|
299
|
+
}
|
|
300
|
+
export function formatAgentCard(agent) {
|
|
301
|
+
return `## ${agent.name} (\`${agent.id}\`)
|
|
302
|
+
- **Role:** ${agent.role}
|
|
303
|
+
- **Weight:** ${agent.weight}
|
|
304
|
+
- **Risk Level:** ${agent.riskLevel ?? "not set"}
|
|
305
|
+
- **Description:** ${agent.description}`;
|
|
306
|
+
}
|
|
307
|
+
export function getDefaultAgentPrompts() {
|
|
308
|
+
return Object.fromEntries(DEFAULT_AGENTS.map((a) => [a.id, a.systemPrompt]));
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/governance/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type AmendmentPayload, type AmendmentSnapshot } from "../types/index.js";
|
|
2
|
+
export interface AmendmentValidation {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface AmendmentPreviewDiff {
|
|
7
|
+
field: string;
|
|
8
|
+
before: string;
|
|
9
|
+
after: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AmendmentExecutionResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
snapshot?: AmendmentSnapshot;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function validateAmendmentPayload(payload: AmendmentPayload): AmendmentValidation;
|
|
17
|
+
export declare function previewAmendment(payload: AmendmentPayload): AmendmentPreviewDiff[];
|
|
18
|
+
export declare function executeAmendment(payload: AmendmentPayload): AmendmentExecutionResult;
|
|
19
|
+
export declare function rollbackAmendment(snapshot: AmendmentSnapshot): void;
|
|
20
|
+
//# sourceMappingURL=amendments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amendments.d.ts","sourceRoot":"","sources":["../../src/governance/amendments.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAKvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,CAgFvF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,oBAAoB,EAAE,CAmFlF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,wBAAwB,CAiEpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAInE"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Self-Amending DAO
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { getState } from "../persistence.js";
|
|
5
|
+
import { TYPE_QUORUM, } from "../types/index.js";
|
|
6
|
+
export function validateAmendmentPayload(payload) {
|
|
7
|
+
const errors = [];
|
|
8
|
+
switch (payload.type) {
|
|
9
|
+
case "agent-update": {
|
|
10
|
+
if (!payload.agentId)
|
|
11
|
+
errors.push("agentId is required");
|
|
12
|
+
if (!payload.changes || Object.keys(payload.changes).length === 0) {
|
|
13
|
+
errors.push("At least one change is required");
|
|
14
|
+
}
|
|
15
|
+
const validFields = ["name", "role", "description", "weight", "model", "riskLevel", "enabled"];
|
|
16
|
+
for (const key of Object.keys(payload.changes)) {
|
|
17
|
+
if (!validFields.includes(key))
|
|
18
|
+
errors.push(`Unknown field: ${key}`);
|
|
19
|
+
}
|
|
20
|
+
if (payload.changes.weight !== undefined) {
|
|
21
|
+
if (payload.changes.weight < 1 || payload.changes.weight > 10) {
|
|
22
|
+
errors.push("weight must be between 1 and 10");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
case "agent-add": {
|
|
28
|
+
if (!payload.agent.id)
|
|
29
|
+
errors.push("agent.id is required");
|
|
30
|
+
if (!payload.agent.name)
|
|
31
|
+
errors.push("agent.name is required");
|
|
32
|
+
if (!payload.agent.weight || payload.agent.weight < 1 || payload.agent.weight > 10) {
|
|
33
|
+
errors.push("agent.weight must be between 1 and 10");
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "agent-remove": {
|
|
38
|
+
if (!payload.agentId)
|
|
39
|
+
errors.push("agentId is required");
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case "config-update": {
|
|
43
|
+
if (!payload.changes || Object.keys(payload.changes).length === 0) {
|
|
44
|
+
errors.push("At least one config change is required");
|
|
45
|
+
}
|
|
46
|
+
const validConfigFields = [
|
|
47
|
+
"quorumPercent",
|
|
48
|
+
"approvalThreshold",
|
|
49
|
+
"defaultModel",
|
|
50
|
+
"maxConcurrent",
|
|
51
|
+
"riskThreshold",
|
|
52
|
+
"healthWeights",
|
|
53
|
+
];
|
|
54
|
+
for (const key of Object.keys(payload.changes)) {
|
|
55
|
+
if (!validConfigFields.includes(key))
|
|
56
|
+
errors.push(`Unknown config field: ${key}`);
|
|
57
|
+
}
|
|
58
|
+
if (payload.changes.quorumPercent !== undefined &&
|
|
59
|
+
(payload.changes.quorumPercent < 1 || payload.changes.quorumPercent > 100)) {
|
|
60
|
+
errors.push("quorumPercent must be 1-100");
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case "quorum-update": {
|
|
65
|
+
if (!payload.typeQuorum || Object.keys(payload.typeQuorum).length === 0) {
|
|
66
|
+
errors.push("At least one type quorum change is required");
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "gate-update": {
|
|
71
|
+
if ((!payload.addGates || payload.addGates.length === 0) &&
|
|
72
|
+
(!payload.removeGates || payload.removeGates.length === 0)) {
|
|
73
|
+
errors.push("At least one gate to add or remove is required");
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "council-update": {
|
|
78
|
+
if (!payload.agentId)
|
|
79
|
+
errors.push("agentId is required");
|
|
80
|
+
if (!payload.councils || payload.councils.length === 0) {
|
|
81
|
+
errors.push("At least one council membership is required");
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { valid: errors.length === 0, errors };
|
|
87
|
+
}
|
|
88
|
+
export function previewAmendment(payload) {
|
|
89
|
+
const state = getState();
|
|
90
|
+
const diffs = [];
|
|
91
|
+
switch (payload.type) {
|
|
92
|
+
case "agent-update": {
|
|
93
|
+
const agent = state.agents.find((a) => a.id === payload.agentId);
|
|
94
|
+
if (!agent) {
|
|
95
|
+
diffs.push({ field: "agent", before: "(not found)", after: payload.agentId });
|
|
96
|
+
return diffs;
|
|
97
|
+
}
|
|
98
|
+
for (const [key, value] of Object.entries(payload.changes)) {
|
|
99
|
+
diffs.push({
|
|
100
|
+
field: `${agent.id}.${key}`,
|
|
101
|
+
before: String(agent[key] ?? "(not set)"),
|
|
102
|
+
after: String(value),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case "agent-add": {
|
|
108
|
+
diffs.push({
|
|
109
|
+
field: `agents.${payload.agent.id}`,
|
|
110
|
+
before: "(none)",
|
|
111
|
+
after: `${payload.agent.name} (w=${payload.agent.weight})`,
|
|
112
|
+
});
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case "agent-remove": {
|
|
116
|
+
const agent = state.agents.find((a) => a.id === payload.agentId);
|
|
117
|
+
diffs.push({
|
|
118
|
+
field: `agents.${payload.agentId}`,
|
|
119
|
+
before: agent ? `${agent.name} (w=${agent.weight})` : "(not found)",
|
|
120
|
+
after: "(removed)",
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case "config-update": {
|
|
125
|
+
for (const [key, value] of Object.entries(payload.changes)) {
|
|
126
|
+
diffs.push({
|
|
127
|
+
field: `config.${key}`,
|
|
128
|
+
before: String(state.config[key] ?? "(not set)"),
|
|
129
|
+
after: String(value),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
case "quorum-update": {
|
|
135
|
+
for (const [type, quorum] of Object.entries(payload.typeQuorum)) {
|
|
136
|
+
const before = state.config.typeQuorum[type];
|
|
137
|
+
diffs.push({
|
|
138
|
+
field: `typeQuorum.${type}`,
|
|
139
|
+
before: before ? `${before.quorumPercent}% / ${before.approvalPercent}%` : "(default)",
|
|
140
|
+
after: quorum
|
|
141
|
+
? `${quorum.quorumPercent ?? before?.quorumPercent}% / ${quorum.approvalPercent ?? before?.approvalPercent}%`
|
|
142
|
+
: "(no change)",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case "gate-update": {
|
|
148
|
+
if (payload.addGates) {
|
|
149
|
+
for (const gate of payload.addGates) {
|
|
150
|
+
diffs.push({ field: `gates.${gate}`, before: "(none)", after: "added" });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (payload.removeGates) {
|
|
154
|
+
for (const gate of payload.removeGates) {
|
|
155
|
+
diffs.push({ field: `gates.${gate}`, before: "present", after: "removed" });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
case "council-update": {
|
|
161
|
+
const agent = state.agents.find((a) => a.id === payload.agentId);
|
|
162
|
+
const before = agent?.councils?.map((c) => `${c.council}(${c.role})`).join(", ") ?? "(none)";
|
|
163
|
+
const after = payload.councils.map((c) => `${c.council}(${c.role})`).join(", ");
|
|
164
|
+
diffs.push({ field: `${payload.agentId}.councils`, before, after });
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return diffs;
|
|
169
|
+
}
|
|
170
|
+
export function executeAmendment(payload) {
|
|
171
|
+
const state = getState();
|
|
172
|
+
// Capture snapshot before changes
|
|
173
|
+
const snapshot = {
|
|
174
|
+
agents: state.agents.map((a) => ({ ...a })),
|
|
175
|
+
config: { ...state.config, typeQuorum: { ...state.config.typeQuorum } },
|
|
176
|
+
capturedAt: new Date().toISOString(),
|
|
177
|
+
};
|
|
178
|
+
try {
|
|
179
|
+
switch (payload.type) {
|
|
180
|
+
case "agent-update": {
|
|
181
|
+
const agent = state.agents.find((a) => a.id === payload.agentId);
|
|
182
|
+
if (!agent)
|
|
183
|
+
return { success: false, error: `Agent ${payload.agentId} not found` };
|
|
184
|
+
Object.assign(agent, payload.changes);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case "agent-add": {
|
|
188
|
+
state.agents.push({ ...payload.agent, systemPrompt: payload.agent.systemPrompt || "You are a DAO agent." });
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case "agent-remove": {
|
|
192
|
+
const idx = state.agents.findIndex((a) => a.id === payload.agentId);
|
|
193
|
+
if (idx === -1)
|
|
194
|
+
return { success: false, error: `Agent ${payload.agentId} not found` };
|
|
195
|
+
state.agents.splice(idx, 1);
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
case "config-update": {
|
|
199
|
+
Object.assign(state.config, payload.changes);
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case "quorum-update": {
|
|
203
|
+
for (const [type, quorum] of Object.entries(payload.typeQuorum)) {
|
|
204
|
+
const proposalType = type;
|
|
205
|
+
const currentQuorum = state.config.typeQuorum[proposalType] || TYPE_QUORUM[proposalType];
|
|
206
|
+
state.config.typeQuorum[proposalType] = {
|
|
207
|
+
...currentQuorum,
|
|
208
|
+
...quorum,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case "gate-update": {
|
|
214
|
+
if (payload.addGates) {
|
|
215
|
+
state.config.requiredGates = [...new Set([...state.config.requiredGates, ...payload.addGates])];
|
|
216
|
+
}
|
|
217
|
+
if (payload.removeGates) {
|
|
218
|
+
state.config.requiredGates = state.config.requiredGates.filter((g) => !payload.removeGates?.includes(g));
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case "council-update": {
|
|
223
|
+
const agent = state.agents.find((a) => a.id === payload.agentId);
|
|
224
|
+
if (!agent)
|
|
225
|
+
return { success: false, error: `Agent ${payload.agentId} not found` };
|
|
226
|
+
agent.councils = payload.councils;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return { success: true, snapshot };
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
234
|
+
return { success: false, error: message, snapshot };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export function rollbackAmendment(snapshot) {
|
|
238
|
+
const state = getState();
|
|
239
|
+
state.agents = snapshot.agents;
|
|
240
|
+
state.config = snapshot.config;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=amendments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amendments.js","sourceRoot":"","sources":["../../src/governance/amendments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Governance Layer (L1) — Proposals, Agents, Voting, Lifecycle, Amendments
|
|
2
|
+
export * from "./agents.js";
|
|
3
|
+
export * from "./amendments.js";
|
|
4
|
+
export * from "./lifecycle.js";
|
|
5
|
+
export * from "./scoring.js";
|
|
6
|
+
export * from "./voting.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
export declare function classifyRiskZone(proposal: Proposal): RiskZone;
|
|
9
|
+
export declare function getRequiredApprovals(zone: RiskZone): number;
|
|
10
|
+
export declare function requiresSecurityReview(zone: RiskZone): boolean;
|
|
11
|
+
export declare function statusLabel(status: ProposalStatus): string;
|
|
12
|
+
export declare function getCouncilsForType(type: Proposal["type"]): string[];
|
|
13
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +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"}
|