@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.
Files changed (141) hide show
  1. package/dist/agents/index.d.ts +2 -0
  2. package/dist/agents/index.d.ts.map +1 -0
  3. package/dist/agents/index.js +3 -0
  4. package/dist/agents/index.js.map +1 -0
  5. package/dist/agents/prompts.d.ts +38 -0
  6. package/dist/agents/prompts.d.ts.map +1 -0
  7. package/dist/agents/prompts.js +142 -0
  8. package/dist/agents/prompts.js.map +1 -0
  9. package/dist/config.d.ts +31 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +100 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/control/audit.d.ts +7 -0
  14. package/dist/control/audit.d.ts.map +1 -0
  15. package/dist/control/audit.js +25 -0
  16. package/dist/control/audit.js.map +1 -0
  17. package/dist/control/gates.d.ts +4 -0
  18. package/dist/control/gates.d.ts.map +1 -0
  19. package/dist/control/gates.js +252 -0
  20. package/dist/control/gates.js.map +1 -0
  21. package/dist/control/index.d.ts +3 -0
  22. package/dist/control/index.d.ts.map +1 -0
  23. package/dist/control/index.js +4 -0
  24. package/dist/control/index.js.map +1 -0
  25. package/dist/delivery/artefacts.d.ts +20 -0
  26. package/dist/delivery/artefacts.d.ts.map +1 -0
  27. package/dist/delivery/artefacts.js +222 -0
  28. package/dist/delivery/artefacts.js.map +1 -0
  29. package/dist/delivery/dry-run.d.ts +14 -0
  30. package/dist/delivery/dry-run.d.ts.map +1 -0
  31. package/dist/delivery/dry-run.js +100 -0
  32. package/dist/delivery/dry-run.js.map +1 -0
  33. package/dist/delivery/execution.d.ts +23 -0
  34. package/dist/delivery/execution.d.ts.map +1 -0
  35. package/dist/delivery/execution.js +99 -0
  36. package/dist/delivery/execution.js.map +1 -0
  37. package/dist/delivery/index.d.ts +5 -0
  38. package/dist/delivery/index.d.ts.map +1 -0
  39. package/dist/delivery/index.js +6 -0
  40. package/dist/delivery/index.js.map +1 -0
  41. package/dist/delivery/plans.d.ts +7 -0
  42. package/dist/delivery/plans.d.ts.map +1 -0
  43. package/dist/delivery/plans.js +172 -0
  44. package/dist/delivery/plans.js.map +1 -0
  45. package/dist/governance/agents.d.ts +7 -0
  46. package/dist/governance/agents.d.ts.map +1 -0
  47. package/dist/governance/agents.js +310 -0
  48. package/dist/governance/agents.js.map +1 -0
  49. package/dist/governance/amendments.d.ts +20 -0
  50. package/dist/governance/amendments.d.ts.map +1 -0
  51. package/dist/governance/amendments.js +242 -0
  52. package/dist/governance/amendments.js.map +1 -0
  53. package/dist/governance/index.d.ts +6 -0
  54. package/dist/governance/index.d.ts.map +1 -0
  55. package/dist/governance/index.js +7 -0
  56. package/dist/governance/index.js.map +1 -0
  57. package/dist/governance/lifecycle.d.ts +13 -0
  58. package/dist/governance/lifecycle.d.ts.map +1 -0
  59. package/dist/governance/lifecycle.js +86 -0
  60. package/dist/governance/lifecycle.js.map +1 -0
  61. package/dist/governance/scoring.d.ts +16 -0
  62. package/dist/governance/scoring.d.ts.map +1 -0
  63. package/dist/governance/scoring.js +118 -0
  64. package/dist/governance/scoring.js.map +1 -0
  65. package/dist/governance/voting.d.ts +6 -0
  66. package/dist/governance/voting.d.ts.map +1 -0
  67. package/dist/governance/voting.js +73 -0
  68. package/dist/governance/voting.js.map +1 -0
  69. package/dist/health-score.d.ts +25 -0
  70. package/dist/health-score.d.ts.map +1 -0
  71. package/dist/health-score.js +201 -0
  72. package/dist/health-score.js.map +1 -0
  73. package/dist/index.d.ts +14 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +29 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/integrations/bitbucket.d.ts +26 -0
  78. package/dist/integrations/bitbucket.d.ts.map +1 -0
  79. package/dist/integrations/bitbucket.js +76 -0
  80. package/dist/integrations/bitbucket.js.map +1 -0
  81. package/dist/integrations/github.d.ts +39 -0
  82. package/dist/integrations/github.d.ts.map +1 -0
  83. package/dist/integrations/github.js +126 -0
  84. package/dist/integrations/github.js.map +1 -0
  85. package/dist/integrations/gitlab.d.ts +29 -0
  86. package/dist/integrations/gitlab.d.ts.map +1 -0
  87. package/dist/integrations/gitlab.js +86 -0
  88. package/dist/integrations/gitlab.js.map +1 -0
  89. package/dist/integrations/index.d.ts +4 -0
  90. package/dist/integrations/index.d.ts.map +1 -0
  91. package/dist/integrations/index.js +5 -0
  92. package/dist/integrations/index.js.map +1 -0
  93. package/dist/integrations/utils.d.ts +2 -0
  94. package/dist/integrations/utils.d.ts.map +1 -0
  95. package/dist/integrations/utils.js +8 -0
  96. package/dist/integrations/utils.js.map +1 -0
  97. package/dist/intelligence/index.d.ts +3 -0
  98. package/dist/intelligence/index.d.ts.map +1 -0
  99. package/dist/intelligence/index.js +4 -0
  100. package/dist/intelligence/index.js.map +1 -0
  101. package/dist/intelligence/roundtable.d.ts +16 -0
  102. package/dist/intelligence/roundtable.d.ts.map +1 -0
  103. package/dist/intelligence/roundtable.js +113 -0
  104. package/dist/intelligence/roundtable.js.map +1 -0
  105. package/dist/intelligence/swarm.d.ts +27 -0
  106. package/dist/intelligence/swarm.d.ts.map +1 -0
  107. package/dist/intelligence/swarm.js +113 -0
  108. package/dist/intelligence/swarm.js.map +1 -0
  109. package/dist/intelligence/synthesis.d.ts +4 -0
  110. package/dist/intelligence/synthesis.d.ts.map +1 -0
  111. package/dist/intelligence/synthesis.js +84 -0
  112. package/dist/intelligence/synthesis.js.map +1 -0
  113. package/dist/observability/alerts.d.ts +40 -0
  114. package/dist/observability/alerts.d.ts.map +1 -0
  115. package/dist/observability/alerts.js +162 -0
  116. package/dist/observability/alerts.js.map +1 -0
  117. package/dist/observability/index.d.ts +4 -0
  118. package/dist/observability/index.d.ts.map +1 -0
  119. package/dist/observability/index.js +5 -0
  120. package/dist/observability/index.js.map +1 -0
  121. package/dist/observability/metrics.d.ts +64 -0
  122. package/dist/observability/metrics.d.ts.map +1 -0
  123. package/dist/observability/metrics.js +224 -0
  124. package/dist/observability/metrics.js.map +1 -0
  125. package/dist/observability/tracing.d.ts +44 -0
  126. package/dist/observability/tracing.d.ts.map +1 -0
  127. package/dist/observability/tracing.js +129 -0
  128. package/dist/observability/tracing.js.map +1 -0
  129. package/dist/persistence.d.ts +50 -0
  130. package/dist/persistence.d.ts.map +1 -0
  131. package/dist/persistence.js +486 -0
  132. package/dist/persistence.js.map +1 -0
  133. package/dist/types/index.d.ts +652 -0
  134. package/dist/types/index.d.ts.map +1 -0
  135. package/dist/types/index.js +131 -0
  136. package/dist/types/index.js.map +1 -0
  137. package/dist/utils/host.d.ts +14 -0
  138. package/dist/utils/host.d.ts.map +1 -0
  139. package/dist/utils/host.js +42 -0
  140. package/dist/utils/host.js.map +1 -0
  141. package/package.json +64 -0
@@ -0,0 +1,26 @@
1
+ import type { Proposal } from "../types/index.js";
2
+ interface BitbucketConfig {
3
+ token: string;
4
+ username: string;
5
+ workspace: string;
6
+ repo: string;
7
+ enabled: boolean;
8
+ defaultBranch?: string;
9
+ }
10
+ export declare function configureBitbucket(cfg: Partial<BitbucketConfig>): void;
11
+ export declare function getBitbucketConfig(): BitbucketConfig | null;
12
+ export declare function isBitbucketEnabled(): boolean;
13
+ export declare function bbBranchNameFor(proposal: Proposal): string;
14
+ export declare function bbCreateBranch(branchName: string, baseBranch?: string): Promise<{
15
+ ref: string;
16
+ sha: string;
17
+ } | null>;
18
+ export declare function bbCreatePullRequest(proposal: Proposal, options: {
19
+ sourceBranch: string;
20
+ targetBranch?: string;
21
+ }): Promise<{
22
+ id: number;
23
+ url: string;
24
+ } | null>;
25
+ export {};
26
+ //# sourceMappingURL=bitbucket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../src/integrations/bitbucket.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAUD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE1D;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgC9C;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAyB7C"}
@@ -0,0 +1,76 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Bitbucket Integration
3
+ // ============================================================
4
+ import { slugify } from "./utils.js";
5
+ let config = null;
6
+ export function configureBitbucket(cfg) {
7
+ config = { ...config, ...cfg };
8
+ }
9
+ export function getBitbucketConfig() {
10
+ return config;
11
+ }
12
+ export function isBitbucketEnabled() {
13
+ return config?.enabled === true && !!config.token && !!config.workspace && !!config.repo;
14
+ }
15
+ function getAuthHeaders() {
16
+ const auth = Buffer.from(`${config?.username}:${config?.token}`).toString("base64");
17
+ return {
18
+ Authorization: `Basic ${auth}`,
19
+ "Content-Type": "application/json",
20
+ };
21
+ }
22
+ export function bbBranchNameFor(proposal) {
23
+ return `dao/${proposal.id}-${slugify(proposal.title)}`;
24
+ }
25
+ export async function bbCreateBranch(branchName, baseBranch) {
26
+ if (!isBitbucketEnabled())
27
+ return null;
28
+ const base = baseBranch || config?.defaultBranch || "main";
29
+ // Get base branch commit SHA
30
+ const refRes = await fetch(`https://api.bitbucket.org/2.0/repositories/${config?.workspace}/${config?.repo}/refs/branches/${base}`, { headers: getAuthHeaders() });
31
+ if (!refRes.ok) {
32
+ throw new Error(`Failed to get ref: ${refRes.status}`);
33
+ }
34
+ const refData = (await refRes.json());
35
+ const sha = refData.target?.hash;
36
+ if (!sha)
37
+ return null;
38
+ // Create branch (Bitbucket calls refs)
39
+ const createRes = await fetch(`https://api.bitbucket.org/2.0/repositories/${config?.workspace}/${config?.repo}/refs/branches`, {
40
+ method: "POST",
41
+ headers: getAuthHeaders(),
42
+ body: JSON.stringify({ name: branchName, target: { hash: sha } }),
43
+ });
44
+ if (!createRes.ok && createRes.status !== 409) {
45
+ throw new Error(`Failed to create branch: ${createRes.status}`);
46
+ }
47
+ return { ref: `refs/heads/${branchName}`, sha };
48
+ }
49
+ export async function bbCreatePullRequest(proposal, options) {
50
+ if (!isBitbucketEnabled())
51
+ return null;
52
+ const body = buildPRBody(proposal);
53
+ const res = await fetch(`https://api.bitbucket.org/2.0/repositories/${config?.workspace}/${config?.repo}/pullrequests`, {
54
+ method: "POST",
55
+ headers: getAuthHeaders(),
56
+ body: JSON.stringify({
57
+ title: proposal.title,
58
+ description: body,
59
+ source: { branch: { name: options.sourceBranch } },
60
+ destination: { branch: { name: options.targetBranch || config?.defaultBranch || "main" } },
61
+ }),
62
+ });
63
+ if (!res.ok) {
64
+ throw new Error(`Failed to create PR: ${res.status}`);
65
+ }
66
+ const data = (await res.json());
67
+ return { id: data.id, url: data.links.html.href };
68
+ }
69
+ function buildPRBody(proposal) {
70
+ let body = `**Proposal #${proposal.id}:** ${proposal.title}\n\n**Type:** ${proposal.type}\n**Status:** ${proposal.status}\n\n${proposal.description}\n`;
71
+ if (proposal.problemStatement) {
72
+ body += `\n**Problem Statement:**\n${proposal.problemStatement}\n`;
73
+ }
74
+ return body;
75
+ }
76
+ //# sourceMappingURL=bitbucket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../src/integrations/bitbucket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Proposal } from "../types/index.js";
2
+ interface GitHubConfig {
3
+ token: string;
4
+ owner: string;
5
+ repo: string;
6
+ enabled: boolean;
7
+ apiBase?: string;
8
+ defaultBranch?: string;
9
+ }
10
+ export declare function configureGitHub(cfg: Partial<GitHubConfig>): void;
11
+ export declare function getGitHubConfig(): GitHubConfig | null;
12
+ export declare function isGitHubEnabled(): boolean;
13
+ export declare function ghBranchNameFor(proposal: Proposal): string;
14
+ export declare function ghCreateBranch(branchName: string, baseBranch?: string): Promise<{
15
+ ref: string;
16
+ sha: string;
17
+ } | null>;
18
+ export declare function ghCreatePullRequest(proposal: Proposal, options: {
19
+ headBranch: string;
20
+ baseBranch?: string;
21
+ draft?: boolean;
22
+ linkedIssue?: number;
23
+ }): Promise<{
24
+ number: number;
25
+ url: string;
26
+ } | null>;
27
+ export declare function ghCreateIssue(title: string, body: string, labels?: string[]): Promise<{
28
+ number: number;
29
+ url: string;
30
+ } | null>;
31
+ export declare function ghUpdateIssue(issueNumber: number, updates: {
32
+ title?: string;
33
+ body?: string;
34
+ state?: "open" | "closed";
35
+ labels?: string[];
36
+ }): Promise<boolean>;
37
+ export declare function ghSyncProposal(proposal: Proposal, issueNumber?: number): Promise<number | null>;
38
+ export {};
39
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAcD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE1D;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA4B9C;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAuBjD;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAYjD;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvF,OAAO,CAAC,OAAO,CAAC,CAUlB;AA0BD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYrG"}
@@ -0,0 +1,126 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — GitHub Integration
3
+ // ============================================================
4
+ import { slugify } from "./utils.js";
5
+ let config = null;
6
+ export function configureGitHub(cfg) {
7
+ config = { ...config, ...cfg };
8
+ }
9
+ export function getGitHubConfig() {
10
+ return config;
11
+ }
12
+ export function isGitHubEnabled() {
13
+ return config?.enabled === true && !!config.token && !!config.owner && !!config.repo;
14
+ }
15
+ function getApiBase() {
16
+ return config?.apiBase || "https://api.github.com";
17
+ }
18
+ function getAuthHeaders() {
19
+ return {
20
+ Authorization: `Bearer ${config?.token}`,
21
+ Accept: "application/vnd.github+json",
22
+ "X-GitHub-Api-Version": "2022-11-28",
23
+ };
24
+ }
25
+ export function ghBranchNameFor(proposal) {
26
+ return `dao/${proposal.id}-${slugify(proposal.title)}`;
27
+ }
28
+ export async function ghCreateBranch(branchName, baseBranch) {
29
+ if (!isGitHubEnabled())
30
+ return null;
31
+ const base = baseBranch || config?.defaultBranch || "main";
32
+ // Get base branch SHA
33
+ const refRes = await fetch(`${getApiBase()}/repos/${config?.owner}/${config?.repo}/git/ref/heads/${base}`, {
34
+ headers: getAuthHeaders(),
35
+ });
36
+ if (!refRes.ok) {
37
+ throw new Error(`Failed to get ref for ${base}: ${refRes.status}`);
38
+ }
39
+ const refData = (await refRes.json());
40
+ const sha = refData.object?.sha;
41
+ if (!sha)
42
+ return null;
43
+ // Create branch
44
+ const createRes = await fetch(`${getApiBase()}/repos/${config?.owner}/${config?.repo}/git/refs`, {
45
+ method: "POST",
46
+ headers: { ...getAuthHeaders(), "Content-Type": "application/json" },
47
+ body: JSON.stringify({ ref: `refs/heads/${branchName}`, sha }),
48
+ });
49
+ if (!createRes.ok && createRes.status !== 422) {
50
+ throw new Error(`Failed to create branch: ${createRes.status}`);
51
+ }
52
+ return { ref: `refs/heads/${branchName}`, sha };
53
+ }
54
+ export async function ghCreatePullRequest(proposal, options) {
55
+ if (!isGitHubEnabled())
56
+ return null;
57
+ const body = buildPRBody(proposal, options.linkedIssue);
58
+ const res = await fetch(`${getApiBase()}/repos/${config?.owner}/${config?.repo}/pulls`, {
59
+ method: "POST",
60
+ headers: { ...getAuthHeaders(), "Content-Type": "application/json" },
61
+ body: JSON.stringify({
62
+ title: proposal.title,
63
+ body,
64
+ head: options.headBranch,
65
+ base: options.baseBranch || config?.defaultBranch || "main",
66
+ draft: options.draft ?? false,
67
+ }),
68
+ });
69
+ if (!res.ok) {
70
+ throw new Error(`Failed to create PR: ${res.status}`);
71
+ }
72
+ const data = (await res.json());
73
+ return { number: data.number, url: data.html_url };
74
+ }
75
+ export async function ghCreateIssue(title, body, labels) {
76
+ if (!isGitHubEnabled())
77
+ return null;
78
+ const res = await fetch(`${getApiBase()}/repos/${config?.owner}/${config?.repo}/issues`, {
79
+ method: "POST",
80
+ headers: { ...getAuthHeaders(), "Content-Type": "application/json" },
81
+ body: JSON.stringify({ title, body, labels: labels ?? ["dao-proposal"] }),
82
+ });
83
+ if (!res.ok)
84
+ return null;
85
+ const data = (await res.json());
86
+ return { number: data.number, url: data.html_url };
87
+ }
88
+ export async function ghUpdateIssue(issueNumber, updates) {
89
+ if (!isGitHubEnabled())
90
+ return false;
91
+ const res = await fetch(`${getApiBase()}/repos/${config?.owner}/${config?.repo}/issues/${issueNumber}`, {
92
+ method: "PATCH",
93
+ headers: { ...getAuthHeaders(), "Content-Type": "application/json" },
94
+ body: JSON.stringify(updates),
95
+ });
96
+ return res.ok;
97
+ }
98
+ function buildPRBody(proposal, linkedIssue) {
99
+ let body = `## Proposal #${proposal.id}: ${proposal.title}\n\n**Type:** ${proposal.type}\n**Status:** ${proposal.status}\n\n### Description\n${proposal.description}\n`;
100
+ if (proposal.problemStatement) {
101
+ body += `\n### Problem Statement\n${proposal.problemStatement}\n`;
102
+ }
103
+ if (Array.isArray(proposal.acceptanceCriteria) && proposal.acceptanceCriteria.length > 0) {
104
+ body += `\n### Acceptance Criteria\n${proposal.acceptanceCriteria.map((ac) => `- ${typeof ac === "string" ? ac : ac.id}: ${typeof ac === "string" ? ac : ac.then}`).join("\n")}\n`;
105
+ }
106
+ if (proposal.synthesis) {
107
+ body += `\n### Deliberation Summary\n${proposal.synthesis.slice(0, 500)}${proposal.synthesis.length > 500 ? "..." : ""}\n`;
108
+ }
109
+ if (linkedIssue) {
110
+ body += `\nCloses #${linkedIssue}\n`;
111
+ }
112
+ return body;
113
+ }
114
+ // ── Proposal Sync ────────────────────────────────────────────
115
+ export async function ghSyncProposal(proposal, issueNumber) {
116
+ if (!isGitHubEnabled())
117
+ return null;
118
+ const body = `## DAO Proposal #${proposal.id}\n\n**Type:** ${proposal.type}\n**Risk Zone:** ${proposal.riskZone ?? "unknown"}\n**Status:** ${proposal.status}\n\n${proposal.description}\n\n${proposal.problemStatement ? `### Problem Statement\n${proposal.problemStatement}\n` : ""}`;
119
+ if (issueNumber) {
120
+ await ghUpdateIssue(issueNumber, { body, title: `[DAO] #${proposal.id}: ${proposal.title}` });
121
+ return issueNumber;
122
+ }
123
+ const issue = await ghCreateIssue(`[DAO] #${proposal.id}: ${proposal.title}`, body);
124
+ return issue?.number ?? null;
125
+ }
126
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Proposal } from "../types/index.js";
2
+ interface GitLabConfig {
3
+ token: string;
4
+ url: string;
5
+ projectId: string;
6
+ enabled: boolean;
7
+ defaultBranch?: string;
8
+ }
9
+ export declare function configureGitLab(cfg: Partial<GitLabConfig>): void;
10
+ export declare function getGitLabConfig(): GitLabConfig | null;
11
+ export declare function isGitLabEnabled(): boolean;
12
+ export declare function glBranchNameFor(proposal: Proposal): string;
13
+ export declare function glCreateBranch(branchName: string, baseBranch?: string): Promise<{
14
+ ref: string;
15
+ sha: string;
16
+ } | null>;
17
+ export declare function glCreateMergeRequest(proposal: Proposal, options: {
18
+ sourceBranch: string;
19
+ targetBranch?: string;
20
+ }): Promise<{
21
+ iid: number;
22
+ url: string;
23
+ } | null>;
24
+ export declare function glCreateIssue(title: string, body: string, labels?: string[]): Promise<{
25
+ iid: number;
26
+ url: string;
27
+ } | null>;
28
+ export {};
29
+ //# sourceMappingURL=gitlab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/integrations/gitlab.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAcD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE1D;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAoB9C;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAsB9C;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAY9C"}
@@ -0,0 +1,86 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — GitLab Integration
3
+ // ============================================================
4
+ import { slugify } from "./utils.js";
5
+ let config = null;
6
+ export function configureGitLab(cfg) {
7
+ config = { ...config, ...cfg };
8
+ }
9
+ export function getGitLabConfig() {
10
+ return config;
11
+ }
12
+ export function isGitLabEnabled() {
13
+ return config?.enabled === true && !!config.token && !!config.projectId;
14
+ }
15
+ function getApiBase() {
16
+ const url = config?.url || "https://gitlab.com";
17
+ return `${url.replace(/\/$/, "")}/api/v4`;
18
+ }
19
+ function getAuthHeaders() {
20
+ return {
21
+ "PRIVATE-TOKEN": config?.token ?? "",
22
+ "Content-Type": "application/json",
23
+ };
24
+ }
25
+ export function glBranchNameFor(proposal) {
26
+ return `dao/${proposal.id}-${slugify(proposal.title)}`;
27
+ }
28
+ export async function glCreateBranch(branchName, baseBranch) {
29
+ if (!isGitLabEnabled())
30
+ return null;
31
+ const base = baseBranch || config?.defaultBranch || "main";
32
+ const res = await fetch(`${getApiBase()}/projects/${encodeURIComponent(config?.projectId ?? "")}/repository/branches`, {
33
+ method: "POST",
34
+ headers: getAuthHeaders(),
35
+ body: JSON.stringify({ branch: branchName, ref: base }),
36
+ });
37
+ if (!res.ok) {
38
+ throw new Error(`Failed to create branch: ${res.status}`);
39
+ }
40
+ const data = (await res.json());
41
+ return { ref: `refs/heads/${data.name}`, sha: data.commit.id };
42
+ }
43
+ export async function glCreateMergeRequest(proposal, options) {
44
+ if (!isGitLabEnabled())
45
+ return null;
46
+ const body = buildMRBody(proposal);
47
+ const res = await fetch(`${getApiBase()}/projects/${encodeURIComponent(config?.projectId ?? "")}/merge_requests`, {
48
+ method: "POST",
49
+ headers: getAuthHeaders(),
50
+ body: JSON.stringify({
51
+ source_branch: options.sourceBranch,
52
+ target_branch: options.targetBranch || config?.defaultBranch || "main",
53
+ title: proposal.title,
54
+ description: body,
55
+ }),
56
+ });
57
+ if (!res.ok) {
58
+ throw new Error(`Failed to create MR: ${res.status}`);
59
+ }
60
+ const data = (await res.json());
61
+ return { iid: data.iid, url: data.web_url };
62
+ }
63
+ export async function glCreateIssue(title, body, labels) {
64
+ if (!isGitLabEnabled())
65
+ return null;
66
+ const res = await fetch(`${getApiBase()}/projects/${encodeURIComponent(config?.projectId ?? "")}/issues`, {
67
+ method: "POST",
68
+ headers: getAuthHeaders(),
69
+ body: JSON.stringify({ title, description: body, labels: labels?.join(",") }),
70
+ });
71
+ if (!res.ok)
72
+ return null;
73
+ const data = (await res.json());
74
+ return { iid: data.iid, url: data.web_url };
75
+ }
76
+ function buildMRBody(proposal) {
77
+ let body = `## Proposal #${proposal.id}: ${proposal.title}\n\n**Type:** ${proposal.type}\n**Status:** ${proposal.status}\n\n### Description\n${proposal.description}\n`;
78
+ if (proposal.problemStatement) {
79
+ body += `\n### Problem Statement\n${proposal.problemStatement}\n`;
80
+ }
81
+ if (proposal.synthesis) {
82
+ body += `\n### Deliberation Summary\n${proposal.synthesis.slice(0, 500)}...\n`;
83
+ }
84
+ return body;
85
+ }
86
+ //# sourceMappingURL=gitlab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/integrations/gitlab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./bitbucket.js";
2
+ export * from "./github.js";
3
+ export * from "./gitlab.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Forge Integrations
2
+ export * from "./bitbucket.js";
3
+ export * from "./github.js";
4
+ export * from "./gitlab.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAErB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function slugify(title: string): string;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/integrations/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7C"}
@@ -0,0 +1,8 @@
1
+ export function slugify(title) {
2
+ return title
3
+ .toLowerCase()
4
+ .replace(/[^a-z0-9]+/g, "-")
5
+ .replace(/^-|-$/g, "")
6
+ .slice(0, 40);
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/integrations/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./swarm.js";
2
+ export * from "./synthesis.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intelligence/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Intelligence Layer (L2) — Swarm Dispatch, Synthesis
2
+ export * from "./swarm.js";
3
+ export * from "./synthesis.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intelligence/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DAOAgent, HostAdapter, ProposalType } from "../types/index.js";
2
+ export interface RoundTableSuggestion {
3
+ agentId: string;
4
+ agentName: string;
5
+ content: string;
6
+ parsed?: {
7
+ title: string;
8
+ type: ProposalType;
9
+ description: string;
10
+ };
11
+ proposalId?: number;
12
+ error?: string;
13
+ }
14
+ export declare function runRoundTable(adapter: HostAdapter, agents: DAOAgent[], maxConcurrent: number): Promise<RoundTableSuggestion[]>;
15
+ export declare function formatRoundTableResults(suggestions: RoundTableSuggestion[], _proposalIds?: Map<string, number>, proposalTitles?: Map<number, string>): string;
16
+ //# sourceMappingURL=roundtable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundtable.d.ts","sourceRoot":"","sources":["../../src/intelligence/roundtable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG7E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,YAAY,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,QAAQ,EAAE,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoDjC;AAmBD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,oBAAoB,EAAE,EACnC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAoCR"}
@@ -0,0 +1,113 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Round Table (Agents suggest proposals)
3
+ // ============================================================
4
+ import { PROPOSAL_TYPES } from "../types/index.js";
5
+ const SUGGESTION_PROMPT = `You are participating in a DAO Round Table.
6
+
7
+ Your task: suggest ONE concrete proposal that would improve the project.
8
+
9
+ Analyze the current codebase and suggest something specific, actionable, and valuable.
10
+
11
+ Output format:
12
+ ## Suggested Proposal
13
+ **Title:** [short title]
14
+ **Type:** [product-feature | security-change | technical-change | release-change | governance-change]
15
+ **Description:** [2-3 sentences describing what and why]
16
+
17
+ Be specific. Reference actual files, patterns, or problems if you can.`;
18
+ export async function runRoundTable(adapter, agents, maxConcurrent) {
19
+ const suggestions = [];
20
+ // Process in batches
21
+ for (let i = 0; i < agents.length; i += maxConcurrent) {
22
+ const batch = agents.slice(i, i + maxConcurrent);
23
+ const batchPromises = batch.map(async (agent) => {
24
+ try {
25
+ const output = await adapter.spawnAgent({
26
+ agent,
27
+ proposal: {
28
+ id: 0,
29
+ title: "Round Table Suggestions",
30
+ type: "governance-change",
31
+ description: "Agents suggest proposals",
32
+ proposedBy: "system",
33
+ status: "open",
34
+ votes: [],
35
+ agentOutputs: [],
36
+ createdAt: new Date().toISOString(),
37
+ },
38
+ systemPrompt: `${agent.systemPrompt}\n\n${SUGGESTION_PROMPT}`,
39
+ timeoutMs: 60_000,
40
+ });
41
+ const parsed = parseSuggestion(output.content);
42
+ const suggestion = {
43
+ agentId: agent.id,
44
+ agentName: agent.name,
45
+ content: output.content,
46
+ parsed: parsed || undefined,
47
+ };
48
+ suggestions.push(suggestion);
49
+ return suggestion;
50
+ }
51
+ catch (err) {
52
+ const message = err instanceof Error ? err.message : "Unknown error";
53
+ const suggestion = {
54
+ agentId: agent.id,
55
+ agentName: agent.name,
56
+ content: "",
57
+ error: message,
58
+ };
59
+ suggestions.push(suggestion);
60
+ return suggestion;
61
+ }
62
+ });
63
+ await Promise.all(batchPromises);
64
+ }
65
+ return suggestions;
66
+ }
67
+ function parseSuggestion(content) {
68
+ const titleMatch = content.match(/\*\*Title:\*\*\s*(.+)/i);
69
+ const typeMatch = content.match(/\*\*Type:\*\*\s*(.+)/i);
70
+ const descMatch = content.match(/\*\*Description:\*\*\s*([\s\S]*?)(?=\n##|$)/i);
71
+ if (!titleMatch || !typeMatch)
72
+ return null;
73
+ const type = typeMatch[1]?.trim().toLowerCase() ?? "";
74
+ if (!PROPOSAL_TYPES.includes(type))
75
+ return null;
76
+ return {
77
+ title: titleMatch[1]?.trim() ?? "",
78
+ type: type,
79
+ description: descMatch?.[1]?.trim() ?? titleMatch[1]?.trim() ?? "",
80
+ };
81
+ }
82
+ export function formatRoundTableResults(suggestions, _proposalIds, proposalTitles) {
83
+ let output = "# 🎯 Round Table Results\n\n";
84
+ const valid = suggestions.filter((s) => s.parsed);
85
+ const invalid = suggestions.filter((s) => !s.parsed && !s.error);
86
+ const errors = suggestions.filter((s) => s.error);
87
+ output += `**Suggestions:** ${valid.length} valid / ${invalid.length} unparsed / ${errors.length} errors\n\n`;
88
+ for (const s of valid) {
89
+ output += `## ${s.agentName} (@${s.agentId})\n`;
90
+ output += `**Title:** ${s.parsed?.title}\n`;
91
+ output += `**Type:** ${s.parsed?.type}\n`;
92
+ output += `**Description:** ${s.parsed?.description}\n`;
93
+ if (s.proposalId && proposalTitles) {
94
+ output += `**Created:** Proposal #${s.proposalId}\n`;
95
+ }
96
+ output += "\n";
97
+ }
98
+ if (invalid.length > 0) {
99
+ output += "## Unparsed Suggestions\n";
100
+ for (const s of invalid) {
101
+ output += `- ${s.agentName}: Could not parse output\n`;
102
+ }
103
+ output += "\n";
104
+ }
105
+ if (errors.length > 0) {
106
+ output += "## Errors\n";
107
+ for (const s of errors) {
108
+ output += `- ${s.agentName}: ${s.error}\n`;
109
+ }
110
+ }
111
+ return output;
112
+ }
113
+ //# sourceMappingURL=roundtable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundtable.js","sourceRoot":"","sources":["../../src/intelligence/roundtable.ts"],"names":[],"mappings":"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"}