@amsterdamdatalabs/enact-extensions 0.1.37 → 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 (577) 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 +12 -2
  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 +113 -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 +57 -0
  81. package/extensions/enact-loop/skills/loop-intake/SKILL.md +59 -0
  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 -873
  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/drive-loop/SKILL.md +0 -394
  454. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
  455. package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
  456. package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
  457. package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
  458. package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
  459. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
  460. package/extensions/enact-factory/skills/research/SKILL.md +0 -83
  461. package/extensions/enact-factory/skills/review/SKILL.md +0 -67
  462. package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
  463. package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
  464. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
  465. package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
  466. package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
  467. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
  468. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
  469. package/extensions/enact-wiki/.agents/plugin.json +0 -43
  470. package/extensions/enact-wiki/.mcp.json +0 -15
  471. package/extensions/enact-wiki/README.md +0 -44
  472. package/extensions/enact-wiki/assets/icon.png +0 -0
  473. package/extensions/enact-wiki/assets/logo.png +0 -0
  474. package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
  475. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
  476. package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
  477. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
  478. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
  479. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
  480. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
  481. package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
  482. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
  483. package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
  484. package/extensions/net-revenue-management/.agents/plugin.json +0 -40
  485. package/extensions/net-revenue-management/.mcp.json +0 -9
  486. package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
  487. package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
  488. package/extensions/plugin-dev/.agents/plugin.json +0 -41
  489. package/extensions/plugin-dev/agents/agent-creator.md +0 -199
  490. package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
  491. package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
  492. package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
  493. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
  494. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
  495. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
  496. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
  497. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
  498. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
  499. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
  500. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
  501. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
  502. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
  503. package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
  504. package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
  505. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
  506. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
  507. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
  508. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
  509. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
  510. package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
  511. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
  512. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
  513. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
  514. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
  515. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
  516. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
  517. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
  518. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
  519. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
  520. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
  521. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
  522. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
  523. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
  524. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
  525. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
  526. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
  527. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
  528. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
  529. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
  530. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
  531. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
  532. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
  533. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
  534. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
  535. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
  536. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
  537. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
  538. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
  539. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
  540. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
  541. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
  542. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
  543. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
  544. package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
  545. package/scripts/check-hooks.mjs +0 -174
  546. package/scripts/check-principles.mjs +0 -116
  547. package/scripts/hooks/session-start-drift-check.mjs +0 -48
  548. package/scripts/install.sh +0 -70
  549. package/scripts/lib/auto-update.mjs +0 -75
  550. package/scripts/lib/bundle-hash.mjs +0 -137
  551. package/scripts/lib/hooks.mjs +0 -585
  552. package/scripts/lib/ledger.mjs +0 -163
  553. package/scripts/lib/migrate-artifacts.mjs +0 -144
  554. package/scripts/lib/outdated.mjs +0 -144
  555. package/scripts/lib/postinstall-offer.mjs +0 -83
  556. package/scripts/lib/principles.mjs +0 -109
  557. package/scripts/lib/provision-mcp.mjs +0 -16
  558. package/scripts/lib/resolve-plugin-root.mjs +0 -9
  559. package/scripts/lib/run-install.mjs +0 -500
  560. package/scripts/lib/run-prune.mjs +0 -94
  561. package/scripts/lib/run-uninstall.mjs +0 -244
  562. package/scripts/lib/run-update.mjs +0 -152
  563. package/scripts/lib/serve.mjs +0 -472
  564. package/scripts/lib/ups-router.mjs +0 -392
  565. package/scripts/postinstall.mjs +0 -101
  566. package/scripts/setup-enact-context.sh +0 -28
  567. package/scripts/version-bump.sh +0 -484
  568. package/web/assets/README.md +0 -111
  569. package/web/assets/logo-full.png +0 -0
  570. package/web/assets/logo-slim.png +0 -0
  571. package/web/assets/tokens/base.css +0 -45
  572. package/web/assets/tokens/colors.css +0 -248
  573. package/web/assets/tokens/effects.css +0 -24
  574. package/web/assets/tokens/fonts.css +0 -8
  575. package/web/assets/tokens/index.css +0 -18
  576. package/web/assets/tokens/spacing.css +0 -50
  577. 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,48 +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 when there are outdated entries.
16
- * - DEPENDENCY-FREE: only node builtins + enact-extensions own modules.
17
- */
18
-
19
- import { dirname, resolve, join } from "node:path";
20
- import { fileURLToPath } from "node:url";
21
-
22
- const __dirname = dirname(fileURLToPath(import.meta.url));
23
- // Navigate from scripts/hooks/ up to the repo root so we can import lib modules.
24
- const REPO_ROOT = resolve(__dirname, "..", "..");
25
-
26
- try {
27
- // Dynamically import so any module-load failure is caught by the outer try/catch.
28
- const { handleSessionStartDrift } = await import(join(REPO_ROOT, "scripts", "lib", "auto-update.mjs"));
29
-
30
- // Opt-in is the USER's: gate auto-apply on the env var they set.
31
- const autoApply = !!process.env.ENACT_EXTENSIONS_AUTO_UPDATE;
32
-
33
- let result;
34
- try {
35
- result = handleSessionStartDrift({ autoApply });
36
- } catch {
37
- // Drift resolution threw (ledger missing, I/O error, etc.) — stay silent.
38
- process.exit(0);
39
- }
40
-
41
- if (result.line) {
42
- process.stdout.write(`${result.line}\n`);
43
- }
44
- } catch {
45
- // Any top-level error (import failure, parse error, etc.) — silent exit 0.
46
- }
47
-
48
- 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,75 +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
- *
8
- * Behaviour:
9
- * - Compute the outdated (drifted) surfaces from the ledger vs canonical source.
10
- * - No outdated surfaces → { outdated: [], applied: false, line: null }.
11
- * - Outdated + autoApply=false → advisory line (default; mutates nothing).
12
- * - Outdated + autoApply=true → runUpdate({ all: true }); summary line naming
13
- * what was refreshed. If the refresh updated
14
- * nothing actionable (e.g. all orphaned), fall
15
- * back to the advisory line.
16
- *
17
- * The opt-in is the USER's: callers derive `autoApply` from
18
- * process.env.ENACT_EXTENSIONS_AUTO_UPDATE. This module never reads env itself.
19
- * Reuses computeOutdated + runUpdate; it adds no new install/refresh logic.
20
- */
21
-
22
- import { computeOutdated } from "./outdated.mjs";
23
- import { runUpdate } from "./run-update.mjs";
24
-
25
- /** Format the "name/platform, ..." pair list for a set of entries. */
26
- function pairs(entries) {
27
- return entries.map((e) => `${e.name}/${e.platform}`).join(", ");
28
- }
29
-
30
- /** The default advisory line (unchanged wording: names surfaces + manual command). */
31
- export function driftAdvisoryLine(outdated) {
32
- return (
33
- `[enact-extensions] ${outdated.length} plugin surface${outdated.length === 1 ? "" : "s"} ` +
34
- `outdated: ${pairs(outdated)}. Run: enact-extensions update --all`
35
- );
36
- }
37
-
38
- /** The auto-apply summary line, naming the surfaces that were refreshed. */
39
- export function autoUpdateSummaryLine(updated) {
40
- return (
41
- `[enact-extensions] auto-updated ${updated.length} plugin surface${updated.length === 1 ? "" : "s"}: ` +
42
- `${pairs(updated)}`
43
- );
44
- }
45
-
46
- /**
47
- * Resolve SessionStart drift: advise by default, or auto-apply when opted in.
48
- *
49
- * @param {object} [opts]
50
- * @param {boolean} [opts.autoApply] — when true, refresh outdated surfaces in place.
51
- * @param {string} [opts.home] — ledger home override (defaults to os.homedir()).
52
- * @param {string} [opts.cwd] — canonical-source resolution dir (defaults to cwd).
53
- * @returns {{ outdated: object[], applied: boolean, updated: object[], line: string|null }}
54
- */
55
- export function handleSessionStartDrift({ autoApply, home, cwd } = {}) {
56
- const outdated = (computeOutdated({ home, cwd }) ?? []).filter(
57
- (e) => e && e.status === "outdated",
58
- );
59
-
60
- if (outdated.length === 0) {
61
- return { outdated, applied: false, updated: [], line: null };
62
- }
63
-
64
- if (autoApply) {
65
- const summary = runUpdate({ all: true, home, cwd });
66
- const updated = summary?.updated ?? [];
67
- if (updated.length === 0) {
68
- // Nothing actionable was refreshed (e.g. orphaned source) — advise instead.
69
- return { outdated, applied: false, updated, line: driftAdvisoryLine(outdated) };
70
- }
71
- return { outdated, applied: true, updated, line: autoUpdateSummaryLine(updated) };
72
- }
73
-
74
- return { outdated, applied: false, updated: [], line: driftAdvisoryLine(outdated) };
75
- }
@@ -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
- }