ai-developer-skill-os 7.5.1 → 8.1.4
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/docs/ARCHITECTURE.md +156 -0
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +36 -0
- package/.agents/docs/MIGRATION-STATUS.md +35 -0
- package/.agents/docs/MIGRATION-V8.md +10 -0
- package/.agents/docs/ROADMAP-V8.2.md +78 -0
- package/.agents/docs/V8-CERTIFICATION.md +27 -0
- package/.agents/docs/VERSIONING.md +95 -0
- package/.agents/docs/decisions/ADR-001-v8-migration.md +58 -0
- package/.agents/docs/decisions/ADR-002-workflow-separation.md +50 -0
- package/.agents/docs/decisions/ADR-003-registry-generated.md +54 -0
- package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +27 -0
- package/.agents/docs/schemas/learning.schema.yml +69 -0
- package/.agents/docs/schemas/skill.schema.yml +188 -0
- package/.agents/docs/schemas/workflow.schema.yml +33 -0
- package/.agents/knowledge/design-intelligence/industries/ecommerce.md +3 -0
- package/.agents/knowledge/design-intelligence/industries/fintech.md +3 -0
- package/.agents/knowledge/design-intelligence/industries/healthcare.md +3 -0
- package/.agents/learnings/draft/README.md +37 -0
- package/.agents/registry/capability-graph.yml +500 -0
- package/.agents/registry/skills-index.yml +525 -0
- package/.agents/reports/RELEASE-CHECKLIST.md +29 -0
- package/.agents/reports/architecture-audit.md +13 -0
- package/.agents/reports/graph-health.md +20 -0
- package/.agents/reports/skill-audit.md +215 -0
- package/.agents/rules/coding.md +102 -0
- package/.agents/rules/command-safety.md +21 -0
- package/.agents/rules/global.md +135 -0
- package/.agents/rules/priorities.yml +24 -0
- package/.agents/rules/safety.md +84 -0
- package/.agents/rules/security.md +13 -0
- package/.agents/rules/skill-quality.md +14 -0
- package/.agents/skills/_template/SKILL.md +132 -0
- package/.agents/skills/qk-access-policy/SKILL.md +61 -5
- package/.agents/skills/qk-agent-observability/SKILL.md +73 -0
- package/.agents/skills/qk-ai-builder/SKILL.md +62 -5
- package/.agents/skills/qk-api-lifecycle/SKILL.md +59 -6
- package/.agents/skills/qk-bug-resolution/SKILL.md +64 -6
- package/.agents/skills/qk-context-loader/SKILL.md +63 -11
- package/.agents/skills/qk-data-lifecycle/SKILL.md +61 -5
- package/.agents/skills/qk-db-optimizer/SKILL.md +61 -5
- package/.agents/skills/qk-design-system-engineering/SKILL.md +112 -0
- package/.agents/skills/qk-devops-platform/SKILL.md +117 -0
- package/.agents/skills/qk-docs/SKILL.md +62 -6
- package/.agents/skills/qk-engineering-standard/SKILL.md +62 -12
- package/.agents/skills/qk-fe-api-integration/SKILL.md +60 -6
- package/.agents/skills/qk-feature-delivery/SKILL.md +65 -6
- package/.agents/skills/qk-frontend-architecture/SKILL.md +134 -0
- package/.agents/skills/qk-help/SKILL.md +245 -193
- package/.agents/skills/qk-orchestrator/SKILL.md +64 -11
- package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
- package/.agents/skills/qk-product-specification/SKILL.md +130 -0
- package/.agents/skills/qk-production-release/SKILL.md +59 -6
- package/.agents/skills/qk-project-bootstrap/SKILL.md +66 -6
- package/.agents/skills/qk-project-health/SKILL.md +63 -6
- package/.agents/skills/qk-project-memory/SKILL.md +63 -6
- package/.agents/skills/qk-security-audit/SKILL.md +135 -0
- package/.agents/skills/qk-system-evolution/SKILL.md +63 -12
- package/.agents/skills/qk-test-engineering/SKILL.md +139 -0
- package/.agents/skills/qk-ui-audit/SKILL.md +60 -6
- package/.agents/skills/qk-ui-builder/SKILL.md +509 -446
- package/.agents/skills/qk-ui-system-builder/SKILL.md +61 -5
- package/.agents/skills/qk-validation-gate/SKILL.md +63 -11
- package/.agents/skills/qk-web-quality-gate/SKILL.md +114 -0
- package/.agents/workflows/_schema.yml +109 -0
- package/.agents/workflows/bug-resolution.yml +101 -0
- package/.agents/workflows/code-review.yml +77 -0
- package/.agents/workflows/documentation.yml +75 -0
- package/.agents/workflows/feature-delivery.yml +103 -0
- package/.agents/workflows/refactor.yml +81 -0
- package/.agents/workflows/research.yml +60 -0
- package/.agents/workflows/security-audit.yml +72 -0
- package/.agents/workflows/skill-evolution.yml +65 -0
- package/.agents/workflows/spec-driven-development.yml +57 -0
- package/CHANGELOG.md +91 -70
- package/README.md +44 -59
- package/bin/install.js +57 -309
- package/package.json +13 -2
- package/tooling/generate-evaluation-cases.cjs +44 -0
- package/tooling/generate-registry.js +157 -0
- package/tooling/run-aar.js +143 -0
- package/tooling/validate-graph.js +87 -0
- package/tooling/validate-skills.js +102 -0
- package/.agents/skills.json +0 -819
- package/.github/workflows/ci.yml +0 -56
- package/CLAUDE.md +0 -110
- package/_template/BEHAVIOR_SPEC.md +0 -96
- package/_template/examples/example-en.md +0 -49
- package/_template/examples/example-vi.md +0 -49
- package/add_lang.js +0 -21
- package/add_lang.py +0 -25
- package/add_sections.py +0 -53
- package/bin/lint.js +0 -123
- package/docs/CHI_TIET_SKILLS.md +0 -126
- package/docs/GOVERNANCE.md +0 -40
- package/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/docs/SPEC.md +0 -87
- package/docs/adr/0001-intent-based-architecture.md +0 -19
- package/docs/adr/0002-kernel-freeze.md +0 -21
- package/docs/adr/0003-risk-based-verification.md +0 -20
- package/docs/adr/0004-progressive-evidence.md +0 -19
- package/docs/skill-classification.md +0 -25
- package/fix_seeds.js +0 -22
- package/framework/KERNEL.md +0 -83
- package/framework/bias-library/cosmetic-refactor.md +0 -21
- package/framework/bias-library/enterprise-crud.md +0 -21
- package/framework/bias-library/fake-ui-slop.md +0 -20
- package/framework/bias-library/hallucinated-tools.md +0 -20
- package/framework/bias-library/missing-ui-states.md +0 -19
- package/framework/bias-library/over-indexing.md +0 -20
- package/framework/bias-library/swallow-errors.md +0 -19
- package/framework/bias-library/ui-only-security.md +0 -17
- package/framework/decision-primitives.md +0 -48
- package/framework/dial-library/complexity-budget.md +0 -13
- package/framework/dial-library/granularity.md +0 -13
- package/framework/dial-library/optimization-strategy.md +0 -13
- package/framework/dial-library/strictness.md +0 -13
- package/framework/rule-library/delegation-only.md +0 -9
- package/framework/rule-library/minimal-diff.md +0 -9
- package/framework/skill-schema.md +0 -310
- package/knowledge/backend/nodejs.md +0 -52
- package/knowledge/frontend/react.md +0 -81
- package/migrate-to-v6.js +0 -130
- package/migrate.js +0 -147
- package/migrate.py +0 -133
- package/migrate_all.cjs +0 -96
- package/patch.js +0 -15
- package/patch.py +0 -89
- package/patch2.py +0 -83
- package/rename.js +0 -64
- package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +0 -121
- package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +0 -179
- package/skills/_archive_old_skills/qk-api-integration/SKILL.md +0 -389
- package/skills/_archive_old_skills/qk-auth-security/SKILL.md +0 -96
- package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +0 -125
- package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +0 -213
- package/skills/_archive_old_skills/qk-component-generator/SKILL.md +0 -136
- package/skills/_archive_old_skills/qk-context-manager/SKILL.md +0 -175
- package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +0 -104
- package/skills/_archive_old_skills/qk-deployment/SKILL.md +0 -96
- package/skills/_archive_old_skills/qk-design-system/SKILL.md +0 -137
- package/skills/_archive_old_skills/qk-form-builder/SKILL.md +0 -140
- package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +0 -155
- package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +0 -133
- package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +0 -129
- package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +0 -146
- package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +0 -304
- package/skills/_archive_old_skills/qk-help/SKILL.md +0 -68
- package/skills/_archive_old_skills/qk-migration/SKILL.md +0 -284
- package/skills/_archive_old_skills/qk-project-audit/SKILL.md +0 -280
- package/skills/_archive_old_skills/qk-refactor/SKILL.md +0 -222
- package/skills/_archive_old_skills/qk-state-management/SKILL.md +0 -140
- package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +0 -127
- package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +0 -152
- package/skills/_template/SKILL.md +0 -239
- package/skills/qk-access-policy/SKILL.md +0 -180
- package/skills/qk-ai-builder/SKILL.md +0 -216
- package/skills/qk-api-lifecycle/SKILL.md +0 -177
- package/skills/qk-bug-resolution/SKILL.md +0 -308
- package/skills/qk-context-loader/SKILL.md +0 -219
- package/skills/qk-data-lifecycle/SKILL.md +0 -193
- package/skills/qk-db-optimizer/SKILL.md +0 -197
- package/skills/qk-docs/SKILL.md +0 -199
- package/skills/qk-engineering-standard/SKILL.md +0 -352
- package/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/skills/qk-engineering-standard/rules/database.md +0 -3
- package/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/skills/qk-engineering-standard/rules/security.md +0 -3
- package/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/skills/qk-fe-api-integration/SKILL.md +0 -327
- package/skills/qk-feature-delivery/SKILL.md +0 -306
- package/skills/qk-help/SKILL.md +0 -194
- package/skills/qk-orchestrator/SKILL.md +0 -279
- package/skills/qk-orchestrator/references/routing-table.md +0 -78
- package/skills/qk-production-release/SKILL.md +0 -285
- package/skills/qk-project-bootstrap/SKILL.md +0 -236
- package/skills/qk-project-health/SKILL.md +0 -200
- package/skills/qk-project-memory/SKILL.md +0 -219
- package/skills/qk-system-evolution/SKILL.md +0 -282
- package/skills/qk-ui-audit/SKILL.md +0 -316
- package/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/skills/qk-ui-builder/SKILL.md +0 -447
- package/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/skills/qk-ui-builder/references/color.md +0 -115
- package/skills/qk-ui-builder/references/component-cookbook.md +0 -1194
- package/skills/qk-ui-builder/references/copy.md +0 -250
- package/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/skills/qk-ui-builder/references/motion.md +0 -95
- package/skills/qk-ui-builder/references/responsive.md +0 -115
- package/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/skills/qk-ui-builder/references/structure.md +0 -280
- package/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/skills/qk-ui-builder/references/typography.md +0 -129
- package/skills/qk-ui-system-builder/SKILL.md +0 -222
- package/skills/qk-validation-gate/SKILL.md +0 -360
- package/skills.json +0 -820
- package/specs/contracts/behavior-contract.yaml +0 -40
- package/specs/expectations/qk-bug-resolution.yaml +0 -35
- package/specs/fixtures/user-payload.json +0 -12
- package/specs/regressions/api-integration-null-fields.yaml +0 -19
- package/specs/scenarios/fix-login-nullref.yaml +0 -3
- package/taste-skill/.claude-plugin/marketplace.json +0 -20
- package/taste-skill/.claude-plugin/plugin.json +0 -19
- package/taste-skill/.github/FUNDING.yml +0 -1
- package/taste-skill/.github/copilot-instructions.md +0 -11
- package/taste-skill/CHANGELOG.md +0 -111
- package/taste-skill/LICENSE +0 -21
- package/taste-skill/README.md +0 -212
- package/taste-skill/assets/.gitkeep +0 -0
- package/taste-skill/assets/readme-banner.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-agent-skills.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-changelog.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-mit.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-site.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-tools.webp +0 -0
- package/taste-skill/assets/readme-cta-tasteskill.svg +0 -5
- package/taste-skill/assets/sponsors/animations-dev.webp +0 -0
- package/taste-skill/assets/sponsors/emil-animations-dev.webp +0 -0
- package/taste-skill/assets/taste-skill-logo.png +0 -0
- package/taste-skill/assets/taste-skill-logo.webp +0 -0
- package/taste-skill/assets/vercel-oss-program-badge.svg +0 -44
- package/taste-skill/examples/floria-bottom.webp +0 -0
- package/taste-skill/examples/floria-full.webp +0 -0
- package/taste-skill/examples/floria-top.webp +0 -0
- package/taste-skill/research/README.md +0 -8
- package/taste-skill/research/laziness/README.md +0 -25
- package/taste-skill/research/laziness/findings/empirical-results.md +0 -58
- package/taste-skill/research/laziness/findings/references.md +0 -20
- package/taste-skill/research/laziness/remediation/architectural-patterns.md +0 -55
- package/taste-skill/research/laziness/remediation/parameter-tuning.md +0 -44
- package/taste-skill/research/laziness/remediation/prompt-engineering.md +0 -52
- package/taste-skill/research/laziness/remediation/reference-prompts.md +0 -79
- package/taste-skill/research/laziness/root-causes/cognitive-shortcuts.md +0 -23
- package/taste-skill/research/laziness/root-causes/output-limits.md +0 -39
- package/taste-skill/research/laziness/root-causes/rlhf-and-compute.md +0 -27
- package/taste-skill/research/laziness/root-causes/training-data-bias.md +0 -28
- package/taste-skill/scripts/build-emil-sponsor-row.mjs +0 -41
- package/taste-skill/scripts/convert-readme-assets-webp.mjs +0 -142
- package/taste-skill/scripts/process-readme-buttons.mjs +0 -108
- package/taste-skill/scripts/process-sponsor-badge.mjs +0 -83
- package/taste-skill/skill.sh +0 -25
- package/taste-skill/skills/brandkit/SKILL.md +0 -798
- package/taste-skill/skills/brutalist-skill/SKILL.md +0 -92
- package/taste-skill/skills/gpt-tasteskill/SKILL.md +0 -74
- package/taste-skill/skills/image-to-code-skill/SKILL.md +0 -1228
- package/taste-skill/skills/imagegen-frontend-mobile/SKILL.md +0 -1465
- package/taste-skill/skills/imagegen-frontend-web/SKILL.md +0 -987
- package/taste-skill/skills/llms.txt +0 -13
- package/taste-skill/skills/minimalist-skill/SKILL.md +0 -85
- package/taste-skill/skills/output-skill/SKILL.md +0 -49
- package/taste-skill/skills/redesign-skill/SKILL.md +0 -178
- package/taste-skill/skills/soft-skill/SKILL.md +0 -98
- package/taste-skill/skills/stitch-skill/DESIGN.md +0 -121
- package/taste-skill/skills/stitch-skill/SKILL.md +0 -184
- package/taste-skill/skills/taste-skill/SKILL.md +0 -1206
- package/taste-skill/skills/taste-skill-v1/SKILL.md +0 -226
- package/temp_fix.js +0 -61
- package/templates/DESIGN.md +0 -38
- package/templates/bug-report.md +0 -21
- package/templates/design-report.md +0 -21
- package/templates/feature-report.md +0 -20
- package/templates/review-report.md +0 -21
- package/templates/skill-template.md +0 -38
- package/tests/behavior-conformance.test.js +0 -154
- package/tests/install-script.test.js +0 -38
- package/tests/registry.test.js +0 -111
- package/update_template.js +0 -28
- package/vitest.config.js +0 -11
package/.github/workflows/ci.yml
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
name: CI / Spec Compliance & Registry Validation
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
paths:
|
|
6
|
-
- 'skills/**'
|
|
7
|
-
- 'skills.json'
|
|
8
|
-
- 'docs/SPEC.md'
|
|
9
|
-
- 'bin/install.js'
|
|
10
|
-
push:
|
|
11
|
-
branches: [ main ]
|
|
12
|
-
paths:
|
|
13
|
-
- 'skills/**'
|
|
14
|
-
- 'skills.json'
|
|
15
|
-
- 'docs/SPEC.md'
|
|
16
|
-
- 'bin/install.js'
|
|
17
|
-
|
|
18
|
-
jobs:
|
|
19
|
-
lint-and-validate:
|
|
20
|
-
runs-on: windows-latest
|
|
21
|
-
steps:
|
|
22
|
-
- name: Checkout
|
|
23
|
-
uses: actions/checkout@v4
|
|
24
|
-
|
|
25
|
-
- name: Setup Node.js
|
|
26
|
-
uses: actions/setup-node@v4
|
|
27
|
-
with:
|
|
28
|
-
node-version: '20.x'
|
|
29
|
-
|
|
30
|
-
- name: Install dependencies
|
|
31
|
-
run: npm install
|
|
32
|
-
|
|
33
|
-
- name: Validate Skills Registry vs Filesystem
|
|
34
|
-
run: npm run test:registry
|
|
35
|
-
|
|
36
|
-
- name: Validate SKILL.md Spec Compliance
|
|
37
|
-
run: npm run lint
|
|
38
|
-
|
|
39
|
-
snapshot:
|
|
40
|
-
runs-on: windows-latest
|
|
41
|
-
needs: lint-and-validate
|
|
42
|
-
if: github.ref == 'refs/heads/main'
|
|
43
|
-
steps:
|
|
44
|
-
- name: Checkout
|
|
45
|
-
uses: actions/checkout@v4
|
|
46
|
-
|
|
47
|
-
- name: Setup Node.js
|
|
48
|
-
uses: actions/setup-node@v4
|
|
49
|
-
with:
|
|
50
|
-
node-version: '20.x'
|
|
51
|
-
|
|
52
|
-
- name: Install dependencies
|
|
53
|
-
run: npm install
|
|
54
|
-
|
|
55
|
-
- name: Generate Registry Snapshot
|
|
56
|
-
run: node bin/install.js --ide=7 --scope=2
|
package/CLAUDE.md
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
[Role]
|
|
2
|
-
You are an elite AI Software Engineer. You must strictly follow the rules in this project.
|
|
3
|
-
Vui lòng tìm đọc danh sách kỹ năng tại file `./.qk-ai-skill-os/skills.json`.
|
|
4
|
-
|
|
5
|
-
[Trigger Mechanism]
|
|
6
|
-
Bất cứ khi nào người dùng gõ lệnh bắt đầu bằng `./qk-[tên-skill]`, bạn BẮT BUỘC phải đọc file `SKILL.md` tương ứng trong thư mục `./.qk-ai-skill-os/...` (hoặc dùng tool view_file để đọc file đó) trước khi làm bất cứ việc gì. Đừng bao giờ đoán mò.
|
|
7
|
-
|
|
8
|
-
[Autonomous Execution & Transparency]
|
|
9
|
-
Khi nhận được lệnh kỹ năng, bạn BẮT BUỘC phải:
|
|
10
|
-
1. Thông báo rõ ràng: "[🚀 AI Developer Skin: Đã kích hoạt kỹ năng <tên-skill>]" ngay dòng đầu tiên.
|
|
11
|
-
2. TỰ ĐỘNG THỰC THI (End-to-End): Dùng các tools của bạn (đọc file, sửa code, chạy lệnh) để tự động hoàn thành 100% mục tiêu được giao. KHÔNG ĐƯỢC dừng lại để hỏi ý kiến trừ khi gặp lỗi chí mạng hoặc requirement quá mập mờ.
|
|
12
|
-
3. BÁO CÁO KẾT QUẢ: Sau khi hoàn tất sửa code, LUÔN trả về báo cáo theo đúng format markdown dưới đây:
|
|
13
|
-
|
|
14
|
-
```markdown
|
|
15
|
-
🔧 <Tên Kỹ Năng> Summary
|
|
16
|
-
─────────────────────────────────────────────────
|
|
17
|
-
Scope: [Tóm tắt ngắn gọn phạm vi công việc]
|
|
18
|
-
Changes: [N file modified, N extracted, N removed]
|
|
19
|
-
|
|
20
|
-
Changes applied:
|
|
21
|
-
✅ [Loại hành động 1]: [Chi tiết những gì đã làm, ví dụ: Ngăn chặn lỗi lặp vô hạn...]
|
|
22
|
-
✅ [Loại hành động 2]: [Chi tiết những gì đã làm]
|
|
23
|
-
|
|
24
|
-
📊 Quality improvement:
|
|
25
|
-
Before: [Mô tả ngắn tình trạng trước khi sửa/làm]
|
|
26
|
-
After: [Mô tả sự cải thiện đạt được]
|
|
27
|
-
|
|
28
|
-
✅ Verification:
|
|
29
|
-
Tests: [Trạng thái test (vd: N/A, Pass)]
|
|
30
|
-
Lint/Types:[Trạng thái kiểm tra lỗi (vd: Clean)]
|
|
31
|
-
Behavior: [Kết quả hoạt động (vd: Unchanged, Improved)]
|
|
32
|
-
|
|
33
|
-
⚠️ Notes:
|
|
34
|
-
[Các lưu ý đặc biệt, rủi ro tiềm ẩn hoặc cách người dùng có thể test lại tính năng này]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
[Command Arguments]
|
|
38
|
-
Người dùng có thể truyền thêm tham số vào lệnh (ví dụ: `./qk-ui-builder --fw=react --css=tailwind`).
|
|
39
|
-
Nếu người dùng sử dụng tham số (argument), bạn BẮT BUỘC phải tuân thủ tuyệt đối các công nghệ/yêu cầu được chỉ định trong tham số đó thay vì dùng mặc định.
|
|
40
|
-
]
|
|
41
|
-
Bất cứ khi nào người dùng gõ lệnh bắt đầu bằng `./qk-[tên-skill]`, bạn BẮT BUỘC phải đọc file `SKILL.md` tương ứng trong thư mục `./.qk-ai-skill-os/...` (hoặc dùng tool view_file để đọc file đó) trước khi làm bất cứ việc gì. Đừng bao giờ đoán mò.
|
|
42
|
-
|
|
43
|
-
[Autonomous Execution & Transparency]
|
|
44
|
-
Khi nhận được lệnh kỹ năng, bạn BẮT BUỘC phải:
|
|
45
|
-
1. Thông báo rõ ràng: "[🚀 AI Developer Skin: Đã kích hoạt kỹ năng <tên-skill>]" ngay dòng đầu tiên.
|
|
46
|
-
2. TỰ ĐỘNG THỰC THI (End-to-End): Dùng các tools của bạn (đọc file, sửa code, chạy lệnh) để tự động hoàn thành 100% mục tiêu được giao. KHÔNG ĐƯỢC dừng lại để hỏi ý kiến trừ khi gặp lỗi chí mạng hoặc requirement quá mập mờ.
|
|
47
|
-
3. BÁO CÁO KẾT QUẢ: Sau khi hoàn tất sửa code, LUÔN trả về báo cáo theo đúng format markdown dưới đây:
|
|
48
|
-
|
|
49
|
-
```markdown
|
|
50
|
-
🔧 <Tên Kỹ Năng> Summary
|
|
51
|
-
─────────────────────────────────────────────────
|
|
52
|
-
Scope: [Tóm tắt ngắn gọn phạm vi công việc]
|
|
53
|
-
Changes: [N file modified, N extracted, N removed]
|
|
54
|
-
|
|
55
|
-
Changes applied:
|
|
56
|
-
✅ [Loại hành động 1]: [Chi tiết những gì đã làm, ví dụ: Ngăn chặn lỗi lặp vô hạn...]
|
|
57
|
-
✅ [Loại hành động 2]: [Chi tiết những gì đã làm]
|
|
58
|
-
|
|
59
|
-
📊 Quality improvement:
|
|
60
|
-
Before: [Mô tả ngắn tình trạng trước khi sửa/làm]
|
|
61
|
-
After: [Mô tả sự cải thiện đạt được]
|
|
62
|
-
|
|
63
|
-
✅ Verification:
|
|
64
|
-
Tests: [Trạng thái test (vd: N/A, Pass)]
|
|
65
|
-
Lint/Types:[Trạng thái kiểm tra lỗi (vd: Clean)]
|
|
66
|
-
Behavior: [Kết quả hoạt động (vd: Unchanged, Improved)]
|
|
67
|
-
|
|
68
|
-
⚠️ Notes:
|
|
69
|
-
[Các lưu ý đặc biệt, rủi ro tiềm ẩn hoặc cách người dùng có thể test lại tính năng này]
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
[Command Arguments]
|
|
73
|
-
Người dùng có thể truyền thêm tham số vào lệnh (ví dụ: `./qk-ui-builder --fw=react --css=tailwind`).
|
|
74
|
-
Nếu người dùng sử dụng tham số (argument), bạn BẮT BUỘC phải tuân thủ tuyệt đối các công nghệ/yêu cầu được chỉ định trong tham số đó thay vì dùng mặc định.
|
|
75
|
-
]
|
|
76
|
-
Bất cứ khi nào người dùng gõ lệnh bắt đầu bằng `./qk-[tên-skill]`, bạn BẮT BUỘC phải đọc file `SKILL.md` tương ứng trong thư mục `./.qk-ai-skill-os/...` (hoặc dùng tool view_file để đọc file đó) trước khi làm bất cứ việc gì. Đừng bao giờ đoán mò.
|
|
77
|
-
|
|
78
|
-
[Autonomous Execution & Transparency]
|
|
79
|
-
Khi nhận được lệnh kỹ năng, bạn BẮT BUỘC phải:
|
|
80
|
-
1. Thông báo rõ ràng: "[🚀 AI Developer Skin: Đã kích hoạt kỹ năng <tên-skill>]" ngay dòng đầu tiên.
|
|
81
|
-
2. TỰ ĐỘNG THỰC THI (End-to-End): Dùng các tools của bạn (đọc file, sửa code, chạy lệnh) để tự động hoàn thành 100% mục tiêu được giao. KHÔNG ĐƯỢC dừng lại để hỏi ý kiến trừ khi gặp lỗi chí mạng hoặc requirement quá mập mờ.
|
|
82
|
-
3. BÁO CÁO KẾT QUẢ: Sau khi hoàn tất sửa code, LUÔN trả về báo cáo theo đúng format markdown dưới đây:
|
|
83
|
-
|
|
84
|
-
```markdown
|
|
85
|
-
🔧 <Tên Kỹ Năng> Summary
|
|
86
|
-
─────────────────────────────────────────────────
|
|
87
|
-
Scope: [Tóm tắt ngắn gọn phạm vi công việc]
|
|
88
|
-
Changes: [N file modified, N extracted, N removed]
|
|
89
|
-
|
|
90
|
-
Changes applied:
|
|
91
|
-
✅ [Loại hành động 1]: [Chi tiết những gì đã làm, ví dụ: Ngăn chặn lỗi lặp vô hạn...]
|
|
92
|
-
✅ [Loại hành động 2]: [Chi tiết những gì đã làm]
|
|
93
|
-
|
|
94
|
-
📊 Quality improvement:
|
|
95
|
-
Before: [Mô tả ngắn tình trạng trước khi sửa/làm]
|
|
96
|
-
After: [Mô tả sự cải thiện đạt được]
|
|
97
|
-
|
|
98
|
-
✅ Verification:
|
|
99
|
-
Tests: [Trạng thái test (vd: N/A, Pass)]
|
|
100
|
-
Lint/Types:[Trạng thái kiểm tra lỗi (vd: Clean)]
|
|
101
|
-
Behavior: [Kết quả hoạt động (vd: Unchanged, Improved)]
|
|
102
|
-
|
|
103
|
-
⚠️ Notes:
|
|
104
|
-
[Các lưu ý đặc biệt, rủi ro tiềm ẩn hoặc cách người dùng có thể test lại tính năng này]
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
[Command Arguments]
|
|
108
|
-
Người dùng có thể truyền thêm tham số vào lệnh (ví dụ: `./qk-ui-builder --fw=react --css=tailwind`).
|
|
109
|
-
Nếu người dùng sử dụng tham số (argument), bạn BẮT BUỘC phải tuân thủ tuyệt đối các công nghệ/yêu cầu được chỉ định trong tham số đó thay vì dùng mặc định.
|
|
110
|
-
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: qk-[tên-behavior]
|
|
3
|
-
version: 6.0.0
|
|
4
|
-
updated: 2026-07-10
|
|
5
|
-
description: Behavior Specification theo chuẩn BSF v6.0.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# 📜 Behavior Specification: [Tên Behavior]
|
|
9
|
-
|
|
10
|
-
## 1. Behavior (Định danh Hành vi)
|
|
11
|
-
```yaml
|
|
12
|
-
Mission: [Mục tiêu tối thượng của hành vi này]
|
|
13
|
-
Authority: [Thẩm quyền tối đa được phép]
|
|
14
|
-
Responsibility: [Trách nhiệm cốt lõi]
|
|
15
|
-
Limitation: [Giới hạn tuyệt đối không được vượt qua]
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 2. Contracts (Hợp đồng)
|
|
19
|
-
|
|
20
|
-
### 2.1. Capability Contract
|
|
21
|
-
```yaml
|
|
22
|
-
Can:
|
|
23
|
-
- [Hành động được phép: VD - read_docs, execute_tests]
|
|
24
|
-
Must:
|
|
25
|
-
- [Hành động bắt buộc: VD - verify assumptions before coding]
|
|
26
|
-
Cannot:
|
|
27
|
-
- [Hành động cấm: VD - invent API, drop database]
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### 2.2. Output Contract
|
|
31
|
-
```yaml
|
|
32
|
-
Artifacts:
|
|
33
|
-
- [Artifact 1: VD - plan.md]
|
|
34
|
-
- [Artifact 2: VD - summary_report]
|
|
35
|
-
Completion: "Artifacts generated & Quality Gates passed."
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## 3. Policies (Chính sách)
|
|
39
|
-
|
|
40
|
-
### 3.1. Context Policy
|
|
41
|
-
```yaml
|
|
42
|
-
Scope: [current_repo | whole_workspace | external_docs]
|
|
43
|
-
Priority:
|
|
44
|
-
1: Project Docs
|
|
45
|
-
2: Current Conversation
|
|
46
|
-
3: Source Code
|
|
47
|
-
Trust: "official docs > code > assumptions"
|
|
48
|
-
Fallback: ask_user
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### 3.2. Reasoning Boundary
|
|
52
|
-
```yaml
|
|
53
|
-
May infer: [VD: Variable naming, Local scope logic]
|
|
54
|
-
Must verify: [VD: Business logic, Auth rules]
|
|
55
|
-
Must ask: [VD: Missing edge cases, Vague requirements]
|
|
56
|
-
Must refuse: [VD: Unsafe assumptions, Security risks]
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 3.3. Decision Policy
|
|
60
|
-
```yaml
|
|
61
|
-
Priority:
|
|
62
|
-
1: correctness
|
|
63
|
-
2: safety
|
|
64
|
-
3: maintainability
|
|
65
|
-
4: performance
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 3.4. Evidence Policy
|
|
69
|
-
```yaml
|
|
70
|
-
Accept: [logs, unit tests, profiling data]
|
|
71
|
-
Prefer: [official vendor docs, architecture repo docs]
|
|
72
|
-
Reject: [guess, outdated internet search, agent memory]
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### 3.5. Escalation Policy
|
|
76
|
-
```yaml
|
|
77
|
-
Warning: [Cảnh báo rủi ro (VD: Rename file)]
|
|
78
|
-
Confirmation: [Cần user cho phép (VD: Override config)]
|
|
79
|
-
Stop: [Dừng ngay lập tức (VD: Đụng vào Auth, Permission Denied)]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## 4. Protocol (Tùy chọn)
|
|
83
|
-
*(Chỉ sử dụng nếu behavior này yêu cầu quy trình nhiều bước (State Machine). Xóa phần này nếu không cần thiết).*
|
|
84
|
-
|
|
85
|
-
```yaml
|
|
86
|
-
States:
|
|
87
|
-
- collect_context
|
|
88
|
-
- clarify
|
|
89
|
-
- execute
|
|
90
|
-
|
|
91
|
-
Transitions:
|
|
92
|
-
collect_context:
|
|
93
|
-
if context_missing: -> clarify
|
|
94
|
-
else: -> execute
|
|
95
|
-
# ... (Các rule chuyển trạng thái khác) ...
|
|
96
|
-
```
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# AI Developer Skill OS
|
|
3
|
-
# Example usage file (English)
|
|
4
|
-
# Copy this as a starting point for your skill examples
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Example: [Skill Name]
|
|
8
|
-
|
|
9
|
-
## Input
|
|
10
|
-
|
|
11
|
-
**User request:**
|
|
12
|
-
```
|
|
13
|
-
[Describe what the user said or asked]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
**Project context:**
|
|
17
|
-
- Framework: [React 18 / Next.js 14 / Vue 3 / etc.]
|
|
18
|
-
- Relevant files: `[path/to/file.ts]`
|
|
19
|
-
- Current state: [Brief description]
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Execution
|
|
24
|
-
|
|
25
|
-
**Skill activated:** `[skill-name]`
|
|
26
|
-
|
|
27
|
-
**Phase 1 — Analysis:**
|
|
28
|
-
> [What the AI analyzed]
|
|
29
|
-
|
|
30
|
-
**Phase 2 — Plan:**
|
|
31
|
-
> [What the AI decided to do]
|
|
32
|
-
|
|
33
|
-
**Phase 3 — Output:**
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
// [filename.ts]
|
|
37
|
-
// [Generated or modified code]
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Result
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
✅ Summary: [What was done]
|
|
46
|
-
📁 Files: [List of files]
|
|
47
|
-
⚠️ Warnings: [Any notes]
|
|
48
|
-
🔗 Next steps: [Follow-up suggestion]
|
|
49
|
-
```
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# AI Developer Skill OS
|
|
3
|
-
# File ví dụ sử dụng (Tiếng Việt)
|
|
4
|
-
# Sao chép file này làm điểm khởi đầu cho ví dụ của bạn
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Ví dụ: [Tên Skill]
|
|
8
|
-
|
|
9
|
-
## Input (Đầu vào)
|
|
10
|
-
|
|
11
|
-
**Yêu cầu của người dùng:**
|
|
12
|
-
```
|
|
13
|
-
[Mô tả người dùng đã nói hoặc yêu cầu gì]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
**Bối cảnh dự án:**
|
|
17
|
-
- Framework: [React 18 / Next.js 14 / Vue 3 / v.v.]
|
|
18
|
-
- File liên quan: `[path/to/file.ts]`
|
|
19
|
-
- Trạng thái hiện tại: [Mô tả ngắn]
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Thực thi
|
|
24
|
-
|
|
25
|
-
**Skill được kích hoạt:** `[skill-name]`
|
|
26
|
-
|
|
27
|
-
**Phase 1 — Phân tích:**
|
|
28
|
-
> [AI đã phân tích gì]
|
|
29
|
-
|
|
30
|
-
**Phase 2 — Kế hoạch:**
|
|
31
|
-
> [AI quyết định làm gì]
|
|
32
|
-
|
|
33
|
-
**Phase 3 — Kết quả:**
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
// [filename.ts]
|
|
37
|
-
// [Code được tạo hoặc chỉnh sửa]
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Kết quả
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
✅ Tóm tắt: [Đã làm gì]
|
|
46
|
-
📁 Files: [Danh sách file]
|
|
47
|
-
⚠️ Lưu ý: [Ghi chú quan trọng]
|
|
48
|
-
🔗 Bước tiếp theo: [Gợi ý skill hoặc hành động tiếp theo]
|
|
49
|
-
```
|
package/add_lang.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
const skillsDir = path.join(__dirname, 'skills');
|
|
5
|
-
const items = fs.readdirSync(skillsDir);
|
|
6
|
-
|
|
7
|
-
for (const item of items) {
|
|
8
|
-
if (item === '_template' || item === 'qk-policy-engine') continue;
|
|
9
|
-
|
|
10
|
-
const skillDir = path.join(skillsDir, item);
|
|
11
|
-
if (fs.statSync(skillDir).isDirectory() && item.startsWith('qk-')) {
|
|
12
|
-
const skillMdPath = path.join(skillDir, 'SKILL.md');
|
|
13
|
-
if (fs.existsSync(skillMdPath)) {
|
|
14
|
-
let content = fs.readFileSync(skillMdPath, 'utf8');
|
|
15
|
-
if (!content.includes('> **Language rule:**')) {
|
|
16
|
-
content = content.replace(/^# (.*)/m, '# \n\n> **Language rule:** Code, identifiers, file names ? English. Explanations, summaries ? Vietnamese.');
|
|
17
|
-
fs.writeFileSync(skillMdPath, content);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
package/add_lang.py
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
skills_dir = 'skills'
|
|
4
|
-
|
|
5
|
-
for item in os.listdir(skills_dir):
|
|
6
|
-
if item == '_template' or item == 'qk-policy-engine':
|
|
7
|
-
continue
|
|
8
|
-
|
|
9
|
-
skill_path = os.path.join(skills_dir, item, 'SKILL.md')
|
|
10
|
-
if os.path.isfile(skill_path):
|
|
11
|
-
with open(skill_path, 'r', encoding='utf-8') as f:
|
|
12
|
-
content = f.read()
|
|
13
|
-
|
|
14
|
-
if "> **Language rule:** Code, identifiers, file names ? English. Explanations, summaries ? Vietnamese." not in content:
|
|
15
|
-
# Look for "> **Language rule:**"
|
|
16
|
-
if "> **Language rule:**" in content:
|
|
17
|
-
import re
|
|
18
|
-
content = re.sub(r'> \*\*Language rule:\*\*.*', '> **Language rule:** Code, identifiers, file names ? English. Explanations, summaries ? Vietnamese.', content)
|
|
19
|
-
else:
|
|
20
|
-
# Add it after the first # header
|
|
21
|
-
import re
|
|
22
|
-
content = re.sub(r'(# .*?\n)', r'\1\n> **Language rule:** Code, identifiers, file names ? English. Explanations, summaries ? Vietnamese.\n', content, count=1)
|
|
23
|
-
|
|
24
|
-
with open(skill_path, 'w', encoding='utf-8') as f:
|
|
25
|
-
f.write(content)
|
package/add_sections.py
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
skills_dir = 'skills'
|
|
4
|
-
required_sections = [
|
|
5
|
-
'Goal',
|
|
6
|
-
'Context',
|
|
7
|
-
'Inputs',
|
|
8
|
-
'Chain of Thought',
|
|
9
|
-
'Constraints',
|
|
10
|
-
'Policies',
|
|
11
|
-
'Exit Codes',
|
|
12
|
-
'Confidence Model',
|
|
13
|
-
'Severity',
|
|
14
|
-
'Retry Policy',
|
|
15
|
-
'Escalation Rules'
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
for item in os.listdir(skills_dir):
|
|
19
|
-
if item == '_template' or item == 'qk-policy-engine':
|
|
20
|
-
continue
|
|
21
|
-
|
|
22
|
-
skill_path = os.path.join(skills_dir, item, 'SKILL.md')
|
|
23
|
-
if os.path.isfile(skill_path):
|
|
24
|
-
with open(skill_path, 'r', encoding='utf-8') as f:
|
|
25
|
-
content = f.read()
|
|
26
|
-
|
|
27
|
-
missing_sections = []
|
|
28
|
-
for section in required_sections:
|
|
29
|
-
if f"## {section}" not in content:
|
|
30
|
-
missing_sections.append(section)
|
|
31
|
-
|
|
32
|
-
if missing_sections:
|
|
33
|
-
appends = "\n\n" + "\n\n".join([f"## {section}\n[Placeholder for {section}]" for section in missing_sections])
|
|
34
|
-
|
|
35
|
-
# Insert before ## Compliance if it exists
|
|
36
|
-
if "## Compliance" in content:
|
|
37
|
-
content = content.replace("## Compliance", appends.lstrip() + "\n\n## Compliance")
|
|
38
|
-
else:
|
|
39
|
-
content += appends
|
|
40
|
-
|
|
41
|
-
with open(skill_path, 'w', encoding='utf-8') as f:
|
|
42
|
-
f.write(content)
|
|
43
|
-
|
|
44
|
-
# Add ## Scope for the vitest if missing
|
|
45
|
-
if "## Scope" not in content:
|
|
46
|
-
with open(skill_path, 'r', encoding='utf-8') as f:
|
|
47
|
-
content = f.read()
|
|
48
|
-
if "## Compliance" in content:
|
|
49
|
-
content = content.replace("## Compliance", "## Scope\nAll.\n\n## Compliance")
|
|
50
|
-
else:
|
|
51
|
-
content += "\n\n## Scope\nAll."
|
|
52
|
-
with open(skill_path, 'w', encoding='utf-8') as f:
|
|
53
|
-
f.write(content)
|
package/bin/lint.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
|
-
import matter from 'gray-matter';
|
|
7
|
-
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
-
const __dirname = path.dirname(__filename);
|
|
10
|
-
const skillsDir = path.join(__dirname, '..', 'skills');
|
|
11
|
-
|
|
12
|
-
const REQUIRED_FOR_ALL = [
|
|
13
|
-
'Preconditions',
|
|
14
|
-
'Scope',
|
|
15
|
-
'Non-Goals',
|
|
16
|
-
'Exit Codes',
|
|
17
|
-
'Handoff Contract'
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const REQUIRED_FOR_ACTION = [
|
|
21
|
-
'Workflow',
|
|
22
|
-
'Confidence Model',
|
|
23
|
-
'Evidence Format',
|
|
24
|
-
'Escalation Rules'
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
const REQUIRED_FOR_EXECUTION = [
|
|
28
|
-
'Priority Order',
|
|
29
|
-
'Severity',
|
|
30
|
-
'Retry Policy'
|
|
31
|
-
];
|
|
32
|
-
|
|
33
|
-
const ACTION_SKILLS = ['qk-bug-resolution', 'qk-feature-delivery', 'qk-fe-api-integration', 'qk-api-lifecycle', 'qk-data-lifecycle', 'qk-db-optimizer', 'qk-ui-builder', 'qk-ui-system-builder', 'qk-access-policy', 'qk-ai-builder', 'qk-system-evolution', 'qk-production-release', 'qk-project-bootstrap'];
|
|
34
|
-
const EXECUTION_SKILLS = ['qk-bug-resolution', 'qk-feature-delivery', 'qk-fe-api-integration', 'qk-api-lifecycle', 'qk-data-lifecycle', 'qk-db-optimizer', 'qk-ui-builder', 'qk-ui-system-builder', 'qk-access-policy', 'qk-ai-builder', 'qk-system-evolution', 'qk-production-release', 'qk-project-bootstrap', 'qk-engineering-standard', 'qk-validation-gate', 'qk-ui-audit', 'qk-project-health'];
|
|
35
|
-
|
|
36
|
-
const SKIP_LINT = ['qk-help'];
|
|
37
|
-
|
|
38
|
-
let hasErrors = false;
|
|
39
|
-
|
|
40
|
-
function lintSkill(skillPath, skillName) {
|
|
41
|
-
if (SKIP_LINT.includes(skillName)) {
|
|
42
|
-
console.log(`⏭️ [${skillName}] Skipped (reference skill)`);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const content = fs.readFileSync(skillPath, 'utf8');
|
|
47
|
-
|
|
48
|
-
let parsed;
|
|
49
|
-
try {
|
|
50
|
-
parsed = matter(content);
|
|
51
|
-
} catch (e) {
|
|
52
|
-
console.error(`❌ [${skillName}] Frontmatter parsing failed: ${e.message}`);
|
|
53
|
-
hasErrors = true;
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const frontmatter = parsed.data;
|
|
58
|
-
|
|
59
|
-
const requiredFrontmatter = ['name', 'category', 'version', 'description', 'platforms', 'execution_mode', 'cost', 'latency', 'risk', 'side_effects', 'produces', 'consumes', 'token_budget', 'exit_codes', 'schema_version', 'runtime_version', 'skill_version'];
|
|
60
|
-
|
|
61
|
-
for (const field of requiredFrontmatter) {
|
|
62
|
-
if (frontmatter[field] === undefined) {
|
|
63
|
-
console.error(`❌ [${skillName}] Missing frontmatter field: ${field}`);
|
|
64
|
-
hasErrors = true;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const validPlatforms = ['antigravity', 'claude-code', 'cursor', 'windsurf', 'kilo-code'];
|
|
69
|
-
if (Array.isArray(frontmatter.platforms)) {
|
|
70
|
-
for (const p of frontmatter.platforms) {
|
|
71
|
-
if (!validPlatforms.includes(p)) {
|
|
72
|
-
console.error(`❌ [${skillName}] Invalid platform: ${p}`);
|
|
73
|
-
hasErrors = true;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (!content.includes('> **Language rule:**')) {
|
|
79
|
-
console.error(`❌ [${skillName}] Missing Language Rule declaration.`);
|
|
80
|
-
hasErrors = true;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const body = parsed.content;
|
|
84
|
-
const required = [...REQUIRED_FOR_ALL];
|
|
85
|
-
if (ACTION_SKILLS.includes(skillName)) {
|
|
86
|
-
required.push(...REQUIRED_FOR_ACTION);
|
|
87
|
-
}
|
|
88
|
-
if (EXECUTION_SKILLS.includes(skillName)) {
|
|
89
|
-
required.push(...REQUIRED_FOR_EXECUTION);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
for (const section of required) {
|
|
93
|
-
const headingRegex = new RegExp(`^##\\s+${section}\\b`, 'm');
|
|
94
|
-
if (!headingRegex.test(body)) {
|
|
95
|
-
console.error(`❌ [${skillName}] Missing section: ## ${section}`);
|
|
96
|
-
hasErrors = true;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
console.log('🔍 Running V7.5 Skill Schema Linting...');
|
|
102
|
-
|
|
103
|
-
const items = fs.readdirSync(skillsDir);
|
|
104
|
-
for (const item of items) {
|
|
105
|
-
if (item === '_template' || item === 'qk-policy-engine') continue;
|
|
106
|
-
|
|
107
|
-
const skillDir = path.join(skillsDir, item);
|
|
108
|
-
if (fs.statSync(skillDir).isDirectory() && item.startsWith('qk-')) {
|
|
109
|
-
const skillMdPath = path.join(skillDir, 'SKILL.md');
|
|
110
|
-
if (fs.existsSync(skillMdPath)) {
|
|
111
|
-
lintSkill(skillMdPath, item);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (hasErrors) {
|
|
117
|
-
console.error('\n💥 Linting failed. One or more skills do not comply with the V7.5 Runtime Standard.');
|
|
118
|
-
process.exit(1);
|
|
119
|
-
} else {
|
|
120
|
-
console.log('\n✅ All skills comply with V7.5 Runtime Standard!');
|
|
121
|
-
process.exit(0);
|
|
122
|
-
}
|
|
123
|
-
|