@zhixuan92/multi-model-agent 3.3.0 → 3.5.0
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 +76 -33
- package/dist/http/canonicalize-file-paths.d.ts +8 -0
- package/dist/http/canonicalize-file-paths.d.ts.map +1 -0
- package/dist/http/canonicalize-file-paths.js +43 -0
- package/dist/http/canonicalize-file-paths.js.map +1 -0
- package/dist/http/execution-context.d.ts.map +1 -1
- package/dist/http/execution-context.js +0 -14
- package/dist/http/execution-context.js.map +1 -1
- package/dist/http/handlers/tools/execute-plan.d.ts.map +1 -1
- package/dist/http/handlers/tools/execute-plan.js +21 -3
- package/dist/http/handlers/tools/execute-plan.js.map +1 -1
- package/dist/http/handlers/tools/investigate.d.ts +4 -0
- package/dist/http/handlers/tools/investigate.d.ts.map +1 -0
- package/dist/http/handlers/tools/investigate.js +81 -0
- package/dist/http/handlers/tools/investigate.js.map +1 -0
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +5 -2
- package/dist/http/server.js.map +1 -1
- package/dist/install/discover.d.ts +1 -1
- package/dist/install/discover.d.ts.map +1 -1
- package/dist/install/discover.js +1 -0
- package/dist/install/discover.js.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +6 -0
- package/dist/openapi.js.map +1 -1
- package/dist/skills/_shared/verify-and-review.md +12 -0
- package/dist/skills/mma-audit/SKILL.md +45 -18
- package/dist/skills/mma-clarifications/SKILL.md +73 -29
- package/dist/skills/mma-context-blocks/SKILL.md +56 -24
- package/dist/skills/mma-debug/SKILL.md +54 -22
- package/dist/skills/mma-delegate/SKILL.md +58 -26
- package/dist/skills/mma-execute-plan/SKILL.md +55 -29
- package/dist/skills/mma-investigate/SKILL.md +137 -0
- package/dist/skills/mma-retry/SKILL.md +65 -22
- package/dist/skills/mma-review/SKILL.md +49 -20
- package/dist/skills/mma-verify/SKILL.md +49 -18
- package/dist/skills/multi-model-agent/SKILL.md +84 -46
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -12,36 +12,34 @@ Local HTTP service for delegating tool-using work to sub-agents on different LLM
|
|
|
12
12
|
- **Structural quality.** Implementation and review run on different agents — different training data, different blind spots. Cross-agent review catches what self-review can't.
|
|
13
13
|
- **Client-agnostic.** One daemon serves Claude Code, Gemini CLI, Codex CLI, and Cursor via installable skills. The daemon outlives any individual client session.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
---
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
npm i -g @zhixuan92/multi-model-agent
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Requires Node >= 22.
|
|
22
|
-
|
|
23
|
-
## Run
|
|
17
|
+
## Quick start
|
|
24
18
|
|
|
25
19
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
# 1. install
|
|
21
|
+
npm i -g @zhixuan92/multi-model-agent # requires Node ≥ 22
|
|
28
22
|
|
|
29
|
-
|
|
23
|
+
# 2. write a config (~/.multi-model/config.json) — see Configuration below
|
|
30
24
|
|
|
31
|
-
|
|
25
|
+
# 3. start the daemon
|
|
26
|
+
mmagent serve # 127.0.0.1:7337 by default
|
|
32
27
|
|
|
33
|
-
|
|
34
|
-
mmagent install-skill
|
|
35
|
-
mmagent install-skill --target=claude-code
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
# 4. install skills for your AI client (auto-detect or pick a target)
|
|
29
|
+
mmagent install-skill # all detected clients
|
|
30
|
+
mmagent install-skill --target=claude-code # or gemini / codex / cursor
|
|
31
|
+
|
|
32
|
+
# 5. verify
|
|
33
|
+
curl -s http://localhost:7337/health # → {"ok":true,"version":"3.4.0",...}
|
|
38
34
|
```
|
|
39
35
|
|
|
40
|
-
Skills are thin adapters that point
|
|
36
|
+
Skills are thin adapters that point your AI client at the running daemon. Once installed, the client has the full tool set with no further setup.
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
For a long-running background install, use a user service ([macOS launchd / Linux systemd templates](./scripts/README.md)).
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
## Configuration
|
|
41
|
+
|
|
42
|
+
Config file: `~/.multi-model/config.json`. Lookup order: `--config <path>` → `$MMAGENT_CONFIG` → `<cwd>/.multi-model-agent.json` → `~/.multi-model/config.json`.
|
|
45
43
|
|
|
46
44
|
```json
|
|
47
45
|
{
|
|
@@ -64,13 +62,11 @@ Config file: `~/.multi-model/config.json`
|
|
|
64
62
|
|
|
65
63
|
Agent types: `claude`, `codex`, `openai-compatible`. Any OpenAI-compatible endpoint works (MiniMax, DeepSeek, Groq, Together, local vLLM) — set `baseUrl` and either `apiKey` or `apiKeyEnv`.
|
|
66
64
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
The auth token is generated on first `mmagent serve`. Retrieve it with `mmagent print-token`, or set `MMAGENT_AUTH_TOKEN` in your environment to override the file.
|
|
65
|
+
The auth token is generated on first `mmagent serve`. Retrieve it with `mmagent print-token`, or set `MMAGENT_AUTH_TOKEN` to override the file.
|
|
70
66
|
|
|
71
67
|
## REST API
|
|
72
68
|
|
|
73
|
-
|
|
69
|
+
15 endpoints. All tool endpoints are async: they return `202 { batchId, statusUrl }` immediately and the executor runs in the background. Poll `GET /batch/:id` for the terminal envelope.
|
|
74
70
|
|
|
75
71
|
| Endpoint | Purpose |
|
|
76
72
|
|---|---|
|
|
@@ -81,6 +77,7 @@ The daemon exposes 14 public endpoints. All tool endpoints are async: they retur
|
|
|
81
77
|
| `POST /debug?cwd=<abs>` | Debug a failure with a hypothesis |
|
|
82
78
|
| `POST /execute-plan?cwd=<abs>` | Implement from a plan file |
|
|
83
79
|
| `POST /retry?cwd=<abs>` | Re-run specific tasks from a previous batch |
|
|
80
|
+
| `POST /investigate?cwd=<abs>` | Codebase Q&A — structured answer with file:line citations + confidence |
|
|
84
81
|
| `GET /batch/:id[?taskIndex=N]` | Poll a batch: `202 text/plain` (pending; body is the running headline) or `200 application/json` (terminal; uniform 7-field envelope). `?taskIndex=N` slices on complete state. |
|
|
85
82
|
| `POST /context-blocks?cwd=<abs>` | Register a reusable context block |
|
|
86
83
|
| `DELETE /context-blocks/:id?cwd=<abs>` | Delete a context block |
|
|
@@ -91,17 +88,30 @@ The daemon exposes 14 public endpoints. All tool endpoints are async: they retur
|
|
|
91
88
|
|
|
92
89
|
All tool endpoints require bearer auth: `Authorization: Bearer <token>`.
|
|
93
90
|
|
|
91
|
+
## What's new in 3.5.0
|
|
92
|
+
|
|
93
|
+
**Breaking changes (operators read this first):**
|
|
94
|
+
- `task.maxReviewRounds` is gone — review caps now derive from policy tables (`maxReworksFor('spec') = 2`, `maxReworksFor('quality') = 2`). Remove the field from any callers.
|
|
95
|
+
- `agentType` is gone from `/execute-plan` (top-level + per-task). The compiler hardcodes `agentType: 'standard'`. `/delegate` is unchanged and still accepts the field.
|
|
96
|
+
- Status-level escalation inside `delegateWithEscalation` is removed. Transport failures now flow through the new `runWithFallback` wrapper in `reviewed-lifecycle.ts`.
|
|
97
|
+
|
|
98
|
+
**New behavior:**
|
|
99
|
+
- **Tier-escalating rework.** For standard-tier tasks, the implementation tier escalates to complex on the final rework attempt; reviewers swap to keep impl ≠ reviewer.
|
|
100
|
+
- **Runtime tier fallback.** Transport failures (`api_error` / `network_error` / `timeout`) or missing configuration trigger automatic substitution of the other tier. Fallback is sticky per loop.
|
|
101
|
+
- **Single-slot operators** receive reviews on the same tier (`violatesSeparation: true`); set `reviewPolicy: 'off'` to opt out.
|
|
102
|
+
- **Four new diagnostic events** — `escalation`, `escalation_unavailable`, `fallback`, `fallback_unavailable` — emitted via the verbose stderr stream and JSONL log.
|
|
103
|
+
- **New `agents.*History` and `agents.fallbackOverrides`** envelope fields surface tier movement; the headline composer adds `(escalated to complex; fallback fired)` style suffixes.
|
|
104
|
+
|
|
94
105
|
## Operator commands
|
|
95
106
|
|
|
96
107
|
```bash
|
|
97
|
-
mmagent serve [--verbose] [--log]
|
|
98
|
-
mmagent info
|
|
99
|
-
mmagent status [--json]
|
|
100
|
-
mmagent logs
|
|
101
|
-
mmagent print-token
|
|
102
|
-
mmagent install-skill
|
|
103
|
-
mmagent
|
|
104
|
-
mmagent update-skills [--dry-run] [--json] # refresh installed skills from the shipped bundle
|
|
108
|
+
mmagent serve [--verbose] [--log] # start daemon (--verbose → stderr events; --log → JSONL to ~/.multi-model/logs/)
|
|
109
|
+
mmagent info [--json] # cliVersion, bind/port, token fingerprint, daemon identity (offline)
|
|
110
|
+
mmagent status [--json] # health + stats from a running daemon
|
|
111
|
+
mmagent logs [--follow] [--batch=<id>] # tail today's diagnostic log
|
|
112
|
+
mmagent print-token # print the current auth token
|
|
113
|
+
mmagent install-skill [--target=<client>] [--all-targets] [--uninstall] # default installs all shipped skills
|
|
114
|
+
mmagent update-skills [--dry-run] [--json] # refresh installed skills after upgrade
|
|
105
115
|
```
|
|
106
116
|
|
|
107
117
|
## Shipped skills
|
|
@@ -110,7 +120,7 @@ Skills are Markdown prompts that tell your AI client when and how to call each e
|
|
|
110
120
|
|
|
111
121
|
| Skill | Target endpoint |
|
|
112
122
|
|---|---|
|
|
113
|
-
| `multi-model-agent` | Overview + skill map |
|
|
123
|
+
| `multi-model-agent` | Overview + skill map (read first to pick the right `mma-*` skill) |
|
|
114
124
|
| `mma-delegate` | `POST /delegate` |
|
|
115
125
|
| `mma-audit` | `POST /audit` |
|
|
116
126
|
| `mma-review` | `POST /review` |
|
|
@@ -118,9 +128,42 @@ Skills are Markdown prompts that tell your AI client when and how to call each e
|
|
|
118
128
|
| `mma-debug` | `POST /debug` |
|
|
119
129
|
| `mma-execute-plan` | `POST /execute-plan` |
|
|
120
130
|
| `mma-retry` | `POST /retry` |
|
|
131
|
+
| `mma-investigate` | `POST /investigate` |
|
|
121
132
|
| `mma-context-blocks` | `POST/DELETE /context-blocks` |
|
|
122
133
|
| `mma-clarifications` | `POST /clarifications/confirm` |
|
|
123
134
|
|
|
135
|
+
## Operations
|
|
136
|
+
|
|
137
|
+
### Upgrading
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npm install -g @zhixuan92/multi-model-agent@latest
|
|
141
|
+
pkill -f "mmagent serve" # stop the running daemon
|
|
142
|
+
mmagent update-skills # refresh installed skills
|
|
143
|
+
# next AI-client session respawns the daemon via the skill preflight
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
A drift warning prints on `mmagent serve` if installed skills are older than the daemon.
|
|
147
|
+
|
|
148
|
+
### Verbose mode
|
|
149
|
+
|
|
150
|
+
Enable per-run via `mmagent serve --verbose --log`, or persist in config:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{ "diagnostics": { "log": true, "verbose": true } }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
JSONL goes to `~/.multi-model/logs/mmagent-<date>.jsonl`. Large request bodies (over 16 KB UTF-8) spill to `~/.multi-model/logs/requests/<batchId>.json`. **Note:** request bodies may include prompts and file paths — disable `verbose` for production servers handling sensitive data.
|
|
157
|
+
|
|
158
|
+
### Troubleshooting
|
|
159
|
+
|
|
160
|
+
| Symptom | Fix |
|
|
161
|
+
|---|---|
|
|
162
|
+
| Port 7337 already in use | `lsof -nP -i :7337` → kill the stale process |
|
|
163
|
+
| Daemon stale after upgrade | `pkill -f "mmagent serve"`; preflight respawns |
|
|
164
|
+
| Skill version mismatch | `mmagent update-skills` and restart your client |
|
|
165
|
+
| `401 unauthorized` from a skill | `export MMAGENT_AUTH_TOKEN=$(mmagent print-token)` |
|
|
166
|
+
|
|
124
167
|
## Architecture at a glance
|
|
125
168
|
|
|
126
169
|
`mmagent serve` runs a loopback HTTP server. Each tool call dispatches to a labor agent (standard or complex), runs a cross-agent review cycle, and returns a structured report. Tasks run in parallel; each has a cost ceiling and wall-clock timeout.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type CanonicalizeResult = string[] | {
|
|
2
|
+
error: 'invalid_request';
|
|
3
|
+
fieldErrors: {
|
|
4
|
+
filePaths: string[];
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
export declare function canonicalizeFilePaths(rawPaths: string[], cwd: string): CanonicalizeResult;
|
|
8
|
+
//# sourceMappingURL=canonicalize-file-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonicalize-file-paths.d.ts","sourceRoot":"","sources":["../../src/http/canonicalize-file-paths.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAC1B,MAAM,EAAE,GACR;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEvE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAoCzF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { realpathSync, existsSync } from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
export function canonicalizeFilePaths(rawPaths, cwd) {
|
|
4
|
+
const realCwd = realpathSync(cwd);
|
|
5
|
+
const accepted = [];
|
|
6
|
+
const offenders = [];
|
|
7
|
+
for (const raw of rawPaths) {
|
|
8
|
+
const resolved = path.isAbsolute(raw) ? path.normalize(raw) : path.resolve(realCwd, raw);
|
|
9
|
+
let cursor = resolved;
|
|
10
|
+
while (!existsSync(cursor) && path.dirname(cursor) !== cursor) {
|
|
11
|
+
cursor = path.dirname(cursor);
|
|
12
|
+
}
|
|
13
|
+
let realAncestor;
|
|
14
|
+
try {
|
|
15
|
+
realAncestor = realpathSync(cursor);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
offenders.push(raw);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const suffix = path.relative(cursor, resolved);
|
|
22
|
+
const candidate = suffix ? path.normalize(path.join(realAncestor, suffix)) : realAncestor;
|
|
23
|
+
const rel = path.relative(realCwd, candidate);
|
|
24
|
+
const inside = rel === '' || (!rel.startsWith('..' + path.sep) && rel !== '..' && !path.isAbsolute(rel));
|
|
25
|
+
if (!inside) {
|
|
26
|
+
offenders.push(raw);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
accepted.push(candidate);
|
|
30
|
+
}
|
|
31
|
+
if (offenders.length > 0) {
|
|
32
|
+
return { error: 'invalid_request', fieldErrors: { filePaths: offenders } };
|
|
33
|
+
}
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const dedup = [];
|
|
36
|
+
for (const p of accepted)
|
|
37
|
+
if (!seen.has(p)) {
|
|
38
|
+
seen.add(p);
|
|
39
|
+
dedup.push(p);
|
|
40
|
+
}
|
|
41
|
+
return dedup;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=canonicalize-file-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonicalize-file-paths.js","sourceRoot":"","sources":["../../src/http/canonicalize-file-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC,MAAM,UAAU,qBAAqB,CAAC,QAAkB,EAAE,GAAW;IACnE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzF,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;YAC9D,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,YAAoB,CAAC;QACzB,IAAI,CAAC;YACH,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/http/execution-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,mCAAmC,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,GACd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/http/execution-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,mCAAmC,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,GACd,gBAAgB,CAsClB"}
|
|
@@ -36,20 +36,6 @@ export function buildExecutionContext(deps, pc, batchId) {
|
|
|
36
36
|
running: entry.running,
|
|
37
37
|
});
|
|
38
38
|
deps.batchRegistry.updateRunningHeadline(effectiveBatchId, headline);
|
|
39
|
-
deps.logger.taskHeartbeat({
|
|
40
|
-
batchId: effectiveBatchId,
|
|
41
|
-
taskIndex: 0,
|
|
42
|
-
elapsedMs: tick.elapsedMs,
|
|
43
|
-
stage: tick.stage,
|
|
44
|
-
});
|
|
45
|
-
if (tick.phaseChange !== undefined) {
|
|
46
|
-
deps.logger.taskPhaseChange({
|
|
47
|
-
batchId: effectiveBatchId,
|
|
48
|
-
taskIndex: 0,
|
|
49
|
-
fromStage: tick.phaseChange.from,
|
|
50
|
-
toStage: tick.phaseChange.to,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
39
|
};
|
|
54
40
|
return buildCoreExecutionContext({
|
|
55
41
|
projectContext: pc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/http/execution-context.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAE,MAAM,+DAA+D,CAAC;AAInI;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAiB,EACjB,EAAkB,EAClB,OAAe;IAEf,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAE,EAAE;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,6DAA6D;QAC7D,mEAAmE;QACnE,6DAA6D;QAC7D,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChF,kEAAkE;QAClE,kEAAkE;QAClE,mEAAmE;QACnE,iDAAiD;QACjD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,sBAAsB,CAAC;gBACrB,UAAU;gBACV,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;gBACrC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC;gBACzC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;gBACjB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACP,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/http/execution-context.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAE,MAAM,+DAA+D,CAAC;AAInI;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAiB,EACjB,EAAkB,EAClB,OAAe;IAEf,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAE,EAAE;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,6DAA6D;QAC7D,mEAAmE;QACnE,6DAA6D;QAC7D,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChF,kEAAkE;QAClE,kEAAkE;QAClE,mEAAmE;QACnE,iDAAiD;QACjD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,sBAAsB,CAAC;gBACrB,UAAU;gBACV,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;gBACrC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC;gBACzC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;gBACjB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACP,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC,CAAC;IAEF,OAAO,yBAAyB,CAAC;QAC/B,cAAc,EAAE,EAAE;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,iBAAiB,EAAE,EAAE,CAAC,aAAa;QACnC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC7C,OAAO;QACP,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAsDrE"}
|
|
@@ -7,9 +7,27 @@ export function buildExecutePlanHandler(deps) {
|
|
|
7
7
|
return async (_req, res, _params, ctx) => {
|
|
8
8
|
const parsed = executePlan.inputSchema.safeParse(ctx.body);
|
|
9
9
|
if (!parsed.success) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const fieldErrors = {};
|
|
11
|
+
for (const issue of parsed.error.issues) {
|
|
12
|
+
let path = issue.path.join('.');
|
|
13
|
+
if (path === '' && issue.message.includes('"agentType"')) {
|
|
14
|
+
path = 'agentType';
|
|
15
|
+
}
|
|
16
|
+
else if (path.startsWith('tasks.') && issue.message === 'Invalid input') {
|
|
17
|
+
const task = issue.path.reduce((value, segment) => {
|
|
18
|
+
if (value && typeof value === 'object')
|
|
19
|
+
return value[segment];
|
|
20
|
+
return undefined;
|
|
21
|
+
}, ctx.body);
|
|
22
|
+
if (task && typeof task === 'object' && 'agentType' in task) {
|
|
23
|
+
path = `${path}.agentType`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (!fieldErrors[path])
|
|
27
|
+
fieldErrors[path] = [];
|
|
28
|
+
fieldErrors[path].push(issue.message);
|
|
29
|
+
}
|
|
30
|
+
sendError(res, 400, 'invalid_request', 'Request body validation failed', { fieldErrors });
|
|
13
31
|
return;
|
|
14
32
|
}
|
|
15
33
|
const input = parsed.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,WAAW,MAAM,6DAA6D,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,MAAM,UAAU,uBAAuB,CAAC,IAAiB;IACvD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAE,OAA+B,EAAE,GAAG,EAAE,EAAE;QAChG,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,
|
|
1
|
+
{"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investigate.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CA2ErE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// packages/server/src/http/handlers/tools/investigate.ts
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { realpathSync } from 'node:fs';
|
|
4
|
+
import * as investigate from '@zhixuan92/multi-model-agent-core/tool-schemas/investigate';
|
|
5
|
+
import { executeInvestigate } from '@zhixuan92/multi-model-agent-core/executors/investigate';
|
|
6
|
+
import { sendError, sendJson } from '../../errors.js';
|
|
7
|
+
import { asyncDispatch } from '../../async-dispatch.js';
|
|
8
|
+
import { emitRequestReceived } from '../../request-observability.js';
|
|
9
|
+
import { canonicalizeFilePaths } from '../../canonicalize-file-paths.js';
|
|
10
|
+
export function buildInvestigateHandler(deps) {
|
|
11
|
+
return async (req, res, _params, ctx) => {
|
|
12
|
+
// Step 1: schema.
|
|
13
|
+
const parsed = investigate.inputSchema.safeParse(ctx.body);
|
|
14
|
+
if (!parsed.success) {
|
|
15
|
+
sendError(res, 400, 'invalid_request', 'Request body validation failed', {
|
|
16
|
+
fieldErrors: parsed.error.flatten(),
|
|
17
|
+
});
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const input = parsed.data;
|
|
21
|
+
const cwd = ctx.cwd;
|
|
22
|
+
// Step 2: reservation lifecycle (mirrors audit.ts; reservation is just a cwd-validity gate).
|
|
23
|
+
const reserveResult = deps.projectRegistry.reserveProject(cwd);
|
|
24
|
+
if (!reserveResult.ok) {
|
|
25
|
+
sendError(res, 503, reserveResult.error, reserveResult.message);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const pc = reserveResult.projectContext;
|
|
29
|
+
pc.lastActivityAt = Date.now();
|
|
30
|
+
deps.projectRegistry.cancelReservation(cwd);
|
|
31
|
+
// Step 3: synchronously resolve context blocks.
|
|
32
|
+
const blockIds = input.contextBlockIds ?? [];
|
|
33
|
+
const resolvedContextBlocks = [];
|
|
34
|
+
const missingBlocks = [];
|
|
35
|
+
for (const id of blockIds) {
|
|
36
|
+
const content = pc.contextBlocks.get(id);
|
|
37
|
+
if (content === undefined) {
|
|
38
|
+
missingBlocks.push(id);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
resolvedContextBlocks.push({ id, content });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (missingBlocks.length > 0) {
|
|
45
|
+
sendError(res, 400, 'context_block_not_found', 'one or more context block IDs do not exist', { missingBlocks });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Step 4: synchronously canonicalize filePaths.
|
|
49
|
+
const rawPaths = input.filePaths ?? [];
|
|
50
|
+
const canonResult = canonicalizeFilePaths(rawPaths, cwd);
|
|
51
|
+
if (!Array.isArray(canonResult)) {
|
|
52
|
+
sendError(res, 400, 'invalid_request', 'one or more filePaths escape cwd', { fieldErrors: canonResult.fieldErrors });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const canonicalizedFilePaths = canonResult;
|
|
56
|
+
// Step 5: precompute relative-for-prompt paths so the compiler stays pure.
|
|
57
|
+
const realCwd = realpathSync(cwd);
|
|
58
|
+
const relativeFilePathsForPrompt = canonicalizedFilePaths.map(p => {
|
|
59
|
+
const rel = path.relative(realCwd, p);
|
|
60
|
+
return rel === '' ? '.' : rel;
|
|
61
|
+
});
|
|
62
|
+
// Step 6: dispatch.
|
|
63
|
+
const { batchId, statusUrl } = asyncDispatch({
|
|
64
|
+
tool: 'investigate',
|
|
65
|
+
projectCwd: cwd,
|
|
66
|
+
blockIds,
|
|
67
|
+
batchRegistry: deps.batchRegistry,
|
|
68
|
+
projectContext: pc,
|
|
69
|
+
deps,
|
|
70
|
+
executor: async (executionCtx) => executeInvestigate(executionCtx, {
|
|
71
|
+
input,
|
|
72
|
+
resolvedContextBlocks,
|
|
73
|
+
canonicalizedFilePaths,
|
|
74
|
+
relativeFilePathsForPrompt,
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
await emitRequestReceived({ config: deps.config, batchId, route: req.url ?? '', parsed: input });
|
|
78
|
+
sendJson(res, 202, { batchId, statusUrl });
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=investigate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investigate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,WAAW,MAAM,4DAA4D,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,UAAU,uBAAuB,CAAC,IAAiB;IACvD,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACvE,kBAAkB;QAClB,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,EAAE;gBACvE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;aACpC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAC;QAErB,6FAA6F;QAC7F,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;QACxC,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE5C,gDAAgD;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAC7C,MAAM,qBAAqB,GAA2C,EAAE,CAAC;QACzE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,yBAAyB,EAAE,4CAA4C,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAChH,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,kCAAkC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YACrH,OAAO;QACT,CAAC;QACD,MAAM,sBAAsB,GAAG,WAAW,CAAC;QAE3C,2EAA2E;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;YAC3C,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,GAAG;YACf,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE;YAClB,IAAI;YACJ,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,YAAY,EAAE;gBACjE,KAAK;gBACL,qBAAqB;gBACrB,sBAAsB;gBACtB,0BAA0B;aAC3B,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACjG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAkB7D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,6EAA6E;IAC7E,aAAa,EAAE,aAAa,CAAC;IAC7B,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAC;IACjC,kGAAkG;IAClG,eAAe,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAkB7D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,6EAA6E;IAC7E,aAAa,EAAE,aAAa,CAAC;IAC7B,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAC;IACjC,kGAAkG;IAClG,eAAe,EAAE,MAAM,CAAC;CACzB;AAsID,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA6E9E"}
|
package/dist/http/server.js
CHANGED
|
@@ -26,7 +26,7 @@ const LOOPBACK_ONLY_PATHS = new Set(['/health', '/status']);
|
|
|
26
26
|
const AUTH_EXEMPT_PATHS = new Set(['/health']);
|
|
27
27
|
/** Routes that require a `cwd` query parameter (validated by cwd-validator middleware). */
|
|
28
28
|
const CWD_REQUIRED_PATHS = new Set([
|
|
29
|
-
'/delegate', '/tools/delegate', '/audit', '/review', '/verify', '/debug', '/execute-plan', '/retry',
|
|
29
|
+
'/delegate', '/tools/delegate', '/audit', '/review', '/verify', '/debug', '/execute-plan', '/retry', '/investigate',
|
|
30
30
|
'/control/retry', '/control/batch-slice', '/context-blocks',
|
|
31
31
|
]);
|
|
32
32
|
/**
|
|
@@ -41,6 +41,7 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
|
|
|
41
41
|
const { buildDebugHandler } = await import('./handlers/tools/debug.js');
|
|
42
42
|
const { buildExecutePlanHandler } = await import('./handlers/tools/execute-plan.js');
|
|
43
43
|
const { buildRetryHandler } = await import('./handlers/tools/retry.js');
|
|
44
|
+
const { buildInvestigateHandler } = await import('./handlers/tools/investigate.js');
|
|
44
45
|
const { createDiagnosticLogger } = await import('@zhixuan92/multi-model-agent-core');
|
|
45
46
|
// For tool handlers, we need MultiModelConfig which is part of ServerConfig only
|
|
46
47
|
// when the full mmagent.config.json is loaded. In test/minimal configs that only
|
|
@@ -53,7 +54,7 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
|
|
|
53
54
|
// Server started with server-only config (e.g. tests): register stubs that return 503
|
|
54
55
|
for (const [method, path] of [
|
|
55
56
|
['POST', '/delegate'], ['POST', '/audit'], ['POST', '/review'],
|
|
56
|
-
['POST', '/verify'], ['POST', '/debug'], ['POST', '/execute-plan'], ['POST', '/retry'],
|
|
57
|
+
['POST', '/verify'], ['POST', '/debug'], ['POST', '/execute-plan'], ['POST', '/retry'], ['POST', '/investigate'],
|
|
57
58
|
]) {
|
|
58
59
|
router.register(method, path, (_req, res, _params, _ctx) => {
|
|
59
60
|
sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
|
|
@@ -78,6 +79,7 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
|
|
|
78
79
|
const debugHandler = buildDebugHandler(deps);
|
|
79
80
|
const executePlanHandler = buildExecutePlanHandler(deps);
|
|
80
81
|
const retryHandler = buildRetryHandler(deps);
|
|
82
|
+
const investigateHandler = buildInvestigateHandler(deps);
|
|
81
83
|
router.register('POST', '/delegate', delegateHandler);
|
|
82
84
|
router.register('POST', '/tools/delegate', delegateHandler);
|
|
83
85
|
router.register('POST', '/audit', auditHandler);
|
|
@@ -86,6 +88,7 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
|
|
|
86
88
|
router.register('POST', '/debug', debugHandler);
|
|
87
89
|
router.register('POST', '/execute-plan', executePlanHandler);
|
|
88
90
|
router.register('POST', '/retry', retryHandler);
|
|
91
|
+
router.register('POST', '/investigate', investigateHandler);
|
|
89
92
|
}
|
|
90
93
|
/**
|
|
91
94
|
* Registers control handlers (GET /batch/:batchId, POST/DELETE /context-blocks,
|
package/dist/http/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,gFAAgF;AAChF,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAe3C,mDAAmD;AACnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/C,2FAA2F;AAC3F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const SUPPORTED_SKILLS: readonly ["multi-model-agent", "mma-delegate", "mma-audit", "mma-review", "mma-verify", "mma-debug", "mma-execute-plan", "mma-retry", "mma-context-blocks", "mma-clarifications"];
|
|
1
|
+
export declare const SUPPORTED_SKILLS: readonly ["multi-model-agent", "mma-delegate", "mma-audit", "mma-review", "mma-verify", "mma-debug", "mma-execute-plan", "mma-retry", "mma-context-blocks", "mma-clarifications", "mma-investigate"];
|
|
2
2
|
/** Thrown when a skill's SKILL.md cannot be read from the bundled skills directory. */
|
|
3
3
|
export declare class SkillNotFoundError extends Error {
|
|
4
4
|
readonly code: "skill_not_found";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,sMAYnB,CAAC;AAEX,uFAAuF;AACvF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;gBAC/B,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOnD;AAQD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtF"}
|
package/dist/install/discover.js
CHANGED
|
@@ -14,6 +14,7 @@ export const SUPPORTED_SKILLS = [
|
|
|
14
14
|
'mma-retry',
|
|
15
15
|
'mma-context-blocks',
|
|
16
16
|
'mma-clarifications',
|
|
17
|
+
'mma-investigate',
|
|
17
18
|
];
|
|
18
19
|
/** Thrown when a skill's SKILL.md cannot be read from the bundled skills directory. */
|
|
19
20
|
export class SkillNotFoundError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+DAA+D;AAC/D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,cAAc;IACd,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,oBAAoB;IACpB,oBAAoB;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+DAA+D;AAC/D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,cAAc;IACd,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,oBAAoB;IACpB,oBAAoB;IACpB,iBAAiB;CACT,CAAC;AAEX,uFAAuF;AACvF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,iBAA0B,CAAC;IAC3C,YAAY,SAAiB,EAAE,WAAmB;QAChD,KAAK,CACH,UAAU,SAAS,eAAe;YAClC,YAAY,WAAW,IAAI;YAC3B,qBAAqB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnD,CAAC;IACJ,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CACtC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,QAAQ,CACT,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAmB;IAC/C,OAAO,UAAU,IAAI,mBAAmB,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAmB;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/openapi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAiDA,qEAAqE;AACrE,QAAA,MAAM,aAAa;;;;;;;;CAMlB,CAAC;AAoDF,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyIzD;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/openapi.js
CHANGED
|
@@ -14,6 +14,7 @@ import * as verify from '@zhixuan92/multi-model-agent-core/tool-schemas/verify';
|
|
|
14
14
|
import * as debug from '@zhixuan92/multi-model-agent-core/tool-schemas/debug';
|
|
15
15
|
import * as executePlan from '@zhixuan92/multi-model-agent-core/tool-schemas/execute-plan';
|
|
16
16
|
import * as retry from '@zhixuan92/multi-model-agent-core/tool-schemas/retry';
|
|
17
|
+
import * as investigate from '@zhixuan92/multi-model-agent-core/tool-schemas/investigate';
|
|
17
18
|
// Extend Zod once with openapi support.
|
|
18
19
|
extendZodWithOpenApi(z);
|
|
19
20
|
/** Sort an object's keys recursively for deterministic JSON serialization. */
|
|
@@ -64,6 +65,11 @@ const TOOL_ENDPOINTS = [
|
|
|
64
65
|
{ path: '/debug', summary: 'Debug a problem with sub-agent assistance', schema: debug.inputSchema },
|
|
65
66
|
{ path: '/execute-plan', summary: 'Execute tasks from a plan file', schema: executePlan.inputSchema },
|
|
66
67
|
{ path: '/retry', summary: 'Retry failed tasks from a previous batch', schema: retry.inputSchema },
|
|
68
|
+
{
|
|
69
|
+
path: '/investigate',
|
|
70
|
+
summary: 'Investigate the codebase and answer a question with structured citations',
|
|
71
|
+
schema: investigate.inputSchema,
|
|
72
|
+
},
|
|
67
73
|
];
|
|
68
74
|
function registerToolEndpoint(registry, row) {
|
|
69
75
|
registry.registerPath({
|
package/dist/openapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,6EAA6E;AAC7E,8CAA8C;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,yDAAyD,CAAC;AACpF,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,KAAK,MAAM,MAAM,uDAAuD,CAAC;AAChF,OAAO,KAAK,MAAM,MAAM,uDAAuD,CAAC;AAChF,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,KAAK,WAAW,MAAM,6DAA6D,CAAC;AAC3F,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,6EAA6E;AAC7E,8CAA8C;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,yDAAyD,CAAC;AACpF,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,KAAK,MAAM,MAAM,uDAAuD,CAAC;AAChF,OAAO,KAAK,MAAM,MAAM,uDAAuD,CAAC;AAChF,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,KAAK,WAAW,MAAM,6DAA6D,CAAC;AAC3F,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,KAAK,WAAW,MAAM,4DAA4D,CAAC;AAE1F,wCAAwC;AACxC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAExB,8EAA8E;AAC9E,SAAS,QAAQ,CAAC,GAAY;IAC5B,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oDAAoD;AACpD,MAAM,gBAAgB,GAAG;IACvB,WAAW,EAAE,0BAA0B;IACvC,OAAO,EAAE;QACP,kBAAkB,EAAE;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;gBAC3F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;aAClE,CAAC;SACH;KACF;CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,KAAK;IACX,EAAE,EAAE,OAAgB;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,gDAAgD;IAC7D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;CACpC,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;AAEvE,mCAAmC;AACnC,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC;AAEnF,mCAAmC;AACnC,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;AAE1D,2EAA2E;AAC3E,uEAAuE;AACvE,MAAM,cAAc,GAAmE;IACrF,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,8BAA8B,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE;IAC5F,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;IAClF,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,sCAAsC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;IAChG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iCAAiC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;IAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,2CAA2C,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;IACnG,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gCAAgC,EAAE,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE;IACrG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,0CAA0C,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;IAClG;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,0EAA0E;QACnF,MAAM,EAAE,WAAW,CAAC,WAAW;KAChC;CACF,CAAC;AAEF,SAAS,oBAAoB,CAC3B,QAAyB,EACzB,GAA4D;IAE5D,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,OAAO,EAAE;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC1E,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE;aACxD;SACF;QACD,SAAS,EAAE;YACT,GAAG,EAAE,gBAAgB;YACrB,GAAG,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE;YAChD,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IAEvC,+EAA+E;IAC/E,KAAK,MAAM,GAAG,IAAI,cAAc;QAAE,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEtE,+EAA+E;IAE/E,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;aACtF,CAAC;SACH;QACD,SAAS,EAAE;YACT,GAAG,EAAE,EAAE,WAAW,EAAE,8EAA8E,EAAE;YACpG,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC1E,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;4BACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;4BACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;yBAC9D,CAAC;qBACH;iBACF;aACF;SACF;QACD,SAAS,EAAE;YACT,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;YACrC,GAAG,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE;YAC7D,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,wBAAwB;QACjC,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;SAC3E;QACD,SAAS,EAAE;YACT,GAAG,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE;YAC7D,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,8EAA8E;QACvF,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,OAAO,EAAE;YACP,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;4BACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;4BACnB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;yBAC3B,CAAC;qBACH;iBACF;aACF;SACF;QACD,SAAS,EAAE;YACT,GAAG,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC9C,GAAG,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAC3C,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;IAEH,+EAA+E;IAE/E,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mCAAmC;QAC5C,IAAI,EAAE,CAAC,eAAe,CAAC;QACvB,SAAS,EAAE;YACT,GAAG,EAAE;gBACH,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;qBAC1C;iBACF;aACF;SACF;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,4CAA4C;QACrD,IAAI,EAAE,CAAC,eAAe,CAAC;QACvB,SAAS,EAAE;YACT,GAAG,EAAE,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACpD,GAAG,EAAE,WAAW;YAChB,GAAG,EAAE,WAAW;SACjB;KACF,CAAC,CAAC;IAEH,+EAA+E;IAE/E,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACrC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,OAAO;SACjB;KACF,CAAC,CAAC;IAEH,mEAAmE;IACnE,OAAO,QAAQ,CAAC,GAAG,CAA4B,CAAC;AAClD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,GAA4B;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|