@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,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
- }