@younndai/lyt 0.13.5 → 0.20.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.
Files changed (65) hide show
  1. package/README.md +27 -19
  2. package/dist/automator-run.d.ts +1 -0
  3. package/dist/automator-run.d.ts.map +1 -1
  4. package/dist/automator-run.js +5 -3
  5. package/dist/automator-run.js.map +1 -1
  6. package/dist/bench/pod-harness.d.ts.map +1 -1
  7. package/dist/bench/pod-harness.js +49 -1
  8. package/dist/bench/pod-harness.js.map +1 -1
  9. package/dist/build-program.d.ts +10 -1
  10. package/dist/build-program.d.ts.map +1 -1
  11. package/dist/build-program.js +23 -3
  12. package/dist/build-program.js.map +1 -1
  13. package/dist/cli.js +10 -4
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/capture.d.ts.map +1 -1
  16. package/dist/commands/capture.js +1 -2
  17. package/dist/commands/capture.js.map +1 -1
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +404 -244
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/install.d.ts +4 -0
  23. package/dist/commands/install.d.ts.map +1 -0
  24. package/dist/commands/install.js +107 -0
  25. package/dist/commands/install.js.map +1 -0
  26. package/dist/commands/outdated.d.ts.map +1 -1
  27. package/dist/commands/outdated.js +19 -5
  28. package/dist/commands/outdated.js.map +1 -1
  29. package/dist/commands/update.d.ts +90 -2
  30. package/dist/commands/update.d.ts.map +1 -1
  31. package/dist/commands/update.js +883 -48
  32. package/dist/commands/update.js.map +1 -1
  33. package/dist/flows/init-bootstrap.d.ts +7 -1
  34. package/dist/flows/init-bootstrap.d.ts.map +1 -1
  35. package/dist/flows/init-bootstrap.js +240 -69
  36. package/dist/flows/init-bootstrap.js.map +1 -1
  37. package/dist/index.d.ts +6 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/install/doctor-health.d.ts +16 -0
  42. package/dist/install/doctor-health.d.ts.map +1 -0
  43. package/dist/install/doctor-health.js +575 -0
  44. package/dist/install/doctor-health.js.map +1 -0
  45. package/dist/install/provider-inventory.d.ts +40 -0
  46. package/dist/install/provider-inventory.d.ts.map +1 -0
  47. package/dist/install/provider-inventory.js +73 -0
  48. package/dist/install/provider-inventory.js.map +1 -0
  49. package/dist/install/reconcile-engine.d.ts +87 -0
  50. package/dist/install/reconcile-engine.d.ts.map +1 -0
  51. package/dist/install/reconcile-engine.js +771 -0
  52. package/dist/install/reconcile-engine.js.map +1 -0
  53. package/dist/install/target-artifacts.d.ts +91 -0
  54. package/dist/install/target-artifacts.d.ts.map +1 -0
  55. package/dist/install/target-artifacts.js +597 -0
  56. package/dist/install/target-artifacts.js.map +1 -0
  57. package/dist/install/update-operation.d.ts +47 -0
  58. package/dist/install/update-operation.d.ts.map +1 -0
  59. package/dist/install/update-operation.js +318 -0
  60. package/dist/install/update-operation.js.map +1 -0
  61. package/dist/install/update-plan.d.ts +132 -0
  62. package/dist/install/update-plan.d.ts.map +1 -0
  63. package/dist/install/update-plan.js +418 -0
  64. package/dist/install/update-plan.js.map +1 -0
  65. package/package.json +16 -6
@@ -0,0 +1,597 @@
1
+ /*
2
+ * Copyright 2026 MARLINK TRADING SRL (YounndAI)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { createHash } from "node:crypto";
17
+ import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
18
+ import { gunzipSync } from "node:zlib";
19
+ import { dirname, join, resolve } from "node:path";
20
+ import { createRequire } from "node:module";
21
+ import { assertPathChainHasNoLinks } from "./reconcile-engine.js";
22
+ import { canonicalJson, digestCanonical, UPDATE_PLAN_PACKAGES, } from "./update-plan.js";
23
+ const MAX_TARBALL_BYTES = 16 * 1024 * 1024;
24
+ const MAX_UNPACKED_BYTES = 64 * 1024 * 1024;
25
+ const MAX_INSTALLED_BYTES = 64 * 1024 * 1024;
26
+ const MAX_FILES = 10_000;
27
+ const SHA256 = /^[a-f0-9]{64}$/;
28
+ const PROVIDER_OWNERS = new Map([
29
+ ["@younndai/lyt-skills", "directory-link"],
30
+ ["@younndai/lyt-vault", "marker-file"],
31
+ ]);
32
+ export function inspectTargetTarballBytes(args) {
33
+ const compressed = Buffer.from(args.bytes);
34
+ if (compressed.byteLength === 0 || compressed.byteLength > MAX_TARBALL_BYTES) {
35
+ throw new Error("update-target-tarball-size");
36
+ }
37
+ const actualSri = `sha512-${createHash("sha512").update(compressed).digest("base64")}`;
38
+ if (actualSri !== args.integrity)
39
+ throw new Error("update-target-tarball-sri-mismatch");
40
+ const entries = parseTar(gunzipSync(compressed, { maxOutputLength: MAX_UNPACKED_BYTES }));
41
+ const packageJson = entry(entries, "package/package.json");
42
+ const identity = JSON.parse(packageJson.bytes.toString("utf8"));
43
+ if (identity.name !== args.package || identity.version !== args.version) {
44
+ throw new Error("update-target-tarball-identity-mismatch");
45
+ }
46
+ const files = entries
47
+ .filter((item) => item.path.startsWith("package/") && item.path !== "package/")
48
+ .map((item) => ({
49
+ path: item.path.slice("package/".length),
50
+ digest: createHash("sha256").update(item.bytes).digest("hex"),
51
+ size: item.bytes.byteLength,
52
+ }))
53
+ .sort((a, b) => a.path.localeCompare(b.path));
54
+ const providers = entries.filter((item) => item.path === "package/dist/install-provider-manifest.json");
55
+ if (providers.length > 1)
56
+ throw new Error("update-target-provider-manifest-duplicate");
57
+ const provider = providers[0];
58
+ const expectedKind = PROVIDER_OWNERS.get(args.package);
59
+ if (expectedKind !== undefined && provider === undefined) {
60
+ throw new Error("update-target-provider-manifest-missing");
61
+ }
62
+ if (expectedKind === undefined && provider !== undefined) {
63
+ throw new Error("update-target-provider-manifest-unexpected-owner");
64
+ }
65
+ const providerManifest = provider === undefined
66
+ ? null
67
+ : parseTargetProviderManifest(JSON.parse(provider.bytes.toString("utf8")), args.package, args.version, files);
68
+ return Object.freeze({
69
+ artifact: Object.freeze({
70
+ package: args.package,
71
+ version: args.version,
72
+ integrity: args.integrity,
73
+ tarball_url: args.tarballUrl,
74
+ payload_digest: digestCanonical(files),
75
+ files: Object.freeze(files.map((file) => Object.freeze(file))),
76
+ }),
77
+ provider_manifest: providerManifest,
78
+ });
79
+ }
80
+ export function materializeTargetProviders(args) {
81
+ assertProviderManifestSet(args.manifests);
82
+ const manifests = new Map(args.manifests.map((manifest) => [manifest.package, manifest]));
83
+ const runtimeSet = new Set(args.runtimes);
84
+ return Object.freeze(UPDATE_PLAN_PACKAGES.map((packageName) => {
85
+ const manifest = manifests.get(packageName);
86
+ const objects = [];
87
+ for (const object of manifest?.objects ?? []) {
88
+ if (!runtimeSet.has(object.runtime))
89
+ continue;
90
+ if (object.kind === "directory-link") {
91
+ const source = join(args.extractedRoots.get(packageName) ?? "missing-target-package", ...object.source_relative_path.split("/"));
92
+ objects.push(Object.freeze({
93
+ object_id: `skill:${object.runtime}:${object.name}`,
94
+ kind: "directory-link",
95
+ provider_package: manifest.package,
96
+ provider_version: manifest.version,
97
+ source_path: source,
98
+ target_path: join(args.homeDir, `.${object.runtime}`, "skills", object.name),
99
+ expected_digest: object.expected_digest,
100
+ trusted_legacy_digests: Object.freeze([]),
101
+ }));
102
+ }
103
+ else {
104
+ objects.push(Object.freeze({
105
+ object_id: `manual:${object.runtime}`,
106
+ kind: "marker-file",
107
+ provider_package: manifest.package,
108
+ provider_version: manifest.version,
109
+ target_path: runtimeManualPath(args.homeDir, object.runtime),
110
+ content: object.content,
111
+ expected_digest: object.expected_digest,
112
+ marker_begin: object.marker_begin,
113
+ marker_end: object.marker_end,
114
+ trusted_legacy_digests: Object.freeze([]),
115
+ }));
116
+ }
117
+ }
118
+ return Object.freeze({
119
+ schema_id: "lyt.install-provider",
120
+ schema_version: Object.freeze({ major: 1, minor: 0 }),
121
+ package: packageName,
122
+ version: manifest?.version ?? args.manifests[0]?.version ?? "0.0.0",
123
+ objects: Object.freeze(objects),
124
+ });
125
+ }));
126
+ }
127
+ export function providersFromUpdatePlan(plan, packageRoots) {
128
+ return Object.freeze(UPDATE_PLAN_PACKAGES.map((packageName) => {
129
+ const objects = plan.target_provider_objects
130
+ .filter((object) => object.provider_package === packageName)
131
+ .map((object) => object.kind === "directory-link"
132
+ ? Object.freeze({
133
+ object_id: object.object_id,
134
+ kind: "directory-link",
135
+ provider_package: object.provider_package,
136
+ provider_version: object.provider_version,
137
+ source_path: join(packageRoots.get(packageName) ?? "missing-target-package", ...(object.source_relative_path ?? "missing").split("/")),
138
+ target_path: object.target_path,
139
+ expected_digest: object.expected_digest,
140
+ trusted_legacy_digests: Object.freeze([]),
141
+ })
142
+ : Object.freeze({
143
+ object_id: object.object_id,
144
+ kind: "marker-file",
145
+ provider_package: object.provider_package,
146
+ provider_version: object.provider_version,
147
+ target_path: object.target_path,
148
+ content: object.content ?? "",
149
+ expected_digest: object.expected_digest,
150
+ marker_begin: object.marker_begin ?? "",
151
+ marker_end: object.marker_end ?? "",
152
+ trusted_legacy_digests: Object.freeze([]),
153
+ }));
154
+ return Object.freeze({
155
+ schema_id: "lyt.install-provider",
156
+ schema_version: Object.freeze({ major: 1, minor: 0 }),
157
+ package: packageName,
158
+ version: plan.target_version,
159
+ objects: Object.freeze(objects),
160
+ });
161
+ }));
162
+ }
163
+ export async function stageTargetArtifactsV1(plan, root, fetchBytes = async (url) => {
164
+ const response = await fetch(url);
165
+ if (!response.ok)
166
+ throw new Error(`update-target-fetch-${response.status}`);
167
+ return new Uint8Array(await response.arrayBuffer());
168
+ }) {
169
+ const stage = resolve(root, "operations", plan.operation_id, "artifacts");
170
+ assertPathChainHasNoLinks(stage, true);
171
+ mkdirSync(stage, { recursive: true });
172
+ const paths = [];
173
+ for (const artifact of plan.target_artifacts) {
174
+ const path = join(stage, `${artifact.package.slice("@younndai/".length)}-${artifact.version}.tgz`);
175
+ assertPathChainHasNoLinks(path, true);
176
+ const bytes = existsSync(path)
177
+ ? readFileSync(path)
178
+ : Buffer.from(await fetchBytes(artifact.tarball_url));
179
+ const inspected = inspectTargetTarballBytes({
180
+ package: artifact.package,
181
+ version: artifact.version,
182
+ integrity: artifact.integrity,
183
+ tarballUrl: artifact.tarball_url,
184
+ bytes,
185
+ });
186
+ if (canonicalJson(inspected.artifact) !== canonicalJson(artifact)) {
187
+ throw new Error("update-target-staged-payload-mismatch");
188
+ }
189
+ if (!existsSync(path)) {
190
+ const partial = `${path}.${process.pid}.partial`;
191
+ assertPathChainHasNoLinks(partial, true);
192
+ try {
193
+ writeFileSync(partial, bytes, { flag: "wx" });
194
+ renameSync(partial, path);
195
+ }
196
+ finally {
197
+ if (existsSync(partial))
198
+ unlinkSync(partial);
199
+ }
200
+ }
201
+ paths.push(path);
202
+ }
203
+ return Object.freeze(paths);
204
+ }
205
+ export function verifyInstalledPayloadV1(root, artifact) {
206
+ try {
207
+ const observed = listInstalledFiles(resolve(root));
208
+ return canonicalJson(observed) === canonicalJson(artifact.files);
209
+ }
210
+ catch {
211
+ return false;
212
+ }
213
+ }
214
+ export function inspectInstalledPayloadRootV1(root, expectedDigest, packageName) {
215
+ const absolute = resolve(root);
216
+ if (!SHA256.test(expectedDigest)) {
217
+ return Object.freeze({
218
+ package: packageName,
219
+ root: absolute,
220
+ expected_digest: expectedDigest,
221
+ observed_digest: null,
222
+ status: "unreadable",
223
+ });
224
+ }
225
+ if (!existsSync(absolute)) {
226
+ return Object.freeze({
227
+ package: packageName,
228
+ root: absolute,
229
+ expected_digest: expectedDigest,
230
+ observed_digest: null,
231
+ status: "missing",
232
+ });
233
+ }
234
+ try {
235
+ const observed = digestCanonical(listInstalledFiles(absolute));
236
+ return Object.freeze({
237
+ package: packageName,
238
+ root: absolute,
239
+ expected_digest: expectedDigest,
240
+ observed_digest: observed,
241
+ status: observed === expectedDigest ? "match" : "mismatch",
242
+ });
243
+ }
244
+ catch (error) {
245
+ const message = String(error);
246
+ const unsafe = message.includes("symlink") || message.includes("reparse");
247
+ return Object.freeze({
248
+ package: packageName,
249
+ root: absolute,
250
+ expected_digest: expectedDigest,
251
+ observed_digest: null,
252
+ status: unsafe ? "unsafe" : "unreadable",
253
+ });
254
+ }
255
+ }
256
+ export function inspectInstalledPackagePayloadsV1(anchor, resolveRoot = resolveInstalledPackageRoot) {
257
+ const expected = new Map(anchor.package_payloads.map((entry) => [entry.package, entry.digest]));
258
+ return Object.freeze(UPDATE_PLAN_PACKAGES.map((packageName) => {
259
+ const digest = expected.get(packageName);
260
+ if (digest === undefined) {
261
+ return Object.freeze({
262
+ package: packageName,
263
+ root: null,
264
+ expected_digest: "",
265
+ observed_digest: null,
266
+ status: "unreadable",
267
+ });
268
+ }
269
+ let root;
270
+ try {
271
+ root = resolveRoot(packageName);
272
+ }
273
+ catch {
274
+ root = null;
275
+ return Object.freeze({
276
+ package: packageName,
277
+ root,
278
+ expected_digest: digest,
279
+ observed_digest: null,
280
+ status: "unreadable",
281
+ });
282
+ }
283
+ return root === null
284
+ ? Object.freeze({
285
+ package: packageName,
286
+ root,
287
+ expected_digest: digest,
288
+ observed_digest: null,
289
+ status: "missing",
290
+ })
291
+ : inspectInstalledPayloadRootV1(root, digest, packageName);
292
+ }));
293
+ }
294
+ export function resolveInstalledPackageRoot(packageName) {
295
+ const require = createRequire(import.meta.url);
296
+ const manifest = (require.resolve.paths(packageName) ?? [])
297
+ .map((base) => join(base, ...packageName.split("/"), "package.json"))
298
+ .find((candidate) => existsSync(candidate));
299
+ return manifest === undefined ? null : dirname(manifest);
300
+ }
301
+ export function installedStateAnchorPath(root) {
302
+ return join(resolve(root), "installed-state-anchor.json");
303
+ }
304
+ export function writeInstalledStateAnchorV1(plan, root) {
305
+ const path = installedStateAnchorPath(root);
306
+ assertPathChainHasNoLinks(path, true);
307
+ mkdirSync(dirname(path), { recursive: true });
308
+ const payload = {
309
+ schema_id: "lyt.installed-state-anchor",
310
+ schema_version: Object.freeze({ major: 1, minor: 0 }),
311
+ plan_digest: plan.plan_digest,
312
+ target_version: plan.target_version,
313
+ package_payloads: Object.freeze(plan.target_artifacts.map((artifact) => Object.freeze({ package: artifact.package, digest: artifact.payload_digest }))),
314
+ provider_destinations: Object.freeze(plan.target_provider_objects.map((object) => Object.freeze({ object_id: object.object_id, digest: object.expected_applied_digest }))),
315
+ };
316
+ const anchor = Object.freeze({
317
+ ...payload,
318
+ anchor_digest: digestCanonical(payload),
319
+ });
320
+ const temporary = `${path}.${process.pid}.partial`;
321
+ assertPathChainHasNoLinks(temporary, true);
322
+ try {
323
+ writeFileSync(temporary, `${JSON.stringify(anchor, null, 2)}\n`, { flag: "wx" });
324
+ renameSync(temporary, path);
325
+ }
326
+ finally {
327
+ if (existsSync(temporary))
328
+ unlinkSync(temporary);
329
+ }
330
+ return anchor;
331
+ }
332
+ export function readInstalledStateAnchorV1(root) {
333
+ const path = installedStateAnchorPath(root);
334
+ if (!existsSync(path))
335
+ return Object.freeze({ status: "missing", anchor: null });
336
+ try {
337
+ assertPathChainHasNoLinks(path, true);
338
+ const value = JSON.parse(readFileSync(path, "utf8"));
339
+ if (value.schema_id !== "lyt.installed-state-anchor" ||
340
+ value.schema_version?.major !== 1 ||
341
+ value.schema_version?.minor !== 0 ||
342
+ JSON.stringify(Object.keys(value).sort()) !==
343
+ JSON.stringify([
344
+ "anchor_digest",
345
+ "package_payloads",
346
+ "plan_digest",
347
+ "provider_destinations",
348
+ "schema_id",
349
+ "schema_version",
350
+ "target_version",
351
+ ].sort()) ||
352
+ !SHA256.test(value.plan_digest) ||
353
+ !SHA256.test(value.anchor_digest) ||
354
+ !Array.isArray(value.package_payloads) ||
355
+ value.package_payloads.length !== 7 ||
356
+ !Array.isArray(value.provider_destinations) ||
357
+ value.package_payloads.some((entry) => !SHA256.test(entry.digest)) ||
358
+ value.provider_destinations.some((entry) => !entry.object_id || !SHA256.test(entry.digest)))
359
+ return Object.freeze({ status: "invalid", anchor: null });
360
+ const { anchor_digest: anchorDigest, ...payload } = value;
361
+ if (digestCanonical(payload) !== anchorDigest)
362
+ return Object.freeze({ status: "invalid", anchor: null });
363
+ return Object.freeze({ status: "present", anchor: Object.freeze(value) });
364
+ }
365
+ catch {
366
+ return Object.freeze({ status: "invalid", anchor: null });
367
+ }
368
+ }
369
+ export function verifyInstalledStateAnchorV1(root, observedProviderDigests) {
370
+ const read = readInstalledStateAnchorV1(root);
371
+ if (read.status !== "present") {
372
+ return Object.freeze({ status: read.status, mismatched_object_ids: Object.freeze([]) });
373
+ }
374
+ const mismatched = read.anchor.provider_destinations
375
+ .filter((entry) => observedProviderDigests.get(entry.object_id) !== entry.digest)
376
+ .map((entry) => entry.object_id)
377
+ .sort();
378
+ return Object.freeze({
379
+ status: mismatched.length === 0 ? "match" : "mismatch",
380
+ mismatched_object_ids: Object.freeze(mismatched),
381
+ });
382
+ }
383
+ function listInstalledFiles(root) {
384
+ assertPathChainHasNoLinks(root, true);
385
+ const files = [];
386
+ let totalBytes = 0;
387
+ const walk = (dir, prefix) => {
388
+ for (const item of readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
389
+ if (prefix.length === 0 && item.name === "node_modules")
390
+ continue;
391
+ const path = join(dir, item.name);
392
+ const relative = prefix.length === 0 ? item.name : `${prefix}/${item.name}`;
393
+ const stat = lstatSync(path);
394
+ if (stat.isSymbolicLink())
395
+ throw new Error("update-installed-payload-symlink");
396
+ if (stat.isDirectory())
397
+ walk(path, relative);
398
+ else if (stat.isFile()) {
399
+ totalBytes += stat.size;
400
+ if (totalBytes > MAX_INSTALLED_BYTES)
401
+ throw new Error("update-installed-payload-byte-limit");
402
+ files.push({
403
+ path: relative,
404
+ digest: createHash("sha256").update(readFileSync(path)).digest("hex"),
405
+ size: stat.size,
406
+ });
407
+ }
408
+ if (files.length > MAX_FILES)
409
+ throw new Error("update-installed-payload-file-limit");
410
+ }
411
+ };
412
+ walk(root, "");
413
+ return Object.freeze(files);
414
+ }
415
+ function parseTargetProviderManifest(value, packageName, version, files) {
416
+ const manifest = value;
417
+ const expectedKind = PROVIDER_OWNERS.get(packageName);
418
+ if (!manifest ||
419
+ manifest.schema_id !== "lyt.target-provider-manifest" ||
420
+ manifest.schema_version?.major !== 1 ||
421
+ manifest.schema_version?.minor !== 0 ||
422
+ manifest.package !== packageName ||
423
+ manifest.version !== version ||
424
+ !Array.isArray(manifest.objects) ||
425
+ manifest.objects.length === 0 ||
426
+ expectedKind === undefined ||
427
+ JSON.stringify(Object.keys(manifest).sort()) !==
428
+ JSON.stringify(["objects", "package", "schema_id", "schema_version", "version"].sort()) ||
429
+ JSON.stringify(Object.keys(manifest.schema_version).sort()) !==
430
+ JSON.stringify(["major", "minor"])) {
431
+ throw new Error("update-target-provider-manifest-invalid");
432
+ }
433
+ const objectIds = new Set();
434
+ const destinations = new Set();
435
+ for (const object of manifest.objects) {
436
+ const objectId = object.kind === "directory-link"
437
+ ? `skill:${object.runtime}:${object.name}`
438
+ : `manual:${object.runtime}`;
439
+ const destination = object.kind === "directory-link"
440
+ ? `${object.runtime}/skills/${object.name}`
441
+ : `${object.runtime}/manual`;
442
+ if (object.kind !== expectedKind ||
443
+ objectIds.has(objectId) ||
444
+ destinations.has(destination) ||
445
+ !["claude", "codex", "agents"].includes(object.runtime) ||
446
+ !SHA256.test(object.expected_digest) ||
447
+ (object.kind === "directory-link"
448
+ ? !safeRelative(object.source_relative_path) ||
449
+ !/^[a-z][a-z0-9-]*$/.test(object.name) ||
450
+ object.source_relative_path !== `skills/${object.name}` ||
451
+ JSON.stringify(Object.keys(object).sort()) !==
452
+ JSON.stringify(["expected_digest", "kind", "name", "runtime", "source_relative_path"].sort()) ||
453
+ digestManifestSubtree(files, object.source_relative_path) !== object.expected_digest
454
+ : object.kind !== "marker-file" ||
455
+ typeof object.content !== "string" ||
456
+ typeof object.marker_begin !== "string" ||
457
+ typeof object.marker_end !== "string" ||
458
+ object.marker_begin !== `<!-- lyt-manual v${version} BEGIN -->` ||
459
+ object.marker_end !== `<!-- lyt-manual v${version} END -->` ||
460
+ !object.content.includes(object.marker_begin) ||
461
+ !object.content.includes(object.marker_end) ||
462
+ JSON.stringify(Object.keys(object).sort()) !==
463
+ JSON.stringify([
464
+ "content",
465
+ "expected_digest",
466
+ "kind",
467
+ "marker_begin",
468
+ "marker_end",
469
+ "runtime",
470
+ ].sort()) ||
471
+ createHash("sha256").update(object.content).digest("hex") !== object.expected_digest)) {
472
+ throw new Error("update-target-provider-manifest-invalid");
473
+ }
474
+ objectIds.add(objectId);
475
+ destinations.add(destination);
476
+ }
477
+ return Object.freeze(manifest);
478
+ }
479
+ function assertProviderManifestSet(manifests) {
480
+ const packages = manifests.map((manifest) => manifest.package).sort();
481
+ const expected = [...PROVIDER_OWNERS.keys()].sort();
482
+ if (canonicalJson(packages) !== canonicalJson(expected)) {
483
+ throw new Error("update-target-provider-manifest-set-invalid");
484
+ }
485
+ for (const manifest of manifests) {
486
+ const expectedKind = PROVIDER_OWNERS.get(manifest.package);
487
+ if (expectedKind === undefined ||
488
+ manifest.objects.some((object) => object.kind !== expectedKind)) {
489
+ throw new Error("update-target-provider-manifest-owner-invalid");
490
+ }
491
+ }
492
+ }
493
+ function digestManifestSubtree(files, root) {
494
+ const prefix = `${root.replace(/\/$/, "")}/`;
495
+ const tree = new Map();
496
+ for (const file of files.filter((entry) => entry.path.startsWith(prefix))) {
497
+ const parts = file.path.slice(prefix.length).split("/");
498
+ let current = tree;
499
+ for (const part of parts.slice(0, -1)) {
500
+ const existing = current.get(part);
501
+ if (typeof existing === "string")
502
+ throw new Error("update-target-provider-manifest-invalid");
503
+ if (existing instanceof Map)
504
+ current = existing;
505
+ else {
506
+ const child = new Map();
507
+ current.set(part, child);
508
+ current = child;
509
+ }
510
+ }
511
+ const leaf = parts.at(-1);
512
+ if (!leaf || current.has(leaf))
513
+ throw new Error("update-target-provider-manifest-invalid");
514
+ current.set(leaf, file.digest);
515
+ }
516
+ if (tree.size === 0)
517
+ throw new Error("update-target-provider-manifest-invalid");
518
+ const digestTree = (node) => {
519
+ const hash = createHash("sha256");
520
+ for (const name of [...node.keys()].sort()) {
521
+ const child = node.get(name);
522
+ hash.update(name, "utf8");
523
+ hash.update("\0");
524
+ hash.update(typeof child === "string"
525
+ ? child
526
+ : digestTree(child), "hex");
527
+ }
528
+ return hash.digest("hex");
529
+ };
530
+ return digestTree(tree);
531
+ }
532
+ function parseTar(bytes) {
533
+ const entries = [];
534
+ let offset = 0;
535
+ let overridePath = null;
536
+ while (offset + 512 <= bytes.length) {
537
+ const header = bytes.subarray(offset, offset + 512);
538
+ if (header.every((byte) => byte === 0))
539
+ break;
540
+ const name = text(header.subarray(0, 100));
541
+ const prefix = text(header.subarray(345, 500));
542
+ const size = Number.parseInt(text(header.subarray(124, 136)).trim() || "0", 8);
543
+ if (!Number.isSafeInteger(size) || size < 0 || size > MAX_UNPACKED_BYTES)
544
+ throw new Error("update-target-tar-invalid");
545
+ const type = String.fromCharCode(header[156] ?? 0);
546
+ const bodyStart = offset + 512;
547
+ const bodyEnd = bodyStart + size;
548
+ if (bodyEnd > bytes.length)
549
+ throw new Error("update-target-tar-truncated");
550
+ const body = bytes.subarray(bodyStart, bodyEnd);
551
+ const rawPath = overridePath ?? (prefix ? `${prefix}/${name}` : name);
552
+ overridePath = null;
553
+ if (type === "x")
554
+ overridePath = parsePaxPath(body);
555
+ else if (type === "L")
556
+ overridePath = text(body);
557
+ else if (type === "0" || type === "\0" || type === "") {
558
+ if (!safeRelative(rawPath))
559
+ throw new Error("update-target-tar-path");
560
+ entries.push(Object.freeze({ path: rawPath, bytes: Buffer.from(body) }));
561
+ if (entries.length > MAX_FILES)
562
+ throw new Error("update-target-tar-file-limit");
563
+ }
564
+ else if (type !== "5") {
565
+ throw new Error("update-target-tar-unsupported-entry");
566
+ }
567
+ offset = bodyStart + Math.ceil(size / 512) * 512;
568
+ }
569
+ return Object.freeze(entries);
570
+ }
571
+ function parsePaxPath(bytes) {
572
+ const match = /(?:^|\n)\d+ path=([^\n]+)\n/.exec(bytes.toString("utf8"));
573
+ return match?.[1] ?? null;
574
+ }
575
+ function text(bytes) {
576
+ const zero = bytes.indexOf(0);
577
+ return Buffer.from(zero < 0 ? bytes : bytes.subarray(0, zero))
578
+ .toString("utf8")
579
+ .trim();
580
+ }
581
+ function entry(entries, path) {
582
+ const found = entries.find((candidate) => candidate.path === path);
583
+ if (found === undefined)
584
+ throw new Error("update-target-tar-required-entry-missing");
585
+ return found;
586
+ }
587
+ function safeRelative(value) {
588
+ return (value.length > 0 &&
589
+ value.length < 500 &&
590
+ !value.startsWith("/") &&
591
+ !value.includes("\\") &&
592
+ !value.split("/").some((part) => part === "" || part === "." || part === ".."));
593
+ }
594
+ function runtimeManualPath(home, runtime) {
595
+ return join(home, `.${runtime}`, runtime === "claude" ? "CLAUDE.md" : "AGENTS.md");
596
+ }
597
+ //# sourceMappingURL=target-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-artifacts.js","sourceRoot":"","sources":["../../src/install/target-artifacts.ts"],"names":[],"mappings":"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"}