@mandible-ai/mandible 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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +391 -0
  3. package/dist/examples/code-pipeline/index.d.ts +3 -0
  4. package/dist/examples/code-pipeline/index.d.ts.map +1 -0
  5. package/dist/examples/code-pipeline/index.js +239 -0
  6. package/dist/examples/code-pipeline/index.js.map +1 -0
  7. package/dist/examples/code-pipeline/with-providers.d.ts +3 -0
  8. package/dist/examples/code-pipeline/with-providers.d.ts.map +1 -0
  9. package/dist/examples/code-pipeline/with-providers.js +246 -0
  10. package/dist/examples/code-pipeline/with-providers.js.map +1 -0
  11. package/dist/examples/docker-pipeline/index.d.ts +3 -0
  12. package/dist/examples/docker-pipeline/index.d.ts.map +1 -0
  13. package/dist/examples/docker-pipeline/index.js +235 -0
  14. package/dist/examples/docker-pipeline/index.js.map +1 -0
  15. package/dist/examples/github-colony/mandible.config.d.ts +11 -0
  16. package/dist/examples/github-colony/mandible.config.d.ts.map +1 -0
  17. package/dist/examples/github-colony/mandible.config.js +63 -0
  18. package/dist/examples/github-colony/mandible.config.js.map +1 -0
  19. package/dist/examples/remote-pipeline/index.d.ts +3 -0
  20. package/dist/examples/remote-pipeline/index.d.ts.map +1 -0
  21. package/dist/examples/remote-pipeline/index.js +154 -0
  22. package/dist/examples/remote-pipeline/index.js.map +1 -0
  23. package/dist/examples/repo-maintenance/fixer.d.ts +80 -0
  24. package/dist/examples/repo-maintenance/fixer.d.ts.map +1 -0
  25. package/dist/examples/repo-maintenance/fixer.js +217 -0
  26. package/dist/examples/repo-maintenance/fixer.js.map +1 -0
  27. package/dist/examples/repo-maintenance/mandible.config.d.ts +11 -0
  28. package/dist/examples/repo-maintenance/mandible.config.d.ts.map +1 -0
  29. package/dist/examples/repo-maintenance/mandible.config.js +34 -0
  30. package/dist/examples/repo-maintenance/mandible.config.js.map +1 -0
  31. package/dist/examples/repo-maintenance/scout.d.ts +39 -0
  32. package/dist/examples/repo-maintenance/scout.d.ts.map +1 -0
  33. package/dist/examples/repo-maintenance/scout.js +163 -0
  34. package/dist/examples/repo-maintenance/scout.js.map +1 -0
  35. package/dist/examples/repo-maintenance/seed.d.ts +3 -0
  36. package/dist/examples/repo-maintenance/seed.d.ts.map +1 -0
  37. package/dist/examples/repo-maintenance/seed.js +169 -0
  38. package/dist/examples/repo-maintenance/seed.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +116 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/server.d.ts +15 -0
  44. package/dist/src/cli/server.d.ts.map +1 -0
  45. package/dist/src/cli/server.js +204 -0
  46. package/dist/src/cli/server.js.map +1 -0
  47. package/dist/src/cloud/client.d.ts +30 -0
  48. package/dist/src/cloud/client.d.ts.map +1 -0
  49. package/dist/src/cloud/client.js +124 -0
  50. package/dist/src/cloud/client.js.map +1 -0
  51. package/dist/src/cloud/index.d.ts +5 -0
  52. package/dist/src/cloud/index.d.ts.map +1 -0
  53. package/dist/src/cloud/index.js +3 -0
  54. package/dist/src/cloud/index.js.map +1 -0
  55. package/dist/src/cloud/types.d.ts +104 -0
  56. package/dist/src/cloud/types.d.ts.map +1 -0
  57. package/dist/src/cloud/types.js +9 -0
  58. package/dist/src/cloud/types.js.map +1 -0
  59. package/dist/src/core/attestation.d.ts +63 -0
  60. package/dist/src/core/attestation.d.ts.map +1 -0
  61. package/dist/src/core/attestation.js +331 -0
  62. package/dist/src/core/attestation.js.map +1 -0
  63. package/dist/src/core/events.d.ts +22 -0
  64. package/dist/src/core/events.d.ts.map +1 -0
  65. package/dist/src/core/events.js +45 -0
  66. package/dist/src/core/events.js.map +1 -0
  67. package/dist/src/core/index.d.ts +8 -0
  68. package/dist/src/core/index.d.ts.map +1 -0
  69. package/dist/src/core/index.js +7 -0
  70. package/dist/src/core/index.js.map +1 -0
  71. package/dist/src/core/runtime.d.ts +57 -0
  72. package/dist/src/core/runtime.d.ts.map +1 -0
  73. package/dist/src/core/runtime.js +564 -0
  74. package/dist/src/core/runtime.js.map +1 -0
  75. package/dist/src/core/signal.d.ts +33 -0
  76. package/dist/src/core/signal.d.ts.map +1 -0
  77. package/dist/src/core/signal.js +127 -0
  78. package/dist/src/core/signal.js.map +1 -0
  79. package/dist/src/core/types.d.ts +395 -0
  80. package/dist/src/core/types.d.ts.map +1 -0
  81. package/dist/src/core/types.js +19 -0
  82. package/dist/src/core/types.js.map +1 -0
  83. package/dist/src/core/validation.d.ts +10 -0
  84. package/dist/src/core/validation.d.ts.map +1 -0
  85. package/dist/src/core/validation.js +40 -0
  86. package/dist/src/core/validation.js.map +1 -0
  87. package/dist/src/dsl/builder.d.ts +63 -0
  88. package/dist/src/dsl/builder.d.ts.map +1 -0
  89. package/dist/src/dsl/builder.js +159 -0
  90. package/dist/src/dsl/builder.js.map +1 -0
  91. package/dist/src/dsl/index.d.ts +2 -0
  92. package/dist/src/dsl/index.d.ts.map +1 -0
  93. package/dist/src/dsl/index.js +2 -0
  94. package/dist/src/dsl/index.js.map +1 -0
  95. package/dist/src/environments/dolt/adapter.d.ts +45 -0
  96. package/dist/src/environments/dolt/adapter.d.ts.map +1 -0
  97. package/dist/src/environments/dolt/adapter.js +128 -0
  98. package/dist/src/environments/dolt/adapter.js.map +1 -0
  99. package/dist/src/environments/dolt/index.d.ts +2 -0
  100. package/dist/src/environments/dolt/index.d.ts.map +1 -0
  101. package/dist/src/environments/dolt/index.js +2 -0
  102. package/dist/src/environments/dolt/index.js.map +1 -0
  103. package/dist/src/environments/filesystem/adapter.d.ts +33 -0
  104. package/dist/src/environments/filesystem/adapter.d.ts.map +1 -0
  105. package/dist/src/environments/filesystem/adapter.js +296 -0
  106. package/dist/src/environments/filesystem/adapter.js.map +1 -0
  107. package/dist/src/environments/filesystem/index.d.ts +2 -0
  108. package/dist/src/environments/filesystem/index.d.ts.map +1 -0
  109. package/dist/src/environments/filesystem/index.js +2 -0
  110. package/dist/src/environments/filesystem/index.js.map +1 -0
  111. package/dist/src/environments/github/adapter.d.ts +47 -0
  112. package/dist/src/environments/github/adapter.d.ts.map +1 -0
  113. package/dist/src/environments/github/adapter.js +324 -0
  114. package/dist/src/environments/github/adapter.js.map +1 -0
  115. package/dist/src/environments/github/client.d.ts +48 -0
  116. package/dist/src/environments/github/client.d.ts.map +1 -0
  117. package/dist/src/environments/github/client.js +151 -0
  118. package/dist/src/environments/github/client.js.map +1 -0
  119. package/dist/src/environments/github/index.d.ts +5 -0
  120. package/dist/src/environments/github/index.d.ts.map +1 -0
  121. package/dist/src/environments/github/index.js +5 -0
  122. package/dist/src/environments/github/index.js.map +1 -0
  123. package/dist/src/environments/github/mapper.d.ts +66 -0
  124. package/dist/src/environments/github/mapper.d.ts.map +1 -0
  125. package/dist/src/environments/github/mapper.js +240 -0
  126. package/dist/src/environments/github/mapper.js.map +1 -0
  127. package/dist/src/environments/github/types.d.ts +71 -0
  128. package/dist/src/environments/github/types.d.ts.map +1 -0
  129. package/dist/src/environments/github/types.js +4 -0
  130. package/dist/src/environments/github/types.js.map +1 -0
  131. package/dist/src/environments/remote/adapter.d.ts +61 -0
  132. package/dist/src/environments/remote/adapter.d.ts.map +1 -0
  133. package/dist/src/environments/remote/adapter.js +392 -0
  134. package/dist/src/environments/remote/adapter.js.map +1 -0
  135. package/dist/src/environments/remote/index.d.ts +5 -0
  136. package/dist/src/environments/remote/index.d.ts.map +1 -0
  137. package/dist/src/environments/remote/index.js +3 -0
  138. package/dist/src/environments/remote/index.js.map +1 -0
  139. package/dist/src/environments/remote/protocol.d.ts +124 -0
  140. package/dist/src/environments/remote/protocol.d.ts.map +1 -0
  141. package/dist/src/environments/remote/protocol.js +24 -0
  142. package/dist/src/environments/remote/protocol.js.map +1 -0
  143. package/dist/src/index.d.ts +25 -0
  144. package/dist/src/index.d.ts.map +1 -0
  145. package/dist/src/index.js +31 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/patterns/bridge.d.ts +32 -0
  148. package/dist/src/patterns/bridge.d.ts.map +1 -0
  149. package/dist/src/patterns/bridge.js +163 -0
  150. package/dist/src/patterns/bridge.js.map +1 -0
  151. package/dist/src/patterns/index.d.ts +5 -0
  152. package/dist/src/patterns/index.d.ts.map +1 -0
  153. package/dist/src/patterns/index.js +3 -0
  154. package/dist/src/patterns/index.js.map +1 -0
  155. package/dist/src/patterns/sentinel.d.ts +69 -0
  156. package/dist/src/patterns/sentinel.d.ts.map +1 -0
  157. package/dist/src/patterns/sentinel.js +184 -0
  158. package/dist/src/patterns/sentinel.js.map +1 -0
  159. package/dist/src/providers/agent.d.ts +23 -0
  160. package/dist/src/providers/agent.d.ts.map +1 -0
  161. package/dist/src/providers/agent.js +184 -0
  162. package/dist/src/providers/agent.js.map +1 -0
  163. package/dist/src/providers/bash.d.ts +13 -0
  164. package/dist/src/providers/bash.d.ts.map +1 -0
  165. package/dist/src/providers/bash.js +91 -0
  166. package/dist/src/providers/bash.js.map +1 -0
  167. package/dist/src/providers/claude-code.d.ts +23 -0
  168. package/dist/src/providers/claude-code.d.ts.map +1 -0
  169. package/dist/src/providers/claude-code.js +184 -0
  170. package/dist/src/providers/claude-code.js.map +1 -0
  171. package/dist/src/providers/context.d.ts +12 -0
  172. package/dist/src/providers/context.d.ts.map +1 -0
  173. package/dist/src/providers/context.js +160 -0
  174. package/dist/src/providers/context.js.map +1 -0
  175. package/dist/src/providers/index.d.ts +6 -0
  176. package/dist/src/providers/index.d.ts.map +1 -0
  177. package/dist/src/providers/index.js +7 -0
  178. package/dist/src/providers/index.js.map +1 -0
  179. package/dist/src/providers/structured-output.d.ts +7 -0
  180. package/dist/src/providers/structured-output.d.ts.map +1 -0
  181. package/dist/src/providers/structured-output.js +316 -0
  182. package/dist/src/providers/structured-output.js.map +1 -0
  183. package/dist/src/providers/types.d.ts +239 -0
  184. package/dist/src/providers/types.d.ts.map +1 -0
  185. package/dist/src/providers/types.js +19 -0
  186. package/dist/src/providers/types.js.map +1 -0
  187. package/package.json +129 -0
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env tsx
2
+ // ============================================================
3
+ // Remote Pipeline Integration Test
4
+ // ============================================================
5
+ // Runs the code-pipeline demo against a remote signal server
6
+ // instead of the local filesystem. Proves Vertical Slice 1:
7
+ //
8
+ // 1. Start the Go signal server (must be running separately)
9
+ // 2. Colonies connect via RemoteEnvironment (WebSocket)
10
+ // 3. Dashboard shows real-time events
11
+ // 4. Signals flow through the network, not the filesystem
12
+ //
13
+ // Prerequisites:
14
+ // cd /path/to/mandible-cloud
15
+ // MANDIBLE_DEV_API_KEY=your-api-key MANDIBLE_DEV_PROJECT=demo go run ./cmd/signalserver
16
+ //
17
+ // Then run this:
18
+ // npx tsx examples/remote-pipeline/index.ts
19
+ // ============================================================
20
+ import { RemoteEnvironment } from '../../src/environments/remote/index.js';
21
+ import { colony } from '../../src/dsl/index.js';
22
+ import { startDevServer } from '../../src/cli/server.js';
23
+ const SIGNAL_SERVER_URL = process.env.MANDIBLE_SIGNAL_SERVER ?? 'wss://api.mandible.dev/v1/signals';
24
+ const API_KEY = process.env.MANDIBLE_API_KEY ?? '';
25
+ const PROJECT = process.env.MANDIBLE_PROJECT ?? '';
26
+ const DASHBOARD_PORT = parseInt(process.env.DASHBOARD_PORT ?? '4040', 10);
27
+ function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
28
+ // ── Simulated work ──────────────────────────────────────────
29
+ async function simulateShaping(task) {
30
+ await sleep(500 + Math.random() * 1500);
31
+ return {
32
+ code: `function ${task.name}() { return true; }`,
33
+ linesChanged: Math.floor(Math.random() * 100) + 10,
34
+ task: task.name,
35
+ };
36
+ }
37
+ async function simulateReview(artifact) {
38
+ await sleep(300 + Math.random() * 1000);
39
+ const approved = Math.random() > 0.2;
40
+ return {
41
+ approved,
42
+ feedback: approved
43
+ ? `Code for "${artifact.task}" looks good.`
44
+ : `Code for "${artifact.task}" needs error handling.`,
45
+ };
46
+ }
47
+ async function simulateMerge(artifact) {
48
+ await sleep(200 + Math.random() * 500);
49
+ return { merged: true, task: artifact.task, commitHash: Math.random().toString(36).slice(2, 10) };
50
+ }
51
+ // ── Main ────────────────────────────────────────────────────
52
+ async function main() {
53
+ console.log('\n mandible remote pipeline test');
54
+ console.log(` signal server: ${SIGNAL_SERVER_URL}`);
55
+ console.log(` project: ${PROJECT}\n`);
56
+ // Create the remote environment
57
+ const env = new RemoteEnvironment({
58
+ url: SIGNAL_SERVER_URL,
59
+ apiKey: API_KEY,
60
+ project: PROJECT,
61
+ name: 'remote-demo',
62
+ connectTimeout: 5_000,
63
+ });
64
+ // Connect and verify
65
+ try {
66
+ await env.connect();
67
+ console.log(' connected to signal server\n');
68
+ }
69
+ catch (err) {
70
+ console.error(` failed to connect: ${err.message}`);
71
+ console.error(' make sure the signal server is running:');
72
+ console.error(' MANDIBLE_DEV_API_KEY=your-api-key MANDIBLE_DEV_PROJECT=demo go run ./cmd/signalserver\n');
73
+ process.exit(1);
74
+ }
75
+ // Define colonies against the remote environment
76
+ const shaper = colony('shaper')
77
+ .in(env)
78
+ .sense('task:ready', { unclaimed: true, minConcentration: 0.1 })
79
+ .do('shape-code', async (signal, ctx) => {
80
+ ctx.log(`Shaping: ${signal.payload.name}`);
81
+ const artifact = await simulateShaping(signal.payload);
82
+ await ctx.deposit('artifact:shaped', artifact, { causedBy: [signal.id], tags: ['needs-review'] });
83
+ await ctx.withdraw(signal.id);
84
+ })
85
+ .concurrency(2)
86
+ .claim('lease', 30_000)
87
+ .poll(1500)
88
+ .build();
89
+ const critic = colony('critic')
90
+ .in(env)
91
+ .sense('artifact:shaped', { unclaimed: true, minConcentration: 0.1 })
92
+ .do('review-code', async (signal, ctx) => {
93
+ ctx.log(`Reviewing: ${signal.payload.task}`);
94
+ const review = await simulateReview(signal.payload);
95
+ if (review.approved) {
96
+ await ctx.deposit('review:approved', { artifact: signal.payload, feedback: review.feedback }, { causedBy: [signal.id], tags: ['ready-to-merge'] });
97
+ }
98
+ else {
99
+ await ctx.deposit('review:rejected', { artifact: signal.payload, feedback: review.feedback }, { causedBy: [signal.id], tags: ['needs-rework'], ttl: 60_000 });
100
+ }
101
+ await ctx.withdraw(signal.id);
102
+ })
103
+ .concurrency(2)
104
+ .claim('lease', 30_000)
105
+ .poll(1500)
106
+ .build();
107
+ const keeper = colony('keeper')
108
+ .in(env)
109
+ .sense('review:approved', { unclaimed: true, minConcentration: 0.1 })
110
+ .do('merge-artifact', async (signal, ctx) => {
111
+ const artifact = signal.payload.artifact ?? {};
112
+ ctx.log(`Merging: ${artifact.task}`);
113
+ const result = await simulateMerge(artifact);
114
+ await ctx.deposit('task:complete', result, { causedBy: [signal.id], tags: ['complete'] });
115
+ await ctx.withdraw(signal.id);
116
+ })
117
+ .concurrency(1)
118
+ .claim('exclusive')
119
+ .poll(1500)
120
+ .build();
121
+ // Start the dashboard pointing at the remote environment
122
+ const config = {
123
+ environment: env,
124
+ colonies: [shaper, critic, keeper],
125
+ dashboard: { port: DASHBOARD_PORT, open: true },
126
+ };
127
+ await startDevServer(config, { port: DASHBOARD_PORT, open: true });
128
+ // Seed tasks after colonies are running
129
+ console.log(' seeding tasks...\n');
130
+ await sleep(2000);
131
+ const tasks = [
132
+ { name: 'auth-middleware', priority: 'high', description: 'Add JWT authentication' },
133
+ { name: 'rate-limiter', priority: 'medium', description: 'API rate limiting' },
134
+ { name: 'health-check', priority: 'low', description: 'Add /health endpoint' },
135
+ { name: 'error-handler', priority: 'high', description: 'Global error handling' },
136
+ { name: 'request-logger', priority: 'medium', description: 'Structured logging' },
137
+ ];
138
+ for (const task of tasks) {
139
+ await env.deposit({
140
+ type: 'task:ready',
141
+ payload: task,
142
+ meta: { deposited_by: 'seed', tags: [task.priority] },
143
+ });
144
+ console.log(` seeded: task:ready "${task.name}"`);
145
+ }
146
+ console.log(`\n dashboard: http://localhost:${DASHBOARD_PORT}`);
147
+ console.log(' watching colonies coordinate over the network...');
148
+ console.log(' press Ctrl+C to stop\n');
149
+ }
150
+ main().catch((err) => {
151
+ console.error(err);
152
+ process.exit(1);
153
+ });
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../examples/remote-pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { Environment } from '../../src/core/types.js';
2
+ import type { BedrockConfig } from '../../src/providers/types.js';
3
+ /** Input: what the Fixer senses (from Scout or GitHub) */
4
+ export interface IssuePayload {
5
+ category: string;
6
+ severity: string;
7
+ title: string;
8
+ description: string;
9
+ files: string[];
10
+ suggested_fix?: string;
11
+ previous_feedback?: string;
12
+ }
13
+ /** Output: what the Fixer deposits on success */
14
+ export interface FixProposedPayload {
15
+ issue_title: string;
16
+ branch: string;
17
+ diff_summary: string;
18
+ files_changed: string[];
19
+ tests_passed: boolean;
20
+ confidence: 'high' | 'medium' | 'low';
21
+ }
22
+ /** Output: what the Fixer deposits on failure */
23
+ export interface FixFailedPayload {
24
+ issue_title: string;
25
+ reason: string;
26
+ attempted_approach?: string;
27
+ }
28
+ export interface FixerColonyOptions {
29
+ /** Signal types to sense. Defaults to ['issue:detected']. */
30
+ senseTypes?: string | string[];
31
+ /** Colony name. Defaults to 'fixer'. */
32
+ name?: string;
33
+ /** Model to use. Defaults to 'claude-sonnet-4-5-20250929'. */
34
+ model?: string;
35
+ /** Max budget per fix in USD. Defaults to 3.00. */
36
+ maxBudgetUsd?: number;
37
+ /** Max conversation turns. Defaults to 80. */
38
+ maxTurns?: number;
39
+ /** Allowed tools. Defaults to write-capable tools. */
40
+ allowedTools?: string[];
41
+ /** Disallowed tools. Defaults to []. */
42
+ disallowedTools?: string[];
43
+ /** Max concurrent fix attempts. Defaults to 2. */
44
+ concurrency?: number;
45
+ /** Claim lease duration in ms. Defaults to 600_000 (10 min). */
46
+ claimLeaseDuration?: number;
47
+ /** Route through AWS Bedrock instead of direct Anthropic API. */
48
+ bedrock?: BedrockConfig;
49
+ }
50
+ export declare function createFixerColony(env: Environment, repoRoot: string, options?: FixerColonyOptions): import("../../src/index.js").ColonyDefinition<Record<string, unknown>>;
51
+ interface ParsedFixerSuccess {
52
+ status: 'success';
53
+ issue_title: string;
54
+ branch: string;
55
+ diff_summary: string;
56
+ files_changed: string[];
57
+ tests_passed: boolean;
58
+ confidence: 'high' | 'medium' | 'low';
59
+ reason?: undefined;
60
+ attempted_approach?: undefined;
61
+ }
62
+ interface ParsedFixerFailure {
63
+ status: 'failure';
64
+ issue_title: string;
65
+ reason: string;
66
+ attempted_approach?: string;
67
+ branch?: undefined;
68
+ diff_summary?: undefined;
69
+ files_changed?: undefined;
70
+ tests_passed?: undefined;
71
+ confidence?: undefined;
72
+ }
73
+ export type ParsedFixerOutput = ParsedFixerSuccess | ParsedFixerFailure;
74
+ /**
75
+ * Extracts JSON result from the agent's markdown-formatted output.
76
+ * Looks for a ```json code block, parses it, and validates the shape.
77
+ */
78
+ export declare function parseFixerOutput(text: string): ParsedFixerOutput;
79
+ export {};
80
+ //# sourceMappingURL=fixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixer.d.ts","sourceRoot":"","sources":["../../../examples/repo-maintenance/fixer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAA8B,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAQ9F,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAMD,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAMD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,0EAgKjC;AAMD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kBAAkB,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA0EhE"}
@@ -0,0 +1,217 @@
1
+ // PURPOSE: Fixer colony — claims issue:detected signals and attempts to fix them using a Claude agent.
2
+ // PURPOSE: Deposits fix:proposed on success or fix:failed on failure.
3
+ import { colony } from '../../src/dsl/builder.js';
4
+ import { withClaudeCode } from '../../src/providers/claude-code.js';
5
+ // ----------------------------------------------------------
6
+ // Fixer colony factory
7
+ // ----------------------------------------------------------
8
+ export function createFixerColony(env, repoRoot, options = {}) {
9
+ const { senseTypes = 'issue:detected', name = 'fixer', model = 'claude-sonnet-4-5-20250929', maxBudgetUsd = 3.00, maxTurns = 80, allowedTools = ['Read', 'Edit', 'Write', 'Bash', 'Glob', 'Grep'], disallowedTools = [], concurrency = 2, claimLeaseDuration = 600_000, bedrock, } = options;
10
+ const types = Array.isArray(senseTypes) ? senseTypes : [senseTypes];
11
+ let builder = colony(name).in(env);
12
+ for (const t of types) {
13
+ builder = builder.sense(t, { unclaimed: true });
14
+ }
15
+ const def = builder
16
+ .do('fix-issue', withClaudeCode({
17
+ model,
18
+ systemPrompt: [
19
+ 'You are a Fixer agent in a repo-maintenance colony.',
20
+ 'Your job is to claim a detected issue and produce a minimal, correct fix.',
21
+ '',
22
+ 'Workflow:',
23
+ '1. Create a branch named `mandible/fix-{category}-{short-hash}` from the current HEAD.',
24
+ ' Use the first 6 chars of a random hex string for the short hash.',
25
+ '2. Analyze the issue description and affected files.',
26
+ '3. Make the MINIMAL change needed to resolve the issue.',
27
+ '4. Run tests (`npm test` or `npx vitest run`) to verify the fix does not break anything.',
28
+ '5. Output a JSON result block (see below).',
29
+ '',
30
+ 'Constraints:',
31
+ '- Do NOT merge to main. Only work on the fix branch.',
32
+ '- Do NOT make changes beyond what is needed for this specific issue.',
33
+ '- If a previous_feedback field is present, it means a prior fix attempt was rejected.',
34
+ ' Use that feedback to improve your approach.',
35
+ '- If you cannot fix the issue, output a failure result instead.',
36
+ '',
37
+ 'Output format — wrap in a ```json code block:',
38
+ '```json',
39
+ '{',
40
+ ' "status": "success",',
41
+ ' "issue_title": "Short title of the issue",',
42
+ ' "branch": "mandible/fix-category-abc123",',
43
+ ' "diff_summary": "What changed and why",',
44
+ ' "files_changed": ["file1.ts", "file2.ts"],',
45
+ ' "tests_passed": true,',
46
+ ' "confidence": "high"',
47
+ '}',
48
+ '```',
49
+ '',
50
+ 'On failure:',
51
+ '```json',
52
+ '{',
53
+ ' "status": "failure",',
54
+ ' "issue_title": "Short title of the issue",',
55
+ ' "reason": "Why the fix could not be applied",',
56
+ ' "attempted_approach": "What was tried"',
57
+ '}',
58
+ '```',
59
+ ].join('\n'),
60
+ prompt: (signal) => {
61
+ const p = signal.payload;
62
+ const lines = [
63
+ '## Fix Request',
64
+ '',
65
+ `**Category:** ${p.category ?? 'unknown'}`,
66
+ `**Severity:** ${p.severity ?? 'medium'}`,
67
+ `**Title:** ${p.title ?? 'Untitled issue'}`,
68
+ '',
69
+ '### Description',
70
+ String(p.description ?? 'No description provided.'),
71
+ '',
72
+ ];
73
+ const files = p.files;
74
+ if (files && files.length > 0) {
75
+ lines.push('### Affected Files');
76
+ for (const f of files) {
77
+ lines.push(`- ${f}`);
78
+ }
79
+ lines.push('');
80
+ }
81
+ if (p.suggested_fix) {
82
+ lines.push('### Suggested Fix');
83
+ lines.push(String(p.suggested_fix));
84
+ lines.push('');
85
+ }
86
+ if (p.previous_feedback) {
87
+ lines.push('### Previous Feedback (from rejected attempt)');
88
+ lines.push(String(p.previous_feedback));
89
+ lines.push('');
90
+ lines.push('Use this feedback to improve your fix approach.');
91
+ lines.push('');
92
+ }
93
+ lines.push('Apply the fix, run tests, and output the JSON result block.');
94
+ return lines.join('\n');
95
+ },
96
+ allowedTools,
97
+ disallowedTools,
98
+ workingDirectory: repoRoot,
99
+ maxBudgetUsd,
100
+ maxTurns,
101
+ bedrock,
102
+ output: (result, signal) => {
103
+ const parsed = parseFixerOutput(result.text);
104
+ const issuePayload = signal.payload;
105
+ const issueTitle = String(issuePayload.title ?? 'Unknown issue');
106
+ if (parsed.status === 'failure') {
107
+ return [{
108
+ type: 'fix:failed',
109
+ payload: {
110
+ issue_title: parsed.issue_title || issueTitle,
111
+ reason: parsed.reason || 'Agent did not produce a valid result',
112
+ attempted_approach: parsed.attempted_approach,
113
+ costUsd: result.costUsd,
114
+ durationMs: result.durationMs,
115
+ },
116
+ tags: ['failure'],
117
+ }];
118
+ }
119
+ return [{
120
+ type: 'fix:proposed',
121
+ payload: {
122
+ issue_title: parsed.issue_title || issueTitle,
123
+ branch: parsed.branch || 'unknown',
124
+ diff_summary: parsed.diff_summary || '',
125
+ files_changed: parsed.files_changed || [],
126
+ tests_passed: parsed.tests_passed ?? false,
127
+ confidence: parsed.confidence || 'low',
128
+ costUsd: result.costUsd,
129
+ durationMs: result.durationMs,
130
+ },
131
+ tags: [parsed.confidence || 'low', parsed.tests_passed ? 'tests-pass' : 'tests-fail'],
132
+ }];
133
+ },
134
+ autoWithdraw: true,
135
+ }))
136
+ .concurrency(concurrency)
137
+ .claim('lease', claimLeaseDuration)
138
+ .poll(3000)
139
+ .build();
140
+ return def;
141
+ }
142
+ /**
143
+ * Extracts JSON result from the agent's markdown-formatted output.
144
+ * Looks for a ```json code block, parses it, and validates the shape.
145
+ */
146
+ export function parseFixerOutput(text) {
147
+ if (!text) {
148
+ return {
149
+ status: 'failure',
150
+ issue_title: '',
151
+ reason: 'Empty agent output',
152
+ };
153
+ }
154
+ // Try to find a JSON code block
155
+ const codeBlockMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
156
+ const jsonStr = codeBlockMatch ? codeBlockMatch[1].trim() : text.trim();
157
+ let parsed;
158
+ try {
159
+ parsed = JSON.parse(jsonStr);
160
+ }
161
+ catch {
162
+ // Try to find an object in the text
163
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
164
+ if (objectMatch) {
165
+ try {
166
+ parsed = JSON.parse(objectMatch[0]);
167
+ }
168
+ catch {
169
+ return {
170
+ status: 'failure',
171
+ issue_title: '',
172
+ reason: 'Could not parse agent output as JSON',
173
+ };
174
+ }
175
+ }
176
+ else {
177
+ return {
178
+ status: 'failure',
179
+ issue_title: '',
180
+ reason: 'Could not parse agent output as JSON',
181
+ };
182
+ }
183
+ }
184
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
185
+ return {
186
+ status: 'failure',
187
+ issue_title: '',
188
+ reason: 'Agent output is not a JSON object',
189
+ };
190
+ }
191
+ const obj = parsed;
192
+ // Check for explicit failure
193
+ if (obj.status === 'failure') {
194
+ return {
195
+ status: 'failure',
196
+ issue_title: typeof obj.issue_title === 'string' ? obj.issue_title : '',
197
+ reason: typeof obj.reason === 'string' ? obj.reason : 'Unknown failure',
198
+ ...(typeof obj.attempted_approach === 'string' ? { attempted_approach: obj.attempted_approach } : {}),
199
+ };
200
+ }
201
+ // Treat as success — validate and normalize
202
+ const validConfidences = new Set(['high', 'medium', 'low']);
203
+ return {
204
+ status: 'success',
205
+ issue_title: typeof obj.issue_title === 'string' ? obj.issue_title : '',
206
+ branch: typeof obj.branch === 'string' ? obj.branch : '',
207
+ diff_summary: typeof obj.diff_summary === 'string' ? obj.diff_summary : '',
208
+ files_changed: Array.isArray(obj.files_changed)
209
+ ? obj.files_changed.filter((f) => typeof f === 'string')
210
+ : [],
211
+ tests_passed: typeof obj.tests_passed === 'boolean' ? obj.tests_passed : false,
212
+ confidence: validConfidences.has(obj.confidence)
213
+ ? obj.confidence
214
+ : 'low',
215
+ };
216
+ }
217
+ //# sourceMappingURL=fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixer.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/fixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { FilesystemEnvironment } from '../../src/environments/filesystem/index.js';
2
+ declare const _default: {
3
+ environment: FilesystemEnvironment;
4
+ colonies: import("../../src/index.js").ColonyDefinition<Record<string, unknown>>[];
5
+ dashboard: {
6
+ port: number;
7
+ open: boolean;
8
+ };
9
+ };
10
+ export default _default;
11
+ //# sourceMappingURL=mandible.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandible.config.d.ts","sourceRoot":"","sources":["../../../examples/repo-maintenance/mandible.config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;;;;;;;;;AAiCnF,wBAIE"}
@@ -0,0 +1,34 @@
1
+ // PURPOSE: Dashboard config for repo-maintenance colonies (Scout + Fixer).
2
+ // PURPOSE: Run: npx tsx src/cli/index.ts dev examples/repo-maintenance/mandible.config.ts
3
+ import { resolve } from 'node:path';
4
+ import { rm, mkdir } from 'node:fs/promises';
5
+ import { FilesystemEnvironment } from '../../src/environments/filesystem/index.js';
6
+ import { createScoutColony } from './scout.js';
7
+ import { createFixerColony } from './fixer.js';
8
+ const ENV_ROOT = resolve('/tmp/mandible-repo-maintenance');
9
+ const TARGET_REPO = resolve(process.env.TARGET_REPO ?? process.cwd());
10
+ // Clean slate on startup
11
+ await rm(ENV_ROOT, { recursive: true, force: true });
12
+ await mkdir(ENV_ROOT, { recursive: true });
13
+ const env = new FilesystemEnvironment({ root: ENV_ROOT, name: 'repo-maintenance' });
14
+ // ── Colonies ────────────────────────────────────────────────
15
+ const scout = createScoutColony(env, TARGET_REPO);
16
+ const fixer = createFixerColony(env, TARGET_REPO);
17
+ // ── Seed scan trigger after a short delay ───────────────────
18
+ setTimeout(async () => {
19
+ await env.deposit({
20
+ type: 'scan:trigger',
21
+ payload: {
22
+ scope: 'full',
23
+ triggered_by: 'dashboard',
24
+ },
25
+ meta: { deposited_by: 'seed', ttl: 10 * 60_000 },
26
+ });
27
+ }, 2000);
28
+ // ── Export config for mandible dev ──────────────────────────
29
+ export default {
30
+ environment: env,
31
+ colonies: [scout, fixer],
32
+ dashboard: { port: 4040, open: true },
33
+ };
34
+ //# sourceMappingURL=mandible.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandible.config.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/mandible.config.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0FAA0F;AAE1F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,QAAQ,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAEtE,yBAAyB;AACzB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAE3C,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAEpF,+DAA+D;AAE/D,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAClD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAElD,+DAA+D;AAE/D,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,GAAG,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE;YACP,KAAK,EAAE,MAAM;YACb,YAAY,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE;KACjD,CAAC,CAAC;AACL,CAAC,EAAE,IAAI,CAAC,CAAC;AAET,+DAA+D;AAE/D,eAAe;IACb,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACxB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;CACtC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Environment } from '../../src/core/types.js';
2
+ import type { BedrockConfig } from '../../src/providers/types.js';
3
+ export interface ScanTriggerPayload {
4
+ scope: 'full' | 'incremental';
5
+ triggered_by: string;
6
+ }
7
+ export interface IssueDetectedPayload {
8
+ category: 'dependency' | 'dead-code' | 'test-coverage' | 'security' | 'style' | 'stale-todo' | 'other';
9
+ severity: 'low' | 'medium' | 'high' | 'critical';
10
+ title: string;
11
+ description: string;
12
+ files: string[];
13
+ suggested_fix?: string;
14
+ }
15
+ export interface ScoutColonyOptions {
16
+ /** Signal types to sense. Defaults to ['scan:trigger']. */
17
+ senseTypes?: string | string[];
18
+ /** Colony name. Defaults to 'scout'. */
19
+ name?: string;
20
+ /** Model to use. Defaults to 'claude-sonnet-4-5-20250929'. */
21
+ model?: string;
22
+ /** Max budget per scan in USD. Defaults to 0.50. */
23
+ maxBudgetUsd?: number;
24
+ /** Max conversation turns. Defaults to 50. */
25
+ maxTurns?: number;
26
+ /** Allowed tools. Defaults to read-only tools. */
27
+ allowedTools?: string[];
28
+ /** Disallowed tools. Defaults to ['Edit', 'Write']. */
29
+ disallowedTools?: string[];
30
+ /** Route through AWS Bedrock instead of direct Anthropic API. */
31
+ bedrock?: BedrockConfig;
32
+ }
33
+ export declare function createScoutColony(env: Environment, repoRoot: string, options?: ScoutColonyOptions): import("../../src/index.js").ColonyDefinition<Record<string, unknown>>;
34
+ /**
35
+ * Extracts JSON issue array from the agent's markdown-formatted output.
36
+ * Looks for a ```json code block, parses it, and validates the shape.
37
+ */
38
+ export declare function parseScoutOutput(text: string): IssueDetectedPayload[];
39
+ //# sourceMappingURL=scout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../../examples/repo-maintenance/scout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAA8B,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAQ9F,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC;IACvG,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAMD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,0EAuHjC;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAkDrE"}