@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.
- package/README.md +67 -108
- package/bundled-extensions.json +3 -0
- package/dist/create/claude.d.ts.map +1 -1
- package/dist/create/claude.js +1 -1
- package/dist/create/claude.js.map +1 -1
- package/dist/create/codex.d.ts.map +1 -1
- package/dist/create/codex.js +2 -3
- package/dist/create/codex.js.map +1 -1
- package/dist/create/cursor.d.ts.map +1 -1
- package/dist/create/cursor.js +3 -7
- package/dist/create/cursor.js.map +1 -1
- package/dist/create/enact.d.ts.map +1 -1
- package/dist/create/enact.js +2 -0
- package/dist/create/enact.js.map +1 -1
- package/dist/create/index.d.ts +4 -1
- package/dist/create/index.d.ts.map +1 -1
- package/dist/create/index.js +9 -3
- package/dist/create/index.js.map +1 -1
- package/dist/create/kimi.d.ts +16 -0
- package/dist/create/kimi.d.ts.map +1 -0
- package/dist/create/kimi.js +86 -0
- package/dist/create/kimi.js.map +1 -0
- package/dist/create/opencode.d.ts +129 -0
- package/dist/create/opencode.d.ts.map +1 -0
- package/dist/create/opencode.js +689 -0
- package/dist/create/opencode.js.map +1 -0
- package/dist/index.d.ts +14 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/internal/agents.d.ts +11 -1
- package/dist/internal/agents.d.ts.map +1 -1
- package/dist/internal/agents.js +120 -4
- package/dist/internal/agents.js.map +1 -1
- package/dist/internal/extensions-table.d.ts +87 -0
- package/dist/internal/extensions-table.d.ts.map +1 -0
- package/dist/internal/extensions-table.js +195 -0
- package/dist/internal/extensions-table.js.map +1 -0
- package/dist/internal/file-ops.d.ts +36 -0
- package/dist/internal/file-ops.d.ts.map +1 -0
- package/dist/internal/file-ops.js +89 -0
- package/dist/internal/file-ops.js.map +1 -0
- package/dist/internal/hooks.d.ts +56 -0
- package/dist/internal/hooks.d.ts.map +1 -0
- package/dist/internal/hooks.js +128 -0
- package/dist/internal/hooks.js.map +1 -0
- package/dist/internal/io.d.ts.map +1 -1
- package/dist/internal/io.js.map +1 -1
- package/dist/internal/json-merge.d.ts +63 -0
- package/dist/internal/json-merge.d.ts.map +1 -0
- package/dist/internal/json-merge.js +124 -0
- package/dist/internal/json-merge.js.map +1 -0
- package/dist/internal/lock-ownership.d.ts +41 -0
- package/dist/internal/lock-ownership.d.ts.map +1 -0
- package/dist/internal/lock-ownership.js +24 -0
- package/dist/internal/lock-ownership.js.map +1 -0
- package/dist/internal/pick.d.ts.map +1 -1
- package/dist/internal/pick.js.map +1 -1
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +82 -42
- package/dist/internal/platform.js.map +1 -1
- package/dist/internal/schema.d.ts.map +1 -1
- package/dist/internal/schema.js.map +1 -1
- package/dist/internal/toml-block.d.ts +59 -0
- package/dist/internal/toml-block.d.ts.map +1 -0
- package/dist/internal/toml-block.js +113 -0
- package/dist/internal/toml-block.js.map +1 -0
- package/dist/internal/types.d.ts +2 -1
- package/dist/internal/types.d.ts.map +1 -1
- package/dist/projection.d.ts +47 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +180 -0
- package/dist/projection.js.map +1 -0
- package/dist/validate/index.d.ts +10 -5
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +59 -10
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/kimi.d.ts +3 -0
- package/dist/validate/kimi.d.ts.map +1 -0
- package/dist/validate/kimi.js +11 -0
- package/dist/validate/kimi.js.map +1 -0
- package/dist/validate/opencode.d.ts +3 -0
- package/dist/validate/opencode.d.ts.map +1 -0
- package/dist/validate/opencode.js +11 -0
- package/dist/validate/opencode.js.map +1 -0
- package/dist/validate/run.d.ts +39 -0
- package/dist/validate/run.d.ts.map +1 -0
- package/dist/validate/run.js +60 -0
- package/dist/validate/run.js.map +1 -0
- package/extensions/enact-loop/.agents/plugin.json +12 -8
- package/extensions/enact-loop/scripts/validate.mjs +84 -2
- package/extensions/enact-loop/skills/enact-loop/SKILL.md +36 -466
- package/extensions/enact-loop/skills/enact-loop/references/loop-contract.md +114 -0
- package/extensions/enact-loop/skills/loop-budget/SKILL.md +43 -26
- package/extensions/enact-loop/skills/loop-intake/SKILL.md +44 -32
- package/extensions/enact-repo/.agents/plugin.json +55 -0
- package/extensions/enact-repo/.mcp.json +20 -0
- package/extensions/enact-repo/README.md +90 -0
- package/extensions/enact-repo/hooks/hooks.json +98 -0
- package/extensions/enact-repo/lean-ctx/config.toml +35 -0
- package/extensions/enact-repo/lean-ctx/layout.toml +5 -0
- package/extensions/enact-repo/skills/aca-sandboxes/SKILL.md +53 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/capabilities.md +52 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/install.md +87 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/prerequisites.md +52 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/quickstart.md +164 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/reference-advanced.md +251 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/reference.md +287 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/response-cues.md +71 -0
- package/extensions/enact-repo/skills/aca-sandboxes/references/scenarios.md +219 -0
- package/extensions/enact-repo/skills/aca-sandboxes/version.json +4 -0
- package/extensions/enact-repo/skills/backend-remove-deadcode/SKILL.md +96 -0
- package/extensions/enact-repo/skills/cmux-leader/SKILL.md +61 -0
- package/extensions/enact-repo/skills/cmux-send/SKILL.md +61 -0
- package/extensions/enact-repo/skills/code-review/SKILL.md +100 -0
- package/extensions/enact-repo/skills/codebase-design/SKILL.md +98 -0
- package/extensions/enact-repo/skills/codebase-design/references/DEEPENING.md +37 -0
- package/extensions/enact-repo/skills/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
- package/extensions/enact-repo/skills/codebase-design/references/TESTABILITY.md +29 -0
- package/extensions/enact-repo/skills/computer-use/SKILL.md +76 -0
- package/extensions/enact-repo/skills/debug-issue/SKILL.md +40 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/SKILL.md +100 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
- package/extensions/enact-repo/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/extensions/enact-repo/skills/domain-modeling/SKILL.md +86 -0
- package/extensions/enact-repo/skills/domain-modeling/references/ADR-FORMAT.md +47 -0
- package/extensions/enact-repo/skills/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
- package/extensions/enact-repo/skills/explore-codebase/SKILL.md +41 -0
- package/extensions/enact-repo/skills/frontend-design/LICENSE.txt +177 -0
- package/extensions/enact-repo/skills/frontend-design/SKILL.md +56 -0
- package/extensions/enact-repo/skills/grill-me/SKILL.md +20 -0
- package/extensions/enact-repo/skills/grill-with-docs/SKILL.md +20 -0
- package/extensions/enact-repo/skills/handoff/SKILL.md +28 -0
- package/extensions/enact-repo/skills/http-contract-migration/SKILL.md +74 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/compatibility-and-gates.md +26 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/hexagonal-boundary.md +16 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/publication-and-adoption.md +31 -0
- package/extensions/enact-repo/skills/http-contract-migration/references/wire-fidelity-and-dto.md +31 -0
- package/extensions/enact-repo/skills/implement/SKILL.md +28 -0
- package/extensions/enact-repo/skills/improve-codebase-architecture/SKILL.md +80 -0
- package/extensions/enact-repo/skills/improve-codebase-architecture/references/HTML-REPORT.md +123 -0
- package/extensions/enact-repo/skills/interaction-design/SKILL.md +30 -0
- package/extensions/enact-repo/skills/interaction-design/references/Workflow.md +146 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-gsap.md +219 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries-native.md +110 -0
- package/extensions/enact-repo/skills/interaction-design/references/animation-libraries.md +177 -0
- package/extensions/enact-repo/skills/interaction-design/references/interaction-patterns.md +166 -0
- package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns-advanced.md +285 -0
- package/extensions/enact-repo/skills/interaction-design/references/microinteraction-patterns.md +254 -0
- package/extensions/enact-repo/skills/interaction-design/references/scroll-animations-reveals.md +213 -0
- package/extensions/enact-repo/skills/interaction-design/references/scroll-animations.md +208 -0
- package/extensions/enact-repo/skills/lean-ctx/SKILL.md +81 -0
- package/extensions/enact-repo/skills/orca-cli/SKILL.md +88 -0
- package/extensions/enact-repo/skills/orchestration/SKILL.md +80 -0
- package/extensions/enact-repo/skills/prototype/SKILL.md +37 -0
- package/extensions/enact-repo/skills/prototype/references/LOGIC.md +79 -0
- package/extensions/enact-repo/skills/prototype/references/UI.md +112 -0
- package/extensions/enact-repo/skills/refactor-safely/SKILL.md +44 -0
- package/extensions/enact-repo/skills/remove-deadcode/SKILL.md +54 -0
- package/extensions/enact-repo/skills/research/SKILL.md +27 -0
- package/extensions/enact-repo/skills/resolving-merge-conflicts/SKILL.md +28 -0
- package/extensions/enact-repo/skills/review-changes/SKILL.md +45 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/SKILL.md +88 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/accent-color.mdx +149 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/adding-custom-styles.mdx +635 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-content.mdx +300 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-items.mdx +241 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/align-self.mdx +294 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/animation.mdx +286 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/appearance.mdx +180 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/aspect-ratio.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-blur.mdx +109 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-brightness.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-contrast.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-grayscale.mdx +99 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-hue-rotate.mdx +173 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-invert.mdx +99 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-opacity.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-saturate.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter-sepia.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backdrop-filter.mdx +113 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/backface-visibility.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-attachment.mdx +126 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-blend-mode.mdx +79 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-clip.mdx +85 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-color.mdx +176 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-image.mdx +349 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-origin.mdx +64 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-position.mdx +171 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-repeat.mdx +127 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/background-size.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/block-size.mdx +190 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-collapse.mdx +181 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-color.mdx +316 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-radius.mdx +347 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-spacing.mdx +117 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-style.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/border-width.mdx +344 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-decoration-break.mdx +71 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-shadow.mdx +497 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/box-sizing.mdx +175 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-after.mdx +38 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-before.mdx +38 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/break-inside.mdx +34 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caption-side.mdx +190 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/caret-color.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/clear.mdx +224 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color-scheme.mdx +81 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/color.mdx +125 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/colors.mdx +927 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/columns.mdx +310 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/compatibility.mdx +193 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/content.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/cursor.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/dark-mode.mdx +191 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/detecting-classes-in-source-files.mdx +315 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/display.mdx +523 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/editor-setup.mdx +90 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/field-sizing.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/fill.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-blur.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-brightness.mdx +102 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-contrast.mdx +102 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-drop-shadow.mdx +230 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-grayscale.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-hue-rotate.mdx +171 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-invert.mdx +93 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-saturate.mdx +109 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter-sepia.mdx +92 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/filter.mdx +113 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-basis.mdx +144 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-direction.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-grow.mdx +129 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-shrink.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex-wrap.mdx +118 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/flex.mdx +164 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/float.mdx +197 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-family.mdx +119 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-feature-settings.mdx +52 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-size.mdx +184 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-smoothing.mdx +67 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-stretch.mdx +138 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-style.mdx +62 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-variant-numeric.mdx +228 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/font-weight.mdx +105 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/forced-color-adjust.mdx +152 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/functions-and-directives.mdx +322 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/gap.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-columns.mdx +43 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-flow.mdx +58 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-auto-rows.mdx +43 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-column.mdx +124 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-row.mdx +115 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-columns.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/grid-template-rows.mdx +108 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/height.mdx +260 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hover-focus-and-other-states.mdx +4935 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/hyphens.mdx +112 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/inline-size.mdx +191 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/isolation.mdx +30 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-content.mdx +348 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-items.mdx +286 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/justify-self.mdx +282 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/letter-spacing.mdx +100 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-clamp.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/line-height.mdx +147 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-image.mdx +80 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-position.mdx +67 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/list-style-type.mdx +86 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/margin.mdx +397 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-clip.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-composite.mdx +70 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-image.mdx +933 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-mode.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-origin.mdx +66 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-position.mdx +117 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-repeat.mdx +169 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-size.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mask-type.mdx +98 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-block-size.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-height.mdx +164 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-inline-size.mdx +185 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/max-width.mdx +214 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-block-size.mdx +146 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-height.mdx +150 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-inline-size.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/min-width.mdx +153 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/mix-blend-mode.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-fit.mdx +147 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/object-position.mdx +182 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/opacity.mdx +84 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/order.mdx +94 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-color.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-offset.mdx +72 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-style.mdx +134 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/outline-width.mdx +91 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow-wrap.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overflow.mdx +665 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/overscroll-behavior.mdx +151 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/padding.mdx +232 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective-origin.mdx +127 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/perspective.mdx +137 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-content.mdx +257 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-items.mdx +269 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/place-self.mdx +257 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/pointer-events.mdx +101 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/position.mdx +399 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/preflight.mdx +291 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/resize.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/responsive-design.mdx +666 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/rotate.mdx +291 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scale.mdx +360 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-behavior.mdx +39 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-margin.mdx +268 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-padding.mdx +255 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-align.mdx +281 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-stop.mdx +198 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/scroll-snap-type.mdx +284 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/skew.mdx +352 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke-width.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/stroke.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/styling-with-utility-classes.mdx +1020 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/table-layout.mdx +212 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-align.mdx +162 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-color.mdx +155 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-line.mdx +143 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-style.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-decoration-thickness.mdx +75 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-indent.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-overflow.mdx +103 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-shadow.mdx +177 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-transform.mdx +106 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-underline-offset.mdx +74 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/text-wrap.mdx +144 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/theme.mdx +1142 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/top-right-bottom-left.mdx +296 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/touch-action.mdx +95 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-origin.mdx +130 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform-style.mdx +110 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transform.mdx +51 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-behavior.mdx +76 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-delay.mdx +76 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-duration.mdx +82 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-property.mdx +137 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/transition-timing-function.mdx +89 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/translate.mdx +487 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/upgrade-guide.mdx +910 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/user-select.mdx +114 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/vertical-align.mdx +194 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/visibility.mdx +287 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/white-space.mdx +211 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/width.mdx +264 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/will-change.mdx +47 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/word-break.mdx +94 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs/z-index.mdx +104 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-catalog.md +251 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-index.tsx +237 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/docs-source.txt +6 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/references/gotchas.md +18 -0
- package/extensions/enact-repo/skills/tailwind-4-docs/scripts/sync_tailwind_docs.py +183 -0
- package/extensions/enact-repo/skills/tdd/SKILL.md +49 -0
- package/extensions/enact-repo/skills/tdd/references/mocking.md +59 -0
- package/extensions/enact-repo/skills/tdd/references/tests.md +77 -0
- package/extensions/enact-repo/skills/teach/SKILL.md +88 -0
- package/extensions/enact-repo/skills/teach/references/GLOSSARY-FORMAT.md +35 -0
- package/extensions/enact-repo/skills/teach/references/LEARNING-RECORD-FORMAT.md +46 -0
- package/extensions/enact-repo/skills/teach/references/MISSION-FORMAT.md +31 -0
- package/extensions/enact-repo/skills/teach/references/PHILOSOPHY.md +65 -0
- package/extensions/enact-repo/skills/teach/references/RESOURCES-FORMAT.md +32 -0
- package/extensions/enact-repo/skills/testing/SKILL.md +54 -0
- package/extensions/enact-repo/skills/to-spec/SKILL.md +85 -0
- package/extensions/enact-repo/skills/to-tickets/SKILL.md +75 -0
- package/extensions/enact-repo/skills/to-tickets/references/TICKET-TEMPLATES.md +39 -0
- package/extensions/enact-repo/skills/triage/SKILL.md +99 -0
- package/extensions/enact-repo/skills/triage/references/AGENT-BRIEF.md +207 -0
- package/extensions/enact-repo/skills/triage/references/NEEDS-INFO-TEMPLATE.md +17 -0
- package/extensions/enact-repo/skills/triage/references/OUT-OF-SCOPE.md +105 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/SKILL.md +32 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/references/Workflow.md +207 -0
- package/extensions/enact-repo/skills/ui-ux-pro-max/references/workflow-reference.md +175 -0
- package/extensions/enact-repo/skills/wayfinder/SKILL.md +100 -0
- package/extensions/enact-repo/skills/wayfinder/references/TEMPLATES.md +35 -0
- package/extensions/enact-repo/skills/wayfinder/references/TICKET-TYPES.md +8 -0
- package/extensions/enact-repo/skills/writing-great-skills/SKILL.md +93 -0
- package/extensions/enact-repo/skills/writing-great-skills/references/GLOSSARY.md +201 -0
- package/package.json +22 -17
- package/scripts/enact-extensions.mjs +411 -1006
- package/scripts/lib/allowed-plugins.mjs +52 -0
- package/scripts/lib/build-index.mjs +1 -3
- package/scripts/lib/resolve-bundle.mjs +1 -3
- package/scripts/lib/run-repo-doctor.mjs +604 -0
- package/scripts/lib/run-repo-install.mjs +1651 -0
- package/scripts/lib/run-sync.mjs +4 -10
- package/scripts/lib/run-validate.mjs +23 -39
- package/scripts/lib/skill-validator.mjs +1096 -0
- package/spec/enact.json +21 -3
- package/spec/enact.md +13 -12
- package/spec/kimi.json +100 -0
- package/spec/opencode.json +64 -0
- package/dist/install.d.ts +0 -235
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js +0 -697
- package/dist/install.js.map +0 -1
- package/dist/internal/claude.d.ts +0 -65
- package/dist/internal/claude.d.ts.map +0 -1
- package/dist/internal/claude.js +0 -200
- package/dist/internal/claude.js.map +0 -1
- package/dist/internal/codex.d.ts +0 -43
- package/dist/internal/codex.d.ts.map +0 -1
- package/dist/internal/codex.js +0 -211
- package/dist/internal/codex.js.map +0 -1
- package/dist/internal/cursor.d.ts +0 -2
- package/dist/internal/cursor.d.ts.map +0 -1
- package/dist/internal/cursor.js +0 -6
- package/dist/internal/cursor.js.map +0 -1
- package/dist/principles.d.ts +0 -28
- package/dist/principles.d.ts.map +0 -1
- package/dist/principles.js +0 -159
- package/dist/principles.js.map +0 -1
- package/dist/provision.d.ts +0 -30
- package/dist/provision.d.ts.map +0 -1
- package/dist/provision.js +0 -202
- package/dist/provision.js.map +0 -1
- package/extensions/dev-state/.agents/plugin.json +0 -36
- package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +0 -194
- package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +0 -4
- package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +0 -130
- package/extensions/enact-context/.agents/plugin.json +0 -41
- package/extensions/enact-context/.mcp.json +0 -8
- package/extensions/enact-context/README.md +0 -25
- package/extensions/enact-context/assets/icon.png +0 -0
- package/extensions/enact-context/assets/logo.png +0 -0
- package/extensions/enact-context/hooks/hooks.json +0 -115
- package/extensions/enact-context/skills/enact-context/SKILL.md +0 -151
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +0 -69
- package/extensions/enact-core/.agents/plugin.json +0 -40
- package/extensions/enact-core/OPERATING-PRINCIPLES.md +0 -7
- package/extensions/enact-core/hooks/hooks.json +0 -26
- package/extensions/enact-evolve/.agents/plugin.json +0 -47
- package/extensions/enact-evolve/agents/evolve-session-analyst.toml +0 -37
- package/extensions/enact-evolve/assets/icon.png +0 -0
- package/extensions/enact-evolve/assets/logo.png +0 -0
- package/extensions/enact-evolve/skills/mined-investigate-loop/SKILL.md +0 -68
- package/extensions/enact-evolve/skills/session-analysis/SKILL.md +0 -98
- package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +0 -343
- package/extensions/enact-factory/.agents/plugin.json +0 -49
- package/extensions/enact-factory/.mcp.json +0 -8
- package/extensions/enact-factory/agents/architect.toml +0 -34
- package/extensions/enact-factory/agents/code-reviewer.toml +0 -33
- package/extensions/enact-factory/agents/critic.toml +0 -39
- package/extensions/enact-factory/agents/executor.toml +0 -26
- package/extensions/enact-factory/agents/explore.toml +0 -25
- package/extensions/enact-factory/agents/planner.toml +0 -26
- package/extensions/enact-factory/agents/verifier.toml +0 -33
- package/extensions/enact-factory/assets/icon.png +0 -0
- package/extensions/enact-factory/assets/logo.png +0 -0
- package/extensions/enact-factory/skills/advisor/SKILL.md +0 -82
- package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +0 -57
- package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +0 -353
- package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +0 -309
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +0 -60
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +0 -87
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +0 -132
- package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +0 -53
- package/extensions/enact-factory/skills/cmux-leader/SKILL.md +0 -74
- package/extensions/enact-factory/skills/cmux-send/SKILL.md +0 -50
- package/extensions/enact-factory/skills/committee/SKILL.md +0 -80
- package/extensions/enact-factory/skills/deep-interview/SKILL.md +0 -68
- package/extensions/enact-factory/skills/deslop-handover/SKILL.md +0 -97
- package/extensions/enact-factory/skills/deslop-handover/deslop.py +0 -181
- package/extensions/enact-factory/skills/drive-loop/SKILL.md +0 -394
- package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +0 -127
- package/extensions/enact-factory/skills/handoff/SKILL.md +0 -75
- package/extensions/enact-factory/skills/hyperplan/SKILL.md +0 -59
- package/extensions/enact-factory/skills/looplan/SKILL.md +0 -120
- package/extensions/enact-factory/skills/paseo-dispatch/SKILL.md +0 -141
- package/extensions/enact-factory/skills/plan/SKILL.md +0 -103
- package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +0 -46
- package/extensions/enact-factory/skills/research/SKILL.md +0 -83
- package/extensions/enact-factory/skills/review/SKILL.md +0 -67
- package/extensions/enact-factory/skills/security-research/SKILL.md +0 -57
- package/extensions/enact-factory/skills/tdd/SKILL.md +0 -62
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +0 -172
- package/extensions/enact-factory/skills/trace/SKILL.md +0 -42
- package/extensions/enact-factory/skills/ultraqa/SKILL.md +0 -85
- package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +0 -56
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +0 -42
- package/extensions/enact-wiki/.agents/plugin.json +0 -43
- package/extensions/enact-wiki/.mcp.json +0 -15
- package/extensions/enact-wiki/README.md +0 -44
- package/extensions/enact-wiki/assets/icon.png +0 -0
- package/extensions/enact-wiki/assets/logo.png +0 -0
- package/extensions/enact-wiki/skills/document-parser/SKILL.md +0 -17
- package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +0 -60
- package/extensions/enact-wiki/skills/document-parser/skill.json +0 -9
- package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +0 -30
- package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +0 -62
- package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +0 -34
- package/extensions/enact-wiki/skills/enact-wiki/references/query.md +0 -59
- package/extensions/enact-wiki/skills/search-lab/SKILL.md +0 -57
- package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +0 -23
- package/extensions/enact-wiki/skills/wiki/SKILL.md +0 -42
- package/extensions/net-revenue-management/.agents/plugin.json +0 -40
- package/extensions/net-revenue-management/.mcp.json +0 -9
- package/extensions/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -30
- package/extensions/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -31
- package/extensions/plugin-dev/.agents/plugin.json +0 -41
- package/extensions/plugin-dev/agents/agent-creator.md +0 -199
- package/extensions/plugin-dev/agents/plugin-validator.md +0 -91
- package/extensions/plugin-dev/agents/skill-reviewer.md +0 -212
- package/extensions/plugin-dev/skills/agent-development/SKILL.md +0 -641
- package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +0 -250
- package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +0 -461
- package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +0 -246
- package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +0 -216
- package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +0 -226
- package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +0 -464
- package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +0 -474
- package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +0 -176
- package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +0 -227
- package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +0 -227
- package/extensions/plugin-dev/skills/create-plugin/SKILL.md +0 -505
- package/extensions/plugin-dev/skills/hook-development/SKILL.md +0 -861
- package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +0 -55
- package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +0 -57
- package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +0 -48
- package/extensions/plugin-dev/skills/hook-development/references/advanced.md +0 -871
- package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +0 -145
- package/extensions/plugin-dev/skills/hook-development/references/migration.md +0 -392
- package/extensions/plugin-dev/skills/hook-development/references/patterns.md +0 -430
- package/extensions/plugin-dev/skills/hook-development/scripts/README.md +0 -181
- package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +0 -153
- package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +0 -276
- package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +0 -159
- package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +0 -775
- package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +0 -20
- package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +0 -19
- package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +0 -38
- package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +0 -26
- package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +0 -601
- package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +0 -190
- package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +0 -572
- package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +0 -623
- package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +0 -221
- package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +0 -705
- package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +0 -774
- package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +0 -83
- package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +0 -611
- package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +0 -289
- package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +0 -592
- package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +0 -233
- package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +0 -193
- package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +0 -625
- package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +0 -116
- package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -562
- package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +0 -465
- package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +0 -167
- package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +0 -111
- package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +0 -225
- package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +0 -39
- package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +0 -379
- package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +0 -210
- package/extensions/plugin-dev/skills/start/SKILL.md +0 -82
- package/scripts/check-hooks.mjs +0 -174
- package/scripts/check-principles.mjs +0 -116
- package/scripts/hooks/session-start-drift-check.mjs +0 -49
- package/scripts/install.sh +0 -70
- package/scripts/lib/auto-update.mjs +0 -88
- package/scripts/lib/bundle-hash.mjs +0 -137
- package/scripts/lib/hooks.mjs +0 -585
- package/scripts/lib/ledger.mjs +0 -163
- package/scripts/lib/migrate-artifacts.mjs +0 -144
- package/scripts/lib/outdated.mjs +0 -144
- package/scripts/lib/postinstall-offer.mjs +0 -83
- package/scripts/lib/principles.mjs +0 -109
- package/scripts/lib/provision-mcp.mjs +0 -16
- package/scripts/lib/resolve-plugin-root.mjs +0 -9
- package/scripts/lib/run-install.mjs +0 -507
- package/scripts/lib/run-prune.mjs +0 -94
- package/scripts/lib/run-uninstall.mjs +0 -244
- package/scripts/lib/run-update.mjs +0 -165
- package/scripts/lib/serve.mjs +0 -472
- package/scripts/lib/ups-router.mjs +0 -392
- package/scripts/postinstall.mjs +0 -101
- package/scripts/setup-enact-context.sh +0 -28
- package/scripts/version-bump.sh +0 -484
- package/web/assets/README.md +0 -111
- package/web/assets/logo-full.png +0 -0
- package/web/assets/logo-slim.png +0 -0
- package/web/assets/tokens/base.css +0 -45
- package/web/assets/tokens/colors.css +0 -248
- package/web/assets/tokens/effects.css +0 -24
- package/web/assets/tokens/fonts.css +0 -8
- package/web/assets/tokens/index.css +0 -18
- package/web/assets/tokens/spacing.css +0 -50
- 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":"
|
|
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"}
|
package/dist/internal/io.js.map
CHANGED
|
@@ -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;
|
|
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"}
|