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
|
@@ -1,704 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ── Identity ───────────────────────────────────────────────
|
|
3
|
-
name: qk-fe-api-integration
|
|
4
|
-
version: 9.1.0
|
|
5
|
-
status: stable
|
|
6
|
-
description: "Consume API Backend, quản lý State, bind vào UI — tuân thủ kiến trúc Base dự án"
|
|
7
|
-
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
|
-
|
|
9
|
-
# ── V9: Classification ─────────────────────────────────────
|
|
10
|
-
type: capability
|
|
11
|
-
|
|
12
|
-
intent:
|
|
13
|
-
- api-integration
|
|
14
|
-
- frontend-development
|
|
15
|
-
|
|
16
|
-
complexity:
|
|
17
|
-
level: medium
|
|
18
|
-
criteria:
|
|
19
|
-
files_affected: "1-5"
|
|
20
|
-
has_behavior_change: true
|
|
21
|
-
has_external_dependency: true
|
|
22
|
-
has_breaking_change: false
|
|
23
|
-
|
|
24
|
-
triggers:
|
|
25
|
-
- "tích hợp api"
|
|
26
|
-
- "gọi api"
|
|
27
|
-
- "fetch data"
|
|
28
|
-
- "consume api"
|
|
29
|
-
|
|
30
|
-
# ── V8: References ─────────────────────────────────────────
|
|
31
|
-
workflow: feature-delivery
|
|
32
|
-
|
|
33
|
-
rules:
|
|
34
|
-
- global
|
|
35
|
-
- coding
|
|
36
|
-
|
|
37
|
-
tools:
|
|
38
|
-
- filesystem
|
|
39
|
-
- terminal
|
|
40
|
-
|
|
41
|
-
related_skills:
|
|
42
|
-
- qk-api-lifecycle
|
|
43
|
-
- qk-ui-builder
|
|
44
|
-
|
|
45
|
-
knowledge_scope:
|
|
46
|
-
owns:
|
|
47
|
-
- api-integration
|
|
48
|
-
- state-management
|
|
49
|
-
references:
|
|
50
|
-
- architecture
|
|
51
|
-
|
|
52
|
-
# ── V8: Verification ───────────────────────────────────────
|
|
53
|
-
verification:
|
|
54
|
-
required: true
|
|
55
|
-
strategy: feature
|
|
56
|
-
|
|
57
|
-
selection:
|
|
58
|
-
priority: medium
|
|
59
|
-
confidence_threshold: 0.80
|
|
60
|
-
|
|
61
|
-
examples: []
|
|
62
|
-
learnings: []
|
|
63
|
-
|
|
64
|
-
# ── V7 Runtime ─────────────────────────────────────────────
|
|
65
|
-
execution_mode: deterministic
|
|
66
|
-
cost: medium
|
|
67
|
-
latency: medium
|
|
68
|
-
risk: low
|
|
69
|
-
side_effects: edit_files
|
|
70
|
-
produces: [code]
|
|
71
|
-
consumes: [json-payload, context-graph]
|
|
72
|
-
|
|
73
|
-
token_budget:
|
|
74
|
-
max_files_read: 3
|
|
75
|
-
max_lines_per_read: 100
|
|
76
|
-
max_shell_commands: 1
|
|
77
|
-
stop_early: true
|
|
78
|
-
|
|
79
|
-
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
# qk-fe-api-integration — Frontend API Consumer
|
|
83
|
-
|
|
84
|
-
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Memory Workflow
|
|
89
|
-
|
|
90
|
-
### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
|
|
91
|
-
- Trước khi tra cứu hoặc lưu trữ tri thức, BẮT BUỘC kiểm tra sự tồn tại của thư mục `.ai-local/` tại gốc dự án:
|
|
92
|
-
- **Tự động tạo mới:** Nếu `.ai-local/` chưa tồn tại, AI phải tự động tạo cấu trúc thư mục `.ai-local/knowledge/` (và file `index.yaml` nếu cần thiết) cùng `.ai-local/candidates/`. Tuyệt đối không ngưng chạy hay hỏi ý kiến người dùng về thao tác khởi tạo tiêu chuẩn này.
|
|
93
|
-
- **Bảo mật Gitignore:** BẮT BUỘC kiểm tra file `.gitignore` của dự án, nếu chưa có dòng `.ai-local/` thì phải tự động thêm vào để tuyệt đối bảo mật tri thức cá nhân và tránh lộ lọt lên Git.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
98
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
99
|
-
bắt buộc tra cứu:
|
|
100
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
101
|
-
|
|
102
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
103
|
-
- Architecture
|
|
104
|
-
- Hard Bug
|
|
105
|
-
- Convention
|
|
106
|
-
- Pattern
|
|
107
|
-
- Tech Debt Pattern
|
|
108
|
-
- 👉 *Domain Focus:* Pattern / Convention (vd: cách quản lý state TanStack Query/Zustand, binding chuẩn).
|
|
109
|
-
|
|
110
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
111
|
-
Không được xem Memory là Source of Truth.
|
|
112
|
-
Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
117
|
-
- Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
|
|
118
|
-
- Hard Bug có khả năng tái diễn.
|
|
119
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
120
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
121
|
-
- Quyết định Architecture quan trọng.
|
|
122
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
123
|
-
- 👉 *Domain Harvest:* Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend).
|
|
124
|
-
|
|
125
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
126
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
127
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
132
|
-
Sau khi hoàn thành task:
|
|
133
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
134
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
135
|
-
- Đề xuất người dùng xem xét.
|
|
136
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
137
|
-
- `/learn`
|
|
138
|
-
- `qk-project-memory`
|
|
139
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
.ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
146
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
### Ignore (Không đưa vào Memory)
|
|
151
|
-
Không lưu:
|
|
152
|
-
- Trace log của một session đơn lẻ.
|
|
153
|
-
- Temporary debugging data.
|
|
154
|
-
- Output của một lần chạy test/scan.
|
|
155
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
156
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
157
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
158
|
-
- 👉 *Domain Ignore:* Logic call API của 1 component riêng rẽ.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
### Golden Rule
|
|
163
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
164
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
### 0. Self-Init Protocol (Khởi Tạo Bộ Nhớ Local & Gitignore)
|
|
171
|
-
- Trước khi tra cứu hoặc lưu trữ tri thức, BẮT BUỘC kiểm tra sự tồn tại của thư mục `.ai-local/` tại gốc dự án:
|
|
172
|
-
- **Tự động tạo mới:** Nếu `.ai-local/` chưa tồn tại, AI phải tự động tạo cấu trúc thư mục `.ai-local/knowledge/` (và file `index.yaml` nếu cần thiết) cùng `.ai-local/candidates/`. Tuyệt đối không ngưng chạy hay hỏi ý kiến người dùng về thao tác khởi tạo tiêu chuẩn này.
|
|
173
|
-
- **Bảo mật Gitignore:** BẮT BUỘC kiểm tra file `.gitignore` của dự án, nếu chưa có dòng `.ai-local/` thì phải tự động thêm vào để tuyệt đối bảo mật tri thức cá nhân và tránh lộ lọt lên Git.
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
178
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
179
|
-
bắt buộc tra cứu:
|
|
180
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
181
|
-
|
|
182
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
183
|
-
- Architecture
|
|
184
|
-
- Hard Bug
|
|
185
|
-
- Convention
|
|
186
|
-
- Pattern
|
|
187
|
-
- Tech Debt Pattern
|
|
188
|
-
- 👉 *Domain Focus:* Pattern / Convention (vd: cách quản lý state TanStack Query/Zustand, binding chuẩn).
|
|
189
|
-
|
|
190
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
191
|
-
Không được xem Memory là Source of Truth.
|
|
192
|
-
Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
197
|
-
- Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
|
|
198
|
-
- Hard Bug có khả năng tái diễn.
|
|
199
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
200
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
201
|
-
- Quyết định Architecture quan trọng.
|
|
202
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
203
|
-
- 👉 *Domain Harvest:* Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend).
|
|
204
|
-
|
|
205
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
206
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
207
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
212
|
-
Sau khi hoàn thành task:
|
|
213
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
214
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
215
|
-
- Đề xuất người dùng xem xét.
|
|
216
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
217
|
-
- `/learn`
|
|
218
|
-
- `qk-project-memory`
|
|
219
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
220
|
-
|
|
221
|
-
```
|
|
222
|
-
.ai-local/candidates/ ──(Approve)──> .ai-local/knowledge/index.yaml
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
226
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
### Ignore (Không đưa vào Memory)
|
|
231
|
-
Không lưu:
|
|
232
|
-
- Trace log của một session đơn lẻ.
|
|
233
|
-
- Temporary debugging data.
|
|
234
|
-
- Output của một lần chạy test/scan.
|
|
235
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
236
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
237
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
238
|
-
- 👉 *Domain Ignore:* Logic call API của 1 component riêng rẽ.
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
### Golden Rule
|
|
243
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
244
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
### Pre-flight Retrieve (Trước khi thực thi)
|
|
251
|
-
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
252
|
-
bắt buộc tra cứu:
|
|
253
|
-
- `.agents/knowledge/index.yaml` (Shared Project Knowledge)
|
|
254
|
-
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
255
|
-
|
|
256
|
-
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
257
|
-
- Architecture
|
|
258
|
-
- Hard Bug
|
|
259
|
-
- Convention
|
|
260
|
-
- Pattern
|
|
261
|
-
- Tech Debt Pattern
|
|
262
|
-
- 👉 *Domain Focus:* Pattern / Convention (vd: cách quản lý state TanStack Query/Zustand, binding chuẩn).
|
|
263
|
-
|
|
264
|
-
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
265
|
-
Không được xem Memory là Source of Truth.
|
|
266
|
-
Luôn xác minh lại bằng source code, configuration và trạng thái hiện tại của dự án trước khi áp dụng.
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
271
|
-
- Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
|
|
272
|
-
- Hard Bug có khả năng tái diễn.
|
|
273
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
274
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
275
|
-
- Quyết định Architecture quan trọng.
|
|
276
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
277
|
-
- 👉 *Domain Harvest:* Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend).
|
|
278
|
-
|
|
279
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
280
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
281
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
286
|
-
Sau khi hoàn thành task:
|
|
287
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
288
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
289
|
-
- Đề xuất người dùng xem xét.
|
|
290
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
291
|
-
- `/learn`
|
|
292
|
-
- `qk-project-memory`
|
|
293
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
294
|
-
|
|
295
|
-
```
|
|
296
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
300
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
301
|
-
|
|
302
|
-
---
|
|
303
|
-
|
|
304
|
-
### Ignore (Không đưa vào Memory)
|
|
305
|
-
Không lưu:
|
|
306
|
-
- Trace log của một session đơn lẻ.
|
|
307
|
-
- Temporary debugging data.
|
|
308
|
-
- Output của một lần chạy test/scan.
|
|
309
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
310
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
311
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
312
|
-
- 👉 *Domain Ignore:* Logic call API của 1 component riêng rẽ.
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
### Golden Rule
|
|
317
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
318
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
324
|
-
- Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
|
|
325
|
-
- Hard Bug có khả năng tái diễn.
|
|
326
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
327
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
328
|
-
- Quyết định Architecture quan trọng.
|
|
329
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
330
|
-
- 👉 *Domain Harvest:* Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend).
|
|
331
|
-
|
|
332
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
333
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
334
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
339
|
-
Sau khi hoàn thành task:
|
|
340
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
341
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
342
|
-
- Đề xuất người dùng xem xét.
|
|
343
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
344
|
-
- `/learn`
|
|
345
|
-
- `qk-project-memory`
|
|
346
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
347
|
-
|
|
348
|
-
```
|
|
349
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
353
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
354
|
-
|
|
355
|
-
---
|
|
356
|
-
|
|
357
|
-
### Ignore (Không đưa vào Memory)
|
|
358
|
-
Không lưu:
|
|
359
|
-
- Trace log của một session đơn lẻ.
|
|
360
|
-
- Temporary debugging data.
|
|
361
|
-
- Output của một lần chạy test/scan.
|
|
362
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
363
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
364
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
365
|
-
- 👉 *Domain Ignore:* Logic call API của 1 component riêng rẽ.
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
### Golden Rule
|
|
370
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
371
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
---
|
|
375
|
-
|
|
376
|
-
### Learning Flow (AI tự học có kiểm soát)
|
|
377
|
-
- Trong quá trình làm việc, AI được phép tự phát hiện và tạo **Candidate Memory** khi nhận thấy:
|
|
378
|
-
- Hard Bug có khả năng tái diễn.
|
|
379
|
-
- Pattern làm việc lặp lại trong dự án.
|
|
380
|
-
- Convention hoặc quy tắc kiến trúc mới.
|
|
381
|
-
- Quyết định Architecture quan trọng.
|
|
382
|
-
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
383
|
-
- 👉 *Domain Harvest:* Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend).
|
|
384
|
-
|
|
385
|
-
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
386
|
-
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
387
|
-
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
392
|
-
Sau khi hoàn thành task:
|
|
393
|
-
- AI đánh giá các Candidate Memory đã tạo.
|
|
394
|
-
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
395
|
-
- Đề xuất người dùng xem xét.
|
|
396
|
-
- Gửi yêu cầu phê duyệt thông qua:
|
|
397
|
-
- `/learn`
|
|
398
|
-
- `qk-project-memory`
|
|
399
|
-
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
400
|
-
|
|
401
|
-
```
|
|
402
|
-
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
406
|
-
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
### Ignore (Không đưa vào Memory)
|
|
411
|
-
Không lưu:
|
|
412
|
-
- Trace log của một session đơn lẻ.
|
|
413
|
-
- Temporary debugging data.
|
|
414
|
-
- Output của một lần chạy test/scan.
|
|
415
|
-
- Report health tạm thời của một đợt kiểm tra.
|
|
416
|
-
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
417
|
-
- Thông tin không có khả năng tái sử dụng.
|
|
418
|
-
- 👉 *Domain Ignore:* Logic call API của 1 component riêng rẽ.
|
|
419
|
-
|
|
420
|
-
---
|
|
421
|
-
|
|
422
|
-
### Golden Rule
|
|
423
|
-
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
424
|
-
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
425
|
-
|
|
426
|
-
---
|
|
427
|
-
---
|
|
428
|
-
---
|
|
429
|
-
---
|
|
430
|
-
|
|
431
|
-
## Preconditions
|
|
432
|
-
- [ ] Backend JSON payload hoặc API endpoint schema được cung cấp
|
|
433
|
-
- [ ] Project's API client pattern được xác định (Axios wrapper, RTK Query, React Query, etc.)
|
|
434
|
-
|
|
435
|
-
```
|
|
436
|
-
On missing precondition:
|
|
437
|
-
EXIT: BLOCKED
|
|
438
|
-
Message: "Cần cung cấp: JSON response mẫu VÀ xác nhận API client pattern hiện tại của dự án."
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
---
|
|
442
|
-
|
|
443
|
-
## Scope
|
|
444
|
-
- ✅ Identify existing API client pattern (NEVER default to raw fetch if wrapper exists)
|
|
445
|
-
- ✅ Generate strict TypeScript interfaces from JSON payload
|
|
446
|
-
- ✅ Implement service layer (API calls separated from UI)
|
|
447
|
-
- ✅ Handle all 3 UI states: Loading, Success, Error
|
|
448
|
-
- ✅ Map backend payload → DTO before injecting into UI components
|
|
449
|
-
|
|
450
|
-
## Non-Goals
|
|
451
|
-
- ❌ Hardcode API Base URLs in UI components — use env vars or centralized config
|
|
452
|
-
- ❌ Inject API logic inside presentational (dumb) components
|
|
453
|
-
- ❌ Introduce new state management libraries without explicit user approval
|
|
454
|
-
- ❌ Hallucinate data fields not in provided JSON payload
|
|
455
|
-
- ❌ Create Node.js/Python scripts to patch — edit files directly
|
|
456
|
-
- ❌ Read entire files > 100 lines — use targeted reads
|
|
457
|
-
- ❌ Default to raw fetch if wrapper exists — ALWAYS reuse existing client
|
|
458
|
-
|
|
459
|
-
---
|
|
460
|
-
|
|
461
|
-
## Priority Order
|
|
462
|
-
|
|
463
|
-
| Priority | Task | Skip Threshold |
|
|
464
|
-
|----------|------|----------------|
|
|
465
|
-
| P1 | Identify existing API client (grep package.json, src/api/) | Never |
|
|
466
|
-
| P2 | Generate TypeScript interfaces from JSON payload | Never |
|
|
467
|
-
| P3 | Implement service layer (API calls) | Never |
|
|
468
|
-
| P4 | Bind to UI with Loading + Success + Error states | Budget < 30% |
|
|
469
|
-
| P5 | Cache invalidation after mutations (POST/PUT/DELETE) | Budget < 60% |
|
|
470
|
-
| P6 | DTO mapping (backend payload → clean UI data) | Budget < 70% |
|
|
471
|
-
|
|
472
|
-
---
|
|
473
|
-
|
|
474
|
-
## Workflow
|
|
475
|
-
|
|
476
|
-
### Phase 1 — Identify Base Architecture
|
|
477
|
-
|
|
478
|
-
**Steps:**
|
|
479
|
-
1. `grep_search` in `package.json` → identify: axios, react-query, rtk-query, swr, or custom
|
|
480
|
-
2. `view_file[src/api/]` (first 30 lines) → confirm wrapper pattern
|
|
481
|
-
3. Identify: base URL config, auth header injection, error interceptor location
|
|
482
|
-
|
|
483
|
-
**Decision:**
|
|
484
|
-
```
|
|
485
|
-
IF wrapper/client found (e.g., apiClient.ts, axiosInstance.ts)
|
|
486
|
-
→ Use it. Ưu tiên bọc (wrap) bằng TanStack Query (useQuery/useMutation) nếu có thể. NEVER bypass with raw fetch/axios in components.
|
|
487
|
-
→ Confidence: HIGH → go to Phase 2
|
|
488
|
-
|
|
489
|
-
ELSE IF no wrapper found
|
|
490
|
-
→ Confirm with user: "Dùng raw fetch hay tạo wrapper mới?"
|
|
491
|
-
→ Confidence: MEDIUM → go to Phase 2
|
|
492
|
-
|
|
493
|
-
ELSE IF conflicting patterns found (mix of fetch + axios + rtk)
|
|
494
|
-
→ EXIT: BLOCKED — ask which pattern to follow
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
**Exit When:**
|
|
498
|
-
- API client pattern identified → go to Phase 2
|
|
499
|
-
- `max_files_read` reached → go to Phase 2 with MEDIUM confidence
|
|
500
|
-
|
|
501
|
-
---
|
|
502
|
-
|
|
503
|
-
### Phase 2 — Generate Types & Validation
|
|
504
|
-
|
|
505
|
-
**Steps:**
|
|
506
|
-
1. Parse provided JSON payload → extract all fields
|
|
507
|
-
2. Generate **Zod schema** (`z.object({...})`) for runtime validation
|
|
508
|
-
3. Export TypeScript interface via inferred Zod type (`export type Response = z.infer<typeof schema>`)
|
|
509
|
-
4. Flag any field that could be `null` or optional with `.nullable()` or `.optional()`
|
|
510
|
-
|
|
511
|
-
**Decision:**
|
|
512
|
-
```
|
|
513
|
-
IF all fields clearly typed from JSON
|
|
514
|
-
→ Khởi tạo Zod schema chính xác.
|
|
515
|
-
→ Confidence: HIGH → go to Phase 3
|
|
516
|
-
|
|
517
|
-
ELSE IF some fields ambiguous (null | undefined)
|
|
518
|
-
→ Mark as optional in Zod (`.optional()`) + add comment "// verify with backend"
|
|
519
|
-
→ Confidence: MEDIUM → go to Phase 3
|
|
520
|
-
|
|
521
|
-
ELSE IF nested objects contain mixed null/non-null patterns
|
|
522
|
-
→ EXIT: BLOCKED — cannot safely generate types without backend clarification
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
---
|
|
526
|
-
|
|
527
|
-
### Phase 3 — Implement Service + UI Binding
|
|
528
|
-
|
|
529
|
-
**Steps:**
|
|
530
|
-
1. Create/update service file: Viết API fetcher function.
|
|
531
|
-
2. Viết Custom Hook bọc fetcher function bằng **TanStack Query** (`useQuery` hoặc `useMutation`).
|
|
532
|
-
3. Bind to component: Dùng các states từ hook (`isLoading`, `isPending`, `isError`, `data`) thay vì tự tạo `useEffect`.
|
|
533
|
-
4. Bind Error state: handle HTTP errors per table below.
|
|
534
|
-
5. Kiểm duyệt ranh giới an toàn (R-SEC-04): Validate dữ liệu API trả về bằng Zod Schema ở (2) trước khi render.
|
|
535
|
-
|
|
536
|
-
**HTTP Error Handling (mandatory for ALL integrations):**
|
|
537
|
-
```
|
|
538
|
-
401 Unauthorized → redirect to login or show auth error toast
|
|
539
|
-
403 Forbidden → show permission error toast
|
|
540
|
-
404 Not Found → show empty state component (not a crash)
|
|
541
|
-
422 Validation → map field errors to form fields
|
|
542
|
-
500 Server Error → show generic error toast + retry button
|
|
543
|
-
Network Error → show offline banner or retry prompt
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
**Decision:**
|
|
547
|
-
```
|
|
548
|
-
IF all 3 states (Loading, Success, Error) implemented + service created → go to Phase 4
|
|
549
|
-
ELSE IF error state incomplete → EXIT: PARTIAL — missing HTTP error handling
|
|
550
|
-
ELSE → EXIT: BLOCKED — cannot complete binding
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
**Exit When:**
|
|
554
|
-
- All 3 states implemented + service created → go to Phase 4
|
|
555
|
-
|
|
556
|
-
---
|
|
557
|
-
|
|
558
|
-
### Phase 4 — Self-Audit
|
|
559
|
-
|
|
560
|
-
**Steps:**
|
|
561
|
-
1. Re-read service file: confirm no hardcoded URLs, no UI logic
|
|
562
|
-
2. Re-read component: confirm no API calls inside JSX
|
|
563
|
-
3. Verify cache invalidation if mutation (POST/PUT/DELETE)
|
|
564
|
-
|
|
565
|
-
**Decision:**
|
|
566
|
-
```
|
|
567
|
-
IF all audit points pass → EXIT: SUCCESS
|
|
568
|
-
ELSE IF 1–2 minor issues → fix inline → EXIT: SUCCESS
|
|
569
|
-
ELSE IF architectural violation found → fix → EXIT: PARTIAL
|
|
570
|
-
ELSE IF hardcoded URL (http://localhost, 127.0.0.1) found → EXIT: FAILED — do not ship
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
---
|
|
574
|
-
|
|
575
|
-
## Confidence Model
|
|
576
|
-
|
|
577
|
-
| Level | Condition | Action |
|
|
578
|
-
|-------|-----------|--------|
|
|
579
|
-
| HIGH | API client found, JSON payload complete, all types inferred | Implement directly |
|
|
580
|
-
| MEDIUM | Some fields ambiguous, wrapper partially identified | Note assumptions, proceed |
|
|
581
|
-
| LOW | No JSON payload provided OR conflicting API patterns OR nested nulls unresolved | EXIT: BLOCKED |
|
|
582
|
-
|
|
583
|
-
---
|
|
584
|
-
|
|
585
|
-
## Severity
|
|
586
|
-
|
|
587
|
-
| Level | Definition | Example |
|
|
588
|
-
|-------|-----------|---------|
|
|
589
|
-
| CRITICAL | Security data leakage from improper DTO mapping | Auth token in dumb component |
|
|
590
|
-
| HIGH | Missing error state causes white screen of death | No 500 handler |
|
|
591
|
-
| MEDIUM | Hardcoded URL breaks in production | `axios.get("http://localhost:3000/api")` |
|
|
592
|
-
| LOW | Missing cache invalidation after mutation | Stale data after POST |
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
## Evidence Format
|
|
597
|
-
|
|
598
|
-
```
|
|
599
|
-
[SEVERITY] path/to/component.tsx:LINE
|
|
600
|
-
Issue: [specific violation]
|
|
601
|
-
Confidence: [HIGH|MEDIUM|LOW]
|
|
602
|
-
Fix: [one-line suggestion]
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
**Example:**
|
|
606
|
-
```
|
|
607
|
-
[HIGH] src/pages/Dashboard.tsx:45
|
|
608
|
-
Issue: API call `axios.get('/api/data')` inside JSX render — violates smart/dumb separation
|
|
609
|
-
Confidence: HIGH
|
|
610
|
-
Fix: Move to `src/services/dashboard.service.ts`, inject via hook
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
---
|
|
614
|
-
|
|
615
|
-
## Retry Policy
|
|
616
|
-
|
|
617
|
-
```
|
|
618
|
-
API call fails (runtime verification)
|
|
619
|
-
└─ Check error type
|
|
620
|
-
├─ Network error → show retry button (user-triggered retry, not auto)
|
|
621
|
-
├─ 401/403 → do NOT retry — redirect or show permission error
|
|
622
|
-
├─ 500 → auto-retry once after 1s delay
|
|
623
|
-
│ └─ Still fails → show error toast with "Try again" button
|
|
624
|
-
└─ Never auto-retry more than 1 time (avoid hammering server)
|
|
625
|
-
|
|
626
|
-
Skill execution fails
|
|
627
|
-
└─ Check failure type
|
|
628
|
-
├─ Syntax error in generated code → fix and retry once
|
|
629
|
-
└─ Architectural mismatch → EXIT: FAILED, do NOT retry
|
|
630
|
-
```
|
|
631
|
-
|
|
632
|
-
---
|
|
633
|
-
|
|
634
|
-
## Escalation Rules
|
|
635
|
-
|
|
636
|
-
```
|
|
637
|
-
BLOCKED: Cannot determine API client pattern
|
|
638
|
-
Missing:
|
|
639
|
-
- package.json contents OR
|
|
640
|
-
- Location of existing API client file (e.g., src/lib/api.ts)
|
|
641
|
-
Questions:
|
|
642
|
-
1. Dự án dùng thư viện nào để gọi API? (axios / fetch / react-query / rtk-query)
|
|
643
|
-
2. Có file API wrapper/client nào sẵn không? (ví dụ: src/api/client.ts)
|
|
644
|
-
Recommended Assumptions (if proceeding):
|
|
645
|
-
- Create new Axios instance with interceptors for auth + error handling
|
|
646
|
-
```
|
|
647
|
-
|
|
648
|
-
---
|
|
649
|
-
|
|
650
|
-
## Handoff Contract
|
|
651
|
-
|
|
652
|
-
### Consumes
|
|
653
|
-
```json
|
|
654
|
-
{
|
|
655
|
-
"from": "user or qk-context-loader",
|
|
656
|
-
"required_fields": ["json_payload_sample", "api_endpoint"],
|
|
657
|
-
"optional_fields": ["existing_api_client_path", "component_to_bind"]
|
|
658
|
-
}
|
|
659
|
-
```
|
|
660
|
-
|
|
661
|
-
### Produces
|
|
662
|
-
```json
|
|
663
|
-
{
|
|
664
|
-
"to": "user",
|
|
665
|
-
"output_fields": ["types_file", "service_file", "component_file", "states_implemented", "exit_code"]
|
|
666
|
-
}
|
|
667
|
-
```
|
|
668
|
-
|
|
669
|
-
---
|
|
670
|
-
|
|
671
|
-
## Output Format
|
|
672
|
-
|
|
673
|
-
```
|
|
674
|
-
🔌 FE API Integration
|
|
675
|
-
─────────────────────────────────────────────────
|
|
676
|
-
API Client: [identified — axiosInstance.ts | created new]
|
|
677
|
-
Types: [src/types/[resource].types.ts]
|
|
678
|
-
Service: [src/services/[resource].service.ts]
|
|
679
|
-
|
|
680
|
-
States implemented:
|
|
681
|
-
✅ Loading (skeleton/spinner)
|
|
682
|
-
✅ Success (data rendered)
|
|
683
|
-
✅ Error (toast/empty state per HTTP code)
|
|
684
|
-
⚠️ [any state skipped — reason]
|
|
685
|
-
|
|
686
|
-
Assumptions:
|
|
687
|
-
- [any assumption made]
|
|
688
|
-
|
|
689
|
-
Exit Code: [SUCCESS | PARTIAL | BLOCKED | FAILED]
|
|
690
|
-
```
|
|
691
|
-
|
|
692
|
-
---
|
|
693
|
-
|
|
694
|
-
## Exit Codes
|
|
695
|
-
|
|
696
|
-
| Code | Meaning | When |
|
|
697
|
-
|------|---------|------|
|
|
698
|
-
| SUCCESS | Types + service + UI binding complete with all 3 states | Full integration |
|
|
699
|
-
| PARTIAL | Integration done, missing error/loading state or cache invalidation | Follow-up needed |
|
|
700
|
-
| BLOCKED | No JSON payload or conflicting API patterns | Ask user |
|
|
701
|
-
| FAILED | Cannot integrate without breaking existing architecture | Escalate |
|
|
702
|
-
|
|
703
|
-
---
|
|
704
|
-
|