@adea-ai/plugins 4.0.1 → 4.0.6

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 (142) hide show
  1. package/dist/agent-plugins-catalog.d.ts +2 -4
  2. package/dist/agent-plugins-catalog.js +42 -50
  3. package/dist/agent-plugins-catalog.js.map +1 -1
  4. package/dist/agent-plugins-schema.d.ts +8 -0
  5. package/dist/agent-plugins-schema.js +10 -1
  6. package/dist/agent-plugins-schema.js.map +1 -1
  7. package/dist/artifacts.d.ts +57 -0
  8. package/dist/artifacts.js +159 -0
  9. package/dist/artifacts.js.map +1 -0
  10. package/dist/build.d.ts +20 -0
  11. package/dist/build.js +103 -0
  12. package/dist/build.js.map +1 -0
  13. package/dist/capabilities.d.ts +7 -0
  14. package/dist/capabilities.js +116 -0
  15. package/dist/capabilities.js.map +1 -0
  16. package/dist/catalog-store.d.ts +0 -5
  17. package/dist/catalog-store.js +1 -25
  18. package/dist/catalog-store.js.map +1 -1
  19. package/dist/concurrency.d.ts +1 -0
  20. package/dist/concurrency.js +15 -0
  21. package/dist/concurrency.js.map +1 -0
  22. package/dist/consumer-index.d.ts +6 -28
  23. package/dist/consumer-index.js +7 -8
  24. package/dist/consumer-index.js.map +1 -1
  25. package/dist/digest.d.ts +13 -0
  26. package/dist/digest.js +47 -0
  27. package/dist/digest.js.map +1 -0
  28. package/dist/fs-atomic.d.ts +7 -0
  29. package/dist/fs-atomic.js +30 -0
  30. package/dist/fs-atomic.js.map +1 -0
  31. package/dist/harness.js +2 -1
  32. package/dist/harness.js.map +1 -1
  33. package/dist/icon-mirror.d.ts +3 -2
  34. package/dist/icon-mirror.js +51 -63
  35. package/dist/icon-mirror.js.map +1 -1
  36. package/dist/icons.d.ts +2 -2
  37. package/dist/icons.js +4 -12
  38. package/dist/icons.js.map +1 -1
  39. package/dist/index.d.ts +16 -315
  40. package/dist/index.js +12 -1905
  41. package/dist/index.js.map +1 -1
  42. package/dist/integrity-manifest.d.ts +43 -13
  43. package/dist/integrity-manifest.js +28 -17
  44. package/dist/integrity-manifest.js.map +1 -1
  45. package/dist/json-values.d.ts +3 -0
  46. package/dist/json-values.js +10 -0
  47. package/dist/json-values.js.map +1 -0
  48. package/dist/plugin-release.d.ts +38 -0
  49. package/dist/plugin-release.js +321 -0
  50. package/dist/plugin-release.js.map +1 -0
  51. package/dist/plugin-skips.d.ts +19 -0
  52. package/dist/plugin-skips.js +65 -0
  53. package/dist/plugin-skips.js.map +1 -0
  54. package/dist/policy.d.ts +13 -0
  55. package/dist/policy.js +26 -0
  56. package/dist/policy.js.map +1 -0
  57. package/dist/portable-catalog.d.ts +4 -4
  58. package/dist/portable-catalog.js +14 -126
  59. package/dist/portable-catalog.js.map +1 -1
  60. package/dist/portable-verify.d.ts +2 -0
  61. package/dist/portable-verify.js +68 -0
  62. package/dist/portable-verify.js.map +1 -0
  63. package/dist/publication.d.ts +6 -3
  64. package/dist/publication.js +25 -12
  65. package/dist/publication.js.map +1 -1
  66. package/dist/published-output.d.ts +17 -0
  67. package/dist/published-output.js +49 -0
  68. package/dist/published-output.js.map +1 -0
  69. package/dist/site-icons.d.ts +2 -3
  70. package/dist/site-icons.js +4 -3
  71. package/dist/site-icons.js.map +1 -1
  72. package/dist/snapshots.d.ts +39 -0
  73. package/dist/snapshots.js +238 -0
  74. package/dist/snapshots.js.map +1 -0
  75. package/dist/source-resolution.d.ts +28 -0
  76. package/dist/source-resolution.js +158 -0
  77. package/dist/source-resolution.js.map +1 -0
  78. package/dist/sources.d.ts +5 -1
  79. package/dist/sources.js +21 -27
  80. package/dist/sources.js.map +1 -1
  81. package/dist/synchronize.d.ts +44 -0
  82. package/dist/synchronize.js +118 -0
  83. package/dist/synchronize.js.map +1 -0
  84. package/dist/taxonomy.d.ts +23 -0
  85. package/dist/taxonomy.js +62 -0
  86. package/dist/taxonomy.js.map +1 -0
  87. package/dist/upstream.d.ts +42 -0
  88. package/dist/upstream.js +179 -0
  89. package/dist/upstream.js.map +1 -0
  90. package/dist/verify-artifacts.d.ts +36 -0
  91. package/dist/verify-artifacts.js +286 -0
  92. package/dist/verify-artifacts.js.map +1 -0
  93. package/native/build-provenance.txt +5 -5
  94. package/native/staged-reader-win32-arm64.node +0 -0
  95. package/native/staged-reader-win32-x64.node +0 -0
  96. package/package.json +2 -4
  97. package/src/agent-plugins-catalog.test.ts +2 -2
  98. package/src/agent-plugins-catalog.ts +46 -49
  99. package/src/agent-plugins-schema.ts +11 -1
  100. package/src/artifacts.ts +234 -0
  101. package/src/build.ts +131 -0
  102. package/src/capabilities.ts +153 -0
  103. package/src/catalog-store.ts +1 -28
  104. package/src/concurrency.ts +19 -0
  105. package/src/consumer-index.test.ts +27 -21
  106. package/src/consumer-index.ts +12 -35
  107. package/src/digest.ts +55 -0
  108. package/src/fs-atomic.ts +32 -0
  109. package/src/harness.test.ts +4 -32
  110. package/src/harness.ts +2 -1
  111. package/src/icon-mirror.ts +57 -64
  112. package/src/icons.test.ts +0 -4
  113. package/src/icons.ts +4 -4
  114. package/src/index.test.ts +52 -48
  115. package/src/index.ts +50 -2583
  116. package/src/integrity-manifest.ts +41 -21
  117. package/src/json-values.ts +11 -0
  118. package/src/plugin-release.ts +457 -0
  119. package/src/plugin-skips.ts +110 -0
  120. package/src/policy.ts +39 -0
  121. package/src/portable-catalog.test.ts +0 -5
  122. package/src/portable-catalog.ts +16 -143
  123. package/src/portable-verify.ts +71 -0
  124. package/src/publication.test.ts +29 -1
  125. package/src/publication.ts +32 -13
  126. package/src/published-output.ts +60 -0
  127. package/src/site-icons.test.ts +0 -1
  128. package/src/site-icons.ts +4 -4
  129. package/src/snapshots.ts +287 -0
  130. package/src/source-digest.test.ts +3 -7
  131. package/src/source-resolution.ts +233 -0
  132. package/src/sources-json.test.ts +0 -1
  133. package/src/sources.ts +27 -33
  134. package/src/synchronize.ts +213 -0
  135. package/src/taxonomy.ts +87 -0
  136. package/src/upstream.ts +194 -0
  137. package/src/verify-artifacts.ts +365 -0
  138. package/src/write-artifacts.test.ts +0 -1
  139. package/dist/source-digest.d.ts +0 -2
  140. package/dist/source-digest.js +0 -12
  141. package/dist/source-digest.js.map +0 -1
  142. package/src/source-digest.ts +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"portable-catalog.js","sourceRoot":"","sources":["../src/portable-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAA;AACrF,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,eAAe,EACf,MAAM,GAIP,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAA;AAClD,SAAS,eAAe,CAAC,OAA4B;IACnD,OAAO,CACL,CAAC,CAAC,OAAO;QACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAC/B,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;YAC3D,OAAO,CACL,OAAO,CAAC,iBAAiB,KAAK,UAAU;gBACxC,uEAAuE;gBACvE,uEAAuE;gBACvE,OAAO,CAAC,eAAe,CAAC,eAAe,KAAK,wBAAwB;gBACpE,KAAK,KAAK,IAAI;gBACd,OAAO,KAAK,KAAK,QAAQ;gBACzB,mBAAmB,IAAI,KAAK;gBAC5B,KAAK,CAAC,iBAAiB,KAAK,kBAAkB,CAC/C,CAAA;QACH,CAAC,CAAC,CACH,CACF,CAAA;AACH,CAAC;AACD,SAAS,aAAa,CACpB,GAA2C;IAE3C,mGAAmG;IACnG,OAAO,MAAM,CAAC,WAAW,CACvB,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,OAAO;QACP;YACE,MAAM,EACJ,GAAG,CAAC,MAAM,KAAK,aAAa;gBAC1B,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;oBACxB,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,SAAS;YACjB,OAAO,EAAE;gBACP,GAAG,CAAC,MAAM,KAAK,aAAa;oBAC1B,CAAC,CAAC,0CAA0C;oBAC5C,CAAC,CAAC,uIAAuI;aAC5I;YACD,uBAAuB,EAAE;gBACvB,GAAG,IAAI,GAAG,CAAC;oBACT,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvE,CAAC;aACH;SACF;KACF,CAAC,CAC+B,CAAA;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAkB;IAC1D,IAAI,OAAO,CAAC,eAAe;QAAE,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3E,MAAM,gBAAgB,GAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAA;QAChF,IACE,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;YACxC,OAAO,CAAC,sBAAsB,KAAK,QAAQ,CAAC,sBAAsB;YAClE,OAAO,CAAC,qBAAqB,KAAK,QAAQ,CAAC,qBAAqB;YAChE,OAAO,CAAC,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB;YACxD,OAAO,CAAC,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB;YAC1D,OAAO,CAAC,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB;YAExD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,MAAM,GAAG,GAAG,mBAAmB,CAAC;YAC9B,GAAG,QAAQ;YACX,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,sBAAsB;SAC9C,CAAC,CAAA;QACF,OAAO;YACL,GAAG,OAAO;YACV,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE;SAC7E,CAAA;IACH,CAAC,CAAA;IACD,8EAA8E;IAC9E,gFAAgF;IAChF,MAAM,KAAK,GAAG;QACZ,GAAG,OAAO;QACV,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QACtE,gBAAgB;KACjB,CAAA;IACD,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;IACrC,IACE,CAAC,MAAM,CAAC,OAAO;QACf,CAAC,KAAK,CAAC,YAAY;QACnB,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;QACvC,KAAK,CAAC,YAAY,EAClB,CAAC;QACD,oFAAoF;QACpF,4EAA4E;QAC5E,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,MAAM,CAAA;IACxE,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAA;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC1F,MAAM,GAAG,GAAG,QAAQ,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,MAAM;YACT,iBAAiB,EAAE,QAAQ;YAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACzE,uEAAuE;IACvE,qEAAqE;IACrE,0BAA0B;IAC1B,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzE,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;QAClC,GAAG,OAAO;QACV,SAAS,EAAE,WAAW,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;KACjD,CAAC,CAAA;IACF,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;QACtD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,qEAAqE;QACrE,yEAAyE;QACzE,6EAA6E;QAC7E,4CAA4C;QAC5C,GAAG,CAAC,OAAO,CAAC,wBAAwB;YAClC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,wBAAwB;YAClC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,0BAA0B;YACpC,CAAC,CAAC,EAAE,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC;QACP,mBAAmB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,SAAS;KAC5D,CAAC,CAAA;IACF,eAAe,CAAC,SAAS,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;SAC5B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9F,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAA;IAClD,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO;QACL,GAAG,MAAM;QACT,OAAO;QACP,SAAS;QACT,YAAY,EAAE;YACZ,GAAG,MAAM,CAAC,YAAY;YACtB,cAAc,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC7F;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,KAAc;IAC/C,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAA;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAA0C,CAAA;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAClE,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,KAAK,YAAY,KAAK;QAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAClD,CAAC,CAAC,wCAAwC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB,EAAE,eAAe,GAAG,KAAK;IAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3D,IAAI,SAAS,KAAK,WAAW,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAC5F,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QACtF,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO;QAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC/C,IAAI,eAAe,IAAI,OAAO,CAAC,iBAAiB,KAAK,UAAU;gBAC7D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;YAChE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,eAAe,IAAI,OAAO,CAAC,iBAAiB,KAAK,UAAU;oBAC7D,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACjE,SAAQ;YACV,CAAC;YACD,IAAI,GAA0C,CAAA;YAC9C,IAAI,CAAC;gBACH,GAAG,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kEAAkE;gBAClE,qEAAqE;gBACrE,sEAAsE;gBACtE,kEAAkE;gBAClE,iDAAiD;gBACjD,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,QAAQ,KAAK,yBAAyB,CAAC,KAAK,CAAC,GAAG,EACtF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;YACH,CAAC;YACD,IACE,OAAO,CAAC,iBAAiB,KAAK,UAAU;gBACxC,GAAG,CAAC,YAAY,KAAK,OAAO,CAAC,sBAAsB;gBAEnD,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YACpE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;gBAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC7D,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACxE,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"portable-catalog.js","sourceRoot":"","sources":["../src/portable-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Catalog } from './schema.js';
2
+ export declare function verifyPortableCatalog(catalog: Catalog, requirePortable?: boolean): void;
@@ -0,0 +1,68 @@
1
+ import { verifyAgentPackage } from './agent-plugins-catalog.js';
2
+ import { PACKAGE_METADATA_KEY } from './agent-plugins-schema.js';
3
+ import { contentId } from './digest.js';
4
+ import { CatalogSchema } from './schema.js';
5
+ /**
6
+ * A single-line summary of why a release's package descriptor was refused.
7
+ *
8
+ * The schema's own failure is a structured issue list; the catalog's refusal
9
+ * contract is one typed line. The first issue is kept as the detail, because
10
+ * it names the field that was wrong.
11
+ */
12
+ function describeProvenanceFailure(error) {
13
+ const issues = error.issues;
14
+ if (Array.isArray(issues) && issues.length > 0) {
15
+ const first = issues[0];
16
+ const path = Array.isArray(first.path) ? first.path.join('.') : '';
17
+ const message = typeof first.message === 'string' ? first.message : '';
18
+ return [path, message].filter(Boolean).join(': ').replace(/\s+/g, ' ').slice(0, 200);
19
+ }
20
+ return error instanceof Error
21
+ ? error.message.replace(/\s+/g, ' ').slice(0, 200)
22
+ : 'the descriptor is not a package recipe';
23
+ }
24
+ export function verifyPortableCatalog(catalog, requirePortable = false) {
25
+ const { catalogId, ...body } = CatalogSchema.parse(catalog);
26
+ if (catalogId !== contentId('catalog', body))
27
+ throw new Error('CATALOG_ID_MISMATCH');
28
+ const ids = new Set();
29
+ for (const plugin of catalog.plugins) {
30
+ if (ids.has(plugin.pluginId))
31
+ throw new Error('DUPLICATE_PLUGIN_ID');
32
+ ids.add(plugin.pluginId);
33
+ const releases = new Set(plugin.availableReleases.map((release) => release.releaseId));
34
+ if (releases.size !== plugin.availableReleases.length || !releases.has(plugin.currentReleaseId))
35
+ throw new Error('RELEASE_SELECTION_INVALID');
36
+ }
37
+ for (const plugin of catalog.plugins)
38
+ for (const release of plugin.availableReleases) {
39
+ if (requirePortable && release.contentResolution !== 'complete')
40
+ throw new Error('COMPLETE_SOURCE_REQUIRED');
41
+ const descriptor = release.releaseMetadata[PACKAGE_METADATA_KEY];
42
+ if (descriptor === undefined) {
43
+ if (requirePortable && release.contentResolution === 'complete')
44
+ throw new Error(`PORTABLE_RESYNC_REQUIRED: ${plugin.pluginId}`);
45
+ continue;
46
+ }
47
+ let pkg;
48
+ try {
49
+ pkg = verifyAgentPackage(descriptor);
50
+ }
51
+ catch (error) {
52
+ // A consumer imports a catalog it did not compile, so a malformed
53
+ // provenance descriptor is an IMPORT failure, and it must be refused
54
+ // the way every other failure here is refused: one typed, single-line
55
+ // reason that names the plugin. The schema's own multi-line issue
56
+ // dump is not a refusal a consumer can match on.
57
+ throw new Error(`PACKAGE_PROVENANCE_INVALID: ${plugin.pluginId} (${describeProvenanceFailure(error)})`, { cause: error });
58
+ }
59
+ if (release.contentResolution !== 'complete' ||
60
+ pkg.sourceDigest !== release.canonicalContentDigest)
61
+ throw new Error(`PACKAGE_PROVENANCE_MISMATCH: ${plugin.pluginId}`);
62
+ const sourcePaths = new Set(release.fileIndex);
63
+ for (const file of pkg.files)
64
+ if (file.action === 'copy' && !sourcePaths.has(file.sourcePath))
65
+ throw new Error(`PACKAGE_SOURCE_FILE_MISSING: ${plugin.pluginId}`);
66
+ }
67
+ }
68
+ //# sourceMappingURL=portable-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-verify.js","sourceRoot":"","sources":["../src/portable-verify.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,10 @@
10
10
  *
11
11
  * The branch gives each catalog an immutable path — `catalogs/<catalogId>/…`,
12
12
  * where `catalogId` is the canonical digest of the catalog itself. The
13
- * publisher must reject replacement of existing snapshot bytes, and
14
- * `raw.githubusercontent.com` serves the branch with permissive
15
- * CORS so a browser can fetch it directly.
13
+ * publisher must reject replacement of existing snapshot bytes. GitLab raw URLs
14
+ * serve the branch to servers and image tags; unlike
15
+ * `raw.githubusercontent.com` they send no CORS header, so a browser `fetch`
16
+ * needs a same-origin proxy.
16
17
  */
17
18
  export declare const publishedArtifactNames: readonly ['catalog.v1.json', 'catalog-summary.v1.json', 'categories.v1.json', 'compatibility.v1.json', 'integrity.json', 'sources.lock.json'];
18
19
  export type PublishedArtifactName = (typeof publishedArtifactNames)[number];
@@ -84,6 +85,8 @@ export declare function createPublicationPlan(input: {
84
85
  readonly repositoryUrl: string;
85
86
  readonly catalogId: string;
86
87
  }): PublicationPlan;
88
+ /** A flat file name that is safe as both a local file and a URL path segment. */
89
+ export declare function isPublishedName(name: string): boolean;
87
90
  /**
88
91
  * Immutable URL for one artifact of one catalog.
89
92
  *
@@ -1,3 +1,4 @@
1
+ import { CatalogSchema } from './schema.js';
1
2
  /**
2
3
  * Where a published catalog lives, and the URLs that address it.
3
4
  *
@@ -10,9 +11,10 @@
10
11
  *
11
12
  * The branch gives each catalog an immutable path — `catalogs/<catalogId>/…`,
12
13
  * where `catalogId` is the canonical digest of the catalog itself. The
13
- * publisher must reject replacement of existing snapshot bytes, and
14
- * `raw.githubusercontent.com` serves the branch with permissive
15
- * CORS so a browser can fetch it directly.
14
+ * publisher must reject replacement of existing snapshot bytes. GitLab raw URLs
15
+ * serve the branch to servers and image tags; unlike
16
+ * `raw.githubusercontent.com` they send no CORS header, so a browser `fetch`
17
+ * needs a same-origin proxy.
16
18
  */
17
19
  export const publishedArtifactNames = [
18
20
  'catalog.v1.json',
@@ -57,17 +59,19 @@ export function auditStagedAssets(input) {
57
59
  * the snapshot path against changes to companion artifacts under the same ID.
58
60
  */
59
61
  export function catalogIdSuffix(catalogId) {
60
- const match = /^catalog:([a-f0-9]{64})$/.exec(catalogId);
61
- if (!match)
62
+ if (!CatalogSchema.shape.catalogId.safeParse(catalogId).success)
62
63
  throw new Error(`CATALOG_ID_INVALID: ${catalogId}`);
63
- return match[1];
64
+ return catalogId.slice('catalog:'.length);
64
65
  }
65
66
  /**
66
67
  * Root of the branch that carries mirrored brand marks and the mutable
67
68
  * catalog pointer.
68
69
  */
69
70
  export function catalogAssetsBaseUrl(repositoryUrl) {
70
- return `https://raw.githubusercontent.com/${repositorySlug(repositoryUrl)}/${catalogAssetsBranch}`;
71
+ const { host, path } = repositoryLocation(repositoryUrl);
72
+ return host === 'gitlab.com'
73
+ ? `https://gitlab.com/${path}/-/raw/${catalogAssetsBranch}`
74
+ : `https://raw.githubusercontent.com/${path}/${catalogAssetsBranch}`;
71
75
  }
72
76
  /** Root of one catalog's immutable artifacts, content-addressed by identity. */
73
77
  export function catalogSnapshotBaseUrl(repositoryUrl, catalogId) {
@@ -87,6 +91,10 @@ export function createPublicationPlan(input) {
87
91
  artifactNames: publishedArtifactNames,
88
92
  };
89
93
  }
94
+ /** A flat file name that is safe as both a local file and a URL path segment. */
95
+ export function isPublishedName(name) {
96
+ return /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(name);
97
+ }
90
98
  /**
91
99
  * Immutable URL for one artifact of one catalog.
92
100
  *
@@ -96,11 +104,11 @@ export function createPublicationPlan(input) {
96
104
  * and substitute it for `catalogAssetsBaseUrl`.
97
105
  */
98
106
  export function immutableAssetUrl(repositoryUrl, catalogId, assetName) {
99
- if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(assetName))
107
+ if (!isPublishedName(assetName))
100
108
  throw new Error(`ASSET_NAME_INVALID: ${assetName}`);
101
109
  return `${catalogSnapshotBaseUrl(repositoryUrl, catalogId)}/${assetName}`;
102
110
  }
103
- function repositorySlug(repositoryUrl) {
111
+ function repositoryLocation(repositoryUrl) {
104
112
  let parsed;
105
113
  try {
106
114
  parsed = new URL(repositoryUrl);
@@ -108,11 +116,16 @@ function repositorySlug(repositoryUrl) {
108
116
  catch {
109
117
  throw new Error(`REPOSITORY_URL_INVALID: ${repositoryUrl}`);
110
118
  }
111
- if (parsed.protocol !== 'https:' || parsed.hostname !== 'github.com')
119
+ const host = parsed.hostname;
120
+ if (parsed.protocol !== 'https:' || (host !== 'github.com' && host !== 'gitlab.com'))
112
121
  throw new Error(`REPOSITORY_URL_UNSUPPORTED: ${repositoryUrl}`);
113
122
  const path = parsed.pathname.replace(/^\/+|\/+$/g, '').replace(/\.git$/, '');
114
- if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(path))
123
+ // GitLab projects can sit in nested groups; GitHub is always owner/repo.
124
+ const shape = host === 'gitlab.com'
125
+ ? /^[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)+$/
126
+ : /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
127
+ if (!shape.test(path) || path.split('/').some((part) => part === '.' || part === '..'))
115
128
  throw new Error(`REPOSITORY_URL_INVALID: ${repositoryUrl}`);
116
- return path;
129
+ return { host, path };
117
130
  }
118
131
  //# sourceMappingURL=publication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publication.js","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publication.js","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { GeneratedArtifacts } from './artifacts.js';
2
+ import { type PublishedAsset } from './integrity-manifest.js';
3
+ import { type Catalog } from './schema.js';
4
+ /**
5
+ * Reads a published artifact set. `integrity.json` is the file list, so the
6
+ * consumer shards can grow with the category configuration.
7
+ */
8
+ export declare function readArtifacts(directory: string): Promise<GeneratedArtifacts>;
9
+ /** Verifies an artifact set and returns its catalog, checked as a portable catalog. */
10
+ export declare function verifiedCatalog(artifacts: GeneratedArtifacts, requirePortable?: boolean): Catalog;
11
+ /** The mirrored marks `integrity.json` declares, or undefined for a snapshot without any. */
12
+ export declare function declaredAssets(artifacts: GeneratedArtifacts): readonly PublishedAsset[] | undefined;
13
+ /** Compares staged mark bytes in `directory` with the digests they were declared with. */
14
+ export declare function checkStagedAssets(directory: string, declared: readonly PublishedAsset[]): Promise<{
15
+ readonly missing: readonly string[];
16
+ readonly mismatched: readonly string[];
17
+ }>;
@@ -0,0 +1,49 @@
1
+ import { byteDigest } from './digest.js';
2
+ import { parseIntegrityManifest } from './integrity-manifest.js';
3
+ import { verifyPortableCatalog } from './portable-verify.js';
4
+ import { parseCatalog } from './schema.js';
5
+ import { readStagedFile } from './staged-file.js';
6
+ import { verifyArtifacts } from './verify-artifacts.js';
7
+ /**
8
+ * Reads a published artifact set. `integrity.json` is the file list, so the
9
+ * consumer shards can grow with the category configuration.
10
+ */
11
+ export async function readArtifacts(directory) {
12
+ const integrity = (await readStagedFile(directory, 'integrity.json')).toString('utf8');
13
+ const { files } = parseIntegrityManifest(JSON.parse(integrity));
14
+ const names = Object.keys(files).toSorted();
15
+ const values = await Promise.all(names.map(async (name) => [name, (await readStagedFile(directory, name)).toString('utf8')]));
16
+ return Object.fromEntries([
17
+ ...values,
18
+ ['integrity.json', integrity],
19
+ ]);
20
+ }
21
+ /** Verifies an artifact set and returns its catalog, checked as a portable catalog. */
22
+ export function verifiedCatalog(artifacts, requirePortable = false) {
23
+ verifyArtifacts(artifacts);
24
+ const catalog = parseCatalog(JSON.parse(artifacts['catalog.v1.json']));
25
+ verifyPortableCatalog(catalog, requirePortable);
26
+ return catalog;
27
+ }
28
+ /** The mirrored marks `integrity.json` declares, or undefined for a snapshot without any. */
29
+ export function declaredAssets(artifacts) {
30
+ return parseIntegrityManifest(JSON.parse(artifacts['integrity.json'])).assets;
31
+ }
32
+ /** Compares staged mark bytes in `directory` with the digests they were declared with. */
33
+ export async function checkStagedAssets(directory, declared) {
34
+ const missing = [];
35
+ const mismatched = [];
36
+ for (const asset of declared) {
37
+ const bytes = await readStagedFile(directory, asset.name).catch((error) => {
38
+ if (error.code === 'ENOENT')
39
+ return undefined;
40
+ throw error;
41
+ });
42
+ if (!bytes)
43
+ missing.push(asset.name);
44
+ else if (byteDigest(bytes) !== asset.digest || bytes.byteLength !== asset.bytes)
45
+ mismatched.push(asset.name);
46
+ }
47
+ return { missing, mismatched };
48
+ }
49
+ //# sourceMappingURL=published-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"published-output.js","sourceRoot":"","sources":["../src/published-output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAuB,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAgB,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,SAAS,GAAG,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CACP,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU,CAC1F,CACF,CAAA;IACD,OAAO,MAAM,CAAC,WAAW,CAAC;QACxB,GAAG,MAAM;QACT,CAAC,gBAAgB,EAAE,SAAS,CAAC;KAC9B,CAAkC,CAAA;AACrC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAAC,SAA6B,EAAE,eAAe,GAAG,KAAK;IACpF,eAAe,CAAC,SAAS,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;IACtE,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAC/C,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAC5B,SAA6B;IAE7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAC/E,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,QAAmC;IAEnC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACjF,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YACxE,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;aAC/B,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,KAAK;YAC7E,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAChC,CAAC"}
@@ -4,8 +4,8 @@ import { type IconContentType } from './icons.js';
4
4
  *
5
5
  * Many plugins are a thin wrapper over a vendor's API: the content carries no
6
6
  * logo, and the declared homepage is the only pointer to the vendor. Fetching
7
- * that site's icon once at publish time, verifying it and mirroring it as a
8
- * release asset replaces a per-render favicon lookup in the client.
7
+ * that site's icon once at publish time, verifying it and mirroring it beside
8
+ * the catalog replaces a per-render favicon lookup in the client.
9
9
  */
10
10
  export declare const SITE_ICON_MAX_HTML_BYTES: number;
11
11
  /**
@@ -43,7 +43,6 @@ export declare function discoverSiteIcons(html: string, baseUrl: string): readon
43
43
  export interface SiteIconFetcher {
44
44
  readonly fetchText: (url: string) => Promise<string>;
45
45
  readonly fetchBytes: (url: string) => Promise<Uint8Array>;
46
- readonly digest: (bytes: Uint8Array) => string;
47
46
  }
48
47
  /**
49
48
  * Resolves the best usable icon for a vendor homepage.
@@ -1,12 +1,13 @@
1
1
  import { parseFragment } from 'parse5';
2
+ import { byteDigest } from './digest.js';
2
3
  import { inspectIconBytes, MAX_ICON_BYTES } from './icons.js';
3
4
  /**
4
5
  * Site icon discovery, for products that ship no brand mark of their own.
5
6
  *
6
7
  * Many plugins are a thin wrapper over a vendor's API: the content carries no
7
8
  * logo, and the declared homepage is the only pointer to the vendor. Fetching
8
- * that site's icon once at publish time, verifying it and mirroring it as a
9
- * release asset replaces a per-render favicon lookup in the client.
9
+ * that site's icon once at publish time, verifying it and mirroring it beside
10
+ * the catalog replaces a per-render favicon lookup in the client.
10
11
  */
11
12
  export const SITE_ICON_MAX_HTML_BYTES = 4 * 1024 * 1024;
12
13
  /**
@@ -181,7 +182,7 @@ export async function resolveSiteIcon(homepage, fetcher) {
181
182
  homepage,
182
183
  bytes,
183
184
  contentType: inspected.contentType,
184
- digest: fetcher.digest(bytes),
185
+ digest: byteDigest(bytes),
185
186
  };
186
187
  }
187
188
  return { failed: 'NO_USABLE_ICON' };
@@ -1 +1 @@
1
- {"version":3,"file":"site-icons.js","sourceRoot":"","sources":["../src/site-icons.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-icons.js","sourceRoot":"","sources":["../src/site-icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { CatalogPolicy } from './policy.js';
2
+ import { type SourceConfig } from './sources.js';
3
+ export interface Snapshot {
4
+ readonly files: ReadonlyMap<string, Uint8Array>;
5
+ readonly symlinks: readonly string[];
6
+ }
7
+ export interface SnapshotLoader {
8
+ load(repositoryUrl: string, commitSha: string, pluginSubdirectory: string): Promise<Snapshot>;
9
+ }
10
+ /**
11
+ * Read one GitHub repository tarball into path -> bytes.
12
+ *
13
+ * GitHub wraps every entry in a single top-level `<repo>-<sha>/` directory,
14
+ * which is stripped so the keys match the tree API's repository-relative
15
+ * paths. Only regular files are taken: directories, symlinks, hardlinks and
16
+ * the `pax_global_header` record are skipped, so a link can never be
17
+ * materialized as content. Every remaining path goes through
18
+ * `safeRelativePath`, so an archive that tries to escape the repository is
19
+ * rejected rather than partially trusted. This is a whole-repository archive
20
+ * shared across plugins, so an oversized unrelated file is drained and
21
+ * counted against the archive budget but not retained. The selected plugin's
22
+ * files are checked against the tree before the archive is fetched and again
23
+ * when its snapshot is validated.
24
+ */
25
+ export declare function readArchiveFiles(archive: Uint8Array, policy: CatalogPolicy): Promise<Map<string, Uint8Array>>;
26
+ export declare class NetworkSnapshotLoader implements SnapshotLoader {
27
+ #private;
28
+ constructor(policy: CatalogPolicy);
29
+ load(repositoryUrl: string, commitSha: string, pluginSubdirectory: string): Promise<Snapshot>;
30
+ }
31
+ export declare class FixtureSnapshotLoader implements SnapshotLoader {
32
+ #private;
33
+ constructor(root: string, sources: readonly SourceConfig[]);
34
+ load(repositoryUrl: string, _commitSha: string, pluginSubdirectory: string): Promise<Snapshot>;
35
+ }
36
+ export declare class DirectorySnapshotLoader implements SnapshotLoader {
37
+ load(_repositoryUrl: string, _commitSha: string, pluginSubdirectory: string): Promise<Snapshot>;
38
+ }
39
+ export declare function snapshotFromDirectory(root: string, pluginSubdirectory: string): Promise<Snapshot>;