@wjarka/cezarion 0.13.6 → 0.14.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 +27 -3
- package/dist/agent-config/catalog.d.ts +2 -0
- package/dist/agent-config/catalog.js +40 -2
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/models.js +4 -0
- package/dist/agent-config/models.js.map +1 -1
- package/dist/automations/types.d.ts +4 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/contract/agent-config.d.ts +2 -0
- package/dist/contract/agent-profiles.d.ts +15 -0
- package/dist/contract/automations.d.ts +16 -0
- package/dist/contract/delegation.d.ts +6 -0
- package/dist/contract/health.d.ts +4 -0
- package/dist/contract/index.js +20 -11
- package/dist/contract/runs.d.ts +25 -3
- package/dist/contract/skills.d.ts +3 -0
- package/dist/contract/workflows.d.ts +6 -0
- package/dist/contract/workspace.d.ts +20 -2
- package/dist/core/agent-env.js +1 -0
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.js +3 -0
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +1 -1
- package/dist/core/agent-runner.js +1 -1
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/backend-detect.d.ts +1 -1
- package/dist/core/backend-detect.js +14 -0
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +15 -0
- package/dist/core/cursor-acp-runner.js +466 -0
- package/dist/core/cursor-acp-runner.js.map +1 -0
- package/dist/core/cursor-config-options.d.ts +18 -0
- package/dist/core/cursor-config-options.js +31 -0
- package/dist/core/cursor-config-options.js.map +1 -0
- package/dist/core/cursor-model-catalog.d.ts +23 -0
- package/dist/core/cursor-model-catalog.js +271 -0
- package/dist/core/cursor-model-catalog.js.map +1 -0
- package/dist/core/cursor-ui-mapper.d.ts +29 -0
- package/dist/core/cursor-ui-mapper.js +272 -0
- package/dist/core/cursor-ui-mapper.js.map +1 -0
- package/dist/core/host-model-catalog.js +2 -0
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/model-identity.js +3 -0
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.js +4 -0
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/provider-auth.d.ts +1 -1
- package/dist/core/provider-auth.js +30 -1
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.js +3 -0
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-model-catalog.js +1 -0
- package/dist/core/runner-model-catalog.js.map +1 -1
- package/dist/core/shell-env.d.ts +2 -0
- package/dist/core/shell-env.js +8 -0
- package/dist/core/shell-env.js.map +1 -1
- package/dist/core/ui-events.d.ts +1 -1
- package/dist/delegation/execution-identity.d.ts +3 -0
- package/dist/delegation/execution-identity.js +1 -1
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/provision.js +1 -1
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/routes.d.ts +53 -53
- package/dist/delegation/transport.d.ts +7 -7
- package/dist/paths.js +3 -0
- package/dist/paths.js.map +1 -1
- package/dist/runs/store.d.ts +7 -3
- package/dist/server/open-in-app.js +1 -0
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/provider-action-gate.js +1 -0
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/server.d.ts +1441 -1401
- package/dist/server/server.js +23 -9
- package/dist/server/server.js.map +1 -1
- package/dist/workflows/types.d.ts +3 -0
- package/dist/workflows/types.js +1 -0
- package/dist/workflows/types.js.map +1 -1
- package/dist/workspace/agent-accounts.d.ts +5 -1
- package/dist/workspace/agent-accounts.js +1 -0
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.js +1 -1
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +3 -1
- package/dist/workspace/config.js +1 -0
- package/dist/workspace/config.js.map +1 -1
- package/package.json +3 -3
- package/scripts/mock-cursor-acp.mjs +77 -0
- package/web/dist/assets/{agent-accounts-CdHFiYTN.js → agent-accounts-MT-jtwOU.js} +1 -1
- package/web/dist/assets/alert-dialog-KUiPIBmb.js +43 -0
- package/web/dist/assets/{collapsible-CI78cX0k.js → collapsible-CkSaP6_n.js} +1 -1
- package/web/dist/assets/{commit-list-D3Cy_0hj.js → commit-list-B47VXJez.js} +1 -1
- package/web/dist/assets/{compare-variants-BkYiBaI1.js → compare-variants-DNqtPFUv.js} +1 -1
- package/web/dist/assets/{diff-DDUpEMjA2.js → diff-C4aSZfrQ2.js} +2 -2
- package/web/dist/assets/{diff-controls-C1THeHoP.js → diff-controls-D5b8ocJ0.js} +1 -1
- package/web/dist/assets/{diff-stat-Cq4juy0u.js → diff-stat-B7f-F8cC.js} +1 -1
- package/web/dist/assets/{diff-view-Coyp_Kst.js → diff-view-BPKHTL85.js} +1 -1
- package/web/dist/assets/{dropdown-menu-BP8LYsNU.js → dropdown-menu-xYcDecNM.js} +1 -1
- package/web/dist/assets/{git-toolbar-BP8_wDyk.js → git-toolbar-C4zVVSpl.js} +1 -1
- package/web/dist/assets/{github-CVranJaK.js → github-D97-DHsF.js} +1 -1
- package/web/dist/assets/{image-preview-DXIixdjJ.js → image-preview-BhuwWeyP.js} +1 -1
- package/web/dist/assets/index-ujHRHX5o.js +7 -0
- package/web/dist/assets/{markdown-uwx4ouIE.js → markdown-CIi0LXvU.js} +1 -1
- package/web/dist/assets/pill-DDhByAhe.js +1 -0
- package/web/dist/assets/{project-router-D9DfwL9L.js → project-router-BOglfKgF.js} +1 -1
- package/web/dist/assets/{prompt-templates-DgR9lv5k.js → prompt-templates-DTSPmJP-.js} +1 -1
- package/web/dist/assets/{repo-git-BLjI-1pn.js → repo-git-DvxUSPot.js} +1 -1
- package/web/dist/assets/{run-diff-DRPGyUPP.js → run-diff-DEVs-zV1.js} +1 -1
- package/web/dist/assets/run-header-Dvb1P3Ge.js +1 -0
- package/web/dist/assets/{skills-DRowiHKX.js → skills-DJ06RZbi.js} +1 -1
- package/web/dist/assets/{tab-link-C5tpLlqv.js → tab-link-ChqeHA8K.js} +1 -1
- package/web/dist/assets/{task-changes-LBnRxH_G.js → task-changes-CIN0MkJE.js} +1 -1
- package/web/dist/assets/{task-commits-lpE22fPa.js → task-commits-BRZshVHV.js} +1 -1
- package/web/dist/assets/{task-files-Dh6SjTQF.js → task-files-BZTNbpcP.js} +1 -1
- package/web/dist/assets/{task-thread-B_74GvMl.js → task-thread-D_N6ELtr.js} +6 -6
- package/web/dist/assets/{textarea-D_Ce7vp0.js → textarea-DdKiIORK.js} +1 -1
- package/web/dist/assets/{thread-loading-CwnPHwar.js → thread-loading-BRM8kyKz.js} +1 -1
- package/web/dist/assets/{token-metrics-BC00XXU8.js → token-metrics-DDvhrHmK.js} +1 -1
- package/web/dist/assets/{utils-B8qbBJrk.js → utils-CG8vWc5K.js} +1 -1
- package/web/dist/assets/{workflows-B2Iq2bcd.js → workflows-CplF7YNk.js} +1 -1
- package/web/dist/assets/{zoomable-image-Idq840Ej.js → zoomable-image-BXioMWqb.js} +1 -1
- package/web/dist/index.html +13 -13
- package/web/dist/assets/alert-dialog-7OZcjFyp.js +0 -43
- package/web/dist/assets/index-CokupxlP.js +0 -7
- package/web/dist/assets/pill-jITycc8f.js +0 -1
- package/web/dist/assets/run-header-DO-yE5Gj.js +0 -1
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { trackChildExit } from './agent-runner.js';
|
|
4
|
+
import { buildChildEnv } from './agent-env.js';
|
|
5
|
+
const DEFAULT_DISCOVERY_TIMEOUT_MS = 10_000;
|
|
6
|
+
// ACP initializes provider services before listing parameters; the installed build
|
|
7
|
+
// exceeded the legacy listing's 10s deadline under load. Keep a finite startup bound.
|
|
8
|
+
const DEFAULT_ACP_DISCOVERY_TIMEOUT_MS = 30_000;
|
|
9
|
+
const KILL_GRACE_MS = 2_000;
|
|
10
|
+
const MAX_MODELS = 500;
|
|
11
|
+
const MAX_OUTPUT_CHARS = 512 * 1_024;
|
|
12
|
+
const ANSI_RE = /\u001B\[[0-9;]*[A-Za-z]/g;
|
|
13
|
+
export function resolveCursorExecutable(bin) {
|
|
14
|
+
return bin ?? process.env.CEZ_CURSOR_BIN ?? 'agent';
|
|
15
|
+
}
|
|
16
|
+
const effortLevelSchema = z.enum(['low', 'medium', 'high', 'xhigh', 'max']);
|
|
17
|
+
const parameterizedModelsSchema = z.object({
|
|
18
|
+
models: z.array(z.object({
|
|
19
|
+
value: z.string().min(1),
|
|
20
|
+
name: z.string(),
|
|
21
|
+
configOptions: z.array(z.object({
|
|
22
|
+
id: z.string(),
|
|
23
|
+
type: z.string(),
|
|
24
|
+
options: z.array(z.object({ value: z.string() })).optional(),
|
|
25
|
+
})).optional(),
|
|
26
|
+
})).max(MAX_MODELS),
|
|
27
|
+
});
|
|
28
|
+
const rpcResponseSchema = z.object({
|
|
29
|
+
jsonrpc: z.literal('2.0'),
|
|
30
|
+
id: z.number(),
|
|
31
|
+
result: z.unknown().optional(),
|
|
32
|
+
error: z.object({ code: z.number() }).optional(),
|
|
33
|
+
});
|
|
34
|
+
class UnsupportedPickerError extends Error {
|
|
35
|
+
}
|
|
36
|
+
/** Prefer the read-only ACP extension. Older agents still expose the opaque variant listing. */
|
|
37
|
+
export async function discoverCursorModels(options) {
|
|
38
|
+
if (options.bin === undefined && process.env.CEZ_CURSOR_BIN === undefined && process.env.CEZ_DRY_RUN === '1') {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
return await discoverParameterizedModels(options);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (!(error instanceof UnsupportedPickerError))
|
|
46
|
+
throw error;
|
|
47
|
+
return discoverCursorVariantModels(options);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function discoverParameterizedModels(options) {
|
|
51
|
+
const child = (options.spawn ?? spawnCursor)(resolveCursorExecutable(options.bin), ['acp'], options.cwd);
|
|
52
|
+
const hasExited = trackChildExit(child);
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
let settled = false;
|
|
55
|
+
let pending = '';
|
|
56
|
+
let outputChars = 0;
|
|
57
|
+
let responseId = 1;
|
|
58
|
+
const finish = (error, models) => {
|
|
59
|
+
if (settled)
|
|
60
|
+
return;
|
|
61
|
+
settled = true;
|
|
62
|
+
clearTimeout(timeout);
|
|
63
|
+
child.stdin.end();
|
|
64
|
+
if (!hasExited()) {
|
|
65
|
+
child.kill('SIGTERM');
|
|
66
|
+
const escalation = setTimeout(() => {
|
|
67
|
+
if (!hasExited())
|
|
68
|
+
child.kill('SIGKILL');
|
|
69
|
+
}, KILL_GRACE_MS);
|
|
70
|
+
escalation.unref?.();
|
|
71
|
+
}
|
|
72
|
+
if (error)
|
|
73
|
+
reject(error);
|
|
74
|
+
else
|
|
75
|
+
resolve(models ?? []);
|
|
76
|
+
};
|
|
77
|
+
const fail = (reason) => finish(new Error(`Cursor model discovery ${reason}`));
|
|
78
|
+
const timeout = setTimeout(() => fail('timed out'), options.timeoutMs ?? DEFAULT_ACP_DISCOVERY_TIMEOUT_MS);
|
|
79
|
+
timeout.unref?.();
|
|
80
|
+
const send = (id, method, params) => {
|
|
81
|
+
try {
|
|
82
|
+
child.stdin.write(JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
fail('stdin failed');
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
child.stdout.setEncoding('utf8');
|
|
89
|
+
child.stdout.on('data', (chunk) => {
|
|
90
|
+
if (settled)
|
|
91
|
+
return;
|
|
92
|
+
outputChars += chunk.length;
|
|
93
|
+
if (outputChars > MAX_OUTPUT_CHARS)
|
|
94
|
+
return fail('exceeded the output limit');
|
|
95
|
+
pending += chunk;
|
|
96
|
+
let newline;
|
|
97
|
+
while (!settled && (newline = pending.indexOf('\n')) >= 0) {
|
|
98
|
+
const line = pending.slice(0, newline);
|
|
99
|
+
pending = pending.slice(newline + 1);
|
|
100
|
+
if (!line.trim())
|
|
101
|
+
continue;
|
|
102
|
+
let raw;
|
|
103
|
+
try {
|
|
104
|
+
raw = JSON.parse(line);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
fail('returned unrecognized output');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const parsed = rpcResponseSchema.safeParse(raw);
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
// ACP notifications have no response id and can be ignored during discovery.
|
|
113
|
+
if (raw && typeof raw === 'object' && !('id' in raw) && 'method' in raw)
|
|
114
|
+
continue;
|
|
115
|
+
fail('returned unrecognized output');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const response = parsed.data;
|
|
119
|
+
if (response.id !== responseId)
|
|
120
|
+
continue;
|
|
121
|
+
if (response.error) {
|
|
122
|
+
if (responseId === 2 && response.error.code === -32601) {
|
|
123
|
+
finish(new UnsupportedPickerError('Cursor model discovery picker unsupported'));
|
|
124
|
+
}
|
|
125
|
+
else
|
|
126
|
+
fail('request failed');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (responseId === 1) {
|
|
130
|
+
const initialized = z.object({ protocolVersion: z.literal(1) }).safeParse(response.result);
|
|
131
|
+
if (!initialized.success)
|
|
132
|
+
return fail('returned unrecognized initialization');
|
|
133
|
+
responseId = 2;
|
|
134
|
+
send(2, 'cursor/list_available_models', {});
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const catalog = parameterizedModelsSchema.safeParse(response.result);
|
|
138
|
+
if (!catalog.success)
|
|
139
|
+
return fail('returned unrecognized models');
|
|
140
|
+
const seen = new Set();
|
|
141
|
+
const models = [];
|
|
142
|
+
for (const model of catalog.data.models) {
|
|
143
|
+
if (seen.has(model.value))
|
|
144
|
+
continue;
|
|
145
|
+
seen.add(model.value);
|
|
146
|
+
const levels = [];
|
|
147
|
+
for (const config of model.configOptions ?? []) {
|
|
148
|
+
if (!['effort', 'reasoning', 'reasoning_effort'].includes(config.id) || config.type !== 'select')
|
|
149
|
+
continue;
|
|
150
|
+
for (const option of config.options ?? []) {
|
|
151
|
+
const level = effortLevelSchema.safeParse(option.value);
|
|
152
|
+
if (level.success && !levels.includes(level.data))
|
|
153
|
+
levels.push(level.data);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
models.push({ id: model.value, label: model.name, description: '', effortLevels: levels });
|
|
157
|
+
}
|
|
158
|
+
finish(undefined, models);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
// Drain diagnostics without retaining or surfacing potentially private output.
|
|
162
|
+
child.stderr.resume();
|
|
163
|
+
child.stdin.once('error', () => fail('stdin failed'));
|
|
164
|
+
child.once('error', () => fail('child failed'));
|
|
165
|
+
child.once('close', () => fail('child closed before discovery completed'));
|
|
166
|
+
send(1, 'initialize', { protocolVersion: 1, clientCapabilities: { _meta: { parameterizedModelPicker: true } } });
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Ask the installed CLI for its account's models, without starting a model turn or session.
|
|
171
|
+
* https://cursor.com/docs/cli/reference/parameters documents this listing flag.
|
|
172
|
+
* The catalog handles failures as cached/unavailable results; no credential files are read.
|
|
173
|
+
*/
|
|
174
|
+
export async function discoverCursorVariantModels(options) {
|
|
175
|
+
if (options.bin === undefined && process.env.CEZ_CURSOR_BIN === undefined && process.env.CEZ_DRY_RUN === '1') {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
const child = (options.spawn ?? spawnCursor)(resolveCursorExecutable(options.bin), ['--list-models'], options.cwd);
|
|
179
|
+
const hasExited = trackChildExit(child);
|
|
180
|
+
let signalled = false;
|
|
181
|
+
const kill = () => {
|
|
182
|
+
if (signalled || hasExited())
|
|
183
|
+
return;
|
|
184
|
+
signalled = true;
|
|
185
|
+
child.kill('SIGTERM');
|
|
186
|
+
const escalation = setTimeout(() => {
|
|
187
|
+
// `killed` only means a signal was delivered, not that the child terminated.
|
|
188
|
+
if (!hasExited())
|
|
189
|
+
child.kill('SIGKILL');
|
|
190
|
+
}, KILL_GRACE_MS);
|
|
191
|
+
escalation.unref?.();
|
|
192
|
+
};
|
|
193
|
+
let timeout;
|
|
194
|
+
try {
|
|
195
|
+
const stdout = await new Promise((resolve, reject) => {
|
|
196
|
+
let output = '';
|
|
197
|
+
let settled = false;
|
|
198
|
+
const fail = (message) => {
|
|
199
|
+
if (settled)
|
|
200
|
+
return;
|
|
201
|
+
settled = true;
|
|
202
|
+
reject(new Error(`Cursor model discovery ${message}`));
|
|
203
|
+
kill();
|
|
204
|
+
};
|
|
205
|
+
timeout = setTimeout(() => fail('timed out'), options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS);
|
|
206
|
+
timeout.unref?.();
|
|
207
|
+
child.stdout.setEncoding('utf8');
|
|
208
|
+
child.stdout.on('data', (chunk) => {
|
|
209
|
+
if (settled)
|
|
210
|
+
return;
|
|
211
|
+
output += chunk;
|
|
212
|
+
if (output.length > MAX_OUTPUT_CHARS)
|
|
213
|
+
fail('exceeded the output limit');
|
|
214
|
+
});
|
|
215
|
+
// Drain diagnostics, but never surface raw CLI output in an error.
|
|
216
|
+
child.stderr.resume();
|
|
217
|
+
child.stdin.once('error', () => fail('stdin failed'));
|
|
218
|
+
child.once('error', () => fail('child failed'));
|
|
219
|
+
child.once('close', (code) => {
|
|
220
|
+
if (settled)
|
|
221
|
+
return;
|
|
222
|
+
if (code !== 0) {
|
|
223
|
+
fail(`child exited (${code ?? 'unknown'})`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
settled = true;
|
|
227
|
+
resolve(output);
|
|
228
|
+
});
|
|
229
|
+
child.stdin.end();
|
|
230
|
+
});
|
|
231
|
+
return parseCursorModels(stdout);
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
if (timeout)
|
|
235
|
+
clearTimeout(timeout);
|
|
236
|
+
kill();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/** Parse the CLI's `Available models` listing, retaining its order and opaque model IDs. */
|
|
240
|
+
export function parseCursorModels(stdout) {
|
|
241
|
+
const lines = stdout.replace(ANSI_RE, '').split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
242
|
+
const header = lines.indexOf('Available models');
|
|
243
|
+
if (header < 0)
|
|
244
|
+
throw new Error('Cursor model discovery returned unrecognized output');
|
|
245
|
+
const models = [];
|
|
246
|
+
const ids = new Set();
|
|
247
|
+
for (const line of lines.slice(header + 1)) {
|
|
248
|
+
if (line.startsWith('Tip:'))
|
|
249
|
+
break;
|
|
250
|
+
const match = /^(\S+)\s+-\s+(.+)$/.exec(line);
|
|
251
|
+
if (!match)
|
|
252
|
+
throw new Error('Cursor model discovery returned unrecognized output');
|
|
253
|
+
const [, id, display] = match;
|
|
254
|
+
if (!id || !display || ids.has(id))
|
|
255
|
+
continue;
|
|
256
|
+
if (models.length >= MAX_MODELS)
|
|
257
|
+
throw new Error('Cursor model discovery exceeded the size limit');
|
|
258
|
+
ids.add(id);
|
|
259
|
+
const isDefault = display.endsWith(' (default)');
|
|
260
|
+
models.push({
|
|
261
|
+
id,
|
|
262
|
+
label: isDefault ? display.slice(0, -' (default)'.length) : display,
|
|
263
|
+
description: isDefault ? 'Default model' : '',
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return models;
|
|
267
|
+
}
|
|
268
|
+
export function spawnCursor(bin, args, cwd, spawnImpl = nodeSpawn) {
|
|
269
|
+
return spawnImpl(bin, [...args], { cwd, env: buildChildEnv({ backend: 'cursor' }) });
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=cursor-model-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-model-catalog.js","sourceRoot":"","sources":["../../src/core/cursor-model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Pure ACP notification mapper. Transport and asks belong to the runner; session attribution stays here.
|
|
2
|
+
* Wire sources and vendor limitations: __fixtures__/cursor/README.md.
|
|
3
|
+
*/
|
|
4
|
+
import type { PlanEntry, UiEvent, UiMessageItem, UiReasoningItem, UiToolItem } from './ui-events.js';
|
|
5
|
+
export interface CursorUiState {
|
|
6
|
+
readonly sessionId?: string;
|
|
7
|
+
readonly childSessions: ReadonlyMap<string, CursorChildSession>;
|
|
8
|
+
readonly turnSeq: number;
|
|
9
|
+
readonly turnId?: string;
|
|
10
|
+
readonly textSeq: number;
|
|
11
|
+
readonly activeText?: UiMessageItem | UiReasoningItem;
|
|
12
|
+
readonly tools: ReadonlyMap<string, UiToolItem>;
|
|
13
|
+
readonly todos: ReadonlyMap<string, PlanEntry>;
|
|
14
|
+
}
|
|
15
|
+
export interface CursorChildSession {
|
|
16
|
+
readonly parentSessionId: string;
|
|
17
|
+
readonly parentItemId: string;
|
|
18
|
+
readonly toolCallId: string;
|
|
19
|
+
readonly terminal: boolean;
|
|
20
|
+
readonly state: CursorUiState;
|
|
21
|
+
}
|
|
22
|
+
export interface CursorUiMapping {
|
|
23
|
+
state: CursorUiState;
|
|
24
|
+
events: UiEvent[];
|
|
25
|
+
}
|
|
26
|
+
export declare function createCursorUiState(): CursorUiState;
|
|
27
|
+
export declare function cursorTurnStarted(state: CursorUiState): CursorUiMapping;
|
|
28
|
+
export declare function cursorTurnCompleted(reason: string, state: CursorUiState): CursorUiMapping;
|
|
29
|
+
export declare function mapCursorMessage(message: unknown, state: CursorUiState): CursorUiMapping;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
export function createCursorUiState() {
|
|
2
|
+
return { turnSeq: 0, textSeq: 0, tools: new Map(), todos: new Map(), childSessions: new Map() };
|
|
3
|
+
}
|
|
4
|
+
export function cursorTurnStarted(state) {
|
|
5
|
+
const closed = flushAll(state);
|
|
6
|
+
const turnSeq = state.turnSeq + 1;
|
|
7
|
+
const turnId = `turn_${turnSeq}`;
|
|
8
|
+
return { state: { ...closed.state, turnSeq, turnId }, events: [...closed.events, { type: 'turn.started', turnId }] };
|
|
9
|
+
}
|
|
10
|
+
export function cursorTurnCompleted(reason, state) {
|
|
11
|
+
if (!state.turnId)
|
|
12
|
+
return { state, events: [] };
|
|
13
|
+
const closed = flushAll(state);
|
|
14
|
+
const { turnId, ...next } = closed.state;
|
|
15
|
+
const stopReason = reason === 'max_turn_requests' ? 'max_tokens'
|
|
16
|
+
: ['end_turn', 'max_tokens', 'refusal', 'cancelled', 'timeout', 'error'].includes(reason) ? reason : 'error';
|
|
17
|
+
return { state: next, events: [...closed.events, { type: 'turn.completed', turnId: turnId, stopReason }] };
|
|
18
|
+
}
|
|
19
|
+
function flush(state) {
|
|
20
|
+
if (!state.activeText)
|
|
21
|
+
return { state, events: [] };
|
|
22
|
+
const { activeText, ...next } = state;
|
|
23
|
+
return { state: next, events: [{ type: 'item.completed', item: activeText }] };
|
|
24
|
+
}
|
|
25
|
+
/** Child ids are namespaced because ACP tool ids are session-local. */
|
|
26
|
+
function childItemId(sessionId, itemId) {
|
|
27
|
+
return `cursor_child_${JSON.stringify([sessionId, itemId])}`;
|
|
28
|
+
}
|
|
29
|
+
function childEvents(events, sessionId, parentItemId) {
|
|
30
|
+
return events.flatMap((event) => {
|
|
31
|
+
switch (event.type) {
|
|
32
|
+
case 'item.started':
|
|
33
|
+
case 'item.updated':
|
|
34
|
+
case 'item.completed':
|
|
35
|
+
return [{ ...event, item: { ...event.item, id: childItemId(sessionId, event.item.id), parentItemId } }];
|
|
36
|
+
case 'item.delta': return [{ ...event, itemId: childItemId(sessionId, event.itemId) }];
|
|
37
|
+
// Child plans/usage must not replace the parent session's global panels.
|
|
38
|
+
default: return [];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function flushAll(state) {
|
|
43
|
+
const closed = flush(state);
|
|
44
|
+
const childSessions = new Map(state.childSessions);
|
|
45
|
+
const events = [...closed.events];
|
|
46
|
+
for (const [sessionId, child] of childSessions) {
|
|
47
|
+
const mapped = flush(child.state);
|
|
48
|
+
events.push(...childEvents(mapped.events, sessionId, child.parentItemId));
|
|
49
|
+
childSessions.set(sessionId, { ...child, state: mapped.state, terminal: true });
|
|
50
|
+
}
|
|
51
|
+
return { state: { ...closed.state, childSessions }, events };
|
|
52
|
+
}
|
|
53
|
+
export function mapCursorMessage(message, state) {
|
|
54
|
+
const noop = { state, events: [] };
|
|
55
|
+
if (!record(message) || !record(message.params))
|
|
56
|
+
return noop;
|
|
57
|
+
if (message.method !== 'session/update') {
|
|
58
|
+
// Cursor extensions omit sessionId, including those sent by child presenters.
|
|
59
|
+
// Attribute their tool id before touching any session-wide panel.
|
|
60
|
+
const toolId = str(message.params.toolCallId);
|
|
61
|
+
const children = toolId ? [...state.childSessions].filter(([, child]) => child.state.tools.has(toolId)) : [];
|
|
62
|
+
if (children.length > 1 || (children.length && toolId && state.tools.has(toolId)))
|
|
63
|
+
return noop;
|
|
64
|
+
const owner = children[0];
|
|
65
|
+
if (owner) {
|
|
66
|
+
const [sessionId, child] = owner;
|
|
67
|
+
const mapped = mapSessionMessage(message, child.state);
|
|
68
|
+
const childSessions = new Map(state.childSessions);
|
|
69
|
+
childSessions.set(sessionId, { ...child, state: mapped.state });
|
|
70
|
+
return { state: { ...state, childSessions }, events: childEvents(mapped.events, sessionId, child.parentItemId) };
|
|
71
|
+
}
|
|
72
|
+
if ((!toolId || !state.tools.has(toolId)) && [...state.childSessions.values()].some(child => !child.terminal))
|
|
73
|
+
return noop;
|
|
74
|
+
return mapSessionMessage(message, state);
|
|
75
|
+
}
|
|
76
|
+
const { sessionId, update } = message.params;
|
|
77
|
+
if (!str(sessionId) || !record(update))
|
|
78
|
+
return noop;
|
|
79
|
+
const sourceId = sessionId;
|
|
80
|
+
const sourceChild = state.childSessions.get(sourceId);
|
|
81
|
+
if (sourceId !== state.sessionId && (!sourceChild || sourceChild.terminal))
|
|
82
|
+
return noop;
|
|
83
|
+
const source = sourceChild?.state ?? state;
|
|
84
|
+
const commitSource = (mapped) => {
|
|
85
|
+
if (!sourceChild)
|
|
86
|
+
return mapped;
|
|
87
|
+
const childSessions = new Map(state.childSessions);
|
|
88
|
+
childSessions.set(sourceId, { ...sourceChild, state: mapped.state });
|
|
89
|
+
return { state: { ...state, childSessions }, events: childEvents(mapped.events, sourceId, sourceChild.parentItemId) };
|
|
90
|
+
};
|
|
91
|
+
if (update.sessionUpdate === 'subagent_spawned') {
|
|
92
|
+
const childId = str(update.subagentSessionId);
|
|
93
|
+
const cursor = record(update._meta) && record(update._meta.cursor) ? update._meta.cursor : undefined;
|
|
94
|
+
const toolCallId = str(cursor?.toolCallId);
|
|
95
|
+
if (!childId || !toolCallId || childId === state.sessionId || state.childSessions.has(childId))
|
|
96
|
+
return noop;
|
|
97
|
+
const mapped = commitSource(tool({ toolCallId, kind: 'task', title: str(update.name) ?? 'Task',
|
|
98
|
+
status: 'in_progress', rawInput: { task: update.task } }, source));
|
|
99
|
+
const childSessions = new Map(mapped.state.childSessions);
|
|
100
|
+
childSessions.set(childId, {
|
|
101
|
+
parentSessionId: sourceId,
|
|
102
|
+
parentItemId: sourceChild ? childItemId(sourceId, toolCallId) : toolCallId,
|
|
103
|
+
toolCallId, terminal: false, state: { ...createCursorUiState(), sessionId: childId },
|
|
104
|
+
});
|
|
105
|
+
return { state: { ...mapped.state, childSessions }, events: mapped.events };
|
|
106
|
+
}
|
|
107
|
+
if (update.sessionUpdate === 'subagent_state_update') {
|
|
108
|
+
const childId = str(update.subagentSessionId);
|
|
109
|
+
const child = childId ? state.childSessions.get(childId) : undefined;
|
|
110
|
+
if (!childId || !child || child.terminal || child.parentSessionId !== sourceId ||
|
|
111
|
+
typeof update.state !== 'string' || !['completed', 'failed', 'cancelled', 'disconnected'].includes(update.state))
|
|
112
|
+
return noop;
|
|
113
|
+
const closed = flush(child.state);
|
|
114
|
+
const mapped = commitSource(tool({ toolCallId: child.toolCallId, kind: 'task',
|
|
115
|
+
status: update.state === 'completed' ? 'completed' : 'failed' }, source));
|
|
116
|
+
const childSessions = new Map(mapped.state.childSessions);
|
|
117
|
+
childSessions.set(childId, { ...child, state: closed.state, terminal: true });
|
|
118
|
+
return { state: { ...mapped.state, childSessions },
|
|
119
|
+
events: [...childEvents(closed.events, childId, child.parentItemId), ...mapped.events] };
|
|
120
|
+
}
|
|
121
|
+
const mapped = mapSessionMessage(message, source);
|
|
122
|
+
if (mapped.state === source && mapped.events.length === 0)
|
|
123
|
+
return noop;
|
|
124
|
+
return commitSource(mapped);
|
|
125
|
+
}
|
|
126
|
+
function mapSessionMessage(message, state) {
|
|
127
|
+
const noop = { state, events: [] };
|
|
128
|
+
if (!record(message) || !record(message.params))
|
|
129
|
+
return noop;
|
|
130
|
+
const params = message.params;
|
|
131
|
+
if (message.method === 'cursor/update_todos') {
|
|
132
|
+
if (!Array.isArray(params.todos) || typeof params.merge !== 'boolean')
|
|
133
|
+
return noop;
|
|
134
|
+
const todos = params.merge ? new Map(state.todos) : new Map();
|
|
135
|
+
for (const value of params.todos) {
|
|
136
|
+
const entry = planEntry(value);
|
|
137
|
+
if (!entry || !record(value) || !str(value.id))
|
|
138
|
+
return noop;
|
|
139
|
+
todos.set(value.id, entry);
|
|
140
|
+
}
|
|
141
|
+
return { state: { ...state, todos }, events: [{ type: 'plan.updated', entries: [...todos.values()] }] };
|
|
142
|
+
}
|
|
143
|
+
if (message.method === 'cursor/task') {
|
|
144
|
+
const id = str(params.toolCallId);
|
|
145
|
+
if (!id || typeof params.description !== 'string')
|
|
146
|
+
return noop;
|
|
147
|
+
const prior = state.tools.get(id);
|
|
148
|
+
// Cursor sends this after the regular tool completion, including failed tasks.
|
|
149
|
+
// It is metadata for the task, never evidence of a child transcript or success.
|
|
150
|
+
return tool({ toolCallId: id, kind: 'task', title: params.description, rawInput: params,
|
|
151
|
+
status: prior?.status ?? 'completed' }, state, true);
|
|
152
|
+
}
|
|
153
|
+
if (message.method !== 'session/update' || !record(params.update))
|
|
154
|
+
return noop;
|
|
155
|
+
const value = params.update;
|
|
156
|
+
switch (value.sessionUpdate) {
|
|
157
|
+
case 'agent_message_chunk':
|
|
158
|
+
case 'agent_thought_chunk': {
|
|
159
|
+
if (!record(value.content) || value.content.type !== 'text' || typeof value.content.text !== 'string' || !value.content.text)
|
|
160
|
+
return noop;
|
|
161
|
+
const kind = value.sessionUpdate === 'agent_message_chunk' ? 'message' : 'reasoning';
|
|
162
|
+
const delta = value.content.text;
|
|
163
|
+
if (state.activeText?.kind === kind) {
|
|
164
|
+
const item = { ...state.activeText, text: state.activeText.text + delta };
|
|
165
|
+
return { state: { ...state, activeText: item }, events: [{ type: 'item.delta', itemId: item.id, field: kind === 'message' ? 'text' : 'reasoning', delta }] };
|
|
166
|
+
}
|
|
167
|
+
const closed = flush(state);
|
|
168
|
+
const textSeq = state.textSeq + 1;
|
|
169
|
+
const id = `cursor_text_${textSeq}`;
|
|
170
|
+
const item = kind === 'message' ? { kind, id, role: 'assistant', text: delta } : { kind, id, text: delta };
|
|
171
|
+
return { state: { ...closed.state, textSeq, activeText: item }, events: [...closed.events, { type: 'item.started', item }] };
|
|
172
|
+
}
|
|
173
|
+
case 'tool_call':
|
|
174
|
+
case 'tool_call_update': return tool(value, state);
|
|
175
|
+
case 'plan': {
|
|
176
|
+
if (!Array.isArray(value.entries))
|
|
177
|
+
return noop;
|
|
178
|
+
const entries = [];
|
|
179
|
+
for (const raw of value.entries) {
|
|
180
|
+
const entry = planEntry(raw);
|
|
181
|
+
if (!entry)
|
|
182
|
+
return noop;
|
|
183
|
+
entries.push(entry);
|
|
184
|
+
}
|
|
185
|
+
return { state, events: [{ type: 'plan.updated', entries }] };
|
|
186
|
+
}
|
|
187
|
+
case 'usage_update':
|
|
188
|
+
// ACP used/size reports context occupancy, not cumulative consumption.
|
|
189
|
+
// UiEvent has no occupancy-only event; do not invent directional tokens
|
|
190
|
+
// or mislabel a context snapshot as cumulative session usage.
|
|
191
|
+
return noop;
|
|
192
|
+
default: return noop;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function tool(value, state, metadata = false) {
|
|
196
|
+
const id = str(value.toolCallId);
|
|
197
|
+
if (!id)
|
|
198
|
+
return { state, events: [] };
|
|
199
|
+
const closed = flush(state);
|
|
200
|
+
const prior = state.tools.get(id);
|
|
201
|
+
const kind = toolKind(value.kind) ?? prior?.toolKind ?? 'other';
|
|
202
|
+
const status = toolStatus(value.status) ?? prior?.status ?? 'pending';
|
|
203
|
+
const item = { ...(prior ?? { kind: 'tool', id }), name: metadata ? 'task' : prior?.name ?? kind,
|
|
204
|
+
toolKind: kind, title: str(value.title) ?? prior?.title ?? 'Tool', status };
|
|
205
|
+
if (value.rawInput !== undefined && value.rawInput !== null)
|
|
206
|
+
item.input = value.rawInput;
|
|
207
|
+
if (value.rawOutput !== undefined && value.rawOutput !== null)
|
|
208
|
+
item.output = serialize(value.rawOutput);
|
|
209
|
+
if (Array.isArray(value.content)) {
|
|
210
|
+
const output = [];
|
|
211
|
+
const diffs = [];
|
|
212
|
+
for (const part of value.content) {
|
|
213
|
+
if (!record(part))
|
|
214
|
+
continue;
|
|
215
|
+
if (part.type === 'content' && record(part.content) && part.content.type === 'text' && typeof part.content.text === 'string')
|
|
216
|
+
output.push(part.content.text);
|
|
217
|
+
if (part.type === 'diff' && typeof part.path === 'string' && (typeof part.oldText === 'string' || part.oldText === null || part.oldText === undefined) && typeof part.newText === 'string') {
|
|
218
|
+
diffs.push({ path: part.path, oldText: part.oldText ?? null, newText: part.newText });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// ACP content updates replace the previous content, including empty snapshots.
|
|
222
|
+
if (output.length)
|
|
223
|
+
item.output = output.join('\n');
|
|
224
|
+
else if (value.rawOutput === undefined || value.rawOutput === null)
|
|
225
|
+
delete item.output;
|
|
226
|
+
item.diffs = diffs;
|
|
227
|
+
}
|
|
228
|
+
if (Array.isArray(value.locations)) {
|
|
229
|
+
item.locations = value.locations.flatMap((location) => record(location) && typeof location.path === 'string'
|
|
230
|
+
? [{ path: location.path, ...(count(location.line) ? { line: location.line } : {}) }] : []);
|
|
231
|
+
}
|
|
232
|
+
if (status === 'failed' && item.output)
|
|
233
|
+
item.error = item.output;
|
|
234
|
+
const tools = new Map(closed.state.tools);
|
|
235
|
+
tools.set(id, item);
|
|
236
|
+
const events = [...closed.events];
|
|
237
|
+
const terminal = status === 'completed' || status === 'failed' || status === 'declined';
|
|
238
|
+
if (!prior)
|
|
239
|
+
events.push({ type: 'item.started', item });
|
|
240
|
+
if (prior || terminal)
|
|
241
|
+
events.push({ type: metadata && prior ? 'item.updated' : terminal ? 'item.completed' : 'item.updated', item });
|
|
242
|
+
return { state: { ...closed.state, tools }, events };
|
|
243
|
+
}
|
|
244
|
+
function planEntry(value) {
|
|
245
|
+
if (!record(value) || typeof value.content !== 'string' || typeof value.status !== 'string' || !['pending', 'in_progress', 'completed', 'cancelled'].includes(value.status))
|
|
246
|
+
return undefined;
|
|
247
|
+
return { content: value.content, status: value.status,
|
|
248
|
+
...(typeof value.priority === 'string' && ['high', 'medium', 'low'].includes(value.priority) ? { priority: value.priority } : {}) };
|
|
249
|
+
}
|
|
250
|
+
function toolKind(value) {
|
|
251
|
+
return typeof value === 'string' && ['read', 'edit', 'delete', 'move', 'search', 'execute', 'think', 'fetch', 'task', 'plan', 'other'].includes(value) ? value : undefined;
|
|
252
|
+
}
|
|
253
|
+
function toolStatus(value) {
|
|
254
|
+
if (value === 'in_progress')
|
|
255
|
+
return 'running';
|
|
256
|
+
return typeof value === 'string' && ['pending', 'running', 'completed', 'failed', 'declined'].includes(value) ? value : undefined;
|
|
257
|
+
}
|
|
258
|
+
function record(value) { return value !== null && typeof value === 'object' && !Array.isArray(value); }
|
|
259
|
+
function str(value) { return typeof value === 'string' && value.length > 0 ? value : undefined; }
|
|
260
|
+
function nonnegative(value) { return typeof value === 'number' && Number.isFinite(value) && value >= 0; }
|
|
261
|
+
function count(value) { return nonnegative(value) && Number.isSafeInteger(value); }
|
|
262
|
+
function serialize(value) {
|
|
263
|
+
if (typeof value === 'string')
|
|
264
|
+
return value;
|
|
265
|
+
try {
|
|
266
|
+
return JSON.stringify(value);
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=cursor-ui-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-ui-mapper.js","sourceRoot":"","sources":["../../src/core/cursor-ui-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { discoverClaudeModels } from './claude-model-catalog.js';
|
|
2
2
|
import { discoverCodexModels } from './codex-model-catalog.js';
|
|
3
3
|
import { discoverOpencodeModels } from './opencode-model-catalog.js';
|
|
4
|
+
import { discoverCursorModels } from './cursor-model-catalog.js';
|
|
4
5
|
import { discoverPiModels } from './pi-model-catalog.js';
|
|
5
6
|
/**
|
|
6
7
|
* The host's model-discovery adapters, one per runner the contract advertises as
|
|
@@ -18,6 +19,7 @@ export function hostModelCatalogAdapters(cwd) {
|
|
|
18
19
|
claude: { discover: () => discoverClaudeModels({ cwd }) },
|
|
19
20
|
codex: { discover: () => discoverCodexModels({ cwd }) },
|
|
20
21
|
opencode: { discover: () => discoverOpencodeModels({ cwd }) },
|
|
22
|
+
cursor: { discover: () => discoverCursorModels({ cwd }) },
|
|
21
23
|
pi: { discover: () => discoverPiModels({ cwd }) },
|
|
22
24
|
};
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-model-catalog.js","sourceRoot":"","sources":["../../src/core/host-model-catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO;QACL,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACzD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACvD,QAAQ,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC7D,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;KAClD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"host-model-catalog.js","sourceRoot":"","sources":["../../src/core/host-model-catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO;QACL,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACzD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACvD,QAAQ,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC7D,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACzD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;KAClD,CAAC;AACJ,CAAC"}
|