@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,486 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Persistence (.dao/ local file store)
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { promises as fs } from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { recordProposalExecuted, recordVoteCast } from "./observability/metrics.js";
|
|
7
|
+
import { createInitialState } from "./types/index.js";
|
|
8
|
+
let state = null;
|
|
9
|
+
const STATE_FILE = "state.json";
|
|
10
|
+
const PROPOSALS_DIR = "proposals";
|
|
11
|
+
const DECISIONS_DIR = "decisions";
|
|
12
|
+
const CONFIG_FILE = "config.json";
|
|
13
|
+
// ── Paths ────────────────────────────────────────────────────
|
|
14
|
+
export function getDaoRoot(cwd) {
|
|
15
|
+
return path.join(cwd, ".dao");
|
|
16
|
+
}
|
|
17
|
+
export function getProposalsDir(daoRoot) {
|
|
18
|
+
return path.join(daoRoot, PROPOSALS_DIR);
|
|
19
|
+
}
|
|
20
|
+
export function getDecisionsDir(daoRoot) {
|
|
21
|
+
return path.join(daoRoot, DECISIONS_DIR);
|
|
22
|
+
}
|
|
23
|
+
export function padId(id) {
|
|
24
|
+
return id.toString().padStart(3, "0");
|
|
25
|
+
}
|
|
26
|
+
export function getProposalPath(daoRoot, id) {
|
|
27
|
+
return path.join(getProposalsDir(daoRoot), `${padId(id)}.json`);
|
|
28
|
+
}
|
|
29
|
+
// ── Storage Init ─────────────────────────────────────────────
|
|
30
|
+
export async function initStorage(cwd) {
|
|
31
|
+
const daoRoot = getDaoRoot(cwd);
|
|
32
|
+
await fs.mkdir(daoRoot, { recursive: true });
|
|
33
|
+
return daoRoot;
|
|
34
|
+
}
|
|
35
|
+
// ── Legacy Migration ─────────────────────────────────────────
|
|
36
|
+
export async function migrateFromLegacy(cwd) {
|
|
37
|
+
const legacyRoot = path.join(cwd, ".opencode-dao");
|
|
38
|
+
const newRoot = getDaoRoot(cwd);
|
|
39
|
+
try {
|
|
40
|
+
await fs.access(newRoot);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
/* .dao doesn't exist */
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
await fs.access(legacyRoot);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
console.log("🔄 Migrating DAO storage: .opencode-dao → .dao");
|
|
53
|
+
await fs.mkdir(newRoot, { recursive: true });
|
|
54
|
+
const entries = await fs.readdir(legacyRoot, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const srcPath = path.join(legacyRoot, entry.name);
|
|
57
|
+
const destPath = path.join(newRoot, entry.name);
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
await fs.mkdir(destPath, { recursive: true });
|
|
60
|
+
const subEntries = await fs.readdir(srcPath);
|
|
61
|
+
for (const subEntry of subEntries) {
|
|
62
|
+
await fs.copyFile(path.join(srcPath, subEntry), path.join(destPath, subEntry));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await fs.copyFile(srcPath, destPath);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const oldStatePath = path.join(newRoot, "dao-state.json");
|
|
70
|
+
const newStatePath = path.join(newRoot, STATE_FILE);
|
|
71
|
+
try {
|
|
72
|
+
await fs.access(oldStatePath);
|
|
73
|
+
await fs.rename(oldStatePath, newStatePath);
|
|
74
|
+
console.log(" ✓ Renamed dao-state.json → state.json");
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* no old state */
|
|
78
|
+
}
|
|
79
|
+
// Migrate proposal IDs to 3-digit padding
|
|
80
|
+
try {
|
|
81
|
+
const proposalsDir = getProposalsDir(newRoot);
|
|
82
|
+
const files = await fs.readdir(proposalsDir);
|
|
83
|
+
for (const file of files) {
|
|
84
|
+
if (!file.endsWith(".json"))
|
|
85
|
+
continue;
|
|
86
|
+
const match = file.match(/^(\d+)\.json$/) ?? null;
|
|
87
|
+
if (!match)
|
|
88
|
+
continue;
|
|
89
|
+
const id = parseInt(match[1] ?? "0", 10);
|
|
90
|
+
const paddedName = `${padId(id)}.json`;
|
|
91
|
+
if (file !== paddedName) {
|
|
92
|
+
await fs.rename(path.join(proposalsDir, file), path.join(proposalsDir, paddedName));
|
|
93
|
+
console.log(` ✓ Renamed ${file} → ${paddedName}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
/* no proposals yet */
|
|
99
|
+
}
|
|
100
|
+
console.log(" ✓ Migration complete");
|
|
101
|
+
try {
|
|
102
|
+
await fs.rm(legacyRoot, { recursive: true, force: true });
|
|
103
|
+
console.log(" ✓ Removed legacy .opencode-dao/");
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
console.warn(" ⚠ Could not remove .opencode-dao/:", err);
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
// ── State Access ─────────────────────────────────────────────
|
|
111
|
+
export function getState() {
|
|
112
|
+
if (!state) {
|
|
113
|
+
throw new Error("DAO not initialized. Run dao_setup first.");
|
|
114
|
+
}
|
|
115
|
+
return state;
|
|
116
|
+
}
|
|
117
|
+
export function setState(newState) {
|
|
118
|
+
state = newState;
|
|
119
|
+
}
|
|
120
|
+
export function getOrCreateState(cwd) {
|
|
121
|
+
if (!state) {
|
|
122
|
+
state = createInitialState(getDaoRoot(cwd));
|
|
123
|
+
}
|
|
124
|
+
return state;
|
|
125
|
+
}
|
|
126
|
+
// ── Load / Save ──────────────────────────────────────────────
|
|
127
|
+
export async function loadState(cwd) {
|
|
128
|
+
await migrateFromLegacy(cwd);
|
|
129
|
+
const daoRoot = await initStorage(cwd);
|
|
130
|
+
const statePath = path.join(daoRoot, STATE_FILE);
|
|
131
|
+
let loaded = null;
|
|
132
|
+
try {
|
|
133
|
+
const data = await fs.readFile(statePath, "utf-8");
|
|
134
|
+
loaded = JSON.parse(data);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
if (!loaded)
|
|
140
|
+
return null;
|
|
141
|
+
// Ensure arrays exist (guard against corrupted/legacy state.json)
|
|
142
|
+
if (!loaded.proposals)
|
|
143
|
+
loaded.proposals = [];
|
|
144
|
+
if (!loaded.agents)
|
|
145
|
+
loaded.agents = [];
|
|
146
|
+
if (!loaded.auditLog)
|
|
147
|
+
loaded.auditLog = [];
|
|
148
|
+
// Reconcile with sidecars
|
|
149
|
+
try {
|
|
150
|
+
const sidecars = await loadProposalsFromDisk(daoRoot);
|
|
151
|
+
if (sidecars.length) {
|
|
152
|
+
const byId = new Map();
|
|
153
|
+
for (const p of loaded.proposals)
|
|
154
|
+
byId.set(p.id, p);
|
|
155
|
+
for (const sc of sidecars)
|
|
156
|
+
byId.set(sc.id, sc);
|
|
157
|
+
loaded.proposals = Array.from(byId.values()).sort((a, b) => a.id - b.id);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
/* ignore */
|
|
162
|
+
}
|
|
163
|
+
state = loaded;
|
|
164
|
+
return state;
|
|
165
|
+
}
|
|
166
|
+
export async function loadProposalsFromDisk(daoRoot) {
|
|
167
|
+
const dir = getProposalsDir(daoRoot);
|
|
168
|
+
let entries;
|
|
169
|
+
try {
|
|
170
|
+
entries = await fs.readdir(dir);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
const out = [];
|
|
176
|
+
for (const file of entries) {
|
|
177
|
+
if (!file.endsWith(".json"))
|
|
178
|
+
continue;
|
|
179
|
+
try {
|
|
180
|
+
const raw = await fs.readFile(path.join(dir, file), "utf-8");
|
|
181
|
+
const p = JSON.parse(raw);
|
|
182
|
+
if (typeof p?.id === "number")
|
|
183
|
+
out.push(p);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
/* skip malformed */
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
export async function saveProposal(proposalId) {
|
|
192
|
+
if (!state)
|
|
193
|
+
return null;
|
|
194
|
+
const proposal = state.proposals.find((p) => p.id === proposalId);
|
|
195
|
+
if (!proposal)
|
|
196
|
+
return null;
|
|
197
|
+
const dir = getProposalsDir(state.daoRoot);
|
|
198
|
+
await fs.mkdir(dir, { recursive: true });
|
|
199
|
+
const filePath = getProposalPath(state.daoRoot, proposalId);
|
|
200
|
+
await fs.writeFile(filePath, `${JSON.stringify(proposal, null, 2)}\n`, "utf-8");
|
|
201
|
+
return filePath;
|
|
202
|
+
}
|
|
203
|
+
export async function saveState() {
|
|
204
|
+
if (!state)
|
|
205
|
+
return;
|
|
206
|
+
if (!state.daoRoot)
|
|
207
|
+
return;
|
|
208
|
+
if (!state.proposals)
|
|
209
|
+
state.proposals = [];
|
|
210
|
+
const daoRoot = state.daoRoot;
|
|
211
|
+
const statePath = path.join(daoRoot, STATE_FILE);
|
|
212
|
+
await fs.mkdir(daoRoot, { recursive: true });
|
|
213
|
+
await fs.writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
|
|
214
|
+
// Sidecars
|
|
215
|
+
const dir = getProposalsDir(daoRoot);
|
|
216
|
+
try {
|
|
217
|
+
await fs.mkdir(dir, { recursive: true });
|
|
218
|
+
await Promise.all(state.proposals.map((p) => fs.writeFile(getProposalPath(daoRoot, p.id), `${JSON.stringify(p, null, 2)}\n`, "utf-8").catch(() => { })));
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
/* ignore */
|
|
222
|
+
}
|
|
223
|
+
await saveDecisions();
|
|
224
|
+
// Cleanup orphans
|
|
225
|
+
try {
|
|
226
|
+
const entries = await fs.readdir(dir);
|
|
227
|
+
const currentIds = new Set(state.proposals.map((p) => `${padId(p.id)}.json`));
|
|
228
|
+
const orphans = entries.filter((e) => e.endsWith(".json") && !currentIds.has(e));
|
|
229
|
+
for (const orphan of orphans) {
|
|
230
|
+
try {
|
|
231
|
+
await fs.unlink(path.join(dir, orphan));
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
/* ignore */
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
/* ENOENT */
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
export async function saveDecisions() {
|
|
243
|
+
if (!state?.daoRoot || !state.proposals)
|
|
244
|
+
return;
|
|
245
|
+
const decisionsDir = getDecisionsDir(state.daoRoot);
|
|
246
|
+
await fs.mkdir(decisionsDir, { recursive: true });
|
|
247
|
+
const resolved = state.proposals.filter((p) => p.status !== "open" && p.status !== "deliberating");
|
|
248
|
+
const decisions = resolved
|
|
249
|
+
.map((p) => ({
|
|
250
|
+
id: p.id,
|
|
251
|
+
title: p.title,
|
|
252
|
+
type: p.type,
|
|
253
|
+
status: p.status,
|
|
254
|
+
riskZone: p.riskZone,
|
|
255
|
+
createdAt: p.createdAt,
|
|
256
|
+
resolvedAt: p.resolvedAt,
|
|
257
|
+
}))
|
|
258
|
+
.sort((a, b) => a.id - b.id);
|
|
259
|
+
await fs.writeFile(path.join(decisionsDir, "index.json"), `${JSON.stringify(decisions, null, 2)}\n`, "utf-8");
|
|
260
|
+
await Promise.all(decisions.map((d) => fs
|
|
261
|
+
.writeFile(path.join(decisionsDir, `${padId(d.id)}.json`), `${JSON.stringify(d, null, 2)}\n`, "utf-8")
|
|
262
|
+
.catch(() => { })));
|
|
263
|
+
}
|
|
264
|
+
// ── Storage Settings ─────────────────────────────────────────
|
|
265
|
+
export async function getStorageSettings(daoRoot) {
|
|
266
|
+
const configPath = path.join(daoRoot, CONFIG_FILE);
|
|
267
|
+
try {
|
|
268
|
+
const raw = await fs.readFile(configPath, "utf-8");
|
|
269
|
+
return JSON.parse(raw);
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return { mode: "local", githubSyncEnabled: false, daoRoot };
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
export async function updateStorageSettings(daoRoot, updates) {
|
|
276
|
+
const current = await getStorageSettings(daoRoot);
|
|
277
|
+
const next = { ...current, ...updates };
|
|
278
|
+
const configPath = path.join(daoRoot, CONFIG_FILE);
|
|
279
|
+
await fs.mkdir(daoRoot, { recursive: true });
|
|
280
|
+
await fs.writeFile(configPath, JSON.stringify(next, null, 2), "utf-8");
|
|
281
|
+
return next;
|
|
282
|
+
}
|
|
283
|
+
// ── Agent CRUD ───────────────────────────────────────────────
|
|
284
|
+
export async function addAgent(agent) {
|
|
285
|
+
const s = getState();
|
|
286
|
+
s.agents.push(agent);
|
|
287
|
+
await saveState();
|
|
288
|
+
}
|
|
289
|
+
export async function removeAgent(agentId) {
|
|
290
|
+
const s = getState();
|
|
291
|
+
const index = s.agents.findIndex((a) => a.id === agentId);
|
|
292
|
+
if (index === -1)
|
|
293
|
+
return false;
|
|
294
|
+
s.agents.splice(index, 1);
|
|
295
|
+
await saveState();
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
export function getAgent(agentId) {
|
|
299
|
+
return getState().agents.find((a) => a.id === agentId);
|
|
300
|
+
}
|
|
301
|
+
export function listAgents() {
|
|
302
|
+
return getState().agents;
|
|
303
|
+
}
|
|
304
|
+
// ── Proposal CRUD ────────────────────────────────────────────
|
|
305
|
+
export async function createProposal(title, type, description, proposedBy, context) {
|
|
306
|
+
const s = getState();
|
|
307
|
+
const proposal = {
|
|
308
|
+
id: s.nextProposalId++,
|
|
309
|
+
title,
|
|
310
|
+
type: type,
|
|
311
|
+
description,
|
|
312
|
+
context,
|
|
313
|
+
proposedBy,
|
|
314
|
+
status: "open",
|
|
315
|
+
votes: [],
|
|
316
|
+
agentOutputs: [],
|
|
317
|
+
createdAt: new Date().toISOString(),
|
|
318
|
+
};
|
|
319
|
+
s.proposals.push(proposal);
|
|
320
|
+
await saveState();
|
|
321
|
+
return proposal;
|
|
322
|
+
}
|
|
323
|
+
export function getProposal(proposalId) {
|
|
324
|
+
return getState().proposals.find((p) => p.id === proposalId);
|
|
325
|
+
}
|
|
326
|
+
export function listProposals() {
|
|
327
|
+
return getState().proposals;
|
|
328
|
+
}
|
|
329
|
+
export async function updateProposalStatus(proposalId, status) {
|
|
330
|
+
const s = getState();
|
|
331
|
+
const proposal = s.proposals.find((p) => p.id === proposalId);
|
|
332
|
+
if (!proposal)
|
|
333
|
+
return false;
|
|
334
|
+
proposal.status = status;
|
|
335
|
+
if (status === "executed" || status === "rejected" || status === "failed") {
|
|
336
|
+
proposal.resolvedAt = new Date().toISOString();
|
|
337
|
+
}
|
|
338
|
+
if (status === "executed") {
|
|
339
|
+
recordProposalExecuted(proposal.id, proposal.type);
|
|
340
|
+
}
|
|
341
|
+
await saveState();
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
344
|
+
export async function addVote(proposalId, vote) {
|
|
345
|
+
const s = getState();
|
|
346
|
+
const proposal = s.proposals.find((p) => p.id === proposalId);
|
|
347
|
+
if (!proposal)
|
|
348
|
+
return false;
|
|
349
|
+
proposal.votes.push(vote);
|
|
350
|
+
recordVoteCast(vote.agentId, vote.position, vote.weight);
|
|
351
|
+
await saveState();
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
export async function storeAgentOutput(proposalId, output) {
|
|
355
|
+
const s = getState();
|
|
356
|
+
const proposal = s.proposals.find((p) => p.id === proposalId);
|
|
357
|
+
if (!proposal)
|
|
358
|
+
return false;
|
|
359
|
+
proposal.agentOutputs.push(output);
|
|
360
|
+
await saveState();
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
export async function storeSynthesis(proposalId, synthesis) {
|
|
364
|
+
const s = getState();
|
|
365
|
+
const proposal = s.proposals.find((p) => p.id === proposalId);
|
|
366
|
+
if (!proposal)
|
|
367
|
+
return false;
|
|
368
|
+
proposal.synthesis = synthesis;
|
|
369
|
+
await saveState();
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
export async function storeCompositeScore(proposalId, score) {
|
|
373
|
+
const s = getState();
|
|
374
|
+
const proposal = s.proposals.find((p) => p.id === proposalId);
|
|
375
|
+
if (!proposal)
|
|
376
|
+
return false;
|
|
377
|
+
proposal.compositeScore = score;
|
|
378
|
+
await saveState();
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
export async function storeControlResult(proposalId, result) {
|
|
382
|
+
const s = getState();
|
|
383
|
+
s.controlResults[proposalId] = result;
|
|
384
|
+
await saveState();
|
|
385
|
+
}
|
|
386
|
+
export function getControlResult(proposalId) {
|
|
387
|
+
return getState().controlResults[proposalId];
|
|
388
|
+
}
|
|
389
|
+
export async function storeDeliveryPlan(proposalId, plan) {
|
|
390
|
+
const s = getState();
|
|
391
|
+
s.deliveryPlans[proposalId] = plan;
|
|
392
|
+
await saveState();
|
|
393
|
+
}
|
|
394
|
+
export function getDeliveryPlan(proposalId) {
|
|
395
|
+
return getState().deliveryPlans[proposalId];
|
|
396
|
+
}
|
|
397
|
+
// ── Audit ────────────────────────────────────────────────────
|
|
398
|
+
export async function recordAudit(proposalId, layer, action, actor, details) {
|
|
399
|
+
const s = getState();
|
|
400
|
+
s.auditLog.push({
|
|
401
|
+
id: s.nextAuditId++,
|
|
402
|
+
timestamp: new Date().toISOString(),
|
|
403
|
+
proposalId,
|
|
404
|
+
layer,
|
|
405
|
+
action,
|
|
406
|
+
actor,
|
|
407
|
+
details,
|
|
408
|
+
});
|
|
409
|
+
await saveState();
|
|
410
|
+
}
|
|
411
|
+
export function getAuditLog(proposalId) {
|
|
412
|
+
return getState().auditLog.filter((e) => e.proposalId === proposalId);
|
|
413
|
+
}
|
|
414
|
+
export function getAllAuditLog() {
|
|
415
|
+
return getState().auditLog;
|
|
416
|
+
}
|
|
417
|
+
// ── Outcomes ─────────────────────────────────────────────────
|
|
418
|
+
export function getOutcome(proposalId) {
|
|
419
|
+
return getState().outcomes[proposalId];
|
|
420
|
+
}
|
|
421
|
+
export async function initOutcome(proposalId) {
|
|
422
|
+
const s = getState();
|
|
423
|
+
const existing = s.outcomes[proposalId];
|
|
424
|
+
if (existing)
|
|
425
|
+
return existing;
|
|
426
|
+
const outcome = {
|
|
427
|
+
proposalId,
|
|
428
|
+
ratings: [],
|
|
429
|
+
metrics: [],
|
|
430
|
+
overallScore: 0,
|
|
431
|
+
status: "pending",
|
|
432
|
+
createdAt: new Date().toISOString(),
|
|
433
|
+
updatedAt: new Date().toISOString(),
|
|
434
|
+
};
|
|
435
|
+
s.outcomes[proposalId] = outcome;
|
|
436
|
+
await saveState();
|
|
437
|
+
return outcome;
|
|
438
|
+
}
|
|
439
|
+
export async function addRating(proposalId, rating) {
|
|
440
|
+
const outcome = await initOutcome(proposalId);
|
|
441
|
+
outcome.ratings.push(rating);
|
|
442
|
+
const scores = outcome.ratings.map((r) => r.score);
|
|
443
|
+
outcome.overallScore = scores.reduce((a, b) => a + b, 0) / scores.length;
|
|
444
|
+
outcome.updatedAt = new Date().toISOString();
|
|
445
|
+
await saveState();
|
|
446
|
+
}
|
|
447
|
+
export async function addMetric(proposalId, metric) {
|
|
448
|
+
const outcome = await initOutcome(proposalId);
|
|
449
|
+
outcome.metrics.push(metric);
|
|
450
|
+
outcome.updatedAt = new Date().toISOString();
|
|
451
|
+
await saveState();
|
|
452
|
+
}
|
|
453
|
+
export async function markReviewed(proposalId) {
|
|
454
|
+
const outcome = await initOutcome(proposalId);
|
|
455
|
+
outcome.status = "reviewed";
|
|
456
|
+
outcome.updatedAt = new Date().toISOString();
|
|
457
|
+
await saveState();
|
|
458
|
+
}
|
|
459
|
+
// ── Snapshots ────────────────────────────────────────────────
|
|
460
|
+
export async function captureSnapshot(proposalId, snapshot) {
|
|
461
|
+
const s = getState();
|
|
462
|
+
s.snapshots[proposalId] = snapshot;
|
|
463
|
+
await saveState();
|
|
464
|
+
}
|
|
465
|
+
export function getSnapshot(proposalId) {
|
|
466
|
+
return getState().snapshots[proposalId];
|
|
467
|
+
}
|
|
468
|
+
// ── Verification ─────────────────────────────────────────────
|
|
469
|
+
export async function storeVerification(proposalId, verification) {
|
|
470
|
+
const s = getState();
|
|
471
|
+
s.verifications[proposalId] = verification;
|
|
472
|
+
await saveState();
|
|
473
|
+
}
|
|
474
|
+
export function getVerification(proposalId) {
|
|
475
|
+
return getState().verifications[proposalId];
|
|
476
|
+
}
|
|
477
|
+
// ── Artefacts ────────────────────────────────────────────────
|
|
478
|
+
export async function storeArtefacts(proposalId, artefacts) {
|
|
479
|
+
const s = getState();
|
|
480
|
+
s.artefacts[proposalId] = artefacts;
|
|
481
|
+
await saveState();
|
|
482
|
+
}
|
|
483
|
+
export function getArtefacts(proposalId) {
|
|
484
|
+
return getState().artefacts[proposalId];
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|