@amsterdamdatalabs/enact-extensions 0.1.37 → 0.1.47

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 (577) hide show
  1. package/README.md +67 -108
  2. package/bundled-extensions.json +6 -0
  3. package/dist/create/enact.d.ts.map +1 -1
  4. package/dist/create/enact.js +2 -0
  5. package/dist/create/enact.js.map +1 -1
  6. package/dist/create/index.d.ts +3 -0
  7. package/dist/create/index.d.ts.map +1 -1
  8. package/dist/create/index.js +6 -0
  9. package/dist/create/index.js.map +1 -1
  10. package/dist/create/kimi.d.ts +16 -0
  11. package/dist/create/kimi.d.ts.map +1 -0
  12. package/dist/create/kimi.js +87 -0
  13. package/dist/create/kimi.js.map +1 -0
  14. package/dist/create/opencode.d.ts +129 -0
  15. package/dist/create/opencode.d.ts.map +1 -0
  16. package/dist/create/opencode.js +696 -0
  17. package/dist/create/opencode.js.map +1 -0
  18. package/dist/index.d.ts +12 -16
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +10 -10
  21. package/dist/index.js.map +1 -1
  22. package/dist/internal/agents.d.ts +12 -2
  23. package/dist/internal/agents.d.ts.map +1 -1
  24. package/dist/internal/agents.js +119 -3
  25. package/dist/internal/agents.js.map +1 -1
  26. package/dist/internal/extensions-table.d.ts +58 -0
  27. package/dist/internal/extensions-table.d.ts.map +1 -0
  28. package/dist/internal/extensions-table.js +134 -0
  29. package/dist/internal/extensions-table.js.map +1 -0
  30. package/dist/internal/file-ops.d.ts +36 -0
  31. package/dist/internal/file-ops.d.ts.map +1 -0
  32. package/dist/internal/file-ops.js +89 -0
  33. package/dist/internal/file-ops.js.map +1 -0
  34. package/dist/internal/hooks.d.ts +56 -0
  35. package/dist/internal/hooks.d.ts.map +1 -0
  36. package/dist/internal/hooks.js +128 -0
  37. package/dist/internal/hooks.js.map +1 -0
  38. package/dist/internal/json-merge.d.ts +63 -0
  39. package/dist/internal/json-merge.d.ts.map +1 -0
  40. package/dist/internal/json-merge.js +122 -0
  41. package/dist/internal/json-merge.js.map +1 -0
  42. package/dist/internal/lock-ownership.d.ts +41 -0
  43. package/dist/internal/lock-ownership.d.ts.map +1 -0
  44. package/dist/internal/lock-ownership.js +24 -0
  45. package/dist/internal/lock-ownership.js.map +1 -0
  46. package/dist/internal/platform.d.ts.map +1 -1
  47. package/dist/internal/platform.js +90 -4
  48. package/dist/internal/platform.js.map +1 -1
  49. package/dist/internal/schema.js.map +1 -1
  50. package/dist/internal/toml-block.d.ts +59 -0
  51. package/dist/internal/toml-block.d.ts.map +1 -0
  52. package/dist/internal/toml-block.js +113 -0
  53. package/dist/internal/toml-block.js.map +1 -0
  54. package/dist/internal/types.d.ts +2 -1
  55. package/dist/internal/types.d.ts.map +1 -1
  56. package/dist/projection.d.ts +47 -0
  57. package/dist/projection.d.ts.map +1 -0
  58. package/dist/projection.js +180 -0
  59. package/dist/projection.js.map +1 -0
  60. package/dist/validate/index.d.ts +9 -4
  61. package/dist/validate/index.d.ts.map +1 -1
  62. package/dist/validate/index.js +56 -7
  63. package/dist/validate/index.js.map +1 -1
  64. package/dist/validate/kimi.d.ts +3 -0
  65. package/dist/validate/kimi.d.ts.map +1 -0
  66. package/dist/validate/kimi.js +11 -0
  67. package/dist/validate/kimi.js.map +1 -0
  68. package/dist/validate/opencode.d.ts +3 -0
  69. package/dist/validate/opencode.d.ts.map +1 -0
  70. package/dist/validate/opencode.js +11 -0
  71. package/dist/validate/opencode.js.map +1 -0
  72. package/dist/validate/run.d.ts +39 -0
  73. package/dist/validate/run.d.ts.map +1 -0
  74. package/dist/validate/run.js +63 -0
  75. package/dist/validate/run.js.map +1 -0
  76. package/extensions/enact-loop/.agents/plugin.json +12 -8
  77. package/extensions/enact-loop/scripts/validate.mjs +113 -2
  78. package/extensions/enact-loop/skills/enact-loop/SKILL.md +36 -466
  79. package/extensions/enact-loop/skills/enact-loop/references/loop-contract.md +114 -0
  80. package/extensions/enact-loop/skills/loop-budget/SKILL.md +57 -0
  81. package/extensions/enact-loop/skills/loop-intake/SKILL.md +59 -0
  82. package/extensions/enact-repo/.agents/plugin.json +55 -0
  83. package/extensions/enact-repo/.mcp.json +20 -0
  84. package/extensions/enact-repo/README.md +90 -0
  85. package/extensions/enact-repo/hooks/hooks.json +98 -0
  86. package/extensions/enact-repo/lean-ctx/config.toml +35 -0
  87. package/extensions/enact-repo/lean-ctx/layout.toml +5 -0
  88. package/extensions/enact-repo/skills/aca-sandboxes/SKILL.md +53 -0
  89. package/extensions/enact-repo/skills/aca-sandboxes/references/capabilities.md +52 -0
  90. package/extensions/enact-repo/skills/aca-sandboxes/references/install.md +87 -0
  91. package/extensions/enact-repo/skills/aca-sandboxes/references/prerequisites.md +52 -0
  92. package/extensions/enact-repo/skills/aca-sandboxes/references/quickstart.md +164 -0
  93. package/extensions/enact-repo/skills/aca-sandboxes/references/reference-advanced.md +251 -0
  94. package/extensions/enact-repo/skills/aca-sandboxes/references/reference.md +287 -0
  95. package/extensions/enact-repo/skills/aca-sandboxes/references/response-cues.md +71 -0
  96. package/extensions/enact-repo/skills/aca-sandboxes/references/scenarios.md +219 -0
  97. package/extensions/enact-repo/skills/aca-sandboxes/version.json +4 -0
  98. package/extensions/enact-repo/skills/backend-remove-deadcode/SKILL.md +96 -0
  99. package/extensions/enact-repo/skills/cmux-leader/SKILL.md +61 -0
  100. package/extensions/enact-repo/skills/cmux-send/SKILL.md +61 -0
  101. package/extensions/enact-repo/skills/code-review/SKILL.md +100 -0
  102. package/extensions/enact-repo/skills/codebase-design/SKILL.md +98 -0
  103. package/extensions/enact-repo/skills/codebase-design/references/DEEPENING.md +37 -0
  104. package/extensions/enact-repo/skills/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
  105. package/extensions/enact-repo/skills/codebase-design/references/TESTABILITY.md +29 -0
  106. package/extensions/enact-repo/skills/computer-use/SKILL.md +76 -0
  107. package/extensions/enact-repo/skills/debug-issue/SKILL.md +40 -0
  108. package/extensions/enact-repo/skills/diagnosing-bugs/SKILL.md +100 -0
  109. package/extensions/enact-repo/skills/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
  110. package/extensions/enact-repo/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  111. package/extensions/enact-repo/skills/domain-modeling/SKILL.md +86 -0
  112. package/extensions/enact-repo/skills/domain-modeling/references/ADR-FORMAT.md +47 -0
  113. package/extensions/enact-repo/skills/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
  114. package/extensions/enact-repo/skills/explore-codebase/SKILL.md +41 -0
  115. package/extensions/enact-repo/skills/frontend-design/LICENSE.txt +177 -0
  116. package/extensions/enact-repo/skills/frontend-design/SKILL.md +56 -0
  117. package/extensions/enact-repo/skills/grill-me/SKILL.md +20 -0
  118. package/extensions/enact-repo/skills/grill-with-docs/SKILL.md +20 -0
  119. package/extensions/enact-repo/skills/handoff/SKILL.md +28 -0
  120. package/extensions/enact-repo/skills/http-contract-migration/SKILL.md +74 -0
  121. package/extensions/enact-repo/skills/http-contract-migration/references/compatibility-and-gates.md +26 -0
  122. package/extensions/enact-repo/skills/http-contract-migration/references/hexagonal-boundary.md +16 -0
  123. package/extensions/enact-repo/skills/http-contract-migration/references/publication-and-adoption.md +31 -0
  124. package/extensions/enact-repo/skills/http-contract-migration/references/wire-fidelity-and-dto.md +31 -0
  125. package/extensions/enact-repo/skills/implement/SKILL.md +28 -0
  126. package/extensions/enact-repo/skills/improve-codebase-architecture/SKILL.md +80 -0
  127. package/extensions/enact-repo/skills/improve-codebase-architecture/references/HTML-REPORT.md +123 -0
  128. package/extensions/enact-repo/skills/interaction-design/SKILL.md +30 -0
  129. package/extensions/enact-repo/skills/interaction-design/references/Workflow.md +146 -0
  130. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-gsap.md +220 -0
  131. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-native.md +110 -0
  132. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries.md +178 -0
  133. package/extensions/enact-repo/skills/interaction-design/references/interaction-patterns.md +166 -0
  134. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns-advanced.md +285 -0
  135. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns.md +254 -0
  136. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations-reveals.md +213 -0
  137. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations.md +209 -0
  138. package/extensions/enact-repo/skills/lean-ctx/SKILL.md +81 -0
  139. package/extensions/enact-repo/skills/orca-cli/SKILL.md +88 -0
  140. package/extensions/enact-repo/skills/orchestration/SKILL.md +80 -0
  141. package/extensions/enact-repo/skills/prototype/SKILL.md +37 -0
  142. package/extensions/enact-repo/skills/prototype/references/LOGIC.md +79 -0
  143. package/extensions/enact-repo/skills/prototype/references/UI.md +112 -0
  144. package/extensions/enact-repo/skills/refactor-safely/SKILL.md +44 -0
  145. package/extensions/enact-repo/skills/remove-deadcode/SKILL.md +54 -0
  146. package/extensions/enact-repo/skills/research/SKILL.md +27 -0
  147. package/extensions/enact-repo/skills/resolving-merge-conflicts/SKILL.md +28 -0
  148. package/extensions/enact-repo/skills/review-changes/SKILL.md +45 -0
  149. package/extensions/enact-repo/skills/tailwind-4-docs/SKILL.md +88 -0
  150. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/accent-color.mdx +149 -0
  151. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/adding-custom-styles.mdx +635 -0
  152. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-content.mdx +300 -0
  153. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-items.mdx +241 -0
  154. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-self.mdx +294 -0
  155. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/animation.mdx +286 -0
  156. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/appearance.mdx +180 -0
  157. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/aspect-ratio.mdx +98 -0
  158. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-blur.mdx +109 -0
  159. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-brightness.mdx +82 -0
  160. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-contrast.mdx +82 -0
  161. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-grayscale.mdx +99 -0
  162. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-hue-rotate.mdx +173 -0
  163. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-invert.mdx +99 -0
  164. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-opacity.mdx +103 -0
  165. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-saturate.mdx +98 -0
  166. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-sepia.mdx +95 -0
  167. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter.mdx +113 -0
  168. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backface-visibility.mdx +110 -0
  169. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-attachment.mdx +126 -0
  170. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-blend-mode.mdx +79 -0
  171. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-clip.mdx +85 -0
  172. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-color.mdx +176 -0
  173. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-image.mdx +349 -0
  174. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-origin.mdx +64 -0
  175. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-position.mdx +171 -0
  176. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-repeat.mdx +127 -0
  177. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-size.mdx +100 -0
  178. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/block-size.mdx +190 -0
  179. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-collapse.mdx +181 -0
  180. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-color.mdx +316 -0
  181. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-radius.mdx +347 -0
  182. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-spacing.mdx +117 -0
  183. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-style.mdx +129 -0
  184. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-width.mdx +344 -0
  185. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-decoration-break.mdx +71 -0
  186. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-shadow.mdx +497 -0
  187. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-sizing.mdx +175 -0
  188. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-after.mdx +38 -0
  189. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-before.mdx +38 -0
  190. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-inside.mdx +34 -0
  191. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caption-side.mdx +190 -0
  192. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caret-color.mdx +66 -0
  193. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/clear.mdx +224 -0
  194. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color-scheme.mdx +81 -0
  195. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color.mdx +125 -0
  196. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/colors.mdx +927 -0
  197. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/columns.mdx +310 -0
  198. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/compatibility.mdx +193 -0
  199. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/content.mdx +129 -0
  200. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/cursor.mdx +104 -0
  201. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/dark-mode.mdx +191 -0
  202. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/detecting-classes-in-source-files.mdx +315 -0
  203. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/display.mdx +523 -0
  204. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/editor-setup.mdx +90 -0
  205. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/field-sizing.mdx +75 -0
  206. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/fill.mdx +100 -0
  207. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-blur.mdx +114 -0
  208. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-brightness.mdx +102 -0
  209. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-contrast.mdx +102 -0
  210. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-drop-shadow.mdx +230 -0
  211. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-grayscale.mdx +101 -0
  212. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-hue-rotate.mdx +171 -0
  213. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-invert.mdx +93 -0
  214. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-saturate.mdx +109 -0
  215. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-sepia.mdx +92 -0
  216. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter.mdx +113 -0
  217. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-basis.mdx +144 -0
  218. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-direction.mdx +130 -0
  219. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-grow.mdx +129 -0
  220. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-shrink.mdx +95 -0
  221. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-wrap.mdx +118 -0
  222. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex.mdx +164 -0
  223. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/float.mdx +197 -0
  224. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-family.mdx +119 -0
  225. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-feature-settings.mdx +52 -0
  226. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-size.mdx +184 -0
  227. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-smoothing.mdx +67 -0
  228. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-stretch.mdx +138 -0
  229. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-style.mdx +62 -0
  230. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-variant-numeric.mdx +228 -0
  231. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-weight.mdx +105 -0
  232. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/forced-color-adjust.mdx +152 -0
  233. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/functions-and-directives.mdx +322 -0
  234. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/gap.mdx +100 -0
  235. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-columns.mdx +43 -0
  236. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-flow.mdx +58 -0
  237. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-rows.mdx +43 -0
  238. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-column.mdx +124 -0
  239. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-row.mdx +115 -0
  240. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-columns.mdx +101 -0
  241. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-rows.mdx +108 -0
  242. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/height.mdx +260 -0
  243. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hover-focus-and-other-states.mdx +4935 -0
  244. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hyphens.mdx +112 -0
  245. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/inline-size.mdx +191 -0
  246. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/isolation.mdx +30 -0
  247. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-content.mdx +348 -0
  248. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-items.mdx +286 -0
  249. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-self.mdx +282 -0
  250. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/letter-spacing.mdx +100 -0
  251. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-clamp.mdx +110 -0
  252. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-height.mdx +147 -0
  253. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-image.mdx +80 -0
  254. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-position.mdx +67 -0
  255. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-type.mdx +86 -0
  256. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/margin.mdx +397 -0
  257. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-clip.mdx +66 -0
  258. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-composite.mdx +70 -0
  259. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-image.mdx +933 -0
  260. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-mode.mdx +114 -0
  261. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-origin.mdx +66 -0
  262. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-position.mdx +117 -0
  263. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-repeat.mdx +169 -0
  264. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-size.mdx +104 -0
  265. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-type.mdx +98 -0
  266. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-block-size.mdx +153 -0
  267. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-height.mdx +164 -0
  268. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-inline-size.mdx +185 -0
  269. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-width.mdx +214 -0
  270. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-block-size.mdx +146 -0
  271. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-height.mdx +150 -0
  272. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-inline-size.mdx +153 -0
  273. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-width.mdx +153 -0
  274. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mix-blend-mode.mdx +103 -0
  275. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-fit.mdx +147 -0
  276. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-position.mdx +182 -0
  277. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/opacity.mdx +84 -0
  278. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/order.mdx +94 -0
  279. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-color.mdx +130 -0
  280. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-offset.mdx +72 -0
  281. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-style.mdx +134 -0
  282. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-width.mdx +91 -0
  283. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow-wrap.mdx +130 -0
  284. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow.mdx +665 -0
  285. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overscroll-behavior.mdx +151 -0
  286. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/padding.mdx +232 -0
  287. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective-origin.mdx +127 -0
  288. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective.mdx +137 -0
  289. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-content.mdx +257 -0
  290. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-items.mdx +269 -0
  291. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-self.mdx +257 -0
  292. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/pointer-events.mdx +101 -0
  293. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/position.mdx +399 -0
  294. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/preflight.mdx +291 -0
  295. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/resize.mdx +110 -0
  296. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/responsive-design.mdx +666 -0
  297. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/rotate.mdx +291 -0
  298. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scale.mdx +360 -0
  299. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-behavior.mdx +39 -0
  300. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-margin.mdx +268 -0
  301. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-padding.mdx +255 -0
  302. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-align.mdx +281 -0
  303. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-stop.mdx +198 -0
  304. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-type.mdx +284 -0
  305. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/skew.mdx +352 -0
  306. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke-width.mdx +74 -0
  307. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke.mdx +103 -0
  308. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/styling-with-utility-classes.mdx +1020 -0
  309. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/table-layout.mdx +212 -0
  310. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-align.mdx +162 -0
  311. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-color.mdx +155 -0
  312. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-line.mdx +143 -0
  313. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-style.mdx +75 -0
  314. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-thickness.mdx +75 -0
  315. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-indent.mdx +74 -0
  316. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-overflow.mdx +103 -0
  317. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-shadow.mdx +177 -0
  318. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-transform.mdx +106 -0
  319. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-underline-offset.mdx +74 -0
  320. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-wrap.mdx +144 -0
  321. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/theme.mdx +1142 -0
  322. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/top-right-bottom-left.mdx +296 -0
  323. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/touch-action.mdx +95 -0
  324. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-origin.mdx +130 -0
  325. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-style.mdx +110 -0
  326. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform.mdx +51 -0
  327. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-behavior.mdx +76 -0
  328. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-delay.mdx +76 -0
  329. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-duration.mdx +82 -0
  330. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-property.mdx +137 -0
  331. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-timing-function.mdx +89 -0
  332. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/translate.mdx +487 -0
  333. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/upgrade-guide.mdx +910 -0
  334. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/user-select.mdx +114 -0
  335. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/vertical-align.mdx +194 -0
  336. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/visibility.mdx +287 -0
  337. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/white-space.mdx +211 -0
  338. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/width.mdx +264 -0
  339. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/will-change.mdx +47 -0
  340. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/word-break.mdx +94 -0
  341. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/z-index.mdx +104 -0
  342. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-catalog.md +251 -0
  343. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-index.tsx +237 -0
  344. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-source.txt +6 -0
  345. package/extensions/enact-repo/skills/tailwind-4-docs/references/gotchas.md +18 -0
  346. package/extensions/enact-repo/skills/tailwind-4-docs/scripts/sync_tailwind_docs.py +183 -0
  347. package/extensions/enact-repo/skills/tdd/SKILL.md +49 -0
  348. package/extensions/enact-repo/skills/tdd/references/mocking.md +59 -0
  349. package/extensions/enact-repo/skills/tdd/references/tests.md +77 -0
  350. package/extensions/enact-repo/skills/teach/SKILL.md +88 -0
  351. package/extensions/enact-repo/skills/teach/references/GLOSSARY-FORMAT.md +35 -0
  352. package/extensions/enact-repo/skills/teach/references/LEARNING-RECORD-FORMAT.md +46 -0
  353. package/extensions/enact-repo/skills/teach/references/MISSION-FORMAT.md +31 -0
  354. package/extensions/enact-repo/skills/teach/references/PHILOSOPHY.md +65 -0
  355. package/extensions/enact-repo/skills/teach/references/RESOURCES-FORMAT.md +32 -0
  356. package/extensions/enact-repo/skills/testing/SKILL.md +54 -0
  357. package/extensions/enact-repo/skills/to-spec/SKILL.md +85 -0
  358. package/extensions/enact-repo/skills/to-tickets/SKILL.md +75 -0
  359. package/extensions/enact-repo/skills/to-tickets/references/TICKET-TEMPLATES.md +39 -0
  360. package/extensions/enact-repo/skills/triage/SKILL.md +99 -0
  361. package/extensions/enact-repo/skills/triage/references/AGENT-BRIEF.md +207 -0
  362. package/extensions/enact-repo/skills/triage/references/NEEDS-INFO-TEMPLATE.md +17 -0
  363. package/extensions/enact-repo/skills/triage/references/OUT-OF-SCOPE.md +105 -0
  364. package/extensions/enact-repo/skills/ui-ux-pro-max/SKILL.md +32 -0
  365. package/extensions/enact-repo/skills/ui-ux-pro-max/references/Workflow.md +207 -0
  366. package/extensions/enact-repo/skills/ui-ux-pro-max/references/workflow-reference.md +175 -0
  367. package/extensions/enact-repo/skills/wayfinder/SKILL.md +100 -0
  368. package/extensions/enact-repo/skills/wayfinder/references/TEMPLATES.md +35 -0
  369. package/extensions/enact-repo/skills/wayfinder/references/TICKET-TYPES.md +8 -0
  370. package/extensions/enact-repo/skills/writing-great-skills/SKILL.md +93 -0
  371. package/extensions/enact-repo/skills/writing-great-skills/references/GLOSSARY.md +201 -0
  372. package/package.json +18 -14
  373. package/scripts/enact-extensions.mjs +255 -873
  374. package/scripts/lib/allowed-plugins.mjs +52 -0
  375. package/scripts/lib/run-repo-doctor.mjs +571 -0
  376. package/scripts/lib/run-repo-install.mjs +1579 -0
  377. package/scripts/lib/run-sync.mjs +1 -1
  378. package/scripts/lib/run-validate.mjs +23 -37
  379. package/scripts/lib/skill-validator.mjs +872 -0
  380. package/spec/enact.json +21 -3
  381. package/spec/enact.md +13 -12
  382. package/spec/kimi.json +100 -0
  383. package/spec/opencode.json +64 -0
  384. package/dist/install.d.ts +0 -235
  385. package/dist/install.d.ts.map +0 -1
  386. package/dist/install.js +0 -697
  387. package/dist/install.js.map +0 -1
  388. package/dist/internal/claude.d.ts +0 -65
  389. package/dist/internal/claude.d.ts.map +0 -1
  390. package/dist/internal/claude.js +0 -200
  391. package/dist/internal/claude.js.map +0 -1
  392. package/dist/internal/codex.d.ts +0 -43
  393. package/dist/internal/codex.d.ts.map +0 -1
  394. package/dist/internal/codex.js +0 -211
  395. package/dist/internal/codex.js.map +0 -1
  396. package/dist/internal/cursor.d.ts +0 -2
  397. package/dist/internal/cursor.d.ts.map +0 -1
  398. package/dist/internal/cursor.js +0 -6
  399. package/dist/internal/cursor.js.map +0 -1
  400. package/dist/principles.d.ts +0 -28
  401. package/dist/principles.d.ts.map +0 -1
  402. package/dist/principles.js +0 -159
  403. package/dist/principles.js.map +0 -1
  404. package/dist/provision.d.ts +0 -30
  405. package/dist/provision.d.ts.map +0 -1
  406. package/dist/provision.js +0 -202
  407. package/dist/provision.js.map +0 -1
  408. package/extensions/dev-state/.agents/plugin.json +0 -36
  409. package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +0 -194
  410. package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +0 -4
  411. package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +0 -130
  412. package/extensions/enact-context/.agents/plugin.json +0 -41
  413. package/extensions/enact-context/.mcp.json +0 -8
  414. package/extensions/enact-context/README.md +0 -25
  415. package/extensions/enact-context/assets/icon.png +0 -0
  416. package/extensions/enact-context/assets/logo.png +0 -0
  417. package/extensions/enact-context/hooks/hooks.json +0 -115
  418. package/extensions/enact-context/skills/enact-context/SKILL.md +0 -151
  419. package/extensions/enact-context/skills/enact-context/scripts/install.sh +0 -69
  420. package/extensions/enact-core/.agents/plugin.json +0 -40
  421. package/extensions/enact-core/OPERATING-PRINCIPLES.md +0 -7
  422. package/extensions/enact-core/hooks/hooks.json +0 -26
  423. package/extensions/enact-evolve/.agents/plugin.json +0 -47
  424. package/extensions/enact-evolve/agents/evolve-session-analyst.toml +0 -37
  425. package/extensions/enact-evolve/assets/icon.png +0 -0
  426. package/extensions/enact-evolve/assets/logo.png +0 -0
  427. package/extensions/enact-evolve/skills/mined-investigate-loop/SKILL.md +0 -68
  428. package/extensions/enact-evolve/skills/session-analysis/SKILL.md +0 -98
  429. package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +0 -343
  430. package/extensions/enact-factory/.agents/plugin.json +0 -49
  431. package/extensions/enact-factory/.mcp.json +0 -8
  432. package/extensions/enact-factory/agents/architect.toml +0 -34
  433. package/extensions/enact-factory/agents/code-reviewer.toml +0 -33
  434. package/extensions/enact-factory/agents/critic.toml +0 -39
  435. package/extensions/enact-factory/agents/executor.toml +0 -26
  436. package/extensions/enact-factory/agents/explore.toml +0 -25
  437. package/extensions/enact-factory/agents/planner.toml +0 -26
  438. package/extensions/enact-factory/agents/verifier.toml +0 -33
  439. package/extensions/enact-factory/assets/icon.png +0 -0
  440. package/extensions/enact-factory/assets/logo.png +0 -0
  441. package/extensions/enact-factory/skills/advisor/SKILL.md +0 -82
  442. package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +0 -57
  443. package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +0 -353
  444. package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +0 -309
  445. package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +0 -60
  446. package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +0 -87
  447. package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +0 -132
  448. package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +0 -53
  449. package/extensions/enact-factory/skills/cmux-leader/SKILL.md +0 -74
  450. package/extensions/enact-factory/skills/cmux-send/SKILL.md +0 -50
  451. package/extensions/enact-factory/skills/committee/SKILL.md +0 -80
  452. package/extensions/enact-factory/skills/deep-interview/SKILL.md +0 -68
  453. package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
  454. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
  455. package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
  456. package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
  457. package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
  458. package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
  459. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
  460. package/extensions/enact-factory/skills/research/SKILL.md +0 -83
  461. package/extensions/enact-factory/skills/review/SKILL.md +0 -67
  462. package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
  463. package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
  464. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
  465. package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
  466. package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
  467. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
  468. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
  469. package/extensions/enact-wiki/.agents/plugin.json +0 -43
  470. package/extensions/enact-wiki/.mcp.json +0 -15
  471. package/extensions/enact-wiki/README.md +0 -44
  472. package/extensions/enact-wiki/assets/icon.png +0 -0
  473. package/extensions/enact-wiki/assets/logo.png +0 -0
  474. package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
  475. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
  476. package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
  477. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
  478. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
  479. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
  480. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
  481. package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
  482. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
  483. package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
  484. package/extensions/net-revenue-management/.agents/plugin.json +0 -40
  485. package/extensions/net-revenue-management/.mcp.json +0 -9
  486. package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
  487. package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
  488. package/extensions/plugin-dev/.agents/plugin.json +0 -41
  489. package/extensions/plugin-dev/agents/agent-creator.md +0 -199
  490. package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
  491. package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
  492. package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
  493. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
  494. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
  495. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
  496. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
  497. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
  498. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
  499. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
  500. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
  501. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
  502. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
  503. package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
  504. package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
  505. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
  506. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
  507. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
  508. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
  509. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
  510. package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
  511. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
  512. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
  513. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
  514. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
  515. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
  516. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
  517. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
  518. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
  519. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
  520. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
  521. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
  522. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
  523. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
  524. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
  525. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
  526. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
  527. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
  528. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
  529. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
  530. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
  531. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
  532. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
  533. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
  534. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
  535. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
  536. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
  537. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
  538. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
  539. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
  540. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
  541. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
  542. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
  543. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
  544. package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
  545. package/scripts/check-hooks.mjs +0 -174
  546. package/scripts/check-principles.mjs +0 -116
  547. package/scripts/hooks/session-start-drift-check.mjs +0 -48
  548. package/scripts/install.sh +0 -70
  549. package/scripts/lib/auto-update.mjs +0 -75
  550. package/scripts/lib/bundle-hash.mjs +0 -137
  551. package/scripts/lib/hooks.mjs +0 -585
  552. package/scripts/lib/ledger.mjs +0 -163
  553. package/scripts/lib/migrate-artifacts.mjs +0 -144
  554. package/scripts/lib/outdated.mjs +0 -144
  555. package/scripts/lib/postinstall-offer.mjs +0 -83
  556. package/scripts/lib/principles.mjs +0 -109
  557. package/scripts/lib/provision-mcp.mjs +0 -16
  558. package/scripts/lib/resolve-plugin-root.mjs +0 -9
  559. package/scripts/lib/run-install.mjs +0 -500
  560. package/scripts/lib/run-prune.mjs +0 -94
  561. package/scripts/lib/run-uninstall.mjs +0 -244
  562. package/scripts/lib/run-update.mjs +0 -152
  563. package/scripts/lib/serve.mjs +0 -472
  564. package/scripts/lib/ups-router.mjs +0 -392
  565. package/scripts/postinstall.mjs +0 -101
  566. package/scripts/setup-enact-context.sh +0 -28
  567. package/scripts/version-bump.sh +0 -484
  568. package/web/assets/README.md +0 -111
  569. package/web/assets/logo-full.png +0 -0
  570. package/web/assets/logo-slim.png +0 -0
  571. package/web/assets/tokens/base.css +0 -45
  572. package/web/assets/tokens/colors.css +0 -248
  573. package/web/assets/tokens/effects.css +0 -24
  574. package/web/assets/tokens/fonts.css +0 -8
  575. package/web/assets/tokens/index.css +0 -18
  576. package/web/assets/tokens/spacing.css +0 -50
  577. package/web/index.html +0 -1188
package/dist/install.js DELETED
@@ -1,697 +0,0 @@
1
- import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { projectAgentsDir, writeCursorHooksFile } from "./internal/agents.js";
4
- import { homedir } from "node:os";
5
- import { defaultCodexHome, ensureMarketplace, isPluginEnabled, readCodexConfig, removePluginConfig, resolveCodexInstallHomes, setPluginEnabled, writeCodexConfig, } from "./internal/codex.js";
6
- import { manifestForPlatform } from "./create/index.js";
7
- import { DEFAULT_MCP_FILENAME, DEFAULT_PATHS, PROJECTION_COMPONENT_FIELDS } from "./internal/platform.js";
8
- import { checkComponentPaths, readManifestFile, validateClaudeManifest, validateCodexManifest, validateCursorManifest, } from "./validate/index.js";
9
- import { defaultClaudeHome, readEnabledPlugins, readKnownMarketplaces, registerLocalMarketplace, removeClaudeMarketplaceEntry, upsertClaudeMarketplaceEntry, } from "./internal/claude.js";
10
- import { defaultCursorHome } from "./internal/cursor.js";
11
- import { provisionMcp } from "./provision.js";
12
- function readJson(path, fallback) {
13
- if (!existsSync(path))
14
- return fallback;
15
- return JSON.parse(readFileSync(path, "utf8"));
16
- }
17
- function writeJson(path, value) {
18
- mkdirSync(dirname(path), { recursive: true });
19
- writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
20
- }
21
- function pathFieldsFromManifest(platform, manifest) {
22
- const fields = PROJECTION_COMPONENT_FIELDS[platform];
23
- const results = [];
24
- for (const field of fields) {
25
- const value = manifest[field];
26
- if (typeof value === "string" && value.trim())
27
- results.push(value);
28
- }
29
- if (platform === "cursor") {
30
- const logo = manifest.logo;
31
- if (typeof logo === "string" && logo.trim())
32
- results.push(logo);
33
- }
34
- const iface = manifest.interface;
35
- if (iface && typeof iface === "object" && !Array.isArray(iface)) {
36
- for (const field of ["composerIcon", "logo"]) {
37
- const value = iface[field];
38
- if (typeof value === "string" && value.trim())
39
- results.push(value);
40
- }
41
- }
42
- return results;
43
- }
44
- /**
45
- * Component path candidates to COPY for a surface. Derived per-surface manifests
46
- * may OMIT default-path fields (claude/cursor auto-discover from default dirs),
47
- * so we cannot rely on the manifest alone to know what to copy. We therefore
48
- * union the manifest's declared paths with the canonical default paths for each
49
- * auto-discovered component — the on-disk-existence check downstream filters out
50
- * components the bundle doesn't actually ship.
51
- */
52
- function copyPathCandidates(platform, manifest) {
53
- const candidates = [...pathFieldsFromManifest(platform, manifest)];
54
- // Fall back to canonical defaults for auto-discovered components that the
55
- // derived manifest may have stripped (claude/cursor). Only consider fields the
56
- // platform actually projects; codex/enact project canonical TOML agents while
57
- // claude/cursor transform them to Markdown.
58
- const projected = new Set(PROJECTION_COMPONENT_FIELDS[platform]);
59
- for (const field of ["skills", "agents", "hooks", "mcpServers"]) {
60
- if (!projected.has(field))
61
- continue;
62
- if (typeof manifest[field] === "string" && manifest[field].trim())
63
- continue;
64
- const def = DEFAULT_PATHS[field];
65
- if (def)
66
- candidates.push(def);
67
- }
68
- return candidates;
69
- }
70
- function normalizedProjectionEntries(platform, manifest, platformDir) {
71
- const entries = new Set([platformDir, "README.md"]);
72
- for (const raw of copyPathCandidates(platform, manifest)) {
73
- const cleaned = raw.replace(/^\.\//, "").replace(/\/+$/, "");
74
- if (!cleaned || cleaned.startsWith("../"))
75
- continue;
76
- entries.add(cleaned);
77
- }
78
- for (const hooksValue of [manifest.hooks, DEFAULT_PATHS.hooks]) {
79
- if (typeof hooksValue === "string" && hooksValue.trim()) {
80
- const cleaned = hooksValue.replace(/^\.\//, "").replace(/\/+$/, "");
81
- if (cleaned.endsWith("/hooks.json")) {
82
- const parentDir = dirname(cleaned);
83
- if (parentDir !== ".")
84
- entries.add(parentDir);
85
- }
86
- }
87
- }
88
- return [...entries];
89
- }
90
- function cleanRel(value) {
91
- if (typeof value !== "string")
92
- return null;
93
- const cleaned = value.replace(/^\.\//, "").replace(/\/+$/, "");
94
- return cleaned && !cleaned.startsWith("../") ? cleaned : null;
95
- }
96
- function projectBundle(sourceRoot, targetRoot, platform, manifest, platformDir) {
97
- rmSync(targetRoot, { recursive: true, force: true });
98
- mkdirSync(targetRoot, { recursive: true });
99
- // Resolve the agents source dir even when the derived manifest omits the field
100
- // (claude/cursor auto-discover agents/ from the default location).
101
- const agentsEntry = cleanRel(manifest.agents) ?? cleanRel(DEFAULT_PATHS.agents);
102
- // The on-disk hooks file we project from (default path; bundles use it).
103
- const hooksFileRel = (cleanRel(manifest.hooks) ?? cleanRel(DEFAULT_PATHS.hooks)) ?? "hooks/hooks.json";
104
- const hooksDirRel = hooksFileRel.endsWith("/hooks.json") ? dirname(hooksFileRel) : null;
105
- for (const entry of normalizedProjectionEntries(platform, manifest, platformDir)) {
106
- const sourcePath = resolve(sourceRoot, entry);
107
- if (!existsSync(sourcePath))
108
- continue;
109
- // Agents are transformed per surface (canonical .toml → .md for claude/cursor),
110
- // not copied verbatim. Everything else copies as-is.
111
- if (entry === agentsEntry && statSync(sourcePath).isDirectory()) {
112
- projectAgentsDir(sourcePath, join(targetRoot, entry), platform);
113
- continue;
114
- }
115
- // Cursor uses a different hooks schema (flat camelCase). Skip the raw hooks
116
- // dir copy here; the projected hooks.json is written below instead.
117
- if (platform === "cursor" && hooksDirRel && entry === hooksDirRel) {
118
- continue;
119
- }
120
- cpSync(sourcePath, join(targetRoot, entry), { recursive: true, force: true });
121
- }
122
- if (platform === "cursor") {
123
- // Project the canonical hooks.json into Cursor's flat camelCase schema,
124
- // preserving any non-hooks files alongside it (e.g. hook scripts).
125
- const hooksSource = resolve(sourceRoot, hooksFileRel);
126
- if (existsSync(hooksSource) && hooksDirRel) {
127
- const targetHooksDir = join(targetRoot, hooksDirRel);
128
- const sourceHooksDir = resolve(sourceRoot, hooksDirRel);
129
- // Copy sibling files (scripts) verbatim, then overwrite the hooks.json.
130
- if (existsSync(sourceHooksDir) && statSync(sourceHooksDir).isDirectory()) {
131
- for (const f of readdirSync(sourceHooksDir, { withFileTypes: true })) {
132
- if (f.name === "hooks.json")
133
- continue;
134
- cpSync(join(sourceHooksDir, f.name), join(targetHooksDir, f.name), {
135
- recursive: true,
136
- force: true,
137
- });
138
- }
139
- }
140
- writeCursorHooksFile(hooksSource, join(targetRoot, hooksFileRel));
141
- }
142
- // Cursor convention: the MCP config file is `mcp.json` (no leading dot).
143
- const cursorMcp = DEFAULT_MCP_FILENAME.cursor;
144
- const dottedMcp = resolve(sourceRoot, ".mcp.json");
145
- if (cursorMcp && existsSync(dottedMcp)) {
146
- cpSync(dottedMcp, join(targetRoot, cursorMcp), { force: true });
147
- rmSync(join(targetRoot, ".mcp.json"), { force: true });
148
- }
149
- }
150
- writeJson(join(targetRoot, platformDir, "plugin.json"), manifest);
151
- }
152
- /**
153
- * Derive a per-surface plugin manifest IN MEMORY from the bundle's canonical
154
- * Enact manifest. Installs must never write a `.<platform>-plugin/` projection
155
- * back into the SOURCE bundle dir — the derived manifest is handed to
156
- * `projectBundle`, which writes it ONLY to the install target.
157
- *
158
- * Backward-compat: some legacy bundles ship a pre-derived per-surface manifest
159
- * (`.codex-plugin/plugin.json`) with NO canonical `.agents/plugin.json`. In that
160
- * case we fall back to reading the existing per-surface manifest from source —
161
- * this is a read, not a write, so the source stays clean.
162
- */
163
- function deriveTargetManifest(pluginRoot, platform) {
164
- const enactManifestPath = join(pluginRoot, ".agents", "plugin.json");
165
- if (existsSync(enactManifestPath)) {
166
- const enact = readManifestFile(pluginRoot, "enact");
167
- return manifestForPlatform(platform, enact);
168
- }
169
- // Legacy fallback: a per-surface-only bundle (no canonical Enact manifest).
170
- const surfaceManifestPath = join(pluginRoot, `.${platform}-plugin`, "plugin.json");
171
- if (existsSync(surfaceManifestPath)) {
172
- return readManifestFile(pluginRoot, platform);
173
- }
174
- throw new Error(`Cannot derive ${platform} manifest: no canonical manifest at ${enactManifestPath} ` +
175
- `and no ${platform} manifest at ${surfaceManifestPath}`);
176
- }
177
- function stringField(manifest, key) {
178
- const value = manifest[key];
179
- return typeof value === "string" && value.trim() ? value : undefined;
180
- }
181
- export function codexMarketplaceRoot(codexHome, marketplaceName = "enact-os-plugins") {
182
- return join(codexHome, "marketplaces", marketplaceName);
183
- }
184
- export function codexMarketplacePath(codexHome, marketplaceName = "enact-os-plugins") {
185
- return join(codexMarketplaceRoot(codexHome, marketplaceName), ".agents", "plugins", "marketplace.json");
186
- }
187
- export function codexMarketplacePluginPath(codexHome, marketplaceName, pluginName) {
188
- return join(codexMarketplaceRoot(codexHome, marketplaceName), "plugins", pluginName);
189
- }
190
- export function codexInstalledPluginPath(codexHome, pluginName) {
191
- return join(codexHome, "plugins", pluginName);
192
- }
193
- export function codexPluginCachePath(codexHome, marketplaceName, pluginName, version) {
194
- return join(codexHome, "plugins", "cache", marketplaceName, pluginName, version);
195
- }
196
- export function codexPluginCacheRoot(codexHome, marketplaceName, pluginName) {
197
- return join(codexHome, "plugins", "cache", marketplaceName, pluginName);
198
- }
199
- export function readCodexPluginManifest(pluginRoot) {
200
- const manifestPath = join(pluginRoot, ".codex-plugin", "plugin.json");
201
- return readJson(manifestPath, null);
202
- }
203
- export function claudeMarketplaceDir(claudeHome, marketplaceName = "enact-os-plugins") {
204
- return join(claudeHome, "plugins", "marketplaces", marketplaceName);
205
- }
206
- export function claudeInstalledPluginPath(claudeHome, marketplaceName, pluginName) {
207
- return join(claudeMarketplaceDir(claudeHome, marketplaceName), "plugins", pluginName);
208
- }
209
- export function claudeKnownMarketplacesPath(claudeHome) {
210
- return join(claudeHome, "plugins", "known_marketplaces.json");
211
- }
212
- export function readClaudePluginManifest(pluginRoot) {
213
- const manifestPath = join(pluginRoot, ".claude-plugin", "plugin.json");
214
- return readJson(manifestPath, null);
215
- }
216
- function marketplaceDisplayName(marketplaceName) {
217
- return marketplaceName
218
- .split("-")
219
- .filter(Boolean)
220
- .map((part) => part[0]?.toUpperCase() + part.slice(1))
221
- .join(" ");
222
- }
223
- function categoryFrom(manifest) {
224
- const iface = manifest.interface;
225
- if (iface && typeof iface === "object" && !Array.isArray(iface)) {
226
- const category = iface.category;
227
- if (typeof category === "string" && category.trim())
228
- return category;
229
- }
230
- return "Developer Tools";
231
- }
232
- function manifestForCodexInstall(manifest) {
233
- return manifest;
234
- }
235
- function upsertMarketplaceEntry(codexHome, marketplaceName, manifest, pluginName) {
236
- const path = codexMarketplacePath(codexHome, marketplaceName);
237
- const current = readJson(path, {
238
- name: marketplaceName,
239
- interface: { displayName: marketplaceDisplayName(marketplaceName) },
240
- plugins: [],
241
- });
242
- const entry = {
243
- name: pluginName,
244
- source: { source: "local", path: `./plugins/${pluginName}` },
245
- policy: { installation: "AVAILABLE", authentication: "ON_INSTALL" },
246
- category: categoryFrom(manifest),
247
- };
248
- const plugins = (current.plugins ?? []).filter((plugin) => plugin.name !== pluginName);
249
- plugins.push(entry);
250
- writeJson(path, {
251
- name: current.name || marketplaceName,
252
- interface: {
253
- displayName: current.interface?.displayName || marketplaceDisplayName(marketplaceName),
254
- },
255
- plugins,
256
- });
257
- return path;
258
- }
259
- export function installCodexPluginBundle(options) {
260
- const codexHome = options.codexHome ?? defaultCodexHome();
261
- const marketplaceName = options.marketplaceName ?? "enact-os-plugins";
262
- // Per-surface manifests are derived IN MEMORY; install never writes to source.
263
- const codexManifest = deriveTargetManifest(options.pluginRoot, "codex");
264
- const validation = validateCodexManifest(codexManifest);
265
- if (!validation.ok) {
266
- throw new Error(`Invalid Codex plugin manifest:\n${validation.errors.join("\n")}`);
267
- }
268
- const componentIssues = checkComponentPaths(options.pluginRoot, codexManifest)
269
- .map((issue) => `codex ${issue}`);
270
- if (componentIssues.length > 0) {
271
- throw new Error(`Plugin component paths are not installable:\n${componentIssues.join("\n")}`);
272
- }
273
- const name = stringField(codexManifest, "name");
274
- if (!name) {
275
- throw new Error("Codex plugin manifest is missing name");
276
- }
277
- const installManifest = manifestForCodexInstall(codexManifest);
278
- const version = stringField(codexManifest, "version") ?? "0.0.0";
279
- const pluginConfigKey = `${name}@${marketplaceName}`;
280
- const config = readCodexConfig(codexHome);
281
- ensureMarketplace(config, marketplaceName, {
282
- source: codexMarketplaceRoot(codexHome, marketplaceName),
283
- source_type: "local",
284
- });
285
- if (options.enable !== false) {
286
- setPluginEnabled(config, pluginConfigKey, true);
287
- }
288
- const configPath = writeCodexConfig(codexHome, config);
289
- const mktPath = upsertMarketplaceEntry(codexHome, marketplaceName, installManifest, name);
290
- const mktPluginPath = codexMarketplacePluginPath(codexHome, marketplaceName, name);
291
- const installedPath = codexInstalledPluginPath(codexHome, name);
292
- const cachePath = codexPluginCachePath(codexHome, marketplaceName, name, version);
293
- projectBundle(options.pluginRoot, mktPluginPath, "codex", installManifest, ".codex-plugin");
294
- projectBundle(options.pluginRoot, installedPath, "codex", installManifest, ".codex-plugin");
295
- projectBundle(options.pluginRoot, cachePath, "codex", installManifest, ".codex-plugin");
296
- return {
297
- name,
298
- version,
299
- marketplaceName,
300
- pluginConfigKey,
301
- configPath,
302
- marketplacePath: mktPath,
303
- marketplacePluginPath: mktPluginPath,
304
- installedPluginPath: installedPath,
305
- cachePluginPath: cachePath,
306
- refreshedPaths: [mktPluginPath, installedPath, cachePath],
307
- syncResults: [],
308
- };
309
- }
310
- export function installPluginBundle(options) {
311
- const codexHomes = resolveCodexInstallHomes({
312
- cwd: options.cwd ?? options.pluginRoot,
313
- codexHome: options.codexHome,
314
- });
315
- const results = codexHomes.map((codexHome) => installCodexPluginBundle({
316
- ...options,
317
- codexHome,
318
- }));
319
- return { codexHomes, results };
320
- }
321
- export function installCodexPluginBundleWithProvision(options) {
322
- const result = installCodexPluginBundle(options);
323
- const provision = provisionMcp(options.pluginRoot, {
324
- noProvision: options.noProvision,
325
- exec: options.provisionExec,
326
- });
327
- return {
328
- ...result,
329
- provision,
330
- };
331
- }
332
- export function installPluginBundleWithProvision(options) {
333
- const result = installPluginBundle(options);
334
- const provision = provisionMcp(options.pluginRoot, {
335
- noProvision: options.noProvision,
336
- exec: options.provisionExec,
337
- });
338
- return {
339
- ...result,
340
- provision,
341
- };
342
- }
343
- export function codexPluginStatus(codexHome, pluginName, marketplaceName = "enact-os-plugins") {
344
- const pluginConfigKey = `${pluginName}@${marketplaceName}`;
345
- const installedPath = codexInstalledPluginPath(codexHome, pluginName);
346
- const cacheRoot = codexPluginCacheRoot(codexHome, marketplaceName, pluginName);
347
- const config = readCodexConfig(codexHome);
348
- const cachedVersions = existsSync(cacheRoot)
349
- ? readdirSync(cacheRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort()
350
- : [];
351
- const manifest = existsSync(installedPath) ? readCodexPluginManifest(installedPath) : null;
352
- return {
353
- name: pluginName,
354
- enabled: isPluginEnabled(config, pluginConfigKey),
355
- installed: existsSync(installedPath),
356
- cachedVersions,
357
- manifest,
358
- pluginConfigKey,
359
- marketplaceName,
360
- installedPluginPath: installedPath,
361
- marketplacePluginPath: codexMarketplacePluginPath(codexHome, marketplaceName, pluginName),
362
- cacheRoot,
363
- };
364
- }
365
- export function setInstalledCodexPluginEnabled(codexHome, pluginName, enabled, marketplaceName = "enact-os-plugins") {
366
- const config = readCodexConfig(codexHome);
367
- setPluginEnabled(config, `${pluginName}@${marketplaceName}`, enabled);
368
- writeCodexConfig(codexHome, config);
369
- return codexPluginStatus(codexHome, pluginName, marketplaceName);
370
- }
371
- export function runCodexPluginsDoctor(codexHome = defaultCodexHome(), marketplaceName = "enact-os-plugins") {
372
- const config = readCodexConfig(codexHome);
373
- const marketplace = readJson(codexMarketplacePath(codexHome, marketplaceName), {
374
- name: marketplaceName,
375
- interface: { displayName: marketplaceDisplayName(marketplaceName) },
376
- plugins: [],
377
- });
378
- const installedPluginsDir = join(codexMarketplaceRoot(codexHome, marketplaceName), "plugins");
379
- const installedPlugins = existsSync(installedPluginsDir)
380
- ? readdirSync(installedPluginsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name)
381
- : [];
382
- const warnings = [];
383
- for (const entry of marketplace.plugins) {
384
- if (!installedPlugins.includes(entry.name) && isPluginEnabled(config, `${entry.name}@${marketplaceName}`)) {
385
- warnings.push(`plugin ${entry.name} enabled in config but not installed locally`);
386
- }
387
- }
388
- return {
389
- configPlugins: Object.keys(config.plugins ?? {}).sort(),
390
- marketplaceConfigured: Boolean(config.marketplaces?.[marketplaceName]),
391
- marketplaceRoot: codexMarketplaceRoot(codexHome, marketplaceName),
392
- marketplacePath: codexMarketplacePath(codexHome, marketplaceName),
393
- marketplacePlugins: marketplace.plugins.map((plugin) => plugin.name).sort(),
394
- installedPlugins: installedPlugins.sort(),
395
- warnings,
396
- };
397
- }
398
- export function installClaudePluginBundle(options) {
399
- const claudeHome = options.claudeHome ?? defaultClaudeHome();
400
- const marketplaceName = options.marketplaceName ?? "enact-os-plugins";
401
- // Per-surface manifest derived IN MEMORY; install never writes to source.
402
- const claudeManifest = deriveTargetManifest(options.pluginRoot, "claude");
403
- const validation = validateClaudeManifest(claudeManifest);
404
- if (!validation.ok) {
405
- throw new Error(`Invalid Claude plugin manifest:\n${validation.errors.join("\n")}`);
406
- }
407
- const name = stringField(claudeManifest, "name");
408
- if (!name) {
409
- throw new Error("Claude plugin manifest is missing name");
410
- }
411
- const version = stringField(claudeManifest, "version") ?? "0.0.0";
412
- const marketplaceDir = join(claudeHome, "plugins", "marketplaces", marketplaceName);
413
- const installedPath = join(marketplaceDir, "plugins", name);
414
- projectBundle(options.pluginRoot, installedPath, "claude", claudeManifest, ".claude-plugin");
415
- // Claude discovers a directory marketplace's plugins from
416
- // <marketplaceDir>/.claude-plugin/marketplace.json. Add/refresh this plugin's
417
- // entry (mirrors the codex marketplace.json maintenance).
418
- upsertClaudeMarketplaceEntry(marketplaceDir, marketplaceName, name, stringField(claudeManifest, "description"));
419
- registerLocalMarketplace(claudeHome, marketplaceName, marketplaceDir);
420
- return {
421
- name,
422
- version,
423
- marketplaceName,
424
- marketplaceDir,
425
- installedPluginPath: installedPath,
426
- refreshedPaths: [installedPath],
427
- syncResults: [],
428
- };
429
- }
430
- export function installClaudePluginBundleWithProvision(options) {
431
- const result = installClaudePluginBundle(options);
432
- const provision = provisionMcp(options.pluginRoot, {
433
- noProvision: options.noProvision,
434
- exec: options.provisionExec,
435
- });
436
- return {
437
- ...result,
438
- provision,
439
- };
440
- }
441
- export function claudePluginStatus(claudeHome, pluginName, marketplaceName = "enact-os-plugins") {
442
- const marketplaceDir = claudeMarketplaceDir(claudeHome, marketplaceName);
443
- const knownMarketplaces = readKnownMarketplaces(claudeHome);
444
- const installedPath = claudeInstalledPluginPath(claudeHome, marketplaceName, pluginName);
445
- const manifest = existsSync(installedPath) ? readClaudePluginManifest(installedPath) : null;
446
- const enabledPlugins = readEnabledPlugins(claudeHome);
447
- return {
448
- name: pluginName,
449
- installed: existsSync(installedPath),
450
- enabled: Boolean(enabledPlugins[`${pluginName}@${marketplaceName}`]),
451
- manifest,
452
- marketplaceName,
453
- marketplaceDir,
454
- installedPluginPath: installedPath,
455
- knownMarketplaceRegistered: Boolean(knownMarketplaces[marketplaceName]),
456
- knownMarketplacesPath: claudeKnownMarketplacesPath(claudeHome),
457
- };
458
- }
459
- export function runClaudePluginsDoctor(claudeHome = defaultClaudeHome(), marketplaceName = "enact-os-plugins") {
460
- const marketplaceDir = claudeMarketplaceDir(claudeHome, marketplaceName);
461
- const knownMarketplaces = readKnownMarketplaces(claudeHome);
462
- const enabledPlugins = readEnabledPlugins(claudeHome);
463
- const installedPluginsDir = join(marketplaceDir, "plugins");
464
- const installedPlugins = existsSync(installedPluginsDir)
465
- ? readdirSync(installedPluginsDir, { withFileTypes: true })
466
- .filter((entry) => entry.isDirectory())
467
- .map((entry) => entry.name)
468
- : [];
469
- const warnings = [];
470
- if (!knownMarketplaces[marketplaceName] && installedPlugins.length > 0) {
471
- warnings.push(`marketplace ${marketplaceName} has installed plugins but is not registered in known_marketplaces.json`);
472
- }
473
- if (knownMarketplaces[marketplaceName] && !existsSync(marketplaceDir)) {
474
- warnings.push(`marketplace ${marketplaceName} registered in known_marketplaces.json but install directory is missing`);
475
- }
476
- return {
477
- marketplaceName,
478
- marketplaceDir,
479
- knownMarketplacesPath: claudeKnownMarketplacesPath(claudeHome),
480
- marketplaceRegistered: Boolean(knownMarketplaces[marketplaceName]),
481
- marketplacePlugins: installedPlugins.slice().sort(),
482
- installedPlugins: installedPlugins.sort(),
483
- enabledPlugins: Object.entries(enabledPlugins)
484
- .filter(([pluginId, enabled]) => enabled && pluginId.endsWith(`@${marketplaceName}`))
485
- .map(([pluginId]) => pluginId.slice(0, -(`@${marketplaceName}`).length))
486
- .sort(),
487
- warnings,
488
- };
489
- }
490
- export function installCursorPluginBundle(options) {
491
- const cursorHome = options.cursorHome ?? defaultCursorHome();
492
- // Per-surface manifest derived IN MEMORY; install never writes to source.
493
- const cursorManifest = deriveTargetManifest(options.pluginRoot, "cursor");
494
- const validation = validateCursorManifest(cursorManifest);
495
- if (!validation.ok) {
496
- throw new Error(`Invalid Cursor plugin manifest:\n${validation.errors.join("\n")}`);
497
- }
498
- const name = stringField(cursorManifest, "name");
499
- if (!name) {
500
- throw new Error("Cursor plugin manifest is missing name");
501
- }
502
- const version = stringField(cursorManifest, "version") ?? "0.0.0";
503
- const installedPath = join(cursorHome, "plugins", "local", name);
504
- projectBundle(options.pluginRoot, installedPath, "cursor", cursorManifest, ".cursor-plugin");
505
- return {
506
- name,
507
- version,
508
- installedPluginPath: installedPath,
509
- refreshedPaths: [installedPath],
510
- syncResults: [],
511
- };
512
- }
513
- /**
514
- * Guard: ensure the target path stays within the expected base directory
515
- * to prevent accidental deletion outside a known home.
516
- */
517
- function assertWithinBase(base, target) {
518
- const resolvedBase = resolve(base);
519
- const resolvedTarget = resolve(target);
520
- if (!resolvedTarget.startsWith(resolvedBase + "/") && resolvedTarget !== resolvedBase) {
521
- throw new Error(`Safety check failed: resolved path ${resolvedTarget} is not within base ${resolvedBase}`);
522
- }
523
- }
524
- /**
525
- * Remove a marketplace.json entry for `pluginName`.
526
- * If the file doesn't exist or the entry isn't there, this is a no-op.
527
- * The marketplace registration entry (top-level name/interface fields) is preserved.
528
- * Other plugin entries are preserved.
529
- */
530
- function removeMarketplaceEntry(codexHome, marketplaceName, pluginName) {
531
- const path = codexMarketplacePath(codexHome, marketplaceName);
532
- if (!existsSync(path))
533
- return;
534
- const current = readJson(path, { name: marketplaceName, plugins: [] });
535
- const filtered = (current.plugins ?? []).filter((p) => p.name !== pluginName);
536
- writeJson(path, {
537
- name: current.name || marketplaceName,
538
- ...(current.interface ? { interface: current.interface } : {}),
539
- plugins: filtered,
540
- });
541
- }
542
- /**
543
- * Fully uninstall a Codex/Enact plugin from the given home, reversing installCodexPluginBundle:
544
- * - removes <home>/plugins/<name>/ (installed dir)
545
- * - removes <home>/marketplaces/<marketplace>/plugins/<name>/ (marketplace plugin dir)
546
- * - removes <home>/plugins/cache/<marketplace>/<name>/ (cache dir)
547
- * - removes the plugin's entry from marketplace.json (preserves other entries + marketplace reg)
548
- * - removes [plugins."<name>@<marketplace>"] from config.toml (preserves [marketplaces.*] etc.)
549
- */
550
- export function uninstallCodexPluginBundle(name, options = {}) {
551
- const codexHome = options.codexHome ?? defaultCodexHome();
552
- const mktName = options.marketplaceName ?? "enact-os-plugins";
553
- const pluginConfigKey = `${name}@${mktName}`;
554
- const installedPath = codexInstalledPluginPath(codexHome, name);
555
- const mktPluginPath = codexMarketplacePluginPath(codexHome, mktName, name);
556
- // Cache dir is versioned; remove the entire <cache>/<marketplace>/<name>/ subtree
557
- const cacheDirForPlugin = join(codexHome, "plugins", "cache", mktName, name);
558
- const noop = !existsSync(installedPath) &&
559
- !existsSync(mktPluginPath) &&
560
- !existsSync(cacheDirForPlugin);
561
- const removedPaths = [];
562
- if (existsSync(installedPath)) {
563
- assertWithinBase(join(codexHome, "plugins"), installedPath);
564
- rmSync(installedPath, { recursive: true, force: true });
565
- removedPaths.push(installedPath);
566
- }
567
- if (existsSync(mktPluginPath)) {
568
- assertWithinBase(join(codexHome, "marketplaces"), mktPluginPath);
569
- rmSync(mktPluginPath, { recursive: true, force: true });
570
- removedPaths.push(mktPluginPath);
571
- }
572
- if (existsSync(cacheDirForPlugin)) {
573
- assertWithinBase(join(codexHome, "plugins", "cache"), cacheDirForPlugin);
574
- rmSync(cacheDirForPlugin, { recursive: true, force: true });
575
- removedPaths.push(cacheDirForPlugin);
576
- }
577
- // Remove plugin entry from marketplace.json (leave file + other entries intact)
578
- removeMarketplaceEntry(codexHome, mktName, name);
579
- // Remove [plugins."<name>@<marketplace>"] from config.toml (leave marketplaces.* intact)
580
- const config = readCodexConfig(codexHome);
581
- removePluginConfig(config, pluginConfigKey);
582
- if (existsSync(join(codexHome, "config.toml"))) {
583
- writeCodexConfig(codexHome, config);
584
- }
585
- return { name, marketplaceName: mktName, removedPaths, noop };
586
- }
587
- /**
588
- * Fully uninstall a Claude plugin, reversing installClaudePluginBundle:
589
- * - removes <claudeHome>/plugins/marketplaces/<marketplace>/plugins/<name>/
590
- * Note: the marketplace registration in known_marketplaces.json is LEFT intact
591
- * (the marketplace itself persists even after its last plugin is removed).
592
- */
593
- export function uninstallClaudePluginBundle(name, options = {}) {
594
- const claudeHome = options.claudeHome ?? defaultClaudeHome();
595
- const mktName = options.marketplaceName ?? "enact-os-plugins";
596
- const marketplaceDir = join(claudeHome, "plugins", "marketplaces", mktName);
597
- const installedPath = join(marketplaceDir, "plugins", name);
598
- const noop = !existsSync(installedPath);
599
- const removedPaths = [];
600
- if (existsSync(installedPath)) {
601
- assertWithinBase(marketplaceDir, installedPath);
602
- rmSync(installedPath, { recursive: true, force: true });
603
- removedPaths.push(installedPath);
604
- }
605
- // Remove this plugin's entry from the marketplace.json (leave the file, the
606
- // marketplace registration, and other plugin entries intact).
607
- removeClaudeMarketplaceEntry(marketplaceDir, mktName, name);
608
- return { name, removedPaths, noop };
609
- }
610
- /**
611
- * Fully uninstall a Cursor plugin, reversing installCursorPluginBundle:
612
- * - removes <cursorHome>/plugins/local/<name>/
613
- */
614
- export function uninstallCursorPluginBundle(name, options = {}) {
615
- const cursorHome = options.cursorHome ?? defaultCursorHome();
616
- const installedPath = join(cursorHome, "plugins", "local", name);
617
- const noop = !existsSync(installedPath);
618
- const removedPaths = [];
619
- if (existsSync(installedPath)) {
620
- assertWithinBase(join(cursorHome, "plugins", "local"), installedPath);
621
- rmSync(installedPath, { recursive: true, force: true });
622
- removedPaths.push(installedPath);
623
- }
624
- return { name, removedPaths, noop };
625
- }
626
- /**
627
- * Default global shared home base. The convention is that skills live at
628
- * `~/.agents/skills/<plugin>/`, so this returns `homedir()` and the install
629
- * function appends `.agents/skills/<name>`.
630
- *
631
- * Pass an explicit `sharedHome` to override (useful in tests or local scope).
632
- */
633
- export function defaultSharedHome() {
634
- return homedir();
635
- }
636
- /**
637
- * Install the bundle's skills tree into <sharedHome>/.agents/skills/<plugin>/.
638
- * Does NOT write a marketplace entry, config.toml, or any platform-specific
639
- * manifest — this is a pure host-neutral skills drop that any host reading
640
- * `.agents/skills/` (Codex, Cursor, Gemini, etc.) can pick up.
641
- */
642
- export function installSharedPluginBundle(options) {
643
- const sharedHome = options.sharedHome ?? defaultSharedHome();
644
- // Read the enact manifest for name/version; fall back to codex if no enact manifest.
645
- const enactManifestPath = join(options.pluginRoot, ".agents", "plugin.json");
646
- let manifest;
647
- if (existsSync(enactManifestPath)) {
648
- manifest = readManifestFile(options.pluginRoot, "enact");
649
- }
650
- else {
651
- manifest = readManifestFile(options.pluginRoot, "codex");
652
- }
653
- const name = stringField(manifest, "name");
654
- if (!name) {
655
- throw new Error("Plugin manifest is missing name");
656
- }
657
- const version = stringField(manifest, "version") ?? "0.0.0";
658
- // Resolve the skills source path from the manifest
659
- const rawSkills = stringField(manifest, "skills");
660
- if (!rawSkills) {
661
- throw new Error(`Plugin manifest for '${name}' has no 'skills' field — nothing to install for shared target`);
662
- }
663
- const cleanedSkills = rawSkills.replace(/^\.\//, "").replace(/\/+$/, "");
664
- const skillsSource = resolve(options.pluginRoot, cleanedSkills);
665
- // shared is a skills-only surface: a missing skills source is misuse.
666
- // Fail loudly before touching the target rather than producing an empty dir.
667
- if (!existsSync(skillsSource)) {
668
- throw new Error(`Cannot install shared bundle "${name}": skills source not found at ${skillsSource}`);
669
- }
670
- // Target: <sharedHome>/.agents/skills/<name>/
671
- const installedSkillsPath = join(sharedHome, ".agents", "skills", name);
672
- rmSync(installedSkillsPath, { recursive: true, force: true });
673
- mkdirSync(installedSkillsPath, { recursive: true });
674
- cpSync(skillsSource, installedSkillsPath, { recursive: true, force: true });
675
- return {
676
- name,
677
- version,
678
- installedSkillsPath,
679
- };
680
- }
681
- /**
682
- * Uninstall a shared plugin by removing its skills directory.
683
- * Reverses installSharedPluginBundle.
684
- */
685
- export function uninstallSharedPluginBundle(name, options = {}) {
686
- const sharedHome = options.sharedHome ?? defaultSharedHome();
687
- const installedSkillsPath = join(sharedHome, ".agents", "skills", name);
688
- const noop = !existsSync(installedSkillsPath);
689
- const removedPaths = [];
690
- if (existsSync(installedSkillsPath)) {
691
- assertWithinBase(join(sharedHome, ".agents", "skills"), installedSkillsPath);
692
- rmSync(installedSkillsPath, { recursive: true, force: true });
693
- removedPaths.push(installedSkillsPath);
694
- }
695
- return { name, installedSkillsPath, removedPaths, noop };
696
- }
697
- //# sourceMappingURL=install.js.map