@lesliechan721/aw 0.1.0-beta.3

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 (429) hide show
  1. package/dist/authoring/assets/aw-config.d.mts +2 -0
  2. package/dist/authoring/assets/aw-config.mjs +556 -0
  3. package/dist/authoring/assets/aw-config.mjs.map +1 -0
  4. package/dist/authoring/scripts/add-skill.d.mts +2 -0
  5. package/dist/authoring/scripts/add-skill.mjs +355 -0
  6. package/dist/authoring/scripts/add-skill.mjs.map +1 -0
  7. package/dist/authoring/scripts/check-plugin-versions.d.mts +2 -0
  8. package/dist/authoring/scripts/check-plugin-versions.mjs +5 -0
  9. package/dist/authoring/scripts/check-plugin-versions.mjs.map +1 -0
  10. package/dist/authoring/scripts/init-plugin.d.mts +2 -0
  11. package/dist/authoring/scripts/init-plugin.mjs +512 -0
  12. package/dist/authoring/scripts/init-plugin.mjs.map +1 -0
  13. package/dist/authoring/scripts/lib/javascript-import-scanner.d.mts +4 -0
  14. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs +261 -0
  15. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs.map +1 -0
  16. package/dist/authoring/scripts/lib/plugin-root.d.mts +26 -0
  17. package/dist/authoring/scripts/lib/plugin-root.mjs +125 -0
  18. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -0
  19. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +55 -0
  20. package/dist/authoring/scripts/lib/plugin-version-check.mjs +777 -0
  21. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -0
  22. package/dist/authoring/scripts/lib/semver.d.mts +9 -0
  23. package/dist/authoring/scripts/lib/semver.mjs +63 -0
  24. package/dist/authoring/scripts/lib/semver.mjs.map +1 -0
  25. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +124 -0
  26. package/dist/authoring/scripts/lib/skill-scaffold.mjs +374 -0
  27. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -0
  28. package/dist/authoring/scripts/plugin-status.d.mts +2 -0
  29. package/dist/authoring/scripts/plugin-status.mjs +96 -0
  30. package/dist/authoring/scripts/plugin-status.mjs.map +1 -0
  31. package/dist/authoring/scripts/validate-plugin.d.mts +2 -0
  32. package/dist/authoring/scripts/validate-plugin.mjs +4442 -0
  33. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -0
  34. package/dist/authoring/scripts/validate-skill.d.mts +2 -0
  35. package/dist/authoring/scripts/validate-skill.mjs +126 -0
  36. package/dist/authoring/scripts/validate-skill.mjs.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +8 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/scripts/aw-skill-eval-engine.d.ts +13 -0
  41. package/dist/scripts/aw-skill-eval-engine.js +31 -0
  42. package/dist/scripts/aw-skill-eval-engine.js.map +1 -0
  43. package/dist/scripts/bundle-plugins.d.ts +18 -0
  44. package/dist/scripts/bundle-plugins.js +123 -0
  45. package/dist/scripts/bundle-plugins.js.map +1 -0
  46. package/dist/scripts/codex-eval-app-server.d.ts +89 -0
  47. package/dist/scripts/codex-eval-app-server.js +1228 -0
  48. package/dist/scripts/codex-eval-app-server.js.map +1 -0
  49. package/dist/scripts/codex-eval-isolation.d.ts +61 -0
  50. package/dist/scripts/codex-eval-isolation.js +318 -0
  51. package/dist/scripts/codex-eval-isolation.js.map +1 -0
  52. package/dist/scripts/codex-eval-process-management.d.ts +8 -0
  53. package/dist/scripts/codex-eval-process-management.js +69 -0
  54. package/dist/scripts/codex-eval-process-management.js.map +1 -0
  55. package/dist/scripts/codex-eval-process-tree.d.ts +38 -0
  56. package/dist/scripts/codex-eval-process-tree.js +803 -0
  57. package/dist/scripts/codex-eval-process-tree.js.map +1 -0
  58. package/dist/scripts/codex-eval-runtime-config.d.ts +62 -0
  59. package/dist/scripts/codex-eval-runtime-config.js +843 -0
  60. package/dist/scripts/codex-eval-runtime-config.js.map +1 -0
  61. package/dist/scripts/codex-trigger-eval.d.ts +84 -0
  62. package/dist/scripts/codex-trigger-eval.js +968 -0
  63. package/dist/scripts/codex-trigger-eval.js.map +1 -0
  64. package/dist/scripts/eval-plugin-skills-audited.d.ts +6 -0
  65. package/dist/scripts/eval-plugin-skills-audited.js +261 -0
  66. package/dist/scripts/eval-plugin-skills-audited.js.map +1 -0
  67. package/dist/scripts/eval-plugin-skills.d.ts +45 -0
  68. package/dist/scripts/eval-plugin-skills.js +1586 -0
  69. package/dist/scripts/eval-plugin-skills.js.map +1 -0
  70. package/dist/scripts/eval-run-layout.d.ts +17 -0
  71. package/dist/scripts/eval-run-layout.js +26 -0
  72. package/dist/scripts/eval-run-layout.js.map +1 -0
  73. package/dist/scripts/plugin-eval-contract.d.ts +185 -0
  74. package/dist/scripts/plugin-eval-contract.js +695 -0
  75. package/dist/scripts/plugin-eval-contract.js.map +1 -0
  76. package/dist/scripts/plugin-eval-materializer.d.ts +13 -0
  77. package/dist/scripts/plugin-eval-materializer.js +421 -0
  78. package/dist/scripts/plugin-eval-materializer.js.map +1 -0
  79. package/dist/scripts/plugin-staging.d.ts +43 -0
  80. package/dist/scripts/plugin-staging.js +196 -0
  81. package/dist/scripts/plugin-staging.js.map +1 -0
  82. package/dist/scripts/skill-reporting.d.ts +212 -0
  83. package/dist/scripts/skill-reporting.js +922 -0
  84. package/dist/scripts/skill-reporting.js.map +1 -0
  85. package/dist/scripts/test-plugin-scripts.d.ts +7 -0
  86. package/dist/scripts/test-plugin-scripts.js +674 -0
  87. package/dist/scripts/test-plugin-scripts.js.map +1 -0
  88. package/dist/src/adapters/helpers.d.ts +44 -0
  89. package/dist/src/adapters/helpers.js +95 -0
  90. package/dist/src/adapters/helpers.js.map +1 -0
  91. package/dist/src/authoring/workspace-commands.d.ts +46 -0
  92. package/dist/src/authoring/workspace-commands.js +133 -0
  93. package/dist/src/authoring/workspace-commands.js.map +1 -0
  94. package/dist/src/commands/catalog-publish.d.ts +33 -0
  95. package/dist/src/commands/catalog-publish.js +374 -0
  96. package/dist/src/commands/catalog-publish.js.map +1 -0
  97. package/dist/src/commands/catalog-source.d.ts +111 -0
  98. package/dist/src/commands/catalog-source.js +266 -0
  99. package/dist/src/commands/catalog-source.js.map +1 -0
  100. package/dist/src/commands/console.d.ts +3 -0
  101. package/dist/src/commands/console.js +44 -0
  102. package/dist/src/commands/console.js.map +1 -0
  103. package/dist/src/commands/dependency-operation-plan.d.ts +28 -0
  104. package/dist/src/commands/dependency-operation-plan.js +15 -0
  105. package/dist/src/commands/dependency-operation-plan.js.map +1 -0
  106. package/dist/src/commands/init.d.ts +31 -0
  107. package/dist/src/commands/init.js +63 -0
  108. package/dist/src/commands/init.js.map +1 -0
  109. package/dist/src/commands/options.d.ts +68 -0
  110. package/dist/src/commands/options.js +146 -0
  111. package/dist/src/commands/options.js.map +1 -0
  112. package/dist/src/commands/rebuild-command.d.ts +77 -0
  113. package/dist/src/commands/rebuild-command.js +1681 -0
  114. package/dist/src/commands/rebuild-command.js.map +1 -0
  115. package/dist/src/commands/rebuild-integration.d.ts +94 -0
  116. package/dist/src/commands/rebuild-integration.js +3289 -0
  117. package/dist/src/commands/rebuild-integration.js.map +1 -0
  118. package/dist/src/commands/rebuild-operations.d.ts +110 -0
  119. package/dist/src/commands/rebuild-operations.js +791 -0
  120. package/dist/src/commands/rebuild-operations.js.map +1 -0
  121. package/dist/src/commands/review-publication.d.ts +99 -0
  122. package/dist/src/commands/review-publication.js +904 -0
  123. package/dist/src/commands/review-publication.js.map +1 -0
  124. package/dist/src/commands/runtime.d.ts +176 -0
  125. package/dist/src/commands/runtime.js +746 -0
  126. package/dist/src/commands/runtime.js.map +1 -0
  127. package/dist/src/commands/status-v4.d.ts +102 -0
  128. package/dist/src/commands/status-v4.js +844 -0
  129. package/dist/src/commands/status-v4.js.map +1 -0
  130. package/dist/src/commands/status.d.ts +93 -0
  131. package/dist/src/commands/status.js +442 -0
  132. package/dist/src/commands/status.js.map +1 -0
  133. package/dist/src/commands/wizard.d.ts +57 -0
  134. package/dist/src/commands/wizard.js +58 -0
  135. package/dist/src/commands/wizard.js.map +1 -0
  136. package/dist/src/commands/write-commands.d.ts +7 -0
  137. package/dist/src/commands/write-commands.js +167 -0
  138. package/dist/src/commands/write-commands.js.map +1 -0
  139. package/dist/src/constants.d.ts +25 -0
  140. package/dist/src/constants.js +26 -0
  141. package/dist/src/constants.js.map +1 -0
  142. package/dist/src/generators/agents.d.ts +3 -0
  143. package/dist/src/generators/agents.js +46 -0
  144. package/dist/src/generators/agents.js.map +1 -0
  145. package/dist/src/generators/hooks.d.ts +15 -0
  146. package/dist/src/generators/hooks.js +76 -0
  147. package/dist/src/generators/hooks.js.map +1 -0
  148. package/dist/src/generators/instructions.d.ts +13 -0
  149. package/dist/src/generators/instructions.js +66 -0
  150. package/dist/src/generators/instructions.js.map +1 -0
  151. package/dist/src/generators/local-plugin.d.ts +53 -0
  152. package/dist/src/generators/local-plugin.js +1268 -0
  153. package/dist/src/generators/local-plugin.js.map +1 -0
  154. package/dist/src/generators/permissions.d.ts +10 -0
  155. package/dist/src/generators/permissions.js +37 -0
  156. package/dist/src/generators/permissions.js.map +1 -0
  157. package/dist/src/generators/shared.d.ts +2 -0
  158. package/dist/src/generators/shared.js +15 -0
  159. package/dist/src/generators/shared.js.map +1 -0
  160. package/dist/src/index.d.ts +35 -0
  161. package/dist/src/index.js +2344 -0
  162. package/dist/src/index.js.map +1 -0
  163. package/dist/src/output/command-receipt.d.ts +90 -0
  164. package/dist/src/output/command-receipt.js +129 -0
  165. package/dist/src/output/command-receipt.js.map +1 -0
  166. package/dist/src/output/debug-log.d.ts +4 -0
  167. package/dist/src/output/debug-log.js +97 -0
  168. package/dist/src/output/debug-log.js.map +1 -0
  169. package/dist/src/output/equivalent-command.d.ts +9 -0
  170. package/dist/src/output/equivalent-command.js +39 -0
  171. package/dist/src/output/equivalent-command.js.map +1 -0
  172. package/dist/src/output/model.d.ts +117 -0
  173. package/dist/src/output/model.js +145 -0
  174. package/dist/src/output/model.js.map +1 -0
  175. package/dist/src/output/rebuild-progress.d.ts +21 -0
  176. package/dist/src/output/rebuild-progress.js +138 -0
  177. package/dist/src/output/rebuild-progress.js.map +1 -0
  178. package/dist/src/output/redact.d.ts +3 -0
  179. package/dist/src/output/redact.js +39 -0
  180. package/dist/src/output/redact.js.map +1 -0
  181. package/dist/src/output/reporter.d.ts +9 -0
  182. package/dist/src/output/reporter.js +133 -0
  183. package/dist/src/output/reporter.js.map +1 -0
  184. package/dist/src/portable/commands.d.ts +120 -0
  185. package/dist/src/portable/commands.js +506 -0
  186. package/dist/src/portable/commands.js.map +1 -0
  187. package/dist/src/portable/materializer.d.ts +50 -0
  188. package/dist/src/portable/materializer.js +408 -0
  189. package/dist/src/portable/materializer.js.map +1 -0
  190. package/dist/src/portable/skills-cli.d.ts +43 -0
  191. package/dist/src/portable/skills-cli.js +148 -0
  192. package/dist/src/portable/skills-cli.js.map +1 -0
  193. package/dist/src/tui/components.d.ts +32 -0
  194. package/dist/src/tui/components.js +42 -0
  195. package/dist/src/tui/components.js.map +1 -0
  196. package/dist/src/tui/console-app-v4.d.ts +20 -0
  197. package/dist/src/tui/console-app-v4.js +2613 -0
  198. package/dist/src/tui/console-app-v4.js.map +1 -0
  199. package/dist/src/tui/controller-runtime.d.ts +11 -0
  200. package/dist/src/tui/controller-runtime.js +902 -0
  201. package/dist/src/tui/controller-runtime.js.map +1 -0
  202. package/dist/src/tui/controller.d.ts +367 -0
  203. package/dist/src/tui/controller.js +1724 -0
  204. package/dist/src/tui/controller.js.map +1 -0
  205. package/dist/src/tui/index.d.ts +13 -0
  206. package/dist/src/tui/index.js +14 -0
  207. package/dist/src/tui/index.js.map +1 -0
  208. package/dist/src/tui/keys.d.ts +12 -0
  209. package/dist/src/tui/keys.js +22 -0
  210. package/dist/src/tui/keys.js.map +1 -0
  211. package/dist/src/tui/layout.d.ts +12 -0
  212. package/dist/src/tui/layout.js +19 -0
  213. package/dist/src/tui/layout.js.map +1 -0
  214. package/dist/src/tui/model.d.ts +279 -0
  215. package/dist/src/tui/model.js +652 -0
  216. package/dist/src/tui/model.js.map +1 -0
  217. package/dist/src/tui/prompt.d.ts +8 -0
  218. package/dist/src/tui/prompt.js +242 -0
  219. package/dist/src/tui/prompt.js.map +1 -0
  220. package/dist/src/tui/router.d.ts +153 -0
  221. package/dist/src/tui/router.js +102 -0
  222. package/dist/src/tui/router.js.map +1 -0
  223. package/dist/src/tui/runner.d.ts +11 -0
  224. package/dist/src/tui/runner.js +71 -0
  225. package/dist/src/tui/runner.js.map +1 -0
  226. package/dist/src/tui/theme.d.ts +18 -0
  227. package/dist/src/tui/theme.js +20 -0
  228. package/dist/src/tui/theme.js.map +1 -0
  229. package/dist/src/tui/views.d.ts +57 -0
  230. package/dist/src/tui/views.js +173 -0
  231. package/dist/src/tui/views.js.map +1 -0
  232. package/dist/src/tui/wizard.d.ts +11 -0
  233. package/dist/src/tui/wizard.js +321 -0
  234. package/dist/src/tui/wizard.js.map +1 -0
  235. package/dist/src/types.d.ts +313 -0
  236. package/dist/src/types.js +33 -0
  237. package/dist/src/types.js.map +1 -0
  238. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +12 -0
  239. package/dist/src/utils/active-marketplace-runtime-lock.js +133 -0
  240. package/dist/src/utils/active-marketplace-runtime-lock.js.map +1 -0
  241. package/dist/src/utils/agent-version.d.ts +13 -0
  242. package/dist/src/utils/agent-version.js +172 -0
  243. package/dist/src/utils/agent-version.js.map +1 -0
  244. package/dist/src/utils/artifact-plan.d.ts +26 -0
  245. package/dist/src/utils/artifact-plan.js +444 -0
  246. package/dist/src/utils/artifact-plan.js.map +1 -0
  247. package/dist/src/utils/artifact-renderer.d.ts +124 -0
  248. package/dist/src/utils/artifact-renderer.js +442 -0
  249. package/dist/src/utils/artifact-renderer.js.map +1 -0
  250. package/dist/src/utils/artifact-sources.d.ts +8 -0
  251. package/dist/src/utils/artifact-sources.js +10 -0
  252. package/dist/src/utils/artifact-sources.js.map +1 -0
  253. package/dist/src/utils/aw-home-mutation-lock.d.ts +10 -0
  254. package/dist/src/utils/aw-home-mutation-lock.js +55 -0
  255. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -0
  256. package/dist/src/utils/bundle-integrity.d.ts +3 -0
  257. package/dist/src/utils/bundle-integrity.js +88 -0
  258. package/dist/src/utils/bundle-integrity.js.map +1 -0
  259. package/dist/src/utils/bundle-layout.d.ts +4 -0
  260. package/dist/src/utils/bundle-layout.js +546 -0
  261. package/dist/src/utils/bundle-layout.js.map +1 -0
  262. package/dist/src/utils/catalog-digests.d.ts +8 -0
  263. package/dist/src/utils/catalog-digests.js +108 -0
  264. package/dist/src/utils/catalog-digests.js.map +1 -0
  265. package/dist/src/utils/catalog-manifest-v3.d.ts +2 -0
  266. package/dist/src/utils/catalog-manifest-v3.js +3 -0
  267. package/dist/src/utils/catalog-manifest-v3.js.map +1 -0
  268. package/dist/src/utils/catalog-manifest-v4.d.ts +5 -0
  269. package/dist/src/utils/catalog-manifest-v4.js +106 -0
  270. package/dist/src/utils/catalog-manifest-v4.js.map +1 -0
  271. package/dist/src/utils/catalog-public-error.d.ts +15 -0
  272. package/dist/src/utils/catalog-public-error.js +84 -0
  273. package/dist/src/utils/catalog-public-error.js.map +1 -0
  274. package/dist/src/utils/catalog-runtime-projection.d.ts +36 -0
  275. package/dist/src/utils/catalog-runtime-projection.js +172 -0
  276. package/dist/src/utils/catalog-runtime-projection.js.map +1 -0
  277. package/dist/src/utils/catalog-snapshot.d.ts +8 -0
  278. package/dist/src/utils/catalog-snapshot.js +12 -0
  279. package/dist/src/utils/catalog-snapshot.js.map +1 -0
  280. package/dist/src/utils/catalog-source-cache.d.ts +61 -0
  281. package/dist/src/utils/catalog-source-cache.js +276 -0
  282. package/dist/src/utils/catalog-source-cache.js.map +1 -0
  283. package/dist/src/utils/catalog-source-identity.d.ts +4 -0
  284. package/dist/src/utils/catalog-source-identity.js +118 -0
  285. package/dist/src/utils/catalog-source-identity.js.map +1 -0
  286. package/dist/src/utils/catalog-source-presentation.d.ts +1 -0
  287. package/dist/src/utils/catalog-source-presentation.js +32 -0
  288. package/dist/src/utils/catalog-source-presentation.js.map +1 -0
  289. package/dist/src/utils/catalog-source-references.d.ts +65 -0
  290. package/dist/src/utils/catalog-source-references.js +1418 -0
  291. package/dist/src/utils/catalog-source-references.js.map +1 -0
  292. package/dist/src/utils/catalog-sources.d.ts +39 -0
  293. package/dist/src/utils/catalog-sources.js +293 -0
  294. package/dist/src/utils/catalog-sources.js.map +1 -0
  295. package/dist/src/utils/codex-config.d.ts +124 -0
  296. package/dist/src/utils/codex-config.js +1011 -0
  297. package/dist/src/utils/codex-config.js.map +1 -0
  298. package/dist/src/utils/codex-project-surface.d.ts +3 -0
  299. package/dist/src/utils/codex-project-surface.js +49 -0
  300. package/dist/src/utils/codex-project-surface.js.map +1 -0
  301. package/dist/src/utils/codex-roles.d.ts +71 -0
  302. package/dist/src/utils/codex-roles.js +257 -0
  303. package/dist/src/utils/codex-roles.js.map +1 -0
  304. package/dist/src/utils/codex-skill-staging.d.ts +9 -0
  305. package/dist/src/utils/codex-skill-staging.js +8 -0
  306. package/dist/src/utils/codex-skill-staging.js.map +1 -0
  307. package/dist/src/utils/config-value.d.ts +3 -0
  308. package/dist/src/utils/config-value.js +23 -0
  309. package/dist/src/utils/config-value.js.map +1 -0
  310. package/dist/src/utils/dynamic-skill-tree.d.ts +32 -0
  311. package/dist/src/utils/dynamic-skill-tree.js +436 -0
  312. package/dist/src/utils/dynamic-skill-tree.js.map +1 -0
  313. package/dist/src/utils/file-rules.d.ts +1 -0
  314. package/dist/src/utils/file-rules.js +2 -0
  315. package/dist/src/utils/file-rules.js.map +1 -0
  316. package/dist/src/utils/git-catalog-provider.d.ts +7 -0
  317. package/dist/src/utils/git-catalog-provider.js +510 -0
  318. package/dist/src/utils/git-catalog-provider.js.map +1 -0
  319. package/dist/src/utils/hooks-contract.d.ts +1 -0
  320. package/dist/src/utils/hooks-contract.js +2 -0
  321. package/dist/src/utils/hooks-contract.js.map +1 -0
  322. package/dist/src/utils/json.d.ts +4 -0
  323. package/dist/src/utils/json.js +29 -0
  324. package/dist/src/utils/json.js.map +1 -0
  325. package/dist/src/utils/lifecycle-active-store.d.ts +175 -0
  326. package/dist/src/utils/lifecycle-active-store.js +1276 -0
  327. package/dist/src/utils/lifecycle-active-store.js.map +1 -0
  328. package/dist/src/utils/local-marketplace.d.ts +41 -0
  329. package/dist/src/utils/local-marketplace.js +317 -0
  330. package/dist/src/utils/local-marketplace.js.map +1 -0
  331. package/dist/src/utils/manifest.d.ts +14 -0
  332. package/dist/src/utils/manifest.js +36 -0
  333. package/dist/src/utils/manifest.js.map +1 -0
  334. package/dist/src/utils/marketplace.d.ts +3 -0
  335. package/dist/src/utils/marketplace.js +76 -0
  336. package/dist/src/utils/marketplace.js.map +1 -0
  337. package/dist/src/utils/multi-source-catalog.d.ts +72 -0
  338. package/dist/src/utils/multi-source-catalog.js +402 -0
  339. package/dist/src/utils/multi-source-catalog.js.map +1 -0
  340. package/dist/src/utils/native-cli.d.ts +75 -0
  341. package/dist/src/utils/native-cli.js +435 -0
  342. package/dist/src/utils/native-cli.js.map +1 -0
  343. package/dist/src/utils/orphan-marketplace-cleanup.d.ts +18 -0
  344. package/dist/src/utils/orphan-marketplace-cleanup.js +202 -0
  345. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -0
  346. package/dist/src/utils/ownership.d.ts +130 -0
  347. package/dist/src/utils/ownership.js +766 -0
  348. package/dist/src/utils/ownership.js.map +1 -0
  349. package/dist/src/utils/path-catalog-provider.d.ts +7 -0
  350. package/dist/src/utils/path-catalog-provider.js +87 -0
  351. package/dist/src/utils/path-catalog-provider.js.map +1 -0
  352. package/dist/src/utils/paths.d.ts +41 -0
  353. package/dist/src/utils/paths.js +138 -0
  354. package/dist/src/utils/paths.js.map +1 -0
  355. package/dist/src/utils/platform-entries.d.ts +1 -0
  356. package/dist/src/utils/platform-entries.js +2 -0
  357. package/dist/src/utils/platform-entries.js.map +1 -0
  358. package/dist/src/utils/platform-support.d.ts +1 -0
  359. package/dist/src/utils/platform-support.js +2 -0
  360. package/dist/src/utils/platform-support.js.map +1 -0
  361. package/dist/src/utils/plugin-authoring-capabilities.d.ts +23 -0
  362. package/dist/src/utils/plugin-authoring-capabilities.js +37 -0
  363. package/dist/src/utils/plugin-authoring-capabilities.js.map +1 -0
  364. package/dist/src/utils/plugin-authoring-capabilities.json +92 -0
  365. package/dist/src/utils/plugin-config-write.d.ts +107 -0
  366. package/dist/src/utils/plugin-config-write.js +565 -0
  367. package/dist/src/utils/plugin-config-write.js.map +1 -0
  368. package/dist/src/utils/plugin-config.d.ts +396 -0
  369. package/dist/src/utils/plugin-config.js +1898 -0
  370. package/dist/src/utils/plugin-config.js.map +1 -0
  371. package/dist/src/utils/plugin-dependencies.d.ts +12 -0
  372. package/dist/src/utils/plugin-dependencies.js +162 -0
  373. package/dist/src/utils/plugin-dependencies.js.map +1 -0
  374. package/dist/src/utils/plugin-release.d.ts +2 -0
  375. package/dist/src/utils/plugin-release.js +2 -0
  376. package/dist/src/utils/plugin-release.js.map +1 -0
  377. package/dist/src/utils/plugin-script-contract.d.ts +1 -0
  378. package/dist/src/utils/plugin-script-contract.js +2 -0
  379. package/dist/src/utils/plugin-script-contract.js.map +1 -0
  380. package/dist/src/utils/plugin-scripts.d.ts +172 -0
  381. package/dist/src/utils/plugin-scripts.js +585 -0
  382. package/dist/src/utils/plugin-scripts.js.map +1 -0
  383. package/dist/src/utils/process-lock.d.ts +47 -0
  384. package/dist/src/utils/process-lock.js +532 -0
  385. package/dist/src/utils/process-lock.js.map +1 -0
  386. package/dist/src/utils/process-tree.d.ts +2 -0
  387. package/dist/src/utils/process-tree.js +2 -0
  388. package/dist/src/utils/process-tree.js.map +1 -0
  389. package/dist/src/utils/project-boundary.d.ts +21 -0
  390. package/dist/src/utils/project-boundary.js +95 -0
  391. package/dist/src/utils/project-boundary.js.map +1 -0
  392. package/dist/src/utils/rendered-contract.d.ts +8 -0
  393. package/dist/src/utils/rendered-contract.js +134 -0
  394. package/dist/src/utils/rendered-contract.js.map +1 -0
  395. package/dist/src/utils/runtime-skill-closure.d.ts +13 -0
  396. package/dist/src/utils/runtime-skill-closure.js +863 -0
  397. package/dist/src/utils/runtime-skill-closure.js.map +1 -0
  398. package/dist/src/utils/skill-authoring.d.ts +1 -0
  399. package/dist/src/utils/skill-authoring.js +2 -0
  400. package/dist/src/utils/skill-authoring.js.map +1 -0
  401. package/dist/src/utils/skill-frontmatter-capabilities.d.ts +201 -0
  402. package/dist/src/utils/skill-frontmatter-capabilities.js +5 -0
  403. package/dist/src/utils/skill-frontmatter-capabilities.js.map +1 -0
  404. package/dist/src/utils/skill-frontmatter-capabilities.json +200 -0
  405. package/dist/src/utils/skill-validation.d.ts +37 -0
  406. package/dist/src/utils/skill-validation.js +326 -0
  407. package/dist/src/utils/skill-validation.js.map +1 -0
  408. package/dist/src/utils/slash-commands.d.ts +1 -0
  409. package/dist/src/utils/slash-commands.js +2 -0
  410. package/dist/src/utils/slash-commands.js.map +1 -0
  411. package/dist/src/utils/state-paths.d.ts +13 -0
  412. package/dist/src/utils/state-paths.js +129 -0
  413. package/dist/src/utils/state-paths.js.map +1 -0
  414. package/dist/src/utils/target-eligibility.d.ts +7 -0
  415. package/dist/src/utils/target-eligibility.js +26 -0
  416. package/dist/src/utils/target-eligibility.js.map +1 -0
  417. package/dist/src/utils/target-order.d.ts +7 -0
  418. package/dist/src/utils/target-order.js +10 -0
  419. package/dist/src/utils/target-order.js.map +1 -0
  420. package/dist/src/utils/template-engine.d.ts +1 -0
  421. package/dist/src/utils/template-engine.js +2 -0
  422. package/dist/src/utils/template-engine.js.map +1 -0
  423. package/dist/src/utils/test-path-fence.d.ts +12 -0
  424. package/dist/src/utils/test-path-fence.js +31 -0
  425. package/dist/src/utils/test-path-fence.js.map +1 -0
  426. package/dist/vitest.config.d.ts +2 -0
  427. package/dist/vitest.config.js +16 -0
  428. package/dist/vitest.config.js.map +1 -0
  429. package/package.json +61 -0
@@ -0,0 +1,844 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { hasCodexProjectManagedArtifacts } from '../utils/codex-project-surface.js';
4
+ import { catalogSourceErrorCode, sanitizeCatalogSourceError, } from '../utils/catalog-public-error.js';
5
+ import { calculateCatalogSourceIdentity } from '../utils/catalog-source-identity.js';
6
+ import { canonicalMarketplaceRegistrationNames, inventoryCatalogSourceReferences, inventoryLegacyOwnerReferences, } from '../utils/catalog-source-references.js';
7
+ import { readCatalogSourcesConfigSnapshot, resolveCatalogSourceRef } from '../utils/catalog-sources.js';
8
+ import { formatPluginId, parsePluginId, planPluginSelectorSourceIds, withResolvedMultiSourceCatalog, } from '../utils/multi-source-catalog.js';
9
+ import { assertStrictSemVer, readPluginManifest } from '../utils/manifest.js';
10
+ import { resolveCliPackageRoot } from '../utils/paths.js';
11
+ import { supportsPlatform } from '../utils/platform-support.js';
12
+ import { parsePlatformValue, parseScopeValue } from './options.js';
13
+ import { inspectRebuildTarget } from './rebuild-integration.js';
14
+ import { createNoopReporter } from '../output/reporter.js';
15
+ import { createNoopDebugLogger } from '../output/debug-log.js';
16
+ import { getDefaultNativeCliRunner } from '../utils/native-cli.js';
17
+ import { resolveAwHome } from '../utils/paths.js';
18
+ import { createProjectLocationKey, getClaudeHome, getCodexHome, resolveCanonicalRepoProjectKey, } from '../utils/state-paths.js';
19
+ import { resolveEffectivePluginConfig } from '../utils/plugin-config.js';
20
+ let dependencyInspectionHookForTests;
21
+ export function setStatusDependencyInspectionHookForTests(hook) {
22
+ dependencyInspectionHookForTests = hook;
23
+ }
24
+ function projectStateInventoryError(error, env, cwd) {
25
+ const sanitized = sanitizeCatalogSourceError(error, env, [
26
+ getCodexHome(env),
27
+ getClaudeHome(env),
28
+ path.resolve(cwd),
29
+ ]);
30
+ const native = /(?:Codex|Claude|config\.toml|settings|installed_plugins)/iu.test(sanitized.message);
31
+ const code = native ? 'nativeStateUnreadable' : 'stateInventoryFailed';
32
+ return { code, message: `${code}: ${sanitized.message}`, relevance: { global: true } };
33
+ }
34
+ function inventoryErrorMatchesSelection(options) {
35
+ const relevance = options.error.relevance;
36
+ if (relevance.global)
37
+ return true;
38
+ if (relevance.projectLocationKey
39
+ && relevance.projectLocationKey !== options.currentProjectLocationKey)
40
+ return false;
41
+ if (options.platformExplicit && relevance.platform
42
+ && !options.platforms.includes(relevance.platform))
43
+ return false;
44
+ if (options.scopeExplicit && relevance.scope
45
+ && !options.scopes.includes(relevance.scope))
46
+ return false;
47
+ if (options.selectors.length === 0 || (!relevance.sourceId && !relevance.pluginName))
48
+ return true;
49
+ return options.selectors.some((selector) => (!relevance.pluginName || selector.parsed.pluginName === relevance.pluginName)
50
+ && (!relevance.sourceId
51
+ || selector.parsed.sourceId === undefined
52
+ || selector.parsed.sourceId === relevance.sourceId));
53
+ }
54
+ function projectTargetError(error, env, cwd) {
55
+ const sanitized = sanitizeCatalogSourceError(new Error(error.message), env, [
56
+ getCodexHome(env),
57
+ getClaudeHome(env),
58
+ path.resolve(cwd),
59
+ ]);
60
+ return { code: error.code, message: sanitized.message };
61
+ }
62
+ function sourceRequestedRef(source, cliVersion) {
63
+ return source.type === 'git' ? resolveCatalogSourceRef(source.refPolicy, cliVersion) : 'path';
64
+ }
65
+ function selectedPlatforms(value) {
66
+ const selection = value === undefined ? 'both' : parsePlatformValue(value);
67
+ return selection === 'both' ? ['codex', 'claude'] : [selection];
68
+ }
69
+ function selectedScopes(value) {
70
+ return value === undefined ? ['user', 'project'] : [parseScopeValue(value)];
71
+ }
72
+ function projectedLiveState(options) {
73
+ if (options.inspection.state === 'error'
74
+ || options.inspection.components.some((entry) => entry.state === 'error'))
75
+ return 'error';
76
+ if (options.inspection.components.length === 0
77
+ || options.inspection.components.every((entry) => entry.state === 'absent'))
78
+ return 'absent';
79
+ if (options.inspection.components.some((entry) => entry.state === 'partial'))
80
+ return 'partial';
81
+ const required = new Set(options.required);
82
+ const optional = new Set(options.optional);
83
+ if (options.inspection.components.some((entry) => entry.state === 'present' && !required.has(entry.component) && !optional.has(entry.component))) {
84
+ return 'partial';
85
+ }
86
+ if (!options.required.every((component) => options.inspection.components.some((entry) => entry.component === component && entry.state === 'present')))
87
+ return 'partial';
88
+ if (options.required.length > 0)
89
+ return 'present';
90
+ return options.optional.some((component) => options.inspection.components.some((entry) => entry.component === component && entry.state === 'present')) ? 'present' : 'absent';
91
+ }
92
+ function renderStatusV4(payload, verbose) {
93
+ const lines = [`Catalog sources: ${payload.catalog.sources.length}`];
94
+ for (const source of payload.catalog.sources) {
95
+ lines.push(`${source.primary ? '*' : '-'} ${source.id}: ${source.error ?? source.freshness ?? 'unavailable'}`);
96
+ }
97
+ for (const target of payload.targets) {
98
+ const errors = target.errors.length > 0
99
+ ? ` [${target.errors.map((error) => `${error.code}: ${error.message}`).join('; ')}]`
100
+ : '';
101
+ lines.push(`${target.pluginId} ${target.platform}/${target.scope}: ${target.state}${errors}`);
102
+ if (verbose) {
103
+ for (const component of target.components) {
104
+ const error = component.error
105
+ ? ` [${component.error.code}: ${component.error.message}]`
106
+ : '';
107
+ lines.push(` component ${component.key}: ${component.state}${error}`);
108
+ }
109
+ }
110
+ }
111
+ for (const error of payload.errors)
112
+ lines.push(`Error: ${error.message}`);
113
+ return lines.join('\n');
114
+ }
115
+ export async function statusCommandV4(options) {
116
+ const env = options.env ?? process.env;
117
+ const dependencyPluginCache = new Map();
118
+ const dependencyInspectionCache = new Map();
119
+ const cliVersion = options.cliVersion ?? assertStrictSemVer(JSON.parse(fs.readFileSync(path.join(resolveCliPackageRoot(), 'package.json'), 'utf8')).version, 'packages/cli/package.json version');
120
+ const snapshot = await readCatalogSourcesConfigSnapshot(env);
121
+ const currentProjectKey = await resolveCanonicalRepoProjectKey(options.cwd);
122
+ const currentProjectLocationKey = createProjectLocationKey(currentProjectKey);
123
+ const inventoryErrors = [];
124
+ const ownerInventory = await inventoryCatalogSourceReferences({ cwd: options.cwd, env }).catch(async (error) => {
125
+ inventoryErrors.push(projectStateInventoryError(error, env, options.cwd));
126
+ return inventoryLegacyOwnerReferences({ cwd: options.cwd, env }).catch((fallbackError) => {
127
+ inventoryErrors.push(projectStateInventoryError(fallbackError, env, options.cwd));
128
+ return { inventorySchemaVersion: 1, references: [], errors: [] };
129
+ });
130
+ });
131
+ for (const error of ownerInventory.errors ?? []) {
132
+ const code = error.kind === 'nativeStateRead' ? 'nativeStateUnreadable' : 'stateInventoryFailed';
133
+ inventoryErrors.push({
134
+ code,
135
+ message: `${code}: ${error.kind}@${error.location}: ${error.message}`,
136
+ relevance: error.relevance,
137
+ });
138
+ }
139
+ const configured = new Map(snapshot.config.sources.map((source) => [source.id, source]));
140
+ const requested = options.plugins ?? [];
141
+ const platforms = selectedPlatforms(options.platform);
142
+ const scopes = selectedScopes(options.scope);
143
+ const selectorErrors = [];
144
+ const parsedSelectors = [];
145
+ const plannedSelectors = [];
146
+ const liveOnlySelectors = [];
147
+ for (const selector of requested) {
148
+ let parsed;
149
+ try {
150
+ parsed = parsePluginId(selector);
151
+ }
152
+ catch (error) {
153
+ selectorErrors.push({
154
+ code: 'invalidPluginSelector',
155
+ message: error instanceof Error ? error.message : String(error),
156
+ });
157
+ continue;
158
+ }
159
+ parsedSelectors.push({ raw: selector, parsed });
160
+ if (parsed.sourceId !== undefined && !configured.has(parsed.sourceId)) {
161
+ const hasLiveReference = ownerInventory.references.some((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
162
+ && reference.sourceId === parsed.sourceId
163
+ && reference.pluginName === parsed.pluginName
164
+ && platforms.includes(reference.platform)
165
+ && scopes.includes(reference.scope)
166
+ && (reference.scope !== 'project' || reference.projectKey === currentProjectKey));
167
+ if (hasLiveReference) {
168
+ liveOnlySelectors.push({ raw: selector, parsed });
169
+ }
170
+ else if (!inventoryErrors.some((error) => inventoryErrorMatchesSelection({
171
+ error,
172
+ selectors: [{ raw: selector, parsed }],
173
+ platformExplicit: options.platform !== undefined,
174
+ scopeExplicit: options.scope !== undefined,
175
+ platforms,
176
+ scopes,
177
+ currentProjectLocationKey,
178
+ }))) {
179
+ selectorErrors.push({
180
+ code: 'pluginNotFound',
181
+ message: `Plugin "${selector}" was not found because catalog source "${parsed.sourceId}" is not configured.`,
182
+ });
183
+ }
184
+ continue;
185
+ }
186
+ plannedSelectors.push({ raw: selector, parsed });
187
+ }
188
+ const selectedInventoryErrors = inventoryErrors.filter((error) => inventoryErrorMatchesSelection({
189
+ error,
190
+ selectors: parsedSelectors,
191
+ platformExplicit: options.platform !== undefined,
192
+ scopeExplicit: options.scope !== undefined,
193
+ platforms,
194
+ scopes,
195
+ currentProjectLocationKey,
196
+ }));
197
+ const plannedSourceIds = requested.length === 0
198
+ ? undefined
199
+ : planPluginSelectorSourceIds(plannedSelectors.map((selector) => selector.parsed));
200
+ const selectedConfiguredSources = plannedSourceIds === undefined
201
+ ? snapshot.config.sources
202
+ : plannedSourceIds.map((sourceId) => configured.get(sourceId));
203
+ const identityEntries = await Promise.all(selectedConfiguredSources.map(async (source) => {
204
+ try {
205
+ return [source.id, { identity: await calculateCatalogSourceIdentity(source) }];
206
+ }
207
+ catch (error) {
208
+ const sanitized = sanitizeCatalogSourceError(error, env);
209
+ return [source.id, {
210
+ error: sanitized.message,
211
+ }];
212
+ }
213
+ }));
214
+ const identities = new Map(identityEntries);
215
+ const catalog = await withResolvedMultiSourceCatalog({
216
+ cliVersion,
217
+ freshnessPolicy: 'cacheFirst',
218
+ configSnapshot: snapshot,
219
+ ...(plannedSourceIds === undefined ? {} : { sourceIds: plannedSourceIds }),
220
+ env,
221
+ consume: async (resolution) => ({
222
+ primarySourceId: resolution.primarySourceId,
223
+ configDigest: resolution.configDigest,
224
+ compositeDigest: resolution.compositeDigest,
225
+ sources: await Promise.all(resolution.sources.map(async (item) => {
226
+ const source = configured.get(item.sourceId);
227
+ const identity = identities.get(item.sourceId);
228
+ const base = {
229
+ id: item.sourceId,
230
+ identity: identity.identity ?? 'unavailable',
231
+ type: source.type,
232
+ primary: source.primary,
233
+ requestedRef: item.resolution?.requestedRef ?? sourceRequestedRef(source, cliVersion),
234
+ };
235
+ if (identity.error || item.error) {
236
+ const error = item.error ?? new Error(identity.error);
237
+ return {
238
+ ...base,
239
+ error: [identity.error, item.error?.message].filter(Boolean).join('; '),
240
+ errorCode: catalogSourceErrorCode(error),
241
+ };
242
+ }
243
+ try {
244
+ const plugins = await Promise.all(item.resolution.manifest.entries.map(async (entry) => {
245
+ const plugin = await readPluginManifest(path.join(item.resolution.rootDir, 'plugins', entry.name), { mode: 'bundle' });
246
+ const claude = supportsPlatform(plugin.manifest, 'claude');
247
+ const codex = supportsPlatform(plugin.manifest, 'codex');
248
+ plugin.sourceId = item.resolution.sourceId;
249
+ plugin.sourceIdentity = item.resolution.sourceIdentity;
250
+ plugin.pluginId = formatPluginId({ sourceId: item.resolution.sourceId, pluginName: entry.name });
251
+ let effectiveConfig;
252
+ let configDiagnostic;
253
+ if (plugin.manifest.config?.schema) {
254
+ try {
255
+ effectiveConfig = await resolveEffectivePluginConfig({
256
+ sourceId: plugin.sourceId,
257
+ sourceIdentity: plugin.sourceIdentity,
258
+ pluginName: plugin.manifest.name,
259
+ manifest: plugin.manifest,
260
+ cwd: options.cwd,
261
+ env,
262
+ });
263
+ }
264
+ catch {
265
+ configDiagnostic = {
266
+ code: 'configReadFailed',
267
+ message: '插件设置当前不可读。未读取或显示设置值。',
268
+ };
269
+ }
270
+ }
271
+ const states = {};
272
+ const defaultMarketplaceName = item.resolution.sourceId === resolution.primarySourceId
273
+ ? 'aw'
274
+ : `aw-${item.resolution.sourceId}`;
275
+ const marketplaceNameFor = (pluginName, platform, scope) => {
276
+ const liveName = ownerInventory.references.find((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
277
+ && reference.sourceId === item.resolution.sourceId
278
+ && reference.sourceIdentity === item.resolution.sourceIdentity
279
+ && reference.pluginName === pluginName
280
+ && reference.platform === platform
281
+ && reference.scope === scope
282
+ && (scope === 'user' || reference.projectKey === currentProjectKey)
283
+ && reference.marketplaceName)?.marketplaceName;
284
+ if (liveName)
285
+ return liveName;
286
+ const registeredNames = canonicalMarketplaceRegistrationNames(ownerInventory.references, item.resolution.sourceId);
287
+ if (registeredNames.length > 1) {
288
+ throw new Error('marketplaceIdentityUnavailable: Multiple canonical native marketplace registrations match the source.');
289
+ }
290
+ return registeredNames[0] ?? defaultMarketplaceName;
291
+ };
292
+ const marketplaceRoot = path.join(resolveAwHome(env), 'marketplaces', item.resolution.sourceId);
293
+ for (const platform of ['codex', 'claude']) {
294
+ states[platform] = {};
295
+ for (const scope of ['user', 'project']) {
296
+ const supported = platform === 'claude'
297
+ ? claude
298
+ : codex && (scope === 'user' || hasCodexProjectManagedArtifacts(plugin));
299
+ if (!supported)
300
+ continue;
301
+ const changedOwner = ownerInventory.references.find((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
302
+ && reference.sourceId === item.resolution.sourceId
303
+ && reference.pluginName === entry.name
304
+ && reference.platform === platform
305
+ && reference.scope === scope
306
+ && (scope === 'user' || reference.projectKey === currentProjectKey)
307
+ && reference.sourceIdentity
308
+ && reference.sourceIdentity !== item.resolution.sourceIdentity);
309
+ if (changedOwner) {
310
+ states[platform][scope] = {
311
+ state: 'error',
312
+ components: [],
313
+ errors: [{
314
+ code: 'sourceChanged',
315
+ message: `sourceChanged: owner at ${changedOwner.location} has a different source identity.`,
316
+ }],
317
+ };
318
+ continue;
319
+ }
320
+ try {
321
+ const marketplaceName = marketplaceNameFor(entry.name, platform, scope);
322
+ const inspected = await inspectRebuildTarget({
323
+ sourceId: item.resolution.sourceId,
324
+ sourceIdentity: item.resolution.sourceIdentity,
325
+ pluginId: plugin.pluginId,
326
+ marketplaceName,
327
+ marketplaceRoot,
328
+ plugin,
329
+ platform,
330
+ scope,
331
+ cwd: options.cwd,
332
+ catalog: {
333
+ rootDir: item.resolution.rootDir,
334
+ source: 'local',
335
+ },
336
+ context: {
337
+ env,
338
+ nativeCliRunner: getDefaultNativeCliRunner(),
339
+ reporter: createNoopReporter(),
340
+ debugLogger: createNoopDebugLogger(),
341
+ },
342
+ });
343
+ const liveState = projectedLiveState({
344
+ inspection: inspected.inspection,
345
+ required: inspected.target.desiredOwnedComponents ?? inspected.target.ownedComponents,
346
+ optional: inspected.target.optionalOwnedComponents ?? [],
347
+ });
348
+ const dependencyErrors = [];
349
+ const directDependencies = plugin.manifest.dependencies ?? [];
350
+ if (directDependencies.length > 0
351
+ && (liveState === 'present' || liveState === 'partial')) {
352
+ for (const dependencyName of directDependencies) {
353
+ const dependencyId = formatPluginId({
354
+ sourceId: item.resolution.sourceId,
355
+ pluginName: dependencyName,
356
+ });
357
+ if (!item.resolution.manifest.entries.some((candidate) => candidate.name === dependencyName)) {
358
+ dependencyErrors.push({
359
+ code: 'dependencyMissing',
360
+ message: `dependencyMissing: ${dependencyId} is not available in the current source snapshot.`,
361
+ });
362
+ continue;
363
+ }
364
+ const pluginCacheKey = [item.resolution.sourceIdentity, dependencyId].join('\0');
365
+ let dependencyPluginPromise = dependencyPluginCache.get(pluginCacheKey);
366
+ if (!dependencyPluginPromise) {
367
+ dependencyPluginPromise = readPluginManifest(path.join(item.resolution.rootDir, 'plugins', dependencyName), { mode: 'bundle' }).then((dependencyPlugin) => {
368
+ dependencyPlugin.sourceId = item.resolution.sourceId;
369
+ dependencyPlugin.sourceIdentity = item.resolution.sourceIdentity;
370
+ dependencyPlugin.pluginId = dependencyId;
371
+ return dependencyPlugin;
372
+ });
373
+ dependencyPluginCache.set(pluginCacheKey, dependencyPluginPromise);
374
+ }
375
+ const placements = scope === 'project' ? ['project', 'user'] : ['user'];
376
+ let dependencyState = 'absent';
377
+ for (const dependencyScope of placements) {
378
+ const inspectionCacheKey = [
379
+ item.resolution.sourceIdentity,
380
+ dependencyId,
381
+ platform,
382
+ dependencyScope,
383
+ dependencyScope === 'project' ? currentProjectKey : '',
384
+ ].join('\0');
385
+ let dependencyInspection = dependencyInspectionCache.get(inspectionCacheKey);
386
+ if (!dependencyInspection) {
387
+ dependencyInspection = dependencyPluginPromise.then(async (dependencyPlugin) => {
388
+ dependencyInspectionHookForTests?.();
389
+ const dependencyMarketplaceName = marketplaceNameFor(dependencyName, platform, dependencyScope);
390
+ const dependencyInspected = await inspectRebuildTarget({
391
+ sourceId: item.resolution.sourceId,
392
+ sourceIdentity: item.resolution.sourceIdentity,
393
+ pluginId: dependencyId,
394
+ marketplaceName: dependencyMarketplaceName,
395
+ marketplaceRoot,
396
+ plugin: dependencyPlugin,
397
+ platform,
398
+ scope: dependencyScope,
399
+ cwd: options.cwd,
400
+ catalog: { rootDir: item.resolution.rootDir, source: 'local' },
401
+ context: {
402
+ env,
403
+ nativeCliRunner: getDefaultNativeCliRunner(),
404
+ reporter: createNoopReporter(),
405
+ debugLogger: createNoopDebugLogger(),
406
+ },
407
+ });
408
+ return projectedLiveState({
409
+ inspection: dependencyInspected.inspection,
410
+ required: dependencyInspected.target.desiredOwnedComponents
411
+ ?? dependencyInspected.target.ownedComponents,
412
+ optional: dependencyInspected.target.optionalOwnedComponents ?? [],
413
+ });
414
+ });
415
+ dependencyInspectionCache.set(inspectionCacheKey, dependencyInspection);
416
+ }
417
+ const candidateState = await dependencyInspection;
418
+ if (candidateState === 'present') {
419
+ dependencyState = 'present';
420
+ break;
421
+ }
422
+ if (candidateState !== 'absent')
423
+ dependencyState = candidateState;
424
+ }
425
+ if (dependencyState === 'absent') {
426
+ dependencyErrors.push({
427
+ code: 'dependencyMissing',
428
+ message: `dependencyMissing: ${dependencyId} is absent from its required live placement.`,
429
+ });
430
+ }
431
+ else if (dependencyState !== 'present') {
432
+ dependencyErrors.push({
433
+ code: 'dependencyNotReady',
434
+ message: `dependencyNotReady: ${dependencyId} is not ready at its required live placement.`,
435
+ });
436
+ }
437
+ }
438
+ }
439
+ states[platform][scope] = {
440
+ state: dependencyErrors.length > 0 && liveState === 'present' ? 'partial' : liveState,
441
+ errors: [...inspected.inspection.errors.map((error) => ({
442
+ code: 'componentInspectionFailed',
443
+ message: `${error.label}: ${error.message}`,
444
+ })), ...dependencyErrors],
445
+ components: options.verbose === true
446
+ ? inspected.inspection.components.map((component) => {
447
+ const projectedError = component.diagnostic
448
+ ? projectTargetError({
449
+ code: 'componentInspectionFailed',
450
+ message: component.diagnostic,
451
+ }, env, options.cwd)
452
+ : undefined;
453
+ return {
454
+ key: component.component.identity.artifactKey,
455
+ state: component.state,
456
+ ...(projectedError ? { error: projectedError } : {}),
457
+ };
458
+ })
459
+ : [],
460
+ };
461
+ }
462
+ catch (error) {
463
+ const message = error instanceof Error ? error.message : String(error);
464
+ const code = message.split(':', 1)[0] || 'targetInspectionFailed';
465
+ states[platform][scope] = {
466
+ state: 'error',
467
+ components: [],
468
+ errors: [{ code, message }],
469
+ };
470
+ }
471
+ }
472
+ }
473
+ return {
474
+ name: entry.name,
475
+ version: entry.version,
476
+ displayName: plugin.manifest.interface?.displayName ?? entry.name,
477
+ shortDescription: plugin.manifest.interface?.shortDescription
478
+ ?? plugin.manifest.description,
479
+ description: plugin.manifest.description,
480
+ ...(plugin.manifest.config?.schema
481
+ ? { configSchema: plugin.manifest.config.schema }
482
+ : {}),
483
+ ...(effectiveConfig?.issues.length
484
+ ? {
485
+ configIssues: effectiveConfig.issues.map((issue) => ({
486
+ type: issue.type,
487
+ key: issue.key,
488
+ title: plugin.manifest.config.schema[issue.key]?.title ?? issue.key,
489
+ source: issue.source ?? 'missing',
490
+ })),
491
+ }
492
+ : {}),
493
+ ...(configDiagnostic ? { configDiagnostic } : {}),
494
+ targets: {
495
+ claude: { user: claude, project: claude },
496
+ codex: {
497
+ user: codex,
498
+ project: codex && hasCodexProjectManagedArtifacts(plugin),
499
+ },
500
+ },
501
+ states,
502
+ dependencies: plugin.manifest.dependencies ?? [],
503
+ };
504
+ }));
505
+ return {
506
+ ...base,
507
+ resolvedCommit: item.resolution.resolvedCommit,
508
+ catalogVersion: item.resolution.manifest.catalogVersion,
509
+ channel: item.resolution.manifest.channel,
510
+ freshness: item.resolution.source,
511
+ plugins,
512
+ };
513
+ }
514
+ catch (error) {
515
+ const sanitized = sanitizeCatalogSourceError(error, env);
516
+ return {
517
+ ...base,
518
+ error: sanitized.message,
519
+ errorCode: catalogSourceErrorCode(sanitized),
520
+ };
521
+ }
522
+ })),
523
+ }),
524
+ });
525
+ const available = catalog.sources.flatMap((source) => 'plugins' in source
526
+ ? source.plugins.map((plugin) => ({ ...plugin, source }))
527
+ : []);
528
+ const failedSourceIds = new Set(catalog.sources.filter((source) => 'error' in source).map((source) => source.id));
529
+ const selectedById = new Map();
530
+ if (requested.length === 0) {
531
+ for (const entry of available) {
532
+ selectedById.set(formatPluginId({ sourceId: entry.source.id, pluginName: entry.name }), entry);
533
+ }
534
+ }
535
+ else {
536
+ for (const selector of plannedSelectors) {
537
+ if (selector.parsed.sourceId === undefined && failedSourceIds.size > 0) {
538
+ selectorErrors.push({
539
+ code: 'catalogSourceUnavailable',
540
+ message: `Cannot resolve bare plugin selector "${selector.raw}" while catalog sources are unavailable: ${[...failedSourceIds].join(', ')}.`,
541
+ });
542
+ continue;
543
+ }
544
+ if (selector.parsed.sourceId !== undefined && failedSourceIds.has(selector.parsed.sourceId)) {
545
+ selectorErrors.push({
546
+ code: 'catalogSourceUnavailable',
547
+ message: `Cannot resolve plugin selector "${selector.raw}" because catalog source "${selector.parsed.sourceId}" is unavailable.`,
548
+ });
549
+ continue;
550
+ }
551
+ const matches = available.filter((entry) => entry.name === selector.parsed.pluginName
552
+ && (selector.parsed.sourceId === undefined || entry.source.id === selector.parsed.sourceId));
553
+ if (matches.length === 0) {
554
+ const selectorHasInventoryError = selectedInventoryErrors.some((error) => inventoryErrorMatchesSelection({
555
+ error,
556
+ selectors: [selector],
557
+ platformExplicit: options.platform !== undefined,
558
+ scopeExplicit: options.scope !== undefined,
559
+ platforms,
560
+ scopes,
561
+ currentProjectLocationKey,
562
+ }));
563
+ if (!selectorHasInventoryError) {
564
+ selectorErrors.push({
565
+ code: 'pluginNotFound',
566
+ message: `Plugin "${selector.raw}" was not found in the selected catalog source set.`,
567
+ });
568
+ }
569
+ continue;
570
+ }
571
+ if (selector.parsed.sourceId === undefined && matches.length > 1) {
572
+ selectorErrors.push({
573
+ code: 'ambiguousPlugin',
574
+ message: `Plugin "${selector.raw}" is ambiguous across sources: ${matches.map((entry) => entry.source.id).join(', ')}.`,
575
+ });
576
+ continue;
577
+ }
578
+ for (const entry of matches) {
579
+ selectedById.set(formatPluginId({ sourceId: entry.source.id, pluginName: entry.name }), entry);
580
+ }
581
+ }
582
+ }
583
+ const selected = [...selectedById.values()];
584
+ const explicitTargetFilter = requested.length > 0
585
+ && (options.platform !== undefined || options.scope !== undefined);
586
+ const targets = selected.flatMap((entry) => platforms.flatMap((platform) => scopes.flatMap((scope) => {
587
+ const target = {
588
+ pluginName: entry.name,
589
+ sourceId: entry.source.id,
590
+ sourceIdentity: entry.source.identity,
591
+ pluginId: formatPluginId({ sourceId: entry.source.id, pluginName: entry.name }),
592
+ version: entry.version,
593
+ platform,
594
+ scope,
595
+ cwd: path.resolve(options.cwd),
596
+ components: [],
597
+ };
598
+ if (entry.targets[platform][scope]) {
599
+ const live = entry.states[platform]?.[scope];
600
+ const dependencyIssueCount = (live?.errors ?? []).filter((error) => error.code.startsWith('dependency') || error.code === 'sourceChanged').length;
601
+ return [{
602
+ ...target,
603
+ state: live?.state ?? 'error',
604
+ components: live?.components ?? [],
605
+ errors: live?.errors ?? [{
606
+ code: 'targetInspectionFailed',
607
+ message: `No live inspection result exists for ${entry.source.id}/${entry.name}.`,
608
+ }],
609
+ ...(entry.dependencies.length > 0 || dependencyIssueCount > 0 ? {
610
+ dependency: {
611
+ directCount: entry.dependencies.length,
612
+ issueCount: dependencyIssueCount,
613
+ },
614
+ } : {}),
615
+ }];
616
+ }
617
+ const unsupportedLiveReference = ownerInventory.references.find((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
618
+ && reference.sourceId === entry.source.id
619
+ && reference.pluginName === entry.name
620
+ && reference.platform === platform
621
+ && reference.scope === scope
622
+ && (scope === 'user' || reference.projectKey === currentProjectKey));
623
+ if (unsupportedLiveReference) {
624
+ const sourceChanged = Boolean(unsupportedLiveReference.sourceIdentity
625
+ && unsupportedLiveReference.sourceIdentity !== entry.source.identity);
626
+ return [{
627
+ ...target,
628
+ state: 'error',
629
+ errors: [{
630
+ code: sourceChanged ? 'sourceChanged' : 'noLongerSupported',
631
+ message: sourceChanged
632
+ ? `sourceChanged: live state for ${target.pluginId} has a different source identity.`
633
+ : `noLongerSupported: ${target.pluginId} has live state for ${platform}/${scope}, but the current bundle no longer supports that target.`,
634
+ }],
635
+ }];
636
+ }
637
+ if (!explicitTargetFilter)
638
+ return [];
639
+ return [{
640
+ ...target,
641
+ state: 'error',
642
+ errors: [{
643
+ code: 'unsupportedTarget',
644
+ message: `${entry.source.id}/${entry.name} does not support ${platform}/${scope}.`,
645
+ }],
646
+ }];
647
+ })));
648
+ const referenceSelectors = [...plannedSelectors, ...liveOnlySelectors];
649
+ const referenceSelected = (reference) => (reference.pluginName !== undefined
650
+ && reference.platform !== undefined
651
+ && reference.scope !== undefined
652
+ && platforms.includes(reference.platform)
653
+ && scopes.includes(reference.scope)
654
+ && (reference.scope !== 'project' || reference.projectKey === currentProjectKey)
655
+ && (requested.length === 0 || referenceSelectors.some((selector) => selector.parsed.pluginName === reference.pluginName
656
+ && (selector.parsed.sourceId === undefined || selector.parsed.sourceId === reference.sourceId))));
657
+ const legacyOwners = ownerInventory.references.filter((reference) => (reference.kind === 'legacyOwner' || reference.kind === 'legacyMarketplace')
658
+ && reference.pluginName !== undefined
659
+ && reference.platform !== undefined
660
+ && reference.scope !== undefined
661
+ && platforms.includes(reference.platform)
662
+ && scopes.includes(reference.scope)
663
+ && (requested.length === 0 || plannedSelectors.some((selector) => selector.parsed.pluginName === reference.pluginName)));
664
+ const missingSourceOwners = ownerInventory.references.filter((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
665
+ && reference.sourceId
666
+ && !configured.has(reference.sourceId)
667
+ && referenceSelected(reference));
668
+ const missingTargets = [...new Map(missingSourceOwners.flatMap((reference) => {
669
+ if (!reference.sourceId || !reference.pluginName
670
+ || (reference.platform !== 'codex' && reference.platform !== 'claude')
671
+ || (reference.scope !== 'user' && reference.scope !== 'project'))
672
+ return [];
673
+ const pluginId = formatPluginId({ sourceId: reference.sourceId, pluginName: reference.pluginName });
674
+ const target = {
675
+ pluginName: reference.pluginName,
676
+ sourceId: reference.sourceId,
677
+ sourceIdentity: reference.sourceIdentity ?? 'unavailable',
678
+ pluginId,
679
+ platform: reference.platform,
680
+ scope: reference.scope,
681
+ cwd: path.resolve(options.cwd),
682
+ state: 'error',
683
+ components: [],
684
+ errors: [{
685
+ code: 'sourceMissing',
686
+ message: `sourceMissing: catalog source "${reference.sourceId}" is not configured for ${pluginId}.`,
687
+ }],
688
+ };
689
+ return [[`${pluginId}\0${reference.platform}\0${reference.scope}`, target]];
690
+ })).values()];
691
+ targets.push(...missingTargets);
692
+ const unavailableSourceReferences = ownerInventory.references.filter((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
693
+ && reference.sourceId
694
+ && configured.has(reference.sourceId)
695
+ && failedSourceIds.has(reference.sourceId)
696
+ && referenceSelected(reference));
697
+ const unavailableSourceTargets = [...new Map(unavailableSourceReferences.flatMap((reference) => {
698
+ if (!reference.sourceId || !reference.pluginName
699
+ || (reference.platform !== 'codex' && reference.platform !== 'claude')
700
+ || (reference.scope !== 'user' && reference.scope !== 'project'))
701
+ return [];
702
+ const pluginId = formatPluginId({ sourceId: reference.sourceId, pluginName: reference.pluginName });
703
+ const target = {
704
+ pluginName: reference.pluginName,
705
+ sourceId: reference.sourceId,
706
+ sourceIdentity: reference.sourceIdentity ?? 'unavailable',
707
+ pluginId,
708
+ platform: reference.platform,
709
+ scope: reference.scope,
710
+ cwd: path.resolve(options.cwd),
711
+ state: 'error',
712
+ components: [],
713
+ errors: [{
714
+ code: 'catalogSourceUnavailable',
715
+ message: `catalogSourceUnavailable: catalog source "${reference.sourceId}" is unavailable for ${pluginId}.`,
716
+ }],
717
+ };
718
+ return [[`${pluginId}\0${reference.platform}\0${reference.scope}`, target]];
719
+ })).values()];
720
+ targets.push(...unavailableSourceTargets);
721
+ const availablePluginIds = new Set(available.map((entry) => formatPluginId({ sourceId: entry.source.id, pluginName: entry.name })));
722
+ const resolvedSourceIds = new Set(catalog.sources.flatMap((source) => 'plugins' in source ? [source.id] : []));
723
+ const unavailableBundleReferences = ownerInventory.references.filter((reference) => (reference.kind === 'namespacedOwner' || reference.kind === 'namespacedMarketplace')
724
+ && reference.sourceId
725
+ && configured.has(reference.sourceId)
726
+ && resolvedSourceIds.has(reference.sourceId)
727
+ && reference.pluginName
728
+ && referenceSelected(reference)
729
+ && !availablePluginIds.has(formatPluginId({
730
+ sourceId: reference.sourceId,
731
+ pluginName: reference.pluginName,
732
+ })));
733
+ const unavailableBundleTargets = [...new Map(unavailableBundleReferences.flatMap((reference) => {
734
+ if (!reference.sourceId || !reference.pluginName
735
+ || (reference.platform !== 'codex' && reference.platform !== 'claude')
736
+ || (reference.scope !== 'user' && reference.scope !== 'project'))
737
+ return [];
738
+ const pluginId = formatPluginId({ sourceId: reference.sourceId, pluginName: reference.pluginName });
739
+ if (requested.length > 0 && !plannedSelectors.some((selector) => selector.parsed.pluginName === reference.pluginName
740
+ && (selector.parsed.sourceId === undefined || selector.parsed.sourceId === reference.sourceId)))
741
+ return [];
742
+ const target = {
743
+ pluginName: reference.pluginName,
744
+ sourceId: reference.sourceId,
745
+ sourceIdentity: reference.sourceIdentity ?? 'unavailable',
746
+ pluginId,
747
+ platform: reference.platform,
748
+ scope: reference.scope,
749
+ cwd: path.resolve(options.cwd),
750
+ state: 'error',
751
+ components: [],
752
+ errors: [{
753
+ code: 'bundleUnavailable',
754
+ message: `bundleUnavailable: ${pluginId} has live state but is not present in the current source snapshot.`,
755
+ }],
756
+ };
757
+ return [[`${pluginId}\0${reference.platform}\0${reference.scope}`, target]];
758
+ })).values()];
759
+ targets.push(...unavailableBundleTargets);
760
+ const projectedInventoryErrors = [...new Map(selectedInventoryErrors.map((error) => [
761
+ `${error.code}\0${error.message}`,
762
+ { code: error.code, message: error.message },
763
+ ])).values()];
764
+ const errors = [
765
+ ...projectedInventoryErrors,
766
+ ...selectorErrors,
767
+ ...legacyOwners.map((reference) => projectTargetError({
768
+ code: 'legacyStateUnsupported',
769
+ message: `legacyStateUnsupported: legacy live ${reference.kind} at ${reference.location}`,
770
+ }, env, options.cwd)),
771
+ ];
772
+ const projectedTargets = targets.map((target) => ({
773
+ ...target,
774
+ errors: target.errors.map((error) => projectTargetError(error, env, options.cwd)),
775
+ }));
776
+ const payload = {
777
+ schemaVersion: 4,
778
+ catalog: {
779
+ primarySourceId: catalog.primarySourceId,
780
+ configDigest: catalog.configDigest,
781
+ compositeDigest: catalog.compositeDigest,
782
+ sources: catalog.sources.map((source) => {
783
+ if (!('plugins' in source))
784
+ return source;
785
+ const { plugins: _plugins, ...projected } = source;
786
+ return projected;
787
+ }),
788
+ },
789
+ filters: {
790
+ plugins: requested,
791
+ platform: options.platform === undefined ? 'both' : parsePlatformValue(options.platform),
792
+ ...(options.scope === undefined ? {} : { scope: parseScopeValue(options.scope) }),
793
+ cwd: path.resolve(options.cwd),
794
+ },
795
+ targets: projectedTargets,
796
+ errors,
797
+ };
798
+ const hasErrors = payload.catalog.sources.some((source) => source.error !== undefined)
799
+ || payload.errors.length > 0
800
+ || payload.targets.some((target) => target.state === 'error');
801
+ return {
802
+ payload,
803
+ output: options.json ? JSON.stringify(payload) : renderStatusV4(payload, options.verbose === true),
804
+ hasErrors,
805
+ pluginSummaries: available.map((entry) => {
806
+ const sourceEntries = available.filter((candidate) => candidate.source.id === entry.source.id);
807
+ const byName = new Map(sourceEntries.map((candidate) => [candidate.name, candidate]));
808
+ const transitive = new Set();
809
+ const visit = (name) => {
810
+ const candidate = byName.get(name);
811
+ for (const dependency of candidate?.dependencies ?? []) {
812
+ if (transitive.has(dependency))
813
+ continue;
814
+ transitive.add(dependency);
815
+ visit(dependency);
816
+ }
817
+ };
818
+ visit(entry.name);
819
+ const dependencyIssueCount = targets.filter((target) => target.pluginId === formatPluginId({
820
+ sourceId: entry.source.id,
821
+ pluginName: entry.name,
822
+ })).reduce((count, target) => count + target.errors.filter((error) => error.code.startsWith('dependency') || error.code === 'sourceChanged').length, 0);
823
+ return {
824
+ pluginName: entry.name,
825
+ pluginId: formatPluginId({ sourceId: entry.source.id, pluginName: entry.name }),
826
+ displayName: entry.displayName,
827
+ description: entry.shortDescription,
828
+ version: entry.version,
829
+ supportedTargets: {
830
+ codex: ['user', 'project'].filter((scope) => entry.targets.codex[scope]),
831
+ claude: ['user', 'project'].filter((scope) => entry.targets.claude[scope]),
832
+ },
833
+ configFieldCount: Object.keys(entry.configSchema ?? {}).length,
834
+ ...(entry.configSchema ? { configSchema: entry.configSchema } : {}),
835
+ ...(entry.configIssues ? { configIssues: entry.configIssues } : {}),
836
+ ...(entry.configDiagnostic ? { configDiagnostic: entry.configDiagnostic } : {}),
837
+ dependencyDirectCount: entry.dependencies.length,
838
+ dependencyTotalCount: transitive.size,
839
+ dependencyIssueCount,
840
+ };
841
+ }),
842
+ };
843
+ }
844
+ //# sourceMappingURL=status-v4.js.map