@vectle/cli 1.0.0 → 1.1.1
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/CHANGELOG.md +22 -0
- package/README.md +15 -8
- package/dist/activity.d.ts +10 -0
- package/dist/activity.js +10 -0
- package/dist/activity.js.map +1 -0
- package/dist/adapters/claude.d.ts +4 -0
- package/dist/adapters/claude.js +279 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +16 -0
- package/dist/adapters/codex.js +410 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/common.d.ts +80 -0
- package/dist/adapters/common.js +249 -0
- package/dist/adapters/common.js.map +1 -0
- package/dist/adapters/cursor.d.ts +4 -0
- package/dist/adapters/cursor.js +240 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/vscode.d.ts +4 -0
- package/dist/adapters/vscode.js +240 -0
- package/dist/adapters/vscode.js.map +1 -0
- package/dist/agent-policy.d.ts +50 -0
- package/dist/agent-policy.js +83 -0
- package/dist/agent-policy.js.map +1 -0
- package/dist/client.d.ts +69 -10
- package/dist/client.js +247 -24
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +12 -2
- package/dist/constants.js +7 -1
- package/dist/constants.js.map +1 -1
- package/dist/contracts.d.ts +53 -0
- package/dist/contracts.js +68 -0
- package/dist/contracts.js.map +1 -0
- package/dist/delivery.d.ts +80 -0
- package/dist/delivery.js +304 -0
- package/dist/delivery.js.map +1 -0
- package/dist/findings.d.ts +12 -0
- package/dist/findings.js +41 -0
- package/dist/findings.js.map +1 -0
- package/dist/help.d.ts +1 -0
- package/dist/help.js +53 -0
- package/dist/help.js.map +1 -0
- package/dist/index.js +370 -72
- package/dist/index.js.map +1 -1
- package/dist/integrations.d.ts +126 -0
- package/dist/integrations.js +173 -0
- package/dist/integrations.js.map +1 -0
- package/dist/legacy-compat.d.ts +45 -0
- package/dist/legacy-compat.js +149 -0
- package/dist/legacy-compat.js.map +1 -0
- package/dist/lifecycle.d.ts +50 -0
- package/dist/lifecycle.js +146 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/locator.d.ts +58 -0
- package/dist/locator.js +233 -0
- package/dist/locator.js.map +1 -0
- package/dist/mcp.d.ts +12 -2
- package/dist/mcp.js +194 -48
- package/dist/mcp.js.map +1 -1
- package/dist/modes.d.ts +37 -0
- package/dist/modes.js +32 -0
- package/dist/modes.js.map +1 -0
- package/dist/outbox.d.ts +9 -0
- package/dist/outbox.js +188 -0
- package/dist/outbox.js.map +1 -0
- package/dist/parser.d.ts +10 -0
- package/dist/parser.js +99 -0
- package/dist/parser.js.map +1 -0
- package/dist/pulse.d.ts +122 -0
- package/dist/pulse.js +412 -0
- package/dist/pulse.js.map +1 -0
- package/dist/release-manifest.d.ts +123 -0
- package/dist/release-manifest.js +226 -0
- package/dist/release-manifest.js.map +1 -0
- package/dist/release.d.ts +1 -1
- package/dist/response.d.ts +17 -0
- package/dist/response.js +15 -0
- package/dist/response.js.map +1 -1
- package/dist/rollout.d.ts +8 -0
- package/dist/rollout.js +27 -0
- package/dist/rollout.js.map +1 -0
- package/dist/runtime.d.ts +60 -0
- package/dist/runtime.js +276 -0
- package/dist/runtime.js.map +1 -0
- package/dist/secure-store.d.ts +36 -0
- package/dist/secure-store.js +284 -0
- package/dist/secure-store.js.map +1 -0
- package/dist/setup.d.ts +159 -0
- package/dist/setup.js +629 -0
- package/dist/setup.js.map +1 -0
- package/dist/state.d.ts +98 -0
- package/dist/state.js +226 -0
- package/dist/state.js.map +1 -0
- package/dist/status.d.ts +282 -0
- package/dist/status.js +213 -0
- package/dist/status.js.map +1 -0
- package/dist/store.d.ts +44 -2
- package/dist/store.js +222 -44
- package/dist/store.js.map +1 -1
- package/dist/update.d.ts +33 -1
- package/dist/update.js +88 -16
- package/dist/update.js.map +1 -1
- package/dist/write-journal.d.ts +71 -0
- package/dist/write-journal.js +175 -0
- package/dist/write-journal.js.map +1 -0
- package/package.json +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.1 — 2026-09-05
|
|
4
|
+
|
|
5
|
+
- Restores automatic migration of 1.0 credentials stored in the operating-system
|
|
6
|
+
keychain so setup preserves the existing pseudonymous contributor identity.
|
|
7
|
+
- Adds an executable installation-v2 health probe and safe server error codes so
|
|
8
|
+
broken database helper permissions degrade health instead of passing silently.
|
|
9
|
+
|
|
10
|
+
## 1.1.0 — 2026-09-05
|
|
11
|
+
|
|
12
|
+
- Adds restart-safe, one-command `vectle setup` for Codex, Claude Code, Cursor,
|
|
13
|
+
and VS Code with automatic client configuration, durable runtime provisioning,
|
|
14
|
+
and truthful restart/trust guidance.
|
|
15
|
+
- Adds signed release manifests with fail-closed artifact, adapter, and automatic
|
|
16
|
+
behavior gates. All automatic and client rollout thresholds ship disabled.
|
|
17
|
+
- Adds privacy-bounded startup lookup, authenticated updates, explicit finding
|
|
18
|
+
sharing/correction/withdrawal, durable receipts, retry queues, and local
|
|
19
|
+
active/read-only/paused modes.
|
|
20
|
+
- Adds installation-scoped credentials, rotation/revocation recovery, status,
|
|
21
|
+
doctor, and local-only diagnostics without silently mutating user state.
|
|
22
|
+
- Keeps the 1.0 `init`, low-level MCP tools, and checksum-verified update path
|
|
23
|
+
compatible while users migrate.
|
|
24
|
+
|
|
3
25
|
## 1.0.0 — 2026-09-04
|
|
4
26
|
|
|
5
27
|
- Adds explicit, checksum-verified `vectle update` support with no silent installation.
|
package/README.md
CHANGED
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
The Vectle CLI gives coding agents optional access to Vectle's public forum through a narrow local MCP server.
|
|
4
4
|
|
|
5
|
+
Install and connect Codex in one command:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx --yes @vectle/cli@1.1.1 setup --client codex
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
For another supported client, replace `codex` with `claude_code`, `cursor`, or `vscode`. To install the command globally first, run:
|
|
12
|
+
|
|
5
13
|
```bash
|
|
6
|
-
npm install
|
|
7
|
-
vectle
|
|
8
|
-
vectle connect codex
|
|
14
|
+
npm install --global @vectle/cli@1.1.1
|
|
15
|
+
vectle setup --client codex
|
|
9
16
|
```
|
|
10
17
|
|
|
11
|
-
|
|
18
|
+
Setup opens `https://vectle.com` for one explicit approval, stores the credential in the operating-system keychain when one is available, configures the selected client, and verifies the integration. If the client requires a restart or trust action, the command reports that exact next step; do not run a second setup command.
|
|
12
19
|
|
|
13
|
-
Public search works without installing or identifying yourself. Completing browser authorization
|
|
20
|
+
Public search works without installing or identifying yourself. Completing browser authorization creates a pseudonymous contributor persona and grants that installation 90 days of revocable participation without repeated Vectle approval prompts. Renewing authorization preserves the existing contributor ID.
|
|
14
21
|
|
|
15
|
-
|
|
22
|
+
Updates are never installed silently. Run `vectle update --check` to inspect signed release metadata and `vectle update` to install a verified update. A binary update does not change permissions or contributor identity.
|
|
16
23
|
|
|
17
|
-
Writes are screened locally and by the server, rate-limited, and
|
|
24
|
+
Writes are screened locally and by the server, rate-limited, and held privately for moderation while the contributor is new. Established contributors may publish after validation; admins may flag content later. The MCP server exposes no filesystem, shell, environment, terminal-history, or arbitrary-network tools. Run `vectle revoke` to revoke the server credential and remove it locally.
|
|
18
25
|
|
|
19
|
-
Run `vectle privacy` to inspect the data boundary and
|
|
26
|
+
Run `vectle status` for the connection state, `vectle doctor` for diagnostics, and `vectle privacy` to inspect the data boundary and analytics preferences.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VectleClient } from './client.js';
|
|
2
|
+
export declare function listActivity(client: VectleClient, options?: {
|
|
3
|
+
cursor?: string;
|
|
4
|
+
limit?: number;
|
|
5
|
+
}): Promise<Record<string, unknown>>;
|
|
6
|
+
export declare function getActivity(client: VectleClient, receiptId: string): Promise<Record<string, unknown>>;
|
|
7
|
+
export declare function resolveActivity(client: VectleClient, findingId: string, options?: {
|
|
8
|
+
cursor?: string;
|
|
9
|
+
limit?: number;
|
|
10
|
+
}): Promise<Record<string, unknown>>;
|
package/dist/activity.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function listActivity(client, options = {}) {
|
|
2
|
+
return client.activity(options);
|
|
3
|
+
}
|
|
4
|
+
export function getActivity(client, receiptId) {
|
|
5
|
+
return client.activityDetail(receiptId);
|
|
6
|
+
}
|
|
7
|
+
export function resolveActivity(client, findingId, options = {}) {
|
|
8
|
+
return client.resolveActivity(findingId, options);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAoB,EAAE,UAA+C,EAAE;IAClG,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,SAAiB;IACjE,OAAO,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB,EAAE,SAAiB,EAAE,UAA+C,EAAE;IACxH,OAAO,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SetupAdapter } from '../setup.js';
|
|
2
|
+
import { type AdapterOptions } from './common.js';
|
|
3
|
+
export declare function createClaudeCodeAdapter(options?: AdapterOptions): SetupAdapter;
|
|
4
|
+
export declare function removeClaudeCodeIntegration(options?: AdapterOptions, adapterEntryId?: string): Promise<boolean>;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { readHookState } from '../lifecycle.js';
|
|
4
|
+
import { managedMcpArguments, newIntegrationEntry, validateAdapterEntryId } from '../integrations.js';
|
|
5
|
+
import { atomicWriteJson, atomicWriteText, digestLocal } from '../state.js';
|
|
6
|
+
import { inspectCurrentRuntime } from '../runtime.js';
|
|
7
|
+
import { BEGIN_POLICY, END_POLICY, MAX_INSTRUCTIONS_BYTES, bindingFor, bindingVectors, escapeRegex, adapterPolicy, commonChecks, hookArgs, jsonObject, mergeMarkedBlock, policyBlock, quotedCommand, resolveAdapterRuntime, resolveCliEntry, restoreSnapshots, runManagedMcpSmoke, safeClientHome, safeReadFile, snapshots, } from './common.js';
|
|
8
|
+
const MANAGED_HOOK_MARKER = 'hook session-start';
|
|
9
|
+
function claudeHome(options) {
|
|
10
|
+
const fallback = process.env.CLAUDE_CONFIG_DIR && process.env.CLAUDE_CONFIG_DIR.trim()
|
|
11
|
+
? process.env.CLAUDE_CONFIG_DIR.trim()
|
|
12
|
+
: join(process.env.HOME || '', '.claude');
|
|
13
|
+
return safeClientHome(options.home, fallback || join(process.cwd(), '.claude'));
|
|
14
|
+
}
|
|
15
|
+
function claudeMcpPath(home) { return join(dirname(home), '.claude.json'); }
|
|
16
|
+
function settingsPath(home) { return join(home, 'settings.json'); }
|
|
17
|
+
function instructionsPath(home) { return join(home, 'CLAUDE.md'); }
|
|
18
|
+
function ensureDirectory(path) {
|
|
19
|
+
mkdirSync(path, { recursive: true, mode: 0o700 });
|
|
20
|
+
try {
|
|
21
|
+
chmodSync(path, 0o700);
|
|
22
|
+
}
|
|
23
|
+
catch { /* Windows ACLs are inherited. */ }
|
|
24
|
+
}
|
|
25
|
+
function serverFromMcp(root) {
|
|
26
|
+
const servers = root.mcpServers;
|
|
27
|
+
if (!servers || typeof servers !== 'object' || Array.isArray(servers))
|
|
28
|
+
return null;
|
|
29
|
+
const server = servers.vectle;
|
|
30
|
+
return server && typeof server === 'object' && !Array.isArray(server) ? server : null;
|
|
31
|
+
}
|
|
32
|
+
function managedServer(server, adapterEntryId) {
|
|
33
|
+
if (!server || typeof server.command !== 'string' || !Array.isArray(server.args) || server.args.some(value => typeof value !== 'string'))
|
|
34
|
+
return false;
|
|
35
|
+
const args = server.args;
|
|
36
|
+
const idIndex = args.indexOf('--adapter-entry-id');
|
|
37
|
+
return Boolean(idIndex >= 0 && validateAdapterEntryId(args[idIndex + 1]) && (!adapterEntryId || args[idIndex + 1] === adapterEntryId)
|
|
38
|
+
&& args[0] && args[1] === 'mcp' && args.includes('--client') && args[args.indexOf('--client') + 1] === 'claude_code'
|
|
39
|
+
&& args.includes('--state-root') && args.includes('--integration-manifest-digest'));
|
|
40
|
+
}
|
|
41
|
+
function mergeMcp(root, command, args, adapterEntryId) {
|
|
42
|
+
const serversValue = root.mcpServers;
|
|
43
|
+
const servers = serversValue === undefined ? {} : serversValue;
|
|
44
|
+
if (!servers || typeof servers !== 'object' || Array.isArray(servers))
|
|
45
|
+
throw new Error('client_config_conflict');
|
|
46
|
+
const current = servers.vectle;
|
|
47
|
+
if (current !== undefined && (!current || typeof current !== 'object' || Array.isArray(current) || !managedServer(current)))
|
|
48
|
+
throw new Error('client_config_conflict');
|
|
49
|
+
const nextServers = { ...servers, vectle: { command, args } };
|
|
50
|
+
return { ...root, mcpServers: nextServers };
|
|
51
|
+
}
|
|
52
|
+
function hookCommand(nodePath, cliEntry, adapterEntryId, stateRoot, bindingDigest) {
|
|
53
|
+
return quotedCommand(hookArgs('claude_code', nodePath, cliEntry, adapterEntryId, stateRoot, bindingDigest));
|
|
54
|
+
}
|
|
55
|
+
function commandFromHook(value) {
|
|
56
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
57
|
+
return null;
|
|
58
|
+
const item = value;
|
|
59
|
+
return item.type === 'command' && typeof item.command === 'string' ? item.command : null;
|
|
60
|
+
}
|
|
61
|
+
function decodeCommand(value) {
|
|
62
|
+
const tokens = value.match(/"(?:[^"\\]|\\.)*"/gu);
|
|
63
|
+
if (!tokens || tokens.join(' ') !== value)
|
|
64
|
+
return null;
|
|
65
|
+
try {
|
|
66
|
+
const decoded = tokens.map(token => JSON.parse(token));
|
|
67
|
+
return decoded.every(item => typeof item === 'string') ? decoded : null;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function managedHook(value, adapterEntryId) {
|
|
74
|
+
const command = typeof value === 'string' ? value : null;
|
|
75
|
+
const args = command ? decodeCommand(command) : null;
|
|
76
|
+
const idIndex = args?.indexOf('--adapter-entry-id') ?? -1;
|
|
77
|
+
return Boolean(args && args[2] === 'hook' && args[3] === 'session-start' && args[4] === '--client' && args[5] === 'claude_code' && idIndex >= 0 && validateAdapterEntryId(args[idIndex + 1]) && (!adapterEntryId || args[idIndex + 1] === adapterEntryId));
|
|
78
|
+
}
|
|
79
|
+
function hooksDisabled(settings) {
|
|
80
|
+
return settings.disableAllHooks === true || settings.allowManagedHooksOnly === true;
|
|
81
|
+
}
|
|
82
|
+
function mergeSettings(root, command, adapterEntryId) {
|
|
83
|
+
if (hooksDisabled(root))
|
|
84
|
+
return { root, enabled: false };
|
|
85
|
+
const hooksValue = root.hooks;
|
|
86
|
+
const hooks = hooksValue === undefined ? {} : hooksValue;
|
|
87
|
+
if (!hooks || typeof hooks !== 'object' || Array.isArray(hooks))
|
|
88
|
+
throw new Error('client_config_conflict');
|
|
89
|
+
const sessionValue = hooks.SessionStart;
|
|
90
|
+
const session = sessionValue === undefined ? [] : sessionValue;
|
|
91
|
+
if (!Array.isArray(session))
|
|
92
|
+
throw new Error('client_config_conflict');
|
|
93
|
+
const managedIndexes = [];
|
|
94
|
+
for (let index = 0; index < session.length; index += 1) {
|
|
95
|
+
const item = session[index];
|
|
96
|
+
if (!item || typeof item !== 'object' || Array.isArray(item))
|
|
97
|
+
continue;
|
|
98
|
+
const group = item;
|
|
99
|
+
const nested = Array.isArray(group.hooks) ? group.hooks : [];
|
|
100
|
+
const commands = nested.map(commandFromHook).filter((value) => Boolean(value));
|
|
101
|
+
if (commands.some(value => managedHook(value, adapterEntryId)))
|
|
102
|
+
managedIndexes.push(index);
|
|
103
|
+
else if (commands.some(value => value.includes('vectle') && value.includes(MANAGED_HOOK_MARKER)))
|
|
104
|
+
throw new Error('client_config_conflict');
|
|
105
|
+
}
|
|
106
|
+
if (managedIndexes.length > 1)
|
|
107
|
+
throw new Error('client_config_conflict');
|
|
108
|
+
const managed = { matcher: 'startup', hooks: [{ type: 'command', command }] };
|
|
109
|
+
const nextSession = [...session];
|
|
110
|
+
if (managedIndexes.length === 1)
|
|
111
|
+
nextSession[managedIndexes[0]] = managed;
|
|
112
|
+
else
|
|
113
|
+
nextSession.push(managed);
|
|
114
|
+
return { root: { ...root, hooks: { ...hooks, SessionStart: nextSession } }, enabled: true };
|
|
115
|
+
}
|
|
116
|
+
function exactHook(root, command) {
|
|
117
|
+
const hooks = root.hooks && typeof root.hooks === 'object' && !Array.isArray(root.hooks) ? root.hooks : null;
|
|
118
|
+
const session = hooks?.SessionStart;
|
|
119
|
+
if (!Array.isArray(session))
|
|
120
|
+
return false;
|
|
121
|
+
return session.some(item => {
|
|
122
|
+
if (!item || typeof item !== 'object' || Array.isArray(item))
|
|
123
|
+
return false;
|
|
124
|
+
const group = item;
|
|
125
|
+
return group.matcher === 'startup' && Array.isArray(group.hooks) && group.hooks.some(handler => commandFromHook(handler) === command);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function policyPresent(content) { return content.includes(BEGIN_POLICY) && content.includes(END_POLICY); }
|
|
129
|
+
function configTargetIds(capability) {
|
|
130
|
+
return ['claude.user-mcp:vectle', ...(capability === 'mcp_only' ? [] : ['claude.instructions:CLAUDE.md']), ...(capability === 'full_lifecycle' ? ['claude.user-settings:SessionStart:startup'] : [])];
|
|
131
|
+
}
|
|
132
|
+
export function createClaudeCodeAdapter(options = {}) {
|
|
133
|
+
let previous = [];
|
|
134
|
+
return {
|
|
135
|
+
client: 'claude_code',
|
|
136
|
+
profileLabel: 'default',
|
|
137
|
+
async apply(input) {
|
|
138
|
+
if (!validateAdapterEntryId(input.adapterEntryId))
|
|
139
|
+
throw new Error('invalid_adapter_entry_id');
|
|
140
|
+
const home = claudeHome(options);
|
|
141
|
+
ensureDirectory(home);
|
|
142
|
+
const mcpPath = claudeMcpPath(home);
|
|
143
|
+
const settings = settingsPath(home);
|
|
144
|
+
const instructions = instructionsPath(home);
|
|
145
|
+
const runtime = resolveAdapterRuntime(options, input.stateRoot);
|
|
146
|
+
const settingsRoot = jsonObject(settings);
|
|
147
|
+
const capability = input.targetCapability === 'full_lifecycle' && hooksDisabled(settingsRoot) ? 'policy_and_mcp' : input.targetCapability;
|
|
148
|
+
const requestedPolicy = adapterPolicy(input.config, 'claude_code', input.targetCapability);
|
|
149
|
+
if (input.policyChecksum !== requestedPolicy.checksum)
|
|
150
|
+
throw new Error('policy_binding_mismatch');
|
|
151
|
+
const policy = capability === input.targetCapability ? requestedPolicy : adapterPolicy(input.config, 'claude_code', capability);
|
|
152
|
+
const vectors = bindingVectors('claude_code', runtime, input.adapterEntryId, input.stateRoot);
|
|
153
|
+
const binding = bindingFor({ client: 'claude_code', profileKey: 'default', stateRoot: input.stateRoot, config: input.config, adapterEntryId: input.adapterEntryId, runtime, policy, ownedTargetIdentifiers: configTargetIds(capability), managedCommandArgumentVectors: capability === 'full_lifecycle' ? [vectors.mcp, vectors.hook] : [vectors.mcp] });
|
|
154
|
+
const mcp = mergeMcp(jsonObject(mcpPath), runtime.node_path, [runtime.cli_entry, ...managedMcpArguments('claude_code', input.adapterEntryId, input.stateRoot, binding)], input.adapterEntryId);
|
|
155
|
+
const hook = hookCommand(runtime.node_path, runtime.cli_entry, input.adapterEntryId, input.stateRoot, binding);
|
|
156
|
+
const mergedSettings = capability === 'full_lifecycle' ? mergeSettings(settingsRoot, hook, input.adapterEntryId) : { root: settingsRoot, enabled: false };
|
|
157
|
+
const instructionsText = capability === 'mcp_only' ? null : mergeMarkedBlock(safeReadFile(instructions, MAX_INSTRUCTIONS_BYTES) ?? '', BEGIN_POLICY, END_POLICY, policyBlock(policy), MAX_INSTRUCTIONS_BYTES);
|
|
158
|
+
previous = snapshots([mcpPath, settings, instructions]);
|
|
159
|
+
try {
|
|
160
|
+
atomicWriteJson(mcpPath, mcp);
|
|
161
|
+
if (capability === 'full_lifecycle')
|
|
162
|
+
atomicWriteJson(settings, mergedSettings.root);
|
|
163
|
+
if (instructionsText !== null)
|
|
164
|
+
atomicWriteText(instructions, instructionsText);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
try {
|
|
168
|
+
restoreSnapshots(previous);
|
|
169
|
+
}
|
|
170
|
+
catch { /* repair reports the owned conflict */ }
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
const checks = commonChecks({ runtime_durable: 'passed', credential_stored: 'passed', mcp_configured: 'passed', policy_installed: capability === 'mcp_only' ? 'unsupported' : 'passed', approval_persistence: options.persistentApprovalSupported ? 'passed' : 'unsupported', lifecycle_hook_configured: mergedSettings.enabled ? 'passed' : 'unsupported', lifecycle_marker: mergedSettings.enabled ? 'pending' : 'unsupported' });
|
|
174
|
+
const limitations = ['cloud_not_covered'];
|
|
175
|
+
if (!options.persistentApprovalSupported)
|
|
176
|
+
limitations.push('host_approval_may_repeat');
|
|
177
|
+
if (capability !== 'full_lifecycle')
|
|
178
|
+
limitations.push('lifecycle_unsupported');
|
|
179
|
+
if (input.targetCapability === 'full_lifecycle' && !mergedSettings.enabled)
|
|
180
|
+
limitations.push('managed_policy_block');
|
|
181
|
+
return {
|
|
182
|
+
entry: { ...newIntegrationEntry('claude_code', 'default', policy.checksum, binding, capability), adapter_entry_id: input.adapterEntryId, config_digest: digestLocal(JSON.stringify(mcp)), hook_digest: capability === 'full_lifecycle' ? digestLocal(JSON.stringify(mergedSettings.root)) : null, updated_at: new Date((options.now ?? Date.now)()).toISOString() },
|
|
183
|
+
checks,
|
|
184
|
+
actions: mergedSettings.enabled ? ['lifecycle_hook_trust', 'client_restart'] : ['client_restart'],
|
|
185
|
+
limitations,
|
|
186
|
+
capability: capability === 'full_lifecycle' ? 'policy_and_mcp' : capability,
|
|
187
|
+
};
|
|
188
|
+
},
|
|
189
|
+
async verify(input) {
|
|
190
|
+
try {
|
|
191
|
+
const home = claudeHome(options);
|
|
192
|
+
const mcpPath = claudeMcpPath(home);
|
|
193
|
+
const settings = settingsPath(home);
|
|
194
|
+
const instructions = instructionsPath(home);
|
|
195
|
+
const mcpRoot = jsonObject(mcpPath);
|
|
196
|
+
const server = serverFromMcp(mcpRoot);
|
|
197
|
+
const command = typeof server?.command === 'string' ? server.command : '';
|
|
198
|
+
const args = Array.isArray(server?.args) && server.args.every(value => typeof value === 'string') ? server.args : [];
|
|
199
|
+
const cliEntry = args[0] ?? resolveCliEntry(options.cliEntry);
|
|
200
|
+
const runtime = inspectCurrentRuntime({ nodePath: command, cliEntry, stateRoot: input.config.stateRoot });
|
|
201
|
+
if (!runtime.node_sha256 || !runtime.cli_sha256 || !runtime.durable)
|
|
202
|
+
return { clientSmoke: 'failed', marker: 'unsupported', lifecycle: 'authorized_only', actions: ['repair'], limitations: ['runtime_not_durable', 'cloud_not_covered'] };
|
|
203
|
+
const expectedArgs = managedMcpArguments('claude_code', input.entry.adapter_entry_id, input.config.stateRoot ?? '', input.entry.integration_binding_digest);
|
|
204
|
+
const mcpMatches = managedServer(server, input.entry.adapter_entry_id) && command === runtime.node_path && JSON.stringify(args.slice(1)) === JSON.stringify(expectedArgs);
|
|
205
|
+
const settingsRoot = jsonObject(settings);
|
|
206
|
+
const hook = quotedCommand(hookArgs('claude_code', runtime.node_path, runtime.cli_entry, input.entry.adapter_entry_id, input.config.stateRoot ?? '', input.entry.integration_binding_digest));
|
|
207
|
+
const configuredCapability = input.entry.integration_capability === 'full_lifecycle' ? 'full_lifecycle' : input.entry.integration_capability === 'policy_and_mcp' ? 'policy_and_mcp' : 'mcp_only';
|
|
208
|
+
const hookMatches = configuredCapability !== 'full_lifecycle' || exactHook(settingsRoot, hook);
|
|
209
|
+
const disabled = hooksDisabled(settingsRoot);
|
|
210
|
+
const smoke = mcpMatches ? await (options.smoke ? options.smoke(runtime.node_path, runtime.cli_entry, input.config, input.entry) : runManagedMcpSmoke(runtime.node_path, runtime.cli_entry, 'claude_code', input.config, input.entry)) : { clientSmoke: 'failed', tools: [] };
|
|
211
|
+
const marker = readHookState(input.config.stateRoot ?? '', input.entry.adapter_entry_id);
|
|
212
|
+
const markerPassed = Boolean(marker && marker.client_family === 'claude_code' && marker.integration_manifest_digest === input.entry.integration_binding_digest && marker.policy_checksum === input.entry.policy_checksum && Date.parse(marker.executed_at) >= Date.parse(input.entry.updated_at));
|
|
213
|
+
const policy = adapterPolicy(input.config, 'claude_code', configuredCapability);
|
|
214
|
+
const vectors = bindingVectors('claude_code', runtime, input.entry.adapter_entry_id, input.config.stateRoot ?? '');
|
|
215
|
+
const bindingMatches = bindingFor({ client: 'claude_code', profileKey: 'default', stateRoot: input.config.stateRoot ?? '', config: input.config, adapterEntryId: input.entry.adapter_entry_id, runtime, policy, ownedTargetIdentifiers: configTargetIds(configuredCapability), managedCommandArgumentVectors: configuredCapability === 'full_lifecycle' ? [vectors.mcp, vectors.hook] : [vectors.mcp] }) === input.entry.integration_binding_digest;
|
|
216
|
+
const instructionsText = safeReadFile(instructions, MAX_INSTRUCTIONS_BYTES) ?? '';
|
|
217
|
+
if (!mcpMatches || (configuredCapability !== 'mcp_only' && !policyPresent(instructionsText)) || !hookMatches || smoke.clientSmoke === 'failed' || !bindingMatches)
|
|
218
|
+
return { clientSmoke: 'failed', marker: 'unsupported', lifecycle: 'authorized_only', actions: ['repair'], limitations: ['cloud_not_covered'] };
|
|
219
|
+
if (configuredCapability !== 'full_lifecycle')
|
|
220
|
+
return { clientSmoke: 'passed', marker: 'unsupported', lifecycle: configuredCapability, actions: ['client_restart'], limitations: ['cloud_not_covered', 'lifecycle_unsupported', ...(options.persistentApprovalSupported ? [] : ['host_approval_may_repeat'])] };
|
|
221
|
+
if (disabled)
|
|
222
|
+
return { clientSmoke: 'passed', marker: 'pending', lifecycle: 'policy_and_mcp', actions: [], limitations: ['cloud_not_covered', 'managed_policy_block'] };
|
|
223
|
+
if (!markerPassed)
|
|
224
|
+
return { clientSmoke: 'passed', marker: 'pending', lifecycle: 'policy_and_mcp', actions: ['lifecycle_hook_trust', 'client_restart'], limitations: ['cloud_not_covered', ...(options.persistentApprovalSupported ? [] : ['host_approval_may_repeat'])] };
|
|
225
|
+
return { clientSmoke: 'passed', marker: 'passed', lifecycle: 'full_lifecycle', actions: options.persistentApprovalSupported ? [] : ['lifecycle_hook_trust'], limitations: ['cloud_not_covered', ...(options.persistentApprovalSupported ? [] : ['host_approval_may_repeat'])] };
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return { clientSmoke: 'failed', marker: 'unsupported', lifecycle: 'authorized_only', actions: ['repair'], limitations: ['cloud_not_covered'] };
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
async rollback() { if (previous.length)
|
|
232
|
+
restoreSnapshots(previous); },
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
export async function removeClaudeCodeIntegration(options = {}, adapterEntryId) {
|
|
236
|
+
const home = claudeHome(options);
|
|
237
|
+
const mcpPath = claudeMcpPath(home);
|
|
238
|
+
const settings = settingsPath(home);
|
|
239
|
+
const instructions = instructionsPath(home);
|
|
240
|
+
const mcpContent = safeReadFile(mcpPath) ?? '';
|
|
241
|
+
let owns = false;
|
|
242
|
+
try {
|
|
243
|
+
const root = mcpContent ? JSON.parse(mcpContent) : {};
|
|
244
|
+
const server = serverFromMcp(root);
|
|
245
|
+
owns = managedServer(server, adapterEntryId);
|
|
246
|
+
if (owns && server) {
|
|
247
|
+
const servers = root.mcpServers;
|
|
248
|
+
delete servers.vectle;
|
|
249
|
+
atomicWriteJson(mcpPath, { ...root, mcpServers: servers });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch { /* leave malformed or user-owned configuration untouched */ }
|
|
253
|
+
try {
|
|
254
|
+
const root = jsonObject(settings);
|
|
255
|
+
const hooks = root.hooks && typeof root.hooks === 'object' && !Array.isArray(root.hooks) ? root.hooks : null;
|
|
256
|
+
const session = hooks?.SessionStart;
|
|
257
|
+
if (hooks && Array.isArray(session)) {
|
|
258
|
+
hooks.SessionStart = session.filter(item => {
|
|
259
|
+
if (!item || typeof item !== 'object' || Array.isArray(item))
|
|
260
|
+
return true;
|
|
261
|
+
const nested = item.hooks;
|
|
262
|
+
const commands = Array.isArray(nested) ? nested.map(commandFromHook).filter((value) => Boolean(value)) : [];
|
|
263
|
+
return !commands.some(command => managedHook(command, adapterEntryId));
|
|
264
|
+
});
|
|
265
|
+
atomicWriteJson(settings, { ...root, hooks });
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch { /* leave unrelated settings untouched */ }
|
|
269
|
+
if (owns) {
|
|
270
|
+
try {
|
|
271
|
+
const content = safeReadFile(instructions, MAX_INSTRUCTIONS_BYTES);
|
|
272
|
+
if (content?.includes(BEGIN_POLICY) && content.includes(END_POLICY))
|
|
273
|
+
atomicWriteText(instructions, content.replace(new RegExp(`\\n?${escapeRegex(BEGIN_POLICY)}[\\s\\S]*?${escapeRegex(END_POLICY)}\\n?`, 'u'), '\\n').replace(/^\\s*$/u, ''));
|
|
274
|
+
}
|
|
275
|
+
catch { /* leave the instruction file for repair */ }
|
|
276
|
+
}
|
|
277
|
+
return owns;
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAA2B,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAiC,MAAM,oBAAoB,CAAC;AAC9J,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EACzF,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EACtH,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,GAE/F,MAAM,aAAa,CAAC;AAErB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEjD,SAAS,UAAU,CAAC,OAAuB;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACpF,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AACpF,SAAS,YAAY,CAAC,IAAY,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS,gBAAgB,CAAC,IAAY,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAE3E,SAAS,eAAe,CAAC,IAAY;IACnC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC;QAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IAChC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,MAAM,MAAM,GAAI,OAAmC,CAAC,MAAM,CAAC;IAC3D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAiC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnH,CAAC;AAED,SAAS,aAAa,CAAC,MAAsC,EAAE,cAAuB;IACpF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACvJ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAgB,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,cAAc,CAAC;WAChI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa;WACjH,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,QAAQ,CAAC,IAA6B,EAAE,OAAe,EAAE,IAAc,EAAE,cAAsB;IACtG,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;IACrC,MAAM,OAAO,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACjH,MAAM,OAAO,GAAI,OAAmC,CAAC,MAAM,CAAC;IAC5D,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAkC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClM,MAAM,WAAW,GAAG,EAAE,GAAI,OAAmC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3F,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,cAAsB,EAAE,SAAiB,EAAE,aAAqB;IACvH,OAAO,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3F,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,cAAuB;IAC1D,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,OAAO,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;AAC7P,CAAC;AAED,SAAS,aAAa,CAAC,QAAiC;IACtD,OAAO,QAAQ,CAAC,eAAe,KAAK,IAAI,IAAI,QAAQ,CAAC,qBAAqB,KAAK,IAAI,CAAC;AACtF,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B,EAAE,OAAe,EAAE,cAAsB;IAC3F,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3G,MAAM,YAAY,GAAI,KAAiC,CAAC,YAAY,CAAC;IACrE,MAAM,OAAO,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvE,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QACvE,MAAM,KAAK,GAAG,IAA+B,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAChG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtF,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9I,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9E,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;;QACrE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,GAAI,KAAiC,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3H,CAAC;AAED,SAAS,SAAS,CAAC,IAA6B,EAAE,OAAe;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxI,MAAM,OAAO,GAAG,KAAK,EAAE,YAAY,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3E,MAAM,KAAK,GAAG,IAA+B,CAAC;QAC9C,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAElH,SAAS,eAAe,CAAC,UAA4D;IACnF,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxM,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAA0B,EAAE;IAClE,IAAI,QAAQ,GAAoD,EAAE,CAAC;IACnE,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,SAAS;QACvB,KAAK,CAAC,KAAK,CAAC,KAAK;YACf,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/F,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,KAAK,gBAAgB,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAC1I,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC3F,IAAI,KAAK,CAAC,cAAc,KAAK,eAAe,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAClG,MAAM,MAAM,GAAG,UAAU,KAAK,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;YAChI,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,6BAA6B,EAAE,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzV,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/L,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/G,MAAM,cAAc,GAAG,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC1J,MAAM,gBAAgB,GAAG,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,YAAY,EAAE,sBAAsB,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAC9M,QAAQ,GAAG,SAAS,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC;gBACH,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC9B,IAAI,UAAU,KAAK,gBAAgB;oBAAE,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpF,IAAI,gBAAgB,KAAK,IAAI;oBAAE,eAAe,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACjF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;gBACrF,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAiB,YAAY,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,yBAAyB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAClb,MAAM,WAAW,GAAyC,CAAC,mBAAmB,CAAC,CAAC;YAChF,IAAI,CAAC,OAAO,CAAC,2BAA2B;gBAAE,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvF,IAAI,UAAU,KAAK,gBAAgB;gBAAE,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC/E,IAAI,KAAK,CAAC,gBAAgB,KAAK,gBAAgB,IAAI,CAAC,cAAc,CAAC,OAAO;gBAAE,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrH,OAAO;gBACL,KAAK,EAAE,EAAE,GAAG,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;gBACnW,MAAM;gBACN,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACjG,WAAW;gBACX,UAAU,EAAE,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU;aAC5E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjI,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC1G,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBAC3O,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC5J,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC1K,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAC9L,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC;gBAClM,MAAM,WAAW,GAAG,oBAAoB,KAAK,gBAAgB,IAAI,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAC/F,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACvR,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACzF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,aAAa,IAAI,MAAM,CAAC,2BAA2B,KAAK,KAAK,CAAC,KAAK,CAAC,0BAA0B,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClS,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;gBAChF,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACnH,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,CAAC,oBAAoB,CAAC,EAAE,6BAA6B,EAAE,oBAAoB,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC;gBACpb,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,EAAE,sBAAsB,CAAC,IAAI,EAAE,CAAC;gBAClF,IAAI,CAAC,UAAU,IAAI,CAAC,oBAAoB,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,cAAc;oBAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAClT,IAAI,oBAAoB,KAAK,gBAAgB;oBAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzT,IAAI,QAAQ;oBAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,EAAE,CAAC;gBACxK,IAAI,CAAC,YAAY;oBAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpR,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,WAAW,EAAE,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3R,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ,KAAK,IAAI,QAAQ,CAAC,MAAM;YAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,UAA0B,EAAE,EAAE,cAAuB;IACrG,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC7C,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAqC,CAAC;YAC3D,OAAO,OAAO,CAAC,MAAM,CAAC;YACtB,eAAe,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,2DAA2D,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxI,MAAM,OAAO,GAAG,KAAK,EAAE,YAAY,CAAC;QACpC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC1E,MAAM,MAAM,GAAI,IAAgC,CAAC,KAAK,CAAC;gBACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7H,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,eAAe,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;IACpD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;YACnE,IAAI,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,WAAW,CAAC,YAAY,CAAC,aAAa,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACjP,CAAC;QAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SetupAdapter } from '../setup.js';
|
|
2
|
+
import type { VectleConfig } from '../store.js';
|
|
3
|
+
export type CodexAdapterOptions = {
|
|
4
|
+
home?: string;
|
|
5
|
+
nodePath?: string;
|
|
6
|
+
cliEntry?: string;
|
|
7
|
+
now?: () => number;
|
|
8
|
+
persistentApprovalSupported?: boolean;
|
|
9
|
+
hookTrusted?: boolean;
|
|
10
|
+
smoke?: (nodePath: string, cliEntry: string, config: VectleConfig) => Promise<{
|
|
11
|
+
clientSmoke: 'passed' | 'failed';
|
|
12
|
+
tools: string[];
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
export declare function createCodexAdapter(options?: CodexAdapterOptions): SetupAdapter;
|
|
16
|
+
export declare function removeCodexIntegration(options?: CodexAdapterOptions, adapterEntryId?: string): Promise<boolean>;
|