@monoes/monomindcli 2.10.30 → 2.10.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.claude/helpers/graphify-freshen.cjs +11 -12
  2. package/.claude/helpers/handlers/capture-handler.cjs +1 -1
  3. package/dist/src/commands/analyze-diff.d.ts.map +1 -1
  4. package/dist/src/commands/analyze-diff.js +6 -0
  5. package/dist/src/commands/analyze-diff.js.map +1 -1
  6. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  7. package/dist/src/commands/doctor-project-checks.js +2 -2
  8. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  9. package/dist/src/commands/init.d.ts.map +1 -1
  10. package/dist/src/commands/init.js.map +1 -1
  11. package/dist/src/commands/mcp.d.ts.map +1 -1
  12. package/dist/src/commands/mcp.js.map +1 -1
  13. package/dist/src/commands/org-observe.d.ts +15 -7
  14. package/dist/src/commands/org-observe.d.ts.map +1 -1
  15. package/dist/src/commands/org-observe.js +208 -63
  16. package/dist/src/commands/org-observe.js.map +1 -1
  17. package/dist/src/commands/org.d.ts.map +1 -1
  18. package/dist/src/commands/org.js +57 -4
  19. package/dist/src/commands/org.js.map +1 -1
  20. package/dist/src/commands/status.d.ts.map +1 -1
  21. package/dist/src/commands/status.js +11 -2
  22. package/dist/src/commands/status.js.map +1 -1
  23. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  24. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  25. package/dist/src/memory/memory-kg.d.ts.map +1 -1
  26. package/dist/src/memory/memory-kg.js +10 -2
  27. package/dist/src/memory/memory-kg.js.map +1 -1
  28. package/dist/src/orgrt/agent-exec.d.ts.map +1 -1
  29. package/dist/src/orgrt/agent-exec.js +7 -3
  30. package/dist/src/orgrt/agent-exec.js.map +1 -1
  31. package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
  32. package/dist/src/orgrt/antigravity-runner.js +6 -2
  33. package/dist/src/orgrt/antigravity-runner.js.map +1 -1
  34. package/dist/src/orgrt/approvals.d.ts +15 -1
  35. package/dist/src/orgrt/approvals.d.ts.map +1 -1
  36. package/dist/src/orgrt/approvals.js +76 -11
  37. package/dist/src/orgrt/approvals.js.map +1 -1
  38. package/dist/src/orgrt/broker.d.ts +10 -2
  39. package/dist/src/orgrt/broker.d.ts.map +1 -1
  40. package/dist/src/orgrt/broker.js +20 -5
  41. package/dist/src/orgrt/broker.js.map +1 -1
  42. package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
  43. package/dist/src/orgrt/checkpoint.js.map +1 -1
  44. package/dist/src/orgrt/cross-org.d.ts +15 -2
  45. package/dist/src/orgrt/cross-org.d.ts.map +1 -1
  46. package/dist/src/orgrt/cross-org.js +169 -16
  47. package/dist/src/orgrt/cross-org.js.map +1 -1
  48. package/dist/src/orgrt/daemon.d.ts +31 -3
  49. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  50. package/dist/src/orgrt/daemon.js +132 -21
  51. package/dist/src/orgrt/daemon.js.map +1 -1
  52. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  53. package/dist/src/orgrt/decisions.js +13 -1
  54. package/dist/src/orgrt/decisions.js.map +1 -1
  55. package/dist/src/orgrt/endpoint-roles.d.ts +86 -0
  56. package/dist/src/orgrt/endpoint-roles.d.ts.map +1 -0
  57. package/dist/src/orgrt/endpoint-roles.js +364 -0
  58. package/dist/src/orgrt/endpoint-roles.js.map +1 -0
  59. package/dist/src/orgrt/inbox.d.ts +18 -0
  60. package/dist/src/orgrt/inbox.d.ts.map +1 -1
  61. package/dist/src/orgrt/inbox.js +73 -0
  62. package/dist/src/orgrt/inbox.js.map +1 -1
  63. package/dist/src/orgrt/migrate.d.ts.map +1 -1
  64. package/dist/src/orgrt/migrate.js +3 -0
  65. package/dist/src/orgrt/migrate.js.map +1 -1
  66. package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
  67. package/dist/src/orgrt/opencode-runner.js +2 -1
  68. package/dist/src/orgrt/opencode-runner.js.map +1 -1
  69. package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
  70. package/dist/src/orgrt/pi-rpc-runner.js +6 -2
  71. package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
  72. package/dist/src/orgrt/policy.d.ts +22 -1
  73. package/dist/src/orgrt/policy.d.ts.map +1 -1
  74. package/dist/src/orgrt/policy.js +36 -4
  75. package/dist/src/orgrt/policy.js.map +1 -1
  76. package/dist/src/orgrt/questions.d.ts +3 -1
  77. package/dist/src/orgrt/questions.d.ts.map +1 -1
  78. package/dist/src/orgrt/questions.js +19 -3
  79. package/dist/src/orgrt/questions.js.map +1 -1
  80. package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -1
  81. package/dist/src/orgrt/qwen-rpc-runner.js +3 -1
  82. package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -1
  83. package/dist/src/orgrt/role-slot.d.ts +1 -2
  84. package/dist/src/orgrt/role-slot.d.ts.map +1 -1
  85. package/dist/src/orgrt/role-slot.js +2 -1
  86. package/dist/src/orgrt/role-slot.js.map +1 -1
  87. package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
  88. package/dist/src/orgrt/scheduler-integration.js +8 -1
  89. package/dist/src/orgrt/scheduler-integration.js.map +1 -1
  90. package/dist/src/orgrt/server.d.ts.map +1 -1
  91. package/dist/src/orgrt/server.js +43 -8
  92. package/dist/src/orgrt/server.js.map +1 -1
  93. package/dist/src/orgrt/session.d.ts +12 -1
  94. package/dist/src/orgrt/session.d.ts.map +1 -1
  95. package/dist/src/orgrt/session.js +20 -3
  96. package/dist/src/orgrt/session.js.map +1 -1
  97. package/dist/src/orgrt/tool-providers.d.ts +110 -0
  98. package/dist/src/orgrt/tool-providers.d.ts.map +1 -0
  99. package/dist/src/orgrt/tool-providers.js +617 -0
  100. package/dist/src/orgrt/tool-providers.js.map +1 -0
  101. package/dist/src/orgrt/types.d.ts +72 -0
  102. package/dist/src/orgrt/types.d.ts.map +1 -1
  103. package/dist/src/orgrt/types.js +56 -0
  104. package/dist/src/orgrt/types.js.map +1 -1
  105. package/dist/src/protocol-capabilities.d.ts +7 -1
  106. package/dist/src/protocol-capabilities.d.ts.map +1 -1
  107. package/dist/src/protocol-capabilities.js +15 -1
  108. package/dist/src/protocol-capabilities.js.map +1 -1
  109. package/dist/src/ui/routes-org.mjs +9 -7
  110. package/dist/src/utils/native-error.d.ts.map +1 -1
  111. package/dist/src/utils/native-error.js +9 -5
  112. package/dist/src/utils/native-error.js.map +1 -1
  113. package/dist/tsconfig.tsbuildinfo +1 -1
  114. package/package.json +2 -2
@@ -0,0 +1,617 @@
1
+ // packages/@monomind/cli/src/orgrt/tool-providers.ts
2
+ /**
3
+ * Role tool providers (M1, capability `org-tool-providers`).
4
+ *
5
+ * A role's `tool_providers[]` names stdio MCP servers whose tools the role
6
+ * gets next to the org tools, exposed as `<prefix>__<mcpToolName>` (so on the
7
+ * Claude runner they arrive as `mcp__org__<prefix>__<tool>`).
8
+ *
9
+ * Lifecycle (contract §2 M1):
10
+ * - tool list: fetched once per provider config (hash of command, args, env,
11
+ * allow) by a short-lived process — spawn, initialize, tools/list, exit —
12
+ * and cached for the daemon's lifetime;
13
+ * - calls: the provider process is spawned lazily on the first call, reused,
14
+ * and exits after `idle_ms` without calls; a crash is restarted once per
15
+ * session, after which calls return `ERROR: tool provider <name>
16
+ * unavailable: <reason>`;
17
+ * - every provider process is killed on session end and on `stopOrg`.
18
+ *
19
+ * The MCP client here is a deliberately small, dependency-free JSON-RPC 2.0
20
+ * client over newline-delimited stdio (the MCP stdio transport): initialize,
21
+ * notifications/initialized, tools/list (with pagination), tools/call.
22
+ */
23
+ import { spawn } from 'node:child_process';
24
+ import { createHash, randomBytes } from 'node:crypto';
25
+ import { z } from 'zod';
26
+ export const MCP_PROTOCOL_VERSION = '2025-06-18';
27
+ const LIST_TIMEOUT_MS = 30_000;
28
+ const STDERR_TAIL = 2_000;
29
+ const TRACE_LINE = /^\[trace (chn_[A-Za-z0-9_-]+) hop=(\d+)\]/m;
30
+ /** The `[trace chn_<id> hop=<n>]` line of a message body, if any. */
31
+ export function parseTraceLine(body) {
32
+ const m = TRACE_LINE.exec(body);
33
+ if (!m)
34
+ return undefined;
35
+ return { chain_id: m[1], hop: Number.parseInt(m[2], 10) };
36
+ }
37
+ /** `chn_` + 20 random [a-z0-9]. */
38
+ export function freshChainId() {
39
+ const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
40
+ const bytes = randomBytes(20);
41
+ let id = 'chn_';
42
+ for (const b of bytes)
43
+ id += alphabet[b % alphabet.length];
44
+ return id;
45
+ }
46
+ // ── JSON Schema → zod ────────────────────────────────────────────────────
47
+ /** Convert one JSON Schema node to zod. Supports string, number, integer,
48
+ * boolean, array, object, null and enum; anything else becomes z.any(). */
49
+ export function jsonSchemaToZod(schema) {
50
+ if (!schema || typeof schema !== 'object' || Array.isArray(schema))
51
+ return z.any();
52
+ const s = schema;
53
+ const describe = (t) => typeof s.description === 'string' && s.description ? t.describe(s.description) : t;
54
+ if (Array.isArray(s.enum) && s.enum.length > 0) {
55
+ const values = s.enum;
56
+ if (values.every((v) => typeof v === 'string'))
57
+ return describe(z.enum(values));
58
+ const literals = values
59
+ .filter((v) => v === null || ['string', 'number', 'boolean'].includes(typeof v))
60
+ .map((v) => z.literal(v));
61
+ if (literals.length === 0)
62
+ return describe(z.any());
63
+ if (literals.length === 1)
64
+ return describe(literals[0]);
65
+ return describe(z.union(literals));
66
+ }
67
+ let type = s.type;
68
+ let nullable = false;
69
+ if (Array.isArray(type)) {
70
+ const types = type.filter((t) => t !== 'null');
71
+ nullable = types.length !== type.length;
72
+ type = types.length === 1 ? types[0] : undefined;
73
+ }
74
+ let out;
75
+ switch (type) {
76
+ case 'string':
77
+ out = z.string();
78
+ break;
79
+ case 'number':
80
+ out = z.number();
81
+ break;
82
+ case 'integer':
83
+ out = z.number().int();
84
+ break;
85
+ case 'boolean':
86
+ out = z.boolean();
87
+ break;
88
+ case 'null':
89
+ out = z.null();
90
+ break;
91
+ case 'array':
92
+ out = z.array(jsonSchemaToZod(s.items));
93
+ break;
94
+ case 'object':
95
+ out =
96
+ s.properties && typeof s.properties === 'object'
97
+ ? z.object(jsonSchemaToZodShape(s)).passthrough()
98
+ : z.record(z.string(), z.any());
99
+ break;
100
+ default:
101
+ out = z.any();
102
+ }
103
+ if (nullable)
104
+ out = out.nullable();
105
+ return describe(out);
106
+ }
107
+ /** Convert an object JSON Schema (an MCP tool `inputSchema`) into the zod
108
+ * SHAPE `OrgToolDef.schema` expects; `required` is honoured. */
109
+ export function jsonSchemaToZodShape(schema) {
110
+ const shape = {};
111
+ if (!schema || typeof schema !== 'object')
112
+ return shape;
113
+ const s = schema;
114
+ const required = new Set(Array.isArray(s.required) ? s.required : []);
115
+ for (const [key, prop] of Object.entries(s.properties ?? {})) {
116
+ const t = jsonSchemaToZod(prop);
117
+ shape[key] = required.has(key) ? t : t.optional();
118
+ }
119
+ return shape;
120
+ }
121
+ // ── MCP result mapping ───────────────────────────────────────────────────
122
+ /** MCP `tools/call` result → tool text: text parts joined with '\n',
123
+ * non-text parts as `[<type> omitted]`, `isError: true` → `ERROR: ` prefix. */
124
+ export function mapToolResult(result) {
125
+ const r = (result ?? {});
126
+ const parts = [];
127
+ if (Array.isArray(r.content)) {
128
+ for (const c of r.content) {
129
+ if (c && c.type === 'text' && typeof c.text === 'string')
130
+ parts.push(c.text);
131
+ else
132
+ parts.push(`[${String(c?.type ?? 'unknown')} omitted]`);
133
+ }
134
+ }
135
+ const text = parts.join('\n');
136
+ return r.isError === true ? `ERROR: ${text}` : text;
137
+ }
138
+ // ── Stdio JSON-RPC client ────────────────────────────────────────────────
139
+ export class McpRpcError extends Error {
140
+ code;
141
+ constructor(message, code) {
142
+ super(message);
143
+ this.code = code;
144
+ }
145
+ }
146
+ export class McpTimeoutError extends Error {
147
+ }
148
+ /** Minimal MCP client over a child process's stdio (newline-delimited JSON). */
149
+ export class McpStdioClient {
150
+ spec;
151
+ child;
152
+ nextId = 1;
153
+ pending = new Map();
154
+ buf = '';
155
+ stderrTail = '';
156
+ closing = false;
157
+ exited = false;
158
+ exitReason;
159
+ /** Called once when the process goes away; `deliberate` = close() was called. */
160
+ onExit;
161
+ constructor(spec) {
162
+ this.spec = spec;
163
+ }
164
+ get pid() {
165
+ return this.child?.pid;
166
+ }
167
+ async start(timeoutMs = LIST_TIMEOUT_MS) {
168
+ let child;
169
+ try {
170
+ child = spawn(this.spec.command, this.spec.args, {
171
+ env: this.spec.env,
172
+ cwd: this.spec.cwd,
173
+ stdio: ['pipe', 'pipe', 'pipe'],
174
+ });
175
+ }
176
+ catch (err) {
177
+ this.fail(`spawn failed: ${err instanceof Error ? err.message : String(err)}`);
178
+ throw new Error(this.exitReason);
179
+ }
180
+ this.child = child;
181
+ child.on('error', (err) => this.fail(`spawn failed: ${err.message}`));
182
+ child.on('exit', (code, signal) => {
183
+ const tail = this.stderrTail.trim().split('\n').slice(-3).join(' | ');
184
+ this.fail(`process exited (${signal ? `signal ${signal}` : `code ${code}`})${tail ? `: ${tail}` : ''}`);
185
+ });
186
+ child.stdin?.on('error', () => {
187
+ /* EPIPE after exit — surfaced through the exit handler */
188
+ });
189
+ child.stdout?.setEncoding('utf8');
190
+ child.stdout?.on('data', (chunk) => this.onData(chunk));
191
+ child.stderr?.setEncoding('utf8');
192
+ child.stderr?.on('data', (chunk) => {
193
+ this.stderrTail = (this.stderrTail + chunk).slice(-STDERR_TAIL);
194
+ });
195
+ await this.request('initialize', {
196
+ protocolVersion: MCP_PROTOCOL_VERSION,
197
+ capabilities: {},
198
+ clientInfo: { name: 'monomind-org', version: '1.0.0' },
199
+ }, timeoutMs);
200
+ this.notify('notifications/initialized');
201
+ }
202
+ request(method, params, timeoutMs) {
203
+ if (this.exited)
204
+ return Promise.reject(new Error(this.exitReason ?? 'process not running'));
205
+ const id = this.nextId++;
206
+ return new Promise((resolve, reject) => {
207
+ const entry = { resolve, reject };
208
+ entry.timer = setTimeout(() => {
209
+ this.pending.delete(id);
210
+ reject(new McpTimeoutError(`${method} timed out after ${timeoutMs}ms`));
211
+ }, timeoutMs);
212
+ entry.timer.unref?.();
213
+ this.pending.set(id, entry);
214
+ this.write({ jsonrpc: '2.0', id, method, params });
215
+ });
216
+ }
217
+ notify(method, params) {
218
+ this.write({ jsonrpc: '2.0', method, ...(params !== undefined ? { params } : {}) });
219
+ }
220
+ async listTools(timeoutMs = LIST_TIMEOUT_MS) {
221
+ const tools = [];
222
+ let cursor;
223
+ for (let page = 0; page < 100; page++) {
224
+ const res = (await this.request('tools/list', cursor ? { cursor } : {}, timeoutMs));
225
+ for (const t of res?.tools ?? [])
226
+ if (t && typeof t.name === 'string')
227
+ tools.push(t);
228
+ cursor = typeof res?.nextCursor === 'string' && res.nextCursor ? res.nextCursor : undefined;
229
+ if (!cursor)
230
+ break;
231
+ }
232
+ return tools;
233
+ }
234
+ /** Deliberate shutdown: SIGTERM, SIGKILL after 2 s. */
235
+ close() {
236
+ if (this.exited)
237
+ return;
238
+ this.closing = true;
239
+ const child = this.child;
240
+ try {
241
+ child?.stdin?.end();
242
+ }
243
+ catch {
244
+ /* already closed */
245
+ }
246
+ try {
247
+ child?.kill('SIGTERM');
248
+ }
249
+ catch {
250
+ /* already gone */
251
+ }
252
+ const t = setTimeout(() => {
253
+ try {
254
+ if (child && child.exitCode === null && child.signalCode === null)
255
+ child.kill('SIGKILL');
256
+ }
257
+ catch {
258
+ /* already gone */
259
+ }
260
+ }, 2_000);
261
+ t.unref?.();
262
+ this.fail('closed');
263
+ }
264
+ write(msg) {
265
+ try {
266
+ this.child?.stdin?.write(`${JSON.stringify(msg)}\n`);
267
+ }
268
+ catch {
269
+ /* surfaced through exit */
270
+ }
271
+ }
272
+ onData(chunk) {
273
+ this.buf += chunk;
274
+ let nl = this.buf.indexOf('\n');
275
+ while (nl !== -1) {
276
+ const line = this.buf.slice(0, nl).trim();
277
+ this.buf = this.buf.slice(nl + 1);
278
+ if (line)
279
+ this.onLine(line);
280
+ nl = this.buf.indexOf('\n');
281
+ }
282
+ }
283
+ onLine(line) {
284
+ let msg;
285
+ try {
286
+ msg = JSON.parse(line);
287
+ }
288
+ catch {
289
+ return; // not JSON-RPC (stray log line) — ignore
290
+ }
291
+ if (msg.method !== undefined) {
292
+ // Server → client request: answer ping, refuse the rest. Notifications ignored.
293
+ if (msg.id !== undefined) {
294
+ if (msg.method === 'ping')
295
+ this.write({ jsonrpc: '2.0', id: msg.id, result: {} });
296
+ else
297
+ this.write({
298
+ jsonrpc: '2.0',
299
+ id: msg.id,
300
+ error: { code: -32601, message: `method not supported: ${msg.method}` },
301
+ });
302
+ }
303
+ return;
304
+ }
305
+ if (typeof msg.id !== 'number')
306
+ return;
307
+ const p = this.pending.get(msg.id);
308
+ if (!p)
309
+ return;
310
+ this.pending.delete(msg.id);
311
+ if (p.timer)
312
+ clearTimeout(p.timer);
313
+ if (msg.error)
314
+ p.reject(new McpRpcError(msg.error.message ?? 'MCP error', msg.error.code));
315
+ else
316
+ p.resolve(msg.result);
317
+ }
318
+ fail(reason) {
319
+ if (this.exited)
320
+ return;
321
+ this.exited = true;
322
+ this.exitReason = reason;
323
+ for (const p of this.pending.values()) {
324
+ if (p.timer)
325
+ clearTimeout(p.timer);
326
+ p.reject(new Error(reason));
327
+ }
328
+ this.pending.clear();
329
+ this.onExit?.(reason, this.closing);
330
+ }
331
+ }
332
+ export function providerPrefix(p) {
333
+ return p.prefix ?? p.name.replace(/-/g, '_');
334
+ }
335
+ /** Tool-name prefixes (`<prefix>__`) a role's providers contribute. */
336
+ export function roleProviderPrefixes(role) {
337
+ return (role.tool_providers ?? []).map((p) => `${providerPrefix(p)}__`);
338
+ }
339
+ function providerEnv(p, ctx) {
340
+ const env = {};
341
+ for (const [k, v] of Object.entries(process.env))
342
+ if (typeof v === 'string')
343
+ env[k] = v;
344
+ Object.assign(env, p.env ?? {});
345
+ env.MONOMIND_ORG_NAME = ctx.org;
346
+ env.MONOMIND_ORG_RUN = ctx.run;
347
+ env.MONOMIND_ORG_ROLE = ctx.role;
348
+ env.MONOMIND_ORG_ROOT = ctx.root;
349
+ return env;
350
+ }
351
+ function configHash(p) {
352
+ return createHash('sha256')
353
+ .update(JSON.stringify({
354
+ command: p.command,
355
+ args: p.args ?? [],
356
+ env: p.env ?? {},
357
+ allow: p.allow ?? null,
358
+ }))
359
+ .digest('hex');
360
+ }
361
+ /** Fill schema defaults for a provider entry that did not come through
362
+ * RoleSchema.parse (e.g. a hot-reloaded or hand-built role). */
363
+ function normalizeProvider(p) {
364
+ return {
365
+ ...p,
366
+ args: p.args ?? [],
367
+ env: p.env ?? {},
368
+ timeout_ms: p.timeout_ms ?? 660_000,
369
+ idle_ms: p.idle_ms ?? 300_000,
370
+ };
371
+ }
372
+ // ── Per-session provider process ─────────────────────────────────────────
373
+ /** One provider's call-side process for one role session. */
374
+ class ProviderProcess {
375
+ cfg;
376
+ ctx;
377
+ cwd;
378
+ bus;
379
+ client;
380
+ starting;
381
+ idleTimer;
382
+ inflight = 0;
383
+ crashes = 0;
384
+ lastCrash = '';
385
+ closed = false;
386
+ constructor(cfg, ctx, cwd, bus) {
387
+ this.cfg = cfg;
388
+ this.ctx = ctx;
389
+ this.cwd = cwd;
390
+ this.bus = bus;
391
+ }
392
+ get pid() {
393
+ return this.client && !this.client.exited ? this.client.pid : undefined;
394
+ }
395
+ unavailable(reason) {
396
+ return `ERROR: tool provider ${this.cfg.name} unavailable: ${reason}`;
397
+ }
398
+ ensure() {
399
+ if (this.client && !this.client.exited)
400
+ return Promise.resolve(this.client);
401
+ if (this.starting)
402
+ return this.starting;
403
+ // Restart once per session after a crash; a second crash is final.
404
+ if (this.crashes >= 2)
405
+ return Promise.reject(new Error(this.lastCrash));
406
+ const client = new McpStdioClient({
407
+ command: this.cfg.command,
408
+ args: this.cfg.args,
409
+ env: providerEnv(this.cfg, this.ctx),
410
+ cwd: this.cwd,
411
+ });
412
+ let counted = false;
413
+ client.onExit = (reason, deliberate) => {
414
+ if (this.client === client)
415
+ this.client = undefined;
416
+ if (deliberate)
417
+ return;
418
+ counted = true;
419
+ this.crashes++;
420
+ this.lastCrash = reason;
421
+ this.bus?.emit({
422
+ type: 'audit',
423
+ from: this.ctx.role,
424
+ reason: 'tool-provider-crashed',
425
+ msg: `tool provider ${this.cfg.name} ${reason}${this.crashes >= 2 ? ' — not restarting again this session' : ' — restarting on next call'}`,
426
+ data: { provider: this.cfg.name, crashes: this.crashes },
427
+ });
428
+ };
429
+ this.starting = client
430
+ .start()
431
+ .then(() => {
432
+ this.client = client;
433
+ return client;
434
+ })
435
+ .catch((err) => {
436
+ client.close();
437
+ // A start failure that did not surface as a process exit (e.g. an
438
+ // initialize timeout) still counts against the restart budget.
439
+ if (!counted) {
440
+ this.crashes++;
441
+ this.lastCrash = err.message;
442
+ }
443
+ throw err;
444
+ })
445
+ .finally(() => {
446
+ this.starting = undefined;
447
+ });
448
+ return this.starting;
449
+ }
450
+ async call(tool, args, trace) {
451
+ if (this.closed)
452
+ return this.unavailable('session ended');
453
+ let client;
454
+ try {
455
+ client = await this.ensure();
456
+ }
457
+ catch (err) {
458
+ return this.unavailable(err instanceof Error ? err.message : String(err));
459
+ }
460
+ this.inflight++;
461
+ if (this.idleTimer)
462
+ clearTimeout(this.idleTimer);
463
+ this.idleTimer = undefined;
464
+ try {
465
+ const res = await client.request('tools/call', { name: tool, arguments: args ?? {}, _meta: { trace } }, this.cfg.timeout_ms);
466
+ return mapToolResult(res);
467
+ }
468
+ catch (err) {
469
+ if (err instanceof McpRpcError)
470
+ return `ERROR: ${err.message}`;
471
+ if (err instanceof McpTimeoutError)
472
+ return `ERROR: tool provider ${this.cfg.name}: ${tool} ${err.message}`;
473
+ return this.unavailable(err instanceof Error ? err.message : String(err));
474
+ }
475
+ finally {
476
+ this.inflight--;
477
+ this.armIdle();
478
+ }
479
+ }
480
+ armIdle() {
481
+ if (this.closed || this.inflight > 0)
482
+ return;
483
+ if (this.idleTimer)
484
+ clearTimeout(this.idleTimer);
485
+ this.idleTimer = setTimeout(() => {
486
+ this.idleTimer = undefined;
487
+ if (this.inflight === 0)
488
+ this.client?.close();
489
+ }, this.cfg.idle_ms);
490
+ this.idleTimer.unref?.();
491
+ }
492
+ close() {
493
+ this.closed = true;
494
+ if (this.idleTimer)
495
+ clearTimeout(this.idleTimer);
496
+ this.idleTimer = undefined;
497
+ this.client?.close();
498
+ this.client = undefined;
499
+ }
500
+ }
501
+ /** Daemon-lifetime owner of provider tool-list caches and live processes. */
502
+ export class ToolProviderHub {
503
+ listCache = new Map();
504
+ sessions = new Map();
505
+ /** tools/list for one provider config — cached per config hash. A failed
506
+ * listing is evicted so the next session start retries it. */
507
+ listTools(p, ctx, cwd) {
508
+ const cfg = normalizeProvider(p);
509
+ const key = configHash(cfg);
510
+ const cached = this.listCache.get(key);
511
+ if (cached)
512
+ return cached;
513
+ const promise = (async () => {
514
+ const client = new McpStdioClient({
515
+ command: cfg.command,
516
+ args: cfg.args,
517
+ env: providerEnv(cfg, ctx),
518
+ cwd,
519
+ });
520
+ try {
521
+ await client.start();
522
+ const tools = await client.listTools();
523
+ return cfg.allow ? tools.filter((t) => cfg.allow?.includes(t.name)) : tools;
524
+ }
525
+ finally {
526
+ client.close();
527
+ }
528
+ })();
529
+ this.listCache.set(key, promise);
530
+ promise.catch(() => {
531
+ if (this.listCache.get(key) === promise)
532
+ this.listCache.delete(key);
533
+ });
534
+ return promise;
535
+ }
536
+ /** Build the provider tools for one role session. Providers whose tool list
537
+ * cannot be fetched are skipped with an `audit` event — a broken provider
538
+ * must not take the whole role down. */
539
+ async buildRoleTools(opts) {
540
+ const { ctx, bus } = opts;
541
+ const procs = [];
542
+ const tools = [];
543
+ const seen = new Set(opts.reservedNames ?? []);
544
+ for (const raw of opts.providers) {
545
+ const cfg = normalizeProvider(raw);
546
+ let listed;
547
+ try {
548
+ listed = await this.listTools(cfg, ctx, opts.cwd);
549
+ }
550
+ catch (err) {
551
+ bus?.emit({
552
+ type: 'audit',
553
+ from: ctx.role,
554
+ reason: 'tool-provider-list-failed',
555
+ msg: `tool provider ${cfg.name}: could not list tools — ${err instanceof Error ? err.message : String(err)}`,
556
+ data: { provider: cfg.name },
557
+ });
558
+ continue;
559
+ }
560
+ const proc = new ProviderProcess(cfg, ctx, opts.cwd, bus);
561
+ procs.push(proc);
562
+ const prefix = providerPrefix(cfg);
563
+ for (const t of listed) {
564
+ const exposed = `${prefix}__${t.name}`;
565
+ if (seen.has(exposed))
566
+ continue;
567
+ seen.add(exposed);
568
+ tools.push({
569
+ name: exposed,
570
+ description: t.description || `Tool "${t.name}" from tool provider ${cfg.name}.`,
571
+ schema: jsonSchemaToZodShape(t.inputSchema),
572
+ handler: async (args) => ({
573
+ text: await proc.call(t.name, args, {
574
+ org: ctx.org,
575
+ run: ctx.run,
576
+ role: ctx.role,
577
+ ...opts.trace(),
578
+ }),
579
+ }),
580
+ });
581
+ }
582
+ }
583
+ let closed = false;
584
+ const set = {
585
+ tools,
586
+ close: () => {
587
+ if (closed)
588
+ return;
589
+ closed = true;
590
+ for (const p of procs)
591
+ p.close();
592
+ this.sessions.get(ctx.org)?.delete(set);
593
+ },
594
+ pids: () => Object.fromEntries(procs.map((p) => [p.cfg.name, p.pid])),
595
+ };
596
+ if (procs.length > 0) {
597
+ const forOrg = this.sessions.get(ctx.org) ?? new Set();
598
+ forOrg.add(set);
599
+ this.sessions.set(ctx.org, forOrg);
600
+ }
601
+ return set;
602
+ }
603
+ /** Kill every provider process of every live session of `org`. */
604
+ closeOrg(org) {
605
+ const forOrg = this.sessions.get(org);
606
+ if (!forOrg)
607
+ return;
608
+ for (const s of [...forOrg])
609
+ s.close();
610
+ this.sessions.delete(org);
611
+ }
612
+ closeAll() {
613
+ for (const org of [...this.sessions.keys()])
614
+ this.closeOrg(org);
615
+ }
616
+ }
617
+ //# sourceMappingURL=tool-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-providers.js","sourceRoot":"","sources":["../../../src/orgrt/tool-providers.ts"],"names":[],"mappings":"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"}