@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,100 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { captureSnapshot, getSnapshot, getState, saveState } from "../persistence.js";
|
|
3
|
+
export async function performDryRun(proposal) {
|
|
4
|
+
const _state = getState();
|
|
5
|
+
// Analyze what would change
|
|
6
|
+
const filesAffected = [];
|
|
7
|
+
const risks = [];
|
|
8
|
+
// Check affected paths
|
|
9
|
+
if (proposal.affectedPaths && proposal.affectedPaths.length > 0) {
|
|
10
|
+
filesAffected.push(...proposal.affectedPaths);
|
|
11
|
+
}
|
|
12
|
+
// Risk assessment based on proposal type
|
|
13
|
+
if (proposal.type === "security-change") {
|
|
14
|
+
risks.push("Security-sensitive changes require extra review");
|
|
15
|
+
}
|
|
16
|
+
if (proposal.riskZone === "red") {
|
|
17
|
+
risks.push("Red-zone proposal: high risk detected");
|
|
18
|
+
}
|
|
19
|
+
if (!Array.isArray(proposal.acceptanceCriteria) || proposal.acceptanceCriteria.length === 0) {
|
|
20
|
+
risks.push("No acceptance criteria defined");
|
|
21
|
+
}
|
|
22
|
+
// Estimate duration based on proposal type
|
|
23
|
+
const durationMap = {
|
|
24
|
+
"product-feature": "3-7 days",
|
|
25
|
+
"security-change": "1-2 weeks",
|
|
26
|
+
"technical-change": "2-5 days",
|
|
27
|
+
"release-change": "1-3 days",
|
|
28
|
+
"governance-change": "1-2 days",
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
proposalId: proposal.id,
|
|
32
|
+
preview: `This proposal would modify ${filesAffected.length || "unknown number of"} files and requires ${durationMap[proposal.type] || "unknown duration"}.`,
|
|
33
|
+
filesAffected,
|
|
34
|
+
risks,
|
|
35
|
+
estimatedDuration: durationMap[proposal.type] || "TBD",
|
|
36
|
+
canProceed: risks.filter((r) => r.includes("high risk") || r.includes("Security-sensitive")).length === 0,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function formatDryRun(result) {
|
|
40
|
+
let output = `# 🔍 Dry-Run — Proposal #${result.proposalId}\n\n`;
|
|
41
|
+
output += `**Can Proceed:** ${result.canProceed ? "✅ Yes" : "⚠️ With Caution"}\n`;
|
|
42
|
+
output += `**Estimated Duration:** ${result.estimatedDuration}\n`;
|
|
43
|
+
output += `**Files Affected:** ${result.filesAffected.length > 0 ? result.filesAffected.join(", ") : "To be determined"}\n\n`;
|
|
44
|
+
if (result.risks.length > 0) {
|
|
45
|
+
output += `## ⚠️ Risks\n${result.risks.map((r) => `- ${r}`).join("\n")}\n\n`;
|
|
46
|
+
}
|
|
47
|
+
output += `## Preview\n${result.preview}\n`;
|
|
48
|
+
return output;
|
|
49
|
+
}
|
|
50
|
+
// ── Snapshot Management ─────────────────────────────────────
|
|
51
|
+
export async function createExecutionSnapshot(proposal, cwd) {
|
|
52
|
+
const gitInfo = await new Promise((resolve) => {
|
|
53
|
+
exec("git branch --show-current && git rev-parse HEAD", { cwd }, (err, stdout) => {
|
|
54
|
+
if (err) {
|
|
55
|
+
resolve({ branch: "unknown", sha: "unknown" });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const [branch, sha] = stdout.trim().split("\n");
|
|
59
|
+
resolve({ branch: branch || "unknown", sha: sha || "unknown" });
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
const snapshot = {
|
|
63
|
+
proposalId: proposal.id,
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
branch: gitInfo.branch,
|
|
66
|
+
commitSha: gitInfo.sha,
|
|
67
|
+
filesChanged: proposal.affectedPaths || [],
|
|
68
|
+
stateSnapshot: JSON.stringify({
|
|
69
|
+
agents: getState().agents?.length ?? 0,
|
|
70
|
+
proposals: getState().proposals?.length ?? 0,
|
|
71
|
+
}),
|
|
72
|
+
};
|
|
73
|
+
await captureSnapshot(proposal.id, snapshot);
|
|
74
|
+
return snapshot;
|
|
75
|
+
}
|
|
76
|
+
export function canRollback(proposalId) {
|
|
77
|
+
return getSnapshot(proposalId) !== undefined;
|
|
78
|
+
}
|
|
79
|
+
export async function performRollback(proposalId) {
|
|
80
|
+
const snapshot = getSnapshot(proposalId);
|
|
81
|
+
if (!snapshot) {
|
|
82
|
+
return { success: false, message: `No snapshot found for proposal #${proposalId}` };
|
|
83
|
+
}
|
|
84
|
+
// In a real implementation, this would restore files and git state
|
|
85
|
+
// For now, we mark the proposal as rolled back conceptually
|
|
86
|
+
const proposal = getState().proposals.find((p) => p.id === proposalId);
|
|
87
|
+
if (proposal) {
|
|
88
|
+
proposal.status = "open";
|
|
89
|
+
proposal.resolvedAt = undefined;
|
|
90
|
+
await saveState();
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
message: `Proposal #${proposalId} rolled back to commit ${snapshot.commitSha.slice(0, 8)} on branch ${snapshot.branch}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function formatRollback(result) {
|
|
98
|
+
return result.success ? `# ⏪ Rollback Successful\n\n${result.message}` : `# ❌ Rollback Failed\n\n${result.message}`;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=dry-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/delivery/dry-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ExecutionVerification, Proposal } from "../types/index.js";
|
|
2
|
+
export interface ExecutionResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
result: string;
|
|
5
|
+
filesChanged?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface ProposalQualityValidation {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
missing: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function validateProposalQuality(proposal: Proposal): ProposalQualityValidation;
|
|
12
|
+
export declare function executeProposal(proposal: Proposal): Promise<ExecutionResult>;
|
|
13
|
+
export declare function verifyExecution(proposal: Proposal, options: {
|
|
14
|
+
filesChanged: string[];
|
|
15
|
+
expectedFiles?: string[];
|
|
16
|
+
testOutput?: string;
|
|
17
|
+
testsPassed?: number;
|
|
18
|
+
testsFailed?: number;
|
|
19
|
+
compilationOk?: boolean;
|
|
20
|
+
gitClean?: boolean;
|
|
21
|
+
}): Promise<ExecutionVerification>;
|
|
22
|
+
export declare function formatVerification(v: ExecutionVerification): string;
|
|
23
|
+
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/delivery/execution.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAGhH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,yBAAyB,CAcrF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CA8ClF;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACA,OAAO,CAAC,qBAAqB,CAAC,CAwBhC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAWnE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Proposal Execution
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { canTransition, transitionProposal } from "../governance/lifecycle.js";
|
|
5
|
+
import { captureSnapshot, getState, storeVerification } from "../persistence.js";
|
|
6
|
+
import { generateDeliveryPlan } from "./plans.js";
|
|
7
|
+
export function validateProposalQuality(proposal) {
|
|
8
|
+
const missing = [];
|
|
9
|
+
if (!proposal.problemStatement || proposal.problemStatement.trim().length < 20) {
|
|
10
|
+
missing.push("problemStatement");
|
|
11
|
+
}
|
|
12
|
+
if (!Array.isArray(proposal.acceptanceCriteria) || proposal.acceptanceCriteria.length === 0) {
|
|
13
|
+
missing.push("acceptanceCriteria");
|
|
14
|
+
}
|
|
15
|
+
if (!Array.isArray(proposal.successMetrics) || proposal.successMetrics.length === 0) {
|
|
16
|
+
missing.push("successMetrics");
|
|
17
|
+
}
|
|
18
|
+
return { valid: missing.length === 0, missing };
|
|
19
|
+
}
|
|
20
|
+
export async function executeProposal(proposal) {
|
|
21
|
+
const state = getState();
|
|
22
|
+
// Generate or retrieve delivery plan
|
|
23
|
+
let plan = state.deliveryPlans[proposal.id];
|
|
24
|
+
if (!plan) {
|
|
25
|
+
plan = generateDeliveryPlan(proposal);
|
|
26
|
+
state.deliveryPlans[proposal.id] = plan;
|
|
27
|
+
}
|
|
28
|
+
if (!canTransition(proposal.status, "executed")) {
|
|
29
|
+
return { success: false, result: `Cannot execute proposal from status "${proposal.status}"` };
|
|
30
|
+
}
|
|
31
|
+
// Capture snapshot (conceptual — actual file snapshot done by adapter)
|
|
32
|
+
const snapshot = {
|
|
33
|
+
proposalId: proposal.id,
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
branch: plan.branchStrategy,
|
|
36
|
+
commitSha: "unknown",
|
|
37
|
+
filesChanged: [],
|
|
38
|
+
stateSnapshot: JSON.stringify({
|
|
39
|
+
agents: state.agents.length,
|
|
40
|
+
proposals: state.proposals?.length ?? 0,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
await captureSnapshot(proposal.id, snapshot);
|
|
44
|
+
// Advance state machine: controlled → executed
|
|
45
|
+
const transition = transitionProposal(proposal, "execute");
|
|
46
|
+
if (!transition.success) {
|
|
47
|
+
return { success: false, result: transition.error ?? `Cannot execute proposal from status "${proposal.status}"` };
|
|
48
|
+
}
|
|
49
|
+
proposal.executionResult = `Executed with delivery plan: ${plan.branchStrategy}`;
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
result: `# ✅ Proposal Executed — #${proposal.id}
|
|
53
|
+
|
|
54
|
+
**Title:** ${proposal.title}
|
|
55
|
+
**Status:** 🚀 executed
|
|
56
|
+
**Branch:** \`${plan.branchStrategy}\`
|
|
57
|
+
**Plan:** ${plan.phases.length} phases, ${plan.phases.reduce((sum, p) => sum + p.tasks.length, 0)} tasks
|
|
58
|
+
|
|
59
|
+
The delivery agent has prepared an implementation plan. Review the tasks and begin implementation.`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function verifyExecution(proposal, options) {
|
|
63
|
+
const missingFiles = options.expectedFiles?.filter((f) => !options.filesChanged.includes(f)) ?? [];
|
|
64
|
+
let status = "success";
|
|
65
|
+
if (missingFiles.length > 0)
|
|
66
|
+
status = "partial";
|
|
67
|
+
if (options.testsFailed && options.testsFailed > 0)
|
|
68
|
+
status = "partial";
|
|
69
|
+
if (options.compilationOk === false)
|
|
70
|
+
status = "failed";
|
|
71
|
+
const verification = {
|
|
72
|
+
proposalId: proposal.id,
|
|
73
|
+
status,
|
|
74
|
+
timestamp: new Date().toISOString(),
|
|
75
|
+
filesChanged: options.filesChanged,
|
|
76
|
+
missingFiles,
|
|
77
|
+
testOutput: options.testOutput,
|
|
78
|
+
testsPassed: options.testsPassed,
|
|
79
|
+
testsFailed: options.testsFailed,
|
|
80
|
+
compilationOk: options.compilationOk ?? true,
|
|
81
|
+
gitClean: options.gitClean ?? true,
|
|
82
|
+
summary: `Verification ${status}: ${options.filesChanged.length} files changed, ${missingFiles.length} missing, tests ${options.testsPassed ?? 0}/${(options.testsPassed ?? 0) + (options.testsFailed ?? 0)}`,
|
|
83
|
+
};
|
|
84
|
+
await storeVerification(proposal.id, verification);
|
|
85
|
+
return verification;
|
|
86
|
+
}
|
|
87
|
+
export function formatVerification(v) {
|
|
88
|
+
return `# 🔍 Verification — #${v.proposalId}
|
|
89
|
+
|
|
90
|
+
**Status:** ${v.status === "success" ? "✅" : v.status === "partial" ? "⚠️" : "❌"} ${v.status}
|
|
91
|
+
**Files Changed:** ${v.filesChanged.length}
|
|
92
|
+
**Missing Files:** ${v.missingFiles.length > 0 ? v.missingFiles.join(", ") : "none"}
|
|
93
|
+
**Tests:** ${v.testsPassed ?? 0} passed${v.testsFailed ? `, ${v.testsFailed} failed` : ""}
|
|
94
|
+
**Compilation:** ${v.compilationOk ? "✅" : "❌"}
|
|
95
|
+
**Git Clean:** ${v.gitClean ? "✅" : "❌"}
|
|
96
|
+
|
|
97
|
+
${v.summary}`;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/delivery/execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { getDeliveryPlan as persistGetDeliveryPlan, storeDeliveryPlan } from "../persistence.js";
|
|
2
|
+
import type { DeliveryPlan, Proposal } from "../types/index.js";
|
|
3
|
+
export { persistGetDeliveryPlan as getPlan, storeDeliveryPlan as storePlan };
|
|
4
|
+
export declare function generateDeliveryPlan(proposal: Proposal): DeliveryPlan;
|
|
5
|
+
export declare function parseDeliveryPlan(markdown: string): Partial<DeliveryPlan>;
|
|
6
|
+
export declare function formatPlan(plan: DeliveryPlan): string;
|
|
7
|
+
//# sourceMappingURL=plans.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/delivery/plans.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,IAAI,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAiB,YAAY,EAAgB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAE,sBAAsB,IAAI,OAAO,EAAE,iBAAiB,IAAI,SAAS,EAAE,CAAC;AAE7E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAqHrE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCzE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkBrD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Delivery Plans
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { getDeliveryPlan as persistGetDeliveryPlan, storeDeliveryPlan } from "../persistence.js";
|
|
5
|
+
export { persistGetDeliveryPlan as getPlan, storeDeliveryPlan as storePlan };
|
|
6
|
+
export function generateDeliveryPlan(proposal) {
|
|
7
|
+
const phases = [
|
|
8
|
+
{
|
|
9
|
+
number: 1,
|
|
10
|
+
name: "Setup & Design",
|
|
11
|
+
tasks: [
|
|
12
|
+
{
|
|
13
|
+
id: "T1",
|
|
14
|
+
title: "Review proposal and acceptance criteria",
|
|
15
|
+
description: "Understand requirements and clarify ambiguities",
|
|
16
|
+
effort: "xs",
|
|
17
|
+
phase: 1,
|
|
18
|
+
dependencies: [],
|
|
19
|
+
status: "pending",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "T2",
|
|
23
|
+
title: "Design solution",
|
|
24
|
+
description: "Create technical design document",
|
|
25
|
+
effort: "s",
|
|
26
|
+
phase: 1,
|
|
27
|
+
dependencies: ["T1"],
|
|
28
|
+
status: "pending",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "T3",
|
|
32
|
+
title: "Set up feature branch",
|
|
33
|
+
description: "Create branch for implementation",
|
|
34
|
+
effort: "xs",
|
|
35
|
+
phase: 1,
|
|
36
|
+
dependencies: ["T2"],
|
|
37
|
+
status: "pending",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
duration: "1-2 days",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
number: 2,
|
|
44
|
+
name: "Implementation",
|
|
45
|
+
tasks: [
|
|
46
|
+
{
|
|
47
|
+
id: "T4",
|
|
48
|
+
title: "Core implementation",
|
|
49
|
+
description: "Implement the main functionality",
|
|
50
|
+
effort: "m",
|
|
51
|
+
phase: 2,
|
|
52
|
+
dependencies: ["T3"],
|
|
53
|
+
status: "pending",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: "T5",
|
|
57
|
+
title: "Add tests",
|
|
58
|
+
description: "Unit and integration tests",
|
|
59
|
+
effort: "m",
|
|
60
|
+
phase: 2,
|
|
61
|
+
dependencies: ["T4"],
|
|
62
|
+
status: "pending",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "T6",
|
|
66
|
+
title: "Documentation",
|
|
67
|
+
description: "Update docs and README",
|
|
68
|
+
effort: "s",
|
|
69
|
+
phase: 2,
|
|
70
|
+
dependencies: ["T4"],
|
|
71
|
+
status: "pending",
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
duration: "3-5 days",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
number: 3,
|
|
78
|
+
name: "Review & Release",
|
|
79
|
+
tasks: [
|
|
80
|
+
{
|
|
81
|
+
id: "T7",
|
|
82
|
+
title: "Code review",
|
|
83
|
+
description: "Self-review and peer review",
|
|
84
|
+
effort: "s",
|
|
85
|
+
phase: 3,
|
|
86
|
+
dependencies: ["T5", "T6"],
|
|
87
|
+
status: "pending",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "T8",
|
|
91
|
+
title: "Quality gates",
|
|
92
|
+
description: "Run control checks and verify acceptance criteria",
|
|
93
|
+
effort: "s",
|
|
94
|
+
phase: 3,
|
|
95
|
+
dependencies: ["T7"],
|
|
96
|
+
status: "pending",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "T9",
|
|
100
|
+
title: "Merge and deploy",
|
|
101
|
+
description: "Merge to main and deploy",
|
|
102
|
+
effort: "xs",
|
|
103
|
+
phase: 3,
|
|
104
|
+
dependencies: ["T8"],
|
|
105
|
+
status: "pending",
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
duration: "1-2 days",
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
return {
|
|
112
|
+
proposalId: proposal.id,
|
|
113
|
+
createdAt: new Date().toISOString(),
|
|
114
|
+
phases,
|
|
115
|
+
branchStrategy: `feature/dao-${proposal.id}-${proposal.title
|
|
116
|
+
.toLowerCase()
|
|
117
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
118
|
+
.slice(0, 30)}`,
|
|
119
|
+
rollbackPlan: "Revert the merge commit and redeploy previous version",
|
|
120
|
+
estimatedDuration: "5-9 days",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export function parseDeliveryPlan(markdown) {
|
|
124
|
+
// Simple parser for markdown plan format
|
|
125
|
+
const plan = { phases: [] };
|
|
126
|
+
const phaseMatches = [
|
|
127
|
+
...markdown.matchAll(/##\s*Phase\s*(\d+):\s*(.+?)\n([\s\S]*?)(?=##\s*Phase|\n##\s*Rollback|$)/gi),
|
|
128
|
+
];
|
|
129
|
+
for (const match of phaseMatches) {
|
|
130
|
+
const phaseNum = parseInt(match[1] ?? "0", 10);
|
|
131
|
+
const phaseName = match[2]?.trim();
|
|
132
|
+
const phaseContent = match[3] ?? "";
|
|
133
|
+
const tasks = [];
|
|
134
|
+
const taskMatches = [...phaseContent.matchAll(/-\s*\[(.)\]\s*\*\*(.+?)\*\*\s*-\s*(.+?)(?:\n|$)/gi)];
|
|
135
|
+
for (const tm of taskMatches) {
|
|
136
|
+
tasks.push({
|
|
137
|
+
id: `T${tasks.length + 1}`,
|
|
138
|
+
title: tm[2]?.trim() ?? "",
|
|
139
|
+
description: tm[3]?.trim() ?? "",
|
|
140
|
+
effort: "m",
|
|
141
|
+
phase: phaseNum,
|
|
142
|
+
dependencies: [],
|
|
143
|
+
status: tm[1] === "x" ? "done" : "pending",
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
plan.phases?.push({
|
|
147
|
+
number: phaseNum,
|
|
148
|
+
name: phaseName ?? "",
|
|
149
|
+
tasks,
|
|
150
|
+
duration: "TBD",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return plan;
|
|
154
|
+
}
|
|
155
|
+
export function formatPlan(plan) {
|
|
156
|
+
return `# 📋 Delivery Plan — Proposal #${plan.proposalId}
|
|
157
|
+
|
|
158
|
+
**Created:** ${plan.createdAt}
|
|
159
|
+
**Estimated Duration:** ${plan.estimatedDuration}
|
|
160
|
+
**Branch Strategy:** \`${plan.branchStrategy}\`
|
|
161
|
+
|
|
162
|
+
## Phases
|
|
163
|
+
${plan.phases
|
|
164
|
+
.map((phase) => `### Phase ${phase.number}: ${phase.name} (${phase.duration})
|
|
165
|
+
${phase.tasks.map((t) => `- [${t.status === "done" ? "x" : " "}] **${t.title}** — ${t.description} (${t.effort})`).join("\n")}
|
|
166
|
+
`)
|
|
167
|
+
.join("\n")}
|
|
168
|
+
|
|
169
|
+
## Rollback Plan
|
|
170
|
+
${plan.rollbackPlan}`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/delivery/plans.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DAOAgent } from "../types/index.js";
|
|
2
|
+
export declare const DEFAULT_AGENTS: DAOAgent[];
|
|
3
|
+
export declare function initializeAgents(customAgents?: DAOAgent[]): DAOAgent[];
|
|
4
|
+
export declare function formatAgentsTable(agents: DAOAgent[]): string;
|
|
5
|
+
export declare function formatAgentCard(agent: DAOAgent): string;
|
|
6
|
+
export declare function getDefaultAgentPrompts(): Record<string, string>;
|
|
7
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/governance/agents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,QAAQ,EAgSpC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAKtE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAM5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAMvD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE/D"}
|