@femtomc/mu-agent 26.2.38 → 26.2.40

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/README.md CHANGED
@@ -1,12 +1,11 @@
1
1
  # @femtomc/mu-agent
2
2
 
3
- Shared mu agent runtime package.
3
+ Shared agent runtime package for mu.
4
4
 
5
- This package centralizes reusable agent logic that was previously split across
6
- `@femtomc/mu-control-plane` and `@femtomc/mu-orchestrator`, including:
5
+ This package provides reusable runtime pieces for chat, orchestration, and serve-mode tooling, including:
7
6
 
8
- - Messaging meta-agent runtime + backend
9
- - Command context resolution for meta-agent command proposals
7
+ - Messaging operator runtime + backend
8
+ - Command context resolution for operator command proposals
10
9
  - Role prompt loading/defaults for orchestrator + worker agents
11
10
  - pi CLI/SDK orchestration backends and resource loader helpers
12
11
  - Prompt/template helpers used by orchestration roles
@@ -55,7 +54,7 @@ Current stack:
55
54
  - `/mu-events watch on|off` — toggle event watch widget
56
55
  - `/mu-brand on|off|toggle` — enable/disable UI branding
57
56
 
58
- ## Tools (agent/meta-agent-facing)
57
+ ## Tools (agent/operator-facing)
59
58
 
60
59
  - `mu_status()`
61
60
  - High-level server status.
@@ -2,7 +2,6 @@ export { brandingExtension } from "./branding.js";
2
2
  export { eventLogExtension } from "./event-log.js";
3
3
  export { messagingSetupExtension } from "./messaging-setup.js";
4
4
  export { serverToolsExtension } from "./server-tools.js";
5
- import { brandingExtension } from "./branding.js";
6
5
  /**
7
6
  * Serve-mode extension module paths.
8
7
  *
@@ -11,11 +10,4 @@ import { brandingExtension } from "./branding.js";
11
10
  * anonymous inline factories.
12
11
  */
13
12
  export declare const serveExtensionPaths: string[];
14
- /**
15
- * Legacy serve-mode extension factories.
16
- *
17
- * Kept for compatibility in cases where callers need programmatic inline
18
- * factories, but path-based loading is preferred.
19
- */
20
- export declare const serveExtensionFactories: (typeof brandingExtension)[];
21
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAYlD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,UAE/B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,8BAKnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AASzD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,UAE/B,CAAC"}
@@ -2,10 +2,6 @@ export { brandingExtension } from "./branding.js";
2
2
  export { eventLogExtension } from "./event-log.js";
3
3
  export { messagingSetupExtension } from "./messaging-setup.js";
4
4
  export { serverToolsExtension } from "./server-tools.js";
5
- import { brandingExtension } from "./branding.js";
6
- import { eventLogExtension } from "./event-log.js";
7
- import { messagingSetupExtension } from "./messaging-setup.js";
8
- import { serverToolsExtension } from "./server-tools.js";
9
5
  const SERVE_EXTENSION_MODULE_BASENAMES = ["branding", "server-tools", "event-log", "messaging-setup"];
10
6
  const RUNTIME_EXTENSION = import.meta.url.endsWith(".ts") ? "ts" : "js";
11
7
  function resolveBundledExtensionPath(moduleBasename) {
@@ -19,15 +15,3 @@ function resolveBundledExtensionPath(moduleBasename) {
19
15
  * anonymous inline factories.
20
16
  */
21
17
  export const serveExtensionPaths = SERVE_EXTENSION_MODULE_BASENAMES.map((moduleBasename) => resolveBundledExtensionPath(moduleBasename));
22
- /**
23
- * Legacy serve-mode extension factories.
24
- *
25
- * Kept for compatibility in cases where callers need programmatic inline
26
- * factories, but path-based loading is preferred.
27
- */
28
- export const serveExtensionFactories = [
29
- brandingExtension,
30
- serverToolsExtension,
31
- eventLogExtension,
32
- messagingSetupExtension,
33
- ];
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * mu-server-tools — Serve-mode tools for querying mu server state.
3
3
  *
4
- * This is the core extension the meta-agent relies on for repo introspection.
4
+ * This is the core extension the operator relies on for repo introspection.
5
5
  */
6
6
  import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
7
7
  export declare function serverToolsExtension(pi: ExtensionAPI): void;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * mu-server-tools — Serve-mode tools for querying mu server state.
3
3
  *
4
- * This is the core extension the meta-agent relies on for repo introspection.
4
+ * This is the core extension the operator relies on for repo introspection.
5
5
  */
6
6
  import { StringEnum } from "@mariozechner/pi-ai";
7
7
  import { Type } from "@sinclair/typebox";
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "./command_context.js";
2
2
  export * from "./extensions/index.js";
3
- export * from "./meta_agent.js";
3
+ export * from "./operator.js";
4
4
  export * from "./mu_roles.js";
5
5
  export * from "./pi_backend.js";
6
6
  export * from "./pi_sdk_backend.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "./command_context.js";
2
2
  export * from "./extensions/index.js";
3
- export * from "./meta_agent.js";
3
+ export * from "./operator.js";
4
4
  export * from "./mu_roles.js";
5
5
  export * from "./pi_backend.js";
6
6
  export * from "./pi_sdk_backend.js";
@@ -1 +1 @@
1
- {"version":3,"file":"mu_roles.d.ts","sourceRoot":"","sources":["../src/mu_roles.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE/C,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM5D;AAgED,eAAO,MAAM,2BAA2B,QAwC5B,CAAC;AAEb,eAAO,MAAM,qBAAqB,QA0BtB,CAAC;AAMb;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1F"}
1
+ {"version":3,"file":"mu_roles.d.ts","sourceRoot":"","sources":["../src/mu_roles.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE/C,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM5D;AAgED,eAAO,MAAM,2BAA2B,QAwC5B,CAAC;AAEb,eAAO,MAAM,qBAAqB,QA0BtB,CAAC;AAMb;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1F"}
package/dist/mu_roles.js CHANGED
@@ -1,4 +1,3 @@
1
- import { readFile } from "node:fs/promises";
2
1
  import { join } from "node:path";
3
2
  import { splitFrontmatter } from "./prompt.js";
4
3
  /** Determine role from tags. Defaults to orchestrator if no role tag present. */
@@ -153,7 +152,7 @@ export async function systemPromptForRole(role, repoRoot) {
153
152
  if (repoRoot) {
154
153
  try {
155
154
  const filePath = join(repoRoot, ".mu", "roles", `${role}.md`);
156
- const raw = await readFile(filePath, "utf8");
155
+ const raw = await Bun.file(filePath).text();
157
156
  const { body } = splitFrontmatter(raw);
158
157
  return body;
159
158
  }
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { CommandContextResolver } from "./command_context.js";
3
- export type MessagingMetaInboundEnvelope = {
3
+ export type MessagingOperatorInboundEnvelope = {
4
4
  channel: string;
5
5
  channel_tenant_id: string;
6
6
  channel_conversation_id: string;
@@ -11,13 +11,13 @@ export type MessagingMetaInboundEnvelope = {
11
11
  target_id: string;
12
12
  metadata: Record<string, unknown>;
13
13
  };
14
- export type MessagingMetaIdentityBinding = {
14
+ export type MessagingOperatorIdentityBinding = {
15
15
  binding_id: string;
16
16
  assurance_tier: string;
17
17
  };
18
- type InboundEnvelope = MessagingMetaInboundEnvelope;
19
- type IdentityBinding = MessagingMetaIdentityBinding;
20
- export declare const MetaApprovedCommandSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
18
+ type InboundEnvelope = MessagingOperatorInboundEnvelope;
19
+ type IdentityBinding = MessagingOperatorIdentityBinding;
20
+ export declare const OperatorApprovedCommandSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
21
21
  kind: z.ZodLiteral<"status">;
22
22
  }, z.core.$strip>, z.ZodObject<{
23
23
  kind: z.ZodLiteral<"ready">;
@@ -39,8 +39,8 @@ export declare const MetaApprovedCommandSchema: z.ZodDiscriminatedUnion<[z.ZodOb
39
39
  prompt: z.ZodString;
40
40
  max_steps: z.ZodOptional<z.ZodNumber>;
41
41
  }, z.core.$strip>], "kind">;
42
- export type MetaApprovedCommand = z.infer<typeof MetaApprovedCommandSchema>;
43
- export declare const MetaAgentBackendTurnResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
42
+ export type OperatorApprovedCommand = z.infer<typeof OperatorApprovedCommandSchema>;
43
+ export declare const OperatorBackendTurnResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
44
44
  kind: z.ZodLiteral<"respond">;
45
45
  message: z.ZodString;
46
46
  }, z.core.$strip>, z.ZodObject<{
@@ -68,32 +68,32 @@ export declare const MetaAgentBackendTurnResultSchema: z.ZodDiscriminatedUnion<[
68
68
  max_steps: z.ZodOptional<z.ZodNumber>;
69
69
  }, z.core.$strip>], "kind">;
70
70
  }, z.core.$strip>], "kind">;
71
- export type MetaAgentBackendTurnResult = z.infer<typeof MetaAgentBackendTurnResultSchema>;
72
- export type MetaAgentBackendTurnInput = {
71
+ export type OperatorBackendTurnResult = z.infer<typeof OperatorBackendTurnResultSchema>;
72
+ export type OperatorBackendTurnInput = {
73
73
  sessionId: string;
74
74
  turnId: string;
75
75
  inbound: InboundEnvelope;
76
76
  binding: IdentityBinding;
77
77
  };
78
- export interface MessagingMetaAgentBackend {
79
- runTurn(input: MetaAgentBackendTurnInput): Promise<MetaAgentBackendTurnResult>;
78
+ export interface MessagingOperatorBackend {
79
+ runTurn(input: OperatorBackendTurnInput): Promise<OperatorBackendTurnResult>;
80
80
  }
81
- export type MetaAgentDecision = {
81
+ export type OperatorDecision = {
82
82
  kind: "response";
83
83
  message: string;
84
- metaSessionId: string;
85
- metaTurnId: string;
84
+ operatorSessionId: string;
85
+ operatorTurnId: string;
86
86
  } | {
87
87
  kind: "command";
88
88
  commandText: string;
89
- metaSessionId: string;
90
- metaTurnId: string;
89
+ operatorSessionId: string;
90
+ operatorTurnId: string;
91
91
  } | {
92
92
  kind: "reject";
93
- reason: "meta_agent_disabled" | "meta_agent_action_disallowed" | "meta_agent_invalid_output" | "context_missing" | "context_ambiguous" | "context_unauthorized" | "cli_validation_failed";
93
+ reason: "operator_disabled" | "operator_action_disallowed" | "operator_invalid_output" | "context_missing" | "context_ambiguous" | "context_unauthorized" | "cli_validation_failed";
94
94
  details?: string;
95
- metaSessionId: string;
96
- metaTurnId: string;
95
+ operatorSessionId: string;
96
+ operatorTurnId: string;
97
97
  };
98
98
  export type ApprovedCommandBrokerOpts = {
99
99
  contextResolver?: CommandContextResolver;
@@ -103,47 +103,46 @@ export declare class ApprovedCommandBroker {
103
103
  #private;
104
104
  constructor(opts?: ApprovedCommandBrokerOpts);
105
105
  approve(opts: {
106
- proposal: MetaApprovedCommand;
106
+ proposal: OperatorApprovedCommand;
107
107
  inbound: InboundEnvelope;
108
108
  }): {
109
109
  kind: "approved";
110
110
  commandText: string;
111
111
  } | {
112
112
  kind: "reject";
113
- reason: "meta_agent_action_disallowed" | "context_missing" | "context_ambiguous" | "context_unauthorized" | "cli_validation_failed";
113
+ reason: "operator_action_disallowed" | "context_missing" | "context_ambiguous" | "context_unauthorized" | "cli_validation_failed";
114
114
  details?: string;
115
115
  };
116
116
  }
117
- export type MessagingMetaAgentRuntimeOpts = {
118
- backend: MessagingMetaAgentBackend;
117
+ export type MessagingOperatorRuntimeOpts = {
118
+ backend: MessagingOperatorBackend;
119
119
  broker?: ApprovedCommandBroker;
120
120
  enabled?: boolean;
121
121
  enabledChannels?: readonly string[];
122
122
  sessionIdFactory?: () => string;
123
123
  turnIdFactory?: () => string;
124
124
  };
125
- export declare class MessagingMetaAgentRuntime {
125
+ export declare class MessagingOperatorRuntime {
126
126
  #private;
127
- constructor(opts: MessagingMetaAgentRuntimeOpts);
127
+ constructor(opts: MessagingOperatorRuntimeOpts);
128
128
  handleInbound(opts: {
129
129
  inbound: InboundEnvelope;
130
130
  binding: IdentityBinding;
131
- }): Promise<MetaAgentDecision>;
131
+ }): Promise<OperatorDecision>;
132
132
  }
133
- export type PiMessagingMetaAgentBackendOpts = {
133
+ export type PiMessagingOperatorBackendOpts = {
134
134
  provider?: string;
135
135
  model?: string;
136
136
  thinking?: string;
137
137
  systemPrompt?: string;
138
138
  timeoutMs?: number;
139
139
  extensionPaths?: string[];
140
- extensionFactories?: Array<(pi: any) => void | Promise<void>>;
141
140
  };
142
141
  export declare const DEFAULT_CHAT_SYSTEM_PROMPT: string;
143
- export declare class PiMessagingMetaAgentBackend implements MessagingMetaAgentBackend {
142
+ export declare class PiMessagingOperatorBackend implements MessagingOperatorBackend {
144
143
  #private;
145
- constructor(opts?: PiMessagingMetaAgentBackendOpts);
146
- runTurn(input: MetaAgentBackendTurnInput): Promise<MetaAgentBackendTurnResult>;
144
+ constructor(opts?: PiMessagingOperatorBackendOpts);
145
+ runTurn(input: OperatorBackendTurnInput): Promise<OperatorBackendTurnResult>;
147
146
  }
148
147
  export {};
149
- //# sourceMappingURL=meta_agent.d.ts.map
148
+ //# sourceMappingURL=operator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,MAAM,gCAAgC,GAAG;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG,gCAAgC,CAAC;AACxD,KAAK,eAAe,GAAG,gCAAgC,CAAC;AAIxD,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;2BAoBxC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAG1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,MAAM,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,gBAAgB,GACzB;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACtB,GACD;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACtB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EACH,mBAAmB,GACnB,4BAA4B,GAC5B,yBAAyB,GACzB,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,GACtB,uBAAuB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACtB,CAAC;AAEL,MAAM,MAAM,yBAAyB,GAAG;IACvC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAaF,qBAAa,qBAAqB;;gBAId,IAAI,GAAE,yBAA8B;IAKhD,OAAO,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,uBAAuB,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GACjF;QACA,IAAI,EAAE,UAAU,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACnB,GACD;QACA,IAAI,EAAE,QAAQ,CAAC;QACf,MAAM,EACH,4BAA4B,GAC5B,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,GACtB,uBAAuB,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;KAChB;CAgFJ;AAED,MAAM,MAAM,4BAA4B,GAAG;IAC1C,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAcF,qBAAa,wBAAwB;;gBASjB,IAAI,EAAE,4BAA4B;IAoBxC,aAAa,CAAC,IAAI,EAAE;QAChC,OAAO,EAAE,eAAe,CAAC;QACzB,OAAO,EAAE,eAAe,CAAC;KACzB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAiF7B;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAU3B,CAAC;AAwBb,qBAAa,0BAA2B,YAAW,wBAAwB;;gBAQvD,IAAI,GAAE,8BAAmC;IAS/C,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAiEzF"}
@@ -1,9 +1,8 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { z } from "zod";
3
2
  import { CommandContextResolver } from "./command_context.js";
4
3
  import { createMuSession } from "./session_factory.js";
5
4
  const SAFE_RESPONSE_RE = /^[\s\S]{1,2000}$/;
6
- export const MetaApprovedCommandSchema = z.discriminatedUnion("kind", [
5
+ export const OperatorApprovedCommandSchema = z.discriminatedUnion("kind", [
7
6
  z.object({ kind: z.literal("status") }),
8
7
  z.object({ kind: z.literal("ready") }),
9
8
  z.object({ kind: z.literal("issue_list") }),
@@ -24,9 +23,9 @@ export const MetaApprovedCommandSchema = z.discriminatedUnion("kind", [
24
23
  max_steps: z.number().int().min(1).max(500).optional(),
25
24
  }),
26
25
  ]);
27
- export const MetaAgentBackendTurnResultSchema = z.discriminatedUnion("kind", [
26
+ export const OperatorBackendTurnResultSchema = z.discriminatedUnion("kind", [
28
27
  z.object({ kind: z.literal("respond"), message: z.string().trim().min(1).max(2000) }),
29
- z.object({ kind: z.literal("command"), command: MetaApprovedCommandSchema }),
28
+ z.object({ kind: z.literal("command"), command: OperatorApprovedCommandSchema }),
30
29
  ]);
31
30
  function splitPromptIntoTokens(prompt) {
32
31
  return prompt
@@ -77,7 +76,7 @@ export class ApprovedCommandBroker {
77
76
  }
78
77
  case "run_resume": {
79
78
  if (!this.#runTriggersEnabled) {
80
- return { kind: "reject", reason: "meta_agent_action_disallowed", details: "run triggers disabled" };
79
+ return { kind: "reject", reason: "operator_action_disallowed", details: "run triggers disabled" };
81
80
  }
82
81
  commandKey = "run resume";
83
82
  args = [];
@@ -91,14 +90,14 @@ export class ApprovedCommandBroker {
91
90
  }
92
91
  case "run_start": {
93
92
  if (!this.#runTriggersEnabled) {
94
- return { kind: "reject", reason: "meta_agent_action_disallowed", details: "run triggers disabled" };
93
+ return { kind: "reject", reason: "operator_action_disallowed", details: "run triggers disabled" };
95
94
  }
96
95
  commandKey = "run start";
97
96
  args = splitPromptIntoTokens(opts.proposal.prompt);
98
97
  break;
99
98
  }
100
99
  default:
101
- return { kind: "reject", reason: "meta_agent_action_disallowed" };
100
+ return { kind: "reject", reason: "operator_action_disallowed" };
102
101
  }
103
102
  const resolved = this.#contextResolver.resolve({
104
103
  repoRoot: opts.inbound.repo_root,
@@ -122,15 +121,15 @@ export class ApprovedCommandBroker {
122
121
  }
123
122
  }
124
123
  function defaultSessionId() {
125
- return `meta-${randomUUID()}`;
124
+ return `operator-${crypto.randomUUID()}`;
126
125
  }
127
126
  function defaultTurnId() {
128
- return `turn-${randomUUID()}`;
127
+ return `turn-${crypto.randomUUID()}`;
129
128
  }
130
129
  function conversationKey(inbound, binding) {
131
130
  return `${inbound.channel}:${inbound.channel_tenant_id}:${inbound.channel_conversation_id}:${binding.binding_id}`;
132
131
  }
133
- export class MessagingMetaAgentRuntime {
132
+ export class MessagingOperatorRuntime {
134
133
  #backend;
135
134
  #broker;
136
135
  #enabled;
@@ -162,22 +161,22 @@ export class MessagingMetaAgentRuntime {
162
161
  if (!this.#enabled) {
163
162
  return {
164
163
  kind: "reject",
165
- reason: "meta_agent_disabled",
166
- metaSessionId: sessionId,
167
- metaTurnId: turnId,
164
+ reason: "operator_disabled",
165
+ operatorSessionId: sessionId,
166
+ operatorTurnId: turnId,
168
167
  };
169
168
  }
170
169
  if (this.#enabledChannels && !this.#enabledChannels.has(opts.inbound.channel.toLowerCase())) {
171
170
  return {
172
171
  kind: "reject",
173
- reason: "meta_agent_disabled",
174
- metaSessionId: sessionId,
175
- metaTurnId: turnId,
172
+ reason: "operator_disabled",
173
+ operatorSessionId: sessionId,
174
+ operatorTurnId: turnId,
176
175
  };
177
176
  }
178
177
  let backendResult;
179
178
  try {
180
- backendResult = MetaAgentBackendTurnResultSchema.parse(await this.#backend.runTurn({
179
+ backendResult = OperatorBackendTurnResultSchema.parse(await this.#backend.runTurn({
181
180
  sessionId,
182
181
  turnId,
183
182
  inbound: opts.inbound,
@@ -187,10 +186,10 @@ export class MessagingMetaAgentRuntime {
187
186
  catch (err) {
188
187
  return {
189
188
  kind: "reject",
190
- reason: "meta_agent_invalid_output",
191
- details: err instanceof Error ? err.message : "meta_agent_backend_error",
192
- metaSessionId: sessionId,
193
- metaTurnId: turnId,
189
+ reason: "operator_invalid_output",
190
+ details: err instanceof Error ? err.message : "operator_backend_error",
191
+ operatorSessionId: sessionId,
192
+ operatorTurnId: turnId,
194
193
  };
195
194
  }
196
195
  if (backendResult.kind === "respond") {
@@ -198,17 +197,17 @@ export class MessagingMetaAgentRuntime {
198
197
  if (!SAFE_RESPONSE_RE.test(message)) {
199
198
  return {
200
199
  kind: "reject",
201
- reason: "meta_agent_invalid_output",
200
+ reason: "operator_invalid_output",
202
201
  details: "invalid response payload",
203
- metaSessionId: sessionId,
204
- metaTurnId: turnId,
202
+ operatorSessionId: sessionId,
203
+ operatorTurnId: turnId,
205
204
  };
206
205
  }
207
206
  return {
208
207
  kind: "response",
209
208
  message,
210
- metaSessionId: sessionId,
211
- metaTurnId: turnId,
209
+ operatorSessionId: sessionId,
210
+ operatorTurnId: turnId,
212
211
  };
213
212
  }
214
213
  const approved = this.#broker.approve({
@@ -220,15 +219,15 @@ export class MessagingMetaAgentRuntime {
220
219
  kind: "reject",
221
220
  reason: approved.reason,
222
221
  details: approved.details,
223
- metaSessionId: sessionId,
224
- metaTurnId: turnId,
222
+ operatorSessionId: sessionId,
223
+ operatorTurnId: turnId,
225
224
  };
226
225
  }
227
226
  return {
228
227
  kind: "command",
229
228
  commandText: approved.commandText,
230
- metaSessionId: sessionId,
231
- metaTurnId: turnId,
229
+ operatorSessionId: sessionId,
230
+ operatorTurnId: turnId,
232
231
  };
233
232
  }
234
233
  }
@@ -243,7 +242,7 @@ export const DEFAULT_CHAT_SYSTEM_PROMPT = [
243
242
  "",
244
243
  "Be concise, practical, and actionable.",
245
244
  ].join("\n");
246
- const DEFAULT_META_SYSTEM_PROMPT = [
245
+ const DEFAULT_OPERATOR_SYSTEM_PROMPT = [
247
246
  "You are mu, an AI assistant for the mu orchestration platform.",
248
247
  "You have tools to interact with the mu server: mu_status, mu_control_plane, mu_issues, mu_forum, mu_events.",
249
248
  "Use these tools to answer questions about repository state, issues, events, and control-plane runtime state.",
@@ -253,7 +252,7 @@ const DEFAULT_META_SYSTEM_PROMPT = [
253
252
  "Be concise, practical, and actionable.",
254
253
  "Respond in plain text — do not wrap in JSON.",
255
254
  ].join("\n");
256
- function buildMetaPrompt(input) {
255
+ function buildOperatorPrompt(input) {
257
256
  return [
258
257
  `[Messaging context]`,
259
258
  `channel: ${input.inbound.channel}`,
@@ -263,22 +262,20 @@ function buildMetaPrompt(input) {
263
262
  `User message: ${input.inbound.command_text}`,
264
263
  ].join("\n");
265
264
  }
266
- export class PiMessagingMetaAgentBackend {
265
+ export class PiMessagingOperatorBackend {
267
266
  #provider;
268
267
  #model;
269
268
  #thinking;
270
269
  #systemPrompt;
271
270
  #timeoutMs;
272
271
  #extensionPaths;
273
- #extensionFactories;
274
272
  constructor(opts = {}) {
275
273
  this.#provider = opts.provider;
276
274
  this.#model = opts.model;
277
275
  this.#thinking = opts.thinking ?? "minimal";
278
- this.#systemPrompt = opts.systemPrompt ?? DEFAULT_META_SYSTEM_PROMPT;
276
+ this.#systemPrompt = opts.systemPrompt ?? DEFAULT_OPERATOR_SYSTEM_PROMPT;
279
277
  this.#timeoutMs = Math.max(1_000, Math.trunc(opts.timeoutMs ?? 90_000));
280
278
  this.#extensionPaths = opts.extensionPaths ?? [];
281
- this.#extensionFactories = opts.extensionFactories ?? [];
282
279
  }
283
280
  async runTurn(input) {
284
281
  const session = await createMuSession({
@@ -288,7 +285,6 @@ export class PiMessagingMetaAgentBackend {
288
285
  model: this.#model,
289
286
  thinking: this.#thinking,
290
287
  extensionPaths: this.#extensionPaths,
291
- extensionFactories: this.#extensionFactories,
292
288
  });
293
289
  try {
294
290
  await session.bindExtensions({
@@ -325,11 +321,11 @@ export class PiMessagingMetaAgentBackend {
325
321
  }
326
322
  });
327
323
  const timeoutPromise = new Promise((_, reject) => {
328
- setTimeout(() => reject(new Error("pi meta-agent timeout")), this.#timeoutMs);
324
+ setTimeout(() => reject(new Error("pi operator timeout")), this.#timeoutMs);
329
325
  });
330
326
  try {
331
327
  await Promise.race([
332
- session.prompt(buildMetaPrompt(input), { expandPromptTemplates: false }),
328
+ session.prompt(buildOperatorPrompt(input), { expandPromptTemplates: false }),
333
329
  timeoutPromise,
334
330
  ]);
335
331
  }
@@ -339,7 +335,7 @@ export class PiMessagingMetaAgentBackend {
339
335
  // The agent now responds naturally with tools — always return as respond
340
336
  const message = assistantText.trim();
341
337
  if (!message) {
342
- throw new Error("meta_agent_empty_response");
338
+ throw new Error("operator_empty_response");
343
339
  }
344
340
  return { kind: "respond", message: message.slice(0, 2000) };
345
341
  }
@@ -24,7 +24,6 @@ export type CreateMuResourceLoaderOpts = {
24
24
  settingsManager?: SettingsManager;
25
25
  additionalExtensionPaths?: string[];
26
26
  additionalSkillPaths?: string[];
27
- extensionFactories?: import("@mariozechner/pi-coding-agent").ExtensionFactory[];
28
27
  };
29
28
  export declare function createMuResourceLoader(opts: CreateMuResourceLoaderOpts): DefaultResourceLoader;
30
29
  //# sourceMappingURL=pi_sdk_backend.d.ts.map
@@ -1 +1 @@
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,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,kBAAkB,CAAC,EAAE,MAAM,GACzB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA6BxB;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,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,+BAA+B,EAAE,gBAAgB,EAAE,CAAC;CAChF,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,qBAAqB,CAwB9F"}
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,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,kBAAkB,CAAC,EAAE,MAAM,GACzB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA6BxB;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,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,qBAAqB,CAuB9F"}
@@ -145,7 +145,6 @@ export function createMuResourceLoader(opts) {
145
145
  settingsManager: opts.settingsManager ?? SettingsManager.inMemory(),
146
146
  additionalExtensionPaths: opts.additionalExtensionPaths,
147
147
  additionalSkillPaths: [...skillPaths],
148
- extensionFactories: opts.extensionFactories,
149
148
  systemPromptOverride: (_base) => opts.systemPrompt,
150
149
  agentsFilesOverride: (base) => ({
151
150
  agentsFiles: base.agentsFiles.filter((f) => basename(f.path) === "AGENTS.md"),
package/dist/prompt.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readdir, readFile } from "node:fs/promises";
1
+ import { readdir } from "node:fs/promises";
2
2
  import { isAbsolute, join, relative } from "node:path";
3
3
  function stripQuotes(s) {
4
4
  const trimmed = s.trim();
@@ -13,7 +13,7 @@ function stripQuotes(s) {
13
13
  }
14
14
  function parseSimpleYamlFrontmatter(text) {
15
15
  // We only need a small subset: flat `key: value` mappings.
16
- // If parsing fails, we return {} (mirrors Python behavior).
16
+ // If parsing fails, return empty metadata.
17
17
  const out = {};
18
18
  const lines = text.split(/\r?\n/);
19
19
  for (const rawLine of lines) {
@@ -88,7 +88,7 @@ export function extractDescription(meta, body) {
88
88
  return { description: "", source: "none" };
89
89
  }
90
90
  export async function readPromptMeta(path) {
91
- const text = await readFile(path, "utf8");
91
+ const text = await Bun.file(path).text();
92
92
  const { meta } = splitFrontmatter(text);
93
93
  return meta;
94
94
  }
@@ -108,7 +108,7 @@ export async function buildRoleCatalog(repoRoot) {
108
108
  const sections = [];
109
109
  for (const file of roleFiles) {
110
110
  const abs = join(rolesDir, file);
111
- const text = await readFile(abs, "utf8");
111
+ const text = await Bun.file(abs).text();
112
112
  const { meta, body } = splitFrontmatter(text);
113
113
  const name = file.replace(/\.md$/, "");
114
114
  const promptPath = toPosixPath(relative(repoRoot, abs));
@@ -130,7 +130,7 @@ export async function buildRoleCatalog(repoRoot) {
130
130
  return sections.join("\n\n");
131
131
  }
132
132
  export async function renderPromptTemplate(path, issue, opts = {}) {
133
- const text = await readFile(path, "utf8");
133
+ const text = await Bun.file(path).text();
134
134
  const { body } = splitFrontmatter(text);
135
135
  let promptText = issue.title ?? "";
136
136
  if (issue.body) {
@@ -1,4 +1,3 @@
1
- import type { ExtensionFactory } from "@mariozechner/pi-coding-agent";
2
1
  export type CreateMuSessionOpts = {
3
2
  cwd: string;
4
3
  systemPrompt?: string;
@@ -6,7 +5,6 @@ export type CreateMuSessionOpts = {
6
5
  model?: string;
7
6
  thinking?: string;
8
7
  extensionPaths?: string[];
9
- extensionFactories?: ExtensionFactory[];
10
8
  };
11
9
  export type MuSession = {
12
10
  subscribe: (listener: (event: any) => void) => () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"session_factory.d.ts","sourceRoot":"","sources":["../src/session_factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC1D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAmCnF"}
1
+ {"version":3,"file":"session_factory.d.ts","sourceRoot":"","sources":["../src/session_factory.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC1D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAkCnF"}
@@ -15,7 +15,6 @@ export async function createMuSession(opts) {
15
15
  systemPrompt: opts.systemPrompt ?? "You are mu, an AI assistant.",
16
16
  settingsManager,
17
17
  additionalExtensionPaths: opts.extensionPaths,
18
- extensionFactories: opts.extensionFactories,
19
18
  });
20
19
  await resourceLoader.reload();
21
20
  const { session } = await createAgentSession({
package/package.json CHANGED
@@ -1,6 +1,14 @@
1
1
  {
2
2
  "name": "@femtomc/mu-agent",
3
- "version": "26.2.38",
3
+ "version": "26.2.40",
4
+ "description": "Shared agent runtime for mu chat, orchestration roles, and serve extensions.",
5
+ "keywords": [
6
+ "mu",
7
+ "agent",
8
+ "runtime",
9
+ "chat",
10
+ "extensions"
11
+ ],
4
12
  "type": "module",
5
13
  "main": "./dist/index.js",
6
14
  "types": "./dist/index.d.ts",
@@ -14,7 +22,7 @@
14
22
  "dist/**"
15
23
  ],
16
24
  "dependencies": {
17
- "@femtomc/mu-core": "26.2.38",
25
+ "@femtomc/mu-core": "26.2.40",
18
26
  "@mariozechner/pi-agent-core": "^0.52.12",
19
27
  "@mariozechner/pi-ai": "^0.52.12",
20
28
  "@mariozechner/pi-coding-agent": "^0.52.12",
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta_agent.d.ts","sourceRoot":"","sources":["../src/meta_agent.ts"],"names":[],"mappings":"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"}