@femtomc/mu-agent 26.2.73 → 26.2.74
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 +21 -32
- package/dist/extensions/branding.js +2 -2
- package/dist/extensions/index.d.ts +3 -9
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +5 -11
- package/dist/extensions/mu-operator.d.ts.map +1 -1
- package/dist/extensions/mu-operator.js +0 -4
- package/dist/extensions/mu-serve.d.ts.map +1 -1
- package/dist/extensions/mu-serve.js +0 -4
- package/dist/extensions/shared.d.ts +2 -21
- package/dist/extensions/shared.d.ts.map +1 -1
- package/dist/extensions/shared.js +0 -90
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/operator.d.ts.map +1 -1
- package/dist/operator.js +237 -5
- package/dist/session_factory.d.ts +5 -0
- package/dist/session_factory.d.ts.map +1 -1
- package/package.json +2 -3
- package/prompts/roles/operator.md +18 -23
- package/prompts/roles/orchestrator.md +10 -11
- package/prompts/roles/reviewer.md +6 -8
- package/prompts/roles/worker.md +6 -8
- package/dist/extensions/mu-tools.d.ts +0 -9
- package/dist/extensions/mu-tools.d.ts.map +0 -1
- package/dist/extensions/mu-tools.js +0 -12
- package/dist/extensions/operator-command.d.ts +0 -13
- package/dist/extensions/operator-command.d.ts.map +0 -1
- package/dist/extensions/operator-command.js +0 -174
- package/dist/extensions/query.d.ts +0 -4
- package/dist/extensions/query.d.ts.map +0 -1
- package/dist/extensions/query.js +0 -402
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ This package provides reusable runtime pieces for chat, orchestration, and serve
|
|
|
6
6
|
|
|
7
7
|
- Messaging operator runtime + backend
|
|
8
8
|
- Command context resolution for operator command proposals
|
|
9
|
-
- Role prompt loading/defaults for orchestrator
|
|
9
|
+
- Role prompt loading/defaults for operator/orchestrator/worker/reviewer
|
|
10
10
|
- pi CLI/SDK orchestration backends and resource loader helpers
|
|
11
11
|
- Prompt/template helpers used by orchestration roles
|
|
12
12
|
|
|
@@ -17,6 +17,7 @@ Bundled defaults now live as markdown files under `packages/agent/prompts/`:
|
|
|
17
17
|
- `operator.md`
|
|
18
18
|
- `orchestrator.md`
|
|
19
19
|
- `worker.md`
|
|
20
|
+
- `reviewer.md`
|
|
20
21
|
- `soul.md` (shared tail appended to all role prompts)
|
|
21
22
|
|
|
22
23
|
These are loaded by runtime code and are the single source of truth for default system prompts.
|
|
@@ -34,7 +35,7 @@ From repo root (`mu/`):
|
|
|
34
35
|
|
|
35
36
|
```bash
|
|
36
37
|
bun run build
|
|
37
|
-
bun test packages/
|
|
38
|
+
bun test packages/agent/test
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
## Serve-mode extensions (`mu serve`)
|
|
@@ -46,12 +47,8 @@ not anonymous inline factories).
|
|
|
46
47
|
Current stack:
|
|
47
48
|
|
|
48
49
|
- `brandingExtension` — mu compact header/footer branding + default theme
|
|
49
|
-
- `queryExtension` — read-only retrieval (`query` tool)
|
|
50
|
-
- `operatorCommandExtension` — approved mutation pathway (`command` tool)
|
|
51
50
|
- `eventLogExtension` — event tail + watch widget
|
|
52
51
|
|
|
53
|
-
`mu serve` sets `MU_SERVER_URL` automatically for these extensions.
|
|
54
|
-
|
|
55
52
|
Default operator UI theme is `mu-gruvbox-dark`.
|
|
56
53
|
|
|
57
54
|
## Slash commands (operator-facing)
|
|
@@ -61,38 +58,30 @@ Default operator UI theme is `mu-gruvbox-dark`.
|
|
|
61
58
|
- `/mu brand on|off|toggle` — enable/disable UI branding
|
|
62
59
|
- `/mu help` — dispatcher catalog of registered `/mu` subcommands
|
|
63
60
|
|
|
64
|
-
##
|
|
65
|
-
|
|
66
|
-
- `query({ action, resource?, ... })`
|
|
67
|
-
- Read-only pathway.
|
|
68
|
-
- `action`: `describe | get | list | search | timeline | stats | trace`
|
|
69
|
-
- Use `action="describe"` for machine-readable capability discovery.
|
|
70
|
-
- `command({ kind, ... })`
|
|
71
|
-
- Approved mutation pathway through `/api/commands/submit`.
|
|
72
|
-
- `kind` includes run lifecycle (`run_start|run_resume|run_interrupt`),
|
|
73
|
-
control-plane lifecycle (`reload|update`), issue lifecycle/dependency edits
|
|
74
|
-
(`issue_create|issue_update|issue_claim|issue_open|issue_close|issue_dep|issue_undep`),
|
|
75
|
-
forum posting (`forum_post`), heartbeat program lifecycle
|
|
76
|
-
(`heartbeat_create|heartbeat_update|heartbeat_delete|heartbeat_trigger|heartbeat_enable|heartbeat_disable`),
|
|
77
|
-
and cron program lifecycle
|
|
78
|
-
(`cron_create|cron_update|cron_delete|cron_trigger|cron_enable|cron_disable`).
|
|
61
|
+
## Tooling model (CLI-first)
|
|
79
62
|
|
|
80
|
-
|
|
63
|
+
mu agent sessions rely on generic built-in tools from pi:
|
|
81
64
|
|
|
82
|
-
|
|
65
|
+
- `bash`
|
|
66
|
+
- `read`
|
|
67
|
+
- `write`
|
|
68
|
+
- `edit`
|
|
83
69
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- domain filters (`status`, `tag`, `source`, `issue_id`, `run_id`, `conversation_key`, etc.) avoid broad scans.
|
|
70
|
+
State inspection and mutation are performed by invoking `mu` CLI commands
|
|
71
|
+
directly through `bash`, for example:
|
|
87
72
|
|
|
88
|
-
|
|
73
|
+
```bash
|
|
74
|
+
mu status --pretty
|
|
75
|
+
mu issues get <id> --pretty
|
|
76
|
+
mu forum read issue:<id> --limit 20 --pretty
|
|
77
|
+
mu issues close <id> --outcome success --pretty
|
|
78
|
+
mu control reload --pretty
|
|
79
|
+
```
|
|
89
80
|
|
|
90
|
-
|
|
91
|
-
2. bounded `list`/`search` with focused filters.
|
|
92
|
-
3. targeted `get`/`trace` with `fields` as needed.
|
|
81
|
+
There is no dedicated `query(...)` vs `command(...)` wrapper boundary in this package.
|
|
93
82
|
|
|
94
83
|
## Control-plane config notes
|
|
95
84
|
|
|
96
85
|
- Runtime config source of truth is `.mu/config.json`.
|
|
97
|
-
- Inspect runtime state via
|
|
98
|
-
- Apply control-plane lifecycle mutations via `
|
|
86
|
+
- Inspect runtime state via CLI (`mu control status`, `mu status`).
|
|
87
|
+
- Apply control-plane lifecycle mutations via CLI (`mu control reload`, `mu control update`).
|
|
@@ -164,8 +164,8 @@ export function brandingExtension(pi) {
|
|
|
164
164
|
routes: [],
|
|
165
165
|
};
|
|
166
166
|
snapshot = {
|
|
167
|
-
openCount: status.open_count,
|
|
168
|
-
readyCount: status.ready_count,
|
|
167
|
+
openCount: typeof status.open_count === "number" ? status.open_count : 0,
|
|
168
|
+
readyCount: typeof status.ready_count === "number" ? status.ready_count : 0,
|
|
169
169
|
controlPlaneActive: cp.active,
|
|
170
170
|
adapters: routesFromStatus(cp.adapters, cp.routes).map((entry) => entry.name),
|
|
171
171
|
error: null,
|
|
@@ -1,25 +1,19 @@
|
|
|
1
1
|
export { brandingExtension } from "./branding.js";
|
|
2
2
|
export { eventLogExtension } from "./event-log.js";
|
|
3
|
-
export { muToolsExtension } from "./mu-tools.js";
|
|
4
3
|
export { muOperatorExtension } from "./mu-operator.js";
|
|
5
4
|
export { muServeExtension } from "./mu-serve.js";
|
|
6
|
-
export { operatorCommandExtension } from "./operator-command.js";
|
|
7
|
-
export { queryExtension } from "./query.js";
|
|
8
5
|
/**
|
|
9
6
|
* Serve-mode extension — single facade that bundles all serve extensions.
|
|
10
7
|
*/
|
|
11
8
|
export declare const serveExtensionPaths: string[];
|
|
12
9
|
/**
|
|
13
|
-
* Operator-mode extension — single facade that bundles operator UI
|
|
14
|
-
* query/command tool pathways.
|
|
10
|
+
* Operator-mode extension — single facade that bundles operator UI helpers.
|
|
15
11
|
*/
|
|
16
12
|
export declare const operatorExtensionPaths: string[];
|
|
17
13
|
/**
|
|
18
|
-
*
|
|
14
|
+
* Orchestrator and worker sessions run with the generic built-in tools
|
|
15
|
+
* (bash/read/write/edit) and invoke `mu` CLI directly.
|
|
19
16
|
*/
|
|
20
17
|
export declare const orchestratorToolExtensionPaths: string[];
|
|
21
|
-
/**
|
|
22
|
-
* Tool-only extension bundle for worker sessions.
|
|
23
|
-
*/
|
|
24
18
|
export declare const workerToolExtensionPaths: string[];
|
|
25
19
|
//# 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,
|
|
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,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;AAEnF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,EAAO,CAAC;AAC3D,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAAO,CAAC"}
|
package/dist/extensions/index.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
export { brandingExtension } from "./branding.js";
|
|
2
2
|
export { eventLogExtension } from "./event-log.js";
|
|
3
|
-
export { muToolsExtension } from "./mu-tools.js";
|
|
4
3
|
export { muOperatorExtension } from "./mu-operator.js";
|
|
5
4
|
export { muServeExtension } from "./mu-serve.js";
|
|
6
|
-
export { operatorCommandExtension } from "./operator-command.js";
|
|
7
|
-
export { queryExtension } from "./query.js";
|
|
8
5
|
const RUNTIME_EXTENSION = import.meta.url.endsWith(".ts") ? "ts" : "js";
|
|
9
6
|
function resolveBundledExtensionPath(moduleBasename) {
|
|
10
7
|
return new URL(`./${moduleBasename}.${RUNTIME_EXTENSION}`, import.meta.url).pathname;
|
|
@@ -14,15 +11,12 @@ function resolveBundledExtensionPath(moduleBasename) {
|
|
|
14
11
|
*/
|
|
15
12
|
export const serveExtensionPaths = [resolveBundledExtensionPath("mu-serve")];
|
|
16
13
|
/**
|
|
17
|
-
* Operator-mode extension — single facade that bundles operator UI
|
|
18
|
-
* query/command tool pathways.
|
|
14
|
+
* Operator-mode extension — single facade that bundles operator UI helpers.
|
|
19
15
|
*/
|
|
20
16
|
export const operatorExtensionPaths = [resolveBundledExtensionPath("mu-operator")];
|
|
21
17
|
/**
|
|
22
|
-
*
|
|
18
|
+
* Orchestrator and worker sessions run with the generic built-in tools
|
|
19
|
+
* (bash/read/write/edit) and invoke `mu` CLI directly.
|
|
23
20
|
*/
|
|
24
|
-
export const orchestratorToolExtensionPaths = [
|
|
25
|
-
|
|
26
|
-
* Tool-only extension bundle for worker sessions.
|
|
27
|
-
*/
|
|
28
|
-
export const workerToolExtensionPaths = [resolveBundledExtensionPath("mu-tools")];
|
|
21
|
+
export const orchestratorToolExtensionPaths = [];
|
|
22
|
+
export const workerToolExtensionPaths = [];
|
|
@@ -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;AAIlE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,QAGnD;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -6,12 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { brandingExtension } from "./branding.js";
|
|
8
8
|
import { eventLogExtension } from "./event-log.js";
|
|
9
|
-
import { operatorCommandExtension } from "./operator-command.js";
|
|
10
|
-
import { queryExtension } from "./query.js";
|
|
11
9
|
export function muOperatorExtension(pi) {
|
|
12
10
|
brandingExtension(pi);
|
|
13
|
-
queryExtension(pi);
|
|
14
11
|
eventLogExtension(pi);
|
|
15
|
-
operatorCommandExtension(pi);
|
|
16
12
|
}
|
|
17
13
|
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;AAIlE,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,QAGhD;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -6,12 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { brandingExtension } from "./branding.js";
|
|
8
8
|
import { eventLogExtension } from "./event-log.js";
|
|
9
|
-
import { operatorCommandExtension } from "./operator-command.js";
|
|
10
|
-
import { queryExtension } from "./query.js";
|
|
11
9
|
export function muServeExtension(pi) {
|
|
12
10
|
brandingExtension(pi);
|
|
13
|
-
queryExtension(pi);
|
|
14
11
|
eventLogExtension(pi);
|
|
15
|
-
operatorCommandExtension(pi);
|
|
16
12
|
}
|
|
17
13
|
export default muServeExtension;
|
|
@@ -41,9 +41,9 @@ export type MuControlPlaneStatus = {
|
|
|
41
41
|
};
|
|
42
42
|
export type MuStatusResponse = {
|
|
43
43
|
repo_root: string;
|
|
44
|
-
open_count: number;
|
|
45
|
-
ready_count: number;
|
|
46
44
|
control_plane: MuControlPlaneStatus;
|
|
45
|
+
open_count?: number;
|
|
46
|
+
ready_count?: number;
|
|
47
47
|
};
|
|
48
48
|
export declare function muServerUrl(): string | null;
|
|
49
49
|
export declare function clampInt(value: number | undefined, fallback: number, min: number, max: number): number;
|
|
@@ -53,23 +53,4 @@ export declare function fetchMuJson<T>(path: string, opts?: {
|
|
|
53
53
|
body?: unknown;
|
|
54
54
|
}): Promise<T>;
|
|
55
55
|
export declare function fetchMuStatus(timeoutMs?: number): Promise<MuStatusResponse>;
|
|
56
|
-
export declare function asRecord(value: unknown): Record<string, unknown> | null;
|
|
57
|
-
export declare function asArray(value: unknown): unknown[];
|
|
58
|
-
export declare function asString(value: unknown): string | null;
|
|
59
|
-
export declare function asNumber(value: unknown): number | null;
|
|
60
|
-
export declare function previewText(value: unknown, maxChars?: number): string;
|
|
61
|
-
export declare function previewLines(value: unknown, opts?: {
|
|
62
|
-
maxLines?: number;
|
|
63
|
-
maxCharsPerLine?: number;
|
|
64
|
-
}): string[];
|
|
65
|
-
export declare function parseFieldPaths(value: string | undefined): string[];
|
|
66
|
-
export declare function selectFields(source: unknown, paths: string[]): Record<string, unknown>;
|
|
67
|
-
export declare function textResult(text: string, details?: Record<string, unknown>): {
|
|
68
|
-
content: {
|
|
69
|
-
type: "text";
|
|
70
|
-
text: string;
|
|
71
|
-
}[];
|
|
72
|
-
details: Record<string, unknown>;
|
|
73
|
-
};
|
|
74
|
-
export declare function toJsonText(value: unknown): string;
|
|
75
56
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/extensions/shared.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,aAAa,EAAE,oBAAoB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC/C,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACjD,WAAW,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC/C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8BAA8B,EAAE,MAAM,CAAC;IACvC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,EAAE,8BAA8B,CAAC;IAC3C,aAAa,EAAE;QACd,QAAQ,EAAE,iCAAiC,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/extensions/shared.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,aAAa,EAAE,oBAAoB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC/C,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACjD,WAAW,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC/C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8BAA8B,EAAE,MAAM,CAAC;IACvC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,EAAE,8BAA8B,CAAC;IAC3C,aAAa,EAAE;QACd,QAAQ,EAAE,iCAAiC,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,oBAAoB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKtG;AAED,wBAAsB,WAAW,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAChE,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAiCD,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGjF"}
|
|
@@ -64,93 +64,3 @@ export async function fetchMuStatus(timeoutMs) {
|
|
|
64
64
|
const status = await fetchMuJson("/api/status", { timeoutMs });
|
|
65
65
|
return ensureGenerationScopedStatus(status);
|
|
66
66
|
}
|
|
67
|
-
export function asRecord(value) {
|
|
68
|
-
if (typeof value !== "object" || value == null || Array.isArray(value)) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
return value;
|
|
72
|
-
}
|
|
73
|
-
export function asArray(value) {
|
|
74
|
-
return Array.isArray(value) ? value : [];
|
|
75
|
-
}
|
|
76
|
-
export function asString(value) {
|
|
77
|
-
return typeof value === "string" ? value : null;
|
|
78
|
-
}
|
|
79
|
-
export function asNumber(value) {
|
|
80
|
-
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
81
|
-
}
|
|
82
|
-
export function previewText(value, maxChars = 220) {
|
|
83
|
-
const raw = typeof value === "string"
|
|
84
|
-
? value
|
|
85
|
-
: value == null
|
|
86
|
-
? ""
|
|
87
|
-
: (() => {
|
|
88
|
-
try {
|
|
89
|
-
return JSON.stringify(value);
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return String(value);
|
|
93
|
-
}
|
|
94
|
-
})();
|
|
95
|
-
const compact = raw.replace(/\s+/g, " ").trim();
|
|
96
|
-
if (compact.length <= maxChars) {
|
|
97
|
-
return compact;
|
|
98
|
-
}
|
|
99
|
-
const keep = Math.max(1, maxChars - 1);
|
|
100
|
-
return `${compact.slice(0, keep)}…`;
|
|
101
|
-
}
|
|
102
|
-
export function previewLines(value, opts = {}) {
|
|
103
|
-
const maxLines = clampInt(opts.maxLines, 12, 1, 200);
|
|
104
|
-
const maxCharsPerLine = clampInt(opts.maxCharsPerLine, 220, 20, 5_000);
|
|
105
|
-
const lines = asArray(value);
|
|
106
|
-
const tail = lines.slice(-maxLines);
|
|
107
|
-
return tail.map((line) => previewText(line, maxCharsPerLine));
|
|
108
|
-
}
|
|
109
|
-
export function parseFieldPaths(value) {
|
|
110
|
-
if (!value) {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
return value
|
|
114
|
-
.split(",")
|
|
115
|
-
.map((segment) => segment.trim())
|
|
116
|
-
.filter((segment) => segment.length > 0)
|
|
117
|
-
.slice(0, 32);
|
|
118
|
-
}
|
|
119
|
-
function readPath(source, path) {
|
|
120
|
-
if (path.length === 0) {
|
|
121
|
-
return source;
|
|
122
|
-
}
|
|
123
|
-
const segments = path.split(".").filter((segment) => segment.length > 0);
|
|
124
|
-
let cursor = source;
|
|
125
|
-
for (const segment of segments) {
|
|
126
|
-
if (Array.isArray(cursor)) {
|
|
127
|
-
const index = Number.parseInt(segment, 10);
|
|
128
|
-
if (!Number.isFinite(index) || index < 0 || index >= cursor.length) {
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
cursor = cursor[index];
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
if (typeof cursor !== "object" || cursor == null) {
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
cursor = cursor[segment];
|
|
138
|
-
}
|
|
139
|
-
return cursor;
|
|
140
|
-
}
|
|
141
|
-
export function selectFields(source, paths) {
|
|
142
|
-
const out = {};
|
|
143
|
-
for (const path of paths) {
|
|
144
|
-
out[path] = readPath(source, path);
|
|
145
|
-
}
|
|
146
|
-
return out;
|
|
147
|
-
}
|
|
148
|
-
export function textResult(text, details = {}) {
|
|
149
|
-
return {
|
|
150
|
-
content: [{ type: "text", text }],
|
|
151
|
-
details,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
export function toJsonText(value) {
|
|
155
|
-
return JSON.stringify(value, null, 2);
|
|
156
|
-
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "./backend.js";
|
|
2
2
|
export * from "./command_context.js";
|
|
3
|
-
export { DEFAULT_SOUL_PROMPT, appendSharedSoul, loadBundledPrompt } from "./default_prompts.js";
|
|
3
|
+
export { DEFAULT_OPERATOR_SYSTEM_PROMPT, DEFAULT_ORCHESTRATOR_PROMPT, DEFAULT_REVIEWER_PROMPT, DEFAULT_SOUL_PROMPT, DEFAULT_WORKER_PROMPT, appendSharedSoul, loadBundledPrompt, } from "./default_prompts.js";
|
|
4
4
|
export * from "./extensions/index.js";
|
|
5
5
|
export * from "./operator.js";
|
|
6
6
|
export * from "./mu_roles.js";
|
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,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACN,8BAA8B,EAC9B,2BAA2B,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "./backend.js";
|
|
2
2
|
export * from "./command_context.js";
|
|
3
|
-
export { DEFAULT_SOUL_PROMPT, appendSharedSoul, loadBundledPrompt } from "./default_prompts.js";
|
|
3
|
+
export { DEFAULT_OPERATOR_SYSTEM_PROMPT, DEFAULT_ORCHESTRATOR_PROMPT, DEFAULT_REVIEWER_PROMPT, DEFAULT_SOUL_PROMPT, DEFAULT_WORKER_PROMPT, appendSharedSoul, loadBundledPrompt, } from "./default_prompts.js";
|
|
4
4
|
export * from "./extensions/index.js";
|
|
5
5
|
export * from "./operator.js";
|
|
6
6
|
export * from "./mu_roles.js";
|
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;AAIxD,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+BxC,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;IAC7E,OAAO,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;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;CAgHJ;AAED,MAAM,MAAM,yCAAyC,GAAG;IACvD,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAClF,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnF,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,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;IAC7B,wBAAwB,CAAC,EAAE,yCAAyC,CAAC;CACrE,CAAC;
|
|
1
|
+
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"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"}
|