@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,3 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
3
+ //# sourceMappingURL=with-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-providers.d.ts","sourceRoot":"","sources":["../../../examples/code-pipeline/with-providers.ts"],"names":[],"mappings":""}
@@ -0,0 +1,246 @@
1
+ #!/usr/bin/env tsx
2
+ // ============================================================
3
+ // Code Pipeline Demo — With Real LLM Providers
4
+ // ============================================================
5
+ // Same pipeline as index.ts, but using action providers
6
+ // instead of simulated work functions.
7
+ //
8
+ // Shaper: withClaudeCode (Claude Code SDK) — full coding agent
9
+ // Critic: withStructuredOutput (Anthropic) — structured review
10
+ // Keeper: withBash — git merge
11
+ //
12
+ // Prerequisites:
13
+ // npm install @anthropic-ai/sdk @anthropic-ai/claude-agent-sdk
14
+ // export ANTHROPIC_API_KEY=sk-ant-...
15
+ //
16
+ // Run:
17
+ // npx tsx examples/code-pipeline/with-providers.ts
18
+ // ============================================================
19
+ import { resolve } from 'node:path';
20
+ import { rm, mkdir } from 'node:fs/promises';
21
+ import { FilesystemEnvironment } from '../../src/environments/filesystem/index.js';
22
+ import { colony } from '../../src/dsl/index.js';
23
+ import { createRuntime } from '../../src/core/runtime.js';
24
+ import { withClaudeCode } from '../../src/providers/claude-code.js';
25
+ import { withStructuredOutput } from '../../src/providers/structured-output.js';
26
+ import { withBash } from '../../src/providers/bash.js';
27
+ import { assembleContext } from '../../src/providers/context.js';
28
+ const ENV_ROOT = resolve('/tmp/stigmergy-demo-providers');
29
+ const WORKSPACE = resolve('/tmp/stigmergy-workspace');
30
+ async function setup() {
31
+ await rm(ENV_ROOT, { recursive: true, force: true });
32
+ await rm(WORKSPACE, { recursive: true, force: true });
33
+ await mkdir(ENV_ROOT, { recursive: true });
34
+ await mkdir(WORKSPACE, { recursive: true });
35
+ console.log(`\n🌿 Environment: ${ENV_ROOT}`);
36
+ console.log(`📁 Workspace: ${WORKSPACE}\n`);
37
+ }
38
+ // ----------------------------------------------------------
39
+ // Colony definitions using real providers
40
+ // ----------------------------------------------------------
41
+ function defineColonies(env) {
42
+ // ── SHAPER — Full coding agent via Claude Code SDK ─────
43
+ const shaperDef = colony('shaper')
44
+ .in(env)
45
+ .sense('task:ready', { unclaimed: true, minConcentration: 0.1 })
46
+ .do('shape-code', withClaudeCode({
47
+ model: 'claude-sonnet-4-5-20250929',
48
+ systemPrompt: [
49
+ 'You are a senior TypeScript engineer in a coding colony.',
50
+ 'You receive task specifications and implement them as clean, well-typed code.',
51
+ 'Create the implementation in the working directory.',
52
+ 'Include basic tests. Follow existing code conventions.',
53
+ 'Be concise — implement exactly what is asked, nothing more.',
54
+ ].join('\n'),
55
+ prompt: async (signal) => {
56
+ // Assemble context from signal lineage
57
+ const context = await assembleContext(signal, env, {
58
+ includeLineage: true,
59
+ includeRelated: ['review:changes-needed'],
60
+ });
61
+ return [
62
+ `## Task: ${signal.payload.name}`,
63
+ `**Description:** ${signal.payload.description}`,
64
+ `**Priority:** ${signal.payload.priority}`,
65
+ '',
66
+ 'Implement this as a TypeScript module with tests.',
67
+ '',
68
+ context,
69
+ ].join('\n');
70
+ },
71
+ tools: ['file_edit', 'bash'],
72
+ workingDirectory: (signal) => resolve(WORKSPACE, String(signal.payload.name)),
73
+ maxTokens: 4096,
74
+ output: {
75
+ type: 'artifact:shaped',
76
+ tags: ['needs-review'],
77
+ },
78
+ }))
79
+ .concurrency(2)
80
+ .claim('lease', 120_000) // 2 min lease for agent work
81
+ .poll(2000)
82
+ .build();
83
+ // ── CRITIC — Structured output via Anthropic SDK ───────
84
+ const criticDef = colony('critic')
85
+ .in(env)
86
+ .sense('artifact:shaped', { unclaimed: true, minConcentration: 0.1 })
87
+ .do('review-code', withStructuredOutput({
88
+ model: 'claude-sonnet-4-5-20250929',
89
+ provider: 'anthropic',
90
+ systemPrompt: [
91
+ 'You are a code reviewer in a critic colony.',
92
+ 'Review the code artifact and provide structured feedback.',
93
+ 'Be constructive but rigorous. Focus on correctness,',
94
+ 'error handling, type safety, and test coverage.',
95
+ ].join('\n'),
96
+ prompt: async (signal) => {
97
+ const context = await assembleContext(signal, env, {
98
+ includeLineage: true,
99
+ lineageDepth: 2,
100
+ });
101
+ return [
102
+ '## Code Review Request',
103
+ '',
104
+ `**Task:** ${signal.payload.task ?? signal.payload.text ?? 'unknown'}`,
105
+ '',
106
+ '### Artifact',
107
+ '```',
108
+ JSON.stringify(signal.payload, null, 2),
109
+ '```',
110
+ '',
111
+ context,
112
+ '',
113
+ 'Review this artifact and provide your assessment.',
114
+ ].join('\n');
115
+ },
116
+ // Schema would be a Zod object in real usage:
117
+ // schema: z.object({
118
+ // approved: z.boolean(),
119
+ // feedback: z.string(),
120
+ // severity: z.enum(['minor', 'major', 'blocking']),
121
+ // suggestions: z.array(z.string()).optional(),
122
+ // }),
123
+ route: (result, signal) => {
124
+ if (result.approved) {
125
+ return {
126
+ type: 'review:approved',
127
+ payload: { ...result, artifact: signal.payload },
128
+ tags: ['ready-to-merge'],
129
+ };
130
+ }
131
+ return {
132
+ type: 'review:changes-needed',
133
+ payload: { ...result, artifact: signal.payload },
134
+ tags: ['needs-rework'],
135
+ ttl: 120_000,
136
+ };
137
+ },
138
+ }))
139
+ .concurrency(2)
140
+ .claim('lease', 60_000)
141
+ .poll(2000)
142
+ .build();
143
+ // ── KEEPER — Bash commands for mechanical merge ────────
144
+ const keeperDef = colony('keeper')
145
+ .in(env)
146
+ .sense('review:approved', { unclaimed: true, minConcentration: 0.1 })
147
+ .do('merge-artifact', withBash({
148
+ command: (signal) => {
149
+ const artifact = signal.payload.artifact ?? {};
150
+ const task = artifact.task ?? artifact.name ?? 'unknown';
151
+ // In a real setup this would be:
152
+ // git merge feature/${task} --no-ff -m "Merge: ${task}"
153
+ // For the demo, we just echo success
154
+ return `echo "Merged artifact: ${task}" && date`;
155
+ },
156
+ cwd: WORKSPACE,
157
+ timeout: 30_000,
158
+ output: (result, signal) => {
159
+ const artifact = signal.payload.artifact ?? {};
160
+ if (result.exitCode === 0) {
161
+ return {
162
+ type: 'artifact:merged',
163
+ payload: {
164
+ task: artifact.task ?? artifact.name,
165
+ stdout: result.stdout.trim(),
166
+ durationMs: result.durationMs,
167
+ },
168
+ tags: ['complete'],
169
+ };
170
+ }
171
+ return {
172
+ type: 'merge:failed',
173
+ payload: {
174
+ task: artifact.task ?? artifact.name,
175
+ stderr: result.stderr,
176
+ exitCode: result.exitCode,
177
+ },
178
+ tags: ['needs-attention'],
179
+ };
180
+ },
181
+ }))
182
+ .concurrency(1)
183
+ .claim('exclusive')
184
+ .poll(2000)
185
+ .build();
186
+ return { shaperDef, criticDef, keeperDef };
187
+ }
188
+ // ----------------------------------------------------------
189
+ // Main
190
+ // ----------------------------------------------------------
191
+ async function main() {
192
+ await setup();
193
+ const env = new FilesystemEnvironment({ root: ENV_ROOT, name: 'code-pipeline' });
194
+ const { shaperDef, criticDef, keeperDef } = defineColonies(env);
195
+ const shaperRuntime = createRuntime(shaperDef, { rate: 0.002, interval: 15_000 });
196
+ const criticRuntime = createRuntime(criticDef, { rate: 0.002, interval: 15_000 });
197
+ const keeperRuntime = createRuntime(keeperDef, { rate: 0.002, interval: 15_000 });
198
+ console.log('🚀 Starting colonies with LLM providers...\n');
199
+ await Promise.all([
200
+ shaperRuntime.start(),
201
+ criticRuntime.start(),
202
+ keeperRuntime.start(),
203
+ ]);
204
+ // Seed tasks
205
+ console.log('📋 Seeding tasks...\n');
206
+ const tasks = [
207
+ { name: 'auth-middleware', priority: 'high', description: 'Add JWT authentication middleware for Express' },
208
+ { name: 'rate-limiter', priority: 'medium', description: 'Implement sliding window rate limiter' },
209
+ ];
210
+ for (const task of tasks) {
211
+ const signal = await env.deposit({
212
+ type: 'task:ready',
213
+ payload: task,
214
+ meta: { deposited_by: 'orchestrator', tags: [task.priority] },
215
+ });
216
+ console.log(` → task:ready "${task.name}" (${signal.id})`);
217
+ }
218
+ console.log('\n' + '─'.repeat(60));
219
+ console.log(' Colonies self-organizing with real LLM providers.');
220
+ console.log(' Shaper: Claude Code SDK | Critic: Anthropic | Keeper: Bash');
221
+ console.log('─'.repeat(60) + '\n');
222
+ // Let colonies work
223
+ await sleep(60_000);
224
+ // Report
225
+ console.log('\n' + '═'.repeat(60));
226
+ const snapshot = await env.snapshot();
227
+ console.log(`\n Active signals: ${snapshot.length}`);
228
+ for (const s of snapshot) {
229
+ console.log(` [${s.type}] ${JSON.stringify(s.payload).slice(0, 80)}`);
230
+ }
231
+ console.log('\n Colony stats:');
232
+ console.log(` Shaper: ${shaperRuntime.stats.signalsProcessed} processed`);
233
+ console.log(` Critic: ${criticRuntime.stats.signalsProcessed} processed`);
234
+ console.log(` Keeper: ${keeperRuntime.stats.signalsProcessed} processed`);
235
+ await Promise.all([
236
+ shaperRuntime.stop(),
237
+ criticRuntime.stop(),
238
+ keeperRuntime.stop(),
239
+ ]);
240
+ console.log('\n✅ Done.\n');
241
+ }
242
+ function sleep(ms) {
243
+ return new Promise(resolve => setTimeout(resolve, ms));
244
+ }
245
+ main().catch(console.error);
246
+ //# sourceMappingURL=with-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-providers.js","sourceRoot":"","sources":["../../../examples/code-pipeline/with-providers.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,+CAA+C;AAC/C,+DAA+D;AAC/D,wDAAwD;AACxD,uCAAuC;AACvC,EAAE;AACF,gEAAgE;AAChE,gEAAgE;AAChE,gCAAgC;AAChC,EAAE;AACF,iBAAiB;AACjB,iEAAiE;AACjE,wCAAwC;AACxC,EAAE;AACF,OAAO;AACP,qDAAqD;AACrD,+DAA+D;AAE/D,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,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,QAAQ,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEtD,KAAK,UAAU,KAAK;IAClB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,6DAA6D;AAC7D,0CAA0C;AAC1C,6DAA6D;AAE7D,SAAS,cAAc,CAAC,GAA0B;IAEhD,0DAA0D;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;SAC/B,EAAE,CAAC,GAAG,CAAC;SACP,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;SAC/D,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;QAC/B,KAAK,EAAE,4BAA4B;QAEnC,YAAY,EAAE;YACZ,0DAA0D;YAC1D,+EAA+E;YAC/E,qDAAqD;YACrD,wDAAwD;YACxD,6DAA6D;SAC9D,CAAC,IAAI,CAAC,IAAI,CAAC;QAEZ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,uCAAuC;YACvC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjD,cAAc,EAAE,IAAI;gBACpB,cAAc,EAAE,CAAC,uBAAuB,CAAC;aAC1C,CAAC,CAAC;YAEH,OAAO;gBACL,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjC,oBAAoB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;gBAChD,iBAAiB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAC1C,EAAE;gBACF,mDAAmD;gBACnD,EAAE;gBACF,OAAO;aACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAED,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7E,SAAS,EAAE,IAAI;QAEf,MAAM,EAAE;YACN,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,CAAC,cAAc,CAAC;SACvB;KACF,CAAC,CAAC;SACF,WAAW,CAAC,CAAC,CAAC;SACd,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,6BAA6B;SACrD,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,EAAE,CAAC;IAEX,0DAA0D;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;SAC/B,EAAE,CAAC,GAAG,CAAC;SACP,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;SACpE,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC;QACtC,KAAK,EAAE,4BAA4B;QACnC,QAAQ,EAAE,WAAW;QAErB,YAAY,EAAE;YACZ,6CAA6C;YAC7C,2DAA2D;YAC3D,qDAAqD;YACrD,iDAAiD;SAClD,CAAC,IAAI,CAAC,IAAI,CAAC;QAEZ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjD,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;YAEH,OAAO;gBACL,wBAAwB;gBACxB,EAAE;gBACF,aAAa,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,EAAE;gBACtE,EAAE;gBACF,cAAc;gBACd,KAAK;gBACL,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,KAAK;gBACL,EAAE;gBACF,OAAO;gBACP,EAAE;gBACF,mDAAmD;aACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAED,8CAA8C;QAC9C,qBAAqB;QACrB,2BAA2B;QAC3B,0BAA0B;QAC1B,sDAAsD;QACtD,iDAAiD;QACjD,MAAM;QAEN,KAAK,EAAE,CAAC,MAAW,EAAE,MAAM,EAAE,EAAE;YAC7B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO;oBACL,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE;oBAChD,IAAI,EAAE,CAAC,gBAAgB,CAAC;iBACzB,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE;gBAChD,IAAI,EAAE,CAAC,cAAc,CAAC;gBACtB,GAAG,EAAE,OAAO;aACb,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;SACF,WAAW,CAAC,CAAC,CAAC;SACd,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;SACtB,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,EAAE,CAAC;IAEX,0DAA0D;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;SAC/B,EAAE,CAAC,GAAG,CAAC;SACP,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;SACpE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAC7B,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAClB,MAAM,QAAQ,GAAI,MAAM,CAAC,OAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC;YACzD,iCAAiC;YACjC,0DAA0D;YAC1D,qCAAqC;YACrC,OAAO,0BAA0B,IAAI,WAAW,CAAC;QACnD,CAAC;QACD,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM;QAEf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAI,MAAM,CAAC,OAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;wBACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;wBAC5B,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B;oBACD,IAAI,EAAE,CAAC,UAAU,CAAC;iBACnB,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;oBACpC,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B;gBACD,IAAI,EAAE,CAAC,iBAAiB,CAAC;aAC1B,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;SACF,WAAW,CAAC,CAAC,CAAC;SACd,KAAK,CAAC,WAAW,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,EAAE,CAAC;IAEX,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED,6DAA6D;AAC7D,OAAO;AACP,6DAA6D;AAE7D,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,EAAE,CAAC;IAEd,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACjF,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAElF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,aAAa,CAAC,KAAK,EAAE;QACrB,aAAa,CAAC,KAAK,EAAE;QACrB,aAAa,CAAC,KAAK,EAAE;KACtB,CAAC,CAAC;IAEH,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,+CAA+C,EAAE;QAC3G,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;KACnG,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnC,oBAAoB;IACpB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,SAAS;IACT,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,KAAK,CAAC,gBAAgB,YAAY,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,KAAK,CAAC,gBAAgB,YAAY,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,KAAK,CAAC,gBAAgB,YAAY,CAAC,CAAC;IAE/E,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,aAAa,CAAC,IAAI,EAAE;QACpB,aAAa,CAAC,IAAI,EAAE;QACpB,aAAa,CAAC,IAAI,EAAE;KACrB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../examples/docker-pipeline/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,235 @@
1
+ #!/usr/bin/env tsx
2
+ // ============================================================
3
+ // Docker Pipeline — Colonies Running in Containers
4
+ // ============================================================
5
+ // Deploys colonies as Docker containers via the Mandible Cloud API.
6
+ // Each colony runs in its own container, connected to the signal
7
+ // server over WebSocket. The dashboard shows real-time coordination.
8
+ //
9
+ // Prerequisites:
10
+ // 1. Docker running
11
+ // 2. Build the colony image:
12
+ // cd mandible-cloud && ./scripts/build-colony-dev.sh
13
+ // 3. Start the signal server + cloud API:
14
+ // cd mandible-cloud
15
+ // PORT=9090 MANDIBLE_ADMIN_KEY=your-admin-key go run ./cmd/signalserver &
16
+ // PORT=9091 MANDIBLE_SIGNAL_SERVER_URL=ws://host.docker.internal:9090/v1/signals \
17
+ // MANDIBLE_SIGNAL_SERVER_ADMIN_URL=http://localhost:9090 \
18
+ // MANDIBLE_ZONE_MODE=docker MANDIBLE_ADMIN_KEY=your-admin-key \
19
+ // go run ./cmd/cloudapi &
20
+ //
21
+ // Then run:
22
+ // npx tsx examples/docker-pipeline/index.ts
23
+ // ============================================================
24
+ import { RemoteEnvironment } from '../../src/environments/remote/index.js';
25
+ import { startDevServer } from '../../src/cli/server.js';
26
+ import { colony } from '../../src/dsl/index.js';
27
+ const CLOUD_API = process.env.MANDIBLE_CLOUD_API ?? 'http://localhost:9091';
28
+ const SIGNAL_SERVER = process.env.MANDIBLE_SIGNAL_SERVER ?? 'ws://localhost:9090/v1/signals';
29
+ const ADMIN_KEY = process.env.MANDIBLE_ADMIN_KEY ?? 'replace-with-your-admin-key';
30
+ const COLONY_IMAGE = process.env.MANDIBLE_COLONY_IMAGE ?? 'mandible-colony:latest';
31
+ const DASHBOARD_PORT = parseInt(process.env.DASHBOARD_PORT ?? '4042', 10);
32
+ function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
33
+ async function api(method, path, body) {
34
+ const res = await fetch(`${CLOUD_API}${path}`, {
35
+ method,
36
+ headers: {
37
+ 'Authorization': `Bearer ${ADMIN_KEY}`,
38
+ 'Content-Type': 'application/json',
39
+ },
40
+ body: body ? JSON.stringify(body) : undefined,
41
+ });
42
+ if (!res.ok) {
43
+ const err = await res.text();
44
+ throw new Error(`API ${method} ${path} failed (${res.status}): ${err}`);
45
+ }
46
+ if (res.status === 204)
47
+ return null;
48
+ return res.json();
49
+ }
50
+ async function waitForZones(projectId, expected, timeoutMs = 30_000) {
51
+ const start = Date.now();
52
+ while (Date.now() - start < timeoutMs) {
53
+ const zones = await api('GET', `/v1/projects/${projectId}/zones`);
54
+ const running = zones.filter((z) => z.state === 'running');
55
+ if (running.length >= expected)
56
+ return zones;
57
+ process.stdout.write('.');
58
+ await sleep(1000);
59
+ }
60
+ throw new Error(`timed out waiting for ${expected} zones to reach running state`);
61
+ }
62
+ // ── Simulated work (used by the local dashboard colonies) ───
63
+ async function simulateShaping(task) {
64
+ await sleep(500 + Math.random() * 1500);
65
+ return {
66
+ code: `function ${task.name}() { return true; }`,
67
+ linesChanged: Math.floor(Math.random() * 100) + 10,
68
+ task: task.name,
69
+ };
70
+ }
71
+ async function simulateReview(artifact) {
72
+ await sleep(300 + Math.random() * 1000);
73
+ const approved = Math.random() > 0.2;
74
+ return {
75
+ approved,
76
+ feedback: approved
77
+ ? `Code for "${artifact.task}" looks good.`
78
+ : `Code for "${artifact.task}" needs error handling.`,
79
+ };
80
+ }
81
+ async function simulateMerge(artifact) {
82
+ await sleep(200 + Math.random() * 500);
83
+ return { merged: true, task: artifact.task, commitHash: Math.random().toString(36).slice(2, 10) };
84
+ }
85
+ // ── Main ────────────────────────────────────────────────────
86
+ async function main() {
87
+ console.log('\n mandible docker pipeline');
88
+ console.log(` cloud API: ${CLOUD_API}`);
89
+ console.log(` signal server: ${SIGNAL_SERVER}`);
90
+ console.log(` colony image: ${COLONY_IMAGE}\n`);
91
+ // 1. Create project via Cloud API
92
+ console.log(' creating project...');
93
+ const project = await api('POST', '/v1/projects', { name: `docker-demo-${Date.now()}` });
94
+ const projectId = project.id;
95
+ console.log(` project: ${projectId}\n`);
96
+ // 2. Deploy 3 colonies as Docker containers
97
+ console.log(' deploying colonies as Docker containers...');
98
+ const deployResult = await api('POST', `/v1/projects/${projectId}/deploy`, {
99
+ colonies: [
100
+ {
101
+ name: 'shaper',
102
+ image: COLONY_IMAGE,
103
+ concurrency: 2,
104
+ claimStrategy: 'lease',
105
+ sensors: [{ query: { type: 'task:ready' }, pollInterval: 2000 }],
106
+ },
107
+ {
108
+ name: 'critic',
109
+ image: COLONY_IMAGE,
110
+ concurrency: 2,
111
+ claimStrategy: 'lease',
112
+ sensors: [{ query: { type: 'artifact:shaped' }, pollInterval: 2000 }],
113
+ },
114
+ {
115
+ name: 'keeper',
116
+ image: COLONY_IMAGE,
117
+ concurrency: 1,
118
+ claimStrategy: 'exclusive',
119
+ sensors: [{ query: { type: 'review:approved' }, pollInterval: 2000 }],
120
+ },
121
+ ],
122
+ });
123
+ console.log(` deployed ${deployResult.colonies.length} colonies:`);
124
+ for (const c of deployResult.colonies) {
125
+ console.log(` + ${c.name} (zone: ${c.zoneId})`);
126
+ }
127
+ // 3. Wait for all zones to reach running state
128
+ process.stdout.write('\n waiting for containers');
129
+ const zones = await waitForZones(projectId, 3);
130
+ console.log(` done!`);
131
+ for (const z of zones) {
132
+ console.log(` ${z.colony}: ${z.state} (uptime: ${z.uptimeSeconds}s)`);
133
+ }
134
+ // 4. Connect to signal server for dashboard + seeding
135
+ const env = new RemoteEnvironment({
136
+ url: SIGNAL_SERVER,
137
+ apiKey: ADMIN_KEY,
138
+ project: projectId,
139
+ name: 'dashboard',
140
+ connectTimeout: 5_000,
141
+ });
142
+ await env.connect();
143
+ // 5. Start local dashboard (connects to same signal server for event relay)
144
+ // Define local "ghost" colonies for the dashboard to track names
145
+ // (these don't actually run — the real colonies are in Docker)
146
+ const ghostShaper = colony('shaper').in(env)
147
+ .sense('task:ready', { unclaimed: true })
148
+ .do('shape', async (s, ctx) => {
149
+ ctx.log(`Shaping: ${s.payload.name}`);
150
+ const artifact = await simulateShaping(s.payload);
151
+ await ctx.deposit('artifact:shaped', artifact, { causedBy: [s.id], tags: ['needs-review'] });
152
+ await ctx.withdraw(s.id);
153
+ })
154
+ .concurrency(2).claim('lease', 30_000).poll(1500).build();
155
+ const ghostCritic = colony('critic').in(env)
156
+ .sense('artifact:shaped', { unclaimed: true })
157
+ .do('review', async (s, ctx) => {
158
+ ctx.log(`Reviewing: ${s.payload.task}`);
159
+ const review = await simulateReview(s.payload);
160
+ if (review.approved) {
161
+ await ctx.deposit('review:approved', { artifact: s.payload, feedback: review.feedback }, { causedBy: [s.id], tags: ['ready-to-merge'] });
162
+ }
163
+ else {
164
+ await ctx.deposit('review:rejected', { artifact: s.payload, feedback: review.feedback }, { causedBy: [s.id], tags: ['needs-rework'], ttl: 60_000 });
165
+ }
166
+ await ctx.withdraw(s.id);
167
+ })
168
+ .concurrency(2).claim('lease', 30_000).poll(1500).build();
169
+ const ghostKeeper = colony('keeper').in(env)
170
+ .sense('review:approved', { unclaimed: true })
171
+ .do('merge', async (s, ctx) => {
172
+ const artifact = s.payload.artifact ?? {};
173
+ ctx.log(`Merging: ${artifact.task}`);
174
+ const result = await simulateMerge(artifact);
175
+ await ctx.deposit('task:complete', result, { causedBy: [s.id], tags: ['complete'] });
176
+ await ctx.withdraw(s.id);
177
+ })
178
+ .concurrency(1).claim('exclusive').poll(1500).build();
179
+ await startDevServer({
180
+ environment: env,
181
+ colonies: [ghostShaper, ghostCritic, ghostKeeper],
182
+ dashboard: { port: DASHBOARD_PORT, open: true },
183
+ }, { port: DASHBOARD_PORT, open: true });
184
+ // 6. Seed tasks
185
+ console.log('\n seeding tasks...\n');
186
+ await sleep(2000);
187
+ const tasks = [
188
+ { name: 'auth-middleware', priority: 'high', description: 'Add JWT authentication' },
189
+ { name: 'rate-limiter', priority: 'medium', description: 'API rate limiting' },
190
+ { name: 'health-check', priority: 'low', description: 'Add /health endpoint' },
191
+ { name: 'error-handler', priority: 'high', description: 'Global error handling' },
192
+ { name: 'request-logger', priority: 'medium', description: 'Structured logging' },
193
+ ];
194
+ for (const task of tasks) {
195
+ await env.deposit({
196
+ type: 'task:ready',
197
+ payload: task,
198
+ meta: { deposited_by: 'seed', tags: [task.priority] },
199
+ });
200
+ console.log(` seeded: task:ready "${task.name}"`);
201
+ }
202
+ console.log(`\n dashboard: http://localhost:${DASHBOARD_PORT}`);
203
+ console.log(' colonies are running in Docker containers');
204
+ console.log(' signals flow: seed -> shaper(container) -> critic(container) -> keeper(container)');
205
+ console.log(' press Ctrl+C to stop\n');
206
+ // Graceful shutdown: teardown zones on exit
207
+ const shutdown = async () => {
208
+ console.log('\n tearing down...');
209
+ try {
210
+ const zoneList = await api('GET', `/v1/projects/${projectId}/zones`);
211
+ for (const z of zoneList) {
212
+ if (z.state !== 'destroyed' && z.state !== 'destroying') {
213
+ await api('DELETE', `/v1/projects/${projectId}/colonies/${z.colony}`);
214
+ console.log(` destroyed: ${z.colony}`);
215
+ }
216
+ }
217
+ }
218
+ catch (err) {
219
+ console.error(` teardown error: ${err.message}`);
220
+ }
221
+ };
222
+ process.on('SIGINT', async () => {
223
+ await shutdown();
224
+ process.exit(0);
225
+ });
226
+ process.on('SIGTERM', async () => {
227
+ await shutdown();
228
+ process.exit(0);
229
+ });
230
+ }
231
+ main().catch((err) => {
232
+ console.error(err);
233
+ process.exit(1);
234
+ });
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../examples/docker-pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { GitHubEnvironment } from '../../src/environments/github/index.js';
2
+ declare const _default: {
3
+ environment: GitHubEnvironment;
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/github-colony/mandible.config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;;;;;;;;;AAkE3E,wBAIE"}
@@ -0,0 +1,63 @@
1
+ // PURPOSE: Dashboard config for GitHub colony — Golem tablets as stigmergy signals
2
+ // PURPOSE: Run: GITHUB_TOKEN=ghp_... npx tsx src/cli/index.ts dev examples/github-colony/mandible.config.ts
3
+ import { GitHubEnvironment } from '../../src/environments/github/index.js';
4
+ import { colony } from '../../src/dsl/index.js';
5
+ // ----------------------------------------------------------
6
+ // Config from environment variables
7
+ // ----------------------------------------------------------
8
+ const OWNER = process.env.GITHUB_OWNER ?? 'your-org';
9
+ const REPO = process.env.GITHUB_REPO ?? 'your-repo';
10
+ const POLL_INTERVAL = 30_000;
11
+ if (!process.env.GITHUB_TOKEN) {
12
+ console.error('\n GITHUB_TOKEN is required.');
13
+ console.error(' Usage: GITHUB_TOKEN=ghp_... npx tsx src/cli/index.ts dev examples/github-colony/mandible.config.ts\n');
14
+ process.exit(1);
15
+ }
16
+ // ----------------------------------------------------------
17
+ // Environment — GitHub IS the stigmergy substrate
18
+ // ----------------------------------------------------------
19
+ const env = new GitHubEnvironment({
20
+ owner: OWNER,
21
+ repo: REPO,
22
+ pollInterval: POLL_INTERVAL,
23
+ labels: ['golem'],
24
+ allowWithdraw: false,
25
+ decayRate: 0.001,
26
+ });
27
+ // ----------------------------------------------------------
28
+ // Colonies
29
+ // ----------------------------------------------------------
30
+ // Observer colony — senses golem tablets, logs them
31
+ // In a real setup this would be replaced with a triage/planning colony
32
+ const observer = colony('golem')
33
+ .in(env)
34
+ .sense('golem:*', { minConcentration: 0.05 })
35
+ .do('log-tablet', async (signal, ctx) => {
36
+ const payload = signal.payload;
37
+ ctx.log(`[${signal.meta.concentration.toFixed(2)}] #${payload.number} ${payload.title}`);
38
+ })
39
+ .concurrency(1)
40
+ .claim('none')
41
+ .poll(POLL_INTERVAL)
42
+ .build();
43
+ // Watcher colony — senses all issue types for dashboard visibility
44
+ const watcher = colony('issue-watcher')
45
+ .in(env)
46
+ .sense('issue:*', { minConcentration: 0.05 })
47
+ .do('log-issue', async (signal, ctx) => {
48
+ const payload = signal.payload;
49
+ ctx.log(`[${signal.meta.concentration.toFixed(2)}] #${payload.number} ${payload.title}`);
50
+ })
51
+ .concurrency(1)
52
+ .claim('none')
53
+ .poll(POLL_INTERVAL)
54
+ .build();
55
+ // ----------------------------------------------------------
56
+ // Export config for mandible dev
57
+ // ----------------------------------------------------------
58
+ export default {
59
+ environment: env,
60
+ colonies: [observer, watcher],
61
+ dashboard: { port: 4040, open: true },
62
+ };
63
+ //# sourceMappingURL=mandible.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandible.config.js","sourceRoot":"","sources":["../../../examples/github-colony/mandible.config.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,4GAA4G;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,6DAA6D;AAC7D,oCAAoC;AACpC,6DAA6D;AAE7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC;AACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC;AACpD,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,wGAAwG,CAAC,CAAC;IACxH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,6DAA6D;AAC7D,kDAAkD;AAClD,6DAA6D;AAE7D,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC;IAChC,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,aAAa;IAC3B,MAAM,EAAE,CAAC,OAAO,CAAC;IACjB,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,KAAK;CACjB,CAAC,CAAC;AAEH,6DAA6D;AAC7D,WAAW;AACX,6DAA6D;AAE7D,oDAAoD;AACpD,uEAAuE;AACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;KAC7B,EAAE,CAAC,GAAG,CAAC;KACP,KAAK,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;KAC5C,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAc,EAAE,GAAkB,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAkC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3F,CAAC,CAAC;KACD,WAAW,CAAC,CAAC,CAAC;KACd,KAAK,CAAC,MAAM,CAAC;KACb,IAAI,CAAC,aAAa,CAAC;KACnB,KAAK,EAAE,CAAC;AAEX,mEAAmE;AACnE,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;KACpC,EAAE,CAAC,GAAG,CAAC;KACP,KAAK,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;KAC5C,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,MAAc,EAAE,GAAkB,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAkC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3F,CAAC,CAAC;KACD,WAAW,CAAC,CAAC,CAAC;KACd,KAAK,CAAC,MAAM,CAAC;KACb,IAAI,CAAC,aAAa,CAAC;KACnB,KAAK,EAAE,CAAC;AAEX,6DAA6D;AAC7D,iCAAiC;AACjC,6DAA6D;AAE7D,eAAe;IACb,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;CACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../examples/remote-pipeline/index.ts"],"names":[],"mappings":""}