@su-record/vibe 3.2.1 → 3.2.3
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/CLAUDE.md +1 -1
- package/README.en.md +4 -4
- package/README.md +4 -4
- package/dist/__tests__/skill-namespace.test.d.ts +2 -0
- package/dist/__tests__/skill-namespace.test.d.ts.map +1 -0
- package/dist/__tests__/skill-namespace.test.js +60 -0
- package/dist/__tests__/skill-namespace.test.js.map +1 -0
- package/dist/__tests__/stakes-contract.test.d.ts +2 -0
- package/dist/__tests__/stakes-contract.test.d.ts.map +1 -0
- package/dist/__tests__/stakes-contract.test.js +110 -0
- package/dist/__tests__/stakes-contract.test.js.map +1 -0
- package/dist/__tests__/wiring-integrity.test.js +5 -5
- package/dist/__tests__/wiring-integrity.test.js.map +1 -1
- package/dist/cli/generate-release-notes.d.ts +3 -0
- package/dist/cli/generate-release-notes.d.ts.map +1 -0
- package/dist/cli/generate-release-notes.js +47 -0
- package/dist/cli/generate-release-notes.js.map +1 -0
- package/dist/cli/postinstall/constants.d.ts +6 -6
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +114 -46
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/fs-utils.d.ts +1 -0
- package/dist/cli/postinstall/fs-utils.d.ts.map +1 -1
- package/dist/cli/postinstall/fs-utils.js +25 -0
- package/dist/cli/postinstall/fs-utils.js.map +1 -1
- package/dist/cli/postinstall/fs-utils.test.js +46 -11
- package/dist/cli/postinstall/fs-utils.test.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +3 -2
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/tests/curated-release-notes.test.d.ts +2 -0
- package/dist/tests/curated-release-notes.test.d.ts.map +1 -0
- package/dist/tests/curated-release-notes.test.js +106 -0
- package/dist/tests/curated-release-notes.test.js.map +1 -0
- package/dist/tools/release/releaseNotes.d.ts +21 -0
- package/dist/tools/release/releaseNotes.d.ts.map +1 -0
- package/dist/tools/release/releaseNotes.js +105 -0
- package/dist/tools/release/releaseNotes.js.map +1 -0
- package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -3
- package/package.json +2 -2
- package/skills/vibe/SKILL.md +14 -0
- package/skills/{agents-md → vibe.agents-md}/SKILL.md +1 -1
- package/skills/{brand-assets → vibe.brand-assets}/SKILL.md +1 -1
- package/skills/{capability-loop → vibe.capability-loop}/SKILL.md +1 -1
- package/skills/{chub-usage → vibe.chub-usage}/SKILL.md +1 -1
- package/skills/vibe.clone/SKILL.md +295 -3
- package/skills/{commerce-patterns → vibe.commerce-patterns}/SKILL.md +1 -1
- package/skills/{commit-push-pr → vibe.commit-push-pr}/SKILL.md +2 -2
- package/skills/{context7-usage → vibe.context7-usage}/SKILL.md +1 -1
- package/skills/vibe.contract/SKILL.md +162 -1
- package/skills/{create-prd → vibe.create-prd}/SKILL.md +2 -2
- package/skills/{design-refine → vibe.design-refine}/SKILL.md +1 -1
- package/skills/{design-review → vibe.design-review}/SKILL.md +1 -1
- package/skills/{design-teach → vibe.design-teach}/SKILL.md +1 -1
- package/skills/{devlog → vibe.devlog}/SKILL.md +1 -1
- package/skills/vibe.docs/SKILL.md +256 -1
- package/skills/{e2e-commerce → vibe.e2e-commerce}/SKILL.md +1 -1
- package/skills/vibe.educational-content/SKILL.md +157 -0
- package/skills/vibe.educational-content/references/learning-design.md +81 -0
- package/skills/vibe.educational-content/references/output-patterns.md +109 -0
- package/skills/vibe.educational-content/references/source-method.md +40 -0
- package/skills/{event-comms → vibe.event-comms}/SKILL.md +1 -1
- package/skills/{event-ops → vibe.event-ops}/SKILL.md +1 -1
- package/skills/{event-planning → vibe.event-planning}/SKILL.md +1 -1
- package/skills/vibe.figma/SKILL.md +473 -21
- package/skills/vibe.figma/references/branch-phases.md +1 -1
- package/skills/{git-worktree → vibe.git-worktree}/SKILL.md +1 -1
- package/skills/{handoff → vibe.handoff}/SKILL.md +1 -1
- package/skills/{parallel-research → vibe.parallel-research}/SKILL.md +2 -2
- package/skills/{presentation → vibe.presentation}/SKILL.md +1 -1
- package/skills/{prioritization-frameworks → vibe.prioritization}/SKILL.md +2 -2
- package/skills/{priority-todos → vibe.priority-todos}/SKILL.md +1 -1
- package/skills/{vercel-react-best-practices → vibe.react-best-practices}/SKILL.md +1 -1
- package/skills/vibe.regress/SKILL.md +182 -2
- package/skills/vibe.review/SKILL.md +8 -0
- package/skills/vibe.run/SKILL.md +392 -1
- package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/violation-report.md +1 -1
- package/skills/{seo-checklist → vibe.seo-checklist}/SKILL.md +1 -1
- package/skills/vibe.spec/SKILL.md +123 -1
- package/skills/vibe.test/SKILL.md +138 -2
- package/skills/{tool-fallback → vibe.tool-fallback}/SKILL.md +1 -1
- package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/SKILL.md +6 -6
- package/skills/{user-personas → vibe.user-personas}/SKILL.md +2 -2
- package/skills/vibe.verify/SKILL.md +2 -2
- package/skills/{video-production → vibe.video-production}/SKILL.md +1 -1
- package/vibe/rules/loop-contract.md +18 -0
- package/skills/arch-guard/SKILL.md +0 -183
- package/skills/clone/SKILL.md +0 -296
- package/skills/contract/SKILL.md +0 -165
- package/skills/docs/SKILL.md +0 -259
- package/skills/exec-plan/SKILL.md +0 -151
- package/skills/figma/SKILL.md +0 -456
- package/skills/regress/SKILL.md +0 -184
- package/skills/restraint/SKILL.md +0 -72
- package/skills/spec/SKILL.md +0 -125
- package/skills/test/SKILL.md +0 -140
- /package/skills/{agents-md → vibe.agents-md}/rubrics/what-to-keep.md +0 -0
- /package/skills/{agents-md → vibe.agents-md}/templates/agents-md.md +0 -0
- /package/skills/{agents-md → vibe.agents-md}/templates/claude-md.md +0 -0
- /package/skills/{brand-assets → vibe.brand-assets}/rubrics/asset-checklist.md +0 -0
- /package/skills/{brand-assets → vibe.brand-assets}/templates/brand-guide.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/agents/capability-designer.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/agents/failure-analyst.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/agents/implementer.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/agents/tester.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/templates/capability-spec.md +0 -0
- /package/skills/{capability-loop → vibe.capability-loop}/templates/failure-analysis.md +0 -0
- /package/skills/{clone → vibe.clone}/references/capture-rules.md +0 -0
- /package/skills/{clone → vibe.clone}/references/legal-and-error-recovery.md +0 -0
- /package/skills/{clone → vibe.clone}/references/refine-rules.md +0 -0
- /package/skills/{clone → vibe.clone}/references/scaffold-phases.md +0 -0
- /package/skills/{clone → vibe.clone}/references/setup-and-layout.md +0 -0
- /package/skills/{commerce-patterns → vibe.commerce-patterns}/rubrics/checkout-flow.md +0 -0
- /package/skills/{commerce-patterns → vibe.commerce-patterns}/templates/product-schema.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/change-analyzer.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/message-writer.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/pr-writer.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/agents/reviewer.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/rubrics/commit-message.md +0 -0
- /package/skills/{commit-push-pr → vibe.commit-push-pr}/templates/pr-body.md +0 -0
- /package/skills/{context7-usage → vibe.context7-usage}/rubrics/when-to-use.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/agents/edge-case-finder.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/agents/prioritizer.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/agents/requirements-writer.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/agents/researcher.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/agents/reviewer.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/frameworks/jobs-to-be-done.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/frameworks/rice-scoring.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/orchestrator.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/rubrics/completeness.md +0 -0
- /package/skills/{create-prd → vibe.create-prd}/templates/prd.md +0 -0
- /package/skills/{design-refine → vibe.design-refine}/rubrics/polish-checklist.md +0 -0
- /package/skills/{design-refine → vibe.design-refine}/rubrics/token-naming.md +0 -0
- /package/skills/{design-refine → vibe.design-refine}/templates/design-system.md +0 -0
- /package/skills/{design-refine → vibe.design-refine}/templates/polish-report.md +0 -0
- /package/skills/{design-refine → vibe.design-refine}/templates/token-audit.md +0 -0
- /package/skills/{design-review → vibe.design-review}/agents/a11y-auditor.md +0 -0
- /package/skills/{design-review → vibe.design-review}/agents/performance-auditor.md +0 -0
- /package/skills/{design-review → vibe.design-review}/agents/responsive-auditor.md +0 -0
- /package/skills/{design-review → vibe.design-review}/agents/scorer.md +0 -0
- /package/skills/{design-review → vibe.design-review}/agents/slop-detector.md +0 -0
- /package/skills/{design-review → vibe.design-review}/frameworks/core-web-vitals.md +0 -0
- /package/skills/{design-review → vibe.design-review}/frameworks/wcag-checklist.md +0 -0
- /package/skills/{design-review → vibe.design-review}/orchestrator.md +0 -0
- /package/skills/{design-review → vibe.design-review}/rubrics/ai-slop-patterns.md +0 -0
- /package/skills/{design-review → vibe.design-review}/rubrics/scoring.md +0 -0
- /package/skills/{design-review → vibe.design-review}/rubrics/ux-heuristics.md +0 -0
- /package/skills/{design-review → vibe.design-review}/templates/critique-report.md +0 -0
- /package/skills/{design-review → vibe.design-review}/templates/report.md +0 -0
- /package/skills/{design-teach → vibe.design-teach}/rubrics/brand-personality.md +0 -0
- /package/skills/{design-teach → vibe.design-teach}/templates/design-context.json +0 -0
- /package/skills/{docs → vibe.docs}/references/api-docs-changelog.md +0 -0
- /package/skills/{docs → vibe.docs}/references/codemaps-output.md +0 -0
- /package/skills/{docs → vibe.docs}/references/diagram-spec.md +0 -0
- /package/skills/{docs → vibe.docs}/templates/architecture.md +0 -0
- /package/skills/{docs → vibe.docs}/templates/behavioral-principles.md +0 -0
- /package/skills/{docs → vibe.docs}/templates/readme.md +0 -0
- /package/skills/{docs → vibe.docs}/templates/release-notes.md +0 -0
- /package/skills/{e2e-commerce → vibe.e2e-commerce}/templates/test-scenarios.md +0 -0
- /package/skills/{event-comms → vibe.event-comms}/templates/email-invite.md +0 -0
- /package/skills/{event-comms → vibe.event-comms}/templates/sns-post.md +0 -0
- /package/skills/{event-ops → vibe.event-ops}/rubrics/contingency.md +0 -0
- /package/skills/{event-ops → vibe.event-ops}/templates/d-day-checklist.md +0 -0
- /package/skills/{event-planning → vibe.event-planning}/rubrics/timeline.md +0 -0
- /package/skills/{event-planning → vibe.event-planning}/templates/event-plan.md +0 -0
- /package/skills/{figma → vibe.figma}/rubrics/conversion-rules.md +0 -0
- /package/skills/{figma → vibe.figma}/rubrics/css-mapping.md +0 -0
- /package/skills/{figma → vibe.figma}/rubrics/extraction-checklist.md +0 -0
- /package/skills/{figma → vibe.figma}/rubrics/image-rules.md +0 -0
- /package/skills/{figma → vibe.figma}/templates/component-index.md +0 -0
- /package/skills/{figma → vibe.figma}/templates/component-spec.md +0 -0
- /package/skills/{figma → vibe.figma}/templates/component.md +0 -0
- /package/skills/{figma → vibe.figma}/templates/figma-handoff.md +0 -0
- /package/skills/{figma → vibe.figma}/templates/remapped-tree.md +0 -0
- /package/skills/{git-worktree → vibe.git-worktree}/rubrics/when-to-use.md +0 -0
- /package/skills/{handoff → vibe.handoff}/agents/context-summarizer.md +0 -0
- /package/skills/{handoff → vibe.handoff}/agents/document-writer.md +0 -0
- /package/skills/{handoff → vibe.handoff}/agents/state-collector.md +0 -0
- /package/skills/{handoff → vibe.handoff}/agents/verifier.md +0 -0
- /package/skills/{handoff → vibe.handoff}/rubrics/completeness.md +0 -0
- /package/skills/{handoff → vibe.handoff}/templates/handoff.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/agents/best-practices.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/agents/codebase-patterns.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/agents/framework-docs.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/agents/security-advisory.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/agents/synthesizer.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/experts/best-practices.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/experts/codebase-patterns.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/experts/framework-docs.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/experts/security-advisory.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/orchestrator.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/templates/awesome-list.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/templates/paper.md +0 -0
- /package/skills/{parallel-research → vibe.parallel-research}/templates/synthesis.md +0 -0
- /package/skills/{presentation → vibe.presentation}/references/style-presets.md +0 -0
- /package/skills/{prioritization-frameworks → vibe.prioritization}/rubrics/frameworks.md +0 -0
- /package/skills/{prioritization-frameworks → vibe.prioritization}/templates/scoring-matrix.md +0 -0
- /package/skills/{priority-todos → vibe.priority-todos}/rubrics/prioritization.md +0 -0
- /package/skills/{priority-todos → vibe.priority-todos}/templates/todo-board.md +0 -0
- /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/performance.md +0 -0
- /package/skills/{vercel-react-best-practices → vibe.react-best-practices}/rubrics/server-components.md +0 -0
- /package/skills/{regress → vibe.regress}/templates/bug.md +0 -0
- /package/skills/{regress → vibe.regress}/templates/test-jest.md +0 -0
- /package/skills/{regress → vibe.regress}/templates/test-vitest.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/detector.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/reporter.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/rule-generator.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/agents/violation-checker.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/clean-architecture.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/frameworks/solid.md +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/scripts/check-boundaries.js +0 -0
- /package/skills/{arch-guard → vibe.run/internal/arch-guard}/templates/arch-rules.json +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/decomposer.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/dependency-mapper.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/estimator.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/agents/validator.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/orchestrator.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/rubrics/complexity-scoring.md +0 -0
- /package/skills/{exec-plan → vibe.run/internal/exec-plan}/templates/plan.md +0 -0
- /package/skills/{seo-checklist → vibe.seo-checklist}/frameworks/structured-data.md +0 -0
- /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/content-seo.md +0 -0
- /package/skills/{seo-checklist → vibe.seo-checklist}/rubrics/technical-seo.md +0 -0
- /package/skills/{tool-fallback → vibe.tool-fallback}/rubrics/fallback-chain.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/color-and-contrast.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/interaction-design.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/motion-design.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/responsive-design.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/spatial-design.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/typography.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/reference/ux-writing.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/interaction-states.md +0 -0
- /package/skills/{ui-ux-pro-max → vibe.ui-ux-pro-max}/rubrics/responsive-breakpoints.md +0 -0
- /package/skills/{user-personas → vibe.user-personas}/rubrics/research-methods.md +0 -0
- /package/skills/{user-personas → vibe.user-personas}/templates/persona.md +0 -0
- /package/skills/{video-production → vibe.video-production}/rubrics/quality-checklist.md +0 -0
- /package/skills/{video-production → vibe.video-production}/templates/production-plan.md +0 -0
package/CLAUDE.md
CHANGED
|
@@ -126,7 +126,7 @@ $vibe "<requirement>" [+ 📎 attachments] # Codex
|
|
|
126
126
|
|
|
127
127
|
## Skill Tiers
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
Public skills use the `vibe.*` namespace and are classified as **entry** / **standard** / **optional or project-local**. Core behavior is bundled inside the relevant public skill and is never exposed as a separate discovery entry. SSOT: `GLOBAL_SKILLS_ENTRY`, `GLOBAL_SKILLS_STANDARD`, and the stack/capability mappings in `src/cli/postinstall/constants.ts`.
|
|
130
130
|
|
|
131
131
|
## Context Management
|
|
132
132
|
|
package/README.en.md
CHANGED
|
@@ -189,13 +189,13 @@ Detection at edit time, blocking at deterministic gates:
|
|
|
189
189
|
|
|
190
190
|
**7+ agents** — 7 global goal-oriented agents (architect, implementer, tester, code-reviewer, security-reviewer, …) + 4 conditional (UI/Event — installed project-locally only when the stack/capability matches; 11 total). Agents are delegated by goal + constraints + Done criteria, not step scripts; exploration, planning, and parallelism use the harness's native subagents directly.
|
|
191
191
|
|
|
192
|
-
**
|
|
192
|
+
**51 skills** — Not all loaded at once. Every public skill uses the `vibe.*` namespace, while internal core behavior is bundled into the public skill body:
|
|
193
193
|
|
|
194
194
|
| Tier | When loaded | Purpose | Examples |
|
|
195
195
|
|------|-------------|---------|----------|
|
|
196
|
-
| **
|
|
197
|
-
| **Standard** |
|
|
198
|
-
| **Optional** | Explicit
|
|
196
|
+
| **Entry** | Globally installed | Public workflow entry points | vibe.spec, vibe.test, vibe.docs |
|
|
197
|
+
| **Standard** | Globally installed | Shared workflow support | vibe.handoff, vibe.agents-md |
|
|
198
|
+
| **Optional/Local** | Explicit invocation or project install | Stack/capability support | vibe.chub-usage, vibe.design-review |
|
|
199
199
|
|
|
200
200
|
Skills teach only what the model doesn't know (domain gotchas, current APIs, project conventions). Skills that re-taught basics like "how to debug" were deleted in v3.
|
|
201
201
|
|
package/README.md
CHANGED
|
@@ -161,13 +161,13 @@ codex
|
|
|
161
161
|
|
|
162
162
|
**7+ 에이전트** — 전역 7개(architect, implementer, tester, code-reviewer, security-reviewer 등) + 조건부 그룹 4개(UI/Event — 해당 스택 프로젝트에만 로컬 설치, 총 11개). 단계별 지시 스크립트가 아니라 목표+제약+Done 기준으로 위임하고, 탐색·계획·병렬 실행은 하네스의 네이티브 서브에이전트를 그대로 사용합니다.
|
|
163
163
|
|
|
164
|
-
**
|
|
164
|
+
**51개 스킬** — 한 번에 다 로드되지 않음. 공개 스킬은 모두 `vibe.*` namespace를 사용하며, 내부 core 동작은 공개 스킬 본문에 통합됩니다:
|
|
165
165
|
|
|
166
166
|
| 티어 | 로드 시점 | 용도 | 예시 |
|
|
167
167
|
|------|----------|------|------|
|
|
168
|
-
| **
|
|
169
|
-
| **Standard** |
|
|
170
|
-
| **Optional** |
|
|
168
|
+
| **Entry** | 전역 설치 | 공개 워크플로 진입점 | vibe.spec, vibe.test, vibe.docs |
|
|
169
|
+
| **Standard** | 전역 설치 | 공통 워크플로 지원 | vibe.handoff, vibe.agents-md |
|
|
170
|
+
| **Optional/Local** | 명시 호출 또는 프로젝트별 설치 | 스택·capability 지원 | vibe.chub-usage, vibe.design-review |
|
|
171
171
|
|
|
172
172
|
스킬이 가르치는 것은 모델이 모르는 것(도메인 gotcha, 최신 API, 프로젝트 규약)뿐입니다. 디버깅하는 법 같은 기본기 재교육 스킬은 v3에서 전부 삭제됐습니다.
|
|
173
173
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-namespace.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill-namespace.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { CAPABILITY_SKILLS, GLOBAL_SKILLS, GLOBAL_SKILLS_OPTIONAL, STACK_TO_SKILLS, } from '../cli/postinstall/constants.js';
|
|
5
|
+
const SKILLS_DIR = resolve('skills');
|
|
6
|
+
const MAX_SKILL_NAME_LENGTH = 32;
|
|
7
|
+
function skillNames() {
|
|
8
|
+
return readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
9
|
+
.filter((entry) => entry.isDirectory() && existsSync(resolve(SKILLS_DIR, entry.name, 'SKILL.md')))
|
|
10
|
+
.map((entry) => {
|
|
11
|
+
const content = readFileSync(resolve(SKILLS_DIR, entry.name, 'SKILL.md'), 'utf8');
|
|
12
|
+
const name = /^name:\s*(.+)$/m.exec(content)?.[1]?.trim() ?? '';
|
|
13
|
+
return { directory: entry.name, name };
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function mappedSkills() {
|
|
17
|
+
const stackSkills = Object.values(STACK_TO_SKILLS).flat();
|
|
18
|
+
const capabilitySkills = Object.values(CAPABILITY_SKILLS).flat();
|
|
19
|
+
return [...GLOBAL_SKILLS, ...GLOBAL_SKILLS_OPTIONAL, ...stackSkills, ...capabilitySkills];
|
|
20
|
+
}
|
|
21
|
+
describe('skill namespace contract', () => {
|
|
22
|
+
it('REQ-skill-namespace-001 namespaces every exposed skill within the length limit', () => {
|
|
23
|
+
const exposed = mappedSkills();
|
|
24
|
+
expect(exposed.every((name) => name === 'vibe' || name.startsWith('vibe.'))).toBe(true);
|
|
25
|
+
expect(exposed.every((name) => name.length <= MAX_SKILL_NAME_LENGTH)).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('keeps directory names and frontmatter names unique and identical', () => {
|
|
28
|
+
const skills = skillNames();
|
|
29
|
+
const names = skills.map(({ name }) => name);
|
|
30
|
+
expect(skills.every(({ directory, name }) => directory === name)).toBe(true);
|
|
31
|
+
expect(new Set(names).size).toBe(names.length);
|
|
32
|
+
});
|
|
33
|
+
it('REQ-skill-namespace-003 namespaces every Vibe-owned install mapping', () => {
|
|
34
|
+
expect(mappedSkills().every((name) => name === 'vibe' || name.startsWith('vibe.'))).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
it('REQ-skill-namespace-002 exposes one public skill for every former wrapper pair', () => {
|
|
37
|
+
const names = skillNames().map(({ name }) => name);
|
|
38
|
+
const expected = ['spec', 'test', 'contract', 'regress', 'figma', 'clone', 'docs'];
|
|
39
|
+
expect(names.some((name) => name.startsWith('vibe.core.'))).toBe(false);
|
|
40
|
+
expect(expected.every((name) => names.includes(`vibe.${name}`))).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
it('bundles internal core behavior without separate discovery entries', () => {
|
|
43
|
+
const names = skillNames().map(({ name }) => name);
|
|
44
|
+
const run = readFileSync(resolve('skills/vibe.run/SKILL.md'), 'utf8');
|
|
45
|
+
expect(['arch-guard', 'exec-plan', 'restraint'].every((name) => !names.includes(name))).toBe(true);
|
|
46
|
+
expect(run).toContain('## Bundled internal: arch-guard');
|
|
47
|
+
expect(run).toContain('## Bundled internal: exec-plan');
|
|
48
|
+
expect(run).toContain('## Bundled internal: restraint');
|
|
49
|
+
});
|
|
50
|
+
it('REQ-skill-namespace-005 preserves dots in Load skill references', () => {
|
|
51
|
+
const validator = readFileSync(resolve('scripts/validate-skill-invocation.ts'), 'utf8');
|
|
52
|
+
expect(validator).toContain('[\\w.:-]*');
|
|
53
|
+
});
|
|
54
|
+
it('routes every owned skill in the generated catalog', () => {
|
|
55
|
+
const catalog = readFileSync(resolve('SKILL-CATALOG.md'), 'utf8');
|
|
56
|
+
expect(catalog).toContain('`vibe.spec` (global)');
|
|
57
|
+
expect(catalog).not.toMatch(/`vibe(?:\.[^`]+)?` \(unrouted\)/);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=skill-namespace.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-namespace.test.js","sourceRoot":"","sources":["../../src/__tests__/skill-namespace.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakes-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stakes-contract.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* Stakes-proportional pipeline — 정적 계약 테스트 (SPEC: stakes-proportional-pipeline).
|
|
6
|
+
*
|
|
7
|
+
* 스킬 본문 규칙은 모델이 읽는 계약이므로, 규칙이 각 파일에 존재·유지되는지를
|
|
8
|
+
* 순수 fs 검사로 고정한다 (wiring-integrity 선례). D1–D5 게이트.
|
|
9
|
+
*/
|
|
10
|
+
const ROOT = path.resolve(__dirname, '..', '..');
|
|
11
|
+
function read(rel) {
|
|
12
|
+
return fs.readFileSync(path.join(ROOT, rel), 'utf-8');
|
|
13
|
+
}
|
|
14
|
+
describe('D2 — loop-contract.md: Stakes 매핑 SSOT', () => {
|
|
15
|
+
const doc = read('vibe/rules/loop-contract.md');
|
|
16
|
+
it('stakes 파라미터가 기본값 production 으로 정의된다', () => {
|
|
17
|
+
expect(doc).toMatch(/\|\s*`stakes`\s*\|\s*`production`\s*\|/);
|
|
18
|
+
});
|
|
19
|
+
it('Stakes 매핑 표에 demo/prototype/production 3단계가 있다', () => {
|
|
20
|
+
for (const level of ['`demo`', '`prototype`', '`production`']) {
|
|
21
|
+
expect(doc, `Stakes 표에 ${level} 행 누락`).toContain(level);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
it('demo/prototype 는 max_iterations 1 + 검증 스크립트 신규 생성 금지', () => {
|
|
25
|
+
expect(doc).toContain('신규 생성 금지');
|
|
26
|
+
expect(doc).toMatch(/`demo`[^\n]*\|\s*1\s*\|/);
|
|
27
|
+
});
|
|
28
|
+
it('불확실 시 상향(production) 원칙이 명시된다', () => {
|
|
29
|
+
expect(doc).toMatch(/불확실하면 항상 상향|불확실하면 상향/);
|
|
30
|
+
});
|
|
31
|
+
it('JUDGE 검증 산출물 절제: git diff --numstat 기반 P2 경고 (advisory)', () => {
|
|
32
|
+
expect(doc).toContain('JUDGE 검증 산출물 절제');
|
|
33
|
+
expect(doc).toContain('git diff --numstat');
|
|
34
|
+
expect(doc).toContain('P2');
|
|
35
|
+
expect(doc).toMatch(/게이트 통과 여부를 바꾸지 않는다/);
|
|
36
|
+
});
|
|
37
|
+
it('production 기본 동작 불변: max_iterations 기본 10 유지', () => {
|
|
38
|
+
expect(doc).toMatch(/\|\s*`max_iterations`\s*\|\s*10\s*\|/);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('D1 — vibe 디스패처: stakes 분류 규칙', () => {
|
|
42
|
+
const doc = read('skills/vibe/SKILL.md');
|
|
43
|
+
it('Phase 1-b Stakes 분류 섹션이 존재한다', () => {
|
|
44
|
+
expect(doc).toContain('Phase 1-b: Stakes 분류');
|
|
45
|
+
});
|
|
46
|
+
it('경량 프로파일 매핑(--max-iter 1, 리뷰 1패스, 검증 스크립트 신규 생성 금지)이 명시된다', () => {
|
|
47
|
+
expect(doc).toContain('--max-iter 1');
|
|
48
|
+
expect(doc).toContain('리뷰 1패스');
|
|
49
|
+
expect(doc).toContain('검증 스크립트 신규 생성 금지');
|
|
50
|
+
});
|
|
51
|
+
it('SSOT 로 loop-contract.md 를 참조한다', () => {
|
|
52
|
+
expect(doc).toMatch(/loop-contract\.md[^\n]*Stakes|Stakes[^\n]*loop-contract\.md/);
|
|
53
|
+
});
|
|
54
|
+
it('불확실 시 상향 + SPEC 승인 편승 질문이 명시된다', () => {
|
|
55
|
+
expect(doc).toContain('불확실하면 상향');
|
|
56
|
+
expect(doc).toMatch(/SPEC 승인 메시지에 stakes 확인 질문/);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('D3 — vibe.spec: 승인 게이트 stakes 편승 질문', () => {
|
|
60
|
+
const doc = read('skills/vibe.spec/SKILL.md');
|
|
61
|
+
it('Stakes 편승 질문 규칙이 승인 섹션에 존재한다', () => {
|
|
62
|
+
expect(doc).toContain('Stakes 편승 질문');
|
|
63
|
+
expect(doc).toMatch(/demo\/prototype\/production/);
|
|
64
|
+
});
|
|
65
|
+
it('별도 추가 왕복 금지가 명시된다', () => {
|
|
66
|
+
expect(doc).toMatch(/추가 확인 왕복을 만들지 않는다/);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('D4 — vibe.run: stakes 프로파일 + JUDGE 절제 참조', () => {
|
|
70
|
+
const doc = read('skills/vibe.run/SKILL.md');
|
|
71
|
+
it('Stakes 프로파일 섹션이 loop-contract 를 SSOT 로 참조한다', () => {
|
|
72
|
+
expect(doc).toContain('Stakes 프로파일');
|
|
73
|
+
expect(doc).toMatch(/SSOT[^\n]*loop-contract\.md/);
|
|
74
|
+
});
|
|
75
|
+
it('demo/prototype 에서 검증 스크립트 신규 생성 금지가 명시된다', () => {
|
|
76
|
+
expect(doc).toContain('검증 스크립트 신규 생성 금지');
|
|
77
|
+
});
|
|
78
|
+
it('JUDGE 검증 산출물 절제(P2, git diff --numstat, advisory)가 명시된다', () => {
|
|
79
|
+
expect(doc).toContain('git diff --numstat');
|
|
80
|
+
expect(doc).toMatch(/P2 경고/);
|
|
81
|
+
expect(doc).toMatch(/advisory/);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('D5 — vibe.review: 리뷰어 스케일링', () => {
|
|
85
|
+
const doc = read('skills/vibe.review/SKILL.md');
|
|
86
|
+
it('스케일링 표가 존재한다 (demo ≤5 → 2종)', () => {
|
|
87
|
+
expect(doc).toContain('리뷰어 스케일링');
|
|
88
|
+
expect(doc).toMatch(/demo[^\n]*≤5[^\n]*2종/);
|
|
89
|
+
});
|
|
90
|
+
it('production 행은 기존 Core Reviewers 전체를 유지한다', () => {
|
|
91
|
+
expect(doc).toMatch(/production[^\n]*Core Reviewers 전체/);
|
|
92
|
+
// 기존 기본 셋 불변 검증 — Core Reviewers 표의 focus 들이 그대로 존재
|
|
93
|
+
for (const focus of [
|
|
94
|
+
'security-reviewer',
|
|
95
|
+
'focus: correctness',
|
|
96
|
+
'focus: data-integrity',
|
|
97
|
+
'focus: performance',
|
|
98
|
+
'focus: architecture',
|
|
99
|
+
'focus: complexity',
|
|
100
|
+
'focus: git-history',
|
|
101
|
+
'focus: test-coverage',
|
|
102
|
+
]) {
|
|
103
|
+
expect(doc, `Core Reviewers 에서 ${focus} 가 사라짐 — production 불변 위반`).toContain(focus);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
it('SSOT 로 loop-contract.md 를 참조한다', () => {
|
|
107
|
+
expect(doc).toMatch(/loop-contract\.md[^\n]*Stakes/);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=stakes-contract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakes-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/stakes-contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,8 +22,8 @@ const RULES_DIR = path.join(ROOT, 'vibe', 'rules');
|
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
/**
|
|
24
24
|
* SKILL.md 본문에서 체인 호출("Load skill `X`" 및 한국어 "`X` 스킬을 로드")로
|
|
25
|
-
* 참조된 body 스킬 이름을 추출한다. `figma:figma-use` 처럼
|
|
26
|
-
*
|
|
25
|
+
* 참조된 body 스킬 이름을 추출한다. `figma:figma-use` 처럼 ':' 가 포함된
|
|
26
|
+
* plugin-qualified 참조(외부 플러그인 스킬)는 vibe 설치 목록 대상이 아니므로 제외한다.
|
|
27
27
|
*/
|
|
28
28
|
function extractChainedSkills(content) {
|
|
29
29
|
const names = new Set();
|
|
@@ -31,9 +31,9 @@ function extractChainedSkills(content) {
|
|
|
31
31
|
for (const re of patterns) {
|
|
32
32
|
let match;
|
|
33
33
|
while ((match = re.exec(content)) !== null) {
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
36
|
-
names.add(
|
|
34
|
+
const name = match[1].trim();
|
|
35
|
+
if (name && !name.includes(':'))
|
|
36
|
+
names.add(name);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
return [...names];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiring-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/wiring-integrity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CAAC;IAErE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"wiring-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/wiring-integrity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-release-notes.d.ts","sourceRoot":"","sources":["../../src/cli/generate-release-notes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { createReleaseNotes, selectPreviousSemanticTag, } from '../tools/release/releaseNotes.js';
|
|
5
|
+
const FIELD_SEPARATOR = '\u001f';
|
|
6
|
+
const RECORD_SEPARATOR = '\u001e';
|
|
7
|
+
function git(args) {
|
|
8
|
+
return execFileSync('git', args, { encoding: 'utf8' }).trim();
|
|
9
|
+
}
|
|
10
|
+
function parseCommits(raw) {
|
|
11
|
+
return raw.split(RECORD_SEPARATOR)
|
|
12
|
+
.map((record) => record.trim())
|
|
13
|
+
.filter((record) => Boolean(record))
|
|
14
|
+
.map((record) => {
|
|
15
|
+
const [subject = '', body = ''] = record.split(FIELD_SEPARATOR);
|
|
16
|
+
return { subject: subject.trim(), body: body.trim() };
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function loadSpecs(range, currentTag) {
|
|
20
|
+
const paths = git(['diff', '--name-only', '--diff-filter=AMR', range, '--', '.vibe/specs'])
|
|
21
|
+
.split('\n')
|
|
22
|
+
.map((path) => path.trim())
|
|
23
|
+
.filter((path) => path.endsWith('.md'));
|
|
24
|
+
return paths.map((path) => ({ path, content: git(['show', `${currentTag}:${path}`]) }));
|
|
25
|
+
}
|
|
26
|
+
function validatePackageVersion(currentTag) {
|
|
27
|
+
const packageJson = JSON.parse(readFileSync('package.json', 'utf8'));
|
|
28
|
+
if (packageJson.version !== currentTag.slice(1)) {
|
|
29
|
+
throw new Error(`Tag ${currentTag} does not match package version ${String(packageJson.version)}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function loadReleaseInput(currentTag) {
|
|
33
|
+
validatePackageVersion(currentTag);
|
|
34
|
+
const tags = git(['tag', '--merged', currentTag]).split('\n').filter((tag) => Boolean(tag));
|
|
35
|
+
const previousTag = selectPreviousSemanticTag(tags, currentTag);
|
|
36
|
+
const range = `${previousTag}..${currentTag}`;
|
|
37
|
+
const rawCommits = git(['log', range, `--format=%s${FIELD_SEPARATOR}%b${RECORD_SEPARATOR}`]);
|
|
38
|
+
return { currentTag, previousTag, specs: loadSpecs(range, currentTag), commits: parseCommits(rawCommits) };
|
|
39
|
+
}
|
|
40
|
+
function main(args) {
|
|
41
|
+
const [currentTag, outputPath] = args;
|
|
42
|
+
if (!currentTag || !outputPath)
|
|
43
|
+
throw new Error('Usage: generate-release-notes <tag> <output-file>');
|
|
44
|
+
writeFileSync(outputPath, createReleaseNotes(loadReleaseInput(currentTag)), 'utf8');
|
|
45
|
+
}
|
|
46
|
+
main(process.argv.slice(2));
|
|
47
|
+
//# sourceMappingURL=generate-release-notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-release-notes.js","sourceRoot":"","sources":["../../src/cli/generate-release-notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,18 +2,14 @@
|
|
|
2
2
|
* 상수 데이터
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* 전역 설치 스킬 (postinstall → ~/.claude/skills/) —
|
|
6
|
-
*
|
|
7
|
-
* core: 실제 버그/실수를 방지하는 안전망 — 항상 활성
|
|
8
|
-
* standard: 워크플로우 지원 — 프로젝트 설정 시 선택 활성
|
|
9
|
-
* optional: 참고/래퍼 — 명시적 호출 시에만 로드 (전역 설치에서 제외)
|
|
5
|
+
* 전역 설치 스킬 (postinstall → ~/.claude/skills/) — 공개 분류
|
|
6
|
+
* 내부 core 동작은 관련 공개 스킬 본문에 통합하며 별도 discovery 항목으로 설치하지 않는다.
|
|
10
7
|
*/
|
|
11
8
|
/**
|
|
12
9
|
* 도트 진입점 스킬 (예: vibe.spec)
|
|
13
10
|
* Claude Code에서는 slash-style 진입점으로, Codex에서는 `/skills` 또는 `$vibe.spec`로 호출된다.
|
|
14
11
|
*/
|
|
15
12
|
export declare const GLOBAL_SKILLS_ENTRY: ReadonlyArray<string>;
|
|
16
|
-
export declare const GLOBAL_SKILLS_CORE: ReadonlyArray<string>;
|
|
17
13
|
export declare const GLOBAL_SKILLS_STANDARD: ReadonlyArray<string>;
|
|
18
14
|
/** 전역 설치에서 제외된 스킬 (명시적 /skill-name 호출 시에만 활성)
|
|
19
15
|
* 사유: 표준 도구 래퍼이거나 구체성 부족 — 직접 프롬프트가 더 효과적 */
|
|
@@ -71,6 +67,10 @@ export declare const LANGUAGE_GLOBS: Record<string, string>;
|
|
|
71
67
|
export declare const CURSOR_MODEL_MAPPING: Record<string, string>;
|
|
72
68
|
export declare const LANGUAGE_RULE_PREFIXES: string[];
|
|
73
69
|
export declare const LEGACY_RULE_FILES: string[];
|
|
70
|
+
/** v3.2 namespace 통합 — 설치된 bare 스킬을 배송본과 일치할 때만 제거한다. */
|
|
71
|
+
export declare const LEGACY_SKILL_RENAMES: Readonly<Record<string, string>>;
|
|
72
|
+
/** v3.2에서 배송했던 bare SKILL.md의 SHA-256. 정확히 일치하는 설치본만 정리한다. */
|
|
73
|
+
export declare const LEGACY_SKILL_HASHES: Readonly<Record<string, string>>;
|
|
74
74
|
/** 이전 네이밍에서 변경된 스킬 — postinstall 시 구 디렉토리 삭제 */
|
|
75
75
|
export declare const LEGACY_SKILL_DIRS: ReadonlyArray<string>;
|
|
76
76
|
export declare const CLAUDE_MODEL_MAPPING: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"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"}
|