@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
@@ -1,174 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Repo guard: validate every plugin's hooks before they ship.
4
- *
5
- * Born from real breakage: a bundle shipped hook entries for a deleted
6
- * CLI (module-not-found at runtime), and an npm package omitted `extensions/`
7
- * from its files whitelist so its hook command could never load. Both passed
8
- * every static check yet failed the moment Claude Code fired the hook.
9
- * plugin-dev meanwhile
10
- * declared a `hooks` component whose hooks.json was `{ "hooks": {} }` — a
11
- * component that installs nothing.
12
- *
13
- * Two passes:
14
- * STATIC (always, no binaries): every plugin that declares a `hooks` manifest
15
- * field must have a hooks file that is valid JSON, has a NON-EMPTY `hooks`
16
- * object, and whose every entry is a well-formed `command` hook.
17
- * SMOKE (--smoke, best-effort): for each distinct hook command whose binary
18
- * resolves on PATH, actually run it with a synthetic payload in an isolated
19
- * HOME/TMPDIR and fail if it crashes on module resolution (the exact class
20
- * of bug above). Binaries that aren't installed are skipped, so this stays
21
- * green in CI where the plugin CLIs are absent.
22
- *
23
- * Run via `npm run check:hooks` (static) or `npm run check:hooks:smoke`.
24
- */
25
- import { readFileSync, existsSync, readdirSync, statSync, mkdtempSync, rmSync } from "node:fs";
26
- import { join, dirname, resolve } from "node:path";
27
- import { fileURLToPath } from "node:url";
28
- import { tmpdir } from "node:os";
29
- import { spawnSync, execSync } from "node:child_process";
30
-
31
- const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
32
- const EXT = join(ROOT, "extensions");
33
- const SMOKE = process.argv.includes("--smoke");
34
-
35
- const errors = [];
36
- const warnings = [];
37
- const notes = [];
38
- const err = (p, m) => errors.push(`[ERROR] ${p}: ${m}`);
39
- const warn = (p, m) => warnings.push(`[warn] ${p}: ${m}`);
40
- const note = (m) => notes.push(`[note] ${m}`);
41
-
42
- function isDir(p) {
43
- try { return statSync(p).isDirectory(); } catch { return false; }
44
- }
45
-
46
- // Module-resolution / load crash signatures — the failure class this guard exists for.
47
- const CRASH = [
48
- "Cannot find module",
49
- "Cannot find package",
50
- "ERR_MODULE_NOT_FOUND",
51
- "MODULE_NOT_FOUND",
52
- "ERR_REQUIRE_ESM",
53
- "ERR_PACKAGE_PATH_NOT_EXPORTED",
54
- ];
55
-
56
- function onPath(bin) {
57
- try { execSync(`command -v ${bin}`, { stdio: "ignore", shell: "/bin/sh" }); return true; }
58
- catch { return false; }
59
- }
60
-
61
- // Walk a hooks.json object, yielding { event, command } for every command entry.
62
- function* commandEntries(hooks, id) {
63
- for (const [event, groups] of Object.entries(hooks)) {
64
- if (!Array.isArray(groups)) { err(id, `hooks.${event} is not an array`); continue; }
65
- for (const g of groups) {
66
- const list = g && g.hooks;
67
- if (!Array.isArray(list)) { err(id, `hooks.${event} group has no hooks[] array`); continue; }
68
- for (const h of list) {
69
- if (!h || h.type !== "command") { err(id, `hooks.${event} entry is not a command hook (type="${h && h.type}")`); continue; }
70
- if (typeof h.command !== "string" || !h.command.trim()) { err(id, `hooks.${event} command hook has empty command`); continue; }
71
- yield { event, command: h.command.trim() };
72
- }
73
- }
74
- }
75
- }
76
-
77
- const smokePayload = JSON.stringify({
78
- session_id: "hooks-smoke",
79
- transcript_path: "/dev/null",
80
- cwd: ROOT,
81
- hook_event_name: "Smoke",
82
- tool_name: "Bash",
83
- tool_input: { command: "true" },
84
- tool_response: {},
85
- });
86
-
87
- function smokeRun(command) {
88
- const parts = command.split(/\s+/);
89
- const bin = parts[0];
90
- const args = parts.slice(1);
91
- const home = mkdtempSync(join(tmpdir(), "hooks-smoke-"));
92
- try {
93
- const r = spawnSync(bin, args, {
94
- input: smokePayload,
95
- timeout: 8000,
96
- encoding: "utf8",
97
- env: { ...process.env, HOME: home, TMPDIR: home, XDG_CONFIG_HOME: join(home, ".config"), XDG_STATE_HOME: join(home, ".state") },
98
- });
99
- const out = `${r.stdout || ""}\n${r.stderr || ""}`;
100
- if (r.error && r.error.code === "ETIMEDOUT") return { ok: true, soft: "timed out (hook may wait on stdin/state) — not a crash" };
101
- if (r.error) return { ok: false, why: r.error.message };
102
- const hit = CRASH.find((s) => out.includes(s));
103
- if (hit) return { ok: false, why: `module-load crash: "${hit}"` };
104
- if (r.signal) return { ok: false, why: `killed by signal ${r.signal}` };
105
- return { ok: true };
106
- } finally {
107
- rmSync(home, { recursive: true, force: true });
108
- }
109
- }
110
-
111
- if (!existsSync(EXT)) {
112
- console.error(`No extensions dir at ${EXT}`);
113
- process.exit(1);
114
- }
115
-
116
- const smokeCommands = new Set();
117
-
118
- for (const name of readdirSync(EXT)) {
119
- const root = join(EXT, name);
120
- if (!isDir(root)) continue;
121
- const manifestPath = join(root, ".agents", "plugin.json");
122
- if (!existsSync(manifestPath)) continue;
123
- const id = `extensions/${name}`;
124
- let m;
125
- try { m = JSON.parse(readFileSync(manifestPath, "utf8")); }
126
- catch (e) { err(id, `unreadable .agents/plugin.json: ${e.message}`); continue; }
127
-
128
- const field = m.hooks;
129
- if (!field) continue; // no hooks declared — nothing to validate here (E2 in check-principles covers undeclared dirs)
130
-
131
- const hooksPath = resolve(root, field);
132
- if (!existsSync(hooksPath)) { err(id, `manifest hooks -> "${field}" but file is missing at ${hooksPath}`); continue; }
133
-
134
- let doc;
135
- try { doc = JSON.parse(readFileSync(hooksPath, "utf8")); }
136
- catch (e) { err(id, `${field} is not valid JSON: ${e.message}`); continue; }
137
-
138
- const hooks = doc && doc.hooks;
139
- if (!hooks || typeof hooks !== "object") { err(id, `${field} has no "hooks" object`); continue; }
140
- if (Object.keys(hooks).length === 0) {
141
- err(id, `${field} declares an empty hooks object — a hooks component that registers nothing; drop the "hooks" manifest field and the file`);
142
- continue;
143
- }
144
-
145
- for (const { command } of commandEntries(hooks, id)) {
146
- smokeCommands.add(command);
147
- }
148
- }
149
-
150
- if (SMOKE) {
151
- const cmds = [...smokeCommands].sort();
152
- const bins = new Set(cmds.map((c) => c.split(/\s+/)[0]));
153
- const present = new Set([...bins].filter(onPath));
154
- for (const b of bins) if (!present.has(b)) note(`smoke skipped for "${b}" — not on PATH (can't test what isn't installed)`);
155
- for (const c of cmds) {
156
- const bin = c.split(/\s+/)[0];
157
- if (!present.has(bin)) continue;
158
- const r = smokeRun(c);
159
- if (r.ok && r.soft) warn(`smoke`, `\`${c}\` ${r.soft}`);
160
- else if (!r.ok) err(`smoke`, `\`${c}\` ${r.why}`);
161
- }
162
- } else {
163
- note(`static only — run with --smoke to exercise installed hook binaries (${smokeCommands.size} distinct commands)`);
164
- }
165
-
166
- for (const n of notes) console.log(n);
167
- for (const w of warnings) console.log(w);
168
- for (const e of errors) console.log(e);
169
- console.log(
170
- errors.length
171
- ? `\n✗ hooks check FAILED: ${errors.length} error(s), ${warnings.length} warning(s)`
172
- : `\n✓ hooks check passed (${warnings.length} warning(s))`,
173
- );
174
- process.exit(errors.length ? 1 : 0);
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Repo guard: enforce the authoring principles in docs/AUTHORING-GUIDELINES.md.
4
- * Fails (exit 1) on any ERROR. Pure Node, no deps. Run via `npm run
5
- * check:principles`; also wired into `test` and `prepublishOnly`, and the
6
- * optional `.githooks/pre-commit`.
7
- *
8
- * Rules:
9
- * E1 No commands. A `commands/` dir or a `commands` manifest field is banned —
10
- * commands are skills.
11
- * E2 Declare every component. A `skills/`, `agents/`, or `hooks/` dir on disk
12
- * must be named by the matching manifest field (else it silently doesn't
13
- * install).
14
- * E3 Skill hygiene. Each `skills/<dir>/` needs a `SKILL.md` with `name` +
15
- * `description` frontmatter, and no `README.md`.
16
- * E4 Surface targets are normalized repo-wide:
17
- * - every bundled plugin targets claude/codex/cursor/enact
18
- */
19
- import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
20
- import { join, dirname } from "node:path";
21
- import { fileURLToPath } from "node:url";
22
-
23
- const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
24
- const EXT = join(ROOT, "extensions");
25
-
26
- const errors = [];
27
- const warnings = [];
28
- const err = (p, m) => errors.push(`[ERROR] ${p}: ${m}`);
29
- const warn = (p, m) => warnings.push(`[warn] ${p}: ${m}`);
30
- const ALL_SURFACE_TARGETS = ["claude", "codex", "cursor", "enact"];
31
-
32
- function frontmatter(file) {
33
- const t = readFileSync(file, "utf8");
34
- if (!t.startsWith("---")) return null;
35
- const m = /^---\n([\s\S]*?)\n---/.exec(t);
36
- if (!m) return null;
37
- const body = m[1];
38
- return {
39
- name: /(^|\n)name:/.test(body),
40
- description: /(^|\n)description:/.test(body),
41
- };
42
- }
43
-
44
- function isDir(p) {
45
- try { return statSync(p).isDirectory(); } catch { return false; }
46
- }
47
-
48
- function normalizedTargets(value) {
49
- if (!Array.isArray(value)) return null;
50
- return value.filter((entry) => typeof entry === "string");
51
- }
52
-
53
- if (!existsSync(EXT)) {
54
- console.error(`No extensions dir at ${EXT}`);
55
- process.exit(1);
56
- }
57
-
58
- for (const name of readdirSync(EXT)) {
59
- const root = join(EXT, name);
60
- if (!isDir(root)) continue;
61
- const manifestPath = join(root, ".agents", "plugin.json");
62
- if (!existsSync(manifestPath)) continue;
63
- const id = `extensions/${name}`;
64
- let m;
65
- try { m = JSON.parse(readFileSync(manifestPath, "utf8")); }
66
- catch (e) { err(id, `unreadable .agents/plugin.json: ${e.message}`); continue; }
67
-
68
- // E1 — no commands
69
- if ("commands" in m) err(id, `manifest declares "commands" — commands are skills; remove it`);
70
- if (isDir(join(root, "commands"))) err(id, `has a commands/ dir — commands are skills; migrate to skills/`);
71
-
72
- // E4 — repo-wide surface targeting contract
73
- const expectedTargets = ALL_SURFACE_TARGETS;
74
- const actualTargets = normalizedTargets(m.targets);
75
- if (!actualTargets) {
76
- err(id, `manifest must declare "targets": ${JSON.stringify(expectedTargets)}`);
77
- } else if (JSON.stringify(actualTargets) !== JSON.stringify(expectedTargets)) {
78
- err(
79
- id,
80
- `targets must be ${JSON.stringify(expectedTargets)}; found ${JSON.stringify(actualTargets)}`,
81
- );
82
- }
83
-
84
- // E2 — declare components that exist on disk
85
- for (const comp of ["skills", "agents", "hooks"]) {
86
- if (isDir(join(root, comp)) && !m[comp])
87
- err(id, `${comp}/ exists on disk but manifest has no "${comp}" field → it will NOT install`);
88
- }
89
-
90
- // E3 — skill hygiene
91
- const skillsDir = join(root, "skills");
92
- if (isDir(skillsDir)) {
93
- for (const s of readdirSync(skillsDir)) {
94
- const sp = join(skillsDir, s);
95
- if (!isDir(sp)) { warn(id, `skills/${s} is a loose file, not a skill dir`); continue; }
96
- const smd = join(sp, "SKILL.md");
97
- if (!existsSync(smd)) { err(id, `skills/${s} has no SKILL.md`); continue; }
98
- const fm = frontmatter(smd);
99
- if (!fm) err(id, `skills/${s}/SKILL.md has no YAML frontmatter`);
100
- else {
101
- if (!fm.name) err(id, `skills/${s}/SKILL.md frontmatter missing "name"`);
102
- if (!fm.description) err(id, `skills/${s}/SKILL.md frontmatter missing "description"`);
103
- }
104
- if (existsSync(join(sp, "README.md"))) err(id, `skills/${s} contains README.md (not allowed in a skill)`);
105
- }
106
- }
107
- }
108
-
109
- for (const w of warnings) console.log(w);
110
- for (const e of errors) console.log(e);
111
- console.log(
112
- errors.length
113
- ? `\n✗ principles check FAILED: ${errors.length} error(s), ${warnings.length} warning(s)`
114
- : `\n✓ principles check passed (${warnings.length} warning(s))`,
115
- );
116
- process.exit(errors.length ? 1 : 0);
@@ -1,49 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * session-start-drift-check.mjs — Enact Extensions session-start drift hook.
4
- *
5
- * Registered as a session-start hook for Claude, Codex, Cursor, and Enact.
6
- * Checks whether any installed enact-extensions plugins have drifted from
7
- * their canonical source (i.e. are outdated) and prints a concise advisory
8
- * if so. When the user opts in via ENACT_EXTENSIONS_AUTO_UPDATE, the drifted
9
- * surfaces are refreshed in place instead of merely advised.
10
- *
11
- * Design constraints:
12
- * - FAIL-SILENT: wrap everything in try/catch; never throw; always exit 0.
13
- * - FAST: imports the helper directly (no subprocess) for speed.
14
- * - READ-ONLY by default: only mutates state when the user opts into auto-apply.
15
- * - NO OUTPUT on success (or error): only print valid hook JSON when there
16
- * are outdated entries.
17
- * - DEPENDENCY-FREE: only node builtins + enact-extensions own modules.
18
- */
19
-
20
- import { dirname, resolve, join } from "node:path";
21
- import { fileURLToPath } from "node:url";
22
-
23
- const __dirname = dirname(fileURLToPath(import.meta.url));
24
- // Navigate from scripts/hooks/ up to the repo root so we can import lib modules.
25
- const REPO_ROOT = resolve(__dirname, "..", "..");
26
-
27
- try {
28
- // Dynamically import so any module-load failure is caught by the outer try/catch.
29
- const { handleSessionStartDrift, sessionStartHookJson } = await import(join(REPO_ROOT, "scripts", "lib", "auto-update.mjs"));
30
-
31
- // Opt-in is the USER's: gate auto-apply on the env var they set.
32
- const autoApply = !!process.env.ENACT_EXTENSIONS_AUTO_UPDATE;
33
-
34
- let result;
35
- try {
36
- result = handleSessionStartDrift({ autoApply });
37
- } catch {
38
- // Drift resolution threw (ledger missing, I/O error, etc.) — stay silent.
39
- process.exit(0);
40
- }
41
-
42
- if (result.line) {
43
- process.stdout.write(`${sessionStartHookJson(result.line)}\n`);
44
- }
45
- } catch {
46
- // Any top-level error (import failure, parse error, etc.) — silent exit 0.
47
- }
48
-
49
- process.exit(0);
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
-
6
- # ── Node.js version check ──────────────────────────────────────────────────────
7
- NODE_MAJOR="$(node --version 2>/dev/null | sed 's/v//' | cut -d. -f1)"
8
- if [ -z "$NODE_MAJOR" ] || [ "$NODE_MAJOR" -lt 22 ]; then
9
- echo "error: Node.js >= 22 is required (found: $(node --version 2>/dev/null || echo 'none'))" >&2
10
- exit 1
11
- fi
12
-
13
- cd "$REPO_ROOT"
14
-
15
- # ── Install dependencies ───────────────────────────────────────────────────────
16
- echo "→ npm install"
17
- npm install --no-audit --no-fund
18
-
19
- # ── Build TypeScript ───────────────────────────────────────────────────────────
20
- echo "→ npm run build"
21
- npm run build
22
-
23
- # ── Bundle into a single file ─────────────────────────────────────────────────
24
- echo "→ bundling"
25
- # Bundle the CLI and all JS/TS dependencies into one ESM file.
26
- # The bundle is installed into <support>/dist/internal/ so that import.meta.url
27
- # resolves ../../ to <support>/ — matching the dist/internal/schema.js assumption
28
- # about where spec/ lives relative to the compiled output.
29
- SUPPORT_DIR="$HOME/.local/share/enact-extensions"
30
- BUNDLE_DIR="$SUPPORT_DIR/dist/internal"
31
- mkdir -p "$BUNDLE_DIR"
32
-
33
- npx --yes esbuild scripts/enact-extensions.mjs \
34
- --bundle \
35
- --platform=node \
36
- --format=cjs \
37
- "--banner:js=const __import_meta_url=require('url').pathToFileURL(__filename).href;" \
38
- "--define:import.meta.url=__import_meta_url" \
39
- --outfile="$BUNDLE_DIR/enact-extensions.js"
40
-
41
- chmod +x "$BUNDLE_DIR/enact-extensions.js"
42
-
43
- # ── Copy spec/ alongside the bundle ───────────────────────────────────────────
44
- # schema.ts resolves spec/ as ../../spec/ relative to dist/internal/ — keep that layout.
45
- rm -rf "$SUPPORT_DIR/spec"
46
- cp -r "$REPO_ROOT/spec" "$SUPPORT_DIR/spec"
47
-
48
- # ── Install launcher ───────────────────────────────────────────────────────────
49
- if [ "$(id -u)" = "0" ]; then
50
- INSTALL_DIR="/usr/local/bin"
51
- else
52
- INSTALL_DIR="$HOME/.local/bin"
53
- mkdir -p "$INSTALL_DIR"
54
- fi
55
-
56
- LAUNCHER="$INSTALL_DIR/enact-extensions"
57
- {
58
- echo '#!/usr/bin/env bash'
59
- echo "exec node \"$BUNDLE_DIR/enact-extensions.js\" \"\$@\""
60
- } > "$LAUNCHER"
61
- chmod +x "$LAUNCHER"
62
-
63
- echo ""
64
- echo "installed: $LAUNCHER"
65
-
66
- if [ "$(id -u)" != "0" ] && [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
67
- echo ""
68
- echo " Add to your shell profile to use the command:"
69
- echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
70
- fi
@@ -1,88 +0,0 @@
1
- /**
2
- * auto-update.mjs — SessionStart drift resolution: advise by default, or
3
- * auto-apply when opted in via ENACT_EXTENSIONS_AUTO_UPDATE.
4
- *
5
- * Single export:
6
- * handleSessionStartDrift({ autoApply, home, cwd }) -> { outdated, applied, updated, line }
7
- * sessionStartHookResponse(line) -> valid hook JSON response object
8
- *
9
- * Behaviour:
10
- * - Compute the outdated (drifted) surfaces from the ledger vs canonical source.
11
- * - No outdated surfaces → { outdated: [], applied: false, line: null }.
12
- * - Outdated + autoApply=false → advisory line (default; mutates nothing).
13
- * - Outdated + autoApply=true → runUpdate({ all: true, silent: true }); summary line naming
14
- * what was refreshed. If the refresh updated
15
- * nothing actionable (e.g. all orphaned), fall
16
- * back to the advisory line.
17
- *
18
- * The opt-in is the USER's: callers derive `autoApply` from
19
- * process.env.ENACT_EXTENSIONS_AUTO_UPDATE. This module never reads env itself.
20
- * Reuses computeOutdated + runUpdate; it adds no new install/refresh logic.
21
- */
22
-
23
- import { computeOutdated } from "./outdated.mjs";
24
- import { runUpdate } from "./run-update.mjs";
25
-
26
- /** Format the "name/platform, ..." pair list for a set of entries. */
27
- function pairs(entries) {
28
- return entries.map((e) => `${e.name}/${e.platform}`).join(", ");
29
- }
30
-
31
- /** The default advisory line (unchanged wording: names surfaces + manual command). */
32
- export function driftAdvisoryLine(outdated) {
33
- return (
34
- `[enact-extensions] ${outdated.length} plugin surface${outdated.length === 1 ? "" : "s"} ` +
35
- `outdated: ${pairs(outdated)}. Run: enact-extensions update --all`
36
- );
37
- }
38
-
39
- /** The auto-apply summary line, naming the surfaces that were refreshed. */
40
- export function autoUpdateSummaryLine(updated) {
41
- return (
42
- `[enact-extensions] auto-updated ${updated.length} plugin surface${updated.length === 1 ? "" : "s"}: ` +
43
- `${pairs(updated)}`
44
- );
45
- }
46
-
47
- /** Convert a drift advisory/update line into valid SessionStart hook JSON. */
48
- export function sessionStartHookResponse(line) {
49
- const response = { continue: true };
50
- if (line) response.systemMessage = line;
51
- return response;
52
- }
53
-
54
- /** JSON-string form for command hooks that write their response to stdout. */
55
- export function sessionStartHookJson(line) {
56
- return JSON.stringify(sessionStartHookResponse(line));
57
- }
58
-
59
- /**
60
- * Resolve SessionStart drift: advise by default, or auto-apply when opted in.
61
- *
62
- * @param {object} [opts]
63
- * @param {boolean} [opts.autoApply] — when true, refresh outdated surfaces in place.
64
- * @param {string} [opts.home] — ledger home override (defaults to os.homedir()).
65
- * @param {string} [opts.cwd] — canonical-source resolution dir (defaults to cwd).
66
- * @returns {{ outdated: object[], applied: boolean, updated: object[], line: string|null }}
67
- */
68
- export function handleSessionStartDrift({ autoApply, home, cwd } = {}) {
69
- const outdated = (computeOutdated({ home, cwd }) ?? []).filter(
70
- (e) => e && e.status === "outdated",
71
- );
72
-
73
- if (outdated.length === 0) {
74
- return { outdated, applied: false, updated: [], line: null };
75
- }
76
-
77
- if (autoApply) {
78
- const summary = runUpdate({ all: true, silent: true, home, cwd });
79
- const updated = summary?.updated ?? [];
80
- if (updated.length === 0) {
81
- // Nothing actionable was refreshed (e.g. orphaned source) — advise instead.
82
- return { outdated, applied: false, updated, line: driftAdvisoryLine(outdated) };
83
- }
84
- return { outdated, applied: true, updated, line: autoUpdateSummaryLine(updated) };
85
- }
86
-
87
- return { outdated, applied: false, updated: [], line: driftAdvisoryLine(outdated) };
88
- }
@@ -1,137 +0,0 @@
1
- /**
2
- * bundle-hash.mjs — deterministic content hash for a plugin bundle.
3
- *
4
- * bundleHash(pluginRoot) → sha256 hex string
5
- *
6
- * The hash covers the CANONICAL bundle content only:
7
- * - .agents/plugin.json (the manifest itself)
8
- * - Component dirs/files referenced in the manifest:
9
- * skills, mcpServers, apps, commands, hooks, agents, _agents, rules
10
- * - .mcp.json (if present at pluginRoot root)
11
- *
12
- * EXCLUDED (generated / derived surfaces, never present in canonical source):
13
- * - .claude-plugin/
14
- * - .codex-plugin/
15
- * - .cursor-plugin/
16
- *
17
- * Algorithm:
18
- * 1. Collect the set of paths to include (manifest + referenced component paths).
19
- * 2. Walk each path recursively; collect all (relativePath, bytes) pairs.
20
- * 3. Sort by relative path (order-independence).
21
- * 4. Feed path + bytes for each file into a single sha256 digest.
22
- * 5. Return the hex digest.
23
- *
24
- * Pure, no writes, synchronous.
25
- */
26
-
27
- import { createHash } from "node:crypto";
28
- import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
29
- import { join, relative } from "node:path";
30
-
31
- // ---------------------------------------------------------------------------
32
- // Canonical component field names (mirrors pathFieldsFromManifest in install.ts)
33
- // ---------------------------------------------------------------------------
34
- const COMPONENT_FIELDS = [
35
- "skills",
36
- "mcpServers",
37
- "apps",
38
- "commands",
39
- "hooks",
40
- "agents",
41
- "_agents",
42
- "rules",
43
- ];
44
-
45
- // Generated platform dirs — always excluded from the canonical hash.
46
- const EXCLUDED_DIRS = new Set([".claude-plugin", ".codex-plugin", ".cursor-plugin"]);
47
-
48
- /**
49
- * Recursively collect all file entries under `root`.
50
- * Returns an array of { rel: string, abs: string } sorted by rel.
51
- * Silently skips non-file, non-directory entries.
52
- *
53
- * @param {string} abs - absolute path to walk
54
- * @param {string} base - the pluginRoot (for computing relative paths)
55
- * @param {string[]} acc - accumulator
56
- */
57
- function walkFiles(abs, base, acc) {
58
- if (!existsSync(abs)) return;
59
- const stat = statSync(abs);
60
- if (stat.isFile()) {
61
- acc.push(relative(base, abs));
62
- return;
63
- }
64
- if (!stat.isDirectory()) return;
65
- const entries = readdirSync(abs).sort(); // sort for determinism
66
- for (const name of entries) {
67
- walkFiles(join(abs, name), base, acc);
68
- }
69
- }
70
-
71
- /**
72
- * Collect the canonical set of relative paths to include in the hash.
73
- *
74
- * @param {string} pluginRoot
75
- * @param {object} manifest - parsed .agents/plugin.json
76
- * @returns {string[]} sorted relative paths (relative to pluginRoot)
77
- */
78
- function canonicalPaths(pluginRoot, manifest) {
79
- // Always include the manifest itself.
80
- const collected = [];
81
-
82
- // 1. Always walk .agents/plugin.json (the manifest).
83
- walkFiles(join(pluginRoot, ".agents", "plugin.json"), pluginRoot, collected);
84
-
85
- // 2. Walk each component path that exists.
86
- for (const field of COMPONENT_FIELDS) {
87
- const raw = manifest[field];
88
- if (typeof raw !== "string" || !raw.trim()) continue;
89
- // Normalise: strip leading ./ and trailing /
90
- const cleaned = raw.replace(/^\.\//, "").replace(/\/+$/, "");
91
- if (!cleaned || cleaned.startsWith("../")) continue;
92
- // Refuse to hash generated platform dirs even if the manifest references them.
93
- const topSegment = cleaned.split("/")[0];
94
- if (EXCLUDED_DIRS.has(topSegment)) continue;
95
- walkFiles(join(pluginRoot, cleaned), pluginRoot, collected);
96
- }
97
-
98
- // 3. .mcp.json at pluginRoot root (included if present, regardless of manifest field)
99
- walkFiles(join(pluginRoot, ".mcp.json"), pluginRoot, collected);
100
-
101
- // Sort for order-independence, then deduplicate.
102
- const unique = [...new Set(collected)].sort();
103
- return unique;
104
- }
105
-
106
- /**
107
- * Compute a deterministic sha256 hex hash of the canonical plugin bundle.
108
- *
109
- * @param {string} pluginRoot - absolute path to the bundle root
110
- * @returns {string} sha256 hex digest (64 lowercase hex chars)
111
- * @throws {Error} if the manifest cannot be read (ENOENT, parse error, etc.)
112
- */
113
- export function bundleHash(pluginRoot) {
114
- // Read and parse the manifest first — this is the anchor; if it's missing
115
- // we cannot know which component paths to include, so we throw.
116
- const manifestPath = join(pluginRoot, ".agents", "plugin.json");
117
- if (!existsSync(manifestPath)) {
118
- throw new Error(`Cannot compute bundle hash: manifest not found at ${manifestPath}`);
119
- }
120
- const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
121
-
122
- // Collect the sorted list of relative paths.
123
- const paths = canonicalPaths(pluginRoot, manifest);
124
-
125
- // Hash all paths and their contents in sorted order.
126
- const hash = createHash("sha256");
127
- for (const rel of paths) {
128
- const abs = join(pluginRoot, rel);
129
- // Feed the relative path as a NUL-terminated string to make path changes
130
- // visible even when content is identical.
131
- hash.update(rel + "\0", "utf8");
132
- // Feed the file bytes.
133
- hash.update(readFileSync(abs));
134
- }
135
-
136
- return hash.digest("hex");
137
- }