@femtomc/mu-agent 26.2.91 → 26.2.92
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
|
@@ -45,7 +45,7 @@ Current stack:
|
|
|
45
45
|
|
|
46
46
|
- `brandingExtension` — mu compact header/footer branding + default theme
|
|
47
47
|
- `eventLogExtension` — event tail + watch widget
|
|
48
|
-
- `planningUiExtension` — planning mode: compact HUD for next-step/approval flow
|
|
48
|
+
- `planningUiExtension` — planning mode: compact HUD for next-step/approval flow in widget/status surfaces while keeping the branding footer unchanged (`/mu plan ...`)
|
|
49
49
|
- `subagentsUiExtension` — subagents mode: compact HUD with activity sentences from issue/forum events plus footer-ready queue/health metadata (`/mu subagents ...`)
|
|
50
50
|
|
|
51
51
|
Default operator UI theme is `mu-gruvbox-dark`.
|
|
@@ -55,7 +55,7 @@ Default operator UI theme is `mu-gruvbox-dark`.
|
|
|
55
55
|
- `/mu events [n]` / `/mu events tail [n]` — event log tail
|
|
56
56
|
- `/mu events watch on|off` — toggle event watch widget
|
|
57
57
|
- `/mu brand on|off|toggle` — enable/disable UI branding
|
|
58
|
-
- `/mu plan ...` — planning HUD (phases, checklist editing, communication state, snapshots)
|
|
58
|
+
- `/mu plan ...` — planning HUD (phases, checklist editing, communication state, snapshots); does not inject planning metadata into branding footer
|
|
59
59
|
- `/mu subagents ...` — tmux + issue queue monitor/spawner (profiles, spawn pause, stale/refresh controls, snapshots)
|
|
60
60
|
- `/mu help` — dispatcher catalog of registered `/mu` subcommands
|
|
61
61
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../../src/extensions/branding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAyEpF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../../src/extensions/branding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAyEpF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,QA6OjD;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -129,11 +129,10 @@ export function brandingExtension(pi) {
|
|
|
129
129
|
parts.push(theme.fg("muted", "·"), theme.fg(barColor, `ctx ${pct}%`), theme.fg(barColor, contextBar(pct, 10)));
|
|
130
130
|
}
|
|
131
131
|
const activeHudMode = getActiveHudMode();
|
|
132
|
-
if (activeHudMode) {
|
|
132
|
+
if (activeHudMode === "subagents") {
|
|
133
133
|
const extensionStatuses = footerData.getExtensionStatuses();
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
parts.push(theme.fg("muted", "·"), theme.fg("accent", `hud:${activeHudMode}`));
|
|
134
|
+
const modeMeta = extensionStatuses.get("mu-subagents-meta") ?? "";
|
|
135
|
+
parts.push(theme.fg("muted", "·"), theme.fg("accent", "hud:subagents"));
|
|
137
136
|
if (modeMeta.length > 0) {
|
|
138
137
|
parts.push(theme.fg("muted", "·"), theme.fg("dim", truncateToWidth(modeMeta, 42)));
|
|
139
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-ui.d.ts","sourceRoot":"","sources":["../../src/extensions/planning-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"planning-ui.d.ts","sourceRoot":"","sources":["../../src/extensions/planning-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AA0gBpF,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,QAuenD;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -9,9 +9,9 @@ const DEFAULT_STEPS = [
|
|
|
9
9
|
const BAR_CHARS = ["░", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"];
|
|
10
10
|
const WIDGET_STEP_LIMIT = 4;
|
|
11
11
|
const WIDGET_STEP_LABEL_MAX = 60;
|
|
12
|
-
const WIDGET_ROOT_MAX =
|
|
13
|
-
const WIDGET_NEXT_MAX =
|
|
14
|
-
const WIDGET_BLOCKER_MAX =
|
|
12
|
+
const WIDGET_ROOT_MAX = 24;
|
|
13
|
+
const WIDGET_NEXT_MAX = 76;
|
|
14
|
+
const WIDGET_BLOCKER_MAX = 76;
|
|
15
15
|
function phaseTone(phase) {
|
|
16
16
|
switch (phase) {
|
|
17
17
|
case "investigating":
|
|
@@ -262,41 +262,53 @@ function renderPlanningUi(ctx, state) {
|
|
|
262
262
|
const phase = summarizePhase(state.phase);
|
|
263
263
|
const phaseColor = phaseTone(state.phase);
|
|
264
264
|
const confidenceColor = confidenceTone(state.confidence);
|
|
265
|
-
const rootLabel = state.rootIssueId ?? "(unset)";
|
|
266
265
|
const meter = progressBar(done, total, 10);
|
|
267
|
-
const waitingLabel = state.waitingOnUser ? "
|
|
266
|
+
const waitingLabel = state.waitingOnUser ? "awaiting-user" : "active";
|
|
268
267
|
const waitingColor = state.waitingOnUser ? "warning" : "dim";
|
|
269
|
-
const rootCompact = shortLabel(
|
|
270
|
-
const
|
|
268
|
+
const rootCompact = state.rootIssueId ? shortLabel(state.rootIssueId, "", WIDGET_ROOT_MAX) : null;
|
|
269
|
+
const nextLabel = state.waitingOnUser ? "ask" : "next";
|
|
270
|
+
const nextFallback = state.waitingOnUser ? "(describe required user input)" : "(unset)";
|
|
271
|
+
const nextTone = state.waitingOnUser ? "warning" : "dim";
|
|
272
|
+
const nextCompact = shortLabel(state.nextAction, nextFallback, WIDGET_NEXT_MAX);
|
|
271
273
|
const blockerCompact = shortLabel(state.blocker, "(none)", WIDGET_BLOCKER_MAX);
|
|
272
274
|
const blockerColor = state.blocker ? "warning" : "dim";
|
|
273
|
-
|
|
275
|
+
const statusParts = [
|
|
274
276
|
ctx.ui.theme.fg("dim", "plan"),
|
|
275
277
|
ctx.ui.theme.fg(phaseColor, phase),
|
|
276
278
|
ctx.ui.theme.fg("dim", `${done}/${total}`),
|
|
277
279
|
ctx.ui.theme.fg(phaseColor, meter),
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
];
|
|
281
|
+
if (state.waitingOnUser) {
|
|
282
|
+
statusParts.push(ctx.ui.theme.fg("warning", "ask:user"));
|
|
283
|
+
}
|
|
284
|
+
if (state.blocker) {
|
|
285
|
+
statusParts.push(ctx.ui.theme.fg("warning", "blocked"));
|
|
286
|
+
}
|
|
287
|
+
ctx.ui.setStatus("mu-planning", statusParts.join(` ${ctx.ui.theme.fg("muted", "·")} `));
|
|
288
|
+
ctx.ui.setStatus("mu-planning-meta", undefined);
|
|
282
289
|
const lines = [
|
|
283
290
|
[
|
|
284
291
|
ctx.ui.theme.fg("accent", ctx.ui.theme.bold("Planning")),
|
|
285
292
|
ctx.ui.theme.fg("muted", "·"),
|
|
286
293
|
ctx.ui.theme.fg(phaseColor, phase),
|
|
287
294
|
ctx.ui.theme.fg("muted", "·"),
|
|
295
|
+
ctx.ui.theme.fg(waitingColor, waitingLabel),
|
|
296
|
+
ctx.ui.theme.fg("muted", "·"),
|
|
288
297
|
ctx.ui.theme.fg("dim", `${done}/${total}`),
|
|
289
298
|
ctx.ui.theme.fg(phaseColor, meter),
|
|
290
299
|
].join(" "),
|
|
291
|
-
[
|
|
292
|
-
ctx.ui.theme.fg("muted", `root:${rootCompact}`),
|
|
293
|
-
ctx.ui.theme.fg("muted", "·"),
|
|
294
|
-
ctx.ui.theme.fg(waitingColor, `wait:${waitingLabel}`),
|
|
295
|
-
ctx.ui.theme.fg("muted", "·"),
|
|
296
|
-
ctx.ui.theme.fg(confidenceColor, `conf:${state.confidence}`),
|
|
297
|
-
].join(" "),
|
|
298
|
-
`${ctx.ui.theme.fg("muted", "next:")} ${ctx.ui.theme.fg("dim", nextCompact)}`,
|
|
299
300
|
];
|
|
301
|
+
const chips = [];
|
|
302
|
+
if (rootCompact) {
|
|
303
|
+
chips.push(ctx.ui.theme.fg("muted", `root:${rootCompact}`));
|
|
304
|
+
}
|
|
305
|
+
if (state.confidence !== "medium") {
|
|
306
|
+
chips.push(ctx.ui.theme.fg(confidenceColor, `conf:${state.confidence}`));
|
|
307
|
+
}
|
|
308
|
+
if (chips.length > 0) {
|
|
309
|
+
lines.push(chips.join(` ${ctx.ui.theme.fg("muted", "·")} `));
|
|
310
|
+
}
|
|
311
|
+
lines.push(`${ctx.ui.theme.fg("muted", `${nextLabel}:`)} ${ctx.ui.theme.fg(nextTone, nextCompact)}`);
|
|
300
312
|
if (state.blocker) {
|
|
301
313
|
lines.push(`${ctx.ui.theme.fg("muted", "blocker:")} ${ctx.ui.theme.fg(blockerColor, blockerCompact)}`);
|
|
302
314
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@femtomc/mu-agent",
|
|
3
|
-
"version": "26.2.
|
|
3
|
+
"version": "26.2.92",
|
|
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.92",
|
|
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",
|
|
@@ -241,9 +241,9 @@ for issue_id in $(mu issues ready --root <root-id> --tag proto:subagents-v1 --js
|
|
|
241
241
|
done
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
-
## Subagents HUD
|
|
244
|
+
## Subagents HUD
|
|
245
245
|
|
|
246
|
-
Use HUD
|
|
246
|
+
Use HUD to communicate with your user for visibility. Truth should still live entirely in issues/forum.
|
|
247
247
|
|
|
248
248
|
```text
|
|
249
249
|
/mu subagents on
|