@supen-ai/cli 1.3.3 → 1.4.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 +1 -1
- package/daemon/dist/agent-sdk/driver-output-ui.d.ts +1 -1
- package/daemon/dist/agent-sdk/driver-output-ui.d.ts.map +1 -1
- package/daemon/dist/agent-sdk/driver-output-ui.js +10 -275
- package/daemon/dist/agent-sdk/driver-output-ui.js.map +1 -1
- package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.d.ts.map +1 -1
- package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.js +0 -2
- package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.js.map +1 -1
- package/daemon/dist/agent-sdk/drivers/registry.d.ts +2 -8
- package/daemon/dist/agent-sdk/drivers/registry.d.ts.map +1 -1
- package/daemon/dist/agent-sdk/drivers/registry.js +7 -138
- package/daemon/dist/agent-sdk/drivers/registry.js.map +1 -1
- package/daemon/dist/agent-sdk/index.d.ts +0 -11
- package/daemon/dist/agent-sdk/index.d.ts.map +1 -1
- package/daemon/dist/agent-sdk/index.js +0 -11
- package/daemon/dist/agent-sdk/index.js.map +1 -1
- package/daemon/dist/agent-sdk/session-manager.d.ts +1 -1
- package/daemon/dist/agent-sdk/session-manager.d.ts.map +1 -1
- package/daemon/dist/agent-sdk/session-manager.js +1 -2
- package/daemon/dist/agent-sdk/session-manager.js.map +1 -1
- package/daemon/dist/channels/acp.d.ts.map +1 -1
- package/daemon/dist/channels/acp.js +2 -3
- package/daemon/dist/channels/acp.js.map +1 -1
- package/daemon/dist/channels/http-routes.js +6 -6
- package/daemon/dist/channels/http-routes.js.map +1 -1
- package/daemon/dist/core/config.d.ts +1 -1
- package/daemon/dist/core/config.d.ts.map +1 -1
- package/daemon/dist/core/config.js +1 -1
- package/daemon/dist/core/config.js.map +1 -1
- package/daemon/dist/core/cortex.d.ts.map +1 -1
- package/daemon/dist/core/cortex.js +90 -222
- package/daemon/dist/core/cortex.js.map +1 -1
- package/daemon/dist/core/env.js +1 -1
- package/daemon/dist/core/gateway.d.ts.map +1 -1
- package/daemon/dist/core/gateway.js +1 -11
- package/daemon/dist/core/gateway.js.map +1 -1
- package/daemon/dist/core/loop-guard.d.ts +1 -1
- package/daemon/dist/core/loop-guard.js +1 -1
- package/daemon/dist/core/protocol-adapter.d.ts +1 -3
- package/daemon/dist/core/protocol-adapter.d.ts.map +1 -1
- package/daemon/dist/core/protocol-adapter.js +1 -3
- package/daemon/dist/core/protocol-adapter.js.map +1 -1
- package/daemon/dist/core/thread-runtime-state.d.ts.map +1 -1
- package/daemon/dist/core/thread-runtime-state.js +1 -37
- package/daemon/dist/core/thread-runtime-state.js.map +1 -1
- package/daemon/dist/http/routes/rpc.d.ts.map +1 -1
- package/daemon/dist/http/routes/rpc.js +16 -1
- package/daemon/dist/http/routes/rpc.js.map +1 -1
- package/daemon/dist/http/routes/system.d.ts +2 -0
- package/daemon/dist/http/routes/system.d.ts.map +1 -1
- package/daemon/dist/http/routes/system.js +487 -482
- package/daemon/dist/http/routes/system.js.map +1 -1
- package/daemon/dist/mcp/index.d.ts +2 -6
- package/daemon/dist/mcp/index.d.ts.map +1 -1
- package/daemon/dist/mcp/index.js +2 -6
- package/daemon/dist/mcp/index.js.map +1 -1
- package/daemon/dist/mcp/tools.d.ts +5 -7
- package/daemon/dist/mcp/tools.d.ts.map +1 -1
- package/daemon/dist/mcp/tools.js +4 -8
- package/daemon/dist/mcp/tools.js.map +1 -1
- package/daemon/dist/tools/built-ins.d.ts +9 -84
- package/daemon/dist/tools/built-ins.d.ts.map +1 -1
- package/daemon/dist/tools/built-ins.js +3 -3
- package/daemon/dist/tools/built-ins.js.map +1 -1
- package/daemon/dist/tools/local-tool.d.ts +7 -0
- package/daemon/dist/tools/local-tool.d.ts.map +1 -0
- package/daemon/dist/tools/local-tool.js +4 -0
- package/daemon/dist/tools/local-tool.js.map +1 -0
- package/daemon/dist/tools/skill-tools.d.ts +5 -8
- package/daemon/dist/tools/skill-tools.d.ts.map +1 -1
- package/daemon/dist/tools/skill-tools.js +6 -10
- package/daemon/dist/tools/skill-tools.js.map +1 -1
- package/daemon/package.json +6 -9
- package/dist/backend.js +5 -5
- package/dist/backend.js.map +1 -1
- package/dist/bootstrap.js +2 -6
- package/dist/bootstrap.js.map +1 -1
- package/dist/computer.js +1 -1
- package/dist/doctor.js +1 -1
- package/dist/doctor.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/repl.js +6 -66
- package/dist/repl.js.map +1 -1
- package/dist/service.js +2 -3
- package/dist/service.js.map +1 -1
- package/package.json +3 -6
- package/daemon/dist/agent-sdk/drivers/acpx-driver.d.ts +0 -21
- package/daemon/dist/agent-sdk/drivers/acpx-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/acpx-driver.js +0 -488
- package/daemon/dist/agent-sdk/drivers/acpx-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.d.ts +0 -5
- package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.js +0 -7
- package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.d.ts +0 -20
- package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.js +0 -264
- package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-driver.d.ts +0 -29
- package/daemon/dist/agent-sdk/drivers/claude-code-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-driver.js +0 -24
- package/daemon/dist/agent-sdk/drivers/claude-code-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-events.d.ts +0 -25
- package/daemon/dist/agent-sdk/drivers/claude-code-events.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-events.js +0 -58
- package/daemon/dist/agent-sdk/drivers/claude-code-events.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-items.d.ts +0 -41
- package/daemon/dist/agent-sdk/drivers/claude-code-items.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/claude-code-items.js +0 -77
- package/daemon/dist/agent-sdk/drivers/claude-code-items.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.d.ts +0 -5
- package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.js +0 -7
- package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-driver.d.ts +0 -28
- package/daemon/dist/agent-sdk/drivers/codex-exec-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-driver.js +0 -219
- package/daemon/dist/agent-sdk/drivers/codex-exec-driver.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-events.d.ts +0 -9
- package/daemon/dist/agent-sdk/drivers/codex-exec-events.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-events.js +0 -82
- package/daemon/dist/agent-sdk/drivers/codex-exec-events.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-items.d.ts +0 -9
- package/daemon/dist/agent-sdk/drivers/codex-exec-items.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/codex-exec-items.js +0 -86
- package/daemon/dist/agent-sdk/drivers/codex-exec-items.js.map +0 -1
- package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.d.ts +0 -17
- package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.d.ts.map +0 -1
- package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.js +0 -255
- package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.js.map +0 -1
- package/daemon/dist/core/sdk-wrapper.d.ts +0 -36
- package/daemon/dist/core/sdk-wrapper.d.ts.map +0 -1
- package/daemon/dist/core/sdk-wrapper.js +0 -533
- package/daemon/dist/core/sdk-wrapper.js.map +0 -1
- package/daemon/dist/skills/claude_code.d.ts +0 -25
- package/daemon/dist/skills/claude_code.d.ts.map +0 -1
- package/daemon/dist/skills/claude_code.js +0 -49
- package/daemon/dist/skills/claude_code.js.map +0 -1
|
@@ -1,533 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude-specific backend session implementation.
|
|
3
|
-
*
|
|
4
|
-
* This module remains the implementation detail used by the
|
|
5
|
-
* Supen Agent SDK ClaudeCode driver. New backend integrations
|
|
6
|
-
* should not call this file directly.
|
|
7
|
-
*/
|
|
8
|
-
import fs from 'fs';
|
|
9
|
-
import os from 'os';
|
|
10
|
-
import { createRequire } from 'module';
|
|
11
|
-
import path from 'path';
|
|
12
|
-
import { fileURLToPath } from 'url';
|
|
13
|
-
import { ClaudeCliDirectDriver } from '../agent-sdk/drivers/claude-cli-direct-driver.js';
|
|
14
|
-
import { DEFAULT_MODEL, getAgentModelConfig, agentPaths } from './config.js';
|
|
15
|
-
import { logger } from './logger.js';
|
|
16
|
-
import { getLlmToken } from './gateway.js';
|
|
17
|
-
import { SkillsRegistry } from '../skills/registry.js';
|
|
18
|
-
import { listLoadableEnabledSkillEntries } from '../skills/enabled.js';
|
|
19
|
-
import { inspectSkillRuntime, installSkillRuntime } from '../skills/runtime.js';
|
|
20
|
-
import { isPathWithin } from './security.js';
|
|
21
|
-
import { withRuntimeSpaceEnv } from './space-env.js';
|
|
22
|
-
const require = createRequire(import.meta.url);
|
|
23
|
-
const thisFileDir = typeof __dirname !== 'undefined'
|
|
24
|
-
? __dirname
|
|
25
|
-
: path.dirname(fileURLToPath(import.meta.url));
|
|
26
|
-
const resolvedWorkspaceRoot = path.resolve(thisFileDir, '../..');
|
|
27
|
-
const daemonBinDir = path.join(resolvedWorkspaceRoot, 'bin');
|
|
28
|
-
let cachedClaudeCliPath = null;
|
|
29
|
-
function resolveClaudeCliPath() {
|
|
30
|
-
if (cachedClaudeCliPath)
|
|
31
|
-
return cachedClaudeCliPath;
|
|
32
|
-
cachedClaudeCliPath =
|
|
33
|
-
process.env.CLAUDE_CODE_EXECUTABLE?.trim() ||
|
|
34
|
-
process.env.CLAUDE_PATH?.trim() ||
|
|
35
|
-
'claude';
|
|
36
|
-
return cachedClaudeCliPath;
|
|
37
|
-
}
|
|
38
|
-
function sanitizeSkillRuntimeName(name) {
|
|
39
|
-
const cleaned = name.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, '-');
|
|
40
|
-
return cleaned.replace(/^-+|-+$/g, '') || 'skill';
|
|
41
|
-
}
|
|
42
|
-
function resolveUserToolPathEntries() {
|
|
43
|
-
const homeDir = process.env.HOME || os.homedir();
|
|
44
|
-
if (!homeDir)
|
|
45
|
-
return [];
|
|
46
|
-
return [
|
|
47
|
-
path.join(homeDir, '.dotnet', 'tools'),
|
|
48
|
-
path.join(homeDir, '.local', 'bin'),
|
|
49
|
-
path.join(homeDir, 'bin'),
|
|
50
|
-
];
|
|
51
|
-
}
|
|
52
|
-
function resolveSkillRuntimePathEntries(agentId) {
|
|
53
|
-
const homeDir = process.env.HOME || os.homedir();
|
|
54
|
-
const supenHome = process.env.SUPEN_HOME || (homeDir ? path.join(homeDir, '.supen') : undefined);
|
|
55
|
-
const runtimeBins = supenHome
|
|
56
|
-
? resolveEnabledSkillEntries(agentId).map((entry) => path.join(supenHome, 'runtime', 'skills', sanitizeSkillRuntimeName(entry.skill.name), 'bin'))
|
|
57
|
-
: [];
|
|
58
|
-
return Array.from(new Set([...runtimeBins, ...resolveUserToolPathEntries()]));
|
|
59
|
-
}
|
|
60
|
-
function joinPathEntries(entries) {
|
|
61
|
-
return Array.from(new Set(entries.filter((entry) => !!entry && entry.trim().length > 0))).join(path.delimiter);
|
|
62
|
-
}
|
|
63
|
-
function resolveLocalMcpServersRoot() {
|
|
64
|
-
const candidates = [
|
|
65
|
-
process.env.MCP_SERVERS_ROOT,
|
|
66
|
-
path.join(process.env.HOME || '', 'work', 'mcp-servers'),
|
|
67
|
-
path.join(process.env.HOME || '', 'tc', 'mcp-servers'),
|
|
68
|
-
].filter((entry) => !!entry && entry.trim().length > 0);
|
|
69
|
-
for (const candidate of candidates) {
|
|
70
|
-
if (fs.existsSync(path.join(candidate, 'servers', 'office', 'index.mjs'))) {
|
|
71
|
-
return candidate;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return undefined;
|
|
75
|
-
}
|
|
76
|
-
function resolveAutomationMcpConfig(agentId, sessionId) {
|
|
77
|
-
const srcScheduler = path.join(resolvedWorkspaceRoot, 'src', 'bin', 'mcp-scheduler.ts');
|
|
78
|
-
const distScheduler = path.join(resolvedWorkspaceRoot, 'dist', 'bin', 'mcp-scheduler.js');
|
|
79
|
-
const mcpScript = fs.existsSync(srcScheduler) ? srcScheduler : distScheduler;
|
|
80
|
-
if (!fs.existsSync(mcpScript))
|
|
81
|
-
return undefined;
|
|
82
|
-
let command = process.execPath;
|
|
83
|
-
const args = [mcpScript];
|
|
84
|
-
if (mcpScript.endsWith('.ts')) {
|
|
85
|
-
try {
|
|
86
|
-
const tsxPkgPath = require.resolve('tsx/package.json', { paths: [thisFileDir] });
|
|
87
|
-
const candidate = path.join(path.dirname(tsxPkgPath), 'dist', 'cli.mjs');
|
|
88
|
-
if (fs.existsSync(candidate)) {
|
|
89
|
-
args.unshift(candidate);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
command = 'tsx';
|
|
93
|
-
// Keep a conservative fallback path if direct cli resolution fails.
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
command = 'tsx';
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
command,
|
|
102
|
-
args,
|
|
103
|
-
env: {
|
|
104
|
-
...withRuntimeSpaceEnv(process.env),
|
|
105
|
-
SUPEN_AGENT_ID: agentId,
|
|
106
|
-
...(sessionId ? { SUPEN_SESSION_ID: sessionId } : {}),
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
class AsyncMessageQueue {
|
|
111
|
-
queue = [];
|
|
112
|
-
readResolve;
|
|
113
|
-
readReject;
|
|
114
|
-
doneFlag = false;
|
|
115
|
-
errorValue;
|
|
116
|
-
enqueue(value) {
|
|
117
|
-
if (this.doneFlag)
|
|
118
|
-
return;
|
|
119
|
-
if (this.readResolve) {
|
|
120
|
-
const resolve = this.readResolve;
|
|
121
|
-
this.readResolve = undefined;
|
|
122
|
-
this.readReject = undefined;
|
|
123
|
-
resolve({ value, done: false });
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
this.queue.push(value);
|
|
127
|
-
}
|
|
128
|
-
done() {
|
|
129
|
-
this.doneFlag = true;
|
|
130
|
-
if (this.readResolve) {
|
|
131
|
-
const resolve = this.readResolve;
|
|
132
|
-
this.readResolve = undefined;
|
|
133
|
-
this.readReject = undefined;
|
|
134
|
-
resolve({ value: undefined, done: true });
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
error(error) {
|
|
138
|
-
this.errorValue = error;
|
|
139
|
-
if (this.readReject) {
|
|
140
|
-
const reject = this.readReject;
|
|
141
|
-
this.readResolve = undefined;
|
|
142
|
-
this.readReject = undefined;
|
|
143
|
-
reject(error);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
[Symbol.asyncIterator]() {
|
|
147
|
-
return {
|
|
148
|
-
next: async () => {
|
|
149
|
-
if (this.queue.length > 0) {
|
|
150
|
-
return { value: this.queue.shift(), done: false };
|
|
151
|
-
}
|
|
152
|
-
if (this.errorValue) {
|
|
153
|
-
throw this.errorValue;
|
|
154
|
-
}
|
|
155
|
-
if (this.doneFlag) {
|
|
156
|
-
return { value: undefined, done: true };
|
|
157
|
-
}
|
|
158
|
-
return new Promise((resolve, reject) => {
|
|
159
|
-
this.readResolve = resolve;
|
|
160
|
-
this.readReject = reject;
|
|
161
|
-
});
|
|
162
|
-
},
|
|
163
|
-
return: async () => {
|
|
164
|
-
this.done();
|
|
165
|
-
return { value: undefined, done: true };
|
|
166
|
-
},
|
|
167
|
-
throw: async (error) => {
|
|
168
|
-
this.error(error);
|
|
169
|
-
throw error;
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
const liveSessions = new Map();
|
|
175
|
-
const sessionCreationInFlight = new Map();
|
|
176
|
-
function resolveSdkModelAlias(model, providerId) {
|
|
177
|
-
if (!model)
|
|
178
|
-
return undefined;
|
|
179
|
-
const normalized = model.trim().toLowerCase();
|
|
180
|
-
if (!normalized)
|
|
181
|
-
return undefined;
|
|
182
|
-
if (providerId && providerId !== 'anthropic') {
|
|
183
|
-
return 'sonnet';
|
|
184
|
-
}
|
|
185
|
-
if (normalized === 'sonnet' || normalized === 'opus' || normalized === 'haiku') {
|
|
186
|
-
return normalized;
|
|
187
|
-
}
|
|
188
|
-
if (normalized.includes('haiku'))
|
|
189
|
-
return 'haiku';
|
|
190
|
-
if (normalized.includes('opus'))
|
|
191
|
-
return 'opus';
|
|
192
|
-
if (normalized.includes('sonnet') || normalized.includes('claude'))
|
|
193
|
-
return 'sonnet';
|
|
194
|
-
return model;
|
|
195
|
-
}
|
|
196
|
-
function resolveSelectedModel(agentId) {
|
|
197
|
-
return getAgentModelConfig(agentId, true)[0] || DEFAULT_MODEL;
|
|
198
|
-
}
|
|
199
|
-
export function shouldWaitForGatewayToken(agentId) {
|
|
200
|
-
if (getLlmToken())
|
|
201
|
-
return false;
|
|
202
|
-
const selectedModel = resolveSelectedModel(agentId);
|
|
203
|
-
const providerId = selectedModel?.provider_id?.toLowerCase() || '';
|
|
204
|
-
const isGatewayBackedProvider = providerId === 'supen' || providerId === 'babelark';
|
|
205
|
-
if (isGatewayBackedProvider)
|
|
206
|
-
return true;
|
|
207
|
-
const configuredApiKey = process.env.ANTHROPIC_API_KEY || selectedModel?.api_key;
|
|
208
|
-
return !configuredApiKey;
|
|
209
|
-
}
|
|
210
|
-
export function resetAgentSessionCache() {
|
|
211
|
-
for (const session of liveSessions.values()) {
|
|
212
|
-
try {
|
|
213
|
-
session.close();
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
// best effort cleanup for tests/shutdown paths
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
liveSessions.clear();
|
|
220
|
-
sessionCreationInFlight.clear();
|
|
221
|
-
}
|
|
222
|
-
export function hasLiveAgentSession(sessionKey) {
|
|
223
|
-
return liveSessions.has(sessionKey) || sessionCreationInFlight.has(sessionKey);
|
|
224
|
-
}
|
|
225
|
-
function resolveEnabledSkillNames() {
|
|
226
|
-
try {
|
|
227
|
-
return Array.from(new Set(listLoadableEnabledSkillEntries()
|
|
228
|
-
.map((entry) => entry.skill.name))).sort();
|
|
229
|
-
}
|
|
230
|
-
catch (err) {
|
|
231
|
-
logger.warn({ err }, 'Failed to resolve enabled skill names for SDK session');
|
|
232
|
-
return [];
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
function resolveEnabledSkillEntries(agentId) {
|
|
236
|
-
try {
|
|
237
|
-
return listLoadableEnabledSkillEntries(agentId);
|
|
238
|
-
}
|
|
239
|
-
catch (err) {
|
|
240
|
-
logger.warn({ err, agentId }, 'Failed to resolve enabled skill entries for SDK session');
|
|
241
|
-
return [];
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function ensureEnabledSkillRuntimes(agentId) {
|
|
245
|
-
for (const entry of resolveEnabledSkillEntries(agentId)) {
|
|
246
|
-
if (!entry.skill.runtime)
|
|
247
|
-
continue;
|
|
248
|
-
let status = inspectSkillRuntime(entry);
|
|
249
|
-
if (!status || status.ready)
|
|
250
|
-
continue;
|
|
251
|
-
if (!entry.skill.runtime.installScript) {
|
|
252
|
-
logger.warn({ agentId, skill: entry.skill.name, checks: status.checks }, 'Enabled skill runtime is not ready and has no installer');
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
try {
|
|
256
|
-
status = installSkillRuntime(entry);
|
|
257
|
-
logger.info({ agentId, skill: entry.skill.name, ready: status.ready }, 'Installed enabled skill runtime before SDK session start');
|
|
258
|
-
}
|
|
259
|
-
catch (err) {
|
|
260
|
-
logger.warn({ err, agentId, skill: entry.skill.name }, 'Failed to install enabled skill runtime before SDK session start');
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
export function buildEnabledSkillsPrompt(agentId) {
|
|
265
|
-
const entries = resolveEnabledSkillEntries(agentId);
|
|
266
|
-
if (entries.length === 0)
|
|
267
|
-
return undefined;
|
|
268
|
-
const sections = entries
|
|
269
|
-
.map((entry) => {
|
|
270
|
-
const skillFilePath = path.join(entry.skillDirectory, 'SKILL.md');
|
|
271
|
-
if (!fs.existsSync(skillFilePath)) {
|
|
272
|
-
return undefined;
|
|
273
|
-
}
|
|
274
|
-
const raw = fs.readFileSync(skillFilePath, 'utf-8').trim();
|
|
275
|
-
if (!raw) {
|
|
276
|
-
return undefined;
|
|
277
|
-
}
|
|
278
|
-
return [
|
|
279
|
-
`### Skill: ${entry.skill.name}`,
|
|
280
|
-
`Skill directory: ${path.dirname(skillFilePath)}`,
|
|
281
|
-
'Use the current task folder for generated task files. Create subfolders only when this skill run actually needs them.',
|
|
282
|
-
'Resolve relative asset/template paths from the skill directory, but do not write generated task files into the skill directory.',
|
|
283
|
-
raw.slice(0, 12000),
|
|
284
|
-
].join('\n');
|
|
285
|
-
})
|
|
286
|
-
.filter((value) => !!value);
|
|
287
|
-
if (sections.length === 0)
|
|
288
|
-
return undefined;
|
|
289
|
-
return [
|
|
290
|
-
'## Installed Supen Skills',
|
|
291
|
-
'The following Supen-managed skills are installed and enabled for this session.',
|
|
292
|
-
'Treat them as available capabilities even if they are not surfaced by Claude slash-command listings.',
|
|
293
|
-
'Do not call the built-in Skill tool for these Supen-managed skills.',
|
|
294
|
-
'When the user request matches one of these skills, follow the skill workflow directly.',
|
|
295
|
-
'The current working directory is the task folder. Keep generated files there and create only the task-specific subfolders that the request actually needs.',
|
|
296
|
-
...sections,
|
|
297
|
-
].join('\n\n');
|
|
298
|
-
}
|
|
299
|
-
function compileEnabledSkillsPlugin(agentId) {
|
|
300
|
-
let skillHub;
|
|
301
|
-
try {
|
|
302
|
-
skillHub = new SkillsRegistry();
|
|
303
|
-
}
|
|
304
|
-
catch (err) {
|
|
305
|
-
logger.warn({ err, agentId }, 'Failed to initialize SkillHub for SDK plugin compilation');
|
|
306
|
-
return [];
|
|
307
|
-
}
|
|
308
|
-
const { base } = agentPaths(agentId);
|
|
309
|
-
const pluginPath = path.join(base, 'sdk_plugin');
|
|
310
|
-
const pluginMetaPath = path.join(pluginPath, '.claude-plugin');
|
|
311
|
-
const pluginSkillsPath = path.join(pluginPath, 'skills');
|
|
312
|
-
const managedRoot = path.dirname(path.dirname(skillHub.getConfig().statePath));
|
|
313
|
-
const allowedRoots = Array.from(new Set([...skillHub.getConfig().directories, managedRoot].map((entry) => path.resolve(entry))));
|
|
314
|
-
fs.mkdirSync(pluginMetaPath, { recursive: true });
|
|
315
|
-
fs.mkdirSync(pluginSkillsPath, { recursive: true });
|
|
316
|
-
fs.writeFileSync(path.join(pluginMetaPath, 'plugin.json'), JSON.stringify({
|
|
317
|
-
name: 'supen-skills',
|
|
318
|
-
version: '1.0.0',
|
|
319
|
-
description: 'Supen dynamically compiled skills bundle for Claude SDK discovery.',
|
|
320
|
-
}, null, 2));
|
|
321
|
-
for (const entry of fs.readdirSync(pluginSkillsPath)) {
|
|
322
|
-
fs.rmSync(path.join(pluginSkillsPath, entry), { recursive: true, force: true });
|
|
323
|
-
}
|
|
324
|
-
for (const entry of resolveEnabledSkillEntries(agentId)) {
|
|
325
|
-
const skillDir = entry.skillDirectory;
|
|
326
|
-
if (!skillDir)
|
|
327
|
-
continue;
|
|
328
|
-
const inAllowedRoot = allowedRoots.some((root) => isPathWithin(root, skillDir));
|
|
329
|
-
if (!inAllowedRoot) {
|
|
330
|
-
logger.warn({ agentId, skill: entry.skill.name, directory: skillDir }, 'Skipping skill outside configured skills scope');
|
|
331
|
-
continue;
|
|
332
|
-
}
|
|
333
|
-
const linkPath = path.join(pluginSkillsPath, entry.skill.name);
|
|
334
|
-
try {
|
|
335
|
-
fs.rmSync(linkPath, { recursive: true, force: true });
|
|
336
|
-
fs.symlinkSync(skillDir, linkPath, 'dir');
|
|
337
|
-
}
|
|
338
|
-
catch (err) {
|
|
339
|
-
if (fs.existsSync(linkPath)) {
|
|
340
|
-
continue;
|
|
341
|
-
}
|
|
342
|
-
logger.error({ err, agentId, skill: entry.skill.name }, 'Failed to symlink skill into SDK plugin');
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return [{ type: 'local', path: pluginPath }];
|
|
346
|
-
}
|
|
347
|
-
export async function buildAgentSessionConfig(config) {
|
|
348
|
-
const cliPath = resolveClaudeCliPath();
|
|
349
|
-
const gatewayToken = getLlmToken();
|
|
350
|
-
const selectedModel = resolveSelectedModel(config.agentId);
|
|
351
|
-
const providerId = selectedModel?.provider_id?.toLowerCase() || '';
|
|
352
|
-
const configuredApiKey = process.env.ANTHROPIC_API_KEY || selectedModel?.api_key;
|
|
353
|
-
const isGatewayBackedProvider = providerId === 'supen' || providerId === 'babelark';
|
|
354
|
-
const llmToken = isGatewayBackedProvider
|
|
355
|
-
? (gatewayToken || configuredApiKey || 'dummy')
|
|
356
|
-
: (configuredApiKey || gatewayToken || 'dummy');
|
|
357
|
-
const anthropicApiKey = llmToken;
|
|
358
|
-
const anthropicGatewayBaseUrl = process.env.SUPEN_LLM_ANTHROPIC_URL ||
|
|
359
|
-
process.env.TEST_ANTHROPIC_BASE_URL;
|
|
360
|
-
const configuredBaseUrl = isGatewayBackedProvider
|
|
361
|
-
? (anthropicGatewayBaseUrl ||
|
|
362
|
-
selectedModel?.base_url ||
|
|
363
|
-
(gatewayToken ? 'http://127.0.0.1:2755/api/llm/anthropic' : undefined))
|
|
364
|
-
: ((providerId === 'anthropic' ? anthropicGatewayBaseUrl : undefined) ||
|
|
365
|
-
selectedModel?.base_url);
|
|
366
|
-
const configuredModelName = selectedModel?.model;
|
|
367
|
-
const isThirdPartyProvider = !!selectedModel?.provider_id && selectedModel.provider_id !== 'anthropic';
|
|
368
|
-
const nativeSkillToolSupported = !providerId || providerId === 'anthropic';
|
|
369
|
-
const runningAsRoot = typeof process.getuid === 'function' && process.getuid() === 0;
|
|
370
|
-
const permissionMode = runningAsRoot ? 'default' : 'bypassPermissions';
|
|
371
|
-
const localMcpServersRoot = resolveLocalMcpServersRoot();
|
|
372
|
-
const sessionConfig = {
|
|
373
|
-
model: resolveSdkModelAlias(config.model || selectedModel?.model, selectedModel?.provider_id) || 'sonnet',
|
|
374
|
-
resume: config.resume,
|
|
375
|
-
cwd: config.cwd,
|
|
376
|
-
// Surface incremental token events from Claude Code so the chat transport
|
|
377
|
-
// can render streamed assistant text instead of waiting for the final block.
|
|
378
|
-
includePartialMessages: true,
|
|
379
|
-
// Non-Anthropic providers reject Claude Code's native Skill continuation
|
|
380
|
-
// shape, so Supen-managed skills stay available through the appended prompt.
|
|
381
|
-
settingSources: nativeSkillToolSupported ? ['project'] : [],
|
|
382
|
-
// Claude Code rejects bypass mode under root/sudo. Cloud containers often run as root.
|
|
383
|
-
permissionMode,
|
|
384
|
-
...(runningAsRoot
|
|
385
|
-
? {
|
|
386
|
-
// Claude Code refuses bypassPermissions when running as root, which is
|
|
387
|
-
// common in hosted space containers. Keep the SDK in default mode but
|
|
388
|
-
// explicitly allow tool calls so template skills can run end to end
|
|
389
|
-
// without an impossible interactive approval step.
|
|
390
|
-
canUseTool: async (_toolName, input, options) => ({
|
|
391
|
-
behavior: 'allow',
|
|
392
|
-
updatedInput: input,
|
|
393
|
-
...(options?.toolUseID ? { toolUseID: options.toolUseID } : {}),
|
|
394
|
-
}),
|
|
395
|
-
}
|
|
396
|
-
: { allowDangerouslySkipPermissions: true }),
|
|
397
|
-
pathToClaudeCodeExecutable: cliPath,
|
|
398
|
-
env: {
|
|
399
|
-
...withRuntimeSpaceEnv(process.env),
|
|
400
|
-
PWD: config.cwd,
|
|
401
|
-
PATH: joinPathEntries([daemonBinDir, ...resolveSkillRuntimePathEntries(config.agentId), process.env.PATH || '']),
|
|
402
|
-
// Claude Code sends ANTHROPIC_API_KEY as the request auth credential for
|
|
403
|
-
// custom Anthropic-compatible base URLs. Keep AUTH_TOKEN set as well for
|
|
404
|
-
// runtimes that read it, but the gateway token must be present here.
|
|
405
|
-
ANTHROPIC_API_KEY: anthropicApiKey,
|
|
406
|
-
ANTHROPIC_AUTH_TOKEN: llmToken,
|
|
407
|
-
...(localMcpServersRoot
|
|
408
|
-
? { MCP_SERVERS_ROOT: localMcpServersRoot }
|
|
409
|
-
: {}),
|
|
410
|
-
...(isThirdPartyProvider && configuredModelName
|
|
411
|
-
? {
|
|
412
|
-
ANTHROPIC_MODEL: configuredModelName,
|
|
413
|
-
ANTHROPIC_SMALL_FAST_MODEL: configuredModelName,
|
|
414
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: configuredModelName,
|
|
415
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: configuredModelName,
|
|
416
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: configuredModelName,
|
|
417
|
-
}
|
|
418
|
-
: {}),
|
|
419
|
-
...(configuredBaseUrl
|
|
420
|
-
? { ANTHROPIC_BASE_URL: configuredBaseUrl }
|
|
421
|
-
: {}),
|
|
422
|
-
},
|
|
423
|
-
onMessage: (msg) => {
|
|
424
|
-
logger.info({ type: msg.type }, 'SDK Message received in onMessage');
|
|
425
|
-
},
|
|
426
|
-
onError: (err) => {
|
|
427
|
-
logger.error({ err, agentId: config.agentId }, 'SDK Session Error');
|
|
428
|
-
}
|
|
429
|
-
};
|
|
430
|
-
const mergedMcpServers = {};
|
|
431
|
-
const automationMcpConfig = resolveAutomationMcpConfig(config.agentId, config.sessionId);
|
|
432
|
-
if (automationMcpConfig) {
|
|
433
|
-
mergedMcpServers.mcpAutomations = {
|
|
434
|
-
type: 'stdio',
|
|
435
|
-
command: automationMcpConfig.command,
|
|
436
|
-
args: automationMcpConfig.args,
|
|
437
|
-
env: automationMcpConfig.env,
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
if (config.mcpServers && Object.keys(config.mcpServers).length > 0) {
|
|
441
|
-
Object.assign(mergedMcpServers, config.mcpServers);
|
|
442
|
-
}
|
|
443
|
-
const skillsPrompt = buildEnabledSkillsPrompt(config.agentId);
|
|
444
|
-
const appendedPrompt = [config.systemPromptAppend?.trim(), skillsPrompt]
|
|
445
|
-
.filter((value) => !!value && value.trim().length > 0)
|
|
446
|
-
.join('\n\n');
|
|
447
|
-
if (appendedPrompt) {
|
|
448
|
-
sessionConfig.systemPrompt = {
|
|
449
|
-
type: 'preset',
|
|
450
|
-
preset: 'claude_code',
|
|
451
|
-
append: appendedPrompt,
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
// Pass MCP server configurations if provided.
|
|
455
|
-
if (Object.keys(mergedMcpServers).length > 0) {
|
|
456
|
-
sessionConfig.mcpServers = mergedMcpServers;
|
|
457
|
-
}
|
|
458
|
-
const disallowedTools = new Set([
|
|
459
|
-
...(Array.isArray(sessionConfig.disallowedTools) ? sessionConfig.disallowedTools : []),
|
|
460
|
-
'CronCreate',
|
|
461
|
-
'create_schedule',
|
|
462
|
-
'list_schedules',
|
|
463
|
-
'delete_schedule',
|
|
464
|
-
...(nativeSkillToolSupported ? [] : ['Skill']),
|
|
465
|
-
]);
|
|
466
|
-
sessionConfig.disallowedTools = Array.from(disallowedTools);
|
|
467
|
-
if (nativeSkillToolSupported) {
|
|
468
|
-
sessionConfig.plugins = compileEnabledSkillsPlugin(config.agentId);
|
|
469
|
-
const enabledSkills = resolveEnabledSkillNames();
|
|
470
|
-
if (enabledSkills.length > 0) {
|
|
471
|
-
sessionConfig.skills = enabledSkills;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return sessionConfig;
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
|
-
* Exported for the ClaudeCode driver boundary and targeted wrapper tests.
|
|
478
|
-
* New backend integrations should implement BackendDriver instead of
|
|
479
|
-
* calling this Claude-specific helper directly.
|
|
480
|
-
*/
|
|
481
|
-
export async function createAgentSession(config) {
|
|
482
|
-
if (config.sessionKey) {
|
|
483
|
-
const existingSession = liveSessions.get(config.sessionKey);
|
|
484
|
-
if (existingSession)
|
|
485
|
-
return existingSession;
|
|
486
|
-
const inFlightSession = sessionCreationInFlight.get(config.sessionKey);
|
|
487
|
-
if (inFlightSession)
|
|
488
|
-
return inFlightSession;
|
|
489
|
-
}
|
|
490
|
-
const createSessionPromise = (async () => {
|
|
491
|
-
ensureEnabledSkillRuntimes(config.agentId);
|
|
492
|
-
const driver = new ClaudeCliDirectDriver();
|
|
493
|
-
const session = await driver.startSession({
|
|
494
|
-
agentId: config.agentId,
|
|
495
|
-
sessionId: config.sessionId || config.sessionKey || 'claude-session',
|
|
496
|
-
turnId: 'claude-turn',
|
|
497
|
-
cwd: config.cwd,
|
|
498
|
-
model: config.model,
|
|
499
|
-
resume: config.resume,
|
|
500
|
-
mcpServers: config.mcpServers,
|
|
501
|
-
systemPromptAppend: config.systemPromptAppend,
|
|
502
|
-
});
|
|
503
|
-
const wrappedSession = {
|
|
504
|
-
send: (message) => session.send(message),
|
|
505
|
-
stream: () => session.stream(),
|
|
506
|
-
supportedCommands: () => typeof session.supportedCommands === 'function'
|
|
507
|
-
? session.supportedCommands()
|
|
508
|
-
: Promise.resolve([]),
|
|
509
|
-
getContextUsage: () => typeof session.getContextUsage === 'function'
|
|
510
|
-
? session.getContextUsage()
|
|
511
|
-
: Promise.resolve(undefined),
|
|
512
|
-
close() {
|
|
513
|
-
session.close();
|
|
514
|
-
if (config.sessionKey) {
|
|
515
|
-
liveSessions.delete(config.sessionKey);
|
|
516
|
-
}
|
|
517
|
-
},
|
|
518
|
-
};
|
|
519
|
-
if (config.sessionKey) {
|
|
520
|
-
liveSessions.set(config.sessionKey, wrappedSession);
|
|
521
|
-
}
|
|
522
|
-
return wrappedSession;
|
|
523
|
-
})();
|
|
524
|
-
if (config.sessionKey) {
|
|
525
|
-
const sessionKey = config.sessionKey;
|
|
526
|
-
sessionCreationInFlight.set(sessionKey, createSessionPromise);
|
|
527
|
-
createSessionPromise.finally(() => {
|
|
528
|
-
sessionCreationInFlight.delete(sessionKey);
|
|
529
|
-
});
|
|
530
|
-
}
|
|
531
|
-
return createSessionPromise;
|
|
532
|
-
}
|
|
533
|
-
//# sourceMappingURL=sdk-wrapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-wrapper.js","sourceRoot":"","sources":["../../src/core/sdk-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Meta-Agent Tool: Delegates highly complex engineering tasks to the Claude Code CLI.
|
|
3
|
-
* Assumes Claude CLI is already authenticated and installed globally or via npx.
|
|
4
|
-
*/
|
|
5
|
-
export declare const delegateToClaudeTool: import("ai").Tool<{
|
|
6
|
-
prompt: string;
|
|
7
|
-
working_directory: string;
|
|
8
|
-
}, {
|
|
9
|
-
success: boolean;
|
|
10
|
-
summary: string;
|
|
11
|
-
output: string;
|
|
12
|
-
warnings: string;
|
|
13
|
-
error?: undefined;
|
|
14
|
-
stdout?: undefined;
|
|
15
|
-
stderr?: undefined;
|
|
16
|
-
} | {
|
|
17
|
-
success: boolean;
|
|
18
|
-
error: any;
|
|
19
|
-
stdout: any;
|
|
20
|
-
stderr: any;
|
|
21
|
-
summary?: undefined;
|
|
22
|
-
output?: undefined;
|
|
23
|
-
warnings?: undefined;
|
|
24
|
-
}>;
|
|
25
|
-
//# sourceMappingURL=claude_code.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude_code.d.ts","sourceRoot":"","sources":["../../src/skills/claude_code.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;EAsC/B,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { tool } from 'ai';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import { exec } from 'child_process';
|
|
4
|
-
import util from 'util';
|
|
5
|
-
import { logger } from '../core/logger.js';
|
|
6
|
-
import { withRuntimeSpaceEnv } from '../core/space-env.js';
|
|
7
|
-
const execAsync = util.promisify(exec);
|
|
8
|
-
/**
|
|
9
|
-
* Meta-Agent Tool: Delegates highly complex engineering tasks to the Claude Code CLI.
|
|
10
|
-
* Assumes Claude CLI is already authenticated and installed globally or via npx.
|
|
11
|
-
*/
|
|
12
|
-
export const delegateToClaudeTool = tool({
|
|
13
|
-
description: 'Invoke the advanced Claude Code engineering agent for complex, multi-step codebase refactorings. Pass the exact requirement as the prompt.',
|
|
14
|
-
inputSchema: z.object({
|
|
15
|
-
prompt: z.string().describe('The complex refactoring task or prompt to delegate.'),
|
|
16
|
-
working_directory: z.string().describe('The absolute path to the workspace directory.')
|
|
17
|
-
}),
|
|
18
|
-
execute: async (args) => {
|
|
19
|
-
const { prompt, working_directory } = args;
|
|
20
|
-
logger.info({ prompt, workingDirectory: working_directory }, 'Delegating task to Claude Code CLI tool');
|
|
21
|
-
try {
|
|
22
|
-
// Sanitize prompt for shell execution
|
|
23
|
-
const sanitizedPrompt = prompt.replace(/"/g, '\\"');
|
|
24
|
-
// We run `npx @anthropic-ai/claude` assuming it is installed in the environment
|
|
25
|
-
const { stdout, stderr } = await execAsync(`npx @anthropic-ai/claude -p "${sanitizedPrompt}"`, {
|
|
26
|
-
cwd: working_directory,
|
|
27
|
-
// Inherit environment to ensure git/npm/node commands inside work, but we can also set NO_INTERACTIVE flags if applicable.
|
|
28
|
-
env: withRuntimeSpaceEnv(process.env)
|
|
29
|
-
});
|
|
30
|
-
logger.info('Claude Code delegation completed successfully');
|
|
31
|
-
return {
|
|
32
|
-
success: true,
|
|
33
|
-
summary: "Task executed successfully via Claude Code.",
|
|
34
|
-
output: stdout,
|
|
35
|
-
warnings: stderr
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
logger.error({ err: error.message }, 'Claude Code CLI delegation failed');
|
|
40
|
-
return {
|
|
41
|
-
success: false,
|
|
42
|
-
error: error.message,
|
|
43
|
-
stdout: error.stdout,
|
|
44
|
-
stderr: error.stderr
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
//# sourceMappingURL=claude_code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude_code.js","sourceRoot":"","sources":["../../src/skills/claude_code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;IACvC,WAAW,EAAE,4IAA4I;IACzJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QAClF,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACxF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,EAAE,yCAAyC,CAAC,CAAC;QACxG,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEpD,gFAAgF;YAChF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,gCAAgC,eAAe,GAAG,EAAE;gBAC7F,GAAG,EAAE,iBAAiB;gBACtB,2HAA2H;gBAC3H,GAAG,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;aACtC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAE7D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,6CAA6C;gBACtD,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC1E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|