mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-10 20:50:08 +02:00
21 lines
1.7 KiB
JavaScript
21 lines
1.7 KiB
JavaScript
// Rebind exactly one diagnostic sidecar, preserving every candidate closure and source field.
|
|
import {readFileSync,writeFileSync} from 'node:fs';
|
|
import {createHash} from 'node:crypto';
|
|
import {join} from 'node:path';
|
|
import {canonicalJson,sha256Tree,sha256File,requireTrue,verifyPack} from './verify-pack.mjs';
|
|
import {verifyProfile13Selection} from './verify-pack-profile13.mjs';
|
|
const [pack,originalSidecar,source,profileMode] = process.argv.slice(2);
|
|
requireTrue(profileMode === undefined || profileMode === 'profile13', 'Unexpected diagnostic profile mode');
|
|
requireTrue(process.argv.length === (profileMode ? 6 : 5), 'Unexpected diagnostic arguments');
|
|
const file=join(pack,'provider-pack.json'); const manifest=JSON.parse(readFileSync(file));
|
|
requireTrue(manifest.payload.runnerSourceRevision===source,'Original source mismatch');
|
|
requireTrue(manifest.payload.artifacts.acpxSidecar.path==='dist/cli/acpx-runtime-sidecar.cjs','Sidecar path mismatch');
|
|
requireTrue(manifest.payload.artifacts.acpxSidecar.sha256==='sha256:'+originalSidecar,'Original sidecar pin mismatch');
|
|
const p=manifest.payload;
|
|
p.artifacts.acpxSidecar.sha256=sha256File(join(pack,p.artifacts.acpxSidecar.path));
|
|
p.distDigest=sha256Tree(join(pack,'dist'));
|
|
p.bridgeDigest='sha256:'+createHash('sha256').update(p.artifacts.opencodeProxy.sha256).update('\n').update(p.artifacts.acpxSidecar.sha256).update('\n').update(p.distDigest).digest('hex');
|
|
manifest.digest='sha256:'+createHash('sha256').update(canonicalJson(p)).digest('hex');
|
|
writeFileSync(file,JSON.stringify(manifest,null,2)+'\n');
|
|
console.log(JSON.stringify(verifyPack(pack,source,'darwin','x64',profileMode === 'profile13' ? verifyProfile13Selection : undefined)));
|