@wenathlan/saddle 1.8.11 → 1.8.13

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 (92) hide show
  1. package/LICENSE +646 -175
  2. package/README.md +11 -3
  3. package/dist/browser/recorder.d.ts +7 -13
  4. package/dist/browser/recorder.d.ts.map +1 -1
  5. package/dist/browser/recorder.js +42 -6
  6. package/dist/browser/recorder.js.map +1 -1
  7. package/dist/browser/snapshot.d.ts +12 -0
  8. package/dist/browser/snapshot.d.ts.map +1 -1
  9. package/dist/browser/snapshot.js +76 -0
  10. package/dist/browser/snapshot.js.map +1 -1
  11. package/dist/dispatch/resumable.d.ts +18 -1
  12. package/dist/dispatch/resumable.d.ts.map +1 -1
  13. package/dist/dispatch/resumable.js +28 -3
  14. package/dist/dispatch/resumable.js.map +1 -1
  15. package/dist/extension/build.d.ts.map +1 -1
  16. package/dist/extension/build.js +27 -3
  17. package/dist/extension/build.js.map +1 -1
  18. package/dist/index.d.ts +0 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +0 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/memory/engine.d.ts +10 -0
  23. package/dist/memory/engine.d.ts.map +1 -1
  24. package/dist/memory/engine.js +57 -7
  25. package/dist/memory/engine.js.map +1 -1
  26. package/dist/modes/resolve.d.ts +55 -0
  27. package/dist/modes/resolve.d.ts.map +1 -1
  28. package/dist/modes/resolve.js +9 -0
  29. package/dist/modes/resolve.js.map +1 -1
  30. package/dist/packager/manifest.d.ts +15 -0
  31. package/dist/packager/manifest.d.ts.map +1 -1
  32. package/dist/packager/manifest.js +36 -0
  33. package/dist/packager/manifest.js.map +1 -1
  34. package/dist/queue/persistent.d.ts +2 -1
  35. package/dist/queue/persistent.d.ts.map +1 -1
  36. package/dist/queue/persistent.js +27 -10
  37. package/dist/queue/persistent.js.map +1 -1
  38. package/dist/release/assets.d.ts +25 -0
  39. package/dist/release/assets.d.ts.map +1 -1
  40. package/dist/release/assets.js +67 -4
  41. package/dist/release/assets.js.map +1 -1
  42. package/dist/release/verify.d.ts +12 -0
  43. package/dist/release/verify.d.ts.map +1 -0
  44. package/dist/release/verify.js +112 -0
  45. package/dist/release/verify.js.map +1 -0
  46. package/dist/scrape/robots.js +1 -1
  47. package/dist/scrape/schema.d.ts +18 -0
  48. package/dist/scrape/schema.d.ts.map +1 -1
  49. package/dist/scrape/schema.js +67 -0
  50. package/dist/scrape/schema.js.map +1 -1
  51. package/dist/storage/s3compatible.d.ts +1 -0
  52. package/dist/storage/s3compatible.d.ts.map +1 -1
  53. package/dist/storage/s3compatible.js +43 -4
  54. package/dist/storage/s3compatible.js.map +1 -1
  55. package/dist/workflow/manifest.d.ts +1 -0
  56. package/dist/workflow/manifest.d.ts.map +1 -1
  57. package/dist/workflow/manifest.js +1 -0
  58. package/dist/workflow/manifest.js.map +1 -1
  59. package/dist/workflow/triggers.d.ts +30 -2
  60. package/dist/workflow/triggers.d.ts.map +1 -1
  61. package/dist/workflow/triggers.js +67 -1
  62. package/dist/workflow/triggers.js.map +1 -1
  63. package/docs/actionrecorder.md +12 -0
  64. package/docs/artifactavailability.md +52 -1
  65. package/docs/batches-1816-1820.md +13 -0
  66. package/docs/capabilityreport.md +13 -0
  67. package/docs/documentmap-1.8.12.md +17 -0
  68. package/docs/licenseaudit-1.8.12.md +21 -0
  69. package/docs/memoryengine.md +21 -0
  70. package/docs/nativeidentityresearch-1.8.11.md +69 -0
  71. package/docs/releaseassets.md +6 -2
  72. package/docs/releasenotes-1.8.12.md +46 -0
  73. package/docs/releasenotes-1.8.13.md +42 -0
  74. package/docs/repo-analysis-1.8.21.json +2617 -0
  75. package/docs/repo-candidates-1.8.21.jsonl +666 -0
  76. package/docs/repo-research-1.8.21.md +38 -0
  77. package/docs/repo-selected-1.8.21.json +786 -0
  78. package/docs/repo-synthesis-1.8.21.md +112 -0
  79. package/docs/s3compatible.md +12 -0
  80. package/docs/scanningresearch-1.8.11.md +17 -0
  81. package/docs/securityreferences-1.8.11.md +10 -0
  82. package/docs/securityresearch-1.8.11.md +19 -0
  83. package/docs/signingresearch-1.8.12.md +167 -0
  84. package/docs/signingwithoutcertificates.md +54 -0
  85. package/docs/signpathapplication.md +11 -0
  86. package/docs/sitemap.md +14 -0
  87. package/docs/tauri-glib-risk-1.8.11.md +11 -0
  88. package/docs/workflowinputs.md +17 -0
  89. package/extension/manifest.json +15 -2
  90. package/package.json +2 -1
  91. package/license.md +0 -203
  92. package/license.txt +0 -203
@@ -1,17 +1,28 @@
1
1
  /**
2
- * memory engine loads from the first backend and persists to every backend.
2
+ * memory engine loads from the first backend, persists to every backend and
3
+ * bounds the hot working set without changing the default unbounded behavior.
3
4
  */
4
5
  import { memoryobject, tobytes } from "./objects.js";
5
6
  import { transformtocompute, transformtostorage } from "./transforms.js";
6
7
  import { storagecapabilities, syncbackends } from "../storage/sync.js";
8
+ /** Creates a storage-backed memory engine with optional LRU working-set limits. */
7
9
  export function memoryengine(options = {}) {
8
10
  const backends = options.backends ?? [];
11
+ const maxentries = limit(options.maxentries, "maxentries");
12
+ const maxbytes = limit(options.maxbytes, "maxbytes");
9
13
  const values = new Map();
14
+ let usedbytes = 0;
15
+ let hits = 0;
16
+ let misses = 0;
17
+ let evictions = 0;
10
18
  async function load(key) {
11
19
  if (!key)
12
20
  throw new TypeError("memory key is required");
13
- if (values.has(key))
14
- return values.get(key);
21
+ if (values.has(key)) {
22
+ hits += 1;
23
+ return touch(key);
24
+ }
25
+ misses += 1;
15
26
  let last;
16
27
  for (const backend of backends) {
17
28
  try {
@@ -19,7 +30,7 @@ export function memoryengine(options = {}) {
19
30
  if (value == null)
20
31
  continue;
21
32
  const object = memoryobject({ id: key, buffer: value.data ?? value, type: value.contenttype ?? value.type, metadata: value.metadata });
22
- values.set(key, object);
33
+ cache(key, object);
23
34
  return object;
24
35
  }
25
36
  catch (error) {
@@ -31,14 +42,21 @@ export function memoryengine(options = {}) {
31
42
  throw new Error(`memory engine load failed for key "${key}": not found`);
32
43
  }
33
44
  async function persist(key, data, options = {}) {
45
+ if (!key)
46
+ throw new TypeError("memory key is required");
34
47
  const payload = tobytes(data?.payload ?? data?.buffer ?? data);
35
48
  const object = memoryobject({ id: key, buffer: payload, type: options.mimetype ?? data?.mimetype, metadata: options.metadata ?? data?.metadata });
36
49
  for (const backend of backends)
37
50
  await backend.put(key, { data: object.buffer, contenttype: object.type, metadata: object.metadata });
38
- values.set(key, object);
51
+ cache(key, object);
39
52
  return object;
40
53
  }
41
- function release(key) { values.delete(key); }
54
+ function release(key) {
55
+ const object = values.get(key);
56
+ if (object)
57
+ usedbytes -= object.buffer.byteLength;
58
+ values.delete(key);
59
+ }
42
60
  async function safeload(key) { try {
43
61
  return { success: true, data: await load(key) };
44
62
  }
@@ -54,6 +72,38 @@ export function memoryengine(options = {}) {
54
72
  return syncbackends(source, targets, key, options);
55
73
  }
56
74
  function capabilities() { return backends.map((backend, index) => ({ index, capabilities: storagecapabilities(backend) })); }
57
- return { load, persist, release, safeload, sync, capabilities, transformtocompute, transformtostorage, list() { return [...values.keys()]; } };
75
+ function stats() { return { entries: values.size, bytes: usedbytes, hits, misses, evictions, maxentries, maxbytes }; }
76
+ return { load, persist, release, safeload, sync, capabilities, stats, transformtocompute, transformtostorage, list() { return [...values.keys()]; } };
77
+ function cache(key, object) {
78
+ const previous = values.get(key);
79
+ if (previous)
80
+ usedbytes -= previous.buffer.byteLength;
81
+ values.delete(key);
82
+ if (object.buffer.byteLength > maxbytes || maxentries === 0)
83
+ return;
84
+ values.set(key, object);
85
+ usedbytes += object.buffer.byteLength;
86
+ while (values.size > maxentries || usedbytes > maxbytes) {
87
+ const oldest = values.keys().next().value;
88
+ const evicted = values.get(oldest);
89
+ values.delete(oldest);
90
+ usedbytes -= evicted.buffer.byteLength;
91
+ evictions += 1;
92
+ }
93
+ }
94
+ function touch(key) {
95
+ const object = values.get(key);
96
+ values.delete(key);
97
+ values.set(key, object);
98
+ return object;
99
+ }
100
+ }
101
+ function limit(value, name) {
102
+ if (value === undefined)
103
+ return Infinity;
104
+ const numeric = Number(value);
105
+ if (!Number.isInteger(numeric) || numeric < 0)
106
+ throw new TypeError(`${name} must be a non-negative integer`);
107
+ return numeric;
58
108
  }
59
109
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../memory/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../memory/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvE,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,EAAE;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,UAAU,IAAI,CAAC,GAAG;QACrB,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,CAAC;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC;QACT,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,KAAK,IAAI,IAAI;oBAAE,SAAS;gBAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvI,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAI,GAAG,KAAK,CAAC;YAAC,CAAC;QACnC,CAAC;QACD,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,cAAc,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE;QAC5C,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClJ,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrI,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,OAAO,CAAC,GAAG;QAClB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM;YAAE,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAE7I,KAAK,UAAU,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;QAC5E,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,YAAY,KAAK,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7H,SAAS,KAAK,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEtH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtJ,SAAS,KAAK,CAAC,GAAG,EAAE,MAAM;QACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,QAAQ;YAAE,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,QAAQ,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO;QACpE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,GAAG,UAAU,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;YACvC,SAAS,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,SAAS,KAAK,CAAC,GAAG;QAChB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAAK,EAAE,IAAI;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAC7G,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -35,6 +35,61 @@ export declare function modecapabilities(profile: any): {
35
35
  externaldependency: boolean;
36
36
  visible: boolean;
37
37
  };
38
+ /** Returns a stable cross-runtime capability report without starting infrastructure. */
39
+ export declare function capabilityreport(options?: {}): {
40
+ version: number;
41
+ axes: {
42
+ [k: string]: string[];
43
+ };
44
+ overrides: {
45
+ runtime: any;
46
+ memory: any;
47
+ file: any;
48
+ dependency: any;
49
+ visibility: any;
50
+ pair: any;
51
+ };
52
+ profiles: {
53
+ mode: string;
54
+ capabilities: {
55
+ library: boolean;
56
+ browser: boolean;
57
+ cli: boolean;
58
+ physicalmemory: boolean;
59
+ vectorizedmemory: boolean;
60
+ externalmemory: boolean;
61
+ externalfile: boolean;
62
+ externaldependency: boolean;
63
+ visible: boolean;
64
+ };
65
+ profile: {
66
+ execution: any;
67
+ runtime: any;
68
+ memory: any;
69
+ file: any;
70
+ dependency: any;
71
+ visibility: any;
72
+ pair: any;
73
+ capabilities: {
74
+ library: boolean;
75
+ browser: boolean;
76
+ cli: boolean;
77
+ physicalmemory: boolean;
78
+ vectorizedmemory: boolean;
79
+ externalmemory: boolean;
80
+ externalfile: boolean;
81
+ externaldependency: boolean;
82
+ visible: boolean;
83
+ };
84
+ };
85
+ }[];
86
+ infrastructure: {
87
+ host: string;
88
+ port: string;
89
+ credentials: string;
90
+ provider: string;
91
+ };
92
+ };
38
93
  /** Applies one profile to a caller supplied operation. */
39
94
  export declare function withmode(options: any, operation: any): Promise<any>;
40
95
  export { modeaxes };
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../modes/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAErD,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;;EAYvC;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,OAAO,KAAA;IAEpC,OAAO;IACP,OAAO;IACP,GAAG;IACH,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,OAAO;EAEV;AAED,0DAA0D;AAC1D,wBAAsB,QAAQ,CAAC,OAAO,KAAA,EAAE,SAAS,KAAA,gBAAqI;AAEtL,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../modes/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAErD,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;;EAYvC;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,OAAO,KAAA;IAEpC,OAAO;IACP,OAAO;IACP,GAAG;IACH,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,OAAO;EAEV;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAMgH,IAAI;QAAkB,IAAI;QAAkB,WAAW;QAAkB,QAAQ;;EAC7O;AAED,0DAA0D;AAC1D,wBAAsB,QAAQ,CAAC,OAAO,KAAA,EAAE,SAAS,KAAA,gBAAqI;AAEtL,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -32,6 +32,15 @@ export function modecapabilities(profile) {
32
32
  visible: profile.visibility === "visible"
33
33
  };
34
34
  }
35
+ /** Returns a stable cross-runtime capability report without starting infrastructure. */
36
+ export function capabilityreport(options = {}) {
37
+ const overrides = { runtime: options.runtime ?? "unknown", memory: options.memory ?? "internal", file: options.file ?? "internal", dependency: options.dependency ?? "internal", visibility: options.visibility ?? "headless", pair: options.pair ?? "without" };
38
+ const profiles = modeaxes.execution.map((execution) => {
39
+ const profile = resolvemode({ ...overrides, execution });
40
+ return { mode: execution, capabilities: profile.capabilities, profile };
41
+ });
42
+ return { version: 1, axes: Object.fromEntries(Object.entries(modeaxes).map(([key, values]) => [key, [...values]])), overrides, profiles, infrastructure: { host: "caller-owned", port: "caller-owned", credentials: "caller-owned", provider: "caller-owned" } };
43
+ }
35
44
  /** Applies one profile to a caller supplied operation. */
36
45
  export async function withmode(options, operation) { if (typeof operation !== "function")
37
46
  throw new TypeError("mode operation is required"); return operation(resolvemode(options)); }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../modes/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErD,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU;QAC5C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU;QAC5C,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS;KAChC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9I,OAAO,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,OAAO;IACtC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,aAAa;QAC/E,OAAO,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ;QAC9I,GAAG,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ;QAClE,cAAc,EAAE,OAAO,CAAC,MAAM,KAAK,UAAU;QAC7C,gBAAgB,EAAE,OAAO,CAAC,MAAM,KAAK,YAAY;QACjD,cAAc,EAAE,OAAO,CAAC,MAAM,KAAK,UAAU;QAC7C,YAAY,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU;QACzC,kBAAkB,EAAE,OAAO,CAAC,UAAU,KAAK,UAAU;QACrD,OAAO,EAAE,OAAO,CAAC,UAAU,KAAK,SAAS;KAC1C,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,OAAO,SAAS,KAAK,UAAU;IAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtL,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../modes/resolve.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,21 @@ export declare const artifactformats: Readonly<{
11
11
  }>;
12
12
  /** Creates the public dotted artifact stem for a target and version. */
13
13
  export declare function artifactname(target: any, version: any, format: any): string;
14
+ /** Creates the supported cross-platform release matrix for a version. */
15
+ export declare function releaseartifactmatrix(version: any, options?: {}): {
16
+ version: string;
17
+ signing: string;
18
+ entries: {
19
+ surface: any;
20
+ platform: any;
21
+ architecture: any;
22
+ formats: any;
23
+ files: any;
24
+ signing: any;
25
+ checksums: string;
26
+ manifest: string;
27
+ }[];
28
+ };
14
29
  /** Creates a distribution manifest for caller-owned build and publication steps. */
15
30
  export declare function distributionmanifest(options?: {}): {
16
31
  name: any;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAIH,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,MAAM,KAAA,UAKnD;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,KAAK;IAG7C,IAAI;IACJ,OAAO;IACP,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;EAEX;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAK;;;;;;;;;;;EAKxD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;IACtC,IAAI;IAA0B,OAAO;IAA8F,KAAK;IAAkB,OAAO;EAC3K;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;;;;;EAOnD"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAIH,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,MAAM,KAAA,UAKnD;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,OAAO,KAAA,EAAE,OAAO,KAAK;;;;;;;;;;;;;EAiB1D;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,KAAK;IAG7C,IAAI;IACJ,OAAO;IACP,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;EAEX;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAK;;;;;;;;;;;EAKxD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;IACtC,IAAI;IAA0B,OAAO;IAA8F,KAAK;IAAkB,OAAO;EAC3K;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;;;;;EAOnD"}
@@ -18,6 +18,25 @@ export function artifactname(target, version, format) {
18
18
  throw new TypeError("artifact name contains unsupported characters");
19
19
  return normalized;
20
20
  }
21
+ /** Creates the supported cross-platform release matrix for a version. */
22
+ export function releaseartifactmatrix(version, options = {}) {
23
+ const normalizedversion = normalizeversion(version);
24
+ const signing = String(options.signing ?? "caller-owned");
25
+ const entries = [
26
+ entry("desktop", "linux", "x64", ["deb", "rpm", "appimage"], normalizedversion, signing),
27
+ entry("desktop", "linux", "arm64", ["deb", "rpm", "appimage"], normalizedversion, signing),
28
+ entry("desktop", "windows", "x86", ["exe", "msi"], normalizedversion, signing),
29
+ entry("desktop", "windows", "x64", ["exe", "msi"], normalizedversion, signing),
30
+ entry("desktop", "windows", "arm64", ["exe", "msi"], normalizedversion, signing),
31
+ entry("desktop", "macos", "x64", ["dmg", "app.zip"], normalizedversion, signing),
32
+ entry("desktop", "macos", "arm64", ["dmg", "app.zip"], normalizedversion, signing),
33
+ entry("android", "android", "caller", ["apk", "aab"], normalizedversion, signing),
34
+ entry("ios", "ios", "caller", ["ipa", "app.zip"], normalizedversion, signing),
35
+ entry("container", "oci", "caller", ["tar.gz"], normalizedversion, signing),
36
+ entry("extension", "browser", "caller", ["zip"], normalizedversion, signing),
37
+ ];
38
+ return { version: normalizedversion, signing, entries };
39
+ }
21
40
  /** Creates a distribution manifest for caller-owned build and publication steps. */
22
41
  export function distributionmanifest(options = {}) {
23
42
  if (!options.name || !options.version || !options.entry)
@@ -55,4 +74,21 @@ export function containerplan(manifest, options = {}) {
55
74
  lines.splice(3, 0, `expose ${options.port}`);
56
75
  return { base, workdir, command, dockerfile: `${lines.join("\n")}\n` };
57
76
  }
77
+ function normalizeversion(value) { const normalized = String(value).trim(); if (!/^\d+\.\d+\.\d+$/.test(normalized))
78
+ throw new TypeError(`invalid release version: ${value}`); return normalized; }
79
+ function entry(surface, platform, architecture, formats, version, signing) {
80
+ const files = formats.map((format) => {
81
+ if (surface === "android")
82
+ return `saddle.${format}.${version}.${format}`;
83
+ if (surface === "ios")
84
+ return `saddle.${format}.${version}.${format === "app.zip" ? "app.zip" : format}`;
85
+ if (surface === "container")
86
+ return `saddle.container.${version}.tar.gz`;
87
+ if (surface === "extension")
88
+ return `saddle.extension.${version}.zip`;
89
+ return `saddle.browser.${version}.${architecture}.${format}`;
90
+ });
91
+ const metadata = surface === "desktop" ? `desktop.${platform}.${architecture}` : surface;
92
+ return { surface, platform, architecture, formats, files, signing, checksums: `sha256.${metadata}.${version}`, manifest: `manifest.${metadata}.${version}.json` };
93
+ }
58
94
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@ export declare function persistentqueue(options?: {}): {
5
5
  items: any[];
6
6
  }>;
7
7
  enqueue: (payload: any, metadata?: {}) => Promise<any>;
8
- claim: () => Promise<any>;
8
+ claim: (claimoptions?: {}) => Promise<any>;
9
+ renew: (id: any, leasems?: any) => Promise<any>;
9
10
  complete: (id: any, result: any) => Promise<any>;
10
11
  fail: (id: any, error: any) => Promise<any>;
11
12
  list: (filter: any) => Promise<any[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"persistent.d.ts","sourceRoot":"","sources":["../../queue/persistent.ts"],"names":[],"mappings":"AAMA,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,OAAO,KAAK;;;;;;;;;;EAoC3C"}
1
+ {"version":3,"file":"persistent.d.ts","sourceRoot":"","sources":["../../queue/persistent.ts"],"names":[],"mappings":"AAMA,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,OAAO,KAAK;;;;;;;;;;;EA2C3C"}
@@ -8,7 +8,9 @@ export function persistentqueue(options = {}) {
8
8
  if (!options.path)
9
9
  throw new TypeError("persistent queue requires path");
10
10
  const maxattempts = options.maxattempts ?? 3;
11
- let state = { version: 1, items: [] };
11
+ const defaultleasems = options.leasems ?? 0;
12
+ const clock = typeof options.clock === "function" ? options.clock : () => Date.now();
13
+ let state = { version: 2, items: [] };
12
14
  let loaded = false;
13
15
  /** Reads the queue once and returns running jobs to the waiting state. */
14
16
  async function restore() {
@@ -22,28 +24,43 @@ export function persistentqueue(options = {}) {
22
24
  throw error;
23
25
  }
24
26
  for (const item of state.items ?? [])
25
- if (item.status === "running")
27
+ if (item.status === "running" && (!item.leaseexpiresat || item.leaseexpiresat <= clock())) {
26
28
  item.status = "queued";
29
+ item.leaseexpiresat = undefined;
30
+ }
31
+ state.version = 2;
27
32
  state.items ??= [];
28
33
  loaded = true;
29
34
  await persist();
30
35
  return state;
31
36
  }
32
37
  /** Appends a queued job and persists the new state. */
33
- async function enqueue(payload, metadata = {}) { await restore(); const id = metadata.id ?? `persistentjob${Date.now()}${state.items.length}`; if (state.items.some((item) => item.id === id))
34
- return state.items.find((item) => item.id === id); const item = { id, payload, status: "queued", attempts: 0, createdat: Date.now(), updatedat: Date.now(), metadata }; state.items.push(item); await persist(); return { ...item }; }
38
+ async function enqueue(payload, metadata = {}) { await restore(); const idempotencykey = metadata.idempotencykey; const id = metadata.id ?? idempotencykey ?? `persistentjob${clock()}${state.items.length}`; const existing = state.items.find((item) => item.id === id || (idempotencykey && item.idempotencykey === idempotencykey)); if (existing)
39
+ return { ...existing }; const item = { id, idempotencykey, payload, status: "queued", attempts: 0, createdat: clock(), updatedat: clock(), metadata }; state.items.push(item); await persist(); return { ...item }; }
35
40
  /** Claims the first queued job with stable ordering. */
36
- async function claim() { await restore(); const item = state.items.find((entry) => entry.status === "queued"); if (!item)
37
- return null; item.status = "running"; item.attempts += 1; item.updatedat = Date.now(); await persist(); return { ...item }; }
41
+ async function claim(claimoptions = {}) { await restore(); reclaimexpired(); const item = state.items.find((entry) => entry.status === "queued"); if (!item)
42
+ return null; const leasems = claimoptions.leasems ?? defaultleasems; item.status = "running"; item.attempts += 1; item.claimedat = clock(); item.leaseexpiresat = leasems > 0 ? clock() + leasems : undefined; item.updatedat = clock(); await persist(); return { ...item }; }
43
+ /** Renews a running item lease without changing its attempt count. */
44
+ async function renew(id, leasems = defaultleasems) { await restore(); reclaimexpired(); const item = find(id); if (item.status !== "running")
45
+ throw new Error(`persistent queue item is not running: ${id}`); if (!(leasems > 0))
46
+ throw new TypeError("lease duration must be positive"); item.leaseexpiresat = clock() + leasems; item.updatedat = clock(); await persist(); return { ...item }; }
38
47
  /** Commits a successful result. */
39
- async function complete(id, result) { await restore(); const item = find(id); item.status = "completed"; item.result = result; item.updatedat = Date.now(); await persist(); return { ...item }; }
48
+ async function complete(id, result) { await restore(); const item = find(id); item.status = "completed"; item.result = result; item.leaseexpiresat = undefined; item.updatedat = clock(); await persist(); return { ...item }; }
40
49
  /** Records an error and either retries or closes the item as failed. */
41
- async function fail(id, error) { await restore(); const item = find(id); item.error = { message: error?.message ?? String(error), code: error?.code }; item.status = item.attempts < maxattempts && error?.retryable !== false ? "queued" : "failed"; item.updatedat = Date.now(); await persist(); return { ...item }; }
50
+ async function fail(id, error) { await restore(); const item = find(id); item.error = { message: error?.message ?? String(error), code: error?.code }; item.status = item.attempts < maxattempts && error?.retryable !== false ? "queued" : "failed"; item.leaseexpiresat = undefined; item.updatedat = clock(); await persist(); return { ...item }; }
42
51
  /** Lists queue items for status and diagnostics. */
43
- async function list(filter) { await restore(); return state.items.filter((item) => !filter || item.status === filter).map((item) => ({ ...item })); }
44
- return { restore, enqueue, claim, complete, fail, list };
52
+ async function list(filter) { await restore(); if (reclaimexpired())
53
+ await persist(); return state.items.filter((item) => !filter || item.status === filter).map((item) => ({ ...item })); }
54
+ return { restore, enqueue, claim, renew, complete, fail, list };
45
55
  function find(id) { const item = state.items.find((entry) => entry.id === id); if (!item)
46
56
  throw new Error(`persistent queue item not found: ${id}`); return item; }
57
+ function reclaimexpired() { let changed = false; for (const item of state.items)
58
+ if (item.status === "running" && item.leaseexpiresat && item.leaseexpiresat <= clock()) {
59
+ item.status = "queued";
60
+ item.leaseexpiresat = undefined;
61
+ item.updatedat = clock();
62
+ changed = true;
63
+ } return changed; }
47
64
  async function persist() { await writeFile(options.path, `${JSON.stringify(state, null, 2)}\n`, "utf8"); }
48
65
  }
49
66
  //# sourceMappingURL=persistent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistent.js","sourceRoot":"","sources":["../../queue/persistent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistent.js","sourceRoot":"","sources":["../../queue/persistent.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ export declare function createassets(options?: {}): Promise<{
14
14
  subjects: {
15
15
  name: string;
16
16
  digest: string;
17
+ bytes: never;
18
+ updatedat: number;
17
19
  }[];
18
20
  sbom: {
19
21
  bomFormat: string;
@@ -64,7 +66,30 @@ export declare function createassets(options?: {}): Promise<{
64
66
  };
65
67
  };
66
68
  };
69
+ retention: {
70
+ policy: {};
71
+ evaluatedat: number;
72
+ decisions: {
73
+ name: string;
74
+ bytes: number;
75
+ updatedat: number;
76
+ action: string;
77
+ reasons: any[];
78
+ }[];
79
+ };
67
80
  }>;
81
+ /** Computes deterministic keep or prune decisions without deleting caller files. */
82
+ export declare function retentionplan(artifacts?: any[], options?: {}): {
83
+ policy: {};
84
+ evaluatedat: number;
85
+ decisions: {
86
+ name: string;
87
+ bytes: number;
88
+ updatedat: number;
89
+ action: string;
90
+ reasons: any[];
91
+ }[];
92
+ };
68
93
  /** Creates a compact CycloneDX component list from the root lockfile dependencies. */
69
94
  export declare function createsbom(packagejson: any, lockjson?: {}): {
70
95
  bomFormat: string;
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;YA0CsH,SAAS;gBAAI,IAAI;gBAAiB,IAAI;gBAA4B,OAAO;;;;;;;;;;;;;;;;;gBAKtJ,MAAM;;;;;YAC0C,eAAe;gBAAI,SAAS;gBAAiD,kBAAkB;oBAAI,OAAO;oBAA4B,OAAO;;gBAAoD,kBAAkB;;YAAQ,UAAU;gBAAI,OAAO;oBAAI,EAAE;;gBAAiD,QAAQ;oBAAI,YAAY;;;;;GAjBtc;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,WAAW,KAAA,EAAE,QAAQ,KAAK;;;;;;QAQgH,SAAS;YAAI,IAAI;YAAiB,IAAI;YAA4B,OAAO;;;;;;;;;;;EAC7O;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,WAAW,KAAA,EAAE,QAAQ,QAAK,EAAE,OAAO,KAAK;IAE9D,KAAK;IAAqC,OAAO;;;YAD4B,MAAM;;;IACpB,aAAa;IAAoC,SAAS;QAAI,eAAe;YAAI,SAAS;YAAiD,kBAAkB;gBAAI,OAAO;gBAA4B,OAAO;;YAAoD,kBAAkB;;QAAQ,UAAU;YAAI,OAAO;gBAAI,EAAE;;YAAiD,QAAQ;gBAAI,YAAY;;;;EACtc"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;YAuEsH,SAAS;gBAAI,IAAI;gBAAiB,IAAI;gBAA4B,OAAO;;;;;;;;;;;;;;;;;gBAKtJ,MAAM;;;;;YAC0C,eAAe;gBAAI,SAAS;gBAAiD,kBAAkB;oBAAI,OAAO;oBAA4B,OAAO;;gBAAoD,kBAAkB;;YAAQ,UAAU;gBAAI,OAAO;oBAAI,EAAE;;gBAAiD,QAAQ;oBAAI,YAAY;;;;;;;;;;;;;;;;GA5Ctc;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,SAAS,QAAK,EAAE,OAAO,KAAK;;;;;;;;;;EAwBzD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,WAAW,KAAA,EAAE,QAAQ,KAAK;;;;;;QAQgH,SAAS;YAAI,IAAI;YAAiB,IAAI;YAA4B,OAAO;;;;;;;;;;;EAC7O;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,WAAW,KAAA,EAAE,QAAQ,QAAK,EAAE,OAAO,KAAK;IAE9D,KAAK;IAAqC,OAAO;;;YAD4B,MAAM;;;IACpB,aAAa;IAAoC,SAAS;QAAI,eAAe;YAAI,SAAS;YAAiD,kBAAkB;gBAAI,OAAO;gBAA4B,OAAO;;YAAoD,kBAAkB;;QAAQ,UAAU;YAAI,OAAO;gBAAI,EAAE;;YAAiD,QAAQ;gBAAI,YAAY;;;;EACtc"}
@@ -3,7 +3,7 @@
3
3
  * The adapter reads caller-selected artifacts and never publishes or handles credentials.
4
4
  */
5
5
  import { createHash } from "node:crypto";
6
- import { mkdir, readFile, writeFile } from "node:fs/promises";
6
+ import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
7
7
  import { basename, dirname, join, relative, resolve, sep } from "node:path";
8
8
  import { fileURLToPath } from "node:url";
9
9
  const modulepath = dirname(fileURLToPath(import.meta.url));
@@ -23,13 +23,15 @@ export async function createassets(options = {}) {
23
23
  const subjects = await Promise.all(artifacts.map(async (artifact) => {
24
24
  const name = relative(artifactroot, artifact).replaceAll("\\", "/");
25
25
  validateArtifactName(basename(name));
26
- return { name, digest: await sha256(artifact) };
26
+ const details = await stat(artifact);
27
+ return { name, digest: await sha256(artifact), bytes: details.size, updatedat: Math.trunc(details.mtimeMs) };
27
28
  }));
28
29
  await mkdir(output, { recursive: true });
29
30
  const checksums = `${subjects.map((subject) => `${subject.digest} ${subject.name}`).join("\n")}${subjects.length ? "\n" : ""}`;
30
31
  const sbom = createsbom(packagejson, lockjson);
31
32
  const provenance = createprovenance(packagejson, subjects, { ...options, version });
32
- const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned") };
33
+ const retention = options.retention ? retentionplan(subjects, options.retention) : undefined;
34
+ const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned"), ...(retention ? { retention: retention.policy, retentionplan: retention.decisions, retentionevaluatedat: retention.evaluatedat } : {}) };
33
35
  const files = {
34
36
  checksums: join(output, `sha256.${surface}.${version}`),
35
37
  manifest: join(output, `manifest.${surface}.${version}.json`),
@@ -40,7 +42,43 @@ export async function createassets(options = {}) {
40
42
  await writeFile(files.manifest, `${JSON.stringify(manifest, null, 2)}\n`);
41
43
  await writeFile(files.sbom, `${JSON.stringify(sbom, null, 2)}\n`);
42
44
  await writeFile(files.provenance, `${JSON.stringify(provenance)}\n`);
43
- return { output, files, subjects, sbom, provenance };
45
+ return { output, files, subjects, sbom, provenance, retention };
46
+ }
47
+ /** Computes deterministic keep or prune decisions without deleting caller files. */
48
+ export function retentionplan(artifacts = [], options = {}) {
49
+ const policy = normalizeretention(options);
50
+ const evaluatedat = Number(options.evaluatedat ?? options.now ?? 0);
51
+ if (!Number.isSafeInteger(evaluatedat) || evaluatedat < 0)
52
+ throw new RangeError("retention evaluatedat must be a non-negative safe integer");
53
+ const entries = [...new Map(artifacts.map((artifact) => {
54
+ const name = String(artifact.name ?? "");
55
+ if (!name)
56
+ throw new TypeError("retention artifact requires name");
57
+ return [name, { name, bytes: normalizebytes(artifact.bytes), updatedat: normalizeupdatedat(artifact.updatedat) }];
58
+ })).values()].sort(comparefreshness);
59
+ const decisions = entries.map((entry) => ({ ...entry, action: "keep", reasons: [] }));
60
+ for (const decision of decisions) {
61
+ if (policy.maxagedays !== undefined && evaluatedat > 0 && decision.updatedat + policy.maxagedays * 86400000 < evaluatedat) {
62
+ decision.action = "prune";
63
+ decision.reasons.push("max-age");
64
+ }
65
+ }
66
+ if (policy.maxcount !== undefined)
67
+ decisions.slice(policy.maxcount).forEach((decision) => { if (decision.action === "keep") {
68
+ decision.action = "prune";
69
+ decision.reasons.push("max-count");
70
+ } });
71
+ if (policy.maxbytes !== undefined) {
72
+ let total = decisions.filter((decision) => decision.action === "keep").reduce((sum, decision) => sum + decision.bytes, 0);
73
+ for (const decision of [...decisions].reverse()) {
74
+ if (total <= policy.maxbytes || decision.action !== "keep")
75
+ continue;
76
+ decision.action = "prune";
77
+ decision.reasons.push("max-bytes");
78
+ total -= decision.bytes;
79
+ }
80
+ }
81
+ return { policy, evaluatedat, decisions: decisions.sort((left, right) => left.name.localeCompare(right.name)) };
44
82
  }
45
83
  /** Creates a compact CycloneDX component list from the root lockfile dependencies. */
46
84
  export function createsbom(packagejson, lockjson = {}) {
@@ -84,11 +122,36 @@ function parsearguments(argumentslist) {
84
122
  options.buildtype = argumentslist[++index];
85
123
  else if (argument === "--builder")
86
124
  options.builder = argumentslist[++index];
125
+ else if (argument === "--max-age-days")
126
+ (options.retention ??= {}).maxagedays = Number(argumentslist[++index]);
127
+ else if (argument === "--max-count")
128
+ (options.retention ??= {}).maxcount = Number(argumentslist[++index]);
129
+ else if (argument === "--max-bytes")
130
+ (options.retention ??= {}).maxbytes = Number(argumentslist[++index]);
131
+ else if (argument === "--evaluated-at")
132
+ (options.retention ??= {}).evaluatedat = Number(argumentslist[++index]);
87
133
  else
88
134
  throw new TypeError(`unsupported release asset argument: ${argument}`);
89
135
  }
90
136
  return options;
91
137
  }
138
+ function normalizeretention(options) {
139
+ const result = {};
140
+ if (options.maxagedays !== undefined)
141
+ result.maxagedays = normalizepolicyinteger(options.maxagedays, "maxagedays");
142
+ if (options.maxcount !== undefined)
143
+ result.maxcount = normalizepolicyinteger(options.maxcount, "maxcount");
144
+ if (options.maxbytes !== undefined)
145
+ result.maxbytes = normalizepolicyinteger(options.maxbytes, "maxbytes");
146
+ return result;
147
+ }
148
+ function normalizepolicyinteger(value, name) { const normalized = Number(value); if (!Number.isSafeInteger(normalized) || normalized <= 0)
149
+ throw new RangeError(`${name} must be a positive safe integer`); return normalized; }
150
+ function normalizebytes(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
151
+ throw new RangeError("retention artifact bytes must be a non-negative safe integer"); return normalized; }
152
+ function normalizeupdatedat(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
153
+ throw new RangeError("retention artifact updatedat must be a non-negative safe integer"); return normalized; }
154
+ function comparefreshness(left, right) { return right.updatedat - left.updatedat || right.bytes - left.bytes || left.name.localeCompare(right.name); }
92
155
  if (process.argv[1] === fileURLToPath(import.meta.url))
93
156
  createassets(parsearguments(process.argv.slice(2))).then(({ output }) => { console.log(`release assets: ${output}`); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
94
157
  //# sourceMappingURL=assets.js.map