thinkwell 0.5.5 → 0.5.6
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/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +207 -279
- package/dist/agent.js.map +1 -1
- package/dist/build.js +44 -98
- package/dist/cli/build.js +92 -227
- package/dist/cli/bundle.js +570 -1136
- package/dist/cli/check.js +125 -214
- package/dist/cli/commands.js +63 -177
- package/dist/cli/compiler-host.js +81 -190
- package/dist/cli/dependency-check.js +125 -269
- package/dist/cli/dependency-errors.js +12 -84
- package/dist/cli/fmt.js +1 -13
- package/dist/cli/init-command.js +21 -68
- package/dist/cli/init.js +90 -220
- package/dist/cli/loader.js +95 -361
- package/dist/cli/new-command.js +25 -73
- package/dist/cli/package-manager.js +50 -117
- package/dist/cli/schema.js +89 -245
- package/dist/cli/workspace.js +92 -226
- package/dist/connectors/index.js +1 -7
- package/dist/generated/features.d.ts +5 -0
- package/dist/generated/features.d.ts.map +1 -0
- package/dist/generated/features.js +4 -0
- package/dist/generated/features.js.map +1 -0
- package/dist/index.js +0 -5
- package/dist/schema.js +3 -36
- package/dist/session.js +50 -82
- package/dist/think-builder.d.ts.map +1 -1
- package/dist/think-builder.js +269 -370
- package/dist/think-builder.js.map +1 -1
- package/dist/thought-event.d.ts +1 -0
- package/dist/thought-event.d.ts.map +1 -1
- package/dist/thought-event.js +0 -1
- package/dist/thought-stream.js +60 -96
- package/dist-pkg/acp.cjs +13385 -1876
- package/dist-pkg/cli-build.cjs +171 -369
- package/dist-pkg/cli-bundle.cjs +289 -690
- package/dist-pkg/cli-check.cjs +202 -415
- package/dist-pkg/cli-dependency-check.cjs +39 -82
- package/dist-pkg/cli-dependency-errors.cjs +9 -41
- package/dist-pkg/cli-loader.cjs +90 -173
- package/dist-pkg/protocol.cjs +2 -8
- package/dist-pkg/thinkwell.cjs +876 -1842
- package/package.json +7 -6
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGpB,KAAK,mBAAmB,EAMzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EAOV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAGpB,KAAK,mBAAmB,EAMzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EAOV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EACV,eAAe,IAAI,kBAAkB,EACrC,YAAY,IAAI,eAAe,EAChC,MAAM,0BAA0B,CAAC;AAIlC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAcvF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,oBAAoB,CAAC;IACjC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7C,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,KAAK;IACpB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA2JD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAW/E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,GAAG,IAAI,CAYtF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,mBAAmB,GAAG,YAAY,GAAG,IAAI,CAmE1F;AAkDD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACpF,wBAAsB,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/agent.js
CHANGED
|
@@ -1,303 +1,231 @@
|
|
|
1
|
-
import { ClientSideConnection
|
|
2
|
-
import { Conductor, fromCommands, createChannelPair
|
|
3
|
-
import { McpOverAcpHandler
|
|
1
|
+
import { ClientSideConnection } from "@agentclientprotocol/sdk";
|
|
2
|
+
import { Conductor, fromCommands, createChannelPair } from "@thinkwell/conductor";
|
|
3
|
+
import { McpOverAcpHandler } from "@thinkwell/acp";
|
|
4
|
+
import { features } from "./generated/features.js";
|
|
4
5
|
import { createPlan } from "./think-builder.js";
|
|
5
6
|
import { Session } from "./session.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*/
|
|
7
|
+
import { appendFileSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
9
|
const AGENT_COMMANDS = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
/** Symbol used to prevent external construction of AgentImpl. */
|
|
18
|
-
const AGENT_KEY = Symbol("Agent");
|
|
19
|
-
/**
|
|
20
|
-
* @internal
|
|
21
|
-
*/
|
|
10
|
+
claude: "npx -y @zed-industries/claude-agent-acp",
|
|
11
|
+
codex: "npx -y @zed-industries/codex-acp",
|
|
12
|
+
gemini: "npx -y @google/gemini-cli --experimental-acp",
|
|
13
|
+
kiro: "kiro-cli acp",
|
|
14
|
+
opencode: "opencode acp",
|
|
15
|
+
auggie: "auggie --acp"
|
|
16
|
+
}, AGENT_KEY = /* @__PURE__ */ Symbol("Agent");
|
|
22
17
|
class AgentImpl {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
// Conductor errors are already logged, just ensure we don't throw
|
|
49
|
-
console.error('[Agent.close] Conductor promise error:', error);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async _initialize() {
|
|
53
|
-
if (this._conn.initialized)
|
|
54
|
-
return;
|
|
55
|
-
await this._conn.connection.initialize({
|
|
56
|
-
protocolVersion: 1,
|
|
57
|
-
clientCapabilities: {},
|
|
58
|
-
});
|
|
59
|
-
this._conn.initialized = true;
|
|
18
|
+
_conn;
|
|
19
|
+
constructor(key, conn) {
|
|
20
|
+
if (key !== AGENT_KEY)
|
|
21
|
+
throw new Error("Agent cannot be constructed directly. Use open() instead.");
|
|
22
|
+
this._conn = conn;
|
|
23
|
+
}
|
|
24
|
+
think(schema) {
|
|
25
|
+
return createPlan(this._conn, schema);
|
|
26
|
+
}
|
|
27
|
+
async createSession(options) {
|
|
28
|
+
await this._initialize();
|
|
29
|
+
const request = {
|
|
30
|
+
cwd: options?.cwd ?? process.cwd(),
|
|
31
|
+
mcpServers: []
|
|
32
|
+
}, response = await this._conn.connection.newSession(request);
|
|
33
|
+
return new Session(this._conn, response.sessionId, options);
|
|
34
|
+
}
|
|
35
|
+
async close() {
|
|
36
|
+
await this._conn.conductor.shutdown();
|
|
37
|
+
try {
|
|
38
|
+
await this._conn.conductorPromise;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error("[Agent.close] Conductor promise error:", error);
|
|
60
41
|
}
|
|
42
|
+
}
|
|
43
|
+
async _initialize() {
|
|
44
|
+
this._conn.initialized || (await this._conn.connection.initialize({
|
|
45
|
+
protocolVersion: 1,
|
|
46
|
+
clientCapabilities: {}
|
|
47
|
+
}), this._conn.initialized = !0);
|
|
48
|
+
}
|
|
61
49
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Convert a ComponentConnection to the SDK's Stream interface.
|
|
64
|
-
*/
|
|
65
50
|
function componentConnectionToStream(connection) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
close() {
|
|
86
|
-
connection.close();
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
return { readable, writable };
|
|
51
|
+
const readable = new ReadableStream({
|
|
52
|
+
async start(controller) {
|
|
53
|
+
try {
|
|
54
|
+
for await (const message of connection.messages)
|
|
55
|
+
controller.enqueue(message);
|
|
56
|
+
controller.close();
|
|
57
|
+
} catch (error) {
|
|
58
|
+
controller.error(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}), writable = new WritableStream({
|
|
62
|
+
write(message) {
|
|
63
|
+
connection.send(message);
|
|
64
|
+
},
|
|
65
|
+
close() {
|
|
66
|
+
connection.close();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return { readable, writable };
|
|
90
70
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Create a Client implementation that handles incoming agent requests
|
|
93
|
-
*/
|
|
94
71
|
function createClient(conn, mcpHandler) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
};
|
|
72
|
+
return {
|
|
73
|
+
sessionUpdate(notification) {
|
|
74
|
+
const { sessionId } = notification, handler = conn.sessionHandlers.get(sessionId);
|
|
75
|
+
if (!handler)
|
|
76
|
+
return console.error(`No handler for session: ${sessionId}`), Promise.resolve();
|
|
77
|
+
const update = convertNotification(notification);
|
|
78
|
+
return update && handler.pushUpdate(update), Promise.resolve();
|
|
79
|
+
},
|
|
80
|
+
requestPermission(request) {
|
|
81
|
+
const response = {
|
|
82
|
+
outcome: {
|
|
83
|
+
outcome: "selected",
|
|
84
|
+
optionId: request.options[0]?.optionId ?? "approve"
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
if (features.LOG_PERMISSIONS) {
|
|
88
|
+
const logDir = process.env.THINKWELL_LOG_DIR ?? process.cwd(), logPath = join(logDir, "permissions.ndjson"), record = {
|
|
89
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
90
|
+
request,
|
|
91
|
+
response
|
|
92
|
+
};
|
|
93
|
+
appendFileSync(logPath, JSON.stringify(record) + `
|
|
94
|
+
`);
|
|
95
|
+
}
|
|
96
|
+
return Promise.resolve(response);
|
|
97
|
+
},
|
|
98
|
+
async extMethod(method, params) {
|
|
99
|
+
if (mcpHandler.isMcpRequest(method))
|
|
100
|
+
return await mcpHandler.routeRequest(method, params) ?? {};
|
|
101
|
+
throw new Error(`Unknown extension method: ${method}`);
|
|
102
|
+
},
|
|
103
|
+
async extNotification(method, params) {
|
|
104
|
+
mcpHandler.isMcpRequest(method) && await mcpHandler.routeRequest(method, params);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
131
107
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Convert an ACP ContentBlock to a Thinkwell ContentBlock, or null if unsupported.
|
|
134
|
-
* @internal Exported for testing.
|
|
135
|
-
*/
|
|
136
108
|
export function convertContentBlock(block) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
109
|
+
switch (block.type) {
|
|
110
|
+
case "text":
|
|
111
|
+
return { type: "text", text: block.text };
|
|
112
|
+
case "image":
|
|
113
|
+
return { type: "image", data: block.data, mimeType: block.mimeType };
|
|
114
|
+
case "resource_link":
|
|
115
|
+
return { type: "resource_link", uri: block.uri, name: block.name ?? void 0 };
|
|
116
|
+
default:
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
147
119
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Convert ACP ToolCallContent to Thinkwell ToolContent, or null if unsupported.
|
|
150
|
-
* @internal Exported for testing.
|
|
151
|
-
*/
|
|
152
120
|
export function convertToolCallContent(content) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return null;
|
|
162
|
-
return { type: "content", content: block };
|
|
163
|
-
}
|
|
121
|
+
switch (content.type) {
|
|
122
|
+
case "diff":
|
|
123
|
+
return { type: "diff", path: content.path, oldText: content.oldText ?? "", newText: content.newText };
|
|
124
|
+
case "terminal":
|
|
125
|
+
return { type: "terminal", terminalId: content.terminalId };
|
|
126
|
+
case "content": {
|
|
127
|
+
const block = convertContentBlock(content.content);
|
|
128
|
+
return block ? { type: "content", content: block } : null;
|
|
164
129
|
}
|
|
130
|
+
}
|
|
165
131
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Convert ACP notification to ThoughtEvent.
|
|
168
|
-
* @internal Exported for testing.
|
|
169
|
-
*/
|
|
170
132
|
export function convertNotification(notification) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
case "tool_call": {
|
|
188
|
-
return {
|
|
189
|
-
type: "tool_start",
|
|
190
|
-
id: update.toolCallId,
|
|
191
|
-
title: update.title,
|
|
192
|
-
kind: update.kind,
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
case "tool_call_update": {
|
|
196
|
-
const status = update.status ?? "in_progress";
|
|
197
|
-
if (status === "completed" || status === "failed") {
|
|
198
|
-
return { type: "tool_done", id: update.toolCallId, status };
|
|
199
|
-
}
|
|
200
|
-
return {
|
|
201
|
-
type: "tool_update",
|
|
202
|
-
id: update.toolCallId,
|
|
203
|
-
status,
|
|
204
|
-
content: update.content?.map(convertToolCallContent).filter((c) => c !== null),
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
case "plan": {
|
|
208
|
-
return {
|
|
209
|
-
type: "plan",
|
|
210
|
-
entries: update.entries.map((e) => ({
|
|
211
|
-
content: e.content,
|
|
212
|
-
status: e.status,
|
|
213
|
-
priority: e.priority,
|
|
214
|
-
})),
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
case "user_message_chunk":
|
|
218
|
-
case "available_commands_update":
|
|
219
|
-
case "current_mode_update":
|
|
220
|
-
break;
|
|
133
|
+
const { update } = notification;
|
|
134
|
+
switch (update.sessionUpdate) {
|
|
135
|
+
case "agent_thought_chunk": {
|
|
136
|
+
const content = update.content;
|
|
137
|
+
if (content.type === "text")
|
|
138
|
+
return { type: "thought", text: content.text };
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case "agent_message_chunk": {
|
|
142
|
+
const content = update.content;
|
|
143
|
+
if (content.type === "text")
|
|
144
|
+
return { type: "message", text: content.text };
|
|
145
|
+
break;
|
|
221
146
|
}
|
|
222
|
-
|
|
147
|
+
case "tool_call": {
|
|
148
|
+
const event = {
|
|
149
|
+
type: "tool_start",
|
|
150
|
+
id: update.toolCallId,
|
|
151
|
+
title: update.title,
|
|
152
|
+
kind: update.kind
|
|
153
|
+
};
|
|
154
|
+
return update.rawInput !== void 0 && (event.input = update.rawInput), event;
|
|
155
|
+
}
|
|
156
|
+
case "tool_call_update": {
|
|
157
|
+
const status = update.status ?? "in_progress";
|
|
158
|
+
return status === "completed" || status === "failed" ? { type: "tool_done", id: update.toolCallId, status } : {
|
|
159
|
+
type: "tool_update",
|
|
160
|
+
id: update.toolCallId,
|
|
161
|
+
status,
|
|
162
|
+
content: update.content?.map(convertToolCallContent).filter((c) => c !== null)
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
case "plan":
|
|
166
|
+
return {
|
|
167
|
+
type: "plan",
|
|
168
|
+
entries: update.entries.map((e) => ({
|
|
169
|
+
content: e.content,
|
|
170
|
+
status: e.status,
|
|
171
|
+
priority: e.priority
|
|
172
|
+
}))
|
|
173
|
+
};
|
|
174
|
+
case "user_message_chunk":
|
|
175
|
+
case "available_commands_update":
|
|
176
|
+
case "current_mode_update":
|
|
177
|
+
case "config_option_update":
|
|
178
|
+
case "session_info_update":
|
|
179
|
+
case "usage_update":
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
223
183
|
}
|
|
224
|
-
/**
|
|
225
|
-
* Parse a command string into a CommandSpec with env vars attached.
|
|
226
|
-
*/
|
|
227
184
|
function parseCommandWithEnv(command, env) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
185
|
+
const parts = command.split(/\s+/);
|
|
186
|
+
return {
|
|
187
|
+
command: parts[0],
|
|
188
|
+
args: parts.slice(1),
|
|
189
|
+
env
|
|
190
|
+
};
|
|
234
191
|
}
|
|
235
|
-
/**
|
|
236
|
-
* Resolve the agent command string from the arguments to `open()`,
|
|
237
|
-
* applying environment variable overrides.
|
|
238
|
-
*/
|
|
239
192
|
function resolveCommand(nameOrOptions, options) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
`Valid names: ${Object.keys(AGENT_COMMANDS).join(", ")}`);
|
|
251
|
-
}
|
|
252
|
-
const opts = typeof nameOrOptions === "string" ? options : nameOrOptions;
|
|
253
|
-
return { command: AGENT_COMMANDS[envAgent], options: opts };
|
|
254
|
-
}
|
|
255
|
-
// No env override — resolve from arguments
|
|
256
|
-
if (typeof nameOrOptions === "string") {
|
|
257
|
-
return { command: AGENT_COMMANDS[nameOrOptions], options };
|
|
258
|
-
}
|
|
259
|
-
return { command: nameOrOptions.cmd, options: nameOrOptions };
|
|
193
|
+
const envCmd = process.env.THINKWELL_AGENT_CMD, envAgent = process.env.THINKWELL_AGENT;
|
|
194
|
+
if (envCmd)
|
|
195
|
+
return { command: envCmd, options: typeof nameOrOptions == "string" ? options : nameOrOptions };
|
|
196
|
+
if (envAgent) {
|
|
197
|
+
if (!(envAgent in AGENT_COMMANDS))
|
|
198
|
+
throw new Error(`Unknown agent name in $THINKWELL_AGENT: '${envAgent}'. Valid names: ${Object.keys(AGENT_COMMANDS).join(", ")}`);
|
|
199
|
+
const opts = typeof nameOrOptions == "string" ? options : nameOrOptions;
|
|
200
|
+
return { command: AGENT_COMMANDS[envAgent], options: opts };
|
|
201
|
+
}
|
|
202
|
+
return typeof nameOrOptions == "string" ? { command: AGENT_COMMANDS[nameOrOptions], options } : { command: nameOrOptions.cmd, options: nameOrOptions };
|
|
260
203
|
}
|
|
261
204
|
export async function open(nameOrOptions, maybeOptions) {
|
|
262
|
-
|
|
263
|
-
//
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
//
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
conn.connection = clientConnection;
|
|
289
|
-
// Create a connector that provides the other end of the channel
|
|
290
|
-
const clientConnector = {
|
|
291
|
-
async connect() {
|
|
292
|
-
return pair.right;
|
|
293
|
-
},
|
|
294
|
-
};
|
|
295
|
-
// Start the conductor's message loop in the background
|
|
296
|
-
conn.conductorPromise = conductor.connect(clientConnector);
|
|
297
|
-
// Handle conductor errors/completion
|
|
298
|
-
conn.conductorPromise.catch((error) => {
|
|
299
|
-
console.error("Conductor error:", error);
|
|
300
|
-
});
|
|
301
|
-
return new AgentImpl(AGENT_KEY, conn);
|
|
205
|
+
const { command, options } = resolveCommand(nameOrOptions, maybeOptions), agentEnv = {
|
|
206
|
+
// Strip CLAUDECODE to prevent the nested-session guard from blocking
|
|
207
|
+
// the agent's Claude Code subprocess when thinkwell runs inside Claude Code.
|
|
208
|
+
...features.STRIP_CLAUDECODE_ENV ? { CLAUDECODE: "" } : {},
|
|
209
|
+
...options?.env
|
|
210
|
+
}, commandSpec = parseCommandWithEnv(command, agentEnv), conductor = new Conductor({
|
|
211
|
+
instantiator: fromCommands([commandSpec])
|
|
212
|
+
}), pair = createChannelPair(), stream = componentConnectionToStream(pair.left), mcpHandler = new McpOverAcpHandler(), conn = {
|
|
213
|
+
conductor,
|
|
214
|
+
connection: null,
|
|
215
|
+
// Set below after creating the client
|
|
216
|
+
mcpHandler,
|
|
217
|
+
sessionHandlers: /* @__PURE__ */ new Map(),
|
|
218
|
+
initialized: !1,
|
|
219
|
+
conductorPromise: null
|
|
220
|
+
// Set below after starting the conductor
|
|
221
|
+
}, clientConnection = new ClientSideConnection((_agent) => createClient(conn, mcpHandler), stream);
|
|
222
|
+
conn.connection = clientConnection;
|
|
223
|
+
const clientConnector = {
|
|
224
|
+
async connect() {
|
|
225
|
+
return pair.right;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
return conn.conductorPromise = conductor.connect(clientConnector), conn.conductorPromise.catch((error) => {
|
|
229
|
+
console.error("Conductor error:", error);
|
|
230
|
+
}), new AgentImpl(AGENT_KEY, conn);
|
|
302
231
|
}
|
|
303
|
-
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GASrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,GAKlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GASrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,iBAAiB,GAKlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC;;GAEG;AACH,MAAM,cAAc,GAA8B;IAChD,MAAM,EAAE,yCAAyC;IACjD,KAAK,EAAE,kCAAkC;IACzC,MAAM,EAAE,8CAA8C;IACtD,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,cAAc;CACvB,CAAC;AA8KF,iEAAiE;AACjE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,SAAS;IACI,KAAK,CAAkB;IAExC,YAAY,GAAW,EAAE,IAAqB;QAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAS,MAA8B;QAC1C,OAAO,UAAU,CAAS,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAwB;QAC1C,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAsB;YACjC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YAClC,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kEAAkE;YAClE,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QAEnC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YACrC,eAAe,EAAE,CAAC;YAClB,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,UAA+B;IAClE,kDAAkD;IAClD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAa;QAC9C,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAChD,UAAU,CAAC,OAAO,CAAC,OAAqB,CAAC,CAAC;gBAC5C,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,uDAAuD;IACvD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAa;QAC9C,KAAK,CAAC,OAAO;YACX,UAAU,CAAC,IAAI,CAAC,OAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK;YACH,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,IAAqB,EACrB,UAA6B;IAE7B,OAAO;QACL,aAAa,CAAC,YAAiC;YAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;gBACtD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,iBAAiB,CACf,OAAiC;YAEjC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,QAAQ,GAA8B;gBAC1C,OAAO,EAAE;oBACP,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,SAAS;iBAC7C;aACF,CAAC;YACF,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,OAAO;oBACP,QAAQ;iBACT,CAAC;gBACF,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,SAAS,CACb,MAAc,EACd,MAA+B;YAE/B,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAQ,MAAkC,IAAI,EAAE,CAAC;YACnD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,MAA+B;YAE/B,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvE,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QAClF;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAA2B;IAChE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACxG,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9D,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAiC;IACnE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IAEhC,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7B,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACjD,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACjD,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAiB;gBAC1B,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,MAAM,CAAC,UAAU;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;YACF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAClC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;YAC9C,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC9D,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,MAAM,CAAC,UAAU;gBACrB,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACjG,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClC,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAED,KAAK,oBAAoB,CAAC;QAC1B,KAAK,2BAA2B,CAAC;QACjC,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,cAAc;YACjB,MAAM;IACV,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe,EAAE,GAA2B;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACjB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACpB,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,aAA+C,EAC/C,OAAsB;IAEtB,iDAAiD;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAE7C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,QAAQ,IAAI,cAAc,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,4CAA4C,QAAQ,KAAK;gBACzD,gBAAgB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzD,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,QAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AAChE,CAAC;AAkBD,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,aAA+C,EAC/C,YAA2B;IAE3B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAA2B;QACvC,qEAAqE;QACrE,6EAA6E;QAC7E,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,OAAO,EAAE,GAAG;KAChB,CAAC;IACF,MAAM,WAAW,GAAgB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC9B,YAAY,EAAE,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;KAC1C,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IAEjC,uDAAuD;IACvD,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtD,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAE3C,6BAA6B;IAC7B,MAAM,IAAI,GAAoB;QAC5B,SAAS;QACT,UAAU,EAAE,IAAK,EAAE,sCAAsC;QACzD,UAAU;QACV,eAAe,EAAE,IAAI,GAAG,EAAE;QAC1B,WAAW,EAAE,KAAK;QAClB,gBAAgB,EAAE,IAAK,EAAE,yCAAyC;KACnE,CAAC;IAEF,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,IAAI,oBAAoB,CAC/C,CAAC,MAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,EACpD,MAAM,CACP,CAAC;IACF,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAEnC,gEAAgE;IAChE,MAAM,eAAe,GAAuB;QAC1C,KAAK,CAAC,OAAO;YACX,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;KACF,CAAC;IAEF,uDAAuD;IACvD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAE3D,qCAAqC;IACrC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
|