openfusion-mcp 0.2.0 → 0.2.1
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 -24
- package/dist/config/schema.js +19 -13
- package/dist/config/schema.js.map +1 -1
- package/dist/config/store.js +28 -6
- package/dist/config/store.js.map +1 -1
- package/dist/fusion/fusion.js +17 -2
- package/dist/fusion/fusion.js.map +1 -1
- package/dist/fusion/judge.js +4 -5
- package/dist/fusion/judge.js.map +1 -1
- package/dist/fusion/personas.js +121 -0
- package/dist/fusion/personas.js.map +1 -0
- package/dist/fusion/worker.js +1 -2
- package/dist/fusion/worker.js.map +1 -1
- package/dist/server/api/personas.js +99 -0
- package/dist/server/api/personas.js.map +1 -0
- package/dist/server/mcp-server.js +6 -1
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/ui-server.js +2 -0
- package/dist/server/ui-server.js.map +1 -1
- package/dist/store/activity.js +3 -2
- package/dist/store/activity.js.map +1 -1
- package/dist/store/db.js +6 -0
- package/dist/store/db.js.map +1 -1
- package/package.json +1 -1
- package/ui-dist/assets/{index-ChjXRZVz.js → index-DLT2Habk.js} +3 -3
- package/ui-dist/assets/index-DLT2Habk.js.map +1 -0
- package/ui-dist/assets/index-Dd4GRUW2.css +2 -0
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/index-ChjXRZVz.js.map +0 -1
- package/ui-dist/assets/index-CpvFrZ2L.css +0 -2
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://github.com/hashangit/openfusion/releases"><img alt="Version" src="https://img.shields.io/badge/version-0.2.
|
|
10
|
+
<a href="https://github.com/hashangit/openfusion/releases"><img alt="Version" src="https://img.shields.io/badge/version-0.2.1-4cd0b0.svg" /></a>
|
|
11
11
|
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
|
|
12
12
|
<a href="https://nodejs.org"><img alt="Node" src="https://img.shields.io/badge/node-%E2%89%A522-3498db.svg" /></a>
|
|
13
13
|
<a href="https://www.typescriptlang.org/"><img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-5.7-3178c6.svg" /></a>
|
|
@@ -59,46 +59,43 @@ And when *not* to: routine coding, simple lookups, single-turn Q&A. Fusion is 2
|
|
|
59
59
|
|
|
60
60
|
## Install
|
|
61
61
|
|
|
62
|
-
Requires **Node.js 22+**.
|
|
62
|
+
Requires **Node.js 22+**. Published to npm — no clone or build needed.
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
**Quick start (3 steps):**
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
### Or: register manually
|
|
66
|
+
1. **Register OpenFusion with your MCP client:**
|
|
67
|
+
```bash
|
|
68
|
+
npx openfusion-setup # interactive: picks your client, writes its config, installs the agent skill
|
|
69
|
+
```
|
|
70
|
+
2. **Restart your MCP client** so it loads OpenFusion. The client spawns the server, which on first run prints a banner and **opens the dashboard** at `http://localhost:9077`.
|
|
71
|
+
3. **Configure in the dashboard:** add 2–5 candidate models + a judge + an API key per provider (use **Test** to validate each). The **● Configured** badge turns green and `fusion` works immediately.
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
That's it — the `fusion` + `open_dashboard` tools are now available to your agent.
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
---
|
|
77
76
|
|
|
78
|
-
|
|
77
|
+
### Detailed paths
|
|
79
78
|
|
|
80
|
-
|
|
81
|
-
npx -y openfusion-mcp
|
|
82
|
-
# → a browser opens at http://localhost:9077 to configure candidates, judge, and API keys
|
|
83
|
-
```
|
|
79
|
+
**One-command (recommended):** `npx openfusion-setup` writes the correct snippet for your client (Claude Code, Cursor, Cline, Zed, Codex, Gemini CLI, ZCode, Claude Desktop, …) and installs the skill.
|
|
84
80
|
|
|
85
|
-
|
|
81
|
+
**Manual registration:** point your MCP client at `npx -y openfusion-mcp`. See **[INSTALL.md](./INSTALL.md)** for exact recipes for 18+ clients. (Claude Code and ZCode also auto-load the repo's [`.mcp.json`](./.mcp.json) when you open the project.)
|
|
86
82
|
|
|
83
|
+
**From source** (if you cloned):
|
|
87
84
|
```bash
|
|
88
|
-
git clone https://github.com/hashangit/openfusion.git && cd openfusion
|
|
89
85
|
pnpm install && pnpm build # tsc -> dist/ ; vite -> ui-dist/
|
|
90
|
-
node dist/index.js
|
|
86
|
+
node dist/index.js # start the server + dashboard
|
|
87
|
+
# then register with `node /abs/path/to/openfusion/dist/index.js` in your client
|
|
91
88
|
```
|
|
92
89
|
|
|
93
90
|
> **Native build note:** `better-sqlite3` compiles a native addon at install. On most platforms a prebuilt binary is fetched automatically. If install fails, run `npm rebuild better-sqlite3` (requires Python 3 + a C++ toolchain — Xcode CLT on macOS, `build-essential` on Linux). If the addon is missing at runtime, OpenFusion prints a clear fix-it message instead of a cryptic stack trace.
|
|
94
91
|
|
|
95
|
-
|
|
92
|
+
### Where data lives
|
|
96
93
|
|
|
97
|
-
OpenFusion stores config, encrypted keys, and the SQLite DB under `OPENFUSION_HOME` — defaulting to your OS data dir (`~/Library/Application Support/openfusion` on macOS, `~/.local/share/openfusion` on Linux). The **path is printed on every startup**, so you always know where your config/secrets are. Set `OPENFUSION_HOME` to override (e.g. for a separate profile)
|
|
94
|
+
OpenFusion stores config, encrypted keys, and the SQLite DB under `OPENFUSION_HOME` — defaulting to your OS data dir (`~/Library/Application Support/openfusion` on macOS, `~/.local/share/openfusion` on Linux). The **path is printed on every startup**, so you always know where your config/secrets are. Set `OPENFUSION_HOME` to override (e.g. for a separate profile), and restart the server after changing it — two servers with different `OPENFUSION_HOME`s see different configs.
|
|
98
95
|
|
|
99
|
-
|
|
96
|
+
### Configure
|
|
100
97
|
|
|
101
|
-
1. Open **http://localhost:9077** (start the dashboard anytime with `node dist/ui-only.js`).
|
|
98
|
+
1. Open **http://localhost:9077** (or start the dashboard anytime with `npx openfusion-ui`, or `node dist/ui-only.js` from source).
|
|
102
99
|
2. Add **2–5 candidate models** (provider + model each), pick a **judge**, and enter an **API key** per referenced provider. Use **Test** to validate each before saving.
|
|
103
100
|
3. The **● Configured** badge turns green → the `fusion` tool works immediately (no restart).
|
|
104
101
|
|
package/dist/config/schema.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// Zod schemas for config.json (plaintext model choices — no secrets).
|
|
2
2
|
// See data-model.md E1 and contracts/config-schema.md.
|
|
3
3
|
//
|
|
4
|
-
// v2 (0.1.1): candidates carry
|
|
5
|
-
// (
|
|
6
|
-
// load (see store.ts migrate()).
|
|
4
|
+
// v2 (0.1.1): candidates carry `enabled`; `judge` → `judges[]`; benchmarkMode.
|
|
5
|
+
// v3 (0.1.1): personas (worker/analysis/synthesis prompt bundles) + activePersona.
|
|
7
6
|
import { z } from "zod";
|
|
8
|
-
export const CONFIG_VERSION =
|
|
7
|
+
export const CONFIG_VERSION = 3;
|
|
9
8
|
const LOOPBACK = /^(127\.|localhost$|::1$|0:0:0:0:0:0:0:1$)/;
|
|
10
9
|
export const CandidateSlotSchema = z.object({
|
|
11
10
|
id: z.string().min(1),
|
|
@@ -18,37 +17,44 @@ export const JudgeConfigSchema = z.object({
|
|
|
18
17
|
model: z.string().min(1),
|
|
19
18
|
enabled: z.boolean().default(true),
|
|
20
19
|
});
|
|
20
|
+
export const PersonaSchema = z.object({
|
|
21
|
+
id: z.string().min(1),
|
|
22
|
+
name: z.string().min(1),
|
|
23
|
+
description: z.string().optional(),
|
|
24
|
+
builtin: z.boolean().optional(),
|
|
25
|
+
workerPrompt: z.string().min(1),
|
|
26
|
+
analysisPrompt: z.string().min(1),
|
|
27
|
+
synthesisPrompt: z.string().min(1),
|
|
28
|
+
});
|
|
21
29
|
export const SettingsSchema = z
|
|
22
30
|
.object({
|
|
23
|
-
// Per-call timeout, reset on each retry. Default 5 min so slow providers
|
|
24
|
-
// have room; users hitting a client tool-call ceiling can lower this.
|
|
25
31
|
workerTimeoutMs: z.number().int().min(5_000).max(600_000).default(300_000),
|
|
26
32
|
uiPort: z.number().int().min(1).max(65535).default(9077),
|
|
27
33
|
bind: z.string().regex(LOOPBACK, "must be a loopback address").default("127.0.0.1"),
|
|
28
|
-
// When true: no max-candidate limit, candidate timeout forced to 10 min.
|
|
29
34
|
benchmarkMode: z.boolean().default(false),
|
|
35
|
+
activePersona: z.string().default("generalist"),
|
|
30
36
|
})
|
|
31
|
-
.default({ workerTimeoutMs: 300_000, uiPort: 9077, bind: "127.0.0.1", benchmarkMode: false });
|
|
37
|
+
.default({ workerTimeoutMs: 300_000, uiPort: 9077, bind: "127.0.0.1", benchmarkMode: false, activePersona: "generalist" });
|
|
32
38
|
/** Strict, fully-configured config (what isConfigured() ultimately wants). */
|
|
33
39
|
export const AppConfigSchema = z.object({
|
|
34
40
|
version: z.literal(CONFIG_VERSION).default(CONFIG_VERSION),
|
|
35
41
|
candidates: z.array(CandidateSlotSchema),
|
|
36
42
|
judges: z.array(JudgeConfigSchema).min(1, "need at least 1 judge configured"),
|
|
43
|
+
personas: z.array(PersonaSchema),
|
|
37
44
|
settings: SettingsSchema,
|
|
38
45
|
});
|
|
39
46
|
/**
|
|
40
47
|
* Lenient schema for parsing a saved/partial file (may be empty or mid-setup).
|
|
41
|
-
* `
|
|
42
|
-
*
|
|
43
|
-
* real rules (>=2 enabled candidates, >=1 enabled judge) at fusion time.
|
|
44
|
-
* Candidates capped at 5 even when lenient — except benchmark mode lifts it.
|
|
48
|
+
* `personas`/`activePersona` optional with defaults so older files parse cleanly;
|
|
49
|
+
* isConfigured() enforces the real rules (>=2 enabled candidates, >=1 enabled judge).
|
|
45
50
|
*/
|
|
46
51
|
export const RawConfigSchema = z
|
|
47
52
|
.object({
|
|
48
53
|
version: z.number().optional(),
|
|
49
54
|
candidates: z.array(CandidateSlotSchema).optional().default([]),
|
|
50
55
|
judges: z.array(JudgeConfigSchema).optional().default([]),
|
|
56
|
+
personas: z.array(PersonaSchema).optional().default([]),
|
|
51
57
|
settings: SettingsSchema,
|
|
52
58
|
})
|
|
53
|
-
.default({ settings: { workerTimeoutMs: 300_000, uiPort: 9077, bind: "127.0.0.1", benchmarkMode: false } });
|
|
59
|
+
.default({ settings: { workerTimeoutMs: 300_000, uiPort: 9077, bind: "127.0.0.1", benchmarkMode: false, activePersona: "generalist" } });
|
|
54
60
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,uDAAuD;AACvD,EAAE;AACF
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/config/store.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { existsSync, readFileSync, writeFileSync, renameSync, copyFileSync } from "node:fs";
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { AppConfigSchema, RawConfigSchema, CONFIG_VERSION } from "./schema.js";
|
|
6
|
+
import { BUILTIN_PERSONAS } from "../fusion/personas.js";
|
|
6
7
|
import { ensureHome, paths } from "../util/paths.js";
|
|
7
8
|
/** Build an empty RawConfig using schema defaults. */
|
|
8
9
|
export function emptyConfig() {
|
|
@@ -25,10 +26,10 @@ export function loadConfig(path = paths.config()) {
|
|
|
25
26
|
return RawConfigSchema.parse(migrate(json));
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* Migrations run on every load; idempotent for current-version files.
|
|
30
|
+
* - v1 -> v2: single `judge` -> `judges[]`; backfill candidate.enabled.
|
|
31
|
+
* - v2 -> v3: inject builtin personas if `personas` absent/empty; set activePersona.
|
|
32
|
+
* A file with a stray `judge` key from a downgrade is tolerated (ignored).
|
|
32
33
|
*/
|
|
33
34
|
export function migrate(raw) {
|
|
34
35
|
if (!raw || typeof raw !== "object")
|
|
@@ -36,6 +37,7 @@ export function migrate(raw) {
|
|
|
36
37
|
const obj = raw;
|
|
37
38
|
const out = { ...obj };
|
|
38
39
|
let migrated = false;
|
|
40
|
+
let migratedTo = 0;
|
|
39
41
|
// judge (singular, v1) -> judges (plural, v2)
|
|
40
42
|
if (!Array.isArray(out.judges) && obj.judge && typeof obj.judge === "object") {
|
|
41
43
|
out.judges = [{ ...obj.judge, enabled: true }];
|
|
@@ -57,9 +59,27 @@ export function migrate(raw) {
|
|
|
57
59
|
migrated = true;
|
|
58
60
|
out.candidates = after;
|
|
59
61
|
}
|
|
62
|
+
if (migrated)
|
|
63
|
+
migratedTo = Math.max(migratedTo, 2);
|
|
64
|
+
// v2 -> v3: ensure personas present (inject builtins) + activePersona set.
|
|
65
|
+
if (!Array.isArray(out.personas) || out.personas.length === 0) {
|
|
66
|
+
out.personas = BUILTIN_PERSONAS.map((p) => ({ ...p }));
|
|
67
|
+
migrated = true;
|
|
68
|
+
}
|
|
69
|
+
const settings = (out.settings ?? {});
|
|
70
|
+
if (!settings.activePersona) {
|
|
71
|
+
settings.activePersona = "generalist";
|
|
72
|
+
out.settings = settings;
|
|
73
|
+
migrated = true;
|
|
74
|
+
}
|
|
75
|
+
if (migrated && migratedTo < 3)
|
|
76
|
+
migratedTo = 3;
|
|
60
77
|
if (migrated) {
|
|
61
|
-
out.version =
|
|
62
|
-
|
|
78
|
+
out.version = migratedTo;
|
|
79
|
+
const note = migratedTo === 3
|
|
80
|
+
? "config upgraded (personas added + activePersona set)"
|
|
81
|
+
: "config upgraded from v1 → v2 (judge→judges, enabled flags)";
|
|
82
|
+
console.error(`OpenFusion: ${note}. Re-save via the dashboard to persist.`);
|
|
63
83
|
}
|
|
64
84
|
return out;
|
|
65
85
|
}
|
|
@@ -84,6 +104,8 @@ export function mergeAndValidate(base, patch) {
|
|
|
84
104
|
merged.candidates = p.candidates;
|
|
85
105
|
if (Array.isArray(p.judges))
|
|
86
106
|
merged.judges = p.judges;
|
|
107
|
+
if (Array.isArray(p.personas))
|
|
108
|
+
merged.personas = p.personas;
|
|
87
109
|
if (p.settings && typeof p.settings === "object") {
|
|
88
110
|
merged.settings = { ...base.settings, ...p.settings };
|
|
89
111
|
}
|
package/dist/config/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAkC,MAAM,aAAa,CAAC;AAC/G,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErD,sDAAsD;AACtD,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE;IAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,WAAW,EAAE,CAAC;IACvC,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,WAAW,CAAC,cAAc,EAAE,kCAAmC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAChD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,GAAG,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;IAChD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,8CAA8C;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7E,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,GAAI,GAAG,CAAC,KAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC,KAAK,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,iEAAiE;IACjE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,UAA4C,CAAC;QAChE,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpD,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAI,UAAU;YAAE,QAAQ,GAAG,IAAI,CAAC;QAChC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
|
package/dist/fusion/fusion.js
CHANGED
|
@@ -6,6 +6,7 @@ import { isConfigured } from "../config/completeness.js";
|
|
|
6
6
|
import { getKey } from "../config/secrets.js";
|
|
7
7
|
import { resolveModel } from "../providers/pi-ai-bridge.js";
|
|
8
8
|
import { runWorker } from "./worker.js";
|
|
9
|
+
import { resolvePersona } from "./personas.js";
|
|
9
10
|
import { runAnalysis, runSynthesis } from "./judge.js";
|
|
10
11
|
import { paths } from "../util/paths.js";
|
|
11
12
|
import { recordActivity, recordSubCall, updateActivity } from "../store/activity.js";
|
|
@@ -30,6 +31,18 @@ export async function runFusion(input) {
|
|
|
30
31
|
const candidates = (input.config.candidates ?? []).filter((c) => c.enabled !== false);
|
|
31
32
|
const judge = (input.config.judges ?? []).find((j) => j.enabled !== false);
|
|
32
33
|
const benchmark = input.config.settings.benchmarkMode === true;
|
|
34
|
+
// Resolve the persona: per-call override -> active persona -> generalist default.
|
|
35
|
+
// Falls back gracefully (never fails) — a missing persona always yields real prompts.
|
|
36
|
+
const persona = resolvePersona({
|
|
37
|
+
override: input.persona,
|
|
38
|
+
personas: input.config.personas ?? [],
|
|
39
|
+
activeId: input.config.settings.activePersona,
|
|
40
|
+
});
|
|
41
|
+
const personaPrompts = {
|
|
42
|
+
worker: persona.workerPrompt,
|
|
43
|
+
analysis: persona.analysisPrompt,
|
|
44
|
+
synthesis: persona.synthesisPrompt,
|
|
45
|
+
};
|
|
33
46
|
// Benchmark mode forces a 10-min candidate timeout; the judge always uses the
|
|
34
47
|
// user's configured workerTimeoutMs (a judge is one call, not benchmarked).
|
|
35
48
|
const candidateTimeoutMs = benchmark ? 600_000 : input.config.settings.workerTimeoutMs;
|
|
@@ -60,6 +73,7 @@ export async function runFusion(input) {
|
|
|
60
73
|
total_output_tokens: 0,
|
|
61
74
|
total_cost: 0,
|
|
62
75
|
total_latency_ms: 0,
|
|
76
|
+
persona: persona.id,
|
|
63
77
|
status: "error", // pessimistic default; updated on success/partial
|
|
64
78
|
error: "in-progress",
|
|
65
79
|
});
|
|
@@ -73,6 +87,7 @@ export async function runFusion(input) {
|
|
|
73
87
|
context: input.context,
|
|
74
88
|
apiKey: getKey(c.provider, secretsPath, keyPath) ?? "",
|
|
75
89
|
timeoutMs: candidateTimeoutMs,
|
|
90
|
+
workerPrompt: personaPrompts.worker,
|
|
76
91
|
})));
|
|
77
92
|
// Log each worker sub_call regardless of outcome (Constitution V).
|
|
78
93
|
for (const w of workerResults) {
|
|
@@ -129,7 +144,7 @@ export async function runFusion(input) {
|
|
|
129
144
|
if (!judgeModel) {
|
|
130
145
|
return failWithJudgeError(input, activityId, startedAt, survivorCount, workerResults, "analysis", `could not resolve judge model ${judge.provider}/${judge.model}`);
|
|
131
146
|
}
|
|
132
|
-
const analysis = await runAnalysis(judgeModel, input.prompt, candidateViews, judgeApiKey, judgeTimeoutMs);
|
|
147
|
+
const analysis = await runAnalysis(judgeModel, input.prompt, candidateViews, judgeApiKey, judgeTimeoutMs, personaPrompts.analysis);
|
|
133
148
|
recordSubCall(input.db, {
|
|
134
149
|
activity_id: activityId,
|
|
135
150
|
role: "judge_analysis",
|
|
@@ -149,7 +164,7 @@ export async function runFusion(input) {
|
|
|
149
164
|
}
|
|
150
165
|
report(2, 3, "Analysis complete; synthesizing…");
|
|
151
166
|
// --- Judge step 2: synthesis ---
|
|
152
|
-
const synth = await runSynthesis(judgeModel, input.prompt, candidateViews, analysis.value, judgeApiKey, judgeTimeoutMs);
|
|
167
|
+
const synth = await runSynthesis(judgeModel, input.prompt, candidateViews, analysis.value, judgeApiKey, judgeTimeoutMs, personaPrompts.synthesis);
|
|
153
168
|
recordSubCall(input.db, {
|
|
154
169
|
activity_id: activityId,
|
|
155
170
|
role: "judge_synthesis",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusion.js","sourceRoot":"","sources":["../../src/fusion/fusion.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,gDAAgD;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiB,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"fusion.js","sourceRoot":"","sources":["../../src/fusion/fusion.ts"],"names":[],"mappings":"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"}
|
package/dist/fusion/judge.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { Type } from "@earendil-works/pi-ai";
|
|
5
5
|
import { runComplete, extractText, extractToolCall, totalCost } from "../providers/pi-ai-bridge.js";
|
|
6
6
|
import { withRetryTimeout } from "../util/timeout.js";
|
|
7
|
-
import { ANALYSIS_PROMPT, SYNTHESIS_PROMPT } from "./prompts.js";
|
|
8
7
|
/** The forced tool the analysis step MUST call to emit its structured output. */
|
|
9
8
|
export const analysisTool = {
|
|
10
9
|
name: "record_analysis",
|
|
@@ -18,9 +17,9 @@ export const analysisTool = {
|
|
|
18
17
|
}),
|
|
19
18
|
};
|
|
20
19
|
/** Step 1: analysis. Forces the record_analysis tool call. */
|
|
21
|
-
export async function runAnalysis(model, prompt, candidates, apiKey, timeoutMs) {
|
|
20
|
+
export async function runAnalysis(model, prompt, candidates, apiKey, timeoutMs, analysisPrompt) {
|
|
22
21
|
const ctx = {
|
|
23
|
-
systemPrompt:
|
|
22
|
+
systemPrompt: analysisPrompt,
|
|
24
23
|
messages: [{ role: "user", content: analysisUserContent(prompt, candidates), timestamp: Date.now() }],
|
|
25
24
|
tools: [analysisTool],
|
|
26
25
|
};
|
|
@@ -53,9 +52,9 @@ export async function runAnalysis(model, prompt, candidates, apiKey, timeoutMs)
|
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
/** Step 2: synthesis. Writes the final answer from candidates + analysis only. */
|
|
56
|
-
export async function runSynthesis(model, prompt, candidates, analysis, apiKey, timeoutMs) {
|
|
55
|
+
export async function runSynthesis(model, prompt, candidates, analysis, apiKey, timeoutMs, synthesisPrompt) {
|
|
57
56
|
const ctx = {
|
|
58
|
-
systemPrompt:
|
|
57
|
+
systemPrompt: synthesisPrompt,
|
|
59
58
|
messages: [{ role: "user", content: synthesisUserContent(prompt, candidates, analysis), timestamp: Date.now() }],
|
|
60
59
|
};
|
|
61
60
|
const startedAt = Date.now();
|
package/dist/fusion/judge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/fusion/judge.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4DAA4D;AAC5D,2DAA2D;AAC3D,OAAO,EAAE,IAAI,EAA2B,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/fusion/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Personas: named bundles of the three system prompts (worker + analysis + synthesis).
|
|
2
|
+
// Ships with 4 specialized defaults; users edit/add in the Personas tab and pick an
|
|
3
|
+
// active one per fusion. See specs / contracts for the data model.
|
|
4
|
+
export const DEFAULT_PERSONA_ID = "generalist";
|
|
5
|
+
/** The shipped defaults. The UI resets a builtin to these on demand. */
|
|
6
|
+
export const BUILTIN_PERSONAS = [
|
|
7
|
+
{
|
|
8
|
+
id: "generalist",
|
|
9
|
+
name: "Generalist",
|
|
10
|
+
description: "Balanced all-rounder. Good default for most multi-perspective questions.",
|
|
11
|
+
builtin: true,
|
|
12
|
+
workerPrompt: `You are an independent candidate model in a fusion panel. You are one of several models answering the same prompt in parallel; your answer will later be combined with the others by a judge.
|
|
13
|
+
|
|
14
|
+
Answer the user's prompt directly, completely, and to the best of your ability. Show your reasoning briefly so the judge can weigh it. Do not refer to other models, the fusion process, or how your answer will be used. Do not call any tools — simply produce your best standalone answer.`,
|
|
15
|
+
analysisPrompt: `You are the ANALYSIS step of a fusion judge. You will receive a user's prompt followed by several candidate answers produced independently by different models.
|
|
16
|
+
|
|
17
|
+
Your job is to ANALYZE the candidates — NOT to answer the prompt yourself. You must call the provided "record_analysis" tool exactly once with your structured analysis. The analysis must capture:
|
|
18
|
+
|
|
19
|
+
- consensus: points where the candidates substantially agree
|
|
20
|
+
- contradictions: points where candidates disagree or conflict
|
|
21
|
+
- partialCoverage: aspects of the prompt that only some candidates addressed
|
|
22
|
+
- uniqueInsights: valuable points raised by only one or a few candidates
|
|
23
|
+
- blindSpots: important aspects of the prompt that no candidate addressed well
|
|
24
|
+
|
|
25
|
+
Be precise and concrete; cite specific candidates by their index (Candidate 1, 2, ...) where relevant. Do NOT write a free-text answer — use the tool.`,
|
|
26
|
+
synthesisPrompt: `You are the SYNTHESIS step of a fusion judge. You will receive a user's prompt, the candidate answers, and a structured analysis (consensus, contradictions, partial coverage, unique insights, blind spots) produced in the prior step.
|
|
27
|
+
|
|
28
|
+
Write the single best consolidated answer to the user's prompt. Your answer must:
|
|
29
|
+
|
|
30
|
+
- Reflect and integrate the candidates, prioritizing consensus points.
|
|
31
|
+
- Reconcile contradictions, explaining the resolution when it matters.
|
|
32
|
+
- Where the candidates are wrong, say so and correct it — do not rubber-stamp consensus.
|
|
33
|
+
- Incorporate unique insights and address blind spots identified in the analysis.
|
|
34
|
+
- Introduce NO new external information that was not present in the candidates or analysis. You are synthesizing, not researching.
|
|
35
|
+
|
|
36
|
+
Return only the final answer text (no preamble about the process).`,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "qa",
|
|
40
|
+
name: "QA / Code Reviewer",
|
|
41
|
+
description: "Candidates critique like senior reviewers; judge consolidates a verdict with severities.",
|
|
42
|
+
builtin: true,
|
|
43
|
+
workerPrompt: `You are a meticulous senior code reviewer acting as an independent candidate in a fusion panel. Your job is to find real problems — correctness bugs, edge cases, security issues, concurrency races, and risky assumptions — not to praise.
|
|
44
|
+
|
|
45
|
+
Review the provided code/diff against its stated requirements and constraints. For each issue: state what's wrong, why it matters, the severity (blocker / major / minor / nit), and a concrete fix. Be specific (file:line). If you find nothing of note in an area, say so briefly. Do not call any tools.`,
|
|
46
|
+
analysisPrompt: `You are the ANALYSIS step of a fusion judge reviewing several independent code reviews. You must call the "record_analysis" tool exactly once; do not write a free-text answer. Capture:
|
|
47
|
+
|
|
48
|
+
- consensus: defects every reviewer flagged (likely real)
|
|
49
|
+
- contradictions: disagreements (e.g. one calls it a blocker, another a non-issue) — note who's right and why
|
|
50
|
+
- partialCoverage: code paths/requirements only some reviewers checked
|
|
51
|
+
- uniqueInsights: issues only one reviewer caught
|
|
52
|
+
- blindSpots: important areas (auth, error handling, perf) no reviewer addressed
|
|
53
|
+
|
|
54
|
+
Cite reviewers by index (Reviewer 1, 2, ...). Prioritize correctness and security over style.`,
|
|
55
|
+
synthesisPrompt: `You are the SYNTHESIS step of a fusion judge consolidating several code reviews into one verdict. Write a single prioritized report:
|
|
56
|
+
|
|
57
|
+
Lead with BLOCKERS, then MAJOR, then MINOR/NIT. For each issue: what, why, severity, and the fix. Reconcile contradictions from the analysis (state the resolution). Drop duplicates and praise. Do not invent issues none of the reviewers raised. End with a one-line verdict (ship / fix-blockers-first / needs-rework).`,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "researcher",
|
|
61
|
+
name: "Researcher",
|
|
62
|
+
description: "Candidates argue from the gathered sources; judge reconciles into one well-reasoned answer.",
|
|
63
|
+
builtin: true,
|
|
64
|
+
workerPrompt: `You are an independent researcher acting as a candidate in a fusion panel. You are given a question and a body of gathered material (sources, notes, snippets) in the context.
|
|
65
|
+
|
|
66
|
+
Reason from that material to answer the question. Cite which part of the material supports each claim. Where the material conflicts or is silent, say so explicitly rather than guessing. Distinguish what the evidence supports from your own inference. Do not call any tools or claim sources you weren't given.`,
|
|
67
|
+
analysisPrompt: `You are the ANALYSIS step of a fusion judge reconciling several research answers. Call the "record_analysis" tool exactly once; do not write free text. Capture:
|
|
68
|
+
|
|
69
|
+
- consensus: claims well-supported across answers
|
|
70
|
+
- contradictions: where answers disagree, including conflicting source readings — assess which is better supported
|
|
71
|
+
- partialCoverage: sources/questions only some answers used
|
|
72
|
+
- uniqueInsights: evidence or angles only one answer surfaced
|
|
73
|
+
- blindSpots: parts of the question no answer addressed, and any unverified claims
|
|
74
|
+
|
|
75
|
+
Cite answers by index (Answer 1, 2, ...). Flag anything presented as fact that lacks support.`,
|
|
76
|
+
synthesisPrompt: `You are the SYNTHESIS step of a fusion judge writing the final research answer. Produce one well-reasoned response that:
|
|
77
|
+
|
|
78
|
+
Weighs the evidence per the analysis; resolves conflicts by pointing to the stronger support; incorporates unique insights; covers the blind spots honestly (noting where evidence is thin). Do not introduce facts not present in the candidates or material. Mark remaining uncertainty explicitly rather than papering over it.`,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: "pm",
|
|
82
|
+
name: "Project Manager / Strategist",
|
|
83
|
+
description: "Candidates weigh trade-offs and risks; judge consolidates a recommendation with a clear rationale.",
|
|
84
|
+
builtin: true,
|
|
85
|
+
workerPrompt: `You are a pragmatic senior strategist acting as a candidate in a fusion panel. You weigh trade-offs, risks, and sequencing — not just technical correctness.
|
|
86
|
+
|
|
87
|
+
Given the decision/options and constraints, lay out the key trade-offs, the riskiest assumptions, and a recommended path with rationale. Consider cost, timeline, reversibility, and team reality — not only the technically optimal choice. State what would change your mind. Be decisive; do not call any tools.`,
|
|
88
|
+
analysisPrompt: `You are the ANALYSIS step of a fusion judge reconciling several strategic takes. Call the "record_analysis" tool exactly once; do not write free text. Capture:
|
|
89
|
+
|
|
90
|
+
- consensus: trade-offs/risks every take agreed on
|
|
91
|
+
- contradictions: where takes diverge on the recommendation or risk weighting — identify the crux that drives the disagreement
|
|
92
|
+
- partialCoverage: stakeholders, constraints, or options only some considered
|
|
93
|
+
- uniqueInsights: angles or risks only one surfaced
|
|
94
|
+
- blindSpots: obvious alternatives or second-order effects no one raised
|
|
95
|
+
|
|
96
|
+
Cite takes by index (Take 1, 2, ...). Focus on what distinguishes the recommendations.`,
|
|
97
|
+
synthesisPrompt: `You are the SYNTHESIS step of a fusion judge writing the final recommendation. Produce one decisive answer that:
|
|
98
|
+
|
|
99
|
+
States the recommendation up front, then the rationale tied to the consensus trade-offs. Resolve contradictions by pointing to the crux from the analysis. Incorporate the unique risks/insights; surface any blind-spot alternative worth a sanity check. Note what would change the recommendation. Do not invent constraints or facts not in the candidates.`,
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
/** Look up a builtin by id (for resets). */
|
|
103
|
+
export function getBuiltin(id) {
|
|
104
|
+
return BUILTIN_PERSONAS.find((p) => p.id === id);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Resolve the persona to use for a fusion, given an optional per-call override,
|
|
108
|
+
* the stored personas, and the active-persona id. Falls back gracefully:
|
|
109
|
+
* override (by id or name) -> activePersona -> generalist -> first available.
|
|
110
|
+
* Never throws — a missing persona always degrades to a real prompt set.
|
|
111
|
+
*/
|
|
112
|
+
export function resolvePersona(args) {
|
|
113
|
+
const { override, personas, activeId } = args;
|
|
114
|
+
const byIdOrName = (key) => key ? personas.find((p) => p.id === key || p.name.toLowerCase() === key.toLowerCase()) : undefined;
|
|
115
|
+
return (byIdOrName(override) ??
|
|
116
|
+
byIdOrName(activeId) ??
|
|
117
|
+
byIdOrName(DEFAULT_PERSONA_ID) ??
|
|
118
|
+
personas[0] ??
|
|
119
|
+
getBuiltin(DEFAULT_PERSONA_ID));
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=personas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/fusion/personas.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,oFAAoF;AACpF,mEAAmE;AAanE,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE/C,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,0EAA0E;QACvF,OAAO,EAAE,IAAI;QACb,YAAY,EAAE;;8RAE4Q;QAC1R,cAAc,EAAE;;;;;;;;;;uJAUmI;QACnJ,eAAe,EAAE;;;;;;;;;;mEAU8C;KAChE;IACD;QACE,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,0FAA0F;QACvG,OAAO,EAAE,IAAI;QACb,YAAY,EAAE;;6SAE2R;QACzS,cAAc,EAAE;;;;;;;;8FAQ0E;QAC1F,eAAe,EAAE;;4TAEuS;KACzT;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,6FAA6F;QAC1G,OAAO,EAAE,IAAI;QACb,YAAY,EAAE;;oTAEkS;QAChT,cAAc,EAAE;;;;;;;;8FAQ0E;QAC1F,eAAe,EAAE;;mUAE8S;KAChU;IACD;QACE,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,oGAAoG;QACjH,OAAO,EAAE,IAAI;QACb,YAAY,EAAE;;oTAEkS;QAChT,cAAc,EAAE;;;;;;;;uFAQmE;QACnF,eAAe,EAAE;;gWAE2U;KAC7V;CACF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAI9B;IACC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,UAAU,GAAG,CAAC,GAAuB,EAAE,EAAE,CAC7C,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC;QACpB,UAAU,CAAC,QAAQ,CAAC;QACpB,UAAU,CAAC,kBAAkB,CAAC;QAC9B,QAAQ,CAAC,CAAC,CAAC;QACX,UAAU,CAAC,kBAAkB,CAAE,CAChC,CAAC;AACJ,CAAC"}
|
package/dist/fusion/worker.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Worker: a single-shot candidate generation. No tools (Constitution I).
|
|
2
2
|
import { runComplete, extractText, totalCost } from "../providers/pi-ai-bridge.js";
|
|
3
3
|
import { withRetryTimeout, TimeoutError } from "../util/timeout.js";
|
|
4
|
-
import { WORKER_PROMPT } from "./prompts.js";
|
|
5
4
|
/** Run one candidate. Returns a structured result; never throws (errors -> status error/timeout). */
|
|
6
5
|
export async function runWorker(input) {
|
|
7
6
|
const startedAt = Date.now();
|
|
@@ -22,7 +21,7 @@ export async function runWorker(input) {
|
|
|
22
21
|
}
|
|
23
22
|
// Retry on failure (timeout OR error), resetting the timeout each attempt.
|
|
24
23
|
const msg = await withRetryTimeout(() => runComplete(input.model, {
|
|
25
|
-
systemPrompt:
|
|
24
|
+
systemPrompt: input.workerPrompt,
|
|
26
25
|
messages: [{ role: "user", content: userContent, timestamp: startedAt }],
|
|
27
26
|
}, input.apiKey), { timeoutMs: input.timeoutMs, label: `worker ${input.slotId}`, attempts: 3 });
|
|
28
27
|
const text = extractText(msg);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/fusion/worker.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/fusion/worker.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA2BpE,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAkB;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,OAAO;QACpB,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,OAAO;KAChB,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO;QAC/B,CAAC,CAAC,wBAAwB,KAAK,CAAC,OAAO,uBAAuB,KAAK,CAAC,MAAM,EAAE;QAC5E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACjB,MAAM,MAAM,GAAG,CAAC,CAAwB,EAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAElH,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,2BAA2B,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,2EAA2E;QAC3E,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,GAAG,EAAE,CACH,WAAW,CAAC,KAAK,CAAC,KAAM,EAAE;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;SACzE,EAAE,KAAK,CAAC,MAAM,CAAC,EAClB,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAC7E,CAAC;QACF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;YACZ,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;gBACtB,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM;gBACxB,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;aAC3B;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|