agentspeak-cli 0.9.0 → 0.10.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/dist/adapters/claude.d.ts +2 -1
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +11 -0
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/cursor-agent.d.ts +2 -1
- package/dist/adapters/cursor-agent.d.ts.map +1 -1
- package/dist/adapters/cursor-agent.js +11 -0
- package/dist/adapters/cursor-agent.js.map +1 -1
- package/dist/adapters/hermes.d.ts +4 -8
- package/dist/adapters/hermes.d.ts.map +1 -1
- package/dist/adapters/hermes.js +62 -10
- package/dist/adapters/hermes.js.map +1 -1
- package/dist/adapters/index.d.ts +14 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +12 -6
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/openclaw.d.ts +4 -8
- package/dist/adapters/openclaw.d.ts.map +1 -1
- package/dist/adapters/openclaw.js +58 -9
- package/dist/adapters/openclaw.js.map +1 -1
- package/dist/adapters/shell-helper.d.ts +16 -0
- package/dist/adapters/shell-helper.d.ts.map +1 -1
- package/dist/adapters/shell-helper.js +48 -0
- package/dist/adapters/shell-helper.js.map +1 -1
- package/dist/auto-shim.d.ts +19 -0
- package/dist/auto-shim.d.ts.map +1 -1
- package/dist/auto-shim.js +84 -33
- package/dist/auto-shim.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +100 -20
- package/dist/commands/run.js.map +1 -1
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +24 -1
- package/dist/exec.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Adapter } from './index.js';
|
|
1
|
+
import type { Adapter, ProbeResult } from './index.js';
|
|
2
2
|
/**
|
|
3
3
|
* `--via claude` — Anthropic Claude Code CLI.
|
|
4
4
|
*
|
|
@@ -10,4 +10,5 @@ import type { Adapter } from './index.js';
|
|
|
10
10
|
* pass the pre-attach gate.
|
|
11
11
|
*/
|
|
12
12
|
export declare const claudeAdapter: Adapter;
|
|
13
|
+
export declare function claudeProbe(): Promise<ProbeResult>;
|
|
13
14
|
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AAGtE;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,OAmB3B,CAAC;AAEF,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAWxD"}
|
package/dist/adapters/claude.js
CHANGED
|
@@ -26,6 +26,17 @@ export const claudeAdapter = async (ctx) => {
|
|
|
26
26
|
timeoutMs: ctx.timeoutMs,
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
|
+
export async function claudeProbe() {
|
|
30
|
+
const bin = which('claude');
|
|
31
|
+
if (!bin) {
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
detail: 'claude binary not found on PATH. ' +
|
|
35
|
+
'Install with `npm i -g @anthropic-ai/claude-code`, or pass --via echo / --via stdin.',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return { ok: true, detail: `found claude at ${bin}; will use \`claude -p\` per turn.` };
|
|
39
|
+
}
|
|
29
40
|
function ok(body, start) {
|
|
30
41
|
return { stdout: body, stderr: '', exitCode: 0, durationMs: Date.now() - start, timedOut: false };
|
|
31
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,aAAa,CAClB,QAAQ,EACR,GAAG,EACH,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;QACd,GAAG;QACH,IAAI,EAAE,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnD,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,EAAE,CAAC,IAAY,EAAE,KAAa;IACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC"}
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,aAAa,CAClB,QAAQ,EACR,GAAG,EACH,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;QACd,GAAG;QACH,IAAI,EAAE,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnD,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,mCAAmC;gBACnC,sFAAsF;SACzF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,GAAG,oCAAoC,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,EAAE,CAAC,IAAY,EAAE,KAAa;IACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Adapter } from './index.js';
|
|
1
|
+
import type { Adapter, ProbeResult } from './index.js';
|
|
2
2
|
/**
|
|
3
3
|
* `--via cursor-agent` — Cursor Agent CLI.
|
|
4
4
|
*
|
|
@@ -7,4 +7,5 @@ import type { Adapter } from './index.js';
|
|
|
7
7
|
* Cursor account and selected model — no API key plumbing required.
|
|
8
8
|
*/
|
|
9
9
|
export declare const cursorAgentAdapter: Adapter;
|
|
10
|
+
export declare function cursorAgentProbe(): Promise<ProbeResult>;
|
|
10
11
|
//# sourceMappingURL=cursor-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AAGtE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAmBhC,CAAC;AAEF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAW7D"}
|
|
@@ -23,6 +23,17 @@ export const cursorAgentAdapter = async (ctx) => {
|
|
|
23
23
|
timeoutMs: ctx.timeoutMs,
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
+
export async function cursorAgentProbe() {
|
|
27
|
+
const bin = which('cursor-agent');
|
|
28
|
+
if (!bin) {
|
|
29
|
+
return {
|
|
30
|
+
ok: false,
|
|
31
|
+
detail: 'cursor-agent binary not found on PATH. ' +
|
|
32
|
+
'Enable it via Cursor > Settings > Agent CLI, then re-run.',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return { ok: true, detail: `found cursor-agent at ${bin}; will use \`cursor-agent --print\` per turn.` };
|
|
36
|
+
}
|
|
26
37
|
function ok(body, start) {
|
|
27
38
|
return { stdout: body, stderr: '', exitCode: 0, durationMs: Date.now() - start, timedOut: false };
|
|
28
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/adapters/cursor-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,aAAa,CAClB,cAAc,EACd,GAAG,EACH,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;QACd,GAAG;QACH,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,WAAW,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnD,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,EAAE,CAAC,IAAY,EAAE,KAAa;IACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC"}
|
|
1
|
+
{"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/adapters/cursor-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,aAAa,CAClB,cAAc,EACd,GAAG,EACH,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;QACd,GAAG;QACH,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,WAAW,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnD,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,yCAAyC;gBACzC,2DAA2D;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,GAAG,+CAA+C,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,EAAE,CAAC,IAAY,EAAE,KAAa;IACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpG,CAAC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import type { Adapter } from './index.js';
|
|
2
|
-
/**
|
|
3
|
-
* `--via hermes` — Hermes runtime CLI bridge.
|
|
4
|
-
*
|
|
5
|
-
* Invocation: `hermes prompt` reads the prompt on stdin and prints the
|
|
6
|
-
* agent's reply. Detection prefers `which hermes` and falls back to
|
|
7
|
-
* `$HERMES_HOME/bin/hermes` so a pinned-install runtime still works.
|
|
8
|
-
*/
|
|
1
|
+
import type { Adapter, ProbeResult } from './index.js';
|
|
9
2
|
export declare const hermesAdapter: Adapter;
|
|
3
|
+
export declare function hermesProbe(): Promise<ProbeResult>;
|
|
4
|
+
/** Test-only: clear the cached verb between unit tests. */
|
|
5
|
+
export declare function __resetCachedVerb(): void;
|
|
10
6
|
//# sourceMappingURL=hermes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AA+BtE,eAAO,MAAM,aAAa,EAAE,OAiC3B,CAAC;AAEF,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAqBxD;AAMD,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
package/dist/adapters/hermes.js
CHANGED
|
@@ -1,33 +1,85 @@
|
|
|
1
1
|
import { renderPromptFromEnvelope } from './index.js';
|
|
2
|
-
import { binaryMissing, shellOut, which } from './shell-helper.js';
|
|
2
|
+
import { binaryMissing, pickSubcommand, probeHelp, shellOut, which } from './shell-helper.js';
|
|
3
3
|
/**
|
|
4
4
|
* `--via hermes` — Hermes runtime CLI bridge.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Hermes does NOT ship a `prompt` subcommand (the previous adapter
|
|
7
|
+
* version assumed it did, which silently passed every smoke test and
|
|
8
|
+
* exit-2'd every real turn — see meet_qgCvGEsNjmUiY0hUwR9F6w). The
|
|
9
|
+
* actual surface is `hermes chat`. We probe `--help` once on attach
|
|
10
|
+
* and pick the first matching subcommand from KNOWN_VERBS so future
|
|
11
|
+
* Hermes versions that rename the chat command keep working.
|
|
9
12
|
*/
|
|
13
|
+
const KNOWN_VERBS = ['chat', 'prompt', 'reply', 'message'];
|
|
14
|
+
let cachedVerb = null;
|
|
15
|
+
function locateBinary() {
|
|
16
|
+
let bin = which('hermes');
|
|
17
|
+
if (!bin && process.env.HERMES_HOME) {
|
|
18
|
+
bin = `${process.env.HERMES_HOME.replace(/\/$/, '')}/bin/hermes`;
|
|
19
|
+
}
|
|
20
|
+
return bin;
|
|
21
|
+
}
|
|
22
|
+
async function detectVerb(bin) {
|
|
23
|
+
if (cachedVerb)
|
|
24
|
+
return cachedVerb;
|
|
25
|
+
const help = await probeHelp(bin);
|
|
26
|
+
cachedVerb = pickSubcommand(help, KNOWN_VERBS);
|
|
27
|
+
return cachedVerb;
|
|
28
|
+
}
|
|
10
29
|
export const hermesAdapter = async (ctx) => {
|
|
11
30
|
const start = Date.now();
|
|
12
31
|
if (ctx.smokeTest) {
|
|
13
32
|
return ok('[smoke ok]', start);
|
|
14
33
|
}
|
|
15
|
-
|
|
16
|
-
if (!bin && process.env.HERMES_HOME) {
|
|
17
|
-
const candidate = `${process.env.HERMES_HOME.replace(/\/$/, '')}/bin/hermes`;
|
|
18
|
-
bin = candidate;
|
|
19
|
-
}
|
|
34
|
+
const bin = locateBinary();
|
|
20
35
|
if (!bin) {
|
|
21
36
|
return binaryMissing('hermes', ctx, 'Set HERMES_HOME or put the `hermes` binary on PATH; or pass --via stdin / --via echo.');
|
|
22
37
|
}
|
|
38
|
+
const verb = await detectVerb(bin);
|
|
39
|
+
if (!verb) {
|
|
40
|
+
return {
|
|
41
|
+
stdout: '',
|
|
42
|
+
stderr: `hermes adapter: this Hermes install does not expose any subcommand AgentSpeak knows how to drive ` +
|
|
43
|
+
`(tried: ${KNOWN_VERBS.join(', ')}). Run \`hermes --help\` to see the actual subcommand list, ` +
|
|
44
|
+
`then pass --via stdin and pipe the prompt yourself, or open an issue at ` +
|
|
45
|
+
`https://github.com/PhilipAD/agentspeak/issues with your hermes --help output.`,
|
|
46
|
+
exitCode: 127,
|
|
47
|
+
durationMs: Date.now() - start,
|
|
48
|
+
timedOut: false,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
23
51
|
return shellOut({
|
|
24
52
|
bin,
|
|
25
|
-
args: [
|
|
53
|
+
args: [verb],
|
|
26
54
|
promptStdin: renderPromptFromEnvelope(ctx.envelope),
|
|
27
55
|
timeoutMs: ctx.timeoutMs,
|
|
28
56
|
});
|
|
29
57
|
};
|
|
58
|
+
export async function hermesProbe() {
|
|
59
|
+
const bin = locateBinary();
|
|
60
|
+
if (!bin) {
|
|
61
|
+
return {
|
|
62
|
+
ok: false,
|
|
63
|
+
detail: 'hermes binary not found on PATH and HERMES_HOME unset. ' +
|
|
64
|
+
'Install hermes-cli or pass --via stdin / --via echo.',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const verb = await detectVerb(bin);
|
|
68
|
+
if (!verb) {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
detail: `hermes is installed at ${bin} but its --help output does not advertise any of the ` +
|
|
72
|
+
`subcommands AgentSpeak knows how to drive (${KNOWN_VERBS.join(', ')}). ` +
|
|
73
|
+
`Switch to --via stdin or pipe through your own --exec shim.`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { ok: true, detail: `found hermes at ${bin}; will use \`hermes ${verb}\` per turn.` };
|
|
77
|
+
}
|
|
30
78
|
function ok(body, start) {
|
|
31
79
|
return { stdout: body, stderr: '', exitCode: 0, durationMs: Date.now() - start, timedOut: false };
|
|
32
80
|
}
|
|
81
|
+
/** Test-only: clear the cached verb between unit tests. */
|
|
82
|
+
export function __resetCachedVerb() {
|
|
83
|
+
cachedVerb = null;
|
|
84
|
+
}
|
|
33
85
|
//# sourceMappingURL=hermes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -44,6 +44,11 @@ export interface AdapterResult {
|
|
|
44
44
|
timedOut: boolean;
|
|
45
45
|
}
|
|
46
46
|
export type Adapter = (ctx: AdapterCtx) => Promise<AdapterResult>;
|
|
47
|
+
export interface ProbeResult {
|
|
48
|
+
ok: boolean;
|
|
49
|
+
/** Human-readable explanation: "found hermes at /usr/bin/hermes; will use `hermes chat`". */
|
|
50
|
+
detail: string;
|
|
51
|
+
}
|
|
47
52
|
export interface AdapterDescriptor {
|
|
48
53
|
name: string;
|
|
49
54
|
summary: string;
|
|
@@ -54,6 +59,15 @@ export interface AdapterDescriptor {
|
|
|
54
59
|
*/
|
|
55
60
|
requiresBinary?: string;
|
|
56
61
|
adapter: Adapter;
|
|
62
|
+
/**
|
|
63
|
+
* Optional pre-attach probe. Called by cmdRun's smoke-test gate INSTEAD
|
|
64
|
+
* of running the adapter with `smokeTest=true`. Adapters that shell out
|
|
65
|
+
* to a third-party binary (hermes/openclaw/claude/cursor-agent) MUST
|
|
66
|
+
* implement this so the pre-attach gate verifies the right subcommand
|
|
67
|
+
* actually exists — preventing the "smoke OK, every real turn fails"
|
|
68
|
+
* trap.
|
|
69
|
+
*/
|
|
70
|
+
probe?: () => Promise<ProbeResult>;
|
|
57
71
|
}
|
|
58
72
|
export declare const ADAPTERS: Record<string, AdapterDescriptor>;
|
|
59
73
|
export declare function resolveAdapter(name: string): AdapterDescriptor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA6CtD,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAQ9D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAOzC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAoCtE"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { echoAdapter } from './echo.js';
|
|
2
2
|
import { stdinAdapter } from './stdin.js';
|
|
3
|
-
import { claudeAdapter } from './claude.js';
|
|
4
|
-
import { cursorAgentAdapter } from './cursor-agent.js';
|
|
5
|
-
import { hermesAdapter } from './hermes.js';
|
|
6
|
-
import { openclawAdapter } from './openclaw.js';
|
|
3
|
+
import { claudeAdapter, claudeProbe } from './claude.js';
|
|
4
|
+
import { cursorAgentAdapter, cursorAgentProbe } from './cursor-agent.js';
|
|
5
|
+
import { hermesAdapter, hermesProbe } from './hermes.js';
|
|
6
|
+
import { openclawAdapter, openclawProbe } from './openclaw.js';
|
|
7
7
|
export const ADAPTERS = {
|
|
8
8
|
echo: {
|
|
9
9
|
name: 'echo',
|
|
@@ -21,24 +21,30 @@ export const ADAPTERS = {
|
|
|
21
21
|
summary: 'Exec `claude -p` (Anthropic Claude Code CLI). Requires the `claude` binary on PATH.',
|
|
22
22
|
requiresBinary: 'claude',
|
|
23
23
|
adapter: claudeAdapter,
|
|
24
|
+
probe: claudeProbe,
|
|
24
25
|
},
|
|
25
26
|
'cursor-agent': {
|
|
26
27
|
name: 'cursor-agent',
|
|
27
28
|
summary: 'Exec `cursor-agent --print`. Requires the `cursor-agent` binary on PATH.',
|
|
28
29
|
requiresBinary: 'cursor-agent',
|
|
29
30
|
adapter: cursorAgentAdapter,
|
|
31
|
+
probe: cursorAgentProbe,
|
|
30
32
|
},
|
|
31
33
|
hermes: {
|
|
32
34
|
name: 'hermes',
|
|
33
|
-
summary: 'Exec `hermes prompt
|
|
35
|
+
summary: 'Exec `hermes <chat|prompt|reply>` (Hermes runtime CLI; verb auto-detected from --help). ' +
|
|
36
|
+
'Requires `hermes` on PATH or HERMES_HOME set.',
|
|
34
37
|
requiresBinary: 'hermes',
|
|
35
38
|
adapter: hermesAdapter,
|
|
39
|
+
probe: hermesProbe,
|
|
36
40
|
},
|
|
37
41
|
openclaw: {
|
|
38
42
|
name: 'openclaw',
|
|
39
|
-
summary: 'Exec `openclaw prompt
|
|
43
|
+
summary: 'Exec `openclaw <chat|run|prompt>` (OpenClaw runtime CLI; verb auto-detected from --help). ' +
|
|
44
|
+
'Requires `openclaw` on PATH or OPENCLAW_HOME set.',
|
|
40
45
|
requiresBinary: 'openclaw',
|
|
41
46
|
adapter: openclawAdapter,
|
|
47
|
+
probe: openclawProbe,
|
|
42
48
|
},
|
|
43
49
|
};
|
|
44
50
|
export function resolveAdapter(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import type { Adapter } from './index.js';
|
|
2
|
-
/**
|
|
3
|
-
* `--via openclaw` — OpenClaw runtime CLI bridge.
|
|
4
|
-
*
|
|
5
|
-
* Invocation: `openclaw prompt` reads the prompt on stdin and prints the
|
|
6
|
-
* agent's reply. Falls back to `$OPENCLAW_HOME/bin/openclaw` when the
|
|
7
|
-
* binary is not on PATH (mirrors the hermes adapter).
|
|
8
|
-
*/
|
|
1
|
+
import type { Adapter, ProbeResult } from './index.js';
|
|
9
2
|
export declare const openclawAdapter: Adapter;
|
|
3
|
+
export declare function openclawProbe(): Promise<ProbeResult>;
|
|
4
|
+
/** Test-only: clear the cached verb between unit tests. */
|
|
5
|
+
export declare function __resetCachedVerb(): void;
|
|
10
6
|
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AA4BtE,eAAO,MAAM,eAAe,EAAE,OAgC7B,CAAC;AAEF,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CAqB1D;AAMD,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -1,32 +1,81 @@
|
|
|
1
1
|
import { renderPromptFromEnvelope } from './index.js';
|
|
2
|
-
import { binaryMissing, shellOut, which } from './shell-helper.js';
|
|
2
|
+
import { binaryMissing, pickSubcommand, probeHelp, shellOut, which } from './shell-helper.js';
|
|
3
3
|
/**
|
|
4
4
|
* `--via openclaw` — OpenClaw runtime CLI bridge.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Like hermes, OpenClaw's exact subcommand verb varies by version
|
|
7
|
+
* (`run`, `chat`, `prompt`, ...). Probe `--help` once on attach and pick
|
|
8
|
+
* the first match, so a future rename does not silently break.
|
|
9
9
|
*/
|
|
10
|
+
const KNOWN_VERBS = ['chat', 'run', 'prompt', 'reply', 'message'];
|
|
11
|
+
let cachedVerb = null;
|
|
12
|
+
function locateBinary() {
|
|
13
|
+
let bin = which('openclaw');
|
|
14
|
+
if (!bin && process.env.OPENCLAW_HOME) {
|
|
15
|
+
bin = `${process.env.OPENCLAW_HOME.replace(/\/$/, '')}/bin/openclaw`;
|
|
16
|
+
}
|
|
17
|
+
return bin;
|
|
18
|
+
}
|
|
19
|
+
async function detectVerb(bin) {
|
|
20
|
+
if (cachedVerb)
|
|
21
|
+
return cachedVerb;
|
|
22
|
+
const help = await probeHelp(bin);
|
|
23
|
+
cachedVerb = pickSubcommand(help, KNOWN_VERBS);
|
|
24
|
+
return cachedVerb;
|
|
25
|
+
}
|
|
10
26
|
export const openclawAdapter = async (ctx) => {
|
|
11
27
|
const start = Date.now();
|
|
12
28
|
if (ctx.smokeTest) {
|
|
13
29
|
return ok('[smoke ok]', start);
|
|
14
30
|
}
|
|
15
|
-
|
|
16
|
-
if (!bin && process.env.OPENCLAW_HOME) {
|
|
17
|
-
bin = `${process.env.OPENCLAW_HOME.replace(/\/$/, '')}/bin/openclaw`;
|
|
18
|
-
}
|
|
31
|
+
const bin = locateBinary();
|
|
19
32
|
if (!bin) {
|
|
20
33
|
return binaryMissing('openclaw', ctx, 'Set OPENCLAW_HOME or put the `openclaw` binary on PATH; or pass --via stdin / --via echo.');
|
|
21
34
|
}
|
|
35
|
+
const verb = await detectVerb(bin);
|
|
36
|
+
if (!verb) {
|
|
37
|
+
return {
|
|
38
|
+
stdout: '',
|
|
39
|
+
stderr: `openclaw adapter: this OpenClaw install does not expose any subcommand AgentSpeak knows how to drive ` +
|
|
40
|
+
`(tried: ${KNOWN_VERBS.join(', ')}). Run \`openclaw --help\` to see the actual subcommand list, ` +
|
|
41
|
+
`then pass --via stdin and pipe the prompt yourself.`,
|
|
42
|
+
exitCode: 127,
|
|
43
|
+
durationMs: Date.now() - start,
|
|
44
|
+
timedOut: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
22
47
|
return shellOut({
|
|
23
48
|
bin,
|
|
24
|
-
args: [
|
|
49
|
+
args: [verb],
|
|
25
50
|
promptStdin: renderPromptFromEnvelope(ctx.envelope),
|
|
26
51
|
timeoutMs: ctx.timeoutMs,
|
|
27
52
|
});
|
|
28
53
|
};
|
|
54
|
+
export async function openclawProbe() {
|
|
55
|
+
const bin = locateBinary();
|
|
56
|
+
if (!bin) {
|
|
57
|
+
return {
|
|
58
|
+
ok: false,
|
|
59
|
+
detail: 'openclaw binary not found on PATH and OPENCLAW_HOME unset. ' +
|
|
60
|
+
'Install openclaw-cli or pass --via stdin / --via echo.',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const verb = await detectVerb(bin);
|
|
64
|
+
if (!verb) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
detail: `openclaw is installed at ${bin} but its --help output does not advertise any of the ` +
|
|
68
|
+
`subcommands AgentSpeak knows how to drive (${KNOWN_VERBS.join(', ')}). ` +
|
|
69
|
+
`Switch to --via stdin or pipe through your own --exec shim.`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return { ok: true, detail: `found openclaw at ${bin}; will use \`openclaw ${verb}\` per turn.` };
|
|
73
|
+
}
|
|
29
74
|
function ok(body, start) {
|
|
30
75
|
return { stdout: body, stderr: '', exitCode: 0, durationMs: Date.now() - start, timedOut: false };
|
|
31
76
|
}
|
|
77
|
+
/** Test-only: clear the cached verb between unit tests. */
|
|
78
|
+
export function __resetCachedVerb() {
|
|
79
|
+
cachedVerb = null;
|
|
80
|
+
}
|
|
32
81
|
//# sourceMappingURL=openclaw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,22 @@ export interface ShellOutOpts {
|
|
|
23
23
|
* error capture stay identical.
|
|
24
24
|
*/
|
|
25
25
|
export declare function shellOut(opts: ShellOutOpts): Promise<AdapterResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Run a binary with `--help` and return its captured stdout+stderr.
|
|
28
|
+
* Used by built-in adapters to discover the real subcommand verb on the
|
|
29
|
+
* installed runtime instead of assuming a hard-coded one. Hermes ships
|
|
30
|
+
* `chat` (no `prompt`); OpenClaw ships `run`, etc. Probing once on
|
|
31
|
+
* attach prevents the "looks fine in smoke test, fails on every real
|
|
32
|
+
* turn" failure mode that burned Yaow's invite on inv_fIs8aYZYBw9FVMI9CRBJ1Q.
|
|
33
|
+
*/
|
|
34
|
+
export declare function probeHelp(bin: string, timeoutMs?: number): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Pick the first subcommand from `candidates` that appears in the
|
|
37
|
+
* binary's `--help` output. Returns null if none match — the caller
|
|
38
|
+
* should surface a clear "this runtime does not expose any of the
|
|
39
|
+
* subcommands AgentSpeak knows how to drive" error.
|
|
40
|
+
*/
|
|
41
|
+
export declare function pickSubcommand(help: string, candidates: readonly string[]): string | null;
|
|
26
42
|
/**
|
|
27
43
|
* Standardised "binary not found" failure surfaced by every shell-out
|
|
28
44
|
* adapter so the smoke test's [SHIM-FAIL] hint can recommend the right
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-helper.d.ts","sourceRoot":"","sources":["../../src/adapters/shell-helper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAehD;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA6CzE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAYzF"}
|
|
1
|
+
{"version":3,"file":"shell-helper.d.ts","sourceRoot":"","sources":["../../src/adapters/shell-helper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAehD;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA6CzE;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB9E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAYzF"}
|
|
@@ -79,6 +79,54 @@ export async function shellOut(opts) {
|
|
|
79
79
|
clearTimeout(timer);
|
|
80
80
|
return { stdout, stderr, exitCode, durationMs: Date.now() - start, timedOut };
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Run a binary with `--help` and return its captured stdout+stderr.
|
|
84
|
+
* Used by built-in adapters to discover the real subcommand verb on the
|
|
85
|
+
* installed runtime instead of assuming a hard-coded one. Hermes ships
|
|
86
|
+
* `chat` (no `prompt`); OpenClaw ships `run`, etc. Probing once on
|
|
87
|
+
* attach prevents the "looks fine in smoke test, fails on every real
|
|
88
|
+
* turn" failure mode that burned Yaow's invite on inv_fIs8aYZYBw9FVMI9CRBJ1Q.
|
|
89
|
+
*/
|
|
90
|
+
export async function probeHelp(bin, timeoutMs = 5000) {
|
|
91
|
+
const start = Date.now();
|
|
92
|
+
const proc = spawn(bin, ['--help'], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
93
|
+
let buf = '';
|
|
94
|
+
proc.stdout.on('data', (c) => {
|
|
95
|
+
buf += c.toString('utf8');
|
|
96
|
+
});
|
|
97
|
+
proc.stderr.on('data', (c) => {
|
|
98
|
+
buf += c.toString('utf8');
|
|
99
|
+
});
|
|
100
|
+
const timer = setTimeout(() => {
|
|
101
|
+
try {
|
|
102
|
+
proc.kill('SIGKILL');
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// ignore
|
|
106
|
+
}
|
|
107
|
+
}, timeoutMs);
|
|
108
|
+
await new Promise((resolve) => {
|
|
109
|
+
proc.on('exit', () => resolve());
|
|
110
|
+
proc.on('error', () => resolve());
|
|
111
|
+
});
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
void start;
|
|
114
|
+
return buf;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Pick the first subcommand from `candidates` that appears in the
|
|
118
|
+
* binary's `--help` output. Returns null if none match — the caller
|
|
119
|
+
* should surface a clear "this runtime does not expose any of the
|
|
120
|
+
* subcommands AgentSpeak knows how to drive" error.
|
|
121
|
+
*/
|
|
122
|
+
export function pickSubcommand(help, candidates) {
|
|
123
|
+
for (const c of candidates) {
|
|
124
|
+
const re = new RegExp(`(?:^|[\\s,'"\\(\\|\\[])${c}(?=[\\s,'"\\)\\|\\]]|$)`, 'm');
|
|
125
|
+
if (re.test(help))
|
|
126
|
+
return c;
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
82
130
|
/**
|
|
83
131
|
* Standardised "binary not found" failure surfaced by every shell-out
|
|
84
132
|
* adapter so the smoke test's [SHIM-FAIL] hint can recommend the right
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-helper.js","sourceRoot":"","sources":["../../src/adapters/shell-helper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shell-helper.js","sourceRoot":"","sources":["../../src/adapters/shell-helper.ts"],"names":[],"mappings":"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"}
|
package/dist/auto-shim.d.ts
CHANGED
|
@@ -35,4 +35,23 @@ export declare function autoShimPaths(): {
|
|
|
35
35
|
export declare function writeAutoShim(opts?: {
|
|
36
36
|
force?: boolean;
|
|
37
37
|
}): AutoShimResult;
|
|
38
|
+
/**
|
|
39
|
+
* Hardened reply shim. Lines marked with `# EDIT ME` are the only
|
|
40
|
+
* places the operator should change to wire in their LLM client. The
|
|
41
|
+
* smoke-test short-circuit MUST stay above the EDIT ME block so the
|
|
42
|
+
* cmdRun pre-attach gate continues to pass even with a half-written
|
|
43
|
+
* customisation.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* After this many DEFAULT (unedited) replies, the auto-shim self-quits
|
|
47
|
+
* the meeting with `signal=done`. This is the fix for Ernesto's
|
|
48
|
+
* similarity-loop trap (meet_qgCvGEsNjmUiY0hUwR9F6w): an unedited
|
|
49
|
+
* auto-shim repeatedly emitted "[ack] turn N" content which the
|
|
50
|
+
* coordinator's similarity detector quickly flagged as a recap-worthy
|
|
51
|
+
* loop. Self-quitting on turn 3 means a user who hasn't wired in their
|
|
52
|
+
* LLM yet still leaves the meeting in a clean `completed` state with
|
|
53
|
+
* an explanatory final turn, instead of triggering a recap and
|
|
54
|
+
* stalling everyone else.
|
|
55
|
+
*/
|
|
56
|
+
export declare const AUTO_SHIM_SELF_QUIT_AFTER = 3;
|
|
38
57
|
//# sourceMappingURL=auto-shim.d.ts.map
|
package/dist/auto-shim.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-shim.d.ts","sourceRoot":"","sources":["../src/auto-shim.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMtE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CA4B5E"}
|
|
1
|
+
{"version":3,"file":"auto-shim.d.ts","sourceRoot":"","sources":["../src/auto-shim.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMtE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CA4B5E;AAED;;;;;;GAMG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC"}
|