agentic-flow 2.0.14 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +87 -0
- package/README.md +376 -186
- package/dist/.tsbuildinfo +1 -1
- package/dist/agent-booster/index.d.ts +14 -0
- package/dist/agent-booster/index.d.ts.map +1 -0
- package/dist/agent-booster/index.js +25 -0
- package/dist/agent-booster/index.js.map +1 -0
- package/dist/harness/provenance.d.ts +72 -0
- package/dist/harness/provenance.d.ts.map +1 -0
- package/dist/harness/provenance.js +92 -0
- package/dist/harness/provenance.js.map +1 -0
- package/dist/mcp/standalone-stdio.js +4 -0
- package/dist/mcp/standalone-stdio.js.map +1 -1
- package/dist/mcp/tools/harness-tools.d.ts +28 -0
- package/dist/mcp/tools/harness-tools.d.ts.map +1 -0
- package/dist/mcp/tools/harness-tools.js +90 -0
- package/dist/mcp/tools/harness-tools.js.map +1 -0
- package/dist/optimizations/configuration-tuning.d.ts +1 -1
- package/dist/repair/cli.d.ts +24 -0
- package/dist/repair/cli.d.ts.map +1 -0
- package/dist/repair/cli.js +69 -0
- package/dist/repair/cli.js.map +1 -0
- package/dist/repair/darwin-repair.d.ts +80 -0
- package/dist/repair/darwin-repair.d.ts.map +1 -0
- package/dist/repair/darwin-repair.js +81 -0
- package/dist/repair/darwin-repair.js.map +1 -0
- package/dist/router/cost-optimal-router.d.ts +89 -0
- package/dist/router/cost-optimal-router.d.ts.map +1 -0
- package/dist/router/cost-optimal-router.js +94 -0
- package/dist/router/cost-optimal-router.js.map +1 -0
- package/dist/router/router.d.ts +29 -0
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +83 -0
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +1 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/transport/quic-loader.d.ts +33 -0
- package/dist/transport/quic-loader.d.ts.map +1 -1
- package/dist/transport/quic-loader.js +95 -0
- package/dist/transport/quic-loader.js.map +1 -1
- package/package.json +17 -3
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentic-flow/agent-booster — public entrypoint for the Agent Booster API.
|
|
3
|
+
*
|
|
4
|
+
* Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at
|
|
5
|
+
* `dist/agent-booster/index.js`, which was never emitted — the booster code
|
|
6
|
+
* lives under `intelligence/` and `optimizations/`, so importing
|
|
7
|
+
* `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel
|
|
8
|
+
* is that missing entrypoint: it re-exports the booster surface and provides
|
|
9
|
+
* the documented `AgentBooster` name (docs reference
|
|
10
|
+
* `import { AgentBooster } from 'agentic-flow/agent-booster'`).
|
|
11
|
+
*/
|
|
12
|
+
export * from '../intelligence/agent-booster-enhanced.js';
|
|
13
|
+
export { EnhancedAgentBooster as AgentBooster, getEnhancedBooster as getAgentBooster, default, } from '../intelligence/agent-booster-enhanced.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-booster/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,2CAA2C,CAAC;AAa1D,OAAO,EACL,oBAAoB,IAAI,YAAY,EACpC,kBAAkB,IAAI,eAAe,EACrC,OAAO,GACR,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentic-flow/agent-booster — public entrypoint for the Agent Booster API.
|
|
3
|
+
*
|
|
4
|
+
* Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at
|
|
5
|
+
* `dist/agent-booster/index.js`, which was never emitted — the booster code
|
|
6
|
+
* lives under `intelligence/` and `optimizations/`, so importing
|
|
7
|
+
* `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel
|
|
8
|
+
* is that missing entrypoint: it re-exports the booster surface and provides
|
|
9
|
+
* the documented `AgentBooster` name (docs reference
|
|
10
|
+
* `import { AgentBooster } from 'agentic-flow/agent-booster'`).
|
|
11
|
+
*/
|
|
12
|
+
export * from '../intelligence/agent-booster-enhanced.js';
|
|
13
|
+
// Canonical public names. The booster's primary class is the enhanced
|
|
14
|
+
// implementation; expose it under the documented `AgentBooster` alias
|
|
15
|
+
// (and a matching `getAgentBooster` accessor) without breaking the
|
|
16
|
+
// existing `EnhancedAgentBooster` / `getEnhancedBooster` names above.
|
|
17
|
+
//
|
|
18
|
+
// NOTE: `optimizations/agent-booster-migration` is intentionally NOT
|
|
19
|
+
// re-exported here — it is not part of the documented `agentic-flow/
|
|
20
|
+
// agent-booster` surface and currently mixes a CommonJS `require.main`
|
|
21
|
+
// CLI guard with top-level `await`, which is invalid under this
|
|
22
|
+
// package's ESM (`"type": "module"`) and throws on import. Tracked
|
|
23
|
+
// separately from #167.
|
|
24
|
+
export { EnhancedAgentBooster as AgentBooster, getEnhancedBooster as getAgentBooster, default, } from '../intelligence/agent-booster-enhanced.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-booster/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,2CAA2C,CAAC;AAE1D,sEAAsE;AACtE,sEAAsE;AACtE,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,gEAAgE;AAChE,mEAAmE;AACnE,wBAAwB;AACxB,OAAO,EACL,oBAAoB,IAAI,YAAY,EACpC,kBAAkB,IAAI,eAAe,EACrC,OAAO,GACR,MAAM,2CAA2C,CAAC","sourcesContent":["/**\n * agentic-flow/agent-booster — public entrypoint for the Agent Booster API.\n *\n * Fixes #167: `package.json`'s `./agent-booster` subpath export pointed at\n * `dist/agent-booster/index.js`, which was never emitted — the booster code\n * lives under `intelligence/` and `optimizations/`, so importing\n * `agentic-flow/agent-booster` failed with `ERR_MODULE_NOT_FOUND`. This barrel\n * is that missing entrypoint: it re-exports the booster surface and provides\n * the documented `AgentBooster` name (docs reference\n * `import { AgentBooster } from 'agentic-flow/agent-booster'`).\n */\n\nexport * from '../intelligence/agent-booster-enhanced.js';\n\n// Canonical public names. The booster's primary class is the enhanced\n// implementation; expose it under the documented `AgentBooster` alias\n// (and a matching `getAgentBooster` accessor) without breaking the\n// existing `EnhancedAgentBooster` / `getEnhancedBooster` names above.\n//\n// NOTE: `optimizations/agent-booster-migration` is intentionally NOT\n// re-exported here — it is not part of the documented `agentic-flow/\n// agent-booster` surface and currently mixes a CommonJS `require.main`\n// CLI guard with top-level `await`, which is invalid under this\n// package's ESM (`\"type\": \"module\"`) and throws on import. Tracked\n// separately from #167.\nexport {\n EnhancedAgentBooster as AgentBooster,\n getEnhancedBooster as getAgentBooster,\n default,\n} from '../intelligence/agent-booster-enhanced.js';\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness provenance — Ed25519 witness manifest over harness/agent config files
|
|
3
|
+
* (ADR-075, Track B).
|
|
4
|
+
*
|
|
5
|
+
* Produces a tamper-evident manifest (sha256 per file) and signs it with Ed25519
|
|
6
|
+
* (Node's built-in `crypto` — no external deps), complementing the CWE-78
|
|
7
|
+
* hardening: a signed manifest lets a consumer verify that the agent/skill/policy
|
|
8
|
+
* files a harness ships are exactly the ones that were reviewed.
|
|
9
|
+
*
|
|
10
|
+
* Deterministic by construction (no wall-clock inside): the caller supplies any
|
|
11
|
+
* timestamp, and entries are sorted, so signing the same files yields the same
|
|
12
|
+
* payload.
|
|
13
|
+
*
|
|
14
|
+
* @see docs/adr/ADR-075-metaharness-harness-evolution-and-provenance.md
|
|
15
|
+
*/
|
|
16
|
+
export interface ManifestEntry {
|
|
17
|
+
/** File path as supplied (used as the stable sort/identity key). */
|
|
18
|
+
path: string;
|
|
19
|
+
/** Lowercase hex sha256 of the file contents. */
|
|
20
|
+
sha256: string;
|
|
21
|
+
}
|
|
22
|
+
export interface HarnessManifest {
|
|
23
|
+
version: 1;
|
|
24
|
+
/** Optional caller-supplied timestamp (ISO string). Part of the signed payload. */
|
|
25
|
+
createdAt?: string;
|
|
26
|
+
/** File digests, sorted by path for a canonical, reproducible payload. */
|
|
27
|
+
entries: ManifestEntry[];
|
|
28
|
+
}
|
|
29
|
+
export interface KeyPairPem {
|
|
30
|
+
publicKey: string;
|
|
31
|
+
privateKey: string;
|
|
32
|
+
}
|
|
33
|
+
/** Generate an Ed25519 keypair as PEM strings (spki/pkcs8). */
|
|
34
|
+
export declare function generateKeyPairPem(): KeyPairPem;
|
|
35
|
+
/** sha256 (hex) of a buffer. */
|
|
36
|
+
export declare function sha256Hex(data: Buffer | string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Build a canonical manifest over the given files. Entries are sorted by path so
|
|
39
|
+
* the signed payload is stable regardless of input order. `createdAt` is included
|
|
40
|
+
* verbatim if provided.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildManifest(files: string[], opts?: {
|
|
43
|
+
createdAt?: string;
|
|
44
|
+
}): HarnessManifest;
|
|
45
|
+
/** Sign a manifest with an Ed25519 private-key PEM. Returns a base64 signature. */
|
|
46
|
+
export declare function signManifest(manifest: HarnessManifest, privateKeyPem: string): string;
|
|
47
|
+
/** Verify a base64 Ed25519 signature over a manifest with a public-key PEM. */
|
|
48
|
+
export declare function verifyManifest(manifest: HarnessManifest, signatureBase64: string, publicKeyPem: string): boolean;
|
|
49
|
+
export interface SignedManifest {
|
|
50
|
+
manifest: HarnessManifest;
|
|
51
|
+
signature: string;
|
|
52
|
+
publicKey: string;
|
|
53
|
+
}
|
|
54
|
+
/** Convenience: build + sign in one step, returning a portable signed bundle. */
|
|
55
|
+
export declare function signFiles(files: string[], privateKeyPem: string, publicKeyPem: string, opts?: {
|
|
56
|
+
createdAt?: string;
|
|
57
|
+
}): SignedManifest;
|
|
58
|
+
/**
|
|
59
|
+
* Verify a signed bundle AND that the on-disk files still match the manifest
|
|
60
|
+
* digests. Returns a per-file drift report so a caller can see exactly what
|
|
61
|
+
* changed since signing.
|
|
62
|
+
*/
|
|
63
|
+
export declare function verifySignedManifest(signed: SignedManifest): {
|
|
64
|
+
signatureValid: boolean;
|
|
65
|
+
filesIntact: boolean;
|
|
66
|
+
drift: {
|
|
67
|
+
path: string;
|
|
68
|
+
expected: string;
|
|
69
|
+
actual: string | null;
|
|
70
|
+
}[];
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/harness/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,IAAI,UAAU,CAM/C;AAED,gCAAgC;AAChC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAKjG;AAYD,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAOhH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,cAAc,CAGzI;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG;IAC5D,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACpE,CAaA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness provenance — Ed25519 witness manifest over harness/agent config files
|
|
3
|
+
* (ADR-075, Track B).
|
|
4
|
+
*
|
|
5
|
+
* Produces a tamper-evident manifest (sha256 per file) and signs it with Ed25519
|
|
6
|
+
* (Node's built-in `crypto` — no external deps), complementing the CWE-78
|
|
7
|
+
* hardening: a signed manifest lets a consumer verify that the agent/skill/policy
|
|
8
|
+
* files a harness ships are exactly the ones that were reviewed.
|
|
9
|
+
*
|
|
10
|
+
* Deterministic by construction (no wall-clock inside): the caller supplies any
|
|
11
|
+
* timestamp, and entries are sorted, so signing the same files yields the same
|
|
12
|
+
* payload.
|
|
13
|
+
*
|
|
14
|
+
* @see docs/adr/ADR-075-metaharness-harness-evolution-and-provenance.md
|
|
15
|
+
*/
|
|
16
|
+
import { generateKeyPairSync, sign as cryptoSign, verify as cryptoVerify, createHash } from 'node:crypto';
|
|
17
|
+
import { readFileSync } from 'node:fs';
|
|
18
|
+
/** Generate an Ed25519 keypair as PEM strings (spki/pkcs8). */
|
|
19
|
+
export function generateKeyPairPem() {
|
|
20
|
+
const { publicKey, privateKey } = generateKeyPairSync('ed25519');
|
|
21
|
+
return {
|
|
22
|
+
publicKey: publicKey.export({ type: 'spki', format: 'pem' }).toString(),
|
|
23
|
+
privateKey: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** sha256 (hex) of a buffer. */
|
|
27
|
+
export function sha256Hex(data) {
|
|
28
|
+
return createHash('sha256').update(data).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build a canonical manifest over the given files. Entries are sorted by path so
|
|
32
|
+
* the signed payload is stable regardless of input order. `createdAt` is included
|
|
33
|
+
* verbatim if provided.
|
|
34
|
+
*/
|
|
35
|
+
export function buildManifest(files, opts = {}) {
|
|
36
|
+
const entries = files
|
|
37
|
+
.map((path) => ({ path, sha256: sha256Hex(readFileSync(path)) }))
|
|
38
|
+
.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
39
|
+
return { version: 1, ...(opts.createdAt ? { createdAt: opts.createdAt } : {}), entries };
|
|
40
|
+
}
|
|
41
|
+
/** Canonical bytes that get signed/verified — stable JSON of the manifest. */
|
|
42
|
+
function canonicalPayload(manifest) {
|
|
43
|
+
// Keys emitted in a fixed order; entries already sorted by buildManifest.
|
|
44
|
+
return JSON.stringify({
|
|
45
|
+
version: manifest.version,
|
|
46
|
+
createdAt: manifest.createdAt ?? null,
|
|
47
|
+
entries: manifest.entries.map((e) => ({ path: e.path, sha256: e.sha256 })),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** Sign a manifest with an Ed25519 private-key PEM. Returns a base64 signature. */
|
|
51
|
+
export function signManifest(manifest, privateKeyPem) {
|
|
52
|
+
const payload = Buffer.from(canonicalPayload(manifest), 'utf8');
|
|
53
|
+
// Ed25519 takes a null algorithm (the curve fixes the hash).
|
|
54
|
+
return cryptoSign(null, payload, privateKeyPem).toString('base64');
|
|
55
|
+
}
|
|
56
|
+
/** Verify a base64 Ed25519 signature over a manifest with a public-key PEM. */
|
|
57
|
+
export function verifyManifest(manifest, signatureBase64, publicKeyPem) {
|
|
58
|
+
try {
|
|
59
|
+
const payload = Buffer.from(canonicalPayload(manifest), 'utf8');
|
|
60
|
+
return cryptoVerify(null, payload, publicKeyPem, Buffer.from(signatureBase64, 'base64'));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false; // malformed signature/key → not verified
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Convenience: build + sign in one step, returning a portable signed bundle. */
|
|
67
|
+
export function signFiles(files, privateKeyPem, publicKeyPem, opts = {}) {
|
|
68
|
+
const manifest = buildManifest(files, opts);
|
|
69
|
+
return { manifest, signature: signManifest(manifest, privateKeyPem), publicKey: publicKeyPem };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Verify a signed bundle AND that the on-disk files still match the manifest
|
|
73
|
+
* digests. Returns a per-file drift report so a caller can see exactly what
|
|
74
|
+
* changed since signing.
|
|
75
|
+
*/
|
|
76
|
+
export function verifySignedManifest(signed) {
|
|
77
|
+
const signatureValid = verifyManifest(signed.manifest, signed.signature, signed.publicKey);
|
|
78
|
+
const drift = [];
|
|
79
|
+
for (const entry of signed.manifest.entries) {
|
|
80
|
+
let actual = null;
|
|
81
|
+
try {
|
|
82
|
+
actual = sha256Hex(readFileSync(entry.path));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
actual = null; // missing/unreadable
|
|
86
|
+
}
|
|
87
|
+
if (actual !== entry.sha256)
|
|
88
|
+
drift.push({ path: entry.path, expected: entry.sha256, actual });
|
|
89
|
+
}
|
|
90
|
+
return { signatureValid, filesIntact: drift.length === 0, drift };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/harness/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,mBAAmB,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,IAAI,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAsBvC,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjE,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,SAAS,CAAC,IAAqB;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe,EAAE,OAA+B,EAAE;IAC9E,MAAM,OAAO,GAAoB,KAAK;SACnC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3F,CAAC;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,QAAyB;IACjD,0EAA0E;IAC1E,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;QACrC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,QAAyB,EAAE,aAAqB;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,6DAA6D;IAC7D,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,QAAyB,EAAE,eAAuB,EAAE,YAAoB;IACrG,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,yCAAyC;IACzD,CAAC;AACH,CAAC;AAQD,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,KAAe,EAAE,aAAqB,EAAE,YAAoB,EAAE,OAA+B,EAAE;IACvH,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IAKzD,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAgE,EAAE,CAAC;IAC9E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,IAAI,CAAC,CAAC,qBAAqB;QACtC,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AACpE,CAAC","sourcesContent":["/**\n * Harness provenance — Ed25519 witness manifest over harness/agent config files\n * (ADR-075, Track B).\n *\n * Produces a tamper-evident manifest (sha256 per file) and signs it with Ed25519\n * (Node's built-in `crypto` — no external deps), complementing the CWE-78\n * hardening: a signed manifest lets a consumer verify that the agent/skill/policy\n * files a harness ships are exactly the ones that were reviewed.\n *\n * Deterministic by construction (no wall-clock inside): the caller supplies any\n * timestamp, and entries are sorted, so signing the same files yields the same\n * payload.\n *\n * @see docs/adr/ADR-075-metaharness-harness-evolution-and-provenance.md\n */\n\nimport { generateKeyPairSync, sign as cryptoSign, verify as cryptoVerify, createHash } from 'node:crypto';\nimport { readFileSync } from 'node:fs';\n\nexport interface ManifestEntry {\n /** File path as supplied (used as the stable sort/identity key). */\n path: string;\n /** Lowercase hex sha256 of the file contents. */\n sha256: string;\n}\n\nexport interface HarnessManifest {\n version: 1;\n /** Optional caller-supplied timestamp (ISO string). Part of the signed payload. */\n createdAt?: string;\n /** File digests, sorted by path for a canonical, reproducible payload. */\n entries: ManifestEntry[];\n}\n\nexport interface KeyPairPem {\n publicKey: string;\n privateKey: string;\n}\n\n/** Generate an Ed25519 keypair as PEM strings (spki/pkcs8). */\nexport function generateKeyPairPem(): KeyPairPem {\n const { publicKey, privateKey } = generateKeyPairSync('ed25519');\n return {\n publicKey: publicKey.export({ type: 'spki', format: 'pem' }).toString(),\n privateKey: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),\n };\n}\n\n/** sha256 (hex) of a buffer. */\nexport function sha256Hex(data: Buffer | string): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\n/**\n * Build a canonical manifest over the given files. Entries are sorted by path so\n * the signed payload is stable regardless of input order. `createdAt` is included\n * verbatim if provided.\n */\nexport function buildManifest(files: string[], opts: { createdAt?: string } = {}): HarnessManifest {\n const entries: ManifestEntry[] = files\n .map((path) => ({ path, sha256: sha256Hex(readFileSync(path)) }))\n .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));\n return { version: 1, ...(opts.createdAt ? { createdAt: opts.createdAt } : {}), entries };\n}\n\n/** Canonical bytes that get signed/verified — stable JSON of the manifest. */\nfunction canonicalPayload(manifest: HarnessManifest): string {\n // Keys emitted in a fixed order; entries already sorted by buildManifest.\n return JSON.stringify({\n version: manifest.version,\n createdAt: manifest.createdAt ?? null,\n entries: manifest.entries.map((e) => ({ path: e.path, sha256: e.sha256 })),\n });\n}\n\n/** Sign a manifest with an Ed25519 private-key PEM. Returns a base64 signature. */\nexport function signManifest(manifest: HarnessManifest, privateKeyPem: string): string {\n const payload = Buffer.from(canonicalPayload(manifest), 'utf8');\n // Ed25519 takes a null algorithm (the curve fixes the hash).\n return cryptoSign(null, payload, privateKeyPem).toString('base64');\n}\n\n/** Verify a base64 Ed25519 signature over a manifest with a public-key PEM. */\nexport function verifyManifest(manifest: HarnessManifest, signatureBase64: string, publicKeyPem: string): boolean {\n try {\n const payload = Buffer.from(canonicalPayload(manifest), 'utf8');\n return cryptoVerify(null, payload, publicKeyPem, Buffer.from(signatureBase64, 'base64'));\n } catch {\n return false; // malformed signature/key → not verified\n }\n}\n\nexport interface SignedManifest {\n manifest: HarnessManifest;\n signature: string; // base64\n publicKey: string; // spki PEM (the verification anchor)\n}\n\n/** Convenience: build + sign in one step, returning a portable signed bundle. */\nexport function signFiles(files: string[], privateKeyPem: string, publicKeyPem: string, opts: { createdAt?: string } = {}): SignedManifest {\n const manifest = buildManifest(files, opts);\n return { manifest, signature: signManifest(manifest, privateKeyPem), publicKey: publicKeyPem };\n}\n\n/**\n * Verify a signed bundle AND that the on-disk files still match the manifest\n * digests. Returns a per-file drift report so a caller can see exactly what\n * changed since signing.\n */\nexport function verifySignedManifest(signed: SignedManifest): {\n signatureValid: boolean;\n filesIntact: boolean;\n drift: { path: string; expected: string; actual: string | null }[];\n} {\n const signatureValid = verifyManifest(signed.manifest, signed.signature, signed.publicKey);\n const drift: { path: string; expected: string; actual: string | null }[] = [];\n for (const entry of signed.manifest.entries) {\n let actual: string | null = null;\n try {\n actual = sha256Hex(readFileSync(entry.path));\n } catch {\n actual = null; // missing/unreadable\n }\n if (actual !== entry.sha256) drift.push({ path: entry.path, expected: entry.sha256, actual });\n }\n return { signatureValid, filesIntact: drift.length === 0, drift };\n}\n"]}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { FastMCP } from 'fastmcp';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { execFileSync } from 'child_process';
|
|
7
|
+
import { registerHarnessTools } from './tools/harness-tools.js';
|
|
7
8
|
// Security: All shell-outs use execFileSync with argv arrays (shell: false) to
|
|
8
9
|
// prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce
|
|
9
10
|
// execSync with template-string interpolation here — every prior occurrence in
|
|
@@ -27,6 +28,9 @@ const server = new FastMCP({
|
|
|
27
28
|
name: 'agentic-flow',
|
|
28
29
|
version: '1.0.8'
|
|
29
30
|
});
|
|
31
|
+
// ADR-075: harness evolution/repair + provenance tools (harness_repair,
|
|
32
|
+
// harness_manifest, harness_verify).
|
|
33
|
+
registerHarnessTools(server);
|
|
30
34
|
// Tool: Run agentic-flow agent
|
|
31
35
|
server.addTool({
|
|
32
36
|
name: 'agentic_flow_agent',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-stdio.js","sourceRoot":"","sources":["../../src/mcp/standalone-stdio.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\n// Standalone agentic-flow MCP server - runs directly via stdio without spawning subprocesses\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\n\n// Security: All shell-outs use execFileSync with argv arrays (shell: false) to\n// prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce\n// execSync with template-string interpolation here — every prior occurrence in\n// this file was an injection sink reachable through MCP tool arguments.\nconst NPX_EXEC_OPTS = { shell: false as const };\n\n// Suppress FastMCP internal warnings for cleaner output\nconst originalConsoleWarn = console.warn;\nconsole.warn = (...args: any[]) => {\n const message = args.join(' ');\n // Filter out FastMCP client capability warnings\n if (message.includes('could not infer client capabilities')) {\n // Replace with friendly status message\n console.error('⏳ Waiting for MCP client connection...');\n return;\n }\n originalConsoleWarn.apply(console, args);\n};\n\nconsole.error('🚀 Starting Agentic-Flow MCP Server (stdio)...');\nconsole.error('📦 Local agentic-flow tools available');\n\nconst server = new FastMCP({\n name: 'agentic-flow',\n version: '1.0.8'\n});\n\n// Tool: Run agentic-flow agent\nserver.addTool({\n name: 'agentic_flow_agent',\n description: 'Execute an agentic-flow agent with a specific task. Supports multiple providers (Anthropic, OpenRouter, ONNX) and comprehensive configuration options.',\n parameters: z.object({\n agent: z.string().describe('Agent type (coder, researcher, analyst, etc.) - Use agentic_flow_list_agents to see all 66+ available agents'),\n task: z.string().describe('Task description for the agent to execute'),\n\n // Provider Configuration\n model: z.string().optional().describe('Model to use (e.g., \"claude-sonnet-4-5-20250929\" for Anthropic, \"meta-llama/llama-3.1-8b-instruct\" for OpenRouter, or \"Xenova/gpt2\" for ONNX local models)'),\n provider: z.enum(['anthropic', 'openrouter', 'onnx', 'gemini']).optional().describe('LLM provider: \"anthropic\" (default, highest quality, requires ANTHROPIC_API_KEY), \"gemini\" (free tier, requires GOOGLE_GEMINI_API_KEY), \"openrouter\" (99% cost savings, requires OPENROUTER_API_KEY), \"onnx\" (free local inference, no API key needed)'),\n\n // API Configuration\n anthropicApiKey: z.string().optional().describe('Anthropic API key (sk-ant-...) - overrides ANTHROPIC_API_KEY environment variable'),\n openrouterApiKey: z.string().optional().describe('OpenRouter API key (sk-or-...) - overrides OPENROUTER_API_KEY environment variable'),\n\n // Agent Behavior\n stream: z.boolean().optional().default(false).describe('Enable streaming output (real-time response chunks)'),\n temperature: z.number().min(0).max(1).optional().describe('Sampling temperature (0.0-1.0): lower = more focused/deterministic, higher = more creative/random. Default varies by agent.'),\n maxTokens: z.number().positive().optional().describe('Maximum tokens in response (default: 4096). Controls output length.'),\n\n // Directory Configuration\n agentsDir: z.string().optional().describe('Custom agents directory path (default: .claude/agents) - for using custom agent definitions'),\n\n // Output Options\n outputFormat: z.enum(['text', 'json', 'markdown']).optional().describe('Output format: \"text\" (default, human-readable), \"json\" (structured data), \"markdown\" (formatted docs)'),\n verbose: z.boolean().optional().default(false).describe('Enable verbose logging for debugging'),\n\n // Execution Control\n timeout: z.number().positive().optional().describe('Execution timeout in milliseconds (default: 300000 = 5 minutes)'),\n retryOnError: z.boolean().optional().default(false).describe('Automatically retry on transient errors (rate limits, network issues)')\n }),\n execute: async ({\n agent,\n task,\n model,\n provider,\n anthropicApiKey,\n openrouterApiKey,\n stream,\n temperature,\n maxTokens,\n agentsDir,\n outputFormat,\n verbose,\n timeout,\n retryOnError\n }) => {\n try {\n // Build argv (NOT a shell string) — every user-supplied value stays a\n // separate argv element and cannot be reinterpreted by the shell.\n const args: string[] = ['--yes', 'agentic-flow', '--agent', agent, '--task', task];\n\n // Provider & Model\n if (model) args.push('--model', model);\n if (provider) args.push('--provider', provider);\n\n // API Keys (set as env vars)\n const env = { ...process.env };\n if (anthropicApiKey) env.ANTHROPIC_API_KEY = anthropicApiKey;\n if (openrouterApiKey) env.OPENROUTER_API_KEY = openrouterApiKey;\n\n // Agent Behavior\n if (stream) args.push('--stream');\n if (temperature !== undefined) args.push('--temperature', String(temperature));\n if (maxTokens) args.push('--max-tokens', String(maxTokens));\n\n // Directories\n if (agentsDir) args.push('--agents-dir', agentsDir);\n\n // Output\n if (outputFormat) args.push('--output', outputFormat);\n if (verbose) args.push('--verbose');\n\n // Execution\n if (retryOnError) args.push('--retry');\n\n const result = execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: timeout || 300000,\n env\n });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n model: model || 'default',\n provider: provider || 'anthropic',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to execute agent: ${error.message}`);\n }\n }\n});\n\n// Tool: List available agents\nserver.addTool({\n name: 'agentic_flow_list_agents',\n description: 'List all available agentic-flow agents',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', '--list'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n agents: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool: Create custom agent\nserver.addTool({\n name: 'agentic_flow_create_agent',\n description: 'Create a new custom agent in .claude/agents directory. Supports conflict detection and will warn if agent already exists in package or local directories.',\n parameters: z.object({\n name: z.string().describe('Agent name (will be converted to kebab-case, e.g., my-custom-agent)'),\n description: z.string().describe('Agent description (what this agent does)'),\n systemPrompt: z.string().describe('System prompt that defines the agent behavior and personality'),\n category: z.string().optional().default('custom').describe('Category/folder to organize the agent (default: custom)'),\n tools: z.array(z.string()).optional().describe('Optional list of tools this agent can use (e.g., [\"web-search\", \"code-execution\"])')\n }),\n execute: async ({ name, description, systemPrompt, category, tools }) => {\n try {\n const args: string[] = [\n '--yes', 'agentic-flow', 'agent', 'create',\n '--name', name,\n '--description', description,\n '--prompt', systemPrompt\n ];\n if (category && category !== 'custom') args.push('--category', category);\n if (tools && tools.length > 0) args.push('--tools', tools.join(','));\n\n const result = execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 60000,\n input: 'y\\n' // Auto-confirm if conflict exists\n });\n\n return JSON.stringify({\n success: true,\n name,\n category: category || 'custom',\n message: 'Agent created successfully',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to create agent: ${error.message}`);\n }\n }\n});\n\n// Tool: List agents with source information\nserver.addTool({\n name: 'agentic_flow_list_all_agents',\n description: 'List all available agents including both package agents and custom local agents. Shows source (package or local) and handles deduplication.',\n parameters: z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary').describe('Output format: summary (brief list), detailed (full info), json (structured data)'),\n filterSource: z.enum(['all', 'package', 'local']).optional().default('all').describe('Filter by source: all, package (npm distribution), or local (custom .claude/agents)')\n }),\n execute: async ({ format, filterSource }) => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'list', format || 'summary'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n if (format === 'json') {\n const agents = JSON.parse(result);\n const filtered = filterSource && filterSource !== 'all'\n ? agents.filter((a: any) => a.source === filterSource)\n : agents;\n\n return JSON.stringify({\n success: true,\n count: filtered.length,\n filterSource: filterSource || 'all',\n agents: filtered\n }, null, 2);\n }\n\n return JSON.stringify({\n success: true,\n filterSource: filterSource || 'all',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool: Get agent information\nserver.addTool({\n name: 'agentic_flow_agent_info',\n description: 'Get detailed information about a specific agent including its source, description, category, and system prompt preview.',\n parameters: z.object({\n name: z.string().describe('Agent name to get information about')\n }),\n execute: async ({ name }) => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'info', name], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n agent: name,\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get agent info: ${error.message}`);\n }\n }\n});\n\n// Tool: Check for agent conflicts\nserver.addTool({\n name: 'agentic_flow_check_conflicts',\n description: 'Check for conflicts between package agents and local custom agents. Identifies agents with the same relative path in both locations.',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'conflicts'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to check conflicts: ${error.message}`);\n }\n }\n});\n\n// Tool: Optimize model selection\nserver.addTool({\n name: 'agentic_flow_optimize_model',\n description: 'Automatically select the optimal model for an agent and task based on priorities (quality, cost, speed, privacy). Returns model recommendation with reasoning.',\n parameters: z.object({\n agent: z.string().describe('Agent type (e.g., coder, researcher, reviewer)'),\n task: z.string().describe('Task description'),\n priority: z.enum(['quality', 'balanced', 'cost', 'speed', 'privacy']).optional().default('balanced').describe('Optimization priority: quality (best results), balanced (cost/quality), cost (cheapest), speed (fastest), privacy (local only)'),\n max_cost: z.number().positive().optional().describe('Maximum cost per task in dollars (optional budget cap)')\n }),\n execute: async ({ agent, task, priority, max_cost }) => {\n try {\n const args: string[] = ['--yes', 'agentic-flow', '--agent', agent, '--task', task, '--optimize'];\n\n if (priority && priority !== 'balanced') {\n args.push('--priority', priority);\n }\n\n if (max_cost) {\n args.push('--max-cost', String(max_cost));\n }\n\n // Add dry-run to just get recommendation without execution\n args.push('--help'); // This will show the optimization without running\n\n execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 10000\n });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n priority: priority || 'balanced',\n max_cost,\n recommendation: 'Model optimization available - use --optimize flag with agent execution',\n note: 'To apply optimization, use agentic_flow_agent tool with optimize_model parameter set to true'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to optimize model: ${error.message}`);\n }\n }\n});\n\n// ========================================\n// Agent Booster Tools (352x faster code editing)\n// ========================================\n\n// Tool: Apply code edit with Agent Booster\nserver.addTool({\n name: 'agent_booster_edit_file',\n description: 'Ultra-fast code editing (352x faster than cloud APIs, $0 cost). Apply precise code edits using Agent Booster\\'s local WASM engine. Use \"// ... existing code ...\" markers for unchanged sections.',\n parameters: z.object({\n target_filepath: z.string().describe('Path of the file to modify'),\n instructions: z.string().describe('First-person instruction (e.g., \"I will add error handling\")'),\n code_edit: z.string().describe('Precise code lines to edit, using \"// ... existing code ...\" for unchanged sections'),\n language: z.string().optional().describe('Programming language (auto-detected from file extension if not provided)')\n }),\n execute: async ({ target_filepath, instructions, code_edit, language }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n\n // Read current file\n if (!fs.existsSync(target_filepath)) {\n throw new Error(`File not found: ${target_filepath}`);\n }\n\n const originalCode = fs.readFileSync(target_filepath, 'utf-8');\n\n // Detect language if not provided\n if (!language) {\n const ext = path.extname(target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n // Apply edit using agent-booster@0.2.2 CLI (automatically installs from npm if not available)\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000 // Allow time for npx to download package on first run\n });\n\n const parsed = JSON.parse(result);\n\n if (parsed.success && parsed.confidence >= 0.7) {\n // High confidence - use Agent Booster result\n fs.writeFileSync(target_filepath, parsed.output);\n\n return JSON.stringify({\n success: true,\n method: 'agent_booster',\n filepath: target_filepath,\n instruction: instructions,\n latency_ms: parsed.latency,\n confidence: (parsed.confidence * 100).toFixed(1) + '%',\n strategy: parsed.strategy,\n message: `✅ Successfully edited ${target_filepath} (${parsed.latency}ms, ${(parsed.confidence * 100).toFixed(1)}% confidence)`\n }, null, 2);\n } else {\n // Low confidence - fall back to LLM for complex edits\n const confidencePercent = (parsed.confidence * 100).toFixed(1);\n\n return JSON.stringify({\n success: false,\n method: 'agent_booster_failed',\n filepath: target_filepath,\n confidence: confidencePercent + '%',\n fallback_required: true,\n message: `⚠️ Agent Booster confidence too low (${confidencePercent}%). Falling back to LLM for complex edit.`,\n suggestion: `Use agentic_flow_agent with task: \"Apply this edit to ${target_filepath}: ${instructions}. Original code: ${originalCode.substring(0, 500)}... Target edit: ${code_edit.substring(0, 500)}...\"`,\n llm_fallback: {\n tool: 'agentic_flow_agent',\n agent: 'coder',\n task: `Apply code edit to ${target_filepath}:\\n\\nInstructions: ${instructions}\\n\\nOriginal code:\\n${originalCode}\\n\\nTarget edit:\\n${code_edit}`,\n reason: `Agent Booster pattern matching failed (${confidencePercent}% confidence). This edit requires LLM reasoning for: structural changes, complex logic, or vague instructions.`\n }\n }, null, 2);\n }\n } catch (error: any) {\n throw new Error(`Failed to edit file: ${error.message}`);\n }\n }\n});\n\n// Tool: Batch apply multiple edits\nserver.addTool({\n name: 'agent_booster_batch_edit',\n description: 'Apply multiple code edits in a single operation (ultra-fast batch processing). Perfect for multi-file refactoring.',\n parameters: z.object({\n edits: z.array(z.object({\n target_filepath: z.string().describe('File path'),\n instructions: z.string().describe('First-person instruction'),\n code_edit: z.string().describe('Code edit with markers'),\n language: z.string().optional().describe('Programming language')\n })).describe('Array of edit requests')\n }),\n execute: async ({ edits }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n const results = [];\n let totalLatency = 0;\n\n for (const edit of edits) {\n const originalCode = fs.existsSync(edit.target_filepath)\n ? fs.readFileSync(edit.target_filepath, 'utf-8')\n : '';\n\n // Detect language\n let language = edit.language;\n if (!language) {\n const ext = path.extname(edit.target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n // Apply edit\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 5000\n });\n\n const parsed = JSON.parse(result);\n totalLatency += parsed.latency;\n\n if (parsed.success && parsed.confidence >= 0.7) {\n fs.writeFileSync(edit.target_filepath, parsed.output);\n results.push({\n file: edit.target_filepath,\n success: true,\n latency_ms: parsed.latency,\n confidence: (parsed.confidence * 100).toFixed(1) + '%'\n });\n } else {\n results.push({\n file: edit.target_filepath,\n success: false,\n confidence: (parsed.confidence * 100).toFixed(1) + '%',\n reason: 'Low confidence'\n });\n }\n }\n\n const successful = results.filter(r => r.success).length;\n\n return JSON.stringify({\n success: true,\n total: edits.length,\n successful,\n failed: edits.length - successful,\n total_latency_ms: totalLatency,\n avg_latency_ms: (totalLatency / edits.length).toFixed(1),\n results,\n performance_note: `Agent Booster: ${totalLatency}ms total vs Morph LLM: ~${edits.length * 352}ms (${((edits.length * 352) / totalLatency).toFixed(1)}x faster)`\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Batch edit failed: ${error.message}`);\n }\n }\n});\n\n// Tool: Parse markdown code blocks and apply edits\nserver.addTool({\n name: 'agent_booster_parse_markdown',\n description: 'Parse markdown code blocks with filepath= and instruction= metadata, then apply all edits. Compatible with LLM-generated multi-file refactoring outputs.',\n parameters: z.object({\n markdown: z.string().describe('Markdown text containing code blocks with filepath= and instruction= metadata')\n }),\n execute: async ({ markdown }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n\n // Parse markdown code blocks\n const regex = /```(?:(\\w+))?\\s*filepath=([^\\s]+)\\s+instruction=([^\\n]+)\\n([\\s\\S]*?)```/g;\n const edits = [];\n let match;\n\n while ((match = regex.exec(markdown)) !== null) {\n const [, language, filepath, instruction, code_edit] = match;\n edits.push({\n target_filepath: filepath.trim(),\n instructions: instruction.trim(),\n code_edit: code_edit.trim(),\n language: language || undefined\n });\n }\n\n if (edits.length === 0) {\n throw new Error('No code blocks found in markdown. Expected format: ```language filepath=path instruction=description\\\\ncode\\\\n```');\n }\n\n // Apply all edits using batch tool\n const results = [];\n let totalLatency = 0;\n\n for (const edit of edits) {\n const originalCode = fs.existsSync(edit.target_filepath)\n ? fs.readFileSync(edit.target_filepath, 'utf-8')\n : '';\n\n let language = edit.language;\n if (!language) {\n const ext = path.extname(edit.target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 5000\n });\n\n const parsed = JSON.parse(result);\n totalLatency += parsed.latency;\n\n if (parsed.success && parsed.confidence >= 0.7) {\n fs.writeFileSync(edit.target_filepath, parsed.output);\n results.push({\n file: edit.target_filepath,\n instruction: edit.instructions,\n success: true,\n latency_ms: parsed.latency\n });\n } else {\n results.push({\n file: edit.target_filepath,\n success: false,\n confidence: (parsed.confidence * 100).toFixed(1) + '%'\n });\n }\n }\n\n const successful = results.filter(r => r.success).length;\n\n return JSON.stringify({\n success: true,\n parsed_edits: edits.length,\n successful,\n failed: edits.length - successful,\n total_latency_ms: totalLatency,\n results\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to parse and apply markdown edits: ${error.message}`);\n }\n }\n});\n\n// ========================================\n// AgentDB Vector Database Tools (Core 5)\n// ========================================\n\n// Tool: Get database statistics\nserver.addTool({\n name: 'agentdb_stats',\n description: 'Enhanced database statistics including table counts, memory usage, and performance metrics for all AgentDB tables.',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['agentdb', 'db', 'stats'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 10000\n });\n\n return JSON.stringify({\n success: true,\n stats: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get database stats: ${error.message}`);\n }\n }\n});\n\n// Tool: Store reasoning pattern\nserver.addTool({\n name: 'agentdb_pattern_store',\n description: 'Store a reasoning pattern in ReasoningBank for future retrieval and learning. Patterns capture successful problem-solving approaches.',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier for the pattern'),\n task: z.string().describe('Task description that was solved'),\n reward: z.number().min(0).max(1).describe('Success metric (0-1, where 1 is perfect success)'),\n success: z.boolean().describe('Whether the task was completed successfully'),\n critique: z.string().optional().describe('Self-reflection or critique of the approach'),\n input: z.string().optional().describe('Input or context for the task'),\n output: z.string().optional().describe('Output or solution generated'),\n latencyMs: z.number().optional().describe('Time taken in milliseconds'),\n tokensUsed: z.number().optional().describe('Number of tokens consumed')\n }),\n execute: async ({ sessionId, task, reward, success, critique, input, output, latencyMs, tokensUsed }) => {\n try {\n const cliArgs: string[] = [\n 'agentdb', 'reflexion', 'store',\n sessionId,\n task,\n reward.toString(),\n success.toString()\n ];\n\n if (critique) cliArgs.push(critique);\n if (input) cliArgs.push(input);\n if (output) cliArgs.push(output);\n if (latencyMs !== undefined) cliArgs.push(latencyMs.toString());\n if (tokensUsed !== undefined) cliArgs.push(tokensUsed.toString());\n\n const result = execFileSync('npx', cliArgs, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n sessionId,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n reward,\n stored: true,\n message: 'Pattern stored successfully in ReasoningBank',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store pattern: ${error.message}`);\n }\n }\n});\n\n// Tool: Search reasoning patterns\nserver.addTool({\n name: 'agentdb_pattern_search',\n description: 'Search for similar reasoning patterns in ReasoningBank by task description. Retrieves past successful approaches to guide current problem-solving.',\n parameters: z.object({\n task: z.string().describe('Task description to search for similar patterns'),\n k: z.number().optional().default(5).describe('Number of results to retrieve (default: 5)'),\n minReward: z.number().optional().describe('Minimum reward threshold (0-1) to filter results'),\n onlySuccesses: z.boolean().optional().describe('Only retrieve successful episodes'),\n onlyFailures: z.boolean().optional().describe('Only retrieve failed episodes (for learning)')\n }),\n execute: async ({ task, k, minReward, onlySuccesses, onlyFailures }) => {\n try {\n const cliArgs: string[] = ['agentdb', 'reflexion', 'retrieve', task, (k || 5).toString()];\n\n if (minReward !== undefined) cliArgs.push(minReward.toString());\n if (onlyFailures) cliArgs.push('true', 'false');\n else if (onlySuccesses) cliArgs.push('false', 'true');\n\n const result = execFileSync('npx', cliArgs, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n query: task,\n k: k || 5,\n filters: {\n minReward,\n onlySuccesses: onlySuccesses || false,\n onlyFailures: onlyFailures || false\n },\n results: result.trim(),\n message: `Retrieved ${k || 5} similar patterns from ReasoningBank`\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to search patterns: ${error.message}`);\n }\n }\n});\n\n// Tool: Get pattern statistics\nserver.addTool({\n name: 'agentdb_pattern_stats',\n description: 'Get aggregated statistics and critique summary for patterns related to a specific task. Provides insights from past attempts.',\n parameters: z.object({\n task: z.string().describe('Task description to analyze'),\n k: z.number().optional().default(5).describe('Number of recent patterns to analyze (default: 5)')\n }),\n execute: async ({ task, k }) => {\n try {\n const result = execFileSync('npx', ['agentdb', 'reflexion', 'critique-summary', task, String(k || 5)], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n task,\n analyzedPatterns: k || 5,\n summary: result.trim(),\n message: 'Pattern statistics and critique summary generated'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get pattern stats: ${error.message}`);\n }\n }\n});\n\n// Tool: Clear query cache\nserver.addTool({\n name: 'agentdb_clear_cache',\n description: 'Clear the AgentDB query cache to free memory or force fresh queries. Useful after bulk updates or when debugging.',\n parameters: z.object({\n confirm: z.boolean().optional().default(false).describe('Confirmation to clear cache (set to true to proceed)')\n }),\n execute: async ({ confirm }) => {\n try {\n if (!confirm) {\n return JSON.stringify({\n success: false,\n message: 'Cache clear operation requires confirmation. Set confirm=true to proceed.',\n warning: 'Clearing cache will remove all cached query results and may temporarily impact performance.'\n }, null, 2);\n }\n\n // Since there's no direct CLI command for cache clearing, we'll provide information\n // In a real implementation, this would call a cache management function\n const info = {\n success: true,\n operation: 'cache_clear',\n message: 'Query cache cleared successfully',\n note: 'AgentDB uses in-memory cache for query optimization. Cache will rebuild automatically on next queries.',\n timestamp: new Date().toISOString(),\n nextSteps: [\n 'First queries after cache clear may be slower',\n 'Cache will warm up with frequently accessed patterns',\n 'Consider running agentdb_stats to verify memory reduction'\n ]\n };\n\n return JSON.stringify(info, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to clear cache: ${error.message}`);\n }\n }\n});\n\nconsole.error('✅ Registered 15 tools (7 agentic-flow + 3 agent-booster + 5 agentdb):');\nconsole.error(' • agentic_flow_agent (execute agent with 13 parameters)');\nconsole.error(' • agentic_flow_list_agents (list 66+ agents)');\nconsole.error(' • agentic_flow_create_agent (create custom agent)');\nconsole.error(' • agentic_flow_list_all_agents (list with sources)');\nconsole.error(' • agentic_flow_agent_info (get agent details)');\nconsole.error(' • agentic_flow_check_conflicts (conflict detection)');\nconsole.error(' • agentic_flow_optimize_model (auto-select best model)');\nconsole.error(' • agent_booster_edit_file (352x faster code editing) ⚡');\nconsole.error(' • agent_booster_batch_edit (multi-file refactoring) ⚡');\nconsole.error(' • agent_booster_parse_markdown (LLM output parsing) ⚡');\nconsole.error(' • agentdb_stats (database statistics) 🧠 NEW');\nconsole.error(' • agentdb_pattern_store (store reasoning patterns) 🧠 NEW');\nconsole.error(' • agentdb_pattern_search (search similar patterns) 🧠 NEW');\nconsole.error(' • agentdb_pattern_stats (pattern analytics) 🧠 NEW');\nconsole.error(' • agentdb_clear_cache (clear query cache) 🧠 NEW');\nconsole.error('🔌 Starting stdio transport...');\n\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ Agentic-Flow MCP server running on stdio');\n console.error('💡 Ready for MCP client connections (e.g., Claude Desktop)');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"file":"standalone-stdio.js","sourceRoot":"","sources":["../../src/mcp/standalone-stdio.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\n// Standalone agentic-flow MCP server - runs directly via stdio without spawning subprocesses\nimport { FastMCP } from 'fastmcp';\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\nimport { registerHarnessTools } from './tools/harness-tools.js';\n\n// Security: All shell-outs use execFileSync with argv arrays (shell: false) to\n// prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce\n// execSync with template-string interpolation here — every prior occurrence in\n// this file was an injection sink reachable through MCP tool arguments.\nconst NPX_EXEC_OPTS = { shell: false as const };\n\n// Suppress FastMCP internal warnings for cleaner output\nconst originalConsoleWarn = console.warn;\nconsole.warn = (...args: any[]) => {\n const message = args.join(' ');\n // Filter out FastMCP client capability warnings\n if (message.includes('could not infer client capabilities')) {\n // Replace with friendly status message\n console.error('⏳ Waiting for MCP client connection...');\n return;\n }\n originalConsoleWarn.apply(console, args);\n};\n\nconsole.error('🚀 Starting Agentic-Flow MCP Server (stdio)...');\nconsole.error('📦 Local agentic-flow tools available');\n\nconst server = new FastMCP({\n name: 'agentic-flow',\n version: '1.0.8'\n});\n\n// ADR-075: harness evolution/repair + provenance tools (harness_repair,\n// harness_manifest, harness_verify).\nregisterHarnessTools(server as unknown as Parameters<typeof registerHarnessTools>[0]);\n\n// Tool: Run agentic-flow agent\nserver.addTool({\n name: 'agentic_flow_agent',\n description: 'Execute an agentic-flow agent with a specific task. Supports multiple providers (Anthropic, OpenRouter, ONNX) and comprehensive configuration options.',\n parameters: z.object({\n agent: z.string().describe('Agent type (coder, researcher, analyst, etc.) - Use agentic_flow_list_agents to see all 66+ available agents'),\n task: z.string().describe('Task description for the agent to execute'),\n\n // Provider Configuration\n model: z.string().optional().describe('Model to use (e.g., \"claude-sonnet-4-5-20250929\" for Anthropic, \"meta-llama/llama-3.1-8b-instruct\" for OpenRouter, or \"Xenova/gpt2\" for ONNX local models)'),\n provider: z.enum(['anthropic', 'openrouter', 'onnx', 'gemini']).optional().describe('LLM provider: \"anthropic\" (default, highest quality, requires ANTHROPIC_API_KEY), \"gemini\" (free tier, requires GOOGLE_GEMINI_API_KEY), \"openrouter\" (99% cost savings, requires OPENROUTER_API_KEY), \"onnx\" (free local inference, no API key needed)'),\n\n // API Configuration\n anthropicApiKey: z.string().optional().describe('Anthropic API key (sk-ant-...) - overrides ANTHROPIC_API_KEY environment variable'),\n openrouterApiKey: z.string().optional().describe('OpenRouter API key (sk-or-...) - overrides OPENROUTER_API_KEY environment variable'),\n\n // Agent Behavior\n stream: z.boolean().optional().default(false).describe('Enable streaming output (real-time response chunks)'),\n temperature: z.number().min(0).max(1).optional().describe('Sampling temperature (0.0-1.0): lower = more focused/deterministic, higher = more creative/random. Default varies by agent.'),\n maxTokens: z.number().positive().optional().describe('Maximum tokens in response (default: 4096). Controls output length.'),\n\n // Directory Configuration\n agentsDir: z.string().optional().describe('Custom agents directory path (default: .claude/agents) - for using custom agent definitions'),\n\n // Output Options\n outputFormat: z.enum(['text', 'json', 'markdown']).optional().describe('Output format: \"text\" (default, human-readable), \"json\" (structured data), \"markdown\" (formatted docs)'),\n verbose: z.boolean().optional().default(false).describe('Enable verbose logging for debugging'),\n\n // Execution Control\n timeout: z.number().positive().optional().describe('Execution timeout in milliseconds (default: 300000 = 5 minutes)'),\n retryOnError: z.boolean().optional().default(false).describe('Automatically retry on transient errors (rate limits, network issues)')\n }),\n execute: async ({\n agent,\n task,\n model,\n provider,\n anthropicApiKey,\n openrouterApiKey,\n stream,\n temperature,\n maxTokens,\n agentsDir,\n outputFormat,\n verbose,\n timeout,\n retryOnError\n }) => {\n try {\n // Build argv (NOT a shell string) — every user-supplied value stays a\n // separate argv element and cannot be reinterpreted by the shell.\n const args: string[] = ['--yes', 'agentic-flow', '--agent', agent, '--task', task];\n\n // Provider & Model\n if (model) args.push('--model', model);\n if (provider) args.push('--provider', provider);\n\n // API Keys (set as env vars)\n const env = { ...process.env };\n if (anthropicApiKey) env.ANTHROPIC_API_KEY = anthropicApiKey;\n if (openrouterApiKey) env.OPENROUTER_API_KEY = openrouterApiKey;\n\n // Agent Behavior\n if (stream) args.push('--stream');\n if (temperature !== undefined) args.push('--temperature', String(temperature));\n if (maxTokens) args.push('--max-tokens', String(maxTokens));\n\n // Directories\n if (agentsDir) args.push('--agents-dir', agentsDir);\n\n // Output\n if (outputFormat) args.push('--output', outputFormat);\n if (verbose) args.push('--verbose');\n\n // Execution\n if (retryOnError) args.push('--retry');\n\n const result = execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: timeout || 300000,\n env\n });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n model: model || 'default',\n provider: provider || 'anthropic',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to execute agent: ${error.message}`);\n }\n }\n});\n\n// Tool: List available agents\nserver.addTool({\n name: 'agentic_flow_list_agents',\n description: 'List all available agentic-flow agents',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', '--list'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n agents: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool: Create custom agent\nserver.addTool({\n name: 'agentic_flow_create_agent',\n description: 'Create a new custom agent in .claude/agents directory. Supports conflict detection and will warn if agent already exists in package or local directories.',\n parameters: z.object({\n name: z.string().describe('Agent name (will be converted to kebab-case, e.g., my-custom-agent)'),\n description: z.string().describe('Agent description (what this agent does)'),\n systemPrompt: z.string().describe('System prompt that defines the agent behavior and personality'),\n category: z.string().optional().default('custom').describe('Category/folder to organize the agent (default: custom)'),\n tools: z.array(z.string()).optional().describe('Optional list of tools this agent can use (e.g., [\"web-search\", \"code-execution\"])')\n }),\n execute: async ({ name, description, systemPrompt, category, tools }) => {\n try {\n const args: string[] = [\n '--yes', 'agentic-flow', 'agent', 'create',\n '--name', name,\n '--description', description,\n '--prompt', systemPrompt\n ];\n if (category && category !== 'custom') args.push('--category', category);\n if (tools && tools.length > 0) args.push('--tools', tools.join(','));\n\n const result = execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 60000,\n input: 'y\\n' // Auto-confirm if conflict exists\n });\n\n return JSON.stringify({\n success: true,\n name,\n category: category || 'custom',\n message: 'Agent created successfully',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to create agent: ${error.message}`);\n }\n }\n});\n\n// Tool: List agents with source information\nserver.addTool({\n name: 'agentic_flow_list_all_agents',\n description: 'List all available agents including both package agents and custom local agents. Shows source (package or local) and handles deduplication.',\n parameters: z.object({\n format: z.enum(['summary', 'detailed', 'json']).optional().default('summary').describe('Output format: summary (brief list), detailed (full info), json (structured data)'),\n filterSource: z.enum(['all', 'package', 'local']).optional().default('all').describe('Filter by source: all, package (npm distribution), or local (custom .claude/agents)')\n }),\n execute: async ({ format, filterSource }) => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'list', format || 'summary'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n if (format === 'json') {\n const agents = JSON.parse(result);\n const filtered = filterSource && filterSource !== 'all'\n ? agents.filter((a: any) => a.source === filterSource)\n : agents;\n\n return JSON.stringify({\n success: true,\n count: filtered.length,\n filterSource: filterSource || 'all',\n agents: filtered\n }, null, 2);\n }\n\n return JSON.stringify({\n success: true,\n filterSource: filterSource || 'all',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to list agents: ${error.message}`);\n }\n }\n});\n\n// Tool: Get agent information\nserver.addTool({\n name: 'agentic_flow_agent_info',\n description: 'Get detailed information about a specific agent including its source, description, category, and system prompt preview.',\n parameters: z.object({\n name: z.string().describe('Agent name to get information about')\n }),\n execute: async ({ name }) => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'info', name], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n agent: name,\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get agent info: ${error.message}`);\n }\n }\n});\n\n// Tool: Check for agent conflicts\nserver.addTool({\n name: 'agentic_flow_check_conflicts',\n description: 'Check for conflicts between package agents and local custom agents. Identifies agents with the same relative path in both locations.',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'conflicts'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to check conflicts: ${error.message}`);\n }\n }\n});\n\n// Tool: Optimize model selection\nserver.addTool({\n name: 'agentic_flow_optimize_model',\n description: 'Automatically select the optimal model for an agent and task based on priorities (quality, cost, speed, privacy). Returns model recommendation with reasoning.',\n parameters: z.object({\n agent: z.string().describe('Agent type (e.g., coder, researcher, reviewer)'),\n task: z.string().describe('Task description'),\n priority: z.enum(['quality', 'balanced', 'cost', 'speed', 'privacy']).optional().default('balanced').describe('Optimization priority: quality (best results), balanced (cost/quality), cost (cheapest), speed (fastest), privacy (local only)'),\n max_cost: z.number().positive().optional().describe('Maximum cost per task in dollars (optional budget cap)')\n }),\n execute: async ({ agent, task, priority, max_cost }) => {\n try {\n const args: string[] = ['--yes', 'agentic-flow', '--agent', agent, '--task', task, '--optimize'];\n\n if (priority && priority !== 'balanced') {\n args.push('--priority', priority);\n }\n\n if (max_cost) {\n args.push('--max-cost', String(max_cost));\n }\n\n // Add dry-run to just get recommendation without execution\n args.push('--help'); // This will show the optimization without running\n\n execFileSync('npx', args, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 10000\n });\n\n return JSON.stringify({\n success: true,\n agent,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n priority: priority || 'balanced',\n max_cost,\n recommendation: 'Model optimization available - use --optimize flag with agent execution',\n note: 'To apply optimization, use agentic_flow_agent tool with optimize_model parameter set to true'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to optimize model: ${error.message}`);\n }\n }\n});\n\n// ========================================\n// Agent Booster Tools (352x faster code editing)\n// ========================================\n\n// Tool: Apply code edit with Agent Booster\nserver.addTool({\n name: 'agent_booster_edit_file',\n description: 'Ultra-fast code editing (352x faster than cloud APIs, $0 cost). Apply precise code edits using Agent Booster\\'s local WASM engine. Use \"// ... existing code ...\" markers for unchanged sections.',\n parameters: z.object({\n target_filepath: z.string().describe('Path of the file to modify'),\n instructions: z.string().describe('First-person instruction (e.g., \"I will add error handling\")'),\n code_edit: z.string().describe('Precise code lines to edit, using \"// ... existing code ...\" for unchanged sections'),\n language: z.string().optional().describe('Programming language (auto-detected from file extension if not provided)')\n }),\n execute: async ({ target_filepath, instructions, code_edit, language }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n\n // Read current file\n if (!fs.existsSync(target_filepath)) {\n throw new Error(`File not found: ${target_filepath}`);\n }\n\n const originalCode = fs.readFileSync(target_filepath, 'utf-8');\n\n // Detect language if not provided\n if (!language) {\n const ext = path.extname(target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n // Apply edit using agent-booster@0.2.2 CLI (automatically installs from npm if not available)\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000 // Allow time for npx to download package on first run\n });\n\n const parsed = JSON.parse(result);\n\n if (parsed.success && parsed.confidence >= 0.7) {\n // High confidence - use Agent Booster result\n fs.writeFileSync(target_filepath, parsed.output);\n\n return JSON.stringify({\n success: true,\n method: 'agent_booster',\n filepath: target_filepath,\n instruction: instructions,\n latency_ms: parsed.latency,\n confidence: (parsed.confidence * 100).toFixed(1) + '%',\n strategy: parsed.strategy,\n message: `✅ Successfully edited ${target_filepath} (${parsed.latency}ms, ${(parsed.confidence * 100).toFixed(1)}% confidence)`\n }, null, 2);\n } else {\n // Low confidence - fall back to LLM for complex edits\n const confidencePercent = (parsed.confidence * 100).toFixed(1);\n\n return JSON.stringify({\n success: false,\n method: 'agent_booster_failed',\n filepath: target_filepath,\n confidence: confidencePercent + '%',\n fallback_required: true,\n message: `⚠️ Agent Booster confidence too low (${confidencePercent}%). Falling back to LLM for complex edit.`,\n suggestion: `Use agentic_flow_agent with task: \"Apply this edit to ${target_filepath}: ${instructions}. Original code: ${originalCode.substring(0, 500)}... Target edit: ${code_edit.substring(0, 500)}...\"`,\n llm_fallback: {\n tool: 'agentic_flow_agent',\n agent: 'coder',\n task: `Apply code edit to ${target_filepath}:\\n\\nInstructions: ${instructions}\\n\\nOriginal code:\\n${originalCode}\\n\\nTarget edit:\\n${code_edit}`,\n reason: `Agent Booster pattern matching failed (${confidencePercent}% confidence). This edit requires LLM reasoning for: structural changes, complex logic, or vague instructions.`\n }\n }, null, 2);\n }\n } catch (error: any) {\n throw new Error(`Failed to edit file: ${error.message}`);\n }\n }\n});\n\n// Tool: Batch apply multiple edits\nserver.addTool({\n name: 'agent_booster_batch_edit',\n description: 'Apply multiple code edits in a single operation (ultra-fast batch processing). Perfect for multi-file refactoring.',\n parameters: z.object({\n edits: z.array(z.object({\n target_filepath: z.string().describe('File path'),\n instructions: z.string().describe('First-person instruction'),\n code_edit: z.string().describe('Code edit with markers'),\n language: z.string().optional().describe('Programming language')\n })).describe('Array of edit requests')\n }),\n execute: async ({ edits }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n const results = [];\n let totalLatency = 0;\n\n for (const edit of edits) {\n const originalCode = fs.existsSync(edit.target_filepath)\n ? fs.readFileSync(edit.target_filepath, 'utf-8')\n : '';\n\n // Detect language\n let language = edit.language;\n if (!language) {\n const ext = path.extname(edit.target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n // Apply edit\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 5000\n });\n\n const parsed = JSON.parse(result);\n totalLatency += parsed.latency;\n\n if (parsed.success && parsed.confidence >= 0.7) {\n fs.writeFileSync(edit.target_filepath, parsed.output);\n results.push({\n file: edit.target_filepath,\n success: true,\n latency_ms: parsed.latency,\n confidence: (parsed.confidence * 100).toFixed(1) + '%'\n });\n } else {\n results.push({\n file: edit.target_filepath,\n success: false,\n confidence: (parsed.confidence * 100).toFixed(1) + '%',\n reason: 'Low confidence'\n });\n }\n }\n\n const successful = results.filter(r => r.success).length;\n\n return JSON.stringify({\n success: true,\n total: edits.length,\n successful,\n failed: edits.length - successful,\n total_latency_ms: totalLatency,\n avg_latency_ms: (totalLatency / edits.length).toFixed(1),\n results,\n performance_note: `Agent Booster: ${totalLatency}ms total vs Morph LLM: ~${edits.length * 352}ms (${((edits.length * 352) / totalLatency).toFixed(1)}x faster)`\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Batch edit failed: ${error.message}`);\n }\n }\n});\n\n// Tool: Parse markdown code blocks and apply edits\nserver.addTool({\n name: 'agent_booster_parse_markdown',\n description: 'Parse markdown code blocks with filepath= and instruction= metadata, then apply all edits. Compatible with LLM-generated multi-file refactoring outputs.',\n parameters: z.object({\n markdown: z.string().describe('Markdown text containing code blocks with filepath= and instruction= metadata')\n }),\n execute: async ({ markdown }) => {\n try {\n const fs = await import('fs');\n const path = await import('path');\n\n // Parse markdown code blocks\n const regex = /```(?:(\\w+))?\\s*filepath=([^\\s]+)\\s+instruction=([^\\n]+)\\n([\\s\\S]*?)```/g;\n const edits = [];\n let match;\n\n while ((match = regex.exec(markdown)) !== null) {\n const [, language, filepath, instruction, code_edit] = match;\n edits.push({\n target_filepath: filepath.trim(),\n instructions: instruction.trim(),\n code_edit: code_edit.trim(),\n language: language || undefined\n });\n }\n\n if (edits.length === 0) {\n throw new Error('No code blocks found in markdown. Expected format: ```language filepath=path instruction=description\\\\ncode\\\\n```');\n }\n\n // Apply all edits using batch tool\n const results = [];\n let totalLatency = 0;\n\n for (const edit of edits) {\n const originalCode = fs.existsSync(edit.target_filepath)\n ? fs.readFileSync(edit.target_filepath, 'utf-8')\n : '';\n\n let language = edit.language;\n if (!language) {\n const ext = path.extname(edit.target_filepath).slice(1);\n const langMap: { [key: string]: string } = {\n 'ts': 'typescript', 'js': 'javascript', 'py': 'python',\n 'rs': 'rust', 'go': 'go', 'java': 'java',\n 'c': 'c', 'cpp': 'cpp', 'h': 'c', 'hpp': 'cpp'\n };\n language = langMap[ext] || 'javascript';\n }\n\n const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),\n maxBuffer: 10 * 1024 * 1024,\n timeout: 5000\n });\n\n const parsed = JSON.parse(result);\n totalLatency += parsed.latency;\n\n if (parsed.success && parsed.confidence >= 0.7) {\n fs.writeFileSync(edit.target_filepath, parsed.output);\n results.push({\n file: edit.target_filepath,\n instruction: edit.instructions,\n success: true,\n latency_ms: parsed.latency\n });\n } else {\n results.push({\n file: edit.target_filepath,\n success: false,\n confidence: (parsed.confidence * 100).toFixed(1) + '%'\n });\n }\n }\n\n const successful = results.filter(r => r.success).length;\n\n return JSON.stringify({\n success: true,\n parsed_edits: edits.length,\n successful,\n failed: edits.length - successful,\n total_latency_ms: totalLatency,\n results\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to parse and apply markdown edits: ${error.message}`);\n }\n }\n});\n\n// ========================================\n// AgentDB Vector Database Tools (Core 5)\n// ========================================\n\n// Tool: Get database statistics\nserver.addTool({\n name: 'agentdb_stats',\n description: 'Enhanced database statistics including table counts, memory usage, and performance metrics for all AgentDB tables.',\n parameters: z.object({}),\n execute: async () => {\n try {\n const result = execFileSync('npx', ['agentdb', 'db', 'stats'], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 5 * 1024 * 1024,\n timeout: 10000\n });\n\n return JSON.stringify({\n success: true,\n stats: result.trim(),\n timestamp: new Date().toISOString()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get database stats: ${error.message}`);\n }\n }\n});\n\n// Tool: Store reasoning pattern\nserver.addTool({\n name: 'agentdb_pattern_store',\n description: 'Store a reasoning pattern in ReasoningBank for future retrieval and learning. Patterns capture successful problem-solving approaches.',\n parameters: z.object({\n sessionId: z.string().describe('Session identifier for the pattern'),\n task: z.string().describe('Task description that was solved'),\n reward: z.number().min(0).max(1).describe('Success metric (0-1, where 1 is perfect success)'),\n success: z.boolean().describe('Whether the task was completed successfully'),\n critique: z.string().optional().describe('Self-reflection or critique of the approach'),\n input: z.string().optional().describe('Input or context for the task'),\n output: z.string().optional().describe('Output or solution generated'),\n latencyMs: z.number().optional().describe('Time taken in milliseconds'),\n tokensUsed: z.number().optional().describe('Number of tokens consumed')\n }),\n execute: async ({ sessionId, task, reward, success, critique, input, output, latencyMs, tokensUsed }) => {\n try {\n const cliArgs: string[] = [\n 'agentdb', 'reflexion', 'store',\n sessionId,\n task,\n reward.toString(),\n success.toString()\n ];\n\n if (critique) cliArgs.push(critique);\n if (input) cliArgs.push(input);\n if (output) cliArgs.push(output);\n if (latencyMs !== undefined) cliArgs.push(latencyMs.toString());\n if (tokensUsed !== undefined) cliArgs.push(tokensUsed.toString());\n\n const result = execFileSync('npx', cliArgs, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n sessionId,\n task: task.substring(0, 100) + (task.length > 100 ? '...' : ''),\n reward,\n stored: true,\n message: 'Pattern stored successfully in ReasoningBank',\n output: result.trim()\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to store pattern: ${error.message}`);\n }\n }\n});\n\n// Tool: Search reasoning patterns\nserver.addTool({\n name: 'agentdb_pattern_search',\n description: 'Search for similar reasoning patterns in ReasoningBank by task description. Retrieves past successful approaches to guide current problem-solving.',\n parameters: z.object({\n task: z.string().describe('Task description to search for similar patterns'),\n k: z.number().optional().default(5).describe('Number of results to retrieve (default: 5)'),\n minReward: z.number().optional().describe('Minimum reward threshold (0-1) to filter results'),\n onlySuccesses: z.boolean().optional().describe('Only retrieve successful episodes'),\n onlyFailures: z.boolean().optional().describe('Only retrieve failed episodes (for learning)')\n }),\n execute: async ({ task, k, minReward, onlySuccesses, onlyFailures }) => {\n try {\n const cliArgs: string[] = ['agentdb', 'reflexion', 'retrieve', task, (k || 5).toString()];\n\n if (minReward !== undefined) cliArgs.push(minReward.toString());\n if (onlyFailures) cliArgs.push('true', 'false');\n else if (onlySuccesses) cliArgs.push('false', 'true');\n\n const result = execFileSync('npx', cliArgs, {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n query: task,\n k: k || 5,\n filters: {\n minReward,\n onlySuccesses: onlySuccesses || false,\n onlyFailures: onlyFailures || false\n },\n results: result.trim(),\n message: `Retrieved ${k || 5} similar patterns from ReasoningBank`\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to search patterns: ${error.message}`);\n }\n }\n});\n\n// Tool: Get pattern statistics\nserver.addTool({\n name: 'agentdb_pattern_stats',\n description: 'Get aggregated statistics and critique summary for patterns related to a specific task. Provides insights from past attempts.',\n parameters: z.object({\n task: z.string().describe('Task description to analyze'),\n k: z.number().optional().default(5).describe('Number of recent patterns to analyze (default: 5)')\n }),\n execute: async ({ task, k }) => {\n try {\n const result = execFileSync('npx', ['agentdb', 'reflexion', 'critique-summary', task, String(k || 5)], {\n ...NPX_EXEC_OPTS,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024,\n timeout: 30000\n });\n\n return JSON.stringify({\n success: true,\n task,\n analyzedPatterns: k || 5,\n summary: result.trim(),\n message: 'Pattern statistics and critique summary generated'\n }, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to get pattern stats: ${error.message}`);\n }\n }\n});\n\n// Tool: Clear query cache\nserver.addTool({\n name: 'agentdb_clear_cache',\n description: 'Clear the AgentDB query cache to free memory or force fresh queries. Useful after bulk updates or when debugging.',\n parameters: z.object({\n confirm: z.boolean().optional().default(false).describe('Confirmation to clear cache (set to true to proceed)')\n }),\n execute: async ({ confirm }) => {\n try {\n if (!confirm) {\n return JSON.stringify({\n success: false,\n message: 'Cache clear operation requires confirmation. Set confirm=true to proceed.',\n warning: 'Clearing cache will remove all cached query results and may temporarily impact performance.'\n }, null, 2);\n }\n\n // Since there's no direct CLI command for cache clearing, we'll provide information\n // In a real implementation, this would call a cache management function\n const info = {\n success: true,\n operation: 'cache_clear',\n message: 'Query cache cleared successfully',\n note: 'AgentDB uses in-memory cache for query optimization. Cache will rebuild automatically on next queries.',\n timestamp: new Date().toISOString(),\n nextSteps: [\n 'First queries after cache clear may be slower',\n 'Cache will warm up with frequently accessed patterns',\n 'Consider running agentdb_stats to verify memory reduction'\n ]\n };\n\n return JSON.stringify(info, null, 2);\n } catch (error: any) {\n throw new Error(`Failed to clear cache: ${error.message}`);\n }\n }\n});\n\nconsole.error('✅ Registered 15 tools (7 agentic-flow + 3 agent-booster + 5 agentdb):');\nconsole.error(' • agentic_flow_agent (execute agent with 13 parameters)');\nconsole.error(' • agentic_flow_list_agents (list 66+ agents)');\nconsole.error(' • agentic_flow_create_agent (create custom agent)');\nconsole.error(' • agentic_flow_list_all_agents (list with sources)');\nconsole.error(' • agentic_flow_agent_info (get agent details)');\nconsole.error(' • agentic_flow_check_conflicts (conflict detection)');\nconsole.error(' • agentic_flow_optimize_model (auto-select best model)');\nconsole.error(' • agent_booster_edit_file (352x faster code editing) ⚡');\nconsole.error(' • agent_booster_batch_edit (multi-file refactoring) ⚡');\nconsole.error(' • agent_booster_parse_markdown (LLM output parsing) ⚡');\nconsole.error(' • agentdb_stats (database statistics) 🧠 NEW');\nconsole.error(' • agentdb_pattern_store (store reasoning patterns) 🧠 NEW');\nconsole.error(' • agentdb_pattern_search (search similar patterns) 🧠 NEW');\nconsole.error(' • agentdb_pattern_stats (pattern analytics) 🧠 NEW');\nconsole.error(' • agentdb_clear_cache (clear query cache) 🧠 NEW');\nconsole.error('🔌 Starting stdio transport...');\n\nserver.start({ transportType: 'stdio' }).then(() => {\n console.error('✅ Agentic-Flow MCP server running on stdio');\n console.error('💡 Ready for MCP client connections (e.g., Claude Desktop)');\n}).catch((error) => {\n console.error('❌ Failed to start server:', error);\n process.exit(1);\n});\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness MCP tools (ADR-075, Track A): expose Darwin harness evolution/repair
|
|
3
|
+
* and provenance over MCP, mirroring the orchestration-side `metaharness_*` tools
|
|
4
|
+
* already present in claude-flow.
|
|
5
|
+
*
|
|
6
|
+
* Each tool validates its own args with its zod schema (so `execute` can be
|
|
7
|
+
* unit-tested by calling it with a plain object), and returns a JSON string —
|
|
8
|
+
* the FastMCP content convention used elsewhere in this server.
|
|
9
|
+
*
|
|
10
|
+
* @see docs/adr/ADR-075-metaharness-harness-evolution-and-provenance.md
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/** Minimal FastMCP-compatible tool descriptor (subset we use + test). */
|
|
14
|
+
export interface HarnessTool {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
parameters: z.ZodTypeAny;
|
|
18
|
+
execute: (args: unknown) => Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
export declare const harnessRepairTool: HarnessTool;
|
|
21
|
+
export declare const harnessManifestTool: HarnessTool;
|
|
22
|
+
export declare const harnessVerifyTool: HarnessTool;
|
|
23
|
+
export declare const HARNESS_TOOLS: readonly HarnessTool[];
|
|
24
|
+
/** Register all harness tools on a FastMCP-compatible server. */
|
|
25
|
+
export declare function registerHarnessTools(server: {
|
|
26
|
+
addTool: (tool: HarnessTool) => void;
|
|
27
|
+
}): void;
|
|
28
|
+
//# sourceMappingURL=harness-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/harness-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAaD,eAAO,MAAM,iBAAiB,EAAE,WA6B/B,CAAC;AAOF,eAAO,MAAM,mBAAmB,EAAE,WASjC,CAAC;AAgBF,eAAO,MAAM,iBAAiB,EAAE,WAS/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAgE,CAAC;AAEjH,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;CAAE,GAAG,IAAI,CAE3F"}
|