@extenshi/cli 0.16.0 → 0.18.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-workspace.d.ts","sourceRoot":"","sources":["../src/project-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,350 @@
1
+ /** Versioned metadata contract. Source files, credentials and full logs never belong here. */
2
+ import { createHash } from 'node:crypto';
3
+ import { z } from 'zod';
4
+ export const WORKSPACE_SCHEMA_VERSION = 1;
5
+ export const MAX_WORKSPACE_BYTES = 256 * 1024;
6
+ const digest = z.string().regex(/^[a-f0-9]{64}$/);
7
+ const browser = z.enum(['chrome', 'firefox', 'edge']);
8
+ const text = z.string().min(1).max(500);
9
+ export const provenanceSchema = z
10
+ .object({
11
+ source: z.enum(['local', 'agent']),
12
+ observedAt: z.string().datetime({ offset: true }),
13
+ branch: text.optional(),
14
+ commit: z
15
+ .string()
16
+ .regex(/^[a-f0-9]{40,64}$/)
17
+ .optional(),
18
+ dirtyTreeDigest: digest.optional(),
19
+ toolVersion: text,
20
+ })
21
+ .strict();
22
+ // passthrough is intentional: unknown and browser-specific manifest fields survive round trips.
23
+ export const manifestSchema = z
24
+ .object({
25
+ manifest_version: z.union([z.literal(2), z.literal(3)]),
26
+ name: z.string().min(1),
27
+ version: z.string().min(1),
28
+ })
29
+ .passthrough()
30
+ .superRefine((value, ctx) => {
31
+ if (Buffer.byteLength(JSON.stringify(value)) > 128 * 1024)
32
+ ctx.addIssue({ code: 'custom', message: 'Manifest exceeds 128 KiB' });
33
+ const visit = (v) => {
34
+ if (!v || typeof v !== 'object')
35
+ return;
36
+ for (const [key, child] of Object.entries(v)) {
37
+ if (['__proto__', 'prototype', 'constructor'].includes(key))
38
+ ctx.addIssue({ code: 'custom', message: 'Unsafe object key' });
39
+ visit(child);
40
+ }
41
+ };
42
+ visit(value);
43
+ });
44
+ const manifestObservation = z.object({ manifest: manifestSchema, provenance: provenanceSchema }).strict();
45
+ const manifestSet = z
46
+ .object({
47
+ chrome: manifestObservation.optional(),
48
+ firefox: manifestObservation.optional(),
49
+ edge: manifestObservation.optional(),
50
+ })
51
+ .strict();
52
+ export const releaseSchema = z
53
+ .object({
54
+ browser,
55
+ version: text,
56
+ artifactDigest: digest,
57
+ commit: z
58
+ .string()
59
+ .regex(/^[a-f0-9]{40,64}$/)
60
+ .optional(),
61
+ dirtyTreeDigest: digest.optional(),
62
+ locales: z
63
+ .array(z.string().regex(/^[a-z]{2,3}(?:[_-][A-Za-z0-9]{2,8})*$/))
64
+ .min(1)
65
+ .max(100),
66
+ manifestDigest: digest,
67
+ sourceManifestDigest: digest.optional(),
68
+ listingDigest: digest.optional(),
69
+ policyDigest: digest.optional(),
70
+ paymentDigest: digest.optional(),
71
+ paymentRequired: z.boolean(),
72
+ })
73
+ .strict()
74
+ .refine((v) => v.commit || v.dirtyTreeDigest, 'A release must identify its commit or dirty snapshot');
75
+ export const specSchema = z
76
+ .object({
77
+ excludedFeatures: z.array(text).max(100),
78
+ targetLocales: z.array(text).max(100),
79
+ tasks: z
80
+ .array(z
81
+ .object({
82
+ id: text,
83
+ status: z.enum([
84
+ 'not_started',
85
+ 'in_progress',
86
+ 'blocked',
87
+ 'completed',
88
+ 'deferred',
89
+ 'not_applicable',
90
+ ]),
91
+ assignee: text,
92
+ reason: text,
93
+ })
94
+ .strict())
95
+ .max(100),
96
+ })
97
+ .strict();
98
+ export const workspacePatchSchema = z
99
+ .object({
100
+ projectId: z.string().uuid(),
101
+ schemaVersion: z.literal(1),
102
+ expectedRevision: z.number().int().nonnegative(),
103
+ idempotencyKey: z.string().uuid(),
104
+ provenance: provenanceSchema,
105
+ patch: z
106
+ .object({
107
+ repository: z
108
+ .object({ repo: z.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/), defaultBranch: text })
109
+ .strict()
110
+ .optional(),
111
+ sourceManifests: manifestSet.optional(),
112
+ builtManifests: manifestSet.optional(),
113
+ spec: specSchema.optional(),
114
+ release: releaseSchema.optional(),
115
+ })
116
+ .strict(),
117
+ // Explicit JSON pointers. Missing properties never delete server data.
118
+ tombstones: z.array(z.string().min(1).max(500)).max(100).default([]),
119
+ })
120
+ .strict();
121
+ export const importManifestSchema = z
122
+ .object({
123
+ projectId: z.string().uuid(),
124
+ schemaVersion: z.literal(1),
125
+ expectedRevision: z.number().int().nonnegative(),
126
+ idempotencyKey: z.string().uuid(),
127
+ provenance: provenanceSchema,
128
+ browser,
129
+ kind: z.enum(['source', 'built']).default('source'),
130
+ manifest: manifestSchema,
131
+ /** Default-locale messages resolve project labels; the original __MSG_*__ tokens stay intact. */
132
+ messages: z.record(z.object({ message: z.string().max(5000) }).passthrough()).optional(),
133
+ tombstones: z.array(z.string().min(1).max(500)).max(100).default([]),
134
+ dryRun: z.boolean().default(true),
135
+ expectedStateHash: digest.optional(),
136
+ })
137
+ .strict()
138
+ .superRefine((value, ctx) => {
139
+ const prefix = `/${value.kind === 'source' ? 'sourceManifests' : 'builtManifests'}/${value.browser}/`;
140
+ if (value.tombstones.some((pointer) => !pointer.startsWith(`${prefix}manifest/`) && !pointer.startsWith(`${prefix}provenance/`)))
141
+ ctx.addIssue({
142
+ code: 'custom',
143
+ message: 'Import tombstones must address fields of this browser manifest or its provenance.',
144
+ });
145
+ if (!value.dryRun && !value.expectedStateHash)
146
+ ctx.addIssue({
147
+ code: 'custom',
148
+ message: 'Preview the import and supply expectedStateHash before applying it.',
149
+ });
150
+ if (Buffer.byteLength(JSON.stringify(value)) > MAX_WORKSPACE_BYTES)
151
+ ctx.addIssue({ code: 'custom', message: 'Manifest import exceeds 256 KiB' });
152
+ });
153
+ export const evidenceSchema = z
154
+ .object({
155
+ projectId: z.string().uuid(),
156
+ idempotencyKey: z.string().uuid(),
157
+ kind: z.enum([
158
+ 'tests',
159
+ 'scan',
160
+ 'permissions',
161
+ 'privacy',
162
+ 'listing',
163
+ 'screenshots',
164
+ 'payment',
165
+ 'installed',
166
+ ]),
167
+ browser,
168
+ locale: z.string().min(2).max(35).optional(),
169
+ artifactDigest: digest,
170
+ inputDigest: digest,
171
+ status: z.enum(['passed', 'failed']),
172
+ provenance: provenanceSchema,
173
+ // Metadata reference only; the server never fetches this URL.
174
+ reportUrl: z
175
+ .string()
176
+ .url()
177
+ .max(2000)
178
+ .refine((s) => {
179
+ const u = new URL(s);
180
+ return u.protocol === 'https:' && !u.username && !u.password && !u.search && !u.hash;
181
+ }, 'Use a credential-free HTTPS report URL without query or fragment')
182
+ .optional(),
183
+ })
184
+ .strict();
185
+ export function stableJson(value) {
186
+ if (Array.isArray(value))
187
+ return `[${value.map(stableJson).join(',')}]`;
188
+ if (value && typeof value === 'object')
189
+ return `{${Object.keys(value)
190
+ .sort()
191
+ .map((k) => `${JSON.stringify(k)}:${stableJson(value[k])}`)
192
+ .join(',')}}`;
193
+ return JSON.stringify(value) ?? 'null';
194
+ }
195
+ export const hashMetadata = (value) => createHash('sha256').update(stableJson(value)).digest('hex');
196
+ const object = (v) => Boolean(v) && typeof v === 'object' && !Array.isArray(v);
197
+ const equal = (a, b) => a === undefined || b === undefined ? a === b : stableJson(a) === stableJson(b);
198
+ const escapePointer = (s) => s.replace(/~/g, '~0').replace(/\//g, '~1');
199
+ /** Server-held base revision makes three-way conflict detection authoritative. Arrays are atomic. */
200
+ export function mergeWorkspace(base, current, input) {
201
+ const merged = structuredClone(current);
202
+ const conflicts = [];
203
+ const applied = [];
204
+ const merge = (b, c, patch, prefix) => {
205
+ for (const [key, local] of Object.entries(patch)) {
206
+ const pointer = `${prefix}/${escapePointer(key)}`;
207
+ if (equal(local, b[key]))
208
+ continue;
209
+ if (object(local) &&
210
+ !(c[key] === undefined && b[key] !== undefined) &&
211
+ (c[key] === undefined || object(c[key])) &&
212
+ (b[key] === undefined || object(b[key]))) {
213
+ const before = applied.length;
214
+ const child = object(c[key]) ? structuredClone(c[key]) : {};
215
+ merge(object(b[key]) ? b[key] : {}, child, local, pointer);
216
+ if (!equal(child, c[key])) {
217
+ c[key] = child;
218
+ if (applied.length === before)
219
+ applied.push(pointer);
220
+ }
221
+ }
222
+ else if (equal(local, c[key]))
223
+ continue;
224
+ else if (!equal(b[key], c[key]))
225
+ conflicts.push({ path: pointer, base: b[key] ?? null, local, server: c[key] ?? null });
226
+ else {
227
+ c[key] = structuredClone(local);
228
+ applied.push(pointer);
229
+ }
230
+ }
231
+ };
232
+ merge(base, merged, input.patch, '');
233
+ for (const pointer of input.tombstones) {
234
+ const keys = pointer
235
+ .split('/')
236
+ .slice(1)
237
+ .map((s) => s.replace(/~1/g, '/').replace(/~0/g, '~'));
238
+ if (!pointer.startsWith('/') ||
239
+ !keys.length ||
240
+ !['repository', 'sourceManifests', 'builtManifests', 'spec', 'release'].includes(keys[0]) ||
241
+ keys.some((k) => !k || ['__proto__', 'constructor', 'prototype'].includes(k)))
242
+ throw new Error('INVALID_TOMBSTONE');
243
+ let b = base, c = merged;
244
+ for (const k of keys.slice(0, -1)) {
245
+ b = object(b[k]) ? b[k] : {};
246
+ c = object(c[k]) ? c[k] : {};
247
+ }
248
+ const key = keys.at(-1);
249
+ if (!key)
250
+ throw new Error('INVALID_TOMBSTONE');
251
+ if (c[key] === undefined)
252
+ continue;
253
+ if (!equal(b[key], c[key]))
254
+ conflicts.push({ path: pointer, base: b[key] ?? null, local: null, server: c[key] });
255
+ else {
256
+ delete c[key];
257
+ applied.push(pointer);
258
+ }
259
+ }
260
+ if (Buffer.byteLength(stableJson(merged)) > MAX_WORKSPACE_BYTES)
261
+ throw new Error('WORKSPACE_TOO_LARGE');
262
+ return {
263
+ document: conflicts.length ? current : merged,
264
+ applied: conflicts.length ? [] : applied,
265
+ conflicts,
266
+ };
267
+ }
268
+ /** Evidence is a caller report, never an agent-issued CI attestation. */
269
+ export function releaseReadiness(document, evidence) {
270
+ const release = document.release;
271
+ if (!release)
272
+ return {
273
+ ready: false,
274
+ basis: 'reported-evidence',
275
+ ciVerified: false,
276
+ blockers: ['RELEASE_NOT_RECORDED'],
277
+ checks: [],
278
+ nextActions: ['Record the exact browser, version, artifact digest and source revision.'],
279
+ };
280
+ const inputs = {
281
+ tests: release.artifactDigest,
282
+ scan: release.artifactDigest,
283
+ installed: release.artifactDigest,
284
+ permissions: release.manifestDigest,
285
+ privacy: release.policyDigest,
286
+ listing: release.listingDigest,
287
+ screenshots: release.listingDigest,
288
+ payment: release.paymentDigest,
289
+ };
290
+ const required = [
291
+ 'tests',
292
+ 'scan',
293
+ 'permissions',
294
+ 'privacy',
295
+ 'listing',
296
+ 'screenshots',
297
+ 'installed',
298
+ ...(release.paymentRequired ? ['payment'] : []),
299
+ ];
300
+ const checks = required.flatMap((kind) => (['listing', 'screenshots'].includes(kind) ? release.locales : [undefined]).map((locale) => {
301
+ const candidates = evidence.filter((e) => e.kind === kind && e.browser === release.browser && e.locale === locale);
302
+ const current = candidates.filter((e) => e.artifactDigest === release.artifactDigest &&
303
+ e.inputDigest === inputs[kind] &&
304
+ e.provenance.commit === release.commit &&
305
+ e.provenance.dirtyTreeDigest === release.dirtyTreeDigest);
306
+ const latest = current.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt))[0];
307
+ return {
308
+ kind,
309
+ locale: locale ?? null,
310
+ verification: latest?.status ?? (candidates.length ? 'stale' : 'unknown'),
311
+ evidenceId: latest?.id ?? null,
312
+ source: latest?.provenance.source ?? null,
313
+ ciVerified: false,
314
+ };
315
+ }));
316
+ const blockers = checks
317
+ .filter((c) => c.verification !== 'passed')
318
+ .map((c) => `${c.kind}${c.locale ? `:${c.locale}` : ''}:${c.verification}`);
319
+ const built = document.builtManifests?.[release.browser];
320
+ if (!built)
321
+ blockers.push('BUILT_MANIFEST_NOT_RECORDED');
322
+ else {
323
+ if (hashMetadata(built.manifest) !== release.manifestDigest)
324
+ blockers.push('BUILT_MANIFEST_CHANGED');
325
+ if (built.manifest.version !== release.version)
326
+ blockers.push('RELEASE_VERSION_MISMATCH');
327
+ if (built.provenance.commit !== release.commit ||
328
+ built.provenance.dirtyTreeDigest !== release.dirtyTreeDigest)
329
+ blockers.push('BUILD_SOURCE_REVISION_MISMATCH');
330
+ }
331
+ const source = document.sourceManifests?.[release.browser];
332
+ if (source && hashMetadata(source.manifest) !== release.sourceManifestDigest)
333
+ blockers.push('SOURCE_MANIFEST_CHANGED_OR_UNBOUND');
334
+ for (const locale of document.spec?.targetLocales ?? [])
335
+ if (!release.locales.includes(locale))
336
+ blockers.push(`LOCALE_NOT_IN_RELEASE:${locale}`);
337
+ for (const task of document.spec?.tasks ?? [])
338
+ if (task.status === 'blocked')
339
+ blockers.push(`TASK_BLOCKED:${task.id}`);
340
+ return {
341
+ ready: blockers.length === 0,
342
+ basis: 'reported-evidence',
343
+ ciVerified: false,
344
+ release,
345
+ checks,
346
+ blockers,
347
+ nextActions: blockers.map((b) => `Resolve ${b} for this artifact.`),
348
+ };
349
+ }
350
+ //# sourceMappingURL=project-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-workspace.js","sourceRoot":"","sources":["../src/project-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Local metadata client. Never rewrites extension source or sends repository contents. */
2
+ import type { Command } from 'commander';
3
+ import { loadConfig } from './config.js';
4
+ type Json = Record<string, any>;
5
+ export declare class ProjectApiError extends Error {
6
+ readonly category: string;
7
+ readonly status: number;
8
+ readonly code?: string | undefined;
9
+ constructor(category: string, status: number, code?: string | undefined);
10
+ }
11
+ export declare function projectRequest(config: Awaited<ReturnType<typeof loadConfig>>, method: string, input?: unknown, mutation?: boolean): Promise<Json>;
12
+ export declare const metadataDigest: (value: unknown) => string;
13
+ export declare function atomicJson(file: string, value: unknown): Promise<void>;
14
+ export declare function localProvenance(cwd: string): Promise<Json>;
15
+ export declare function registerProjectCommands(program: Command): void;
16
+ export {};
17
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAQ3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AASxC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE/B,qBAAa,eAAgB,SAAQ,KAAK;IAExC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBAFb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,YAAA;CAMvB;AACD,wBAAsB,cAAc,CACnC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,EAC9C,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,OAAY,EACnB,QAAQ,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,eAAO,MAAM,cAAc,4BAAe,CAAA;AAK1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,iBAe5D;AACD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDhE;AA6GD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QA4avD"}