@agentxm/client-core 0.2.0 → 0.3.1

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 (355) hide show
  1. package/dist/src/unstable/commands/operations/disable.d.ts +2 -2
  2. package/dist/src/unstable/commands/operations/disable.d.ts.map +1 -1
  3. package/dist/src/unstable/commands/operations/enable.d.ts +2 -2
  4. package/dist/src/unstable/commands/operations/enable.d.ts.map +1 -1
  5. package/dist/src/unstable/commands/operations/install.d.ts +1 -1
  6. package/dist/src/unstable/commands/operations/install.d.ts.map +1 -1
  7. package/dist/src/unstable/commands/operations/new-command.d.ts +2 -2
  8. package/dist/src/unstable/commands/operations/new-command.d.ts.map +1 -1
  9. package/dist/src/unstable/commands/operations/publish.d.ts +1 -1
  10. package/dist/src/unstable/commands/operations/publish.d.ts.map +1 -1
  11. package/dist/src/unstable/commands/operations/uninstall.d.ts +1 -1
  12. package/dist/src/unstable/commands/operations/uninstall.d.ts.map +1 -1
  13. package/dist/src/unstable/extensions/operations.d.ts +1 -1
  14. package/dist/src/unstable/extensions/operations.d.ts.map +1 -1
  15. package/dist/src/unstable/lint/catalog/index.d.ts +39 -0
  16. package/dist/src/unstable/lint/catalog/index.d.ts.map +1 -0
  17. package/dist/src/unstable/lint/catalog/index.js +49 -0
  18. package/dist/src/unstable/lint/catalog/index.js.map +1 -0
  19. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.d.ts +31 -0
  20. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.d.ts.map +1 -0
  21. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.js +41 -0
  22. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.js.map +1 -0
  23. package/dist/src/unstable/lint/catalog/pack/manifest-present.d.ts +18 -0
  24. package/dist/src/unstable/lint/catalog/pack/manifest-present.d.ts.map +1 -0
  25. package/dist/src/unstable/lint/catalog/pack/manifest-present.js +41 -0
  26. package/dist/src/unstable/lint/catalog/pack/manifest-present.js.map +1 -0
  27. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.d.ts +26 -0
  28. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.d.ts.map +1 -0
  29. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.js +34 -0
  30. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.js.map +1 -0
  31. package/dist/src/unstable/lint/catalog/pack-accessor/contexts.d.ts +61 -0
  32. package/dist/src/unstable/lint/catalog/pack-accessor/contexts.d.ts.map +1 -0
  33. package/dist/src/unstable/lint/catalog/pack-accessor/contexts.js +46 -0
  34. package/dist/src/unstable/lint/catalog/pack-accessor/contexts.js.map +1 -0
  35. package/dist/src/unstable/lint/catalog/pack-accessor/platform.d.ts +53 -0
  36. package/dist/src/unstable/lint/catalog/pack-accessor/platform.d.ts.map +1 -0
  37. package/dist/src/unstable/lint/catalog/pack-accessor/platform.js +90 -0
  38. package/dist/src/unstable/lint/catalog/pack-accessor/platform.js.map +1 -0
  39. package/dist/src/unstable/lint/catalog/pack-accessor/vft.d.ts +60 -0
  40. package/dist/src/unstable/lint/catalog/pack-accessor/vft.d.ts.map +1 -0
  41. package/dist/src/unstable/lint/catalog/pack-accessor/vft.js +85 -0
  42. package/dist/src/unstable/lint/catalog/pack-accessor/vft.js.map +1 -0
  43. package/dist/src/unstable/lint/catalog/pack.d.ts +37 -0
  44. package/dist/src/unstable/lint/catalog/pack.d.ts.map +1 -0
  45. package/dist/src/unstable/lint/catalog/pack.js +47 -0
  46. package/dist/src/unstable/lint/catalog/pack.js.map +1 -0
  47. package/dist/src/unstable/lint/catalog/shared/schema-rule.d.ts +59 -0
  48. package/dist/src/unstable/lint/catalog/shared/schema-rule.d.ts.map +1 -0
  49. package/dist/src/unstable/lint/catalog/shared/schema-rule.js +99 -0
  50. package/dist/src/unstable/lint/catalog/shared/schema-rule.js.map +1 -0
  51. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.d.ts +31 -0
  52. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.d.ts.map +1 -0
  53. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.js +151 -0
  54. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.js.map +1 -0
  55. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.d.ts +26 -0
  56. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.d.ts.map +1 -0
  57. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.js +41 -0
  58. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.js.map +1 -0
  59. package/dist/src/unstable/lint/catalog/skill/manifest-present.d.ts +18 -0
  60. package/dist/src/unstable/lint/catalog/skill/manifest-present.d.ts.map +1 -0
  61. package/dist/src/unstable/lint/catalog/skill/manifest-present.js +46 -0
  62. package/dist/src/unstable/lint/catalog/skill/manifest-present.js.map +1 -0
  63. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.d.ts +22 -0
  64. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.d.ts.map +1 -0
  65. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.js +37 -0
  66. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.js.map +1 -0
  67. package/dist/src/unstable/lint/catalog/skill/skill-md-present.d.ts +17 -0
  68. package/dist/src/unstable/lint/catalog/skill/skill-md-present.d.ts.map +1 -0
  69. package/dist/src/unstable/lint/catalog/skill/skill-md-present.js +38 -0
  70. package/dist/src/unstable/lint/catalog/skill/skill-md-present.js.map +1 -0
  71. package/dist/src/unstable/lint/catalog/skill-accessor/contexts.d.ts +65 -0
  72. package/dist/src/unstable/lint/catalog/skill-accessor/contexts.d.ts.map +1 -0
  73. package/dist/src/unstable/lint/catalog/skill-accessor/contexts.js +50 -0
  74. package/dist/src/unstable/lint/catalog/skill-accessor/contexts.js.map +1 -0
  75. package/dist/src/unstable/lint/catalog/skill-accessor/platform.d.ts +52 -0
  76. package/dist/src/unstable/lint/catalog/skill-accessor/platform.d.ts.map +1 -0
  77. package/dist/src/unstable/lint/catalog/skill-accessor/platform.js +89 -0
  78. package/dist/src/unstable/lint/catalog/skill-accessor/platform.js.map +1 -0
  79. package/dist/src/unstable/lint/catalog/skill-accessor/vft.d.ts +58 -0
  80. package/dist/src/unstable/lint/catalog/skill-accessor/vft.d.ts.map +1 -0
  81. package/dist/src/unstable/lint/catalog/skill-accessor/vft.js +83 -0
  82. package/dist/src/unstable/lint/catalog/skill-accessor/vft.js.map +1 -0
  83. package/dist/src/unstable/lint/catalog/skill.d.ts +38 -0
  84. package/dist/src/unstable/lint/catalog/skill.d.ts.map +1 -0
  85. package/dist/src/unstable/lint/catalog/skill.js +52 -0
  86. package/dist/src/unstable/lint/catalog/skill.js.map +1 -0
  87. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.d.ts +23 -0
  88. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.d.ts.map +1 -0
  89. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.js +75 -0
  90. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.js.map +1 -0
  91. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.d.ts +23 -0
  92. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.d.ts.map +1 -0
  93. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.js +76 -0
  94. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.js.map +1 -0
  95. package/dist/src/unstable/lint/catalog/workspace/helpers/empty.d.ts +18 -0
  96. package/dist/src/unstable/lint/catalog/workspace/helpers/empty.d.ts.map +1 -0
  97. package/dist/src/unstable/lint/catalog/workspace/helpers/empty.js +16 -0
  98. package/dist/src/unstable/lint/catalog/workspace/helpers/empty.js.map +1 -0
  99. package/dist/src/unstable/lint/catalog/workspace/helpers/install-ops.d.ts +133 -0
  100. package/dist/src/unstable/lint/catalog/workspace/helpers/install-ops.d.ts.map +1 -0
  101. package/dist/src/unstable/lint/catalog/workspace/helpers/install-ops.js +149 -0
  102. package/dist/src/unstable/lint/catalog/workspace/helpers/install-ops.js.map +1 -0
  103. package/dist/src/unstable/lint/catalog/workspace/helpers/registry-source.d.ts +25 -0
  104. package/dist/src/unstable/lint/catalog/workspace/helpers/registry-source.d.ts.map +1 -0
  105. package/dist/src/unstable/lint/catalog/workspace/helpers/registry-source.js +30 -0
  106. package/dist/src/unstable/lint/catalog/workspace/helpers/registry-source.js.map +1 -0
  107. package/dist/src/unstable/lint/catalog/workspace/initialized.d.ts +22 -0
  108. package/dist/src/unstable/lint/catalog/workspace/initialized.d.ts.map +1 -0
  109. package/dist/src/unstable/lint/catalog/workspace/initialized.js +55 -0
  110. package/dist/src/unstable/lint/catalog/workspace/initialized.js.map +1 -0
  111. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.d.ts +33 -0
  112. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.d.ts.map +1 -0
  113. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.js +125 -0
  114. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.js.map +1 -0
  115. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.d.ts +19 -0
  116. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.d.ts.map +1 -0
  117. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.js +145 -0
  118. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.js.map +1 -0
  119. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.d.ts +17 -0
  120. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.d.ts.map +1 -0
  121. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.js +107 -0
  122. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.js.map +1 -0
  123. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.d.ts +22 -0
  124. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.d.ts.map +1 -0
  125. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.js +163 -0
  126. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.js.map +1 -0
  127. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.d.ts +28 -0
  128. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.d.ts.map +1 -0
  129. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.js +67 -0
  130. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.js.map +1 -0
  131. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.d.ts +30 -0
  132. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.d.ts.map +1 -0
  133. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.js +232 -0
  134. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.js.map +1 -0
  135. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.d.ts +26 -0
  136. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.d.ts.map +1 -0
  137. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.js +129 -0
  138. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.js.map +1 -0
  139. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.d.ts +26 -0
  140. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.d.ts.map +1 -0
  141. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.js +151 -0
  142. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.js.map +1 -0
  143. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.d.ts +29 -0
  144. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.d.ts.map +1 -0
  145. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.js +149 -0
  146. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.js.map +1 -0
  147. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.d.ts +29 -0
  148. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.d.ts.map +1 -0
  149. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.js +242 -0
  150. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.js.map +1 -0
  151. package/dist/src/unstable/lint/catalog/workspace-accessor/contexts.d.ts +141 -0
  152. package/dist/src/unstable/lint/catalog/workspace-accessor/contexts.d.ts.map +1 -0
  153. package/dist/src/unstable/lint/catalog/workspace-accessor/contexts.js +123 -0
  154. package/dist/src/unstable/lint/catalog/workspace-accessor/contexts.js.map +1 -0
  155. package/dist/src/unstable/lint/catalog/workspace-accessor/interpret-ops.d.ts +38 -0
  156. package/dist/src/unstable/lint/catalog/workspace-accessor/interpret-ops.d.ts.map +1 -0
  157. package/dist/src/unstable/lint/catalog/workspace-accessor/interpret-ops.js +311 -0
  158. package/dist/src/unstable/lint/catalog/workspace-accessor/interpret-ops.js.map +1 -0
  159. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.d.ts +60 -0
  160. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.d.ts.map +1 -0
  161. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.js +201 -0
  162. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.js.map +1 -0
  163. package/dist/src/unstable/lint/catalog/workspace-accessor/test-state.d.ts +65 -0
  164. package/dist/src/unstable/lint/catalog/workspace-accessor/test-state.d.ts.map +1 -0
  165. package/dist/src/unstable/lint/catalog/workspace-accessor/test-state.js +95 -0
  166. package/dist/src/unstable/lint/catalog/workspace-accessor/test-state.js.map +1 -0
  167. package/dist/src/unstable/lint/catalog/workspace.d.ts +47 -0
  168. package/dist/src/unstable/lint/catalog/workspace.d.ts.map +1 -0
  169. package/dist/src/unstable/lint/catalog/workspace.js +80 -0
  170. package/dist/src/unstable/lint/catalog/workspace.js.map +1 -0
  171. package/dist/src/unstable/lint/cli.d.ts +297 -0
  172. package/dist/src/unstable/lint/cli.d.ts.map +1 -0
  173. package/dist/src/unstable/lint/cli.js +388 -0
  174. package/dist/src/unstable/lint/cli.js.map +1 -0
  175. package/dist/src/unstable/lint/compose-path.d.ts +27 -0
  176. package/dist/src/unstable/lint/compose-path.d.ts.map +1 -0
  177. package/dist/src/unstable/lint/compose-path.js +61 -0
  178. package/dist/src/unstable/lint/compose-path.js.map +1 -0
  179. package/dist/src/unstable/lint/config.d.ts +103 -0
  180. package/dist/src/unstable/lint/config.d.ts.map +1 -0
  181. package/dist/src/unstable/lint/config.js +137 -0
  182. package/dist/src/unstable/lint/config.js.map +1 -0
  183. package/dist/src/unstable/lint/context.d.ts +265 -0
  184. package/dist/src/unstable/lint/context.d.ts.map +1 -0
  185. package/dist/src/unstable/lint/context.js +21 -0
  186. package/dist/src/unstable/lint/context.js.map +1 -0
  187. package/dist/src/unstable/lint/evaluate.d.ts +68 -0
  188. package/dist/src/unstable/lint/evaluate.d.ts.map +1 -0
  189. package/dist/src/unstable/lint/evaluate.js +147 -0
  190. package/dist/src/unstable/lint/evaluate.js.map +1 -0
  191. package/dist/src/unstable/lint/index.d.ts +28 -0
  192. package/dist/src/unstable/lint/index.d.ts.map +1 -0
  193. package/dist/src/unstable/lint/index.js +35 -0
  194. package/dist/src/unstable/lint/index.js.map +1 -0
  195. package/dist/src/unstable/lint/issues-to-findings.d.ts +35 -0
  196. package/dist/src/unstable/lint/issues-to-findings.d.ts.map +1 -0
  197. package/dist/src/unstable/lint/issues-to-findings.js +97 -0
  198. package/dist/src/unstable/lint/issues-to-findings.js.map +1 -0
  199. package/dist/src/unstable/lint/rule.d.ts +139 -0
  200. package/dist/src/unstable/lint/rule.d.ts.map +1 -0
  201. package/dist/src/unstable/lint/rule.js +25 -0
  202. package/dist/src/unstable/lint/rule.js.map +1 -0
  203. package/dist/src/unstable/mcp-servers/operations/install.d.ts +1 -1
  204. package/dist/src/unstable/mcp-servers/operations/install.d.ts.map +1 -1
  205. package/dist/src/unstable/mcp-servers/operations/publish.d.ts +1 -1
  206. package/dist/src/unstable/mcp-servers/operations/publish.d.ts.map +1 -1
  207. package/dist/src/unstable/mcp-servers/operations/uninstall.d.ts +1 -1
  208. package/dist/src/unstable/mcp-servers/operations/uninstall.d.ts.map +1 -1
  209. package/dist/src/unstable/packs/operations/add-to-pack.d.ts +2 -2
  210. package/dist/src/unstable/packs/operations/add-to-pack.d.ts.map +1 -1
  211. package/dist/src/unstable/packs/operations/install.d.ts +2 -2
  212. package/dist/src/unstable/packs/operations/install.d.ts.map +1 -1
  213. package/dist/src/unstable/packs/operations/new-pack.d.ts +2 -2
  214. package/dist/src/unstable/packs/operations/new-pack.d.ts.map +1 -1
  215. package/dist/src/unstable/packs/operations/publish.d.ts +2 -2
  216. package/dist/src/unstable/packs/operations/publish.d.ts.map +1 -1
  217. package/dist/src/unstable/packs/operations/remove-from-pack.d.ts +2 -2
  218. package/dist/src/unstable/packs/operations/remove-from-pack.d.ts.map +1 -1
  219. package/dist/src/unstable/packs/operations/uninstall.d.ts +2 -2
  220. package/dist/src/unstable/packs/operations/uninstall.d.ts.map +1 -1
  221. package/dist/src/unstable/packs/operations/unpack.d.ts +2 -2
  222. package/dist/src/unstable/packs/operations/unpack.d.ts.map +1 -1
  223. package/dist/src/unstable/{workspace → plan}/apply-plan.d.ts +9 -0
  224. package/dist/src/unstable/plan/apply-plan.d.ts.map +1 -0
  225. package/dist/src/unstable/{workspace → plan}/apply-plan.js +10 -1
  226. package/dist/src/unstable/plan/apply-plan.js.map +1 -0
  227. package/dist/src/unstable/plan/index.d.ts +24 -0
  228. package/dist/src/unstable/plan/index.d.ts.map +1 -0
  229. package/dist/src/unstable/plan/index.js +28 -0
  230. package/dist/src/unstable/plan/index.js.map +1 -0
  231. package/dist/src/unstable/{workspace → plan}/plan.d.ts +6 -0
  232. package/dist/src/unstable/plan/plan.d.ts.map +1 -0
  233. package/dist/src/unstable/{workspace → plan}/plan.js +6 -0
  234. package/dist/src/unstable/plan/plan.js.map +1 -0
  235. package/dist/src/unstable/{workspace → plan}/resolve-plan.d.ts +30 -2
  236. package/dist/src/unstable/plan/resolve-plan.d.ts.map +1 -0
  237. package/dist/src/unstable/{workspace → plan}/resolve-plan.js +37 -6
  238. package/dist/src/unstable/plan/resolve-plan.js.map +1 -0
  239. package/dist/src/unstable/publish/manifest-policy.d.ts +8 -8
  240. package/dist/src/unstable/settings/index.d.ts +2 -0
  241. package/dist/src/unstable/settings/index.d.ts.map +1 -1
  242. package/dist/src/unstable/settings/index.js +1 -0
  243. package/dist/src/unstable/settings/index.js.map +1 -1
  244. package/dist/src/unstable/settings/schema.d.ts +3 -0
  245. package/dist/src/unstable/settings/schema.d.ts.map +1 -1
  246. package/dist/src/unstable/settings/schema.js +3 -0
  247. package/dist/src/unstable/settings/schema.js.map +1 -1
  248. package/dist/src/unstable/settings/settings.d.ts +10 -0
  249. package/dist/src/unstable/settings/settings.d.ts.map +1 -1
  250. package/dist/src/unstable/skills/operations/copy.d.ts +2 -2
  251. package/dist/src/unstable/skills/operations/copy.d.ts.map +1 -1
  252. package/dist/src/unstable/skills/operations/disable.d.ts +2 -2
  253. package/dist/src/unstable/skills/operations/disable.d.ts.map +1 -1
  254. package/dist/src/unstable/skills/operations/enable.d.ts +2 -2
  255. package/dist/src/unstable/skills/operations/enable.d.ts.map +1 -1
  256. package/dist/src/unstable/skills/operations/install.d.ts +2 -2
  257. package/dist/src/unstable/skills/operations/install.d.ts.map +1 -1
  258. package/dist/src/unstable/skills/operations/new-skill.d.ts +2 -2
  259. package/dist/src/unstable/skills/operations/new-skill.d.ts.map +1 -1
  260. package/dist/src/unstable/skills/operations/publish.d.ts +2 -2
  261. package/dist/src/unstable/skills/operations/publish.d.ts.map +1 -1
  262. package/dist/src/unstable/skills/operations/rename.d.ts +2 -2
  263. package/dist/src/unstable/skills/operations/rename.d.ts.map +1 -1
  264. package/dist/src/unstable/skills/operations/uninstall.d.ts +2 -2
  265. package/dist/src/unstable/skills/operations/uninstall.d.ts.map +1 -1
  266. package/dist/src/unstable/subagents/operations/disable.d.ts +2 -2
  267. package/dist/src/unstable/subagents/operations/disable.d.ts.map +1 -1
  268. package/dist/src/unstable/subagents/operations/enable.d.ts +2 -2
  269. package/dist/src/unstable/subagents/operations/enable.d.ts.map +1 -1
  270. package/dist/src/unstable/subagents/operations/publish.d.ts +2 -2
  271. package/dist/src/unstable/subagents/operations/publish.d.ts.map +1 -1
  272. package/dist/src/unstable/workflows/install-command/workflow.d.ts +1 -1
  273. package/dist/src/unstable/workflows/install-command/workflow.d.ts.map +1 -1
  274. package/dist/src/unstable/workflows/install-command/workflow.js +1 -1
  275. package/dist/src/unstable/workflows/install-command/workflow.js.map +1 -1
  276. package/dist/src/unstable/workflows/uninstall-command/workflow.d.ts +1 -1
  277. package/dist/src/unstable/workflows/uninstall-command/workflow.d.ts.map +1 -1
  278. package/dist/src/unstable/workflows/uninstall-command/workflow.js +1 -1
  279. package/dist/src/unstable/workflows/uninstall-command/workflow.js.map +1 -1
  280. package/dist/src/unstable/workspace/augment-plan.d.ts +1 -1
  281. package/dist/src/unstable/workspace/augment-plan.d.ts.map +1 -1
  282. package/dist/src/unstable/workspace/display-plan.d.ts +1 -1
  283. package/dist/src/unstable/workspace/display-plan.d.ts.map +1 -1
  284. package/dist/src/unstable/workspace/display-plan.js.map +1 -1
  285. package/dist/src/unstable/workspace/index.d.ts +0 -5
  286. package/dist/src/unstable/workspace/index.d.ts.map +1 -1
  287. package/dist/src/unstable/workspace/index.js +3 -7
  288. package/dist/src/unstable/workspace/index.js.map +1 -1
  289. package/dist/src/unstable/workspace/initialization.d.ts +15 -0
  290. package/dist/src/unstable/workspace/initialization.d.ts.map +1 -1
  291. package/dist/src/unstable/workspace/paths.d.ts +0 -18
  292. package/dist/src/unstable/workspace/paths.d.ts.map +1 -1
  293. package/dist/src/unstable/workspace/paths.js +12 -2
  294. package/dist/src/unstable/workspace/paths.js.map +1 -1
  295. package/dist/src/unstable/workspace/reconciliation.d.ts +1 -1
  296. package/dist/src/unstable/workspace/reconciliation.d.ts.map +1 -1
  297. package/dist/src/unstable/workspace/scan-plan-readiness.d.ts +1 -1
  298. package/dist/src/unstable/workspace/scan-plan-readiness.d.ts.map +1 -1
  299. package/dist/src/unstable/workspace/settings-validation/types.d.ts +11 -1
  300. package/dist/src/unstable/workspace/settings-validation/types.d.ts.map +1 -1
  301. package/package.json +10 -2
  302. package/dist/src/unstable/workspace/apply-plan.d.ts.map +0 -1
  303. package/dist/src/unstable/workspace/apply-plan.js.map +0 -1
  304. package/dist/src/unstable/workspace/doctor/check-def.d.ts +0 -29
  305. package/dist/src/unstable/workspace/doctor/check-def.d.ts.map +0 -1
  306. package/dist/src/unstable/workspace/doctor/check-def.js +0 -17
  307. package/dist/src/unstable/workspace/doctor/check-def.js.map +0 -1
  308. package/dist/src/unstable/workspace/doctor/checks/agents-configured.d.ts +0 -5
  309. package/dist/src/unstable/workspace/doctor/checks/agents-configured.d.ts.map +0 -1
  310. package/dist/src/unstable/workspace/doctor/checks/agents-configured.js +0 -170
  311. package/dist/src/unstable/workspace/doctor/checks/agents-configured.js.map +0 -1
  312. package/dist/src/unstable/workspace/doctor/checks/extensions-active.d.ts +0 -4
  313. package/dist/src/unstable/workspace/doctor/checks/extensions-active.d.ts.map +0 -1
  314. package/dist/src/unstable/workspace/doctor/checks/extensions-active.js +0 -238
  315. package/dist/src/unstable/workspace/doctor/checks/extensions-active.js.map +0 -1
  316. package/dist/src/unstable/workspace/doctor/checks/extensions-current.d.ts +0 -18
  317. package/dist/src/unstable/workspace/doctor/checks/extensions-current.d.ts.map +0 -1
  318. package/dist/src/unstable/workspace/doctor/checks/extensions-current.js +0 -92
  319. package/dist/src/unstable/workspace/doctor/checks/extensions-current.js.map +0 -1
  320. package/dist/src/unstable/workspace/doctor/checks/extensions-installed.d.ts +0 -5
  321. package/dist/src/unstable/workspace/doctor/checks/extensions-installed.d.ts.map +0 -1
  322. package/dist/src/unstable/workspace/doctor/checks/extensions-installed.js +0 -472
  323. package/dist/src/unstable/workspace/doctor/checks/extensions-installed.js.map +0 -1
  324. package/dist/src/unstable/workspace/doctor/checks/workspace-ready.d.ts +0 -5
  325. package/dist/src/unstable/workspace/doctor/checks/workspace-ready.d.ts.map +0 -1
  326. package/dist/src/unstable/workspace/doctor/checks/workspace-ready.js +0 -201
  327. package/dist/src/unstable/workspace/doctor/checks/workspace-ready.js.map +0 -1
  328. package/dist/src/unstable/workspace/doctor/diagnose.d.ts +0 -49
  329. package/dist/src/unstable/workspace/doctor/diagnose.d.ts.map +0 -1
  330. package/dist/src/unstable/workspace/doctor/diagnose.js +0 -78
  331. package/dist/src/unstable/workspace/doctor/diagnose.js.map +0 -1
  332. package/dist/src/unstable/workspace/doctor/index.d.ts +0 -8
  333. package/dist/src/unstable/workspace/doctor/index.d.ts.map +0 -1
  334. package/dist/src/unstable/workspace/doctor/index.js +0 -6
  335. package/dist/src/unstable/workspace/doctor/index.js.map +0 -1
  336. package/dist/src/unstable/workspace/doctor/rollup.d.ts +0 -4
  337. package/dist/src/unstable/workspace/doctor/rollup.d.ts.map +0 -1
  338. package/dist/src/unstable/workspace/doctor/rollup.js +0 -28
  339. package/dist/src/unstable/workspace/doctor/rollup.js.map +0 -1
  340. package/dist/src/unstable/workspace/doctor/runner.d.ts +0 -6
  341. package/dist/src/unstable/workspace/doctor/runner.d.ts.map +0 -1
  342. package/dist/src/unstable/workspace/doctor/runner.js +0 -179
  343. package/dist/src/unstable/workspace/doctor/runner.js.map +0 -1
  344. package/dist/src/unstable/workspace/doctor/types.d.ts +0 -127
  345. package/dist/src/unstable/workspace/doctor/types.d.ts.map +0 -1
  346. package/dist/src/unstable/workspace/doctor/types.js +0 -60
  347. package/dist/src/unstable/workspace/doctor/types.js.map +0 -1
  348. package/dist/src/unstable/workspace/plan.d.ts.map +0 -1
  349. package/dist/src/unstable/workspace/plan.js.map +0 -1
  350. package/dist/src/unstable/workspace/resolve-plan.d.ts.map +0 -1
  351. package/dist/src/unstable/workspace/resolve-plan.js.map +0 -1
  352. package/dist/src/unstable/workspace/sync.d.ts +0 -17
  353. package/dist/src/unstable/workspace/sync.d.ts.map +0 -1
  354. package/dist/src/unstable/workspace/sync.js +0 -142
  355. package/dist/src/unstable/workspace/sync.js.map +0 -1
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `workspace/packs-declarations-valid` — declared packs name a resolvable,
3
+ * owner-qualified, unique source.
4
+ *
5
+ * Mirrors `workspace/skills-declarations-valid` against the packs map:
6
+ *
7
+ * 1. Source resolvability — pack source is not a bare name.
8
+ * 2. Owner qualification — registry-shaped pack sources carry `@owner/`.
9
+ * 3. Duplicate FQNs — two settings entries normalize to the same FQN.
10
+ *
11
+ * One finding per affected entity. Advisory.
12
+ *
13
+ * @experimental This API is unstable and may change without notice.
14
+ * @packageDocumentation
15
+ */
16
+ import * as Effect from "effect/Effect";
17
+ import * as Option from "effect/Option";
18
+ import * as Result from "effect/Result";
19
+ import * as Schema from "effect/Schema";
20
+ import { SettingsSchema } from "../../../settings/schema.js";
21
+ import { parseRegistrySource } from "./helpers/registry-source.js";
22
+ import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
23
+ const RULE_ID = "workspace/packs-declarations-valid";
24
+ const SETTINGS_REL = ".axm/settings.json";
25
+ const BARE_NAME_RE = /^[a-z0-9][a-z0-9-]*(?:@[^\s/:]+)?$/i;
26
+ const NON_REGISTRY_MARKERS = [
27
+ /^\.\//,
28
+ /^\.\.\//,
29
+ /^\//,
30
+ /^file:\/\//,
31
+ /:\/\//,
32
+ /^[a-z][a-z0-9+.-]*:/i,
33
+ ];
34
+ const isClearlyNonRegistrySource = (source) => NON_REGISTRY_MARKERS.some((pattern) => pattern.test(source));
35
+ const decodeSettings = (input) => {
36
+ const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
37
+ onExcessProperty: "ignore",
38
+ errors: "all",
39
+ });
40
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
41
+ };
42
+ const categorizeEntry = (name, source) => {
43
+ const parsed = parseRegistrySource(source);
44
+ if (parsed !== undefined) {
45
+ return {
46
+ name,
47
+ source,
48
+ kind: "registry",
49
+ registryFqn: `${parsed.owner}/${parsed.type}/${parsed.name}`,
50
+ };
51
+ }
52
+ if (isClearlyNonRegistrySource(source)) {
53
+ // Packs must use registry sources per the extensions-installed doctor
54
+ // rule; an unqualified non-registry source surfaces as an error.
55
+ return { name, source, kind: "non-registry" };
56
+ }
57
+ if (BARE_NAME_RE.test(source)) {
58
+ return { name, source, kind: "bare" };
59
+ }
60
+ return { name, source, kind: "registry-no-owner" };
61
+ };
62
+ const bareNameFinding = (entry) => ({
63
+ kind: "advisory",
64
+ ruleId: RULE_ID,
65
+ severity: "error",
66
+ message: `Pack '${entry.name}' has a bare-name source '${entry.source}'.`,
67
+ suggestions: [`Rewrite the source as @owner/packs/${entry.name}.`],
68
+ location: { file: SETTINGS_REL },
69
+ });
70
+ const nonRegistryFinding = (entry) => ({
71
+ kind: "advisory",
72
+ ruleId: RULE_ID,
73
+ severity: "error",
74
+ message: `Pack '${entry.name}' must use a registry source; got '${entry.source}'.`,
75
+ suggestions: [`Rewrite the source as @owner/packs/${entry.name} pointing to a known registry.`],
76
+ location: { file: SETTINGS_REL },
77
+ });
78
+ const missingOwnerFinding = (entry) => ({
79
+ kind: "advisory",
80
+ ruleId: RULE_ID,
81
+ severity: "error",
82
+ message: `Pack '${entry.name}' has a registry-shaped source '${entry.source}' missing the @owner prefix.`,
83
+ suggestions: [`Rewrite the source as @owner/packs/${entry.name}.`],
84
+ location: { file: SETTINGS_REL },
85
+ });
86
+ const duplicateFinding = (entry, duplicates) => ({
87
+ kind: "advisory",
88
+ ruleId: RULE_ID,
89
+ severity: "error",
90
+ message: `Pack '${entry.name}' resolves to a registry FQN declared more than once: ${duplicates.join(", ")}.`,
91
+ suggestions: [`Remove duplicate entries and keep one per FQN.`],
92
+ location: { file: SETTINGS_REL },
93
+ });
94
+ export const packsDeclarationsValidRule = {
95
+ id: RULE_ID,
96
+ description: "Declared packs name a resolvable, owner-qualified, unique source.",
97
+ kind: "advisory",
98
+ severity: "error",
99
+ check: (context) => Effect.gen(function* () {
100
+ const settingsResult = yield* Effect.result(context.workspace.settings);
101
+ if (Result.isFailure(settingsResult)) {
102
+ return EMPTY_ADVISORY_FINDINGS;
103
+ }
104
+ const decoded = decodeSettings(settingsResult.success);
105
+ if (Option.isNone(decoded)) {
106
+ return EMPTY_ADVISORY_FINDINGS;
107
+ }
108
+ const packs = decoded.value.packs ?? {};
109
+ const entries = Object.entries(packs).map(([name, entry]) => categorizeEntry(name, entry.source));
110
+ const byFqn = new Map();
111
+ for (const entry of entries) {
112
+ if (entry.kind === "registry" && entry.registryFqn !== undefined) {
113
+ const group = byFqn.get(entry.registryFqn) ?? [];
114
+ group.push(entry);
115
+ byFqn.set(entry.registryFqn, group);
116
+ }
117
+ }
118
+ const findings = [];
119
+ for (const entry of entries) {
120
+ switch (entry.kind) {
121
+ case "bare":
122
+ findings.push(bareNameFinding(entry));
123
+ break;
124
+ case "non-registry":
125
+ findings.push(nonRegistryFinding(entry));
126
+ break;
127
+ case "registry-no-owner":
128
+ findings.push(missingOwnerFinding(entry));
129
+ break;
130
+ case "registry": {
131
+ if (entry.registryFqn === undefined) {
132
+ break;
133
+ }
134
+ const group = byFqn.get(entry.registryFqn) ?? [];
135
+ if (group.length > 1) {
136
+ findings.push(duplicateFinding(entry, group.map((g) => g.name).sort()));
137
+ }
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ return findings;
143
+ }),
144
+ };
145
+ //# sourceMappingURL=packs-declarations-valid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs-declarations-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/packs-declarations-valid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `workspace/packs-dependencies-resolved` — every pack-declared dependency
3
+ * FQN is installed.
4
+ *
5
+ * For each `RegistryExtensionPackLockEntry`, every FQN appearing in
6
+ * `resolvedSkills`, `resolvedCommands`, `resolvedMcpServers`, or
7
+ * `resolvedSubagents` has a matching installed member lock entry.
8
+ *
9
+ * One finding per missing dependency (per-entity cascade). Advisory.
10
+ *
11
+ * @experimental This API is unstable and may change without notice.
12
+ * @packageDocumentation
13
+ */
14
+ import type { WorkspaceRuleContext } from "../../context.js";
15
+ import type { AdvisoryRule } from "../../rule.js";
16
+ export declare const packsDependenciesResolvedRule: AdvisoryRule<WorkspaceRuleContext>;
17
+ //# sourceMappingURL=packs-dependencies-resolved.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs-dependencies-resolved.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/packs-dependencies-resolved.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AA2FnE,eAAO,MAAM,6BAA6B,EAAE,YAAY,CAAC,oBAAoB,CAkC5E,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * `workspace/packs-dependencies-resolved` — every pack-declared dependency
3
+ * FQN is installed.
4
+ *
5
+ * For each `RegistryExtensionPackLockEntry`, every FQN appearing in
6
+ * `resolvedSkills`, `resolvedCommands`, `resolvedMcpServers`, or
7
+ * `resolvedSubagents` has a matching installed member lock entry.
8
+ *
9
+ * One finding per missing dependency (per-entity cascade). Advisory.
10
+ *
11
+ * @experimental This API is unstable and may change without notice.
12
+ * @packageDocumentation
13
+ */
14
+ import * as Effect from "effect/Effect";
15
+ import * as Option from "effect/Option";
16
+ import * as Result from "effect/Result";
17
+ import * as Schema from "effect/Schema";
18
+ import { LockfileSchema, } from "../../../lockfile/schema.js";
19
+ import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
20
+ const RULE_ID = "workspace/packs-dependencies-resolved";
21
+ const LOCKFILE_REL = ".axm/axm-lock.yaml";
22
+ const decodeLockfile = (input) => {
23
+ const result = Schema.decodeUnknownResult(LockfileSchema)(input, {
24
+ onExcessProperty: "ignore",
25
+ errors: "all",
26
+ });
27
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
28
+ };
29
+ const isRecord = (entry) => typeof entry === "object" && entry !== null;
30
+ const isRegistryFragment = (entry) => {
31
+ if (!isRecord(entry)) {
32
+ return false;
33
+ }
34
+ return (entry["type"] === "registry" &&
35
+ typeof entry["owner"] === "string" &&
36
+ typeof entry["name"] === "string");
37
+ };
38
+ const buildInstalledFqnIndex = (lockfile) => {
39
+ const set = new Set();
40
+ const absorb = (typeSegment, map) => {
41
+ if (map === undefined) {
42
+ return;
43
+ }
44
+ for (const entry of Object.values(map)) {
45
+ if (isRegistryFragment(entry)) {
46
+ set.add(`${entry.owner}/${typeSegment}/${entry.name}`);
47
+ }
48
+ }
49
+ };
50
+ absorb("skills", lockfile.skills);
51
+ absorb("commands", lockfile.commands);
52
+ absorb("subagents", lockfile.subagents);
53
+ absorb("mcp-servers", lockfile.mcpServers);
54
+ return set;
55
+ };
56
+ const missingDependencyFinding = (packName, dependencyFqn, dependencyType) => ({
57
+ kind: "advisory",
58
+ ruleId: RULE_ID,
59
+ severity: "error",
60
+ message: `Pack '${packName}' declares ${dependencyType} dependency '${dependencyFqn}' which is not installed.`,
61
+ suggestions: [
62
+ `Install the missing ${dependencyType} '${dependencyFqn}'.`,
63
+ `Remove the pack declaration that introduces '${dependencyFqn}'.`,
64
+ ],
65
+ location: { file: LOCKFILE_REL },
66
+ });
67
+ const collectResolved = (entry) => [
68
+ ...Object.keys(entry.resolvedSkills).map((fqn) => ({ fqn, typeSegment: "skills" })),
69
+ ...Object.keys(entry.resolvedCommands).map((fqn) => ({ fqn, typeSegment: "commands" })),
70
+ ...Object.keys(entry.resolvedSubagents).map((fqn) => ({ fqn, typeSegment: "subagents" })),
71
+ ...Object.keys(entry.resolvedMcpServers).map((fqn) => ({ fqn, typeSegment: "mcp-servers" })),
72
+ ];
73
+ export const packsDependenciesResolvedRule = {
74
+ id: RULE_ID,
75
+ description: "Every pack-declared dependency FQN is installed.",
76
+ kind: "advisory",
77
+ severity: "error",
78
+ check: (context) => Effect.gen(function* () {
79
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
80
+ if (Result.isFailure(lockfileResult)) {
81
+ return EMPTY_ADVISORY_FINDINGS;
82
+ }
83
+ const lockOption = lockfileResult.success;
84
+ if (Option.isNone(lockOption)) {
85
+ return EMPTY_ADVISORY_FINDINGS;
86
+ }
87
+ const decoded = decodeLockfile(lockOption.value);
88
+ if (Option.isNone(decoded)) {
89
+ return EMPTY_ADVISORY_FINDINGS;
90
+ }
91
+ const packLock = decoded.value.packs ?? {};
92
+ if (Object.keys(packLock).length === 0) {
93
+ return EMPTY_ADVISORY_FINDINGS;
94
+ }
95
+ const installed = buildInstalledFqnIndex(decoded.value);
96
+ const findings = [];
97
+ for (const [packName, packEntry] of Object.entries(packLock)) {
98
+ for (const { fqn, typeSegment } of collectResolved(packEntry)) {
99
+ if (!installed.has(fqn)) {
100
+ findings.push(missingDependencyFinding(packName, fqn, typeSegment));
101
+ }
102
+ }
103
+ }
104
+ return findings;
105
+ }),
106
+ };
107
+ //# sourceMappingURL=packs-dependencies-resolved.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs-dependencies-resolved.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/packs-dependencies-resolved.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `workspace/packs-members-retained` — every member lock entry with
3
+ * `retainedByPack: true` is declared by an installed pack.
4
+ *
5
+ * For each member lock entry (skill, command, subagent, mcp-server) where
6
+ * `retainedByPack === true` AND the member is not directly declared in
7
+ * settings, at least one installed pack's lock entry lists the member's
8
+ * FQN in the appropriate resolved map. Entries directly declared in
9
+ * settings are exempt (covered by per-type declarations rules).
10
+ *
11
+ * Rule body walks every member lock entry type — not just skills — so
12
+ * adding non-skill install families in v1.5+ is test-surface-only.
13
+ *
14
+ * One finding per affected entity. Advisory, warning.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ * @packageDocumentation
18
+ */
19
+ import type { WorkspaceRuleContext } from "../../context.js";
20
+ import type { AdvisoryRule } from "../../rule.js";
21
+ export declare const packsMembersRetainedRule: AdvisoryRule<WorkspaceRuleContext>;
22
+ //# sourceMappingURL=packs-members-retained.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs-members-retained.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/packs-members-retained.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AAkInE,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,oBAAoB,CA0CvE,CAAC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * `workspace/packs-members-retained` — every member lock entry with
3
+ * `retainedByPack: true` is declared by an installed pack.
4
+ *
5
+ * For each member lock entry (skill, command, subagent, mcp-server) where
6
+ * `retainedByPack === true` AND the member is not directly declared in
7
+ * settings, at least one installed pack's lock entry lists the member's
8
+ * FQN in the appropriate resolved map. Entries directly declared in
9
+ * settings are exempt (covered by per-type declarations rules).
10
+ *
11
+ * Rule body walks every member lock entry type — not just skills — so
12
+ * adding non-skill install families in v1.5+ is test-surface-only.
13
+ *
14
+ * One finding per affected entity. Advisory, warning.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ * @packageDocumentation
18
+ */
19
+ import * as Effect from "effect/Effect";
20
+ import * as Option from "effect/Option";
21
+ import * as Result from "effect/Result";
22
+ import * as Schema from "effect/Schema";
23
+ import { LockfileSchema, } from "../../../lockfile/schema.js";
24
+ import { SettingsSchema } from "../../../settings/schema.js";
25
+ import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
26
+ const RULE_ID = "workspace/packs-members-retained";
27
+ const LOCKFILE_REL = ".axm/axm-lock.yaml";
28
+ const decodeSettings = (input) => {
29
+ const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
30
+ onExcessProperty: "ignore",
31
+ errors: "all",
32
+ });
33
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
34
+ };
35
+ const decodeLockfile = (input) => {
36
+ const result = Schema.decodeUnknownResult(LockfileSchema)(input, {
37
+ onExcessProperty: "ignore",
38
+ errors: "all",
39
+ });
40
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
41
+ };
42
+ const entryFqn = (entry, name, typeSegment) => {
43
+ if (entry.type !== "registry") {
44
+ // Non-registry lock entries don't carry an owner-qualified FQN. We
45
+ // conservatively exclude them: retention applies only to registry-ish
46
+ // pack dependencies.
47
+ return undefined;
48
+ }
49
+ const owner = entry.owner;
50
+ const regName = entry.name;
51
+ return `${owner}/${typeSegment}/${regName}`;
52
+ };
53
+ const buildPackRetainedFqns = (lockfile) => {
54
+ const declared = new Set();
55
+ const packs = lockfile.packs ?? {};
56
+ for (const entry of Object.values(packs)) {
57
+ for (const fqn of Object.keys(entry.resolvedSkills)) {
58
+ declared.add(fqn);
59
+ }
60
+ for (const fqn of Object.keys(entry.resolvedCommands)) {
61
+ declared.add(fqn);
62
+ }
63
+ for (const fqn of Object.keys(entry.resolvedSubagents)) {
64
+ declared.add(fqn);
65
+ }
66
+ for (const fqn of Object.keys(entry.resolvedMcpServers)) {
67
+ declared.add(fqn);
68
+ }
69
+ }
70
+ return declared;
71
+ };
72
+ const droppedFinding = (memberType, name, fqn) => ({
73
+ kind: "advisory",
74
+ ruleId: RULE_ID,
75
+ severity: "warning",
76
+ message: `${memberType} '${name}'${fqn === undefined ? "" : ` (FQN ${fqn})`} is retained by a pack but no installed pack declares it.`,
77
+ suggestions: [
78
+ `Declare '${name}' directly in settings.${memberType === "mcp-server" ? "mcpServers" : `${memberType}s`}.`,
79
+ `Uninstall '${name}' if the owning pack is no longer installed.`,
80
+ ],
81
+ location: { file: LOCKFILE_REL },
82
+ });
83
+ const collectMembers = (lockfile) => {
84
+ const result = [];
85
+ for (const [name, entry] of Object.entries(lockfile.skills)) {
86
+ result.push({ memberType: "skill", name, entry });
87
+ }
88
+ for (const [name, entry] of Object.entries(lockfile.commands ?? {})) {
89
+ result.push({ memberType: "command", name, entry });
90
+ }
91
+ for (const [name, entry] of Object.entries(lockfile.subagents ?? {})) {
92
+ result.push({ memberType: "subagent", name, entry });
93
+ }
94
+ for (const [name, entry] of Object.entries(lockfile.mcpServers ?? {})) {
95
+ result.push({ memberType: "mcp-server", name, entry });
96
+ }
97
+ return result;
98
+ };
99
+ const isDirectlyDeclared = (member, settings) => {
100
+ switch (member.memberType) {
101
+ case "skill":
102
+ return member.name in (settings.skills ?? {});
103
+ case "command":
104
+ return member.name in (settings.commands ?? {});
105
+ case "subagent":
106
+ return member.name in (settings.subagents ?? {});
107
+ case "mcp-server":
108
+ return member.name in (settings.mcpServers ?? {});
109
+ }
110
+ };
111
+ const typeSegment = (memberType) => {
112
+ switch (memberType) {
113
+ case "skill":
114
+ return "skills";
115
+ case "command":
116
+ return "commands";
117
+ case "subagent":
118
+ return "subagents";
119
+ case "mcp-server":
120
+ return "mcp-servers";
121
+ }
122
+ };
123
+ export const packsMembersRetainedRule = {
124
+ id: RULE_ID,
125
+ description: "Every member lock entry with retainedByPack is declared by an installed pack.",
126
+ kind: "advisory",
127
+ severity: "warning",
128
+ check: (context) => Effect.gen(function* () {
129
+ const settingsResult = yield* Effect.result(context.workspace.settings);
130
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
131
+ if (Result.isFailure(settingsResult) || Result.isFailure(lockfileResult)) {
132
+ return EMPTY_ADVISORY_FINDINGS;
133
+ }
134
+ const settings = decodeSettings(settingsResult.success);
135
+ if (Option.isNone(settings)) {
136
+ return EMPTY_ADVISORY_FINDINGS;
137
+ }
138
+ const lockOption = lockfileResult.success;
139
+ if (Option.isNone(lockOption)) {
140
+ return EMPTY_ADVISORY_FINDINGS;
141
+ }
142
+ const lockfile = decodeLockfile(lockOption.value);
143
+ if (Option.isNone(lockfile)) {
144
+ return EMPTY_ADVISORY_FINDINGS;
145
+ }
146
+ const retainedByPacks = buildPackRetainedFqns(lockfile.value);
147
+ const findings = [];
148
+ for (const member of collectMembers(lockfile.value)) {
149
+ if (member.entry.retainedByPack !== true) {
150
+ continue;
151
+ }
152
+ if (isDirectlyDeclared(member, settings.value)) {
153
+ continue;
154
+ }
155
+ const fqn = entryFqn(member.entry, member.name, typeSegment(member.memberType));
156
+ if (fqn === undefined || !retainedByPacks.has(fqn)) {
157
+ findings.push(droppedFinding(member.memberType, member.name, fqn));
158
+ }
159
+ }
160
+ return findings;
161
+ }),
162
+ };
163
+ //# sourceMappingURL=packs-members-retained.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs-members-retained.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/packs-members-retained.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `workspace/settings-schema-valid` — `.axm/settings.json` conforms to
3
+ * `SettingsSchema`.
4
+ *
5
+ * Cascade per `docs/design/lint-engine.md §10.workspace`:
6
+ *
7
+ * 1. `.axm/settings.json` is present (`workspace/initialized` owns the
8
+ * absence arm; this rule early-returns when the file is missing).
9
+ * 2. The file parses as JSON (the accessor surfaces parse failures via
10
+ * `SettingsReadError`; we emit one finding per read failure).
11
+ * 3. The parsed value is a JSON object (not an array or scalar) — enforced
12
+ * by `Schema.decodeUnknownResult(SettingsSchema)` structurally.
13
+ * 4. `Schema.decodeUnknownResult(SettingsSchema)` with
14
+ * `onExcessProperty: "ignore"` succeeds; `ParseResult` issues map 1:1 to
15
+ * findings via `schemaDecodeFindings`.
16
+ *
17
+ * Reports the read-failure finding when arm 2 fails; otherwise reports the
18
+ * schema issues produced by arm 3/4. The design doc notes the unknown-key
19
+ * companion (`workspace/settings-keys-recognized`) defers to v1.5+ — this
20
+ * rule keeps schema validity as a single error-severity invariant.
21
+ *
22
+ * @experimental This API is unstable and may change without notice.
23
+ * @packageDocumentation
24
+ */
25
+ import type { WorkspaceRuleContext } from "../../context.js";
26
+ import type { AdvisoryRule } from "../../rule.js";
27
+ export declare const settingsSchemaValidRule: AdvisoryRule<WorkspaceRuleContext>;
28
+ //# sourceMappingURL=settings-schema-valid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-schema-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/settings-schema-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQlD,eAAO,MAAM,uBAAuB,EAAE,YAAY,CAAC,oBAAoB,CA2CtE,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * `workspace/settings-schema-valid` — `.axm/settings.json` conforms to
3
+ * `SettingsSchema`.
4
+ *
5
+ * Cascade per `docs/design/lint-engine.md §10.workspace`:
6
+ *
7
+ * 1. `.axm/settings.json` is present (`workspace/initialized` owns the
8
+ * absence arm; this rule early-returns when the file is missing).
9
+ * 2. The file parses as JSON (the accessor surfaces parse failures via
10
+ * `SettingsReadError`; we emit one finding per read failure).
11
+ * 3. The parsed value is a JSON object (not an array or scalar) — enforced
12
+ * by `Schema.decodeUnknownResult(SettingsSchema)` structurally.
13
+ * 4. `Schema.decodeUnknownResult(SettingsSchema)` with
14
+ * `onExcessProperty: "ignore"` succeeds; `ParseResult` issues map 1:1 to
15
+ * findings via `schemaDecodeFindings`.
16
+ *
17
+ * Reports the read-failure finding when arm 2 fails; otherwise reports the
18
+ * schema issues produced by arm 3/4. The design doc notes the unknown-key
19
+ * companion (`workspace/settings-keys-recognized`) defers to v1.5+ — this
20
+ * rule keeps schema validity as a single error-severity invariant.
21
+ *
22
+ * @experimental This API is unstable and may change without notice.
23
+ * @packageDocumentation
24
+ */
25
+ import * as Effect from "effect/Effect";
26
+ import * as Result from "effect/Result";
27
+ import { SettingsSchema } from "../../../settings/schema.js";
28
+ import { schemaDecodeFindings } from "../shared/schema-rule.js";
29
+ import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
30
+ const RULE_ID = "workspace/settings-schema-valid";
31
+ const SETTINGS_REL = ".axm/settings.json";
32
+ export const settingsSchemaValidRule = {
33
+ id: RULE_ID,
34
+ description: ".axm/settings.json parses and conforms to SettingsSchema.",
35
+ kind: "advisory",
36
+ severity: "error",
37
+ check: (context) => Effect.gen(function* () {
38
+ // Early-return when settings.json is absent; workspace/initialized owns
39
+ // that arm so a fresh workspace surfaces exactly one finding.
40
+ const exists = yield* context.workspace.exists(SETTINGS_REL);
41
+ if (!exists) {
42
+ return EMPTY_ADVISORY_FINDINGS;
43
+ }
44
+ const read = yield* Effect.result(context.workspace.settings);
45
+ if (Result.isFailure(read)) {
46
+ const error = read.failure;
47
+ return [
48
+ {
49
+ kind: "advisory",
50
+ ruleId: RULE_ID,
51
+ severity: "error",
52
+ message: `Could not read settings.json: ${error.message}`,
53
+ suggestions: [
54
+ "Fix the JSON syntax error reported at the location above.",
55
+ "Verify .axm/settings.json is valid JSON (quoted keys, no trailing commas).",
56
+ ],
57
+ location: { file: SETTINGS_REL },
58
+ },
59
+ ];
60
+ }
61
+ // The accessor returns the raw parsed JSON value; we run the schema
62
+ // decode here so issues surface 1:1 as findings.
63
+ const decodedFindings = yield* schemaDecodeFindings(RULE_ID, "error", SETTINGS_REL, SettingsSchema, read.success);
64
+ return decodedFindings;
65
+ }),
66
+ };
67
+ //# sourceMappingURL=settings-schema-valid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-schema-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/settings-schema-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,OAAO,GAAG,iCAAiC,CAAC;AAClD,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAE1C,MAAM,CAAC,MAAM,uBAAuB,GAAuC;IACzE,EAAE,EAAE,OAAO;IACX,WAAW,EAAE,2DAA2D;IACxE,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,wEAAwE;QACxE,8DAA8D;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,uBAAuB,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3B,OAAO;gBACL;oBACE,IAAI,EAAE,UAAmB;oBACzB,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,OAAgB;oBAC1B,OAAO,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;oBACzD,WAAW,EAAE;wBACX,2DAA2D;wBAC3D,4EAA4E;qBAC7E;oBACD,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;iBACjC;aACF,CAAC;QACJ,CAAC;QAED,oEAAoE;QACpE,iDAAiD;QACjD,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,oBAAoB,CACjD,OAAO,EACP,OAAO,EACP,YAAY,EACZ,cAAc,EACd,IAAI,CAAC,OAAO,CACb,CAAC;QACF,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `workspace/skills-artifacts-clean` — skill artifacts on disk are live,
3
+ * declared, and canonically named.
4
+ *
5
+ * Cascade per `docs/design/lint-engine.md §10.workspace.Skills` (first
6
+ * failing arm per affected entity):
7
+ *
8
+ * - **Dangling** (autofixing) — an artifact exists in a declared agent's
9
+ * skills dir but the canonical source under `.axm/extensions/.../src/`
10
+ * is missing. Autofix: `install-skill` with `force: true`.
11
+ * - **Stale** (advisory) — an artifact exists in a declared agent's skills
12
+ * dir whose name doesn't correspond to any declared enabled skill. No
13
+ * pre-sync Operation applies (the artifact isn't axm-owned after the
14
+ * skill is no longer declared); emit an advisory CLI suggestion.
15
+ * - **Name-mismatch** (advisory) — an artifact exists with a name that
16
+ * doesn't match the sanitized declared skill name (legacy casing,
17
+ * pre-sanitization). Emit an advisory CLI suggestion.
18
+ *
19
+ * Listing per-agent skill targets uses `context.workspace.list(...)`.
20
+ *
21
+ * The rule emits at most one finding per artifact — cascade resolves per
22
+ * filesystem entry.
23
+ *
24
+ * @experimental This API is unstable and may change without notice.
25
+ * @packageDocumentation
26
+ */
27
+ import type { WorkspaceRuleContext } from "../../context.js";
28
+ import type { AutofixingRule } from "../../rule.js";
29
+ export declare const skillsArtifactsCleanRule: AutofixingRule<WorkspaceRuleContext>;
30
+ //# sourceMappingURL=skills-artifacts-clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-artifacts-clean.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-clean.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,eAAe,CAAC;AAwHvB,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,oBAAoB,CAoHzE,CAAC"}