ai-developer-skill-os 7.0.2 → 7.5.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 +44 -88
- package/.agents/CHANGELOG.md +69 -0
- package/.agents/LICENSE +21 -0
- package/.agents/README.md +59 -0
- package/.agents/_template/BEHAVIOR_SPEC.md +96 -0
- package/.agents/_template/examples/example-en.md +49 -0
- package/.agents/_template/examples/example-vi.md +49 -0
- package/.agents/docs/CHI_TIET_SKILLS.md +125 -0
- package/.agents/docs/GOVERNANCE.md +40 -0
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +120 -0
- package/.agents/docs/SPEC.md +87 -0
- package/.agents/docs/adr/0001-intent-based-architecture.md +19 -0
- package/.agents/docs/adr/0002-kernel-freeze.md +21 -0
- package/.agents/docs/adr/0003-risk-based-verification.md +20 -0
- package/.agents/docs/adr/0004-progressive-evidence.md +19 -0
- package/.agents/docs/skill-classification.md +25 -0
- package/.agents/skills/qk-access-policy/SKILL.md +179 -0
- package/.agents/skills/qk-ai-builder/SKILL.md +215 -0
- package/.agents/skills/qk-api-lifecycle/SKILL.md +176 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +307 -0
- package/.agents/skills/qk-context-loader/SKILL.md +218 -0
- package/.agents/skills/qk-data-lifecycle/SKILL.md +192 -0
- package/.agents/skills/qk-db-optimizer/SKILL.md +196 -0
- package/.agents/skills/qk-design-to-code/SKILL.md +285 -0
- package/.agents/skills/qk-docs/SKILL.md +198 -0
- package/.agents/skills/qk-engineering-standard/SKILL.md +351 -0
- package/.agents/skills/qk-engineering-standard/rules/backend.md +122 -0
- package/.agents/skills/qk-engineering-standard/rules/database.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +152 -0
- package/.agents/skills/qk-engineering-standard/rules/security.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/testing.md +3 -0
- package/.agents/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +305 -0
- package/.agents/skills/qk-help/SKILL.md +193 -0
- package/.agents/skills/qk-orchestrator/SKILL.md +277 -0
- package/.agents/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/.agents/skills/qk-production-release/SKILL.md +284 -0
- package/.agents/skills/qk-project-bootstrap/SKILL.md +234 -0
- package/.agents/skills/qk-project-health/SKILL.md +199 -0
- package/.agents/skills/qk-project-memory/SKILL.md +172 -0
- package/.agents/skills/qk-system-evolution/SKILL.md +281 -0
- package/.agents/skills/qk-ui-audit/SKILL.md +314 -0
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/.agents/skills/qk-ui-system-builder/SKILL.md +221 -0
- package/.agents/skills/qk-validation-gate/SKILL.md +359 -0
- package/.agents/skills.json +819 -0
- package/.github/workflows/ci.yml +1 -1
- package/.qk-ai-skill-os/CHANGELOG.md +69 -0
- package/.qk-ai-skill-os/LICENSE +21 -0
- package/.qk-ai-skill-os/README.md +59 -0
- package/.qk-ai-skill-os/_template/BEHAVIOR_SPEC.md +96 -0
- package/.qk-ai-skill-os/_template/examples/example-en.md +49 -0
- package/.qk-ai-skill-os/_template/examples/example-vi.md +49 -0
- package/.qk-ai-skill-os/docs/CHI_TIET_SKILLS.md +125 -0
- package/.qk-ai-skill-os/docs/GOVERNANCE.md +40 -0
- package/.qk-ai-skill-os/docs/HUONG_DAN_SU_DUNG.md +120 -0
- package/.qk-ai-skill-os/docs/SPEC.md +87 -0
- package/.qk-ai-skill-os/docs/adr/0001-intent-based-architecture.md +19 -0
- package/.qk-ai-skill-os/docs/adr/0002-kernel-freeze.md +21 -0
- package/.qk-ai-skill-os/docs/adr/0003-risk-based-verification.md +20 -0
- package/.qk-ai-skill-os/docs/adr/0004-progressive-evidence.md +19 -0
- package/.qk-ai-skill-os/docs/skill-classification.md +25 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +121 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +179 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-api-integration/SKILL.md +389 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-auth-security/SKILL.md +96 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +125 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-bug-fix/SKILL.md +213 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-component-generator/SKILL.md +136 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-context-manager/SKILL.md +175 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-database-engineer/SKILL.md +104 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-deployment/SKILL.md +96 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-design-system/SKILL.md +137 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-form-builder/SKILL.md +140 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +155 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +133 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +129 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +146 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-git-engineer/SKILL.md +304 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-help/SKILL.md +68 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-migration/SKILL.md +284 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-project-audit/SKILL.md +280 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-refactor/SKILL.md +222 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-state-management/SKILL.md +140 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +127 -0
- package/.qk-ai-skill-os/skills/_archive_old_skills/qk-ui-builder/SKILL.md +152 -0
- package/.qk-ai-skill-os/skills/_template/SKILL.md +238 -0
- package/.qk-ai-skill-os/skills/qk-access-policy/SKILL.md +179 -0
- package/.qk-ai-skill-os/skills/qk-ai-builder/SKILL.md +221 -0
- package/.qk-ai-skill-os/skills/qk-api-lifecycle/SKILL.md +176 -0
- package/.qk-ai-skill-os/skills/qk-bug-resolution/SKILL.md +307 -0
- package/.qk-ai-skill-os/skills/qk-context-loader/SKILL.md +218 -0
- package/.qk-ai-skill-os/skills/qk-data-lifecycle/SKILL.md +192 -0
- package/.qk-ai-skill-os/skills/qk-db-optimizer/SKILL.md +196 -0
- package/.qk-ai-skill-os/skills/qk-design-to-code/SKILL.md +291 -0
- package/.qk-ai-skill-os/skills/qk-docs/SKILL.md +198 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/SKILL.md +351 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/backend.md +122 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/database.md +3 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/frontend.md +152 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/security.md +3 -0
- package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/testing.md +3 -0
- package/.qk-ai-skill-os/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/.qk-ai-skill-os/skills/qk-feature-delivery/SKILL.md +305 -0
- package/.qk-ai-skill-os/skills/qk-help/SKILL.md +193 -0
- package/.qk-ai-skill-os/skills/qk-orchestrator/SKILL.md +277 -0
- package/.qk-ai-skill-os/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/.qk-ai-skill-os/skills/qk-production-release/SKILL.md +290 -0
- package/.qk-ai-skill-os/skills/qk-project-bootstrap/SKILL.md +240 -0
- package/.qk-ai-skill-os/skills/qk-project-health/SKILL.md +199 -0
- package/.qk-ai-skill-os/skills/qk-project-memory/SKILL.md +172 -0
- package/.qk-ai-skill-os/skills/qk-system-evolution/SKILL.md +285 -0
- package/.qk-ai-skill-os/skills/qk-ui-audit/SKILL.md +314 -0
- package/.qk-ai-skill-os/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/.qk-ai-skill-os/skills/qk-ui-system-builder/SKILL.md +225 -0
- package/.qk-ai-skill-os/skills/qk-validation-gate/SKILL.md +361 -0
- package/.qk-ai-skill-os/skills.json +819 -0
- package/CLAUDE.md +110 -0
- package/README.md +25 -3
- package/add_lang.js +21 -0
- package/add_lang.py +25 -0
- package/add_sections.py +53 -0
- package/bin/install.js +225 -170
- package/bin/lint.js +122 -0
- package/docs/CHI_TIET_SKILLS.md +26 -26
- package/docs/HUONG_DAN_SU_DUNG.md +3 -3
- package/docs/SPEC.md +70 -20
- package/framework/skill-schema.md +310 -0
- package/package.json +15 -4
- package/patch.js +15 -0
- package/patch.py +89 -0
- package/patch2.py +83 -0
- package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-api-integration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-auth-security/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-component-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-context-manager/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-deployment/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-design-system/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-form-builder/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-help/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-migration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-project-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-refactor/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-state-management/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +1 -0
- package/skills/_template/SKILL.md +238 -0
- package/skills/qk-access-policy/SKILL.md +179 -39
- package/skills/qk-ai-builder/SKILL.md +215 -40
- package/skills/qk-api-lifecycle/SKILL.md +176 -46
- package/skills/qk-bug-resolution/SKILL.md +307 -46
- package/skills/qk-context-loader/SKILL.md +218 -43
- package/skills/qk-data-lifecycle/SKILL.md +192 -44
- package/skills/qk-db-optimizer/SKILL.md +196 -41
- package/skills/qk-design-to-code/SKILL.md +285 -46
- package/skills/qk-docs/SKILL.md +198 -40
- package/skills/qk-engineering-standard/SKILL.md +351 -42
- package/skills/qk-fe-api-integration/SKILL.md +326 -55
- package/skills/qk-feature-delivery/SKILL.md +305 -48
- package/skills/qk-help/SKILL.md +178 -23
- package/skills/qk-orchestrator/SKILL.md +277 -42
- package/skills/qk-orchestrator/references/routing-table.md +77 -0
- package/skills/qk-production-release/SKILL.md +284 -41
- package/skills/qk-project-bootstrap/SKILL.md +234 -38
- package/skills/qk-project-health/SKILL.md +199 -40
- package/skills/qk-project-memory/SKILL.md +172 -40
- package/skills/qk-system-evolution/SKILL.md +281 -40
- package/skills/qk-ui-audit/SKILL.md +314 -42
- package/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/skills/qk-ui-system-builder/SKILL.md +221 -43
- package/skills/qk-validation-gate/SKILL.md +359 -40
- package/skills.json +813 -824
- package/specs/fixtures/user-payload.json +12 -0
- package/specs/regressions/api-integration-null-fields.yaml +19 -0
- package/temp_fix.js +61 -0
- package/tests/registry.test.js +1 -1
- package/update_template.js +28 -0
- package/skills/qk-policy-engine/SKILL.md +0 -39
package/patch.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
with open('bin/install.js', 'r', encoding='utf-8') as f:
|
|
3
|
+
content = f.read()
|
|
4
|
+
|
|
5
|
+
# Fix kiloConfig bug
|
|
6
|
+
content = content.replace(
|
|
7
|
+
"if (!Array.isArray(kiloConfig.skills) || typeof kiloConfig.skills !== 'object' || !kiloConfig.skills.paths) {",
|
|
8
|
+
"if (!kiloConfig.skills || typeof kiloConfig.skills !== 'object' || Array.isArray(kiloConfig.skills) || !kiloConfig.skills.paths) {"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# Replace the interactive part with CLI parsing
|
|
12
|
+
start_marker = "rl.question(questionIde, (ideChoice) => {"
|
|
13
|
+
end_marker = " } catch (error) {\n console.error('? C� l?i x?y ra trong qu� tr�nh c�i d?t:', error.message);\n } finally {\n rl.close();\n }\n });\n});"
|
|
14
|
+
|
|
15
|
+
start_idx = content.find(start_marker)
|
|
16
|
+
end_idx = content.find(end_marker) + len(end_marker)
|
|
17
|
+
|
|
18
|
+
if start_idx != -1 and end_idx != -1:
|
|
19
|
+
replacement = """// Parse command line arguments for CI/CD automation
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
let autoIde = null;
|
|
22
|
+
let autoScope = null;
|
|
23
|
+
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
if (args[i].startsWith('--ide=')) {
|
|
26
|
+
autoIde = args[i].split('=')[1];
|
|
27
|
+
}
|
|
28
|
+
if (args[i].startsWith('--scope=')) {
|
|
29
|
+
autoScope = args[i].split('=')[1];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function runInstallation(ideChoice, scopeChoice) {
|
|
34
|
+
const isGlobal = scopeChoice === '1';
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
old_body = content[start_idx:end_idx]
|
|
38
|
+
|
|
39
|
+
# Extract the body inside rl.question(questionScope...)
|
|
40
|
+
scope_start = "const isGlobal = scopeChoice === '1';"
|
|
41
|
+
scope_start_idx = old_body.find(scope_start)
|
|
42
|
+
scope_end = " } catch (error) {"
|
|
43
|
+
scope_end_idx = old_body.find(scope_end)
|
|
44
|
+
|
|
45
|
+
inner_body = old_body[scope_start_idx + len(scope_start):scope_end_idx]
|
|
46
|
+
|
|
47
|
+
replacement += inner_body
|
|
48
|
+
replacement += """
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error('? C� l?i x?y ra trong qu� tr�nh c�i d?t:', error.message);
|
|
51
|
+
} finally {
|
|
52
|
+
rl.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (autoIde && autoScope) {
|
|
57
|
+
console.log('\\n?? Running in non-interactive mode with IDE=' + autoIde + ', Scope=' + autoScope);
|
|
58
|
+
runInstallation(autoIde, autoScope);
|
|
59
|
+
} else {
|
|
60
|
+
rl.question(questionIde, (ideChoice) => {
|
|
61
|
+
if (ideChoice === '0') {
|
|
62
|
+
console.log('? �� b? qua c?u h�nh t? d?ng. Skill OS v?n du?c t?i v?, b?n c� th? t? c?u h�nh file c?a IDE theo thu m?c hi?n t?i.');
|
|
63
|
+
rl.close();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!['1', '2', '3', '4', '5', '6', '7'].includes(ideChoice)) {
|
|
68
|
+
console.log('? L?a ch?n kh�ng h?p l?. Vui l�ng ch?y l?i script.');
|
|
69
|
+
rl.close();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
rl.question(questionScope, (scopeChoice) => {
|
|
74
|
+
if (!['1', '2'].includes(scopeChoice)) {
|
|
75
|
+
console.log('? L?a ch?n kh�ng h?p l?. M?c d?nh s? c�i Global.');
|
|
76
|
+
scopeChoice = '1';
|
|
77
|
+
}
|
|
78
|
+
runInstallation(ideChoice, scopeChoice);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
"""
|
|
83
|
+
content = content[:start_idx] + replacement + content[end_idx:]
|
|
84
|
+
|
|
85
|
+
with open('bin/install.js', 'w', encoding='utf-8') as f:
|
|
86
|
+
f.write(content)
|
|
87
|
+
print("Python patch applied.")
|
|
88
|
+
else:
|
|
89
|
+
print("Could not find markers.")
|
package/patch2.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
with open('bin/install.js', 'r', encoding='utf-8') as f:
|
|
3
|
+
content = f.read()
|
|
4
|
+
|
|
5
|
+
# Fix kiloConfig bug
|
|
6
|
+
content = content.replace(
|
|
7
|
+
"if (!Array.isArray(kiloConfig.skills) || typeof kiloConfig.skills !== 'object' || !kiloConfig.skills.paths) {",
|
|
8
|
+
"if (!kiloConfig.skills || typeof kiloConfig.skills !== 'object' || Array.isArray(kiloConfig.skills) || !kiloConfig.skills.paths) {"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# Replace the interactive part with CLI parsing
|
|
12
|
+
start_marker = "rl.question(questionIde, (answerIde) => {"
|
|
13
|
+
end_marker = " } catch (error) {\n console.error('? C� l?i x?y ra trong qu� tr�nh c�i d?t:', error.message);\n } finally {\n rl.close();\n }\n });\n});"
|
|
14
|
+
|
|
15
|
+
start_idx = content.find(start_marker)
|
|
16
|
+
end_idx = content.find(end_marker) + len(end_marker)
|
|
17
|
+
|
|
18
|
+
if start_idx != -1 and end_idx != -1:
|
|
19
|
+
replacement = """// Parse command line arguments for CI/CD automation
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
let autoIde = null;
|
|
22
|
+
let autoScope = null;
|
|
23
|
+
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
if (args[i].startsWith('--ide=')) {
|
|
26
|
+
autoIde = args[i].split('=')[1];
|
|
27
|
+
}
|
|
28
|
+
if (args[i].startsWith('--scope=')) {
|
|
29
|
+
autoScope = args[i].split('=')[1];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function runInstallation(answerIde, answerScope) {
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
old_body = content[start_idx:end_idx]
|
|
37
|
+
|
|
38
|
+
# Extract the body inside rl.question(questionScope...)
|
|
39
|
+
scope_start = "rl.question(questionScope, (answerScope) => {"
|
|
40
|
+
scope_start_idx = old_body.find(scope_start) + len(scope_start)
|
|
41
|
+
scope_end = " } catch (error) {"
|
|
42
|
+
scope_end_idx = old_body.find(scope_end)
|
|
43
|
+
|
|
44
|
+
# Extract the ide logic before scope question
|
|
45
|
+
ide_logic_start_idx = old_body.find(" let isGemini = false;")
|
|
46
|
+
ide_logic_end_idx = old_body.find(scope_start)
|
|
47
|
+
ide_logic = old_body[ide_logic_start_idx:ide_logic_end_idx]
|
|
48
|
+
|
|
49
|
+
inner_body = old_body[scope_start_idx:scope_end_idx]
|
|
50
|
+
|
|
51
|
+
replacement += ide_logic
|
|
52
|
+
replacement += inner_body
|
|
53
|
+
replacement += """
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error('? Error during installation:', error.message);
|
|
56
|
+
} finally {
|
|
57
|
+
if (rl) rl.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (autoIde && autoScope) {
|
|
62
|
+
console.log('\\n?? Running in non-interactive mode with IDE=' + autoIde + ', Scope=' + autoScope);
|
|
63
|
+
runInstallation(autoIde, autoScope);
|
|
64
|
+
} else {
|
|
65
|
+
rl.question(questionIde, (answerIde) => {
|
|
66
|
+
if (answerIde.trim() === '0') {
|
|
67
|
+
console.log('? B? qua c�i d?t t? d?ng.');
|
|
68
|
+
rl.close();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
rl.question(questionScope, (answerScope) => {
|
|
72
|
+
runInstallation(answerIde, answerScope);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
"""
|
|
77
|
+
content = content[:start_idx] + replacement + content[end_idx:]
|
|
78
|
+
|
|
79
|
+
with open('bin/install.js', 'w', encoding='utf-8') as f:
|
|
80
|
+
f.write(content)
|
|
81
|
+
print("Python patch applied.")
|
|
82
|
+
else:
|
|
83
|
+
print("Could not find markers.")
|
|
@@ -65,3 +65,4 @@ Bạn có thể ép AI dùng công nghệ bạn muốn bằng cách thêm \`--th
|
|
|
65
65
|
### Mẹo 4: Nhờ "Kiến trúc sư" phân việc 🧠
|
|
66
66
|
Nếu bạn có một tính năng quá lớn (ví dụ: Làm tính năng Giỏ Hàng), đừng tự chia việc, hãy gọi:
|
|
67
67
|
> *"./qk-agent-orchestrator Tôi muốn làm tính năng Giỏ hàng. Hãy phân tích và lên kế hoạch gọi các skill \`qk-\` nào cho phù hợp."*
|
|
68
|
+
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qk-[skill-name]
|
|
3
|
+
category: [core|frontend|backend|fullstack|security|qa|maintenance|devops|utilities]
|
|
4
|
+
version: 7.5.0
|
|
5
|
+
description: "[One sentence — what it does]"
|
|
6
|
+
platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
|
|
7
|
+
execution_mode: deterministic
|
|
8
|
+
|
|
9
|
+
# Orchestrator routing metadata
|
|
10
|
+
cost: [low|medium|high]
|
|
11
|
+
latency: [fast|medium|slow]
|
|
12
|
+
risk: [low|medium|high]
|
|
13
|
+
side_effects: [edit_files|run_commands|read_only|none]
|
|
14
|
+
produces: [report|code|schema|plan|tokens]
|
|
15
|
+
consumes: [context-graph|design-md|stack-trace|json-payload|none]
|
|
16
|
+
|
|
17
|
+
token_budget:
|
|
18
|
+
max_files_read: 3
|
|
19
|
+
max_lines_per_read: 150
|
|
20
|
+
max_shell_commands: 2
|
|
21
|
+
stop_early: true
|
|
22
|
+
|
|
23
|
+
exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# qk-[skill-name]
|
|
27
|
+
|
|
28
|
+
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese (match user language).
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Preconditions
|
|
33
|
+
Before executing, verify ALL exist. STOP with `BLOCKED` if any is missing.
|
|
34
|
+
|
|
35
|
+
- [ ] [Precondition 1 — e.g., "Repository is accessible"]
|
|
36
|
+
- [ ] [Precondition 2 — e.g., "DESIGN.md exists in project root"]
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
On missing precondition:
|
|
40
|
+
EXIT: BLOCKED
|
|
41
|
+
Message: "[Precondition X] not found. Please provide: [what]"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
- ✅ [What this skill explicitly DOES]
|
|
48
|
+
- ✅ [What this skill explicitly DOES]
|
|
49
|
+
|
|
50
|
+
## Non-Goals
|
|
51
|
+
- ❌ [Anti-pattern 1] — because [why]
|
|
52
|
+
- ❌ [Anti-pattern 2]
|
|
53
|
+
- ❌ Never create helper scripts (Node.js/Python/shell) to apply patches — edit files directly
|
|
54
|
+
- ❌ Never read entire files > 150 lines — use targeted reads (StartLine:EndLine)
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Priority Order
|
|
59
|
+
When token budget is insufficient, execute checks in this order:
|
|
60
|
+
|
|
61
|
+
| Priority | Check | Skip Threshold |
|
|
62
|
+
|----------|-------|----------------|
|
|
63
|
+
| P1 | [Most critical — never skip] | Never |
|
|
64
|
+
| P2 | [High priority] | Budget < 30% |
|
|
65
|
+
| P3 | [Medium priority] | Budget < 50% |
|
|
66
|
+
| P4 | [Low priority — always optional] | Budget < 70% |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Workflow
|
|
71
|
+
|
|
72
|
+
### Phase 1 — [Name: e.g., Triage]
|
|
73
|
+
|
|
74
|
+
**Steps:**
|
|
75
|
+
1. [Concrete step — specify tool: `grep_search` / `view_file[L1:L50]` / `run_command`]
|
|
76
|
+
2. [Next step]
|
|
77
|
+
|
|
78
|
+
**Exit When (stop this phase, move to next):**
|
|
79
|
+
- [Condition A — e.g., "Root cause identified"]
|
|
80
|
+
- [Condition B — e.g., "`max_files_read` reached"]
|
|
81
|
+
|
|
82
|
+
**On Blocked:**
|
|
83
|
+
```
|
|
84
|
+
EXIT: BLOCKED
|
|
85
|
+
Missing: [what specific info is needed]
|
|
86
|
+
Questions:
|
|
87
|
+
1. [Specific question to user]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### Phase 2 — [Name: e.g., Analyze]
|
|
93
|
+
|
|
94
|
+
**Steps:**
|
|
95
|
+
1. [Step]
|
|
96
|
+
|
|
97
|
+
**Decision:**
|
|
98
|
+
```
|
|
99
|
+
IF [condition met]
|
|
100
|
+
→ proceed to Phase 3
|
|
101
|
+
ELSE IF [edge case]
|
|
102
|
+
→ EXIT: PARTIAL — note: [what was missed]
|
|
103
|
+
ELSE
|
|
104
|
+
→ ESCALATE
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### Phase 3 — [Name: e.g., Execute]
|
|
110
|
+
|
|
111
|
+
**Steps:**
|
|
112
|
+
1. Apply fix using `replace_file_content` or `multi_replace_file_content` — NEVER via scripts
|
|
113
|
+
2. [Verification step]
|
|
114
|
+
|
|
115
|
+
**Exit When:**
|
|
116
|
+
- Fix applied and verified → EXIT: SUCCESS
|
|
117
|
+
- Fix applied but unverifiable → EXIT: PARTIAL
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Confidence Model
|
|
122
|
+
|
|
123
|
+
| Level | Condition | Action |
|
|
124
|
+
|-------|-----------|--------|
|
|
125
|
+
| HIGH | Direct evidence (file:line, stack trace, exact match) | Proceed |
|
|
126
|
+
| MEDIUM | Inferred from patterns or similar code | Note assumption, proceed carefully |
|
|
127
|
+
| LOW | Assumption without evidence | STOP — ask user before proceeding |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Severity
|
|
132
|
+
|
|
133
|
+
| Level | Definition | Example |
|
|
134
|
+
|-------|-----------|---------|
|
|
135
|
+
| CRITICAL | Data loss / security breach / app down | Hardcoded secret, SQL injection |
|
|
136
|
+
| HIGH | Core feature broken, blocking users | Null crash, broken API |
|
|
137
|
+
| MEDIUM | Degraded UX, workaround exists | Cyclomatic > 10, missing loading state |
|
|
138
|
+
| LOW | Style/cosmetic, non-blocking | Missing comment, minor inconsistency |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Evidence Format
|
|
143
|
+
|
|
144
|
+
Every finding MUST use this format:
|
|
145
|
+
```
|
|
146
|
+
[SEVERITY] path/to/file.ts:LINE
|
|
147
|
+
Reason: [why this is a violation or finding]
|
|
148
|
+
Confidence: [HIGH|MEDIUM|LOW]
|
|
149
|
+
Fix: [one-line suggestion]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Example:**
|
|
153
|
+
```
|
|
154
|
+
[HIGH] src/auth.service.ts:132
|
|
155
|
+
Reason: Function length 64 lines exceeds threshold of 30
|
|
156
|
+
Confidence: HIGH
|
|
157
|
+
Fix: Extract token validation to `validateToken()`
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Retry Policy
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
Action fails
|
|
166
|
+
└─ Attempt auto-fix (if fix is deterministic)
|
|
167
|
+
└─ Re-run verification
|
|
168
|
+
├─ PASS → EXIT: SUCCESS
|
|
169
|
+
└─ FAIL (2nd time) → EXIT: PARTIAL + report
|
|
170
|
+
└─ Do NOT retry more than 2 times
|
|
171
|
+
└─ 3rd failure → ESCALATE to user
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Escalation Rules
|
|
177
|
+
|
|
178
|
+
When blocked, **never just "STOP"** — return structured response:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
BLOCKED: [Reason — specific, not vague]
|
|
182
|
+
Missing:
|
|
183
|
+
- [Specific artifact or information needed]
|
|
184
|
+
Questions:
|
|
185
|
+
1. [Specific question]
|
|
186
|
+
2. [Specific question]
|
|
187
|
+
Recommended Assumptions (if you want me to proceed anyway):
|
|
188
|
+
- [Safe assumption 1]
|
|
189
|
+
- [Safe assumption 2]
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Handoff Contract
|
|
195
|
+
|
|
196
|
+
### Consumes (Input from upstream)
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"from": "[skill-name or 'user']",
|
|
200
|
+
"required_fields": ["field1", "field2"],
|
|
201
|
+
"optional_fields": ["field3"]
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Produces (Output for downstream)
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"to": "[skill-name or 'user']",
|
|
209
|
+
"output_fields": ["changed_files", "summary", "confidence", "exit_code"]
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Output Format
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
[SKILL_NAME] Result
|
|
219
|
+
─────────────────────────────────────────────────
|
|
220
|
+
Status: [SUCCESS | PARTIAL | BLOCKED | FAILED]
|
|
221
|
+
Confidence: [HIGH | MEDIUM | LOW]
|
|
222
|
+
|
|
223
|
+
[Section specific to this skill]
|
|
224
|
+
|
|
225
|
+
Exit Code: [SUCCESS | PARTIAL | BLOCKED | FAILED]
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Exit Codes
|
|
231
|
+
|
|
232
|
+
| Code | Meaning | Orchestrator Action |
|
|
233
|
+
|------|---------|---------------------|
|
|
234
|
+
| SUCCESS | All checks passed, task complete | Continue pipeline |
|
|
235
|
+
| PARTIAL | Task done with degraded quality or skipped P3/P4 checks | Notify user, continue |
|
|
236
|
+
| BLOCKED | Missing precondition or ambiguous requirement | STOP, ask user |
|
|
237
|
+
| FAILED | Task failed after 2 retry attempts | STOP, report error |
|
|
238
|
+
|