@vectle/cli 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -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 +282 -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/dist/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { CLI_VERSION, USER_AGENT } from './constants.js';
|
|
3
3
|
import { processClientUpdate } from './release.js';
|
|
4
|
+
import { correctionIdempotencyKey, findingIdempotencyKey, withdrawalIdempotencyKey } from './findings.js';
|
|
4
5
|
export class VectleApiError extends Error {
|
|
5
6
|
status;
|
|
6
7
|
body;
|
|
@@ -16,12 +17,20 @@ export class VectleClient {
|
|
|
16
17
|
token;
|
|
17
18
|
audience;
|
|
18
19
|
updateState = { deliveredToMcp: false };
|
|
20
|
+
resolvedToken;
|
|
19
21
|
constructor(config, token, audience = 'terminal') {
|
|
20
22
|
this.config = config;
|
|
21
23
|
this.token = token;
|
|
22
24
|
this.audience = audience;
|
|
23
25
|
}
|
|
24
|
-
|
|
26
|
+
tokenValue() {
|
|
27
|
+
if (this.resolvedToken !== undefined)
|
|
28
|
+
return this.resolvedToken;
|
|
29
|
+
this.resolvedToken = typeof this.token === 'function' ? this.token() : this.token ?? null;
|
|
30
|
+
return this.resolvedToken;
|
|
31
|
+
}
|
|
32
|
+
headers(eventId, authenticated = false, invocationSource) {
|
|
33
|
+
const token = authenticated ? this.tokenValue() : null;
|
|
25
34
|
return {
|
|
26
35
|
Accept: 'application/json',
|
|
27
36
|
'User-Agent': USER_AGENT,
|
|
@@ -29,37 +38,80 @@ export class VectleClient {
|
|
|
29
38
|
'X-Vectle-Client-Version': CLI_VERSION,
|
|
30
39
|
'X-Vectle-Event-Id': eventId,
|
|
31
40
|
...(this.config.queryAnalytics ? {} : { 'X-Vectle-Analytics': 'off' }),
|
|
32
|
-
...(
|
|
41
|
+
...(invocationSource ? {
|
|
42
|
+
'X-Vectle-Query-Analytics': this.config.queryAnalytics ? 'on' : 'off',
|
|
43
|
+
'X-Vectle-Operational-Analytics': this.config.operationalAnalytics === false ? 'off' : 'on',
|
|
44
|
+
'X-Vectle-Invocation-Source': invocationSource,
|
|
45
|
+
} : {}),
|
|
46
|
+
...(authenticated && token ? { Authorization: `Bearer ${token}` } : {}),
|
|
33
47
|
};
|
|
34
48
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
...this.headers(eventId, options.authenticated),
|
|
41
|
-
...(options.body === undefined ? {} : { 'Content-Type': 'application/json' }),
|
|
42
|
-
...(options.idempotencyKey ? { 'Idempotency-Key': options.idempotencyKey } : {}),
|
|
43
|
-
},
|
|
44
|
-
body: options.body === undefined ? undefined : JSON.stringify(options.body),
|
|
45
|
-
signal: AbortSignal.timeout(10_000),
|
|
46
|
-
});
|
|
47
|
-
const text = await response.text();
|
|
48
|
-
let body = null;
|
|
49
|
+
assertOriginPinned(authenticated) {
|
|
50
|
+
if (!authenticated || !this.config.installation)
|
|
51
|
+
return;
|
|
52
|
+
let configured;
|
|
53
|
+
let approved;
|
|
49
54
|
try {
|
|
50
|
-
|
|
55
|
+
configured = new URL(this.config.endpoint).origin;
|
|
56
|
+
approved = new URL(this.config.installation.approved_api_origin).origin;
|
|
51
57
|
}
|
|
52
58
|
catch {
|
|
53
|
-
|
|
59
|
+
throw new VectleApiError('Vectle endpoint is invalid.', 400, { error: 'endpoint_mismatch' });
|
|
54
60
|
}
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
if (configured !== approved)
|
|
62
|
+
throw new VectleApiError('The configured Vectle endpoint does not match the approved installation origin.', 400, { error: 'endpoint_mismatch' });
|
|
63
|
+
}
|
|
64
|
+
async request(path, options = {}) {
|
|
65
|
+
const eventId = options.eventId ?? randomUUID();
|
|
66
|
+
const method = options.method ?? 'GET';
|
|
67
|
+
const retryable = options.retryUnavailable ?? (method === 'GET' || path.includes('/installations/token') || Boolean(options.idempotencyKey));
|
|
68
|
+
const maxAttempts = options.maxAttempts ?? (retryable ? 4 : 1);
|
|
69
|
+
this.assertOriginPinned(Boolean(options.authenticated));
|
|
70
|
+
const headers = {
|
|
71
|
+
...this.headers(eventId, options.authenticated, options.invocationSource),
|
|
72
|
+
...(options.body === undefined ? {} : { 'Content-Type': 'application/json' }),
|
|
73
|
+
...(options.idempotencyKey ? { 'Idempotency-Key': options.idempotencyKey } : {}),
|
|
74
|
+
...(options.headers ?? {}),
|
|
75
|
+
};
|
|
76
|
+
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
77
|
+
const response = await fetch(`${this.config.endpoint}${path}`, {
|
|
78
|
+
method,
|
|
79
|
+
headers,
|
|
80
|
+
body: options.body === undefined ? undefined : JSON.stringify(options.body),
|
|
81
|
+
// Vectle requests never follow redirects: a redirect target is not an
|
|
82
|
+
// approved origin, even for an anonymous task body.
|
|
83
|
+
redirect: 'manual',
|
|
84
|
+
signal: AbortSignal.timeout(options.timeoutMs ?? 10_000),
|
|
85
|
+
});
|
|
86
|
+
if (response.status >= 300 && response.status < 400) {
|
|
87
|
+
throw new VectleApiError('Vectle refused a redirected request.', 502, { error: 'endpoint_redirect_blocked' });
|
|
88
|
+
}
|
|
89
|
+
const text = await response.text();
|
|
90
|
+
let body = null;
|
|
91
|
+
try {
|
|
92
|
+
body = text ? JSON.parse(text) : null;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
body = text;
|
|
96
|
+
}
|
|
97
|
+
if (!options.skipClientUpdate)
|
|
98
|
+
body = processClientUpdate(body, this.config, this.audience, this.updateState);
|
|
99
|
+
if (response.ok)
|
|
100
|
+
return body;
|
|
101
|
+
if (retryable && (response.status === 429 || response.status === 503) && attempt + 1 < maxAttempts) {
|
|
102
|
+
const retryAfter = Number.parseInt(response.headers.get('retry-after') ?? '', 10);
|
|
103
|
+
const serverDelay = Number.isFinite(retryAfter) ? Math.max(0, Math.min(retryAfter * 1_000, 8_000)) : 0;
|
|
104
|
+
const backoff = Math.min(8_000, 250 * 2 ** attempt);
|
|
105
|
+
const delay = Math.min(8_000, Math.max(serverDelay, backoff) * (0.5 + Math.random()));
|
|
106
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
57
109
|
const message = body && typeof body === 'object' && 'message' in body && typeof body.message === 'string'
|
|
58
110
|
? body.message
|
|
59
111
|
: `Vectle request failed (${response.status}).`;
|
|
60
112
|
throw new VectleApiError(message, response.status, body);
|
|
61
113
|
}
|
|
62
|
-
|
|
114
|
+
throw new VectleApiError('Vectle request retry budget exhausted.', 503);
|
|
63
115
|
}
|
|
64
116
|
search(query, limit = 20) {
|
|
65
117
|
return this.request(`/api/v1/cli/search?q=${encodeURIComponent(query)}&limit=${limit}`);
|
|
@@ -79,11 +131,140 @@ export class VectleClient {
|
|
|
79
131
|
room(slug) {
|
|
80
132
|
return this.request(`/api/v1/cli/rooms/${encodeURIComponent(slug)}`);
|
|
81
133
|
}
|
|
82
|
-
health() { return this.request('/api/v1/health'); }
|
|
83
|
-
latestRelease() { return this.request('/api/v1/cli/releases/latest'); }
|
|
134
|
+
health(skipClientUpdate = false) { return this.request('/api/v1/health', { skipClientUpdate }); }
|
|
135
|
+
latestRelease(skipClientUpdate = false) { return this.request('/api/v1/cli/releases/latest', { skipClientUpdate }); }
|
|
84
136
|
whoami() { return this.request('/api/v1/me', { authenticated: true }); }
|
|
137
|
+
hasInstallationAccess() { const token = this.tokenValue(); return Boolean(token && /^vctia_[A-Za-z0-9_-]{43}$/u.test(token)); }
|
|
138
|
+
lookup(signature, limit = 5, timeoutMs = 1_500, invocationSource = 'startup_policy') {
|
|
139
|
+
return this.request(`/api/v1/cli/lookup?limit=${limit}`, {
|
|
140
|
+
method: 'POST', body: signature, invocationSource, timeoutMs, maxAttempts: 1, retryUnavailable: false,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
anonymousCapabilities(timeoutMs = 1_000, invocationSource = 'startup_policy') {
|
|
144
|
+
return this.request('/api/v1/cli/capabilities', {
|
|
145
|
+
invocationSource, timeoutMs, maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
listUpdates(options = {}) {
|
|
149
|
+
const params = new URLSearchParams();
|
|
150
|
+
if (options.cursor)
|
|
151
|
+
params.set('cursor', options.cursor);
|
|
152
|
+
if (options.priorityCursor)
|
|
153
|
+
params.set('priority_cursor', options.priorityCursor);
|
|
154
|
+
if (options.limit)
|
|
155
|
+
params.set('limit', String(options.limit));
|
|
156
|
+
const query = params.toString();
|
|
157
|
+
return this.request(`/api/v1/cli/updates${query ? `?${query}` : ''}`, {
|
|
158
|
+
authenticated: true, invocationSource: options.invocationSource ?? 'startup_policy', timeoutMs: options.timeoutMs ?? 1_200, maxAttempts: 1, retryUnavailable: false,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
capabilities(timeoutMs = 1_000) {
|
|
162
|
+
return this.request('/api/v1/cli/installations/capabilities', {
|
|
163
|
+
authenticated: true, invocationSource: 'explicit', timeoutMs, maxAttempts: 1, retryUnavailable: false,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
diagnostic(refreshToken, timeoutMs = 1_000) {
|
|
167
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/cli/installations/status', {
|
|
168
|
+
authenticated: true, invocationSource: 'explicit', timeoutMs, maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
createInstallationChallengeV2(input) {
|
|
172
|
+
return this.request('/api/v1/installations/challenges', {
|
|
173
|
+
method: 'POST',
|
|
174
|
+
body: {
|
|
175
|
+
schema_version: 'installation-challenge-request-v2',
|
|
176
|
+
protocol_version: 'installation-v2',
|
|
177
|
+
challenge_kind: input.challenge_kind,
|
|
178
|
+
consent_version: 2,
|
|
179
|
+
identity_scope: 'installation',
|
|
180
|
+
client_family: input.client_family,
|
|
181
|
+
requested_scopes: ['activity:read', 'content:withdraw', 'findings:write', 'profile:read', 'standing:write', 'updates:read'],
|
|
182
|
+
consent_policy_digest: input.consent_policy_digest,
|
|
183
|
+
automatic_lookup: input.automatic_lookup,
|
|
184
|
+
automatic_sharing: input.automatic_sharing,
|
|
185
|
+
},
|
|
186
|
+
authenticated: input.challenge_kind !== 'fresh',
|
|
187
|
+
invocationSource: 'explicit',
|
|
188
|
+
maxAttempts: 1,
|
|
189
|
+
retryUnavailable: false,
|
|
190
|
+
skipClientUpdate: true,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
pollInstallationChallengeV2(deviceCode, refreshCandidate) {
|
|
194
|
+
return this.request('/api/v1/installations/token', {
|
|
195
|
+
method: 'POST',
|
|
196
|
+
body: { schema_version: 'installation-token-request-v2', protocol_version: 'installation-v2', device_code: deviceCode, refresh_candidate: refreshCandidate },
|
|
197
|
+
invocationSource: 'explicit',
|
|
198
|
+
maxAttempts: 1,
|
|
199
|
+
retryUnavailable: false,
|
|
200
|
+
skipClientUpdate: true,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
beginInstallationSetupAttempt(input, refreshToken = this.tokenValue()) {
|
|
204
|
+
if (!refreshToken)
|
|
205
|
+
throw new VectleApiError('The installation refresh credential is unavailable.', 401, { error: 'invalid_credentials' });
|
|
206
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/installations/setup-attempts', {
|
|
207
|
+
method: 'POST',
|
|
208
|
+
body: { schema_version: 'installation-setup-attempt-request-v1', ...input },
|
|
209
|
+
authenticated: true,
|
|
210
|
+
invocationSource: 'explicit',
|
|
211
|
+
maxAttempts: 1,
|
|
212
|
+
retryUnavailable: false,
|
|
213
|
+
skipClientUpdate: true,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
reportInstallationSetup(setupReportToken, report) {
|
|
217
|
+
return new VectleClient(this.config, setupReportToken, this.audience).request('/api/v1/installations/setup-status', {
|
|
218
|
+
method: 'POST',
|
|
219
|
+
body: report,
|
|
220
|
+
authenticated: true,
|
|
221
|
+
invocationSource: 'explicit',
|
|
222
|
+
maxAttempts: 1,
|
|
223
|
+
retryUnavailable: false,
|
|
224
|
+
skipClientUpdate: true,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
issueInstallationSession(refreshToken = this.tokenValue()) {
|
|
228
|
+
if (!refreshToken)
|
|
229
|
+
throw new VectleApiError('The installation refresh credential is unavailable.', 401, { error: 'invalid_credentials' });
|
|
230
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/installations/session', {
|
|
231
|
+
method: 'POST',
|
|
232
|
+
body: { schema_version: 'installation-session-request-v1' },
|
|
233
|
+
authenticated: true,
|
|
234
|
+
invocationSource: 'explicit',
|
|
235
|
+
maxAttempts: 1,
|
|
236
|
+
retryUnavailable: false,
|
|
237
|
+
skipClientUpdate: true,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
prepareInstallationRotation(operationId, replacementRefreshCandidate, refreshToken = this.tokenValue()) {
|
|
241
|
+
if (!refreshToken)
|
|
242
|
+
throw new VectleApiError('The installation refresh credential is unavailable.', 401, { error: 'invalid_credentials' });
|
|
243
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/installations/rotate/prepare', {
|
|
244
|
+
method: 'POST', body: { schema_version: 'installation-rotation-prepare-request-v1', rotation_operation_id: operationId, replacement_refresh_candidate: replacementRefreshCandidate }, authenticated: true, invocationSource: 'explicit', maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
confirmInstallationRotation(operationId, pendingRefreshCandidate) {
|
|
248
|
+
return new VectleClient(this.config, pendingRefreshCandidate, this.audience).request('/api/v1/installations/rotate/confirm', {
|
|
249
|
+
method: 'POST', body: { schema_version: 'installation-rotation-confirm-request-v1', rotation_operation_id: operationId }, authenticated: true, invocationSource: 'explicit', maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
cancelInstallationRotation(operationId, refreshToken = this.tokenValue()) {
|
|
253
|
+
if (!refreshToken)
|
|
254
|
+
throw new VectleApiError('The installation refresh credential is unavailable.', 401, { error: 'invalid_credentials' });
|
|
255
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/installations/rotate/cancel', {
|
|
256
|
+
method: 'POST', body: { schema_version: 'installation-rotation-cancel-request-v1', rotation_operation_id: operationId }, authenticated: true, invocationSource: 'explicit', maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
revokeInstallationV2(input, refreshToken = this.tokenValue()) {
|
|
260
|
+
if (!refreshToken)
|
|
261
|
+
throw new VectleApiError('The installation refresh credential is unavailable.', 401, { error: 'invalid_credentials' });
|
|
262
|
+
return new VectleClient(this.config, refreshToken, this.audience).request('/api/v1/installations/revoke', {
|
|
263
|
+
method: 'POST', body: { schema_version: 'installation-revoke-v1', ...input }, authenticated: true, invocationSource: 'explicit', idempotencyKey: input.operation_id, maxAttempts: 1, retryUnavailable: false, skipClientUpdate: true,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
85
266
|
createChallenge(identityScope, clientFamily) {
|
|
86
|
-
return this.request('/api/v1/installations/challenges', { method: 'POST', body: { identity_scope: identityScope, client_family: clientFamily, ...(identityScope === 'global' ? { global_identity_opt_in: true } : {}) }, authenticated: Boolean(this.
|
|
267
|
+
return this.request('/api/v1/installations/challenges', { method: 'POST', body: { identity_scope: identityScope, client_family: clientFamily, ...(identityScope === 'global' ? { global_identity_opt_in: true } : {}) }, authenticated: Boolean(this.tokenValue()) });
|
|
87
268
|
}
|
|
88
269
|
pollChallenge(deviceCode) {
|
|
89
270
|
return this.request('/api/v1/installations/token', { method: 'POST', body: { device_code: deviceCode } });
|
|
@@ -94,6 +275,48 @@ export class VectleClient {
|
|
|
94
275
|
publishRoom(payload, idempotencyKey = randomUUID()) {
|
|
95
276
|
return this.request('/api/v1/cli/rooms', { method: 'POST', body: payload, authenticated: true, idempotencyKey });
|
|
96
277
|
}
|
|
278
|
+
shareFinding(capsule, invocationSource = 'automatic') {
|
|
279
|
+
return this.request('/api/v1/cli/findings', { method: 'POST', body: capsule, authenticated: true, idempotencyKey: findingIdempotencyKey(capsule), invocationSource });
|
|
280
|
+
}
|
|
281
|
+
correctFinding(receiptId, correction, invocationSource = 'explicit') {
|
|
282
|
+
return this.request(`/api/v1/cli/activity/${encodeURIComponent(receiptId)}/correct`, { method: 'POST', body: correction, authenticated: true, idempotencyKey: correctionIdempotencyKey(receiptId, correction), invocationSource });
|
|
283
|
+
}
|
|
284
|
+
withdrawFinding(receiptId, withdrawal) {
|
|
285
|
+
return this.request(`/api/v1/cli/activity/${encodeURIComponent(receiptId)}/withdraw`, { method: 'POST', body: withdrawal, authenticated: true, idempotencyKey: withdrawalIdempotencyKey(receiptId, withdrawal), invocationSource: 'explicit' });
|
|
286
|
+
}
|
|
287
|
+
activity(options = {}) {
|
|
288
|
+
const params = new URLSearchParams();
|
|
289
|
+
if (options.cursor)
|
|
290
|
+
params.set('cursor', options.cursor);
|
|
291
|
+
if (options.limit)
|
|
292
|
+
params.set('limit', String(options.limit));
|
|
293
|
+
const query = params.toString();
|
|
294
|
+
return this.request(`/api/v1/cli/activity${query ? `?${query}` : ''}`, { authenticated: true, invocationSource: 'explicit' });
|
|
295
|
+
}
|
|
296
|
+
activityDetail(receiptId) {
|
|
297
|
+
return this.request(`/api/v1/cli/activity/${encodeURIComponent(receiptId)}`, { authenticated: true, invocationSource: 'explicit' });
|
|
298
|
+
}
|
|
299
|
+
resolveActivity(findingId, options = {}) {
|
|
300
|
+
const params = new URLSearchParams({ finding_id: findingId });
|
|
301
|
+
if (options.cursor)
|
|
302
|
+
params.set('cursor', options.cursor);
|
|
303
|
+
if (options.limit)
|
|
304
|
+
params.set('limit', String(options.limit));
|
|
305
|
+
return this.request(`/api/v1/cli/activity/resolve?${params}`, { authenticated: true, invocationSource: 'explicit' });
|
|
306
|
+
}
|
|
307
|
+
async resolveCanonicalUrl(value) {
|
|
308
|
+
const url = new URL(value);
|
|
309
|
+
const origin = new URL(this.config.endpoint).origin;
|
|
310
|
+
if (url.origin !== origin || url.search || url.hash)
|
|
311
|
+
return null;
|
|
312
|
+
const findingId = url.pathname.match(/\/(vf_[A-Za-z0-9_-]{22})(?:\/|$)/u)?.[1];
|
|
313
|
+
if (!findingId)
|
|
314
|
+
return null;
|
|
315
|
+
const result = await this.resolveActivity(findingId, { limit: 2 });
|
|
316
|
+
const targets = Array.isArray(result.targets) ? result.targets : [];
|
|
317
|
+
const receipts = targets.map(target => typeof target.receipt_id === 'string' ? target.receipt_id : null).filter((id) => Boolean(id));
|
|
318
|
+
return receipts.length === 1 ? receipts[0] : null;
|
|
319
|
+
}
|
|
97
320
|
revoke() { return this.request('/api/contributors/me', { method: 'DELETE', authenticated: true }); }
|
|
98
321
|
}
|
|
99
322
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "1.
|
|
1
|
+
export declare const CLI_VERSION = "1.1.0";
|
|
2
2
|
export declare const DEFAULT_ENDPOINT = "https://vectle.com";
|
|
3
|
-
export declare const USER_AGENT = "vectle-cli/1.
|
|
3
|
+
export declare const USER_AGENT = "vectle-cli/1.1.0";
|
|
4
|
+
export declare const PULSE_DEADLINES_MS: {
|
|
5
|
+
readonly lookup: 1500;
|
|
6
|
+
readonly updates: 1200;
|
|
7
|
+
readonly total: 2000;
|
|
8
|
+
};
|
|
9
|
+
export declare const MAX_STARTUP_RESULT_BYTES = 8192;
|
|
10
|
+
export declare const MAX_TASK_SIGNATURE_BYTES: number;
|
|
11
|
+
export declare const MAX_FINDING_CAPSULE_BYTES: number;
|
|
12
|
+
export declare const MAX_OUTBOX_ITEMS = 10;
|
|
13
|
+
export declare const MAX_OUTBOX_BYTES: number;
|
package/dist/constants.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export const CLI_VERSION = '1.
|
|
1
|
+
export const CLI_VERSION = '1.1.0';
|
|
2
2
|
export const DEFAULT_ENDPOINT = 'https://vectle.com';
|
|
3
3
|
export const USER_AGENT = `vectle-cli/${CLI_VERSION}`;
|
|
4
|
+
export const PULSE_DEADLINES_MS = { lookup: 1_500, updates: 1_200, total: 2_000 };
|
|
5
|
+
export const MAX_STARTUP_RESULT_BYTES = 8_192;
|
|
6
|
+
export const MAX_TASK_SIGNATURE_BYTES = 4 * 1_024;
|
|
7
|
+
export const MAX_FINDING_CAPSULE_BYTES = 12 * 1_024;
|
|
8
|
+
export const MAX_OUTBOX_ITEMS = 10;
|
|
9
|
+
export const MAX_OUTBOX_BYTES = 1 * 1_024 * 1_024;
|
|
4
10
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,WAAW,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,WAAW,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAW,CAAC;AAC3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,KAAK,CAAC;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,KAAK,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** CLI-local mirror of the versioned wire names. Keep this file dependency-free
|
|
2
|
+
* so the published package cannot accidentally import server-only modules. */
|
|
3
|
+
export declare const CLI_CONTRACT_VERSIONS: {
|
|
4
|
+
readonly taskSignature: "task-signature-v1";
|
|
5
|
+
readonly taskLookup: "task-lookup-v1";
|
|
6
|
+
readonly startupPulse: "startup-pulse-v1";
|
|
7
|
+
readonly hiveUpdates: "hive-updates-v1";
|
|
8
|
+
readonly capabilities: "cli-capabilities-v1";
|
|
9
|
+
readonly diagnostic: "installation-diagnostic-v1";
|
|
10
|
+
readonly findingCapsule: "finding-capsule-v1";
|
|
11
|
+
readonly findingOperation: "finding-operation-v1";
|
|
12
|
+
readonly findingReceipt: "finding-receipt-v1";
|
|
13
|
+
readonly correction: "finding-correction-v1";
|
|
14
|
+
readonly withdrawal: "finding-withdrawal-v1";
|
|
15
|
+
readonly activityList: "activity-list-v1";
|
|
16
|
+
readonly activityDetail: "activity-detail-v1";
|
|
17
|
+
readonly activityResolve: "activity-resolve-v1";
|
|
18
|
+
readonly installation: "installation-v2";
|
|
19
|
+
readonly releaseManifest: "release-manifest-v1";
|
|
20
|
+
};
|
|
21
|
+
export declare const V2_HEADERS: readonly ["X-Vectle-Event-Id", "X-Vectle-Query-Analytics", "X-Vectle-Operational-Analytics", "X-Vectle-Invocation-Source"];
|
|
22
|
+
export declare const V2_ENDPOINTS: {
|
|
23
|
+
readonly lookup: "/api/v1/cli/lookup";
|
|
24
|
+
readonly capabilities: "/api/v1/cli/capabilities";
|
|
25
|
+
readonly updates: "/api/v1/cli/updates";
|
|
26
|
+
readonly findings: "/api/v1/cli/findings";
|
|
27
|
+
readonly activity: "/api/v1/cli/activity";
|
|
28
|
+
readonly installationsStatus: "/api/v1/cli/installations/status";
|
|
29
|
+
readonly installationChallenge: "/api/v1/installations/challenges";
|
|
30
|
+
readonly installationToken: "/api/v1/installations/token";
|
|
31
|
+
readonly installationSession: "/api/v1/installations/session";
|
|
32
|
+
readonly installationRevoke: "/api/v1/installations/revoke";
|
|
33
|
+
};
|
|
34
|
+
export declare const V2_ID_PATTERNS: {
|
|
35
|
+
readonly refresh: RegExp;
|
|
36
|
+
readonly access: RegExp;
|
|
37
|
+
readonly setupReport: RegExp;
|
|
38
|
+
readonly finding: RegExp;
|
|
39
|
+
readonly receipt: RegExp;
|
|
40
|
+
readonly event: RegExp;
|
|
41
|
+
readonly delivery: RegExp;
|
|
42
|
+
readonly notice: RegExp;
|
|
43
|
+
readonly operation: RegExp;
|
|
44
|
+
readonly queue: RegExp;
|
|
45
|
+
};
|
|
46
|
+
export type V2InvocationSource = 'startup_policy' | 'explicit';
|
|
47
|
+
export type FindingInvocationSource = 'automatic' | 'explicit';
|
|
48
|
+
export declare function isUuidV4(value: unknown): value is string;
|
|
49
|
+
export declare function validateV2Headers(headers: Record<string, string | undefined>, allowedInvocationSources?: readonly string[]): string[];
|
|
50
|
+
export declare function isV2RefreshCredential(value: unknown): boolean;
|
|
51
|
+
export declare function isV2AccessCredential(value: unknown): boolean;
|
|
52
|
+
export declare function isV2SetupReportToken(value: unknown): boolean;
|
|
53
|
+
export declare function rolloutEnabled(bucket: number, threshold: number): boolean;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** CLI-local mirror of the versioned wire names. Keep this file dependency-free
|
|
2
|
+
* so the published package cannot accidentally import server-only modules. */
|
|
3
|
+
export const CLI_CONTRACT_VERSIONS = {
|
|
4
|
+
taskSignature: 'task-signature-v1',
|
|
5
|
+
taskLookup: 'task-lookup-v1',
|
|
6
|
+
startupPulse: 'startup-pulse-v1',
|
|
7
|
+
hiveUpdates: 'hive-updates-v1',
|
|
8
|
+
capabilities: 'cli-capabilities-v1',
|
|
9
|
+
diagnostic: 'installation-diagnostic-v1',
|
|
10
|
+
findingCapsule: 'finding-capsule-v1',
|
|
11
|
+
findingOperation: 'finding-operation-v1',
|
|
12
|
+
findingReceipt: 'finding-receipt-v1',
|
|
13
|
+
correction: 'finding-correction-v1',
|
|
14
|
+
withdrawal: 'finding-withdrawal-v1',
|
|
15
|
+
activityList: 'activity-list-v1',
|
|
16
|
+
activityDetail: 'activity-detail-v1',
|
|
17
|
+
activityResolve: 'activity-resolve-v1',
|
|
18
|
+
installation: 'installation-v2',
|
|
19
|
+
releaseManifest: 'release-manifest-v1',
|
|
20
|
+
};
|
|
21
|
+
export const V2_HEADERS = ['X-Vectle-Event-Id', 'X-Vectle-Query-Analytics', 'X-Vectle-Operational-Analytics', 'X-Vectle-Invocation-Source'];
|
|
22
|
+
export const V2_ENDPOINTS = {
|
|
23
|
+
lookup: '/api/v1/cli/lookup',
|
|
24
|
+
capabilities: '/api/v1/cli/capabilities',
|
|
25
|
+
updates: '/api/v1/cli/updates',
|
|
26
|
+
findings: '/api/v1/cli/findings',
|
|
27
|
+
activity: '/api/v1/cli/activity',
|
|
28
|
+
installationsStatus: '/api/v1/cli/installations/status',
|
|
29
|
+
installationChallenge: '/api/v1/installations/challenges',
|
|
30
|
+
installationToken: '/api/v1/installations/token',
|
|
31
|
+
installationSession: '/api/v1/installations/session',
|
|
32
|
+
installationRevoke: '/api/v1/installations/revoke',
|
|
33
|
+
};
|
|
34
|
+
export const V2_ID_PATTERNS = {
|
|
35
|
+
refresh: /^vctir_[A-Za-z0-9_-]{43}$/u,
|
|
36
|
+
access: /^vctia_[A-Za-z0-9_-]{43}$/u,
|
|
37
|
+
setupReport: /^vctis_[A-Za-z0-9_-]{43}$/u,
|
|
38
|
+
finding: /^vf_[A-Za-z0-9_-]{22}$/u,
|
|
39
|
+
receipt: /^vfr_[A-Za-z0-9_-]{22}$/u,
|
|
40
|
+
event: /^vcu_[A-Za-z0-9_-]{22}$/u,
|
|
41
|
+
delivery: /^vdb_[A-Za-z0-9_-]{22}$/u,
|
|
42
|
+
notice: /^vwn_[A-Za-z0-9_-]{22}$/u,
|
|
43
|
+
operation: /^vwo_[A-Za-z0-9_-]{22}$/u,
|
|
44
|
+
queue: /^vfq_[A-Za-z0-9_-]{22}$/u,
|
|
45
|
+
};
|
|
46
|
+
export function isUuidV4(value) {
|
|
47
|
+
return typeof value === 'string' && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value);
|
|
48
|
+
}
|
|
49
|
+
export function validateV2Headers(headers, allowedInvocationSources = ['startup_policy', 'explicit']) {
|
|
50
|
+
const get = (name) => Object.entries(headers).find(([key]) => key.toLowerCase() === name.toLowerCase())?.[1];
|
|
51
|
+
const errors = [];
|
|
52
|
+
if (!isUuidV4(get('X-Vectle-Event-Id')))
|
|
53
|
+
errors.push('invalid_client_context');
|
|
54
|
+
if (get('X-Vectle-Query-Analytics') !== 'on' && get('X-Vectle-Query-Analytics') !== 'off')
|
|
55
|
+
errors.push('invalid_query_analytics');
|
|
56
|
+
if (get('X-Vectle-Operational-Analytics') !== 'on' && get('X-Vectle-Operational-Analytics') !== 'off')
|
|
57
|
+
errors.push('invalid_operational_analytics');
|
|
58
|
+
if (!allowedInvocationSources.includes(get('X-Vectle-Invocation-Source') ?? ''))
|
|
59
|
+
errors.push('invalid_invocation_source');
|
|
60
|
+
return errors;
|
|
61
|
+
}
|
|
62
|
+
export function isV2RefreshCredential(value) { return typeof value === 'string' && V2_ID_PATTERNS.refresh.test(value); }
|
|
63
|
+
export function isV2AccessCredential(value) { return typeof value === 'string' && V2_ID_PATTERNS.access.test(value); }
|
|
64
|
+
export function isV2SetupReportToken(value) { return typeof value === 'string' && V2_ID_PATTERNS.setupReport.test(value); }
|
|
65
|
+
export function rolloutEnabled(bucket, threshold) {
|
|
66
|
+
return Number.isInteger(bucket) && bucket >= 0 && bucket < 10_000 && Number.isInteger(threshold) && threshold >= 0 && threshold <= 10_000 && bucket < threshold;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type AgentState, type LocalOutboxItem, type LocalStateNotice, type LocalStateReceipt, type StateBinding } from './state.js';
|
|
2
|
+
import type { VectleConfig } from './store.js';
|
|
3
|
+
export type DeliveryKind = 'update' | 'receipt' | 'notice';
|
|
4
|
+
export type DeliveryBinding = StateBinding & {
|
|
5
|
+
root: string;
|
|
6
|
+
};
|
|
7
|
+
export type DeliveryMember = {
|
|
8
|
+
kind: DeliveryKind;
|
|
9
|
+
id: string;
|
|
10
|
+
status: 'leased' | 'acknowledged' | 'superseded';
|
|
11
|
+
};
|
|
12
|
+
export type DeliveryBatch = {
|
|
13
|
+
schema_version: 'delivery-batch-v1';
|
|
14
|
+
delivery_batch_id: string;
|
|
15
|
+
adapter_entry_id: string;
|
|
16
|
+
integration_binding_digest: `sha256:${string}`;
|
|
17
|
+
policy_checksum: `sha256:${string}`;
|
|
18
|
+
created_at: string;
|
|
19
|
+
lease_expires_at: string;
|
|
20
|
+
status: 'open' | 'partially_acknowledged' | 'acknowledged' | 'superseded';
|
|
21
|
+
members: DeliveryMember[];
|
|
22
|
+
};
|
|
23
|
+
export type DeliveryAckResult = {
|
|
24
|
+
schema_version: 'delivery-ack-result-v1';
|
|
25
|
+
status: 'acknowledged' | 'partially_acknowledged' | 'already_acknowledged';
|
|
26
|
+
delivery_batch_id: string;
|
|
27
|
+
kind: DeliveryKind;
|
|
28
|
+
acknowledged_ids: string[];
|
|
29
|
+
already_acknowledged_ids: string[];
|
|
30
|
+
remaining_member_count: number;
|
|
31
|
+
};
|
|
32
|
+
export declare class DeliveryError extends Error {
|
|
33
|
+
readonly code: 'delivery_batch_not_found' | 'delivery_member_mismatch' | 'delivery_binding_mismatch' | 'invalid_request' | 'state_capacity';
|
|
34
|
+
constructor(code: 'delivery_batch_not_found' | 'delivery_member_mismatch' | 'delivery_binding_mismatch' | 'invalid_request' | 'state_capacity');
|
|
35
|
+
}
|
|
36
|
+
export declare function addPendingItems(root: string, items: {
|
|
37
|
+
updates?: Array<Record<string, unknown>>;
|
|
38
|
+
receipts?: LocalStateReceipt[];
|
|
39
|
+
notices?: LocalStateNotice[];
|
|
40
|
+
}, binding?: StateBinding): Promise<{
|
|
41
|
+
updateCount: number;
|
|
42
|
+
receiptCount: number;
|
|
43
|
+
noticeCount: number;
|
|
44
|
+
}>;
|
|
45
|
+
export declare function leasePending(root: string, binding: DeliveryBinding, limits?: {
|
|
46
|
+
updates?: number;
|
|
47
|
+
receipts?: number;
|
|
48
|
+
notices?: number;
|
|
49
|
+
}): Promise<{
|
|
50
|
+
updates: Array<Record<string, unknown>>;
|
|
51
|
+
receipts: LocalStateReceipt[];
|
|
52
|
+
notices: LocalStateNotice[];
|
|
53
|
+
batch: DeliveryBatch | null;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function acknowledge(root: string, kind: DeliveryKind, request: {
|
|
56
|
+
delivery_batch_id: string;
|
|
57
|
+
ids: string[];
|
|
58
|
+
disposition: 'surfaced';
|
|
59
|
+
}, binding: DeliveryBinding): Promise<DeliveryAckResult>;
|
|
60
|
+
export declare function releaseBatch(root: string, batchId: string, binding: DeliveryBinding): Promise<boolean>;
|
|
61
|
+
export declare function pendingCounts(root: string, binding: DeliveryBinding): {
|
|
62
|
+
updates: number;
|
|
63
|
+
receipts: number;
|
|
64
|
+
notices: number;
|
|
65
|
+
operationNotices: number;
|
|
66
|
+
completionNotices: number;
|
|
67
|
+
};
|
|
68
|
+
export declare function queueOutbox(root: string, config: Pick<VectleConfig, 'installation' | 'contributorId'>, capsule: Record<string, unknown>, source: 'automatic' | 'explicit', idempotencyKey: string, errorCode?: LocalOutboxItem['last_error_code']): Promise<LocalOutboxItem>;
|
|
69
|
+
export declare function removeOutbox(root: string, queueId: string): Promise<boolean>;
|
|
70
|
+
export declare function readLocalState(root: string, binding?: StateBinding): AgentState;
|
|
71
|
+
export declare function localActivity(root: string, entry: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
72
|
+
export declare function installationBindingFor(config: VectleConfig): `sha256:${string}`;
|
|
73
|
+
export declare function defaultDeliveryBinding(config: VectleConfig, root: string): {
|
|
74
|
+
root: string;
|
|
75
|
+
adapterEntryId: string;
|
|
76
|
+
integrationBindingDigest: `sha256:${string}`;
|
|
77
|
+
policyChecksum: `sha256:${string}`;
|
|
78
|
+
installationBinding: `sha256:${string}`;
|
|
79
|
+
};
|
|
80
|
+
export declare function localStateRoot(config: VectleConfig): string;
|