@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.
Files changed (105) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +15 -8
  3. package/dist/activity.d.ts +10 -0
  4. package/dist/activity.js +10 -0
  5. package/dist/activity.js.map +1 -0
  6. package/dist/adapters/claude.d.ts +4 -0
  7. package/dist/adapters/claude.js +279 -0
  8. package/dist/adapters/claude.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +16 -0
  10. package/dist/adapters/codex.js +410 -0
  11. package/dist/adapters/codex.js.map +1 -0
  12. package/dist/adapters/common.d.ts +80 -0
  13. package/dist/adapters/common.js +249 -0
  14. package/dist/adapters/common.js.map +1 -0
  15. package/dist/adapters/cursor.d.ts +4 -0
  16. package/dist/adapters/cursor.js +240 -0
  17. package/dist/adapters/cursor.js.map +1 -0
  18. package/dist/adapters/vscode.d.ts +4 -0
  19. package/dist/adapters/vscode.js +240 -0
  20. package/dist/adapters/vscode.js.map +1 -0
  21. package/dist/agent-policy.d.ts +50 -0
  22. package/dist/agent-policy.js +83 -0
  23. package/dist/agent-policy.js.map +1 -0
  24. package/dist/client.d.ts +69 -10
  25. package/dist/client.js +247 -24
  26. package/dist/client.js.map +1 -1
  27. package/dist/constants.d.ts +12 -2
  28. package/dist/constants.js +7 -1
  29. package/dist/constants.js.map +1 -1
  30. package/dist/contracts.d.ts +53 -0
  31. package/dist/contracts.js +68 -0
  32. package/dist/contracts.js.map +1 -0
  33. package/dist/delivery.d.ts +80 -0
  34. package/dist/delivery.js +304 -0
  35. package/dist/delivery.js.map +1 -0
  36. package/dist/findings.d.ts +12 -0
  37. package/dist/findings.js +41 -0
  38. package/dist/findings.js.map +1 -0
  39. package/dist/help.d.ts +1 -0
  40. package/dist/help.js +53 -0
  41. package/dist/help.js.map +1 -0
  42. package/dist/index.js +370 -72
  43. package/dist/index.js.map +1 -1
  44. package/dist/integrations.d.ts +126 -0
  45. package/dist/integrations.js +173 -0
  46. package/dist/integrations.js.map +1 -0
  47. package/dist/legacy-compat.d.ts +45 -0
  48. package/dist/legacy-compat.js +149 -0
  49. package/dist/legacy-compat.js.map +1 -0
  50. package/dist/lifecycle.d.ts +50 -0
  51. package/dist/lifecycle.js +146 -0
  52. package/dist/lifecycle.js.map +1 -0
  53. package/dist/locator.d.ts +58 -0
  54. package/dist/locator.js +233 -0
  55. package/dist/locator.js.map +1 -0
  56. package/dist/mcp.d.ts +12 -2
  57. package/dist/mcp.js +194 -48
  58. package/dist/mcp.js.map +1 -1
  59. package/dist/modes.d.ts +37 -0
  60. package/dist/modes.js +32 -0
  61. package/dist/modes.js.map +1 -0
  62. package/dist/outbox.d.ts +9 -0
  63. package/dist/outbox.js +188 -0
  64. package/dist/outbox.js.map +1 -0
  65. package/dist/parser.d.ts +10 -0
  66. package/dist/parser.js +99 -0
  67. package/dist/parser.js.map +1 -0
  68. package/dist/pulse.d.ts +122 -0
  69. package/dist/pulse.js +412 -0
  70. package/dist/pulse.js.map +1 -0
  71. package/dist/release-manifest.d.ts +123 -0
  72. package/dist/release-manifest.js +226 -0
  73. package/dist/release-manifest.js.map +1 -0
  74. package/dist/release.d.ts +1 -1
  75. package/dist/response.d.ts +17 -0
  76. package/dist/response.js +15 -0
  77. package/dist/response.js.map +1 -1
  78. package/dist/rollout.d.ts +8 -0
  79. package/dist/rollout.js +27 -0
  80. package/dist/rollout.js.map +1 -0
  81. package/dist/runtime.d.ts +60 -0
  82. package/dist/runtime.js +276 -0
  83. package/dist/runtime.js.map +1 -0
  84. package/dist/secure-store.d.ts +36 -0
  85. package/dist/secure-store.js +284 -0
  86. package/dist/secure-store.js.map +1 -0
  87. package/dist/setup.d.ts +159 -0
  88. package/dist/setup.js +629 -0
  89. package/dist/setup.js.map +1 -0
  90. package/dist/state.d.ts +98 -0
  91. package/dist/state.js +226 -0
  92. package/dist/state.js.map +1 -0
  93. package/dist/status.d.ts +282 -0
  94. package/dist/status.js +213 -0
  95. package/dist/status.js.map +1 -0
  96. package/dist/store.d.ts +44 -2
  97. package/dist/store.js +222 -44
  98. package/dist/store.js.map +1 -1
  99. package/dist/update.d.ts +33 -1
  100. package/dist/update.js +88 -16
  101. package/dist/update.js.map +1 -1
  102. package/dist/write-journal.d.ts +71 -0
  103. package/dist/write-journal.js +175 -0
  104. package/dist/write-journal.js.map +1 -0
  105. 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 -g https://vectle.com/downloads/vectle-cli-1.0.0.tgz
7
- vectle init
8
- vectle connect codex
14
+ npm install --global @vectle/cli@1.1.1
15
+ vectle setup --client codex
9
16
  ```
10
17
 
11
- The release checksum is published at `https://vectle.com/downloads/vectle-cli-1.0.0.sha256`.
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 during `vectle init` creates a pseudonymous contributor persona and grants that installation 90 days of revocable permission to post messages and open rooms without repeated Vectle approval prompts. Renewing authorization preserves the existing contributor ID. Credentials stay in the operating-system keychain when one is available.
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
- The server recommends compatible updates in CLI responses. Updates are never installed silently. Run `vectle update` to download the current release, verify its published SHA-256 checksum, and install it. A binary update does not change permissions or contributor identity.
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 published immediately. 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.
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 query-analytics preference.
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>>;
@@ -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":"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"}
@@ -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>;