agim-cli 1.2.96 → 1.2.98
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 +92 -0
- package/bin/agim_rpc.py +140 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/llm/agent-loop.d.ts +17 -1
- package/dist/core/llm/agent-loop.d.ts.map +1 -1
- package/dist/core/llm/agent-loop.js +64 -0
- package/dist/core/llm/agent-loop.js.map +1 -1
- package/dist/core/llm/agim-rpc-server.d.ts +42 -0
- package/dist/core/llm/agim-rpc-server.d.ts.map +1 -0
- package/dist/core/llm/agim-rpc-server.js +283 -0
- package/dist/core/llm/agim-rpc-server.js.map +1 -0
- package/dist/core/llm/exec-dispatcher.d.ts +15 -0
- package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/exec-dispatcher.js +24 -2
- package/dist/core/llm/exec-dispatcher.js.map +1 -1
- package/dist/core/llm/goal-critic.d.ts +47 -0
- package/dist/core/llm/goal-critic.d.ts.map +1 -0
- package/dist/core/llm/goal-critic.js +168 -0
- package/dist/core/llm/goal-critic.js.map +1 -0
- package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/imhub-dispatcher.js +134 -0
- package/dist/core/llm/imhub-dispatcher.js.map +1 -1
- package/dist/plugins/agents/native/index.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.js +122 -2
- package/dist/plugins/agents/native/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -24,7 +24,11 @@ export declare const alwaysAllowGate: ApprovalGate;
|
|
|
24
24
|
* this break a stuck model would burn the full
|
|
25
25
|
* IMHUB_NATIVE_AGENT_MAX_ITER budget; stopping early saves cost AND
|
|
26
26
|
* gives the user a much more actionable recap. */
|
|
27
|
-
|
|
27
|
+
/** - `off_track` (v1.2.98): goal-critic flagged the recent tool chain
|
|
28
|
+
* as semantically off-target for the user's prompt / active goal.
|
|
29
|
+
* Different from stuck_loop (mechanical repeat) — this catches the
|
|
30
|
+
* "different calls but still pointless" failure mode. */
|
|
31
|
+
export type LoopFinishReason = FinishReason | 'max_iterations' | 'aborted' | 'stuck_loop' | 'off_track';
|
|
28
32
|
export interface AgentLoopInput {
|
|
29
33
|
provider: LlmProvider;
|
|
30
34
|
/** Optional system prompt prepended ONCE; never re-issued across
|
|
@@ -76,6 +80,18 @@ export interface AgentLoopInput {
|
|
|
76
80
|
channelId: string;
|
|
77
81
|
threadId: string;
|
|
78
82
|
};
|
|
83
|
+
/** v1.2.98 — anchors handed to the goal-critic when it fires.
|
|
84
|
+
* `prompt` is the user's current-turn input string; `goalTitle` +
|
|
85
|
+
* `goalBody` come from goals.getActiveGoal for this thread (caller
|
|
86
|
+
* fetches once; loop just relays). Either may be empty — critic
|
|
87
|
+
* refuses to judge if both are. Leaving criticAnchor unset (or
|
|
88
|
+
* setting IMHUB_NATIVE_CRITIC=off) disables the critic for this
|
|
89
|
+
* invocation. */
|
|
90
|
+
criticAnchor?: {
|
|
91
|
+
prompt?: string;
|
|
92
|
+
goalTitle?: string;
|
|
93
|
+
goalBody?: string;
|
|
94
|
+
};
|
|
79
95
|
/** Lifecycle hooks for caller-side observability (heartbeats, progress
|
|
80
96
|
* push, custom logging). All hooks are best-effort: thrown errors are
|
|
81
97
|
* swallowed so a faulty observer cannot break the loop. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/core/llm/agent-loop.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,QAAQ,EACR,eAAe,EACf,UAAU,EACV,OAAO,EACR,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../../src/core/llm/agent-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,9 +45,17 @@
|
|
|
45
45
|
// iteration vs spread evenly).
|
|
46
46
|
import { logger as rootLogger } from '../logger.js';
|
|
47
47
|
import { logInvocation } from '../audit-log.js';
|
|
48
|
+
import { runGoalCritic } from './goal-critic.js';
|
|
48
49
|
const log = rootLogger.child({ component: 'agent-loop' });
|
|
49
50
|
const DEFAULT_MAX_ITERATIONS = 20;
|
|
50
51
|
const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 min — generous; signal usually fires first
|
|
52
|
+
// v1.2.98 — goal-critic firing schedule. Thresholds chosen empirically:
|
|
53
|
+
// fewer than 5 tool calls = not enough trail to judge; more often than
|
|
54
|
+
// every 5 tool calls = critic itself becomes too noisy. Per-turn cap
|
|
55
|
+
// of 2 keeps a runaway critic from compounding cost on a hot turn.
|
|
56
|
+
const CRITIC_MIN_TOOL_CALLS = 5;
|
|
57
|
+
const CRITIC_EVERY_N = 5;
|
|
58
|
+
const CRITIC_MAX_CALLS = 2;
|
|
51
59
|
/** Default: skip approval entirely. The agent loop is safe-by-default
|
|
52
60
|
* for tests and the introspection use case; production AgentAdapters
|
|
53
61
|
* should pass a real gate. */
|
|
@@ -77,6 +85,8 @@ export async function runAgentLoop(input) {
|
|
|
77
85
|
const history = input.messages.slice();
|
|
78
86
|
const toolCalls = [];
|
|
79
87
|
const usageAcc = {};
|
|
88
|
+
// v1.2.98 — goal-critic per-turn fire counter (capped at CRITIC_MAX_CALLS).
|
|
89
|
+
let criticCallsFired = 0;
|
|
80
90
|
let iter = 0;
|
|
81
91
|
for (; iter < maxIter; iter++) {
|
|
82
92
|
if (signal.signal.aborted) {
|
|
@@ -257,6 +267,60 @@ export async function runAgentLoop(input) {
|
|
|
257
267
|
};
|
|
258
268
|
}
|
|
259
269
|
}
|
|
270
|
+
// v1.2.98 — goal-critic check (semantic stuck-loop / off-track).
|
|
271
|
+
// Fires when:
|
|
272
|
+
// · caller supplied a criticAnchor (prompt or active goal)
|
|
273
|
+
// · we've executed at least MIN_TOOL_CALLS tool calls this turn
|
|
274
|
+
// · we haven't already fired the critic MAX_CRITIC_CALLS times
|
|
275
|
+
// · we're on a "trigger" mark (every CRITIC_EVERY_N tool calls)
|
|
276
|
+
// The critic itself decides whether to break (onTrack=false) or
|
|
277
|
+
// let the loop continue. It returns onTrack=true on errors so a
|
|
278
|
+
// provider hiccup never accidentally kills a working turn.
|
|
279
|
+
if (input.criticAnchor
|
|
280
|
+
&& toolCalls.length >= CRITIC_MIN_TOOL_CALLS
|
|
281
|
+
&& criticCallsFired < CRITIC_MAX_CALLS
|
|
282
|
+
&& (toolCalls.length - CRITIC_MIN_TOOL_CALLS) % CRITIC_EVERY_N === 0) {
|
|
283
|
+
criticCallsFired += 1;
|
|
284
|
+
const recent = toolCalls.slice(-10);
|
|
285
|
+
const verdict = await runGoalCritic({
|
|
286
|
+
prompt: input.criticAnchor.prompt,
|
|
287
|
+
goalTitle: input.criticAnchor.goalTitle,
|
|
288
|
+
goalBody: input.criticAnchor.goalBody,
|
|
289
|
+
recentToolCalls: recent,
|
|
290
|
+
}, { signal: signal.signal });
|
|
291
|
+
log.info({
|
|
292
|
+
event: 'agent-loop.goal_critic_verdict',
|
|
293
|
+
iter,
|
|
294
|
+
totalToolCalls: toolCalls.length,
|
|
295
|
+
onTrack: verdict.onTrack,
|
|
296
|
+
reason: verdict.reason,
|
|
297
|
+
modelUsed: verdict.modelUsed,
|
|
298
|
+
});
|
|
299
|
+
if (!verdict.onTrack) {
|
|
300
|
+
log.warn({
|
|
301
|
+
event: 'agent-loop.off_track_detected',
|
|
302
|
+
iter,
|
|
303
|
+
reason: verdict.reason,
|
|
304
|
+
redirect: verdict.redirect,
|
|
305
|
+
}, `goal-critic flagged off-track at iter ${iter}: ${verdict.reason}`);
|
|
306
|
+
signal.cleanup();
|
|
307
|
+
return {
|
|
308
|
+
text: '',
|
|
309
|
+
iterations: iter + 1,
|
|
310
|
+
toolCalls,
|
|
311
|
+
usage: usageAcc,
|
|
312
|
+
finishReason: 'off_track',
|
|
313
|
+
// Smuggle the critic's reason + redirect into `error` so
|
|
314
|
+
// the native adapter can surface it verbatim in the recap
|
|
315
|
+
// without re-importing goal-critic. Yes, abusing `error`
|
|
316
|
+
// for non-error info is mildly ugly; alternative is adding
|
|
317
|
+
// a new field to AgentLoopResult — overkill for one knob.
|
|
318
|
+
error: verdict.redirect
|
|
319
|
+
? `${verdict.reason} || redirect: ${verdict.redirect}`
|
|
320
|
+
: verdict.reason,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
}
|
|
260
324
|
}
|
|
261
325
|
// Loop tail → next iteration calls provider with appended history.
|
|
262
326
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../../src/core/llm/agent-loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../../src/core/llm/agent-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Server } from 'node:http';
|
|
2
|
+
export interface RpcContext {
|
|
3
|
+
platform: string;
|
|
4
|
+
channelId: string;
|
|
5
|
+
threadId: string;
|
|
6
|
+
userId: string;
|
|
7
|
+
}
|
|
8
|
+
interface TokenEntry {
|
|
9
|
+
ctx: RpcContext;
|
|
10
|
+
/** ms-epoch expiry. After this time the token is rejected. */
|
|
11
|
+
expiresAt: number;
|
|
12
|
+
/** Where the token was minted from — purely for diagnostic logs. */
|
|
13
|
+
origin: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Mint a new RPC token bound to a specific IM thread. Returns the hex
|
|
17
|
+
* token + the socket path subprocesses should connect to. Callers
|
|
18
|
+
* should pass these to spawn() via env so the child inherits them
|
|
19
|
+
* unconditionally (and not via argv — argv shows up in `ps`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function mintRpcToken(ctx: RpcContext, origin?: string): {
|
|
22
|
+
token: string;
|
|
23
|
+
socketPath: string;
|
|
24
|
+
expiresAt: number;
|
|
25
|
+
};
|
|
26
|
+
/** Revoke a token explicitly. Token registry is also pruned on a
|
|
27
|
+
* periodic sweep, so revoke is best-effort cleanup, not required. */
|
|
28
|
+
export declare function revokeRpcToken(token: string): void;
|
|
29
|
+
export declare function resolveSocketPath(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Start the local RPC server on a Unix socket. Idempotent — repeated
|
|
32
|
+
* calls return the same handle. Best-effort: a failure to start (e.g.
|
|
33
|
+
* permission denied on the socket path) logs at warn and resolves to
|
|
34
|
+
* `null` so the rest of agim boots normally.
|
|
35
|
+
*/
|
|
36
|
+
export declare function startRpcServer(): Promise<Server | null>;
|
|
37
|
+
/** Graceful shutdown — called on SIGTERM. */
|
|
38
|
+
export declare function stopRpcServer(): Promise<void>;
|
|
39
|
+
/** Internal-only — used by tests to snapshot token state. */
|
|
40
|
+
export declare function _peekTokensForTests(): Map<string, TokenEntry>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=agim-rpc-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agim-rpc-server.d.ts","sourceRoot":"","sources":["../../../src/core/llm/agim-rpc-server.ts"],"names":[],"mappings":"AAqCA,OAAO,EAA+E,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAcpH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,UAAU,CAAA;IACf,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAA;CACf;AA0BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAK9H;AAED;sEACsE;AACtE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AASD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAKD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgC7D;AAED,6CAA6C;AAC7C,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAOnD;AA0HD,6DAA6D;AAC7D,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAE7D"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// agim-rpc-server — local RPC bridge for bgjob-spawned subprocesses.
|
|
2
|
+
//
|
|
3
|
+
// Why this exists (v1.2.97, borrowed from Hermes Agent's "Python script
|
|
4
|
+
// via RPC" pattern):
|
|
5
|
+
// When `native` faces a task that requires many similar tool calls
|
|
6
|
+
// (e.g. "fetch financial data for 50 stocks, write the result to a
|
|
7
|
+
// CSV, then email me"), running 50 mcp__imhub__* calls in a chat turn
|
|
8
|
+
// means 50 LLM round-trips and a real chance of hitting either the
|
|
9
|
+
// stuck-loop detector (v1.2.95) or the iteration cap. The right shape
|
|
10
|
+
// for that work is: the model writes ONE Python script, that script
|
|
11
|
+
// runs in a bgjob detached worker, and the worker calls back into
|
|
12
|
+
// agim's tool surface via local IPC. agim pays one round-trip
|
|
13
|
+
// instead of fifty.
|
|
14
|
+
//
|
|
15
|
+
// Surface (just enough):
|
|
16
|
+
// - POST {socket}/rpc/<toolName>
|
|
17
|
+
// - Header X-Agim-Rpc-Token: <hex>
|
|
18
|
+
// - Body { args: Record<string, unknown> }
|
|
19
|
+
// - Reply { ok: true, result } | { ok: false, error, status }
|
|
20
|
+
//
|
|
21
|
+
// Security model:
|
|
22
|
+
// - Unix-domain socket only (no TCP port; cannot be reached from a
|
|
23
|
+
// different host). File mode 0600 owned by the agim process user.
|
|
24
|
+
// - Per-process auth token, minted on demand and bound to a single
|
|
25
|
+
// RunContext (platform / channelId / threadId / userId). A subprocess
|
|
26
|
+
// that knows the token can ONLY drive that one IM thread — it
|
|
27
|
+
// cannot spam push_message into someone else's thread.
|
|
28
|
+
// - Tool whitelist hard-coded to read-only / write-safe imhub MCP
|
|
29
|
+
// tools. Operators can extend via IMHUB_RPC_ALLOWED_TOOLS env.
|
|
30
|
+
// native_exec / fs writes / call_agent / long_task are NOT exposed
|
|
31
|
+
// — the bgjob worker already has a shell, no need to indirect.
|
|
32
|
+
//
|
|
33
|
+
// Limits intentionally NOT in MVP:
|
|
34
|
+
// - Per-token rate limit (TODO when first noisy bgjob shows up)
|
|
35
|
+
// - Per-token cost budget for save_memo / push_message
|
|
36
|
+
// - Windows named-pipe alternative (no Windows production targets)
|
|
37
|
+
import { createServer as createHttpServer } from 'node:http';
|
|
38
|
+
import { randomBytes } from 'node:crypto';
|
|
39
|
+
import { chmod, mkdir, unlink } from 'node:fs/promises';
|
|
40
|
+
import { existsSync } from 'node:fs';
|
|
41
|
+
import { dirname, join } from 'node:path';
|
|
42
|
+
import { logger as rootLogger } from '../logger.js';
|
|
43
|
+
import { AGIM_HOME } from '../agim-paths.js';
|
|
44
|
+
import { handleMemoOp } from '../memo-rpc.js';
|
|
45
|
+
import { handlePushOp } from '../push-rpc.js';
|
|
46
|
+
import { handleSkillsOp } from '../skills-rpc.js';
|
|
47
|
+
const log = rootLogger.child({ component: 'agim-rpc' });
|
|
48
|
+
const tokens = new Map();
|
|
49
|
+
const DEFAULT_TTL_MS = (() => {
|
|
50
|
+
const raw = process.env.IMHUB_RPC_TOKEN_TTL_MS;
|
|
51
|
+
if (!raw)
|
|
52
|
+
return 24 * 60 * 60 * 1000; // 24 h
|
|
53
|
+
const n = parseInt(raw, 10);
|
|
54
|
+
return Number.isFinite(n) && n > 0 ? n : 24 * 60 * 60 * 1000;
|
|
55
|
+
})();
|
|
56
|
+
const DEFAULT_ALLOWED_TOOLS = [
|
|
57
|
+
'mcp__imhub__search_memos',
|
|
58
|
+
'mcp__imhub__save_memo',
|
|
59
|
+
'mcp__imhub__read_skill',
|
|
60
|
+
'mcp__imhub__list_skills',
|
|
61
|
+
'mcp__imhub__push_message',
|
|
62
|
+
];
|
|
63
|
+
function resolveAllowedTools() {
|
|
64
|
+
const raw = process.env.IMHUB_RPC_ALLOWED_TOOLS;
|
|
65
|
+
if (!raw?.trim())
|
|
66
|
+
return new Set(DEFAULT_ALLOWED_TOOLS);
|
|
67
|
+
const extra = raw.split(',').map((s) => s.trim()).filter(Boolean);
|
|
68
|
+
return new Set([...DEFAULT_ALLOWED_TOOLS, ...extra]);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Mint a new RPC token bound to a specific IM thread. Returns the hex
|
|
72
|
+
* token + the socket path subprocesses should connect to. Callers
|
|
73
|
+
* should pass these to spawn() via env so the child inherits them
|
|
74
|
+
* unconditionally (and not via argv — argv shows up in `ps`).
|
|
75
|
+
*/
|
|
76
|
+
export function mintRpcToken(ctx, origin = 'native_exec') {
|
|
77
|
+
const token = randomBytes(32).toString('hex');
|
|
78
|
+
const expiresAt = Date.now() + DEFAULT_TTL_MS;
|
|
79
|
+
tokens.set(token, { ctx, expiresAt, origin });
|
|
80
|
+
return { token, socketPath: resolveSocketPath(), expiresAt };
|
|
81
|
+
}
|
|
82
|
+
/** Revoke a token explicitly. Token registry is also pruned on a
|
|
83
|
+
* periodic sweep, so revoke is best-effort cleanup, not required. */
|
|
84
|
+
export function revokeRpcToken(token) {
|
|
85
|
+
tokens.delete(token);
|
|
86
|
+
}
|
|
87
|
+
function pruneExpired() {
|
|
88
|
+
const now = Date.now();
|
|
89
|
+
for (const [t, entry] of tokens) {
|
|
90
|
+
if (entry.expiresAt <= now)
|
|
91
|
+
tokens.delete(t);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function resolveSocketPath() {
|
|
95
|
+
return process.env.IMHUB_RPC_SOCKET || join(AGIM_HOME, 'rpc.sock');
|
|
96
|
+
}
|
|
97
|
+
let server = null;
|
|
98
|
+
let sweepTimer = null;
|
|
99
|
+
/**
|
|
100
|
+
* Start the local RPC server on a Unix socket. Idempotent — repeated
|
|
101
|
+
* calls return the same handle. Best-effort: a failure to start (e.g.
|
|
102
|
+
* permission denied on the socket path) logs at warn and resolves to
|
|
103
|
+
* `null` so the rest of agim boots normally.
|
|
104
|
+
*/
|
|
105
|
+
export async function startRpcServer() {
|
|
106
|
+
if (server)
|
|
107
|
+
return server;
|
|
108
|
+
const socketPath = resolveSocketPath();
|
|
109
|
+
try {
|
|
110
|
+
// Make sure the parent dir exists. AGIM_HOME may not have been
|
|
111
|
+
// created yet on a brand-new install.
|
|
112
|
+
await mkdir(dirname(socketPath), { recursive: true });
|
|
113
|
+
// Stale socket from a previous run blocks listen() with EADDRINUSE.
|
|
114
|
+
if (existsSync(socketPath)) {
|
|
115
|
+
try {
|
|
116
|
+
await unlink(socketPath);
|
|
117
|
+
}
|
|
118
|
+
catch { /* best-effort */ }
|
|
119
|
+
}
|
|
120
|
+
const s = createHttpServer((req, res) => { void handleRequest(req, res); });
|
|
121
|
+
await new Promise((resolve, reject) => {
|
|
122
|
+
s.once('error', reject);
|
|
123
|
+
s.listen(socketPath, () => resolve());
|
|
124
|
+
});
|
|
125
|
+
// Lock the socket down so only the owning UID can connect. Group
|
|
126
|
+
// and world read are intentionally stripped.
|
|
127
|
+
try {
|
|
128
|
+
await chmod(socketPath, 0o600);
|
|
129
|
+
}
|
|
130
|
+
catch { /* best-effort */ }
|
|
131
|
+
server = s;
|
|
132
|
+
sweepTimer = setInterval(pruneExpired, 60_000);
|
|
133
|
+
if (sweepTimer.unref)
|
|
134
|
+
sweepTimer.unref();
|
|
135
|
+
log.info({ event: 'agim-rpc.started', socketPath }, `agim RPC server listening on ${socketPath}`);
|
|
136
|
+
return s;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
log.warn({
|
|
140
|
+
event: 'agim-rpc.start_failed',
|
|
141
|
+
socketPath,
|
|
142
|
+
err: err instanceof Error ? err.message : String(err),
|
|
143
|
+
}, 'agim RPC server failed to start — Python sidecar will be unavailable');
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** Graceful shutdown — called on SIGTERM. */
|
|
148
|
+
export async function stopRpcServer() {
|
|
149
|
+
if (sweepTimer) {
|
|
150
|
+
clearInterval(sweepTimer);
|
|
151
|
+
sweepTimer = null;
|
|
152
|
+
}
|
|
153
|
+
if (!server)
|
|
154
|
+
return;
|
|
155
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
156
|
+
server = null;
|
|
157
|
+
try {
|
|
158
|
+
await unlink(resolveSocketPath());
|
|
159
|
+
}
|
|
160
|
+
catch { /* best-effort */ }
|
|
161
|
+
tokens.clear();
|
|
162
|
+
}
|
|
163
|
+
async function readBody(req, capBytes = 256 * 1024) {
|
|
164
|
+
return new Promise((resolve, reject) => {
|
|
165
|
+
let total = 0;
|
|
166
|
+
const chunks = [];
|
|
167
|
+
req.on('data', (c) => {
|
|
168
|
+
total += c.length;
|
|
169
|
+
if (total > capBytes) {
|
|
170
|
+
req.destroy();
|
|
171
|
+
reject(new Error(`request body exceeds ${capBytes} bytes`));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
chunks.push(c);
|
|
175
|
+
});
|
|
176
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
177
|
+
req.on('error', reject);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function writeJson(res, status, body) {
|
|
181
|
+
res.statusCode = status;
|
|
182
|
+
res.setHeader('content-type', 'application/json; charset=utf-8');
|
|
183
|
+
res.end(JSON.stringify(body));
|
|
184
|
+
}
|
|
185
|
+
async function handleRequest(req, res) {
|
|
186
|
+
try {
|
|
187
|
+
if (req.method !== 'POST') {
|
|
188
|
+
writeJson(res, 405, { ok: false, error: 'POST required', status: 405 });
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const url = req.url || '';
|
|
192
|
+
if (!url.startsWith('/rpc/')) {
|
|
193
|
+
writeJson(res, 404, { ok: false, error: 'unknown route', status: 404 });
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const toolName = url.slice('/rpc/'.length).split(/[?#]/)[0];
|
|
197
|
+
const allowed = resolveAllowedTools();
|
|
198
|
+
if (!allowed.has(toolName)) {
|
|
199
|
+
log.warn({ event: 'agim-rpc.tool_denied', toolName });
|
|
200
|
+
writeJson(res, 403, { ok: false, error: `tool not in RPC whitelist: ${toolName}`, status: 403 });
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const token = String(req.headers['x-agim-rpc-token'] ?? '');
|
|
204
|
+
if (!token) {
|
|
205
|
+
writeJson(res, 401, { ok: false, error: 'missing X-Agim-Rpc-Token header', status: 401 });
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const entry = tokens.get(token);
|
|
209
|
+
if (!entry || entry.expiresAt <= Date.now()) {
|
|
210
|
+
if (entry)
|
|
211
|
+
tokens.delete(token); // expired
|
|
212
|
+
log.warn({ event: 'agim-rpc.token_invalid', toolName, hasEntry: !!entry });
|
|
213
|
+
writeJson(res, 401, { ok: false, error: 'invalid or expired token', status: 401 });
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const raw = await readBody(req);
|
|
217
|
+
let parsed;
|
|
218
|
+
try {
|
|
219
|
+
parsed = raw ? JSON.parse(raw) : {};
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
writeJson(res, 400, { ok: false, error: 'malformed JSON body', status: 400 });
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const args = (parsed.args ?? {});
|
|
226
|
+
log.info({
|
|
227
|
+
event: 'agim-rpc.call',
|
|
228
|
+
toolName,
|
|
229
|
+
origin: entry.origin,
|
|
230
|
+
platform: entry.ctx.platform,
|
|
231
|
+
threadId: entry.ctx.threadId,
|
|
232
|
+
});
|
|
233
|
+
const result = await dispatch(toolName, args, entry.ctx);
|
|
234
|
+
writeJson(res, 200, result);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
238
|
+
log.error({ event: 'agim-rpc.handler_threw', err: msg });
|
|
239
|
+
writeJson(res, 500, { ok: false, error: msg, status: 500 });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async function dispatch(toolName, args, ctx) {
|
|
243
|
+
// Each branch funnels into the SAME RPC handler the in-process
|
|
244
|
+
// native dispatcher uses, so the surface is byte-identical.
|
|
245
|
+
switch (toolName) {
|
|
246
|
+
case 'mcp__imhub__search_memos': {
|
|
247
|
+
const r = await handleMemoOp('search', args, ctx);
|
|
248
|
+
return r.ok ? { ok: true, result: r.result } : { ok: false, error: r.error };
|
|
249
|
+
}
|
|
250
|
+
case 'mcp__imhub__save_memo': {
|
|
251
|
+
const r = await handleMemoOp('save', args, ctx);
|
|
252
|
+
return r.ok ? { ok: true, result: r.result } : { ok: false, error: r.error };
|
|
253
|
+
}
|
|
254
|
+
case 'mcp__imhub__read_skill': {
|
|
255
|
+
const r = await handleSkillsOp({ op: 'read', name: typeof args.name === 'string' ? args.name : '' });
|
|
256
|
+
if (!r.ok)
|
|
257
|
+
return { ok: false, error: r.error };
|
|
258
|
+
if (r.result.op !== 'read')
|
|
259
|
+
return { ok: false, error: 'unexpected response shape' };
|
|
260
|
+
if (!r.result.available)
|
|
261
|
+
return { ok: false, error: `skill unavailable: ${r.result.unavailableReason || 'unknown'}` };
|
|
262
|
+
return { ok: true, result: r.result.body };
|
|
263
|
+
}
|
|
264
|
+
case 'mcp__imhub__list_skills': {
|
|
265
|
+
const r = await handleSkillsOp({ op: 'list' });
|
|
266
|
+
return r.ok ? { ok: true, result: r.result } : { ok: false, error: r.error };
|
|
267
|
+
}
|
|
268
|
+
case 'mcp__imhub__push_message': {
|
|
269
|
+
const r = await handlePushOp(args, ctx);
|
|
270
|
+
return r.ok ? { ok: true, result: r.result } : { ok: false, error: r.error };
|
|
271
|
+
}
|
|
272
|
+
default:
|
|
273
|
+
// Whitelist already filtered upstream; this branch is dead unless
|
|
274
|
+
// an operator added a tool to IMHUB_RPC_ALLOWED_TOOLS without
|
|
275
|
+
// adding a corresponding handler here.
|
|
276
|
+
return { ok: false, error: `no handler wired for ${toolName} (operator-extended allowlist?)` };
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Internal-only — used by tests to snapshot token state. */
|
|
280
|
+
export function _peekTokensForTests() {
|
|
281
|
+
return tokens;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=agim-rpc-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agim-rpc-server.js","sourceRoot":"","sources":["../../../src/core/llm/agim-rpc-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,21 @@ export declare function isExecToolName(name: string): boolean;
|
|
|
4
4
|
export declare function getExecTools(): ToolDef[];
|
|
5
5
|
export interface ExecContext {
|
|
6
6
|
cwd: string;
|
|
7
|
+
/** v1.2.97 — when present, every spawned child gets IMHUB_RPC_SOCKET
|
|
8
|
+
* and IMHUB_RPC_TOKEN env vars so a bgjob-launched Python (or any
|
|
9
|
+
* language) script can call back into agim's tool surface via the
|
|
10
|
+
* local RPC server. The token is bound to this exact RunContext so
|
|
11
|
+
* a worker can only drive its own IM thread. Caller (native/index.ts)
|
|
12
|
+
* mints a token at turn start; exec-dispatcher injects it on every
|
|
13
|
+
* spawn under the same turn. Optional — leaving it unset just means
|
|
14
|
+
* the bgjob child can't call back (the existing v1.2.93 SOP still
|
|
15
|
+
* works, just without the RPC convenience). */
|
|
16
|
+
rpcCtx?: {
|
|
17
|
+
platform: string;
|
|
18
|
+
channelId: string;
|
|
19
|
+
threadId: string;
|
|
20
|
+
userId: string;
|
|
21
|
+
};
|
|
7
22
|
}
|
|
8
23
|
export declare function buildExecDispatcher(ctx: ExecContext): ToolDispatcher;
|
|
9
24
|
export declare function isBgjobInvocation(cmd: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/exec-dispatcher.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAU5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAsBxC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"exec-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/exec-dispatcher.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAU5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAsBxC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX;;;;;;;;oDAQgD;IAChD,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CACnF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAapE;AAoJD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAYtD"}
|
|
@@ -130,15 +130,36 @@ async function runExec(args, ctx, signal) {
|
|
|
130
130
|
const { bin, argv } = useSandbox
|
|
131
131
|
? buildBwrapInvocation(command, cwd, sandboxNetOff)
|
|
132
132
|
: { bin: '/bin/sh', argv: ['-c', command] };
|
|
133
|
+
// v1.2.97 — mint a per-spawn RPC token + injection env. Bound to
|
|
134
|
+
// the current IM thread so the child can ONLY drive that thread's
|
|
135
|
+
// memo / push / skill surface, never anyone else's. Best-effort:
|
|
136
|
+
// if minting fails (RPC server didn't start, no rpcCtx) the spawn
|
|
137
|
+
// still runs — Python sidecar inside the child will just refuse
|
|
138
|
+
// to construct a client (raises RuntimeError on missing env).
|
|
139
|
+
let extraEnv;
|
|
140
|
+
if (ctx.rpcCtx) {
|
|
141
|
+
try {
|
|
142
|
+
const { mintRpcToken, resolveSocketPath } = await import('./agim-rpc-server.js');
|
|
143
|
+
const { token } = mintRpcToken(ctx.rpcCtx, 'native_exec');
|
|
144
|
+
extraEnv = { IMHUB_RPC_SOCKET: resolveSocketPath(), IMHUB_RPC_TOKEN: token };
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
log.debug({
|
|
148
|
+
event: 'exec.rpc_mint_failed',
|
|
149
|
+
err: err instanceof Error ? err.message : String(err),
|
|
150
|
+
}, 'failed to mint RPC token; child will boot without IMHUB_RPC_*');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
133
153
|
log.info({
|
|
134
154
|
event: 'exec.spawn',
|
|
135
155
|
bin,
|
|
136
156
|
cwd,
|
|
137
157
|
sandbox: useSandbox ? `bwrap${sandboxNetOff ? '+no-net' : ''}` : (isBgjob ? 'bypassed-for-bgjob' : 'none'),
|
|
158
|
+
rpcTokenInjected: !!extraEnv,
|
|
138
159
|
timeoutMs,
|
|
139
160
|
commandPreview: command.slice(0, 120),
|
|
140
161
|
});
|
|
141
|
-
return await runChild(bin, argv, { cwd, timeoutMs, signal });
|
|
162
|
+
return await runChild(bin, argv, { cwd, timeoutMs, signal, extraEnv });
|
|
142
163
|
}
|
|
143
164
|
const DANGEROUS_PATTERNS = [
|
|
144
165
|
// rm -rf with paths that touch root / home root / ~. Allow narrow
|
|
@@ -268,7 +289,8 @@ function runChild(bin, argv, opts) {
|
|
|
268
289
|
let stdoutTruncated = false;
|
|
269
290
|
let stderrTruncated = false;
|
|
270
291
|
let timedOut = false;
|
|
271
|
-
const
|
|
292
|
+
const env = opts.extraEnv ? { ...process.env, ...opts.extraEnv } : process.env;
|
|
293
|
+
const child = spawn(bin, argv, { cwd: opts.cwd, env, signal: opts.signal });
|
|
272
294
|
const timer = setTimeout(() => {
|
|
273
295
|
timedOut = true;
|
|
274
296
|
try {
|