@femtomc/mu-agent 26.2.96 → 26.2.97
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/dist/extensions/planning-ui.js +1 -1
- package/dist/operator.d.ts.map +1 -1
- package/dist/operator.js +47 -11
- package/package.json +2 -2
|
@@ -320,7 +320,7 @@ function renderPlanningUi(ctx, state) {
|
|
|
320
320
|
const shownSteps = state.steps.slice(0, WIDGET_STEP_LIMIT);
|
|
321
321
|
for (let index = 0; index < shownSteps.length; index += 1) {
|
|
322
322
|
const step = shownSteps[index];
|
|
323
|
-
const mark = step.done ? ctx.ui.theme.fg("success", "
|
|
323
|
+
const mark = step.done ? ctx.ui.theme.fg("success", "[x]") : ctx.ui.theme.fg("muted", "[ ]");
|
|
324
324
|
const labelText = shortLabel(step.label, "(empty)", WIDGET_STEP_LABEL_MAX);
|
|
325
325
|
const label = step.done ? ctx.ui.theme.fg("dim", labelText) : ctx.ui.theme.fg("text", labelText);
|
|
326
326
|
lines.push(`${mark} ${ctx.ui.theme.fg("muted", `${index + 1}.`)} ${label}`);
|
package/dist/operator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAmB,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,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;
|
|
1
|
+
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"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"}
|
package/dist/operator.js
CHANGED
|
@@ -5,7 +5,8 @@ import { z } from "zod";
|
|
|
5
5
|
import { CommandContextResolver } from "./command_context.js";
|
|
6
6
|
import { createMuSession } from "./session_factory.js";
|
|
7
7
|
import { DEFAULT_OPERATOR_SYSTEM_PROMPT } from "./default_prompts.js";
|
|
8
|
-
const
|
|
8
|
+
const OPERATOR_RESPONSE_MAX_CHARS = 12_000;
|
|
9
|
+
const SAFE_RESPONSE_RE = new RegExp(`^[\\s\\S]{1,${OPERATOR_RESPONSE_MAX_CHARS}}$`);
|
|
9
10
|
export const OperatorApprovedCommandSchema = z.discriminatedUnion("kind", [
|
|
10
11
|
z.object({ kind: z.literal("status") }),
|
|
11
12
|
z.object({ kind: z.literal("ready") }),
|
|
@@ -40,7 +41,7 @@ export const OperatorApprovedCommandSchema = z.discriminatedUnion("kind", [
|
|
|
40
41
|
}),
|
|
41
42
|
]);
|
|
42
43
|
export const OperatorBackendTurnResultSchema = z.discriminatedUnion("kind", [
|
|
43
|
-
z.object({ kind: z.literal("respond"), message: z.string().trim().min(1).max(
|
|
44
|
+
z.object({ kind: z.literal("respond"), message: z.string().trim().min(1).max(OPERATOR_RESPONSE_MAX_CHARS) }),
|
|
44
45
|
z.object({ kind: z.literal("command"), command: OperatorApprovedCommandSchema }),
|
|
45
46
|
]);
|
|
46
47
|
function normalizeArg(arg) {
|
|
@@ -166,8 +167,31 @@ function buildOperatorFailureFallbackMessage(code) {
|
|
|
166
167
|
"You can retry, or use an explicit /mu command (for example: /mu status or /mu issue list).",
|
|
167
168
|
].join("\n");
|
|
168
169
|
}
|
|
170
|
+
function isAgentBusyError(err) {
|
|
171
|
+
if (!(err instanceof Error)) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const text = err.message.trim().toLowerCase();
|
|
175
|
+
return text.includes("agent is already processing");
|
|
176
|
+
}
|
|
177
|
+
function slackThreadScope(inbound) {
|
|
178
|
+
if (inbound.channel !== "slack") {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
const metadata = inbound.metadata;
|
|
182
|
+
const candidate = [metadata.slack_thread_ts, metadata.slack_message_ts, metadata.thread_ts].find((value) => typeof value === "string" && value.trim().length > 0);
|
|
183
|
+
if (typeof candidate !== "string") {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
return candidate.trim();
|
|
187
|
+
}
|
|
169
188
|
function conversationKey(inbound, binding) {
|
|
170
|
-
|
|
189
|
+
const base = `${inbound.channel}:${inbound.channel_tenant_id}:${inbound.channel_conversation_id}:${binding.binding_id}`;
|
|
190
|
+
const slackThread = slackThreadScope(inbound);
|
|
191
|
+
if (!slackThread) {
|
|
192
|
+
return base;
|
|
193
|
+
}
|
|
194
|
+
return `${base}:thread:${slackThread}`;
|
|
171
195
|
}
|
|
172
196
|
function asRecord(value) {
|
|
173
197
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
@@ -794,14 +818,26 @@ export class PiMessagingOperatorBackend {
|
|
|
794
818
|
}
|
|
795
819
|
}
|
|
796
820
|
});
|
|
797
|
-
const
|
|
798
|
-
|
|
799
|
-
|
|
821
|
+
const promptText = buildOperatorPrompt(input);
|
|
822
|
+
const promptOnce = async () => {
|
|
823
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
824
|
+
setTimeout(() => reject(new Error("pi operator timeout")), this.#timeoutMs);
|
|
825
|
+
});
|
|
826
|
+
await Promise.race([session.prompt(promptText, { expandPromptTemplates: false }), timeoutPromise]);
|
|
827
|
+
};
|
|
800
828
|
try {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
829
|
+
try {
|
|
830
|
+
await promptOnce();
|
|
831
|
+
}
|
|
832
|
+
catch (err) {
|
|
833
|
+
if (!isAgentBusyError(err)) {
|
|
834
|
+
throw err;
|
|
835
|
+
}
|
|
836
|
+
await session.agent.waitForIdle();
|
|
837
|
+
assistantText = "";
|
|
838
|
+
capturedCommand = null;
|
|
839
|
+
await promptOnce();
|
|
840
|
+
}
|
|
805
841
|
}
|
|
806
842
|
catch (err) {
|
|
807
843
|
await this.#auditTurn(input, {
|
|
@@ -833,7 +869,7 @@ export class PiMessagingOperatorBackend {
|
|
|
833
869
|
});
|
|
834
870
|
throw new Error("operator_empty_response");
|
|
835
871
|
}
|
|
836
|
-
const responseMessage = message.slice(0,
|
|
872
|
+
const responseMessage = message.slice(0, OPERATOR_RESPONSE_MAX_CHARS);
|
|
837
873
|
await this.#auditTurn(input, {
|
|
838
874
|
outcome: "respond",
|
|
839
875
|
messagePreview: responseMessage,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@femtomc/mu-agent",
|
|
3
|
-
"version": "26.2.
|
|
3
|
+
"version": "26.2.97",
|
|
4
4
|
"description": "Shared operator runtime for mu assistant sessions and serve extensions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mu",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"themes/**"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@femtomc/mu-core": "26.2.
|
|
27
|
+
"@femtomc/mu-core": "26.2.97",
|
|
28
28
|
"@mariozechner/pi-agent-core": "^0.53.0",
|
|
29
29
|
"@mariozechner/pi-ai": "^0.53.0",
|
|
30
30
|
"@mariozechner/pi-coding-agent": "^0.53.0",
|