ai-developer-skill-os 3.1.5 → 6.0.0-rc1
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/README.md +15 -19
- package/_template/BEHAVIOR_SPEC.md +96 -0
- package/docs/GOVERNANCE.md +1 -1
- package/fix_seeds.js +22 -0
- package/framework/KERNEL.md +83 -0
- package/framework/bias-library/cosmetic-refactor.md +21 -0
- package/framework/bias-library/enterprise-crud.md +21 -0
- package/framework/bias-library/fake-ui-slop.md +20 -0
- package/framework/bias-library/hallucinated-tools.md +20 -0
- package/framework/bias-library/missing-ui-states.md +19 -0
- package/framework/bias-library/over-indexing.md +20 -0
- package/framework/bias-library/swallow-errors.md +19 -0
- package/framework/bias-library/ui-only-security.md +17 -0
- package/framework/decision-primitives.md +47 -0
- package/framework/dial-library/complexity-budget.md +13 -0
- package/framework/dial-library/granularity.md +13 -0
- package/framework/dial-library/optimization-strategy.md +13 -0
- package/framework/dial-library/strictness.md +13 -0
- package/framework/rule-library/delegation-only.md +9 -0
- package/framework/rule-library/minimal-diff.md +9 -0
- package/migrate-to-v6.js +130 -0
- package/migrate.js +147 -0
- package/migrate.py +133 -0
- package/migrate_all.cjs +96 -0
- package/package.json +2 -2
- package/skills/qk-access-policy/SKILL.md +30 -42
- package/skills/qk-ai-builder/SKILL.md +32 -43
- package/skills/qk-api-lifecycle/SKILL.md +28 -62
- package/skills/qk-bug-resolution/SKILL.md +29 -66
- package/skills/qk-context-loader/SKILL.md +25 -44
- package/skills/qk-data-lifecycle/SKILL.md +25 -58
- package/skills/qk-db-optimizer/SKILL.md +25 -53
- package/skills/qk-design-to-code/SKILL.md +32 -48
- package/skills/qk-docs/SKILL.md +26 -52
- package/skills/qk-engineering-standard/SKILL.md +28 -59
- package/skills/qk-feature-delivery/SKILL.md +29 -64
- package/skills/qk-help/SKILL.md +30 -40
- package/skills/qk-orchestrator/SKILL.md +25 -51
- package/skills/qk-policy-engine/SKILL.md +24 -49
- package/skills/qk-production-release/SKILL.md +31 -48
- package/skills/qk-project-bootstrap/SKILL.md +32 -46
- package/skills/qk-project-health/SKILL.md +26 -54
- package/skills/qk-project-memory/SKILL.md +31 -38
- package/skills/qk-system-evolution/SKILL.md +25 -61
- package/skills/qk-ui-audit/SKILL.md +25 -56
- package/skills/qk-ui-system-builder/SKILL.md +30 -42
- package/skills/qk-validation-gate/SKILL.md +26 -57
- package/specs/contracts/behavior-contract.yaml +40 -0
- package/specs/expectations/qk-bug-resolution.yaml +35 -0
- package/specs/scenarios/fix-login-nullref.yaml +3 -0
- package/taste-skill/.claude-plugin/marketplace.json +20 -0
- package/taste-skill/.claude-plugin/plugin.json +19 -0
- package/taste-skill/.github/FUNDING.yml +1 -0
- package/taste-skill/.github/copilot-instructions.md +11 -0
- package/taste-skill/CHANGELOG.md +111 -0
- package/taste-skill/LICENSE +21 -0
- package/taste-skill/README.md +212 -0
- package/taste-skill/assets/.gitkeep +0 -0
- package/taste-skill/assets/readme-banner.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-agent-skills.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-changelog.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-mit.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-site.webp +0 -0
- package/taste-skill/assets/readme-buttons/btn-tools.webp +0 -0
- package/taste-skill/assets/readme-cta-tasteskill.svg +5 -0
- package/taste-skill/assets/sponsors/animations-dev.webp +0 -0
- package/taste-skill/assets/sponsors/emil-animations-dev.webp +0 -0
- package/taste-skill/assets/taste-skill-logo.png +0 -0
- package/taste-skill/assets/taste-skill-logo.webp +0 -0
- package/taste-skill/assets/vercel-oss-program-badge.svg +44 -0
- package/taste-skill/examples/floria-bottom.webp +0 -0
- package/taste-skill/examples/floria-full.webp +0 -0
- package/taste-skill/examples/floria-top.webp +0 -0
- package/taste-skill/research/README.md +8 -0
- package/taste-skill/research/laziness/README.md +25 -0
- package/taste-skill/research/laziness/findings/empirical-results.md +58 -0
- package/taste-skill/research/laziness/findings/references.md +20 -0
- package/taste-skill/research/laziness/remediation/architectural-patterns.md +55 -0
- package/taste-skill/research/laziness/remediation/parameter-tuning.md +44 -0
- package/taste-skill/research/laziness/remediation/prompt-engineering.md +52 -0
- package/taste-skill/research/laziness/remediation/reference-prompts.md +79 -0
- package/taste-skill/research/laziness/root-causes/cognitive-shortcuts.md +23 -0
- package/taste-skill/research/laziness/root-causes/output-limits.md +39 -0
- package/taste-skill/research/laziness/root-causes/rlhf-and-compute.md +27 -0
- package/taste-skill/research/laziness/root-causes/training-data-bias.md +28 -0
- package/taste-skill/scripts/build-emil-sponsor-row.mjs +41 -0
- package/taste-skill/scripts/convert-readme-assets-webp.mjs +142 -0
- package/taste-skill/scripts/process-readme-buttons.mjs +108 -0
- package/taste-skill/scripts/process-sponsor-badge.mjs +83 -0
- package/taste-skill/skill.sh +25 -0
- package/taste-skill/skills/brandkit/SKILL.md +798 -0
- package/taste-skill/skills/brutalist-skill/SKILL.md +92 -0
- package/taste-skill/skills/gpt-tasteskill/SKILL.md +74 -0
- package/taste-skill/skills/image-to-code-skill/SKILL.md +1228 -0
- package/taste-skill/skills/imagegen-frontend-mobile/SKILL.md +1465 -0
- package/taste-skill/skills/imagegen-frontend-web/SKILL.md +987 -0
- package/taste-skill/skills/llms.txt +13 -0
- package/taste-skill/skills/minimalist-skill/SKILL.md +85 -0
- package/taste-skill/skills/output-skill/SKILL.md +49 -0
- package/taste-skill/skills/redesign-skill/SKILL.md +178 -0
- package/taste-skill/skills/soft-skill/SKILL.md +98 -0
- package/taste-skill/skills/stitch-skill/DESIGN.md +121 -0
- package/taste-skill/skills/stitch-skill/SKILL.md +184 -0
- package/taste-skill/skills/taste-skill/SKILL.md +1206 -0
- package/taste-skill/skills/taste-skill-v1/SKILL.md +226 -0
- package/tests/behavior-conformance.test.js +151 -0
- package/_template/SKILL.md +0 -154
- package/tests/spec-compliance.test.js +0 -193
package/migrate-to-v6.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const skillsDir = path.join(__dirname, 'skills');
|
|
4
|
+
|
|
5
|
+
function convertToBSF(content, name) {
|
|
6
|
+
// Extract Frontmatter
|
|
7
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
8
|
+
const fm = fmMatch ? fmMatch[1] : '';
|
|
9
|
+
|
|
10
|
+
// Create v6 Frontmatter
|
|
11
|
+
let newFm = '---\n';
|
|
12
|
+
newFm += fm.split('\n').filter(line => {
|
|
13
|
+
return !line.startsWith('behavior:') &&
|
|
14
|
+
!line.startsWith('intent:') &&
|
|
15
|
+
!line.startsWith('priority:') &&
|
|
16
|
+
!line.startsWith('trigger:') &&
|
|
17
|
+
!line.startsWith('inputs:') &&
|
|
18
|
+
!line.startsWith('outputs:') &&
|
|
19
|
+
!line.startsWith('allowed_tools:') &&
|
|
20
|
+
!line.startsWith('pipeline:');
|
|
21
|
+
}).join('\n');
|
|
22
|
+
newFm += '\n---';
|
|
23
|
+
|
|
24
|
+
const missionMatch = content.match(/## ?? Mission \(Scope\)\n([\s\S]*?)(?=\n## |\n---|$)/);
|
|
25
|
+
const missionText = missionMatch ? missionMatch[1].trim() : 'Define mission here';
|
|
26
|
+
|
|
27
|
+
const bsf = \\
|
|
28
|
+
|
|
29
|
+
# ?? Behavior Specification: \
|
|
30
|
+
|
|
31
|
+
## 1. Behavior (�?nh danh H�nh vi)
|
|
32
|
+
\\\yaml
|
|
33
|
+
Mission: "Th?c thi nhi?m v? c?t l�i theo chu?n v6."
|
|
34
|
+
Authority: "�u?c quy?n y�u c?u th�m th�ng tin n?u thi?u."
|
|
35
|
+
Responsibility: "B?o d?m ch?t lu?ng d?u ra."
|
|
36
|
+
Limitation: "Kh�ng vi ph?m Invariants c?a h? th?ng."
|
|
37
|
+
\\\
|
|
38
|
+
|
|
39
|
+
## 2. Contracts (H?p d?ng)
|
|
40
|
+
|
|
41
|
+
### 2.1. Capability Contract
|
|
42
|
+
\\\yaml
|
|
43
|
+
Can:
|
|
44
|
+
- read_code
|
|
45
|
+
- execute_tests
|
|
46
|
+
Must:
|
|
47
|
+
- verify_assumptions_before_coding
|
|
48
|
+
Cannot:
|
|
49
|
+
- execute_destructive_commands
|
|
50
|
+
\\\
|
|
51
|
+
|
|
52
|
+
### 2.2. Output Contract
|
|
53
|
+
\\\yaml
|
|
54
|
+
Artifacts:
|
|
55
|
+
- summary_report
|
|
56
|
+
Completion: "Artifacts generated & Quality Gates passed."
|
|
57
|
+
\\\
|
|
58
|
+
|
|
59
|
+
## 3. Policies (Ch�nh s�ch)
|
|
60
|
+
|
|
61
|
+
### 3.1. Context Policy
|
|
62
|
+
\\\yaml
|
|
63
|
+
Scope: current_repo
|
|
64
|
+
Priority:
|
|
65
|
+
1: Project Docs
|
|
66
|
+
2: Current Conversation
|
|
67
|
+
Trust: "official docs > code > assumptions"
|
|
68
|
+
Fallback: ask_user
|
|
69
|
+
\\\
|
|
70
|
+
|
|
71
|
+
### 3.2. Reasoning Boundary
|
|
72
|
+
\\\yaml
|
|
73
|
+
May infer: "Bi?n s? c?c b?"
|
|
74
|
+
Must verify: "Logic nghi?p v?"
|
|
75
|
+
Must ask: "Y�u c?u m?p m?"
|
|
76
|
+
Must refuse: "R?i ro b?o m?t"
|
|
77
|
+
\\\
|
|
78
|
+
|
|
79
|
+
### 3.3. Decision Policy
|
|
80
|
+
\\\yaml
|
|
81
|
+
Priority:
|
|
82
|
+
1: correctness
|
|
83
|
+
2: safety
|
|
84
|
+
3: maintainability
|
|
85
|
+
\\\
|
|
86
|
+
|
|
87
|
+
### 3.4. Evidence Policy
|
|
88
|
+
\\\yaml
|
|
89
|
+
Accept: [logs, unit tests]
|
|
90
|
+
Prefer: [official vendor docs]
|
|
91
|
+
Reject: [guesswork]
|
|
92
|
+
\\\
|
|
93
|
+
|
|
94
|
+
### 3.5. Escalation Policy
|
|
95
|
+
\\\yaml
|
|
96
|
+
Warning: "Thay d?i c?u tr�c"
|
|
97
|
+
Confirmation: "X�a file"
|
|
98
|
+
Stop: "L?i Permission"
|
|
99
|
+
\\\
|
|
100
|
+
|
|
101
|
+
## 4. Protocol (T�y ch?n)
|
|
102
|
+
|
|
103
|
+
\\\yaml
|
|
104
|
+
States:
|
|
105
|
+
- collect_context
|
|
106
|
+
- execute
|
|
107
|
+
|
|
108
|
+
Transitions:
|
|
109
|
+
collect_context:
|
|
110
|
+
if context_missing: -> Stop
|
|
111
|
+
else: -> execute
|
|
112
|
+
execute: -> Done
|
|
113
|
+
\\\
|
|
114
|
+
\;
|
|
115
|
+
return bsf.replace(/\n\n\n/g, '\n\n');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
fs.readdirSync(skillsDir).forEach(dir => {
|
|
119
|
+
const fullPath = path.join(skillsDir, dir);
|
|
120
|
+
if (fs.statSync(fullPath).isDirectory() && !dir.startsWith('_archive')) {
|
|
121
|
+
const skillPath = path.join(fullPath, 'SKILL.md');
|
|
122
|
+
if (fs.existsSync(skillPath)) {
|
|
123
|
+
if (dir === 'qk-bug-resolution') return; // already done
|
|
124
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
125
|
+
const newContent = convertToBSF(content, dir);
|
|
126
|
+
fs.writeFileSync(skillPath, newContent);
|
|
127
|
+
console.log('Converted ' + dir);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
package/migrate.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const skillsDir = path.join(__dirname, 'skills');
|
|
4
|
+
|
|
5
|
+
function migrateSkill(skillDir) {
|
|
6
|
+
const filePath = path.join(skillsDir, skillDir, 'SKILL.md');
|
|
7
|
+
if (!fs.existsSync(filePath)) return;
|
|
8
|
+
|
|
9
|
+
if (skillDir === 'qk-bug-resolution') return; // Skip already migrated
|
|
10
|
+
|
|
11
|
+
let content = fs.readFileSync(filePath, 'utf8');
|
|
12
|
+
|
|
13
|
+
// Parse Frontmatter
|
|
14
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
15
|
+
if (!fmMatch) return;
|
|
16
|
+
let frontmatter = fmMatch[1];
|
|
17
|
+
|
|
18
|
+
// Filter old fields
|
|
19
|
+
const validFields = [];
|
|
20
|
+
const lines = frontmatter.split('\n');
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
if (!line.startsWith('behavior:') && !line.startsWith('intent:') && !line.startsWith('priority:') && !line.startsWith('trigger:') && !line.startsWith('inputs:') && !line.startsWith('outputs:') && !line.startsWith('allowed_tools:') && !line.startsWith('pipeline:')) {
|
|
23
|
+
validFields.push(line.replace(/v5\.0/g, 'v6.0'));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const newFm = '---\n' + validFields.join('\n') + '\n---';
|
|
27
|
+
|
|
28
|
+
// Parse Mission
|
|
29
|
+
let mission = 'Th?c thi nhi?m v? c?t l�i.';
|
|
30
|
+
let limitation = 'Kh�ng vi ph?m Invariants c?a h? th?ng.';
|
|
31
|
+
|
|
32
|
+
const missionSection = content.match(/## ?? Mission \(Scope\)[\s\S]*?(?=## |---|$)/);
|
|
33
|
+
if (missionSection) {
|
|
34
|
+
const missionLines = missionSection[0].split('\n');
|
|
35
|
+
const posLines = missionLines.filter(l => l.includes('- ?')).map(l => l.replace('- ?', '').trim());
|
|
36
|
+
const negLines = missionLines.filter(l => l.includes('- ?')).map(l => l.replace('- ?', '').trim());
|
|
37
|
+
|
|
38
|
+
if (posLines.length > 0) mission = posLines.join(' ');
|
|
39
|
+
if (negLines.length > 0) limitation = negLines.join(' ');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Parse Biases (Map to Reasoning Boundary - Must refuse)
|
|
43
|
+
const biasesMatch = content.match(/Biases:[\s\S]*?(?=---|$)/);
|
|
44
|
+
let refuses = [];
|
|
45
|
+
if (biasesMatch) {
|
|
46
|
+
const biasLines = biasesMatch[0].split('\n').filter(l => l.includes('- id:'));
|
|
47
|
+
refuses = biasLines.map(l => l.replace('- id:', '').trim());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Parse Dials (Map to Context Policy / Reasoning)
|
|
51
|
+
const dialsMatch = content.match(/Dials:[\s\S]*?(?=---|$)/);
|
|
52
|
+
let asks = [];
|
|
53
|
+
if (dialsMatch) {
|
|
54
|
+
const dialLines = dialsMatch[0].split('\n').filter(l => l.includes('- id:'));
|
|
55
|
+
asks = dialLines.map(l => l.replace('- id:', '').trim());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Generate BSF content
|
|
59
|
+
const bsfContent = \\
|
|
60
|
+
|
|
61
|
+
# ?? Behavior Specification: \
|
|
62
|
+
|
|
63
|
+
## 1. Behavior (�?nh danh H�nh vi)
|
|
64
|
+
\\\yaml
|
|
65
|
+
Mission: "\"
|
|
66
|
+
Authority: "�u?c quy?n th?c thi c�c t�c v? trong ph?m vi \."
|
|
67
|
+
Responsibility: "B?o d?m ch?t lu?ng d?u ra v� tu�n th? chu?n h? th?ng."
|
|
68
|
+
Limitation: "\"
|
|
69
|
+
\\\
|
|
70
|
+
|
|
71
|
+
## 2. Contracts (H?p d?ng)
|
|
72
|
+
|
|
73
|
+
### 2.1. Capability Contract
|
|
74
|
+
\\\yaml
|
|
75
|
+
Can:
|
|
76
|
+
- read_code
|
|
77
|
+
- execute_tests
|
|
78
|
+
- modify_code
|
|
79
|
+
Must:
|
|
80
|
+
- verify_assumptions_before_coding
|
|
81
|
+
Cannot:
|
|
82
|
+
- execute_destructive_commands
|
|
83
|
+
- bypass_validation
|
|
84
|
+
\\\
|
|
85
|
+
|
|
86
|
+
### 2.2. Output Contract
|
|
87
|
+
\\\yaml
|
|
88
|
+
Artifacts:
|
|
89
|
+
- summary_report: "Decision Summary gi?i th�ch Context, Quy?t d?nh v� Trade-offs."
|
|
90
|
+
Completion: "Nhi?m v? ho�n th�nh & Quality Gates passed."
|
|
91
|
+
\\\
|
|
92
|
+
|
|
93
|
+
## 3. Policies (Ch�nh s�ch)
|
|
94
|
+
|
|
95
|
+
### 3.1. Context Policy
|
|
96
|
+
\\\yaml
|
|
97
|
+
Scope: current_repo
|
|
98
|
+
Priority:
|
|
99
|
+
1: Project Docs
|
|
100
|
+
2: Current Conversation
|
|
101
|
+
3: Source Code
|
|
102
|
+
Trust: "official docs > code > assumptions"
|
|
103
|
+
Fallback: ask_user
|
|
104
|
+
\\\
|
|
105
|
+
|
|
106
|
+
### 3.2. Reasoning Boundary
|
|
107
|
+
\\\yaml
|
|
108
|
+
May infer: "Bi?n s? c?c b?, logic n?i b? kh�ng ?nh hu?ng h? th?ng."
|
|
109
|
+
Must verify: "T�c d?ng d?n c�c module kh�c."
|
|
110
|
+
Must ask: "\"
|
|
111
|
+
Must refuse: "\"
|
|
112
|
+
\\\
|
|
113
|
+
|
|
114
|
+
### 3.3. Decision Policy
|
|
115
|
+
\\\yaml
|
|
116
|
+
Priority:
|
|
117
|
+
1: correctness
|
|
118
|
+
2: safety
|
|
119
|
+
3: maintainability
|
|
120
|
+
4: performance
|
|
121
|
+
\\\
|
|
122
|
+
|
|
123
|
+
### 3.4. Evidence Policy
|
|
124
|
+
\\\yaml
|
|
125
|
+
Accept: [logs, unit tests, official docs]
|
|
126
|
+
Prefer: [unit tests, CI results]
|
|
127
|
+
Reject: [guesswork, outdated internet search]
|
|
128
|
+
\\\
|
|
129
|
+
|
|
130
|
+
### 3.5. Escalation Policy
|
|
131
|
+
\\\yaml
|
|
132
|
+
Warning: "Thay d?i c?u tr�c ho?c public API"
|
|
133
|
+
Confirmation: "Override config ho?c x�a file quan tr?ng"
|
|
134
|
+
Stop: "L?i Permission ho?c xung d?t Invariants"
|
|
135
|
+
\\\
|
|
136
|
+
\;
|
|
137
|
+
|
|
138
|
+
fs.writeFileSync(filePath, bsfContent);
|
|
139
|
+
console.log('Migrated ' + skillDir);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const dirs = fs.readdirSync(skillsDir);
|
|
143
|
+
for (const dir of dirs) {
|
|
144
|
+
if (fs.statSync(path.join(skillsDir, dir)).isDirectory() && !dir.startsWith('_')) {
|
|
145
|
+
migrateSkill(dir);
|
|
146
|
+
}
|
|
147
|
+
}
|
package/migrate.py
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
skills_dir = os.path.join(os.getcwd(), 'skills')
|
|
5
|
+
|
|
6
|
+
def migrate_skill(skill_dir):
|
|
7
|
+
file_path = os.path.join(skills_dir, skill_dir, 'SKILL.md')
|
|
8
|
+
if not os.path.exists(file_path): return
|
|
9
|
+
if skill_dir in ['qk-bug-resolution', 'qk-access-policy']: return
|
|
10
|
+
|
|
11
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
12
|
+
content = f.read()
|
|
13
|
+
|
|
14
|
+
fm_match = re.search(r'^---\n(.*?)\n---', content, re.DOTALL)
|
|
15
|
+
if not fm_match: return
|
|
16
|
+
frontmatter = fm_match.group(1)
|
|
17
|
+
|
|
18
|
+
valid_fields = []
|
|
19
|
+
for line in frontmatter.split('\n'):
|
|
20
|
+
if not any(line.startswith(prefix) for prefix in ['behavior:', 'intent:', 'priority:', 'trigger:', 'inputs:', 'outputs:', 'allowed_tools:', 'pipeline:']):
|
|
21
|
+
valid_fields.append(line.replace('v5.0', 'v6.0'))
|
|
22
|
+
|
|
23
|
+
new_fm = '---\n' + '\n'.join(valid_fields) + '\n---'
|
|
24
|
+
|
|
25
|
+
mission = f'Th?c thi nhi?m v? c?t l�i c?a {skill_dir}'
|
|
26
|
+
limitation = 'Kh�ng vi ph?m Invariants c?a h? th?ng.'
|
|
27
|
+
|
|
28
|
+
mission_section = re.search(r'## .*?Mission \(Scope\)(.*?)(?=## |---|$)', content, re.DOTALL)
|
|
29
|
+
if mission_section:
|
|
30
|
+
lines = mission_section.group(1).split('\n')
|
|
31
|
+
pos = [l.split('- ?')[-1].strip() for l in lines if '- ?' in l]
|
|
32
|
+
neg = [l.split('- ?')[-1].strip() for l in lines if '- ?' in l]
|
|
33
|
+
if pos: mission = ' '.join(pos)
|
|
34
|
+
if neg: limitation = ' '.join(neg)
|
|
35
|
+
|
|
36
|
+
biases_match = re.search(r'Biases:(.*?)(?=---|$)', content, re.DOTALL)
|
|
37
|
+
refuses = []
|
|
38
|
+
if biases_match:
|
|
39
|
+
refuses = [l.replace('- id:', '').strip() for l in biases_match.group(1).split('\n') if '- id:' in l]
|
|
40
|
+
|
|
41
|
+
dials_match = re.search(r'Dials:(.*?)(?=---|$)', content, re.DOTALL)
|
|
42
|
+
asks = []
|
|
43
|
+
if dials_match:
|
|
44
|
+
asks = [l.replace('- id:', '').strip() for l in dials_match.group(1).split('\n') if '- id:' in l]
|
|
45
|
+
|
|
46
|
+
must_ask = ', '.join(asks) if asks else 'Y�u c?u m?p m?, thi?u th�ng tin.'
|
|
47
|
+
must_refuse = ', '.join(refuses) if refuses else 'R?i ro b?o m?t, ph� v? ki?n tr�c.'
|
|
48
|
+
|
|
49
|
+
bsf_content = f'''{new_fm}
|
|
50
|
+
|
|
51
|
+
# ?? Behavior Specification: {skill_dir}
|
|
52
|
+
|
|
53
|
+
## 1. Behavior (�?nh danh H�nh vi)
|
|
54
|
+
`yaml
|
|
55
|
+
Mission: "{mission.replace('"', "'")}"
|
|
56
|
+
Authority: "�u?c quy?n th?c thi c�c t�c v? trong ph?m vi {skill_dir}."
|
|
57
|
+
Responsibility: "B?o d?m ch?t lu?ng d?u ra v� tu�n th? chu?n h? th?ng."
|
|
58
|
+
Limitation: "{limitation.replace('"', "'")}"
|
|
59
|
+
`
|
|
60
|
+
|
|
61
|
+
## 2. Contracts (H?p d?ng)
|
|
62
|
+
|
|
63
|
+
### 2.1. Capability Contract
|
|
64
|
+
`yaml
|
|
65
|
+
Can:
|
|
66
|
+
- read_code
|
|
67
|
+
- execute_tests
|
|
68
|
+
- modify_code
|
|
69
|
+
Must:
|
|
70
|
+
- verify_assumptions_before_coding
|
|
71
|
+
Cannot:
|
|
72
|
+
- execute_destructive_commands
|
|
73
|
+
- bypass_validation
|
|
74
|
+
`
|
|
75
|
+
|
|
76
|
+
### 2.2. Output Contract
|
|
77
|
+
`yaml
|
|
78
|
+
Artifacts:
|
|
79
|
+
- summary_report: "Decision Summary gi?i th�ch Context, Quy?t d?nh v� Trade-offs."
|
|
80
|
+
Completion: "Nhi?m v? ho�n th�nh & Quality Gates passed."
|
|
81
|
+
`
|
|
82
|
+
|
|
83
|
+
## 3. Policies (Ch�nh s�ch)
|
|
84
|
+
|
|
85
|
+
### 3.1. Context Policy
|
|
86
|
+
`yaml
|
|
87
|
+
Scope: current_repo
|
|
88
|
+
Priority:
|
|
89
|
+
1: Project Docs
|
|
90
|
+
2: Current Conversation
|
|
91
|
+
3: Source Code
|
|
92
|
+
Trust: "official docs > code > assumptions"
|
|
93
|
+
Fallback: ask_user
|
|
94
|
+
`
|
|
95
|
+
|
|
96
|
+
### 3.2. Reasoning Boundary
|
|
97
|
+
`yaml
|
|
98
|
+
May infer: "Bi?n s? c?c b?, logic n?i b? kh�ng ?nh hu?ng h? th?ng."
|
|
99
|
+
Must verify: "T�c d?ng d?n c�c module kh�c."
|
|
100
|
+
Must ask: "{must_ask.replace('"', "'")}"
|
|
101
|
+
Must refuse: "{must_refuse.replace('"', "'")}"
|
|
102
|
+
`
|
|
103
|
+
|
|
104
|
+
### 3.3. Decision Policy
|
|
105
|
+
`yaml
|
|
106
|
+
Priority:
|
|
107
|
+
1: correctness
|
|
108
|
+
2: safety
|
|
109
|
+
3: maintainability
|
|
110
|
+
4: performance
|
|
111
|
+
`
|
|
112
|
+
|
|
113
|
+
### 3.4. Evidence Policy
|
|
114
|
+
`yaml
|
|
115
|
+
Accept: [logs, unit tests, official docs]
|
|
116
|
+
Prefer: [unit tests, CI results]
|
|
117
|
+
Reject: [guesswork, outdated internet search]
|
|
118
|
+
`
|
|
119
|
+
|
|
120
|
+
### 3.5. Escalation Policy
|
|
121
|
+
`yaml
|
|
122
|
+
Warning: "Thay d?i c?u tr�c ho?c public API"
|
|
123
|
+
Confirmation: "Override config ho?c x�a file quan tr?ng"
|
|
124
|
+
Stop: "L?i Permission ho?c xung d?t Invariants"
|
|
125
|
+
`
|
|
126
|
+
'''
|
|
127
|
+
with open(file_path, 'w', encoding='utf-8') as f:
|
|
128
|
+
f.write(bsf_content)
|
|
129
|
+
print(f'Migrated {skill_dir}')
|
|
130
|
+
|
|
131
|
+
for d in os.listdir(skills_dir):
|
|
132
|
+
if os.path.isdir(os.path.join(skills_dir, d)) and not d.startswith('_'):
|
|
133
|
+
migrate_skill(d)
|
package/migrate_all.cjs
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const skillsDir = path.join(__dirname, 'skills');
|
|
4
|
+
|
|
5
|
+
const template = `---
|
|
6
|
+
name: {NAME}
|
|
7
|
+
version: 6.0.0
|
|
8
|
+
updated: 2026-07-10
|
|
9
|
+
description: Behavior Specification for {NAME} in BSF v6.0 format.
|
|
10
|
+
category: orchestration
|
|
11
|
+
tags: [bsf, v6]
|
|
12
|
+
platforms: [claude-code, cursor, windsurf, gemini-cli]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Behavior Specification: {NAME}
|
|
16
|
+
|
|
17
|
+
## 1. Behavior
|
|
18
|
+
\`\`\`yaml
|
|
19
|
+
Mission: "Execute core tasks for {NAME}."
|
|
20
|
+
Authority: "Full authority within the scope of {NAME}."
|
|
21
|
+
Responsibility: "Ensure the system complies with v6 standards."
|
|
22
|
+
Limitation: "Do not violate System Invariants."
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
## 2. Contracts
|
|
26
|
+
|
|
27
|
+
### 2.1. Capability Contract
|
|
28
|
+
\`\`\`yaml
|
|
29
|
+
Can:
|
|
30
|
+
- read_code
|
|
31
|
+
- modify_code
|
|
32
|
+
Must:
|
|
33
|
+
- verify_assumptions_before_coding
|
|
34
|
+
Cannot:
|
|
35
|
+
- bypass_validation
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
### 2.2. Output Contract
|
|
39
|
+
\`\`\`yaml
|
|
40
|
+
Artifacts:
|
|
41
|
+
- summary_report: "Progress and decision report."
|
|
42
|
+
Completion: "Feature works & Quality Gates passed."
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
## 3. Policies
|
|
46
|
+
|
|
47
|
+
### 3.1. Context Policy
|
|
48
|
+
\`\`\`yaml
|
|
49
|
+
Scope: whole_workspace
|
|
50
|
+
Priority:
|
|
51
|
+
1: Project Guidelines
|
|
52
|
+
2: Current Code
|
|
53
|
+
Trust: "official docs > code > user assumptions"
|
|
54
|
+
Fallback: ask_user
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
### 3.2. Reasoning Boundary
|
|
58
|
+
\`\`\`yaml
|
|
59
|
+
May infer: "Local variables and obvious logic."
|
|
60
|
+
Must verify: "Cross-module impacts."
|
|
61
|
+
Must ask: "Vague requirements, missing context."
|
|
62
|
+
Must refuse: "Security risks, baseless guesses."
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
### 3.3. Decision Policy
|
|
66
|
+
\`\`\`yaml
|
|
67
|
+
Priority:
|
|
68
|
+
1: correctness
|
|
69
|
+
2: safety
|
|
70
|
+
3: maintainability
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
### 3.4. Evidence Policy
|
|
74
|
+
\`\`\`yaml
|
|
75
|
+
Accept: [unit tests, CI logs]
|
|
76
|
+
Prefer: [end-to-end tests]
|
|
77
|
+
Reject: [guesswork]
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
### 3.5. Escalation Policy
|
|
81
|
+
\`\`\`yaml
|
|
82
|
+
Warning: "Changing task scope."
|
|
83
|
+
Confirmation: "Overriding config or deleting files."
|
|
84
|
+
Stop: "Critical security error."
|
|
85
|
+
\`\`\`
|
|
86
|
+
`;
|
|
87
|
+
|
|
88
|
+
const dirs = fs.readdirSync(skillsDir);
|
|
89
|
+
for (const dir of dirs) {
|
|
90
|
+
if (dir.startsWith('_') || dir === 'qk-bug-resolution' || dir === 'qk-access-policy') continue;
|
|
91
|
+
const p = path.join(skillsDir, dir, 'SKILL.md');
|
|
92
|
+
if (fs.existsSync(p)) {
|
|
93
|
+
fs.writeFileSync(p, template.replace(/{NAME}/g, dir), 'utf8');
|
|
94
|
+
console.log('Updated ' + dir);
|
|
95
|
+
}
|
|
96
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-developer-skill-os",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "6.0.0-rc1",
|
|
4
|
+
"description": "Behavior Specification Format Framework, AI coding agents (Claude, Cursor, Windsurf, Antigravity) với 23 skills chuyên nghiệp.",
|
|
5
5
|
"main": "bin/install.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ai-developer-skill-os": "bin/install.js",
|
|
@@ -1,47 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qk-access-policy
|
|
3
|
-
version: 3.1.5
|
|
4
|
-
updated: 2026-07-02
|
|
5
|
-
description: Quản lý RBAC, ABAC và các ranh giới bảo mật.
|
|
6
3
|
category: security
|
|
7
|
-
|
|
8
|
-
intent: review-code
|
|
9
|
-
priority: high
|
|
10
|
-
tags: [security, rbac, auth, permissions]
|
|
11
|
-
platforms: [claude-code, cursor, windsurf, gemini-cli]
|
|
12
|
-
trigger: User asks to add roles, restrict access, or implement authentication logic.
|
|
13
|
-
inputs: [Auth requirements, RBAC Matrix]
|
|
14
|
-
outputs: [Access control logic, Middleware]
|
|
15
|
-
allowed_tools: [grep_search, run_command, write_to_file]
|
|
16
|
-
pipeline: [analyze, implement, engineering-standard, validate, complete]
|
|
4
|
+
version: 6.0.0
|
|
17
5
|
---
|
|
18
6
|
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
##
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
7
|
+
# qk-access-policy
|
|
8
|
+
|
|
9
|
+
## Scope
|
|
10
|
+
- Security boundaries and policies (Govern)
|
|
11
|
+
|
|
12
|
+
## Constraints
|
|
13
|
+
```yaml
|
|
14
|
+
must:
|
|
15
|
+
- Enforce access controls at API level
|
|
16
|
+
- Check security rules
|
|
17
|
+
must_not:
|
|
18
|
+
- Rely on UI-only security
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Policies
|
|
22
|
+
```yaml
|
|
23
|
+
prefer:
|
|
24
|
+
- Deny-by-default
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Escalation
|
|
28
|
+
```yaml
|
|
29
|
+
stop:
|
|
30
|
+
- Policy is missing or ambiguous
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
- Policy enforcement decision
|
|
35
|
+
```
|
|
@@ -1,48 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qk-ai-builder
|
|
3
|
-
version: 3.1.5
|
|
4
|
-
updated: 2026-07-02
|
|
5
|
-
description: Thiết kế AI Logic, Prompts, RAG pipelines, và các Agents.
|
|
6
3
|
category: ai
|
|
7
|
-
|
|
8
|
-
intent: implement-feature
|
|
9
|
-
priority: medium
|
|
10
|
-
tags: [ai, llm, prompt-engineering, rag, agents]
|
|
11
|
-
platforms: [claude-code, cursor, windsurf, gemini-cli]
|
|
12
|
-
trigger: User asks to build a chatbot, add AI features, or write prompts.
|
|
13
|
-
inputs: [AI Requirements]
|
|
14
|
-
outputs: [AI Logic, Prompts, RAG setup]
|
|
15
|
-
allowed_tools: [run_command, write_to_file]
|
|
16
|
-
pipeline: [analyze, design, implement, validate, complete]
|
|
4
|
+
version: 6.0.0
|
|
17
5
|
---
|
|
18
6
|
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
##
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
7
|
+
# qk-ai-builder
|
|
8
|
+
|
|
9
|
+
## Scope
|
|
10
|
+
- AI logic, prompts, RAG pipelines, and Agents (Plan & Execute)
|
|
11
|
+
|
|
12
|
+
## Constraints
|
|
13
|
+
```yaml
|
|
14
|
+
must:
|
|
15
|
+
- Validate prompt changes against actual model outputs
|
|
16
|
+
- Handle API rate limits and failures gracefully
|
|
17
|
+
must_not:
|
|
18
|
+
- Use LLMs for deterministic logic (e.g. math, exact matching)
|
|
19
|
+
- Fabricate non-existent models or APIs
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Policies
|
|
23
|
+
```yaml
|
|
24
|
+
prefer:
|
|
25
|
+
- System prompts over user prompts for constraints
|
|
26
|
+
- Few-shot examples over complex instructions
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Escalation
|
|
30
|
+
```yaml
|
|
31
|
+
stop:
|
|
32
|
+
- Model context window limits are exceeded
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
- Prompts, pipelines, or Agent configuration
|
|
37
|
+
```
|