@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
@@ -0,0 +1,126 @@
1
+ import { type ClientFamily } from './store.js';
2
+ import type { VectleConfig } from './store.js';
3
+ type IntegrationCapability = 'full_lifecycle' | 'policy_and_mcp' | 'mcp_only' | 'authorized_only' | 'disconnected' | 'conflict';
4
+ type AdapterOption = {
5
+ client_family: ClientFamily;
6
+ profile_label: string;
7
+ adapter_entry_id: string | null;
8
+ };
9
+ type ClientSelection = {
10
+ schema_version: 'client-selection-v1';
11
+ status: 'not_required' | 'selected' | 'choice_required' | 'none_detected';
12
+ reason: 'all_requested' | 'managed_invocation' | 'explicit_family' | 'single_detected' | 'multiple_detected' | 'same_family_multiple_profiles' | 'no_supported_client';
13
+ options: AdapterOption[];
14
+ };
15
+ export type SupportedClientFamily = Exclude<ClientFamily, 'terminal' | 'unknown'>;
16
+ export declare const SUPPORTED_CLIENTS: readonly SupportedClientFamily[];
17
+ export type DetectionResult = {
18
+ client: SupportedClientFamily;
19
+ state: 'active_invocation' | 'managed_existing' | 'configured_unmanaged' | 'installed_only' | 'absent';
20
+ confidence: 'authoritative' | 'high' | 'weak' | 'none';
21
+ profileKey: string | null;
22
+ profileLabel: string;
23
+ adapterEntryId: string | null;
24
+ evidence: Array<{
25
+ source: 'explicit_flag' | 'managed_manifest' | 'immediate_parent' | 'documented_host_marker' | 'exact_config_entry' | 'executable';
26
+ safeCode: string;
27
+ }>;
28
+ };
29
+ export type IntegrationManifestEntry = {
30
+ adapter_entry_id: string;
31
+ client_family: SupportedClientFamily;
32
+ profile_label: string;
33
+ integration_capability: IntegrationCapability;
34
+ policy_checksum: `sha256:${string}`;
35
+ integration_binding_digest: `sha256:${string}`;
36
+ managed: true;
37
+ config_digest: `sha256:${string}` | null;
38
+ hook_digest: `sha256:${string}` | null;
39
+ installed_at: string;
40
+ updated_at: string;
41
+ };
42
+ export type IntegrationManifest = {
43
+ schema_version: 'integrations-v1';
44
+ entries: IntegrationManifestEntry[];
45
+ };
46
+ export declare function emptyIntegrationManifest(): IntegrationManifest;
47
+ export declare function validateAdapterEntryId(value: unknown): value is string;
48
+ export declare function loadIntegrationManifest(root?: string): IntegrationManifest;
49
+ export declare function saveIntegrationManifest(manifest: IntegrationManifest, root?: string): void;
50
+ export declare function removeIntegrationEntries(families?: readonly SupportedClientFamily[], root?: string): number;
51
+ export type DetectionOptions = {
52
+ explicit?: ClientFamily | 'auto' | 'all';
53
+ trustedInvocation?: SupportedClientFamily;
54
+ home?: string;
55
+ manifest?: IntegrationManifest;
56
+ configEvidence?: Partial<Record<SupportedClientFamily, string[]>>;
57
+ };
58
+ export declare function detectClients(options?: DetectionOptions): DetectionResult[];
59
+ export declare function chooseClient(options?: DetectionOptions): {
60
+ selection: ClientSelection;
61
+ selected: DetectionResult | null;
62
+ candidates: DetectionResult[];
63
+ };
64
+ export declare function newIntegrationEntry(client: SupportedClientFamily, profileLabel: string, policyChecksum: `sha256:${string}`, integrationBindingDigest: `sha256:${string}`, capability?: IntegrationCapability): IntegrationManifestEntry;
65
+ export type IntegrationBindingDetails = {
66
+ clientFamily: SupportedClientFamily;
67
+ profileKey: string;
68
+ stateRoot: string;
69
+ nodePath: string;
70
+ nodeSha256: `sha256:${string}`;
71
+ cliEntry: string;
72
+ cliSha256: `sha256:${string}`;
73
+ policyBaseVersion: string;
74
+ policyVariant: string;
75
+ policyChecksum: `sha256:${string}`;
76
+ ownedTargetIdentifiers: string[];
77
+ managedCommandArgumentVectors: string[][];
78
+ };
79
+ export declare function canonicalIntegrationBinding(value: Record<string, unknown>): string;
80
+ export declare function integrationBindingProjection(config: Pick<VectleConfig, 'endpoint' | 'installation'>, adapterEntryId: string, details?: IntegrationBindingDetails): {
81
+ schema_version: string;
82
+ adapter_entry_id: string;
83
+ client_family: string;
84
+ profile_key: string;
85
+ state_root: string;
86
+ approved_api_origin: string;
87
+ cli_version: string;
88
+ runtime: {
89
+ node_path: string;
90
+ node_sha256: string;
91
+ cli_entry: string;
92
+ cli_sha256: string;
93
+ };
94
+ policy: {
95
+ base_version: string;
96
+ variant: string;
97
+ checksum: string;
98
+ };
99
+ owned_target_identifiers: never[];
100
+ managed_command_argument_vectors: never[];
101
+ } | {
102
+ schema_version: string;
103
+ adapter_entry_id: string;
104
+ client_family: SupportedClientFamily;
105
+ profile_key: string;
106
+ state_root: string;
107
+ approved_api_origin: string;
108
+ cli_version: string;
109
+ runtime: {
110
+ node_path: string;
111
+ node_sha256: `sha256:${string}`;
112
+ cli_entry: string;
113
+ cli_sha256: `sha256:${string}`;
114
+ };
115
+ policy: {
116
+ base_version: string;
117
+ variant: string;
118
+ checksum: `sha256:${string}`;
119
+ };
120
+ owned_target_identifiers: string[];
121
+ managed_command_argument_vectors: string[][];
122
+ };
123
+ export declare function integrationBindingDigest(config: Pick<VectleConfig, 'endpoint' | 'installation'>, adapterEntryId: string, details?: IntegrationBindingDetails): `sha256:${string}`;
124
+ export declare function managedMcpArguments(client: SupportedClientFamily, adapterEntryId: string, stateRoot: string, bindingDigest: string): string[];
125
+ export declare function integrationPathForTests(root?: string): string;
126
+ export {};
@@ -0,0 +1,173 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { isAbsolute, join } from 'node:path';
4
+ import { CLI_VERSION } from './constants.js';
5
+ import { atomicWriteJson, digestLocal, issueLocalId } from './state.js';
6
+ import { configDirectory } from './store.js';
7
+ export const SUPPORTED_CLIENTS = ['codex', 'claude_code', 'cursor', 'vscode'];
8
+ const integrationPath = (root = configDirectory()) => join(root, 'integrations.json');
9
+ const clientRoots = {
10
+ codex: '.codex',
11
+ claude_code: '.claude',
12
+ cursor: '.cursor',
13
+ vscode: '.copilot',
14
+ };
15
+ const clientMarkers = {
16
+ codex: ['config.toml', 'hooks.json', 'AGENTS.md', 'AGENTS.override.md'],
17
+ claude_code: ['settings.json', 'CLAUDE.md'],
18
+ cursor: ['mcp.json', 'hooks.json'],
19
+ vscode: ['mcp-config.json', 'instructions', 'hooks'],
20
+ };
21
+ function safeProfile(value) {
22
+ return /^[A-Za-z0-9][A-Za-z0-9 _.-]{0,79}$/u.test(value) ? value : 'default';
23
+ }
24
+ function validEntry(value) {
25
+ if (!value || typeof value !== 'object' || Array.isArray(value))
26
+ return false;
27
+ const item = value;
28
+ return Object.keys(item).length === 11
29
+ && typeof item.adapter_entry_id === 'string' && /^vai_[A-Za-z0-9_-]{22}$/u.test(item.adapter_entry_id)
30
+ && typeof item.client_family === 'string' && SUPPORTED_CLIENTS.includes(item.client_family)
31
+ && typeof item.profile_label === 'string' && safeProfile(item.profile_label) === item.profile_label
32
+ && ['full_lifecycle', 'policy_and_mcp', 'mcp_only', 'authorized_only', 'disconnected', 'conflict'].includes(String(item.integration_capability))
33
+ && typeof item.policy_checksum === 'string' && /^sha256:[0-9a-f]{64}$/u.test(item.policy_checksum)
34
+ && typeof item.integration_binding_digest === 'string' && /^sha256:[0-9a-f]{64}$/u.test(item.integration_binding_digest)
35
+ && item.managed === true
36
+ && (item.config_digest === null || typeof item.config_digest === 'string' && /^sha256:[0-9a-f]{64}$/u.test(item.config_digest))
37
+ && (item.hook_digest === null || typeof item.hook_digest === 'string' && /^sha256:[0-9a-f]{64}$/u.test(item.hook_digest))
38
+ && typeof item.installed_at === 'string' && Number.isFinite(Date.parse(item.installed_at))
39
+ && typeof item.updated_at === 'string' && Number.isFinite(Date.parse(item.updated_at));
40
+ }
41
+ export function emptyIntegrationManifest() { return { schema_version: 'integrations-v1', entries: [] }; }
42
+ export function validateAdapterEntryId(value) {
43
+ if (typeof value !== 'string' || !/^vai_[A-Za-z0-9_-]{22}$/u.test(value))
44
+ return false;
45
+ const encoded = value.slice(4);
46
+ try {
47
+ return Buffer.from(encoded, 'base64url').byteLength === 16 && Buffer.from(encoded, 'base64url').toString('base64url') === encoded;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ export function loadIntegrationManifest(root) {
54
+ try {
55
+ const value = JSON.parse(readFileSync(integrationPath(root), 'utf8'));
56
+ if (!value || typeof value !== 'object' || Array.isArray(value))
57
+ return emptyIntegrationManifest();
58
+ const record = value;
59
+ if (Object.keys(record).length !== 2 || record.schema_version !== 'integrations-v1' || !Array.isArray(record.entries) || record.entries.length > 8 || record.entries.some(entry => !validEntry(entry)))
60
+ return emptyIntegrationManifest();
61
+ return { schema_version: 'integrations-v1', entries: record.entries };
62
+ }
63
+ catch {
64
+ return emptyIntegrationManifest();
65
+ }
66
+ }
67
+ export function saveIntegrationManifest(manifest, root) {
68
+ if (manifest.entries.length > 8 || manifest.entries.some(entry => !validEntry(entry)))
69
+ throw new Error('invalid_integration_manifest');
70
+ atomicWriteJson(integrationPath(root), manifest);
71
+ }
72
+ export function removeIntegrationEntries(families, root) {
73
+ const current = loadIntegrationManifest(root);
74
+ const keep = families ? current.entries.filter(entry => !families.includes(entry.client_family)) : [];
75
+ saveIntegrationManifest({ schema_version: 'integrations-v1', entries: keep }, root);
76
+ return current.entries.length - keep.length;
77
+ }
78
+ function exactConfigEvidence(family, home = homedir()) {
79
+ const root = join(home, clientRoots[family]);
80
+ const present = clientMarkers[family].filter(marker => existsSync(join(root, marker)));
81
+ return present.length ? present : null;
82
+ }
83
+ export function detectClients(options = {}) {
84
+ const manifest = options.manifest ?? loadIntegrationManifest();
85
+ if (options.explicit && options.explicit !== 'auto' && options.explicit !== 'all' && options.explicit !== 'terminal' && options.explicit !== 'unknown') {
86
+ const existing = manifest.entries.find(entry => entry.client_family === options.explicit);
87
+ return [{ client: options.explicit, state: existing ? 'managed_existing' : 'active_invocation', confidence: 'authoritative', profileKey: existing?.profile_label ?? null, profileLabel: existing?.profile_label ?? 'default', adapterEntryId: existing?.adapter_entry_id ?? null, evidence: [{ source: 'explicit_flag', safeCode: 'client_explicit' }] }];
88
+ }
89
+ if (options.trustedInvocation) {
90
+ const existing = manifest.entries.find(entry => entry.client_family === options.trustedInvocation);
91
+ return [{ client: options.trustedInvocation, state: 'active_invocation', confidence: 'authoritative', profileKey: existing?.profile_label ?? null, profileLabel: existing?.profile_label ?? 'default', adapterEntryId: existing?.adapter_entry_id ?? null, evidence: [{ source: 'documented_host_marker', safeCode: 'trusted_invocation' }] }];
92
+ }
93
+ const results = [];
94
+ for (const client of SUPPORTED_CLIENTS) {
95
+ const existing = manifest.entries.filter(entry => entry.client_family === client);
96
+ const evidence = options.configEvidence?.[client] ?? exactConfigEvidence(client, options.home);
97
+ if (existing.length) {
98
+ for (const entry of existing)
99
+ results.push({ client, state: 'managed_existing', confidence: 'high', profileKey: entry.profile_label, profileLabel: entry.profile_label, adapterEntryId: entry.adapter_entry_id, evidence: [{ source: 'managed_manifest', safeCode: 'managed_entry' }] });
100
+ }
101
+ else if (evidence?.length) {
102
+ results.push({ client, state: 'configured_unmanaged', confidence: 'weak', profileKey: null, profileLabel: 'default', adapterEntryId: null, evidence: evidence.slice(0, 4).map(safeCode => ({ source: 'exact_config_entry', safeCode: `marker_${safeCode.replace(/[^A-Za-z0-9_-]/gu, '_')}` })) });
103
+ }
104
+ }
105
+ return results;
106
+ }
107
+ export function chooseClient(options = {}) {
108
+ if (options.explicit === 'all') {
109
+ const candidates = detectClients({ ...options, explicit: 'auto' });
110
+ const optionsList = candidates.map(candidateOption).slice(0, 8);
111
+ return { selection: { schema_version: 'client-selection-v1', status: 'not_required', reason: 'all_requested', options: optionsList }, selected: null, candidates };
112
+ }
113
+ const candidates = detectClients(options);
114
+ if (options.explicit && options.explicit !== 'auto' && options.explicit !== 'terminal' && options.explicit !== 'unknown') {
115
+ const selected = candidates[0] ?? null;
116
+ return { selection: { schema_version: 'client-selection-v1', status: 'selected', reason: 'explicit_family', options: selected ? [candidateOption(selected)] : [] }, selected, candidates };
117
+ }
118
+ const strong = candidates.filter(candidate => candidate.confidence === 'authoritative' || candidate.confidence === 'high');
119
+ if (strong.length === 1)
120
+ return { selection: { schema_version: 'client-selection-v1', status: 'selected', reason: strong[0].state === 'managed_existing' ? 'managed_invocation' : 'single_detected', options: [candidateOption(strong[0])] }, selected: strong[0], candidates };
121
+ if (strong.length > 1)
122
+ return { selection: { schema_version: 'client-selection-v1', status: 'choice_required', reason: new Set(strong.map(item => item.client)).size === 1 ? 'same_family_multiple_profiles' : 'multiple_detected', options: strong.map(candidateOption).slice(0, 8) }, selected: null, candidates };
123
+ return { selection: { schema_version: 'client-selection-v1', status: 'none_detected', reason: 'no_supported_client', options: [] }, selected: null, candidates };
124
+ }
125
+ function candidateOption(value) {
126
+ return { client_family: value.client, profile_label: safeProfile(value.profileLabel), adapter_entry_id: value.adapterEntryId };
127
+ }
128
+ export function newIntegrationEntry(client, profileLabel, policyChecksum, integrationBindingDigest, capability = 'mcp_only') {
129
+ const now = new Date().toISOString();
130
+ return { adapter_entry_id: issueLocalId('vai'), client_family: client, profile_label: safeProfile(profileLabel), integration_capability: capability, policy_checksum: policyChecksum, integration_binding_digest: integrationBindingDigest, managed: true, config_digest: null, hook_digest: null, installed_at: now, updated_at: now };
131
+ }
132
+ function canonicalBindingValue(value) {
133
+ if (typeof value === 'string')
134
+ return value.normalize('NFC');
135
+ if (Array.isArray(value))
136
+ return value.map(canonicalBindingValue);
137
+ if (value && typeof value === 'object')
138
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, child]) => [key.normalize('NFC'), canonicalBindingValue(child)]));
139
+ return value;
140
+ }
141
+ export function canonicalIntegrationBinding(value) {
142
+ return JSON.stringify(canonicalBindingValue(value));
143
+ }
144
+ export function integrationBindingProjection(config, adapterEntryId, details) {
145
+ if (!validateAdapterEntryId(adapterEntryId))
146
+ throw new Error('invalid_adapter_entry_id');
147
+ const endpoint = config.endpoint.replace(/\/$/u, '');
148
+ if (!details)
149
+ return {
150
+ schema_version: 'integration-binding-v1', adapter_entry_id: adapterEntryId, client_family: 'unknown', profile_key: 'default', state_root: '', approved_api_origin: endpoint, cli_version: CLI_VERSION,
151
+ runtime: { node_path: '', node_sha256: `sha256:${'0'.repeat(64)}`, cli_entry: '', cli_sha256: `sha256:${'0'.repeat(64)}` },
152
+ policy: { base_version: 'agent-policy-v1', variant: 'lookup_on_demand__sharing_explicit', checksum: `sha256:${'0'.repeat(64)}` },
153
+ owned_target_identifiers: [], managed_command_argument_vectors: [],
154
+ };
155
+ if (details.stateRoot && !isAbsolute(details.stateRoot) || !isAbsolute(details.nodePath) || !isAbsolute(details.cliEntry))
156
+ throw new Error('invalid_integration_binding');
157
+ return {
158
+ schema_version: 'integration-binding-v1', adapter_entry_id: adapterEntryId, client_family: details.clientFamily, profile_key: details.profileKey, state_root: details.stateRoot, approved_api_origin: endpoint, cli_version: CLI_VERSION,
159
+ runtime: { node_path: details.nodePath, node_sha256: details.nodeSha256, cli_entry: details.cliEntry, cli_sha256: details.cliSha256 },
160
+ policy: { base_version: details.policyBaseVersion, variant: details.policyVariant, checksum: details.policyChecksum },
161
+ owned_target_identifiers: [...details.ownedTargetIdentifiers], managed_command_argument_vectors: details.managedCommandArgumentVectors.map(vector => [...vector]),
162
+ };
163
+ }
164
+ export function integrationBindingDigest(config, adapterEntryId, details) {
165
+ return digestLocal(canonicalIntegrationBinding(integrationBindingProjection(config, adapterEntryId, details)));
166
+ }
167
+ export function managedMcpArguments(client, adapterEntryId, stateRoot, bindingDigest) {
168
+ if (!validateAdapterEntryId(adapterEntryId) || !/^sha256:[0-9a-f]{64}$/u.test(bindingDigest) || !isAbsolute(stateRoot))
169
+ throw new Error('invalid_integration_binding');
170
+ return ['mcp', '--client', client, '--adapter-entry-id', adapterEntryId, '--state-root', stateRoot, '--integration-manifest-digest', bindingDigest];
171
+ }
172
+ export function integrationPathForTests(root) { return integrationPath(root); }
173
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../src/integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type CredentialBackend, type VectleConfig } from './store.js';
2
+ export type LegacyCredentialSource = 'macos_keychain' | 'linux_secret_service' | 'windows_credential_manager' | 'file' | 'environment';
3
+ export type LegacyOriginBinding = {
4
+ credential_handle: `sha256:${string}`;
5
+ credential_source: LegacyCredentialSource;
6
+ selected_root_digest: `sha256:${string}`;
7
+ origin: string;
8
+ pinned_by: 'compiled_official_endpoint';
9
+ state: 'active' | 'superseded';
10
+ created_at: string;
11
+ };
12
+ export type LegacyOriginBindings = {
13
+ schema_version: 'legacy-origin-bindings-v1';
14
+ entries: LegacyOriginBinding[];
15
+ };
16
+ export type LegacyCompatibility = {
17
+ schema_version: 'legacy-compatibility-v1';
18
+ source_config_digest: `sha256:${string}`;
19
+ state: 'legacy_v1' | 'upgraded_v2';
20
+ contributor_id: string | null;
21
+ display_name: string | null;
22
+ identity_scope: 'project' | 'global' | null;
23
+ client_family: VectleConfig['clientFamily'];
24
+ credential_backend: CredentialBackend | null;
25
+ authorization_mode: 'standing' | 'per_write' | null;
26
+ authorization_expires_at: string | null;
27
+ last_update_notice_version: string | null;
28
+ last_update_notice_at: string | null;
29
+ };
30
+ export declare function legacyOriginBindingsPath(root?: string): string;
31
+ export declare function legacyCompatibilityPath(root?: string): string;
32
+ export declare function legacyRootDigest(root: string): `sha256:${string}`;
33
+ export declare function legacyCredentialHandle(source: LegacyCredentialSource, token: string): `sha256:${string}`;
34
+ export declare function legacySource(backend: CredentialBackend | undefined, platform?: NodeJS.Platform, environment?: NodeJS.ProcessEnv): LegacyCredentialSource;
35
+ export declare function compiledOfficialOrigin(value: string): string;
36
+ /** Pin a legacy credential before any authenticated request is allowed. */
37
+ export declare function ensureLegacyOriginBinding(input: {
38
+ root?: string;
39
+ token: string;
40
+ source: LegacyCredentialSource;
41
+ endpoint: string;
42
+ now?: string;
43
+ }): LegacyOriginBinding;
44
+ export declare function readLegacyCompatibility(root?: string): LegacyCompatibility | null;
45
+ export declare function writeLegacyCompatibility(config: VectleConfig, state: 'legacy_v1' | 'upgraded_v2', root?: string): LegacyCompatibility;
@@ -0,0 +1,149 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { DEFAULT_ENDPOINT } from './constants.js';
5
+ import { atomicWriteJson, digestLocal } from './state.js';
6
+ import { configDirectory, configPath } from './store.js';
7
+ const safeId = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
8
+ const safeDisplay = /^[^\r\n]{1,80}$/u;
9
+ const semver = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u;
10
+ const digestPattern = /^sha256:[0-9a-f]{64}$/u;
11
+ export function legacyOriginBindingsPath(root = configDirectory()) { return join(root, 'legacy-origin-bindings.json'); }
12
+ export function legacyCompatibilityPath(root = configDirectory()) { return join(root, 'legacy-compatibility.json'); }
13
+ function sha(value) { return `sha256:${createHash('sha256').update(value).digest('hex')}`; }
14
+ export function legacyRootDigest(root) { return sha(root.normalize('NFC')); }
15
+ export function legacyCredentialHandle(source, token) {
16
+ if (!/^vctk_[A-Za-z0-9_-]{43}$/u.test(token))
17
+ throw new Error('invalid_legacy_credential');
18
+ return sha(`${source}\0${token}`);
19
+ }
20
+ export function legacySource(backend, platform = process.platform, environment = process.env) {
21
+ if (typeof environment.VECTLE_TOKEN === 'string' && environment.VECTLE_TOKEN.trim())
22
+ return 'environment';
23
+ if (backend === 'file')
24
+ return 'file';
25
+ if (platform === 'darwin')
26
+ return 'macos_keychain';
27
+ if (platform === 'linux')
28
+ return 'linux_secret_service';
29
+ if (platform === 'win32')
30
+ return 'windows_credential_manager';
31
+ return 'file';
32
+ }
33
+ export function compiledOfficialOrigin(value) {
34
+ let origin;
35
+ try {
36
+ const parsed = new URL(value);
37
+ if (parsed.protocol !== 'https:' || parsed.username || parsed.password || parsed.pathname !== '/' || parsed.search || parsed.hash)
38
+ throw new Error('invalid_origin');
39
+ origin = parsed.origin;
40
+ }
41
+ catch {
42
+ throw new Error('endpoint_mismatch');
43
+ }
44
+ const official = new URL(DEFAULT_ENDPOINT).origin;
45
+ if (origin !== official)
46
+ throw new Error('endpoint_mismatch');
47
+ return official;
48
+ }
49
+ function validBinding(value) {
50
+ if (!value || typeof value !== 'object' || Array.isArray(value))
51
+ return false;
52
+ const item = value;
53
+ return Object.keys(item).length === 8
54
+ && digestPattern.test(String(item.credential_handle))
55
+ && ['macos_keychain', 'linux_secret_service', 'windows_credential_manager', 'file', 'environment'].includes(String(item.credential_source))
56
+ && digestPattern.test(String(item.selected_root_digest))
57
+ && item.origin === new URL(DEFAULT_ENDPOINT).origin
58
+ && item.pinned_by === 'compiled_official_endpoint'
59
+ && (item.state === 'active' || item.state === 'superseded')
60
+ && typeof item.created_at === 'string' && Number.isFinite(Date.parse(item.created_at));
61
+ }
62
+ function readBindings(root) {
63
+ try {
64
+ const value = JSON.parse(readFileSync(legacyOriginBindingsPath(root), 'utf8'));
65
+ if (Object.keys(value).length !== 2 || value.schema_version !== 'legacy-origin-bindings-v1' || !Array.isArray(value.entries) || value.entries.length > 8 || value.entries.some(item => !validBinding(item)))
66
+ throw new Error('legacy_origin_binding_invalid');
67
+ return { schema_version: 'legacy-origin-bindings-v1', entries: value.entries };
68
+ }
69
+ catch (error) {
70
+ if (error instanceof Error && error.message === 'legacy_origin_binding_invalid')
71
+ throw error;
72
+ return { schema_version: 'legacy-origin-bindings-v1', entries: [] };
73
+ }
74
+ }
75
+ /** Pin a legacy credential before any authenticated request is allowed. */
76
+ export function ensureLegacyOriginBinding(input) {
77
+ const root = input.root ?? configDirectory();
78
+ const origin = compiledOfficialOrigin(input.endpoint);
79
+ const createdAt = input.now ?? new Date().toISOString();
80
+ if (!Number.isFinite(Date.parse(createdAt)))
81
+ throw new Error('invalid_timestamp');
82
+ const entry = { credential_handle: legacyCredentialHandle(input.source, input.token), credential_source: input.source, selected_root_digest: legacyRootDigest(root), origin, pinned_by: 'compiled_official_endpoint', state: 'active', created_at: createdAt };
83
+ const bindings = readBindings(root);
84
+ const matching = bindings.entries.find(item => item.credential_handle === entry.credential_handle);
85
+ if (matching && (matching.origin !== origin || matching.selected_root_digest !== entry.selected_root_digest || matching.credential_source !== entry.credential_source || matching.state !== 'active'))
86
+ throw new Error('legacy_origin_binding_mismatch');
87
+ if (!matching)
88
+ bindings.entries = [...bindings.entries.filter(item => item.credential_source !== 'environment' || input.source === 'environment'), entry].slice(-8);
89
+ atomicWriteJson(legacyOriginBindingsPath(root), bindings);
90
+ return entry;
91
+ }
92
+ function sourceDigest() {
93
+ try {
94
+ return sha(readFileSync(configPath()));
95
+ }
96
+ catch {
97
+ return digestLocal('missing-legacy-config');
98
+ }
99
+ }
100
+ function validCompatibility(value) {
101
+ if (!value || typeof value !== 'object' || Array.isArray(value))
102
+ return false;
103
+ const item = value;
104
+ return Object.keys(item).length === 12
105
+ && item.schema_version === 'legacy-compatibility-v1'
106
+ && digestPattern.test(String(item.source_config_digest))
107
+ && (item.state === 'legacy_v1' || item.state === 'upgraded_v2')
108
+ && (item.contributor_id === null || typeof item.contributor_id === 'string' && safeId.test(item.contributor_id))
109
+ && (item.display_name === null || typeof item.display_name === 'string' && safeDisplay.test(item.display_name))
110
+ && (item.identity_scope === null || item.identity_scope === 'project' || item.identity_scope === 'global')
111
+ && ['codex', 'claude_code', 'cursor', 'vscode', 'terminal', 'unknown'].includes(String(item.client_family))
112
+ && (item.credential_backend === null || ['keychain', 'file', 'environment'].includes(String(item.credential_backend)))
113
+ && (item.authorization_mode === null || item.authorization_mode === 'standing' || item.authorization_mode === 'per_write')
114
+ && (item.authorization_expires_at === null || typeof item.authorization_expires_at === 'string' && Number.isFinite(Date.parse(item.authorization_expires_at)))
115
+ && (item.last_update_notice_version === null || typeof item.last_update_notice_version === 'string' && semver.test(item.last_update_notice_version))
116
+ && (item.last_update_notice_at === null || typeof item.last_update_notice_at === 'string' && Number.isFinite(Date.parse(item.last_update_notice_at)));
117
+ }
118
+ function optionalId(value) { return typeof value === 'string' && safeId.test(value) ? value : null; }
119
+ function optionalDisplay(value) { return typeof value === 'string' && safeDisplay.test(value) ? value : null; }
120
+ function optionalDate(value) { return typeof value === 'string' && Number.isFinite(Date.parse(value)) ? value : null; }
121
+ function optionalSemver(value) { return typeof value === 'string' && semver.test(value) ? value : null; }
122
+ export function readLegacyCompatibility(root = configDirectory()) {
123
+ try {
124
+ const value = JSON.parse(readFileSync(legacyCompatibilityPath(root), 'utf8'));
125
+ return validCompatibility(value) ? value : null;
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ export function writeLegacyCompatibility(config, state, root = configDirectory()) {
132
+ const value = {
133
+ schema_version: 'legacy-compatibility-v1',
134
+ source_config_digest: sourceDigest(),
135
+ state,
136
+ contributor_id: optionalId(config.contributorId),
137
+ display_name: optionalDisplay(config.displayName),
138
+ identity_scope: config.identityScope === 'project' || config.identityScope === 'global' ? config.identityScope : null,
139
+ client_family: config.clientFamily,
140
+ credential_backend: config.credentialBackend === 'keychain' || config.credentialBackend === 'file' || config.credentialBackend === 'environment' ? config.credentialBackend : null,
141
+ authorization_mode: config.authorizationMode === 'standing' || config.authorizationMode === 'per_write' ? config.authorizationMode : null,
142
+ authorization_expires_at: optionalDate(config.authorizationExpiresAt),
143
+ last_update_notice_version: optionalSemver(config.lastUpdateNoticeVersion),
144
+ last_update_notice_at: optionalDate(config.lastUpdateNoticeAt),
145
+ };
146
+ atomicWriteJson(legacyCompatibilityPath(root), value);
147
+ return value;
148
+ }
149
+ //# sourceMappingURL=legacy-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-compat.js","sourceRoot":"","sources":["../src/legacy-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { renderAgentPolicy } from './agent-policy.js';
2
+ import { type IntegrationManifestEntry, type SupportedClientFamily } from './integrations.js';
3
+ import { type VectleConfig } from './store.js';
4
+ export type LifecycleOptions = {
5
+ client: SupportedClientFamily;
6
+ stateRoot: string;
7
+ adapterEntryId: string;
8
+ integrationManifestDigest: `sha256:${string}`;
9
+ policyChecksum?: `sha256:${string}`;
10
+ config?: VectleConfig;
11
+ now?: () => number;
12
+ };
13
+ export type HookState = {
14
+ schema_version: 'hook-state-v1';
15
+ client_family: SupportedClientFamily;
16
+ adapter_entry_id: string;
17
+ policy_version: 'agent-policy-v1';
18
+ policy_variant: ReturnType<typeof renderAgentPolicy>['variant'];
19
+ policy_checksum: `sha256:${string}`;
20
+ integration_manifest_digest: `sha256:${string}`;
21
+ executed_at: string;
22
+ };
23
+ export declare function readHookState(root: string, adapterEntryId: string): HookState | null;
24
+ export declare function runLifecycle(options: LifecycleOptions): Promise<{
25
+ schema_version: "lifecycle-gate-v1";
26
+ status: "blocked";
27
+ client_family: SupportedClientFamily;
28
+ adapter_entry_id: null;
29
+ policy_variant: import("./agent-policy.js").PolicyVariant;
30
+ policy_checksum: `sha256:${string}`;
31
+ hook_state: null;
32
+ reason_code: string;
33
+ instructions: string;
34
+ } | {
35
+ schema_version: "lifecycle-gate-v1";
36
+ status: "invoked";
37
+ client_family: SupportedClientFamily;
38
+ adapter_entry_id: string;
39
+ policy_variant: import("./agent-policy.js").PolicyVariant;
40
+ policy_checksum: `sha256:${string}`;
41
+ hook_state: HookState;
42
+ instructions: string;
43
+ }>;
44
+ export declare function validateManagedMcpBinding(options: {
45
+ client: SupportedClientFamily;
46
+ stateRoot: string;
47
+ adapterEntryId: string;
48
+ integrationManifestDigest: string;
49
+ config: VectleConfig;
50
+ }): IntegrationManifestEntry;