@mandible-ai/mandible 0.3.8 → 0.3.10

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 (49) hide show
  1. package/dist/src/environments/network/index.d.ts +61 -0
  2. package/dist/src/environments/network/index.d.ts.map +1 -0
  3. package/dist/src/environments/network/index.js +317 -0
  4. package/dist/src/environments/network/index.js.map +1 -0
  5. package/dist/src/hosts/docker.d.ts +5 -0
  6. package/dist/src/hosts/docker.d.ts.map +1 -1
  7. package/dist/src/hosts/docker.js +37 -0
  8. package/dist/src/hosts/docker.js.map +1 -1
  9. package/dist/src/index.d.ts +2 -0
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +1 -0
  12. package/dist/src/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/examples/code-pipeline/colonies.d.ts +0 -10
  15. package/dist/examples/code-pipeline/colonies.d.ts.map +0 -1
  16. package/dist/examples/code-pipeline/colonies.js +0 -112
  17. package/dist/examples/code-pipeline/colonies.js.map +0 -1
  18. package/dist/examples/code-pipeline/docker.d.ts +0 -3
  19. package/dist/examples/code-pipeline/docker.d.ts.map +0 -1
  20. package/dist/examples/code-pipeline/docker.js +0 -63
  21. package/dist/examples/code-pipeline/docker.js.map +0 -1
  22. package/dist/examples/code-pipeline/index.d.ts +0 -3
  23. package/dist/examples/code-pipeline/index.d.ts.map +0 -1
  24. package/dist/examples/code-pipeline/index.js +0 -45
  25. package/dist/examples/code-pipeline/index.js.map +0 -1
  26. package/dist/examples/code-pipeline/with-providers.d.ts +0 -3
  27. package/dist/examples/code-pipeline/with-providers.d.ts.map +0 -1
  28. package/dist/examples/code-pipeline/with-providers.js +0 -190
  29. package/dist/examples/code-pipeline/with-providers.js.map +0 -1
  30. package/dist/examples/github-colony/mandible.config.d.ts +0 -2
  31. package/dist/examples/github-colony/mandible.config.d.ts.map +0 -1
  32. package/dist/examples/github-colony/mandible.config.js +0 -55
  33. package/dist/examples/github-colony/mandible.config.js.map +0 -1
  34. package/dist/examples/repo-maintenance/fixer.d.ts +0 -87
  35. package/dist/examples/repo-maintenance/fixer.d.ts.map +0 -1
  36. package/dist/examples/repo-maintenance/fixer.js +0 -224
  37. package/dist/examples/repo-maintenance/fixer.js.map +0 -1
  38. package/dist/examples/repo-maintenance/mandible.config.d.ts +0 -2
  39. package/dist/examples/repo-maintenance/mandible.config.d.ts.map +0 -1
  40. package/dist/examples/repo-maintenance/mandible.config.js +0 -34
  41. package/dist/examples/repo-maintenance/mandible.config.js.map +0 -1
  42. package/dist/examples/repo-maintenance/scout.d.ts +0 -46
  43. package/dist/examples/repo-maintenance/scout.d.ts.map +0 -1
  44. package/dist/examples/repo-maintenance/scout.js +0 -170
  45. package/dist/examples/repo-maintenance/scout.js.map +0 -1
  46. package/dist/examples/repo-maintenance/seed.d.ts +0 -3
  47. package/dist/examples/repo-maintenance/seed.d.ts.map +0 -1
  48. package/dist/examples/repo-maintenance/seed.js +0 -151
  49. package/dist/examples/repo-maintenance/seed.js.map +0 -1
@@ -1,112 +0,0 @@
1
- // ============================================================
2
- // Shared Colony Definitions — Shaper / Critic / Keeper
3
- // ============================================================
4
- // These colonies are reusable across any host (local, docker,
5
- // cloud). They define *what* happens, not *where* it runs.
6
- //
7
- // Each colony only knows about signal types — no colony
8
- // references any other colony. Coordination emerges from
9
- // the shared signal environment.
10
- // ============================================================
11
- function sleep(ms) {
12
- return new Promise(resolve => setTimeout(resolve, ms));
13
- }
14
- async function simulateShaping(task) {
15
- await sleep(500 + Math.random() * 1500);
16
- return {
17
- code: `function ${task.name}() { return true; }`,
18
- linesChanged: Math.floor(Math.random() * 100) + 10,
19
- task: task.name,
20
- };
21
- }
22
- async function simulateReview(artifact) {
23
- await sleep(300 + Math.random() * 1000);
24
- const approved = Math.random() > 0.2;
25
- return {
26
- approved,
27
- feedback: approved
28
- ? `Code for "${artifact.task}" looks good.`
29
- : `Code for "${artifact.task}" needs error handling.`,
30
- };
31
- }
32
- async function simulateMerge(artifact) {
33
- await sleep(200 + Math.random() * 500);
34
- return { merged: true, task: artifact.task, commitHash: Math.random().toString(36).slice(2, 10) };
35
- }
36
- // Colony configurators — passed to mandible().colony(name, configure)
37
- export function shaper(c) {
38
- return c
39
- .sense('task:ready', { unclaimed: true, minConcentration: 0.1 })
40
- .do('shape-code', async (signal, ctx) => {
41
- ctx.log(`Shaping: ${signal.payload.name}`);
42
- const artifact = await simulateShaping(signal.payload);
43
- await ctx.deposit('artifact:shaped', artifact, {
44
- causedBy: [signal.id],
45
- tags: ['needs-review'],
46
- });
47
- await ctx.withdraw(signal.id);
48
- ctx.log(`Shaped "${signal.payload.name}" (${artifact.linesChanged} lines)`);
49
- })
50
- .concurrency(2)
51
- .claim('lease', 30_000)
52
- .poll(1000);
53
- }
54
- export function critic(c) {
55
- return c
56
- .sense('artifact:shaped', { unclaimed: true, minConcentration: 0.1 })
57
- .do('review-code', async (signal, ctx) => {
58
- ctx.log(`Reviewing: ${signal.payload.task}`);
59
- const review = await simulateReview(signal.payload);
60
- if (review.approved) {
61
- await ctx.deposit('review:approved', {
62
- artifact: signal.payload,
63
- feedback: review.feedback,
64
- }, {
65
- causedBy: [signal.id],
66
- tags: ['ready-to-merge'],
67
- });
68
- ctx.log(`Approved: ${review.feedback}`);
69
- }
70
- else {
71
- await ctx.deposit('review:changes-needed', {
72
- artifact: signal.payload,
73
- feedback: review.feedback,
74
- }, {
75
- causedBy: [signal.id],
76
- tags: ['needs-rework'],
77
- ttl: 60_000,
78
- });
79
- ctx.log(`Changes needed: ${review.feedback}`);
80
- }
81
- await ctx.withdraw(signal.id);
82
- })
83
- .concurrency(2)
84
- .claim('lease', 30_000)
85
- .poll(1000);
86
- }
87
- export function keeper(c) {
88
- return c
89
- .sense('review:approved', { unclaimed: true, minConcentration: 0.1 })
90
- .do('merge-artifact', async (signal, ctx) => {
91
- const artifact = signal.payload.artifact ?? {};
92
- ctx.log(`Merging: ${artifact.task}`);
93
- const result = await simulateMerge(artifact);
94
- await ctx.deposit('artifact:merged', result, {
95
- causedBy: [signal.id],
96
- tags: ['complete'],
97
- });
98
- await ctx.withdraw(signal.id);
99
- ctx.log(`Merged -> commit ${result.commitHash}`);
100
- })
101
- .concurrency(1)
102
- .claim('exclusive')
103
- .poll(1000);
104
- }
105
- export const SEED_TASKS = [
106
- { name: 'auth-middleware', priority: 'high', description: 'Add JWT authentication' },
107
- { name: 'rate-limiter', priority: 'medium', description: 'API rate limiting' },
108
- { name: 'health-check', priority: 'low', description: 'Add /health endpoint' },
109
- { name: 'error-handler', priority: 'high', description: 'Global error handling' },
110
- { name: 'request-logger', priority: 'medium', description: 'Structured logging' },
111
- ];
112
- //# sourceMappingURL=colonies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colonies.js","sourceRoot":"","sources":["../../../examples/code-pipeline/colonies.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env tsx
2
- export {};
3
- //# sourceMappingURL=docker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../examples/code-pipeline/docker.ts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env tsx
2
- // ============================================================
3
- // Code Pipeline — Docker Host
4
- // ============================================================
5
- // Same colonies as index.ts, but running as Docker containers
6
- // via the Mandible Cloud API. The colony definitions are
7
- // identical — only the host changes.
8
- //
9
- // Prerequisites:
10
- // - Mandible Cloud API running (local or remote)
11
- // - MANDIBLE_API_URL and MANDIBLE_API_KEY set
12
- //
13
- // To run:
14
- // export MANDIBLE_API_URL=http://localhost:9091
15
- // export MANDIBLE_API_KEY=your-api-key
16
- // npx tsx examples/code-pipeline/docker.ts
17
- // ============================================================
18
- import { mandible, FilesystemEnvironment, docker } from '../../src/index.js';
19
- import { shaper, critic, keeper, SEED_TASKS } from './colonies.js';
20
- const apiUrl = process.env.MANDIBLE_API_URL;
21
- const apiKey = process.env.MANDIBLE_API_KEY;
22
- if (!apiUrl || !apiKey) {
23
- console.error('Set MANDIBLE_API_URL and MANDIBLE_API_KEY');
24
- process.exit(1);
25
- }
26
- const env = new FilesystemEnvironment({ root: '/tmp/mandible-demo', name: 'code-pipeline' });
27
- // Same colonies, different host
28
- const host = await mandible('code-pipeline')
29
- .environment(env)
30
- .host(docker({
31
- apiUrl,
32
- apiKey,
33
- image: 'mandible-colony:latest',
34
- }))
35
- .colony('shaper', shaper)
36
- .colony('critic', critic)
37
- .colony('keeper', keeper)
38
- .start();
39
- const meta = host.metadata;
40
- console.log(`Started ${host.colonies.length} colonies on ${host.name} host`);
41
- console.log(`Project: ${meta.projectId}`);
42
- console.log(`Signal server: ${meta.signalServerUrl}\n`);
43
- // Seed tasks
44
- for (const task of SEED_TASKS) {
45
- await env.deposit({
46
- type: 'task:ready',
47
- payload: task,
48
- meta: { deposited_by: 'seed', tags: [task.priority] },
49
- });
50
- console.log(` seeded: task:ready "${task.name}"`);
51
- }
52
- console.log('\nColonies running in Docker containers.');
53
- console.log('Press Ctrl+C to stop.\n');
54
- // Keep alive until interrupted
55
- process.on('SIGINT', async () => {
56
- console.log('\nStopping...');
57
- await host.stop();
58
- console.log('Stopped.');
59
- process.exit(0);
60
- });
61
- // Block forever
62
- await new Promise(() => { });
63
- //# sourceMappingURL=docker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../examples/code-pipeline/docker.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAC/D,8DAA8D;AAC9D,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,iBAAiB;AACjB,mDAAmD;AACnD,gDAAgD;AAChD,EAAE;AACF,UAAU;AACV,kDAAkD;AAClD,yCAAyC;AACzC,6CAA6C;AAC7C,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAA2B,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAE5C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,GAAG,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAE7F,gCAAgC;AAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC;KACzC,WAAW,CAAC,GAAG,CAAC;KAChB,IAAI,CAAC,MAAM,CAAC;IACX,MAAM;IACN,MAAM;IACN,KAAK,EAAE,wBAAwB;CAChC,CAAC,CAAC;KACF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,KAAK,EAAE,CAAC;AAEX,MAAM,IAAI,GAAG,IAAI,CAAC,QAA8B,CAAC;AACjD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,gBAAgB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;AAC7E,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;AAExD,aAAa;AACb,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;IAC9B,MAAM,GAAG,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;KACtD,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAEvC,+BAA+B;AAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env tsx
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../examples/code-pipeline/index.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env tsx
2
- // ============================================================
3
- // Code Pipeline — Local Host
4
- // ============================================================
5
- // Runs three colonies in the current Node process using the
6
- // default local() host. Colonies coordinate through signals
7
- // in a filesystem environment.
8
- //
9
- // Shaper -> artifact:shaped
10
- // Critic -> review:approved | review:changes-needed
11
- // Keeper -> artifact:merged
12
- //
13
- // To run:
14
- // npx tsx examples/code-pipeline/index.ts
15
- // ============================================================
16
- import { resolve } from 'node:path';
17
- import { rm, mkdir } from 'node:fs/promises';
18
- import { mandible, FilesystemEnvironment } from '../../src/index.js';
19
- import { shaper, critic, keeper, SEED_TASKS } from './colonies.js';
20
- const ENV_ROOT = resolve('/tmp/mandible-demo');
21
- // Clean slate
22
- await rm(ENV_ROOT, { recursive: true, force: true });
23
- await mkdir(ENV_ROOT, { recursive: true });
24
- const env = new FilesystemEnvironment({ root: ENV_ROOT, name: 'code-pipeline' });
25
- // Start colonies on the local host (default when .host() is omitted)
26
- const host = await mandible('code-pipeline')
27
- .environment(env)
28
- .colony('shaper', shaper)
29
- .colony('critic', critic)
30
- .colony('keeper', keeper)
31
- .start();
32
- console.log(`Started ${host.colonies.length} colonies on ${host.name} host`);
33
- console.log(`Environment: ${ENV_ROOT}\n`);
34
- // Seed tasks into the environment
35
- for (const task of SEED_TASKS) {
36
- await env.deposit({
37
- type: 'task:ready',
38
- payload: task,
39
- meta: { deposited_by: 'seed', tags: [task.priority] },
40
- });
41
- console.log(` seeded: task:ready "${task.name}"`);
42
- }
43
- console.log('\nColonies are self-organizing. Watch the dashboard.\n');
44
- await host.dashboard({ port: 4040 });
45
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../examples/code-pipeline/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D;AAC/D,4DAA4D;AAC5D,4DAA4D;AAC5D,+BAA+B;AAC/B,EAAE;AACF,+BAA+B;AAC/B,uDAAuD;AACvD,+BAA+B;AAC/B,EAAE;AACF,UAAU;AACV,4CAA4C;AAC5C,+DAA+D;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE/C,cAAc;AACd,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,eAAe,EAAE,CAAC,CAAC;AAEjF,qEAAqE;AACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC;KACzC,WAAW,CAAC,GAAG,CAAC;KAChB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;KACxB,KAAK,EAAE,CAAC;AAEX,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,gBAAgB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;AAC7E,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,IAAI,CAAC,CAAC;AAE1C,kCAAkC;AAClC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;IAC9B,MAAM,GAAG,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;KACtD,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AAEtE,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env tsx
2
- export {};
3
- //# sourceMappingURL=with-providers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-providers.d.ts","sourceRoot":"","sources":["../../../examples/code-pipeline/with-providers.ts"],"names":[],"mappings":""}
@@ -1,190 +0,0 @@
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 { mandible, FilesystemEnvironment, withClaudeCode, withStructuredOutput, withBash, assembleContext, } from '../../src/index.js';
22
- const ENV_ROOT = resolve('/tmp/stigmergy-demo-providers');
23
- const WORKSPACE = resolve('/tmp/stigmergy-workspace');
24
- // Clean slate
25
- await rm(ENV_ROOT, { recursive: true, force: true });
26
- await rm(WORKSPACE, { recursive: true, force: true });
27
- await mkdir(ENV_ROOT, { recursive: true });
28
- await mkdir(WORKSPACE, { recursive: true });
29
- const env = new FilesystemEnvironment({ root: ENV_ROOT, name: 'code-pipeline' });
30
- // ----------------------------------------------------------
31
- // Colony configurators using real providers
32
- // ----------------------------------------------------------
33
- function shaper(c) {
34
- return c
35
- .sense('task:ready', { unclaimed: true, minConcentration: 0.1 })
36
- .do('shape-code', withClaudeCode({
37
- model: 'claude-sonnet-4-5-20250929',
38
- systemPrompt: [
39
- 'You are a senior TypeScript engineer in a coding colony.',
40
- 'You receive task specifications and implement them as clean, well-typed code.',
41
- 'Create the implementation in the working directory.',
42
- 'Include basic tests. Follow existing code conventions.',
43
- 'Be concise — implement exactly what is asked, nothing more.',
44
- ].join('\n'),
45
- prompt: async (signal) => {
46
- const context = await assembleContext(signal, env, {
47
- includeLineage: true,
48
- includeRelated: ['review:changes-needed'],
49
- });
50
- return [
51
- `## Task: ${signal.payload.name}`,
52
- `**Description:** ${signal.payload.description}`,
53
- `**Priority:** ${signal.payload.priority}`,
54
- '',
55
- 'Implement this as a TypeScript module with tests.',
56
- '',
57
- context,
58
- ].join('\n');
59
- },
60
- allowedTools: ['file_edit', 'bash'],
61
- workingDirectory: (signal) => resolve(WORKSPACE, String(signal.payload.name)),
62
- output: {
63
- type: 'artifact:shaped',
64
- tags: ['needs-review'],
65
- },
66
- }))
67
- .concurrency(2)
68
- .claim('lease', 120_000)
69
- .poll(2000);
70
- }
71
- function critic(c) {
72
- return c
73
- .sense('artifact:shaped', { unclaimed: true, minConcentration: 0.1 })
74
- .do('review-code', withStructuredOutput({
75
- model: 'claude-sonnet-4-5-20250929',
76
- provider: 'anthropic',
77
- systemPrompt: [
78
- 'You are a code reviewer in a critic colony.',
79
- 'Review the code artifact and provide structured feedback.',
80
- 'Be constructive but rigorous. Focus on correctness,',
81
- 'error handling, type safety, and test coverage.',
82
- ].join('\n'),
83
- prompt: async (signal) => {
84
- const context = await assembleContext(signal, env, {
85
- includeLineage: true,
86
- lineageDepth: 2,
87
- });
88
- return [
89
- '## Code Review Request',
90
- '',
91
- `**Task:** ${signal.payload.task ?? signal.payload.text ?? 'unknown'}`,
92
- '',
93
- '### Artifact',
94
- '```',
95
- JSON.stringify(signal.payload, null, 2),
96
- '```',
97
- '',
98
- context,
99
- '',
100
- 'Review this artifact and provide your assessment.',
101
- ].join('\n');
102
- },
103
- route: (result, signal) => {
104
- if (result.approved) {
105
- return {
106
- type: 'review:approved',
107
- payload: { ...result, artifact: signal.payload },
108
- tags: ['ready-to-merge'],
109
- };
110
- }
111
- return {
112
- type: 'review:changes-needed',
113
- payload: { ...result, artifact: signal.payload },
114
- tags: ['needs-rework'],
115
- ttl: 120_000,
116
- };
117
- },
118
- }))
119
- .concurrency(2)
120
- .claim('lease', 60_000)
121
- .poll(2000);
122
- }
123
- function keeper(c) {
124
- return c
125
- .sense('review:approved', { unclaimed: true, minConcentration: 0.1 })
126
- .do('merge-artifact', withBash({
127
- command: (signal) => {
128
- const artifact = signal.payload.artifact ?? {};
129
- const task = artifact.task ?? artifact.name ?? 'unknown';
130
- return `echo "Merged artifact: ${task}" && date`;
131
- },
132
- cwd: WORKSPACE,
133
- timeout: 30_000,
134
- output: (result, signal) => {
135
- const artifact = signal.payload.artifact ?? {};
136
- if (result.exitCode === 0) {
137
- return {
138
- type: 'artifact:merged',
139
- payload: {
140
- task: artifact.task ?? artifact.name,
141
- stdout: result.stdout.trim(),
142
- durationMs: result.durationMs,
143
- },
144
- tags: ['complete'],
145
- };
146
- }
147
- return {
148
- type: 'merge:failed',
149
- payload: {
150
- task: artifact.task ?? artifact.name,
151
- stderr: result.stderr,
152
- exitCode: result.exitCode,
153
- },
154
- tags: ['needs-attention'],
155
- };
156
- },
157
- }))
158
- .concurrency(1)
159
- .claim('exclusive')
160
- .poll(2000);
161
- }
162
- // ----------------------------------------------------------
163
- // Start via mandible DSL
164
- // ----------------------------------------------------------
165
- const host = await mandible('code-pipeline-providers')
166
- .environment(env)
167
- .colony('shaper', shaper)
168
- .colony('critic', critic)
169
- .colony('keeper', keeper)
170
- .start();
171
- console.log(`Started ${host.colonies.length} colonies on ${host.name} host`);
172
- console.log(`Environment: ${ENV_ROOT}`);
173
- console.log(`Workspace: ${WORKSPACE}\n`);
174
- // Seed tasks
175
- const tasks = [
176
- { name: 'auth-middleware', priority: 'high', description: 'Add JWT authentication middleware for Express' },
177
- { name: 'rate-limiter', priority: 'medium', description: 'Implement sliding window rate limiter' },
178
- ];
179
- for (const task of tasks) {
180
- await env.deposit({
181
- type: 'task:ready',
182
- payload: task,
183
- meta: { deposited_by: 'seed', tags: [task.priority] },
184
- });
185
- console.log(` seeded: task:ready "${task.name}"`);
186
- }
187
- console.log('\nColonies self-organizing with real LLM providers.');
188
- console.log('Shaper: Claude Code SDK | Critic: Anthropic | Keeper: Bash\n');
189
- await host.dashboard({ port: 4040 });
190
- //# sourceMappingURL=with-providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-providers.js","sourceRoot":"","sources":["../../../examples/code-pipeline/with-providers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mandible.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mandible.config.d.ts","sourceRoot":"","sources":["../../../examples/github-colony/mandible.config.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- // PURPOSE: GitHub colony example — Golem tablets as stigmergy signals
2
- // PURPOSE: Run: GITHUB_TOKEN=ghp_... npx tsx examples/github-colony/mandible.config.ts
3
- import { mandible } from '../../src/dsl/mandible.js';
4
- import { GitHubEnvironment } from '../../src/environments/github/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 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
- // Start colonies via mandible DSL
29
- // ----------------------------------------------------------
30
- const host = await mandible('github-colony')
31
- .environment(env)
32
- // Observer colony — senses golem tablets, logs them
33
- .colony('golem', c => c
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
- // Watcher colony — senses all issue types for dashboard visibility
43
- .colony('issue-watcher', c => c
44
- .sense('issue:*', { minConcentration: 0.05 })
45
- .do('log-issue', async (signal, ctx) => {
46
- const payload = signal.payload;
47
- ctx.log(`[${signal.meta.concentration.toFixed(2)}] #${payload.number} ${payload.title}`);
48
- })
49
- .concurrency(1)
50
- .claim('none')
51
- .poll(POLL_INTERVAL))
52
- .start();
53
- console.log(`Started ${host.colonies.length} colonies (id: ${host.metadata.id})`);
54
- await host.dashboard({ port: 4040 });
55
- //# sourceMappingURL=mandible.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mandible.config.js","sourceRoot":"","sources":["../../../examples/github-colony/mandible.config.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,uFAAuF;AAEvF,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAG3E,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,mFAAmF,CAAC,CAAC;IACnG,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,kCAAkC;AAClC,6DAA6D;AAE7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC;KACzC,WAAW,CAAC,GAAG,CAAC;IACjB,oDAAoD;KACnD,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KACpB,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,CACrB;IACD,mEAAmE;KAClE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5B,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,CACrB;KACA,KAAK,EAAE,CAAC;AAEX,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,kBAAkB,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;AAClF,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC"}
@@ -1,87 +0,0 @@
1
- import type { BedrockConfig } from '../../src/providers/types.js';
2
- import type { ColonyBuilder } from '../../src/dsl/builder.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
- /** Model to use. Defaults to 'claude-sonnet-4-5-20250929'. */
32
- model?: string;
33
- /** Max budget per fix in USD. Defaults to 3.00. */
34
- maxBudgetUsd?: number;
35
- /** Max conversation turns. Defaults to 80. */
36
- maxTurns?: number;
37
- /** Allowed tools. Defaults to write-capable tools. */
38
- allowedTools?: string[];
39
- /** Disallowed tools. Defaults to []. */
40
- disallowedTools?: string[];
41
- /** Max concurrent fix attempts. Defaults to 2. */
42
- concurrency?: number;
43
- /** Claim lease duration in ms. Defaults to 600_000 (10 min). */
44
- claimLeaseDuration?: number;
45
- /** Route through AWS Bedrock instead of direct Anthropic API. */
46
- bedrock?: BedrockConfig;
47
- }
48
- /**
49
- * Returns a colony configurator for use with the mandible() DSL.
50
- *
51
- * @example
52
- * await mandible('repo-maintenance')
53
- * .environment(env)
54
- * .colony('fixer', configureFixer(repoRoot))
55
- * .start();
56
- */
57
- export declare function configureFixer(repoRoot: string, options?: FixerColonyOptions): (c: ColonyBuilder) => ColonyBuilder<Record<string, unknown>>;
58
- interface ParsedFixerSuccess {
59
- status: 'success';
60
- issue_title: string;
61
- branch: string;
62
- diff_summary: string;
63
- files_changed: string[];
64
- tests_passed: boolean;
65
- confidence: 'high' | 'medium' | 'low';
66
- reason?: undefined;
67
- attempted_approach?: undefined;
68
- }
69
- interface ParsedFixerFailure {
70
- status: 'failure';
71
- issue_title: string;
72
- reason: string;
73
- attempted_approach?: string;
74
- branch?: undefined;
75
- diff_summary?: undefined;
76
- files_changed?: undefined;
77
- tests_passed?: undefined;
78
- confidence?: undefined;
79
- }
80
- export type ParsedFixerOutput = ParsedFixerSuccess | ParsedFixerFailure;
81
- /**
82
- * Extracts JSON result from the agent's markdown-formatted output.
83
- * Looks for a ```json code block, parses it, and validates the shape.
84
- */
85
- export declare function parseFixerOutput(text: string): ParsedFixerOutput;
86
- export {};
87
- //# sourceMappingURL=fixer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixer.d.ts","sourceRoot":"","sources":["../../../examples/repo-maintenance/fixer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA8B,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,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,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;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,IAgBxB,GAAG,aAAa,4CA6IzB;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"}