@lesliechan721/aw 0.1.0-beta.6 → 0.1.0-beta.60

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 (621) hide show
  1. package/dist/authoring/assets/aw-config.mjs +100 -501
  2. package/dist/authoring/assets/aw-config.mjs.map +1 -1
  3. package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
  4. package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
  5. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
  6. package/dist/authoring/scripts/add-skill.mjs +4 -4
  7. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  8. package/dist/authoring/scripts/init-plugin.mjs +67 -97
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  10. package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
  11. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
  12. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
  13. package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
  14. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  15. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -92
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -124
  17. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  18. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  19. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  20. package/dist/authoring/scripts/remove-plugin.mjs +3 -2
  21. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
  22. package/dist/authoring/scripts/validate-plugin.mjs +552 -1142
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/native-runtime/reader-runtime.mjs +34 -0
  25. package/dist/native-runtime/reader.d.mts +6 -0
  26. package/dist/native-runtime/reader.mjs +11 -0
  27. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  28. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  29. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  30. package/dist/scripts/bundle-plugins.d.ts +1 -0
  31. package/dist/scripts/bundle-plugins.js +19 -8
  32. package/dist/scripts/bundle-plugins.js.map +1 -1
  33. package/dist/scripts/plugin-staging.d.ts +7 -9
  34. package/dist/scripts/plugin-staging.js +18 -29
  35. package/dist/scripts/plugin-staging.js.map +1 -1
  36. package/dist/scripts/plugin-test-reporter.d.mts +2 -0
  37. package/dist/scripts/plugin-test-reporter.mjs +21 -0
  38. package/dist/scripts/plugin-test-reporter.mjs.map +1 -0
  39. package/dist/scripts/test-plugin-scripts.d.ts +5 -0
  40. package/dist/scripts/test-plugin-scripts.js +208 -89
  41. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  42. package/dist/scripts/test-workers.d.mts +24 -0
  43. package/dist/scripts/test-workers.mjs +59 -0
  44. package/dist/scripts/test-workers.mjs.map +1 -0
  45. package/dist/src/adapters/helpers.d.ts +7 -0
  46. package/dist/src/adapters/helpers.js +2 -2
  47. package/dist/src/adapters/helpers.js.map +1 -1
  48. package/dist/src/authoring/workspace-commands.d.ts +19 -1
  49. package/dist/src/authoring/workspace-commands.js +24 -5
  50. package/dist/src/authoring/workspace-commands.js.map +1 -1
  51. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  52. package/dist/src/commands/aw-capabilities.js +266 -0
  53. package/dist/src/commands/aw-capabilities.js.map +1 -0
  54. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  55. package/dist/src/commands/catalog-dev-source.js +655 -0
  56. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  57. package/dist/src/commands/catalog-generation.d.ts +21 -0
  58. package/dist/src/commands/catalog-generation.js +9 -0
  59. package/dist/src/commands/catalog-generation.js.map +1 -0
  60. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  61. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  62. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  63. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  64. package/dist/src/commands/catalog-publication-journal.js +292 -0
  65. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  66. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  67. package/dist/src/commands/catalog-publication-target.js +95 -0
  68. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  69. package/dist/src/commands/catalog-publish.d.ts +73 -15
  70. package/dist/src/commands/catalog-publish.js +701 -212
  71. package/dist/src/commands/catalog-publish.js.map +1 -1
  72. package/dist/src/commands/catalog-source.d.ts +60 -22
  73. package/dist/src/commands/catalog-source.js +311 -91
  74. package/dist/src/commands/catalog-source.js.map +1 -1
  75. package/dist/src/commands/catalog-status.d.ts +18 -22
  76. package/dist/src/commands/catalog-status.js +81 -115
  77. package/dist/src/commands/catalog-status.js.map +1 -1
  78. package/dist/src/commands/catalog-store.d.ts +104 -0
  79. package/dist/src/commands/catalog-store.js +685 -0
  80. package/dist/src/commands/catalog-store.js.map +1 -0
  81. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  82. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  83. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  84. package/dist/src/commands/console.js +28 -17
  85. package/dist/src/commands/console.js.map +1 -1
  86. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  87. package/dist/src/commands/dependency-operation-plan.js +289 -7
  88. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  89. package/dist/src/commands/init.d.ts +5 -11
  90. package/dist/src/commands/init.js +30 -51
  91. package/dist/src/commands/init.js.map +1 -1
  92. package/dist/src/commands/managed-commands.d.ts +28 -0
  93. package/dist/src/commands/managed-commands.js +315 -0
  94. package/dist/src/commands/managed-commands.js.map +1 -0
  95. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  96. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  97. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  98. package/dist/src/commands/operation-plan.d.ts +182 -0
  99. package/dist/src/commands/operation-plan.js +71 -0
  100. package/dist/src/commands/operation-plan.js.map +1 -0
  101. package/dist/src/commands/operation-planner.d.ts +47 -0
  102. package/dist/src/commands/operation-planner.js +142 -0
  103. package/dist/src/commands/operation-planner.js.map +1 -0
  104. package/dist/src/commands/options.d.ts +9 -7
  105. package/dist/src/commands/options.js +83 -21
  106. package/dist/src/commands/options.js.map +1 -1
  107. package/dist/src/commands/plugin-capabilities.js +65 -4
  108. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  109. package/dist/src/commands/rebuild-command.d.ts +78 -31
  110. package/dist/src/commands/rebuild-command.js +5229 -942
  111. package/dist/src/commands/rebuild-command.js.map +1 -1
  112. package/dist/src/commands/rebuild-integration.d.ts +143 -21
  113. package/dist/src/commands/rebuild-integration.js +3384 -1342
  114. package/dist/src/commands/rebuild-integration.js.map +1 -1
  115. package/dist/src/commands/rebuild-operations.d.ts +60 -30
  116. package/dist/src/commands/rebuild-operations.js +267 -320
  117. package/dist/src/commands/rebuild-operations.js.map +1 -1
  118. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  119. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  120. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  121. package/dist/src/commands/review-inspection.d.ts +60 -0
  122. package/dist/src/commands/review-inspection.js +422 -0
  123. package/dist/src/commands/review-inspection.js.map +1 -0
  124. package/dist/src/commands/review-preparation.d.ts +49 -0
  125. package/dist/src/commands/review-preparation.js +427 -0
  126. package/dist/src/commands/review-preparation.js.map +1 -0
  127. package/dist/src/commands/runtime.d.ts +1 -5
  128. package/dist/src/commands/runtime.js +27 -53
  129. package/dist/src/commands/runtime.js.map +1 -1
  130. package/dist/src/commands/skill-eval.d.ts +39 -0
  131. package/dist/src/commands/skill-eval.js +400 -0
  132. package/dist/src/commands/skill-eval.js.map +1 -0
  133. package/dist/src/commands/status-v6.d.ts +279 -0
  134. package/dist/src/commands/status-v6.js +2785 -0
  135. package/dist/src/commands/status-v6.js.map +1 -0
  136. package/dist/src/commands/sync-command.d.ts +40 -0
  137. package/dist/src/commands/sync-command.js +254 -0
  138. package/dist/src/commands/sync-command.js.map +1 -0
  139. package/dist/src/commands/wizard.d.ts +8 -5
  140. package/dist/src/commands/wizard.js +6 -4
  141. package/dist/src/commands/wizard.js.map +1 -1
  142. package/dist/src/commands/write-commands.d.ts +9 -3
  143. package/dist/src/commands/write-commands.js +136 -31
  144. package/dist/src/commands/write-commands.js.map +1 -1
  145. package/dist/src/constants.d.ts +7 -2
  146. package/dist/src/constants.js +7 -2
  147. package/dist/src/constants.js.map +1 -1
  148. package/dist/src/eval/manifest-v1.d.ts +68 -0
  149. package/dist/src/eval/manifest-v1.js +353 -0
  150. package/dist/src/eval/manifest-v1.js.map +1 -0
  151. package/dist/src/generators/local-plugin.d.ts +5 -1
  152. package/dist/src/generators/local-plugin.js +261 -109
  153. package/dist/src/generators/local-plugin.js.map +1 -1
  154. package/dist/src/generators/permissions.d.ts +5 -2
  155. package/dist/src/generators/permissions.js +28 -15
  156. package/dist/src/generators/permissions.js.map +1 -1
  157. package/dist/src/index.d.ts +10 -4
  158. package/dist/src/index.js +1774 -609
  159. package/dist/src/index.js.map +1 -1
  160. package/dist/src/output/command-receipt.d.ts +47 -46
  161. package/dist/src/output/command-receipt.js +277 -79
  162. package/dist/src/output/command-receipt.js.map +1 -1
  163. package/dist/src/output/model.d.ts +3 -44
  164. package/dist/src/output/model.js +1 -144
  165. package/dist/src/output/model.js.map +1 -1
  166. package/dist/src/output/rebuild-progress.js +15 -13
  167. package/dist/src/output/rebuild-progress.js.map +1 -1
  168. package/dist/src/portable/commands.d.ts +46 -7
  169. package/dist/src/portable/commands.js +349 -37
  170. package/dist/src/portable/commands.js.map +1 -1
  171. package/dist/src/portable/materializer.d.ts +17 -4
  172. package/dist/src/portable/materializer.js +186 -41
  173. package/dist/src/portable/materializer.js.map +1 -1
  174. package/dist/src/portable/skills-cli.d.ts +15 -7
  175. package/dist/src/portable/skills-cli.js +74 -20
  176. package/dist/src/portable/skills-cli.js.map +1 -1
  177. package/dist/src/review/eval-source-input.d.ts +43 -0
  178. package/dist/src/review/eval-source-input.js +207 -0
  179. package/dist/src/review/eval-source-input.js.map +1 -0
  180. package/dist/src/review/review-profile.d.ts +17 -0
  181. package/dist/src/review/review-profile.js +234 -0
  182. package/dist/src/review/review-profile.js.map +1 -0
  183. package/dist/src/review/review-selection.d.ts +30 -0
  184. package/dist/src/review/review-selection.js +527 -0
  185. package/dist/src/review/review-selection.js.map +1 -0
  186. package/dist/src/review/review-types.d.ts +68 -0
  187. package/dist/src/review/review-types.js +16 -0
  188. package/dist/src/review/review-types.js.map +1 -0
  189. package/dist/src/review/skill-materialization.d.ts +26 -0
  190. package/dist/src/review/skill-materialization.js +217 -0
  191. package/dist/src/review/skill-materialization.js.map +1 -0
  192. package/dist/src/review/source-binding.d.ts +183 -0
  193. package/dist/src/review/source-binding.js +708 -0
  194. package/dist/src/review/source-binding.js.map +1 -0
  195. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  196. package/dist/src/tui/catalog-freshness.js +2 -0
  197. package/dist/src/tui/catalog-freshness.js.map +1 -0
  198. package/dist/src/tui/catalog-generation.d.ts +21 -0
  199. package/dist/src/tui/catalog-generation.js +156 -0
  200. package/dist/src/tui/catalog-generation.js.map +1 -0
  201. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  202. package/dist/src/tui/catalog-sources/projection.js +17 -0
  203. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  204. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  205. package/dist/src/tui/catalog-sources/review.js +13 -0
  206. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  207. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  208. package/dist/src/tui/catalog-sources/screens.js +40 -0
  209. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  210. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  211. package/dist/src/tui/catalog-sources/session.js +300 -0
  212. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  213. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  214. package/dist/src/tui/catalog-sources/types.js +2 -0
  215. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  216. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  217. package/dist/src/tui/catalog-store-task.js +19 -0
  218. package/dist/src/tui/catalog-store-task.js.map +1 -0
  219. package/dist/src/tui/clipboard.d.ts +13 -0
  220. package/dist/src/tui/clipboard.js +95 -0
  221. package/dist/src/tui/clipboard.js.map +1 -0
  222. package/dist/src/tui/components.d.ts +110 -3
  223. package/dist/src/tui/components.js +183 -36
  224. package/dist/src/tui/components.js.map +1 -1
  225. package/dist/src/tui/config-array-draft.d.ts +29 -0
  226. package/dist/src/tui/config-array-draft.js +48 -0
  227. package/dist/src/tui/config-array-draft.js.map +1 -0
  228. package/dist/src/tui/config-leaf-editor.d.ts +19 -0
  229. package/dist/src/tui/config-leaf-editor.js +212 -0
  230. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  231. package/dist/src/tui/config-references.d.ts +34 -0
  232. package/dist/src/tui/config-references.js +70 -0
  233. package/dist/src/tui/config-references.js.map +1 -0
  234. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  235. package/dist/src/tui/config-value-presentation.js +104 -0
  236. package/dist/src/tui/config-value-presentation.js.map +1 -0
  237. package/dist/src/tui/console-app-v4.d.ts +14 -4
  238. package/dist/src/tui/console-app-v4.js +9205 -1951
  239. package/dist/src/tui/console-app-v4.js.map +1 -1
  240. package/dist/src/tui/content-item-card.d.ts +13 -0
  241. package/dist/src/tui/content-item-card.js +51 -0
  242. package/dist/src/tui/content-item-card.js.map +1 -0
  243. package/dist/src/tui/controller-runtime.d.ts +10 -2
  244. package/dist/src/tui/controller-runtime.js +3289 -388
  245. package/dist/src/tui/controller-runtime.js.map +1 -1
  246. package/dist/src/tui/controller.d.ts +622 -45
  247. package/dist/src/tui/controller.js +3589 -768
  248. package/dist/src/tui/controller.js.map +1 -1
  249. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  250. package/dist/src/tui/dependency-graph-view.js +121 -0
  251. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  252. package/dist/src/tui/dependency-graph.d.ts +81 -0
  253. package/dist/src/tui/dependency-graph.js +452 -0
  254. package/dist/src/tui/dependency-graph.js.map +1 -0
  255. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  256. package/dist/src/tui/diagnostic-projection.js +595 -0
  257. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  258. package/dist/src/tui/diagnostics.d.ts +3 -3
  259. package/dist/src/tui/diagnostics.js +14 -2
  260. package/dist/src/tui/diagnostics.js.map +1 -1
  261. package/dist/src/tui/entity-cards.d.ts +55 -0
  262. package/dist/src/tui/entity-cards.js +220 -0
  263. package/dist/src/tui/entity-cards.js.map +1 -0
  264. package/dist/src/tui/glossary.d.ts +23 -0
  265. package/dist/src/tui/glossary.js +42 -0
  266. package/dist/src/tui/glossary.js.map +1 -0
  267. package/dist/src/tui/index.d.ts +6 -1
  268. package/dist/src/tui/index.js +5 -1
  269. package/dist/src/tui/index.js.map +1 -1
  270. package/dist/src/tui/input-display.d.ts +9 -0
  271. package/dist/src/tui/input-display.js +58 -0
  272. package/dist/src/tui/input-display.js.map +1 -0
  273. package/dist/src/tui/keys.d.ts +44 -0
  274. package/dist/src/tui/keys.js +43 -15
  275. package/dist/src/tui/keys.js.map +1 -1
  276. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  277. package/dist/src/tui/lifecycle-action-view.js +36 -0
  278. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  279. package/dist/src/tui/model.d.ts +224 -31
  280. package/dist/src/tui/model.js +1510 -397
  281. package/dist/src/tui/model.js.map +1 -1
  282. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  283. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  284. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  285. package/dist/src/tui/operation-history.d.ts +81 -0
  286. package/dist/src/tui/operation-history.js +136 -0
  287. package/dist/src/tui/operation-history.js.map +1 -0
  288. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  289. package/dist/src/tui/operation-review-planner.js +1392 -0
  290. package/dist/src/tui/operation-review-planner.js.map +1 -0
  291. package/dist/src/tui/plugin-content.d.ts +31 -0
  292. package/dist/src/tui/plugin-content.js +680 -0
  293. package/dist/src/tui/plugin-content.js.map +1 -0
  294. package/dist/src/tui/plugin-detail.d.ts +52 -0
  295. package/dist/src/tui/plugin-detail.js +165 -0
  296. package/dist/src/tui/plugin-detail.js.map +1 -0
  297. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  298. package/dist/src/tui/plugin-write-task.js +286 -0
  299. package/dist/src/tui/plugin-write-task.js.map +1 -0
  300. package/dist/src/tui/project-inventory.d.ts +68 -0
  301. package/dist/src/tui/project-inventory.js +203 -0
  302. package/dist/src/tui/project-inventory.js.map +1 -0
  303. package/dist/src/tui/prompt.js +4 -15
  304. package/dist/src/tui/prompt.js.map +1 -1
  305. package/dist/src/tui/query-header.d.ts +30 -0
  306. package/dist/src/tui/query-header.js +40 -0
  307. package/dist/src/tui/query-header.js.map +1 -0
  308. package/dist/src/tui/reader.d.ts +37 -0
  309. package/dist/src/tui/reader.js +47 -0
  310. package/dist/src/tui/reader.js.map +1 -0
  311. package/dist/src/tui/router.d.ts +197 -10
  312. package/dist/src/tui/router.js +338 -50
  313. package/dist/src/tui/router.js.map +1 -1
  314. package/dist/src/tui/screen-registry.d.ts +701 -0
  315. package/dist/src/tui/screen-registry.js +230 -0
  316. package/dist/src/tui/screen-registry.js.map +1 -0
  317. package/dist/src/tui/session-console-app.d.ts +6 -0
  318. package/dist/src/tui/session-console-app.js +13 -0
  319. package/dist/src/tui/session-console-app.js.map +1 -0
  320. package/dist/src/tui/session-host.d.ts +45 -0
  321. package/dist/src/tui/session-host.js +209 -0
  322. package/dist/src/tui/session-host.js.map +1 -0
  323. package/dist/src/tui/source-detail-card.d.ts +29 -0
  324. package/dist/src/tui/source-detail-card.js +45 -0
  325. package/dist/src/tui/source-detail-card.js.map +1 -0
  326. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  327. package/dist/src/tui/source-ref-presets.js +11 -0
  328. package/dist/src/tui/source-ref-presets.js.map +1 -0
  329. package/dist/src/tui/theme.d.ts +12 -0
  330. package/dist/src/tui/theme.js +12 -0
  331. package/dist/src/tui/theme.js.map +1 -1
  332. package/dist/src/tui/viewport.d.ts +1 -0
  333. package/dist/src/tui/viewport.js +23 -0
  334. package/dist/src/tui/viewport.js.map +1 -1
  335. package/dist/src/tui/views.js +31 -3
  336. package/dist/src/tui/views.js.map +1 -1
  337. package/dist/src/tui/wizard.js +37 -13
  338. package/dist/src/tui/wizard.js.map +1 -1
  339. package/dist/src/types.d.ts +264 -21
  340. package/dist/src/types.js +1 -0
  341. package/dist/src/types.js.map +1 -1
  342. package/dist/src/utils/agent-version.d.ts +7 -1
  343. package/dist/src/utils/agent-version.js +36 -7
  344. package/dist/src/utils/agent-version.js.map +1 -1
  345. package/dist/src/utils/artifact-plan.d.ts +8 -6
  346. package/dist/src/utils/artifact-plan.js +67 -13
  347. package/dist/src/utils/artifact-plan.js.map +1 -1
  348. package/dist/src/utils/artifact-renderer.d.ts +24 -10
  349. package/dist/src/utils/artifact-renderer.js +230 -220
  350. package/dist/src/utils/artifact-renderer.js.map +1 -1
  351. package/dist/src/utils/artifact-request.d.ts +32 -0
  352. package/dist/src/utils/artifact-request.js +90 -0
  353. package/dist/src/utils/artifact-request.js.map +1 -0
  354. package/dist/src/utils/artifact-sources.d.ts +4 -0
  355. package/dist/src/utils/artifact-sources.js +17 -0
  356. package/dist/src/utils/artifact-sources.js.map +1 -1
  357. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  358. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  359. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  360. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  361. package/dist/src/utils/bundle-integrity.js +0 -25
  362. package/dist/src/utils/bundle-integrity.js.map +1 -1
  363. package/dist/src/utils/bundle-layout.js +29 -29
  364. package/dist/src/utils/bundle-layout.js.map +1 -1
  365. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  366. package/dist/src/utils/catalog-capability-projection.js +14 -0
  367. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  368. package/dist/src/utils/catalog-digests.d.ts +10 -0
  369. package/dist/src/utils/catalog-digests.js +57 -20
  370. package/dist/src/utils/catalog-digests.js.map +1 -1
  371. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  372. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  373. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  374. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  375. package/dist/src/utils/catalog-generation-error.js +30 -0
  376. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  377. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  378. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  379. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  380. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  381. package/dist/src/utils/catalog-generation-service.js +1271 -0
  382. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  383. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  384. package/dist/src/utils/catalog-generation-state.js +192 -0
  385. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  386. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  387. package/dist/src/utils/catalog-generation-store.js +452 -0
  388. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  389. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  390. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  391. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  392. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  393. package/dist/src/utils/catalog-operation-context.js +142 -0
  394. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  395. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  396. package/dist/src/utils/catalog-public-error.js +28 -8
  397. package/dist/src/utils/catalog-public-error.js.map +1 -1
  398. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  399. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  400. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  401. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  402. package/dist/src/utils/catalog-snapshot.js +11 -3
  403. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  404. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  405. package/dist/src/utils/catalog-source-identity.js +21 -2
  406. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  407. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  408. package/dist/src/utils/catalog-source-impact.js +344 -0
  409. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  410. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  411. package/dist/src/utils/catalog-source-references.js +195 -347
  412. package/dist/src/utils/catalog-source-references.js.map +1 -1
  413. package/dist/src/utils/catalog-sources.d.ts +15 -1
  414. package/dist/src/utils/catalog-sources.js +206 -27
  415. package/dist/src/utils/catalog-sources.js.map +1 -1
  416. package/dist/src/utils/claude-skills-root.d.ts +8 -0
  417. package/dist/src/utils/claude-skills-root.js +76 -0
  418. package/dist/src/utils/claude-skills-root.js.map +1 -0
  419. package/dist/src/utils/codex-config.d.ts +2 -0
  420. package/dist/src/utils/codex-config.js +26 -5
  421. package/dist/src/utils/codex-config.js.map +1 -1
  422. package/dist/src/utils/codex-manager.d.ts +79 -0
  423. package/dist/src/utils/codex-manager.js +735 -0
  424. package/dist/src/utils/codex-manager.js.map +1 -0
  425. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  426. package/dist/src/utils/codex-marketplace-path.js +45 -0
  427. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  428. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  429. package/dist/src/utils/codex-native-observation.js +154 -0
  430. package/dist/src/utils/codex-native-observation.js.map +1 -0
  431. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  432. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  433. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  434. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  435. package/dist/src/utils/codex-reconciler.js +298 -0
  436. package/dist/src/utils/codex-reconciler.js.map +1 -0
  437. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  438. package/dist/src/utils/codex-shared-native.js +81 -0
  439. package/dist/src/utils/codex-shared-native.js.map +1 -0
  440. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  441. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  442. package/dist/src/utils/codex-skills-root.d.ts +4 -0
  443. package/dist/src/utils/codex-skills-root.js +25 -0
  444. package/dist/src/utils/codex-skills-root.js.map +1 -0
  445. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  446. package/dist/src/utils/codex-surface-analysis.js +247 -0
  447. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  448. package/dist/src/utils/dynamic-skill-tree.d.ts +5 -0
  449. package/dist/src/utils/dynamic-skill-tree.js +56 -7
  450. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  451. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  452. package/dist/src/utils/git-catalog-provider.js +177 -145
  453. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  454. package/dist/src/utils/local-marketplace.d.ts +27 -1
  455. package/dist/src/utils/local-marketplace.js +434 -84
  456. package/dist/src/utils/local-marketplace.js.map +1 -1
  457. package/dist/src/utils/managed-command-closure.d.ts +3 -0
  458. package/dist/src/utils/managed-command-closure.js +35 -0
  459. package/dist/src/utils/managed-command-closure.js.map +1 -0
  460. package/dist/src/utils/managed-command-evidence.d.ts +7 -0
  461. package/dist/src/utils/managed-command-evidence.js +86 -0
  462. package/dist/src/utils/managed-command-evidence.js.map +1 -0
  463. package/dist/src/utils/managed-command-materialization.d.ts +115 -0
  464. package/dist/src/utils/managed-command-materialization.js +359 -0
  465. package/dist/src/utils/managed-command-materialization.js.map +1 -0
  466. package/dist/src/utils/managed-command-runtime.d.ts +33 -0
  467. package/dist/src/utils/managed-command-runtime.js +121 -0
  468. package/dist/src/utils/managed-command-runtime.js.map +1 -0
  469. package/dist/src/utils/managed-command-store.d.ts +128 -0
  470. package/dist/src/utils/managed-command-store.js +589 -0
  471. package/dist/src/utils/managed-command-store.js.map +1 -0
  472. package/dist/src/utils/manifest.d.ts +1 -3
  473. package/dist/src/utils/manifest.js +1 -3
  474. package/dist/src/utils/manifest.js.map +1 -1
  475. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  476. package/dist/src/utils/multi-source-catalog.js +54 -110
  477. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  478. package/dist/src/utils/native-cli.d.ts +61 -7
  479. package/dist/src/utils/native-cli.js +426 -58
  480. package/dist/src/utils/native-cli.js.map +1 -1
  481. package/dist/src/utils/native-tool-context.d.ts +14 -0
  482. package/dist/src/utils/native-tool-context.js +38 -0
  483. package/dist/src/utils/native-tool-context.js.map +1 -0
  484. package/dist/src/utils/native-tool-review.d.ts +21 -0
  485. package/dist/src/utils/native-tool-review.js +102 -0
  486. package/dist/src/utils/native-tool-review.js.map +1 -0
  487. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  488. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  489. package/dist/src/utils/ownership.d.ts +88 -20
  490. package/dist/src/utils/ownership.js +185 -223
  491. package/dist/src/utils/ownership.js.map +1 -1
  492. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  493. package/dist/src/utils/path-catalog-provider.js +54 -65
  494. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  495. package/dist/src/utils/paths.d.ts +0 -1
  496. package/dist/src/utils/paths.js +0 -1
  497. package/dist/src/utils/paths.js.map +1 -1
  498. package/dist/src/utils/plugin-config-impact.d.ts +40 -0
  499. package/dist/src/utils/plugin-config-impact.js +373 -0
  500. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  501. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  502. package/dist/src/utils/plugin-config-write.js +1112 -298
  503. package/dist/src/utils/plugin-config-write.js.map +1 -1
  504. package/dist/src/utils/plugin-config.d.ts +153 -93
  505. package/dist/src/utils/plugin-config.js +1116 -968
  506. package/dist/src/utils/plugin-config.js.map +1 -1
  507. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  508. package/dist/src/utils/plugin-intent-state.js +320 -0
  509. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  510. package/dist/src/utils/plugin-scripts.d.ts +66 -125
  511. package/dist/src/utils/plugin-scripts.js +518 -526
  512. package/dist/src/utils/plugin-scripts.js.map +1 -1
  513. package/dist/src/utils/process-lock.js +14 -5
  514. package/dist/src/utils/process-lock.js.map +1 -1
  515. package/dist/src/utils/process-tree.d.ts +2 -2
  516. package/dist/src/utils/process-tree.js +1 -1
  517. package/dist/src/utils/process-tree.js.map +1 -1
  518. package/dist/src/utils/project-boundary.d.ts +11 -13
  519. package/dist/src/utils/project-boundary.js +28 -34
  520. package/dist/src/utils/project-boundary.js.map +1 -1
  521. package/dist/src/utils/rendered-contract.js +18 -1
  522. package/dist/src/utils/rendered-contract.js.map +1 -1
  523. package/dist/src/utils/runtime-config.d.ts +20 -0
  524. package/dist/src/utils/runtime-config.js +75 -0
  525. package/dist/src/utils/runtime-config.js.map +1 -0
  526. package/dist/src/utils/runtime-skill-closure.js +47 -6
  527. package/dist/src/utils/runtime-skill-closure.js.map +1 -1
  528. package/dist/src/utils/safe-fs.d.ts +21 -0
  529. package/dist/src/utils/safe-fs.js +111 -0
  530. package/dist/src/utils/safe-fs.js.map +1 -0
  531. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  532. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  533. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  534. package/dist/src/utils/sensitive-content.d.ts +4 -0
  535. package/dist/src/utils/sensitive-content.js +36 -0
  536. package/dist/src/utils/sensitive-content.js.map +1 -0
  537. package/dist/src/utils/state-paths.js +7 -2
  538. package/dist/src/utils/state-paths.js.map +1 -1
  539. package/dist/src/utils/target-eligibility.d.ts +8 -2
  540. package/dist/src/utils/target-eligibility.js +17 -8
  541. package/dist/src/utils/target-eligibility.js.map +1 -1
  542. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  543. package/dist/src/utils/windows-claude-shim.js +10 -0
  544. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  545. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  546. package/dist/src/utils/windows-npm-shim.js +140 -0
  547. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  548. package/dist/vitest.config.js +100 -9
  549. package/dist/vitest.config.js.map +1 -1
  550. package/package.json +31 -21
  551. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  552. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  553. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  554. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  555. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  556. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  557. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  558. package/dist/scripts/codex-eval-app-server.js +0 -1228
  559. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  560. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  561. package/dist/scripts/codex-eval-isolation.js +0 -318
  562. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  563. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  564. package/dist/scripts/codex-eval-process-management.js +0 -69
  565. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  566. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  567. package/dist/scripts/codex-eval-process-tree.js +0 -803
  568. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  569. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  570. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  571. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  572. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  573. package/dist/scripts/codex-trigger-eval.js +0 -968
  574. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  575. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  576. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  577. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  578. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  579. package/dist/scripts/eval-plugin-skills.js +0 -1586
  580. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  581. package/dist/scripts/eval-run-layout.d.ts +0 -17
  582. package/dist/scripts/eval-run-layout.js +0 -26
  583. package/dist/scripts/eval-run-layout.js.map +0 -1
  584. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  585. package/dist/scripts/plugin-eval-contract.js +0 -695
  586. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  587. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  588. package/dist/scripts/plugin-eval-materializer.js +0 -421
  589. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  590. package/dist/scripts/skill-reporting.d.ts +0 -212
  591. package/dist/scripts/skill-reporting.js +0 -922
  592. package/dist/scripts/skill-reporting.js.map +0 -1
  593. package/dist/src/commands/review-publication.d.ts +0 -99
  594. package/dist/src/commands/review-publication.js +0 -904
  595. package/dist/src/commands/review-publication.js.map +0 -1
  596. package/dist/src/commands/status-v4.d.ts +0 -123
  597. package/dist/src/commands/status-v4.js +0 -905
  598. package/dist/src/commands/status-v4.js.map +0 -1
  599. package/dist/src/commands/status.d.ts +0 -93
  600. package/dist/src/commands/status.js +0 -442
  601. package/dist/src/commands/status.js.map +0 -1
  602. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  603. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  604. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  605. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  606. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  607. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  608. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  609. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  610. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  611. package/dist/src/utils/catalog-source-cache.js +0 -296
  612. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  613. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  614. package/dist/src/utils/codex-project-surface.js +0 -49
  615. package/dist/src/utils/codex-project-surface.js.map +0 -1
  616. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  617. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  618. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  619. package/dist/src/utils/plugin-release.d.ts +0 -2
  620. package/dist/src/utils/plugin-release.js +0 -2
  621. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -0,0 +1,680 @@
1
+ import path from 'node:path';
2
+ import { open } from 'node:fs/promises';
3
+ import { stripVTControlCharacters } from 'node:util';
4
+ import fs from 'fs-extra';
5
+ import YAML from 'yaml';
6
+ import { parseSkillFrontmatter } from '../utils/skill-validation.js';
7
+ import { resolveSupportedPlatforms } from '../utils/platform-support.js';
8
+ const MAX_FRONTMATTER_BYTES = 16 * 1024;
9
+ const TOOL_ORDER = ['Codex', 'Claude Code', 'Agent Skills'];
10
+ function safeSummary(description, short) {
11
+ const safeDescription = stripVTControlCharacters(description)
12
+ .replace(/[\u0000-\u001f\u007f-\u009f\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/gu, ' ')
13
+ .replace(/\s+/gu, ' ').trim();
14
+ const sentence = short ? safeDescription
15
+ : safeDescription.match(/^.*?(?:[。!?]|[.!?](?=\s|$)|$)/u)?.[0] ?? safeDescription;
16
+ const points = [...sentence];
17
+ return points.length > 120 ? `${points.slice(0, 119).join('')}…` : sentence || null;
18
+ }
19
+ function sortTools(tools) {
20
+ return [...new Set(tools)].sort((left, right) => TOOL_ORDER.indexOf(left) - TOOL_ORDER.indexOf(right));
21
+ }
22
+ function within(root, candidate) {
23
+ const relative = path.relative(root, candidate);
24
+ return relative === '' || (!path.isAbsolute(relative)
25
+ && relative !== '..'
26
+ && !relative.startsWith(`..${path.sep}`));
27
+ }
28
+ function isRecord(value) {
29
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
30
+ }
31
+ async function regularPathWithin(root, candidate, kind) {
32
+ const lexical = path.resolve(candidate);
33
+ if (!within(root, lexical))
34
+ return null;
35
+ const relative = path.relative(root, lexical);
36
+ let current = root;
37
+ let stats;
38
+ for (const segment of relative.split(path.sep).filter(Boolean)) {
39
+ current = path.join(current, segment);
40
+ stats = await fs.lstat(current).catch(() => undefined);
41
+ if (!stats || stats.isSymbolicLink())
42
+ return null;
43
+ }
44
+ stats ??= await fs.lstat(lexical).catch(() => undefined);
45
+ if (!stats || stats.isSymbolicLink())
46
+ return null;
47
+ if (kind === 'file' ? !stats.isFile() : !stats.isDirectory())
48
+ return null;
49
+ const real = await fs.realpath(lexical).catch(() => undefined);
50
+ return real && within(root, real) ? real : null;
51
+ }
52
+ async function unconfirmedPathCode(root, candidate) {
53
+ const lexical = path.resolve(candidate);
54
+ if (!within(root, lexical))
55
+ return 'unsafePath';
56
+ let current = root;
57
+ for (const segment of path.relative(root, lexical).split(path.sep).filter(Boolean)) {
58
+ current = path.join(current, segment);
59
+ let stats;
60
+ try {
61
+ stats = await fs.lstat(current);
62
+ }
63
+ catch (error) {
64
+ return error.code === 'ENOENT'
65
+ ? 'incompleteList' : 'unreadable';
66
+ }
67
+ if (stats.isSymbolicLink() || (!stats.isDirectory() && current !== lexical))
68
+ return 'unsafePath';
69
+ }
70
+ return 'unsafePath';
71
+ }
72
+ async function readFrontmatterDescription(root, skillFile) {
73
+ const safeFile = await regularPathWithin(root, skillFile, 'file');
74
+ if (!safeFile)
75
+ return { exists: false, description: null };
76
+ let handle;
77
+ try {
78
+ handle = await open(safeFile, 'r');
79
+ }
80
+ catch {
81
+ return { exists: true, description: null, issue: {
82
+ code: 'unreadable', message: '简介文件无法读取。请检查目录内容后重试。',
83
+ } };
84
+ }
85
+ try {
86
+ const chunks = [];
87
+ let total = 0;
88
+ let frontmatterEnd = -1;
89
+ let reachedEof = false;
90
+ while (total < MAX_FRONTMATTER_BYTES && frontmatterEnd === -1) {
91
+ const buffer = Buffer.alloc(Math.min(512, MAX_FRONTMATTER_BYTES - total));
92
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, total);
93
+ if (bytesRead === 0) {
94
+ reachedEof = true;
95
+ break;
96
+ }
97
+ chunks.push(buffer.subarray(0, bytesRead));
98
+ total += bytesRead;
99
+ frontmatterEnd = Buffer.concat(chunks).toString('utf8').replace(/\r\n/gu, '\n').indexOf('\n---\n', 4);
100
+ }
101
+ const normalized = Buffer.concat(chunks).toString('utf8').replace(/\r\n/gu, '\n');
102
+ const closingAtEnd = frontmatterEnd === -1 && normalized.endsWith('\n---')
103
+ && (reachedEof || (await handle.stat()).size === total);
104
+ if (frontmatterEnd === -1 && !closingAtEnd)
105
+ return { exists: true, description: null, issue: {
106
+ code: 'invalidMetadata', message: '简介元信息无效或超过读取预算。请检查内容文件。',
107
+ } };
108
+ const header = closingAtEnd ? normalized : normalized.slice(0, frontmatterEnd + '\n---\n'.length);
109
+ const parsed = parseSkillFrontmatter(header, 'SKILL.md');
110
+ if (parsed.errors.length > 0)
111
+ return { exists: true, description: null, issue: {
112
+ code: 'invalidMetadata', message: '简介元信息无法解析。请检查内容文件。',
113
+ } };
114
+ const metadata = parsed.frontmatter?.metadata;
115
+ const short = isRecord(metadata) ? metadata['short-description'] : undefined;
116
+ if (short !== undefined && (typeof short !== 'string' || !short.trim())) {
117
+ return { exists: true, description: null, issue: {
118
+ code: 'invalidMetadata', message: '简短用途元信息无效。请检查内容文件。',
119
+ } };
120
+ }
121
+ const description = typeof short === 'string' && short.trim()
122
+ ? short : parsed.frontmatter?.description;
123
+ if (description !== undefined && typeof description !== 'string') {
124
+ return { exists: true, description: null, issue: {
125
+ code: 'invalidMetadata', message: '简介元信息类型无效。请检查内容文件。',
126
+ } };
127
+ }
128
+ return {
129
+ exists: true,
130
+ description: typeof description === 'string' ? safeSummary(description, Boolean(short)) : null,
131
+ };
132
+ }
133
+ catch {
134
+ return { exists: true, description: null, issue: {
135
+ code: 'unreadable', message: '简介文件无法读取。请检查目录内容后重试。',
136
+ } };
137
+ }
138
+ finally {
139
+ await handle.close();
140
+ }
141
+ }
142
+ async function readCodexCommandDescription(root, skillRoot) {
143
+ const metadataFile = path.join(skillRoot, 'agents', 'openai.yaml');
144
+ const safeFile = await regularPathWithin(root, metadataFile, 'file');
145
+ if (!safeFile) {
146
+ const code = await unconfirmedPathCode(root, metadataFile);
147
+ return { description: null, issue: {
148
+ code, message: 'Slash command 简介文件不可安全确认。请检查内容目录。',
149
+ } };
150
+ }
151
+ let handle;
152
+ try {
153
+ handle = await open(safeFile, 'r');
154
+ }
155
+ catch {
156
+ return { description: null, issue: {
157
+ code: 'unreadable', message: 'Slash command 简介文件无法读取。请检查内容目录。',
158
+ } };
159
+ }
160
+ try {
161
+ const size = (await handle.stat()).size;
162
+ if (size > MAX_FRONTMATTER_BYTES)
163
+ return { description: null, issue: {
164
+ code: 'invalidMetadata', message: 'Slash command 简介元信息超过读取预算。请检查内容文件。',
165
+ } };
166
+ const buffer = Buffer.alloc(size);
167
+ let total = 0;
168
+ while (total < size) {
169
+ const { bytesRead } = await handle.read(buffer, total, size - total, total);
170
+ if (bytesRead === 0)
171
+ return { description: null, issue: {
172
+ code: 'unreadable', message: 'Slash command 简介文件无法完整读取。请检查内容目录。',
173
+ } };
174
+ total += bytesRead;
175
+ }
176
+ let metadata;
177
+ try {
178
+ const document = YAML.parseDocument(buffer.toString('utf8'), { prettyErrors: false });
179
+ if (document.errors.length > 0)
180
+ throw new Error('Invalid YAML');
181
+ metadata = document.toJS({ maxAliasCount: 0 });
182
+ }
183
+ catch {
184
+ return { description: null, issue: {
185
+ code: 'invalidMetadata', message: 'Slash command 简介元信息无法解析。请检查内容文件。',
186
+ } };
187
+ }
188
+ if (!isRecord(metadata) || (metadata.interface !== undefined && !isRecord(metadata.interface))) {
189
+ return { description: null, issue: {
190
+ code: 'invalidMetadata', message: 'Slash command 简介元信息无效。请检查内容文件。',
191
+ } };
192
+ }
193
+ const short = isRecord(metadata.interface) ? metadata.interface.short_description : undefined;
194
+ if (short === undefined)
195
+ return { description: null };
196
+ if (typeof short !== 'string' || !short.trim())
197
+ return { description: null, issue: {
198
+ code: 'invalidMetadata', message: 'Slash command 简短用途元信息无效。请检查内容文件。',
199
+ } };
200
+ const description = safeSummary(short, true);
201
+ return description ? { description } : { description: null, issue: {
202
+ code: 'invalidMetadata', message: 'Slash command 简短用途元信息无效。请检查内容文件。',
203
+ } };
204
+ }
205
+ catch {
206
+ return { description: null, issue: {
207
+ code: 'unreadable', message: 'Slash command 简介文件无法读取。请检查内容目录。',
208
+ } };
209
+ }
210
+ finally {
211
+ await handle.close();
212
+ }
213
+ }
214
+ function addItem(items, item) {
215
+ const key = `${item.type}:${item.name}`;
216
+ const current = items.get(key);
217
+ if (!current) {
218
+ items.set(key, item);
219
+ return;
220
+ }
221
+ current.tools = sortTools([...current.tools, ...item.tools]);
222
+ if (current.description === null && item.description !== null)
223
+ current.description = item.description;
224
+ if (item.issue) {
225
+ current.descriptionState = 'issue';
226
+ current.issue = item.issue;
227
+ }
228
+ else if (current.descriptionState !== 'issue' && current.description !== null) {
229
+ current.descriptionState = 'available';
230
+ }
231
+ }
232
+ function addCoverageIssue(issues, issue) {
233
+ issues.push(issue);
234
+ }
235
+ async function addSkillDirectory(options) {
236
+ const directory = await regularPathWithin(options.root, path.join(options.root, options.relativePath), 'directory');
237
+ if (!directory) {
238
+ const code = await unconfirmedPathCode(options.root, path.join(options.root, options.relativePath));
239
+ addCoverageIssue(options.coverageIssues, {
240
+ code, message: `${options.tool} Skill 清单无法确认。请检查目录。`,
241
+ });
242
+ return;
243
+ }
244
+ let entries;
245
+ try {
246
+ entries = await fs.readdir(directory, { withFileTypes: true });
247
+ }
248
+ catch {
249
+ addCoverageIssue(options.coverageIssues, {
250
+ code: 'unreadable', message: `${options.tool} Skill 清单无法读取。请检查目录后重试。`,
251
+ });
252
+ return;
253
+ }
254
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
255
+ if (entry.isSymbolicLink()) {
256
+ addCoverageIssue(options.coverageIssues, {
257
+ code: 'unsafePath', message: `${options.tool} Skill 清单含不安全路径。请检查目录。`,
258
+ });
259
+ continue;
260
+ }
261
+ if (!entry.isDirectory())
262
+ continue;
263
+ const skillRoot = await regularPathWithin(options.root, path.join(directory, entry.name), 'directory');
264
+ if (!skillRoot) {
265
+ const code = await unconfirmedPathCode(options.root, path.join(directory, entry.name));
266
+ addCoverageIssue(options.coverageIssues, {
267
+ code, message: `${options.tool} Skill 清单含无法确认的条目。请检查目录。`,
268
+ });
269
+ continue;
270
+ }
271
+ if (options.tool === 'Codex'
272
+ && options.items.get(`command:${entry.name}`)?.tools.includes('Codex'))
273
+ continue;
274
+ const skillFile = path.join(skillRoot, 'SKILL.md');
275
+ const hasClaudeCommand = options.items.has(`command:${entry.name}`);
276
+ const hasClaudeSkill = options.checkClaudeCommand
277
+ && options.items.get(`skill:${entry.name}`)?.tools.includes('Claude Code')
278
+ && await regularPathWithin(options.root, path.join(options.root, 'claude', 'skills', entry.name, 'SKILL.md'), 'file');
279
+ const uncertainSource = options.checkClaudeCommand && !hasClaudeCommand && !hasClaudeSkill;
280
+ const skill = options.readDescription === false || (uncertainSource && options.type !== 'command')
281
+ ? { exists: Boolean(await regularPathWithin(options.root, skillFile, 'file')), description: null }
282
+ : await readFrontmatterDescription(options.root, skillFile);
283
+ let issue = skill.issue;
284
+ if (!skill.exists) {
285
+ const code = await unconfirmedPathCode(options.root, skillFile);
286
+ if (code === 'incompleteList') {
287
+ addCoverageIssue(options.coverageIssues, {
288
+ code, message: `${options.tool} Skill 清单有无法确认的条目。请检查目录。`,
289
+ });
290
+ continue;
291
+ }
292
+ issue = { code, message: 'Skill 元信息文件不可安全读取。请检查内容目录后重试。' };
293
+ }
294
+ const type = options.type === 'command' && issue?.code === 'unsafePath'
295
+ ? 'skill' : options.type ?? 'skill';
296
+ if (uncertainSource) {
297
+ addCoverageIssue(options.coverageIssues, {
298
+ code: 'incompleteList',
299
+ message: options.type === 'command'
300
+ ? 'Slash command 的 Claude Code 组件无法确认。请检查内容目录。'
301
+ : 'Codex 内容名称已确认,但缺少可安全确认的 Claude Code 对应项,不能区分普通 Skill 与 Slash command。请检查内容目录。',
302
+ });
303
+ }
304
+ const command = type === 'command' && skill.exists
305
+ ? await readCodexCommandDescription(options.root, skillRoot) : undefined;
306
+ issue ??= command?.issue;
307
+ const description = command?.description ?? skill.description;
308
+ addItem(options.items, {
309
+ id: `${type}:${entry.name}`,
310
+ name: entry.name,
311
+ type,
312
+ description,
313
+ tools: [options.tool],
314
+ descriptionState: issue ? 'issue' : description ? 'available' : 'absent',
315
+ ...(issue ? { issue } : {}),
316
+ });
317
+ }
318
+ }
319
+ async function addJsonComponents(options) {
320
+ const file = await regularPathWithin(options.root, path.join(options.root, options.relativePath), 'file');
321
+ if (!file) {
322
+ const code = await unconfirmedPathCode(options.root, path.join(options.root, options.relativePath));
323
+ addCoverageIssue(options.coverageIssues, {
324
+ code, message: `${options.tool} ${options.type} 清单无法确认。请检查目录。`,
325
+ });
326
+ return;
327
+ }
328
+ let value;
329
+ try {
330
+ value = await fs.readJson(file);
331
+ }
332
+ catch {
333
+ addCoverageIssue(options.coverageIssues, {
334
+ code: 'unreadable', message: `${options.tool} ${options.type} 清单无法读取。请检查内容文件。`,
335
+ });
336
+ return;
337
+ }
338
+ const collection = isRecord(value) ? value[options.property] : undefined;
339
+ if (!isRecord(collection)) {
340
+ addCoverageIssue(options.coverageIssues, {
341
+ code: 'incompleteList', message: `${options.tool} ${options.type} 清单格式无效。请检查内容文件。`,
342
+ });
343
+ return;
344
+ }
345
+ const entries = Object.keys(collection).sort();
346
+ for (const name of entries) {
347
+ addItem(options.items, {
348
+ id: `${options.type}:${name}`,
349
+ name,
350
+ type: options.type,
351
+ description: null,
352
+ tools: [options.tool],
353
+ descriptionState: 'absent',
354
+ });
355
+ }
356
+ }
357
+ async function addSlashCommands(options) {
358
+ const directory = await regularPathWithin(options.root, path.join(options.root, 'claude', 'commands'), 'directory');
359
+ if (!directory) {
360
+ const code = await unconfirmedPathCode(options.root, path.join(options.root, 'claude', 'commands'));
361
+ addCoverageIssue(options.coverageIssues, {
362
+ code, message: 'Slash command 清单无法确认。请检查目录。',
363
+ });
364
+ return;
365
+ }
366
+ let entries;
367
+ try {
368
+ entries = await fs.readdir(directory, { withFileTypes: true });
369
+ }
370
+ catch {
371
+ addCoverageIssue(options.coverageIssues, {
372
+ code: 'unreadable', message: 'Slash command 清单无法读取。请检查目录后重试。',
373
+ });
374
+ return;
375
+ }
376
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
377
+ if (path.extname(entry.name) !== '.md')
378
+ continue;
379
+ if (entry.isSymbolicLink() || !entry.isFile()) {
380
+ addCoverageIssue(options.coverageIssues, {
381
+ code: 'unsafePath', message: 'Slash command 清单含无法确认的条目。请检查目录。',
382
+ });
383
+ continue;
384
+ }
385
+ if (!await regularPathWithin(options.root, path.join(directory, entry.name), 'file')) {
386
+ addCoverageIssue(options.coverageIssues, {
387
+ code: 'unsafePath', message: 'Slash command 清单含不安全路径。请检查目录。',
388
+ });
389
+ continue;
390
+ }
391
+ const name = path.basename(entry.name, '.md');
392
+ const tools = ['Claude Code'];
393
+ const codexSkillFile = path.join(options.root, 'codex', 'skills', name, 'SKILL.md');
394
+ const codexCommand = options.hasCodex
395
+ && await regularPathWithin(options.root, codexSkillFile, 'file');
396
+ if (options.hasCodex && !codexCommand) {
397
+ const code = await unconfirmedPathCode(options.root, codexSkillFile);
398
+ addCoverageIssue(options.coverageIssues, {
399
+ code, message: 'Slash command 的 Codex 组件无法安全确认。请检查内容目录。',
400
+ });
401
+ }
402
+ if (options.hasCodex && !codexCommand && await fs.lstat(codexSkillFile).catch(() => undefined)) {
403
+ if (await regularPathWithin(options.root, path.dirname(codexSkillFile), 'directory')) {
404
+ addItem(options.items, {
405
+ id: `skill:${name}`,
406
+ name,
407
+ type: 'skill',
408
+ description: null,
409
+ tools: ['Codex'],
410
+ descriptionState: 'issue',
411
+ issue: { code: 'unsafePath', message: 'Skill 元信息文件不可安全读取。请检查内容目录后重试。' },
412
+ });
413
+ }
414
+ }
415
+ const command = await readFrontmatterDescription(options.root, path.join(directory, entry.name));
416
+ const codexDescription = codexCommand
417
+ ? await readCodexCommandDescription(options.root, path.dirname(codexSkillFile)) : undefined;
418
+ const description = codexDescription?.description ?? command.description;
419
+ const issue = codexDescription?.issue ?? command.issue;
420
+ if (codexCommand)
421
+ tools.unshift('Codex');
422
+ addItem(options.items, {
423
+ id: `command:${name}`,
424
+ name,
425
+ type: 'command',
426
+ description,
427
+ tools,
428
+ descriptionState: issue ? 'issue' : description ? 'available' : 'absent',
429
+ ...(issue ? { issue } : {}),
430
+ });
431
+ }
432
+ }
433
+ function targetTool(target) {
434
+ if (target.startsWith('codex.'))
435
+ return 'Codex';
436
+ if (target.startsWith('claude.'))
437
+ return 'Claude Code';
438
+ if (target.startsWith('agent-skills.'))
439
+ return 'Agent Skills';
440
+ return null;
441
+ }
442
+ function targetType(target) {
443
+ if (target.endsWith('.skill'))
444
+ return 'skill';
445
+ if (target === 'codex.agentRole')
446
+ return 'role';
447
+ if (target === 'codex.developerInstructionsBlock')
448
+ return 'instruction';
449
+ return null;
450
+ }
451
+ function toolsForOverrides(tools, overrides) {
452
+ return tools.filter((tool) => {
453
+ if (tool === 'Codex')
454
+ return overrides?.codex !== null;
455
+ if (tool === 'Claude Code')
456
+ return overrides?.claude !== null;
457
+ return true;
458
+ });
459
+ }
460
+ async function projectedPlatforms(root) {
461
+ const tools = [];
462
+ if (await regularPathWithin(root, path.join(root, '.codex-plugin', 'plugin.json'), 'file'))
463
+ tools.push('Codex');
464
+ if (await regularPathWithin(root, path.join(root, '.claude-plugin', 'plugin.json'), 'file'))
465
+ tools.push('Claude Code');
466
+ return tools;
467
+ }
468
+ export async function projectPluginContentOverview(options) {
469
+ let root;
470
+ try {
471
+ root = await fs.realpath(options.plugin.rootDir);
472
+ }
473
+ catch {
474
+ const message = '当前无法安全读取这个插件的目录内容。请检查来源状态后重试。';
475
+ return {
476
+ pluginId: options.pluginId,
477
+ pluginVersion: options.plugin.manifest.version,
478
+ catalogVersion: options.catalogVersion,
479
+ evidence: 'unavailable',
480
+ items: [],
481
+ notices: [message],
482
+ coverage: 'unavailable',
483
+ coverageIssue: { code: 'unreadable', message },
484
+ };
485
+ }
486
+ const items = new Map();
487
+ const coverageIssues = [];
488
+ const platforms = await projectedPlatforms(root);
489
+ const supportedPlatforms = resolveSupportedPlatforms(options.plugin.manifest);
490
+ for (const [platform, tool] of [
491
+ ['codex', 'Codex'], ['claude', 'Claude Code'],
492
+ ]) {
493
+ if (!supportedPlatforms.has(platform) || platforms.includes(tool))
494
+ continue;
495
+ const marker = path.join(root, `.${platform}-plugin`, 'plugin.json');
496
+ const code = await unconfirmedPathCode(root, marker);
497
+ addCoverageIssue(coverageIssues, {
498
+ code, message: `${tool} 平台清单无法安全确认。请检查目录。`,
499
+ });
500
+ }
501
+ const codexOnlyCommands = Boolean(options.plugin.manifest.slashCommands)
502
+ && platforms.includes('Codex') && !platforms.includes('Claude Code');
503
+ const mixedCodexSkills = Boolean(options.plugin.manifest.slashCommands)
504
+ && platforms.includes('Codex')
505
+ && Boolean(options.plugin.manifest.skills || options.plugin.manifest.buildConfig?.fileRules?.codex);
506
+ if (mixedCodexSkills && codexOnlyCommands) {
507
+ addCoverageIssue(coverageIssues, {
508
+ code: 'incompleteList',
509
+ message: 'Codex 内容名称已确认,但当前目录不能安全区分普通 Skill 与 Slash command。请查看来源定义。',
510
+ });
511
+ }
512
+ if (options.plugin.manifest.slashCommands && platforms.includes('Claude Code')) {
513
+ await addSlashCommands({
514
+ root,
515
+ hasCodex: platforms.includes('Codex'),
516
+ items,
517
+ coverageIssues,
518
+ });
519
+ }
520
+ if (options.plugin.manifest.skills) {
521
+ if (platforms.includes('Claude Code')) {
522
+ await addSkillDirectory({
523
+ root, relativePath: 'claude/skills', tool: 'Claude Code', items, coverageIssues,
524
+ });
525
+ }
526
+ if (platforms.includes('Codex')) {
527
+ await addSkillDirectory({
528
+ root, relativePath: 'codex/skills', tool: 'Codex', items, coverageIssues,
529
+ ...(codexOnlyCommands ? { readDescription: false } : {}),
530
+ checkClaudeCommand: Boolean(options.plugin.manifest.slashCommands)
531
+ && platforms.includes('Claude Code'),
532
+ });
533
+ }
534
+ }
535
+ if (codexOnlyCommands && !options.plugin.manifest.skills) {
536
+ await addSkillDirectory({
537
+ root, relativePath: 'codex/skills', tool: 'Codex', items, coverageIssues,
538
+ type: mixedCodexSkills ? 'skill' : 'command',
539
+ readDescription: false,
540
+ });
541
+ }
542
+ if (options.plugin.manifest.slashCommands && platforms.includes('Codex')
543
+ && platforms.includes('Claude Code') && !options.plugin.manifest.skills) {
544
+ await addSkillDirectory({
545
+ root, relativePath: 'codex/skills', tool: 'Codex', items, coverageIssues,
546
+ type: mixedCodexSkills ? 'skill' : 'command',
547
+ readDescription: false,
548
+ checkClaudeCommand: true,
549
+ });
550
+ }
551
+ if (options.plugin.manifest.distributions?.agentSkills?.skills) {
552
+ await addSkillDirectory({
553
+ root, relativePath: 'agent-skills/skills', tool: 'Agent Skills', items, coverageIssues,
554
+ });
555
+ }
556
+ if (options.plugin.manifest.mcpServers) {
557
+ for (const tool of platforms) {
558
+ await addJsonComponents({
559
+ root,
560
+ relativePath: `${tool === 'Codex' ? 'codex' : 'claude'}/${options.plugin.manifest.mcpServers.replace(/^\.\//u, '')}`,
561
+ property: 'mcpServers',
562
+ type: 'mcpServer',
563
+ tool,
564
+ items,
565
+ coverageIssues,
566
+ });
567
+ }
568
+ }
569
+ if (options.plugin.manifest.apps && platforms.includes('Codex')) {
570
+ await addJsonComponents({
571
+ root,
572
+ relativePath: `codex/${options.plugin.manifest.apps.replace(/^\.\//u, '')}`,
573
+ property: 'apps',
574
+ type: 'app',
575
+ tool: 'Codex',
576
+ items,
577
+ coverageIssues,
578
+ });
579
+ }
580
+ for (const agent of options.plugin.manifest.extensions?.agents ?? []) {
581
+ addItem(items, {
582
+ id: `agent:${agent.name}`,
583
+ name: agent.name,
584
+ type: 'agent',
585
+ description: agent.description.trim() || null,
586
+ tools: toolsForOverrides(platforms, agent.agentOverrides),
587
+ descriptionState: agent.description.trim() ? 'available' : 'absent',
588
+ });
589
+ }
590
+ for (const instruction of options.plugin.manifest.extensions?.instructions ?? []) {
591
+ addItem(items, {
592
+ id: `instruction:${instruction.name}`,
593
+ name: instruction.title,
594
+ type: 'instruction',
595
+ description: null,
596
+ tools: toolsForOverrides(platforms, instruction.agentOverrides),
597
+ descriptionState: 'absent',
598
+ });
599
+ }
600
+ for (const permission of options.plugin.manifest.extensions?.permissions ?? []) {
601
+ addItem(items, {
602
+ id: `permission:${permission.name}`,
603
+ name: permission.name,
604
+ type: 'permission',
605
+ description: null,
606
+ tools: toolsForOverrides(platforms, permission.agentOverrides),
607
+ descriptionState: 'absent',
608
+ });
609
+ }
610
+ for (const hook of options.plugin.manifest.extensions?.hooks ?? []) {
611
+ const name = hook.matcher ? `${hook.event} · ${hook.matcher}` : hook.event;
612
+ addItem(items, {
613
+ id: `hook:${hook.event}:${hook.matcher ?? ''}`,
614
+ name,
615
+ type: 'hook',
616
+ description: null,
617
+ tools: toolsForOverrides(platforms, hook.agentOverrides),
618
+ descriptionState: 'absent',
619
+ });
620
+ }
621
+ for (const [platform, hooks] of Object.entries(options.plugin.manifest.extensions?.nativeHooks ?? {})) {
622
+ const tool = platform === 'codex' ? 'Codex' : 'Claude Code';
623
+ for (const hook of hooks ?? []) {
624
+ const name = hook.matcher ? `${hook.event} · ${hook.matcher}` : hook.event;
625
+ addItem(items, {
626
+ id: `hook:${platform}:${hook.event}:${hook.matcher ?? ''}`,
627
+ name,
628
+ type: 'hook',
629
+ description: null,
630
+ tools: [tool],
631
+ descriptionState: 'absent',
632
+ });
633
+ }
634
+ }
635
+ for (const target of options.plugin.manifest.artifacts?.targets ?? []) {
636
+ const tool = targetTool(target.target);
637
+ const type = targetType(target.target);
638
+ if (!tool || !type)
639
+ continue;
640
+ const name = target.skillKey ?? target.roleKey ?? target.id;
641
+ let description = null;
642
+ let issue;
643
+ if (type === 'skill' && target.platform) {
644
+ const skill = await readFrontmatterDescription(root, path.join(root, '.agents-plugin', 'artifact-sources', target.platform, target.id, '0', 'SKILL.md'));
645
+ description = skill.description;
646
+ issue = skill.issue;
647
+ if (!skill.exists) {
648
+ const code = await unconfirmedPathCode(root, path.join(root, '.agents-plugin', 'artifact-sources', target.platform, target.id, '0', 'SKILL.md'));
649
+ if (code !== 'incompleteList')
650
+ issue = {
651
+ code, message: '简介文件不可安全读取。请检查内容目录。',
652
+ };
653
+ }
654
+ }
655
+ addItem(items, {
656
+ id: `artifact:${target.id}`,
657
+ name,
658
+ type,
659
+ description,
660
+ tools: [tool],
661
+ descriptionState: issue ? 'issue' : description ? 'available' : 'absent',
662
+ ...(issue ? { issue } : {}),
663
+ });
664
+ }
665
+ const result = [...items.values()].sort((left, right) => left.type.localeCompare(right.type) || left.name.localeCompare(right.name));
666
+ const coverage = coverageIssues.length === 0
667
+ ? 'complete' : result.length > 0 ? 'partial' : 'unavailable';
668
+ const notices = [...new Set(coverageIssues.map((issue) => issue.message))];
669
+ return {
670
+ pluginId: options.pluginId,
671
+ pluginVersion: options.plugin.manifest.version,
672
+ catalogVersion: options.catalogVersion,
673
+ evidence: 'catalogBundle',
674
+ items: result,
675
+ notices,
676
+ coverage,
677
+ ...(coverageIssues[0] ? { coverageIssue: coverageIssues[0] } : {}),
678
+ };
679
+ }
680
+ //# sourceMappingURL=plugin-content.js.map