@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
@@ -1,507 +0,0 @@
1
- import { dirname, join } from "node:path";
2
- import { homedir } from "node:os";
3
- import { existsSync, readFileSync } from "node:fs";
4
- import {
5
- activateClaudePlugin,
6
- installPluginBundle,
7
- installClaudePluginBundle,
8
- installCursorPluginBundle,
9
- installCodexPluginBundle,
10
- installSharedPluginBundle,
11
- defaultEnactHome,
12
- defaultSharedHome,
13
- } from "../../dist/index.js";
14
- import { appendEntry } from "./ledger.mjs";
15
- import { bundleHash } from "./bundle-hash.mjs";
16
- import { provisionMcp, summarizeProvision } from "./provision-mcp.mjs";
17
- import { registerPluginHooks, removeHook, removePluginHooks } from "./hooks.mjs";
18
- import { assertSupportedHookEvents } from "../../dist/index.js";
19
-
20
- export const INSTALL_DRY_RUN_UNSUPPORTED_MESSAGE =
21
- "install --dry-run is not supported. No changes were made.";
22
-
23
- // scope: "global" (default) -> the agent's default home (~/.codex, ~/.enact/agent, ~/.claude, ~/.cursor, ~/.agents)
24
- // "local" -> a project-scoped home under the current dir (./.codex, ./.enact/agent, ...)
25
- // An explicit --<platform>-home always wins over the scope default.
26
- function resolveHomes(options) {
27
- const scope = options.scope ?? "global";
28
- const local = (sub) => join(process.cwd(), sub);
29
- return {
30
- scope,
31
- codexHome: options.codexHome ?? (scope === "local" ? local(".codex") : undefined),
32
- enactHome: options.enactHome ?? (scope === "local" ? local(".enact/agent") : defaultEnactHome()),
33
- claudeHome: options.claudeHome ?? (scope === "local" ? local(".claude") : undefined),
34
- cursorHome: options.cursorHome ?? (scope === "local" ? local(".cursor") : undefined),
35
- // For shared: sharedHome is the base directory; installSharedPluginBundle appends .agents/skills/<name>
36
- // Global default: homedir() (skills land at ~/.agents/skills/<name>)
37
- // Local: cwd (skills land at ./.agents/skills/<name>)
38
- sharedHome: options.sharedHome ?? (scope === "local" ? process.cwd() : defaultSharedHome()),
39
- };
40
- }
41
-
42
- // ---------------------------------------------------------------------------
43
- // ALL_PLATFORMS — deterministic order for `--platform all`
44
- // ---------------------------------------------------------------------------
45
- const ALL_PLATFORMS = ["codex", "claude", "cursor", "enact"];
46
-
47
- // ---------------------------------------------------------------------------
48
- // PLATFORM_TARGETS — data-driven dispatch table
49
- //
50
- // Each entry describes how to install for a given platform:
51
- // homeField — which field of `homes` supplies the target directory
52
- // install — the function to call; receives (pluginRoot, home, options)
53
- // log — how to log the result
54
- // ---------------------------------------------------------------------------
55
- const PLATFORM_TARGETS = {
56
- claude: {
57
- homeField: "claudeHome",
58
- install(pluginRoot, home, options) {
59
- return installClaudePluginBundle({
60
- pluginRoot,
61
- claudeHome: home,
62
- marketplaceName: options.marketplaceName,
63
- sync: options.sync,
64
- });
65
- },
66
- log(result) {
67
- console.log(`installed ${result.name} -> ${result.installedPluginPath}`);
68
- console.log(`registered marketplace ${result.marketplaceName} -> ${result.marketplaceDir}`);
69
- for (const path of result.refreshedPaths) {
70
- console.log(`refreshed ${path}`);
71
- }
72
- },
73
- },
74
-
75
- cursor: {
76
- homeField: "cursorHome",
77
- install(pluginRoot, home, options) {
78
- return installCursorPluginBundle({
79
- pluginRoot,
80
- cursorHome: home,
81
- sync: options.sync,
82
- });
83
- },
84
- log(result) {
85
- console.log(`installed ${result.name} -> ${result.installedPluginPath}`);
86
- for (const path of result.refreshedPaths) {
87
- console.log(`refreshed ${path}`);
88
- }
89
- },
90
- },
91
-
92
- enact: {
93
- homeField: "enactHome",
94
- install(pluginRoot, home, options) {
95
- return installCodexPluginBundle({
96
- pluginRoot,
97
- codexHome: home,
98
- marketplaceName: options.marketplaceName,
99
- enable: options.enable,
100
- sync: options.sync,
101
- });
102
- },
103
- log(result) {
104
- console.log(`installed ${result.pluginConfigKey} -> ${result.configPath}`);
105
- console.log(`wrote ${result.marketplacePath}`);
106
- for (const path of result.refreshedPaths) {
107
- console.log(`refreshed ${path}`);
108
- }
109
- },
110
- },
111
-
112
- shared: {
113
- homeField: "sharedHome",
114
- install(pluginRoot, home, _options) {
115
- return installSharedPluginBundle({
116
- pluginRoot,
117
- sharedHome: home,
118
- });
119
- },
120
- log(result) {
121
- console.log(`installed ${result.name} skills -> ${result.installedSkillsPath}`);
122
- },
123
- },
124
- };
125
-
126
- // ---------------------------------------------------------------------------
127
- // parsePlatforms — expand "all" and split comma-separated platform lists.
128
- // Returns a deduped array of validated platform name strings.
129
- // Throws on any unknown platform token (no silent codex fallthrough).
130
- // ---------------------------------------------------------------------------
131
- function parsePlatforms(platform) {
132
- if (!platform || platform === "codex") return ["codex"];
133
- if (platform === "all") return ALL_PLATFORMS;
134
-
135
- // Comma-separated: "claude,cursor" → ["claude", "cursor"]. Dedup preserving order.
136
- const parts = [...new Set(platform.split(",").map((p) => p.trim()).filter(Boolean))];
137
- if (parts.length === 0) return ["codex"];
138
-
139
- // Validate each token. "codex" is valid (table fallthrough); "all" is only valid
140
- // as a standalone value, so it is rejected here when mixed with other names.
141
- const valid = new Set(["codex", ...Object.keys(PLATFORM_TARGETS)]);
142
- for (const part of parts) {
143
- if (!valid.has(part)) {
144
- throw new Error(
145
- `Unknown platform: "${part}". Valid: codex, claude, cursor, enact, shared, all`,
146
- );
147
- }
148
- }
149
- return parts;
150
- }
151
-
152
- // ---------------------------------------------------------------------------
153
- // Ledger wiring — record successful installs to the install ledger.
154
- //
155
- // BEST-EFFORT: every ledger write is wrapped so a failure NEVER throws out of
156
- // the install. On failure we emit a single-line warning to stderr and continue.
157
- // ---------------------------------------------------------------------------
158
-
159
- // The installed-path field varies by platform result shape.
160
- function installedPathOf(result) {
161
- return result.installedPluginPath ?? result.installedSkillsPath ?? result.configPath ?? "";
162
- }
163
-
164
- function recordLedgerEntry(entry, _homes, options) {
165
- try {
166
- // Single global ledger: every install (local or global scope) appends to
167
- // <home>/.enact/extensions/ledger.jsonl. The scope distinction lives in the
168
- // entry's `scope` field, not the path. Tests pass an explicit ledgerHome so
169
- // they never write into the real ~/.enact.
170
- appendEntry(entry, {
171
- home: options.ledgerHome ?? homedir(),
172
- });
173
- } catch (err) {
174
- const msg = err instanceof Error ? err.message : String(err);
175
- process.stderr.write(`[enact-extensions install] Warning: failed to write install ledger: ${msg}\n`);
176
- }
177
- }
178
-
179
- // ---------------------------------------------------------------------------
180
- // computeBundleHash — best-effort; never throws out of the install path.
181
- // Returns the sha256 hex hash of the canonical bundle, or null on failure.
182
- // The `bundleHashRoot` option (injected by tests) overrides the default
183
- // pluginRoot so tests can simulate a hash failure without breaking the install.
184
- // ---------------------------------------------------------------------------
185
- function computeBundleHash(pluginRoot, options) {
186
- const root = options.bundleHashRoot ?? pluginRoot;
187
- try {
188
- return bundleHash(root);
189
- } catch (err) {
190
- const msg = err instanceof Error ? err.message : String(err);
191
- process.stderr.write(`[enact-extensions install] Warning: cannot compute bundle hash: ${msg}\n`);
192
- return null;
193
- }
194
- }
195
-
196
- function readJsonIfExists(path) {
197
- if (!existsSync(path)) return null;
198
- try {
199
- return JSON.parse(readFileSync(path, "utf8"));
200
- } catch {
201
- return null;
202
- }
203
- }
204
-
205
- function readCanonicalManifest(pluginRoot) {
206
- return readJsonIfExists(join(pluginRoot, ".agents", "plugin.json"));
207
- }
208
-
209
- function supportedHostSurfaces(pluginRoot) {
210
- const manifest = readCanonicalManifest(pluginRoot);
211
- const rawTargets = manifest?.targets;
212
- if (!Array.isArray(rawTargets)) return [...ALL_PLATFORMS];
213
- return rawTargets.filter((target) => ALL_PLATFORMS.includes(target));
214
- }
215
-
216
- function assertRequestedPlatformsSupported(pluginRoot, requestedPlatforms) {
217
- const supported = supportedHostSurfaces(pluginRoot);
218
- const unsupported = requestedPlatforms.filter(
219
- (platform) => ALL_PLATFORMS.includes(platform) && !supported.includes(platform),
220
- );
221
- if (unsupported.length === 0) return;
222
-
223
- const manifest = readCanonicalManifest(pluginRoot);
224
- const pluginName = typeof manifest?.name === "string" ? manifest.name : pluginRoot.split("/").pop();
225
- const supportedLabel = supported.length > 0 ? supported.join(", ") : "(none)";
226
- throw new Error(
227
- `Plugin ${pluginName} does not target host surface(s): ${unsupported.join(", ")}. ` +
228
- `Supported host surfaces: ${supportedLabel}`,
229
- );
230
- }
231
-
232
- function readPluginHookConfig(pluginRoot) {
233
- const manifest = readJsonIfExists(join(pluginRoot, ".agents", "plugin.json"));
234
- const hooksPath = typeof manifest?.hooks === "string" ? manifest.hooks : null;
235
- if (!hooksPath) return null;
236
- const normalized = hooksPath.replace(/^\.\//, "");
237
- return readJsonIfExists(join(pluginRoot, normalized));
238
- }
239
-
240
- function hookConfigHasEntries(hookConfig) {
241
- const hooks = hookConfig?.hooks;
242
- if (!hooks || typeof hooks !== "object" || Array.isArray(hooks)) return false;
243
- return Object.values(hooks).some((entries) => Array.isArray(entries) && entries.length > 0);
244
- }
245
-
246
- function registerInstalledPluginHooks(pluginRoot, platform, result, homes, options) {
247
- // codex reads hooks from the installed plugin bundle (no config.toml
248
- // registration); cursor likewise. claude/enact stay in the reconcile path
249
- // only so removePluginHooks can clean legacy scattered runtime hooks.
250
- if (!["claude", "cursor", "enact"].includes(platform)) return;
251
- const hookConfig = readPluginHookConfig(pluginRoot);
252
- const name = result?.name ?? result?.results?.[0]?.name;
253
- if (!name) return;
254
-
255
- const hookOpts = {
256
- cwd: options.cwd ?? pluginRoot,
257
- claudeHome: platform === "claude" ? homes.claudeHome : undefined,
258
- cursorHome: platform === "cursor" ? homes.cursorHome : undefined,
259
- enactHome: platform === "enact" ? homes.enactHome : undefined,
260
- };
261
-
262
- // Self-healing reconcile: first remove ALL of THIS plugin's prior hook
263
- // registrations (orphaned events dropped from the bundle + duplicate entries
264
- // accumulated by earlier appends), then register the current bundle's set.
265
- // Removal is marker/command scoped per plugin, so the user's own hooks and
266
- // other plugins' hooks are never touched.
267
- removePluginHooks(platform, name, hookOpts);
268
-
269
- if (!hookConfig) return;
270
- const hookResult = registerPluginHooks(platform, name, hookConfig, hookOpts);
271
- if (hookResult.result !== "skipped") {
272
- console.log(`hooks ${hookResult.result} for ${name} on ${platform} -> ${hookResult.location}`);
273
- }
274
- }
275
-
276
- function activateInstalledClaudePlugin(pluginRoot, result, homes, options) {
277
- const hookConfig = readPluginHookConfig(pluginRoot);
278
- if (!hookConfigHasEntries(hookConfig)) return;
279
- const pluginId = `${result.name}@${result.marketplaceName ?? (options.marketplaceName ?? "enact-os-plugins")}`;
280
- const activation = activateClaudePlugin(
281
- homes.claudeHome,
282
- pluginId,
283
- result.marketplaceDir,
284
- homes.scope,
285
- options.claudeExec,
286
- );
287
- console.log(`claude plugin ${activation.action} -> ${pluginId}`);
288
- }
289
-
290
- function removeLegacyCodexPluginHooks(name, result, homes, options) {
291
- if (!name) return;
292
-
293
- if (Array.isArray(result?.results)) {
294
- for (const install of result.results) {
295
- const codexHome = install.configPath ? dirname(install.configPath) : homes.codexHome;
296
- const hookResult = removePluginHooks("codex", name, {
297
- cwd: options.cwd ?? process.cwd(),
298
- codexHome,
299
- });
300
- if (hookResult.result === "removed") {
301
- console.log(`removed legacy codex hooks for ${name} -> ${hookResult.location}`);
302
- }
303
- }
304
- return;
305
- }
306
-
307
- const hookResult = removePluginHooks("codex", name, {
308
- cwd: options.cwd ?? process.cwd(),
309
- codexHome: homes.codexHome,
310
- });
311
- if (hookResult.result === "removed") {
312
- console.log(`removed legacy codex hooks for ${name} -> ${hookResult.location}`);
313
- }
314
- }
315
-
316
- function removeLegacyStandaloneDriftHook(platform, name, homes, options) {
317
- if (name !== "enact-core") return;
318
- const hookResult = removeHook(platform, {
319
- claudeHome: homes.claudeHome,
320
- codexHome: homes.codexHome,
321
- cursorHome: homes.cursorHome,
322
- enactHome: homes.enactHome,
323
- local: homes.scope === "local",
324
- cwd: options.cwd ?? process.cwd(),
325
- });
326
- if (hookResult.result === "removed") {
327
- console.log(`removed legacy drift hook for ${name} on ${platform} -> ${hookResult.location}`);
328
- }
329
- }
330
-
331
- // Append one install entry per installed target in a single-platform result.
332
- // Tolerant of every result shape (single platform, shared, codex multi-home).
333
- // `hash` is the pre-computed bundle hash (or null) for this install invocation.
334
- function recordInstall(platform, result, homes, options, hash) {
335
- const targets = [];
336
- if (result && Array.isArray(result.results)) {
337
- // codex (default) multi-home: one entry per codex home.
338
- for (const install of result.results) {
339
- targets.push({
340
- name: install.name,
341
- version: install.version,
342
- path: installedPathOf(install),
343
- home: install.configPath ? join(install.configPath, "..") : homes.codexHome,
344
- });
345
- }
346
- } else if (result) {
347
- targets.push({
348
- name: result.name,
349
- version: result.version,
350
- path: installedPathOf(result),
351
- home: homes[PLATFORM_TARGETS[platform]?.homeField] ?? homes.codexHome,
352
- });
353
- }
354
-
355
- for (const t of targets) {
356
- if (!t.name) continue;
357
- recordLedgerEntry(
358
- {
359
- action: "install",
360
- name: t.name,
361
- version: t.version,
362
- platform,
363
- scope: homes.scope,
364
- home: t.home,
365
- path: t.path,
366
- hash,
367
- marketplaceName: options.marketplaceName ?? "enact-os-plugins",
368
- },
369
- homes,
370
- options,
371
- );
372
- }
373
- }
374
-
375
- // ---------------------------------------------------------------------------
376
- // runSinglePlatform — install for one platform; returns the install result.
377
- // Throws on error (caller catches for partial-failure tracking).
378
- // `hash` is the pre-computed bundle hash (or null) for this install invocation.
379
- // ---------------------------------------------------------------------------
380
- function runSinglePlatform(pluginRoot, platform, homes, options, hash) {
381
- const target = PLATFORM_TARGETS[platform];
382
- if (target) {
383
- const home = homes[target.homeField];
384
- const result = target.install(pluginRoot, home, options);
385
- target.log(result);
386
- recordInstall(platform, result, homes, options, hash);
387
- registerInstalledPluginHooks(pluginRoot, platform, result, homes, options);
388
- removeLegacyStandaloneDriftHook(platform, result?.name, homes, options);
389
- if (platform === "claude") {
390
- activateInstalledClaudePlugin(pluginRoot, result, homes, options);
391
- }
392
- return result;
393
- }
394
-
395
- // codex (default) — multi-home discovery via installPluginBundle.
396
- const result = installPluginBundle({
397
- pluginRoot,
398
- cwd: options.cwd ?? pluginRoot,
399
- ...options,
400
- codexHome: homes.codexHome,
401
- });
402
- for (const install of result.results) {
403
- console.log(`installed ${install.pluginConfigKey} -> ${install.configPath}`);
404
- console.log(`wrote ${install.marketplacePath}`);
405
- for (const path of install.refreshedPaths) {
406
- console.log(`refreshed ${path}`);
407
- }
408
- }
409
- recordInstall("codex", result, homes, options, hash);
410
- removeLegacyCodexPluginHooks(result.results[0]?.name, result, homes, options);
411
- removeLegacyStandaloneDriftHook("codex", result.results[0]?.name, homes, options);
412
- return result;
413
- }
414
-
415
- // ---------------------------------------------------------------------------
416
- // MCP dependency provisioning — best-effort, platform-independent.
417
- //
418
- // After a successful install we provision any packages the bundle's declared
419
- // MCP servers need (uvx → `uv tool install`, npx → `npm install -g`, etc.).
420
- // This runs ONCE per runInstall call (provisioning is platform-independent; a
421
- // `--platform all` install still provisions a single time). Provisioning is on
422
- // by DEFAULT; pass `--no-provision` / { noProvision: true } to skip. A failure
423
- // here NEVER fails the install — provisionMcp is best-effort by contract.
424
- // ---------------------------------------------------------------------------
425
- function runProvision(pluginRoot, options) {
426
- try {
427
- const provisionResults = provisionMcp(pluginRoot, {
428
- noProvision: options.noProvision,
429
- exec: options.provisionExec, // injectable for tests; undefined → real spawnSync
430
- });
431
- for (const line of summarizeProvision(provisionResults)) {
432
- console.log(`provision: ${line}`);
433
- }
434
- return provisionResults;
435
- } catch (err) {
436
- // Defence-in-depth: provisionMcp is already best-effort, but never let a
437
- // provisioning bug fail an otherwise-successful install.
438
- const msg = err instanceof Error ? err.message : String(err);
439
- process.stderr.write(`[enact-extensions install] Warning: MCP provisioning errored: ${msg}\n`);
440
- return [];
441
- }
442
- }
443
-
444
- export function runInstall(pluginRoot, options = {}) {
445
- if (options.dryRun) {
446
- throw new Error(INSTALL_DRY_RUN_UNSUPPORTED_MESSAGE);
447
- }
448
-
449
- // Refuse to install a bundle that declares hook events outside the
450
- // cross-surface intersection (claude, codex, cursor, enact).
451
- assertSupportedHookEvents(pluginRoot);
452
-
453
- const platforms = parsePlatforms(options.platform);
454
- assertRequestedPlatformsSupported(pluginRoot, platforms);
455
- const homes = resolveHomes(options);
456
- console.log(`install scope: ${homes.scope}${homes.scope === "local" ? ` (${process.cwd()})` : ""}`);
457
-
458
- // Compute bundle hash ONCE per runInstall invocation (best-effort, never throws).
459
- // Applied to every per-platform ledger entry for this bundle.
460
- const hash = computeBundleHash(pluginRoot, options);
461
-
462
- // Single-platform path — unchanged behaviour (no .platforms wrapper).
463
- if (platforms.length === 1) {
464
- const result = runSinglePlatform(pluginRoot, platforms[0], homes, options, hash);
465
- // Provision once after a successful install.
466
- result.provision = runProvision(pluginRoot, options);
467
- return result;
468
- }
469
-
470
- // Multi-platform path — run each sequentially, collect results + errors.
471
- const platformResults = [];
472
- let hasError = false;
473
-
474
- for (const platform of platforms) {
475
- console.log(`\n[${platform}] installing...`);
476
- try {
477
- const result = runSinglePlatform(pluginRoot, platform, homes, options, hash);
478
- console.log(`[${platform}] ✓ done`);
479
- platformResults.push({ platform, result, error: null });
480
- } catch (err) {
481
- const msg = err instanceof Error ? err.message : String(err);
482
- console.error(`[${platform}] ✗ failed: ${msg}`);
483
- platformResults.push({ platform, result: null, error: err });
484
- hasError = true;
485
- }
486
- }
487
-
488
- // Provision ONCE for the whole multi-platform run (platform-independent), as
489
- // long as at least one platform installed successfully.
490
- let provision = [];
491
- if (platformResults.some((r) => !r.error)) {
492
- provision = runProvision(pluginRoot, options);
493
- }
494
-
495
- if (hasError) {
496
- const failed = platformResults.filter((r) => r.error).map((r) => r.platform);
497
- const succeeded = platformResults.filter((r) => !r.error).map((r) => r.platform);
498
- const summary = `Multi-platform install: ${succeeded.length} succeeded (${succeeded.join(", ")}), ${failed.length} failed (${failed.join(", ")})`;
499
- console.error(`\n${summary}`);
500
- const err = new Error(summary);
501
- err.platforms = platformResults;
502
- err.provision = provision;
503
- throw err;
504
- }
505
-
506
- return { platforms: platformResults, provision };
507
- }
@@ -1,94 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { cwd as processCwd } from "node:process";
4
- import { dirname, join, resolve } from "node:path";
5
- import { fileURLToPath } from "node:url";
6
- import { appendEntry, listInstalled } from "./ledger.mjs";
7
- import { parsePlatforms, runUninstall } from "./run-uninstall.mjs";
8
-
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const PACKAGE_ROOT = resolve(__dirname, "..", "..");
11
- const DEFAULT_MARKETPLACE = "enact-os-plugins";
12
-
13
- function defaultSourceRoots(cwd) {
14
- const roots = [join(PACKAGE_ROOT, "extensions")];
15
- const cwdExtensions = join(cwd, "extensions");
16
- if (resolve(cwdExtensions) !== resolve(roots[0])) roots.push(cwdExtensions);
17
- return roots;
18
- }
19
-
20
- function sourceBundleExists(name, sourceRoots) {
21
- return sourceRoots.some((root) => existsSync(join(root, name, ".agents", "plugin.json")));
22
- }
23
-
24
- function installedSurfaceExists(entry) {
25
- return Boolean(entry.path) && existsSync(entry.path);
26
- }
27
-
28
- function homeOptionForPlatform(platform) {
29
- switch (platform) {
30
- case "codex": return "codexHome";
31
- case "claude": return "claudeHome";
32
- case "cursor": return "cursorHome";
33
- case "enact": return "enactHome";
34
- case "shared": return "sharedHome";
35
- default: return "codexHome";
36
- }
37
- }
38
-
39
- function recordPruneTombstone(entry, ledgerHome, marketplaceName) {
40
- appendEntry(
41
- {
42
- action: "uninstall",
43
- name: entry.name,
44
- version: entry.version ?? "0.0.0",
45
- platform: entry.platform,
46
- scope: entry.scope,
47
- home: entry.home,
48
- path: entry.path,
49
- marketplaceName: entry.marketplaceName ?? marketplaceName,
50
- },
51
- { home: ledgerHome },
52
- );
53
- }
54
-
55
- export function runPrune(options = {}) {
56
- const cwd = options.cwd ?? processCwd();
57
- const ledgerHome = options.ledgerHome ?? options.home ?? homedir();
58
- const marketplaceName = options.marketplaceName ?? DEFAULT_MARKETPLACE;
59
- const platforms = new Set(parsePlatforms(options.platform ?? "all"));
60
- const sourceRoots = options.sourceRoots ?? defaultSourceRoots(cwd);
61
- const installed = listInstalled({ home: ledgerHome });
62
-
63
- const candidates = installed
64
- .filter((entry) => platforms.has(entry.platform))
65
- .filter((entry) => entry.marketplaceName === marketplaceName)
66
- .filter((entry) => !sourceBundleExists(entry.name, sourceRoots) || !installedSurfaceExists(entry));
67
-
68
- const pruned = [];
69
- const failed = [];
70
-
71
- if (options.dryRun) {
72
- return { candidates, pruned, failed, dryRun: true };
73
- }
74
-
75
- for (const entry of candidates) {
76
- const homeOption = homeOptionForPlatform(entry.platform);
77
- try {
78
- runUninstall(entry.name, {
79
- platform: entry.platform,
80
- scope: entry.scope,
81
- [homeOption]: entry.home,
82
- marketplaceName,
83
- ledgerHome,
84
- version: entry.version,
85
- });
86
- recordPruneTombstone(entry, ledgerHome, marketplaceName);
87
- pruned.push(entry);
88
- } catch (err) {
89
- failed.push({ entry, error: err instanceof Error ? err : new Error(String(err)) });
90
- }
91
- }
92
-
93
- return { candidates, pruned, failed, dryRun: false };
94
- }