@mrpatronz/nexusflow 2.6.0 → 2.8.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/README.md +1 -3
- package/dist/agent/ClaudeSdkAdapter.d.ts +18 -0
- package/dist/agent/ClaudeSdkAdapter.d.ts.map +1 -0
- package/dist/agent/ClaudeSdkAdapter.js +185 -0
- package/dist/agent/ClaudeSdkAdapter.js.map +1 -0
- package/dist/agent/ClaudeSdkAdapter.test.d.ts +2 -0
- package/dist/agent/ClaudeSdkAdapter.test.d.ts.map +1 -0
- package/dist/agent/ClaudeSdkAdapter.test.js +155 -0
- package/dist/agent/ClaudeSdkAdapter.test.js.map +1 -0
- package/dist/agent/CliAdapterBase.d.ts.map +1 -1
- package/dist/agent/CliAdapterBase.js +3 -0
- package/dist/agent/CliAdapterBase.js.map +1 -1
- package/dist/agent/CliAdapterBase.test.js +49 -1
- package/dist/agent/CliAdapterBase.test.js.map +1 -1
- package/dist/agent/CodexCliAdapter.d.ts +1 -1
- package/dist/agent/CodexCliAdapter.d.ts.map +1 -1
- package/dist/agent/CodexCliAdapter.js +5 -4
- package/dist/agent/CodexCliAdapter.js.map +1 -1
- package/dist/agent/CodexCliAdapter.test.js +16 -1
- package/dist/agent/CodexCliAdapter.test.js.map +1 -1
- package/dist/agent/CodexSdkAdapter.d.ts +17 -0
- package/dist/agent/CodexSdkAdapter.d.ts.map +1 -0
- package/dist/agent/CodexSdkAdapter.js +132 -0
- package/dist/agent/CodexSdkAdapter.js.map +1 -0
- package/dist/agent/CodexSdkAdapter.test.d.ts +2 -0
- package/dist/agent/CodexSdkAdapter.test.d.ts.map +1 -0
- package/dist/agent/CodexSdkAdapter.test.js +76 -0
- package/dist/agent/CodexSdkAdapter.test.js.map +1 -0
- package/dist/agent/ProviderRegistry.d.ts +7 -2
- package/dist/agent/ProviderRegistry.d.ts.map +1 -1
- package/dist/agent/ProviderRegistry.js +15 -0
- package/dist/agent/ProviderRegistry.js.map +1 -1
- package/dist/agent/ProviderRegistry.test.js +19 -0
- package/dist/agent/ProviderRegistry.test.js.map +1 -1
- package/dist/agent/adapters.d.ts.map +1 -1
- package/dist/agent/adapters.js +81 -0
- package/dist/agent/adapters.js.map +1 -1
- package/dist/agent/mcp-config.d.ts +16 -0
- package/dist/agent/mcp-config.d.ts.map +1 -0
- package/dist/agent/mcp-config.js +28 -0
- package/dist/agent/mcp-config.js.map +1 -0
- package/dist/agent/mcp-config.test.d.ts +2 -0
- package/dist/agent/mcp-config.test.d.ts.map +1 -0
- package/dist/agent/mcp-config.test.js +22 -0
- package/dist/agent/mcp-config.test.js.map +1 -0
- package/dist/agent/models.d.ts +10 -0
- package/dist/agent/models.d.ts.map +1 -0
- package/dist/agent/models.js +35 -0
- package/dist/agent/models.js.map +1 -0
- package/dist/agent/models.test.d.ts +2 -0
- package/dist/agent/models.test.d.ts.map +1 -0
- package/dist/agent/models.test.js +40 -0
- package/dist/agent/models.test.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +65 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +252 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/orchestrator.test.d.ts +2 -0
- package/dist/agent/orchestrator.test.d.ts.map +1 -0
- package/dist/agent/orchestrator.test.js +284 -0
- package/dist/agent/orchestrator.test.js.map +1 -0
- package/dist/agent/session.d.ts +1 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +3 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/session.test.js +9 -0
- package/dist/agent/session.test.js.map +1 -1
- package/dist/agent/smoke-chat.test.d.ts +2 -0
- package/dist/agent/smoke-chat.test.d.ts.map +1 -0
- package/dist/agent/smoke-chat.test.js +166 -0
- package/dist/agent/smoke-chat.test.js.map +1 -0
- package/dist/commands/mcp.d.ts +7 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/core/locks.d.ts +4 -2
- package/dist/core/locks.d.ts.map +1 -1
- package/dist/core/locks.js +55 -7
- package/dist/core/locks.js.map +1 -1
- package/dist/core/locks.test.js +48 -0
- package/dist/core/locks.test.js.map +1 -1
- package/dist/core/scheduler.d.ts +1 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +10 -0
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/scheduler.test.js +6 -0
- package/dist/core/scheduler.test.js.map +1 -1
- package/dist/core/workspace.create.test.js +51 -11
- package/dist/core/workspace.create.test.js.map +1 -1
- package/dist/core/workspace.d.ts.map +1 -1
- package/dist/core/workspace.js +123 -84
- package/dist/core/workspace.js.map +1 -1
- package/dist/gui/assets/AgentsPage-Bfyu13gc.js +3 -0
- package/dist/gui/assets/{CSPContext-BG7no5S_.js → CSPContext-DBUu9tE0.js} +1 -1
- package/dist/gui/assets/{DashboardPage-ByGTwAQa.js → DashboardPage-O5wj99kn.js} +1 -1
- package/dist/gui/assets/{GettingStartedPage-Xjx3M3RH.js → GettingStartedPage-DDWBueC7.js} +1 -1
- package/dist/gui/assets/ProjectsPage-NHkXrDM2.js +1 -0
- package/dist/gui/assets/ScaffoldRepoInline-Cmqg_s94.js +1 -0
- package/dist/gui/assets/{SettingsPage-B9iN6hsv.js → SettingsPage-Cc77HBp7.js} +1 -1
- package/dist/gui/assets/SkillsPage-D4CVxwrI.js +6 -0
- package/dist/gui/assets/StartWorkPage-RPZTN3Ui.js +1 -0
- package/dist/gui/assets/{StrategiesPage-DDu3jwJx.js → StrategiesPage-Dn66xfZN.js} +1 -1
- package/dist/gui/assets/WorkspacesPage-BgdoM5Hs.js +6 -0
- package/dist/gui/assets/{alert-dialog-CdqVrvZl.js → alert-dialog-BYZ7cgWA.js} +1 -1
- package/dist/gui/assets/index-BmH7a-Qy.css +2 -0
- package/dist/gui/assets/index-CoNaATPd.js +52 -0
- package/dist/gui/assets/isElementDisabled-uy_EOitH.js +1 -0
- package/dist/gui/assets/textarea-ByfoCb54.js +1 -0
- package/dist/gui/assets/{useAriaLabelledBy-DfRdwH8a.js → useAriaLabelledBy-ClesgjMe.js} +1 -1
- package/dist/gui/assets/useValueChanged-DeYvGnKs.js +1 -0
- package/dist/gui/assets/{vsc-D6UPv2ii.js → vsc-BTST_4ex.js} +1 -1
- package/dist/gui/index.html +5 -7
- package/dist/harness/claude.d.ts +18 -0
- package/dist/harness/claude.d.ts.map +1 -0
- package/dist/harness/claude.js +334 -0
- package/dist/harness/claude.js.map +1 -0
- package/dist/harness/codex.d.ts +20 -0
- package/dist/harness/codex.d.ts.map +1 -0
- package/dist/harness/codex.js +315 -0
- package/dist/harness/codex.js.map +1 -0
- package/dist/harness/contract.test.d.ts +2 -0
- package/dist/harness/contract.test.d.ts.map +1 -0
- package/dist/harness/contract.test.js +426 -0
- package/dist/harness/contract.test.js.map +1 -0
- package/dist/harness/harness.test.d.ts +2 -0
- package/dist/harness/harness.test.d.ts.map +1 -0
- package/dist/harness/harness.test.js +215 -0
- package/dist/harness/harness.test.js.map +1 -0
- package/dist/harness/index.d.ts +10 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +13 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/interface.d.ts +42 -0
- package/dist/harness/interface.d.ts.map +1 -0
- package/dist/harness/interface.js +17 -0
- package/dist/harness/interface.js.map +1 -0
- package/dist/harness/pushable.d.ts +11 -0
- package/dist/harness/pushable.d.ts.map +1 -0
- package/dist/harness/pushable.js +32 -0
- package/dist/harness/pushable.js.map +1 -0
- package/dist/harness/types.d.ts +132 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +12 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +8 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +6 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +213 -6
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/tools.test.js +115 -6
- package/dist/mcp/tools.test.js.map +1 -1
- package/dist/orchestration/runner.d.ts +1 -1
- package/dist/orchestration/runner.d.ts.map +1 -1
- package/dist/orchestration/runner.js +29 -14
- package/dist/orchestration/runner.js.map +1 -1
- package/dist/orchestration/runner.test.js +33 -1
- package/dist/orchestration/runner.test.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +28 -7
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +34 -1
- package/dist/server.test.js.map +1 -1
- package/dist/utils/git.d.ts +0 -15
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +4 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/git.test.js +33 -1
- package/dist/utils/git.test.js.map +1 -1
- package/dist/utils/multi-git.d.ts +30 -6
- package/dist/utils/multi-git.d.ts.map +1 -1
- package/dist/utils/multi-git.js +132 -12
- package/dist/utils/multi-git.js.map +1 -1
- package/dist/utils/multi-git.test.js +153 -1
- package/dist/utils/multi-git.test.js.map +1 -1
- package/dist/utils/session-finder.d.ts +3 -0
- package/dist/utils/session-finder.d.ts.map +1 -1
- package/dist/utils/session-finder.js +10 -9
- package/dist/utils/session-finder.js.map +1 -1
- package/package.json +4 -1
- package/dist/gui/assets/AgentsPage-YyYRodOR.js +0 -3
- package/dist/gui/assets/ProjectsPage-BMdhqAGs.js +0 -1
- package/dist/gui/assets/ScaffoldRepoInline-gXyYSIz5.js +0 -1
- package/dist/gui/assets/SkillsPage-CxcsbIsQ.js +0 -6
- package/dist/gui/assets/StartWorkPage-DPVHcdy4.js +0 -1
- package/dist/gui/assets/WorkspacesPage-BWRmP0mY.js +0 -2
- package/dist/gui/assets/index-CZoZQkeC.css +0 -2
- package/dist/gui/assets/index-wy68EqfB.js +0 -50
- package/dist/gui/assets/isElementDisabled-D_fu2zfc.js +0 -1
- package/dist/gui/assets/store-D5DUHbxn.js +0 -3
- package/dist/gui/assets/styles-CVwNuFCx.js +0 -1
- package/dist/gui/assets/textarea-BNRuIXNs.js +0 -1
- package/dist/gui/assets/useValueChanged-CStSGSsD.js +0 -1
package/dist/agent/adapters.js
CHANGED
|
@@ -7,6 +7,9 @@ import { ClaudeCliAdapter } from './ClaudeCliAdapter.js';
|
|
|
7
7
|
import { AntigravityCliAdapter } from './AntigravityCliAdapter.js';
|
|
8
8
|
import { CodexCliAdapter } from './CodexCliAdapter.js';
|
|
9
9
|
import { CopilotAcpAdapter } from './CopilotAcpAdapter.js';
|
|
10
|
+
import { ClaudeSdkAdapter } from './ClaudeSdkAdapter.js';
|
|
11
|
+
import { CodexSdkAdapter } from './CodexSdkAdapter.js';
|
|
12
|
+
import { getAvailableModels } from './models.js';
|
|
10
13
|
ProviderRegistry.register({
|
|
11
14
|
id: 'claude-native',
|
|
12
15
|
name: 'Claude',
|
|
@@ -91,6 +94,7 @@ ProviderRegistry.register({
|
|
|
91
94
|
},
|
|
92
95
|
],
|
|
93
96
|
defaultExecutionProfile: 'review',
|
|
97
|
+
models: getAvailableModels('claude-cli'),
|
|
94
98
|
capabilities: {
|
|
95
99
|
transport: 'cli-print',
|
|
96
100
|
sessionIdentity: 'client-assigned',
|
|
@@ -145,6 +149,7 @@ ProviderRegistry.register({
|
|
|
145
149
|
},
|
|
146
150
|
],
|
|
147
151
|
defaultExecutionProfile: 'review',
|
|
152
|
+
models: getAvailableModels('codex-cli'),
|
|
148
153
|
capabilities: {
|
|
149
154
|
transport: 'cli-print',
|
|
150
155
|
sessionIdentity: 'provider-assigned',
|
|
@@ -172,5 +177,81 @@ ProviderRegistry.register({
|
|
|
172
177
|
getStatusMessage: () => copilotCliStatus().message,
|
|
173
178
|
createInstance: () => new CopilotAcpAdapter()
|
|
174
179
|
});
|
|
180
|
+
const claudeSdkStatus = cachedStatus(() => {
|
|
181
|
+
const hasCredential = Boolean(process.env.ANTHROPIC_API_KEY ||
|
|
182
|
+
process.env.CLAUDE_CODE_OAUTH_TOKEN ||
|
|
183
|
+
process.env.AWS_ACCESS_KEY_ID ||
|
|
184
|
+
process.env.GOOGLE_APPLICATION_CREDENTIALS);
|
|
185
|
+
if (hasCredential)
|
|
186
|
+
return { usable: true };
|
|
187
|
+
return claudeCliStatus();
|
|
188
|
+
});
|
|
189
|
+
const codexSdkStatus = cachedStatus(() => {
|
|
190
|
+
const hasCredential = Boolean(process.env.OPENAI_API_KEY ||
|
|
191
|
+
process.env.CODEX_API_KEY);
|
|
192
|
+
if (hasCredential)
|
|
193
|
+
return { usable: true };
|
|
194
|
+
return codexCliStatus();
|
|
195
|
+
});
|
|
196
|
+
ProviderRegistry.register({
|
|
197
|
+
id: 'claude-sdk',
|
|
198
|
+
name: 'Claude Code (First-Party SDK)',
|
|
199
|
+
icon: 'Terminal',
|
|
200
|
+
accessLabel: 'Harness-managed access',
|
|
201
|
+
executionProfiles: [
|
|
202
|
+
{ id: 'review', label: 'Review only', description: 'Reads and plans; no source edits.' },
|
|
203
|
+
{
|
|
204
|
+
id: 'workspace-write',
|
|
205
|
+
label: 'Edit workspace',
|
|
206
|
+
description: 'Auto-accepts in-workspace file edits and common filesystem actions; other approval-requiring commands are unavailable in embedded chat.',
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
defaultExecutionProfile: 'review',
|
|
210
|
+
models: getAvailableModels('claude-sdk'),
|
|
211
|
+
capabilities: {
|
|
212
|
+
transport: 'sdk',
|
|
213
|
+
sessionIdentity: 'client-assigned',
|
|
214
|
+
workspaceAccess: 'harness-managed',
|
|
215
|
+
sessionIdFormat: 'uuid',
|
|
216
|
+
},
|
|
217
|
+
isConfigured: () => claudeSdkStatus().usable,
|
|
218
|
+
getStatusMessage: () => claudeSdkStatus().message,
|
|
219
|
+
getSetupHelp: () => setupHelp(claudeSdkStatus()),
|
|
220
|
+
invalidateStatus: () => {
|
|
221
|
+
claudeSdkStatus.invalidate();
|
|
222
|
+
claudeCliStatus.invalidate();
|
|
223
|
+
},
|
|
224
|
+
createInstance: () => new ClaudeSdkAdapter()
|
|
225
|
+
});
|
|
226
|
+
ProviderRegistry.register({
|
|
227
|
+
id: 'codex-sdk',
|
|
228
|
+
name: 'Codex (First-Party SDK)',
|
|
229
|
+
icon: 'Terminal',
|
|
230
|
+
accessLabel: 'Workspace write',
|
|
231
|
+
executionProfiles: [
|
|
232
|
+
{ id: 'review', label: 'Review only', description: 'Read-only sandbox; escalation is denied.' },
|
|
233
|
+
{
|
|
234
|
+
id: 'workspace-write',
|
|
235
|
+
label: 'Edit workspace',
|
|
236
|
+
description: 'Workspace-write sandbox (network/escalation denied). Approvals are configured at the Codex engine level.',
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
defaultExecutionProfile: 'review',
|
|
240
|
+
models: getAvailableModels('codex-sdk'),
|
|
241
|
+
capabilities: {
|
|
242
|
+
transport: 'sdk',
|
|
243
|
+
sessionIdentity: 'provider-assigned',
|
|
244
|
+
workspaceAccess: 'workspace-write',
|
|
245
|
+
sessionIdFormat: 'uuid',
|
|
246
|
+
},
|
|
247
|
+
isConfigured: () => codexSdkStatus().usable,
|
|
248
|
+
getStatusMessage: () => codexSdkStatus().message,
|
|
249
|
+
getSetupHelp: () => setupHelp(codexSdkStatus()),
|
|
250
|
+
invalidateStatus: () => {
|
|
251
|
+
codexSdkStatus.invalidate();
|
|
252
|
+
codexCliStatus.invalidate();
|
|
253
|
+
},
|
|
254
|
+
createInstance: () => new CodexSdkAdapter()
|
|
255
|
+
});
|
|
175
256
|
export { ProviderRegistry };
|
|
176
257
|
//# sourceMappingURL=adapters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAEL,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/agent/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AgentRole } from '../mcp/tools.js';
|
|
2
|
+
export interface LocalMcpServerConfig {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves the path to the local CLI build entrypoint (`dist/index.js`).
|
|
8
|
+
* This avoids supply-chain risks from unpinned `npx` downloads and ensures
|
|
9
|
+
* harness sessions run against the exact local package version.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getLocalCliEntry(distIndexOverride?: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a local MCP server configuration object for Claude or Codex harnesses.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getLocalMcpServerConfig(workspacePath: string, role?: AgentRole): LocalMcpServerConfig;
|
|
16
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/agent/mcp-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAanE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,IAAI,GAAE,SAAuB,GAC5B,oBAAoB,CAKtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the path to the local CLI build entrypoint (`dist/index.js`).
|
|
6
|
+
* This avoids supply-chain risks from unpinned `npx` downloads and ensures
|
|
7
|
+
* harness sessions run against the exact local package version.
|
|
8
|
+
*/
|
|
9
|
+
export function getLocalCliEntry(distIndexOverride) {
|
|
10
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
11
|
+
const baseDir = path.dirname(currentFile);
|
|
12
|
+
const packageDir = path.resolve(baseDir, '..', '..');
|
|
13
|
+
const distIndex = distIndexOverride ?? path.join(packageDir, 'dist', 'index.js');
|
|
14
|
+
if (!fs.existsSync(distIndex)) {
|
|
15
|
+
throw new Error(`NexusFlow CLI entrypoint not found at ${distIndex}. Run "npm run build" to compile before starting SDK sessions.`);
|
|
16
|
+
}
|
|
17
|
+
return distIndex;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a local MCP server configuration object for Claude or Codex harnesses.
|
|
21
|
+
*/
|
|
22
|
+
export function getLocalMcpServerConfig(workspacePath, role = 'developer') {
|
|
23
|
+
return {
|
|
24
|
+
command: process.execPath,
|
|
25
|
+
args: [getLocalCliEntry(), 'mcp', 'run', workspacePath, '--role', role],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/agent/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,iBAA0B;IACzD,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAEjF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,gEAAgE,CACnH,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAAqB,EACrB,OAAkB,WAAW;IAE7B,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,IAAI,EAAE,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.test.d.ts","sourceRoot":"","sources":["../../src/agent/mcp-config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { getLocalCliEntry, getLocalMcpServerConfig } from './mcp-config.js';
|
|
3
|
+
describe('Local MCP Server Config Helper', () => {
|
|
4
|
+
it('resolves the local CLI entry path', () => {
|
|
5
|
+
const entry = getLocalCliEntry();
|
|
6
|
+
expect(entry).toContain('dist');
|
|
7
|
+
expect(entry.endsWith('index.js')).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('builds a local MCP configuration with node executable and role flag', () => {
|
|
10
|
+
const config = getLocalMcpServerConfig('/workspace/path', 'developer');
|
|
11
|
+
expect(config.command).toBe(process.execPath);
|
|
12
|
+
expect(config.args).toContain('mcp');
|
|
13
|
+
expect(config.args).toContain('run');
|
|
14
|
+
expect(config.args).toContain('/workspace/path');
|
|
15
|
+
expect(config.args).toContain('--role');
|
|
16
|
+
expect(config.args).toContain('developer');
|
|
17
|
+
});
|
|
18
|
+
it('throws helpful remediation error when dist/index.js is missing', () => {
|
|
19
|
+
expect(() => getLocalCliEntry('/non/existent/dist/index.js')).toThrow(/Run "npm run build" to compile/);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=mcp-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.test.js","sourceRoot":"","sources":["../../src/agent/mcp-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAM,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,MAAM,GAAG,uBAAuB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ModelOption {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
description: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const PROVIDER_MODELS: Record<string, readonly ModelOption[]>;
|
|
7
|
+
export declare function getAvailableModels(providerId: string): readonly ModelOption[];
|
|
8
|
+
export declare function isValidModelForProvider(providerId: string, modelId: string): boolean;
|
|
9
|
+
export declare function formatModelRejectionError(providerId: string, model: string, details?: string): string;
|
|
10
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/agent/models.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAiBD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAKlE,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAE7E;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKpF;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const CLAUDE_MODELS = [
|
|
2
|
+
{ id: '', label: 'Automatic', description: 'Use the default selected by Claude Code for this account and deployment.' },
|
|
3
|
+
{ id: 'fable', label: 'Fable', description: 'Use the latest Fable model available to this Claude Code account.' },
|
|
4
|
+
{ id: 'opus', label: 'Opus', description: 'Use the latest Opus model for complex reasoning and architecture work.' },
|
|
5
|
+
{ id: 'sonnet', label: 'Sonnet', description: 'Use the latest Sonnet model for everyday coding tasks.' },
|
|
6
|
+
{ id: 'haiku', label: 'Haiku', description: 'Use the latest Haiku model for fast, lightweight tasks.' },
|
|
7
|
+
];
|
|
8
|
+
const CODEX_MODELS = [
|
|
9
|
+
{ id: '', label: 'Automatic', description: 'Use the model configured by the Codex account or local harness.' },
|
|
10
|
+
{ id: 'gpt-5.6-sol', label: 'GPT-5.6 Sol', description: 'Frontier capability for complex professional coding and reasoning.' },
|
|
11
|
+
{ id: 'gpt-5.6-terra', label: 'GPT-5.6 Terra', description: 'Balance intelligence, latency, and cost.' },
|
|
12
|
+
{ id: 'gpt-5.6-luna', label: 'GPT-5.6 Luna', description: 'Cost-efficient model for high-volume and focused tasks.' },
|
|
13
|
+
];
|
|
14
|
+
export const PROVIDER_MODELS = {
|
|
15
|
+
'claude-cli': CLAUDE_MODELS,
|
|
16
|
+
'claude-sdk': CLAUDE_MODELS,
|
|
17
|
+
'codex-cli': CODEX_MODELS,
|
|
18
|
+
'codex-sdk': CODEX_MODELS,
|
|
19
|
+
};
|
|
20
|
+
export function getAvailableModels(providerId) {
|
|
21
|
+
return PROVIDER_MODELS[providerId] ?? [];
|
|
22
|
+
}
|
|
23
|
+
export function isValidModelForProvider(providerId, modelId) {
|
|
24
|
+
if (!modelId)
|
|
25
|
+
return true; // Default / empty is always valid
|
|
26
|
+
const models = PROVIDER_MODELS[providerId];
|
|
27
|
+
if (!models)
|
|
28
|
+
return true; // Open catalog for custom/unregistered providers
|
|
29
|
+
return models.some((m) => m.id === modelId);
|
|
30
|
+
}
|
|
31
|
+
export function formatModelRejectionError(providerId, model, details) {
|
|
32
|
+
const detailStr = details ? ` (${details})` : '';
|
|
33
|
+
return `Model '${model}' was rejected by ${providerId}${detailStr}. Please select a valid model in chat settings or use Automatic.`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/agent/models.ts"],"names":[],"mappings":"AAMA,MAAM,aAAa,GAAG;IACpB,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,0EAA0E,EAAE;IACvH,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,mEAAmE,EAAE;IACjH,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,wEAAwE,EAAE;IACpH,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;IACxG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,yDAAyD,EAAE;CAC9D,CAAC;AAE5C,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iEAAiE,EAAE;IAC9G,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,oEAAoE,EAAE;IAC9H,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;IACxG,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,yDAAyD,EAAE;CAC5E,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAA2C;IACrE,YAAY,EAAE,aAAa;IAC3B,YAAY,EAAE,aAAa;IAC3B,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,YAAY;CAC1B,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAAkB,EAAE,OAAe;IACzE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,kCAAkC;IAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,iDAAiD;IAC3E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAkB,EAAE,KAAa,EAAE,OAAgB;IAC3F,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,OAAO,UAAU,KAAK,qBAAqB,UAAU,GAAG,SAAS,kEAAkE,CAAC;AACtI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.test.d.ts","sourceRoot":"","sources":["../../src/agent/models.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getAvailableModels, isValidModelForProvider, formatModelRejectionError, } from './models.js';
|
|
3
|
+
describe('models catalog and validation', () => {
|
|
4
|
+
it('defines current model options for Claude and Codex', () => {
|
|
5
|
+
const claudeModels = getAvailableModels('claude-cli');
|
|
6
|
+
expect(claudeModels.length).toBeGreaterThan(3);
|
|
7
|
+
expect(claudeModels.some((m) => m.id === '')).toBe(true); // Automatic option
|
|
8
|
+
expect(claudeModels.some((m) => m.id === 'fable')).toBe(true);
|
|
9
|
+
expect(claudeModels.some((m) => m.id === 'opus')).toBe(true);
|
|
10
|
+
expect(claudeModels.some((m) => m.id === 'sonnet')).toBe(true);
|
|
11
|
+
expect(claudeModels.some((m) => m.id === 'haiku')).toBe(true);
|
|
12
|
+
expect(getAvailableModels('claude-sdk')).toBe(claudeModels);
|
|
13
|
+
const codexModels = getAvailableModels('codex-cli');
|
|
14
|
+
expect(codexModels).toHaveLength(4);
|
|
15
|
+
expect(codexModels.some((m) => m.id === '')).toBe(true); // Automatic option
|
|
16
|
+
expect(codexModels.some((m) => m.id === 'gpt-5.6-sol')).toBe(true);
|
|
17
|
+
expect(codexModels.some((m) => m.id === 'gpt-5.6-terra')).toBe(true);
|
|
18
|
+
expect(codexModels.some((m) => m.id === 'gpt-5.6-luna')).toBe(true);
|
|
19
|
+
expect(getAvailableModels('codex-sdk')).toBe(codexModels);
|
|
20
|
+
// Superseded/deprecated models must not linger in the user-facing catalog.
|
|
21
|
+
expect(codexModels.some((m) => m.id === 'gpt-5-codex')).toBe(false);
|
|
22
|
+
expect(codexModels.some((m) => m.id === 'gpt-4.5-preview')).toBe(false);
|
|
23
|
+
expect(codexModels.some((m) => m.id === 'o1-preview')).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it('validates model IDs against provider catalogs', () => {
|
|
26
|
+
expect(isValidModelForProvider('claude-cli', '')).toBe(true);
|
|
27
|
+
expect(isValidModelForProvider('claude-cli', 'sonnet')).toBe(true);
|
|
28
|
+
expect(isValidModelForProvider('claude-cli', 'non-existent-model')).toBe(false);
|
|
29
|
+
expect(isValidModelForProvider('codex-cli', '')).toBe(true);
|
|
30
|
+
expect(isValidModelForProvider('codex-cli', 'gpt-5.6-sol')).toBe(true);
|
|
31
|
+
expect(isValidModelForProvider('codex-cli', 'gpt-4.5-preview')).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
it('formats model rejection errors with clear user remediation guidance', () => {
|
|
34
|
+
const errorMsg = formatModelRejectionError('codex-cli', 'invalid-model-x', 'model_not_found');
|
|
35
|
+
expect(errorMsg).toContain("Model 'invalid-model-x' was rejected by codex-cli");
|
|
36
|
+
expect(errorMsg).toContain('(model_not_found)');
|
|
37
|
+
expect(errorMsg).toContain('Please select a valid model in chat settings or use Automatic.');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=models.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.test.js","sourceRoot":"","sources":["../../src/agent/models.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { NormalizedUsage } from '../harness/types.js';
|
|
3
|
+
import type { AgentExecutionProfile, AgentHarness } from './ProviderRegistry.js';
|
|
4
|
+
export interface TeamAgentSpec {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
role: 'lead' | 'researcher' | 'developer' | 'reviewer';
|
|
8
|
+
vendor?: 'claude-code' | 'codex';
|
|
9
|
+
executionProfile?: AgentExecutionProfile;
|
|
10
|
+
prompt: string;
|
|
11
|
+
worktreePath?: string;
|
|
12
|
+
/** Whether to thread prior phases' outputs into this agent's kickoff in pipeline mode (defaults to true). */
|
|
13
|
+
includePriorContext?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface AgentExecutionStatus {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
role: string;
|
|
19
|
+
vendor: 'claude-code' | 'codex';
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
22
|
+
usage?: NormalizedUsage;
|
|
23
|
+
error?: string;
|
|
24
|
+
lastOutput?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const MAX_OUTPUT_CAPTURE_CHARS = 16000;
|
|
27
|
+
export declare function appendCappedOutput(existing: string | undefined, chunk: string, maxChars?: number): string;
|
|
28
|
+
export type TeamworkMode = 'parallel' | 'pipeline';
|
|
29
|
+
export interface RunTeamOptions {
|
|
30
|
+
mode?: TeamworkMode;
|
|
31
|
+
}
|
|
32
|
+
export interface MultiAgentOrchestratorOptions {
|
|
33
|
+
claudeAdapterFactory?: () => AgentHarness;
|
|
34
|
+
codexAdapterFactory?: () => AgentHarness;
|
|
35
|
+
}
|
|
36
|
+
export interface TeamworkResult {
|
|
37
|
+
workspacePath: string;
|
|
38
|
+
agents: AgentExecutionStatus[];
|
|
39
|
+
totalUsage: NormalizedUsage;
|
|
40
|
+
success: boolean;
|
|
41
|
+
partialSuccess: boolean;
|
|
42
|
+
failureReason?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Multi-Agent Orchestrator (Phase 3).
|
|
46
|
+
*
|
|
47
|
+
* Coordinates concurrent agents across Claude and Codex harnesses:
|
|
48
|
+
* - Claude: Programmatic subagent definitions or isolated SDK sessions with independent UUIDs.
|
|
49
|
+
* - Codex: Orchestrator-level thread fan-out with independent thread sessions.
|
|
50
|
+
* - Concurrency: Enforces workspace mutation locks (for shared workspaces) and worktree branch isolation (when worktreePath is provided).
|
|
51
|
+
* - Pipelines: Supports sequential pipeline execution with fail-fast skip on upstream failure.
|
|
52
|
+
*/
|
|
53
|
+
export declare class MultiAgentOrchestrator extends EventEmitter {
|
|
54
|
+
private readonly workspacePath;
|
|
55
|
+
private readonly options?;
|
|
56
|
+
private readonly runningHandles;
|
|
57
|
+
private isInterrupted;
|
|
58
|
+
constructor(workspacePath: string, options?: MultiAgentOrchestratorOptions);
|
|
59
|
+
runTeam(specs: TeamAgentSpec[], runOptions?: RunTeamOptions): Promise<TeamworkResult>;
|
|
60
|
+
private buildResult;
|
|
61
|
+
interruptAll(): Promise<void>;
|
|
62
|
+
private executeAgent;
|
|
63
|
+
private aggregateUsage;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agent/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKjF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;IACvD,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,EACb,QAAQ,SAA2B,GAClC,MAAM,CAOR;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,oBAAoB,CAAC,EAAE,MAAM,YAAY,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,YAAY,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;IAC9E,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,6BAA6B;IAMpE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAsG3F,OAAO,CAAC,WAAW;IAsBb,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAarB,YAAY;IA8E1B,OAAO,CAAC,cAAc;CA0BvB"}
|