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.
Files changed (258) hide show
  1. package/.agents/AGENTS.md +73 -40
  2. package/.agents/DEV_PROFILE.md +36 -2
  3. package/.agents/LICENSE +21 -21
  4. package/.agents/docs/ARCHITECTURE.md +56 -120
  5. package/.agents/docs/GOVERNANCE.md +3 -3
  6. package/.agents/docs/SPEC.md +137 -60
  7. package/.agents/docs/VERSIONING.md +25 -57
  8. package/.agents/docs/adr/0005-v10-platform-consolidation.md +50 -0
  9. package/.agents/docs/schemas/learning.schema.yml +22 -57
  10. package/.agents/docs/schemas/skill.schema.yml +116 -161
  11. package/.agents/docs/schemas/workflow.schema.yml +51 -26
  12. package/.agents/docs/skill-classification.md +1 -1
  13. package/.agents/registry/graph.json +193 -346
  14. package/.agents/registry/index.yaml +90 -233
  15. package/.agents/rules/coding.md +30 -12
  16. package/.agents/rules/command-safety.md +20 -9
  17. package/.agents/rules/global.md +234 -28
  18. package/.agents/rules/prompt-compiler.md +170 -0
  19. package/.agents/rules/safety.md +1 -1
  20. package/.agents/rules/security.md +1 -1
  21. package/.agents/rules/skill-quality.md +18 -3
  22. package/.agents/skills/_template/SKILL.md +238 -88
  23. package/.agents/skills/qk-api-data-discovery/SKILL.md +456 -0
  24. package/.agents/skills/qk-api-data-discovery/references/bronze-record-format.md +47 -0
  25. package/.agents/skills/qk-api-data-discovery/references/data-contract-yaml.md +72 -0
  26. package/.agents/skills/qk-api-data-discovery/references/discovery-report-template.md +110 -0
  27. package/.agents/skills/qk-backend-data/SKILL.md +339 -0
  28. package/.agents/skills/qk-bug-resolution/SKILL.md +328 -248
  29. package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
  30. package/.agents/skills/qk-code-cleaner/SKILL.md +399 -0
  31. package/.agents/skills/qk-code-review/SKILL.md +320 -247
  32. package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
  33. package/.agents/skills/qk-code-review/references/ai/{v8-schema-validation.md → schema-validation.md} +2 -2
  34. package/.agents/skills/qk-code-review/references/cross-cutting/async-concurrency-patterns.md +515 -515
  35. package/.agents/skills/qk-code-review/references/cross-cutting/error-handling-principles.md +492 -492
  36. package/.agents/skills/qk-code-review/references/cross-cutting/n-plus-one-queries.md +309 -309
  37. package/.agents/skills/qk-code-review/references/cross-cutting/sql-injection-prevention.md +307 -307
  38. package/.agents/skills/qk-code-review/references/cross-cutting/xss-prevention.md +263 -263
  39. package/.agents/skills/qk-code-review/references/languages/angular.md +768 -768
  40. package/.agents/skills/qk-code-review/references/languages/c.md +890 -890
  41. package/.agents/skills/qk-code-review/references/languages/cpp.md +893 -893
  42. package/.agents/skills/qk-code-review/references/languages/css-less-sass.md +661 -661
  43. package/.agents/skills/qk-code-review/references/languages/django.md +985 -985
  44. package/.agents/skills/qk-code-review/references/languages/fastapi.md +580 -580
  45. package/.agents/skills/qk-code-review/references/languages/go.md +993 -993
  46. package/.agents/skills/qk-code-review/references/languages/java.md +409 -409
  47. package/.agents/skills/qk-code-review/references/languages/java8.md +586 -586
  48. package/.agents/skills/qk-code-review/references/languages/kotlin.md +1018 -1018
  49. package/.agents/skills/qk-code-review/references/languages/nestjs.md +593 -593
  50. package/.agents/skills/qk-code-review/references/languages/php.md +684 -684
  51. package/.agents/skills/qk-code-review/references/languages/python.md +1073 -1073
  52. package/.agents/skills/qk-code-review/references/languages/qt.md +757 -757
  53. package/.agents/skills/qk-code-review/references/languages/react.md +871 -871
  54. package/.agents/skills/qk-code-review/references/languages/ruby.md +964 -964
  55. package/.agents/skills/qk-code-review/references/languages/rust.md +846 -846
  56. package/.agents/skills/qk-code-review/references/languages/svelte.md +1064 -1064
  57. package/.agents/skills/qk-code-review/references/languages/swift.md +936 -936
  58. package/.agents/skills/qk-code-review/references/languages/typescript.md +1016 -1016
  59. package/.agents/skills/qk-code-review/references/languages/vue.md +924 -924
  60. package/.agents/skills/qk-code-review/references/languages/zig.md +440 -440
  61. package/.agents/skills/qk-devops-release/SKILL.md +294 -0
  62. package/.agents/skills/qk-feature-delivery/SKILL.md +331 -247
  63. package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
  64. package/.agents/skills/qk-orchestrator/SKILL.md +286 -152
  65. package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
  66. package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
  67. package/.agents/skills/qk-product-spec/SKILL.md +262 -0
  68. package/.agents/skills/qk-prompt-compiler/SKILL.md +444 -0
  69. package/.agents/skills/qk-ui-engineer/SKILL.md +286 -0
  70. package/.agents/workflows/_schema.yml +146 -146
  71. package/.agents/workflows/bug-resolution.yml +155 -121
  72. package/.agents/workflows/code-review.yml +127 -93
  73. package/.agents/workflows/context-discovery.yml +128 -94
  74. package/.agents/workflows/documentation.yml +124 -90
  75. package/.agents/workflows/feature-delivery.yml +158 -124
  76. package/.agents/workflows/production-release.yml +207 -173
  77. package/.agents/workflows/prompt-compilation.yml +126 -0
  78. package/.agents/workflows/refactor.yml +136 -102
  79. package/.agents/workflows/security-audit.yml +149 -115
  80. package/.agents/workflows/shared/quality-gate.yml +3 -1
  81. package/.agents/workflows/skin-governance.yml +149 -115
  82. package/.agents/workflows/spec-driven-development.yml +116 -87
  83. package/CHANGELOG.md +77 -0
  84. package/README.md +125 -205
  85. package/bin/install.js +324 -329
  86. package/package.json +68 -74
  87. package/tooling/build-registry.js +226 -208
  88. package/tooling/run-aar.js +55 -126
  89. package/tooling/sync-versions.js +2 -2
  90. package/tooling/validate-graph.js +100 -87
  91. package/tooling/validate-skills.js +32 -14
  92. package/.agents/README.md +0 -90
  93. package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
  94. package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
  95. package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
  96. package/.agents/docs/MIGRATION-STATUS.md +0 -35
  97. package/.agents/docs/MIGRATION-V8.md +0 -10
  98. package/.agents/docs/ROADMAP-V8.2.md +0 -78
  99. package/.agents/docs/V8-CERTIFICATION.md +0 -27
  100. package/.agents/docs/decisions/ADR-001-v8-migration.md +0 -58
  101. package/.agents/docs/decisions/ADR-002-workflow-separation.md +0 -50
  102. package/.agents/docs/decisions/ADR-003-registry-generated.md +0 -54
  103. package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +0 -27
  104. package/.agents/registry/capability-graph.yml +0 -390
  105. package/.agents/registry/skills-index.yml +0 -305
  106. package/.agents/skills/_template/capability.yaml +0 -34
  107. package/.agents/skills/_template/evals/scorecard.yaml +0 -19
  108. package/.agents/skills/qk-access-policy/SKILL.md +0 -206
  109. package/.agents/skills/qk-access-policy/capability.yaml +0 -23
  110. package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
  111. package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
  112. package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
  113. package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
  114. package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
  115. package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
  116. package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
  117. package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
  118. package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
  119. package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
  120. package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
  121. package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
  122. package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
  123. package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
  124. package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
  125. package/.agents/skills/qk-code-review/capability.yaml +0 -23
  126. package/.agents/skills/qk-context-loader/SKILL.md +0 -198
  127. package/.agents/skills/qk-context-loader/capability.yaml +0 -23
  128. package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
  129. package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
  130. package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
  131. package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
  132. package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
  133. package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
  134. package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
  135. package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
  136. package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
  137. package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
  138. package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
  139. package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
  140. package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
  141. package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
  142. package/.agents/skills/qk-docs/SKILL.md +0 -193
  143. package/.agents/skills/qk-docs/capability.yaml +0 -23
  144. package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
  145. package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
  146. package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
  147. package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
  148. package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
  149. package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
  150. package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
  151. package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
  152. package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
  153. package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
  154. package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
  155. package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
  156. package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
  157. package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
  158. package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
  159. package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
  160. package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
  161. package/.agents/skills/qk-help/SKILL.md +0 -107
  162. package/.agents/skills/qk-help/capability.yaml +0 -20
  163. package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
  164. package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
  165. package/.agents/skills/qk-product-specification/SKILL.md +0 -187
  166. package/.agents/skills/qk-product-specification/capability.yaml +0 -27
  167. package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
  168. package/.agents/skills/qk-production-release/SKILL.md +0 -188
  169. package/.agents/skills/qk-production-release/capability.yaml +0 -27
  170. package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
  171. package/.agents/skills/qk-project-audit/SKILL.md +0 -174
  172. package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
  173. package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
  174. package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
  175. package/.agents/skills/qk-project-health/SKILL.md +0 -202
  176. package/.agents/skills/qk-project-health/capability.yaml +0 -23
  177. package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
  178. package/.agents/skills/qk-project-memory/SKILL.md +0 -303
  179. package/.agents/skills/qk-project-memory/capability.yaml +0 -23
  180. package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
  181. package/.agents/skills/qk-refactor/SKILL.md +0 -243
  182. package/.agents/skills/qk-refactor/capability.yaml +0 -26
  183. package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
  184. package/.agents/skills/qk-security-audit/SKILL.md +0 -280
  185. package/.agents/skills/qk-security-audit/capability.yaml +0 -29
  186. package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
  187. package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
  188. package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
  189. package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
  190. package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
  191. package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
  192. package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
  193. package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
  194. package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
  195. package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
  196. package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
  197. package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
  198. package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
  199. package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
  200. package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
  201. package/.agents/skills/qk-ui-builder/references/color.md +0 -115
  202. package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
  203. package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
  204. package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
  205. package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
  206. package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
  207. package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
  208. package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
  209. package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
  210. package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
  211. package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
  212. package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
  213. package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
  214. package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
  215. package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
  216. package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
  217. package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
  218. package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
  219. package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
  220. package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
  221. package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
  222. package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
  223. package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
  224. package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
  225. package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
  226. package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
  227. package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
  228. package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
  229. package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
  230. package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
  231. package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
  232. package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
  233. package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
  234. package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
  235. package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
  236. package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
  237. package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
  238. package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
  239. package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
  240. package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
  241. package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
  242. package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
  243. package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
  244. package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
  245. package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
  246. package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
  247. package/.agents/skills/qk-upgrade/SKILL.md +0 -301
  248. package/.agents/skills/qk-upgrade/capability.yaml +0 -24
  249. package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
  250. package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
  251. package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
  252. package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
  253. package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
  254. package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
  255. package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
  256. package/.agents/workflows/research.yml +0 -75
  257. package/.agents/workflows/skill-evolution.yml +0 -97
  258. package/tooling/fix-refactor.js +0 -8
package/package.json CHANGED
@@ -1,74 +1,68 @@
1
- {
2
- "name": "ai-developer-skill-os",
3
- "version": "9.3.1",
4
- "description": "EDAOS v9.3 — SSOT Governed Capability Platform with 2-Clause Triggers & Full Technical Lifecycle.",
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:v9": "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
- "eval": "node evals/runner.js",
31
- "eval:all": "node evals/runner.js --all",
32
- "test:agent": "node tests/agent-evaluation/runner/evaluate-routing.js",
33
- "generate:evaluation": "node tooling/generate-evaluation-cases.cjs",
34
- "install:antigravity": "node bin/install.js --ide=antigravity --scope=2",
35
- "install:antigravity:local": "node bin/install.js --ide=antigravity --scope=1",
36
- "install:cursor": "node bin/install.js --ide=cursor --scope=2",
37
- "install:cursor:local": "node bin/install.js --ide=cursor --scope=1",
38
- "install:windsurf": "node bin/install.js --ide=windsurf --scope=2",
39
- "install:claude": "node bin/install.js --ide=claude --scope=2",
40
- "install:kilo": "node bin/install.js --ide=kilo --scope=2",
41
- "install:multi": "node bin/install.js --ide=multi-ide --scope=2"
42
- },
43
- "repository": {
44
- "type": "git",
45
- "url": "https://github.com/phamquangkhanh2999/ai-developer-skill-os.git"
46
- },
47
- "keywords": [
48
- "ai",
49
- "claude",
50
- "cursor",
51
- "windsurf",
52
- "skills",
53
- "developer",
54
- "agent",
55
- "prompts",
56
- "framework",
57
- "edaos",
58
- "manifest",
59
- "registry",
60
- "eval"
61
- ],
62
- "author": "Quang Khánh",
63
- "license": "MIT",
64
- "bugs": {
65
- "url": "https://github.com/phamquangkhanh2999/ai-developer-skill-os/issues"
66
- },
67
- "homepage": "https://github.com/phamquangkhanh2999/ai-developer-skill-os#readme",
68
- "devDependencies": {
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
- * V8.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 V8.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
88
- let dependencies = meta.dependencies || [];
89
- if (!fromCapabilityYaml) {
90
- // Derive from V8.1 skill frontmatter decision_boundary / workflow
91
- const deps = new Set();
92
- if (meta.workflow && typeof meta.workflow === 'string') deps.add(meta.workflow);
93
- if (meta.decision_boundary?.delegates_to) {
94
- meta.decision_boundary.delegates_to.forEach(d => deps.add(d));
95
- }
96
- dependencies = Array.from(deps);
97
- }
98
-
99
- capabilities[id] = {
100
- path: `.agents/skills/${dir}`,
101
- version,
102
- status,
103
- tags,
104
- dependencies
105
- };
106
-
107
- adjacency[id] = dependencies;
108
- if (!reverseAdjacency[id]) reverseAdjacency[id] = [];
109
- }
110
-
111
- // Populate reverse adjacency for orphan detection
112
- for (const [id, deps] of Object.entries(adjacency)) {
113
- for (const dep of deps) {
114
- if (!reverseAdjacency[dep]) reverseAdjacency[dep] = [];
115
- reverseAdjacency[dep].push(id);
116
- }
117
- }
118
-
119
- // Detect cycles using DFS
120
- let hasCycles = false;
121
- const visited = {};
122
- const recursionStack = {};
123
-
124
- function detectCycle(node) {
125
- visited[node] = true;
126
- recursionStack[node] = true;
127
-
128
- const deps = adjacency[node] || [];
129
- for (const dep of deps) {
130
- if (!visited[dep]) {
131
- if (detectCycle(dep)) return true;
132
- } else if (recursionStack[dep]) {
133
- return true;
134
- }
135
- }
136
-
137
- recursionStack[node] = false;
138
- return false;
139
- }
140
-
141
- for (const node of Object.keys(adjacency)) {
142
- if (!visited[node]) {
143
- if (detectCycle(node)) {
144
- hasCycles = true;
145
- break;
146
- }
147
- }
148
- }
149
-
150
- // Build Graph JSON (O(1) Runtime lookups)
151
- const graphNodes = {};
152
- for (const [id, data] of Object.entries(capabilities)) {
153
- const dependents = reverseAdjacency[id] || [];
154
- const isOrphan = data.dependencies.length === 0 && dependents.length === 0 && id !== 'qk-orchestrator' && id !== 'qk-help';
155
-
156
- graphNodes[id] = {
157
- path: data.path,
158
- version: data.version,
159
- tags: data.tags,
160
- dependencies: data.dependencies,
161
- dependents,
162
- is_orphan: isOrphan
163
- };
164
- }
165
-
166
- const allIds = Object.keys(capabilities);
167
- const activeSkills = allIds.filter(id => capabilities[id].status === 'stable' || capabilities[id].status === 'experimental');
168
- const archivedSkills = allIds.filter(id => capabilities[id].status === 'archived');
169
- const relocatedSkills = allIds.filter(id => capabilities[id].status === 'relocated');
170
-
171
- const graphJsonData = {
172
- schema_version: 1,
173
- manifest_version: '8.2',
174
- generated_at: new Date().toISOString(),
175
- nodes: graphNodes,
176
- adjacency,
177
- stats: {
178
- total_scanned: allIds.length,
179
- active: activeSkills.length,
180
- archived: archivedSkills.length,
181
- relocated: relocatedSkills.length,
182
- has_cycles: hasCycles
183
- }
184
- };
185
-
186
- // Build Registry Index YAML (Lightweight lookup)
187
- const indexYamlContent = `# AUTO-GENERATED BY registry-builder (tooling/build-registry.js)\n# DO NOT EDIT MANUALLY. THIS IS A GENERATED RUNTIME ARTIFACT.\n` +
188
- yaml.dump({
189
- schema_version: 1,
190
- manifest_version: '8.2',
191
- generated_at: new Date().toISOString(),
192
- stats: {
193
- total_scanned: allIds.length,
194
- active: activeSkills.length,
195
- archived: archivedSkills.length,
196
- relocated: relocatedSkills.length
197
- },
198
- capabilities
199
- }, { indent: 2 });
200
-
201
- fs.writeFileSync(INDEX_YAML, indexYamlContent, 'utf8');
202
- fs.writeFileSync(GRAPH_JSON, JSON.stringify(graphJsonData, null, 2), 'utf8');
203
-
204
- console.log(`✅ Generated lightweight registry index at .agents/registry/index.yaml (${allIds.length} scanned: ${activeSkills.length} active, ${archivedSkills.length} archived, ${relocatedSkills.length} relocated)`);
205
- console.log(`✅ Generated O(1) adjacency graph at .agents/registry/graph.json (active: ${activeSkills.length}, has_cycles: ${hasCycles})`);
206
- }
207
-
208
- buildRegistry();
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();