@amsterdamdatalabs/enact-extensions 0.1.42 → 0.1.48

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 (596) hide show
  1. package/README.md +67 -108
  2. package/bundled-extensions.json +3 -0
  3. package/dist/create/claude.d.ts.map +1 -1
  4. package/dist/create/claude.js +1 -1
  5. package/dist/create/claude.js.map +1 -1
  6. package/dist/create/codex.d.ts.map +1 -1
  7. package/dist/create/codex.js +2 -3
  8. package/dist/create/codex.js.map +1 -1
  9. package/dist/create/cursor.d.ts.map +1 -1
  10. package/dist/create/cursor.js +3 -7
  11. package/dist/create/cursor.js.map +1 -1
  12. package/dist/create/enact.d.ts.map +1 -1
  13. package/dist/create/enact.js +2 -0
  14. package/dist/create/enact.js.map +1 -1
  15. package/dist/create/index.d.ts +4 -1
  16. package/dist/create/index.d.ts.map +1 -1
  17. package/dist/create/index.js +9 -3
  18. package/dist/create/index.js.map +1 -1
  19. package/dist/create/kimi.d.ts +16 -0
  20. package/dist/create/kimi.d.ts.map +1 -0
  21. package/dist/create/kimi.js +86 -0
  22. package/dist/create/kimi.js.map +1 -0
  23. package/dist/create/opencode.d.ts +129 -0
  24. package/dist/create/opencode.d.ts.map +1 -0
  25. package/dist/create/opencode.js +689 -0
  26. package/dist/create/opencode.js.map +1 -0
  27. package/dist/index.d.ts +14 -19
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -11
  30. package/dist/index.js.map +1 -1
  31. package/dist/internal/agents.d.ts +11 -1
  32. package/dist/internal/agents.d.ts.map +1 -1
  33. package/dist/internal/agents.js +120 -4
  34. package/dist/internal/agents.js.map +1 -1
  35. package/dist/internal/extensions-table.d.ts +87 -0
  36. package/dist/internal/extensions-table.d.ts.map +1 -0
  37. package/dist/internal/extensions-table.js +195 -0
  38. package/dist/internal/extensions-table.js.map +1 -0
  39. package/dist/internal/file-ops.d.ts +36 -0
  40. package/dist/internal/file-ops.d.ts.map +1 -0
  41. package/dist/internal/file-ops.js +89 -0
  42. package/dist/internal/file-ops.js.map +1 -0
  43. package/dist/internal/hooks.d.ts +56 -0
  44. package/dist/internal/hooks.d.ts.map +1 -0
  45. package/dist/internal/hooks.js +128 -0
  46. package/dist/internal/hooks.js.map +1 -0
  47. package/dist/internal/io.d.ts.map +1 -1
  48. package/dist/internal/io.js.map +1 -1
  49. package/dist/internal/json-merge.d.ts +63 -0
  50. package/dist/internal/json-merge.d.ts.map +1 -0
  51. package/dist/internal/json-merge.js +124 -0
  52. package/dist/internal/json-merge.js.map +1 -0
  53. package/dist/internal/lock-ownership.d.ts +41 -0
  54. package/dist/internal/lock-ownership.d.ts.map +1 -0
  55. package/dist/internal/lock-ownership.js +24 -0
  56. package/dist/internal/lock-ownership.js.map +1 -0
  57. package/dist/internal/pick.d.ts.map +1 -1
  58. package/dist/internal/pick.js.map +1 -1
  59. package/dist/internal/platform.d.ts.map +1 -1
  60. package/dist/internal/platform.js +82 -42
  61. package/dist/internal/platform.js.map +1 -1
  62. package/dist/internal/schema.d.ts.map +1 -1
  63. package/dist/internal/schema.js.map +1 -1
  64. package/dist/internal/toml-block.d.ts +59 -0
  65. package/dist/internal/toml-block.d.ts.map +1 -0
  66. package/dist/internal/toml-block.js +113 -0
  67. package/dist/internal/toml-block.js.map +1 -0
  68. package/dist/internal/types.d.ts +2 -1
  69. package/dist/internal/types.d.ts.map +1 -1
  70. package/dist/projection.d.ts +47 -0
  71. package/dist/projection.d.ts.map +1 -0
  72. package/dist/projection.js +180 -0
  73. package/dist/projection.js.map +1 -0
  74. package/dist/validate/index.d.ts +10 -5
  75. package/dist/validate/index.d.ts.map +1 -1
  76. package/dist/validate/index.js +59 -10
  77. package/dist/validate/index.js.map +1 -1
  78. package/dist/validate/kimi.d.ts +3 -0
  79. package/dist/validate/kimi.d.ts.map +1 -0
  80. package/dist/validate/kimi.js +11 -0
  81. package/dist/validate/kimi.js.map +1 -0
  82. package/dist/validate/opencode.d.ts +3 -0
  83. package/dist/validate/opencode.d.ts.map +1 -0
  84. package/dist/validate/opencode.js +11 -0
  85. package/dist/validate/opencode.js.map +1 -0
  86. package/dist/validate/run.d.ts +39 -0
  87. package/dist/validate/run.d.ts.map +1 -0
  88. package/dist/validate/run.js +60 -0
  89. package/dist/validate/run.js.map +1 -0
  90. package/extensions/enact-loop/.agents/plugin.json +12 -8
  91. package/extensions/enact-loop/scripts/validate.mjs +84 -2
  92. package/extensions/enact-loop/skills/enact-loop/SKILL.md +36 -466
  93. package/extensions/enact-loop/skills/enact-loop/references/loop-contract.md +114 -0
  94. package/extensions/enact-loop/skills/loop-budget/SKILL.md +43 -26
  95. package/extensions/enact-loop/skills/loop-intake/SKILL.md +44 -32
  96. package/extensions/enact-repo/.agents/plugin.json +55 -0
  97. package/extensions/enact-repo/.mcp.json +20 -0
  98. package/extensions/enact-repo/README.md +90 -0
  99. package/extensions/enact-repo/hooks/hooks.json +98 -0
  100. package/extensions/enact-repo/lean-ctx/config.toml +35 -0
  101. package/extensions/enact-repo/lean-ctx/layout.toml +5 -0
  102. package/extensions/enact-repo/skills/aca-sandboxes/SKILL.md +53 -0
  103. package/extensions/enact-repo/skills/aca-sandboxes/references/capabilities.md +52 -0
  104. package/extensions/enact-repo/skills/aca-sandboxes/references/install.md +87 -0
  105. package/extensions/enact-repo/skills/aca-sandboxes/references/prerequisites.md +52 -0
  106. package/extensions/enact-repo/skills/aca-sandboxes/references/quickstart.md +164 -0
  107. package/extensions/enact-repo/skills/aca-sandboxes/references/reference-advanced.md +251 -0
  108. package/extensions/enact-repo/skills/aca-sandboxes/references/reference.md +287 -0
  109. package/extensions/enact-repo/skills/aca-sandboxes/references/response-cues.md +71 -0
  110. package/extensions/enact-repo/skills/aca-sandboxes/references/scenarios.md +219 -0
  111. package/extensions/enact-repo/skills/aca-sandboxes/version.json +4 -0
  112. package/extensions/enact-repo/skills/backend-remove-deadcode/SKILL.md +96 -0
  113. package/extensions/enact-repo/skills/cmux-leader/SKILL.md +61 -0
  114. package/extensions/enact-repo/skills/cmux-send/SKILL.md +61 -0
  115. package/extensions/enact-repo/skills/code-review/SKILL.md +100 -0
  116. package/extensions/enact-repo/skills/codebase-design/SKILL.md +98 -0
  117. package/extensions/enact-repo/skills/codebase-design/references/DEEPENING.md +37 -0
  118. package/extensions/enact-repo/skills/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
  119. package/extensions/enact-repo/skills/codebase-design/references/TESTABILITY.md +29 -0
  120. package/extensions/enact-repo/skills/computer-use/SKILL.md +76 -0
  121. package/extensions/enact-repo/skills/debug-issue/SKILL.md +40 -0
  122. package/extensions/enact-repo/skills/diagnosing-bugs/SKILL.md +100 -0
  123. package/extensions/enact-repo/skills/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
  124. package/extensions/enact-repo/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  125. package/extensions/enact-repo/skills/domain-modeling/SKILL.md +86 -0
  126. package/extensions/enact-repo/skills/domain-modeling/references/ADR-FORMAT.md +47 -0
  127. package/extensions/enact-repo/skills/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
  128. package/extensions/enact-repo/skills/explore-codebase/SKILL.md +41 -0
  129. package/extensions/enact-repo/skills/frontend-design/LICENSE.txt +177 -0
  130. package/extensions/enact-repo/skills/frontend-design/SKILL.md +56 -0
  131. package/extensions/enact-repo/skills/grill-me/SKILL.md +20 -0
  132. package/extensions/enact-repo/skills/grill-with-docs/SKILL.md +20 -0
  133. package/extensions/enact-repo/skills/handoff/SKILL.md +28 -0
  134. package/extensions/enact-repo/skills/http-contract-migration/SKILL.md +74 -0
  135. package/extensions/enact-repo/skills/http-contract-migration/references/compatibility-and-gates.md +26 -0
  136. package/extensions/enact-repo/skills/http-contract-migration/references/hexagonal-boundary.md +16 -0
  137. package/extensions/enact-repo/skills/http-contract-migration/references/publication-and-adoption.md +31 -0
  138. package/extensions/enact-repo/skills/http-contract-migration/references/wire-fidelity-and-dto.md +31 -0
  139. package/extensions/enact-repo/skills/implement/SKILL.md +28 -0
  140. package/extensions/enact-repo/skills/improve-codebase-architecture/SKILL.md +80 -0
  141. package/extensions/enact-repo/skills/improve-codebase-architecture/references/HTML-REPORT.md +123 -0
  142. package/extensions/enact-repo/skills/interaction-design/SKILL.md +30 -0
  143. package/extensions/enact-repo/skills/interaction-design/references/Workflow.md +146 -0
  144. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-gsap.md +219 -0
  145. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-native.md +110 -0
  146. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries.md +177 -0
  147. package/extensions/enact-repo/skills/interaction-design/references/interaction-patterns.md +166 -0
  148. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns-advanced.md +285 -0
  149. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns.md +254 -0
  150. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations-reveals.md +213 -0
  151. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations.md +208 -0
  152. package/extensions/enact-repo/skills/lean-ctx/SKILL.md +81 -0
  153. package/extensions/enact-repo/skills/orca-cli/SKILL.md +88 -0
  154. package/extensions/enact-repo/skills/orchestration/SKILL.md +80 -0
  155. package/extensions/enact-repo/skills/prototype/SKILL.md +37 -0
  156. package/extensions/enact-repo/skills/prototype/references/LOGIC.md +79 -0
  157. package/extensions/enact-repo/skills/prototype/references/UI.md +112 -0
  158. package/extensions/enact-repo/skills/refactor-safely/SKILL.md +44 -0
  159. package/extensions/enact-repo/skills/remove-deadcode/SKILL.md +54 -0
  160. package/extensions/enact-repo/skills/research/SKILL.md +27 -0
  161. package/extensions/enact-repo/skills/resolving-merge-conflicts/SKILL.md +28 -0
  162. package/extensions/enact-repo/skills/review-changes/SKILL.md +45 -0
  163. package/extensions/enact-repo/skills/tailwind-4-docs/SKILL.md +88 -0
  164. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/accent-color.mdx +149 -0
  165. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/adding-custom-styles.mdx +635 -0
  166. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-content.mdx +300 -0
  167. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-items.mdx +241 -0
  168. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-self.mdx +294 -0
  169. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/animation.mdx +286 -0
  170. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/appearance.mdx +180 -0
  171. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/aspect-ratio.mdx +98 -0
  172. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-blur.mdx +109 -0
  173. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-brightness.mdx +82 -0
  174. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-contrast.mdx +82 -0
  175. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-grayscale.mdx +99 -0
  176. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-hue-rotate.mdx +173 -0
  177. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-invert.mdx +99 -0
  178. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-opacity.mdx +103 -0
  179. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-saturate.mdx +98 -0
  180. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-sepia.mdx +95 -0
  181. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter.mdx +113 -0
  182. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backface-visibility.mdx +110 -0
  183. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-attachment.mdx +126 -0
  184. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-blend-mode.mdx +79 -0
  185. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-clip.mdx +85 -0
  186. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-color.mdx +176 -0
  187. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-image.mdx +349 -0
  188. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-origin.mdx +64 -0
  189. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-position.mdx +171 -0
  190. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-repeat.mdx +127 -0
  191. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-size.mdx +100 -0
  192. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/block-size.mdx +190 -0
  193. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-collapse.mdx +181 -0
  194. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-color.mdx +316 -0
  195. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-radius.mdx +347 -0
  196. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-spacing.mdx +117 -0
  197. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-style.mdx +129 -0
  198. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-width.mdx +344 -0
  199. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-decoration-break.mdx +71 -0
  200. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-shadow.mdx +497 -0
  201. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-sizing.mdx +175 -0
  202. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-after.mdx +38 -0
  203. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-before.mdx +38 -0
  204. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-inside.mdx +34 -0
  205. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caption-side.mdx +190 -0
  206. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caret-color.mdx +66 -0
  207. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/clear.mdx +224 -0
  208. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color-scheme.mdx +81 -0
  209. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color.mdx +125 -0
  210. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/colors.mdx +927 -0
  211. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/columns.mdx +310 -0
  212. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/compatibility.mdx +193 -0
  213. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/content.mdx +129 -0
  214. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/cursor.mdx +104 -0
  215. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/dark-mode.mdx +191 -0
  216. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/detecting-classes-in-source-files.mdx +315 -0
  217. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/display.mdx +523 -0
  218. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/editor-setup.mdx +90 -0
  219. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/field-sizing.mdx +75 -0
  220. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/fill.mdx +100 -0
  221. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-blur.mdx +114 -0
  222. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-brightness.mdx +102 -0
  223. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-contrast.mdx +102 -0
  224. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-drop-shadow.mdx +230 -0
  225. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-grayscale.mdx +101 -0
  226. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-hue-rotate.mdx +171 -0
  227. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-invert.mdx +93 -0
  228. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-saturate.mdx +109 -0
  229. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-sepia.mdx +92 -0
  230. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter.mdx +113 -0
  231. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-basis.mdx +144 -0
  232. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-direction.mdx +130 -0
  233. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-grow.mdx +129 -0
  234. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-shrink.mdx +95 -0
  235. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-wrap.mdx +118 -0
  236. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex.mdx +164 -0
  237. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/float.mdx +197 -0
  238. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-family.mdx +119 -0
  239. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-feature-settings.mdx +52 -0
  240. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-size.mdx +184 -0
  241. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-smoothing.mdx +67 -0
  242. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-stretch.mdx +138 -0
  243. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-style.mdx +62 -0
  244. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-variant-numeric.mdx +228 -0
  245. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-weight.mdx +105 -0
  246. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/forced-color-adjust.mdx +152 -0
  247. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/functions-and-directives.mdx +322 -0
  248. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/gap.mdx +100 -0
  249. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-columns.mdx +43 -0
  250. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-flow.mdx +58 -0
  251. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-rows.mdx +43 -0
  252. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-column.mdx +124 -0
  253. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-row.mdx +115 -0
  254. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-columns.mdx +101 -0
  255. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-rows.mdx +108 -0
  256. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/height.mdx +260 -0
  257. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hover-focus-and-other-states.mdx +4935 -0
  258. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hyphens.mdx +112 -0
  259. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/inline-size.mdx +191 -0
  260. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/isolation.mdx +30 -0
  261. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-content.mdx +348 -0
  262. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-items.mdx +286 -0
  263. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-self.mdx +282 -0
  264. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/letter-spacing.mdx +100 -0
  265. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-clamp.mdx +110 -0
  266. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-height.mdx +147 -0
  267. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-image.mdx +80 -0
  268. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-position.mdx +67 -0
  269. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-type.mdx +86 -0
  270. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/margin.mdx +397 -0
  271. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-clip.mdx +66 -0
  272. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-composite.mdx +70 -0
  273. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-image.mdx +933 -0
  274. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-mode.mdx +114 -0
  275. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-origin.mdx +66 -0
  276. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-position.mdx +117 -0
  277. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-repeat.mdx +169 -0
  278. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-size.mdx +104 -0
  279. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-type.mdx +98 -0
  280. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-block-size.mdx +153 -0
  281. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-height.mdx +164 -0
  282. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-inline-size.mdx +185 -0
  283. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-width.mdx +214 -0
  284. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-block-size.mdx +146 -0
  285. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-height.mdx +150 -0
  286. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-inline-size.mdx +153 -0
  287. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-width.mdx +153 -0
  288. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mix-blend-mode.mdx +103 -0
  289. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-fit.mdx +147 -0
  290. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-position.mdx +182 -0
  291. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/opacity.mdx +84 -0
  292. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/order.mdx +94 -0
  293. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-color.mdx +130 -0
  294. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-offset.mdx +72 -0
  295. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-style.mdx +134 -0
  296. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-width.mdx +91 -0
  297. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow-wrap.mdx +130 -0
  298. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow.mdx +665 -0
  299. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overscroll-behavior.mdx +151 -0
  300. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/padding.mdx +232 -0
  301. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective-origin.mdx +127 -0
  302. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective.mdx +137 -0
  303. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-content.mdx +257 -0
  304. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-items.mdx +269 -0
  305. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-self.mdx +257 -0
  306. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/pointer-events.mdx +101 -0
  307. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/position.mdx +399 -0
  308. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/preflight.mdx +291 -0
  309. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/resize.mdx +110 -0
  310. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/responsive-design.mdx +666 -0
  311. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/rotate.mdx +291 -0
  312. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scale.mdx +360 -0
  313. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-behavior.mdx +39 -0
  314. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-margin.mdx +268 -0
  315. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-padding.mdx +255 -0
  316. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-align.mdx +281 -0
  317. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-stop.mdx +198 -0
  318. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-type.mdx +284 -0
  319. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/skew.mdx +352 -0
  320. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke-width.mdx +74 -0
  321. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke.mdx +103 -0
  322. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/styling-with-utility-classes.mdx +1020 -0
  323. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/table-layout.mdx +212 -0
  324. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-align.mdx +162 -0
  325. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-color.mdx +155 -0
  326. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-line.mdx +143 -0
  327. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-style.mdx +75 -0
  328. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-thickness.mdx +75 -0
  329. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-indent.mdx +74 -0
  330. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-overflow.mdx +103 -0
  331. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-shadow.mdx +177 -0
  332. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-transform.mdx +106 -0
  333. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-underline-offset.mdx +74 -0
  334. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-wrap.mdx +144 -0
  335. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/theme.mdx +1142 -0
  336. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/top-right-bottom-left.mdx +296 -0
  337. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/touch-action.mdx +95 -0
  338. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-origin.mdx +130 -0
  339. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-style.mdx +110 -0
  340. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform.mdx +51 -0
  341. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-behavior.mdx +76 -0
  342. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-delay.mdx +76 -0
  343. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-duration.mdx +82 -0
  344. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-property.mdx +137 -0
  345. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-timing-function.mdx +89 -0
  346. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/translate.mdx +487 -0
  347. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/upgrade-guide.mdx +910 -0
  348. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/user-select.mdx +114 -0
  349. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/vertical-align.mdx +194 -0
  350. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/visibility.mdx +287 -0
  351. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/white-space.mdx +211 -0
  352. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/width.mdx +264 -0
  353. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/will-change.mdx +47 -0
  354. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/word-break.mdx +94 -0
  355. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/z-index.mdx +104 -0
  356. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-catalog.md +251 -0
  357. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-index.tsx +237 -0
  358. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-source.txt +6 -0
  359. package/extensions/enact-repo/skills/tailwind-4-docs/references/gotchas.md +18 -0
  360. package/extensions/enact-repo/skills/tailwind-4-docs/scripts/sync_tailwind_docs.py +183 -0
  361. package/extensions/enact-repo/skills/tdd/SKILL.md +49 -0
  362. package/extensions/enact-repo/skills/tdd/references/mocking.md +59 -0
  363. package/extensions/enact-repo/skills/tdd/references/tests.md +77 -0
  364. package/extensions/enact-repo/skills/teach/SKILL.md +88 -0
  365. package/extensions/enact-repo/skills/teach/references/GLOSSARY-FORMAT.md +35 -0
  366. package/extensions/enact-repo/skills/teach/references/LEARNING-RECORD-FORMAT.md +46 -0
  367. package/extensions/enact-repo/skills/teach/references/MISSION-FORMAT.md +31 -0
  368. package/extensions/enact-repo/skills/teach/references/PHILOSOPHY.md +65 -0
  369. package/extensions/enact-repo/skills/teach/references/RESOURCES-FORMAT.md +32 -0
  370. package/extensions/enact-repo/skills/testing/SKILL.md +54 -0
  371. package/extensions/enact-repo/skills/to-spec/SKILL.md +85 -0
  372. package/extensions/enact-repo/skills/to-tickets/SKILL.md +75 -0
  373. package/extensions/enact-repo/skills/to-tickets/references/TICKET-TEMPLATES.md +39 -0
  374. package/extensions/enact-repo/skills/triage/SKILL.md +99 -0
  375. package/extensions/enact-repo/skills/triage/references/AGENT-BRIEF.md +207 -0
  376. package/extensions/enact-repo/skills/triage/references/NEEDS-INFO-TEMPLATE.md +17 -0
  377. package/extensions/enact-repo/skills/triage/references/OUT-OF-SCOPE.md +105 -0
  378. package/extensions/enact-repo/skills/ui-ux-pro-max/SKILL.md +32 -0
  379. package/extensions/enact-repo/skills/ui-ux-pro-max/references/Workflow.md +207 -0
  380. package/extensions/enact-repo/skills/ui-ux-pro-max/references/workflow-reference.md +175 -0
  381. package/extensions/enact-repo/skills/wayfinder/SKILL.md +100 -0
  382. package/extensions/enact-repo/skills/wayfinder/references/TEMPLATES.md +35 -0
  383. package/extensions/enact-repo/skills/wayfinder/references/TICKET-TYPES.md +8 -0
  384. package/extensions/enact-repo/skills/writing-great-skills/SKILL.md +93 -0
  385. package/extensions/enact-repo/skills/writing-great-skills/references/GLOSSARY.md +201 -0
  386. package/package.json +22 -17
  387. package/scripts/enact-extensions.mjs +411 -1006
  388. package/scripts/lib/allowed-plugins.mjs +52 -0
  389. package/scripts/lib/build-index.mjs +1 -3
  390. package/scripts/lib/resolve-bundle.mjs +1 -3
  391. package/scripts/lib/run-repo-doctor.mjs +604 -0
  392. package/scripts/lib/run-repo-install.mjs +1651 -0
  393. package/scripts/lib/run-sync.mjs +4 -10
  394. package/scripts/lib/run-validate.mjs +23 -39
  395. package/scripts/lib/skill-validator.mjs +1096 -0
  396. package/spec/enact.json +21 -3
  397. package/spec/enact.md +13 -12
  398. package/spec/kimi.json +100 -0
  399. package/spec/opencode.json +64 -0
  400. package/dist/install.d.ts +0 -235
  401. package/dist/install.d.ts.map +0 -1
  402. package/dist/install.js +0 -697
  403. package/dist/install.js.map +0 -1
  404. package/dist/internal/claude.d.ts +0 -65
  405. package/dist/internal/claude.d.ts.map +0 -1
  406. package/dist/internal/claude.js +0 -200
  407. package/dist/internal/claude.js.map +0 -1
  408. package/dist/internal/codex.d.ts +0 -43
  409. package/dist/internal/codex.d.ts.map +0 -1
  410. package/dist/internal/codex.js +0 -211
  411. package/dist/internal/codex.js.map +0 -1
  412. package/dist/internal/cursor.d.ts +0 -2
  413. package/dist/internal/cursor.d.ts.map +0 -1
  414. package/dist/internal/cursor.js +0 -6
  415. package/dist/internal/cursor.js.map +0 -1
  416. package/dist/principles.d.ts +0 -28
  417. package/dist/principles.d.ts.map +0 -1
  418. package/dist/principles.js +0 -159
  419. package/dist/principles.js.map +0 -1
  420. package/dist/provision.d.ts +0 -30
  421. package/dist/provision.d.ts.map +0 -1
  422. package/dist/provision.js +0 -202
  423. package/dist/provision.js.map +0 -1
  424. package/extensions/dev-state/.agents/plugin.json +0 -36
  425. package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +0 -194
  426. package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +0 -4
  427. package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +0 -130
  428. package/extensions/enact-context/.agents/plugin.json +0 -41
  429. package/extensions/enact-context/.mcp.json +0 -8
  430. package/extensions/enact-context/README.md +0 -25
  431. package/extensions/enact-context/assets/icon.png +0 -0
  432. package/extensions/enact-context/assets/logo.png +0 -0
  433. package/extensions/enact-context/hooks/hooks.json +0 -115
  434. package/extensions/enact-context/skills/enact-context/SKILL.md +0 -151
  435. package/extensions/enact-context/skills/enact-context/scripts/install.sh +0 -69
  436. package/extensions/enact-core/.agents/plugin.json +0 -40
  437. package/extensions/enact-core/OPERATING-PRINCIPLES.md +0 -7
  438. package/extensions/enact-core/hooks/hooks.json +0 -26
  439. package/extensions/enact-evolve/.agents/plugin.json +0 -47
  440. package/extensions/enact-evolve/agents/evolve-session-analyst.toml +0 -37
  441. package/extensions/enact-evolve/assets/icon.png +0 -0
  442. package/extensions/enact-evolve/assets/logo.png +0 -0
  443. package/extensions/enact-evolve/skills/mined-investigate-loop/SKILL.md +0 -68
  444. package/extensions/enact-evolve/skills/session-analysis/SKILL.md +0 -98
  445. package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +0 -343
  446. package/extensions/enact-factory/.agents/plugin.json +0 -49
  447. package/extensions/enact-factory/.mcp.json +0 -8
  448. package/extensions/enact-factory/agents/architect.toml +0 -34
  449. package/extensions/enact-factory/agents/code-reviewer.toml +0 -33
  450. package/extensions/enact-factory/agents/critic.toml +0 -39
  451. package/extensions/enact-factory/agents/executor.toml +0 -26
  452. package/extensions/enact-factory/agents/explore.toml +0 -25
  453. package/extensions/enact-factory/agents/planner.toml +0 -26
  454. package/extensions/enact-factory/agents/verifier.toml +0 -33
  455. package/extensions/enact-factory/assets/icon.png +0 -0
  456. package/extensions/enact-factory/assets/logo.png +0 -0
  457. package/extensions/enact-factory/skills/advisor/SKILL.md +0 -82
  458. package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +0 -57
  459. package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +0 -353
  460. package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +0 -309
  461. package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +0 -60
  462. package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +0 -87
  463. package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +0 -132
  464. package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +0 -53
  465. package/extensions/enact-factory/skills/cmux-leader/SKILL.md +0 -74
  466. package/extensions/enact-factory/skills/cmux-send/SKILL.md +0 -50
  467. package/extensions/enact-factory/skills/committee/SKILL.md +0 -80
  468. package/extensions/enact-factory/skills/deep-interview/SKILL.md +0 -68
  469. package/extensions/enact-factory/skills/deslop-handover/SKILL.md +0 -97
  470. package/extensions/enact-factory/skills/deslop-handover/deslop.py +0 -181
  471. package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
  472. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
  473. package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
  474. package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
  475. package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
  476. package/extensions/enact-factory/skills/paseo-dispatch/SKILL.md +0 -141
  477. package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
  478. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
  479. package/extensions/enact-factory/skills/research/SKILL.md +0 -83
  480. package/extensions/enact-factory/skills/review/SKILL.md +0 -67
  481. package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
  482. package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
  483. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
  484. package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
  485. package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
  486. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
  487. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
  488. package/extensions/enact-wiki/.agents/plugin.json +0 -43
  489. package/extensions/enact-wiki/.mcp.json +0 -15
  490. package/extensions/enact-wiki/README.md +0 -44
  491. package/extensions/enact-wiki/assets/icon.png +0 -0
  492. package/extensions/enact-wiki/assets/logo.png +0 -0
  493. package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
  494. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
  495. package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
  496. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
  497. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
  498. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
  499. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
  500. package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
  501. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
  502. package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
  503. package/extensions/net-revenue-management/.agents/plugin.json +0 -40
  504. package/extensions/net-revenue-management/.mcp.json +0 -9
  505. package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
  506. package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
  507. package/extensions/plugin-dev/.agents/plugin.json +0 -41
  508. package/extensions/plugin-dev/agents/agent-creator.md +0 -199
  509. package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
  510. package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
  511. package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
  512. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
  513. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
  514. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
  515. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
  516. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
  517. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
  518. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
  519. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
  520. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
  521. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
  522. package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
  523. package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
  524. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
  525. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
  526. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
  527. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
  528. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
  529. package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
  530. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
  531. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
  532. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
  533. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
  534. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
  535. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
  536. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
  537. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
  538. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
  539. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
  540. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
  541. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
  542. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
  543. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
  544. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
  545. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
  546. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
  547. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
  548. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
  549. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
  550. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
  551. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
  552. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
  553. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
  554. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
  555. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
  556. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
  557. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
  558. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
  559. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
  560. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
  561. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
  562. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
  563. package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
  564. package/scripts/check-hooks.mjs +0 -174
  565. package/scripts/check-principles.mjs +0 -116
  566. package/scripts/hooks/session-start-drift-check.mjs +0 -49
  567. package/scripts/install.sh +0 -70
  568. package/scripts/lib/auto-update.mjs +0 -88
  569. package/scripts/lib/bundle-hash.mjs +0 -137
  570. package/scripts/lib/hooks.mjs +0 -585
  571. package/scripts/lib/ledger.mjs +0 -163
  572. package/scripts/lib/migrate-artifacts.mjs +0 -144
  573. package/scripts/lib/outdated.mjs +0 -144
  574. package/scripts/lib/postinstall-offer.mjs +0 -83
  575. package/scripts/lib/principles.mjs +0 -109
  576. package/scripts/lib/provision-mcp.mjs +0 -16
  577. package/scripts/lib/resolve-plugin-root.mjs +0 -9
  578. package/scripts/lib/run-install.mjs +0 -507
  579. package/scripts/lib/run-prune.mjs +0 -94
  580. package/scripts/lib/run-uninstall.mjs +0 -244
  581. package/scripts/lib/run-update.mjs +0 -165
  582. package/scripts/lib/serve.mjs +0 -472
  583. package/scripts/lib/ups-router.mjs +0 -392
  584. package/scripts/postinstall.mjs +0 -101
  585. package/scripts/setup-enact-context.sh +0 -28
  586. package/scripts/version-bump.sh +0 -484
  587. package/web/assets/README.md +0 -111
  588. package/web/assets/logo-full.png +0 -0
  589. package/web/assets/logo-slim.png +0 -0
  590. package/web/assets/tokens/base.css +0 -45
  591. package/web/assets/tokens/colors.css +0 -248
  592. package/web/assets/tokens/effects.css +0 -24
  593. package/web/assets/tokens/fonts.css +0 -8
  594. package/web/assets/tokens/index.css +0 -18
  595. package/web/assets/tokens/spacing.css +0 -50
  596. 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