@mandible-ai/mandible 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -44
- package/dist/examples/code-pipeline/colonies.d.ts +10 -0
- package/dist/examples/code-pipeline/colonies.d.ts.map +1 -0
- package/dist/examples/code-pipeline/colonies.js +112 -0
- package/dist/examples/code-pipeline/colonies.js.map +1 -0
- package/dist/examples/code-pipeline/docker.d.ts +3 -0
- package/dist/examples/code-pipeline/docker.d.ts.map +1 -0
- package/dist/examples/code-pipeline/docker.js +63 -0
- package/dist/examples/code-pipeline/docker.js.map +1 -0
- package/dist/examples/code-pipeline/index.js +44 -228
- package/dist/examples/code-pipeline/index.js.map +1 -1
- package/dist/examples/github-colony/mandible.config.d.ts +1 -10
- package/dist/examples/github-colony/mandible.config.d.ts.map +1 -1
- package/dist/examples/github-colony/mandible.config.js +16 -24
- package/dist/examples/github-colony/mandible.config.js.map +1 -1
- package/dist/examples/repo-maintenance/fixer.d.ts +11 -4
- package/dist/examples/repo-maintenance/fixer.d.ts.map +1 -1
- package/dist/examples/repo-maintenance/fixer.js +130 -123
- package/dist/examples/repo-maintenance/fixer.js.map +1 -1
- package/dist/examples/repo-maintenance/mandible.config.d.ts +1 -10
- package/dist/examples/repo-maintenance/mandible.config.d.ts.map +1 -1
- package/dist/examples/repo-maintenance/mandible.config.js +14 -14
- package/dist/examples/repo-maintenance/mandible.config.js.map +1 -1
- package/dist/examples/repo-maintenance/scout.d.ts +11 -4
- package/dist/examples/repo-maintenance/scout.d.ts.map +1 -1
- package/dist/examples/repo-maintenance/scout.js +102 -95
- package/dist/examples/repo-maintenance/scout.js.map +1 -1
- package/dist/examples/repo-maintenance/seed.js +19 -37
- package/dist/examples/repo-maintenance/seed.js.map +1 -1
- package/package.json +2 -7
|
@@ -1,108 +1,115 @@
|
|
|
1
1
|
// PURPOSE: Scout colony — scans a repository for issues using a Claude agent.
|
|
2
2
|
// PURPOSE: Deposits one `issue:detected` signal per issue found, plus a `scan:completed` summary.
|
|
3
|
-
import { colony } from '../../src/dsl/builder.js';
|
|
4
3
|
import { withClaudeCode } from '../../src/providers/claude-code.js';
|
|
5
4
|
// ----------------------------------------------------------
|
|
6
|
-
// Scout colony
|
|
5
|
+
// Scout colony configurator
|
|
7
6
|
// ----------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Returns a colony configurator for use with the mandible() DSL.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* await mandible('repo-maintenance')
|
|
12
|
+
* .environment(env)
|
|
13
|
+
* .colony('scout', configureScout(repoRoot))
|
|
14
|
+
* .start();
|
|
15
|
+
*/
|
|
16
|
+
export function configureScout(repoRoot, options = {}) {
|
|
17
|
+
const { senseTypes = 'scan:trigger', model = 'claude-sonnet-4-5-20250929', maxBudgetUsd = 0.50, maxTurns = 50, allowedTools = ['Read', 'Glob', 'Grep', 'Bash'], disallowedTools = ['Edit', 'Write'], bedrock, } = options;
|
|
10
18
|
const types = Array.isArray(senseTypes) ? senseTypes : [senseTypes];
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
'',
|
|
22
|
-
'Categories to check:',
|
|
23
|
-
'- dependency: outdated or vulnerable dependencies',
|
|
24
|
-
'- dead-code: unused exports, unreachable code, unused files',
|
|
25
|
-
'- test-coverage: untested code paths, missing edge cases',
|
|
26
|
-
'- security: potential vulnerabilities (injection, secrets, etc.)',
|
|
27
|
-
'- style: inconsistent formatting, naming, or patterns',
|
|
28
|
-
'- stale-todo: TODO/FIXME/HACK comments that should be addressed',
|
|
29
|
-
'',
|
|
30
|
-
'For each issue found, include:',
|
|
31
|
-
'- category (one of the above)',
|
|
32
|
-
'- severity: low, medium, high, or critical',
|
|
33
|
-
'- title: short one-line summary',
|
|
34
|
-
'- description: what the issue is and why it matters',
|
|
35
|
-
'- files: which files are affected',
|
|
36
|
-
'- suggested_fix: optional fix suggestion',
|
|
37
|
-
'',
|
|
38
|
-
'IMPORTANT: Output your findings as a JSON array inside a ```json code block.',
|
|
39
|
-
'Each element must match the schema above. Example:',
|
|
40
|
-
'```json',
|
|
41
|
-
'[',
|
|
42
|
-
' {',
|
|
43
|
-
' "category": "stale-todo",',
|
|
44
|
-
' "severity": "low",',
|
|
45
|
-
' "title": "Stale TODO in auth.ts",',
|
|
46
|
-
' "description": "TODO comment from 6 months ago about refactoring auth flow",',
|
|
47
|
-
' "files": ["src/auth.ts"],',
|
|
48
|
-
' "suggested_fix": "Either implement the refactor or remove the TODO"',
|
|
49
|
-
' }',
|
|
50
|
-
']',
|
|
51
|
-
'```',
|
|
52
|
-
'',
|
|
53
|
-
'If no issues are found, output an empty array: ```json\n[]\n```',
|
|
54
|
-
].join('\n'),
|
|
55
|
-
prompt: (signal) => {
|
|
56
|
-
const p = signal.payload;
|
|
57
|
-
const scope = p.scope ?? 'full';
|
|
58
|
-
return [
|
|
59
|
-
`## Repository Scan Request`,
|
|
19
|
+
return (c) => {
|
|
20
|
+
for (const t of types) {
|
|
21
|
+
c = c.sense(t, { unclaimed: true });
|
|
22
|
+
}
|
|
23
|
+
return c
|
|
24
|
+
.do('scan-repo', withClaudeCode({
|
|
25
|
+
model,
|
|
26
|
+
systemPrompt: [
|
|
27
|
+
'You are a Scout agent in a repo-maintenance colony.',
|
|
28
|
+
'Your job is to scan a repository and identify issues.',
|
|
60
29
|
'',
|
|
61
|
-
|
|
62
|
-
|
|
30
|
+
'Categories to check:',
|
|
31
|
+
'- dependency: outdated or vulnerable dependencies',
|
|
32
|
+
'- dead-code: unused exports, unreachable code, unused files',
|
|
33
|
+
'- test-coverage: untested code paths, missing edge cases',
|
|
34
|
+
'- security: potential vulnerabilities (injection, secrets, etc.)',
|
|
35
|
+
'- style: inconsistent formatting, naming, or patterns',
|
|
36
|
+
'- stale-todo: TODO/FIXME/HACK comments that should be addressed',
|
|
63
37
|
'',
|
|
64
|
-
'
|
|
65
|
-
'
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
38
|
+
'For each issue found, include:',
|
|
39
|
+
'- category (one of the above)',
|
|
40
|
+
'- severity: low, medium, high, or critical',
|
|
41
|
+
'- title: short one-line summary',
|
|
42
|
+
'- description: what the issue is and why it matters',
|
|
43
|
+
'- files: which files are affected',
|
|
44
|
+
'- suggested_fix: optional fix suggestion',
|
|
45
|
+
'',
|
|
46
|
+
'IMPORTANT: Output your findings as a JSON array inside a ```json code block.',
|
|
47
|
+
'Each element must match the schema above. Example:',
|
|
48
|
+
'```json',
|
|
49
|
+
'[',
|
|
50
|
+
' {',
|
|
51
|
+
' "category": "stale-todo",',
|
|
52
|
+
' "severity": "low",',
|
|
53
|
+
' "title": "Stale TODO in auth.ts",',
|
|
54
|
+
' "description": "TODO comment from 6 months ago about refactoring auth flow",',
|
|
55
|
+
' "files": ["src/auth.ts"],',
|
|
56
|
+
' "suggested_fix": "Either implement the refactor or remove the TODO"',
|
|
57
|
+
' }',
|
|
58
|
+
']',
|
|
59
|
+
'```',
|
|
60
|
+
'',
|
|
61
|
+
'If no issues are found, output an empty array: ```json\n[]\n```',
|
|
62
|
+
].join('\n'),
|
|
63
|
+
prompt: (signal) => {
|
|
64
|
+
const p = signal.payload;
|
|
65
|
+
const scope = p.scope ?? 'full';
|
|
66
|
+
return [
|
|
67
|
+
`## Repository Scan Request`,
|
|
68
|
+
'',
|
|
69
|
+
`**Scope:** ${scope}`,
|
|
70
|
+
`**Triggered by:** ${p.triggered_by ?? 'manual'}`,
|
|
71
|
+
'',
|
|
72
|
+
'Scan this repository for issues across all categories.',
|
|
73
|
+
'Focus on actionable findings — skip minor style nitpicks unless they indicate a pattern.',
|
|
74
|
+
'Use the Glob, Grep, and Read tools to explore the codebase.',
|
|
75
|
+
'Do NOT modify any files.',
|
|
76
|
+
].join('\n');
|
|
77
|
+
},
|
|
78
|
+
allowedTools,
|
|
79
|
+
disallowedTools,
|
|
80
|
+
workingDirectory: repoRoot,
|
|
81
|
+
maxBudgetUsd,
|
|
82
|
+
maxTurns,
|
|
83
|
+
bedrock,
|
|
84
|
+
output: (result, signal) => {
|
|
85
|
+
const issues = parseScoutOutput(result.text);
|
|
86
|
+
const deposits = [];
|
|
87
|
+
for (const issue of issues) {
|
|
88
|
+
deposits.push({
|
|
89
|
+
type: 'issue:detected',
|
|
90
|
+
payload: issue,
|
|
91
|
+
tags: [issue.category, issue.severity],
|
|
92
|
+
ttl: 60 * 60_000, // 60 min — survive long enough for fixer to work the backlog
|
|
93
|
+
});
|
|
94
|
+
}
|
|
80
95
|
deposits.push({
|
|
81
|
-
type: '
|
|
82
|
-
payload:
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
type: 'scan:completed',
|
|
97
|
+
payload: {
|
|
98
|
+
scope: signal.payload.scope ?? 'full',
|
|
99
|
+
issueCount: issues.length,
|
|
100
|
+
costUsd: result.costUsd,
|
|
101
|
+
durationMs: result.durationMs,
|
|
102
|
+
},
|
|
103
|
+
tags: ['summary'],
|
|
85
104
|
});
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
},
|
|
95
|
-
tags: ['summary'],
|
|
96
|
-
});
|
|
97
|
-
return deposits;
|
|
98
|
-
},
|
|
99
|
-
autoWithdraw: true,
|
|
100
|
-
}))
|
|
101
|
-
.concurrency(1)
|
|
102
|
-
.claim('none')
|
|
103
|
-
.poll(3000)
|
|
104
|
-
.build();
|
|
105
|
-
return def;
|
|
105
|
+
return deposits;
|
|
106
|
+
},
|
|
107
|
+
autoWithdraw: true,
|
|
108
|
+
}))
|
|
109
|
+
.concurrency(1)
|
|
110
|
+
.claim('none')
|
|
111
|
+
.poll(3000);
|
|
112
|
+
};
|
|
106
113
|
}
|
|
107
114
|
// ----------------------------------------------------------
|
|
108
115
|
// Output parser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scout.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/scout.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kGAAkG;
|
|
1
|
+
{"version":3,"file":"scout.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/scout.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// PURPOSE: Usage: npx tsx examples/repo-maintenance/seed.ts [/path/to/repo] [--fix]
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import { rm, mkdir } from 'node:fs/promises';
|
|
6
|
+
import { mandible } from '../../src/dsl/mandible.js';
|
|
6
7
|
import { FilesystemEnvironment } from '../../src/environments/filesystem/index.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { createFixerColony } from './fixer.js';
|
|
8
|
+
import { configureScout } from './scout.js';
|
|
9
|
+
import { configureFixer } from './fixer.js';
|
|
10
10
|
const ENV_ROOT = resolve('/tmp/mandible-repo-maintenance');
|
|
11
11
|
const args = process.argv.slice(2);
|
|
12
12
|
const FIX_MODE = args.includes('--fix');
|
|
@@ -22,18 +22,15 @@ async function main() {
|
|
|
22
22
|
console.log(` Fix mode: ${FIX_MODE ? 'ON' : 'OFF (use --fix to enable)'}`);
|
|
23
23
|
console.log(`${'─'.repeat(50)}\n`);
|
|
24
24
|
const env = new FilesystemEnvironment({ root: ENV_ROOT, name: 'repo-maintenance' });
|
|
25
|
-
// 2.
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
30
|
-
let fixerRuntime;
|
|
25
|
+
// 2. Build and start colonies via mandible DSL
|
|
26
|
+
const builder = mandible('repo-maintenance')
|
|
27
|
+
.environment(env)
|
|
28
|
+
.colony('scout', configureScout(TARGET_REPO));
|
|
31
29
|
if (FIX_MODE) {
|
|
32
|
-
|
|
33
|
-
fixerRuntime = createRuntime(fixerDef, {
|
|
34
|
-
decayPolicy: { rate: 0.001, interval: 30_000 },
|
|
35
|
-
});
|
|
30
|
+
builder.colony('fixer', configureFixer(TARGET_REPO));
|
|
36
31
|
}
|
|
32
|
+
const host = await builder.start();
|
|
33
|
+
console.log(`Started ${host.colonies.length} colony(s) (id: ${host.metadata.id})\n`);
|
|
37
34
|
// 3. Deposit scan trigger
|
|
38
35
|
console.log('Depositing scan:trigger signal...');
|
|
39
36
|
const trigger = await env.deposit({
|
|
@@ -45,15 +42,7 @@ async function main() {
|
|
|
45
42
|
meta: { deposited_by: 'seed' },
|
|
46
43
|
});
|
|
47
44
|
console.log(` -> ${trigger.type} (${trigger.id})\n`);
|
|
48
|
-
// 4.
|
|
49
|
-
console.log('Starting Scout colony...');
|
|
50
|
-
await scoutRuntime.start();
|
|
51
|
-
if (fixerRuntime) {
|
|
52
|
-
console.log('Starting Fixer colony...');
|
|
53
|
-
await fixerRuntime.start();
|
|
54
|
-
}
|
|
55
|
-
console.log('');
|
|
56
|
-
// 5. Wait for scan to complete
|
|
45
|
+
// 4. Wait for scan to complete
|
|
57
46
|
const maxWaitMs = 5 * 60_000; // 5 minutes max
|
|
58
47
|
const pollMs = 2_000;
|
|
59
48
|
const deadline = Date.now() + maxWaitMs;
|
|
@@ -74,7 +63,7 @@ async function main() {
|
|
|
74
63
|
}
|
|
75
64
|
await sleep(pollMs);
|
|
76
65
|
}
|
|
77
|
-
//
|
|
66
|
+
// 5. Report results
|
|
78
67
|
console.log('\n' + '='.repeat(50));
|
|
79
68
|
console.log(' Results');
|
|
80
69
|
console.log('='.repeat(50) + '\n');
|
|
@@ -103,8 +92,8 @@ async function main() {
|
|
|
103
92
|
console.log(` Duration: ${Number(summary.durationMs ?? 0)}ms`);
|
|
104
93
|
console.log(` Issues found: ${summary.issueCount}`);
|
|
105
94
|
}
|
|
106
|
-
//
|
|
107
|
-
if (
|
|
95
|
+
// 5b. If fix mode, wait for fixes to complete
|
|
96
|
+
if (FIX_MODE) {
|
|
108
97
|
const issueCount = issues.length;
|
|
109
98
|
if (issueCount > 0) {
|
|
110
99
|
console.log(`\nWaiting for Fixer colony to process ${issueCount} issue(s)...`);
|
|
@@ -143,20 +132,13 @@ async function main() {
|
|
|
143
132
|
console.log(` Proposed: ${proposed.length}, Failed: ${failed.length}`);
|
|
144
133
|
}
|
|
145
134
|
}
|
|
146
|
-
|
|
147
|
-
console.log(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (fixerRuntime) {
|
|
151
|
-
console.log(`\n Fixer runtime stats:`);
|
|
152
|
-
console.log(` Signals processed: ${fixerRuntime.stats.signalsProcessed}`);
|
|
153
|
-
console.log(` Signals deposited: ${fixerRuntime.stats.signalsDeposited}`);
|
|
154
|
-
console.log(` Errors: ${fixerRuntime.stats.errors}`);
|
|
135
|
+
// 6. Report colony status from host metadata
|
|
136
|
+
console.log('\n Colony status:');
|
|
137
|
+
for (const col of host.colonies) {
|
|
138
|
+
console.log(` ${col.name}: ${col.state}`);
|
|
155
139
|
}
|
|
156
140
|
// 7. Stop
|
|
157
|
-
await
|
|
158
|
-
if (fixerRuntime)
|
|
159
|
-
await fixerRuntime.stop();
|
|
141
|
+
await host.stop();
|
|
160
142
|
console.log('\nDone.\n');
|
|
161
143
|
}
|
|
162
144
|
function sleep(ms) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/seed.ts"],"names":[],"mappings":";AACA,mGAAmG;AACnG,oFAAoF;AAEpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../examples/repo-maintenance/seed.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mandible-ai/mandible",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Universal stigmergy framework for autonomous agent coordination — like ant colonies using pheromone trails",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -31,11 +31,6 @@
|
|
|
31
31
|
"import": "./dist/src/cloud/index.js",
|
|
32
32
|
"default": "./dist/src/cloud/index.js"
|
|
33
33
|
},
|
|
34
|
-
"./environments/remote": {
|
|
35
|
-
"types": "./dist/src/environments/remote/index.d.ts",
|
|
36
|
-
"import": "./dist/src/environments/remote/index.js",
|
|
37
|
-
"default": "./dist/src/environments/remote/index.js"
|
|
38
|
-
},
|
|
39
34
|
"./hosts": {
|
|
40
35
|
"types": "./dist/src/hosts/index.d.ts",
|
|
41
36
|
"import": "./dist/src/hosts/index.js",
|
|
@@ -73,7 +68,7 @@
|
|
|
73
68
|
"url": "git+https://github.com/mandible-ai/mandible.git"
|
|
74
69
|
},
|
|
75
70
|
"scripts": {
|
|
76
|
-
"build": "tsc",
|
|
71
|
+
"build": "tsc && cp src/cli/dashboard.html dist/src/cli/dashboard.html",
|
|
77
72
|
"dev": "tsx watch examples/code-pipeline/index.ts",
|
|
78
73
|
"demo": "tsx examples/code-pipeline/index.ts",
|
|
79
74
|
"test": "vitest",
|