@moxxy/plugin-provider-acp 0.0.0-stage → 0.45.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/LICENSE +21 -0
- package/dist/acp-session.d.ts +201 -0
- package/dist/acp-session.d.ts.map +1 -0
- package/dist/acp-session.js +812 -0
- package/dist/acp-session.js.map +1 -0
- package/dist/agent-provider.d.ts +71 -0
- package/dist/agent-provider.d.ts.map +1 -0
- package/dist/agent-provider.js +203 -0
- package/dist/agent-provider.js.map +1 -0
- package/dist/agents.d.ts +23 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +21 -0
- package/dist/agents.js.map +1 -0
- package/dist/constants.d.ts +31 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +31 -0
- package/dist/constants.js.map +1 -0
- package/dist/executable.d.ts +47 -0
- package/dist/executable.d.ts.map +1 -0
- package/dist/executable.js +106 -0
- package/dist/executable.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/login.d.ts +48 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +180 -0
- package/dist/login.js.map +1 -0
- package/dist/opencode-api.d.ts +32 -0
- package/dist/opencode-api.d.ts.map +1 -0
- package/dist/opencode-api.js +86 -0
- package/dist/opencode-api.js.map +1 -0
- package/dist/opencode-helpers.d.ts +49 -0
- package/dist/opencode-helpers.d.ts.map +1 -0
- package/dist/opencode-helpers.js +175 -0
- package/dist/opencode-helpers.js.map +1 -0
- package/dist/protocol.d.ts +143 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +7 -0
- package/dist/protocol.js.map +1 -0
- package/dist/rules.d.ts +47 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +84 -0
- package/dist/rules.js.map +1 -0
- package/dist/translate.d.ts +50 -0
- package/dist/translate.d.ts.map +1 -0
- package/dist/translate.js +290 -0
- package/dist/translate.js.map +1 -0
- package/package.json +81 -3
- package/src/acp-session.ts +892 -0
- package/src/agent-cli.test.ts +76 -0
- package/src/agent-provider.test.ts +1137 -0
- package/src/agent-provider.ts +234 -0
- package/src/agents.ts +37 -0
- package/src/constants.ts +36 -0
- package/src/event-coverage.test.ts +65 -0
- package/src/executable.test.ts +89 -0
- package/src/executable.ts +143 -0
- package/src/fake-opencode.testkit.ts +755 -0
- package/src/fixtures/acp-session-updates.json +19 -0
- package/src/index.test.ts +69 -0
- package/src/index.ts +83 -0
- package/src/login.test.ts +155 -0
- package/src/login.ts +222 -0
- package/src/opencode-api.ts +105 -0
- package/src/opencode-helpers.test.ts +76 -0
- package/src/opencode-helpers.ts +195 -0
- package/src/protocol.ts +104 -0
- package/src/rules.test.ts +107 -0
- package/src/rules.ts +102 -0
- package/src/translate.test.ts +253 -0
- package/src/translate.ts +318 -0
- package/README.md +0 -3
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { diffPathIn, fileDiffFromPatch, fileDiffFromText, imageToolOutput, parseUnifiedDiff, stepListOutput, stepsFromTodos } from '@moxxy/sdk';
|
|
3
|
+
/**
|
|
4
|
+
* One agent prompt's `session/update` notifications as Moxxy agent events.
|
|
5
|
+
* ACP announces a tool before its input is known (a `pending` `tool_call`
|
|
6
|
+
* with no or partial `rawInput`, OpenCode's command with its folder only, then
|
|
7
|
+
* an `in_progress` update with the input), so a call is shown once it starts. Calls to Moxxy's own tools (`moxxy_*` for OpenCode) are left
|
|
8
|
+
* out: Moxxy records those when it runs them.
|
|
9
|
+
*/
|
|
10
|
+
export class AcpTurnTranslator {
|
|
11
|
+
moxxyToolPrefix;
|
|
12
|
+
cwd;
|
|
13
|
+
calls = new Map();
|
|
14
|
+
text = '';
|
|
15
|
+
thought = '';
|
|
16
|
+
/** Plans the agent reported this prompt; each is shown as a call of its own. */
|
|
17
|
+
plans = 0;
|
|
18
|
+
planPrefix = randomUUID().slice(0, 8);
|
|
19
|
+
/** `cwd`: the project folder, which the paths of file diffs are shown relative to. */
|
|
20
|
+
constructor(moxxyToolPrefix, cwd = '') {
|
|
21
|
+
this.moxxyToolPrefix = moxxyToolPrefix;
|
|
22
|
+
this.cwd = cwd;
|
|
23
|
+
}
|
|
24
|
+
update(update) {
|
|
25
|
+
switch (update.sessionUpdate) {
|
|
26
|
+
case 'agent_message_chunk': {
|
|
27
|
+
const chunk = textOf(update.content);
|
|
28
|
+
if (!chunk)
|
|
29
|
+
return [];
|
|
30
|
+
const events = this.flushThought();
|
|
31
|
+
this.text += chunk;
|
|
32
|
+
events.push({ type: 'text_delta', delta: chunk });
|
|
33
|
+
return events;
|
|
34
|
+
}
|
|
35
|
+
case 'agent_thought_chunk': {
|
|
36
|
+
const chunk = textOf(update.content);
|
|
37
|
+
if (!chunk)
|
|
38
|
+
return [];
|
|
39
|
+
this.thought += chunk;
|
|
40
|
+
return [{ type: 'reasoning_delta', delta: chunk }];
|
|
41
|
+
}
|
|
42
|
+
case 'tool_call':
|
|
43
|
+
return this.toolCall(update, true);
|
|
44
|
+
case 'tool_call_update':
|
|
45
|
+
return this.toolCall(update, false);
|
|
46
|
+
case 'plan':
|
|
47
|
+
return this.plan(update.entries);
|
|
48
|
+
default:
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** The prompt ended: what the agent said last is its final message. */
|
|
53
|
+
finish() {
|
|
54
|
+
return [...this.flushThought(), ...this.flushText('end_turn')];
|
|
55
|
+
}
|
|
56
|
+
/** The call a permission ask is about, shown first if it is not yet. */
|
|
57
|
+
callFor(toolCall) {
|
|
58
|
+
const state = this.calls.get(toolCall.toolCallId);
|
|
59
|
+
if (state?.shown)
|
|
60
|
+
return { call: state.shown, events: [] };
|
|
61
|
+
const tool = state?.tool ?? toolCall.title ?? 'tool';
|
|
62
|
+
const fresh = state ?? { tool, kind: toolCall.kind, input: {}, shown: undefined, ended: false };
|
|
63
|
+
fresh.input = { ...fresh.input, ...asRecord(toolCall.rawInput) };
|
|
64
|
+
this.calls.set(toolCall.toolCallId, fresh);
|
|
65
|
+
const events = [...this.flushThought(), ...this.flushText('tool_use'), ...this.show(toolCall.toolCallId, fresh)];
|
|
66
|
+
return { call: fresh.shown ?? shownCall(tool, fresh.kind, fresh.input), events };
|
|
67
|
+
}
|
|
68
|
+
/** Close the calls still open (the prompt ended without their result). */
|
|
69
|
+
openCalls() {
|
|
70
|
+
return [...this.calls.entries()].flatMap(([id, state]) => (state.shown && !state.ended ? [id] : []));
|
|
71
|
+
}
|
|
72
|
+
toolCall(update, first) {
|
|
73
|
+
let state = this.calls.get(update.toolCallId);
|
|
74
|
+
if (!state) {
|
|
75
|
+
if (!first && update.title === undefined)
|
|
76
|
+
return [];
|
|
77
|
+
state = { tool: update.title ?? 'tool', kind: update.kind, input: {}, shown: undefined, ended: false };
|
|
78
|
+
this.calls.set(update.toolCallId, state);
|
|
79
|
+
}
|
|
80
|
+
if (this.isMoxxyTool(state.tool))
|
|
81
|
+
return [];
|
|
82
|
+
if (update.kind)
|
|
83
|
+
state.kind = update.kind;
|
|
84
|
+
const raw = asRecord(update.rawInput);
|
|
85
|
+
if (Object.keys(raw).length > 0)
|
|
86
|
+
state.input = { ...state.input, ...raw };
|
|
87
|
+
const events = [];
|
|
88
|
+
const done = update.status === 'completed' || update.status === 'failed';
|
|
89
|
+
const started = update.status === 'in_progress' || done || (!first && update.status === undefined && Object.keys(raw).length > 0);
|
|
90
|
+
if (!state.shown && started) {
|
|
91
|
+
events.push(...this.flushThought(), ...this.flushText('tool_use'), ...this.show(update.toolCallId, state));
|
|
92
|
+
}
|
|
93
|
+
if (done && state.shown && !state.ended) {
|
|
94
|
+
state.ended = true;
|
|
95
|
+
const output = toolOutput(update);
|
|
96
|
+
if (SUBAGENT_TOOLS.has(state.tool)) {
|
|
97
|
+
// A subagent started in the background works on: its end comes later, from OpenCode's HTTP API.
|
|
98
|
+
if (update.status === 'completed' && BACKGROUND_TASK.test(output))
|
|
99
|
+
return events;
|
|
100
|
+
// OpenCode 2's `acp` serves no such API: nothing else would ever close it.
|
|
101
|
+
if (update.status === 'completed' && BACKGROUND_TASK_V2.test(output)) {
|
|
102
|
+
events.push({ type: 'subagent_completed', id: update.toolCallId, text: BACKGROUND_UNSEEN });
|
|
103
|
+
return events;
|
|
104
|
+
}
|
|
105
|
+
events.push(update.status === 'completed'
|
|
106
|
+
? { type: 'subagent_completed', id: update.toolCallId, text: taskResultOf(output) }
|
|
107
|
+
: { type: 'subagent_completed', id: update.toolCallId, text: '', error: output || 'the subagent failed' });
|
|
108
|
+
return events;
|
|
109
|
+
}
|
|
110
|
+
const diff = update.status === 'completed' ? fileDiffOf(state.tool, state.input, update.rawOutput, this.cwd) : undefined;
|
|
111
|
+
// OpenCode writes its whole todo list each time; the list it wrote is the result shown.
|
|
112
|
+
const steps = update.status === 'completed' && state.tool === 'todowrite' ? stepsFromTodos(state.input.todos) : undefined;
|
|
113
|
+
const images = diff || steps ? [] : toolImages(update);
|
|
114
|
+
const shown = steps ? stepListOutput(output, steps)
|
|
115
|
+
: diff ? { forModel: output, display: diff }
|
|
116
|
+
: images.length > 0 ? imageToolOutput(output, images)
|
|
117
|
+
: output;
|
|
118
|
+
events.push(update.status === 'completed'
|
|
119
|
+
? { type: 'tool_result', callId: update.toolCallId, ok: true, output: shown }
|
|
120
|
+
: { type: 'tool_result', callId: update.toolCallId, ok: false, error: output || 'the tool failed' });
|
|
121
|
+
}
|
|
122
|
+
return events;
|
|
123
|
+
}
|
|
124
|
+
/** An ACP agent's plan (`entries` of `{ content, status }`), whole each time, shown as a call of its own. */
|
|
125
|
+
plan(entries) {
|
|
126
|
+
const steps = stepsFromTodos(entries);
|
|
127
|
+
if (!steps)
|
|
128
|
+
return [];
|
|
129
|
+
this.plans += 1;
|
|
130
|
+
// Unique in the conversation: a later prompt starts counting again.
|
|
131
|
+
const callId = `plan-${this.planPrefix}-${this.plans}`;
|
|
132
|
+
const forModel = steps.map((step) => `${step.status === 'completed' ? '[x]' : '[ ]'} ${step.text}`).join('\n');
|
|
133
|
+
return [
|
|
134
|
+
...this.flushThought(),
|
|
135
|
+
...this.flushText('tool_use'),
|
|
136
|
+
{ type: 'tool_call', callId, name: 'update_plan', input: { entries } },
|
|
137
|
+
{ type: 'tool_result', callId, ok: true, output: stepListOutput(forModel, steps) },
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
show(callId, state) {
|
|
141
|
+
if (state.shown || this.isMoxxyTool(state.tool))
|
|
142
|
+
return [];
|
|
143
|
+
state.shown = shownCall(state.tool, state.kind, state.input);
|
|
144
|
+
if (SUBAGENT_TOOLS.has(state.tool))
|
|
145
|
+
return [subagentStarted(callId, state.input)];
|
|
146
|
+
return [{ type: 'tool_call', callId, name: state.shown.name, input: state.shown.input }];
|
|
147
|
+
}
|
|
148
|
+
isMoxxyTool(tool) {
|
|
149
|
+
return tool.startsWith(this.moxxyToolPrefix);
|
|
150
|
+
}
|
|
151
|
+
flushText(stopReason) {
|
|
152
|
+
const text = this.text.trim();
|
|
153
|
+
this.text = '';
|
|
154
|
+
return text ? [{ type: 'message', text, stopReason }] : [];
|
|
155
|
+
}
|
|
156
|
+
flushThought() {
|
|
157
|
+
const text = this.thought.trim();
|
|
158
|
+
this.thought = '';
|
|
159
|
+
return text ? [{ type: 'reasoning', text }] : [];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** OpenCode's tool that hands a task to a subagent (`task` in OpenCode 1, `subagent` in 2); ACP reports the task and its answer, not the subagent's own calls. */
|
|
163
|
+
const SUBAGENT_TOOLS = new Set(['task', 'subagent']);
|
|
164
|
+
/** OpenCode 1.19's answer to a `task` call with `background: true`: the subagent's session, still running. */
|
|
165
|
+
const BACKGROUND_TASK = /^<task id="[^"]+" state="running">/;
|
|
166
|
+
/** OpenCode 2's answer to a `subagent` call with `background: true` (2.1.4). */
|
|
167
|
+
const BACKGROUND_TASK_V2 = /^The subagent is working in the background \(sessionID: /;
|
|
168
|
+
const BACKGROUND_UNSEEN = 'Started in the background. OpenCode 2 does not report what it does there or when it ends.';
|
|
169
|
+
function subagentStarted(callId, input) {
|
|
170
|
+
const text = (key) => (typeof input[key] === 'string' && input[key] ? input[key] : undefined);
|
|
171
|
+
const prompt = text('prompt');
|
|
172
|
+
return { type: 'subagent_started', id: callId, label: text('description') ?? 'subagent', agentType: text('subagent_type') ?? text('agent') ?? 'general', ...(prompt ? { prompt } : {}), toolsUnseen: true };
|
|
173
|
+
}
|
|
174
|
+
/** The subagent's answer inside OpenCode's `<task …><task_result>…</task_result></task>` wrapping. */
|
|
175
|
+
function taskResultOf(output) {
|
|
176
|
+
const found = /<task_result>\s*([\s\S]*?)\s*<\/task_result>/.exec(output);
|
|
177
|
+
return found && found[1] !== undefined ? found[1] : output;
|
|
178
|
+
}
|
|
179
|
+
/** The agent's tool under the name Moxxy knows it by, with Moxxy's input keys. */
|
|
180
|
+
export function shownCall(tool, kind, input) {
|
|
181
|
+
const pick = (pairs) => Object.fromEntries(pairs.flatMap(([from, to]) => (input[from] === undefined ? [] : [[to, input[from]]])));
|
|
182
|
+
switch (tool) {
|
|
183
|
+
// OpenCode 2 calls its shell tool `shell`.
|
|
184
|
+
case 'bash':
|
|
185
|
+
case 'shell':
|
|
186
|
+
return { name: 'Bash', input: pick([['command', 'command'], ['description', 'description'], ['timeout', 'timeout']]) };
|
|
187
|
+
case 'read':
|
|
188
|
+
return { name: 'Read', input: pick([['filePath', 'file_path'], ['offset', 'offset'], ['limit', 'limit']]) };
|
|
189
|
+
// An ask about a change names the file as `filepath` and carries its diff.
|
|
190
|
+
case 'write':
|
|
191
|
+
return { name: 'Write', input: pick([['filePath', 'file_path'], ['filepath', 'file_path'], ['content', 'content'], ['diff', 'diff']]) };
|
|
192
|
+
case 'edit':
|
|
193
|
+
return {
|
|
194
|
+
name: 'Edit',
|
|
195
|
+
input: pick([['filePath', 'file_path'], ['filepath', 'file_path'], ['oldString', 'old_string'], ['newString', 'new_string'], ['replaceAll', 'replace_all'], ['diff', 'diff']]),
|
|
196
|
+
};
|
|
197
|
+
case 'glob':
|
|
198
|
+
return { name: 'Glob', input: pick([['pattern', 'pattern'], ['path', 'path']]) };
|
|
199
|
+
case 'grep':
|
|
200
|
+
return { name: 'Grep', input: pick([['pattern', 'pattern'], ['path', 'path'], ['include', 'glob']]) };
|
|
201
|
+
case 'webfetch':
|
|
202
|
+
return { name: 'web_fetch', input: input };
|
|
203
|
+
case 'websearch':
|
|
204
|
+
return { name: 'web_search', input: input };
|
|
205
|
+
case 'todowrite':
|
|
206
|
+
return { name: 'TodoWrite', input: input };
|
|
207
|
+
case 'task':
|
|
208
|
+
case 'subagent':
|
|
209
|
+
return { name: 'Task', input: input };
|
|
210
|
+
case 'skill':
|
|
211
|
+
return { name: 'Skill', input: input };
|
|
212
|
+
case 'apply_patch':
|
|
213
|
+
case 'patch':
|
|
214
|
+
return { name: 'apply_patch', input: input };
|
|
215
|
+
default:
|
|
216
|
+
return { name: kind === 'execute' ? 'Bash' : tool, input: input };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* An OpenCode edit or new file as a diff. An edit's metadata has the unified
|
|
221
|
+
* diff (its `content` has only the replaced text, without line numbers); a
|
|
222
|
+
* write gives the content, and says whether the file `exists`ed before.
|
|
223
|
+
*/
|
|
224
|
+
function fileDiffOf(tool, input, rawOutput, cwd) {
|
|
225
|
+
const metadata = asRecord(asRecord(rawOutput).metadata);
|
|
226
|
+
const file = typeof input.filePath === 'string' ? input.filePath : undefined;
|
|
227
|
+
if (!file)
|
|
228
|
+
return undefined;
|
|
229
|
+
const path = diffPathIn(cwd, file);
|
|
230
|
+
if (tool === 'edit' && typeof metadata.diff === 'string') {
|
|
231
|
+
const hunks = parseUnifiedDiff(metadata.diff);
|
|
232
|
+
return hunks.length > 0 ? fileDiffFromPatch({ path, mode: 'update', hunks }) : undefined;
|
|
233
|
+
}
|
|
234
|
+
if (tool === 'write' && metadata.exists === false && typeof input.content === 'string') {
|
|
235
|
+
return fileDiffFromText({ path, mode: 'create', before: '', after: input.content });
|
|
236
|
+
}
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
/** The images of a finished call (an image file OpenCode read, screenshots an MCP tool returned), in order. */
|
|
240
|
+
function toolImages(update) {
|
|
241
|
+
return (update.content ?? []).flatMap((part) => {
|
|
242
|
+
if (part.type !== 'content')
|
|
243
|
+
return [];
|
|
244
|
+
const block = part.content;
|
|
245
|
+
return block.type === 'image' && typeof block.mimeType === 'string' && typeof block.data === 'string' ? [{ mediaType: block.mimeType, base64: block.data }] : [];
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function toolOutput(update) {
|
|
249
|
+
const texts = (update.content ?? []).flatMap((part) => {
|
|
250
|
+
if (part.type === 'content' && part.content.type === 'text' && typeof part.content.text === 'string')
|
|
251
|
+
return [part.content.text];
|
|
252
|
+
if (part.type === 'diff')
|
|
253
|
+
return [`${part.path}\n${part.newText}`];
|
|
254
|
+
return [];
|
|
255
|
+
});
|
|
256
|
+
return texts.join('\n');
|
|
257
|
+
}
|
|
258
|
+
function textOf(content) {
|
|
259
|
+
const block = content;
|
|
260
|
+
return block && block.type === 'text' && typeof block.text === 'string' ? block.text : '';
|
|
261
|
+
}
|
|
262
|
+
function asRecord(value) {
|
|
263
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {};
|
|
264
|
+
}
|
|
265
|
+
export function toTokenUsage(usage) {
|
|
266
|
+
return {
|
|
267
|
+
inputTokens: usage.inputTokens ?? 0,
|
|
268
|
+
outputTokens: (usage.outputTokens ?? 0) + (usage.thoughtTokens ?? 0),
|
|
269
|
+
...(usage.cachedReadTokens ? { cacheReadTokens: usage.cachedReadTokens } : {}),
|
|
270
|
+
...(usage.cachedWriteTokens ? { cacheCreationTokens: usage.cachedWriteTokens } : {}),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/** The person's message as ACP content: text, images, and documents as embedded resources. */
|
|
274
|
+
export function toAcpPrompt(prompt) {
|
|
275
|
+
return prompt.flatMap((block) => {
|
|
276
|
+
if (block.type === 'text')
|
|
277
|
+
return block.text ? [{ type: 'text', text: block.text }] : [];
|
|
278
|
+
if (block.type === 'image')
|
|
279
|
+
return [{ type: 'image', mimeType: block.mediaType, data: block.data }];
|
|
280
|
+
if (block.type === 'document') {
|
|
281
|
+
const name = block.name ?? 'document';
|
|
282
|
+
return [{ type: 'resource', resource: { uri: `attachment:///${encodeURIComponent(name)}`, mimeType: block.mediaType, blob: block.data } }];
|
|
283
|
+
}
|
|
284
|
+
return [];
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
export function promptText(prompt) {
|
|
288
|
+
return prompt.flatMap((block) => (block.type === 'text' ? [block.text] : [])).join('\n');
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBhJ;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAUT;IACA;IAVF,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,IAAI,GAAG,EAAE,CAAC;IACV,OAAO,GAAG,EAAE,CAAC;IACrB,gFAAgF;IACxE,KAAK,GAAG,CAAC,CAAC;IACD,UAAU,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvD,sFAAsF;IACtF,YACmB,eAAuB,EACvB,MAAM,EAAE;QADR,oBAAe,GAAf,eAAe,CAAQ;QACvB,QAAG,GAAH,GAAG,CAAK;IACxB,CAAC;IAEJ,MAAM,CAAC,MAAwB;QAC7B,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC;YAC7B,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;gBACtB,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAqB,EAAE,IAAI,CAAC,CAAC;YACpD,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAqB,EAAE,KAAK,CAAC,CAAC;YACrD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,QAAqB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC;QACrD,MAAM,KAAK,GAAc,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC3G,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACjH,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACnF,CAAC;IAED,0EAA0E;IAC1E,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC;IAEO,QAAQ,CAAC,MAAmB,EAAE,KAAc;QAClD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACpD,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACvG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC;QAE1E,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,gGAAgG;gBAChG,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACjF,2EAA2E;gBAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAC5F,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,KAAK,WAAW;oBAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE;oBACnF,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,IAAI,qBAAqB,EAAE,CAC5G,CAAC;gBACF,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzH,wFAAwF;YACxF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1H,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,KAAK,GACT,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;oBAC5C,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;wBACrD,CAAC,CAAC,MAAM,CAAC;YACX,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,KAAK,WAAW;gBAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC7E,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,iBAAiB,EAAE,CACtG,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6GAA6G;IACrG,IAAI,CAAC,OAAgB;QAC3B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAChB,oEAAoE;QACpE,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/G,OAAO;YACL,GAAG,IAAI,CAAC,YAAY,EAAE;YACtB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE;YACtE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;SACnF,CAAC;IACJ,CAAC;IAEO,IAAI,CAAC,MAAc,EAAE,KAAgB;QAC3C,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3D,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAEO,SAAS,CAAC,UAAmC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAEO,YAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;CACF;AAED,kKAAkK;AAClK,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1E,8GAA8G;AAC9G,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAC7D,gFAAgF;AAChF,MAAM,kBAAkB,GAAG,0DAA0D,CAAC;AACtF,MAAM,iBAAiB,GAAG,2FAA2F,CAAC;AAEtH,SAAS,eAAe,CAAC,MAAc,EAAE,KAA8B;IACrE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAsB,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtI,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC9M,CAAC;AAED,sGAAsG;AACtG,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,KAAK,GAAG,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAA6B,EAAE,KAA8B;IACnG,MAAM,IAAI,GAAG,CAAC,KAA+C,EAA2B,EAAE,CACxF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5G,QAAQ,IAAI,EAAE,CAAC;QACb,2CAA2C;QAC3C,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzH,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,2EAA2E;QAC3E,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1I,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;aAC/K,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC7C,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACzC,KAAK,aAAa,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC/C;YACE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,KAA8B,EAAE,SAAkB,EAAE,GAAW;IAC/F,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvF,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+GAA+G;AAC/G,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAA+D,CAAC;QACnF,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnK,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,MAAM,CAAC,OAAgB;IAC9B,MAAM,KAAK,GAAG,OAAyD,CAAC;IACxE,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAe;IAC1C,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;QACnC,YAAY,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QACpE,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CAAC,MAAmC;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAqB,EAAE;QACjD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC;YACtC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7I,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,84 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/plugin-provider-acp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.45.0",
|
|
4
|
+
"description": "Agent connections over the Agent Client Protocol for moxxy: OpenCode itself does the work through `opencode acp`, on the person's own OpenCode setup, while Moxxy shows it, answers its permission asks, steers plan and goal mode, and lends its own tools over MCP.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"moxxy",
|
|
7
|
+
"agent",
|
|
8
|
+
"provider",
|
|
9
|
+
"acp",
|
|
10
|
+
"opencode",
|
|
11
|
+
"llm"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://moxxy.ai",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/moxxy-ai/moxxy/issues"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/moxxy-ai/moxxy.git",
|
|
20
|
+
"directory": "packages/plugin-provider-acp"
|
|
21
|
+
},
|
|
22
|
+
"author": "Michal Makowski <michal.makowski97@gmail.com>",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"type": "module",
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"src"
|
|
39
|
+
],
|
|
40
|
+
"moxxy": {
|
|
41
|
+
"plugin": {
|
|
42
|
+
"entry": "./dist/index.js",
|
|
43
|
+
"kind": "provider"
|
|
44
|
+
},
|
|
45
|
+
"catalog": {
|
|
46
|
+
"label": "OpenCode agent",
|
|
47
|
+
"description": "OpenCode does the work with your own OpenCode setup and models; Moxxy shows it and lends its browser and tools.",
|
|
48
|
+
"provides": [
|
|
49
|
+
{
|
|
50
|
+
"category": "provider",
|
|
51
|
+
"name": "opencode"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"provider": {
|
|
55
|
+
"auth": "oauth",
|
|
56
|
+
"defaultModel": "opencode/big-pickle"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@moxxy/agent-connection-kit": "0.1.0",
|
|
62
|
+
"@moxxy/sdk": "0.45.0"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@modelcontextprotocol/sdk": "^1.31.0",
|
|
66
|
+
"@types/node": "^22.20.5",
|
|
67
|
+
"typescript": "^6.0.3",
|
|
68
|
+
"vitest": "^5.0.3",
|
|
69
|
+
"zod": "^4.6.6",
|
|
70
|
+
"@moxxy/core": "0.45.0",
|
|
71
|
+
"@moxxy/mode-default": "0.45.0",
|
|
72
|
+
"@moxxy/mode-goal": "0.45.0",
|
|
73
|
+
"@moxxy/mode-plan": "0.45.0",
|
|
74
|
+
"@moxxy/tsconfig": "0.0.0",
|
|
75
|
+
"@moxxy/vitest-preset": "0.0.0",
|
|
76
|
+
"@moxxy/testing": "0.0.75"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"build": "tsc -p tsconfig.json",
|
|
80
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
81
|
+
"test": "vitest run",
|
|
82
|
+
"clean": "rm -rf dist .turbo"
|
|
83
|
+
}
|
|
6
84
|
}
|