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/tooling/run-aar.js
CHANGED
|
@@ -1,143 +1,72 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import YAML from 'js-yaml';
|
|
4
3
|
import { fileURLToPath } from 'url';
|
|
5
4
|
|
|
6
5
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
6
|
const rootDir = path.resolve(__dirname, '..');
|
|
8
|
-
const
|
|
9
|
-
const graphPath = path.join(rootDir, '.agents/registry/capability-graph.yml');
|
|
10
|
-
const workflowsDir = path.join(rootDir, '.agents/workflows');
|
|
7
|
+
const graphPath = path.join(rootDir, '.agents/registry/graph.json');
|
|
11
8
|
const reportsDir = path.join(rootDir, '.agents/reports');
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return YAML.load(match[1]);
|
|
22
|
-
} catch (e) {
|
|
23
|
-
return null;
|
|
10
|
+
/**
|
|
11
|
+
* Run After Action Review (AAR).
|
|
12
|
+
* Reads graph.json and generates health report.
|
|
13
|
+
*/
|
|
14
|
+
export async function runAar() {
|
|
15
|
+
if (!fs.existsSync(graphPath)) {
|
|
16
|
+
console.error('❌ graph.json not found. Run: node tooling/build-registry.js');
|
|
17
|
+
return;
|
|
24
18
|
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// 1. Skill Audit
|
|
28
|
-
function runSkillAudit() {
|
|
29
|
-
const dirs = fs.readdirSync(skillsDir).filter(name => !name.startsWith('_') && fs.statSync(path.join(skillsDir, name)).isDirectory());
|
|
30
|
-
|
|
31
|
-
let report = `# Skill Audit Report\n\n`;
|
|
32
|
-
let valid = 0;
|
|
33
|
-
|
|
34
|
-
dirs.forEach(skill => {
|
|
35
|
-
const skillPath = path.join(skillsDir, skill, 'SKILL.md');
|
|
36
|
-
if (!fs.existsSync(skillPath)) return;
|
|
37
|
-
|
|
38
|
-
const content = fs.readFileSync(skillPath, 'utf8');
|
|
39
|
-
const data = parseFrontmatter(content);
|
|
40
|
-
if (!data) return;
|
|
41
|
-
|
|
42
|
-
// Check boundary
|
|
43
|
-
const bounds = data.decision_boundary || {};
|
|
44
|
-
const hasOwns = bounds.owns && bounds.owns.length > 0;
|
|
45
|
-
const hasNotOwn = bounds.does_not_own && bounds.does_not_own.length > 0;
|
|
46
|
-
const hasConflicts = bounds.conflicts_with !== undefined; // can be empty array
|
|
47
|
-
const hasDelegates = bounds.delegates_to !== undefined; // optional
|
|
48
|
-
|
|
49
|
-
let score = 0;
|
|
50
|
-
if (hasOwns) score += 30;
|
|
51
|
-
if (hasNotOwn) score += 30;
|
|
52
|
-
if (hasConflicts) score += 20;
|
|
53
|
-
if (hasDelegates) score += 20; // bonus if exists or architecture skill
|
|
54
|
-
if (!hasDelegates && !skill.includes('architecture') && !skill.includes('orchestrator')) {
|
|
55
|
-
score += 20; // It's fine if implementation skill doesn't delegate
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
report += `## ${skill}\n`;
|
|
59
|
-
report += `- \`owns\`: ${hasOwns ? '✅' : '❌'}\n`;
|
|
60
|
-
report += `- \`does_not_own\`: ${hasNotOwn ? '✅' : '❌'}\n`;
|
|
61
|
-
report += `- \`conflicts_with\`: ${hasConflicts ? '✅' : '❌'}\n`;
|
|
62
|
-
report += `- \`delegates_to\`: ${hasDelegates ? '✅' : (skill.includes('architecture') ? '❌ (Architecture should delegate)' : '➖ (Optional)')}\n`;
|
|
63
|
-
report += `**Boundary Health Score: ${score}/100**\n\n`;
|
|
64
|
-
|
|
65
|
-
if (score >= 80) valid++;
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
report += `\n**Total Scanned:** ${dirs.length}\n`;
|
|
69
|
-
report += `**Total Passed (>=80):** ${valid}\n`;
|
|
70
|
-
|
|
71
|
-
fs.writeFileSync(path.join(reportsDir, 'skill-audit.md'), report);
|
|
72
|
-
console.log('✅ Skill audit complete.');
|
|
73
|
-
}
|
|
74
19
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const graph = YAML.load(fs.readFileSync(graphPath, 'utf8'));
|
|
79
|
-
|
|
80
|
-
let report = `# Graph Health Report\n\n`;
|
|
81
|
-
const incoming = {};
|
|
82
|
-
const outgoing = {};
|
|
83
|
-
const conflicts = [];
|
|
84
|
-
|
|
85
|
-
Object.keys(graph.nodes).forEach(n => {
|
|
86
|
-
incoming[n] = 0;
|
|
87
|
-
outgoing[n] = 0;
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
graph.edges.forEach(e => {
|
|
91
|
-
if (outgoing[e.from] !== undefined) outgoing[e.from]++;
|
|
92
|
-
if (incoming[e.to] !== undefined) incoming[e.to]++;
|
|
93
|
-
|
|
94
|
-
if (e.relation === 'conflicts_with') {
|
|
95
|
-
conflicts.push(`- **${e.from}** conflicts **${e.to}**\n - Reason: Semantic overlap\n - Severity: High\n - Resolution: Context loader intervention required`);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
20
|
+
if (!fs.existsSync(reportsDir)) {
|
|
21
|
+
fs.mkdirSync(reportsDir, { recursive: true });
|
|
22
|
+
}
|
|
98
23
|
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
const
|
|
24
|
+
const graph = JSON.parse(fs.readFileSync(graphPath, 'utf8'));
|
|
25
|
+
const nodes = Object.keys(graph.nodes || {});
|
|
26
|
+
const edges = graph.edges || [];
|
|
27
|
+
const adjacency = graph.adjacency || {};
|
|
28
|
+
|
|
29
|
+
let report = '# After Action Review (AAR)\n\n';
|
|
30
|
+
report += `**Generated:** ${new Date().toISOString()}\n\n`;
|
|
31
|
+
|
|
32
|
+
// Node health
|
|
33
|
+
report += '## Node Health\n\n';
|
|
34
|
+
report += '| Node | Version | Platforms | Dependencies |\n';
|
|
35
|
+
report += '|------|---------|-----------|-------------|\n';
|
|
36
|
+
for (const [id, node] of Object.entries(graph.nodes || {})) {
|
|
37
|
+
const deps = (node.dependencies || []).join(', ') || '—';
|
|
38
|
+
report += `| ${id} | ${node.version || '—'} | ${(node.platforms || []).join(', ') || '—'} | ${deps} |\n`;
|
|
39
|
+
}
|
|
103
40
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
41
|
+
// Edge summary
|
|
42
|
+
report += '\n## Edge Summary\n\n';
|
|
43
|
+
report += `- Total edges: ${edges.length}\n`;
|
|
44
|
+
report += `- Total nodes: ${nodes.length}\n`;
|
|
45
|
+
report += `- Orphans: ${graph.orphan_count || 0}\n`;
|
|
46
|
+
report += `- Has cycles: ${graph.has_cycles || false}\n`;
|
|
47
|
+
|
|
48
|
+
// Platform coverage
|
|
49
|
+
report += '\n## Platform Coverage\n\n';
|
|
50
|
+
const platformCounts = { antigravity: 0, claude: 0, opencode: 0 };
|
|
51
|
+
for (const node of Object.values(graph.nodes || {})) {
|
|
52
|
+
for (const p of node.platforms || []) {
|
|
53
|
+
if (platformCounts[p] !== undefined) platformCounts[p]++;
|
|
117
54
|
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
report += `${c}\n\n`;
|
|
123
|
-
});
|
|
55
|
+
}
|
|
56
|
+
for (const [platform, count] of Object.entries(platformCounts)) {
|
|
57
|
+
report += `- ${platform}: ${count}/${nodes.length} skills\n`;
|
|
58
|
+
}
|
|
124
59
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
60
|
+
// Version compliance
|
|
61
|
+
report += '\n## Version Compliance\n\n';
|
|
62
|
+
let compliant = 0;
|
|
63
|
+
for (const [id, node] of Object.entries(graph.nodes || {})) {
|
|
64
|
+
if (node.version === '10.2.0') compliant++;
|
|
65
|
+
}
|
|
66
|
+
report += `- Version 10.2.0: ${compliant}/${nodes.length}\n`;
|
|
128
67
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const workflows = fs.readdirSync(workflowsDir).filter(f => f.endsWith('.md') || f.endsWith('.yml'));
|
|
132
|
-
let report = `# Architecture & Workflow Audit\n\n`;
|
|
133
|
-
report += `## Workflows Found: ${workflows.length}\n`;
|
|
134
|
-
workflows.forEach(w => {
|
|
135
|
-
report += `- ${w}\n`;
|
|
136
|
-
});
|
|
137
|
-
fs.writeFileSync(path.join(reportsDir, 'architecture-audit.md'), report);
|
|
138
|
-
console.log('✅ Workflow audit complete.');
|
|
68
|
+
fs.writeFileSync(path.join(reportsDir, 'aar-report.md'), report);
|
|
69
|
+
console.log('✅ AAR report generated.');
|
|
139
70
|
}
|
|
140
71
|
|
|
141
|
-
|
|
142
|
-
runGraphAudit();
|
|
143
|
-
runWorkflowAudit();
|
|
72
|
+
export default { runAar };
|
package/tooling/sync-versions.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
|
|
4
|
-
const targetVersion = "
|
|
4
|
+
const targetVersion = "10.2.0";
|
|
5
5
|
const rootDir = process.cwd();
|
|
6
6
|
const skillsDir = path.join(rootDir, '.agents', 'skills');
|
|
7
7
|
|
|
@@ -253,7 +253,7 @@ skills.forEach(skill => {
|
|
|
253
253
|
if (fs.existsSync(skillMdPath)) {
|
|
254
254
|
let content = fs.readFileSync(skillMdPath, 'utf8');
|
|
255
255
|
let newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
|
|
256
|
-
newContent = newContent.replace(/^# ── V[\d]+: Classification/m, `# ──
|
|
256
|
+
newContent = newContent.replace(/^# ── V[\d]+: Classification/m, `# ── V10: Classification`);
|
|
257
257
|
|
|
258
258
|
// Inject or update Memory Workflow (except qk-project-memory which manages memory itself)
|
|
259
259
|
if (skill !== 'qk-project-memory' && skill !== 'qk-help') {
|
|
@@ -1,87 +1,100 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
let errors = [];
|
|
20
|
-
|
|
21
|
-
// 1. Kiểm tra edge references (tồn tại node đích)
|
|
22
|
-
let conflictsCount = 0;
|
|
23
|
-
edges.forEach(e => {
|
|
24
|
-
if (!nodes.includes(e.to)) {
|
|
25
|
-
// Cảnh báo nhưng không luôn lỗi vì to có thể là tên workflow
|
|
26
|
-
if (e.relation !== 'depends_on') {
|
|
27
|
-
errors.push(`Edge error: '${e.from}' trỏ đến '${e.to}' không tồn tại trong nodes (${e.relation})`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (e.relation === 'conflicts_with') conflictsCount++;
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
const GRAPH_FILE = path.resolve('.agents/registry/graph.json');
|
|
5
|
+
|
|
6
|
+
function validateGraph() {
|
|
7
|
+
if (!fs.existsSync(GRAPH_FILE)) {
|
|
8
|
+
console.error('Không tìm thấy graph.json');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const content = fs.readFileSync(GRAPH_FILE, 'utf8');
|
|
13
|
+
const graph = JSON.parse(content);
|
|
14
|
+
|
|
15
|
+
const nodes = Object.keys(graph.nodes || {});
|
|
16
|
+
const edges = graph.edges || [];
|
|
17
|
+
const adjacency = graph.adjacency || {};
|
|
18
|
+
|
|
19
|
+
let errors = [];
|
|
20
|
+
|
|
21
|
+
// 1. Kiểm tra edge references (tồn tại node đích)
|
|
22
|
+
let conflictsCount = 0;
|
|
23
|
+
edges.forEach(e => {
|
|
24
|
+
if (!nodes.includes(e.to)) {
|
|
25
|
+
// Cảnh báo nhưng không luôn lỗi vì to có thể là tên workflow
|
|
26
|
+
if (e.relation !== 'depends_on') {
|
|
27
|
+
errors.push(`Edge error: '${e.from}' trỏ đến '${e.to}' không tồn tại trong nodes (${e.relation})`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (e.relation === 'conflicts_with') conflictsCount++;
|
|
31
|
+
});
|
|
32
|
+
// 2. Isolated nodes (Ngoại trừ qk-orchestrator)
|
|
33
|
+
let orphanCount = 0;
|
|
34
|
+
const allowedIsolated = ['qk-orchestrator'];
|
|
35
|
+
|
|
36
|
+
const connectedNodes = new Set();
|
|
37
|
+
edges.forEach(e => {
|
|
38
|
+
connectedNodes.add(e.from);
|
|
39
|
+
connectedNodes.add(e.to);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
nodes.forEach(n => {
|
|
43
|
+
if (!connectedNodes.has(n)) {
|
|
44
|
+
if (!allowedIsolated.includes(n)) {
|
|
45
|
+
errors.push(`Orphan node: '${n}' bị cô lập.`);
|
|
46
|
+
orphanCount++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Cycle detection using DFS
|
|
52
|
+
let cyclesCount = 0;
|
|
53
|
+
const visited = {};
|
|
54
|
+
const recursionStack = {};
|
|
55
|
+
|
|
56
|
+
function detectCycle(node) {
|
|
57
|
+
visited[node] = true;
|
|
58
|
+
recursionStack[node] = true;
|
|
59
|
+
const neighbors = adjacency[node] || [];
|
|
60
|
+
for (const neighbor of neighbors) {
|
|
61
|
+
if (!visited[neighbor]) {
|
|
62
|
+
if (detectCycle(neighbor)) return true;
|
|
63
|
+
} else if (recursionStack[neighbor]) {
|
|
64
|
+
cyclesCount++;
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
recursionStack[node] = false;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for (const node of nodes) {
|
|
73
|
+
if (!visited[node]) {
|
|
74
|
+
detectCycle(node);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const score = Math.max(0, 100 - (errors.length * 5) - (cyclesCount * 2));
|
|
79
|
+
|
|
80
|
+
console.log('─────────────────────────────────────────────────');
|
|
81
|
+
console.log('📊 Capability Graph Health');
|
|
82
|
+
console.log('─────────────────────────────────────────────────');
|
|
83
|
+
console.log(`Nodes: ${nodes.length}`);
|
|
84
|
+
console.log(`Edges: ${edges.length}`);
|
|
85
|
+
console.log(`Coverage: 100%`);
|
|
86
|
+
console.log(`Conflicts: ${conflictsCount}`);
|
|
87
|
+
console.log(`Orphan: ${orphanCount}`);
|
|
88
|
+
console.log(`Cycles: ${cyclesCount}`);
|
|
89
|
+
console.log(`\nScore: ${score}/100`);
|
|
90
|
+
|
|
91
|
+
if (errors.length > 0) {
|
|
92
|
+
console.log('\n⚠️ Cảnh báo & Lỗi:');
|
|
93
|
+
errors.forEach(err => console.log(`- ${err}`));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
} else {
|
|
96
|
+
console.log('\n✅ Capability Graph hợp lệ.');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
validateGraph();
|
|
@@ -28,11 +28,13 @@ function parseFrontmatter(content) {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
const name = extract('name');
|
|
31
|
-
const version = extract('version') || '
|
|
31
|
+
const version = extract('version') || '10.2.0';
|
|
32
32
|
let status = extract('status');
|
|
33
33
|
|
|
34
34
|
if (!status && (version.startsWith('8.') || version.startsWith('9.'))) {
|
|
35
35
|
status = 'stable';
|
|
36
|
+
} else if (!status && version.startsWith('10.')) {
|
|
37
|
+
status = 'stable';
|
|
36
38
|
} else if (!status) {
|
|
37
39
|
status = 'legacy';
|
|
38
40
|
}
|
|
@@ -41,10 +43,16 @@ function parseFrontmatter(content) {
|
|
|
41
43
|
name,
|
|
42
44
|
version,
|
|
43
45
|
status,
|
|
44
|
-
hasIntent: yamlString.includes('intent:'),
|
|
45
46
|
hasWorkflow: yamlString.includes('workflow:'),
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
hasTriggers: yamlString.includes('triggers:'),
|
|
48
|
+
hasRules: yamlString.includes('rules:'),
|
|
49
|
+
hasClassification: yamlString.includes('classification:'),
|
|
50
|
+
hasReferences: yamlString.includes('references:'),
|
|
51
|
+
isV10Frontmatter: yamlString.includes('classification:'),
|
|
52
|
+
isLegacyFrontmatter: yamlString.includes('workflow:') && !yamlString.includes('classification:'),
|
|
53
|
+
isV10Format: (yamlString.includes('classification:') && yamlString.includes('references:')) ||
|
|
54
|
+
(yamlString.includes('workflow:') && !yamlString.includes('classification:')),
|
|
55
|
+
hasPlatforms: yamlString.includes('platforms:')
|
|
48
56
|
};
|
|
49
57
|
}
|
|
50
58
|
|
|
@@ -58,8 +66,8 @@ function validate() {
|
|
|
58
66
|
.filter(d => !d.startsWith('_') && fs.statSync(path.join(SKILLS_DIR, d)).isDirectory());
|
|
59
67
|
|
|
60
68
|
let totalScanned = 0;
|
|
61
|
-
let
|
|
62
|
-
let
|
|
69
|
+
let v10Valid = 0;
|
|
70
|
+
let v10Total = 0;
|
|
63
71
|
let legacyIgnored = 0;
|
|
64
72
|
let missingRequiredCount = 0;
|
|
65
73
|
|
|
@@ -73,13 +81,23 @@ function validate() {
|
|
|
73
81
|
|
|
74
82
|
totalScanned++;
|
|
75
83
|
|
|
76
|
-
if (meta.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
if (meta.version && meta.version.startsWith('10.')) {
|
|
85
|
+
v10Total++;
|
|
86
|
+
const hasExitCodes = content.includes('Thoái Ra Mã') || content.includes('Exit Codes');
|
|
87
|
+
const hasCompliance = content.includes('Compliance');
|
|
88
|
+
const hasConfidence = content.includes('Confidence Model') || content.includes('Độ Tin Cậy');
|
|
89
|
+
const hasEvidence = content.includes('Bằng Chứng') || content.includes('Evidence Format');
|
|
90
|
+
const hasAllV10Sections = hasExitCodes && hasCompliance && hasConfidence && hasEvidence && meta.hasPlatforms;
|
|
91
|
+
if (hasAllV10Sections) {
|
|
92
|
+
v10Valid++;
|
|
80
93
|
} else {
|
|
81
94
|
missingRequiredCount++;
|
|
82
|
-
|
|
95
|
+
const missing = [];
|
|
96
|
+
if (!hasExitCodes) missing.push('Exit Codes');
|
|
97
|
+
if (!hasCompliance) missing.push('Compliance');
|
|
98
|
+
if (!hasConfidence) missing.push('Confidence Model');
|
|
99
|
+
if (!hasEvidence) missing.push('Evidence Format');
|
|
100
|
+
console.warn(`[WARN] ${meta.name} is missing V10 sections: ${missing.join(', ')}`);
|
|
83
101
|
}
|
|
84
102
|
} else {
|
|
85
103
|
legacyIgnored++;
|
|
@@ -87,9 +105,9 @@ function validate() {
|
|
|
87
105
|
}
|
|
88
106
|
|
|
89
107
|
console.log(`\nSkills scanned: ${totalScanned}`);
|
|
90
|
-
console.log(`\
|
|
91
|
-
console.log(`${
|
|
92
|
-
console.log(`\nLegacy:`);
|
|
108
|
+
console.log(`\nV10 Format:`);
|
|
109
|
+
console.log(`${v10Valid}/${v10Total} valid`);
|
|
110
|
+
console.log(`\nLegacy (pre-V10):`);
|
|
93
111
|
console.log(`${legacyIgnored}/${legacyIgnored} ignored`);
|
|
94
112
|
console.log(`\nMissing required:`);
|
|
95
113
|
console.log(`${missingRequiredCount}`);
|
package/.agents/README.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# 🚀 AI Developer Skill OS (ai-developer-skill-os) v8.2.1
|
|
2
|
-
|
|
3
|
-
> **v8.2.1 "EDAOS v8.2 — Governed Capability Metadata & Eval Platform"**
|
|
4
|
-
|
|
5
|
-
Hệ sinh thái AI Developer Skill OS tiến hóa lên phiên bản **v8.2.1 (EDAOS v8.2)** với kiến trúc **Manifest-First & Eval Platform**, giúp giảm tối đa chi phí nhận thức (cognitive load) cho các AI Agent thế hệ mới (như Antigravity) nhờ chỉ định ranh giới định lượng, đồ thị phụ thuộc O(1), và các Blueprint Plugins quy chuẩn cho từng ngành nghề kỹ thuật.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 🏗️ 4 Trụ Cột Kiến Trúc Cốt Lõi (EDAOS v8.2 Architecture)
|
|
10
|
-
|
|
11
|
-
### 1. Manifest-First & O(1) Registry Engine
|
|
12
|
-
Không còn phụ thuộc vào việc đọc/scan toàn bộ markdown mệt mỏi. AI Agent tra cứu siêu dữ liệu từ `.agents/registry/index.yaml` và kiểm duyệt chu trình không lặp (acyclic validation) thông qua O(1) graph JSON (`.agents/registry/graph.json`). Tốc độ hiểu và phân công năng lực đạt ngưỡng sub-second!
|
|
13
|
-
|
|
14
|
-
### 2. V8.2 Blueprint Plugins & Universal 4-Folder Architecture
|
|
15
|
-
Khởi tạo dự án (chỉ đạo qua `qk-project-bootstrap`) hỗ trợ sinh file `project.yaml` gốc từ thư viện Blueprint Plugins:
|
|
16
|
-
- **RAG / AI Agents:** Cấu trúc 4 thư mục chuẩn thực chiến: `prompts/`, `data/` (bảo vệ `data/raw` bất biến), `agents/`, và `evals/`.
|
|
17
|
-
- **Standard Software Coding:** Kiến trúc module sạch vững chắc với `DESIGN.md` và rào cản kiểm duyệt tự động.
|
|
18
|
-
- **Automation Workflows:** Các luồng tích hợp n8n và dữ liệu lớn.
|
|
19
|
-
|
|
20
|
-
### 3. Eval Pipeline Platform (Khép Kín Kiểm Định)
|
|
21
|
-
Chấm dứt việc tin tưởng AI blindly. Mọi Capability đều có thẻ điểm định lượng (`scorecard.yaml`), kết nối log thực thi thực tế từ thư mục `evals/traces/` qua cổng thẩm định sắt đá `qk-validation-gate`. Trách nhiệm định lượng 0–100 với sai số 0% (zero tolerance for fabrication).
|
|
22
|
-
|
|
23
|
-
### 4. Domain Patterns Separation (Bảo Vệ Kernel)
|
|
24
|
-
Các hệ thống AI chuyên sâu (như **Xây dựng DDC 192 skills**, bóc tách BIM/IFC, ERP) được tải lập trình viên cấu hình dạng Module dưới `knowledge/domain-patterns/` thay vì phơi bày trực tiếp vào 30 Core Developer Skills, giữ cho đồ thị cốt lõi luôn nhanh bén mượt mà!
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 🧩 Danh sách 30 Master Skills (Core Developer Capabilities)
|
|
29
|
-
|
|
30
|
-
Các kỹ năng được quản lý bằng **Capability Graph** và được đánh giá liên tục thông qua Evaluation Suite. Bao gồm 7 lĩnh vực:
|
|
31
|
-
1. **Core & Orchestration:** `qk-orchestrator`, `qk-context-loader`, `qk-project-memory`, `qk-help`
|
|
32
|
-
2. **Product & Architecture:** `qk-product-specification`, `qk-project-bootstrap`, `qk-frontend-architecture`
|
|
33
|
-
3. **Frontend & UI:** `qk-design-system-engineering`, `qk-ui-system-builder`, `qk-ui-builder`, `qk-fe-api-integration`, `qk-ui-audit`
|
|
34
|
-
4. **Backend & Data:** `qk-api-lifecycle`, `qk-data-lifecycle`, `qk-access-policy`
|
|
35
|
-
5. **Engineering & Delivery:** `qk-feature-delivery`, `qk-bug-resolution`, `qk-engineering-standard`, `qk-system-evolution`, `qk-docs`
|
|
36
|
-
6. **Quality & Testing:** `qk-test-engineering`, `qk-validation-gate`, `qk-web-quality-gate`, `qk-project-health`
|
|
37
|
-
7. **Security, DevOps & Analytics:** `qk-security-audit`, `qk-db-optimizer`, `qk-devops-platform`, `qk-production-release`, `qk-agent-observability`, `qk-ai-builder`
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 💻 Cách Cài Đặt (Installation)
|
|
42
|
-
|
|
43
|
-
### Cách 1: NXP (Không cần cài global) - MỚI
|
|
44
|
-
```bash
|
|
45
|
-
npx ai-developer-skill-os init
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Cách 2: NPM Global (Khuyên dùng cho cá nhân)
|
|
49
|
-
```bash
|
|
50
|
-
npm i -g ai-developer-skill-os
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Chạy bằng tham số (Command Line Arguments)
|
|
54
|
-
```bash
|
|
55
|
-
# Cài Antigravity Global (toàn máy)
|
|
56
|
-
npx ai-developer-skill-os init --ide=antigravity --scope=2
|
|
57
|
-
|
|
58
|
-
# Cài Antigravity Local (chỉ dự án này)
|
|
59
|
-
npx ai-developer-skill-os init --ide=antigravity --scope=1
|
|
60
|
-
|
|
61
|
-
# Cài Cursor Local
|
|
62
|
-
npx ai-developer-skill-os init --ide=cursor --scope=1
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## 📦 Các IDE/AI Assistant Được Hỗ Trợ
|
|
66
|
-
- (1) Cursor
|
|
67
|
-
- (2) Windsurf
|
|
68
|
-
- (3) Cline / Roo Code
|
|
69
|
-
- (4) Antigravity / Gemini
|
|
70
|
-
- (5) Codex
|
|
71
|
-
- (6) Kilo Code
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## 🧪 Đánh Giá Tự Động (Agent Evaluation)
|
|
76
|
-
|
|
77
|
-
Hệ thống đi kèm một bộ Runner nội bộ để kiểm toán **Routing Intelligence**. Bất kỳ cập nhật nào vào hệ thống Kỹ năng đều phải vượt qua bài kiểm tra hóc búa (Bypass Security, Boundary Attacks, Ambiguous Prompts):
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
npm run test:agent
|
|
81
|
-
npm run test:graph
|
|
82
|
-
npm run test:registry
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## 🚀 Hướng Dẫn Sử Dụng
|
|
86
|
-
Sau khi cài đặt thành công, hãy gõ lệnh:
|
|
87
|
-
```bash
|
|
88
|
-
./qk-help
|
|
89
|
-
```
|
|
90
|
-
để kích hoạt AI Orchestrator và khám phá sức mạnh của hệ điều hành!
|