@amsterdamdatalabs/enact-extensions 0.1.42 → 0.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +67 -108
  2. package/bundled-extensions.json +3 -0
  3. package/dist/create/claude.d.ts.map +1 -1
  4. package/dist/create/claude.js +1 -1
  5. package/dist/create/claude.js.map +1 -1
  6. package/dist/create/codex.d.ts.map +1 -1
  7. package/dist/create/codex.js +2 -3
  8. package/dist/create/codex.js.map +1 -1
  9. package/dist/create/cursor.d.ts.map +1 -1
  10. package/dist/create/cursor.js +3 -7
  11. package/dist/create/cursor.js.map +1 -1
  12. package/dist/create/enact.d.ts.map +1 -1
  13. package/dist/create/enact.js +2 -0
  14. package/dist/create/enact.js.map +1 -1
  15. package/dist/create/index.d.ts +4 -1
  16. package/dist/create/index.d.ts.map +1 -1
  17. package/dist/create/index.js +9 -3
  18. package/dist/create/index.js.map +1 -1
  19. package/dist/create/kimi.d.ts +16 -0
  20. package/dist/create/kimi.d.ts.map +1 -0
  21. package/dist/create/kimi.js +86 -0
  22. package/dist/create/kimi.js.map +1 -0
  23. package/dist/create/opencode.d.ts +129 -0
  24. package/dist/create/opencode.d.ts.map +1 -0
  25. package/dist/create/opencode.js +689 -0
  26. package/dist/create/opencode.js.map +1 -0
  27. package/dist/index.d.ts +14 -19
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -11
  30. package/dist/index.js.map +1 -1
  31. package/dist/internal/agents.d.ts +11 -1
  32. package/dist/internal/agents.d.ts.map +1 -1
  33. package/dist/internal/agents.js +120 -4
  34. package/dist/internal/agents.js.map +1 -1
  35. package/dist/internal/extensions-table.d.ts +87 -0
  36. package/dist/internal/extensions-table.d.ts.map +1 -0
  37. package/dist/internal/extensions-table.js +195 -0
  38. package/dist/internal/extensions-table.js.map +1 -0
  39. package/dist/internal/file-ops.d.ts +36 -0
  40. package/dist/internal/file-ops.d.ts.map +1 -0
  41. package/dist/internal/file-ops.js +89 -0
  42. package/dist/internal/file-ops.js.map +1 -0
  43. package/dist/internal/hooks.d.ts +56 -0
  44. package/dist/internal/hooks.d.ts.map +1 -0
  45. package/dist/internal/hooks.js +128 -0
  46. package/dist/internal/hooks.js.map +1 -0
  47. package/dist/internal/io.d.ts.map +1 -1
  48. package/dist/internal/io.js.map +1 -1
  49. package/dist/internal/json-merge.d.ts +63 -0
  50. package/dist/internal/json-merge.d.ts.map +1 -0
  51. package/dist/internal/json-merge.js +124 -0
  52. package/dist/internal/json-merge.js.map +1 -0
  53. package/dist/internal/lock-ownership.d.ts +41 -0
  54. package/dist/internal/lock-ownership.d.ts.map +1 -0
  55. package/dist/internal/lock-ownership.js +24 -0
  56. package/dist/internal/lock-ownership.js.map +1 -0
  57. package/dist/internal/pick.d.ts.map +1 -1
  58. package/dist/internal/pick.js.map +1 -1
  59. package/dist/internal/platform.d.ts.map +1 -1
  60. package/dist/internal/platform.js +82 -42
  61. package/dist/internal/platform.js.map +1 -1
  62. package/dist/internal/schema.d.ts.map +1 -1
  63. package/dist/internal/schema.js.map +1 -1
  64. package/dist/internal/toml-block.d.ts +59 -0
  65. package/dist/internal/toml-block.d.ts.map +1 -0
  66. package/dist/internal/toml-block.js +113 -0
  67. package/dist/internal/toml-block.js.map +1 -0
  68. package/dist/internal/types.d.ts +2 -1
  69. package/dist/internal/types.d.ts.map +1 -1
  70. package/dist/projection.d.ts +47 -0
  71. package/dist/projection.d.ts.map +1 -0
  72. package/dist/projection.js +180 -0
  73. package/dist/projection.js.map +1 -0
  74. package/dist/validate/index.d.ts +10 -5
  75. package/dist/validate/index.d.ts.map +1 -1
  76. package/dist/validate/index.js +59 -10
  77. package/dist/validate/index.js.map +1 -1
  78. package/dist/validate/kimi.d.ts +3 -0
  79. package/dist/validate/kimi.d.ts.map +1 -0
  80. package/dist/validate/kimi.js +11 -0
  81. package/dist/validate/kimi.js.map +1 -0
  82. package/dist/validate/opencode.d.ts +3 -0
  83. package/dist/validate/opencode.d.ts.map +1 -0
  84. package/dist/validate/opencode.js +11 -0
  85. package/dist/validate/opencode.js.map +1 -0
  86. package/dist/validate/run.d.ts +39 -0
  87. package/dist/validate/run.d.ts.map +1 -0
  88. package/dist/validate/run.js +60 -0
  89. package/dist/validate/run.js.map +1 -0
  90. package/extensions/enact-loop/.agents/plugin.json +12 -8
  91. package/extensions/enact-loop/scripts/validate.mjs +84 -2
  92. package/extensions/enact-loop/skills/enact-loop/SKILL.md +36 -466
  93. package/extensions/enact-loop/skills/enact-loop/references/loop-contract.md +114 -0
  94. package/extensions/enact-loop/skills/loop-budget/SKILL.md +43 -26
  95. package/extensions/enact-loop/skills/loop-intake/SKILL.md +44 -32
  96. package/extensions/enact-repo/.agents/plugin.json +55 -0
  97. package/extensions/enact-repo/.mcp.json +20 -0
  98. package/extensions/enact-repo/README.md +90 -0
  99. package/extensions/enact-repo/hooks/hooks.json +98 -0
  100. package/extensions/enact-repo/lean-ctx/config.toml +35 -0
  101. package/extensions/enact-repo/lean-ctx/layout.toml +5 -0
  102. package/extensions/enact-repo/skills/aca-sandboxes/SKILL.md +53 -0
  103. package/extensions/enact-repo/skills/aca-sandboxes/references/capabilities.md +52 -0
  104. package/extensions/enact-repo/skills/aca-sandboxes/references/install.md +87 -0
  105. package/extensions/enact-repo/skills/aca-sandboxes/references/prerequisites.md +52 -0
  106. package/extensions/enact-repo/skills/aca-sandboxes/references/quickstart.md +164 -0
  107. package/extensions/enact-repo/skills/aca-sandboxes/references/reference-advanced.md +251 -0
  108. package/extensions/enact-repo/skills/aca-sandboxes/references/reference.md +287 -0
  109. package/extensions/enact-repo/skills/aca-sandboxes/references/response-cues.md +71 -0
  110. package/extensions/enact-repo/skills/aca-sandboxes/references/scenarios.md +219 -0
  111. package/extensions/enact-repo/skills/aca-sandboxes/version.json +4 -0
  112. package/extensions/enact-repo/skills/backend-remove-deadcode/SKILL.md +96 -0
  113. package/extensions/enact-repo/skills/cmux-leader/SKILL.md +61 -0
  114. package/extensions/enact-repo/skills/cmux-send/SKILL.md +61 -0
  115. package/extensions/enact-repo/skills/code-review/SKILL.md +100 -0
  116. package/extensions/enact-repo/skills/codebase-design/SKILL.md +98 -0
  117. package/extensions/enact-repo/skills/codebase-design/references/DEEPENING.md +37 -0
  118. package/extensions/enact-repo/skills/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
  119. package/extensions/enact-repo/skills/codebase-design/references/TESTABILITY.md +29 -0
  120. package/extensions/enact-repo/skills/computer-use/SKILL.md +76 -0
  121. package/extensions/enact-repo/skills/debug-issue/SKILL.md +40 -0
  122. package/extensions/enact-repo/skills/diagnosing-bugs/SKILL.md +100 -0
  123. package/extensions/enact-repo/skills/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
  124. package/extensions/enact-repo/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  125. package/extensions/enact-repo/skills/domain-modeling/SKILL.md +86 -0
  126. package/extensions/enact-repo/skills/domain-modeling/references/ADR-FORMAT.md +47 -0
  127. package/extensions/enact-repo/skills/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
  128. package/extensions/enact-repo/skills/explore-codebase/SKILL.md +41 -0
  129. package/extensions/enact-repo/skills/frontend-design/LICENSE.txt +177 -0
  130. package/extensions/enact-repo/skills/frontend-design/SKILL.md +56 -0
  131. package/extensions/enact-repo/skills/grill-me/SKILL.md +20 -0
  132. package/extensions/enact-repo/skills/grill-with-docs/SKILL.md +20 -0
  133. package/extensions/enact-repo/skills/handoff/SKILL.md +28 -0
  134. package/extensions/enact-repo/skills/http-contract-migration/SKILL.md +74 -0
  135. package/extensions/enact-repo/skills/http-contract-migration/references/compatibility-and-gates.md +26 -0
  136. package/extensions/enact-repo/skills/http-contract-migration/references/hexagonal-boundary.md +16 -0
  137. package/extensions/enact-repo/skills/http-contract-migration/references/publication-and-adoption.md +31 -0
  138. package/extensions/enact-repo/skills/http-contract-migration/references/wire-fidelity-and-dto.md +31 -0
  139. package/extensions/enact-repo/skills/implement/SKILL.md +28 -0
  140. package/extensions/enact-repo/skills/improve-codebase-architecture/SKILL.md +80 -0
  141. package/extensions/enact-repo/skills/improve-codebase-architecture/references/HTML-REPORT.md +123 -0
  142. package/extensions/enact-repo/skills/interaction-design/SKILL.md +30 -0
  143. package/extensions/enact-repo/skills/interaction-design/references/Workflow.md +146 -0
  144. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-gsap.md +219 -0
  145. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-native.md +110 -0
  146. package/extensions/enact-repo/skills/interaction-design/references/animation-libraries.md +177 -0
  147. package/extensions/enact-repo/skills/interaction-design/references/interaction-patterns.md +166 -0
  148. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns-advanced.md +285 -0
  149. package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns.md +254 -0
  150. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations-reveals.md +213 -0
  151. package/extensions/enact-repo/skills/interaction-design/references/scroll-animations.md +208 -0
  152. package/extensions/enact-repo/skills/lean-ctx/SKILL.md +81 -0
  153. package/extensions/enact-repo/skills/orca-cli/SKILL.md +88 -0
  154. package/extensions/enact-repo/skills/orchestration/SKILL.md +80 -0
  155. package/extensions/enact-repo/skills/prototype/SKILL.md +37 -0
  156. package/extensions/enact-repo/skills/prototype/references/LOGIC.md +79 -0
  157. package/extensions/enact-repo/skills/prototype/references/UI.md +112 -0
  158. package/extensions/enact-repo/skills/refactor-safely/SKILL.md +44 -0
  159. package/extensions/enact-repo/skills/remove-deadcode/SKILL.md +54 -0
  160. package/extensions/enact-repo/skills/research/SKILL.md +27 -0
  161. package/extensions/enact-repo/skills/resolving-merge-conflicts/SKILL.md +28 -0
  162. package/extensions/enact-repo/skills/review-changes/SKILL.md +45 -0
  163. package/extensions/enact-repo/skills/tailwind-4-docs/SKILL.md +88 -0
  164. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/accent-color.mdx +149 -0
  165. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/adding-custom-styles.mdx +635 -0
  166. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-content.mdx +300 -0
  167. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-items.mdx +241 -0
  168. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-self.mdx +294 -0
  169. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/animation.mdx +286 -0
  170. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/appearance.mdx +180 -0
  171. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/aspect-ratio.mdx +98 -0
  172. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-blur.mdx +109 -0
  173. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-brightness.mdx +82 -0
  174. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-contrast.mdx +82 -0
  175. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-grayscale.mdx +99 -0
  176. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-hue-rotate.mdx +173 -0
  177. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-invert.mdx +99 -0
  178. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-opacity.mdx +103 -0
  179. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-saturate.mdx +98 -0
  180. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-sepia.mdx +95 -0
  181. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter.mdx +113 -0
  182. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backface-visibility.mdx +110 -0
  183. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-attachment.mdx +126 -0
  184. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-blend-mode.mdx +79 -0
  185. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-clip.mdx +85 -0
  186. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-color.mdx +176 -0
  187. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-image.mdx +349 -0
  188. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-origin.mdx +64 -0
  189. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-position.mdx +171 -0
  190. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-repeat.mdx +127 -0
  191. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-size.mdx +100 -0
  192. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/block-size.mdx +190 -0
  193. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-collapse.mdx +181 -0
  194. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-color.mdx +316 -0
  195. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-radius.mdx +347 -0
  196. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-spacing.mdx +117 -0
  197. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-style.mdx +129 -0
  198. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-width.mdx +344 -0
  199. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-decoration-break.mdx +71 -0
  200. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-shadow.mdx +497 -0
  201. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-sizing.mdx +175 -0
  202. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-after.mdx +38 -0
  203. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-before.mdx +38 -0
  204. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-inside.mdx +34 -0
  205. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caption-side.mdx +190 -0
  206. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caret-color.mdx +66 -0
  207. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/clear.mdx +224 -0
  208. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color-scheme.mdx +81 -0
  209. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color.mdx +125 -0
  210. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/colors.mdx +927 -0
  211. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/columns.mdx +310 -0
  212. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/compatibility.mdx +193 -0
  213. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/content.mdx +129 -0
  214. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/cursor.mdx +104 -0
  215. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/dark-mode.mdx +191 -0
  216. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/detecting-classes-in-source-files.mdx +315 -0
  217. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/display.mdx +523 -0
  218. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/editor-setup.mdx +90 -0
  219. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/field-sizing.mdx +75 -0
  220. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/fill.mdx +100 -0
  221. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-blur.mdx +114 -0
  222. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-brightness.mdx +102 -0
  223. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-contrast.mdx +102 -0
  224. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-drop-shadow.mdx +230 -0
  225. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-grayscale.mdx +101 -0
  226. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-hue-rotate.mdx +171 -0
  227. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-invert.mdx +93 -0
  228. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-saturate.mdx +109 -0
  229. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-sepia.mdx +92 -0
  230. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter.mdx +113 -0
  231. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-basis.mdx +144 -0
  232. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-direction.mdx +130 -0
  233. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-grow.mdx +129 -0
  234. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-shrink.mdx +95 -0
  235. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-wrap.mdx +118 -0
  236. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex.mdx +164 -0
  237. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/float.mdx +197 -0
  238. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-family.mdx +119 -0
  239. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-feature-settings.mdx +52 -0
  240. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-size.mdx +184 -0
  241. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-smoothing.mdx +67 -0
  242. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-stretch.mdx +138 -0
  243. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-style.mdx +62 -0
  244. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-variant-numeric.mdx +228 -0
  245. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-weight.mdx +105 -0
  246. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/forced-color-adjust.mdx +152 -0
  247. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/functions-and-directives.mdx +322 -0
  248. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/gap.mdx +100 -0
  249. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-columns.mdx +43 -0
  250. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-flow.mdx +58 -0
  251. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-rows.mdx +43 -0
  252. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-column.mdx +124 -0
  253. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-row.mdx +115 -0
  254. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-columns.mdx +101 -0
  255. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-rows.mdx +108 -0
  256. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/height.mdx +260 -0
  257. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hover-focus-and-other-states.mdx +4935 -0
  258. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hyphens.mdx +112 -0
  259. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/inline-size.mdx +191 -0
  260. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/isolation.mdx +30 -0
  261. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-content.mdx +348 -0
  262. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-items.mdx +286 -0
  263. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-self.mdx +282 -0
  264. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/letter-spacing.mdx +100 -0
  265. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-clamp.mdx +110 -0
  266. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-height.mdx +147 -0
  267. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-image.mdx +80 -0
  268. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-position.mdx +67 -0
  269. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-type.mdx +86 -0
  270. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/margin.mdx +397 -0
  271. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-clip.mdx +66 -0
  272. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-composite.mdx +70 -0
  273. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-image.mdx +933 -0
  274. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-mode.mdx +114 -0
  275. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-origin.mdx +66 -0
  276. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-position.mdx +117 -0
  277. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-repeat.mdx +169 -0
  278. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-size.mdx +104 -0
  279. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-type.mdx +98 -0
  280. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-block-size.mdx +153 -0
  281. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-height.mdx +164 -0
  282. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-inline-size.mdx +185 -0
  283. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-width.mdx +214 -0
  284. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-block-size.mdx +146 -0
  285. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-height.mdx +150 -0
  286. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-inline-size.mdx +153 -0
  287. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-width.mdx +153 -0
  288. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mix-blend-mode.mdx +103 -0
  289. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-fit.mdx +147 -0
  290. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-position.mdx +182 -0
  291. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/opacity.mdx +84 -0
  292. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/order.mdx +94 -0
  293. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-color.mdx +130 -0
  294. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-offset.mdx +72 -0
  295. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-style.mdx +134 -0
  296. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-width.mdx +91 -0
  297. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow-wrap.mdx +130 -0
  298. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow.mdx +665 -0
  299. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overscroll-behavior.mdx +151 -0
  300. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/padding.mdx +232 -0
  301. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective-origin.mdx +127 -0
  302. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective.mdx +137 -0
  303. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-content.mdx +257 -0
  304. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-items.mdx +269 -0
  305. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-self.mdx +257 -0
  306. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/pointer-events.mdx +101 -0
  307. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/position.mdx +399 -0
  308. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/preflight.mdx +291 -0
  309. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/resize.mdx +110 -0
  310. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/responsive-design.mdx +666 -0
  311. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/rotate.mdx +291 -0
  312. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scale.mdx +360 -0
  313. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-behavior.mdx +39 -0
  314. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-margin.mdx +268 -0
  315. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-padding.mdx +255 -0
  316. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-align.mdx +281 -0
  317. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-stop.mdx +198 -0
  318. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-type.mdx +284 -0
  319. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/skew.mdx +352 -0
  320. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke-width.mdx +74 -0
  321. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke.mdx +103 -0
  322. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/styling-with-utility-classes.mdx +1020 -0
  323. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/table-layout.mdx +212 -0
  324. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-align.mdx +162 -0
  325. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-color.mdx +155 -0
  326. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-line.mdx +143 -0
  327. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-style.mdx +75 -0
  328. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-thickness.mdx +75 -0
  329. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-indent.mdx +74 -0
  330. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-overflow.mdx +103 -0
  331. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-shadow.mdx +177 -0
  332. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-transform.mdx +106 -0
  333. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-underline-offset.mdx +74 -0
  334. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-wrap.mdx +144 -0
  335. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/theme.mdx +1142 -0
  336. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/top-right-bottom-left.mdx +296 -0
  337. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/touch-action.mdx +95 -0
  338. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-origin.mdx +130 -0
  339. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-style.mdx +110 -0
  340. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform.mdx +51 -0
  341. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-behavior.mdx +76 -0
  342. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-delay.mdx +76 -0
  343. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-duration.mdx +82 -0
  344. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-property.mdx +137 -0
  345. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-timing-function.mdx +89 -0
  346. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/translate.mdx +487 -0
  347. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/upgrade-guide.mdx +910 -0
  348. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/user-select.mdx +114 -0
  349. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/vertical-align.mdx +194 -0
  350. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/visibility.mdx +287 -0
  351. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/white-space.mdx +211 -0
  352. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/width.mdx +264 -0
  353. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/will-change.mdx +47 -0
  354. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/word-break.mdx +94 -0
  355. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/z-index.mdx +104 -0
  356. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-catalog.md +251 -0
  357. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-index.tsx +237 -0
  358. package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-source.txt +6 -0
  359. package/extensions/enact-repo/skills/tailwind-4-docs/references/gotchas.md +18 -0
  360. package/extensions/enact-repo/skills/tailwind-4-docs/scripts/sync_tailwind_docs.py +183 -0
  361. package/extensions/enact-repo/skills/tdd/SKILL.md +49 -0
  362. package/extensions/enact-repo/skills/tdd/references/mocking.md +59 -0
  363. package/extensions/enact-repo/skills/tdd/references/tests.md +77 -0
  364. package/extensions/enact-repo/skills/teach/SKILL.md +88 -0
  365. package/extensions/enact-repo/skills/teach/references/GLOSSARY-FORMAT.md +35 -0
  366. package/extensions/enact-repo/skills/teach/references/LEARNING-RECORD-FORMAT.md +46 -0
  367. package/extensions/enact-repo/skills/teach/references/MISSION-FORMAT.md +31 -0
  368. package/extensions/enact-repo/skills/teach/references/PHILOSOPHY.md +65 -0
  369. package/extensions/enact-repo/skills/teach/references/RESOURCES-FORMAT.md +32 -0
  370. package/extensions/enact-repo/skills/testing/SKILL.md +54 -0
  371. package/extensions/enact-repo/skills/to-spec/SKILL.md +85 -0
  372. package/extensions/enact-repo/skills/to-tickets/SKILL.md +75 -0
  373. package/extensions/enact-repo/skills/to-tickets/references/TICKET-TEMPLATES.md +39 -0
  374. package/extensions/enact-repo/skills/triage/SKILL.md +99 -0
  375. package/extensions/enact-repo/skills/triage/references/AGENT-BRIEF.md +207 -0
  376. package/extensions/enact-repo/skills/triage/references/NEEDS-INFO-TEMPLATE.md +17 -0
  377. package/extensions/enact-repo/skills/triage/references/OUT-OF-SCOPE.md +105 -0
  378. package/extensions/enact-repo/skills/ui-ux-pro-max/SKILL.md +32 -0
  379. package/extensions/enact-repo/skills/ui-ux-pro-max/references/Workflow.md +207 -0
  380. package/extensions/enact-repo/skills/ui-ux-pro-max/references/workflow-reference.md +175 -0
  381. package/extensions/enact-repo/skills/wayfinder/SKILL.md +100 -0
  382. package/extensions/enact-repo/skills/wayfinder/references/TEMPLATES.md +35 -0
  383. package/extensions/enact-repo/skills/wayfinder/references/TICKET-TYPES.md +8 -0
  384. package/extensions/enact-repo/skills/writing-great-skills/SKILL.md +93 -0
  385. package/extensions/enact-repo/skills/writing-great-skills/references/GLOSSARY.md +201 -0
  386. package/package.json +22 -17
  387. package/scripts/enact-extensions.mjs +411 -1006
  388. package/scripts/lib/allowed-plugins.mjs +52 -0
  389. package/scripts/lib/build-index.mjs +1 -3
  390. package/scripts/lib/resolve-bundle.mjs +1 -3
  391. package/scripts/lib/run-repo-doctor.mjs +604 -0
  392. package/scripts/lib/run-repo-install.mjs +1651 -0
  393. package/scripts/lib/run-sync.mjs +4 -10
  394. package/scripts/lib/run-validate.mjs +23 -39
  395. package/scripts/lib/skill-validator.mjs +1096 -0
  396. package/spec/enact.json +21 -3
  397. package/spec/enact.md +13 -12
  398. package/spec/kimi.json +100 -0
  399. package/spec/opencode.json +64 -0
  400. package/dist/install.d.ts +0 -235
  401. package/dist/install.d.ts.map +0 -1
  402. package/dist/install.js +0 -697
  403. package/dist/install.js.map +0 -1
  404. package/dist/internal/claude.d.ts +0 -65
  405. package/dist/internal/claude.d.ts.map +0 -1
  406. package/dist/internal/claude.js +0 -200
  407. package/dist/internal/claude.js.map +0 -1
  408. package/dist/internal/codex.d.ts +0 -43
  409. package/dist/internal/codex.d.ts.map +0 -1
  410. package/dist/internal/codex.js +0 -211
  411. package/dist/internal/codex.js.map +0 -1
  412. package/dist/internal/cursor.d.ts +0 -2
  413. package/dist/internal/cursor.d.ts.map +0 -1
  414. package/dist/internal/cursor.js +0 -6
  415. package/dist/internal/cursor.js.map +0 -1
  416. package/dist/principles.d.ts +0 -28
  417. package/dist/principles.d.ts.map +0 -1
  418. package/dist/principles.js +0 -159
  419. package/dist/principles.js.map +0 -1
  420. package/dist/provision.d.ts +0 -30
  421. package/dist/provision.d.ts.map +0 -1
  422. package/dist/provision.js +0 -202
  423. package/dist/provision.js.map +0 -1
  424. package/extensions/dev-state/.agents/plugin.json +0 -36
  425. package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +0 -194
  426. package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +0 -4
  427. package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +0 -130
  428. package/extensions/enact-context/.agents/plugin.json +0 -41
  429. package/extensions/enact-context/.mcp.json +0 -8
  430. package/extensions/enact-context/README.md +0 -25
  431. package/extensions/enact-context/assets/icon.png +0 -0
  432. package/extensions/enact-context/assets/logo.png +0 -0
  433. package/extensions/enact-context/hooks/hooks.json +0 -115
  434. package/extensions/enact-context/skills/enact-context/SKILL.md +0 -151
  435. package/extensions/enact-context/skills/enact-context/scripts/install.sh +0 -69
  436. package/extensions/enact-core/.agents/plugin.json +0 -40
  437. package/extensions/enact-core/OPERATING-PRINCIPLES.md +0 -7
  438. package/extensions/enact-core/hooks/hooks.json +0 -26
  439. package/extensions/enact-evolve/.agents/plugin.json +0 -47
  440. package/extensions/enact-evolve/agents/evolve-session-analyst.toml +0 -37
  441. package/extensions/enact-evolve/assets/icon.png +0 -0
  442. package/extensions/enact-evolve/assets/logo.png +0 -0
  443. package/extensions/enact-evolve/skills/mined-investigate-loop/SKILL.md +0 -68
  444. package/extensions/enact-evolve/skills/session-analysis/SKILL.md +0 -98
  445. package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +0 -343
  446. package/extensions/enact-factory/.agents/plugin.json +0 -49
  447. package/extensions/enact-factory/.mcp.json +0 -8
  448. package/extensions/enact-factory/agents/architect.toml +0 -34
  449. package/extensions/enact-factory/agents/code-reviewer.toml +0 -33
  450. package/extensions/enact-factory/agents/critic.toml +0 -39
  451. package/extensions/enact-factory/agents/executor.toml +0 -26
  452. package/extensions/enact-factory/agents/explore.toml +0 -25
  453. package/extensions/enact-factory/agents/planner.toml +0 -26
  454. package/extensions/enact-factory/agents/verifier.toml +0 -33
  455. package/extensions/enact-factory/assets/icon.png +0 -0
  456. package/extensions/enact-factory/assets/logo.png +0 -0
  457. package/extensions/enact-factory/skills/advisor/SKILL.md +0 -82
  458. package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +0 -57
  459. package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +0 -353
  460. package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +0 -309
  461. package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +0 -60
  462. package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +0 -87
  463. package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +0 -132
  464. package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +0 -53
  465. package/extensions/enact-factory/skills/cmux-leader/SKILL.md +0 -74
  466. package/extensions/enact-factory/skills/cmux-send/SKILL.md +0 -50
  467. package/extensions/enact-factory/skills/committee/SKILL.md +0 -80
  468. package/extensions/enact-factory/skills/deep-interview/SKILL.md +0 -68
  469. package/extensions/enact-factory/skills/deslop-handover/SKILL.md +0 -97
  470. package/extensions/enact-factory/skills/deslop-handover/deslop.py +0 -181
  471. package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
  472. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
  473. package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
  474. package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
  475. package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
  476. package/extensions/enact-factory/skills/paseo-dispatch/SKILL.md +0 -141
  477. package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
  478. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
  479. package/extensions/enact-factory/skills/research/SKILL.md +0 -83
  480. package/extensions/enact-factory/skills/review/SKILL.md +0 -67
  481. package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
  482. package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
  483. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
  484. package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
  485. package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
  486. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
  487. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
  488. package/extensions/enact-wiki/.agents/plugin.json +0 -43
  489. package/extensions/enact-wiki/.mcp.json +0 -15
  490. package/extensions/enact-wiki/README.md +0 -44
  491. package/extensions/enact-wiki/assets/icon.png +0 -0
  492. package/extensions/enact-wiki/assets/logo.png +0 -0
  493. package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
  494. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
  495. package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
  496. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
  497. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
  498. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
  499. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
  500. package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
  501. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
  502. package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
  503. package/extensions/net-revenue-management/.agents/plugin.json +0 -40
  504. package/extensions/net-revenue-management/.mcp.json +0 -9
  505. package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
  506. package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
  507. package/extensions/plugin-dev/.agents/plugin.json +0 -41
  508. package/extensions/plugin-dev/agents/agent-creator.md +0 -199
  509. package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
  510. package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
  511. package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
  512. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
  513. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
  514. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
  515. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
  516. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
  517. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
  518. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
  519. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
  520. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
  521. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
  522. package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
  523. package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
  524. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
  525. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
  526. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
  527. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
  528. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
  529. package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
  530. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
  531. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
  532. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
  533. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
  534. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
  535. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
  536. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
  537. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
  538. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
  539. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
  540. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
  541. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
  542. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
  543. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
  544. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
  545. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
  546. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
  547. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
  548. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
  549. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
  550. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
  551. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
  552. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
  553. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
  554. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
  555. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
  556. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
  557. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
  558. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
  559. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
  560. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
  561. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
  562. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
  563. package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
  564. package/scripts/check-hooks.mjs +0 -174
  565. package/scripts/check-principles.mjs +0 -116
  566. package/scripts/hooks/session-start-drift-check.mjs +0 -49
  567. package/scripts/install.sh +0 -70
  568. package/scripts/lib/auto-update.mjs +0 -88
  569. package/scripts/lib/bundle-hash.mjs +0 -137
  570. package/scripts/lib/hooks.mjs +0 -585
  571. package/scripts/lib/ledger.mjs +0 -163
  572. package/scripts/lib/migrate-artifacts.mjs +0 -144
  573. package/scripts/lib/outdated.mjs +0 -144
  574. package/scripts/lib/postinstall-offer.mjs +0 -83
  575. package/scripts/lib/principles.mjs +0 -109
  576. package/scripts/lib/provision-mcp.mjs +0 -16
  577. package/scripts/lib/resolve-plugin-root.mjs +0 -9
  578. package/scripts/lib/run-install.mjs +0 -507
  579. package/scripts/lib/run-prune.mjs +0 -94
  580. package/scripts/lib/run-uninstall.mjs +0 -244
  581. package/scripts/lib/run-update.mjs +0 -165
  582. package/scripts/lib/serve.mjs +0 -472
  583. package/scripts/lib/ups-router.mjs +0 -392
  584. package/scripts/postinstall.mjs +0 -101
  585. package/scripts/setup-enact-context.sh +0 -28
  586. package/scripts/version-bump.sh +0 -484
  587. package/web/assets/README.md +0 -111
  588. package/web/assets/logo-full.png +0 -0
  589. package/web/assets/logo-slim.png +0 -0
  590. package/web/assets/tokens/base.css +0 -45
  591. package/web/assets/tokens/colors.css +0 -248
  592. package/web/assets/tokens/effects.css +0 -24
  593. package/web/assets/tokens/fonts.css +0 -8
  594. package/web/assets/tokens/index.css +0 -18
  595. package/web/assets/tokens/spacing.css +0 -50
  596. package/web/index.html +0 -1188
@@ -0,0 +1,195 @@
1
+ /**
2
+ * `[extensions]` in the repo-root `enact-config.toml`: the managed-repo marker
3
+ * AND the declared set of installed extensions.
4
+ *
5
+ * HARDCUT replacement for the old `[skills]` marker. Skills belong to an
6
+ * extension, so a root `skills` table modelled the relationship backwards — an
7
+ * extension owns its skills, never the reverse.
8
+ *
9
+ * The file is SHARED: `version`/`hooks`/`rules`/`repo` belong to enact-hook and
10
+ * `controls` to enact-repo-controls. Parse-and-reserialise would destroy their
11
+ * tables and every comment in the document, so every function here is text
12
+ * surgery on our own table only. Reading is the one place TOML is parsed, and
13
+ * only to answer "which extensions are declared".
14
+ *
15
+ * Shape:
16
+ *
17
+ * version = 1
18
+ *
19
+ * [extensions]
20
+ * version = 1
21
+ *
22
+ * [extensions.enact-repo]
23
+ * version = "0.1.2"
24
+ */
25
+ /** The marker table itself, written once when the file gains `[extensions]`. */
26
+ export const EXTENSIONS_BLOCK = "[extensions]\nversion = 1\n";
27
+ /**
28
+ * The text declaring ONE extension: a bare table, no keys.
29
+ *
30
+ * It carried `version = "<bundle version>"` until it was measured to be
31
+ * write-only — `declaredExtensionsFrom` below and doctor's equivalent both map
32
+ * the entries to their KEY and drop the value. Installed state belongs in
33
+ * `.agents/<name>.lock.json`, which is install output; a version sitting in a
34
+ * hand-authored declaration reads as a pin, and install has never honoured one.
35
+ */
36
+ export function extensionBlock(name) {
37
+ return `[extensions.${name}]\n`;
38
+ }
39
+ /**
40
+ * Declared extension names, from the `[extensions.<name>]` sub-tables.
41
+ *
42
+ * `parsed` is the already-parsed document — parsing belongs to the caller, which
43
+ * owns the error message naming the file and the action being attempted.
44
+ * `[extensions].version` is the marker's own schema version, not an extension.
45
+ */
46
+ export function declaredExtensionsFrom(parsed) {
47
+ const ext = parsed?.extensions;
48
+ if (!ext || typeof ext !== "object")
49
+ return [];
50
+ return Object.entries(ext)
51
+ .filter(([, v]) => v && typeof v === "object" && !Array.isArray(v))
52
+ .map(([k]) => k);
53
+ }
54
+ /** Preserve a trailing newline that a slice-and-rejoin would otherwise eat. */
55
+ function keepTrailingNewline(original, out) {
56
+ return original.endsWith("\n") && !out.endsWith("\n") ? `${out}\n` : out;
57
+ }
58
+ /** Index of the line after a table's last line, given its header index. */
59
+ function tableEnd(lines, headerIndex, isOwnSubTable) {
60
+ for (let i = headerIndex + 1; i < lines.length; i++) {
61
+ const t = lines[i].trim();
62
+ if (!t.startsWith("["))
63
+ continue;
64
+ if (isOwnSubTable?.(t))
65
+ continue;
66
+ return i;
67
+ }
68
+ return lines.length;
69
+ }
70
+ /**
71
+ * Return `configText` with `[extensions.<name>]` declared, or `null` when there
72
+ * is nothing to do — no `[extensions]` table to write into, or the extension is
73
+ * already declared.
74
+ *
75
+ * INSERT-ONCE, deliberately. This upserted once, replacing the table's whole
76
+ * span on every install; the span ran to the next header, so a human's own keys
77
+ * and comments inside the declaration were silently destroyed by the next run.
78
+ * `enact-config.toml` is the hand-authored statement of what the repo should
79
+ * have — install reads it and reconciles the repo to it, and writes to it only
80
+ * to record an extension that was not declared before. After that first write a
81
+ * version bump leaves the file byte-identical, so the only diffs a human is
82
+ * asked to review are ones that actually changed the repo's intent.
83
+ */
84
+ export function declareExtension(configText, name) {
85
+ const lines = configText.split("\n");
86
+ if (!lines.some((l) => l.trim() === "[extensions]"))
87
+ return null;
88
+ if (lines.some((l) => l.trim() === `[extensions.${name}]`))
89
+ return null;
90
+ const tail = configText.endsWith("\n") ? "" : "\n";
91
+ return `${configText}${tail}\n${extensionBlock(name)}`;
92
+ }
93
+ /** Return `configText` with `[extensions.<name>]` removed entirely. */
94
+ export function removeExtensionBlock(configText, name) {
95
+ const lines = configText.split("\n");
96
+ const at = lines.findIndex((l) => l.trim() === `[extensions.${name}]`);
97
+ if (at < 0)
98
+ return configText;
99
+ // Absorb one blank separator line before the table, so removing it does not
100
+ // leave a widening gap behind.
101
+ const from = at > 0 && lines[at - 1].trim() === "" ? at - 1 : at;
102
+ const out = [...lines.slice(0, from), ...lines.slice(tableEnd(lines, at))].join("\n");
103
+ return keepTrailingNewline(configText, out);
104
+ }
105
+ /**
106
+ * Cut our whole `[extensions]` table — marker and every `[extensions.<name>]`
107
+ * sub-table — out of `text`, for `--purge`.
108
+ *
109
+ * Identified by TABLE, not by the exact bytes install appended: `[extensions]`
110
+ * is mutable by design now (it carries the declared set), so an edited value
111
+ * inside our own table is still our table. Halting at the first `[` would stop
112
+ * at our own first sub-table and orphan the rest.
113
+ *
114
+ * Falls back to the byte-exact `appended` span for a block that never grew, and
115
+ * returns null when neither matches — the caller refuses rather than guessing.
116
+ */
117
+ export function cutExtensionsBlock(text, appended) {
118
+ const lines = text.split("\n");
119
+ const start = lines.findIndex((l) => l.trim() === "[extensions]");
120
+ if (start >= 0) {
121
+ let end = tableEnd(lines, start, (t) => t === "[extensions]" || t.startsWith("[extensions."));
122
+ // Trailing blank lines belong to the block being cut, not to what follows.
123
+ while (end > start + 1 && lines[end - 1].trim() === "")
124
+ end -= 1;
125
+ const from = start > 0 && lines[start - 1].trim() === "" ? start - 1 : start;
126
+ const kept = [...lines.slice(0, from), ...lines.slice(end)].join("\n");
127
+ return keepTrailingNewline(text, kept);
128
+ }
129
+ const candidates = [appended, EXTENSIONS_BLOCK].filter((c) => typeof c === "string" && c.length > 0);
130
+ for (const span of candidates) {
131
+ let idx = text.lastIndexOf(span);
132
+ while (idx >= 0) {
133
+ const atLineStart = span.startsWith("\n") || idx === 0 || text[idx - 1] === "\n";
134
+ const rest = text.slice(idx + span.length);
135
+ const nextLine = rest
136
+ .split("\n")
137
+ .map((l) => l.trim())
138
+ .find((l) => l !== "" && !l.startsWith("#"));
139
+ if (atLineStart && (nextLine === undefined || nextLine.startsWith("[")))
140
+ return text.slice(0, idx) + rest;
141
+ idx = idx === 0 ? -1 : text.lastIndexOf(span, idx - 1);
142
+ }
143
+ }
144
+ return null;
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // Legacy `[skills]` — the marker `[extensions]` HARDCUT-replaced.
148
+ //
149
+ // Install appended the new table but nothing ever removed the old one, so a
150
+ // repo installed before the cut and reinstalled after it carries BOTH: two root
151
+ // tables each claiming to be the marker. That is a dual-read surface by
152
+ // accident, which the repo's HARDCUT rule exists to prevent.
153
+ //
154
+ // The cut is bounded by what we ever WROTE. `SKILLS_BLOCK` was
155
+ // `"[skills]\nversion = 1\n"` and nothing else -- no per-skill keys, no
156
+ // sub-tables. Anything beyond that in the table is somebody's hand-authored
157
+ // content, and removing it on their behalf would be a silent drop. So the
158
+ // recogniser is exact and the caller is expected to surface a refusal.
159
+ // ---------------------------------------------------------------------------
160
+ /** Everything install ever wrote inside `[skills]`. */
161
+ const LEGACY_SKILLS_BODY = "version = 1";
162
+ /**
163
+ * `configText` with the root `[skills]` table removed, or `null` when there is
164
+ * none (so a caller can tell "cut" from "nothing to cut" without diffing).
165
+ *
166
+ * Throws when the table is not the one we wrote — see the note above.
167
+ *
168
+ * The span ends at the next table header, which means the blank line that
169
+ * separated `[skills]` from what follows is removed WITH it while the blank
170
+ * line that preceded it stays. That keeps exactly one separator either side of
171
+ * the cut instead of collapsing or widening the gap.
172
+ */
173
+ export function cutLegacySkillsBlock(configText) {
174
+ const lines = configText.split("\n");
175
+ const start = lines.findIndex((l) => l.trim() === "[skills]");
176
+ const subTable = lines.find((l) => l.trim().startsWith("[skills."));
177
+ if (start < 0 && subTable === undefined)
178
+ return null;
179
+ const refuse = (what) => {
180
+ throw new Error(`Refusing to cut ${what} from enact-config.toml: install only ever wrote ` +
181
+ `"[skills]\\nversion = 1". Anything else there is yours, not ours. Move or ` +
182
+ `remove it by hand, then re-run install.`);
183
+ };
184
+ if (subTable !== undefined)
185
+ refuse(subTable.trim());
186
+ const end = tableEnd(lines, start);
187
+ const body = lines
188
+ .slice(start + 1, end)
189
+ .map((l) => l.trim())
190
+ .filter((l) => l !== "");
191
+ if (body.length !== 1 || body[0] !== LEGACY_SKILLS_BODY)
192
+ refuse("[skills]");
193
+ return keepTrailingNewline(configText, [...lines.slice(0, start), ...lines.slice(end)].join("\n"));
194
+ }
195
+ //# sourceMappingURL=extensions-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions-table.js","sourceRoot":"","sources":["../../src/internal/extensions-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The single funnel for every filesystem MUTATION install and uninstall
3
+ * perform.
4
+ *
5
+ * `--dry-run` is not a separate code path: it runs the identical preflight and
6
+ * planning, and only the writes here are skipped. That is what makes a dry-run
7
+ * trustworthy — anything it fails to predict is a bug in this file, not a
8
+ * divergence between two implementations of the same logic. Every operation
9
+ * also records `{file, action, reason}`, so a dry-run can print exactly what a
10
+ * real run would do, and why.
11
+ *
12
+ * Reads are unaffected and deliberately not routed through here.
13
+ */
14
+ export interface FileAction {
15
+ file: string;
16
+ action: "create" | "update" | "remove" | "remove-dir" | "skip";
17
+ reason: string;
18
+ }
19
+ export interface FileOps {
20
+ /** Write `content`; false when the file already has exactly those bytes. */
21
+ write(rel: string, content: string | Buffer, reason?: string): boolean;
22
+ /** Remove a file; false when it is not there. */
23
+ remove(rel: string, reason?: string): boolean;
24
+ /** A path deliberately LEFT in place, recorded so dry-run can report it. */
25
+ skip(rel: string, reason: string): boolean;
26
+ /** Remove a directory and everything under it. */
27
+ removeDir(rel: string, reason?: string): boolean;
28
+ /** Remove a directory only when it is empty. */
29
+ rmdirIfEmpty(rel: string): void;
30
+ /** Create or repoint a managed symlink. */
31
+ symlink(rel: string, target: string, reason?: string): boolean;
32
+ /** Remove a managed symlink, dangling or not. */
33
+ removeSymlink(rel: string, reason?: string): boolean;
34
+ }
35
+ export declare function makeFileOps(repo: string, dryRun: boolean, actions: FileAction[]): FileOps;
36
+ //# sourceMappingURL=file-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ops.d.ts","sourceRoot":"","sources":["../../src/internal/file-ops.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,4EAA4E;IAC5E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,iDAAiD;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9C,4EAA4E;IAC5E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,kDAAkD;IAClD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,gDAAgD;IAChD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2CAA2C;IAC3C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,iDAAiD;IACjD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtD;AAMD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CA+EzF"}
@@ -0,0 +1,89 @@
1
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmdirSync, rmSync, symlinkSync, writeFileSync, } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ const abs = (repo, rel) => join(repo, ...rel.split("/"));
4
+ const DEFAULT_REASON = "managed by enact-repo install";
5
+ export function makeFileOps(repo, dryRun, actions) {
6
+ return {
7
+ write(rel, content, reason) {
8
+ const path = abs(repo, rel);
9
+ const buf = Buffer.isBuffer(content) ? content : Buffer.from(content);
10
+ const existed = existsSync(path);
11
+ // Byte-identical is a no-op, so a re-install reports nothing and stays
12
+ // idempotent rather than churning mtimes and dry-run output.
13
+ if (existed && readFileSync(path).equals(buf))
14
+ return false;
15
+ actions.push({ file: rel, action: existed ? "update" : "create", reason: reason ?? DEFAULT_REASON });
16
+ if (!dryRun) {
17
+ mkdirSync(dirname(path), { recursive: true });
18
+ writeFileSync(path, buf);
19
+ }
20
+ return true;
21
+ },
22
+ remove(rel, reason) {
23
+ const path = abs(repo, rel);
24
+ if (!existsSync(path))
25
+ return false;
26
+ actions.push({ file: rel, action: "remove", reason: reason ?? DEFAULT_REASON });
27
+ if (!dryRun)
28
+ rmSync(path, { force: true });
29
+ return true;
30
+ },
31
+ // Recorded rather than silently passed over: a retained file that appears
32
+ // nowhere in the output looks like the uninstall simply missed it.
33
+ skip(rel, reason) {
34
+ actions.push({ file: rel, action: "skip", reason });
35
+ return false;
36
+ },
37
+ removeDir(rel, reason) {
38
+ const path = abs(repo, rel);
39
+ if (!existsSync(path))
40
+ return false;
41
+ actions.push({ file: rel, action: "remove-dir", reason: reason ?? "directory" });
42
+ if (!dryRun)
43
+ rmSync(path, { recursive: true, force: true });
44
+ return true;
45
+ },
46
+ rmdirIfEmpty(rel) {
47
+ const path = abs(repo, rel);
48
+ if (existsSync(path) && readdirSync(path).length === 0) {
49
+ actions.push({ file: rel, action: "remove-dir", reason: "empty directory" });
50
+ if (!dryRun)
51
+ rmdirSync(path);
52
+ }
53
+ },
54
+ // Symlinks need lstat, not existsSync: existsSync FOLLOWS a symlink, so it
55
+ // reports false for a dangling one -- exactly the state a link can be in
56
+ // mid-uninstall, once its target is already gone.
57
+ symlink(rel, target, reason) {
58
+ const path = abs(repo, rel);
59
+ const st = lstatSync(path, { throwIfNoEntry: false });
60
+ if (st?.isSymbolicLink() && readlinkSync(path) === target)
61
+ return false;
62
+ actions.push({
63
+ file: rel,
64
+ action: st ? "update" : "create",
65
+ reason: reason ?? (st ? "replacing stale entry with managed symlink" : "managed symlink"),
66
+ });
67
+ if (!dryRun) {
68
+ // Whatever is there (a stale real directory from a pre-symlink install,
69
+ // a wrong-target link, ...) sits inside a path this installer
70
+ // exclusively generates -- safe to replace outright.
71
+ if (st)
72
+ rmSync(path, { recursive: true, force: true });
73
+ mkdirSync(dirname(path), { recursive: true });
74
+ symlinkSync(target, path);
75
+ }
76
+ return true;
77
+ },
78
+ removeSymlink(rel, reason) {
79
+ const path = abs(repo, rel);
80
+ if (!lstatSync(path, { throwIfNoEntry: false }))
81
+ return false;
82
+ actions.push({ file: rel, action: "remove", reason: reason ?? "managed symlink" });
83
+ if (!dryRun)
84
+ rmSync(path, { recursive: true, force: true });
85
+ return true;
86
+ },
87
+ };
88
+ }
89
+ //# sourceMappingURL=file-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ops.js","sourceRoot":"","sources":["../../src/internal/file-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Append `--host=<host>` to a hook command string, but ONLY when the
3
+ * command's executable (its first whitespace-delimited token) is EXACTLY
4
+ * `enact-hook`. Commands belonging to any other tool or bundle are returned
5
+ * completely unchanged, so a shared hooks.json fixture containing a mix of
6
+ * `enact-hook` and non-`enact-hook` commands only gets the flag on the
7
+ * `enact-hook` ones.
8
+ *
9
+ * Owner decision (Tarun, 2026-09-14): the hook runtime is a single global
10
+ * binary `enact-hook` (built separately in enact-vps), with CLI contract:
11
+ * enact-hook <kind> [subcommand] --host=<claude|codex|cursor|kimi|opencode>
12
+ * `--host` tells the runtime which host's output format to render. It is
13
+ * appended only at PROJECTION time (per-platform derived hook output) — the
14
+ * canonical `extensions/enact-repo/hooks/hooks.json` source never carries it.
15
+ */
16
+ export declare function withHostFlag(command: string, host: string): string;
17
+ interface CanonicalHookCommand {
18
+ type?: string;
19
+ command?: string;
20
+ [key: string]: unknown;
21
+ }
22
+ interface CanonicalHookEntry {
23
+ matcher?: string;
24
+ hooks?: CanonicalHookCommand[];
25
+ [key: string]: unknown;
26
+ }
27
+ interface CanonicalHooksDoc {
28
+ hooks?: Record<string, CanonicalHookEntry[]>;
29
+ [key: string]: unknown;
30
+ }
31
+ /**
32
+ * Return a new canonical hooks.json document with `--host=<host>` appended
33
+ * to every `enact-hook`-owned command. Non-`enact-hook` commands and every
34
+ * other field (matcher, statusMessage, timeout, type, ...) pass through
35
+ * unchanged. Does not mutate `doc`.
36
+ */
37
+ export declare function applyHostFlagToHooksDoc(doc: CanonicalHooksDoc, host: string): CanonicalHooksDoc;
38
+ /**
39
+ * Return a new canonical hooks.json document with every command's `timeout`
40
+ * clamped down to `host`'s documented maximum for that event (see
41
+ * {@link HOST_HOOK_TIMEOUT_MAX_SECONDS}). Keeps the canonical source's
42
+ * declared intent untouched for any event/host with no documented limit
43
+ * (including every event for a host absent from the table). Does not
44
+ * mutate `doc`.
45
+ */
46
+ export declare function clampHookTimeoutsForHost(doc: CanonicalHooksDoc, host: string): CanonicalHooksDoc;
47
+ /**
48
+ * Read a canonical `hooks/hooks.json` from `sourcePath`, apply
49
+ * {@link applyHostFlagToHooksDoc} for `host`, and write the result (still
50
+ * the nested canonical schema — Claude and Codex read it as-is) to
51
+ * `targetPath`. Returns true if a file was written, false on a missing or
52
+ * unparsable source file.
53
+ */
54
+ export declare function writeHostFlaggedHooksFile(sourcePath: string, targetPath: string, host: string): boolean;
55
+ export {};
56
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/internal/hooks.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlE;AAaD,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAkB/F;AA8BD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAqBhG;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAWvG"}
@@ -0,0 +1,128 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Append `--host=<host>` to a hook command string, but ONLY when the
5
+ * command's executable (its first whitespace-delimited token) is EXACTLY
6
+ * `enact-hook`. Commands belonging to any other tool or bundle are returned
7
+ * completely unchanged, so a shared hooks.json fixture containing a mix of
8
+ * `enact-hook` and non-`enact-hook` commands only gets the flag on the
9
+ * `enact-hook` ones.
10
+ *
11
+ * Owner decision (Tarun, 2026-09-14): the hook runtime is a single global
12
+ * binary `enact-hook` (built separately in enact-vps), with CLI contract:
13
+ * enact-hook <kind> [subcommand] --host=<claude|codex|cursor|kimi|opencode>
14
+ * `--host` tells the runtime which host's output format to render. It is
15
+ * appended only at PROJECTION time (per-platform derived hook output) — the
16
+ * canonical `extensions/enact-repo/hooks/hooks.json` source never carries it.
17
+ */
18
+ export function withHostFlag(command, host) {
19
+ const firstToken = command.trimStart().split(/\s+/, 1)[0];
20
+ if (firstToken !== "enact-hook")
21
+ return command;
22
+ return `${command} --host=${host}`;
23
+ }
24
+ /**
25
+ * Return a new canonical hooks.json document with `--host=<host>` appended
26
+ * to every `enact-hook`-owned command. Non-`enact-hook` commands and every
27
+ * other field (matcher, statusMessage, timeout, type, ...) pass through
28
+ * unchanged. Does not mutate `doc`.
29
+ */
30
+ export function applyHostFlagToHooksDoc(doc, host) {
31
+ const hooks = doc && typeof doc.hooks === "object" && doc.hooks && !Array.isArray(doc.hooks) ? doc.hooks : undefined;
32
+ if (!hooks)
33
+ return doc;
34
+ const out = {};
35
+ for (const [event, entries] of Object.entries(hooks)) {
36
+ if (!Array.isArray(entries))
37
+ continue;
38
+ out[event] = entries.map((entry) => {
39
+ const inner = Array.isArray(entry?.hooks) ? entry.hooks : undefined;
40
+ if (!inner)
41
+ return entry;
42
+ return {
43
+ ...entry,
44
+ hooks: inner.map((h) => h && typeof h.command === "string" ? { ...h, command: withHostFlag(h.command, host) } : h),
45
+ };
46
+ });
47
+ }
48
+ return { ...doc, hooks: out };
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Per-host documented hook-timeout maximums (projection-time clamp).
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Per-host documented hook-timeout maximums, in SECONDS (the canonical
55
+ * schema's own unit), keyed by host then canonical event name. A command's
56
+ * `timeout` exceeding the host's max for that event is clamped DOWN to the
57
+ * max; a `timeout` already within the limit (or an event/host with no
58
+ * documented limit) is left untouched.
59
+ *
60
+ * Codex (source: https://developers.openai.com/codex/hooks, which redirects
61
+ * to https://learn.chatgpt.com/docs/hooks -- verified 2026-09-14, this
62
+ * session): most hook events default to 600s with no documented maximum.
63
+ * `SessionEnd` and `Interrupt` are the one documented exception: default 1s,
64
+ * MAXIMUM 3s. A configured value above 3s is silently clamped by Codex
65
+ * itself with an error-labelled warning rather than honored -- so shipping
66
+ * a canonical `SessionEnd` timeout above 3s in `.codex/hooks.json` is a real
67
+ * defect even though Codex itself degrades gracefully.
68
+ *
69
+ * No other host in this project (Claude Code, Cursor, Kimi, OpenCode) has a
70
+ * documented per-event hook-timeout maximum as of this verification, so no
71
+ * other host has an entry here.
72
+ */
73
+ const HOST_HOOK_TIMEOUT_MAX_SECONDS = {
74
+ codex: { SessionEnd: 3, Interrupt: 3 },
75
+ };
76
+ /**
77
+ * Return a new canonical hooks.json document with every command's `timeout`
78
+ * clamped down to `host`'s documented maximum for that event (see
79
+ * {@link HOST_HOOK_TIMEOUT_MAX_SECONDS}). Keeps the canonical source's
80
+ * declared intent untouched for any event/host with no documented limit
81
+ * (including every event for a host absent from the table). Does not
82
+ * mutate `doc`.
83
+ */
84
+ export function clampHookTimeoutsForHost(doc, host) {
85
+ const hooks = doc && typeof doc.hooks === "object" && doc.hooks && !Array.isArray(doc.hooks) ? doc.hooks : undefined;
86
+ const limits = HOST_HOOK_TIMEOUT_MAX_SECONDS[host];
87
+ if (!hooks || !limits)
88
+ return doc;
89
+ const out = {};
90
+ for (const [event, entries] of Object.entries(hooks)) {
91
+ const max = limits[event];
92
+ if (!Array.isArray(entries) || max === undefined) {
93
+ out[event] = entries;
94
+ continue;
95
+ }
96
+ out[event] = entries.map((entry) => {
97
+ const inner = Array.isArray(entry?.hooks) ? entry.hooks : undefined;
98
+ if (!inner)
99
+ return entry;
100
+ return {
101
+ ...entry,
102
+ hooks: inner.map((h) => (h && typeof h.timeout === "number" && h.timeout > max ? { ...h, timeout: max } : h)),
103
+ };
104
+ });
105
+ }
106
+ return { ...doc, hooks: out };
107
+ }
108
+ /**
109
+ * Read a canonical `hooks/hooks.json` from `sourcePath`, apply
110
+ * {@link applyHostFlagToHooksDoc} for `host`, and write the result (still
111
+ * the nested canonical schema — Claude and Codex read it as-is) to
112
+ * `targetPath`. Returns true if a file was written, false on a missing or
113
+ * unparsable source file.
114
+ */
115
+ export function writeHostFlaggedHooksFile(sourcePath, targetPath, host) {
116
+ let canonical;
117
+ try {
118
+ canonical = JSON.parse(readFileSync(sourcePath, "utf8"));
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ const projected = applyHostFlagToHooksDoc(canonical, host);
124
+ mkdirSync(join(targetPath, ".."), { recursive: true });
125
+ writeFileSync(targetPath, `${JSON.stringify(projected, null, 2)}\n`, "utf8");
126
+ return true;
127
+ }
128
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/internal/hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/internal/io.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvE,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,cAAc,GACvB,UAAU,CAMZ"}
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/internal/io.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,UAAU,CAMlH"}
@@ -1 +1 @@
1
- {"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/internal/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,QAAkB,EAClB,QAAwB;IAExB,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/internal/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,QAAkB,EAAE,QAAwB;IACpG,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Merge primitives for the repo-local installer: how our entries are located,
3
+ * recognised, and removed inside a JSON document a user also owns.
4
+ *
5
+ * Shared files (`.claude/settings.json`, `.cursor/mcp.json`, `.codex/hooks.json`
6
+ * …) are never rewritten wholesale — the installer adds, recognises and removes
7
+ * individual ENTRIES so a user's own keys survive untouched. These functions are
8
+ * the whole of that contract, and they are pure: no filesystem, no process
9
+ * state, fully exercised by the installer's tests.
10
+ */
11
+ /** A path from the document root, e.g. `["enabledPlugins", "x@y"]`. */
12
+ export type JsonPath = readonly (string | number)[];
13
+ export type JsonMergeEntry = {
14
+ type: "key";
15
+ path: JsonPath;
16
+ sha256: string;
17
+ } | {
18
+ type: "item";
19
+ path: JsonPath;
20
+ sha256: string;
21
+ };
22
+ export interface JsonMergeRecord {
23
+ entries: readonly JsonMergeEntry[];
24
+ /** Containers we created; pruned on removal once empty. */
25
+ containers?: readonly JsonPath[];
26
+ /** Top-level keys we added as framing; dropped once nothing else remains. */
27
+ scaffold?: readonly {
28
+ path: JsonPath;
29
+ }[];
30
+ }
31
+ type JsonObject = Record<string, unknown>;
32
+ /**
33
+ * Key-order-independent serialisation, so an entry's identity does not change
34
+ * when a host or a user rewrites a file and reorders its keys.
35
+ */
36
+ export declare function stableStringify(value: unknown): string;
37
+ /** Content hash of a JSON value; the identity of a recorded entry. */
38
+ export declare const valueHash: (value: unknown) => string;
39
+ /** Stable string form of a path, used to key displaced-original records. */
40
+ export declare const pathKey: (p: JsonPath) => string;
41
+ /** Value at `path`, or undefined if any segment is missing or not an object. */
42
+ export declare function getAt(doc: unknown, path: JsonPath): unknown;
43
+ /**
44
+ * Walk to `path`, creating missing containers, and record what was created so
45
+ * uninstall can prune exactly those. Throws rather than coercing when an
46
+ * existing value has the wrong shape — silently replacing a user's object with
47
+ * an array would lose their data.
48
+ */
49
+ export declare function ensureContainer(doc: JsonObject, path: JsonPath, kind: "object" | "array", created: JsonPath[]): unknown;
50
+ /** Is this recorded entry still present, with the content we recorded? */
51
+ export declare function entryPresent(doc: unknown, entry: JsonMergeEntry): boolean;
52
+ /**
53
+ * Remove recorded entries, prune containers we created once empty, and drop
54
+ * scaffold keys once nothing else remains. Returns the entries that were NOT
55
+ * found — the caller reports those rather than failing silently.
56
+ *
57
+ * `displaced` maps `pathKey(entry.path)` to the original value a `--force`
58
+ * takeover overwrote. When present, that original is RESTORED instead of the
59
+ * key being deleted, and consumed so it cannot be restored twice.
60
+ */
61
+ export declare function removeJsonEntries(doc: JsonObject, record: JsonMergeRecord, displaced?: Record<string, unknown>): JsonMergeEntry[];
62
+ export {};
63
+ //# sourceMappingURL=json-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-merge.d.ts","sourceRoot":"","sources":["../../src/internal/json-merge.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,uEAAuE;AACvE,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAM1C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAStD;AAED,sEAAsE;AACtE,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,MAAwC,CAAC;AAEpF,4EAA4E;AAC5E,eAAO,MAAM,OAAO,MAAO,QAAQ,KAAG,MAA2B,CAAC;AAElE,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAO3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,OAAO,EAAE,QAAQ,EAAE,GAClB,OAAO,CAkBT;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAOzE;AAOD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,eAAe,EACvB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACtC,cAAc,EAAE,CAmClB"}