ai-developer-skill-os 9.3.1 → 10.2.0
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/AGENTS.md +73 -40
- package/.agents/DEV_PROFILE.md +36 -2
- package/.agents/LICENSE +21 -21
- package/.agents/docs/ARCHITECTURE.md +56 -120
- package/.agents/docs/GOVERNANCE.md +3 -3
- package/.agents/docs/SPEC.md +137 -60
- package/.agents/docs/VERSIONING.md +25 -57
- package/.agents/docs/adr/0005-v10-platform-consolidation.md +50 -0
- package/.agents/docs/schemas/learning.schema.yml +22 -57
- package/.agents/docs/schemas/skill.schema.yml +116 -161
- package/.agents/docs/schemas/workflow.schema.yml +51 -26
- package/.agents/docs/skill-classification.md +1 -1
- package/.agents/registry/graph.json +193 -346
- package/.agents/registry/index.yaml +90 -233
- package/.agents/rules/coding.md +30 -12
- package/.agents/rules/command-safety.md +20 -9
- package/.agents/rules/global.md +234 -28
- package/.agents/rules/prompt-compiler.md +170 -0
- package/.agents/rules/safety.md +1 -1
- package/.agents/rules/security.md +1 -1
- package/.agents/rules/skill-quality.md +18 -3
- package/.agents/skills/_template/SKILL.md +238 -88
- package/.agents/skills/qk-api-data-discovery/SKILL.md +456 -0
- package/.agents/skills/qk-api-data-discovery/references/bronze-record-format.md +47 -0
- package/.agents/skills/qk-api-data-discovery/references/data-contract-yaml.md +72 -0
- package/.agents/skills/qk-api-data-discovery/references/discovery-report-template.md +110 -0
- package/.agents/skills/qk-backend-data/SKILL.md +339 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +328 -248
- package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-cleaner/SKILL.md +399 -0
- package/.agents/skills/qk-code-review/SKILL.md +320 -247
- package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-review/references/ai/{v8-schema-validation.md → schema-validation.md} +2 -2
- package/.agents/skills/qk-code-review/references/cross-cutting/async-concurrency-patterns.md +515 -515
- package/.agents/skills/qk-code-review/references/cross-cutting/error-handling-principles.md +492 -492
- package/.agents/skills/qk-code-review/references/cross-cutting/n-plus-one-queries.md +309 -309
- package/.agents/skills/qk-code-review/references/cross-cutting/sql-injection-prevention.md +307 -307
- package/.agents/skills/qk-code-review/references/cross-cutting/xss-prevention.md +263 -263
- package/.agents/skills/qk-code-review/references/languages/angular.md +768 -768
- package/.agents/skills/qk-code-review/references/languages/c.md +890 -890
- package/.agents/skills/qk-code-review/references/languages/cpp.md +893 -893
- package/.agents/skills/qk-code-review/references/languages/css-less-sass.md +661 -661
- package/.agents/skills/qk-code-review/references/languages/django.md +985 -985
- package/.agents/skills/qk-code-review/references/languages/fastapi.md +580 -580
- package/.agents/skills/qk-code-review/references/languages/go.md +993 -993
- package/.agents/skills/qk-code-review/references/languages/java.md +409 -409
- package/.agents/skills/qk-code-review/references/languages/java8.md +586 -586
- package/.agents/skills/qk-code-review/references/languages/kotlin.md +1018 -1018
- package/.agents/skills/qk-code-review/references/languages/nestjs.md +593 -593
- package/.agents/skills/qk-code-review/references/languages/php.md +684 -684
- package/.agents/skills/qk-code-review/references/languages/python.md +1073 -1073
- package/.agents/skills/qk-code-review/references/languages/qt.md +757 -757
- package/.agents/skills/qk-code-review/references/languages/react.md +871 -871
- package/.agents/skills/qk-code-review/references/languages/ruby.md +964 -964
- package/.agents/skills/qk-code-review/references/languages/rust.md +846 -846
- package/.agents/skills/qk-code-review/references/languages/svelte.md +1064 -1064
- package/.agents/skills/qk-code-review/references/languages/swift.md +936 -936
- package/.agents/skills/qk-code-review/references/languages/typescript.md +1016 -1016
- package/.agents/skills/qk-code-review/references/languages/vue.md +924 -924
- package/.agents/skills/qk-code-review/references/languages/zig.md +440 -440
- package/.agents/skills/qk-devops-release/SKILL.md +294 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +331 -247
- package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/SKILL.md +286 -152
- package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
- package/.agents/skills/qk-product-spec/SKILL.md +262 -0
- package/.agents/skills/qk-prompt-compiler/SKILL.md +444 -0
- package/.agents/skills/qk-ui-engineer/SKILL.md +286 -0
- package/.agents/workflows/_schema.yml +146 -146
- package/.agents/workflows/bug-resolution.yml +155 -121
- package/.agents/workflows/code-review.yml +127 -93
- package/.agents/workflows/context-discovery.yml +128 -94
- package/.agents/workflows/documentation.yml +124 -90
- package/.agents/workflows/feature-delivery.yml +158 -124
- package/.agents/workflows/production-release.yml +207 -173
- package/.agents/workflows/prompt-compilation.yml +126 -0
- package/.agents/workflows/refactor.yml +136 -102
- package/.agents/workflows/security-audit.yml +149 -115
- package/.agents/workflows/shared/quality-gate.yml +3 -1
- package/.agents/workflows/skin-governance.yml +149 -115
- package/.agents/workflows/spec-driven-development.yml +116 -87
- package/CHANGELOG.md +77 -0
- package/README.md +125 -205
- package/bin/install.js +324 -329
- package/package.json +68 -74
- package/tooling/build-registry.js +226 -208
- package/tooling/run-aar.js +55 -126
- package/tooling/sync-versions.js +2 -2
- package/tooling/validate-graph.js +100 -87
- package/tooling/validate-skills.js +32 -14
- package/.agents/README.md +0 -90
- package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
- package/.agents/docs/MIGRATION-STATUS.md +0 -35
- package/.agents/docs/MIGRATION-V8.md +0 -10
- package/.agents/docs/ROADMAP-V8.2.md +0 -78
- package/.agents/docs/V8-CERTIFICATION.md +0 -27
- package/.agents/docs/decisions/ADR-001-v8-migration.md +0 -58
- package/.agents/docs/decisions/ADR-002-workflow-separation.md +0 -50
- package/.agents/docs/decisions/ADR-003-registry-generated.md +0 -54
- package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +0 -27
- package/.agents/registry/capability-graph.yml +0 -390
- package/.agents/registry/skills-index.yml +0 -305
- package/.agents/skills/_template/capability.yaml +0 -34
- package/.agents/skills/_template/evals/scorecard.yaml +0 -19
- package/.agents/skills/qk-access-policy/SKILL.md +0 -206
- package/.agents/skills/qk-access-policy/capability.yaml +0 -23
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
- package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
- package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
- package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
- package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
- package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
- package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
- package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
- package/.agents/skills/qk-code-review/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/SKILL.md +0 -198
- package/.agents/skills/qk-context-loader/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
- package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
- package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
- package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
- package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
- package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-docs/SKILL.md +0 -193
- package/.agents/skills/qk-docs/capability.yaml +0 -23
- package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
- package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
- package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
- package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
- package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
- package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-help/SKILL.md +0 -107
- package/.agents/skills/qk-help/capability.yaml +0 -20
- package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
- package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
- package/.agents/skills/qk-product-specification/SKILL.md +0 -187
- package/.agents/skills/qk-product-specification/capability.yaml +0 -27
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-production-release/SKILL.md +0 -188
- package/.agents/skills/qk-production-release/capability.yaml +0 -27
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-audit/SKILL.md +0 -174
- package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
- package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-health/SKILL.md +0 -202
- package/.agents/skills/qk-project-health/capability.yaml +0 -23
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-project-memory/SKILL.md +0 -303
- package/.agents/skills/qk-project-memory/capability.yaml +0 -23
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-refactor/SKILL.md +0 -243
- package/.agents/skills/qk-refactor/capability.yaml +0 -26
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-security-audit/SKILL.md +0 -280
- package/.agents/skills/qk-security-audit/capability.yaml +0 -29
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
- package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
- package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
- package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
- package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/.agents/skills/qk-ui-builder/references/color.md +0 -115
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
- package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
- package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
- package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
- package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
- package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-upgrade/SKILL.md +0 -301
- package/.agents/skills/qk-upgrade/capability.yaml +0 -24
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
- package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
- package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
- package/.agents/workflows/research.yml +0 -75
- package/.agents/workflows/skill-evolution.yml +0 -97
- package/tooling/fix-refactor.js +0 -8
package/package.json
CHANGED
|
@@ -1,74 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ai-developer-skill-os",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "bin/install.js",
|
|
6
|
-
"files": [
|
|
7
|
-
"bin",
|
|
8
|
-
".agents",
|
|
9
|
-
"tooling",
|
|
10
|
-
"package.json",
|
|
11
|
-
"README.md",
|
|
12
|
-
"CHANGELOG.md"
|
|
13
|
-
],
|
|
14
|
-
"bin": {
|
|
15
|
-
"ai-developer-skill-os": "bin/install.js",
|
|
16
|
-
"ai-skill": "bin/install.js"
|
|
17
|
-
},
|
|
18
|
-
"type": "module",
|
|
19
|
-
"engines": {
|
|
20
|
-
"node": ">=18.0.0"
|
|
21
|
-
},
|
|
22
|
-
"scripts": {
|
|
23
|
-
"sync:
|
|
24
|
-
"build:registry": "node tooling/build-registry.js",
|
|
25
|
-
"test": "vitest run",
|
|
26
|
-
"test:watch": "vitest",
|
|
27
|
-
"test:registry": "vitest run && node tooling/build-registry.js",
|
|
28
|
-
"test:graph": "node tooling/validate-graph.js",
|
|
29
|
-
"lint": "node tooling/validate-skills.js",
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"install:
|
|
35
|
-
"install:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"vitest": "^2.1.0",
|
|
70
|
-
"fast-glob": "^3.3.0",
|
|
71
|
-
"gray-matter": "^4.0.0",
|
|
72
|
-
"js-yaml": "^4.1.0"
|
|
73
|
-
}
|
|
74
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "ai-developer-skill-os",
|
|
3
|
+
"version": "10.2.0",
|
|
4
|
+
"description": "AI Developer Skill OS v10.2 — 11 Governed Core Super-Skills with API Data Discovery Engine, Prompt Compiler Control Plane & Antigravity Cockpit Integration.",
|
|
5
|
+
"main": "bin/install.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"bin",
|
|
8
|
+
".agents",
|
|
9
|
+
"tooling",
|
|
10
|
+
"package.json",
|
|
11
|
+
"README.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"bin": {
|
|
15
|
+
"ai-developer-skill-os": "bin/install.js",
|
|
16
|
+
"ai-skill": "bin/install.js"
|
|
17
|
+
},
|
|
18
|
+
"type": "module",
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=18.0.0"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"sync:v10": "node tooling/sync-versions.js",
|
|
24
|
+
"build:registry": "node tooling/build-registry.js",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
|
+
"test:registry": "vitest run && node tooling/build-registry.js",
|
|
28
|
+
"test:graph": "node tooling/validate-graph.js",
|
|
29
|
+
"lint": "node tooling/validate-skills.js",
|
|
30
|
+
"install:antigravity": "node bin/install.js --ide=antigravity --scope=2",
|
|
31
|
+
"install:antigravity:local": "node bin/install.js --ide=antigravity --scope=1",
|
|
32
|
+
"install:claude": "node bin/install.js --ide=claude --scope=2",
|
|
33
|
+
"install:claude:local": "node bin/install.js --ide=claude --scope=1",
|
|
34
|
+
"install:opencode": "node bin/install.js --ide=opencode --scope=2",
|
|
35
|
+
"install:opencode:local": "node bin/install.js --ide=opencode --scope=1"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/phamquangkhanh2999/ai-developer-skill-os.git"
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"ai",
|
|
43
|
+
"claude",
|
|
44
|
+
"antigravity",
|
|
45
|
+
"opencode",
|
|
46
|
+
"skill-os",
|
|
47
|
+
"developer",
|
|
48
|
+
"agent",
|
|
49
|
+
"prompts",
|
|
50
|
+
"framework",
|
|
51
|
+
"edaos",
|
|
52
|
+
"manifest",
|
|
53
|
+
"registry",
|
|
54
|
+
"eval"
|
|
55
|
+
],
|
|
56
|
+
"author": "Quang Khánh",
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/phamquangkhanh2999/ai-developer-skill-os/issues"
|
|
60
|
+
},
|
|
61
|
+
"homepage": "https://github.com/phamquangkhanh2999/ai-developer-skill-os#readme",
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"fast-glob": "^3.3.0",
|
|
64
|
+
"gray-matter": "^4.0.0",
|
|
65
|
+
"js-yaml": "^4.3.2",
|
|
66
|
+
"vitest": "^2.1.0"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -1,208 +1,226 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* build-registry.js
|
|
3
|
-
*
|
|
4
|
-
* Generates registry/index.yaml (lightweight lookup) and registry/graph.json (O(1) graph & cycle check)
|
|
5
|
-
*
|
|
6
|
-
* Usage: node tooling/build-registry.js
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import fs from 'fs';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
import { fileURLToPath } from 'url';
|
|
12
|
-
import yaml from 'js-yaml';
|
|
13
|
-
|
|
14
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
-
|
|
16
|
-
const SKILLS_DIR = path.join(__dirname, '../.agents/skills');
|
|
17
|
-
const REGISTRY_DIR = path.join(__dirname, '../.agents/registry');
|
|
18
|
-
const INDEX_YAML = path.join(REGISTRY_DIR, 'index.yaml');
|
|
19
|
-
const GRAPH_JSON = path.join(REGISTRY_DIR, 'graph.json');
|
|
20
|
-
|
|
21
|
-
function parseYamlFile(filePath) {
|
|
22
|
-
try {
|
|
23
|
-
let content = fs.readFileSync(filePath, 'utf8');
|
|
24
|
-
if (content.charCodeAt(0) === 0xFEFF) content = content.slice(1);
|
|
25
|
-
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
26
|
-
if (match) {
|
|
27
|
-
return yaml.load(match[1]);
|
|
28
|
-
}
|
|
29
|
-
return yaml.load(content);
|
|
30
|
-
} catch (e) {
|
|
31
|
-
console.error(`[WARN] Failed to parse YAML from ${filePath}: ${e.message}`);
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function buildRegistry() {
|
|
37
|
-
console.log('🔄 Building
|
|
38
|
-
|
|
39
|
-
if (!fs.existsSync(SKILLS_DIR)) {
|
|
40
|
-
console.error('❌ Skills directory not found:', SKILLS_DIR);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
fs.mkdirSync(REGISTRY_DIR, { recursive: true });
|
|
45
|
-
|
|
46
|
-
const dirs = fs.readdirSync(SKILLS_DIR).filter(d =>
|
|
47
|
-
!d.startsWith('_') && fs.statSync(path.join(SKILLS_DIR, d)).isDirectory()
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
const capabilities = {};
|
|
51
|
-
const adjacency = {};
|
|
52
|
-
const reverseAdjacency = {};
|
|
53
|
-
|
|
54
|
-
for (const dir of dirs) {
|
|
55
|
-
const capYamlPath = path.join(SKILLS_DIR, dir, 'capability.yaml');
|
|
56
|
-
const skillMdPath = path.join(SKILLS_DIR, dir, 'SKILL.md');
|
|
57
|
-
|
|
58
|
-
let meta = null;
|
|
59
|
-
let fromCapabilityYaml = false;
|
|
60
|
-
|
|
61
|
-
let skillMdMeta = null;
|
|
62
|
-
if (fs.existsSync(skillMdPath)) {
|
|
63
|
-
skillMdMeta = parseYamlFile(skillMdPath);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (fs.existsSync(capYamlPath)) {
|
|
67
|
-
meta = parseYamlFile(capYamlPath);
|
|
68
|
-
fromCapabilityYaml = true;
|
|
69
|
-
} else if (skillMdMeta) {
|
|
70
|
-
meta = skillMdMeta;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (!meta) continue;
|
|
74
|
-
|
|
75
|
-
const id = meta.id || meta.name || dir;
|
|
76
|
-
const version = meta.version || skillMdMeta?.version || '8.2.0';
|
|
77
|
-
const status = meta.status || skillMdMeta?.status || 'stable';
|
|
78
|
-
const description = meta.description || skillMdMeta?.description || '';
|
|
79
|
-
|
|
80
|
-
// Normalize tags
|
|
81
|
-
let tags = meta.tags || meta.keywords || [];
|
|
82
|
-
if (!Array.isArray(tags) || tags.length === 0) {
|
|
83
|
-
// Derive simple tags from dir words
|
|
84
|
-
tags = dir.replace(/^qk-/, '').split('-');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Normalize dependencies
|
|
88
|
-
let dependencies = meta.dependencies || [];
|
|
89
|
-
if (!fromCapabilityYaml) {
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
capabilities[id] = {
|
|
100
|
-
path: `.agents/skills/${dir}`,
|
|
101
|
-
version,
|
|
102
|
-
status,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
for (const dep of deps) {
|
|
130
|
-
if (!
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
1
|
+
/**
|
|
2
|
+
* build-registry.js
|
|
3
|
+
* V10.2 Governed Capability Metadata & Eval Platform
|
|
4
|
+
* Generates registry/index.yaml (lightweight lookup) and registry/graph.json (O(1) graph & cycle check)
|
|
5
|
+
*
|
|
6
|
+
* Usage: node tooling/build-registry.js
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import yaml from 'js-yaml';
|
|
13
|
+
|
|
14
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
|
|
16
|
+
const SKILLS_DIR = path.join(__dirname, '../.agents/skills');
|
|
17
|
+
const REGISTRY_DIR = path.join(__dirname, '../.agents/registry');
|
|
18
|
+
const INDEX_YAML = path.join(REGISTRY_DIR, 'index.yaml');
|
|
19
|
+
const GRAPH_JSON = path.join(REGISTRY_DIR, 'graph.json');
|
|
20
|
+
|
|
21
|
+
function parseYamlFile(filePath) {
|
|
22
|
+
try {
|
|
23
|
+
let content = fs.readFileSync(filePath, 'utf8');
|
|
24
|
+
if (content.charCodeAt(0) === 0xFEFF) content = content.slice(1);
|
|
25
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
26
|
+
if (match) {
|
|
27
|
+
return yaml.load(match[1]);
|
|
28
|
+
}
|
|
29
|
+
return yaml.load(content);
|
|
30
|
+
} catch (e) {
|
|
31
|
+
console.error(`[WARN] Failed to parse YAML from ${filePath}: ${e.message}`);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function buildRegistry() {
|
|
37
|
+
console.log('🔄 Building V10.2 Governed Capability Registry & O(1) Runtime Graph...');
|
|
38
|
+
|
|
39
|
+
if (!fs.existsSync(SKILLS_DIR)) {
|
|
40
|
+
console.error('❌ Skills directory not found:', SKILLS_DIR);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fs.mkdirSync(REGISTRY_DIR, { recursive: true });
|
|
45
|
+
|
|
46
|
+
const dirs = fs.readdirSync(SKILLS_DIR).filter(d =>
|
|
47
|
+
!d.startsWith('_') && fs.statSync(path.join(SKILLS_DIR, d)).isDirectory()
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const capabilities = {};
|
|
51
|
+
const adjacency = {};
|
|
52
|
+
const reverseAdjacency = {};
|
|
53
|
+
|
|
54
|
+
for (const dir of dirs) {
|
|
55
|
+
const capYamlPath = path.join(SKILLS_DIR, dir, 'capability.yaml');
|
|
56
|
+
const skillMdPath = path.join(SKILLS_DIR, dir, 'SKILL.md');
|
|
57
|
+
|
|
58
|
+
let meta = null;
|
|
59
|
+
let fromCapabilityYaml = false;
|
|
60
|
+
|
|
61
|
+
let skillMdMeta = null;
|
|
62
|
+
if (fs.existsSync(skillMdPath)) {
|
|
63
|
+
skillMdMeta = parseYamlFile(skillMdPath);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (fs.existsSync(capYamlPath)) {
|
|
67
|
+
meta = parseYamlFile(capYamlPath);
|
|
68
|
+
fromCapabilityYaml = true;
|
|
69
|
+
} else if (skillMdMeta) {
|
|
70
|
+
meta = skillMdMeta;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!meta) continue;
|
|
74
|
+
|
|
75
|
+
const id = meta.id || meta.name || dir;
|
|
76
|
+
const version = meta.version || skillMdMeta?.version || '8.2.0';
|
|
77
|
+
const status = meta.status || skillMdMeta?.status || 'stable';
|
|
78
|
+
const description = meta.description || skillMdMeta?.description || '';
|
|
79
|
+
|
|
80
|
+
// Normalize tags
|
|
81
|
+
let tags = meta.tags || meta.keywords || [];
|
|
82
|
+
if (!Array.isArray(tags) || tags.length === 0) {
|
|
83
|
+
// Derive simple tags from dir words
|
|
84
|
+
tags = dir.replace(/^qk-/, '').split('-');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Normalize dependencies - only use explicit skill-to-skill dependencies
|
|
88
|
+
let dependencies = meta.dependencies || [];
|
|
89
|
+
if (!fromCapabilityYaml) {
|
|
90
|
+
// Only use explicit dependencies, not workflow names
|
|
91
|
+
// workflow field identifies the primary workflow, not a dependency
|
|
92
|
+
const extraDeps = meta.decision_boundary?.delegates_to || [];
|
|
93
|
+
if (extraDeps.length > 0) {
|
|
94
|
+
const depSet = new Set([...dependencies, ...extraDeps]);
|
|
95
|
+
dependencies = Array.from(depSet);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
capabilities[id] = {
|
|
100
|
+
path: `.agents/skills/${dir}`,
|
|
101
|
+
version,
|
|
102
|
+
status,
|
|
103
|
+
platforms: meta.platforms || ["antigravity", "claude", "opencode"],
|
|
104
|
+
tags,
|
|
105
|
+
dependencies
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
adjacency[id] = dependencies;
|
|
109
|
+
if (!reverseAdjacency[id]) reverseAdjacency[id] = [];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ── Hardcoded Cross-Skill Edges (V10.2) ─────
|
|
113
|
+
// Directed acyclic graph: qk-orchestrator is the root hub
|
|
114
|
+
// It routes to all other skills. No other skill routes back to it.
|
|
115
|
+
const crossEdges = {
|
|
116
|
+
'qk-orchestrator': ['qk-prompt-compiler', 'qk-product-spec', 'qk-feature-delivery', 'qk-bug-resolution', 'qk-code-cleaner', 'qk-code-review', 'qk-ui-engineer', 'qk-backend-data', 'qk-devops-release', 'qk-api-data-discovery']
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
for (const [skillId, deps] of Object.entries(crossEdges)) {
|
|
120
|
+
if (adjacency[skillId]) {
|
|
121
|
+
adjacency[skillId] = [...new Set([...adjacency[skillId], ...deps])];
|
|
122
|
+
} else {
|
|
123
|
+
adjacency[skillId] = deps;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Populate reverse adjacency for orphan detection
|
|
128
|
+
for (const [id, deps] of Object.entries(adjacency)) {
|
|
129
|
+
for (const dep of deps) {
|
|
130
|
+
if (!reverseAdjacency[dep]) reverseAdjacency[dep] = [];
|
|
131
|
+
reverseAdjacency[dep].push(id);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Detect cycles using DFS
|
|
136
|
+
let hasCycles = false;
|
|
137
|
+
const visited = {};
|
|
138
|
+
const recursionStack = {};
|
|
139
|
+
|
|
140
|
+
function detectCycle(node) {
|
|
141
|
+
visited[node] = true;
|
|
142
|
+
recursionStack[node] = true;
|
|
143
|
+
|
|
144
|
+
const deps = adjacency[node] || [];
|
|
145
|
+
for (const dep of deps) {
|
|
146
|
+
if (!visited[dep]) {
|
|
147
|
+
if (detectCycle(dep)) return true;
|
|
148
|
+
} else if (recursionStack[dep]) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
recursionStack[node] = false;
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
for (const node of Object.keys(adjacency)) {
|
|
158
|
+
if (!visited[node]) {
|
|
159
|
+
if (detectCycle(node)) {
|
|
160
|
+
hasCycles = true;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Build Graph JSON (O(1) Runtime lookups)
|
|
167
|
+
const graphNodes = {};
|
|
168
|
+
for (const [id, data] of Object.entries(capabilities)) {
|
|
169
|
+
const dependents = reverseAdjacency[id] || [];
|
|
170
|
+
const isOrphan = data.dependencies.length === 0 && dependents.length === 0 && id !== 'qk-orchestrator' && id !== 'qk-help';
|
|
171
|
+
|
|
172
|
+
graphNodes[id] = {
|
|
173
|
+
path: data.path,
|
|
174
|
+
version: data.version,
|
|
175
|
+
platforms: data.platforms || ["antigravity", "claude", "opencode"],
|
|
176
|
+
tags: data.tags,
|
|
177
|
+
dependencies: data.dependencies,
|
|
178
|
+
dependents,
|
|
179
|
+
is_orphan: isOrphan
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const allIds = Object.keys(capabilities);
|
|
184
|
+
const activeSkills = allIds.filter(id => capabilities[id].status === 'stable' || capabilities[id].status === 'experimental');
|
|
185
|
+
const archivedSkills = allIds.filter(id => capabilities[id].status === 'archived');
|
|
186
|
+
const relocatedSkills = allIds.filter(id => capabilities[id].status === 'relocated');
|
|
187
|
+
|
|
188
|
+
const graphJsonData = {
|
|
189
|
+
schema_version: 1,
|
|
190
|
+
manifest_version: '10.2',
|
|
191
|
+
generated_at: new Date().toISOString(),
|
|
192
|
+
nodes: graphNodes,
|
|
193
|
+
edges: Object.entries(adjacency).flatMap(([from, toList]) => toList.map(to => ({ from, to, relation: 'depends_on' }))),
|
|
194
|
+
adjacency,
|
|
195
|
+
stats: {
|
|
196
|
+
total_scanned: allIds.length,
|
|
197
|
+
active: activeSkills.length,
|
|
198
|
+
archived: archivedSkills.length,
|
|
199
|
+
relocated: relocatedSkills.length,
|
|
200
|
+
has_cycles: hasCycles
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Build Registry Index YAML (Lightweight lookup)
|
|
205
|
+
const indexYamlContent = `# AUTO-GENERATED BY registry-builder (tooling/build-registry.js)\n# DO NOT EDIT MANUALLY. THIS IS A GENERATED RUNTIME ARTIFACT.\n` +
|
|
206
|
+
yaml.dump({
|
|
207
|
+
schema_version: 1,
|
|
208
|
+
manifest_version: '10.2',
|
|
209
|
+
generated_at: new Date().toISOString(),
|
|
210
|
+
stats: {
|
|
211
|
+
total_scanned: allIds.length,
|
|
212
|
+
active: activeSkills.length,
|
|
213
|
+
archived: archivedSkills.length,
|
|
214
|
+
relocated: relocatedSkills.length
|
|
215
|
+
},
|
|
216
|
+
capabilities
|
|
217
|
+
}, { indent: 2 });
|
|
218
|
+
|
|
219
|
+
fs.writeFileSync(INDEX_YAML, indexYamlContent, 'utf8');
|
|
220
|
+
fs.writeFileSync(GRAPH_JSON, JSON.stringify(graphJsonData, null, 2), 'utf8');
|
|
221
|
+
|
|
222
|
+
console.log(`✅ Generated lightweight registry index at .agents/registry/index.yaml (${allIds.length} scanned: ${activeSkills.length} active, ${archivedSkills.length} archived, ${relocatedSkills.length} relocated)`);
|
|
223
|
+
console.log(`✅ Generated O(1) adjacency graph at .agents/registry/graph.json (active: ${activeSkills.length}, has_cycles: ${hasCycles})`);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
buildRegistry();
|