@femtomc/mu-agent 26.2.99 → 26.2.101
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 +8 -4
- package/dist/extensions/hud.d.ts +4 -0
- package/dist/extensions/hud.d.ts.map +1 -0
- package/dist/extensions/hud.js +282 -0
- package/dist/extensions/index.d.ts +1 -2
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +1 -2
- package/dist/extensions/mu-operator.d.ts.map +1 -1
- package/dist/extensions/mu-operator.js +2 -4
- package/dist/extensions/mu-serve.d.ts.map +1 -1
- package/dist/extensions/mu-serve.js +2 -4
- package/dist/operator.d.ts +155 -0
- package/dist/operator.d.ts.map +1 -1
- package/dist/operator.js +66 -2
- package/package.json +2 -2
- package/prompts/skills/heartbeats/SKILL.md +30 -5
- package/prompts/skills/hierarchical-work-protocol/SKILL.md +2 -1
- package/prompts/skills/hud/SKILL.md +169 -0
- package/prompts/skills/mu/SKILL.md +1 -1
- package/prompts/skills/planning/SKILL.md +42 -45
- package/prompts/skills/subagents/SKILL.md +39 -16
- package/dist/extensions/hud-mode.d.ts +0 -8
- package/dist/extensions/hud-mode.d.ts.map +0 -1
- package/dist/extensions/hud-mode.js +0 -21
- package/dist/extensions/planning-ui.d.ts +0 -4
- package/dist/extensions/planning-ui.d.ts.map +0 -1
- package/dist/extensions/planning-ui.js +0 -866
- package/dist/extensions/subagents-ui.d.ts +0 -4
- package/dist/extensions/subagents-ui.d.ts.map +0 -1
- package/dist/extensions/subagents-ui.js +0 -1409
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ into `~/.mu/skills/` (or `$MU_HOME/skills/`) when missing:
|
|
|
27
27
|
- `mu`
|
|
28
28
|
- `memory`
|
|
29
29
|
- `planning`
|
|
30
|
+
- `hud`
|
|
30
31
|
- `hierarchical-work-protocol`
|
|
31
32
|
- `subagents`
|
|
32
33
|
- `heartbeats`
|
|
@@ -36,6 +37,9 @@ into `~/.mu/skills/` (or `$MU_HOME/skills/`) when missing:
|
|
|
36
37
|
- `setup-telegram`
|
|
37
38
|
- `setup-neovim`
|
|
38
39
|
|
|
40
|
+
Starter skills are version-synced by the CLI bootstrap path when users run `mu`
|
|
41
|
+
commands after upgrading.
|
|
42
|
+
|
|
39
43
|
## Install
|
|
40
44
|
|
|
41
45
|
```bash
|
|
@@ -62,8 +66,9 @@ Current stack:
|
|
|
62
66
|
|
|
63
67
|
- `brandingExtension` — mu compact header/footer branding + default theme
|
|
64
68
|
- `eventLogExtension` — event tail + watch widget
|
|
65
|
-
- `
|
|
66
|
-
|
|
69
|
+
- `hudExtension` — HUD surface for skill-directed planning/subagents communication (`/mu hud ...`, `mu_hud`)
|
|
70
|
+
|
|
71
|
+
Extensions emit contract-valid `hud_docs` (`HudDoc`) so control-plane/server renderers can provide a consistent cross-surface HUD experience.
|
|
67
72
|
|
|
68
73
|
Default operator UI theme is `mu-gruvbox-dark`.
|
|
69
74
|
|
|
@@ -72,8 +77,7 @@ Default operator UI theme is `mu-gruvbox-dark`.
|
|
|
72
77
|
- `/mu events [n]` / `/mu events tail [n]` — event log tail
|
|
73
78
|
- `/mu events watch on|off` — toggle event watch widget
|
|
74
79
|
- `/mu brand on|off|toggle` — enable/disable UI branding
|
|
75
|
-
- `/mu
|
|
76
|
-
- `/mu subagents ...` — tmux + issue queue monitor/spawner (profiles, spawn pause, stale/refresh controls, snapshots); does not inject subagents metadata into branding footer
|
|
80
|
+
- `/mu hud ...` — HUD command for enabling/inspecting/clearing HUD docs; does not inject HUD metadata into branding footer
|
|
77
81
|
- `/mu help` — dispatcher catalog of registered `/mu` subcommands
|
|
78
82
|
|
|
79
83
|
## Tooling model (CLI-first)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hud.d.ts","sourceRoot":"","sources":["../../src/extensions/hud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AA8QpF,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,QAuE5C;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { HudDocSchema, normalizeHudDocs, serializeHudDocsTextFallback } from "@femtomc/mu-core";
|
|
2
|
+
import { registerMuSubcommand } from "./mu-command-dispatcher.js";
|
|
3
|
+
const HUD_DISPLAY_DOCS_MAX = 16;
|
|
4
|
+
const HUD_STORE_DOCS_MAX = 64;
|
|
5
|
+
const HUD_LINE_MAX = 120;
|
|
6
|
+
function createDefaultState() {
|
|
7
|
+
return {
|
|
8
|
+
enabled: false,
|
|
9
|
+
docsById: new Map(),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function parseSnapshotFormat(raw) {
|
|
13
|
+
const value = (raw ?? "compact").trim().toLowerCase();
|
|
14
|
+
return value === "multiline" ? "multiline" : "compact";
|
|
15
|
+
}
|
|
16
|
+
function short(text, max = HUD_LINE_MAX) {
|
|
17
|
+
const normalized = text.replace(/\s+/g, " ").trim();
|
|
18
|
+
if (normalized.length <= max) {
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
if (max <= 1) {
|
|
22
|
+
return "…";
|
|
23
|
+
}
|
|
24
|
+
return `${normalized.slice(0, max - 1)}…`;
|
|
25
|
+
}
|
|
26
|
+
function activeDocs(state, maxDocs = HUD_DISPLAY_DOCS_MAX) {
|
|
27
|
+
return normalizeHudDocs([...state.docsById.values()], { maxDocs });
|
|
28
|
+
}
|
|
29
|
+
function statusSummary(state) {
|
|
30
|
+
const docs = activeDocs(state, HUD_STORE_DOCS_MAX);
|
|
31
|
+
const ids = docs.map((doc) => doc.hud_id).join(", ") || "(none)";
|
|
32
|
+
return [
|
|
33
|
+
`HUD: ${state.enabled ? "enabled" : "disabled"}`,
|
|
34
|
+
`docs: ${docs.length}`,
|
|
35
|
+
`ids: ${ids}`,
|
|
36
|
+
].join("\n");
|
|
37
|
+
}
|
|
38
|
+
function renderHud(ctx, state) {
|
|
39
|
+
if (!ctx.hasUI) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const docs = activeDocs(state);
|
|
43
|
+
if (!state.enabled || docs.length === 0) {
|
|
44
|
+
ctx.ui.setStatus("mu-hud", undefined);
|
|
45
|
+
ctx.ui.setWidget("mu-hud", undefined);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const idLabel = short(docs.map((doc) => doc.hud_id).join(", "), 64);
|
|
49
|
+
ctx.ui.setStatus("mu-hud", [
|
|
50
|
+
ctx.ui.theme.fg("dim", "hud"),
|
|
51
|
+
ctx.ui.theme.fg("muted", "·"),
|
|
52
|
+
ctx.ui.theme.fg("accent", `${docs.length}`),
|
|
53
|
+
ctx.ui.theme.fg("muted", "·"),
|
|
54
|
+
ctx.ui.theme.fg("dim", idLabel),
|
|
55
|
+
].join(" "));
|
|
56
|
+
const snapshot = serializeHudDocsTextFallback(docs, {
|
|
57
|
+
mode: "multiline",
|
|
58
|
+
maxDocs: HUD_DISPLAY_DOCS_MAX,
|
|
59
|
+
maxSectionItems: 6,
|
|
60
|
+
maxActions: 4,
|
|
61
|
+
maxChars: 8_000,
|
|
62
|
+
});
|
|
63
|
+
const lines = snapshot
|
|
64
|
+
.split(/\r?\n/)
|
|
65
|
+
.map((line) => short(line, HUD_LINE_MAX))
|
|
66
|
+
.filter((line) => line.length > 0);
|
|
67
|
+
ctx.ui.setWidget("mu-hud", lines.length > 0 ? lines : ["(hud enabled, no docs)"], { placement: "belowEditor" });
|
|
68
|
+
}
|
|
69
|
+
function parseHudDoc(input) {
|
|
70
|
+
const parsed = HudDocSchema.safeParse(input);
|
|
71
|
+
if (!parsed.success) {
|
|
72
|
+
return { ok: false, error: parsed.error.issues[0]?.message ?? "Invalid HUD doc." };
|
|
73
|
+
}
|
|
74
|
+
return { ok: true, doc: parsed.data };
|
|
75
|
+
}
|
|
76
|
+
function parseHudDocList(input) {
|
|
77
|
+
if (!Array.isArray(input)) {
|
|
78
|
+
return { ok: false, error: "docs must be an array." };
|
|
79
|
+
}
|
|
80
|
+
const docs = [];
|
|
81
|
+
for (let idx = 0; idx < input.length; idx += 1) {
|
|
82
|
+
const parsed = parseHudDoc(input[idx]);
|
|
83
|
+
if (!parsed.ok) {
|
|
84
|
+
return { ok: false, error: `docs[${idx}]: ${parsed.error}` };
|
|
85
|
+
}
|
|
86
|
+
docs.push(parsed.doc);
|
|
87
|
+
}
|
|
88
|
+
return { ok: true, docs: normalizeHudDocs(docs, { maxDocs: HUD_STORE_DOCS_MAX }) };
|
|
89
|
+
}
|
|
90
|
+
function hudToolResult(opts) {
|
|
91
|
+
const docs = activeDocs(opts.state, HUD_STORE_DOCS_MAX);
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: "text", text: opts.message }],
|
|
94
|
+
hud_docs: docs,
|
|
95
|
+
details: {
|
|
96
|
+
ok: opts.ok,
|
|
97
|
+
action: opts.action,
|
|
98
|
+
enabled: opts.state.enabled,
|
|
99
|
+
doc_count: docs.length,
|
|
100
|
+
hud_ids: docs.map((doc) => doc.hud_id),
|
|
101
|
+
...(opts.ok ? {} : { error: opts.message }),
|
|
102
|
+
...(opts.extra ?? {}),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function applyHudAction(params, state) {
|
|
107
|
+
switch (params.action) {
|
|
108
|
+
case "status": {
|
|
109
|
+
return {
|
|
110
|
+
ok: true,
|
|
111
|
+
action: "status",
|
|
112
|
+
message: statusSummary(state),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
case "snapshot": {
|
|
116
|
+
const mode = parseSnapshotFormat(params.snapshot_format);
|
|
117
|
+
const docs = activeDocs(state, HUD_STORE_DOCS_MAX);
|
|
118
|
+
const message = docs.length
|
|
119
|
+
? serializeHudDocsTextFallback(docs, { mode, maxDocs: HUD_STORE_DOCS_MAX, maxSectionItems: 8, maxActions: 6 })
|
|
120
|
+
: "(no HUD docs)";
|
|
121
|
+
return {
|
|
122
|
+
ok: true,
|
|
123
|
+
action: "snapshot",
|
|
124
|
+
message,
|
|
125
|
+
extra: { snapshot_format: mode },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
case "on":
|
|
129
|
+
state.enabled = true;
|
|
130
|
+
return { ok: true, action: "on", message: "HUD enabled." };
|
|
131
|
+
case "off":
|
|
132
|
+
state.enabled = false;
|
|
133
|
+
return { ok: true, action: "off", message: "HUD disabled." };
|
|
134
|
+
case "toggle":
|
|
135
|
+
state.enabled = !state.enabled;
|
|
136
|
+
return { ok: true, action: "toggle", message: `HUD ${state.enabled ? "enabled" : "disabled"}.` };
|
|
137
|
+
case "set":
|
|
138
|
+
case "update": {
|
|
139
|
+
const parsed = parseHudDoc(params.doc);
|
|
140
|
+
if (!parsed.ok) {
|
|
141
|
+
return { ok: false, action: params.action, message: parsed.error };
|
|
142
|
+
}
|
|
143
|
+
state.enabled = true;
|
|
144
|
+
state.docsById.set(parsed.doc.hud_id, parsed.doc);
|
|
145
|
+
return {
|
|
146
|
+
ok: true,
|
|
147
|
+
action: params.action,
|
|
148
|
+
message: `HUD doc set: ${parsed.doc.hud_id}`,
|
|
149
|
+
extra: { hud_id: parsed.doc.hud_id },
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
case "replace": {
|
|
153
|
+
const parsed = parseHudDocList(params.docs);
|
|
154
|
+
if (!parsed.ok) {
|
|
155
|
+
return { ok: false, action: "replace", message: parsed.error };
|
|
156
|
+
}
|
|
157
|
+
state.docsById.clear();
|
|
158
|
+
for (const doc of parsed.docs) {
|
|
159
|
+
state.docsById.set(doc.hud_id, doc);
|
|
160
|
+
}
|
|
161
|
+
state.enabled = true;
|
|
162
|
+
return { ok: true, action: "replace", message: `HUD docs replaced (${parsed.docs.length}).` };
|
|
163
|
+
}
|
|
164
|
+
case "remove": {
|
|
165
|
+
const hudId = (params.hud_id ?? "").trim();
|
|
166
|
+
if (!hudId) {
|
|
167
|
+
return { ok: false, action: "remove", message: "Missing hud_id." };
|
|
168
|
+
}
|
|
169
|
+
const removed = state.docsById.delete(hudId);
|
|
170
|
+
if (!removed) {
|
|
171
|
+
return { ok: false, action: "remove", message: `HUD doc not found: ${hudId}` };
|
|
172
|
+
}
|
|
173
|
+
return { ok: true, action: "remove", message: `HUD doc removed: ${hudId}` };
|
|
174
|
+
}
|
|
175
|
+
case "clear":
|
|
176
|
+
state.docsById.clear();
|
|
177
|
+
return { ok: true, action: "clear", message: "HUD docs cleared." };
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function usageText() {
|
|
181
|
+
return [
|
|
182
|
+
"Usage:",
|
|
183
|
+
" /mu hud status|snapshot",
|
|
184
|
+
" /mu hud on|off|toggle",
|
|
185
|
+
" /mu hud clear",
|
|
186
|
+
" /mu hud remove <hud-id>",
|
|
187
|
+
"",
|
|
188
|
+
"For setting/updating docs, use the mu_hud tool with action=set|update|replace.",
|
|
189
|
+
].join("\n");
|
|
190
|
+
}
|
|
191
|
+
function parseCommandAction(args) {
|
|
192
|
+
const tokens = args
|
|
193
|
+
.trim()
|
|
194
|
+
.split(/\s+/)
|
|
195
|
+
.filter((token) => token.length > 0);
|
|
196
|
+
const command = tokens[0] ?? "status";
|
|
197
|
+
switch (command) {
|
|
198
|
+
case "status":
|
|
199
|
+
return { action: "status" };
|
|
200
|
+
case "snapshot":
|
|
201
|
+
return { action: "snapshot", snapshot_format: tokens[1] };
|
|
202
|
+
case "on":
|
|
203
|
+
return { action: "on" };
|
|
204
|
+
case "off":
|
|
205
|
+
return { action: "off" };
|
|
206
|
+
case "toggle":
|
|
207
|
+
return { action: "toggle" };
|
|
208
|
+
case "clear":
|
|
209
|
+
return { action: "clear" };
|
|
210
|
+
case "remove":
|
|
211
|
+
return { action: "remove", hud_id: tokens[1] };
|
|
212
|
+
default:
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export function hudExtension(pi) {
|
|
217
|
+
const state = createDefaultState();
|
|
218
|
+
const refresh = (ctx) => {
|
|
219
|
+
renderHud(ctx, state);
|
|
220
|
+
};
|
|
221
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
222
|
+
refresh(ctx);
|
|
223
|
+
});
|
|
224
|
+
pi.on("session_switch", async (_event, ctx) => {
|
|
225
|
+
refresh(ctx);
|
|
226
|
+
});
|
|
227
|
+
pi.on("session_shutdown", async (_event, ctx) => {
|
|
228
|
+
if (!ctx.hasUI) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
ctx.ui.setStatus("mu-hud", undefined);
|
|
232
|
+
ctx.ui.setWidget("mu-hud", undefined);
|
|
233
|
+
});
|
|
234
|
+
registerMuSubcommand(pi, {
|
|
235
|
+
subcommand: "hud",
|
|
236
|
+
summary: "HUD status and rendering controls",
|
|
237
|
+
usage: "/mu hud status|snapshot|on|off|toggle|clear|remove <hud-id>",
|
|
238
|
+
handler: async (args, ctx) => {
|
|
239
|
+
const parsed = parseCommandAction(args);
|
|
240
|
+
if (!parsed) {
|
|
241
|
+
ctx.ui.notify(usageText(), "error");
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const result = applyHudAction(parsed, state);
|
|
245
|
+
refresh(ctx);
|
|
246
|
+
ctx.ui.notify(result.message, result.ok ? "info" : "error");
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
pi.registerTool({
|
|
250
|
+
name: "mu_hud",
|
|
251
|
+
label: "mu HUD",
|
|
252
|
+
description: "Control or inspect HUD docs rendered in the TUI and shared across channel renderers.",
|
|
253
|
+
parameters: {
|
|
254
|
+
type: "object",
|
|
255
|
+
properties: {
|
|
256
|
+
action: {
|
|
257
|
+
type: "string",
|
|
258
|
+
enum: ["status", "snapshot", "on", "off", "toggle", "set", "update", "replace", "remove", "clear"],
|
|
259
|
+
},
|
|
260
|
+
doc: { type: "object", additionalProperties: true },
|
|
261
|
+
docs: { type: "array", items: { type: "object", additionalProperties: true } },
|
|
262
|
+
hud_id: { type: "string" },
|
|
263
|
+
snapshot_format: { type: "string", enum: ["compact", "multiline"] },
|
|
264
|
+
},
|
|
265
|
+
required: ["action"],
|
|
266
|
+
additionalProperties: false,
|
|
267
|
+
},
|
|
268
|
+
execute: async (_toolCallId, paramsRaw, _signal, _onUpdate, ctx) => {
|
|
269
|
+
const params = paramsRaw;
|
|
270
|
+
const result = applyHudAction(params, state);
|
|
271
|
+
refresh(ctx);
|
|
272
|
+
return hudToolResult({
|
|
273
|
+
state,
|
|
274
|
+
ok: result.ok,
|
|
275
|
+
action: result.action,
|
|
276
|
+
message: result.message,
|
|
277
|
+
extra: result.extra,
|
|
278
|
+
});
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
export default hudExtension;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export { brandingExtension } from "./branding.js";
|
|
2
2
|
export { eventLogExtension } from "./event-log.js";
|
|
3
|
+
export { hudExtension } from "./hud.js";
|
|
3
4
|
export { muOperatorExtension } from "./mu-operator.js";
|
|
4
5
|
export { muServeExtension } from "./mu-serve.js";
|
|
5
|
-
export { planningUiExtension } from "./planning-ui.js";
|
|
6
|
-
export { subagentsUiExtension } from "./subagents-ui.js";
|
|
7
6
|
/**
|
|
8
7
|
* Serve-mode extension — single facade that bundles all serve extensions.
|
|
9
8
|
*/
|
|
@@ -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,
|
|
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,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAQjD;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAA4C,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,sBAAsB,UAA+C,CAAC"}
|
package/dist/extensions/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export { brandingExtension } from "./branding.js";
|
|
2
2
|
export { eventLogExtension } from "./event-log.js";
|
|
3
|
+
export { hudExtension } from "./hud.js";
|
|
3
4
|
export { muOperatorExtension } from "./mu-operator.js";
|
|
4
5
|
export { muServeExtension } from "./mu-serve.js";
|
|
5
|
-
export { planningUiExtension } from "./planning-ui.js";
|
|
6
|
-
export { subagentsUiExtension } from "./subagents-ui.js";
|
|
7
6
|
const RUNTIME_EXTENSION = import.meta.url.endsWith(".ts") ? "ts" : "js";
|
|
8
7
|
function resolveBundledExtensionPath(moduleBasename) {
|
|
9
8
|
return new URL(`./${moduleBasename}.${RUNTIME_EXTENSION}`, import.meta.url).pathname;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mu-operator.d.ts","sourceRoot":"","sources":["../../src/extensions/mu-operator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"mu-operator.d.ts","sourceRoot":"","sources":["../../src/extensions/mu-operator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAKlE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,QAInD;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -6,12 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { brandingExtension } from "./branding.js";
|
|
8
8
|
import { eventLogExtension } from "./event-log.js";
|
|
9
|
-
import {
|
|
10
|
-
import { subagentsUiExtension } from "./subagents-ui.js";
|
|
9
|
+
import { hudExtension } from "./hud.js";
|
|
11
10
|
export function muOperatorExtension(pi) {
|
|
11
|
+
hudExtension(pi);
|
|
12
12
|
brandingExtension(pi);
|
|
13
13
|
eventLogExtension(pi);
|
|
14
|
-
planningUiExtension(pi);
|
|
15
|
-
subagentsUiExtension(pi);
|
|
16
14
|
}
|
|
17
15
|
export default muOperatorExtension;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mu-serve.d.ts","sourceRoot":"","sources":["../../src/extensions/mu-serve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"mu-serve.d.ts","sourceRoot":"","sources":["../../src/extensions/mu-serve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAKlE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,QAIhD;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -6,12 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { brandingExtension } from "./branding.js";
|
|
8
8
|
import { eventLogExtension } from "./event-log.js";
|
|
9
|
-
import {
|
|
10
|
-
import { subagentsUiExtension } from "./subagents-ui.js";
|
|
9
|
+
import { hudExtension } from "./hud.js";
|
|
11
10
|
export function muServeExtension(pi) {
|
|
11
|
+
hudExtension(pi);
|
|
12
12
|
brandingExtension(pi);
|
|
13
13
|
eventLogExtension(pi);
|
|
14
|
-
planningUiExtension(pi);
|
|
15
|
-
subagentsUiExtension(pi);
|
|
16
14
|
}
|
|
17
15
|
export default muServeExtension;
|
package/dist/operator.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type HudDoc } from "@femtomc/mu-core";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
import { CommandContextResolver } from "./command_context.js";
|
|
3
4
|
import { type CreateMuSessionOpts, type MuSession } from "./session_factory.js";
|
|
@@ -58,6 +59,82 @@ export type OperatorApprovedCommand = z.infer<typeof OperatorApprovedCommandSche
|
|
|
58
59
|
export declare const OperatorBackendTurnResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
59
60
|
kind: z.ZodLiteral<"respond">;
|
|
60
61
|
message: z.ZodString;
|
|
62
|
+
hud_docs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
63
|
+
v: z.ZodDefault<z.ZodLiteral<1>>;
|
|
64
|
+
hud_id: z.ZodString;
|
|
65
|
+
title: z.ZodString;
|
|
66
|
+
scope: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
67
|
+
chips: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
68
|
+
key: z.ZodString;
|
|
69
|
+
label: z.ZodString;
|
|
70
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
71
|
+
error: "error";
|
|
72
|
+
info: "info";
|
|
73
|
+
success: "success";
|
|
74
|
+
warning: "warning";
|
|
75
|
+
muted: "muted";
|
|
76
|
+
accent: "accent";
|
|
77
|
+
dim: "dim";
|
|
78
|
+
}>>;
|
|
79
|
+
}, z.core.$strict>>>;
|
|
80
|
+
sections: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
81
|
+
kind: z.ZodLiteral<"kv">;
|
|
82
|
+
title: z.ZodOptional<z.ZodString>;
|
|
83
|
+
items: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
84
|
+
key: z.ZodString;
|
|
85
|
+
label: z.ZodString;
|
|
86
|
+
value: z.ZodString;
|
|
87
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
88
|
+
error: "error";
|
|
89
|
+
info: "info";
|
|
90
|
+
success: "success";
|
|
91
|
+
warning: "warning";
|
|
92
|
+
muted: "muted";
|
|
93
|
+
accent: "accent";
|
|
94
|
+
dim: "dim";
|
|
95
|
+
}>>;
|
|
96
|
+
}, z.core.$strict>>>;
|
|
97
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
98
|
+
kind: z.ZodLiteral<"checklist">;
|
|
99
|
+
title: z.ZodOptional<z.ZodString>;
|
|
100
|
+
items: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
101
|
+
id: z.ZodString;
|
|
102
|
+
label: z.ZodString;
|
|
103
|
+
done: z.ZodBoolean;
|
|
104
|
+
}, z.core.$strict>>>;
|
|
105
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
106
|
+
kind: z.ZodLiteral<"activity">;
|
|
107
|
+
title: z.ZodOptional<z.ZodString>;
|
|
108
|
+
lines: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
109
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
110
|
+
kind: z.ZodLiteral<"text">;
|
|
111
|
+
title: z.ZodOptional<z.ZodString>;
|
|
112
|
+
text: z.ZodString;
|
|
113
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
114
|
+
error: "error";
|
|
115
|
+
info: "info";
|
|
116
|
+
success: "success";
|
|
117
|
+
warning: "warning";
|
|
118
|
+
muted: "muted";
|
|
119
|
+
accent: "accent";
|
|
120
|
+
dim: "dim";
|
|
121
|
+
}>>;
|
|
122
|
+
}, z.core.$strict>], "kind">>>;
|
|
123
|
+
actions: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
124
|
+
id: z.ZodString;
|
|
125
|
+
label: z.ZodString;
|
|
126
|
+
command_text: z.ZodString;
|
|
127
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
128
|
+
primary: "primary";
|
|
129
|
+
secondary: "secondary";
|
|
130
|
+
danger: "danger";
|
|
131
|
+
}>>;
|
|
132
|
+
}, z.core.$strict>>>;
|
|
133
|
+
snapshot_compact: z.ZodString;
|
|
134
|
+
snapshot_multiline: z.ZodOptional<z.ZodString>;
|
|
135
|
+
updated_at_ms: z.ZodNumber;
|
|
136
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
137
|
+
}, z.core.$strict>>>;
|
|
61
138
|
}, z.core.$strip>, z.ZodObject<{
|
|
62
139
|
kind: z.ZodLiteral<"command">;
|
|
63
140
|
command: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -95,6 +172,82 @@ export declare const OperatorBackendTurnResultSchema: z.ZodDiscriminatedUnion<[z
|
|
|
95
172
|
kind: z.ZodLiteral<"operator_thinking_set">;
|
|
96
173
|
thinking: z.ZodString;
|
|
97
174
|
}, z.core.$strip>], "kind">;
|
|
175
|
+
hud_docs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
176
|
+
v: z.ZodDefault<z.ZodLiteral<1>>;
|
|
177
|
+
hud_id: z.ZodString;
|
|
178
|
+
title: z.ZodString;
|
|
179
|
+
scope: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
180
|
+
chips: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
181
|
+
key: z.ZodString;
|
|
182
|
+
label: z.ZodString;
|
|
183
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
184
|
+
error: "error";
|
|
185
|
+
info: "info";
|
|
186
|
+
success: "success";
|
|
187
|
+
warning: "warning";
|
|
188
|
+
muted: "muted";
|
|
189
|
+
accent: "accent";
|
|
190
|
+
dim: "dim";
|
|
191
|
+
}>>;
|
|
192
|
+
}, z.core.$strict>>>;
|
|
193
|
+
sections: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
194
|
+
kind: z.ZodLiteral<"kv">;
|
|
195
|
+
title: z.ZodOptional<z.ZodString>;
|
|
196
|
+
items: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
197
|
+
key: z.ZodString;
|
|
198
|
+
label: z.ZodString;
|
|
199
|
+
value: z.ZodString;
|
|
200
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
201
|
+
error: "error";
|
|
202
|
+
info: "info";
|
|
203
|
+
success: "success";
|
|
204
|
+
warning: "warning";
|
|
205
|
+
muted: "muted";
|
|
206
|
+
accent: "accent";
|
|
207
|
+
dim: "dim";
|
|
208
|
+
}>>;
|
|
209
|
+
}, z.core.$strict>>>;
|
|
210
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
211
|
+
kind: z.ZodLiteral<"checklist">;
|
|
212
|
+
title: z.ZodOptional<z.ZodString>;
|
|
213
|
+
items: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
214
|
+
id: z.ZodString;
|
|
215
|
+
label: z.ZodString;
|
|
216
|
+
done: z.ZodBoolean;
|
|
217
|
+
}, z.core.$strict>>>;
|
|
218
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
219
|
+
kind: z.ZodLiteral<"activity">;
|
|
220
|
+
title: z.ZodOptional<z.ZodString>;
|
|
221
|
+
lines: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
222
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
223
|
+
kind: z.ZodLiteral<"text">;
|
|
224
|
+
title: z.ZodOptional<z.ZodString>;
|
|
225
|
+
text: z.ZodString;
|
|
226
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
227
|
+
error: "error";
|
|
228
|
+
info: "info";
|
|
229
|
+
success: "success";
|
|
230
|
+
warning: "warning";
|
|
231
|
+
muted: "muted";
|
|
232
|
+
accent: "accent";
|
|
233
|
+
dim: "dim";
|
|
234
|
+
}>>;
|
|
235
|
+
}, z.core.$strict>], "kind">>>;
|
|
236
|
+
actions: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
237
|
+
id: z.ZodString;
|
|
238
|
+
label: z.ZodString;
|
|
239
|
+
command_text: z.ZodString;
|
|
240
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
241
|
+
primary: "primary";
|
|
242
|
+
secondary: "secondary";
|
|
243
|
+
danger: "danger";
|
|
244
|
+
}>>;
|
|
245
|
+
}, z.core.$strict>>>;
|
|
246
|
+
snapshot_compact: z.ZodString;
|
|
247
|
+
snapshot_multiline: z.ZodOptional<z.ZodString>;
|
|
248
|
+
updated_at_ms: z.ZodNumber;
|
|
249
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
250
|
+
}, z.core.$strict>>>;
|
|
98
251
|
}, z.core.$strip>], "kind">;
|
|
99
252
|
export type OperatorBackendTurnResult = z.infer<typeof OperatorBackendTurnResultSchema>;
|
|
100
253
|
export type OperatorBackendTurnInput = {
|
|
@@ -111,11 +264,13 @@ export interface MessagingOperatorBackend {
|
|
|
111
264
|
export type OperatorDecision = {
|
|
112
265
|
kind: "response";
|
|
113
266
|
message: string;
|
|
267
|
+
hud_docs?: HudDoc[];
|
|
114
268
|
operatorSessionId: string;
|
|
115
269
|
operatorTurnId: string;
|
|
116
270
|
} | {
|
|
117
271
|
kind: "command";
|
|
118
272
|
commandText: string;
|
|
273
|
+
hud_docs?: HudDoc[];
|
|
119
274
|
operatorSessionId: string;
|
|
120
275
|
operatorTurnId: string;
|
|
121
276
|
} | {
|
package/dist/operator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"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"}
|