@guyghost/swarm-dao-core 0.3.0 → 0.5.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/adapters/attention/fs-attention.store.d.ts +17 -0
- package/dist/adapters/attention/fs-attention.store.d.ts.map +1 -0
- package/dist/adapters/attention/fs-attention.store.js +59 -0
- package/dist/adapters/attention/fs-attention.store.js.map +1 -0
- package/dist/adapters/git-workspace.d.ts +26 -0
- package/dist/adapters/git-workspace.d.ts.map +1 -0
- package/dist/adapters/git-workspace.js +84 -0
- package/dist/adapters/git-workspace.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +6 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/persistence/file-dao-state.repository.d.ts +15 -0
- package/dist/adapters/persistence/file-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/file-dao-state.repository.js +85 -0
- package/dist/adapters/persistence/file-dao-state.repository.js.map +1 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts +10 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.js +14 -0
- package/dist/adapters/persistence/in-memory-dao-state.repository.js.map +1 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.d.ts +11 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.d.ts.map +1 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.js +14 -0
- package/dist/adapters/persistence/legacy-dao-state.repository.js.map +1 -0
- package/dist/application/index.d.ts +16 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +16 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/initialize-dao.use-case.d.ts +20 -0
- package/dist/application/initialize-dao.use-case.d.ts.map +1 -0
- package/dist/application/initialize-dao.use-case.js +17 -0
- package/dist/application/initialize-dao.use-case.js.map +1 -0
- package/dist/application/proposals/control-proposal.use-case.d.ts +23 -0
- package/dist/application/proposals/control-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/control-proposal.use-case.js +53 -0
- package/dist/application/proposals/control-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.d.ts +25 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.js +39 -0
- package/dist/application/proposals/create-amendment-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/create-proposal.use-case.d.ts +34 -0
- package/dist/application/proposals/create-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/create-proposal.use-case.js +49 -0
- package/dist/application/proposals/create-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts +35 -0
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/deliberate-proposal.use-case.js +67 -0
- package/dist/application/proposals/deliberate-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/dry-run-proposal.use-case.d.ts +21 -0
- package/dist/application/proposals/dry-run-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/dry-run-proposal.use-case.js +20 -0
- package/dist/application/proposals/dry-run-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/execute-proposal.use-case.d.ts +29 -0
- package/dist/application/proposals/execute-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/execute-proposal.use-case.js +66 -0
- package/dist/application/proposals/execute-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/rate-proposal.use-case.d.ts +24 -0
- package/dist/application/proposals/rate-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/rate-proposal.use-case.js +33 -0
- package/dist/application/proposals/rate-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts +21 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts.map +1 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.js +65 -0
- package/dist/application/proposals/record-deliberation-outputs.use-case.js.map +1 -0
- package/dist/application/proposals/rollback-proposal.use-case.d.ts +20 -0
- package/dist/application/proposals/rollback-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/rollback-proposal.use-case.js +17 -0
- package/dist/application/proposals/rollback-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/round-table.use-case.d.ts +27 -0
- package/dist/application/proposals/round-table.use-case.d.ts.map +1 -0
- package/dist/application/proposals/round-table.use-case.js +55 -0
- package/dist/application/proposals/round-table.use-case.js.map +1 -0
- package/dist/application/proposals/ship-proposal.use-case.d.ts +26 -0
- package/dist/application/proposals/ship-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/ship-proposal.use-case.js +60 -0
- package/dist/application/proposals/ship-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/start-deliberation.use-case.d.ts +21 -0
- package/dist/application/proposals/start-deliberation.use-case.d.ts.map +1 -0
- package/dist/application/proposals/start-deliberation.use-case.js +30 -0
- package/dist/application/proposals/start-deliberation.use-case.js.map +1 -0
- package/dist/application/proposals/transition-proposal.use-case.d.ts +20 -0
- package/dist/application/proposals/transition-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/transition-proposal.use-case.js +19 -0
- package/dist/application/proposals/transition-proposal.use-case.js.map +1 -0
- package/dist/application/proposals/update-proposal.use-case.d.ts +26 -0
- package/dist/application/proposals/update-proposal.use-case.d.ts.map +1 -0
- package/dist/application/proposals/update-proposal.use-case.js +19 -0
- package/dist/application/proposals/update-proposal.use-case.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/registry.d.ts +46 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +367 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/control/gates.d.ts +4 -1
- package/dist/control/gates.d.ts.map +1 -1
- package/dist/control/gates.js +22 -10
- package/dist/control/gates.js.map +1 -1
- package/dist/delivery/dependencies.d.ts.map +1 -1
- package/dist/delivery/dependencies.js +15 -7
- package/dist/delivery/dependencies.js.map +1 -1
- package/dist/delivery/dry-run.d.ts.map +1 -1
- package/dist/delivery/dry-run.js +3 -44
- package/dist/delivery/dry-run.js.map +1 -1
- package/dist/delivery/execution-isolation.d.ts +34 -0
- package/dist/delivery/execution-isolation.d.ts.map +1 -0
- package/dist/delivery/execution-isolation.js +97 -0
- package/dist/delivery/execution-isolation.js.map +1 -0
- package/dist/delivery/execution.d.ts.map +1 -1
- package/dist/delivery/execution.js +7 -5
- package/dist/delivery/execution.js.map +1 -1
- package/dist/delivery/index.d.ts +1 -0
- package/dist/delivery/index.d.ts.map +1 -1
- package/dist/delivery/index.js +1 -0
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/plans.d.ts +3 -1
- package/dist/delivery/plans.d.ts.map +1 -1
- package/dist/delivery/plans.js +2 -2
- package/dist/delivery/plans.js.map +1 -1
- package/dist/domain/dry-run.d.ts +3 -0
- package/dist/domain/dry-run.d.ts.map +1 -0
- package/dist/domain/dry-run.js +28 -0
- package/dist/domain/dry-run.js.map +1 -0
- package/dist/domain/index.d.ts +6 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/governance/agents.d.ts +2 -0
- package/dist/governance/agents.d.ts.map +1 -1
- package/dist/governance/agents.js +148 -173
- package/dist/governance/agents.js.map +1 -1
- package/dist/governance/charter.d.ts +14 -0
- package/dist/governance/charter.d.ts.map +1 -0
- package/dist/governance/charter.js +65 -0
- package/dist/governance/charter.js.map +1 -0
- package/dist/governance/delegation.machine.d.ts +316 -0
- package/dist/governance/delegation.machine.d.ts.map +1 -0
- package/dist/governance/delegation.machine.js +387 -0
- package/dist/governance/delegation.machine.js.map +1 -0
- package/dist/governance/delegation.utils.d.ts +55 -0
- package/dist/governance/delegation.utils.d.ts.map +1 -0
- package/dist/governance/delegation.utils.js +157 -0
- package/dist/governance/delegation.utils.js.map +1 -0
- package/dist/governance/edit-gate.d.ts +47 -0
- package/dist/governance/edit-gate.d.ts.map +1 -0
- package/dist/governance/edit-gate.js +156 -0
- package/dist/governance/edit-gate.js.map +1 -0
- package/dist/governance/index.d.ts +3 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +3 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/lifecycle.d.ts +0 -6
- package/dist/governance/lifecycle.d.ts.map +1 -1
- package/dist/governance/lifecycle.js +7 -31
- package/dist/governance/lifecycle.js.map +1 -1
- package/dist/governance/proposal.machine.d.ts +2 -130
- package/dist/governance/proposal.machine.d.ts.map +1 -1
- package/dist/governance/proposal.machine.js +2 -377
- package/dist/governance/proposal.machine.js.map +1 -1
- package/dist/governance/proposal.utils.d.ts +22 -165
- package/dist/governance/proposal.utils.d.ts.map +1 -1
- package/dist/governance/proposal.utils.js +52 -119
- package/dist/governance/proposal.utils.js.map +1 -1
- package/dist/governance/scoring.d.ts.map +1 -1
- package/dist/governance/scoring.js +36 -16
- package/dist/governance/scoring.js.map +1 -1
- package/dist/governance/voting.d.ts.map +1 -1
- package/dist/governance/voting.js +24 -14
- package/dist/governance/voting.js.map +1 -1
- package/dist/host-tools/github-config.d.ts.map +1 -1
- package/dist/host-tools/github-config.js +17 -5
- package/dist/host-tools/github-config.js.map +1 -1
- package/dist/host-tools/handlers.d.ts +14 -11
- package/dist/host-tools/handlers.d.ts.map +1 -1
- package/dist/host-tools/handlers.js +204 -335
- package/dist/host-tools/handlers.js.map +1 -1
- package/dist/host-tools/messages.d.ts +10 -4
- package/dist/host-tools/messages.d.ts.map +1 -1
- package/dist/host-tools/messages.js +14 -17
- package/dist/host-tools/messages.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/github.d.ts.map +1 -1
- package/dist/integrations/github.js +5 -2
- package/dist/integrations/github.js.map +1 -1
- package/dist/integrations/http.d.ts +12 -1
- package/dist/integrations/http.d.ts.map +1 -1
- package/dist/integrations/http.js +114 -17
- package/dist/integrations/http.js.map +1 -1
- package/dist/intelligence/delegation.d.ts +41 -0
- package/dist/intelligence/delegation.d.ts.map +1 -0
- package/dist/intelligence/delegation.js +162 -0
- package/dist/intelligence/delegation.js.map +1 -0
- package/dist/intelligence/index.d.ts +2 -0
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/index.js +2 -0
- package/dist/intelligence/index.js.map +1 -1
- package/dist/intelligence/model.d.ts +28 -2
- package/dist/intelligence/model.d.ts.map +1 -1
- package/dist/intelligence/model.js +36 -3
- package/dist/intelligence/model.js.map +1 -1
- package/dist/intelligence/roundtable.d.ts +4 -2
- package/dist/intelligence/roundtable.d.ts.map +1 -1
- package/dist/intelligence/roundtable.js +2 -2
- package/dist/intelligence/roundtable.js.map +1 -1
- package/dist/intelligence/sequential.d.ts +36 -0
- package/dist/intelligence/sequential.d.ts.map +1 -0
- package/dist/intelligence/sequential.js +91 -0
- package/dist/intelligence/sequential.js.map +1 -0
- package/dist/intelligence/swarm.d.ts +19 -4
- package/dist/intelligence/swarm.d.ts.map +1 -1
- package/dist/intelligence/swarm.js +107 -53
- package/dist/intelligence/swarm.js.map +1 -1
- package/dist/intelligence/synthesis.d.ts.map +1 -1
- package/dist/intelligence/synthesis.js +16 -4
- package/dist/intelligence/synthesis.js.map +1 -1
- package/dist/models/graph-engineering.machine.d.ts +219 -0
- package/dist/models/graph-engineering.machine.d.ts.map +1 -0
- package/dist/models/graph-engineering.machine.js +214 -0
- package/dist/models/graph-engineering.machine.js.map +1 -0
- package/dist/models/improvement-loop.machine.d.ts +239 -0
- package/dist/models/improvement-loop.machine.d.ts.map +1 -0
- package/dist/models/improvement-loop.machine.js +254 -0
- package/dist/models/improvement-loop.machine.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +5 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/product-loop.machine.d.ts +531 -0
- package/dist/models/product-loop.machine.d.ts.map +1 -0
- package/dist/models/product-loop.machine.js +699 -0
- package/dist/models/product-loop.machine.js.map +1 -0
- package/dist/models/proposal.machine.d.ts +82 -0
- package/dist/models/proposal.machine.d.ts.map +1 -0
- package/dist/models/proposal.machine.js +68 -0
- package/dist/models/proposal.machine.js.map +1 -0
- package/dist/observability/attention.d.ts +40 -0
- package/dist/observability/attention.d.ts.map +1 -0
- package/dist/observability/attention.js +119 -0
- package/dist/observability/attention.js.map +1 -0
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +1 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/logging.d.ts +6 -0
- package/dist/observability/logging.d.ts.map +1 -1
- package/dist/observability/logging.js +36 -6
- package/dist/observability/logging.js.map +1 -1
- package/dist/observability/metrics.d.ts +7 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +179 -43
- package/dist/observability/metrics.js.map +1 -1
- package/dist/persistence.d.ts +5 -6
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +197 -140
- package/dist/persistence.js.map +1 -1
- package/dist/ports/clock.d.ts +7 -0
- package/dist/ports/clock.d.ts.map +1 -0
- package/dist/ports/clock.js +5 -0
- package/dist/ports/clock.js.map +1 -0
- package/dist/ports/host.d.ts +8 -0
- package/dist/ports/host.d.ts.map +1 -0
- package/dist/ports/host.js +2 -0
- package/dist/ports/host.js.map +1 -0
- package/dist/ports/index.d.ts +5 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +5 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/repository.d.ts +7 -0
- package/dist/ports/repository.d.ts.map +1 -0
- package/dist/ports/repository.js +2 -0
- package/dist/ports/repository.js.map +1 -0
- package/dist/ports/workspace.d.ts +14 -0
- package/dist/ports/workspace.d.ts.map +1 -0
- package/dist/ports/workspace.js +14 -0
- package/dist/ports/workspace.js.map +1 -0
- package/dist/presenters/index.d.ts +2 -0
- package/dist/presenters/index.d.ts.map +1 -0
- package/dist/presenters/index.js +2 -0
- package/dist/presenters/index.js.map +1 -0
- package/dist/presenters/proposal.presenter.d.ts +30 -0
- package/dist/presenters/proposal.presenter.d.ts.map +1 -0
- package/dist/presenters/proposal.presenter.js +47 -0
- package/dist/presenters/proposal.presenter.js.map +1 -0
- package/dist/types/index.d.ts +70 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/host.d.ts.map +1 -1
- package/dist/utils/host.js +77 -6
- package/dist/utils/host.js.map +1 -1
- package/dist/utils/security.d.ts +7 -1
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +18 -2
- package/dist/utils/security.js.map +1 -1
- package/package.json +13 -1
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { promises as fs } from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { filterEnabledAgents } from "../config.js";
|
|
7
|
+
import { AGENT_CHARTER, composeSystemPrompt } from "./charter.js";
|
|
7
8
|
export const DEFAULT_AGENT_MODEL = "z.ai/GLM-5.1";
|
|
8
9
|
export const DEFAULT_AGENTS = [
|
|
9
10
|
{
|
|
@@ -20,27 +21,7 @@ For each proposal, analyze:
|
|
|
20
21
|
1. Strategic alignment — does this fit the product vision?
|
|
21
22
|
2. Objectives — which OKRs or goals does this advance?
|
|
22
23
|
3. Hypotheses — what assumptions underlie this proposal?
|
|
23
|
-
4. Opportunity cost — what are we NOT doing if we do this
|
|
24
|
-
|
|
25
|
-
Output format:
|
|
26
|
-
## Analysis
|
|
27
|
-
[Your strategic analysis]
|
|
28
|
-
|
|
29
|
-
## Vote
|
|
30
|
-
for | against | abstain
|
|
31
|
-
|
|
32
|
-
## Reasoning
|
|
33
|
-
[Why you voted this way]
|
|
34
|
-
|
|
35
|
-
## Composite Score Inputs (0-10)
|
|
36
|
-
- userImpact: [0-10]
|
|
37
|
-
- businessImpact: [0-10]
|
|
38
|
-
- effort: [0-10] (lower = less effort)
|
|
39
|
-
- securityRisk: [0-10] (lower = less risk)
|
|
40
|
-
- confidence: [0-10]
|
|
41
|
-
|
|
42
|
-
## Risk Score (1-10)
|
|
43
|
-
[Overall risk assessment]`,
|
|
24
|
+
4. Opportunity cost — what are we NOT doing if we do this?`,
|
|
44
25
|
riskLevel: "medium",
|
|
45
26
|
councils: [{ council: "product-council", role: "lead" }],
|
|
46
27
|
enabled: true,
|
|
@@ -59,27 +40,7 @@ For each proposal, research:
|
|
|
59
40
|
1. Market context — trends, market size, growth
|
|
60
41
|
2. Competition — what are competitors doing?
|
|
61
42
|
3. User signals — feedback, requests, pain points
|
|
62
|
-
4. Data availability — do we have evidence to support this
|
|
63
|
-
|
|
64
|
-
Output format:
|
|
65
|
-
## Analysis
|
|
66
|
-
[Your research findings]
|
|
67
|
-
|
|
68
|
-
## Vote
|
|
69
|
-
for | against | abstain
|
|
70
|
-
|
|
71
|
-
## Reasoning
|
|
72
|
-
[Why you voted this way]
|
|
73
|
-
|
|
74
|
-
## Composite Score Inputs (0-10)
|
|
75
|
-
- userImpact: [0-10]
|
|
76
|
-
- businessImpact: [0-10]
|
|
77
|
-
- effort: [0-10]
|
|
78
|
-
- securityRisk: [0-10]
|
|
79
|
-
- confidence: [0-10]
|
|
80
|
-
|
|
81
|
-
## Risk Score (1-10)
|
|
82
|
-
[Overall risk assessment]`,
|
|
43
|
+
4. Data availability — do we have evidence to support this?`,
|
|
83
44
|
riskLevel: "low",
|
|
84
45
|
councils: [{ council: "product-council", role: "member" }],
|
|
85
46
|
enabled: true,
|
|
@@ -99,27 +60,7 @@ For each proposal, analyze:
|
|
|
99
60
|
2. Architecture impact — how does this affect system design?
|
|
100
61
|
3. Tradeoffs — what are the key technical tradeoffs?
|
|
101
62
|
4. Technical debt — will this create or reduce debt?
|
|
102
|
-
5. Scalability — will this scale with our growth
|
|
103
|
-
|
|
104
|
-
Output format:
|
|
105
|
-
## Analysis
|
|
106
|
-
[Your technical analysis]
|
|
107
|
-
|
|
108
|
-
## Vote
|
|
109
|
-
for | against | abstain
|
|
110
|
-
|
|
111
|
-
## Reasoning
|
|
112
|
-
[Why you voted this way]
|
|
113
|
-
|
|
114
|
-
## Composite Score Inputs (0-10)
|
|
115
|
-
- userImpact: [0-10]
|
|
116
|
-
- businessImpact: [0-10]
|
|
117
|
-
- effort: [0-10]
|
|
118
|
-
- securityRisk: [0-10]
|
|
119
|
-
- confidence: [0-10]
|
|
120
|
-
|
|
121
|
-
## Risk Score (1-10)
|
|
122
|
-
[Overall risk assessment]`,
|
|
63
|
+
5. Scalability — will this scale with our growth?`,
|
|
123
64
|
riskLevel: "medium",
|
|
124
65
|
councils: [{ council: "delivery-council", role: "lead" }],
|
|
125
66
|
enabled: true,
|
|
@@ -139,27 +80,7 @@ For each proposal, scrutinize:
|
|
|
139
80
|
2. Edge cases — what scenarios aren't covered?
|
|
140
81
|
3. Guardrails — are sufficient protections in place?
|
|
141
82
|
4. Downside — what's the worst-case outcome?
|
|
142
|
-
5. Unknown unknowns — what haven't we considered
|
|
143
|
-
|
|
144
|
-
Output format:
|
|
145
|
-
## Analysis
|
|
146
|
-
[Your risk analysis and objections]
|
|
147
|
-
|
|
148
|
-
## Vote
|
|
149
|
-
for | against | abstain
|
|
150
|
-
|
|
151
|
-
## Reasoning
|
|
152
|
-
[Why you voted this way]
|
|
153
|
-
|
|
154
|
-
## Composite Score Inputs (0-10)
|
|
155
|
-
- userImpact: [0-10]
|
|
156
|
-
- businessImpact: [0-10]
|
|
157
|
-
- effort: [0-10]
|
|
158
|
-
- securityRisk: [0-10]
|
|
159
|
-
- confidence: [0-10]
|
|
160
|
-
|
|
161
|
-
## Risk Score (1-10)
|
|
162
|
-
[Overall risk assessment]`,
|
|
83
|
+
5. Unknown unknowns — what haven't we considered?`,
|
|
163
84
|
riskLevel: "high",
|
|
164
85
|
councils: [
|
|
165
86
|
{ council: "security-council", role: "lead" },
|
|
@@ -182,27 +103,7 @@ For each proposal, score:
|
|
|
182
103
|
2. Cost — implementation effort, maintenance burden
|
|
183
104
|
3. Risk — probability of failure, downside exposure
|
|
184
105
|
4. Roadmap fit — does this belong in our current sequence?
|
|
185
|
-
5. Urgency — how time-sensitive is this
|
|
186
|
-
|
|
187
|
-
Output format:
|
|
188
|
-
## Analysis
|
|
189
|
-
[Your prioritization analysis]
|
|
190
|
-
|
|
191
|
-
## Vote
|
|
192
|
-
for | against | abstain
|
|
193
|
-
|
|
194
|
-
## Reasoning
|
|
195
|
-
[Why you voted this way]
|
|
196
|
-
|
|
197
|
-
## Composite Score Inputs (0-10)
|
|
198
|
-
- userImpact: [0-10]
|
|
199
|
-
- businessImpact: [0-10]
|
|
200
|
-
- effort: [0-10]
|
|
201
|
-
- securityRisk: [0-10]
|
|
202
|
-
- confidence: [0-10]
|
|
203
|
-
|
|
204
|
-
## Risk Score (1-10)
|
|
205
|
-
[Overall risk assessment]`,
|
|
106
|
+
5. Urgency — how time-sensitive is this?`,
|
|
206
107
|
riskLevel: "low",
|
|
207
108
|
councils: [{ council: "product-council", role: "member" }],
|
|
208
109
|
enabled: true,
|
|
@@ -222,27 +123,7 @@ For each proposal, assess:
|
|
|
222
123
|
2. Completeness — what's missing from the spec?
|
|
223
124
|
3. Testability — can we write acceptance criteria?
|
|
224
125
|
4. User stories — can this be broken into stories?
|
|
225
|
-
5. Edge cases — are boundary conditions defined
|
|
226
|
-
|
|
227
|
-
Output format:
|
|
228
|
-
## Analysis
|
|
229
|
-
[Your specification analysis]
|
|
230
|
-
|
|
231
|
-
## Vote
|
|
232
|
-
for | against | abstain
|
|
233
|
-
|
|
234
|
-
## Reasoning
|
|
235
|
-
[Why you voted this way]
|
|
236
|
-
|
|
237
|
-
## Composite Score Inputs (0-10)
|
|
238
|
-
- userImpact: [0-10]
|
|
239
|
-
- businessImpact: [0-10]
|
|
240
|
-
- effort: [0-10]
|
|
241
|
-
- securityRisk: [0-10]
|
|
242
|
-
- confidence: [0-10]
|
|
243
|
-
|
|
244
|
-
## Risk Score (1-10)
|
|
245
|
-
[Overall risk assessment]`,
|
|
126
|
+
5. Edge cases — are boundary conditions defined?`,
|
|
246
127
|
riskLevel: "low",
|
|
247
128
|
councils: [{ council: "product-council", role: "advisor" }],
|
|
248
129
|
enabled: true,
|
|
@@ -262,27 +143,7 @@ For each proposal, plan:
|
|
|
262
143
|
2. Task breakdown — what are the key tasks?
|
|
263
144
|
3. Effort estimate — rough timeline and resources
|
|
264
145
|
4. CI/CD impact — how does this affect pipelines?
|
|
265
|
-
5. Dependencies — what must happen first
|
|
266
|
-
|
|
267
|
-
Output format:
|
|
268
|
-
## Analysis
|
|
269
|
-
[Your delivery analysis]
|
|
270
|
-
|
|
271
|
-
## Vote
|
|
272
|
-
for | against | abstain
|
|
273
|
-
|
|
274
|
-
## Reasoning
|
|
275
|
-
[Why you voted this way]
|
|
276
|
-
|
|
277
|
-
## Composite Score Inputs (0-10)
|
|
278
|
-
- userImpact: [0-10]
|
|
279
|
-
- businessImpact: [0-10]
|
|
280
|
-
- effort: [0-10]
|
|
281
|
-
- securityRisk: [0-10]
|
|
282
|
-
- confidence: [0-10]
|
|
283
|
-
|
|
284
|
-
## Risk Score (1-10)
|
|
285
|
-
[Overall risk assessment]`,
|
|
146
|
+
5. Dependencies — what must happen first?`,
|
|
286
147
|
riskLevel: "medium",
|
|
287
148
|
councils: [{ council: "delivery-council", role: "member" }],
|
|
288
149
|
enabled: true,
|
|
@@ -291,7 +152,7 @@ for | against | abstain
|
|
|
291
152
|
function parseAgentFrontmatter(content) {
|
|
292
153
|
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
293
154
|
if (!match?.[1])
|
|
294
|
-
return {};
|
|
155
|
+
return { body: content.trim() || undefined };
|
|
295
156
|
const parsed = {};
|
|
296
157
|
for (const line of match[1].split("\n")) {
|
|
297
158
|
const field = line.match(/^([A-Za-z0-9_-]+):\s*(.+)$/);
|
|
@@ -321,34 +182,112 @@ function parseAgentFrontmatter(content) {
|
|
|
321
182
|
break;
|
|
322
183
|
}
|
|
323
184
|
}
|
|
185
|
+
// The markdown body is the per-agent project layer (## Project
|
|
186
|
+
// Instructions); frontmatter fields still override agent metadata.
|
|
187
|
+
const body = content.slice(match[0].length).trim();
|
|
188
|
+
if (body)
|
|
189
|
+
parsed.body = body;
|
|
324
190
|
return parsed;
|
|
325
191
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
192
|
+
const agentDefinitionCache = new Map();
|
|
193
|
+
function baseAgentsFingerprint(baseAgents) {
|
|
194
|
+
return JSON.stringify(baseAgents.map((agent) => ({ ...agent, model: agent.model ?? DEFAULT_AGENT_MODEL })));
|
|
195
|
+
}
|
|
196
|
+
/** Clear the module-level agent definition cache. Intended for use in tests. */
|
|
197
|
+
export function __resetAgentDefinitionCache() {
|
|
198
|
+
agentDefinitionCache.clear();
|
|
199
|
+
}
|
|
200
|
+
function withDefaultModel(agents) {
|
|
201
|
+
return agents.map((agent) => ({ ...agent, model: agent.model ?? DEFAULT_AGENT_MODEL }));
|
|
202
|
+
}
|
|
203
|
+
async function readAndMergeMarkdownAgents(absDir, daoEntries, baseAgents, base) {
|
|
334
204
|
const markdownAgents = new Map();
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
205
|
+
const parsedEntries = await Promise.all(daoEntries.map(async (entry) => {
|
|
206
|
+
const content = await fs.readFile(path.join(absDir, entry), "utf-8");
|
|
207
|
+
return parseAgentFrontmatter(content);
|
|
208
|
+
}));
|
|
209
|
+
for (const frontmatter of parsedEntries) {
|
|
340
210
|
if (frontmatter.id) {
|
|
341
211
|
markdownAgents.set(frontmatter.id, frontmatter);
|
|
342
212
|
}
|
|
343
213
|
}
|
|
344
|
-
|
|
214
|
+
// The per-project charter layer applies to every agent (swarm-forge
|
|
215
|
+
// local-* convention: layers add to the shared law, never replace it).
|
|
216
|
+
// The closest directory wins: .dao/agents beats the repo's agents/.
|
|
217
|
+
let projectCharter = base.projectCharter;
|
|
218
|
+
if (projectCharter === null) {
|
|
219
|
+
try {
|
|
220
|
+
const charter = await fs.readFile(path.join(absDir, "charter.md"), "utf-8");
|
|
221
|
+
if (charter.trim())
|
|
222
|
+
projectCharter = charter.trim();
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// No project charter here — keep looking in the remaining dirs.
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const agents = baseAgents.map((agent) => {
|
|
345
229
|
const override = markdownAgents.get(agent.id);
|
|
230
|
+
if (!override)
|
|
231
|
+
return agent;
|
|
232
|
+
// The markdown body is the agent's role definition — it REPLACES the
|
|
233
|
+
// default role prompt (consistent with the frontmatter, which already
|
|
234
|
+
// overrides name/role/model/weight). The shared charter is never
|
|
235
|
+
// replaceable: composition always prepends it.
|
|
236
|
+
const { body: _body, ...fields } = override;
|
|
346
237
|
return {
|
|
347
238
|
...agent,
|
|
348
|
-
...
|
|
349
|
-
|
|
239
|
+
...fields,
|
|
240
|
+
...(override.body ? { systemPrompt: override.body } : {}),
|
|
241
|
+
model: override.model ?? agent.model ?? DEFAULT_AGENT_MODEL,
|
|
350
242
|
};
|
|
351
243
|
});
|
|
244
|
+
return { agents, projectCharter };
|
|
245
|
+
}
|
|
246
|
+
export async function loadAgentDefinitionsFromMarkdown(agentsDir, baseAgents = DEFAULT_AGENTS) {
|
|
247
|
+
const absDir = path.resolve(agentsDir);
|
|
248
|
+
const cacheKey = `${absDir}:${baseAgentsFingerprint(baseAgents)}`;
|
|
249
|
+
let entries;
|
|
250
|
+
try {
|
|
251
|
+
entries = await fs.readdir(absDir);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// Directory missing/unreadable: do NOT cache, but still compose — a
|
|
255
|
+
// missing directory must yield the same charter-backed prompts as an
|
|
256
|
+
// existing empty one.
|
|
257
|
+
return withComposedPrompts(withDefaultModel(baseAgents), null);
|
|
258
|
+
}
|
|
259
|
+
const daoEntries = entries.filter((entry) => entry.startsWith("dao-") && entry.endsWith(".md"));
|
|
260
|
+
// Build a signature over the dao-*.md entries (and charter.md, which is
|
|
261
|
+
// also a cached layer) and their stat metadata so the cache invalidates
|
|
262
|
+
// whenever a file is added, removed, or modified.
|
|
263
|
+
let signature;
|
|
264
|
+
try {
|
|
265
|
+
const signatureEntries = [...daoEntries];
|
|
266
|
+
if (entries.includes("charter.md"))
|
|
267
|
+
signatureEntries.push("charter.md");
|
|
268
|
+
const parts = await Promise.all(signatureEntries.map(async (entry) => {
|
|
269
|
+
const fileStat = await fs.stat(path.join(absDir, entry));
|
|
270
|
+
return `${entry}:${fileStat.mtimeMs}:${fileStat.size}`;
|
|
271
|
+
}));
|
|
272
|
+
signature = parts.sort().join("|");
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// Could not stat a dao-*.md entry (e.g. raced deletion). Do not cache.
|
|
276
|
+
return withDefaultModel(baseAgents);
|
|
277
|
+
}
|
|
278
|
+
const cached = agentDefinitionCache.get(cacheKey);
|
|
279
|
+
if (cached && cached.signature === signature) {
|
|
280
|
+
// Cache hit: return the merged result without re-reading files.
|
|
281
|
+
return cached.result;
|
|
282
|
+
}
|
|
283
|
+
const layers = await readAndMergeMarkdownAgents(absDir, daoEntries, withDefaultModel(baseAgents), {
|
|
284
|
+
agents: withDefaultModel(baseAgents),
|
|
285
|
+
projectCharter: null,
|
|
286
|
+
});
|
|
287
|
+
// Composition happens exactly once, at the exit.
|
|
288
|
+
const result = withComposedPrompts(layers.agents, layers.projectCharter);
|
|
289
|
+
agentDefinitionCache.set(cacheKey, { signature, result });
|
|
290
|
+
return result;
|
|
352
291
|
}
|
|
353
292
|
export async function loadAgentDefinitions(daoRoot, projectConfig) {
|
|
354
293
|
const candidateDirs = [
|
|
@@ -356,24 +295,60 @@ export async function loadAgentDefinitions(daoRoot, projectConfig) {
|
|
|
356
295
|
path.join(daoRoot, "..", "agents"),
|
|
357
296
|
path.join(daoRoot, "..", "..", "agents"),
|
|
358
297
|
];
|
|
359
|
-
|
|
298
|
+
// Layer collection over the candidate dirs, closest first. Composition
|
|
299
|
+
// happens exactly once, after collection, so the shared charter is never
|
|
300
|
+
// duplicated across the chain.
|
|
301
|
+
let layers = {
|
|
302
|
+
agents: withDefaultModel(DEFAULT_AGENTS),
|
|
303
|
+
projectCharter: null,
|
|
304
|
+
};
|
|
360
305
|
for (const agentsDir of candidateDirs) {
|
|
361
|
-
const
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
if (
|
|
366
|
-
|
|
306
|
+
const merged = await readMarkdownLayers(agentsDir, layers);
|
|
307
|
+
// Closest layer wins: the first candidate directory holding agent
|
|
308
|
+
// definitions or a charter fully shadows the further ones, so project
|
|
309
|
+
// overrides (.dao/agents) are never replaced by repo defaults (agents/).
|
|
310
|
+
if (merged) {
|
|
311
|
+
layers = merged;
|
|
367
312
|
break;
|
|
368
313
|
}
|
|
369
314
|
}
|
|
315
|
+
const agents = withComposedPrompts(layers.agents, layers.projectCharter);
|
|
370
316
|
return projectConfig ? filterEnabledAgents(agents, projectConfig) : agents;
|
|
371
317
|
}
|
|
318
|
+
/** Apply the charter + project layers to role-level agents (composition exit). */
|
|
319
|
+
function withComposedPrompts(agents, projectCharter) {
|
|
320
|
+
// Per-agent: mixed lists (some prompts already composed, some not) compose
|
|
321
|
+
// exactly the ones that need it — composeSystemPrompt is idempotent.
|
|
322
|
+
return agents.map((agent) => ({
|
|
323
|
+
...agent,
|
|
324
|
+
systemPrompt: composeSystemPrompt(agent.systemPrompt, { projectCharter }),
|
|
325
|
+
}));
|
|
326
|
+
}
|
|
327
|
+
/** Read and merge one directory's markdown layers; null when it has none. */
|
|
328
|
+
async function readMarkdownLayers(agentsDir, base) {
|
|
329
|
+
const absDir = path.resolve(agentsDir);
|
|
330
|
+
let entries;
|
|
331
|
+
try {
|
|
332
|
+
entries = await fs.readdir(absDir);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
const daoEntries = entries.filter((entry) => entry.startsWith("dao-") && entry.endsWith(".md"));
|
|
338
|
+
const hasCharter = entries.includes("charter.md");
|
|
339
|
+
if (daoEntries.length === 0 && !hasCharter)
|
|
340
|
+
return null;
|
|
341
|
+
return readAndMergeMarkdownAgents(absDir, daoEntries, base.agents, base);
|
|
342
|
+
}
|
|
372
343
|
export function initializeAgents(customAgents) {
|
|
373
344
|
if (customAgents && customAgents.length > 0) {
|
|
374
345
|
return customAgents;
|
|
375
346
|
}
|
|
376
|
-
return DEFAULT_AGENTS.map((a) => ({
|
|
347
|
+
return DEFAULT_AGENTS.map((a) => ({
|
|
348
|
+
...a,
|
|
349
|
+
systemPrompt: composeSystemPrompt(a.systemPrompt),
|
|
350
|
+
model: a.model ?? DEFAULT_AGENT_MODEL,
|
|
351
|
+
}));
|
|
377
352
|
}
|
|
378
353
|
export function formatAgentsTable(agents) {
|
|
379
354
|
let table = "| Agent | Weight | Role |\n|-------|--------|------|\n";
|
|
@@ -390,6 +365,6 @@ export function formatAgentCard(agent) {
|
|
|
390
365
|
- **Description:** ${agent.description}`;
|
|
391
366
|
}
|
|
392
367
|
export function getDefaultAgentPrompts() {
|
|
393
|
-
return Object.fromEntries(DEFAULT_AGENTS.map((a) => [a.id, a.systemPrompt]));
|
|
368
|
+
return Object.fromEntries(DEFAULT_AGENTS.map((a) => [a.id, composeSystemPrompt(a.systemPrompt)]));
|
|
394
369
|
}
|
|
395
370
|
//# sourceMappingURL=agents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/governance/agents.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mDAAmD;AACnD,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/governance/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const AGENT_CHARTER = "You are an agent in a DAO governance swarm. The swarm deliberates proposals; the deterministic tally of member votes decides outcomes. Your output is a signal for that tally \u2014 never an authority over it.\n\nCharter (binding on every agent, regardless of role):\n- Deliberate in good faith: ground claims in evidence and state uncertainty explicitly.\n- Your vote is yours alone: form it independently of other agents' votes.\n- Never claim decision authority and never announce state changes \u2014 the model and the human owner decide.\n- Always answer in the exact format below; the tally parses it mechanically.\n\nOutput format:\n## Analysis\n[Your analysis]\n\n## Vote\nfor | against | abstain\n\n## Reasoning\n[Why you voted this way]\n\n## Composite Score Inputs (0-10)\n- userImpact: [0-10]\n- businessImpact: [0-10]\n- effort: [0-10] (lower = less effort)\n- securityRisk: [0-10] (lower = less risk)\n- confidence: [0-10]\n\n## Risk Score (1-10)\n[Overall risk assessment]";
|
|
2
|
+
export interface PromptLayers {
|
|
3
|
+
/** Per-project charter addendum, applied to every agent. */
|
|
4
|
+
projectCharter?: string | null;
|
|
5
|
+
/** Per-agent project instructions, applied to that agent only. */
|
|
6
|
+
agentOverride?: string | null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Compose an agent's system prompt from its layers. Pure: the same inputs
|
|
10
|
+
* always produce the same prompt, and layers can only append — never
|
|
11
|
+
* replace — the shared charter or the role mission.
|
|
12
|
+
*/
|
|
13
|
+
export declare function composeSystemPrompt(rolePrompt: string, layers?: PromptLayers): string;
|
|
14
|
+
//# sourceMappingURL=charter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charter.d.ts","sourceRoot":"","sources":["../../src/governance/charter.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,aAAa,+9BA0BA,CAAC;AAE3B,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,YAAiB,GAAG,MAAM,CAYzF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Agent Charter (layered constitution)
|
|
3
|
+
// ============================================================
|
|
4
|
+
// The swarm-forge constitution pattern, adapted to the DAO: every agent
|
|
5
|
+
// prompt is composed from layers instead of repeating shared law —
|
|
6
|
+
//
|
|
7
|
+
// 1. AGENT_CHARTER — shared law: deliberation conduct + the exact
|
|
8
|
+
// output format the tally parses (defined ONCE here)
|
|
9
|
+
// 2. role prompt — the agent's mission and analysis checklist
|
|
10
|
+
// 3. project charter — .dao/agents/charter.md, appended for every agent
|
|
11
|
+
// 4. agent override — the body of .dao/agents/dao-<id>.md, appended for
|
|
12
|
+
// that agent only
|
|
13
|
+
//
|
|
14
|
+
// Layers only ADD. A project cannot replace the shared charter or a role
|
|
15
|
+
// mission — same rule as swarm-forge's "local-* articles never replace
|
|
16
|
+
// shared articles". Composition is pure and deterministic.
|
|
17
|
+
export const AGENT_CHARTER = `You are an agent in a DAO governance swarm. The swarm deliberates proposals; the deterministic tally of member votes decides outcomes. Your output is a signal for that tally — never an authority over it.
|
|
18
|
+
|
|
19
|
+
Charter (binding on every agent, regardless of role):
|
|
20
|
+
- Deliberate in good faith: ground claims in evidence and state uncertainty explicitly.
|
|
21
|
+
- Your vote is yours alone: form it independently of other agents' votes.
|
|
22
|
+
- Never claim decision authority and never announce state changes — the model and the human owner decide.
|
|
23
|
+
- Always answer in the exact format below; the tally parses it mechanically.
|
|
24
|
+
|
|
25
|
+
Output format:
|
|
26
|
+
## Analysis
|
|
27
|
+
[Your analysis]
|
|
28
|
+
|
|
29
|
+
## Vote
|
|
30
|
+
for | against | abstain
|
|
31
|
+
|
|
32
|
+
## Reasoning
|
|
33
|
+
[Why you voted this way]
|
|
34
|
+
|
|
35
|
+
## Composite Score Inputs (0-10)
|
|
36
|
+
- userImpact: [0-10]
|
|
37
|
+
- businessImpact: [0-10]
|
|
38
|
+
- effort: [0-10] (lower = less effort)
|
|
39
|
+
- securityRisk: [0-10] (lower = less risk)
|
|
40
|
+
- confidence: [0-10]
|
|
41
|
+
|
|
42
|
+
## Risk Score (1-10)
|
|
43
|
+
[Overall risk assessment]`;
|
|
44
|
+
/**
|
|
45
|
+
* Compose an agent's system prompt from its layers. Pure: the same inputs
|
|
46
|
+
* always produce the same prompt, and layers can only append — never
|
|
47
|
+
* replace — the shared charter or the role mission.
|
|
48
|
+
*/
|
|
49
|
+
export function composeSystemPrompt(rolePrompt, layers = {}) {
|
|
50
|
+
// Idempotent: an already-composed prompt (e.g. re-composition across the
|
|
51
|
+
// candidate-dir chain or a user-supplied prompt that embeds the charter)
|
|
52
|
+
// passes through unchanged rather than nesting a second charter.
|
|
53
|
+
if (rolePrompt.startsWith(AGENT_CHARTER))
|
|
54
|
+
return rolePrompt;
|
|
55
|
+
const trimmedRole = rolePrompt.trim();
|
|
56
|
+
const parts = [AGENT_CHARTER, trimmedRole];
|
|
57
|
+
const projectCharter = layers.projectCharter?.trim();
|
|
58
|
+
if (projectCharter)
|
|
59
|
+
parts.push(`## Project Charter Addendum\n\n${projectCharter}`);
|
|
60
|
+
const agentOverride = layers.agentOverride?.trim();
|
|
61
|
+
if (agentOverride)
|
|
62
|
+
parts.push(`## Project Instructions\n\n${agentOverride}`);
|
|
63
|
+
return parts.join("\n\n");
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=charter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charter.js","sourceRoot":"","sources":["../../src/governance/charter.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wDAAwD;AACxD,+DAA+D;AAC/D,wEAAwE;AACxE,mEAAmE;AACnE,EAAE;AACF,sEAAsE;AACtE,4EAA4E;AAC5E,oEAAoE;AACpE,0EAA0E;AAC1E,2EAA2E;AAC3E,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,2DAA2D;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;0BA0BH,CAAC;AAS3B;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,SAAuB,EAAE;IAC/E,yEAAyE;IACzE,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,kCAAkC,cAAc,EAAE,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
|