@amsterdamdatalabs/enact-extensions 0.1.42 → 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 (580) 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 +11 -1
  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 +84 -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 +43 -26
  81. package/extensions/enact-loop/skills/loop-intake/SKILL.md +44 -32
  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 -878
  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/deslop-handover/SKILL.md +0 -97
  454. package/extensions/enact-factory/skills/deslop-handover/deslop.py +0 -181
  455. package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
  456. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
  457. package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
  458. package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
  459. package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
  460. package/extensions/enact-factory/skills/paseo-dispatch/SKILL.md +0 -141
  461. package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
  462. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
  463. package/extensions/enact-factory/skills/research/SKILL.md +0 -83
  464. package/extensions/enact-factory/skills/review/SKILL.md +0 -67
  465. package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
  466. package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
  467. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
  468. package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
  469. package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
  470. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
  471. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
  472. package/extensions/enact-wiki/.agents/plugin.json +0 -43
  473. package/extensions/enact-wiki/.mcp.json +0 -15
  474. package/extensions/enact-wiki/README.md +0 -44
  475. package/extensions/enact-wiki/assets/icon.png +0 -0
  476. package/extensions/enact-wiki/assets/logo.png +0 -0
  477. package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
  478. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
  479. package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
  480. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
  481. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
  482. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
  483. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
  484. package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
  485. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
  486. package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
  487. package/extensions/net-revenue-management/.agents/plugin.json +0 -40
  488. package/extensions/net-revenue-management/.mcp.json +0 -9
  489. package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
  490. package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
  491. package/extensions/plugin-dev/.agents/plugin.json +0 -41
  492. package/extensions/plugin-dev/agents/agent-creator.md +0 -199
  493. package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
  494. package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
  495. package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
  496. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
  497. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
  498. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
  499. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
  500. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
  501. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
  502. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
  503. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
  504. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
  505. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
  506. package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
  507. package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
  508. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
  509. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
  510. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
  511. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
  512. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
  513. package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
  514. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
  515. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
  516. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
  517. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
  518. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
  519. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
  520. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
  521. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
  522. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
  523. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
  524. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
  525. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
  526. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
  527. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
  528. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
  529. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
  530. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
  531. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
  532. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
  533. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
  534. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
  535. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
  536. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
  537. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
  538. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
  539. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
  540. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
  541. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
  542. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
  543. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
  544. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
  545. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
  546. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
  547. package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
  548. package/scripts/check-hooks.mjs +0 -174
  549. package/scripts/check-principles.mjs +0 -116
  550. package/scripts/hooks/session-start-drift-check.mjs +0 -49
  551. package/scripts/install.sh +0 -70
  552. package/scripts/lib/auto-update.mjs +0 -88
  553. package/scripts/lib/bundle-hash.mjs +0 -137
  554. package/scripts/lib/hooks.mjs +0 -585
  555. package/scripts/lib/ledger.mjs +0 -163
  556. package/scripts/lib/migrate-artifacts.mjs +0 -144
  557. package/scripts/lib/outdated.mjs +0 -144
  558. package/scripts/lib/postinstall-offer.mjs +0 -83
  559. package/scripts/lib/principles.mjs +0 -109
  560. package/scripts/lib/provision-mcp.mjs +0 -16
  561. package/scripts/lib/resolve-plugin-root.mjs +0 -9
  562. package/scripts/lib/run-install.mjs +0 -507
  563. package/scripts/lib/run-prune.mjs +0 -94
  564. package/scripts/lib/run-uninstall.mjs +0 -244
  565. package/scripts/lib/run-update.mjs +0 -165
  566. package/scripts/lib/serve.mjs +0 -472
  567. package/scripts/lib/ups-router.mjs +0 -392
  568. package/scripts/postinstall.mjs +0 -101
  569. package/scripts/setup-enact-context.sh +0 -28
  570. package/scripts/version-bump.sh +0 -484
  571. package/web/assets/README.md +0 -111
  572. package/web/assets/logo-full.png +0 -0
  573. package/web/assets/logo-slim.png +0 -0
  574. package/web/assets/tokens/base.css +0 -45
  575. package/web/assets/tokens/colors.css +0 -248
  576. package/web/assets/tokens/effects.css +0 -24
  577. package/web/assets/tokens/fonts.css +0 -8
  578. package/web/assets/tokens/index.css +0 -18
  579. package/web/assets/tokens/spacing.css +0 -50
  580. 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