@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,232 @@
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 * as Effect from "effect/Effect";
28
+ import * as Option from "effect/Option";
29
+ import * as Result from "effect/Result";
30
+ import * as Schema from "effect/Schema";
31
+ import { LockfileSchema } from "../../../lockfile/schema.js";
32
+ import { SettingsSchema } from "../../../settings/schema.js";
33
+ import { installSkillOp } from "./helpers/install-ops.js";
34
+ import { parseRegistrySource } from "./helpers/registry-source.js";
35
+ import { EMPTY_LINT_FINDINGS, EMPTY_OPERATIONS } from "./helpers/empty.js";
36
+ const RULE_ID = "workspace/skills-artifacts-clean";
37
+ const SUG_REINSTALL_PREFIX = "Reinstall skill ";
38
+ const decodeSettings = (input) => {
39
+ const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
40
+ onExcessProperty: "ignore",
41
+ errors: "all",
42
+ });
43
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
44
+ };
45
+ const decodeLockfile = (input) => {
46
+ const result = Schema.decodeUnknownResult(LockfileSchema)(input, {
47
+ onExcessProperty: "ignore",
48
+ errors: "all",
49
+ });
50
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
51
+ };
52
+ /**
53
+ * Names of skills retained by at least one installed declared pack. These
54
+ * skill artifacts are valid even though the skill isn't in `settings.skills`.
55
+ */
56
+ const buildRetainedSkillNames = (settings, lockfile) => {
57
+ const declaredPackNames = new Set(Object.keys(settings.packs ?? {}));
58
+ const names = new Set();
59
+ const packLock = lockfile.packs ?? {};
60
+ for (const [packName, packEntry] of Object.entries(packLock)) {
61
+ if (!declaredPackNames.has(packName)) {
62
+ continue;
63
+ }
64
+ for (const fqn of Object.keys(packEntry.resolvedSkills)) {
65
+ // FQN is `@owner/skills/<name>`; last segment is the skill name.
66
+ const parts = fqn.split("/");
67
+ const last = parts[parts.length - 1];
68
+ if (last !== undefined) {
69
+ names.add(last);
70
+ }
71
+ }
72
+ }
73
+ // Also add lockfile-level skills with retainedByPack=true so accessor
74
+ // round-trips work even when the pack resolved map misnames them.
75
+ for (const [name, entry] of Object.entries(lockfile.skills)) {
76
+ if (entry.retainedByPack === true) {
77
+ names.add(name);
78
+ }
79
+ }
80
+ return names;
81
+ };
82
+ // Very narrow sanitization: lowercase, replace underscores with hyphens.
83
+ // The authoritative sanitizer lives at axm extensions/utils.ts#sanitizeName;
84
+ // v1 lint checks for exact match and surfaces any divergence as a
85
+ // name-mismatch advisory arm.
86
+ const isCanonicallyNamed = (artifact, declared) => artifact === declared;
87
+ const danglingFinding = (name, agentId) => ({
88
+ kind: "autofixable",
89
+ ruleId: RULE_ID,
90
+ severity: "error",
91
+ message: `Agent '${agentId}' has a dangling artifact for skill '${name}' (canonical source missing).`,
92
+ suggestions: [`${SUG_REINSTALL_PREFIX}'${name}' to re-materialize canonical source.`],
93
+ location: { file: `${agentId}/skills/${name}` },
94
+ });
95
+ const staleFinding = (name, agentId) => ({
96
+ kind: "advisory",
97
+ ruleId: RULE_ID,
98
+ severity: "error",
99
+ message: `Agent '${agentId}' has a stale skill artifact '${name}' not backed by any declaration.`,
100
+ suggestions: [
101
+ `Remove the stale artifact manually if you no longer need skill '${name}'.`,
102
+ `Add '${name}' to settings.skills if it should be declared.`,
103
+ ],
104
+ location: { file: `${agentId}/skills/${name}` },
105
+ });
106
+ const nameMismatchFinding = (agentId, artifact, expected) => ({
107
+ kind: "advisory",
108
+ ruleId: RULE_ID,
109
+ severity: "error",
110
+ message: `Agent '${agentId}' has skill artifact '${artifact}' that doesn't match the sanitized name '${expected}'.`,
111
+ suggestions: [
112
+ `Remove '${artifact}' and reinstall to regenerate under the canonical name '${expected}'.`,
113
+ ],
114
+ location: { file: `${agentId}/skills/${artifact}` },
115
+ });
116
+ const NAME_FROM_SUGGESTION_RE = /'([^']+)'/;
117
+ const extractSkillName = (suggestion) => NAME_FROM_SUGGESTION_RE.exec(suggestion)?.[1];
118
+ /**
119
+ * Build candidate canonical `SKILL.md` probe paths for `name`, trying the
120
+ * settings-declared registry owner first (if any) and the external layout
121
+ * as a fallback. Non-registry sources fall through to the external probe.
122
+ */
123
+ const canonicalSrcProbesForName = (name, settings) => {
124
+ const entry = settings.skills?.[name];
125
+ const parsed = entry === undefined ? undefined : parseRegistrySource(entry.source);
126
+ const probes = [];
127
+ if (parsed !== undefined) {
128
+ probes.push(`.axm/extensions/${parsed.owner}/skills/${name}/src/SKILL.md`);
129
+ }
130
+ probes.push(`.axm/extensions/external/skills/${name}/SKILL.md`);
131
+ return probes;
132
+ };
133
+ export const skillsArtifactsCleanRule = {
134
+ id: RULE_ID,
135
+ description: "Skill artifacts on disk are live, declared, and canonically named.",
136
+ kind: "autofixing",
137
+ severity: "error",
138
+ check: (context) => Effect.gen(function* () {
139
+ const settingsResult = yield* Effect.result(context.workspace.settings);
140
+ if (Result.isFailure(settingsResult)) {
141
+ return EMPTY_LINT_FINDINGS;
142
+ }
143
+ const settings = decodeSettings(settingsResult.success);
144
+ if (Option.isNone(settings)) {
145
+ return EMPTY_LINT_FINDINGS;
146
+ }
147
+ const declaredAgentIds = new Set(settings.value.agents ?? []);
148
+ if (declaredAgentIds.size === 0) {
149
+ return EMPTY_LINT_FINDINGS;
150
+ }
151
+ const knownAgents = yield* context.workspace.knownAgents;
152
+ const declaredAgents = knownAgents.filter((a) => declaredAgentIds.has(a.id));
153
+ const declaredSkills = settings.value.skills ?? {};
154
+ const declaredEnabledNames = new Set(Object.entries(declaredSkills)
155
+ .filter(([, v]) => v.enabled)
156
+ .map(([k]) => k));
157
+ // Pull in pack-retained skill names from the lockfile so retained
158
+ // artifacts aren't mis-classified as stale.
159
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
160
+ const retainedNames = Result.isSuccess(lockfileResult)
161
+ ? Option.match(lockfileResult.success, {
162
+ onNone: () => new Set(),
163
+ onSome: (raw) => Option.match(decodeLockfile(raw), {
164
+ onNone: () => new Set(),
165
+ onSome: (lock) => buildRetainedSkillNames(settings.value, lock),
166
+ }),
167
+ })
168
+ : new Set();
169
+ const findings = [];
170
+ for (const agent of declaredAgents) {
171
+ const listResult = yield* Effect.result(context.workspace.list(agent.skills.dir));
172
+ if (Result.isFailure(listResult)) {
173
+ // Directory doesn't exist or isn't readable. Not an artifact-clean
174
+ // issue — the corresponding enabled arm surfaces missing dirs.
175
+ continue;
176
+ }
177
+ const artifacts = listResult.success;
178
+ for (const artifact of artifacts) {
179
+ // Retention carve-out: pack-retained skill artifacts are valid
180
+ // even when not in settings.skills.
181
+ if (retainedNames.has(artifact)) {
182
+ continue;
183
+ }
184
+ // Cascade first-failure per artifact.
185
+ // Arm 1: dangling — artifact links back to a declared skill name
186
+ // but canonical src is missing.
187
+ if (declaredEnabledNames.has(artifact)) {
188
+ const probes = canonicalSrcProbesForName(artifact, settings.value);
189
+ const probeResults = yield* Effect.all(probes.map((probe) => context.workspace.exists(probe)), { concurrency: "unbounded" });
190
+ if (probeResults.every((exists) => !exists)) {
191
+ findings.push(danglingFinding(artifact, agent.id));
192
+ continue;
193
+ }
194
+ continue;
195
+ }
196
+ // Arm 2/3: not a declared enabled name — name-mismatch or stale.
197
+ // Name-mismatch: artifact normalizes to a declared enabled name
198
+ // but differs in casing or similar. v1 check is case-insensitive.
199
+ const caseMatch = Array.from(declaredEnabledNames).find((d) => d.toLowerCase() === artifact.toLowerCase() && !isCanonicallyNamed(artifact, d));
200
+ if (caseMatch !== undefined) {
201
+ findings.push(nameMismatchFinding(agent.id, artifact, caseMatch));
202
+ continue;
203
+ }
204
+ findings.push(staleFinding(artifact, agent.id));
205
+ }
206
+ }
207
+ return findings;
208
+ }),
209
+ fix: (context, finding) => Effect.gen(function* () {
210
+ // Only the dangling arm emits AutofixableFinding; stale / name-mismatch
211
+ // arms ship AdvisoryFinding and never reach `fix`.
212
+ if (!finding.suggestions[0].startsWith(SUG_REINSTALL_PREFIX)) {
213
+ return EMPTY_OPERATIONS;
214
+ }
215
+ const name = extractSkillName(finding.suggestions[0]);
216
+ if (name === undefined) {
217
+ return EMPTY_OPERATIONS;
218
+ }
219
+ const settingsResult = yield* Effect.result(context.workspace.settings);
220
+ if (Result.isFailure(settingsResult)) {
221
+ return EMPTY_OPERATIONS;
222
+ }
223
+ const settings = decodeSettings(settingsResult.success);
224
+ if (Option.isNone(settings)) {
225
+ return EMPTY_OPERATIONS;
226
+ }
227
+ const entry = settings.value.skills?.[name];
228
+ const source = entry?.source ?? name;
229
+ return [installSkillOp({ name, source, force: true })];
230
+ }),
231
+ };
232
+ //# sourceMappingURL=skills-artifacts-clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-artifacts-clean.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `workspace/skills-artifacts-correct` — each enabled skill has artifacts in
3
+ * every declared agent's skill target; disabled skills have none.
4
+ *
5
+ * Three symptoms of the same invariant (§10.workspace.Skills note):
6
+ *
7
+ * - **Enabled-but-not-linked** — a skill declared `enabled: true` is missing
8
+ * its per-agent artifact for at least one declared agent. Autofix:
9
+ * `enable-skill` (the handler recreates symlinks across configured agents).
10
+ * - **Disabled-but-still-present** — a skill declared `enabled: false` still
11
+ * has a per-agent artifact for at least one declared agent. Autofix:
12
+ * `disable-skill`.
13
+ * - **Cross-agent-inconsistent** — an enabled skill has artifacts in some
14
+ * declared agents but not others. Autofix: `enable-skill`.
15
+ *
16
+ * One finding per affected skill (per-entity cascade); the first arm that
17
+ * fires for a skill emits its finding and the other arms for the same skill
18
+ * do not.
19
+ *
20
+ * @experimental This API is unstable and may change without notice.
21
+ * @packageDocumentation
22
+ */
23
+ import type { WorkspaceRuleContext } from "../../context.js";
24
+ import type { AutofixingRule } from "../../rule.js";
25
+ export declare const skillsArtifactsCorrectRule: AutofixingRule<WorkspaceRuleContext>;
26
+ //# sourceMappingURL=skills-artifacts-correct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-artifacts-correct.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-correct.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAsB,cAAc,EAAe,MAAM,eAAe,CAAC;AAsDrF,eAAO,MAAM,0BAA0B,EAAE,cAAc,CAAC,oBAAoB,CA4E3E,CAAC"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * `workspace/skills-artifacts-correct` — each enabled skill has artifacts in
3
+ * every declared agent's skill target; disabled skills have none.
4
+ *
5
+ * Three symptoms of the same invariant (§10.workspace.Skills note):
6
+ *
7
+ * - **Enabled-but-not-linked** — a skill declared `enabled: true` is missing
8
+ * its per-agent artifact for at least one declared agent. Autofix:
9
+ * `enable-skill` (the handler recreates symlinks across configured agents).
10
+ * - **Disabled-but-still-present** — a skill declared `enabled: false` still
11
+ * has a per-agent artifact for at least one declared agent. Autofix:
12
+ * `disable-skill`.
13
+ * - **Cross-agent-inconsistent** — an enabled skill has artifacts in some
14
+ * declared agents but not others. Autofix: `enable-skill`.
15
+ *
16
+ * One finding per affected skill (per-entity cascade); the first arm that
17
+ * fires for a skill emits its finding and the other arms for the same skill
18
+ * do not.
19
+ *
20
+ * @experimental This API is unstable and may change without notice.
21
+ * @packageDocumentation
22
+ */
23
+ import * as Effect from "effect/Effect";
24
+ import * as Option from "effect/Option";
25
+ import * as Result from "effect/Result";
26
+ import * as Schema from "effect/Schema";
27
+ import { SettingsSchema } from "../../../settings/schema.js";
28
+ import { disableSkillOp, enableSkillOp } from "./helpers/install-ops.js";
29
+ import { EMPTY_LINT_FINDINGS, EMPTY_OPERATIONS } from "./helpers/empty.js";
30
+ const RULE_ID = "workspace/skills-artifacts-correct";
31
+ const SETTINGS_REL = ".axm/settings.json";
32
+ const SUG_ENABLE_PREFIX = "Re-enable skill ";
33
+ const SUG_DISABLE_PREFIX = "Disable skill ";
34
+ const decodeSettings = (input) => {
35
+ const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
36
+ onExcessProperty: "ignore",
37
+ errors: "all",
38
+ });
39
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
40
+ };
41
+ const artifactPath = (agent, skillName) => `${agent.skills.dir}/${skillName}`;
42
+ const enableFinding = (name, reason) => ({
43
+ kind: "autofixable",
44
+ ruleId: RULE_ID,
45
+ severity: "error",
46
+ message: `Skill '${name}' is enabled but missing per-agent artifacts (${reason}).`,
47
+ suggestions: [`${SUG_ENABLE_PREFIX}'${name}' to recreate agent artifacts.`],
48
+ location: { file: SETTINGS_REL },
49
+ });
50
+ const disableFinding = (name, reason) => ({
51
+ kind: "autofixable",
52
+ ruleId: RULE_ID,
53
+ severity: "error",
54
+ message: `Skill '${name}' is disabled but still has per-agent artifacts (${reason}).`,
55
+ suggestions: [`${SUG_DISABLE_PREFIX}'${name}' to clean up stale artifacts.`],
56
+ location: { file: SETTINGS_REL },
57
+ });
58
+ const inconsistentFinding = (name, details) => ({
59
+ kind: "autofixable",
60
+ ruleId: RULE_ID,
61
+ severity: "error",
62
+ message: `Skill '${name}' has inconsistent artifacts across declared agents (${details}).`,
63
+ suggestions: [`${SUG_ENABLE_PREFIX}'${name}' to normalize across declared agents.`],
64
+ location: { file: SETTINGS_REL },
65
+ });
66
+ const NAME_FROM_SUGGESTION_RE = /'([^']+)'/;
67
+ const extractSkillName = (suggestion) => NAME_FROM_SUGGESTION_RE.exec(suggestion)?.[1];
68
+ export const skillsArtifactsCorrectRule = {
69
+ id: RULE_ID,
70
+ description: "Enabled skills have artifacts in every declared agent; disabled skills have none.",
71
+ kind: "autofixing",
72
+ severity: "error",
73
+ check: (context) => Effect.gen(function* () {
74
+ const settingsResult = yield* Effect.result(context.workspace.settings);
75
+ if (Result.isFailure(settingsResult)) {
76
+ return EMPTY_LINT_FINDINGS;
77
+ }
78
+ const settings = decodeSettings(settingsResult.success);
79
+ if (Option.isNone(settings)) {
80
+ return EMPTY_LINT_FINDINGS;
81
+ }
82
+ const declaredAgentIds = new Set(settings.value.agents ?? []);
83
+ if (declaredAgentIds.size === 0) {
84
+ return EMPTY_LINT_FINDINGS;
85
+ }
86
+ const knownAgents = yield* context.workspace.knownAgents;
87
+ const declaredAgents = knownAgents.filter((a) => declaredAgentIds.has(a.id));
88
+ const declaredSkills = settings.value.skills ?? {};
89
+ const findings = [];
90
+ for (const [name, entry] of Object.entries(declaredSkills)) {
91
+ const perAgentExists = yield* Effect.all(declaredAgents.map((agent) => context.workspace
92
+ .exists(artifactPath(agent, name))
93
+ .pipe(Effect.map((exists) => ({ agentId: agent.id, exists })))), { concurrency: "unbounded" });
94
+ const missingAgents = perAgentExists.filter((p) => !p.exists).map((p) => p.agentId);
95
+ const presentAgents = perAgentExists.filter((p) => p.exists).map((p) => p.agentId);
96
+ if (entry.enabled) {
97
+ if (missingAgents.length === 0) {
98
+ continue;
99
+ }
100
+ if (presentAgents.length === 0) {
101
+ findings.push(enableFinding(name, `missing in: ${missingAgents.join(", ")}`));
102
+ }
103
+ else {
104
+ findings.push(inconsistentFinding(name, `present in ${presentAgents.join(", ")}, missing in ${missingAgents.join(", ")}`));
105
+ }
106
+ continue;
107
+ }
108
+ // Disabled skill: flag if any artifact is still present.
109
+ if (presentAgents.length > 0) {
110
+ findings.push(disableFinding(name, `present in: ${presentAgents.join(", ")}`));
111
+ }
112
+ }
113
+ return findings;
114
+ }),
115
+ fix: (_context, finding) => Effect.sync(() => {
116
+ const name = extractSkillName(finding.suggestions[0]);
117
+ if (name === undefined) {
118
+ return EMPTY_OPERATIONS;
119
+ }
120
+ if (finding.suggestions[0].startsWith(SUG_ENABLE_PREFIX)) {
121
+ return [enableSkillOp({ name })];
122
+ }
123
+ if (finding.suggestions[0].startsWith(SUG_DISABLE_PREFIX)) {
124
+ return [disableSkillOp({ name })];
125
+ }
126
+ return EMPTY_OPERATIONS;
127
+ }),
128
+ };
129
+ //# sourceMappingURL=skills-artifacts-correct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-artifacts-correct.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-correct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `workspace/skills-declarations-valid` — declared skills name a resolvable,
3
+ * owner-qualified, unique source.
4
+ *
5
+ * Cascade per `docs/design/lint-engine.md §10.workspace.Skills` (reports the
6
+ * first failing arm per affected entity):
7
+ *
8
+ * 1. Source resolvability — the source string is shaped like a ref we can
9
+ * route (owner-qualified FQN like `@owner/skills/name`, a known source
10
+ * host, `file://` URL, local path). Bare names (`just-a-name`) fail.
11
+ * 2. Owner qualification — registry-shaped sources carry an `@owner`
12
+ * prefix; entries whose source looks registry-ish but omits the owner
13
+ * fail.
14
+ * 3. Duplicate FQNs — when two settings entries normalize to the same
15
+ * owner/type/name FQN, both entries emit a finding.
16
+ *
17
+ * One finding per affected entity (per-entity cascade). Advisory — fixing
18
+ * requires a settings edit.
19
+ *
20
+ * @experimental This API is unstable and may change without notice.
21
+ * @packageDocumentation
22
+ */
23
+ import type { WorkspaceRuleContext } from "../../context.js";
24
+ import type { AdvisoryRule } from "../../rule.js";
25
+ export declare const skillsDeclarationsValidRule: AdvisoryRule<WorkspaceRuleContext>;
26
+ //# sourceMappingURL=skills-declarations-valid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-declarations-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AA+FnE,eAAO,MAAM,2BAA2B,EAAE,YAAY,CAAC,oBAAoB,CAuD1E,CAAC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * `workspace/skills-declarations-valid` — declared skills name a resolvable,
3
+ * owner-qualified, unique source.
4
+ *
5
+ * Cascade per `docs/design/lint-engine.md §10.workspace.Skills` (reports the
6
+ * first failing arm per affected entity):
7
+ *
8
+ * 1. Source resolvability — the source string is shaped like a ref we can
9
+ * route (owner-qualified FQN like `@owner/skills/name`, a known source
10
+ * host, `file://` URL, local path). Bare names (`just-a-name`) fail.
11
+ * 2. Owner qualification — registry-shaped sources carry an `@owner`
12
+ * prefix; entries whose source looks registry-ish but omits the owner
13
+ * fail.
14
+ * 3. Duplicate FQNs — when two settings entries normalize to the same
15
+ * owner/type/name FQN, both entries emit a finding.
16
+ *
17
+ * One finding per affected entity (per-entity cascade). Advisory — fixing
18
+ * requires a settings edit.
19
+ *
20
+ * @experimental This API is unstable and may change without notice.
21
+ * @packageDocumentation
22
+ */
23
+ import * as Effect from "effect/Effect";
24
+ import * as Option from "effect/Option";
25
+ import * as Result from "effect/Result";
26
+ import * as Schema from "effect/Schema";
27
+ import { SettingsSchema } from "../../../settings/schema.js";
28
+ import { parseRegistrySource } from "./helpers/registry-source.js";
29
+ import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
30
+ const RULE_ID = "workspace/skills-declarations-valid";
31
+ const SETTINGS_REL = ".axm/settings.json";
32
+ const decodeSettings = (input) => {
33
+ const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
34
+ onExcessProperty: "ignore",
35
+ errors: "all",
36
+ });
37
+ return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
38
+ };
39
+ // Pattern definitions — follow the existing doctor check's logic (see
40
+ // `workspace/doctor/checks/extensions-installed.ts`).
41
+ const BARE_NAME_RE = /^[a-z0-9][a-z0-9-]*(?:@[^\s/:]+)?$/i;
42
+ const NON_REGISTRY_MARKERS = [
43
+ /^\.\//,
44
+ /^\.\.\//,
45
+ /^\//,
46
+ /^file:\/\//,
47
+ /:\/\//,
48
+ /^[a-z][a-z0-9+.-]*:/i,
49
+ ];
50
+ const isClearlyNonRegistrySource = (source) => NON_REGISTRY_MARKERS.some((pattern) => pattern.test(source));
51
+ const categorizeEntry = (name, source) => {
52
+ // Delegate to the canonical parser — it handles `@owner/type/name@version`.
53
+ const parsed = parseRegistrySource(source);
54
+ if (parsed !== undefined) {
55
+ return {
56
+ name,
57
+ source,
58
+ kind: "registry",
59
+ registryFqn: `${parsed.owner}/${parsed.type}/${parsed.name}`,
60
+ };
61
+ }
62
+ if (isClearlyNonRegistrySource(source)) {
63
+ return { name, source, kind: "non-registry" };
64
+ }
65
+ if (BARE_NAME_RE.test(source)) {
66
+ return { name, source, kind: "bare" };
67
+ }
68
+ return { name, source, kind: "registry-no-owner" };
69
+ };
70
+ const findingForBareName = (entry) => ({
71
+ kind: "advisory",
72
+ ruleId: RULE_ID,
73
+ severity: "error",
74
+ message: `Skill '${entry.name}' has a bare-name source '${entry.source}'; declare a host or use @owner/skills/name.`,
75
+ suggestions: [
76
+ `Prefix the source with @owner/ to resolve via the default registry.`,
77
+ `Declare the source host explicitly in settings.sources[].`,
78
+ ],
79
+ location: { file: SETTINGS_REL },
80
+ });
81
+ const findingForMissingOwner = (entry) => ({
82
+ kind: "advisory",
83
+ ruleId: RULE_ID,
84
+ severity: "error",
85
+ message: `Skill '${entry.name}' has a registry-shaped source '${entry.source}' missing the @owner prefix.`,
86
+ suggestions: [`Rewrite the source as @owner/skills/${entry.name}.`],
87
+ location: { file: SETTINGS_REL },
88
+ });
89
+ const findingForDuplicate = (entry, duplicates) => ({
90
+ kind: "advisory",
91
+ ruleId: RULE_ID,
92
+ severity: "error",
93
+ message: `Skill '${entry.name}' resolves to a registry FQN declared more than once: ${duplicates.join(", ")}.`,
94
+ suggestions: [
95
+ `Remove duplicate entries and keep one per FQN.`,
96
+ `Rename conflicting entries to distinct keys.`,
97
+ ],
98
+ location: { file: SETTINGS_REL },
99
+ });
100
+ export const skillsDeclarationsValidRule = {
101
+ id: RULE_ID,
102
+ description: "Declared skills name a resolvable, owner-qualified, unique source.",
103
+ kind: "advisory",
104
+ severity: "error",
105
+ check: (context) => Effect.gen(function* () {
106
+ const settingsResult = yield* Effect.result(context.workspace.settings);
107
+ if (Result.isFailure(settingsResult)) {
108
+ return EMPTY_ADVISORY_FINDINGS;
109
+ }
110
+ const decoded = decodeSettings(settingsResult.success);
111
+ if (Option.isNone(decoded)) {
112
+ return EMPTY_ADVISORY_FINDINGS;
113
+ }
114
+ const skills = decoded.value.skills ?? {};
115
+ const entries = Object.entries(skills).map(([name, entry]) => categorizeEntry(name, entry.source));
116
+ // Group by registry FQN for duplicate detection.
117
+ const byFqn = new Map();
118
+ for (const entry of entries) {
119
+ if (entry.kind !== "registry" || entry.registryFqn === undefined) {
120
+ continue;
121
+ }
122
+ const group = byFqn.get(entry.registryFqn) ?? [];
123
+ group.push(entry);
124
+ byFqn.set(entry.registryFqn, group);
125
+ }
126
+ const findings = [];
127
+ for (const entry of entries) {
128
+ if (entry.kind === "bare") {
129
+ findings.push(findingForBareName(entry));
130
+ continue;
131
+ }
132
+ if (entry.kind === "registry-no-owner") {
133
+ findings.push(findingForMissingOwner(entry));
134
+ continue;
135
+ }
136
+ if (entry.kind === "non-registry") {
137
+ // Non-registry sources are allowed for skills (local, git-hosted)
138
+ // and don't fire this rule. Move on.
139
+ continue;
140
+ }
141
+ if (entry.kind === "registry" && entry.registryFqn !== undefined) {
142
+ const group = byFqn.get(entry.registryFqn) ?? [];
143
+ if (group.length > 1) {
144
+ findings.push(findingForDuplicate(entry, group.map((g) => g.name).sort()));
145
+ }
146
+ }
147
+ }
148
+ return findings;
149
+ }),
150
+ };
151
+ //# sourceMappingURL=skills-declarations-valid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-declarations-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `workspace/skills-integrity-valid` — each installed skill's `src/` content
3
+ * matches its lockfile `sourceHash`.
4
+ *
5
+ * For each skill lock entry with a `sourceHash`, verify the canonical
6
+ * installed directory (`.axm/extensions/<owner>/skills/<name>/src/` for
7
+ * registry sources; `.axm/extensions/external/skills/<name>/` for
8
+ * non-registry) exists and its hash matches. Integrity-mismatch entries
9
+ * each emit one `AutofixableFinding`; autofix: `install-skill` with
10
+ * `force: true`.
11
+ *
12
+ * The integrity check MUST walk the workspace filesystem — `context.workspace`
13
+ * exposes `exists` only; the accessor layer surfaces the pre-computed
14
+ * `installedSkills` array with the skill's `files` accessor already rooted
15
+ * at the right path per provenance. A skill whose install directory is
16
+ * missing entirely is also a mismatch.
17
+ *
18
+ * V1 keeps this rule simple: a skill whose `sourceHash` is undefined in the
19
+ * lockfile (e.g., git-hosted sources without pinned hash) is not checked.
20
+ *
21
+ * One finding per affected entity.
22
+ *
23
+ * @experimental This API is unstable and may change without notice.
24
+ * @packageDocumentation
25
+ */
26
+ import type { WorkspaceRuleContext } from "../../context.js";
27
+ import type { AutofixingRule } from "../../rule.js";
28
+ export declare const skillsIntegrityValidRule: AutofixingRule<WorkspaceRuleContext>;
29
+ //# sourceMappingURL=skills-integrity-valid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-integrity-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-integrity-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAsB,cAAc,EAAe,MAAM,eAAe,CAAC;AAyErF,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,oBAAoB,CA+DzE,CAAC"}