@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/pulse.js
ADDED
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { defaultDeliveryBinding, leasePending, localStateRoot, pendingCounts, releaseBatch } from './delivery.js';
|
|
4
|
+
import { MAX_STARTUP_RESULT_BYTES, MAX_TASK_SIGNATURE_BYTES, PULSE_DEADLINES_MS } from './constants.js';
|
|
5
|
+
import { configDirectory } from './store.js';
|
|
6
|
+
import { atomicWriteJson, digestLocal, ensureStateRoot, loadAgentState, withStateLock } from './state.js';
|
|
7
|
+
import { recoverWriteJournals } from './write-journal.js';
|
|
8
|
+
const intents = new Set(['debug', 'build', 'implement', 'research', 'review', 'test', 'deploy', 'optimize', 'design', 'other']);
|
|
9
|
+
const roles = new Set(['language', 'runtime', 'framework', 'library', 'package', 'database', 'service', 'tool', 'platform', 'operating_system', 'other']);
|
|
10
|
+
const environmentKeys = new Set(['operating_system', 'operating_system_version', 'architecture', 'runtime', 'runtime_version', 'framework', 'framework_version', 'package_manager', 'build_tool', 'deployment_target', 'database', 'database_version']);
|
|
11
|
+
const stages = new Set(['discovery', 'setup', 'install', 'build', 'test', 'runtime', 'deploy', 'production', 'migration', 'design']);
|
|
12
|
+
const signals = new Set(['error_code', 'exception', 'failing_assertion', 'symptom', 'regression', 'performance', 'unexpected_behavior', 'compatibility']);
|
|
13
|
+
const looking = new Set(['known_cause', 'verified_fix', 'workaround', 'optimization', 'compatibility', 'implementation_pattern', 'architecture_tradeoff', 'failed_approaches', 'confirmation', 'current_status', 'public_sources']);
|
|
14
|
+
const secretPattern = /(-----BEGIN [A-Z ]*PRIVATE KEY-----|\b(?:api[_-]?key|password|passwd|secret|token)\s*[:=]|\b(?:sk|gh[pousr]|glpat|xox[baprs])_[A-Za-z0-9_-]{12,}|\bAKIA[A-Z0-9]{16}\b)/iu;
|
|
15
|
+
const privatePath = /(?:\/Users\/[^/\s]+|\/home\/[^/\s]+|[A-Za-z]:\\Users\\[^\\\s]+|\\\\[^\s]+\\[^\s]+)/iu;
|
|
16
|
+
const email = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/iu;
|
|
17
|
+
function object(value) { return Boolean(value) && typeof value === 'object' && !Array.isArray(value); }
|
|
18
|
+
function exact(value, keys) { return Object.keys(value).length === keys.length && keys.every(key => Object.prototype.hasOwnProperty.call(value, key)); }
|
|
19
|
+
function chars(value) { return Array.from(value).length; }
|
|
20
|
+
function safeText(value, min, max) { return typeof value === 'string' && chars(value) >= min && chars(value) <= max && !/[\r\n]/u.test(value); }
|
|
21
|
+
export function canonicalTaskSignature(value) {
|
|
22
|
+
const canonical = (input) => {
|
|
23
|
+
if (typeof input === 'string')
|
|
24
|
+
return input.normalize('NFC');
|
|
25
|
+
if (Array.isArray(input))
|
|
26
|
+
return input.map(canonical);
|
|
27
|
+
if (object(input))
|
|
28
|
+
return Object.fromEntries(Object.entries(input).sort(([a], [b]) => a.localeCompare(b)).map(([key, child]) => [key.normalize('NFC'), canonical(child)]));
|
|
29
|
+
return input;
|
|
30
|
+
};
|
|
31
|
+
return JSON.stringify(canonical(value));
|
|
32
|
+
}
|
|
33
|
+
export function validateTaskSignature(value) {
|
|
34
|
+
const errors = [];
|
|
35
|
+
if (!object(value))
|
|
36
|
+
return { errors: ['task signature must be an object'] };
|
|
37
|
+
const rootKeys = ['schema_version', 'intent', 'goal', 'components', 'environment', 'signals', 'stage', 'constraints', 'looking_for'];
|
|
38
|
+
if (!exact(value, rootKeys))
|
|
39
|
+
errors.push('task signature contains unknown or missing fields');
|
|
40
|
+
if (value.schema_version !== 'task-signature-v1')
|
|
41
|
+
errors.push('schema_version must be task-signature-v1');
|
|
42
|
+
if (typeof value.intent !== 'string' || !intents.has(value.intent))
|
|
43
|
+
errors.push('intent is invalid');
|
|
44
|
+
if (!safeText(value.goal, 5, 240))
|
|
45
|
+
errors.push('goal must be a bounded single-line string');
|
|
46
|
+
if (!Array.isArray(value.components) || value.components.length < 1 || value.components.length > 8)
|
|
47
|
+
errors.push('components must contain 1–8 items');
|
|
48
|
+
else
|
|
49
|
+
value.components.forEach((component, index) => {
|
|
50
|
+
if (!object(component)) {
|
|
51
|
+
errors.push(`components[${index}] is invalid`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const allowed = ['name', 'version', 'role', 'ecosystem', 'version_scheme'];
|
|
55
|
+
if (Object.keys(component).some(key => !allowed.includes(key)) || !Object.prototype.hasOwnProperty.call(component, 'name') || !Object.prototype.hasOwnProperty.call(component, 'role'))
|
|
56
|
+
errors.push(`components[${index}] is invalid`);
|
|
57
|
+
if (!safeText(component.name, 1, 80) || typeof component.role !== 'string' || !roles.has(component.role))
|
|
58
|
+
errors.push(`components[${index}] is invalid`);
|
|
59
|
+
for (const key of ['version', 'ecosystem', 'version_scheme'])
|
|
60
|
+
if (component[key] !== undefined && !safeText(component[key], 1, 80))
|
|
61
|
+
errors.push(`components[${index}] is invalid`);
|
|
62
|
+
});
|
|
63
|
+
if (!object(value.environment) || Object.keys(value.environment).length > 12 || Object.entries(value.environment ?? {}).some(([key, child]) => !environmentKeys.has(key) || !safeText(child, 1, 80)))
|
|
64
|
+
errors.push('environment is invalid');
|
|
65
|
+
if (!Array.isArray(value.signals) || value.signals.length > 8 || value.signals.some(item => !object(item) || !exact(item, ['kind', 'text']) || typeof item.kind !== 'string' || !signals.has(item.kind) || !safeText(item.text, 2, 240)))
|
|
66
|
+
errors.push('signals are invalid');
|
|
67
|
+
if (typeof value.stage !== 'string' || !stages.has(value.stage))
|
|
68
|
+
errors.push('stage is invalid');
|
|
69
|
+
if (!Array.isArray(value.constraints) || value.constraints.length > 8 || value.constraints.some(item => !safeText(item, 1, 160)))
|
|
70
|
+
errors.push('constraints are invalid');
|
|
71
|
+
if (!Array.isArray(value.looking_for) || value.looking_for.length < 1 || value.looking_for.length > 6 || value.looking_for.some(item => typeof item !== 'string' || !looking.has(item)))
|
|
72
|
+
errors.push('looking_for is invalid');
|
|
73
|
+
const serialized = JSON.stringify(value);
|
|
74
|
+
if (secretPattern.test(serialized) || privatePath.test(serialized) || email.test(serialized))
|
|
75
|
+
errors.push('task signature contains non-public-safe data');
|
|
76
|
+
if (Buffer.byteLength(canonicalTaskSignature(value), 'utf8') > MAX_TASK_SIGNATURE_BYTES)
|
|
77
|
+
errors.push('task signature exceeds 4 KiB');
|
|
78
|
+
return errors.length ? { errors: [...new Set(errors)] } : { data: value };
|
|
79
|
+
}
|
|
80
|
+
export function buildTaskSignature(value) {
|
|
81
|
+
const result = validateTaskSignature({ schema_version: 'task-signature-v1', ...value });
|
|
82
|
+
if (!result.data)
|
|
83
|
+
throw new Error(`Unsafe task signature: ${result.errors?.join(' ') ?? 'invalid request.'}`);
|
|
84
|
+
return result.data;
|
|
85
|
+
}
|
|
86
|
+
async function bounded(promise, timeoutMs, fallback) {
|
|
87
|
+
let timer;
|
|
88
|
+
try {
|
|
89
|
+
return await Promise.race([promise, new Promise(resolvePromise => { timer = setTimeout(() => resolvePromise(fallback), Math.max(1, timeoutMs)); })]);
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
if (timer)
|
|
93
|
+
clearTimeout(timer);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function classifyError(error) {
|
|
97
|
+
const status = error && typeof error === 'object' && 'status' in error ? error.status : undefined;
|
|
98
|
+
const body = error && typeof error === 'object' && 'body' in error ? error.body : null;
|
|
99
|
+
const code = object(body) && typeof body.error === 'string' ? body.error : '';
|
|
100
|
+
if (status === 429 || code === 'rate_limited')
|
|
101
|
+
return 'rate_limited';
|
|
102
|
+
if (status === 403 || code === 'channel_disabled' || code === 'operation_disabled')
|
|
103
|
+
return 'disabled';
|
|
104
|
+
return 'unavailable';
|
|
105
|
+
}
|
|
106
|
+
function safeUpdate(value) { return object(value) && Array.isArray(value.updates) ? value : null; }
|
|
107
|
+
function safeString(value) { return typeof value === 'string' ? value : null; }
|
|
108
|
+
function isoTimestamp(value) { return typeof value === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/u.test(value) && Number.isFinite(Date.parse(value)) ? value : null; }
|
|
109
|
+
const lookupMatchKeys = ['finding_id', 'kind', 'title', 'takeaway', 'why_it_matches', 'environment_fit', 'evidence_strength', 'verification_state', 'resolution_state', 'freshness', 'limits', 'conflicts', 'url', 'content_trust', 'instruction_authority'];
|
|
110
|
+
const lookupKinds = new Set(['bug', 'pattern', 'optimization', 'compatibility', 'architecture', 'workflow', 'security', 'other']);
|
|
111
|
+
const lookupFits = new Set(['exact', 'compatible', 'partial', 'unknown', 'conflict']);
|
|
112
|
+
const lookupEvidence = new Set(['observed', 'single_verified', 'independently_reproduced', 'source_supported', 'mixed', 'contradicted']);
|
|
113
|
+
const lookupVerification = new Set(['observed', 'reproduced', 'locally_verified', 'test_verified', 'measured', 'source_verified']);
|
|
114
|
+
const lookupResolution = new Set(['unresolved', 'workaround_verified', 'resolved', 'mixed', 'contradicted', 'superseded']);
|
|
115
|
+
const lookupActions = new Set(['verify_locally', 'check_primary_sources', 'compare_conflicts', 'none']);
|
|
116
|
+
function safeLookupLine(value, min, max) { return typeof value === 'string' && Array.from(value).length >= min && Array.from(value).length <= max && !/[\r\n]/u.test(value); }
|
|
117
|
+
function safePublicUrl(value) {
|
|
118
|
+
if (typeof value !== 'string' || value.length > 2_048)
|
|
119
|
+
return false;
|
|
120
|
+
try {
|
|
121
|
+
const url = new URL(value);
|
|
122
|
+
return url.protocol === 'https:' && !url.username && !url.password && !url.hash;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function safeLookupMatch(value) {
|
|
129
|
+
if (!object(value) || !exact(value, lookupMatchKeys))
|
|
130
|
+
return null;
|
|
131
|
+
if (typeof value.finding_id !== 'string' || !/^vf_[A-Za-z0-9_-]{22}$/u.test(value.finding_id) || typeof value.kind !== 'string' || !lookupKinds.has(value.kind) || !safeLookupLine(value.title, 12, 180) || !safeLookupLine(value.takeaway, 20, 600) || !Array.isArray(value.why_it_matches) || value.why_it_matches.length < 1 || value.why_it_matches.length > 5 || value.why_it_matches.some(item => !safeLookupLine(item, 1, 160)) || typeof value.environment_fit !== 'string' || !lookupFits.has(value.environment_fit) || typeof value.evidence_strength !== 'string' || !lookupEvidence.has(value.evidence_strength) || typeof value.verification_state !== 'string' || !lookupVerification.has(value.verification_state) || value.resolution_state !== null && (typeof value.resolution_state !== 'string' || !lookupResolution.has(value.resolution_state)) || !isoTimestamp(value.freshness) || !Array.isArray(value.limits) || value.limits.length > 5 || value.limits.some(item => !safeLookupLine(item, 1, 160)) || !Array.isArray(value.conflicts) || value.conflicts.length > 5 || value.conflicts.some(item => !safeLookupLine(item, 1, 160)) || !safePublicUrl(value.url) || value.content_trust !== 'untrusted_community_content' || value.instruction_authority !== 'none')
|
|
132
|
+
return null;
|
|
133
|
+
return value;
|
|
134
|
+
}
|
|
135
|
+
function safeLookup(value) {
|
|
136
|
+
if (!object(value) || !exact(value, ['schema_version', 'status', 'summary', 'matches', 'count', 'next_action', 'data_use']) || value.schema_version !== 'task-lookup-v1' || (value.status !== 'useful' && value.status !== 'quiet') || !safeLookupLine(value.summary, 0, 240) || !Array.isArray(value.matches) || value.matches.length > 5 || value.matches.some(item => !safeLookupMatch(item)) || !Number.isSafeInteger(value.count) || value.count !== value.matches.length || value.status === 'quiet' && value.count !== 0 || value.status === 'useful' && value.count === 0 || typeof value.next_action !== 'string' || !lookupActions.has(value.next_action) || !object(value.data_use) || !exact(value.data_use, ['raw_prompt_stored', 'raw_request_stored', 'identity_linked', 'query_analytics_recorded']) || value.data_use.raw_prompt_stored !== false || value.data_use.raw_request_stored !== false || value.data_use.identity_linked !== false || typeof value.data_use.query_analytics_recorded !== 'boolean')
|
|
137
|
+
return null;
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
function taskCacheKey(config, value) {
|
|
141
|
+
let origin = config.endpoint;
|
|
142
|
+
try {
|
|
143
|
+
origin = new URL(config.endpoint).origin;
|
|
144
|
+
}
|
|
145
|
+
catch { /* validation happens at setup; retain a deterministic local key */ }
|
|
146
|
+
return digestLocal(`${origin}\0${canonicalTaskSignature(value)}`);
|
|
147
|
+
}
|
|
148
|
+
function validAnonymousCapability(value, nowValue) {
|
|
149
|
+
if (!object(value) || !exact(value, ['schema_version', 'audience', 'controls_revision', 'observed_at', 'expires_at', 'operations']) || value.schema_version !== 'cli-capabilities-v1' || value.audience !== 'anonymous' || typeof value.controls_revision !== 'string' || value.controls_revision.length < 4 || value.controls_revision.length > 128 || !object(value.operations) || !exact(value.operations, ['startup_lookup']) || !object(value.operations.startup_lookup) || !exact(value.operations.startup_lookup, ['status']) || (value.operations.startup_lookup.status !== 'enabled' && value.operations.startup_lookup.status !== 'disabled'))
|
|
150
|
+
return null;
|
|
151
|
+
const observedAt = isoTimestamp(value.observed_at);
|
|
152
|
+
const expiresAt = isoTimestamp(value.expires_at);
|
|
153
|
+
if (!observedAt || !expiresAt || Date.parse(expiresAt) <= Date.parse(observedAt) || Date.parse(expiresAt) > Date.parse(observedAt) + 5 * 60_000 || nowValue + 5 * 60_000 < Date.parse(observedAt) || nowValue - 5 * 60_000 > Date.parse(expiresAt))
|
|
154
|
+
return null;
|
|
155
|
+
return { enabled: value.operations.startup_lookup.status === 'enabled', observedAt, expiresAt };
|
|
156
|
+
}
|
|
157
|
+
function publicCapabilityCacheFile(config) {
|
|
158
|
+
const origin = new URL(config.endpoint).origin;
|
|
159
|
+
return join(resolve(configDirectory()), 'cache', `anonymous-capability-${digestLocal(origin).slice(7)}.json`);
|
|
160
|
+
}
|
|
161
|
+
function readPublicCapability(config, nowValue) {
|
|
162
|
+
try {
|
|
163
|
+
const value = validAnonymousCapability(JSON.parse(readFileSync(publicCapabilityCacheFile(config), 'utf8')), nowValue);
|
|
164
|
+
if (!value || Date.parse(value.expiresAt) <= nowValue)
|
|
165
|
+
return null;
|
|
166
|
+
return { status: value.enabled ? 'enabled' : 'disabled', observedAt: value.observedAt, fresh: true, known: true };
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async function publicCapability(client, config, nowValue, timeoutMs) {
|
|
173
|
+
const cached = readPublicCapability(config, nowValue);
|
|
174
|
+
if (cached)
|
|
175
|
+
return cached;
|
|
176
|
+
const method = client.anonymousCapabilities;
|
|
177
|
+
// Test doubles and pre-v2 generated clients do not expose a preflight
|
|
178
|
+
// method. Production VectleClient always does; retaining this conservative
|
|
179
|
+
// compatibility fallback keeps low-level callers usable during migration.
|
|
180
|
+
if (typeof method !== 'function')
|
|
181
|
+
return { status: 'enabled', observedAt: null, fresh: true, known: true };
|
|
182
|
+
try {
|
|
183
|
+
const response = await method.call(client, Math.min(timeoutMs, 1_000));
|
|
184
|
+
const value = validAnonymousCapability(response, nowValue);
|
|
185
|
+
if (!value)
|
|
186
|
+
return { status: 'unavailable', observedAt: null, fresh: false, known: false };
|
|
187
|
+
try {
|
|
188
|
+
atomicWriteJson(publicCapabilityCacheFile(config), response);
|
|
189
|
+
}
|
|
190
|
+
catch { /* a live capability remains usable if its cache cannot be written */ }
|
|
191
|
+
return { status: value.enabled ? 'enabled' : 'disabled', observedAt: value.observedAt, fresh: true, known: true };
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const status = classifyError(error);
|
|
195
|
+
return { status: status === 'disabled' ? 'disabled' : 'unavailable', observedAt: null, fresh: false, known: status === 'disabled' };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function capabilityForUpdate(value, nowValue) {
|
|
199
|
+
if (!object(value) || value.schema_version !== 'cli-capabilities-v1' || value.audience !== 'installation' || !object(value.operations) || !object(value.operations.hive_updates))
|
|
200
|
+
return null;
|
|
201
|
+
const observed = isoTimestamp(value.observed_at);
|
|
202
|
+
const expires = isoTimestamp(value.expires_at);
|
|
203
|
+
if (!observed || !expires || Date.parse(expires) <= nowValue || Date.parse(expires) > Date.parse(observed) + 5 * 60_000)
|
|
204
|
+
return null;
|
|
205
|
+
const automatic = value.operations.hive_updates.automatic_status;
|
|
206
|
+
if (!['enabled', 'disabled', 'not_authorized', 'insufficient_scope', 'unsupported'].includes(String(automatic)))
|
|
207
|
+
return null;
|
|
208
|
+
return { status: automatic === 'enabled' ? 'enabled' : automatic === 'disabled' ? 'disabled' : 'unavailable', observedAt: observed, fresh: true, known: true };
|
|
209
|
+
}
|
|
210
|
+
async function installationCapability(client, config, root, nowValue, timeoutMs) {
|
|
211
|
+
const key = `installation-capability:${digestLocal(config.installation?.support_code ?? 'unconfigured')}`;
|
|
212
|
+
const cached = loadAgentState(root).cache.find(entry => entry.kind === 'installation_capability' && entry.key === key);
|
|
213
|
+
if (cached) {
|
|
214
|
+
const value = capabilityForUpdate(cached.value, nowValue);
|
|
215
|
+
if (value)
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
const method = client.capabilities;
|
|
219
|
+
if (typeof method !== 'function')
|
|
220
|
+
return { status: 'enabled', observedAt: null, fresh: true, known: true };
|
|
221
|
+
try {
|
|
222
|
+
const response = await method.call(client, Math.min(timeoutMs, 1_000));
|
|
223
|
+
const value = capabilityForUpdate(response, nowValue);
|
|
224
|
+
if (!value)
|
|
225
|
+
return { status: 'unavailable', observedAt: null, fresh: false, known: false };
|
|
226
|
+
try {
|
|
227
|
+
await withStateLock(root, state => { state.cache = [{ key, kind: 'installation_capability', stored_at: value.observedAt ?? new Date().toISOString(), value: response }, ...state.cache.filter(entry => entry.key !== key)].slice(0, 16); }, defaultDeliveryBinding(config, root));
|
|
228
|
+
}
|
|
229
|
+
catch { /* live capability still gates this request */ }
|
|
230
|
+
return value;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const status = classifyError(error);
|
|
234
|
+
return { status: status === 'disabled' ? 'disabled' : 'unavailable', observedAt: null, fresh: false, known: status === 'disabled' };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function receiptForOutput(item) { return { receipt_id: item.receipt_id, summary: item.summary, current_publication_state: item.current_publication_state, url: item.url ?? null, user_message_required: true }; }
|
|
238
|
+
function noticeForOutput(item) { return item.schema_version === 'write-operation-notice-v1' ? { schema_version: 'write-operation-notice-v1', notice_id: item.notice_id, operation_kind: item.operation_kind, outcome_code: item.outcome_code, summary: item.summary, user_message_required: true } : null; }
|
|
239
|
+
function completionNoticeForOutput(item) {
|
|
240
|
+
if (item.schema_version !== 'completion-notice-v1' || typeof item.notice_id !== 'string' || typeof item.copy_variant !== 'string')
|
|
241
|
+
return null;
|
|
242
|
+
return { notice_id: item.notice_id, copy_variant: item.copy_variant, summary: 'Vectle’s integration is now verified.', user_message_required: true };
|
|
243
|
+
}
|
|
244
|
+
function resultFromLanes(lookup, updates, cached, cacheEligible, delivered, pending = null) {
|
|
245
|
+
const liveLookup = lookup.status === 'complete' && lookup.value !== null;
|
|
246
|
+
const cacheLookup = !liveLookup && cacheEligible && cached ? cached.value : null;
|
|
247
|
+
const returnedLookup = liveLookup ? lookup.value : cacheLookup;
|
|
248
|
+
const updateValue = safeUpdate(updates.value);
|
|
249
|
+
const chronology = object(updateValue?.chronology) ? updateValue.chronology : { next_cursor: null, cursor_watermark: 0, cursor_reset: false, has_more: false, cursor_persisted: true, state_issue: null, next_action: null };
|
|
250
|
+
const priority = object(updateValue?.priority) ? updateValue.priority : { next_cursor: null, cursor_watermark: 0, cursor_reset: false, has_more: false, cursor_persisted: true, state_issue: null, next_action: null };
|
|
251
|
+
const allUpdates = delivered.updates;
|
|
252
|
+
const deliveredIds = new Set(allUpdates.map(item => safeString(item.id)).filter((id) => Boolean(id)));
|
|
253
|
+
const urgent = object(updateValue?.urgent_priority_update) && typeof updateValue.urgent_priority_update.id === 'string' && deliveredIds.has(updateValue.urgent_priority_update.id) ? updateValue.urgent_priority_update : null;
|
|
254
|
+
const taskStatus = lookup.status === 'skipped_unsafe' ? 'unsafe' : lookup.status === 'complete' ? (lookup.value?.status === 'useful' ? 'useful' : 'quiet') : lookup.status;
|
|
255
|
+
const receipts = delivered.receipts.map(receiptForOutput).slice(0, 10);
|
|
256
|
+
const operationNoticeItems = delivered.notices.filter(item => item.schema_version === 'write-operation-notice-v1');
|
|
257
|
+
const completionNoticeItems = delivered.notices.filter(item => item.schema_version === 'completion-notice-v1');
|
|
258
|
+
const notices = operationNoticeItems.map(noticeForOutput).filter((notice) => Boolean(notice)).slice(0, 3);
|
|
259
|
+
const completion = completionNoticeItems.map(completionNoticeForOutput).find((notice) => Boolean(notice)) ?? null;
|
|
260
|
+
const updatesForOutput = allUpdates.slice(0, 10);
|
|
261
|
+
const sourceMatchCount = object(returnedLookup) && typeof returnedLookup.count === 'number' && Number.isSafeInteger(returnedLookup.count) && returnedLookup.count >= 0 ? returnedLookup.count : 0;
|
|
262
|
+
const includedMatchCount = object(returnedLookup) && Array.isArray(returnedLookup.matches) ? returnedLookup.matches.length : 0;
|
|
263
|
+
const lookupCompleted = lookup.status === 'complete' && (taskStatus === 'useful' || taskStatus === 'quiet');
|
|
264
|
+
const updatesCompleted = updates.status === 'complete';
|
|
265
|
+
const status = lookupCompleted && updatesCompleted ? 'complete' : lookupCompleted || updatesCompleted ? 'partial' : 'degraded';
|
|
266
|
+
const updateIds = updatesForOutput.map(item => safeString(item.id)).filter((id) => Boolean(id));
|
|
267
|
+
const receiptIds = receipts.map(item => safeString(item.receipt_id)).filter((id) => Boolean(id));
|
|
268
|
+
const noticeIds = [...notices.map(item => safeString(item.notice_id)), ...(completion ? [safeString(completion.notice_id)] : [])].filter((id) => Boolean(id));
|
|
269
|
+
const output = {
|
|
270
|
+
schema_version: 'startup-pulse-v1', status,
|
|
271
|
+
task_lookup: { status: taskStatus, transport_status: lookup.status, result: returnedLookup, source_match_count: sourceMatchCount, included_match_count: includedMatchCount, omitted_match_count: Math.max(0, sourceMatchCount - includedMatchCount), freshness_state: liveLookup ? 'live' : cacheLookup ? 'cached' : 'none', cached_at: liveLookup ? null : cached?.stored_at ?? null, next_action: lookup.status === 'complete' && lookup.value === null ? 'explicit_lookup_for_matches' : null },
|
|
272
|
+
hive_updates: { sync_status: safeString(updateValue?.sync_status) ?? (updates.status === 'complete' ? 'current' : 'unavailable'), delivery_status: allUpdates.length || receipts.length || notices.length ? 'updates' : 'current', updates: updatesForOutput, chronology, priority, urgent_priority_update: urgent, included_update_count: updatesForOutput.length, pending_update_count: pending?.updates ?? 0, omitted_update_count: pending?.updates ?? 0, state_issue: safeString(updateValue?.state_issue), next_action: safeString(updateValue?.next_action) },
|
|
273
|
+
delayed_receipts: receipts,
|
|
274
|
+
operation_notices: notices,
|
|
275
|
+
completion_notice: completion,
|
|
276
|
+
delivery: { delivery_batch_id: delivered.batch?.delivery_batch_id ?? null, update_ids: updateIds, receipt_ids: receiptIds, notice_ids: noticeIds, included_receipt_count: receipts.length, pending_receipt_count: pending?.receipts ?? 0, omitted_receipt_count: pending?.receipts ?? 0, included_operation_notice_count: notices.length, pending_operation_notice_count: pending?.operationNotices ?? 0, omitted_operation_notice_count: pending?.operationNotices ?? 0, included_notice_count: completion ? 1 : 0, pending_notice_count: pending?.completionNotices ?? 0, omitted_notice_count: pending?.completionNotices ?? 0, has_more: (pending?.updates ?? 0) > 0 || (pending?.receipts ?? 0) > 0 || (pending?.notices ?? 0) > 0 || allUpdates.length > updatesForOutput.length || delivered.receipts.length > receipts.length || operationNoticeItems.length > notices.length || completionNoticeItems.length > (completion ? 1 : 0) },
|
|
277
|
+
guidance: { surface_task_lookup: object(returnedLookup) && Array.isArray(returnedLookup.matches) && returnedLookup.matches.length > 0, surface_hive_updates: updatesForOutput.some(item => item.user_message_required === true), surface_delayed_receipts: receipts.length > 0, surface_operation_notices: notices.length > 0, surface_completion_notice: Boolean(completion), user_message_required: updatesForOutput.some(item => item.user_message_required === true) || receipts.length > 0 || notices.length > 0 || Boolean(completion) },
|
|
278
|
+
};
|
|
279
|
+
if (Buffer.byteLength(JSON.stringify(output), 'utf8') > MAX_STARTUP_RESULT_BYTES) {
|
|
280
|
+
output.task_lookup.result = null;
|
|
281
|
+
output.task_lookup.included_match_count = 0;
|
|
282
|
+
output.task_lookup.omitted_match_count = output.task_lookup.source_match_count;
|
|
283
|
+
output.hive_updates.updates = [];
|
|
284
|
+
output.delayed_receipts = [];
|
|
285
|
+
output.operation_notices = [];
|
|
286
|
+
output.completion_notice = null;
|
|
287
|
+
output.delivery = { ...output.delivery, delivery_batch_id: null, update_ids: [], receipt_ids: [], notice_ids: [], has_more: true };
|
|
288
|
+
output.guidance = { ...output.guidance, surface_task_lookup: false, surface_hive_updates: false, surface_delayed_receipts: false, surface_operation_notices: false, surface_completion_notice: false, user_message_required: false };
|
|
289
|
+
}
|
|
290
|
+
return output;
|
|
291
|
+
}
|
|
292
|
+
export async function startupPulse(client, config, signature, options = {}) {
|
|
293
|
+
const validation = validateTaskSignature(signature);
|
|
294
|
+
const root = options.stateRoot ?? localStateRoot(config);
|
|
295
|
+
ensureStateRoot(root);
|
|
296
|
+
const binding = defaultDeliveryBinding(config, root);
|
|
297
|
+
if (options.adapterEntryId)
|
|
298
|
+
binding.adapterEntryId = options.adapterEntryId;
|
|
299
|
+
if (options.integrationBindingDigest)
|
|
300
|
+
binding.integrationBindingDigest = options.integrationBindingDigest;
|
|
301
|
+
if (options.policyChecksum)
|
|
302
|
+
binding.policyChecksum = options.policyChecksum;
|
|
303
|
+
await recoverWriteJournals(root, binding);
|
|
304
|
+
const clock = options.now ?? Date.now;
|
|
305
|
+
const startedAt = clock();
|
|
306
|
+
const currentState = loadAgentState(root, binding);
|
|
307
|
+
const publicCapabilityPromise = validation.data ? bounded(publicCapability(client, config, clock(), Math.min(1_000, PULSE_DEADLINES_MS.total)), 1_000, { status: 'unavailable', observedAt: null, fresh: false, known: false }) : Promise.resolve({ status: 'unavailable', observedAt: null, fresh: false, known: false });
|
|
308
|
+
const lookupPromise = validation.data
|
|
309
|
+
? publicCapabilityPromise.then(capability => capability.status === 'enabled' && capability.fresh
|
|
310
|
+
? bounded(client.lookup(validation.data, 3, PULSE_DEADLINES_MS.lookup, 'startup_policy').then(value => { const safe = safeLookup(value); if (!safe)
|
|
311
|
+
throw new Error('invalid_response'); return { status: 'complete', value: safe }; }).catch(error => ({ status: classifyError(error), value: null, error: error instanceof Error ? error.message : 'unavailable' })), Math.max(1, PULSE_DEADLINES_MS.lookup - (clock() - startedAt)), { status: 'unavailable', value: null, error: 'unavailable' })
|
|
312
|
+
: Promise.resolve({ status: capability.status === 'disabled' ? 'disabled' : 'unavailable', value: null, error: capability.status }))
|
|
313
|
+
: Promise.resolve({ status: 'skipped_unsafe', value: null, error: 'unsafe' });
|
|
314
|
+
const canUpdate = typeof client.hasInstallationAccess === 'function' ? client.hasInstallationAccess() : Boolean(config.installation);
|
|
315
|
+
const updateCapabilityPromise = canUpdate ? bounded(installationCapability(client, config, root, clock(), Math.max(1, Math.min(1_000, PULSE_DEADLINES_MS.updates))), Math.max(1, PULSE_DEADLINES_MS.updates), { status: 'unavailable', observedAt: null, fresh: false, known: false }) : Promise.resolve({ status: 'unavailable', observedAt: null, fresh: false, known: false });
|
|
316
|
+
const updatePromise = canUpdate
|
|
317
|
+
? updateCapabilityPromise.then(capability => capability.status === 'enabled' && capability.fresh
|
|
318
|
+
? bounded(client.listUpdates({ cursor: currentState.chronology_cursor, priorityCursor: currentState.priority_cursor, limit: 10, timeoutMs: PULSE_DEADLINES_MS.updates, invocationSource: 'startup_policy' }).then(value => ({ status: 'complete', value })).catch(error => ({ status: classifyError(error), value: null, error: error instanceof Error ? error.message : 'unavailable' })), Math.max(1, PULSE_DEADLINES_MS.updates - (clock() - startedAt)), { status: 'unavailable', value: null, error: 'unavailable' })
|
|
319
|
+
: Promise.resolve({ status: capability.status === 'disabled' ? 'disabled' : 'unavailable', value: null, error: capability.status }))
|
|
320
|
+
: Promise.resolve({ status: 'unavailable', value: null, error: 'not_connected' });
|
|
321
|
+
const [lookupSettled, updatesSettled] = await Promise.allSettled([lookupPromise, updatePromise]);
|
|
322
|
+
const lookup = lookupSettled.status === 'fulfilled' ? lookupSettled.value : { status: 'unavailable', value: null, error: 'unavailable' };
|
|
323
|
+
const updates = updatesSettled.status === 'fulfilled' ? updatesSettled.value : { status: 'unavailable', value: null, error: 'unavailable' };
|
|
324
|
+
const updateValue = safeUpdate(updates.value);
|
|
325
|
+
let stateIssue = null;
|
|
326
|
+
try {
|
|
327
|
+
await withStateLock(root, state => {
|
|
328
|
+
if (updateValue) {
|
|
329
|
+
const incoming = [...(Array.isArray(updateValue.updates) ? updateValue.updates : []), ...(Array.isArray(updateValue.priority_updates) ? updateValue.priority_updates : []), ...(object(updateValue.urgent_priority_update) ? [updateValue.urgent_priority_update] : [])].filter((item) => object(item) && typeof item.id === 'string');
|
|
330
|
+
for (const item of incoming) {
|
|
331
|
+
const existing = state.pending_updates.find(candidate => candidate.id === item.id);
|
|
332
|
+
if (existing)
|
|
333
|
+
Object.assign(existing, item, { pending: existing.pending !== false, leased_until: existing.leased_until ?? null });
|
|
334
|
+
else
|
|
335
|
+
state.pending_updates.push({ ...item, pending: true, leased_until: null });
|
|
336
|
+
}
|
|
337
|
+
const newChronologyWatermark = typeof updateValue.cursor_watermark === 'number' ? updateValue.cursor_watermark : state.chronology_cursor_watermark;
|
|
338
|
+
const newPriorityWatermark = typeof updateValue.priority_cursor_watermark === 'number' ? updateValue.priority_cursor_watermark : state.priority_cursor_watermark;
|
|
339
|
+
if (newChronologyWatermark >= state.chronology_cursor_watermark && (typeof updateValue.next_cursor === 'string' || updateValue.next_cursor === null)) {
|
|
340
|
+
state.chronology_cursor = updateValue.next_cursor;
|
|
341
|
+
state.chronology_cursor_watermark = newChronologyWatermark;
|
|
342
|
+
}
|
|
343
|
+
if (newPriorityWatermark >= state.priority_cursor_watermark && (typeof updateValue.next_priority_cursor === 'string' || updateValue.next_priority_cursor === null)) {
|
|
344
|
+
state.priority_cursor = updateValue.next_priority_cursor;
|
|
345
|
+
state.priority_cursor_watermark = newPriorityWatermark;
|
|
346
|
+
}
|
|
347
|
+
state.pending_updates = state.pending_updates.slice(-100);
|
|
348
|
+
}
|
|
349
|
+
if (lookup.status === 'complete' && lookup.value) {
|
|
350
|
+
const key = taskCacheKey(config, validation.data ?? {});
|
|
351
|
+
state.cache = [{ key, kind: 'lookup', stored_at: new Date().toISOString(), value: lookup.value }, ...state.cache.filter(entry => entry.key !== key)].slice(0, 16);
|
|
352
|
+
}
|
|
353
|
+
}, binding);
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
stateIssue = 'state_unavailable';
|
|
357
|
+
}
|
|
358
|
+
const cacheKey = taskCacheKey(config, validation.data ?? {});
|
|
359
|
+
const cached = loadAgentState(root, binding).cache.find(entry => entry.kind === 'lookup' && entry.key === cacheKey) ?? null;
|
|
360
|
+
const capability = await publicCapabilityPromise;
|
|
361
|
+
const delivered = await leasePending(root, binding, { updates: 10, receipts: 10, notices: 3 });
|
|
362
|
+
let pending = pendingCounts(root, binding);
|
|
363
|
+
let result = resultFromLanes(lookup, updates, cached ? { value: cached.value, stored_at: cached.stored_at } : null, capability.status === 'enabled' && capability.fresh, { batch: delivered.batch, updates: delivered.updates, receipts: delivered.receipts, notices: delivered.notices }, pending);
|
|
364
|
+
const resultOmittedForBudget = Boolean(delivered.batch && result.delivery.delivery_batch_id === null && (delivered.updates.length || delivered.receipts.length || delivered.notices.length));
|
|
365
|
+
if (delivered.batch && (resultOmittedForBudget || Buffer.byteLength(JSON.stringify(result), 'utf8') > MAX_STARTUP_RESULT_BYTES)) {
|
|
366
|
+
await releaseBatch(root, delivered.batch.delivery_batch_id, binding);
|
|
367
|
+
pending = pendingCounts(root, binding);
|
|
368
|
+
result = resultFromLanes(lookup, updates, cached ? { value: cached.value, stored_at: cached.stored_at } : null, capability.status === 'enabled' && capability.fresh, { batch: null, updates: [], receipts: [], notices: [] }, pending);
|
|
369
|
+
}
|
|
370
|
+
if (stateIssue)
|
|
371
|
+
result.hive_updates.state_issue = stateIssue;
|
|
372
|
+
return result;
|
|
373
|
+
}
|
|
374
|
+
export const runStartupPulse = startupPulse;
|
|
375
|
+
export const composeStartupPulse = resultFromLanes;
|
|
376
|
+
export async function syncUpdates(client, config, options = {}) {
|
|
377
|
+
if (typeof client.hasInstallationAccess === 'function' && !client.hasInstallationAccess())
|
|
378
|
+
throw new Error('not_connected');
|
|
379
|
+
const root = options.stateRoot ?? localStateRoot(config);
|
|
380
|
+
ensureStateRoot(root);
|
|
381
|
+
const binding = defaultDeliveryBinding(config, root);
|
|
382
|
+
const current = loadAgentState(root, binding);
|
|
383
|
+
const result = await client.listUpdates({ cursor: current.chronology_cursor, priorityCursor: current.priority_cursor, limit: options.limit ?? 10, timeoutMs: PULSE_DEADLINES_MS.updates, invocationSource: 'explicit' });
|
|
384
|
+
await withStateLock(root, state => {
|
|
385
|
+
const incoming = [...(Array.isArray(result.updates) ? result.updates : []), ...(Array.isArray(result.priority_updates) ? result.priority_updates : []), ...(object(result.urgent_priority_update) ? [result.urgent_priority_update] : [])].filter((item) => object(item) && typeof item.id === 'string');
|
|
386
|
+
for (const item of incoming) {
|
|
387
|
+
const existing = state.pending_updates.find(candidate => candidate.id === item.id);
|
|
388
|
+
if (existing)
|
|
389
|
+
Object.assign(existing, item, { pending: existing.pending !== false, leased_until: existing.leased_until ?? null });
|
|
390
|
+
else
|
|
391
|
+
state.pending_updates.push({ ...item, pending: true, leased_until: null });
|
|
392
|
+
}
|
|
393
|
+
const chronologyWatermark = typeof result.cursor_watermark === 'number' ? result.cursor_watermark : state.chronology_cursor_watermark;
|
|
394
|
+
const priorityWatermark = typeof result.priority_cursor_watermark === 'number' ? result.priority_cursor_watermark : state.priority_cursor_watermark;
|
|
395
|
+
if (chronologyWatermark >= state.chronology_cursor_watermark && (typeof result.next_cursor === 'string' || result.next_cursor === null)) {
|
|
396
|
+
state.chronology_cursor = result.next_cursor;
|
|
397
|
+
state.chronology_cursor_watermark = chronologyWatermark;
|
|
398
|
+
}
|
|
399
|
+
if (priorityWatermark >= state.priority_cursor_watermark && (typeof result.next_priority_cursor === 'string' || result.next_priority_cursor === null)) {
|
|
400
|
+
state.priority_cursor = result.next_priority_cursor;
|
|
401
|
+
state.priority_cursor_watermark = priorityWatermark;
|
|
402
|
+
}
|
|
403
|
+
state.pending_updates = state.pending_updates.slice(-100);
|
|
404
|
+
}, binding);
|
|
405
|
+
const delivered = await leasePending(root, binding, { updates: 10, receipts: 0, notices: 0 });
|
|
406
|
+
return {
|
|
407
|
+
...result,
|
|
408
|
+
delivery_batch_id: delivered.batch?.delivery_batch_id ?? null,
|
|
409
|
+
update_ids: delivered.updates.map(item => typeof item.id === 'string' ? item.id : null).filter((id) => Boolean(id)),
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=pulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse.js","sourceRoot":"","sources":["../src/pulse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { type RolloutThresholds } from './rollout.js';
|
|
2
|
+
export type ReleaseArtifact = {
|
|
3
|
+
artifact_kind: 'cli_package' | 'node_runtime' | 'standalone';
|
|
4
|
+
version: string;
|
|
5
|
+
platform: 'any' | 'darwin' | 'linux' | 'win32';
|
|
6
|
+
architecture: 'any' | 'arm64' | 'x64';
|
|
7
|
+
url: string;
|
|
8
|
+
sha256: string;
|
|
9
|
+
size_bytes: number;
|
|
10
|
+
package_integrity: string | null;
|
|
11
|
+
license_notice_paths: string[];
|
|
12
|
+
};
|
|
13
|
+
export type ReleaseAdapter = {
|
|
14
|
+
client_family: 'codex' | 'claude_code' | 'cursor' | 'vscode';
|
|
15
|
+
platform: 'darwin' | 'linux' | 'win32';
|
|
16
|
+
minimum_client_version: string;
|
|
17
|
+
maximum_client_version: string | null;
|
|
18
|
+
config_schema_version: number;
|
|
19
|
+
maximum_capability: 'authorized_only' | 'mcp_only' | 'policy_and_mcp' | 'full_lifecycle';
|
|
20
|
+
};
|
|
21
|
+
export type ReleaseManifest = {
|
|
22
|
+
schema_version: 'release-manifest-v1';
|
|
23
|
+
sequence: number;
|
|
24
|
+
channel: 'stable' | 'beta';
|
|
25
|
+
issued_at: string;
|
|
26
|
+
expires_at: string;
|
|
27
|
+
minimum_supported_cli: string;
|
|
28
|
+
recommended_cli: string;
|
|
29
|
+
artifacts: ReleaseArtifact[];
|
|
30
|
+
adapters: ReleaseAdapter[];
|
|
31
|
+
rollouts: RolloutThresholds;
|
|
32
|
+
blocked_artifacts: Array<{
|
|
33
|
+
artifact_kind: ReleaseArtifact['artifact_kind'];
|
|
34
|
+
version: string;
|
|
35
|
+
platform: ReleaseArtifact['platform'];
|
|
36
|
+
architecture: ReleaseArtifact['architecture'];
|
|
37
|
+
reason_code: 'security' | 'broken_release' | 'incompatible' | 'superseded';
|
|
38
|
+
}>;
|
|
39
|
+
rollback: {
|
|
40
|
+
target_cli_version: string;
|
|
41
|
+
from_cli_version: string;
|
|
42
|
+
through_cli_version: string;
|
|
43
|
+
reason_code: 'security' | 'broken_release' | 'critical_compatibility';
|
|
44
|
+
} | null;
|
|
45
|
+
signing_key_id: string;
|
|
46
|
+
};
|
|
47
|
+
export type ReleaseManifestEnvelope = {
|
|
48
|
+
schema_version: 'release-manifest-envelope-v1';
|
|
49
|
+
algorithm: 'Ed25519';
|
|
50
|
+
key_id: string;
|
|
51
|
+
manifest: ReleaseManifest;
|
|
52
|
+
signature: string;
|
|
53
|
+
};
|
|
54
|
+
export declare const EMBEDDED_RELEASE_PUBLIC_KEYS: Readonly<Record<string, string>>;
|
|
55
|
+
export declare const RELEASE_MANIFEST_MAX_BYTES = 98304;
|
|
56
|
+
export declare const RELEASE_MANIFEST_MAX_AGE_MS: number;
|
|
57
|
+
export declare const RELEASE_CLOCK_SKEW_MS: number;
|
|
58
|
+
export declare function canonicalManifestBytes(manifest: ReleaseManifest): Buffer<ArrayBuffer>;
|
|
59
|
+
export declare function canonicalEnvelopeBytes(envelope: ReleaseManifestEnvelope): Buffer<ArrayBuffer>;
|
|
60
|
+
export declare function validateReleaseManifestEnvelope(value: unknown): value is ReleaseManifestEnvelope;
|
|
61
|
+
export declare function verifyReleaseManifest(envelope: unknown, now?: number, publicKeys?: Readonly<Record<string, string>>): {
|
|
62
|
+
ok: false;
|
|
63
|
+
code: "invalid_manifest";
|
|
64
|
+
envelope?: undefined;
|
|
65
|
+
etag?: undefined;
|
|
66
|
+
} | {
|
|
67
|
+
ok: false;
|
|
68
|
+
code: "unknown_key";
|
|
69
|
+
envelope?: undefined;
|
|
70
|
+
etag?: undefined;
|
|
71
|
+
} | {
|
|
72
|
+
ok: false;
|
|
73
|
+
code: "expired_manifest";
|
|
74
|
+
envelope?: undefined;
|
|
75
|
+
etag?: undefined;
|
|
76
|
+
} | {
|
|
77
|
+
ok: false;
|
|
78
|
+
code: "bad_signature";
|
|
79
|
+
envelope?: undefined;
|
|
80
|
+
etag?: undefined;
|
|
81
|
+
} | {
|
|
82
|
+
ok: true;
|
|
83
|
+
envelope: ReleaseManifestEnvelope;
|
|
84
|
+
etag: string;
|
|
85
|
+
code?: undefined;
|
|
86
|
+
};
|
|
87
|
+
export declare function manifestCacheFile(root: string): string;
|
|
88
|
+
export declare function readCachedManifest(root: string, now?: number): {
|
|
89
|
+
envelope: null;
|
|
90
|
+
state: string;
|
|
91
|
+
etag: null;
|
|
92
|
+
} | {
|
|
93
|
+
envelope: ReleaseManifestEnvelope;
|
|
94
|
+
state: string;
|
|
95
|
+
etag: string;
|
|
96
|
+
};
|
|
97
|
+
export declare function acceptCachedManifest(root: string, envelope: ReleaseManifestEnvelope): {
|
|
98
|
+
ok: true;
|
|
99
|
+
envelope: ReleaseManifestEnvelope;
|
|
100
|
+
etag: string;
|
|
101
|
+
code?: undefined;
|
|
102
|
+
};
|
|
103
|
+
export declare function fetchReleaseManifest(endpoint: string, root: string, options?: {
|
|
104
|
+
fetchImpl?: typeof fetch;
|
|
105
|
+
timeoutMs?: number;
|
|
106
|
+
now?: number;
|
|
107
|
+
persist?: boolean;
|
|
108
|
+
}): Promise<{
|
|
109
|
+
envelope: ReleaseManifestEnvelope;
|
|
110
|
+
state: "live";
|
|
111
|
+
etag: string | null;
|
|
112
|
+
error?: undefined;
|
|
113
|
+
} | {
|
|
114
|
+
envelope: ReleaseManifestEnvelope;
|
|
115
|
+
state: "cached";
|
|
116
|
+
etag: string;
|
|
117
|
+
error: string;
|
|
118
|
+
} | {
|
|
119
|
+
envelope: null;
|
|
120
|
+
state: "unavailable";
|
|
121
|
+
etag: null;
|
|
122
|
+
error: string;
|
|
123
|
+
}>;
|