@guyghost/swarm-dao-core 0.1.3 → 0.2.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 (84) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/config.js +3 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/control/gates.js +4 -4
  5. package/dist/control/gates.js.map +1 -1
  6. package/dist/delivery/artefacts.d.ts.map +1 -1
  7. package/dist/delivery/artefacts.js +4 -3
  8. package/dist/delivery/artefacts.js.map +1 -1
  9. package/dist/delivery/dry-run.d.ts.map +1 -1
  10. package/dist/delivery/dry-run.js +14 -17
  11. package/dist/delivery/dry-run.js.map +1 -1
  12. package/dist/delivery/plans.d.ts.map +1 -1
  13. package/dist/delivery/plans.js +19 -7
  14. package/dist/delivery/plans.js.map +1 -1
  15. package/dist/governance/agents.d.ts +4 -0
  16. package/dist/governance/agents.d.ts.map +1 -1
  17. package/dist/governance/agents.js +86 -1
  18. package/dist/governance/agents.js.map +1 -1
  19. package/dist/governance/index.d.ts +2 -0
  20. package/dist/governance/index.d.ts.map +1 -1
  21. package/dist/governance/index.js +2 -0
  22. package/dist/governance/index.js.map +1 -1
  23. package/dist/governance/lifecycle.js +5 -5
  24. package/dist/governance/lifecycle.js.map +1 -1
  25. package/dist/governance/proposal.machine.d.ts +131 -0
  26. package/dist/governance/proposal.machine.d.ts.map +1 -0
  27. package/dist/governance/proposal.machine.js +378 -0
  28. package/dist/governance/proposal.machine.js.map +1 -0
  29. package/dist/governance/proposal.utils.d.ts +166 -0
  30. package/dist/governance/proposal.utils.d.ts.map +1 -0
  31. package/dist/governance/proposal.utils.js +126 -0
  32. package/dist/governance/proposal.utils.js.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/integrations/bitbucket.d.ts.map +1 -1
  38. package/dist/integrations/bitbucket.js +9 -2
  39. package/dist/integrations/bitbucket.js.map +1 -1
  40. package/dist/integrations/github.d.ts.map +1 -1
  41. package/dist/integrations/github.js +9 -2
  42. package/dist/integrations/github.js.map +1 -1
  43. package/dist/integrations/gitlab.d.ts.map +1 -1
  44. package/dist/integrations/gitlab.js +9 -2
  45. package/dist/integrations/gitlab.js.map +1 -1
  46. package/dist/intelligence/index.d.ts +1 -0
  47. package/dist/intelligence/index.d.ts.map +1 -1
  48. package/dist/intelligence/index.js +1 -0
  49. package/dist/intelligence/index.js.map +1 -1
  50. package/dist/intelligence/model.d.ts +17 -0
  51. package/dist/intelligence/model.d.ts.map +1 -0
  52. package/dist/intelligence/model.js +41 -0
  53. package/dist/intelligence/model.js.map +1 -0
  54. package/dist/intelligence/roundtable.d.ts +2 -1
  55. package/dist/intelligence/roundtable.d.ts.map +1 -1
  56. package/dist/intelligence/roundtable.js +5 -3
  57. package/dist/intelligence/roundtable.js.map +1 -1
  58. package/dist/intelligence/swarm.d.ts +9 -3
  59. package/dist/intelligence/swarm.d.ts.map +1 -1
  60. package/dist/intelligence/swarm.js +24 -12
  61. package/dist/intelligence/swarm.js.map +1 -1
  62. package/dist/observability/index.d.ts +1 -0
  63. package/dist/observability/index.d.ts.map +1 -1
  64. package/dist/observability/index.js +1 -0
  65. package/dist/observability/index.js.map +1 -1
  66. package/dist/observability/logging.d.ts +14 -0
  67. package/dist/observability/logging.d.ts.map +1 -0
  68. package/dist/observability/logging.js +38 -0
  69. package/dist/observability/logging.js.map +1 -0
  70. package/dist/persistence.d.ts +4 -2
  71. package/dist/persistence.d.ts.map +1 -1
  72. package/dist/persistence.js +98 -42
  73. package/dist/persistence.js.map +1 -1
  74. package/dist/types/index.d.ts +12 -2
  75. package/dist/types/index.d.ts.map +1 -1
  76. package/dist/types/index.js +24 -22
  77. package/dist/types/index.js.map +1 -1
  78. package/dist/utils/host.js +2 -2
  79. package/dist/utils/host.js.map +1 -1
  80. package/dist/utils/security.d.ts +7 -0
  81. package/dist/utils/security.d.ts.map +1 -0
  82. package/dist/utils/security.js +32 -0
  83. package/dist/utils/security.js.map +1 -0
  84. package/package.json +8 -3
@@ -1,7 +1,8 @@
1
1
  // ============================================================
2
2
  // Swarm DAO Core — Round Table (Agents suggest proposals)
3
3
  // ============================================================
4
- import { PROPOSAL_TYPES } from "../types/index.js";
4
+ import { PROPOSAL_TYPE, PROPOSAL_TYPES } from "../types/index.js";
5
+ import { resolveAgentModel } from "./model.js";
5
6
  const SUGGESTION_PROMPT = `You are participating in a DAO Round Table.
6
7
 
7
8
  Your task: suggest ONE concrete proposal that would improve the project.
@@ -15,7 +16,7 @@ Output format:
15
16
  **Description:** [2-3 sentences describing what and why]
16
17
 
17
18
  Be specific. Reference actual files, patterns, or problems if you can.`;
18
- export async function runRoundTable(adapter, agents, maxConcurrent) {
19
+ export async function runRoundTable(adapter, agents, maxConcurrent, modelContext) {
19
20
  const suggestions = [];
20
21
  // Process in batches
21
22
  for (let i = 0; i < agents.length; i += maxConcurrent) {
@@ -27,7 +28,7 @@ export async function runRoundTable(adapter, agents, maxConcurrent) {
27
28
  proposal: {
28
29
  id: 0,
29
30
  title: "Round Table Suggestions",
30
- type: "governance-change",
31
+ type: PROPOSAL_TYPE.GOVERNANCE_CHANGE,
31
32
  description: "Agents suggest proposals",
32
33
  proposedBy: "system",
33
34
  status: "open",
@@ -36,6 +37,7 @@ export async function runRoundTable(adapter, agents, maxConcurrent) {
36
37
  createdAt: new Date().toISOString(),
37
38
  },
38
39
  systemPrompt: `${agent.systemPrompt}\n\n${SUGGESTION_PROMPT}`,
40
+ model: resolveAgentModel(agent, modelContext),
39
41
  timeoutMs: 60_000,
40
42
  });
41
43
  const parsed = parseSuggestion(output.content);
@@ -1 +1 @@
1
- {"version":3,"file":"roundtable.js","sourceRoot":"","sources":["../../src/intelligence/roundtable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roundtable.js","sourceRoot":"","sources":["../../src/intelligence/roundtable.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { AgentOutput, DAOAgent, HostAdapter, Proposal } from "../types/index.js";
2
+ import { type ModelResolutionContext } from "./model.js";
2
3
  export interface SwarmProgressUpdate {
3
4
  agentId: string;
4
5
  agentName: string;
@@ -10,18 +11,23 @@ export interface DispatchInstruction {
10
11
  agentId: string;
11
12
  agentName: string;
12
13
  prompt: string;
13
- model?: string;
14
+ model: string;
15
+ modelDescription: string;
14
16
  timeoutMs: number;
15
17
  }
16
18
  /**
17
19
  * Build dispatch instructions for each agent.
18
20
  * Host adapters use these to spawn sub-agents.
19
21
  */
20
- export declare function buildDispatchInstructions(proposal: Proposal, agents: DAOAgent[]): DispatchInstruction[];
22
+ export declare function buildDispatchInstructions(proposal: Proposal, agents: DAOAgent[], modelContext: ModelResolutionContext): DispatchInstruction[];
21
23
  export declare function formatDispatchPlan(proposal: Proposal, instructions: DispatchInstruction[]): string;
24
+ export declare function createDispatchModelContext(configDefaultModel: string, adapter: HostAdapter, options?: {
25
+ hostDefaultModel?: string;
26
+ parentSessionModel?: string;
27
+ }): ModelResolutionContext;
22
28
  /**
23
29
  * Dispatch swarm via a host adapter.
24
30
  * This is the host-agnostic version — adapters implement the actual spawning.
25
31
  */
26
- export declare function dispatchSwarm(proposal: Proposal, agents: DAOAgent[], adapter: HostAdapter, maxConcurrent: number, onUpdate?: (update: SwarmProgressUpdate) => void): Promise<AgentOutput[]>;
32
+ export declare function dispatchSwarm(proposal: Proposal, agents: DAOAgent[], adapter: HostAdapter, maxConcurrent: number, modelContext: ModelResolutionContext, onUpdate?: (update: SwarmProgressUpdate) => void): Promise<AgentOutput[]>;
27
33
  //# sourceMappingURL=swarm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEtF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,EAAE,CA0BvG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAuBlG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAC/C,OAAO,CAAC,WAAW,EAAE,CAAC,CA+DxB"}
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAGL,KAAK,sBAAsB,EAE5B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,sBAAsB,GACnC,mBAAmB,EAAE,CA8BvB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAuBlG;AAED,wBAAgB,0BAA0B,CACxC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE,sBAAsB,CAKxB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,sBAAsB,EACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAC/C,OAAO,CAAC,WAAW,EAAE,CAAC,CAgExB"}
@@ -1,11 +1,12 @@
1
1
  // ============================================================
2
2
  // Swarm DAO Core — Swarm Dispatch
3
3
  // ============================================================
4
+ import { buildModelResolutionContext, describeModelResolution, resolveAgentModel, } from "./model.js";
4
5
  /**
5
6
  * Build dispatch instructions for each agent.
6
7
  * Host adapters use these to spawn sub-agents.
7
8
  */
8
- export function buildDispatchInstructions(proposal, agents) {
9
+ export function buildDispatchInstructions(proposal, agents, modelContext) {
9
10
  const basePrompt = `You are participating in DAO governance deliberation for the following proposal.
10
11
 
11
12
  ## Proposal #${proposal.id}: ${proposal.title}
@@ -21,13 +22,17 @@ ${Array.isArray(proposal.acceptanceCriteria) && proposal.acceptanceCriteria.leng
21
22
  ${proposal.successMetrics?.length ? `**Success Metrics:**\n${proposal.successMetrics.map((m) => `- ${m}`).join("\n")}\n\n` : ""}
22
23
 
23
24
  Evaluate this proposal carefully. Provide your analysis, vote, and scoring.`;
24
- return agents.map((agent) => ({
25
- agentId: agent.id,
26
- agentName: agent.name,
27
- prompt: `${agent.systemPrompt}\n\n${basePrompt}`,
28
- model: agent.model,
29
- timeoutMs: 120_000,
30
- }));
25
+ return agents.map((agent) => {
26
+ const model = resolveAgentModel(agent, modelContext);
27
+ return {
28
+ agentId: agent.id,
29
+ agentName: agent.name,
30
+ prompt: `${agent.systemPrompt}\n\n${basePrompt}`,
31
+ model,
32
+ modelDescription: describeModelResolution(agent, model, modelContext),
33
+ timeoutMs: 120_000,
34
+ };
35
+ });
31
36
  }
32
37
  export function formatDispatchPlan(proposal, instructions) {
33
38
  return `# 🐝 Swarm Dispatch Plan — Proposal #${proposal.id}
@@ -38,10 +43,10 @@ export function formatDispatchPlan(proposal, instructions) {
38
43
  ## Instructions
39
44
  ${instructions
40
45
  .map((inst) => `### @${inst.agentId} (${inst.agentName})
41
- - Model: ${inst.model ?? "default"}
46
+ - Model: ${inst.modelDescription}
42
47
  - Timeout: ${inst.timeoutMs}ms
43
48
 
44
- Spawn this sub-agent with the following task:
49
+ Spawn this sub-agent with the following task (use \`task\` with \`model="${inst.model}"\` when available):
45
50
  \`\`\`
46
51
  ${inst.prompt.slice(0, 500)}${inst.prompt.length > 500 ? "..." : ""}
47
52
  \`\`\`
@@ -51,12 +56,18 @@ ${inst.prompt.slice(0, 500)}${inst.prompt.length > 500 ? "..." : ""}
51
56
  ## Next Step
52
57
  After collecting all outputs, call \`dao_record_outputs\` with the collected responses.`;
53
58
  }
59
+ export function createDispatchModelContext(configDefaultModel, adapter, options) {
60
+ return buildModelResolutionContext(configDefaultModel, {
61
+ parentSessionModel: options?.parentSessionModel ?? adapter.getSessionModel?.(),
62
+ hostDefaultModel: options?.hostDefaultModel,
63
+ });
64
+ }
54
65
  /**
55
66
  * Dispatch swarm via a host adapter.
56
67
  * This is the host-agnostic version — adapters implement the actual spawning.
57
68
  */
58
- export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, onUpdate) {
59
- const instructions = buildDispatchInstructions(proposal, agents);
69
+ export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, modelContext, onUpdate) {
70
+ const instructions = buildDispatchInstructions(proposal, agents, modelContext);
60
71
  const outputs = [];
61
72
  // Process in batches based on maxConcurrent
62
73
  for (let i = 0; i < instructions.length; i += maxConcurrent) {
@@ -75,6 +86,7 @@ export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, on
75
86
  agent,
76
87
  proposal,
77
88
  systemPrompt: inst.prompt,
89
+ model: inst.model,
78
90
  timeoutMs: inst.timeoutMs,
79
91
  });
80
92
  outputs.push(output);
@@ -1 +1 @@
1
- {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./alerts.js";
2
+ export * from "./logging.js";
2
3
  export * from "./metrics.js";
3
4
  export * from "./tracing.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -1,5 +1,6 @@
1
1
  // Observability Layer — Metrics, Tracing, Alerts
2
2
  export * from "./alerts.js";
3
+ export * from "./logging.js";
3
4
  export * from "./metrics.js";
4
5
  export * from "./tracing.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type LogLevel = "info" | "warn" | "error" | "debug";
2
+ export type LogHandler = (level: LogLevel, message: string, ...args: unknown[]) => void;
3
+ /**
4
+ * Configure the global log handler.
5
+ * Set to null to disable logging.
6
+ */
7
+ export declare function setLogHandler(handler: LogHandler | null): void;
8
+ export declare const logger: {
9
+ info: (message: string, ...args: unknown[]) => void;
10
+ warn: (message: string, ...args: unknown[]) => void;
11
+ error: (message: string, ...args: unknown[]) => void;
12
+ debug: (message: string, ...args: unknown[]) => void;
13
+ };
14
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/observability/logging.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAmBxF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAM9D;AAED,eAAO,MAAM,MAAM;oBACD,MAAM,WAAW,OAAO,EAAE;oBAC1B,MAAM,WAAW,OAAO,EAAE;qBACzB,MAAM,WAAW,OAAO,EAAE;qBAC1B,MAAM,WAAW,OAAO,EAAE;CAC5C,CAAC"}
@@ -0,0 +1,38 @@
1
+ // ============================================================
2
+ // Swarm DAO Core — Logging Utility
3
+ // ============================================================
4
+ let currentHandler = (level, message, ...args) => {
5
+ switch (level) {
6
+ case "info":
7
+ console.log(message, ...args);
8
+ break;
9
+ case "warn":
10
+ console.warn(message, ...args);
11
+ break;
12
+ case "error":
13
+ console.error(message, ...args);
14
+ break;
15
+ case "debug":
16
+ console.debug(message, ...args);
17
+ break;
18
+ }
19
+ };
20
+ /**
21
+ * Configure the global log handler.
22
+ * Set to null to disable logging.
23
+ */
24
+ export function setLogHandler(handler) {
25
+ if (handler === null) {
26
+ currentHandler = () => { };
27
+ }
28
+ else {
29
+ currentHandler = handler;
30
+ }
31
+ }
32
+ export const logger = {
33
+ info: (message, ...args) => currentHandler("info", message, ...args),
34
+ warn: (message, ...args) => currentHandler("warn", message, ...args),
35
+ error: (message, ...args) => currentHandler("error", message, ...args),
36
+ debug: (message, ...args) => currentHandler("debug", message, ...args),
37
+ };
38
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/observability/logging.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAM/D,IAAI,cAAc,GAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;IAC3D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM;IACV,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACvF,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACvF,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzF,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC1F,CAAC"}
@@ -5,11 +5,13 @@ export declare function getDecisionsDir(daoRoot: string): string;
5
5
  export declare function padId(id: number): string;
6
6
  export declare function getProposalPath(daoRoot: string, id: number): string;
7
7
  export declare function initStorage(cwd: string): Promise<string>;
8
- export declare function migrateFromLegacy(cwd: string): Promise<boolean>;
8
+ export declare function migrateFromLegacy(cwd: string, legacyDirectories?: string[]): Promise<boolean>;
9
9
  export declare function getState(): DAOState;
10
10
  export declare function setState(newState: DAOState | null): void;
11
11
  export declare function getOrCreateState(cwd: string): DAOState;
12
- export declare function loadState(cwd: string): Promise<DAOState | null>;
12
+ export declare function loadState(cwd: string, options?: {
13
+ legacyDirectories?: string[];
14
+ }): Promise<DAOState | null>;
13
15
  export declare function loadProposalsFromDisk(daoRoot: string): Promise<Proposal[]>;
14
16
  export declare function saveProposal(proposalId: number): Promise<string | null>;
15
17
  export declare function saveState(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,10 @@
3
3
  // ============================================================
4
4
  import { promises as fs } from "node:fs";
5
5
  import path from "node:path";
6
+ import { logger } from "./observability/logging.js";
6
7
  import { recordProposalExecuted, recordVoteCast } from "./observability/metrics.js";
7
8
  import { createInitialState } from "./types/index.js";
9
+ import { redactSensitiveFields, SENSITIVE_KEYS } from "./utils/security.js";
8
10
  let state = null;
9
11
  const STATE_FILE = "state.json";
10
12
  const PROPOSALS_DIR = "proposals";
@@ -16,8 +18,28 @@ function isRecord(value) {
16
18
  function isPositiveInteger(value) {
17
19
  return typeof value === "number" && Number.isInteger(value) && value > 0;
18
20
  }
21
+ function escapeRegExp(value) {
22
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
23
+ }
24
+ function sanitizeErrorMessage(message) {
25
+ let sanitized = message;
26
+ for (const key of SENSITIVE_KEYS) {
27
+ const escapedKey = escapeRegExp(key);
28
+ const keyPattern = `(?:"|')?\\b${escapedKey}\\b(?:"|')?`;
29
+ const separatorPattern = "\\s*(?:=|:)\\s*";
30
+ const quotedValuePattern = `"(?:\\\\.|[^"\\\\])*"|'(?:\\\\.|[^'\\\\])*'`;
31
+ const bareValuePattern = "[^\\s,}\\];)\\]]+";
32
+ const regex = new RegExp(`(${keyPattern}${separatorPattern})(${quotedValuePattern}|${bareValuePattern})`, "gi");
33
+ sanitized = sanitized.replace(regex, (_match, prefix, value) => {
34
+ const quote = value.startsWith('"') ? '"' : value.startsWith("'") ? "'" : "";
35
+ return quote ? `${prefix}${quote}[REDACTED]${quote}` : `${prefix}[REDACTED]`;
36
+ });
37
+ }
38
+ return sanitized;
39
+ }
19
40
  function getErrorMessage(error) {
20
- return error instanceof Error ? error.message : String(error);
41
+ const message = error instanceof Error ? error.message : String(error);
42
+ return sanitizeErrorMessage(message);
21
43
  }
22
44
  function hasErrorCode(error, code) {
23
45
  return (typeof error === "object" &&
@@ -30,8 +52,8 @@ function parseJsonText(text, context) {
30
52
  try {
31
53
  return JSON.parse(text);
32
54
  }
33
- catch (error) {
34
- throw new Error(`Invalid JSON in ${context}: ${getErrorMessage(error)}`);
55
+ catch (_error) {
56
+ throw new Error(`Invalid JSON in ${context}`);
35
57
  }
36
58
  }
37
59
  function formatJson(value) {
@@ -75,6 +97,22 @@ export function padId(id) {
75
97
  export function getProposalPath(daoRoot, id) {
76
98
  return path.join(getProposalsDir(daoRoot), `${padId(id)}.json`);
77
99
  }
100
+ function resolveSafeLegacyDirectory(cwd, directory) {
101
+ const trimmed = directory.trim();
102
+ if (!trimmed || trimmed === "." || trimmed === "..")
103
+ return null;
104
+ if (path.isAbsolute(trimmed))
105
+ return null;
106
+ if (trimmed.includes(path.sep) || trimmed.includes("/") || trimmed.includes("\\"))
107
+ return null;
108
+ const resolvedCwd = path.resolve(cwd);
109
+ const candidate = path.resolve(resolvedCwd, trimmed);
110
+ const relative = path.relative(resolvedCwd, candidate);
111
+ if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
112
+ return null;
113
+ }
114
+ return candidate;
115
+ }
78
116
  // ── Storage Init ─────────────────────────────────────────────
79
117
  export async function initStorage(cwd) {
80
118
  const daoRoot = getDaoRoot(cwd);
@@ -82,24 +120,22 @@ export async function initStorage(cwd) {
82
120
  return daoRoot;
83
121
  }
84
122
  // ── Legacy Migration ─────────────────────────────────────────
85
- export async function migrateFromLegacy(cwd) {
86
- const legacyRoot = path.join(cwd, ".opencode-dao");
87
- const newRoot = getDaoRoot(cwd);
88
- try {
89
- await fs.access(newRoot);
90
- return false;
91
- }
92
- catch {
93
- /* .dao doesn't exist */
94
- }
95
- try {
96
- await fs.access(legacyRoot);
97
- }
98
- catch {
99
- return false;
123
+ async function findLegacyRoot(cwd, legacyDirectories) {
124
+ for (const directory of legacyDirectories) {
125
+ const candidate = resolveSafeLegacyDirectory(cwd, directory);
126
+ if (!candidate)
127
+ continue;
128
+ try {
129
+ await fs.access(candidate);
130
+ return candidate;
131
+ }
132
+ catch {
133
+ /* candidate doesn't exist */
134
+ }
100
135
  }
101
- console.log("🔄 Migrating DAO storage: .opencode-dao → .dao");
102
- await fs.mkdir(newRoot, { recursive: true });
136
+ return null;
137
+ }
138
+ async function copyLegacyFiles(legacyRoot, newRoot) {
103
139
  const entries = await fs.readdir(legacyRoot, { withFileTypes: true });
104
140
  await Promise.all(entries.map(async (entry) => {
105
141
  const srcPath = path.join(legacyRoot, entry.name);
@@ -112,17 +148,8 @@ export async function migrateFromLegacy(cwd) {
112
148
  }
113
149
  await fs.copyFile(srcPath, destPath);
114
150
  }));
115
- const oldStatePath = path.join(newRoot, "dao-state.json");
116
- const newStatePath = path.join(newRoot, STATE_FILE);
117
- try {
118
- await fs.access(oldStatePath);
119
- await fs.rename(oldStatePath, newStatePath);
120
- console.log(" ✓ Renamed dao-state.json → state.json");
121
- }
122
- catch {
123
- /* no old state */
124
- }
125
- // Migrate proposal IDs to 3-digit padding
151
+ }
152
+ async function migrateProposalIdPaddings(newRoot) {
126
153
  try {
127
154
  const proposalsDir = getProposalsDir(newRoot);
128
155
  const files = await fs.readdir(proposalsDir);
@@ -136,20 +163,48 @@ export async function migrateFromLegacy(cwd) {
136
163
  const paddedName = `${padId(id)}.json`;
137
164
  if (file !== paddedName) {
138
165
  await fs.rename(path.join(proposalsDir, file), path.join(proposalsDir, paddedName));
139
- console.log(` ✓ Renamed ${file} → ${paddedName}`);
166
+ logger.info(` ✓ Renamed ${file} → ${paddedName}`);
140
167
  }
141
168
  }));
142
169
  }
143
170
  catch {
144
171
  /* no proposals yet */
145
172
  }
146
- console.log(" ✓ Migration complete");
173
+ }
174
+ export async function migrateFromLegacy(cwd, legacyDirectories = []) {
175
+ const newRoot = getDaoRoot(cwd);
176
+ try {
177
+ await fs.access(newRoot);
178
+ return false;
179
+ }
180
+ catch {
181
+ /* .dao doesn't exist */
182
+ }
183
+ const legacyRoot = await findLegacyRoot(cwd, legacyDirectories);
184
+ if (!legacyRoot) {
185
+ return false;
186
+ }
187
+ logger.info("🔄 Migrating DAO storage: legacy directory → .dao");
188
+ await fs.mkdir(newRoot, { recursive: true });
189
+ await copyLegacyFiles(legacyRoot, newRoot);
190
+ const oldStatePath = path.join(newRoot, "dao-state.json");
191
+ const newStatePath = path.join(newRoot, STATE_FILE);
192
+ try {
193
+ await fs.access(oldStatePath);
194
+ await fs.rename(oldStatePath, newStatePath);
195
+ logger.info(" ✓ Renamed dao-state.json → state.json");
196
+ }
197
+ catch {
198
+ /* no old state */
199
+ }
200
+ await migrateProposalIdPaddings(newRoot);
201
+ logger.info(" ✓ Migration complete");
147
202
  try {
148
203
  await fs.rm(legacyRoot, { recursive: true, force: true });
149
- console.log(" ✓ Removed legacy .opencode-dao/");
204
+ logger.info(" ✓ Removed legacy DAO directory");
150
205
  }
151
206
  catch (err) {
152
- console.warn(" ⚠ Could not remove .opencode-dao/:", err);
207
+ logger.warn(" ⚠ Could not remove legacy DAO directory:", err);
153
208
  }
154
209
  return true;
155
210
  }
@@ -170,8 +225,8 @@ export function getOrCreateState(cwd) {
170
225
  return state;
171
226
  }
172
227
  // ── Load / Save ──────────────────────────────────────────────
173
- export async function loadState(cwd) {
174
- await migrateFromLegacy(cwd);
228
+ export async function loadState(cwd, options) {
229
+ await migrateFromLegacy(cwd, options?.legacyDirectories ?? []);
175
230
  const daoRoot = await initStorage(cwd);
176
231
  const statePath = path.join(daoRoot, STATE_FILE);
177
232
  let loaded = null;
@@ -225,7 +280,7 @@ export async function loadState(cwd) {
225
280
  }
226
281
  }
227
282
  catch (error) {
228
- console.warn(`⚠ Failed to reconcile proposal sidecars: ${getErrorMessage(error)}`);
283
+ logger.warn(`⚠ Failed to reconcile proposal sidecars: ${getErrorMessage(error)}`);
229
284
  }
230
285
  const highestProposalId = loaded.proposals.reduce((max, proposal) => Math.max(max, proposal.id), 0);
231
286
  if (loaded.nextProposalId <= highestProposalId)
@@ -257,7 +312,7 @@ export async function loadProposalsFromDisk(daoRoot) {
257
312
  return isPositiveInteger(proposal?.id) ? proposal : null;
258
313
  }
259
314
  catch (error) {
260
- console.warn(`⚠ Skipping malformed proposal sidecar ${filePath}: ${getErrorMessage(error)}`);
315
+ logger.warn(`⚠ Skipping malformed proposal sidecar ${filePath}: ${getErrorMessage(error)}`);
261
316
  return null;
262
317
  }
263
318
  }));
@@ -304,7 +359,7 @@ export async function saveState() {
304
359
  catch (error) {
305
360
  if (hasErrorCode(error, "ENOENT"))
306
361
  return;
307
- console.warn(`⚠ Failed to remove orphan proposal sidecar ${orphanPath}: ${getErrorMessage(error)}`);
362
+ logger.warn(`⚠ Failed to remove orphan proposal sidecar ${orphanPath}: ${getErrorMessage(error)}`);
308
363
  }
309
364
  }));
310
365
  }
@@ -362,11 +417,12 @@ export async function updateStorageSettings(daoRoot, updates) {
362
417
  }
363
418
  catch (error) {
364
419
  if (!hasErrorCode(error, "ENOENT")) {
365
- console.warn(`⚠ Ignoring invalid storage config at ${configPath}: ${getErrorMessage(error)}`);
420
+ logger.warn(`⚠ Ignoring invalid storage config at ${configPath}: ${getErrorMessage(error)}`);
366
421
  }
367
422
  }
368
423
  rootConfig.storageSettings = next;
369
- await writeJsonFile(configPath, rootConfig);
424
+ const redacted = redactSensitiveFields(rootConfig);
425
+ await writeJsonFile(configPath, redacted);
370
426
  return next;
371
427
  }
372
428
  // ── Agent CRUD ───────────────────────────────────────────────