ai-developer-skill-os 8.3.1 → 9.0.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 +21 -0
- package/.agents/registry/capability-graph.yml +13 -2
- package/.agents/registry/graph.json +33 -33
- package/.agents/registry/index.yaml +33 -33
- package/.agents/rules/global.md +13 -0
- package/.agents/skills/_template/SKILL.md +127 -2
- package/.agents/skills/_template/capability.yaml +1 -1
- package/.agents/skills/qk-access-policy/SKILL.md +132 -2
- package/.agents/skills/qk-access-policy/capability.yaml +1 -1
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-agent-observability/SKILL.md +137 -1
- package/.agents/skills/qk-agent-observability/capability.yaml +1 -1
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-ai-builder/SKILL.md +132 -2
- package/.agents/skills/qk-ai-builder/capability.yaml +1 -1
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-api-lifecycle/SKILL.md +132 -2
- package/.agents/skills/qk-api-lifecycle/capability.yaml +1 -1
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-bug-resolution/SKILL.md +132 -2
- package/.agents/skills/qk-bug-resolution/capability.yaml +1 -1
- package/.agents/skills/qk-bug-resolution/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-code-review/SKILL.md +132 -2
- package/.agents/skills/qk-code-review/capability.yaml +1 -1
- package/.agents/skills/qk-code-review/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-context-loader/SKILL.md +135 -4
- package/.agents/skills/qk-context-loader/capability.yaml +1 -1
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-data-lifecycle/SKILL.md +132 -2
- package/.agents/skills/qk-data-lifecycle/capability.yaml +1 -1
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-db-optimizer/SKILL.md +132 -2
- package/.agents/skills/qk-db-optimizer/capability.yaml +1 -1
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-design-system-engineering/SKILL.md +132 -2
- package/.agents/skills/qk-design-system-engineering/capability.yaml +1 -1
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-devops-platform/SKILL.md +132 -2
- package/.agents/skills/qk-devops-platform/capability.yaml +1 -1
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-docs/SKILL.md +132 -2
- package/.agents/skills/qk-docs/capability.yaml +1 -1
- package/.agents/skills/qk-docs/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-engineering-standard/SKILL.md +132 -2
- package/.agents/skills/qk-engineering-standard/capability.yaml +1 -1
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +3 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +132 -2
- package/.agents/skills/qk-fe-api-integration/capability.yaml +1 -1
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-feature-delivery/SKILL.md +132 -2
- package/.agents/skills/qk-feature-delivery/capability.yaml +1 -1
- package/.agents/skills/qk-feature-delivery/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-frontend-architecture/SKILL.md +132 -2
- package/.agents/skills/qk-frontend-architecture/capability.yaml +1 -1
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-help/SKILL.md +2 -2
- package/.agents/skills/qk-help/capability.yaml +1 -1
- package/.agents/skills/qk-help/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-orchestrator/SKILL.md +132 -2
- package/.agents/skills/qk-orchestrator/capability.yaml +1 -1
- package/.agents/skills/qk-orchestrator/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-product-specification/SKILL.md +132 -2
- package/.agents/skills/qk-product-specification/capability.yaml +1 -1
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-production-release/SKILL.md +132 -2
- package/.agents/skills/qk-production-release/capability.yaml +1 -1
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-project-bootstrap/SKILL.md +147 -4
- package/.agents/skills/qk-project-bootstrap/capability.yaml +1 -1
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-project-health/SKILL.md +132 -2
- package/.agents/skills/qk-project-health/capability.yaml +1 -1
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-project-memory/SKILL.md +252 -277
- package/.agents/skills/qk-project-memory/capability.yaml +1 -1
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-refactor/SKILL.md +131 -1
- package/.agents/skills/qk-refactor/capability.yaml +1 -1
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-security-audit/SKILL.md +132 -2
- package/.agents/skills/qk-security-audit/capability.yaml +1 -1
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-system-evolution/SKILL.md +132 -2
- package/.agents/skills/qk-system-evolution/capability.yaml +1 -1
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-test-engineering/SKILL.md +132 -2
- package/.agents/skills/qk-test-engineering/capability.yaml +1 -1
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-ui-audit/SKILL.md +132 -2
- package/.agents/skills/qk-ui-audit/capability.yaml +1 -1
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-ui-builder/capability.yaml +1 -1
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +26 -0
- package/.agents/skills/qk-ui-system-builder/SKILL.md +132 -2
- package/.agents/skills/qk-ui-system-builder/capability.yaml +1 -1
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-validation-gate/SKILL.md +132 -2
- package/.agents/skills/qk-validation-gate/capability.yaml +1 -1
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +1 -1
- package/.agents/skills/qk-web-quality-gate/SKILL.md +132 -2
- package/.agents/skills/qk-web-quality-gate/capability.yaml +1 -1
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +2 -2
- package/CHANGELOG.md +8 -0
- package/README.md +13 -4
- package/package.json +4 -3
- package/tooling/sync-versions.js +256 -6
- package/tooling/validate-skills.js +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
# ── Identity ───────────────────────────────────────────────
|
|
3
3
|
name: qk-web-quality-gate
|
|
4
|
-
version:
|
|
4
|
+
version: 9.0.0
|
|
5
5
|
status: experimental
|
|
6
6
|
description: "Kiểm toán tổng thể chất lượng Web: Accessibility (A11y), SEO, Web Performance, Security, UX Heuristics."
|
|
7
7
|
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
8
8
|
|
|
9
|
-
# ──
|
|
9
|
+
# ── V9: Classification ─────────────────────────────────────
|
|
10
10
|
type: capability
|
|
11
11
|
|
|
12
12
|
intent:
|
|
@@ -100,6 +100,136 @@ exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
|
100
100
|
|
|
101
101
|
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
102
102
|
|
|
103
|
+
## Memory Workflow
|
|
104
|
+
|
|
105
|
+
### Pre-flight Retrieve (Trước khi thực thi)
|
|
106
|
+
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
107
|
+
bắt buộc tra cứu:
|
|
108
|
+
- `.agents/knowledge/index.yaml` (Shared Project Knowledge)
|
|
109
|
+
- `.ai-local/knowledge/index.yaml` (Private Local Knowledge)
|
|
110
|
+
|
|
111
|
+
- Ưu tiên sử dụng các Knowledge đang có trạng thái `Active` thuộc:
|
|
112
|
+
- Architecture
|
|
113
|
+
- Hard Bug
|
|
114
|
+
- Convention
|
|
115
|
+
- Pattern
|
|
116
|
+
- Tech Debt Pattern
|
|
117
|
+
- 👉 *Domain Focus:* Convention / Hard Bug (vd: chỉ số Core Web Vitals LCP/CLS, rủi ro bot SEO/A11y).
|
|
118
|
+
|
|
119
|
+
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
120
|
+
Không được xem Memory là Source of Truth.
|
|
121
|
+
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.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### Learning Flow (AI tự học có kiểm soát)
|
|
126
|
+
- 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:
|
|
127
|
+
- Hard Bug có khả năng tái diễn.
|
|
128
|
+
- Pattern làm việc lặp lại trong dự án.
|
|
129
|
+
- Convention hoặc quy tắc kiến trúc mới.
|
|
130
|
+
- Quyết định Architecture quan trọng.
|
|
131
|
+
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
132
|
+
- 👉 *Domain Harvest:* Mẫu tối ưu hiệu năng web (vd: chiến lược lazyload hình ảnh, bundle partition).
|
|
133
|
+
|
|
134
|
+
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
135
|
+
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
136
|
+
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
141
|
+
Sau khi hoàn thành task:
|
|
142
|
+
- AI đánh giá các Candidate Memory đã tạo.
|
|
143
|
+
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
144
|
+
- Đề xuất người dùng xem xét.
|
|
145
|
+
- Gửi yêu cầu phê duyệt thông qua:
|
|
146
|
+
- `/learn`
|
|
147
|
+
- `qk-project-memory`
|
|
148
|
+
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
155
|
+
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### Ignore (Không đưa vào Memory)
|
|
160
|
+
Không lưu:
|
|
161
|
+
- Trace log của một session đơn lẻ.
|
|
162
|
+
- Temporary debugging data.
|
|
163
|
+
- Output của một lần chạy test/scan.
|
|
164
|
+
- Report health tạm thời của một đợt kiểm tra.
|
|
165
|
+
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
166
|
+
- Thông tin không có khả năng tái sử dụng.
|
|
167
|
+
- 👉 *Domain Ignore:* Report Lighthouse của lần đo test tạm thời.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### Golden Rule
|
|
172
|
+
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
173
|
+
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Learning Flow (AI tự học có kiểm soát)
|
|
179
|
+
- 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:
|
|
180
|
+
- Hard Bug có khả năng tái diễn.
|
|
181
|
+
- Pattern làm việc lặp lại trong dự án.
|
|
182
|
+
- Convention hoặc quy tắc kiến trúc mới.
|
|
183
|
+
- Quyết định Architecture quan trọng.
|
|
184
|
+
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.
|
|
185
|
+
- 👉 *Domain Harvest:* Mẫu tối ưu hiệu năng web (vd: chiến lược lazyload hình ảnh, bundle partition).
|
|
186
|
+
|
|
187
|
+
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
188
|
+
- Candidate Memory có thể lưu tạm tại: `.ai-local/candidates/`
|
|
189
|
+
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
194
|
+
Sau khi hoàn thành task:
|
|
195
|
+
- AI đánh giá các Candidate Memory đã tạo.
|
|
196
|
+
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
197
|
+
- Đề xuất người dùng xem xét.
|
|
198
|
+
- Gửi yêu cầu phê duyệt thông qua:
|
|
199
|
+
- `/learn`
|
|
200
|
+
- `qk-project-memory`
|
|
201
|
+
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
208
|
+
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
### Ignore (Không đưa vào Memory)
|
|
213
|
+
Không lưu:
|
|
214
|
+
- Trace log của một session đơn lẻ.
|
|
215
|
+
- Temporary debugging data.
|
|
216
|
+
- Output của một lần chạy test/scan.
|
|
217
|
+
- Report health tạm thời của một đợt kiểm tra.
|
|
218
|
+
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
219
|
+
- Thông tin không có khả năng tái sử dụng.
|
|
220
|
+
- 👉 *Domain Ignore:* Report Lighthouse của lần đo test tạm thời.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### Golden Rule
|
|
225
|
+
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
226
|
+
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
---
|
|
230
|
+
---
|
|
231
|
+
---
|
|
232
|
+
|
|
103
233
|
## Preconditions
|
|
104
234
|
- [ ] Ứng dụng web đã có thể chạy hoặc code đã được viết một phần.
|
|
105
235
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Auto-generated from SKILL.md frontmatter
|
|
2
2
|
schema_version: 1
|
|
3
3
|
id: "qk-web-quality-gate"
|
|
4
|
-
version: "
|
|
4
|
+
version: "9.0.0"
|
|
5
5
|
description: "Kiểm toán tổng thể chất lượng Web: Accessibility (A11y), SEO, Web Performance, Security, UX Heuristics."
|
|
6
6
|
tools:
|
|
7
7
|
- "filesystem"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: qk-web-quality-gate-eval
|
|
2
2
|
description: Đánh giá chất lượng tổng thể của Web (Performance, SEO, A11y, UX)
|
|
3
|
-
version:
|
|
3
|
+
version: 9.0.0
|
|
4
4
|
threshold: 85 # Đảm bảo đo lường đầy đủ 4 trục chất lượng của ứng dụng Web
|
|
5
5
|
|
|
6
6
|
metrics:
|
|
@@ -23,4 +23,4 @@ metrics:
|
|
|
23
23
|
description: Các đề xuất tối ưu có khả thi để lập trình viên thực hiện ngay không?
|
|
24
24
|
weight: 25
|
|
25
25
|
criteria:
|
|
26
|
-
- Không chỉ ra lỗi chung chung mà chỉ định rõ cách fix (
|
|
26
|
+
- "Không chỉ ra lỗi chung chung mà chỉ định rõ cách fix (ví dụ: Thêm loading='lazy' vào thẻ img dòng 15) (25đ)"
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## [9.0.0] — 2026-08 — EDAOS v9.0: Universal Project Knowledge V1 & Dual-Mode Memory Architecture
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Universal Project Knowledge Protocol V1 (AI Skin V9)**: Core memory discipline integrated across all 32 developer skills (`qk-*`) and core OS rules.
|
|
12
|
+
- **Dual-Mode Memory Setup**: Fully automated support for Private Mode (`.ai-local/`, git-ignored by default) and Shared Team Mode (`.agents/`, commit/reviewable via PRs).
|
|
13
|
+
- **Pre-flight & Post-flight Governance**: Skills automatically check memory before performing redundant project searches (Navigator pattern) and propose structured knowledge harvesting (`Architecture`, `Convention`, `Pattern`, `Hard Bug`) subject to human confirmation (AI proposes → Human approves).
|
|
14
|
+
- **Zero-Overwrite & Portable References**: Mandatory 100-line limit for project `AGENTS.md`, workspace-relative symbol paths, and immutable memory history (`status: Active` → `Archived`).
|
|
15
|
+
|
|
8
16
|
## [8.3.1] — 2026-07 — EDAOS v8.3.1: Eval Pipeline & Agentic Governance
|
|
9
17
|
|
|
10
18
|
### Added
|
package/README.md
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
# 🚀 AI Developer Skill OS (ai-developer-skill-os)
|
|
1
|
+
# 🚀 AI Developer Skill OS (ai-developer-skill-os) v9.0.0
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **v9.0.0 "EDAOS v9.0 — Governed Capability & Universal Project Knowledge V1 Architecture"**
|
|
4
4
|
|
|
5
|
-
Hệ sinh thái AI Developer Skill OS tiến hóa lên phiên bản **
|
|
5
|
+
Hệ sinh thái AI Developer Skill OS tiến hóa lên phiên bản **V9.0.0 (EDAOS v9.0)** với kiến trúc **Universal Project Knowledge V1 & Dual-Mode Memory Platform**, kết hợp cùng mô hình Manifest-First và Eval Pipeline, biến AI từ trợ lý bị động thành Sư phụ Lập trình (Elite AI Engineer) thấu hiểu sâu sắc codebase và tri thức dự án với chi phí tra cứu gần như bằng 0.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 🧭 Kiến Trúc Trí Nhớ Dự Án (Universal Project Knowledge V1)
|
|
10
|
+
- **Quản trị như Source Code:** Tri thức dự án đơn giản, minh bạch, có thể xem xét (review) qua Pull Request, và **luôn có con người phê duyệt** (AI Đề xuất -> Con người Phê duyệt via `/learn` hoặc `./qk-project-memory`).
|
|
11
|
+
- **Hai Chế Độ (Dual-Mode):**
|
|
12
|
+
- *Private Mode (`.ai-local/`):* Bộ nhớ cá nhân ẩn danh, tự động được thêm vào `.gitignore` để bảo vệ sự riêng tư.
|
|
13
|
+
- *Shared Mode (`.agents/`):* Tri thức chung cho cả Team và hệ thống CI/CD, có thể commit và review ngang hàng như code.
|
|
14
|
+
- **Tối Ưu Nhảy Sọt (Navigator):** File `AGENTS.md` giới hạn siêu gọn dưới 100 dòng làm bản đồ chỉ đường, kết hợp cùng `knowledge/index.yaml` (lưu trữ đúng 4 loại: *Architecture, Convention, Pattern, Hard Bug*), triệt tiêu 80% chi phí tìm kiếm mù lòa (zero redundant searches).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 🏗️ 4 Trụ Cột Kiến Trúc Cốt Lõi (EDAOS v9.0 Architecture)
|
|
10
19
|
|
|
11
20
|
### 1. Manifest-First & O(1) Registry Engine
|
|
12
21
|
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!
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-developer-skill-os",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "EDAOS
|
|
3
|
+
"version": "9.0.0",
|
|
4
|
+
"description": "EDAOS v9.0 — Governed Capability Platform & Universal Project Knowledge V1 (Dual-Mode Memory Architecture).",
|
|
5
5
|
"main": "bin/install.js",
|
|
6
6
|
"files": [
|
|
7
7
|
"bin",
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
"node": ">=18.0.0"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
+
"sync:v9": "node tooling/sync-versions.js",
|
|
23
24
|
"build:registry": "node tooling/build-registry.js",
|
|
24
25
|
"test": "vitest run",
|
|
25
26
|
"test:watch": "vitest",
|
|
26
27
|
"test:registry": "vitest run && node tooling/build-registry.js",
|
|
27
28
|
"test:graph": "node tooling/validate-graph.js",
|
|
28
|
-
"lint": "node
|
|
29
|
+
"lint": "node tooling/validate-skills.js",
|
|
29
30
|
"eval": "node evals/runner.js",
|
|
30
31
|
"eval:all": "node evals/runner.js --all",
|
|
31
32
|
"test:agent": "node tests/agent-evaluation/runner/evaluate-routing.js",
|
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 = "9.0.0";
|
|
5
5
|
const rootDir = process.cwd();
|
|
6
6
|
const skillsDir = path.join(rootDir, '.agents', 'skills');
|
|
7
7
|
|
|
@@ -9,6 +9,236 @@ const skills = fs.readdirSync(skillsDir).filter(f => fs.statSync(path.join(skill
|
|
|
9
9
|
|
|
10
10
|
let updatedCount = 0;
|
|
11
11
|
|
|
12
|
+
function getMemoryWorkflow(skillName) {
|
|
13
|
+
const hints = {
|
|
14
|
+
'qk-access-policy': {
|
|
15
|
+
active: 'Architecture/Pattern (vd: ma trận quyền authz, middleware rbac)',
|
|
16
|
+
harvest: 'Quyết định Architecture hoặc Pattern bảo mật (vd: guard mới, chính sách Zero-Trust)',
|
|
17
|
+
ignore: 'Thao tác thêm 1 route/role thông thường vào bảng quyền đã có'
|
|
18
|
+
},
|
|
19
|
+
'qk-agent-observability': {
|
|
20
|
+
active: 'Hard Bug / Convention (vd: mô hình lỗi lặp vô tận, giới hạn token budget)',
|
|
21
|
+
harvest: 'Hard Bug mới có khả năng tái diễn (vd: lỗi loop định tuyến cần blacklist)',
|
|
22
|
+
ignore: 'Trace log của một session đơn lẻ (tự XÓA sau khi thực thi)'
|
|
23
|
+
},
|
|
24
|
+
'qk-ai-builder': {
|
|
25
|
+
active: 'Architecture/Pattern (vd: cấu hình provider LLM, chuẩn RAG pipeline, prompt template)',
|
|
26
|
+
harvest: 'Pattern hoặc Convention mới (vd: quy chuẩn JSON schema cho prompt, scorecard định lượng)',
|
|
27
|
+
ignore: 'Các thao tác tinh chỉnh từ ngữ prompt tạm thời cho 1 task đơn lẻ'
|
|
28
|
+
},
|
|
29
|
+
'qk-api-lifecycle': {
|
|
30
|
+
active: 'Convention/Pattern (vd: cấu trúc wrapper { status, data, error }, pagination format)',
|
|
31
|
+
harvest: 'Pattern hoặc Convention mới của dự án (vd: chuẩn xử lý lỗi API mới, rate limiting)',
|
|
32
|
+
ignore: 'Thao tác thêm 1 CRUD endpoint thông thường theo Hợp đồng sẵn có'
|
|
33
|
+
},
|
|
34
|
+
'qk-bug-resolution': {
|
|
35
|
+
active: 'Hard Bug (vd: lỗi memory leak, race condition, lỗi thư viện tương tự từng gặp)',
|
|
36
|
+
harvest: 'Hard Bug mới có khả năng tái diễn (vd: nguyên nhân sâu xa của crash/leak để phòng ngừa)',
|
|
37
|
+
ignore: 'Lỗi nhỏ chỉ xảy ra một lần (vd: typo, quên import, thiếu ngoặc đơn giản)'
|
|
38
|
+
},
|
|
39
|
+
'qk-code-review': {
|
|
40
|
+
active: 'Architecture / Convention / Pattern hiện hành của dự án (Ground Truth để thẩm định)',
|
|
41
|
+
harvest: 'Pattern hoặc Convention mới (vd: phát hiện anti-pattern lặp đi lặp lại trong codebase)',
|
|
42
|
+
ignore: 'Các góp ý phong cách (formatting/linting) đơn lẻ trong một PR'
|
|
43
|
+
},
|
|
44
|
+
'qk-context-loader': {
|
|
45
|
+
active: 'Pattern / Architecture (vd: sơ đồ phụ thuộc mô-đun, biểu đồ ngữ cảnh O(1))',
|
|
46
|
+
harvest: 'Quyết định Architecture hoặc Pattern quan trọng khi ánh xạ dependency',
|
|
47
|
+
ignore: 'Cache đồ thị ngữ cảnh tạm thời của một lệnh tìm kiếm'
|
|
48
|
+
},
|
|
49
|
+
'qk-data-lifecycle': {
|
|
50
|
+
active: 'Convention / Architecture (vd: chiến lược migration backward-compatible, quy định FK)',
|
|
51
|
+
harvest: 'Quyết định Architecture quan trọng (vd: chuẩn index CSDL, quy tắc phân trang mới)',
|
|
52
|
+
ignore: 'Thao tác thêm trường đơn giản hoặc temporary database fix'
|
|
53
|
+
},
|
|
54
|
+
'qk-db-optimizer': {
|
|
55
|
+
active: 'Pattern / Hard Bug (vd: lỗi slow query từng gặp, kế hoạch index đã duyệt)',
|
|
56
|
+
harvest: 'Quyết định Architecture hoặc Pattern tối ưu (vd: chuẩn composite index, partition strategy)',
|
|
57
|
+
ignore: 'Dữ liệu kết quả EXPLAIN tạm thời của 1 query'
|
|
58
|
+
},
|
|
59
|
+
'qk-design-system-engineering': {
|
|
60
|
+
active: 'Architecture / Convention (vd: hợp đồng màu sắc DESIGN.md, spacing, typography token)',
|
|
61
|
+
harvest: 'Pattern hoặc Convention mới (vd: định danh CSS variables mới cho toàn bộ hệ thống)',
|
|
62
|
+
ignore: 'Sửa đổi CSS cục bộ cho 1 component đơn lẻ'
|
|
63
|
+
},
|
|
64
|
+
'qk-devops-platform': {
|
|
65
|
+
active: 'Architecture / Hard Bug (vd: quy trình CI/CD pipeline, rollback strategy, docker env)',
|
|
66
|
+
harvest: 'Quyết định Architecture quan trọng (vd: thay đổi runner CI, cấu hình rollback mới)',
|
|
67
|
+
ignore: 'Log build tạm thời của CI/CD session'
|
|
68
|
+
},
|
|
69
|
+
'qk-docs': {
|
|
70
|
+
active: 'Convention (vd: chuẩn cấu trúc tài liệu, ngôn ngữ giải thích Tiếng Việt / Code Tiếng Anh)',
|
|
71
|
+
harvest: 'Pattern hoặc Convention mới của dự án (vd: quy chuẩn viết ADR hoặc tài liệu kiến trúc mới)',
|
|
72
|
+
ignore: 'Các lần sửa chính tả, ngữ pháp đơn lẻ'
|
|
73
|
+
},
|
|
74
|
+
'qk-engineering-standard': {
|
|
75
|
+
active: 'Convention / Architecture (vd: ngưỡng định lượng độ phức tạp cyclomatic, DRY, SOLID)',
|
|
76
|
+
harvest: 'Convention hoặc ranh giới kỹ thuật mới (vd: áp đặt giới hạn 100 dòng cho file AGENTS.md)',
|
|
77
|
+
ignore: 'Cảnh báo linter tạm thời'
|
|
78
|
+
},
|
|
79
|
+
'qk-fe-api-integration': {
|
|
80
|
+
active: 'Pattern / Convention (vd: cách quản lý state TanStack Query/Zustand, binding chuẩn)',
|
|
81
|
+
harvest: 'Pattern mới (vd: quy tắc cache/revalidate dữ liệu tầng Frontend)',
|
|
82
|
+
ignore: 'Logic call API của 1 component riêng rẽ'
|
|
83
|
+
},
|
|
84
|
+
'qk-feature-delivery': {
|
|
85
|
+
active: 'Architecture / Pattern / Convention liên quan đến luồng tính năng hiện tại',
|
|
86
|
+
harvest: 'Quyết định Architecture hoặc Pattern mới hình thành khi làm feature',
|
|
87
|
+
ignore: 'Dữ liệu mock phục vụ thử nghiệm tính năng ban đầu'
|
|
88
|
+
},
|
|
89
|
+
'qk-frontend-architecture': {
|
|
90
|
+
active: 'Architecture (vd: quy tắc router TanStack/Next, module routing, state isolation)',
|
|
91
|
+
harvest: 'Quyết định Architecture trọng yếu (vd: đổi chiến lược routing hoặc state management)',
|
|
92
|
+
ignore: 'Refactor UI component thông thường'
|
|
93
|
+
},
|
|
94
|
+
'qk-orchestrator': {
|
|
95
|
+
active: 'Architecture / Convention (vd: bảng điều hướng kỹ năng, ràng buộc ranh giới rõ ràng)',
|
|
96
|
+
harvest: 'Quy luật phân phối routing hiệu quả mới',
|
|
97
|
+
ignore: 'Trình tự gọi lệnh tạm thời của một prompt user'
|
|
98
|
+
},
|
|
99
|
+
'qk-product-specification': {
|
|
100
|
+
active: 'Convention / Pattern (vd: định dạng Acceptance Criteria, cấu trúc PRD)',
|
|
101
|
+
harvest: 'Thỏa thuận Product Spec hoặc cấu trúc requirement mới',
|
|
102
|
+
ignore: 'Ghi chú thảo luận ý tưởng thô ban đầu'
|
|
103
|
+
},
|
|
104
|
+
'qk-production-release': {
|
|
105
|
+
active: 'Convention / Hard Bug (vd: 8-gate checklist release, rủi ro production cũ)',
|
|
106
|
+
harvest: 'Checklist hoặc Gate bảo vệ Production mới được đưa ra từ post-mortem',
|
|
107
|
+
ignore: 'Log deploy staging tạm thời'
|
|
108
|
+
},
|
|
109
|
+
'qk-project-bootstrap': {
|
|
110
|
+
active: 'Architecture / Convention (vd: mô hình 4-folder RAG/Agent, blueprint quy chuẩn V9)',
|
|
111
|
+
harvest: 'Cấu trúc thư mục hoặc template scaffold mẫu mới của dự án',
|
|
112
|
+
ignore: 'File cấu hình local rác (đã đưa vào gitignore)'
|
|
113
|
+
},
|
|
114
|
+
'qk-project-health': {
|
|
115
|
+
active: 'Architecture / Hard Bug (vd: chỉ số sức khỏe codebase 0-100, các điểm nợ kỹ thuật tech debt)',
|
|
116
|
+
harvest: 'Mô hình Code Smell hoặc Tech Debt hệ thống cần theo dõi tiêu diệt',
|
|
117
|
+
ignore: 'Report health tạm thời của 1 đợt scan'
|
|
118
|
+
},
|
|
119
|
+
'qk-refactor': {
|
|
120
|
+
active: 'Pattern / Convention (vd: chiến lược tách file anti-slop, bảo toàn public contract)',
|
|
121
|
+
harvest: 'Pattern tái cấu trúc mã nguồn hiệu quả (vd: bẻ gẫy god-file thành module O(1))',
|
|
122
|
+
ignore: 'Các thao tác đổi tên biến (rename) hoặc format đơn giản'
|
|
123
|
+
},
|
|
124
|
+
'qk-security-audit': {
|
|
125
|
+
active: 'Hard Bug / Architecture (vd: lỗ hổng OWASP, lộ rò rỉ secret, quy chuẩn Zero-Trust R-SEC-04)',
|
|
126
|
+
harvest: 'Lỗ hổng bảo mật mới phát hiện (Hard Bug) hoặc chính sách an toàn mới',
|
|
127
|
+
ignore: 'Cảnh báo scanner giả (false positive) đã xác thực'
|
|
128
|
+
},
|
|
129
|
+
'qk-system-evolution': {
|
|
130
|
+
active: 'Architecture / Hard Bug (vd: kế hoạch nâng cấp thư viện incremental, breaking changes)',
|
|
131
|
+
harvest: 'Kinh nghiệm xử lý xung đột dependency hoặc bài học downgrade/rollback',
|
|
132
|
+
ignore: 'Lockfile changes tạm thời trong local cache'
|
|
133
|
+
},
|
|
134
|
+
'qk-test-engineering': {
|
|
135
|
+
active: 'Convention / Pattern (vd: chiến lược Test Pyramid, mock provider Vitest/Jest, boundary test)',
|
|
136
|
+
harvest: 'Pattern viết mock/stub mới hoặc chiến lược fixture dự án',
|
|
137
|
+
ignore: 'File coverage nháp sinh ra trong quá trình chạy test'
|
|
138
|
+
},
|
|
139
|
+
'qk-ui-audit': {
|
|
140
|
+
active: 'Convention / Pattern (vd: 57 check Anti-Slop, độ tương phản A11y, Design Contract)',
|
|
141
|
+
harvest: 'Các mẫu lỗi AI-Slop phổ biến mới phát hiện trong UI dự án',
|
|
142
|
+
ignore: 'Lỗi lệch vài pixel hoặc sai color shade lẻ tẻ'
|
|
143
|
+
},
|
|
144
|
+
'qk-ui-builder': {
|
|
145
|
+
active: 'Convention / Architecture (vd: bộ token màu sắc, typography, animation từ DESIGN.md)',
|
|
146
|
+
harvest: 'Mẫu layout hoặc component kết hợp chuẩn mực mới của ứng dụng',
|
|
147
|
+
ignore: 'CSS linh tinh không thuộc hệ thống design system'
|
|
148
|
+
},
|
|
149
|
+
'qk-ui-system-builder': {
|
|
150
|
+
active: 'Architecture / Convention (vd: ánh xạ 1:1 từ contract DESIGN.md sang biến CSS)',
|
|
151
|
+
harvest: 'Chuẩn quy tắc đặt tên (--color-role-shade) hoặc cơ chế scale Dark Mode',
|
|
152
|
+
ignore: 'Giá trị màu thử nghiệm ngoài hợp đồng (bị nghiêm cấm)'
|
|
153
|
+
},
|
|
154
|
+
'qk-validation-gate': {
|
|
155
|
+
active: 'Convention / Architecture (vd: các ngưỡng scorecard, quy định zero hallucination)',
|
|
156
|
+
harvest: 'Bộ tiêu chí kiểm định mới (Scorecard metric) được tích hợp vào pipeline',
|
|
157
|
+
ignore: 'Kết quả log pass/fail tạm thời của một build con'
|
|
158
|
+
},
|
|
159
|
+
'qk-web-quality-gate': {
|
|
160
|
+
active: 'Convention / Hard Bug (vd: chỉ số Core Web Vitals LCP/CLS, rủi ro bot SEO/A11y)',
|
|
161
|
+
harvest: 'Mẫu tối ưu hiệu năng web (vd: chiến lược lazyload hình ảnh, bundle partition)',
|
|
162
|
+
ignore: 'Report Lighthouse của lần đo test tạm thời'
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const hint = hints[skillName] || {};
|
|
167
|
+
|
|
168
|
+
return `## Memory Workflow
|
|
169
|
+
|
|
170
|
+
### Pre-flight Retrieve (Trước khi thực thi)
|
|
171
|
+
- Trước các task có tính lặp lại, debug, refactor, kiến trúc hoặc rủi ro cao:
|
|
172
|
+
bắt buộc tra cứu:
|
|
173
|
+
- \`.agents/knowledge/index.yaml\` (Shared Project Knowledge)
|
|
174
|
+
- \`.ai-local/knowledge/index.yaml\` (Private Local Knowledge)
|
|
175
|
+
|
|
176
|
+
- Ưu tiên sử dụng các Knowledge đang có trạng thái \`Active\` thuộc:
|
|
177
|
+
- Architecture
|
|
178
|
+
- Hard Bug
|
|
179
|
+
- Convention
|
|
180
|
+
- Pattern
|
|
181
|
+
- Tech Debt Pattern${hint.active ? `\n - 👉 *Domain Focus:* ${hint.active}.` : ''}
|
|
182
|
+
|
|
183
|
+
- Memory chỉ đóng vai trò **Navigator (bản đồ chỉ đường)**.
|
|
184
|
+
Không được xem Memory là Source of Truth.
|
|
185
|
+
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.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Learning Flow (AI tự học có kiểm soát)
|
|
190
|
+
- 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:
|
|
191
|
+
- Hard Bug có khả năng tái diễn.
|
|
192
|
+
- Pattern làm việc lặp lại trong dự án.
|
|
193
|
+
- Convention hoặc quy tắc kiến trúc mới.
|
|
194
|
+
- Quyết định Architecture quan trọng.
|
|
195
|
+
- Tech Debt Pattern hoặc Code Smell có tính hệ thống.${hint.harvest ? `\n - 👉 *Domain Harvest:* ${hint.harvest}.` : ''}
|
|
196
|
+
|
|
197
|
+
- Candidate Memory chỉ là bản nháp quan sát, chưa phải tri thức chính thức.
|
|
198
|
+
- Candidate Memory có thể lưu tạm tại: \`.ai-local/candidates/\`
|
|
199
|
+
- AI không được tự động Promote Candidate Memory thành Project Knowledge.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### Post-flight Harvest (Đề xuất → Phê duyệt)
|
|
204
|
+
Sau khi hoàn thành task:
|
|
205
|
+
- AI đánh giá các Candidate Memory đã tạo.
|
|
206
|
+
- Nếu phát hiện tri thức có giá trị tái sử dụng:
|
|
207
|
+
- Đề xuất người dùng xem xét.
|
|
208
|
+
- Gửi yêu cầu phê duyệt thông qua:
|
|
209
|
+
- \`/learn\`
|
|
210
|
+
- \`qk-project-memory\`
|
|
211
|
+
- Chỉ sau khi được phê duyệt, Candidate Memory mới được chuyển thành Knowledge chính thức:
|
|
212
|
+
|
|
213
|
+
\`\`\`
|
|
214
|
+
.ai-local/candidates/ ──(Approve)──> .agents/knowledge/index.yaml
|
|
215
|
+
\`\`\`
|
|
216
|
+
|
|
217
|
+
- Project Knowledge phải được xem như tài sản kỹ thuật của dự án:
|
|
218
|
+
- Có thể review, cập nhật, loại bỏ và có lịch sử thay đổi.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### Ignore (Không đưa vào Memory)
|
|
223
|
+
Không lưu:
|
|
224
|
+
- Trace log của một session đơn lẻ.
|
|
225
|
+
- Temporary debugging data.
|
|
226
|
+
- Output của một lần chạy test/scan.
|
|
227
|
+
- Report health tạm thời của một đợt kiểm tra.
|
|
228
|
+
- Lỗi nhỏ chỉ xảy ra một lần.
|
|
229
|
+
- Thông tin không có khả năng tái sử dụng.${hint.ignore ? `\n- 👉 *Domain Ignore:* ${hint.ignore}.` : ''}
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
### Golden Rule
|
|
234
|
+
> **AI được phép học, nhưng không được tự quyết định tri thức chính thức.**
|
|
235
|
+
> **AI quan sát → Đề xuất → Con người phê duyệt → Dự án tiến hóa.**
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
`;
|
|
240
|
+
}
|
|
241
|
+
|
|
12
242
|
skills.forEach(skill => {
|
|
13
243
|
const skillPath = path.join(skillsDir, skill);
|
|
14
244
|
|
|
@@ -16,9 +246,29 @@ skills.forEach(skill => {
|
|
|
16
246
|
const skillMdPath = path.join(skillPath, 'SKILL.md');
|
|
17
247
|
if (fs.existsSync(skillMdPath)) {
|
|
18
248
|
let content = fs.readFileSync(skillMdPath, 'utf8');
|
|
19
|
-
|
|
249
|
+
let newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
|
|
250
|
+
newContent = newContent.replace(/^# ── V[\d]+: Classification/m, `# ── V9: Classification`);
|
|
251
|
+
|
|
252
|
+
// Inject or update Memory Workflow (except qk-project-memory which manages memory itself)
|
|
253
|
+
if (skill !== 'qk-project-memory' && skill !== 'qk-help') {
|
|
254
|
+
const block = getMemoryWorkflow(skill);
|
|
255
|
+
if (newContent.includes('## Memory Workflow')) {
|
|
256
|
+
newContent = newContent.replace(/## Memory Workflow[\s\S]*?(?=\r?\n---\r?\n|\r?\n## )/m, block.trimEnd());
|
|
257
|
+
} else if (newContent.includes('## 🧭 V1 Knowledge Protocol')) {
|
|
258
|
+
newContent = newContent.replace(/## 🧭 V1 Knowledge Protocol[\s\S]*?(?=\r?\n---\r?\n|\r?\n## )/m, block.trimEnd());
|
|
259
|
+
} else if (newContent.includes('## Preconditions')) {
|
|
260
|
+
newContent = newContent.replace('## Preconditions', block + '## Preconditions');
|
|
261
|
+
} else if (newContent.includes('## Scope')) {
|
|
262
|
+
newContent = newContent.replace('## Scope', block + '## Scope');
|
|
263
|
+
} else if (newContent.includes('## Workflow')) {
|
|
264
|
+
newContent = newContent.replace('## Workflow', block + '## Workflow');
|
|
265
|
+
} else {
|
|
266
|
+
newContent = newContent.replace(/(# .*\r?\n\r?\n(> .*\r?\n)?\r?\n?---\r?\n\r?\n)/, '$1' + block);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
20
270
|
if (content !== newContent) {
|
|
21
|
-
fs.writeFileSync(skillMdPath, newContent);
|
|
271
|
+
fs.writeFileSync(skillMdPath, newContent, 'utf8');
|
|
22
272
|
updatedCount++;
|
|
23
273
|
}
|
|
24
274
|
}
|
|
@@ -29,7 +279,7 @@ skills.forEach(skill => {
|
|
|
29
279
|
let content = fs.readFileSync(capPath, 'utf8');
|
|
30
280
|
const newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: "${targetVersion}"`);
|
|
31
281
|
if (content !== newContent) {
|
|
32
|
-
fs.writeFileSync(capPath, newContent);
|
|
282
|
+
fs.writeFileSync(capPath, newContent, 'utf8');
|
|
33
283
|
updatedCount++;
|
|
34
284
|
}
|
|
35
285
|
}
|
|
@@ -40,10 +290,10 @@ skills.forEach(skill => {
|
|
|
40
290
|
let content = fs.readFileSync(evalPath, 'utf8');
|
|
41
291
|
const newContent = content.replace(/^version:\s*["']?[\d.]+["']?/m, `version: ${targetVersion}`);
|
|
42
292
|
if (content !== newContent) {
|
|
43
|
-
fs.writeFileSync(evalPath, newContent);
|
|
293
|
+
fs.writeFileSync(evalPath, newContent, 'utf8');
|
|
44
294
|
updatedCount++;
|
|
45
295
|
}
|
|
46
296
|
}
|
|
47
297
|
});
|
|
48
298
|
|
|
49
|
-
console.log(`✅ Synchronized version to ${targetVersion} across ${updatedCount} files.`);
|
|
299
|
+
console.log(`✅ Synchronized version to ${targetVersion} & Memory Workflow across ${updatedCount} files.`);
|
|
@@ -31,7 +31,7 @@ function parseFrontmatter(content) {
|
|
|
31
31
|
const version = extract('version') || '7.5.0';
|
|
32
32
|
let status = extract('status');
|
|
33
33
|
|
|
34
|
-
if (!status && version.startsWith('8.')) {
|
|
34
|
+
if (!status && (version.startsWith('8.') || version.startsWith('9.'))) {
|
|
35
35
|
status = 'stable';
|
|
36
36
|
} else if (!status) {
|
|
37
37
|
status = 'legacy';
|