@etus/seven-skill 0.1.0-beta.3 → 0.1.0-beta.5
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/.agents/skills/seven/SKILL.md +172 -0
- package/.agents/skills/seven/agents/seven_asset_producer.toml +37 -0
- package/.agents/skills/seven/agents/seven_finish_reviewer.toml +33 -0
- package/.agents/skills/seven/agents/seven_manual_edit_applier.toml +43 -0
- package/.agents/skills/seven/reference/adapt.md +34 -0
- package/.agents/skills/seven/reference/animate.md +31 -0
- package/.agents/skills/seven/reference/app-shell.md +152 -0
- package/.agents/skills/seven/reference/audit.md +122 -0
- package/.agents/skills/seven/reference/bolder.md +34 -0
- package/.agents/skills/seven/reference/brand.md +31 -0
- package/.agents/skills/seven/reference/clarify.md +76 -0
- package/.agents/skills/seven/reference/color-and-contrast.md +84 -0
- package/.agents/skills/seven/reference/colorize.md +31 -0
- package/.agents/skills/seven/reference/critique.md +53 -0
- package/.agents/skills/seven/reference/delight.md +30 -0
- package/.agents/skills/seven/reference/distill.md +30 -0
- package/.agents/skills/seven/reference/doctor.md +9 -0
- package/.agents/skills/seven/reference/document.md +36 -0
- package/.agents/skills/seven/reference/evaluations.md +44 -0
- package/.agents/skills/seven/reference/exceptions.md +7 -0
- package/.agents/skills/seven/reference/extract.md +42 -0
- package/.agents/skills/seven/reference/harden.md +36 -0
- package/.agents/skills/seven/reference/hooks.md +11 -0
- package/.agents/skills/seven/reference/init.md +5 -0
- package/.agents/skills/seven/reference/layout.md +33 -0
- package/.agents/skills/seven/reference/live.md +106 -0
- package/.agents/skills/seven/reference/motion-design.md +71 -0
- package/.agents/skills/seven/reference/onboard.md +35 -0
- package/.agents/skills/seven/reference/optimize.md +34 -0
- package/.agents/skills/seven/reference/overdrive.md +32 -0
- package/.agents/skills/seven/reference/polish.md +55 -0
- package/.agents/skills/seven/reference/product.md +43 -0
- package/.agents/skills/seven/reference/quieter.md +31 -0
- package/.agents/skills/seven/reference/routing.md +28 -0
- package/.agents/skills/seven/reference/setup.md +38 -0
- package/.agents/skills/seven/reference/shape.md +85 -0
- package/.agents/skills/seven/reference/spatial-design.md +60 -0
- package/.agents/skills/seven/reference/typeset.md +28 -0
- package/.agents/skills/seven/reference/typography.md +43 -0
- package/.agents/skills/seven/reference/ux-writing.md +47 -0
- package/.agents/skills/seven/reference/visual-probes.md +36 -0
- package/.agents/skills/seven/scripts/context-signals.mjs +95 -0
- package/.agents/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.agents/skills/seven/scripts/load-context.mjs +111 -0
- package/.agents/skills/seven/scripts/run-seven.mjs +47 -0
- package/.agents/skills/seven/scripts/update-check.mjs +120 -0
- package/.claude/agents/seven-asset-producer.md +40 -0
- package/.claude/agents/seven-finish-reviewer.md +36 -0
- package/.claude/agents/seven-manual-edit-applier.md +46 -0
- package/.claude/skills/seven/SKILL.md +134 -123
- package/.claude/skills/seven/reference/adapt.md +34 -0
- package/.claude/skills/seven/reference/animate.md +31 -0
- package/.claude/skills/seven/reference/app-shell.md +100 -18
- package/.claude/skills/seven/reference/audit.md +6 -4
- package/.claude/skills/seven/reference/bolder.md +34 -0
- package/.claude/skills/seven/reference/brand.md +21 -14
- package/.claude/skills/seven/reference/clarify.md +2 -2
- package/.claude/skills/seven/reference/colorize.md +31 -0
- package/.claude/skills/seven/reference/critique.md +53 -0
- package/.claude/skills/seven/reference/delight.md +30 -0
- package/.claude/skills/seven/reference/distill.md +30 -0
- package/.claude/skills/seven/reference/doctor.md +9 -0
- package/.claude/skills/seven/reference/document.md +36 -0
- package/.claude/skills/seven/reference/evaluations.md +44 -0
- package/.claude/skills/seven/reference/exceptions.md +7 -0
- package/.claude/skills/seven/reference/extract.md +42 -0
- package/.claude/skills/seven/reference/harden.md +36 -0
- package/.claude/skills/seven/reference/hooks.md +11 -0
- package/.claude/skills/seven/reference/init.md +5 -0
- package/.claude/skills/seven/reference/layout.md +33 -0
- package/.claude/skills/seven/reference/live.md +106 -0
- package/.claude/skills/seven/reference/motion-design.md +1 -1
- package/.claude/skills/seven/reference/onboard.md +35 -0
- package/.claude/skills/seven/reference/optimize.md +34 -0
- package/.claude/skills/seven/reference/overdrive.md +32 -0
- package/.claude/skills/seven/reference/polish.md +5 -5
- package/.claude/skills/seven/reference/product.md +2 -4
- package/.claude/skills/seven/reference/quieter.md +31 -0
- package/.claude/skills/seven/reference/routing.md +28 -0
- package/.claude/skills/seven/reference/setup.md +38 -0
- package/.claude/skills/seven/reference/shape.md +5 -5
- package/.claude/skills/seven/reference/spatial-design.md +3 -3
- package/.claude/skills/seven/reference/typeset.md +28 -0
- package/.claude/skills/seven/reference/typography.md +1 -1
- package/.claude/skills/seven/reference/visual-probes.md +36 -0
- package/.claude/skills/seven/scripts/context-signals.mjs +95 -0
- package/.claude/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.claude/skills/seven/scripts/load-context.mjs +85 -58
- package/.claude/skills/seven/scripts/run-seven.mjs +47 -0
- package/.claude/skills/seven/scripts/update-check.mjs +120 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +8 -3
- package/.cursor/skills/seven/SKILL.md +172 -0
- package/.cursor/skills/seven/reference/adapt.md +34 -0
- package/.cursor/skills/seven/reference/animate.md +31 -0
- package/.cursor/skills/seven/reference/app-shell.md +152 -0
- package/.cursor/skills/seven/reference/audit.md +122 -0
- package/.cursor/skills/seven/reference/bolder.md +34 -0
- package/.cursor/skills/seven/reference/brand.md +31 -0
- package/.cursor/skills/seven/reference/clarify.md +76 -0
- package/.cursor/skills/seven/reference/color-and-contrast.md +84 -0
- package/.cursor/skills/seven/reference/colorize.md +31 -0
- package/.cursor/skills/seven/reference/critique.md +53 -0
- package/.cursor/skills/seven/reference/delight.md +30 -0
- package/.cursor/skills/seven/reference/distill.md +30 -0
- package/.cursor/skills/seven/reference/doctor.md +9 -0
- package/.cursor/skills/seven/reference/document.md +36 -0
- package/.cursor/skills/seven/reference/evaluations.md +44 -0
- package/.cursor/skills/seven/reference/exceptions.md +7 -0
- package/.cursor/skills/seven/reference/extract.md +42 -0
- package/.cursor/skills/seven/reference/harden.md +36 -0
- package/.cursor/skills/seven/reference/hooks.md +11 -0
- package/.cursor/skills/seven/reference/init.md +5 -0
- package/.cursor/skills/seven/reference/layout.md +33 -0
- package/.cursor/skills/seven/reference/live.md +106 -0
- package/.cursor/skills/seven/reference/motion-design.md +71 -0
- package/.cursor/skills/seven/reference/onboard.md +35 -0
- package/.cursor/skills/seven/reference/optimize.md +34 -0
- package/.cursor/skills/seven/reference/overdrive.md +32 -0
- package/.cursor/skills/seven/reference/polish.md +55 -0
- package/.cursor/skills/seven/reference/product.md +43 -0
- package/.cursor/skills/seven/reference/quieter.md +31 -0
- package/.cursor/skills/seven/reference/routing.md +28 -0
- package/.cursor/skills/seven/reference/setup.md +38 -0
- package/.cursor/skills/seven/reference/shape.md +85 -0
- package/.cursor/skills/seven/reference/spatial-design.md +60 -0
- package/.cursor/skills/seven/reference/typeset.md +28 -0
- package/.cursor/skills/seven/reference/typography.md +43 -0
- package/.cursor/skills/seven/reference/ux-writing.md +47 -0
- package/.cursor/skills/seven/reference/visual-probes.md +36 -0
- package/.cursor/skills/seven/scripts/context-signals.mjs +95 -0
- package/.cursor/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.cursor/skills/seven/scripts/load-context.mjs +111 -0
- package/.cursor/skills/seven/scripts/run-seven.mjs +47 -0
- package/.cursor/skills/seven/scripts/update-check.mjs +120 -0
- package/.gemini/skills/seven/SKILL.md +171 -0
- package/.gemini/skills/seven/reference/adapt.md +34 -0
- package/.gemini/skills/seven/reference/animate.md +31 -0
- package/.gemini/skills/seven/reference/app-shell.md +152 -0
- package/.gemini/skills/seven/reference/audit.md +122 -0
- package/.gemini/skills/seven/reference/bolder.md +34 -0
- package/.gemini/skills/seven/reference/brand.md +31 -0
- package/.gemini/skills/seven/reference/clarify.md +76 -0
- package/.gemini/skills/seven/reference/color-and-contrast.md +84 -0
- package/.gemini/skills/seven/reference/colorize.md +31 -0
- package/.gemini/skills/seven/reference/critique.md +53 -0
- package/.gemini/skills/seven/reference/delight.md +30 -0
- package/.gemini/skills/seven/reference/distill.md +30 -0
- package/.gemini/skills/seven/reference/doctor.md +9 -0
- package/.gemini/skills/seven/reference/document.md +36 -0
- package/.gemini/skills/seven/reference/evaluations.md +44 -0
- package/.gemini/skills/seven/reference/exceptions.md +7 -0
- package/.gemini/skills/seven/reference/extract.md +42 -0
- package/.gemini/skills/seven/reference/harden.md +36 -0
- package/.gemini/skills/seven/reference/hooks.md +11 -0
- package/.gemini/skills/seven/reference/init.md +5 -0
- package/.gemini/skills/seven/reference/layout.md +33 -0
- package/.gemini/skills/seven/reference/live.md +106 -0
- package/.gemini/skills/seven/reference/motion-design.md +71 -0
- package/.gemini/skills/seven/reference/onboard.md +35 -0
- package/.gemini/skills/seven/reference/optimize.md +34 -0
- package/.gemini/skills/seven/reference/overdrive.md +32 -0
- package/.gemini/skills/seven/reference/polish.md +55 -0
- package/.gemini/skills/seven/reference/product.md +43 -0
- package/.gemini/skills/seven/reference/quieter.md +31 -0
- package/.gemini/skills/seven/reference/routing.md +28 -0
- package/.gemini/skills/seven/reference/setup.md +38 -0
- package/.gemini/skills/seven/reference/shape.md +85 -0
- package/.gemini/skills/seven/reference/spatial-design.md +60 -0
- package/.gemini/skills/seven/reference/typeset.md +28 -0
- package/.gemini/skills/seven/reference/typography.md +43 -0
- package/.gemini/skills/seven/reference/ux-writing.md +47 -0
- package/.gemini/skills/seven/reference/visual-probes.md +36 -0
- package/.gemini/skills/seven/scripts/context-signals.mjs +95 -0
- package/.gemini/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.gemini/skills/seven/scripts/load-context.mjs +111 -0
- package/.gemini/skills/seven/scripts/run-seven.mjs +47 -0
- package/.gemini/skills/seven/scripts/update-check.mjs +120 -0
- package/.grok/agents/seven-asset-producer.md +40 -0
- package/.grok/agents/seven-finish-reviewer.md +36 -0
- package/.grok/agents/seven-manual-edit-applier.md +46 -0
- package/.grok/skills/seven/SKILL.md +176 -0
- package/.grok/skills/seven/reference/adapt.md +34 -0
- package/.grok/skills/seven/reference/animate.md +31 -0
- package/.grok/skills/seven/reference/app-shell.md +152 -0
- package/.grok/skills/seven/reference/audit.md +122 -0
- package/.grok/skills/seven/reference/bolder.md +34 -0
- package/.grok/skills/seven/reference/brand.md +31 -0
- package/.grok/skills/seven/reference/clarify.md +76 -0
- package/.grok/skills/seven/reference/color-and-contrast.md +84 -0
- package/.grok/skills/seven/reference/colorize.md +31 -0
- package/.grok/skills/seven/reference/critique.md +53 -0
- package/.grok/skills/seven/reference/delight.md +30 -0
- package/.grok/skills/seven/reference/distill.md +30 -0
- package/.grok/skills/seven/reference/doctor.md +9 -0
- package/.grok/skills/seven/reference/document.md +36 -0
- package/.grok/skills/seven/reference/evaluations.md +44 -0
- package/.grok/skills/seven/reference/exceptions.md +7 -0
- package/.grok/skills/seven/reference/extract.md +42 -0
- package/.grok/skills/seven/reference/harden.md +36 -0
- package/.grok/skills/seven/reference/hooks.md +11 -0
- package/.grok/skills/seven/reference/init.md +5 -0
- package/.grok/skills/seven/reference/layout.md +33 -0
- package/.grok/skills/seven/reference/live.md +106 -0
- package/.grok/skills/seven/reference/motion-design.md +71 -0
- package/.grok/skills/seven/reference/onboard.md +35 -0
- package/.grok/skills/seven/reference/optimize.md +34 -0
- package/.grok/skills/seven/reference/overdrive.md +32 -0
- package/.grok/skills/seven/reference/polish.md +55 -0
- package/.grok/skills/seven/reference/product.md +43 -0
- package/.grok/skills/seven/reference/quieter.md +31 -0
- package/.grok/skills/seven/reference/routing.md +28 -0
- package/.grok/skills/seven/reference/setup.md +38 -0
- package/.grok/skills/seven/reference/shape.md +85 -0
- package/.grok/skills/seven/reference/spatial-design.md +60 -0
- package/.grok/skills/seven/reference/typeset.md +28 -0
- package/.grok/skills/seven/reference/typography.md +43 -0
- package/.grok/skills/seven/reference/ux-writing.md +47 -0
- package/.grok/skills/seven/reference/visual-probes.md +36 -0
- package/.grok/skills/seven/scripts/context-signals.mjs +95 -0
- package/.grok/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.grok/skills/seven/scripts/load-context.mjs +111 -0
- package/.grok/skills/seven/scripts/run-seven.mjs +47 -0
- package/.grok/skills/seven/scripts/update-check.mjs +120 -0
- package/.kiro/skills/seven/SKILL.md +172 -0
- package/.kiro/skills/seven/reference/adapt.md +34 -0
- package/.kiro/skills/seven/reference/animate.md +31 -0
- package/.kiro/skills/seven/reference/app-shell.md +152 -0
- package/.kiro/skills/seven/reference/audit.md +122 -0
- package/.kiro/skills/seven/reference/bolder.md +34 -0
- package/.kiro/skills/seven/reference/brand.md +31 -0
- package/.kiro/skills/seven/reference/clarify.md +76 -0
- package/.kiro/skills/seven/reference/color-and-contrast.md +84 -0
- package/.kiro/skills/seven/reference/colorize.md +31 -0
- package/.kiro/skills/seven/reference/critique.md +53 -0
- package/.kiro/skills/seven/reference/delight.md +30 -0
- package/.kiro/skills/seven/reference/distill.md +30 -0
- package/.kiro/skills/seven/reference/doctor.md +9 -0
- package/.kiro/skills/seven/reference/document.md +36 -0
- package/.kiro/skills/seven/reference/evaluations.md +44 -0
- package/.kiro/skills/seven/reference/exceptions.md +7 -0
- package/.kiro/skills/seven/reference/extract.md +42 -0
- package/.kiro/skills/seven/reference/harden.md +36 -0
- package/.kiro/skills/seven/reference/hooks.md +11 -0
- package/.kiro/skills/seven/reference/init.md +5 -0
- package/.kiro/skills/seven/reference/layout.md +33 -0
- package/.kiro/skills/seven/reference/live.md +106 -0
- package/.kiro/skills/seven/reference/motion-design.md +71 -0
- package/.kiro/skills/seven/reference/onboard.md +35 -0
- package/.kiro/skills/seven/reference/optimize.md +34 -0
- package/.kiro/skills/seven/reference/overdrive.md +32 -0
- package/.kiro/skills/seven/reference/polish.md +55 -0
- package/.kiro/skills/seven/reference/product.md +43 -0
- package/.kiro/skills/seven/reference/quieter.md +31 -0
- package/.kiro/skills/seven/reference/routing.md +28 -0
- package/.kiro/skills/seven/reference/setup.md +38 -0
- package/.kiro/skills/seven/reference/shape.md +85 -0
- package/.kiro/skills/seven/reference/spatial-design.md +60 -0
- package/.kiro/skills/seven/reference/typeset.md +28 -0
- package/.kiro/skills/seven/reference/typography.md +43 -0
- package/.kiro/skills/seven/reference/ux-writing.md +47 -0
- package/.kiro/skills/seven/reference/visual-probes.md +36 -0
- package/.kiro/skills/seven/scripts/context-signals.mjs +95 -0
- package/.kiro/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.kiro/skills/seven/scripts/load-context.mjs +111 -0
- package/.kiro/skills/seven/scripts/run-seven.mjs +47 -0
- package/.kiro/skills/seven/scripts/update-check.mjs +120 -0
- package/.opencode/skills/seven/SKILL.md +176 -0
- package/.opencode/skills/seven/reference/adapt.md +34 -0
- package/.opencode/skills/seven/reference/animate.md +31 -0
- package/.opencode/skills/seven/reference/app-shell.md +152 -0
- package/.opencode/skills/seven/reference/audit.md +122 -0
- package/.opencode/skills/seven/reference/bolder.md +34 -0
- package/.opencode/skills/seven/reference/brand.md +31 -0
- package/.opencode/skills/seven/reference/clarify.md +76 -0
- package/.opencode/skills/seven/reference/color-and-contrast.md +84 -0
- package/.opencode/skills/seven/reference/colorize.md +31 -0
- package/.opencode/skills/seven/reference/critique.md +53 -0
- package/.opencode/skills/seven/reference/delight.md +30 -0
- package/.opencode/skills/seven/reference/distill.md +30 -0
- package/.opencode/skills/seven/reference/doctor.md +9 -0
- package/.opencode/skills/seven/reference/document.md +36 -0
- package/.opencode/skills/seven/reference/evaluations.md +44 -0
- package/.opencode/skills/seven/reference/exceptions.md +7 -0
- package/.opencode/skills/seven/reference/extract.md +42 -0
- package/.opencode/skills/seven/reference/harden.md +36 -0
- package/.opencode/skills/seven/reference/hooks.md +11 -0
- package/.opencode/skills/seven/reference/init.md +5 -0
- package/.opencode/skills/seven/reference/layout.md +33 -0
- package/.opencode/skills/seven/reference/live.md +106 -0
- package/.opencode/skills/seven/reference/motion-design.md +71 -0
- package/.opencode/skills/seven/reference/onboard.md +35 -0
- package/.opencode/skills/seven/reference/optimize.md +34 -0
- package/.opencode/skills/seven/reference/overdrive.md +32 -0
- package/.opencode/skills/seven/reference/polish.md +55 -0
- package/.opencode/skills/seven/reference/product.md +43 -0
- package/.opencode/skills/seven/reference/quieter.md +31 -0
- package/.opencode/skills/seven/reference/routing.md +28 -0
- package/.opencode/skills/seven/reference/setup.md +38 -0
- package/.opencode/skills/seven/reference/shape.md +85 -0
- package/.opencode/skills/seven/reference/spatial-design.md +60 -0
- package/.opencode/skills/seven/reference/typeset.md +28 -0
- package/.opencode/skills/seven/reference/typography.md +43 -0
- package/.opencode/skills/seven/reference/ux-writing.md +47 -0
- package/.opencode/skills/seven/reference/visual-probes.md +36 -0
- package/.opencode/skills/seven/scripts/context-signals.mjs +95 -0
- package/.opencode/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.opencode/skills/seven/scripts/load-context.mjs +111 -0
- package/.opencode/skills/seven/scripts/run-seven.mjs +47 -0
- package/.opencode/skills/seven/scripts/update-check.mjs +120 -0
- package/.pi/skills/seven/SKILL.md +174 -0
- package/.pi/skills/seven/reference/adapt.md +34 -0
- package/.pi/skills/seven/reference/animate.md +31 -0
- package/.pi/skills/seven/reference/app-shell.md +152 -0
- package/.pi/skills/seven/reference/audit.md +122 -0
- package/.pi/skills/seven/reference/bolder.md +34 -0
- package/.pi/skills/seven/reference/brand.md +31 -0
- package/.pi/skills/seven/reference/clarify.md +76 -0
- package/.pi/skills/seven/reference/color-and-contrast.md +84 -0
- package/.pi/skills/seven/reference/colorize.md +31 -0
- package/.pi/skills/seven/reference/critique.md +53 -0
- package/.pi/skills/seven/reference/delight.md +30 -0
- package/.pi/skills/seven/reference/distill.md +30 -0
- package/.pi/skills/seven/reference/doctor.md +9 -0
- package/.pi/skills/seven/reference/document.md +36 -0
- package/.pi/skills/seven/reference/evaluations.md +44 -0
- package/.pi/skills/seven/reference/exceptions.md +7 -0
- package/.pi/skills/seven/reference/extract.md +42 -0
- package/.pi/skills/seven/reference/harden.md +36 -0
- package/.pi/skills/seven/reference/hooks.md +11 -0
- package/.pi/skills/seven/reference/init.md +5 -0
- package/.pi/skills/seven/reference/layout.md +33 -0
- package/.pi/skills/seven/reference/live.md +106 -0
- package/.pi/skills/seven/reference/motion-design.md +71 -0
- package/.pi/skills/seven/reference/onboard.md +35 -0
- package/.pi/skills/seven/reference/optimize.md +34 -0
- package/.pi/skills/seven/reference/overdrive.md +32 -0
- package/.pi/skills/seven/reference/polish.md +55 -0
- package/.pi/skills/seven/reference/product.md +43 -0
- package/.pi/skills/seven/reference/quieter.md +31 -0
- package/.pi/skills/seven/reference/routing.md +28 -0
- package/.pi/skills/seven/reference/setup.md +38 -0
- package/.pi/skills/seven/reference/shape.md +85 -0
- package/.pi/skills/seven/reference/spatial-design.md +60 -0
- package/.pi/skills/seven/reference/typeset.md +28 -0
- package/.pi/skills/seven/reference/typography.md +43 -0
- package/.pi/skills/seven/reference/ux-writing.md +47 -0
- package/.pi/skills/seven/reference/visual-probes.md +36 -0
- package/.pi/skills/seven/scripts/context-signals.mjs +95 -0
- package/.pi/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.pi/skills/seven/scripts/load-context.mjs +111 -0
- package/.pi/skills/seven/scripts/run-seven.mjs +47 -0
- package/.pi/skills/seven/scripts/update-check.mjs +120 -0
- package/.qoder/skills/seven/SKILL.md +176 -0
- package/.qoder/skills/seven/reference/adapt.md +34 -0
- package/.qoder/skills/seven/reference/animate.md +31 -0
- package/.qoder/skills/seven/reference/app-shell.md +152 -0
- package/.qoder/skills/seven/reference/audit.md +122 -0
- package/.qoder/skills/seven/reference/bolder.md +34 -0
- package/.qoder/skills/seven/reference/brand.md +31 -0
- package/.qoder/skills/seven/reference/clarify.md +76 -0
- package/.qoder/skills/seven/reference/color-and-contrast.md +84 -0
- package/.qoder/skills/seven/reference/colorize.md +31 -0
- package/.qoder/skills/seven/reference/critique.md +53 -0
- package/.qoder/skills/seven/reference/delight.md +30 -0
- package/.qoder/skills/seven/reference/distill.md +30 -0
- package/.qoder/skills/seven/reference/doctor.md +9 -0
- package/.qoder/skills/seven/reference/document.md +36 -0
- package/.qoder/skills/seven/reference/evaluations.md +44 -0
- package/.qoder/skills/seven/reference/exceptions.md +7 -0
- package/.qoder/skills/seven/reference/extract.md +42 -0
- package/.qoder/skills/seven/reference/harden.md +36 -0
- package/.qoder/skills/seven/reference/hooks.md +11 -0
- package/.qoder/skills/seven/reference/init.md +5 -0
- package/.qoder/skills/seven/reference/layout.md +33 -0
- package/.qoder/skills/seven/reference/live.md +106 -0
- package/.qoder/skills/seven/reference/motion-design.md +71 -0
- package/.qoder/skills/seven/reference/onboard.md +35 -0
- package/.qoder/skills/seven/reference/optimize.md +34 -0
- package/.qoder/skills/seven/reference/overdrive.md +32 -0
- package/.qoder/skills/seven/reference/polish.md +55 -0
- package/.qoder/skills/seven/reference/product.md +43 -0
- package/.qoder/skills/seven/reference/quieter.md +31 -0
- package/.qoder/skills/seven/reference/routing.md +28 -0
- package/.qoder/skills/seven/reference/setup.md +38 -0
- package/.qoder/skills/seven/reference/shape.md +85 -0
- package/.qoder/skills/seven/reference/spatial-design.md +60 -0
- package/.qoder/skills/seven/reference/typeset.md +28 -0
- package/.qoder/skills/seven/reference/typography.md +43 -0
- package/.qoder/skills/seven/reference/ux-writing.md +47 -0
- package/.qoder/skills/seven/reference/visual-probes.md +36 -0
- package/.qoder/skills/seven/scripts/context-signals.mjs +95 -0
- package/.qoder/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.qoder/skills/seven/scripts/load-context.mjs +111 -0
- package/.qoder/skills/seven/scripts/run-seven.mjs +47 -0
- package/.qoder/skills/seven/scripts/update-check.mjs +120 -0
- package/.rovodev/skills/seven/SKILL.md +176 -0
- package/.rovodev/skills/seven/reference/adapt.md +34 -0
- package/.rovodev/skills/seven/reference/animate.md +31 -0
- package/.rovodev/skills/seven/reference/app-shell.md +152 -0
- package/.rovodev/skills/seven/reference/audit.md +122 -0
- package/.rovodev/skills/seven/reference/bolder.md +34 -0
- package/.rovodev/skills/seven/reference/brand.md +31 -0
- package/.rovodev/skills/seven/reference/clarify.md +76 -0
- package/.rovodev/skills/seven/reference/color-and-contrast.md +84 -0
- package/.rovodev/skills/seven/reference/colorize.md +31 -0
- package/.rovodev/skills/seven/reference/critique.md +53 -0
- package/.rovodev/skills/seven/reference/delight.md +30 -0
- package/.rovodev/skills/seven/reference/distill.md +30 -0
- package/.rovodev/skills/seven/reference/doctor.md +9 -0
- package/.rovodev/skills/seven/reference/document.md +36 -0
- package/.rovodev/skills/seven/reference/evaluations.md +44 -0
- package/.rovodev/skills/seven/reference/exceptions.md +7 -0
- package/.rovodev/skills/seven/reference/extract.md +42 -0
- package/.rovodev/skills/seven/reference/harden.md +36 -0
- package/.rovodev/skills/seven/reference/hooks.md +11 -0
- package/.rovodev/skills/seven/reference/init.md +5 -0
- package/.rovodev/skills/seven/reference/layout.md +33 -0
- package/.rovodev/skills/seven/reference/live.md +106 -0
- package/.rovodev/skills/seven/reference/motion-design.md +71 -0
- package/.rovodev/skills/seven/reference/onboard.md +35 -0
- package/.rovodev/skills/seven/reference/optimize.md +34 -0
- package/.rovodev/skills/seven/reference/overdrive.md +32 -0
- package/.rovodev/skills/seven/reference/polish.md +55 -0
- package/.rovodev/skills/seven/reference/product.md +43 -0
- package/.rovodev/skills/seven/reference/quieter.md +31 -0
- package/.rovodev/skills/seven/reference/routing.md +28 -0
- package/.rovodev/skills/seven/reference/setup.md +38 -0
- package/.rovodev/skills/seven/reference/shape.md +85 -0
- package/.rovodev/skills/seven/reference/spatial-design.md +60 -0
- package/.rovodev/skills/seven/reference/typeset.md +28 -0
- package/.rovodev/skills/seven/reference/typography.md +43 -0
- package/.rovodev/skills/seven/reference/ux-writing.md +47 -0
- package/.rovodev/skills/seven/reference/visual-probes.md +36 -0
- package/.rovodev/skills/seven/scripts/context-signals.mjs +95 -0
- package/.rovodev/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.rovodev/skills/seven/scripts/load-context.mjs +111 -0
- package/.rovodev/skills/seven/scripts/run-seven.mjs +47 -0
- package/.rovodev/skills/seven/scripts/update-check.mjs +120 -0
- package/.trae/skills/seven/SKILL.md +174 -0
- package/.trae/skills/seven/reference/adapt.md +34 -0
- package/.trae/skills/seven/reference/animate.md +31 -0
- package/.trae/skills/seven/reference/app-shell.md +152 -0
- package/.trae/skills/seven/reference/audit.md +122 -0
- package/.trae/skills/seven/reference/bolder.md +34 -0
- package/.trae/skills/seven/reference/brand.md +31 -0
- package/.trae/skills/seven/reference/clarify.md +76 -0
- package/.trae/skills/seven/reference/color-and-contrast.md +84 -0
- package/.trae/skills/seven/reference/colorize.md +31 -0
- package/.trae/skills/seven/reference/critique.md +53 -0
- package/.trae/skills/seven/reference/delight.md +30 -0
- package/.trae/skills/seven/reference/distill.md +30 -0
- package/.trae/skills/seven/reference/doctor.md +9 -0
- package/.trae/skills/seven/reference/document.md +36 -0
- package/.trae/skills/seven/reference/evaluations.md +44 -0
- package/.trae/skills/seven/reference/exceptions.md +7 -0
- package/.trae/skills/seven/reference/extract.md +42 -0
- package/.trae/skills/seven/reference/harden.md +36 -0
- package/.trae/skills/seven/reference/hooks.md +11 -0
- package/.trae/skills/seven/reference/init.md +5 -0
- package/.trae/skills/seven/reference/layout.md +33 -0
- package/.trae/skills/seven/reference/live.md +106 -0
- package/.trae/skills/seven/reference/motion-design.md +71 -0
- package/.trae/skills/seven/reference/onboard.md +35 -0
- package/.trae/skills/seven/reference/optimize.md +34 -0
- package/.trae/skills/seven/reference/overdrive.md +32 -0
- package/.trae/skills/seven/reference/polish.md +55 -0
- package/.trae/skills/seven/reference/product.md +43 -0
- package/.trae/skills/seven/reference/quieter.md +31 -0
- package/.trae/skills/seven/reference/routing.md +28 -0
- package/.trae/skills/seven/reference/setup.md +38 -0
- package/.trae/skills/seven/reference/shape.md +85 -0
- package/.trae/skills/seven/reference/spatial-design.md +60 -0
- package/.trae/skills/seven/reference/typeset.md +28 -0
- package/.trae/skills/seven/reference/typography.md +43 -0
- package/.trae/skills/seven/reference/ux-writing.md +47 -0
- package/.trae/skills/seven/reference/visual-probes.md +36 -0
- package/.trae/skills/seven/scripts/context-signals.mjs +95 -0
- package/.trae/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.trae/skills/seven/scripts/load-context.mjs +111 -0
- package/.trae/skills/seven/scripts/run-seven.mjs +47 -0
- package/.trae/skills/seven/scripts/update-check.mjs +120 -0
- package/.trae-cn/skills/seven/SKILL.md +174 -0
- package/.trae-cn/skills/seven/reference/adapt.md +34 -0
- package/.trae-cn/skills/seven/reference/animate.md +31 -0
- package/.trae-cn/skills/seven/reference/app-shell.md +152 -0
- package/.trae-cn/skills/seven/reference/audit.md +122 -0
- package/.trae-cn/skills/seven/reference/bolder.md +34 -0
- package/.trae-cn/skills/seven/reference/brand.md +31 -0
- package/.trae-cn/skills/seven/reference/clarify.md +76 -0
- package/.trae-cn/skills/seven/reference/color-and-contrast.md +84 -0
- package/.trae-cn/skills/seven/reference/colorize.md +31 -0
- package/.trae-cn/skills/seven/reference/critique.md +53 -0
- package/.trae-cn/skills/seven/reference/delight.md +30 -0
- package/.trae-cn/skills/seven/reference/distill.md +30 -0
- package/.trae-cn/skills/seven/reference/doctor.md +9 -0
- package/.trae-cn/skills/seven/reference/document.md +36 -0
- package/.trae-cn/skills/seven/reference/evaluations.md +44 -0
- package/.trae-cn/skills/seven/reference/exceptions.md +7 -0
- package/.trae-cn/skills/seven/reference/extract.md +42 -0
- package/.trae-cn/skills/seven/reference/harden.md +36 -0
- package/.trae-cn/skills/seven/reference/hooks.md +11 -0
- package/.trae-cn/skills/seven/reference/init.md +5 -0
- package/.trae-cn/skills/seven/reference/layout.md +33 -0
- package/.trae-cn/skills/seven/reference/live.md +106 -0
- package/.trae-cn/skills/seven/reference/motion-design.md +71 -0
- package/.trae-cn/skills/seven/reference/onboard.md +35 -0
- package/.trae-cn/skills/seven/reference/optimize.md +34 -0
- package/.trae-cn/skills/seven/reference/overdrive.md +32 -0
- package/.trae-cn/skills/seven/reference/polish.md +55 -0
- package/.trae-cn/skills/seven/reference/product.md +43 -0
- package/.trae-cn/skills/seven/reference/quieter.md +31 -0
- package/.trae-cn/skills/seven/reference/routing.md +28 -0
- package/.trae-cn/skills/seven/reference/setup.md +38 -0
- package/.trae-cn/skills/seven/reference/shape.md +85 -0
- package/.trae-cn/skills/seven/reference/spatial-design.md +60 -0
- package/.trae-cn/skills/seven/reference/typeset.md +28 -0
- package/.trae-cn/skills/seven/reference/typography.md +43 -0
- package/.trae-cn/skills/seven/reference/ux-writing.md +47 -0
- package/.trae-cn/skills/seven/reference/visual-probes.md +36 -0
- package/.trae-cn/skills/seven/scripts/context-signals.mjs +95 -0
- package/.trae-cn/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.trae-cn/skills/seven/scripts/load-context.mjs +111 -0
- package/.trae-cn/skills/seven/scripts/run-seven.mjs +47 -0
- package/.trae-cn/skills/seven/scripts/update-check.mjs +120 -0
- package/.vibe/skills/seven/SKILL.md +175 -0
- package/.vibe/skills/seven/reference/adapt.md +34 -0
- package/.vibe/skills/seven/reference/animate.md +31 -0
- package/.vibe/skills/seven/reference/app-shell.md +152 -0
- package/.vibe/skills/seven/reference/audit.md +122 -0
- package/.vibe/skills/seven/reference/bolder.md +34 -0
- package/.vibe/skills/seven/reference/brand.md +31 -0
- package/.vibe/skills/seven/reference/clarify.md +76 -0
- package/.vibe/skills/seven/reference/color-and-contrast.md +84 -0
- package/.vibe/skills/seven/reference/colorize.md +31 -0
- package/.vibe/skills/seven/reference/critique.md +53 -0
- package/.vibe/skills/seven/reference/delight.md +30 -0
- package/.vibe/skills/seven/reference/distill.md +30 -0
- package/.vibe/skills/seven/reference/doctor.md +9 -0
- package/.vibe/skills/seven/reference/document.md +36 -0
- package/.vibe/skills/seven/reference/evaluations.md +44 -0
- package/.vibe/skills/seven/reference/exceptions.md +7 -0
- package/.vibe/skills/seven/reference/extract.md +42 -0
- package/.vibe/skills/seven/reference/harden.md +36 -0
- package/.vibe/skills/seven/reference/hooks.md +11 -0
- package/.vibe/skills/seven/reference/init.md +5 -0
- package/.vibe/skills/seven/reference/layout.md +33 -0
- package/.vibe/skills/seven/reference/live.md +106 -0
- package/.vibe/skills/seven/reference/motion-design.md +71 -0
- package/.vibe/skills/seven/reference/onboard.md +35 -0
- package/.vibe/skills/seven/reference/optimize.md +34 -0
- package/.vibe/skills/seven/reference/overdrive.md +32 -0
- package/.vibe/skills/seven/reference/polish.md +55 -0
- package/.vibe/skills/seven/reference/product.md +43 -0
- package/.vibe/skills/seven/reference/quieter.md +31 -0
- package/.vibe/skills/seven/reference/routing.md +28 -0
- package/.vibe/skills/seven/reference/setup.md +38 -0
- package/.vibe/skills/seven/reference/shape.md +85 -0
- package/.vibe/skills/seven/reference/spatial-design.md +60 -0
- package/.vibe/skills/seven/reference/typeset.md +28 -0
- package/.vibe/skills/seven/reference/typography.md +43 -0
- package/.vibe/skills/seven/reference/ux-writing.md +47 -0
- package/.vibe/skills/seven/reference/visual-probes.md +36 -0
- package/.vibe/skills/seven/scripts/context-signals.mjs +95 -0
- package/.vibe/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.vibe/skills/seven/scripts/load-context.mjs +111 -0
- package/.vibe/skills/seven/scripts/run-seven.mjs +47 -0
- package/.vibe/skills/seven/scripts/update-check.mjs +120 -0
- package/README.md +53 -88
- package/cli/bin/seven.mjs +0 -0
- package/cli/engine/browser/injected/index.mjs +62 -13
- package/cli/engine/detect-antipatterns-browser.js +4739 -19
- package/cli/engine/detect-antipatterns.mjs +1 -0
- package/cli/engine/engines/browser/detect-url.mjs +366 -3
- package/cli/engine/engines/regex/detect-text.mjs +469 -1
- package/cli/engine/engines/static-html/detect-html.mjs +131 -0
- package/cli/engine/registry/seven-antipatterns.mjs +379 -4
- package/cli/engine/rules/checks.mjs +360 -1
- package/cli/engine/shared/tokens.mjs +19 -0
- package/cli/engine/token-data.generated.mjs +4025 -0
- package/docs/detector-rules.md +277 -38
- package/docs/upstream-parity.json +242 -0
- package/extension/README.md +5 -0
- package/extension/background/service-worker.js +134 -0
- package/extension/content/content-script.js +340 -0
- package/extension/detector/detect.js +7816 -0
- package/extension/devtools/devtools.html +1 -0
- package/extension/devtools/devtools.js +3 -0
- package/extension/devtools/panel.css +66 -0
- package/extension/devtools/panel.html +3 -0
- package/extension/devtools/panel.js +37 -0
- package/extension/manifest.json +22 -0
- package/extension/popup/popup.css +106 -0
- package/extension/popup/popup.html +27 -0
- package/extension/popup/popup.js +74 -0
- package/package.json +19 -8
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { spawnSync } from 'node:child_process'
|
|
5
|
+
import fs from 'node:fs'
|
|
6
|
+
import path from 'node:path'
|
|
7
|
+
import { fileURLToPath } from 'node:url'
|
|
8
|
+
|
|
9
|
+
import { argValue, loadContext } from './load-context.mjs'
|
|
10
|
+
|
|
11
|
+
const UI_EXTENSIONS = new Set(['.css', '.html', '.js', '.jsx', '.less', '.mdx', '.scss', '.ts', '.tsx'])
|
|
12
|
+
const scriptsDirectory = path.dirname(fileURLToPath(import.meta.url))
|
|
13
|
+
|
|
14
|
+
function gitNames(root, args) {
|
|
15
|
+
const result = spawnSync('git', args, { cwd: root, encoding: 'utf8' })
|
|
16
|
+
if (result.status !== 0) return []
|
|
17
|
+
return result.stdout.split('\n').map((item) => item.trim()).filter(Boolean)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function changedUiFiles(root) {
|
|
21
|
+
const names = new Set([
|
|
22
|
+
...gitNames(root, ['diff', '--name-only', '--diff-filter=ACMR']),
|
|
23
|
+
...gitNames(root, ['diff', '--cached', '--name-only', '--diff-filter=ACMR']),
|
|
24
|
+
...gitNames(root, ['ls-files', '--others', '--exclude-standard']),
|
|
25
|
+
])
|
|
26
|
+
return [...names].filter((name) => UI_EXTENSIONS.has(path.extname(name).toLowerCase())).sort()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function latestReview(root) {
|
|
30
|
+
const directory = path.join(root, '.seven', 'reviews')
|
|
31
|
+
let names = []
|
|
32
|
+
try {
|
|
33
|
+
names = fs.readdirSync(directory).filter((name) => name.endsWith('.json'))
|
|
34
|
+
} catch {
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
const candidates = names.map((name) => {
|
|
38
|
+
const filePath = path.join(directory, name)
|
|
39
|
+
try {
|
|
40
|
+
return { filePath, mtime: fs.statSync(filePath).mtimeMs, payload: JSON.parse(fs.readFileSync(filePath, 'utf8')) }
|
|
41
|
+
} catch {
|
|
42
|
+
return null
|
|
43
|
+
}
|
|
44
|
+
}).filter(Boolean).sort((left, right) => right.mtime - left.mtime)
|
|
45
|
+
if (!candidates[0]) return null
|
|
46
|
+
return {
|
|
47
|
+
path: path.relative(root, candidates[0].filePath).split(path.sep).join('/'),
|
|
48
|
+
createdAt: candidates[0].payload.createdAt || null,
|
|
49
|
+
score: candidates[0].payload.score ?? null,
|
|
50
|
+
p0: candidates[0].payload.summary?.p0 ?? 0,
|
|
51
|
+
p1: candidates[0].payload.summary?.p1 ?? 0,
|
|
52
|
+
target: candidates[0].payload.target || null,
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function scanTargets(context, changed) {
|
|
57
|
+
if (changed.length > 0) return { via: 'git-changes', targets: changed.slice(0, 40) }
|
|
58
|
+
const roots = Array.isArray(context.project?.sourceRoots) ? context.project.sourceRoots : ['src']
|
|
59
|
+
const existing = roots.filter((entry) => fs.existsSync(path.join(context.projectRoot, entry)))
|
|
60
|
+
return { via: 'source-roots', targets: existing.slice(0, 8) }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export async function collectContextSignals(start = process.cwd(), { target = start } = {}) {
|
|
64
|
+
const context = await loadContext(start, { target })
|
|
65
|
+
const changed = changedUiFiles(context.projectRoot)
|
|
66
|
+
return {
|
|
67
|
+
schemaVersion: 1,
|
|
68
|
+
projectRoot: context.projectRoot,
|
|
69
|
+
target: path.resolve(target),
|
|
70
|
+
setup: {
|
|
71
|
+
hasProduct: context.hasProduct,
|
|
72
|
+
productPlaceholder: context.productPlaceholder,
|
|
73
|
+
hasRelease: Boolean(context.release),
|
|
74
|
+
register: context.register,
|
|
75
|
+
app: context.app?.id || null,
|
|
76
|
+
surface: context.surface?.id || null,
|
|
77
|
+
},
|
|
78
|
+
git: { changedFiles: changed },
|
|
79
|
+
critique: { latest: latestReview(context.projectRoot) },
|
|
80
|
+
scan: scanTargets(context, changed),
|
|
81
|
+
live: {
|
|
82
|
+
session: fs.existsSync(path.join(context.projectRoot, '.seven', 'live', 'session.json')),
|
|
83
|
+
journal: fs.existsSync(path.join(context.projectRoot, '.seven', 'live', 'journal.ndjson')),
|
|
84
|
+
extensionPathCommand: `node ${JSON.stringify(path.join(scriptsDirectory, 'run-seven.mjs'))} extension path`,
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function main(argv = process.argv) {
|
|
90
|
+
const target = argValue('--target', argv) || process.env.SEVEN_TARGET || process.cwd()
|
|
91
|
+
const signals = await collectContextSignals(target, { target })
|
|
92
|
+
process.stdout.write(`${JSON.stringify(signals, null, 2)}\n`)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))) await main()
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import fs from 'node:fs'
|
|
5
|
+
import path from 'node:path'
|
|
6
|
+
import { fileURLToPath } from 'node:url'
|
|
7
|
+
|
|
8
|
+
import { argValue, findRoot, loadContext } from './load-context.mjs'
|
|
9
|
+
|
|
10
|
+
const PRIORITIES = new Set(['P0', 'P1', 'P2', 'P3'])
|
|
11
|
+
const SENSITIVE_KEY = /(?:authorization|cookie|password|secret|token|api[-_]?key|session[-_]?id)/i
|
|
12
|
+
|
|
13
|
+
function slug(value) {
|
|
14
|
+
return String(value || 'review')
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.normalize('NFD')
|
|
17
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
18
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
19
|
+
.replace(/^-|-$/g, '')
|
|
20
|
+
.slice(0, 60) || 'review'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function assertNoSensitiveKeys(value, trail = []) {
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
value.forEach((entry, index) => assertNoSensitiveKeys(entry, [...trail, String(index)]))
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
if (!value || typeof value !== 'object') return
|
|
29
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
30
|
+
if (SENSITIVE_KEY.test(key)) throw new Error(`critique input contains a forbidden sensitive field: ${[...trail, key].join('.')}`)
|
|
31
|
+
assertNoSensitiveKeys(entry, [...trail, key])
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function validateReview(input) {
|
|
36
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) throw new Error('critique input must be a JSON object')
|
|
37
|
+
if (!Number.isFinite(input.score) || input.score < 0 || input.score > 100) throw new Error('critique score must be between 0 and 100')
|
|
38
|
+
if (!Array.isArray(input.findings)) throw new Error('critique findings must be an array')
|
|
39
|
+
for (const [index, finding] of input.findings.entries()) {
|
|
40
|
+
if (!finding || typeof finding !== 'object') throw new Error(`finding ${index + 1} must be an object`)
|
|
41
|
+
if (!PRIORITIES.has(finding.priority)) throw new Error(`finding ${index + 1} has invalid priority`)
|
|
42
|
+
for (const field of ['title', 'evidence', 'recommendation']) {
|
|
43
|
+
if (typeof finding[field] !== 'string' || !finding[field].trim()) throw new Error(`finding ${index + 1} requires ${field}`)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
assertNoSensitiveKeys(input)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function readInput(inputPath) {
|
|
50
|
+
const text = inputPath === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(inputPath), 'utf8')
|
|
51
|
+
if (Buffer.byteLength(text) > 1_000_000) throw new Error('critique input exceeds 1 MB')
|
|
52
|
+
return JSON.parse(text)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function counts(findings) {
|
|
56
|
+
const summary = { p0: 0, p1: 0, p2: 0, p3: 0 }
|
|
57
|
+
for (const finding of findings) summary[finding.priority.toLowerCase()]++
|
|
58
|
+
return summary
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function markdown(review) {
|
|
62
|
+
const lines = [
|
|
63
|
+
`# Seven critique — ${review.target}`,
|
|
64
|
+
'',
|
|
65
|
+
`- Created: ${review.createdAt}`,
|
|
66
|
+
`- Seven release: ${review.release?.sevenVersion || 'unknown'}`,
|
|
67
|
+
`- Surface: ${review.surface || 'unresolved'}`,
|
|
68
|
+
`- Score: ${review.score}/100`,
|
|
69
|
+
`- Priorities: P0 ${review.summary.p0}, P1 ${review.summary.p1}, P2 ${review.summary.p2}, P3 ${review.summary.p3}`,
|
|
70
|
+
'',
|
|
71
|
+
]
|
|
72
|
+
if (review.strengths?.length) {
|
|
73
|
+
lines.push('## Strengths to preserve', '')
|
|
74
|
+
for (const strength of review.strengths) lines.push(`- ${strength}`)
|
|
75
|
+
lines.push('')
|
|
76
|
+
}
|
|
77
|
+
lines.push('## Findings', '')
|
|
78
|
+
if (review.findings.length === 0) lines.push('No active findings.', '')
|
|
79
|
+
for (const finding of review.findings) {
|
|
80
|
+
lines.push(`### ${finding.priority} — ${finding.title}`, '')
|
|
81
|
+
lines.push(`**Evidence:** ${finding.evidence}`, '')
|
|
82
|
+
if (finding.impact) lines.push(`**Impact:** ${finding.impact}`, '')
|
|
83
|
+
if (finding.rootCause) lines.push(`**Root cause:** ${finding.rootCause}`, '')
|
|
84
|
+
lines.push(`**Direction:** ${finding.recommendation}`, '')
|
|
85
|
+
if (finding.verification) lines.push(`**Verify:** ${finding.verification}`, '')
|
|
86
|
+
}
|
|
87
|
+
if (review.verification) lines.push('## Verification evidence', '', review.verification, '')
|
|
88
|
+
lines.push('This review is evidence, not a visual authority. The installed Seven release remains canonical.', '')
|
|
89
|
+
return lines.join('\n')
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function atomicWrite(filePath, content) {
|
|
93
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true })
|
|
94
|
+
const temporary = `${filePath}.tmp-${process.pid}-${Date.now()}`
|
|
95
|
+
fs.writeFileSync(temporary, content)
|
|
96
|
+
fs.renameSync(temporary, filePath)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export async function writeReview(start, target, input) {
|
|
100
|
+
validateReview(input)
|
|
101
|
+
const root = findRoot(start)
|
|
102
|
+
const context = await loadContext(root, { target })
|
|
103
|
+
let resolvedTarget = target
|
|
104
|
+
if (!/^https?:\/\//i.test(target)) {
|
|
105
|
+
const absolute = path.resolve(root, target)
|
|
106
|
+
const relative = path.relative(root, absolute)
|
|
107
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) throw new Error('critique target escapes the Seven project root')
|
|
108
|
+
resolvedTarget = relative.split(path.sep).join('/') || '.'
|
|
109
|
+
}
|
|
110
|
+
const createdAt = new Date().toISOString()
|
|
111
|
+
const review = {
|
|
112
|
+
schemaVersion: 1,
|
|
113
|
+
createdAt,
|
|
114
|
+
target: resolvedTarget,
|
|
115
|
+
surface: context.surface?.id || null,
|
|
116
|
+
release: context.release ? {
|
|
117
|
+
sevenVersion: context.release.sevenVersion,
|
|
118
|
+
skillVersion: context.release.skillVersion,
|
|
119
|
+
registrySha256: context.release.registrySha256,
|
|
120
|
+
} : null,
|
|
121
|
+
score: input.score,
|
|
122
|
+
summary: counts(input.findings),
|
|
123
|
+
renderedEvidence: input.renderedEvidence || null,
|
|
124
|
+
mechanicalEvidence: input.mechanicalEvidence || null,
|
|
125
|
+
strengths: Array.isArray(input.strengths) ? input.strengths : [],
|
|
126
|
+
findings: input.findings,
|
|
127
|
+
verification: input.verification || null,
|
|
128
|
+
}
|
|
129
|
+
const stamp = createdAt.replace(/[:.]/g, '-').replace(/-000Z$/, 'Z')
|
|
130
|
+
const base = path.join(root, '.seven', 'reviews', `${stamp}-${slug(context.surface?.id || resolvedTarget)}`)
|
|
131
|
+
atomicWrite(`${base}.json`, `${JSON.stringify(review, null, 2)}\n`)
|
|
132
|
+
atomicWrite(`${base}.md`, markdown(review))
|
|
133
|
+
return {
|
|
134
|
+
review,
|
|
135
|
+
json: path.relative(root, `${base}.json`).split(path.sep).join('/'),
|
|
136
|
+
markdown: path.relative(root, `${base}.md`).split(path.sep).join('/'),
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export async function main(argv = process.argv) {
|
|
141
|
+
const action = argv[2]
|
|
142
|
+
if (action !== 'write') throw new Error('usage: critique-storage.mjs write --target <target> --input <review.json|->')
|
|
143
|
+
const target = argValue('--target', argv)
|
|
144
|
+
const inputPath = argValue('--input', argv)
|
|
145
|
+
if (!target || !inputPath) throw new Error('write requires --target and --input')
|
|
146
|
+
const result = await writeReview(process.cwd(), target, readInput(inputPath))
|
|
147
|
+
process.stdout.write(`${JSON.stringify({ json: result.json, markdown: result.markdown, summary: result.review.summary }, null, 2)}\n`)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))) {
|
|
151
|
+
main().catch((error) => {
|
|
152
|
+
process.stderr.write(`${error.message}\n`)
|
|
153
|
+
process.exitCode = 1
|
|
154
|
+
})
|
|
155
|
+
}
|
|
@@ -1,84 +1,111 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
// ETUS Digital — Seven
|
|
3
|
+
// ETUS Digital — Seven consumer context adapter.
|
|
4
4
|
|
|
5
5
|
import fs from 'node:fs'
|
|
6
6
|
import path from 'node:path'
|
|
7
|
+
import { createRequire } from 'node:module'
|
|
8
|
+
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
const DESIGN_NAMES = ['DESIGN.md', 'Design.md', 'design.md']
|
|
10
|
-
const FALLBACK_DIRS = ['.agents/context', 'docs']
|
|
10
|
+
import { checkForUpdate } from './update-check.mjs'
|
|
11
11
|
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return null
|
|
12
|
+
export function argValue(name, argv = process.argv) {
|
|
13
|
+
const direct = argv.find((arg) => arg.startsWith(`${name}=`))
|
|
14
|
+
if (direct) return direct.slice(name.length + 1)
|
|
15
|
+
const index = argv.indexOf(name)
|
|
16
|
+
return index >= 0 ? argv[index + 1] : null
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
function
|
|
19
|
+
export function findRoot(start) {
|
|
20
|
+
let current = path.resolve(start)
|
|
21
21
|
try {
|
|
22
|
-
|
|
23
|
-
} catch {
|
|
24
|
-
|
|
22
|
+
if (fs.statSync(current).isFile()) current = path.dirname(current)
|
|
23
|
+
} catch {}
|
|
24
|
+
const fallbackRoot = current
|
|
25
|
+
while (true) {
|
|
26
|
+
if (fs.existsSync(path.join(current, '.seven', 'project.yml'))) return current
|
|
27
|
+
if (fs.existsSync(path.join(current, 'seven.json'))) return current
|
|
28
|
+
const parent = path.dirname(current)
|
|
29
|
+
if (parent === current) break
|
|
30
|
+
current = parent
|
|
25
31
|
}
|
|
32
|
+
return fallbackRoot
|
|
26
33
|
}
|
|
27
34
|
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (firstExisting(cwd, [...PRODUCT_NAMES, ...DESIGN_NAMES])) return cwd
|
|
38
|
-
|
|
39
|
-
for (const rel of FALLBACK_DIRS) {
|
|
40
|
-
const candidate = path.resolve(cwd, rel)
|
|
41
|
-
if (firstExisting(candidate, [...PRODUCT_NAMES, ...DESIGN_NAMES])) return candidate
|
|
35
|
+
export async function loadFromInstalledRuntime(root, target) {
|
|
36
|
+
try {
|
|
37
|
+
const require = createRequire(path.join(root, 'package.json'))
|
|
38
|
+
const manifest = require.resolve('@etus/seven/package.json')
|
|
39
|
+
const moduleUrl = pathToFileURL(path.join(path.dirname(manifest), 'lib', 'context.mjs')).href
|
|
40
|
+
const runtime = await import(moduleUrl)
|
|
41
|
+
return runtime.loadConsumerContext(root, { target })
|
|
42
|
+
} catch (error) {
|
|
43
|
+
return { runtimeError: error instanceof Error ? error.message : String(error) }
|
|
42
44
|
}
|
|
43
|
-
|
|
44
|
-
return cwd
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
export function fallback(root, target, runtimeError) {
|
|
48
|
+
const productPath = path.join(root, 'PRODUCT.md')
|
|
49
|
+
const product = fs.existsSync(productPath) ? fs.readFileSync(productPath, 'utf8') : null
|
|
50
|
+
let release = null
|
|
51
|
+
try {
|
|
52
|
+
release = JSON.parse(fs.readFileSync(path.join(root, '.seven', 'release.lock.json'), 'utf8'))
|
|
53
|
+
} catch {}
|
|
54
|
+
return {
|
|
55
|
+
schemaVersion: 1,
|
|
56
|
+
projectRoot: root,
|
|
57
|
+
target: path.resolve(target),
|
|
58
|
+
hasProduct: Boolean(product),
|
|
59
|
+
product,
|
|
60
|
+
productPath: product ? 'PRODUCT.md' : null,
|
|
61
|
+
productPlaceholder: !product || product.trim().length < 200 || /\b(?:TODO|TBD|placeholder)\b/i.test(product),
|
|
62
|
+
register: null,
|
|
63
|
+
project: null,
|
|
64
|
+
release,
|
|
65
|
+
surface: null,
|
|
66
|
+
runtimeAvailable: false,
|
|
67
|
+
runtimeError,
|
|
68
|
+
}
|
|
53
69
|
}
|
|
54
70
|
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
71
|
+
export async function loadContext(start = process.cwd(), { target = start } = {}) {
|
|
72
|
+
const root = findRoot(start)
|
|
73
|
+
const loaded = await loadFromInstalledRuntime(root, target)
|
|
74
|
+
return loaded.runtimeError ? fallback(root, target, loaded.runtimeError) : loaded
|
|
58
75
|
}
|
|
59
76
|
|
|
60
|
-
export function
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const design = designPath ? safeRead(designPath) : null
|
|
66
|
-
|
|
77
|
+
export function contextForAgent(context) {
|
|
78
|
+
const artifacts = context.release?.artifacts
|
|
79
|
+
if (!artifacts || typeof artifacts !== 'object') return context
|
|
80
|
+
const { artifacts: _artifacts, ...release } = context.release
|
|
81
|
+
const entries = Object.values(artifacts)
|
|
67
82
|
return {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
...context,
|
|
84
|
+
release: {
|
|
85
|
+
...release,
|
|
86
|
+
artifactSummary: {
|
|
87
|
+
total: entries.length,
|
|
88
|
+
managed: entries.filter((entry) => entry?.kind === 'managed').length,
|
|
89
|
+
scaffold: entries.filter((entry) => entry?.kind === 'scaffold').length,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
77
92
|
}
|
|
78
93
|
}
|
|
79
94
|
|
|
80
|
-
function
|
|
81
|
-
process.
|
|
95
|
+
export async function main(argv = process.argv) {
|
|
96
|
+
const target = argValue('--target', argv) || process.env.SEVEN_TARGET || process.cwd()
|
|
97
|
+
const context = await loadContext(target, { target })
|
|
98
|
+
const update = await checkForUpdate(context.release?.sevenVersion || null)
|
|
99
|
+
process.stdout.write(`${JSON.stringify({ ...contextForAgent(context), update }, null, 2)}\n`)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function isCliEntry() {
|
|
103
|
+
if (!process.argv[1]) return false
|
|
104
|
+
try {
|
|
105
|
+
return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(process.argv[1])
|
|
106
|
+
} catch {
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
82
109
|
}
|
|
83
110
|
|
|
84
|
-
if (
|
|
111
|
+
if (isCliEntry()) await main()
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
// ETUS Digital — package-manager-independent Seven CLI runner.
|
|
4
|
+
|
|
5
|
+
import fs from 'node:fs'
|
|
6
|
+
import path from 'node:path'
|
|
7
|
+
import { spawnSync } from 'node:child_process'
|
|
8
|
+
import { createRequire } from 'node:module'
|
|
9
|
+
import { fileURLToPath } from 'node:url'
|
|
10
|
+
|
|
11
|
+
import { findRoot } from './load-context.mjs'
|
|
12
|
+
|
|
13
|
+
export function resolveSevenCli(start = process.cwd()) {
|
|
14
|
+
const root = findRoot(start)
|
|
15
|
+
const require = createRequire(path.join(root, 'package.json'))
|
|
16
|
+
const manifestPath = require.resolve('@etus/seven/package.json')
|
|
17
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'))
|
|
18
|
+
const bin = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.seven
|
|
19
|
+
if (!bin) throw new Error(`@etus/seven at ${manifestPath} does not declare the seven binary`)
|
|
20
|
+
return {
|
|
21
|
+
binPath: path.resolve(path.dirname(manifestPath), bin),
|
|
22
|
+
root,
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function runSeven(argv = process.argv.slice(2), start = process.cwd()) {
|
|
27
|
+
if (argv.length === 0) throw new Error('usage: run-seven.mjs <seven-command> [arguments]')
|
|
28
|
+
const { binPath, root } = resolveSevenCli(start)
|
|
29
|
+
const result = spawnSync(process.execPath, [binPath, ...argv], {
|
|
30
|
+
cwd: root,
|
|
31
|
+
env: process.env,
|
|
32
|
+
stdio: 'inherit',
|
|
33
|
+
})
|
|
34
|
+
if (result.error) throw result.error
|
|
35
|
+
return result.status ?? 1
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isCliEntry() {
|
|
39
|
+
if (!process.argv[1]) return false
|
|
40
|
+
try {
|
|
41
|
+
return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(process.argv[1])
|
|
42
|
+
} catch {
|
|
43
|
+
return false
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (isCliEntry()) process.exitCode = runSeven()
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import fs from 'node:fs'
|
|
5
|
+
import os from 'node:os'
|
|
6
|
+
import path from 'node:path'
|
|
7
|
+
|
|
8
|
+
const DAY_MS = 24 * 60 * 60 * 1000
|
|
9
|
+
const WEEK_MS = 7 * DAY_MS
|
|
10
|
+
|
|
11
|
+
function cachePath(env = process.env) {
|
|
12
|
+
return env.SEVEN_UPDATE_CACHE || path.join(os.homedir(), '.seven', 'update-check.json')
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function readCache(env) {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(fs.readFileSync(cachePath(env), 'utf8'))
|
|
18
|
+
return parsed && typeof parsed === 'object' ? parsed : {}
|
|
19
|
+
} catch {
|
|
20
|
+
return {}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function writeCache(cache, env) {
|
|
25
|
+
try {
|
|
26
|
+
const destination = cachePath(env)
|
|
27
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true })
|
|
28
|
+
fs.writeFileSync(destination, `${JSON.stringify(cache, null, 2)}\n`)
|
|
29
|
+
} catch {
|
|
30
|
+
// Update discovery is best-effort and must never block the UI workflow.
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function semverParts(value) {
|
|
35
|
+
const match = String(value || '').trim().match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/)
|
|
36
|
+
if (!match) return null
|
|
37
|
+
return {
|
|
38
|
+
core: [Number(match[1]), Number(match[2]), Number(match[3])],
|
|
39
|
+
prerelease: match[4] ? match[4].split('.') : [],
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function compareIdentifier(left, right) {
|
|
44
|
+
const leftNumber = /^\d+$/.test(left) ? Number(left) : null
|
|
45
|
+
const rightNumber = /^\d+$/.test(right) ? Number(right) : null
|
|
46
|
+
if (leftNumber != null && rightNumber != null) return Math.sign(leftNumber - rightNumber)
|
|
47
|
+
if (leftNumber != null) return -1
|
|
48
|
+
if (rightNumber != null) return 1
|
|
49
|
+
return left.localeCompare(right)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function compareSemver(left, right) {
|
|
53
|
+
const a = semverParts(left)
|
|
54
|
+
const b = semverParts(right)
|
|
55
|
+
if (!a || !b) return 0
|
|
56
|
+
for (let index = 0; index < 3; index++) {
|
|
57
|
+
if (a.core[index] !== b.core[index]) return Math.sign(a.core[index] - b.core[index])
|
|
58
|
+
}
|
|
59
|
+
if (a.prerelease.length === 0 && b.prerelease.length > 0) return 1
|
|
60
|
+
if (b.prerelease.length === 0 && a.prerelease.length > 0) return -1
|
|
61
|
+
for (let index = 0; index < Math.max(a.prerelease.length, b.prerelease.length); index++) {
|
|
62
|
+
if (a.prerelease[index] == null) return -1
|
|
63
|
+
if (b.prerelease[index] == null) return 1
|
|
64
|
+
const compared = compareIdentifier(a.prerelease[index], b.prerelease[index])
|
|
65
|
+
if (compared !== 0) return compared
|
|
66
|
+
}
|
|
67
|
+
return 0
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function fetchLatest(env) {
|
|
71
|
+
const registry = (env.SEVEN_UPDATE_REGISTRY || 'https://registry.npmjs.org').replace(/\/$/, '')
|
|
72
|
+
const controller = new AbortController()
|
|
73
|
+
const timeout = setTimeout(() => controller.abort(), 1500)
|
|
74
|
+
try {
|
|
75
|
+
const response = await fetch(`${registry}/%40etus%2Fseven/latest`, {
|
|
76
|
+
headers: { accept: 'application/json' },
|
|
77
|
+
signal: controller.signal,
|
|
78
|
+
})
|
|
79
|
+
if (!response.ok) return null
|
|
80
|
+
const payload = await response.json()
|
|
81
|
+
return typeof payload?.version === 'string' ? payload.version : null
|
|
82
|
+
} catch {
|
|
83
|
+
return null
|
|
84
|
+
} finally {
|
|
85
|
+
clearTimeout(timeout)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function checkForUpdate(currentVersion, { env = process.env, now = Date.now() } = {}) {
|
|
90
|
+
if (!currentVersion || env.SEVEN_NO_UPDATE_CHECK) return null
|
|
91
|
+
const cache = readCache(env)
|
|
92
|
+
const fresh = typeof cache.checkedAt === 'number' && now - cache.checkedAt < DAY_MS
|
|
93
|
+
let latestVersion = fresh ? cache.latestVersion : await fetchLatest(env)
|
|
94
|
+
if (!latestVersion) latestVersion = cache.latestVersion || null
|
|
95
|
+
if (!fresh && latestVersion) {
|
|
96
|
+
cache.checkedAt = now
|
|
97
|
+
cache.latestVersion = latestVersion
|
|
98
|
+
}
|
|
99
|
+
if (!latestVersion) return null
|
|
100
|
+
|
|
101
|
+
const available = compareSemver(latestVersion, currentVersion) > 0
|
|
102
|
+
const notify = available && (
|
|
103
|
+
cache.notifiedVersion !== latestVersion ||
|
|
104
|
+
typeof cache.notifiedAt !== 'number' ||
|
|
105
|
+
now - cache.notifiedAt >= WEEK_MS
|
|
106
|
+
)
|
|
107
|
+
if (notify) {
|
|
108
|
+
cache.notifiedVersion = latestVersion
|
|
109
|
+
cache.notifiedAt = now
|
|
110
|
+
}
|
|
111
|
+
writeCache(cache, env)
|
|
112
|
+
return {
|
|
113
|
+
package: '@etus/seven',
|
|
114
|
+
currentVersion,
|
|
115
|
+
latestVersion,
|
|
116
|
+
available,
|
|
117
|
+
notify,
|
|
118
|
+
command: `pnpm add -D @etus/seven@${latestVersion} && pnpm exec seven update`,
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "seven",
|
|
14
|
-
"description": "Seven Design System
|
|
15
|
-
"version": "0.1.0-beta.
|
|
14
|
+
"description": "Provider-native Seven Design System skills and deterministic UI detector runtime for @etus/seven consumers — ETUS Digital",
|
|
15
|
+
"version": "0.1.0-beta.5",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "ETUS Digital",
|
|
18
18
|
"url": "https://github.com/etusdigital"
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seven",
|
|
3
|
-
"description": "Seven Design System
|
|
4
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"description": "Provider-native Seven Design System skills and deterministic UI detector runtime for @etus/seven consumers — ETUS Digital",
|
|
4
|
+
"version": "0.1.0-beta.5",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "ETUS Digital",
|
|
7
7
|
"url": "https://github.com/etusdigital"
|
|
8
8
|
},
|
|
9
9
|
"homepage": "https://github.com/etusdigital/seven#readme",
|
|
10
10
|
"repository": "https://github.com/etusdigital/seven.git",
|
|
11
|
-
"skills": "./.claude/skills/"
|
|
11
|
+
"skills": "./.claude/skills/",
|
|
12
|
+
"agents": [
|
|
13
|
+
"./.claude/agents/seven-asset-producer.md",
|
|
14
|
+
"./.claude/agents/seven-finish-reviewer.md",
|
|
15
|
+
"./.claude/agents/seven-manual-edit-applier.md"
|
|
16
|
+
]
|
|
12
17
|
}
|