@femtomc/mu-agent 26.2.37 → 26.2.39
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 +5 -6
- package/dist/extensions/index.d.ts +0 -8
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +0 -16
- package/dist/extensions/server-tools.d.ts +1 -1
- package/dist/extensions/server-tools.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{meta_agent.d.ts → operator.d.ts} +31 -32
- package/dist/operator.d.ts.map +1 -0
- package/dist/{meta_agent.js → operator.js} +35 -38
- package/dist/pi_sdk_backend.d.ts +0 -1
- package/dist/pi_sdk_backend.d.ts.map +1 -1
- package/dist/pi_sdk_backend.js +0 -1
- package/dist/prompt.js +1 -1
- package/dist/session_factory.d.ts +0 -2
- package/dist/session_factory.d.ts.map +1 -1
- package/dist/session_factory.js +0 -1
- package/package.json +4 -2
- package/dist/meta_agent.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# @femtomc/mu-agent
|
|
2
2
|
|
|
3
|
-
Shared
|
|
3
|
+
Shared agent runtime package for mu.
|
|
4
4
|
|
|
5
|
-
This package
|
|
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
|
|
9
|
-
- Command context resolution for
|
|
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/
|
|
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;
|
|
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"}
|
package/dist/extensions/index.js
CHANGED
|
@@ -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
|
|
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
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
import { z } from "zod";
|
|
2
2
|
import { CommandContextResolver } from "./command_context.js";
|
|
3
|
-
export type
|
|
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
|
|
14
|
+
export type MessagingOperatorIdentityBinding = {
|
|
15
15
|
binding_id: string;
|
|
16
16
|
assurance_tier: string;
|
|
17
17
|
};
|
|
18
|
-
type InboundEnvelope =
|
|
19
|
-
type IdentityBinding =
|
|
20
|
-
export declare const
|
|
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
|
|
43
|
-
export declare const
|
|
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
|
|
72
|
-
export type
|
|
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
|
|
79
|
-
runTurn(input:
|
|
78
|
+
export interface MessagingOperatorBackend {
|
|
79
|
+
runTurn(input: OperatorBackendTurnInput): Promise<OperatorBackendTurnResult>;
|
|
80
80
|
}
|
|
81
|
-
export type
|
|
81
|
+
export type OperatorDecision = {
|
|
82
82
|
kind: "response";
|
|
83
83
|
message: string;
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
operatorSessionId: string;
|
|
85
|
+
operatorTurnId: string;
|
|
86
86
|
} | {
|
|
87
87
|
kind: "command";
|
|
88
88
|
commandText: string;
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
operatorSessionId: string;
|
|
90
|
+
operatorTurnId: string;
|
|
91
91
|
} | {
|
|
92
92
|
kind: "reject";
|
|
93
|
-
reason: "
|
|
93
|
+
reason: "operator_disabled" | "operator_action_disallowed" | "operator_invalid_output" | "context_missing" | "context_ambiguous" | "context_unauthorized" | "cli_validation_failed";
|
|
94
94
|
details?: string;
|
|
95
|
-
|
|
96
|
-
|
|
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:
|
|
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: "
|
|
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
|
|
118
|
-
backend:
|
|
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
|
|
125
|
+
export declare class MessagingOperatorRuntime {
|
|
126
126
|
#private;
|
|
127
|
-
constructor(opts:
|
|
127
|
+
constructor(opts: MessagingOperatorRuntimeOpts);
|
|
128
128
|
handleInbound(opts: {
|
|
129
129
|
inbound: InboundEnvelope;
|
|
130
130
|
binding: IdentityBinding;
|
|
131
|
-
}): Promise<
|
|
131
|
+
}): Promise<OperatorDecision>;
|
|
132
132
|
}
|
|
133
|
-
export type
|
|
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
|
|
142
|
+
export declare class PiMessagingOperatorBackend implements MessagingOperatorBackend {
|
|
144
143
|
#private;
|
|
145
|
-
constructor(opts?:
|
|
146
|
-
runTurn(input:
|
|
144
|
+
constructor(opts?: PiMessagingOperatorBackendOpts);
|
|
145
|
+
runTurn(input: OperatorBackendTurnInput): Promise<OperatorBackendTurnResult>;
|
|
147
146
|
}
|
|
148
147
|
export {};
|
|
149
|
-
//# sourceMappingURL=
|
|
148
|
+
//# sourceMappingURL=operator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { CommandContextResolver } from "./command_context.js";
|
|
4
4
|
import { createMuSession } from "./session_factory.js";
|
|
5
5
|
const SAFE_RESPONSE_RE = /^[\s\S]{1,2000}$/;
|
|
6
|
-
export const
|
|
6
|
+
export const OperatorApprovedCommandSchema = z.discriminatedUnion("kind", [
|
|
7
7
|
z.object({ kind: z.literal("status") }),
|
|
8
8
|
z.object({ kind: z.literal("ready") }),
|
|
9
9
|
z.object({ kind: z.literal("issue_list") }),
|
|
@@ -24,9 +24,9 @@ export const MetaApprovedCommandSchema = z.discriminatedUnion("kind", [
|
|
|
24
24
|
max_steps: z.number().int().min(1).max(500).optional(),
|
|
25
25
|
}),
|
|
26
26
|
]);
|
|
27
|
-
export const
|
|
27
|
+
export const OperatorBackendTurnResultSchema = z.discriminatedUnion("kind", [
|
|
28
28
|
z.object({ kind: z.literal("respond"), message: z.string().trim().min(1).max(2000) }),
|
|
29
|
-
z.object({ kind: z.literal("command"), command:
|
|
29
|
+
z.object({ kind: z.literal("command"), command: OperatorApprovedCommandSchema }),
|
|
30
30
|
]);
|
|
31
31
|
function splitPromptIntoTokens(prompt) {
|
|
32
32
|
return prompt
|
|
@@ -77,7 +77,7 @@ export class ApprovedCommandBroker {
|
|
|
77
77
|
}
|
|
78
78
|
case "run_resume": {
|
|
79
79
|
if (!this.#runTriggersEnabled) {
|
|
80
|
-
return { kind: "reject", reason: "
|
|
80
|
+
return { kind: "reject", reason: "operator_action_disallowed", details: "run triggers disabled" };
|
|
81
81
|
}
|
|
82
82
|
commandKey = "run resume";
|
|
83
83
|
args = [];
|
|
@@ -91,14 +91,14 @@ export class ApprovedCommandBroker {
|
|
|
91
91
|
}
|
|
92
92
|
case "run_start": {
|
|
93
93
|
if (!this.#runTriggersEnabled) {
|
|
94
|
-
return { kind: "reject", reason: "
|
|
94
|
+
return { kind: "reject", reason: "operator_action_disallowed", details: "run triggers disabled" };
|
|
95
95
|
}
|
|
96
96
|
commandKey = "run start";
|
|
97
97
|
args = splitPromptIntoTokens(opts.proposal.prompt);
|
|
98
98
|
break;
|
|
99
99
|
}
|
|
100
100
|
default:
|
|
101
|
-
return { kind: "reject", reason: "
|
|
101
|
+
return { kind: "reject", reason: "operator_action_disallowed" };
|
|
102
102
|
}
|
|
103
103
|
const resolved = this.#contextResolver.resolve({
|
|
104
104
|
repoRoot: opts.inbound.repo_root,
|
|
@@ -122,7 +122,7 @@ export class ApprovedCommandBroker {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
function defaultSessionId() {
|
|
125
|
-
return `
|
|
125
|
+
return `operator-${randomUUID()}`;
|
|
126
126
|
}
|
|
127
127
|
function defaultTurnId() {
|
|
128
128
|
return `turn-${randomUUID()}`;
|
|
@@ -130,7 +130,7 @@ function defaultTurnId() {
|
|
|
130
130
|
function conversationKey(inbound, binding) {
|
|
131
131
|
return `${inbound.channel}:${inbound.channel_tenant_id}:${inbound.channel_conversation_id}:${binding.binding_id}`;
|
|
132
132
|
}
|
|
133
|
-
export class
|
|
133
|
+
export class MessagingOperatorRuntime {
|
|
134
134
|
#backend;
|
|
135
135
|
#broker;
|
|
136
136
|
#enabled;
|
|
@@ -162,22 +162,22 @@ export class MessagingMetaAgentRuntime {
|
|
|
162
162
|
if (!this.#enabled) {
|
|
163
163
|
return {
|
|
164
164
|
kind: "reject",
|
|
165
|
-
reason: "
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
reason: "operator_disabled",
|
|
166
|
+
operatorSessionId: sessionId,
|
|
167
|
+
operatorTurnId: turnId,
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
170
|
if (this.#enabledChannels && !this.#enabledChannels.has(opts.inbound.channel.toLowerCase())) {
|
|
171
171
|
return {
|
|
172
172
|
kind: "reject",
|
|
173
|
-
reason: "
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
reason: "operator_disabled",
|
|
174
|
+
operatorSessionId: sessionId,
|
|
175
|
+
operatorTurnId: turnId,
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
let backendResult;
|
|
179
179
|
try {
|
|
180
|
-
backendResult =
|
|
180
|
+
backendResult = OperatorBackendTurnResultSchema.parse(await this.#backend.runTurn({
|
|
181
181
|
sessionId,
|
|
182
182
|
turnId,
|
|
183
183
|
inbound: opts.inbound,
|
|
@@ -187,10 +187,10 @@ export class MessagingMetaAgentRuntime {
|
|
|
187
187
|
catch (err) {
|
|
188
188
|
return {
|
|
189
189
|
kind: "reject",
|
|
190
|
-
reason: "
|
|
191
|
-
details: err instanceof Error ? err.message : "
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
reason: "operator_invalid_output",
|
|
191
|
+
details: err instanceof Error ? err.message : "operator_backend_error",
|
|
192
|
+
operatorSessionId: sessionId,
|
|
193
|
+
operatorTurnId: turnId,
|
|
194
194
|
};
|
|
195
195
|
}
|
|
196
196
|
if (backendResult.kind === "respond") {
|
|
@@ -198,17 +198,17 @@ export class MessagingMetaAgentRuntime {
|
|
|
198
198
|
if (!SAFE_RESPONSE_RE.test(message)) {
|
|
199
199
|
return {
|
|
200
200
|
kind: "reject",
|
|
201
|
-
reason: "
|
|
201
|
+
reason: "operator_invalid_output",
|
|
202
202
|
details: "invalid response payload",
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
operatorSessionId: sessionId,
|
|
204
|
+
operatorTurnId: turnId,
|
|
205
205
|
};
|
|
206
206
|
}
|
|
207
207
|
return {
|
|
208
208
|
kind: "response",
|
|
209
209
|
message,
|
|
210
|
-
|
|
211
|
-
|
|
210
|
+
operatorSessionId: sessionId,
|
|
211
|
+
operatorTurnId: turnId,
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
const approved = this.#broker.approve({
|
|
@@ -220,15 +220,15 @@ export class MessagingMetaAgentRuntime {
|
|
|
220
220
|
kind: "reject",
|
|
221
221
|
reason: approved.reason,
|
|
222
222
|
details: approved.details,
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
operatorSessionId: sessionId,
|
|
224
|
+
operatorTurnId: turnId,
|
|
225
225
|
};
|
|
226
226
|
}
|
|
227
227
|
return {
|
|
228
228
|
kind: "command",
|
|
229
229
|
commandText: approved.commandText,
|
|
230
|
-
|
|
231
|
-
|
|
230
|
+
operatorSessionId: sessionId,
|
|
231
|
+
operatorTurnId: turnId,
|
|
232
232
|
};
|
|
233
233
|
}
|
|
234
234
|
}
|
|
@@ -243,7 +243,7 @@ export const DEFAULT_CHAT_SYSTEM_PROMPT = [
|
|
|
243
243
|
"",
|
|
244
244
|
"Be concise, practical, and actionable.",
|
|
245
245
|
].join("\n");
|
|
246
|
-
const
|
|
246
|
+
const DEFAULT_OPERATOR_SYSTEM_PROMPT = [
|
|
247
247
|
"You are mu, an AI assistant for the mu orchestration platform.",
|
|
248
248
|
"You have tools to interact with the mu server: mu_status, mu_control_plane, mu_issues, mu_forum, mu_events.",
|
|
249
249
|
"Use these tools to answer questions about repository state, issues, events, and control-plane runtime state.",
|
|
@@ -253,7 +253,7 @@ const DEFAULT_META_SYSTEM_PROMPT = [
|
|
|
253
253
|
"Be concise, practical, and actionable.",
|
|
254
254
|
"Respond in plain text — do not wrap in JSON.",
|
|
255
255
|
].join("\n");
|
|
256
|
-
function
|
|
256
|
+
function buildOperatorPrompt(input) {
|
|
257
257
|
return [
|
|
258
258
|
`[Messaging context]`,
|
|
259
259
|
`channel: ${input.inbound.channel}`,
|
|
@@ -263,22 +263,20 @@ function buildMetaPrompt(input) {
|
|
|
263
263
|
`User message: ${input.inbound.command_text}`,
|
|
264
264
|
].join("\n");
|
|
265
265
|
}
|
|
266
|
-
export class
|
|
266
|
+
export class PiMessagingOperatorBackend {
|
|
267
267
|
#provider;
|
|
268
268
|
#model;
|
|
269
269
|
#thinking;
|
|
270
270
|
#systemPrompt;
|
|
271
271
|
#timeoutMs;
|
|
272
272
|
#extensionPaths;
|
|
273
|
-
#extensionFactories;
|
|
274
273
|
constructor(opts = {}) {
|
|
275
274
|
this.#provider = opts.provider;
|
|
276
275
|
this.#model = opts.model;
|
|
277
276
|
this.#thinking = opts.thinking ?? "minimal";
|
|
278
|
-
this.#systemPrompt = opts.systemPrompt ??
|
|
277
|
+
this.#systemPrompt = opts.systemPrompt ?? DEFAULT_OPERATOR_SYSTEM_PROMPT;
|
|
279
278
|
this.#timeoutMs = Math.max(1_000, Math.trunc(opts.timeoutMs ?? 90_000));
|
|
280
279
|
this.#extensionPaths = opts.extensionPaths ?? [];
|
|
281
|
-
this.#extensionFactories = opts.extensionFactories ?? [];
|
|
282
280
|
}
|
|
283
281
|
async runTurn(input) {
|
|
284
282
|
const session = await createMuSession({
|
|
@@ -288,7 +286,6 @@ export class PiMessagingMetaAgentBackend {
|
|
|
288
286
|
model: this.#model,
|
|
289
287
|
thinking: this.#thinking,
|
|
290
288
|
extensionPaths: this.#extensionPaths,
|
|
291
|
-
extensionFactories: this.#extensionFactories,
|
|
292
289
|
});
|
|
293
290
|
try {
|
|
294
291
|
await session.bindExtensions({
|
|
@@ -325,11 +322,11 @@ export class PiMessagingMetaAgentBackend {
|
|
|
325
322
|
}
|
|
326
323
|
});
|
|
327
324
|
const timeoutPromise = new Promise((_, reject) => {
|
|
328
|
-
setTimeout(() => reject(new Error("pi
|
|
325
|
+
setTimeout(() => reject(new Error("pi operator timeout")), this.#timeoutMs);
|
|
329
326
|
});
|
|
330
327
|
try {
|
|
331
328
|
await Promise.race([
|
|
332
|
-
session.prompt(
|
|
329
|
+
session.prompt(buildOperatorPrompt(input), { expandPromptTemplates: false }),
|
|
333
330
|
timeoutPromise,
|
|
334
331
|
]);
|
|
335
332
|
}
|
|
@@ -339,7 +336,7 @@ export class PiMessagingMetaAgentBackend {
|
|
|
339
336
|
// The agent now responds naturally with tools — always return as respond
|
|
340
337
|
const message = assistantText.trim();
|
|
341
338
|
if (!message) {
|
|
342
|
-
throw new Error("
|
|
339
|
+
throw new Error("operator_empty_response");
|
|
343
340
|
}
|
|
344
341
|
return { kind: "respond", message: message.slice(0, 2000) };
|
|
345
342
|
}
|
package/dist/pi_sdk_backend.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/pi_sdk_backend.js
CHANGED
|
@@ -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
|
@@ -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,
|
|
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) {
|
|
@@ -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":"
|
|
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"}
|
package/dist/session_factory.js
CHANGED
|
@@ -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,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@femtomc/mu-agent",
|
|
3
|
-
"version": "26.2.
|
|
3
|
+
"version": "26.2.39",
|
|
4
|
+
"description": "Shared agent runtime for mu chat, orchestration roles, and serve extensions.",
|
|
5
|
+
"keywords": ["mu", "agent", "runtime", "chat", "extensions"],
|
|
4
6
|
"type": "module",
|
|
5
7
|
"main": "./dist/index.js",
|
|
6
8
|
"types": "./dist/index.d.ts",
|
|
@@ -14,7 +16,7 @@
|
|
|
14
16
|
"dist/**"
|
|
15
17
|
],
|
|
16
18
|
"dependencies": {
|
|
17
|
-
"@femtomc/mu-core": "26.2.
|
|
19
|
+
"@femtomc/mu-core": "26.2.39",
|
|
18
20
|
"@mariozechner/pi-agent-core": "^0.52.12",
|
|
19
21
|
"@mariozechner/pi-ai": "^0.52.12",
|
|
20
22
|
"@mariozechner/pi-coding-agent": "^0.52.12",
|
package/dist/meta_agent.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta_agent.d.ts","sourceRoot":"","sources":["../src/meta_agent.ts"],"names":[],"mappings":"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"}
|