@femtomc/mu-agent 26.2.33 → 26.2.35

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.
@@ -136,8 +136,8 @@ export type PiMessagingMetaAgentBackendOpts = {
136
136
  thinking?: string;
137
137
  systemPrompt?: string;
138
138
  timeoutMs?: number;
139
- piBinary?: string;
140
139
  };
140
+ export declare const DEFAULT_CHAT_SYSTEM_PROMPT: string;
141
141
  export declare class PiMessagingMetaAgentBackend implements MessagingMetaAgentBackend {
142
142
  #private;
143
143
  constructor(opts?: PiMessagingMetaAgentBackendOpts);
@@ -1 +1 @@
1
- {"version":3,"file":"meta_agent.d.ts","sourceRoot":"","sources":["../src/meta_agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta_agent.d.ts","sourceRoot":"","sources":["../src/meta_agent.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { spawn } from "node:child_process";
2
1
  import { randomUUID } from "node:crypto";
3
- import { createInterface } from "node:readline";
4
2
  import { z } from "zod";
5
3
  import { CommandContextResolver } from "./command_context.js";
4
+ import { resolveModel } from "./pi_sdk_backend.js";
6
5
  const SAFE_RESPONSE_RE = /^[\s\S]{1,2000}$/;
7
6
  export const MetaApprovedCommandSchema = z.discriminatedUnion("kind", [
8
7
  z.object({ kind: z.literal("status") }),
@@ -233,6 +232,17 @@ export class MessagingMetaAgentRuntime {
233
232
  };
234
233
  }
235
234
  }
235
+ export const DEFAULT_CHAT_SYSTEM_PROMPT = [
236
+ "You are mu, an AI assistant for the mu orchestration platform.",
237
+ "Help users with:",
238
+ "- Understanding mu's architecture (issues, forum, orchestrator, control-plane)",
239
+ "- Setting up control-plane integrations (Slack, Discord, Telegram)",
240
+ "- Navigating issues and forum topics",
241
+ "- Running and monitoring orchestrator workflows",
242
+ "- General questions about the mu ecosystem",
243
+ "",
244
+ "Be concise, practical, and actionable.",
245
+ ].join("\n");
236
246
  const DEFAULT_META_SYSTEM_PROMPT = [
237
247
  "You are mu's dedicated messaging meta-agent.",
238
248
  "Your priorities:",
@@ -250,63 +260,15 @@ const DEFAULT_META_SYSTEM_PROMPT = [
250
260
  "Use kind=command only when one allowed command will materially help answer the user.",
251
261
  "Never output shell commands.",
252
262
  ].join("\n");
253
- function extractAssistantTextFromJsonEvent(event) {
254
- if (!event || typeof event !== "object") {
255
- return null;
256
- }
257
- if (event.type !== "message_end") {
258
- return null;
259
- }
260
- if (!event.message || typeof event.message !== "object") {
261
- return null;
262
- }
263
- if (event.message.role !== "assistant") {
264
- return null;
265
- }
266
- const message = event.message;
267
- if (typeof message.text === "string" && message.text.trim().length > 0) {
268
- return message.text;
269
- }
270
- if (typeof message.content === "string" && message.content.trim().length > 0) {
271
- return message.content;
272
- }
273
- if (Array.isArray(message.content)) {
274
- const parts = [];
275
- for (const item of message.content) {
276
- if (!item) {
277
- continue;
278
- }
279
- if (typeof item === "string") {
280
- if (item.trim().length > 0) {
281
- parts.push(item);
282
- }
283
- continue;
284
- }
285
- if (typeof item === "object") {
286
- const text = item.text;
287
- if (typeof text === "string" && text.trim().length > 0) {
288
- parts.push(text);
289
- }
290
- }
291
- }
292
- if (parts.length > 0) {
293
- return parts.join("\n");
294
- }
295
- }
296
- return null;
297
- }
298
263
  function extractFirstJsonObject(text) {
299
264
  const trimmed = text.trim();
300
265
  if (trimmed.startsWith("{") && trimmed.endsWith("}")) {
301
266
  return trimmed;
302
267
  }
303
268
  const match = /\{[\s\S]*\}/.exec(trimmed);
304
- if (!match) {
305
- return null;
306
- }
307
- return match[0] ?? null;
269
+ return match?.[0] ?? null;
308
270
  }
309
- function buildPiPrompt(input) {
271
+ function buildMetaPrompt(input) {
310
272
  return [
311
273
  `session_id: ${input.sessionId}`,
312
274
  `turn_id: ${input.turnId}`,
@@ -330,95 +292,96 @@ export class PiMessagingMetaAgentBackend {
330
292
  #thinking;
331
293
  #systemPrompt;
332
294
  #timeoutMs;
333
- #piBinary;
334
295
  constructor(opts = {}) {
335
296
  this.#provider = opts.provider;
336
297
  this.#model = opts.model;
337
298
  this.#thinking = opts.thinking ?? "minimal";
338
299
  this.#systemPrompt = opts.systemPrompt ?? DEFAULT_META_SYSTEM_PROMPT;
339
300
  this.#timeoutMs = Math.max(1_000, Math.trunc(opts.timeoutMs ?? 90_000));
340
- this.#piBinary = opts.piBinary ?? "pi";
341
301
  }
342
302
  async runTurn(input) {
343
- const argv = [
344
- this.#piBinary,
345
- "--mode",
346
- "json",
347
- "--no-session",
348
- "--thinking",
349
- this.#thinking,
350
- "--system-prompt",
351
- this.#systemPrompt,
352
- ];
353
- if (this.#provider) {
354
- argv.push("--provider", this.#provider);
355
- }
356
- if (this.#model) {
357
- argv.push("--model", this.#model);
303
+ const { AuthStorage, createAgentSession, SessionManager, SettingsManager, DefaultResourceLoader, } = await import("@mariozechner/pi-coding-agent");
304
+ const authStorage = new AuthStorage();
305
+ const defaultModel = "claude-sonnet-4-5-20250929";
306
+ const modelId = this.#model ?? defaultModel;
307
+ const model = resolveModel(modelId, authStorage, this.#provider);
308
+ if (!model) {
309
+ const scope = this.#provider ? ` in provider "${this.#provider}"` : "";
310
+ throw new Error(`Model "${modelId}" not found${scope} in pi-ai registry.`);
358
311
  }
359
- argv.push(buildPiPrompt(input));
360
- const assistantText = await new Promise((resolve, reject) => {
361
- const proc = spawn(argv[0], argv.slice(1), {
362
- cwd: input.inbound.repo_root,
363
- stdio: ["ignore", "pipe", "pipe"],
364
- env: process.env,
365
- });
366
- const rl = createInterface({ input: proc.stdout, crlfDelay: Number.POSITIVE_INFINITY });
367
- const stderrChunks = [];
368
- let resolvedText = "";
369
- let finished = false;
370
- let timeout = null;
371
- const finish = (fn) => {
372
- if (finished) {
373
- return;
374
- }
375
- finished = true;
376
- if (timeout) {
377
- clearTimeout(timeout);
378
- }
379
- void rl.close();
380
- fn();
381
- };
382
- proc.stderr?.on("data", (chunk) => {
383
- stderrChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
312
+ const cwd = input.inbound.repo_root;
313
+ const settingsManager = SettingsManager.inMemory();
314
+ const resourceLoader = new DefaultResourceLoader({
315
+ cwd,
316
+ settingsManager,
317
+ systemPromptOverride: () => this.#systemPrompt,
318
+ agentsFilesOverride: () => ({ agentsFiles: [] }),
319
+ });
320
+ await resourceLoader.reload();
321
+ const { session } = await createAgentSession({
322
+ cwd,
323
+ model,
324
+ thinkingLevel: this.#thinking,
325
+ tools: [],
326
+ sessionManager: SessionManager.inMemory(cwd),
327
+ settingsManager,
328
+ resourceLoader,
329
+ authStorage,
330
+ });
331
+ try {
332
+ await session.bindExtensions({
333
+ commandContextActions: {
334
+ waitForIdle: () => session.agent.waitForIdle(),
335
+ newSession: async () => ({ cancelled: true }),
336
+ fork: async () => ({ cancelled: true }),
337
+ navigateTree: async () => ({ cancelled: true }),
338
+ switchSession: async () => ({ cancelled: true }),
339
+ reload: async () => { },
340
+ },
341
+ onError: () => { },
384
342
  });
385
- void (async () => {
386
- for await (const line of rl) {
387
- let parsed;
388
- try {
389
- parsed = JSON.parse(String(line));
343
+ let assistantText = "";
344
+ const unsub = session.subscribe((event) => {
345
+ if (event?.type === "message_end" && event?.message?.role === "assistant") {
346
+ const msg = event.message;
347
+ if (typeof msg.text === "string") {
348
+ assistantText = msg.text;
390
349
  }
391
- catch {
392
- continue;
350
+ else if (typeof msg.content === "string") {
351
+ assistantText = msg.content;
393
352
  }
394
- const maybeText = extractAssistantTextFromJsonEvent(parsed);
395
- if (maybeText) {
396
- resolvedText = maybeText;
353
+ else if (Array.isArray(msg.content)) {
354
+ const parts = [];
355
+ for (const item of msg.content) {
356
+ const t = typeof item === "string" ? item : item?.text;
357
+ if (typeof t === "string" && t.trim().length > 0)
358
+ parts.push(t);
359
+ }
360
+ if (parts.length > 0)
361
+ assistantText = parts.join("\n");
397
362
  }
398
363
  }
399
- })().catch((err) => {
400
- finish(() => reject(err));
401
- });
402
- proc.once("error", (err) => {
403
- finish(() => reject(err));
404
364
  });
405
- proc.once("close", (code) => {
406
- if ((code ?? 0) !== 0) {
407
- finish(() => reject(new Error(`pi exited with code ${code ?? 0}: ${Buffer.concat(stderrChunks).toString("utf8")}`)));
408
- return;
409
- }
410
- finish(() => resolve(resolvedText));
365
+ const timeoutPromise = new Promise((_, reject) => {
366
+ setTimeout(() => reject(new Error("pi meta-agent timeout")), this.#timeoutMs);
411
367
  });
412
- timeout = setTimeout(() => {
413
- proc.kill("SIGKILL");
414
- finish(() => reject(new Error("pi meta-agent timeout")));
415
- }, this.#timeoutMs);
416
- });
417
- const jsonPayload = extractFirstJsonObject(assistantText);
418
- if (!jsonPayload) {
419
- throw new Error("meta_agent_invalid_output");
368
+ try {
369
+ await Promise.race([
370
+ session.prompt(buildMetaPrompt(input), { expandPromptTemplates: false }),
371
+ timeoutPromise,
372
+ ]);
373
+ }
374
+ finally {
375
+ unsub();
376
+ }
377
+ const jsonPayload = extractFirstJsonObject(assistantText);
378
+ if (!jsonPayload) {
379
+ throw new Error("meta_agent_invalid_output");
380
+ }
381
+ return MetaAgentBackendTurnResultSchema.parse(JSON.parse(jsonPayload));
382
+ }
383
+ finally {
384
+ session.dispose();
420
385
  }
421
- const parsed = JSON.parse(jsonPayload);
422
- return MetaAgentBackendTurnResultSchema.parse(parsed);
423
386
  }
424
387
  }
@@ -1,5 +1,13 @@
1
- import { DefaultResourceLoader, SettingsManager } from "@mariozechner/pi-coding-agent";
1
+ import type { Model } from "@mariozechner/pi-ai";
2
+ import { AuthStorage, DefaultResourceLoader, SettingsManager } from "@mariozechner/pi-coding-agent";
2
3
  import type { BackendRunner, BackendRunOpts } from "./pi_backend.js";
4
+ /**
5
+ * Resolve a bare model ID (e.g. "gpt-5.3-codex") to a pi-ai Model object.
6
+ *
7
+ * When multiple providers offer the same model ID, prefer providers that
8
+ * have auth configured (env var, OAuth, or stored API key).
9
+ */
10
+ export declare function resolveModel(modelId: string, authStorage: AuthStorage, providerConstraint?: string): Model<any> | undefined;
3
11
  /**
4
12
  * In-process backend using the pi SDK.
5
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"pi_sdk_backend.d.ts","sourceRoot":"","sources":["../src/pi_sdk_backend.ts"],"names":[],"mappings":"AAMA,OAAO,EAQN,qBAAqB,EAErB,eAAe,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAwCrE;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,aAAa;IAC3C,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAiGhD;AAED,MAAM,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,qBAAqB,CAsB9F"}
1
+ {"version":3,"file":"pi_sdk_backend.d.ts","sourceRoot":"","sources":["../src/pi_sdk_backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EACN,WAAW,EAOX,qBAAqB,EAErB,eAAe,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGrE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA6B3H;AAED;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,aAAa;IAC3C,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAiGhD;AAED,MAAM,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,qBAAqB,CAsB9F"}
@@ -10,7 +10,7 @@ import { piStreamHasError } from "./pi_backend.js";
10
10
  * When multiple providers offer the same model ID, prefer providers that
11
11
  * have auth configured (env var, OAuth, or stored API key).
12
12
  */
13
- function resolveModel(modelId, authStorage, providerConstraint) {
13
+ export function resolveModel(modelId, authStorage, providerConstraint) {
14
14
  if (providerConstraint) {
15
15
  const providers = getProviders();
16
16
  if (!providers.includes(providerConstraint)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@femtomc/mu-agent",
3
- "version": "26.2.33",
3
+ "version": "26.2.35",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  "dist/**"
15
15
  ],
16
16
  "dependencies": {
17
- "@femtomc/mu-core": "26.2.33",
17
+ "@femtomc/mu-core": "26.2.35",
18
18
  "@mariozechner/pi-agent-core": "^0.52.12",
19
19
  "@mariozechner/pi-ai": "^0.52.12",
20
20
  "@mariozechner/pi-coding-agent": "^0.52.12",