ai-developer-skill-os 7.5.1 → 8.1.5

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.
Files changed (319) hide show
  1. package/.agents/docs/ARCHITECTURE.md +156 -0
  2. package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +36 -0
  3. package/.agents/docs/MIGRATION-STATUS.md +35 -0
  4. package/.agents/docs/MIGRATION-V8.md +10 -0
  5. package/.agents/docs/ROADMAP-V8.2.md +78 -0
  6. package/.agents/docs/V8-CERTIFICATION.md +27 -0
  7. package/.agents/docs/VERSIONING.md +95 -0
  8. package/.agents/docs/decisions/ADR-001-v8-migration.md +58 -0
  9. package/.agents/docs/decisions/ADR-002-workflow-separation.md +50 -0
  10. package/.agents/docs/decisions/ADR-003-registry-generated.md +54 -0
  11. package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +27 -0
  12. package/.agents/docs/schemas/learning.schema.yml +69 -0
  13. package/.agents/docs/schemas/skill.schema.yml +188 -0
  14. package/.agents/docs/schemas/workflow.schema.yml +33 -0
  15. package/.agents/knowledge/design-intelligence/components/buttons.md +25 -0
  16. package/.agents/knowledge/design-intelligence/components/cards.md +21 -0
  17. package/.agents/knowledge/design-intelligence/components/inputs.md +14 -0
  18. package/.agents/knowledge/design-intelligence/components/modals.md +14 -0
  19. package/.agents/knowledge/design-intelligence/industries/ecommerce.md +16 -0
  20. package/.agents/knowledge/design-intelligence/industries/fintech.md +16 -0
  21. package/.agents/knowledge/design-intelligence/industries/healthcare.md +16 -0
  22. package/.agents/knowledge/design-intelligence/patterns/data-display.md +18 -0
  23. package/.agents/knowledge/design-intelligence/patterns/empty-states.md +18 -0
  24. package/.agents/knowledge/design-intelligence/patterns/forms.md +15 -0
  25. package/.agents/knowledge/design-intelligence/references/accessibility.md +13 -0
  26. package/.agents/knowledge/design-intelligence/references/tailwind-preset.md +17 -0
  27. package/.agents/knowledge/design-intelligence/templates/auth.md +13 -0
  28. package/.agents/knowledge/design-intelligence/templates/dashboard.md +15 -0
  29. package/.agents/knowledge/design-intelligence/templates/landing-page.md +18 -0
  30. package/.agents/knowledge/design-intelligence/themes/minimal.md +15 -0
  31. package/.agents/knowledge/design-intelligence/themes/saas.md +16 -0
  32. package/.agents/knowledge/design-intelligence/visual-language/animation.md +20 -0
  33. package/.agents/knowledge/design-intelligence/visual-language/color.md +24 -0
  34. package/.agents/knowledge/design-intelligence/visual-language/layout.md +18 -0
  35. package/.agents/knowledge/design-intelligence/visual-language/spacing.md +19 -0
  36. package/.agents/knowledge/design-intelligence/visual-language/typography.md +23 -0
  37. package/.agents/learnings/draft/README.md +37 -0
  38. package/.agents/registry/capability-graph.yml +500 -0
  39. package/.agents/registry/skills-index.yml +525 -0
  40. package/.agents/reports/RELEASE-CHECKLIST.md +29 -0
  41. package/.agents/reports/architecture-audit.md +13 -0
  42. package/.agents/reports/graph-health.md +20 -0
  43. package/.agents/reports/skill-audit.md +215 -0
  44. package/.agents/rules/coding.md +102 -0
  45. package/.agents/rules/command-safety.md +21 -0
  46. package/.agents/rules/global.md +135 -0
  47. package/.agents/rules/priorities.yml +24 -0
  48. package/.agents/rules/safety.md +84 -0
  49. package/.agents/rules/security.md +13 -0
  50. package/.agents/rules/skill-quality.md +14 -0
  51. package/.agents/skills/_template/SKILL.md +132 -0
  52. package/.agents/skills/qk-access-policy/SKILL.md +61 -5
  53. package/.agents/skills/qk-agent-observability/SKILL.md +73 -0
  54. package/.agents/skills/qk-ai-builder/SKILL.md +62 -5
  55. package/.agents/skills/qk-api-lifecycle/SKILL.md +59 -6
  56. package/.agents/skills/qk-bug-resolution/SKILL.md +64 -6
  57. package/.agents/skills/qk-context-loader/SKILL.md +63 -11
  58. package/.agents/skills/qk-data-lifecycle/SKILL.md +61 -5
  59. package/.agents/skills/qk-db-optimizer/SKILL.md +61 -5
  60. package/.agents/skills/qk-design-system-engineering/SKILL.md +112 -0
  61. package/.agents/skills/qk-devops-platform/SKILL.md +117 -0
  62. package/.agents/skills/qk-docs/SKILL.md +62 -6
  63. package/.agents/skills/qk-engineering-standard/SKILL.md +62 -12
  64. package/.agents/skills/qk-fe-api-integration/SKILL.md +60 -6
  65. package/.agents/skills/qk-feature-delivery/SKILL.md +65 -6
  66. package/.agents/skills/qk-frontend-architecture/SKILL.md +134 -0
  67. package/.agents/skills/qk-help/SKILL.md +245 -193
  68. package/.agents/skills/qk-orchestrator/SKILL.md +64 -11
  69. package/.agents/skills/qk-orchestrator/references/routing-table.md +1 -1
  70. package/.agents/skills/qk-product-specification/SKILL.md +130 -0
  71. package/.agents/skills/qk-production-release/SKILL.md +59 -6
  72. package/.agents/skills/qk-project-bootstrap/SKILL.md +66 -6
  73. package/.agents/skills/qk-project-health/SKILL.md +63 -6
  74. package/.agents/skills/qk-project-memory/SKILL.md +63 -6
  75. package/.agents/skills/qk-security-audit/SKILL.md +135 -0
  76. package/.agents/skills/qk-system-evolution/SKILL.md +63 -12
  77. package/.agents/skills/qk-test-engineering/SKILL.md +139 -0
  78. package/.agents/skills/qk-ui-audit/SKILL.md +60 -6
  79. package/.agents/skills/qk-ui-builder/SKILL.md +509 -446
  80. package/.agents/skills/qk-ui-system-builder/SKILL.md +74 -5
  81. package/.agents/skills/qk-validation-gate/SKILL.md +63 -11
  82. package/.agents/skills/qk-web-quality-gate/SKILL.md +114 -0
  83. package/.agents/workflows/_schema.yml +109 -0
  84. package/.agents/workflows/bug-resolution.yml +101 -0
  85. package/.agents/workflows/code-review.yml +77 -0
  86. package/.agents/workflows/documentation.yml +75 -0
  87. package/.agents/workflows/feature-delivery.yml +103 -0
  88. package/.agents/workflows/refactor.yml +81 -0
  89. package/.agents/workflows/research.yml +60 -0
  90. package/.agents/workflows/security-audit.yml +72 -0
  91. package/.agents/workflows/skill-evolution.yml +65 -0
  92. package/.agents/workflows/spec-driven-development.yml +57 -0
  93. package/CHANGELOG.md +91 -70
  94. package/README.md +44 -59
  95. package/bin/install.js +57 -309
  96. package/package.json +13 -2
  97. package/tooling/generate-evaluation-cases.cjs +44 -0
  98. package/tooling/generate-registry.js +157 -0
  99. package/tooling/run-aar.js +143 -0
  100. package/tooling/validate-graph.js +87 -0
  101. package/tooling/validate-skills.js +102 -0
  102. package/.agents/skills.json +0 -819
  103. package/.github/workflows/ci.yml +0 -56
  104. package/CLAUDE.md +0 -110
  105. package/_template/BEHAVIOR_SPEC.md +0 -96
  106. package/_template/examples/example-en.md +0 -49
  107. package/_template/examples/example-vi.md +0 -49
  108. package/add_lang.js +0 -21
  109. package/add_lang.py +0 -25
  110. package/add_sections.py +0 -53
  111. package/bin/lint.js +0 -123
  112. package/docs/CHI_TIET_SKILLS.md +0 -126
  113. package/docs/GOVERNANCE.md +0 -40
  114. package/docs/HUONG_DAN_SU_DUNG.md +0 -120
  115. package/docs/SPEC.md +0 -87
  116. package/docs/adr/0001-intent-based-architecture.md +0 -19
  117. package/docs/adr/0002-kernel-freeze.md +0 -21
  118. package/docs/adr/0003-risk-based-verification.md +0 -20
  119. package/docs/adr/0004-progressive-evidence.md +0 -19
  120. package/docs/skill-classification.md +0 -25
  121. package/fix_seeds.js +0 -22
  122. package/framework/KERNEL.md +0 -83
  123. package/framework/bias-library/cosmetic-refactor.md +0 -21
  124. package/framework/bias-library/enterprise-crud.md +0 -21
  125. package/framework/bias-library/fake-ui-slop.md +0 -20
  126. package/framework/bias-library/hallucinated-tools.md +0 -20
  127. package/framework/bias-library/missing-ui-states.md +0 -19
  128. package/framework/bias-library/over-indexing.md +0 -20
  129. package/framework/bias-library/swallow-errors.md +0 -19
  130. package/framework/bias-library/ui-only-security.md +0 -17
  131. package/framework/decision-primitives.md +0 -48
  132. package/framework/dial-library/complexity-budget.md +0 -13
  133. package/framework/dial-library/granularity.md +0 -13
  134. package/framework/dial-library/optimization-strategy.md +0 -13
  135. package/framework/dial-library/strictness.md +0 -13
  136. package/framework/rule-library/delegation-only.md +0 -9
  137. package/framework/rule-library/minimal-diff.md +0 -9
  138. package/framework/skill-schema.md +0 -310
  139. package/knowledge/backend/nodejs.md +0 -52
  140. package/knowledge/frontend/react.md +0 -81
  141. package/migrate-to-v6.js +0 -130
  142. package/migrate.js +0 -147
  143. package/migrate.py +0 -133
  144. package/migrate_all.cjs +0 -96
  145. package/patch.js +0 -15
  146. package/patch.py +0 -89
  147. package/patch2.py +0 -83
  148. package/rename.js +0 -64
  149. package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +0 -121
  150. package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +0 -179
  151. package/skills/_archive_old_skills/qk-api-integration/SKILL.md +0 -389
  152. package/skills/_archive_old_skills/qk-auth-security/SKILL.md +0 -96
  153. package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +0 -125
  154. package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +0 -213
  155. package/skills/_archive_old_skills/qk-component-generator/SKILL.md +0 -136
  156. package/skills/_archive_old_skills/qk-context-manager/SKILL.md +0 -175
  157. package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +0 -104
  158. package/skills/_archive_old_skills/qk-deployment/SKILL.md +0 -96
  159. package/skills/_archive_old_skills/qk-design-system/SKILL.md +0 -137
  160. package/skills/_archive_old_skills/qk-form-builder/SKILL.md +0 -140
  161. package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +0 -155
  162. package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +0 -133
  163. package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +0 -129
  164. package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +0 -146
  165. package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +0 -304
  166. package/skills/_archive_old_skills/qk-help/SKILL.md +0 -68
  167. package/skills/_archive_old_skills/qk-migration/SKILL.md +0 -284
  168. package/skills/_archive_old_skills/qk-project-audit/SKILL.md +0 -280
  169. package/skills/_archive_old_skills/qk-refactor/SKILL.md +0 -222
  170. package/skills/_archive_old_skills/qk-state-management/SKILL.md +0 -140
  171. package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +0 -127
  172. package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +0 -152
  173. package/skills/_template/SKILL.md +0 -239
  174. package/skills/qk-access-policy/SKILL.md +0 -180
  175. package/skills/qk-ai-builder/SKILL.md +0 -216
  176. package/skills/qk-api-lifecycle/SKILL.md +0 -177
  177. package/skills/qk-bug-resolution/SKILL.md +0 -308
  178. package/skills/qk-context-loader/SKILL.md +0 -219
  179. package/skills/qk-data-lifecycle/SKILL.md +0 -193
  180. package/skills/qk-db-optimizer/SKILL.md +0 -197
  181. package/skills/qk-docs/SKILL.md +0 -199
  182. package/skills/qk-engineering-standard/SKILL.md +0 -352
  183. package/skills/qk-engineering-standard/rules/backend.md +0 -122
  184. package/skills/qk-engineering-standard/rules/database.md +0 -3
  185. package/skills/qk-engineering-standard/rules/frontend.md +0 -152
  186. package/skills/qk-engineering-standard/rules/security.md +0 -3
  187. package/skills/qk-engineering-standard/rules/testing.md +0 -3
  188. package/skills/qk-fe-api-integration/SKILL.md +0 -327
  189. package/skills/qk-feature-delivery/SKILL.md +0 -306
  190. package/skills/qk-help/SKILL.md +0 -194
  191. package/skills/qk-orchestrator/SKILL.md +0 -279
  192. package/skills/qk-orchestrator/references/routing-table.md +0 -78
  193. package/skills/qk-production-release/SKILL.md +0 -285
  194. package/skills/qk-project-bootstrap/SKILL.md +0 -236
  195. package/skills/qk-project-health/SKILL.md +0 -200
  196. package/skills/qk-project-memory/SKILL.md +0 -219
  197. package/skills/qk-system-evolution/SKILL.md +0 -282
  198. package/skills/qk-ui-audit/SKILL.md +0 -316
  199. package/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
  200. package/skills/qk-ui-builder/SKILL.md +0 -447
  201. package/skills/qk-ui-builder/references/anti-patterns.md +0 -295
  202. package/skills/qk-ui-builder/references/color.md +0 -115
  203. package/skills/qk-ui-builder/references/component-cookbook.md +0 -1194
  204. package/skills/qk-ui-builder/references/copy.md +0 -250
  205. package/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
  206. package/skills/qk-ui-builder/references/layout-and-space.md +0 -111
  207. package/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
  208. package/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
  209. package/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
  210. package/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
  211. package/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
  212. package/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
  213. package/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
  214. package/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
  215. package/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
  216. package/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
  217. package/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
  218. package/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
  219. package/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
  220. package/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
  221. package/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
  222. package/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
  223. package/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
  224. package/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
  225. package/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
  226. package/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
  227. package/skills/qk-ui-builder/references/macrostructures.md +0 -38
  228. package/skills/qk-ui-builder/references/motion.md +0 -95
  229. package/skills/qk-ui-builder/references/responsive.md +0 -115
  230. package/skills/qk-ui-builder/references/slop-test.md +0 -135
  231. package/skills/qk-ui-builder/references/structure.md +0 -280
  232. package/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
  233. package/skills/qk-ui-builder/references/themes/carnival.md +0 -52
  234. package/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
  235. package/skills/qk-ui-builder/references/themes/editorial.md +0 -52
  236. package/skills/qk-ui-builder/references/themes/garden.md +0 -52
  237. package/skills/qk-ui-builder/references/themes/hum.md +0 -52
  238. package/skills/qk-ui-builder/references/themes/lumen.md +0 -52
  239. package/skills/qk-ui-builder/references/themes/midnight.md +0 -52
  240. package/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
  241. package/skills/qk-ui-builder/references/themes/playful.md +0 -52
  242. package/skills/qk-ui-builder/references/themes/specimen.md +0 -52
  243. package/skills/qk-ui-builder/references/themes/terminal.md +0 -52
  244. package/skills/qk-ui-builder/references/typography.md +0 -129
  245. package/skills/qk-ui-system-builder/SKILL.md +0 -222
  246. package/skills/qk-validation-gate/SKILL.md +0 -360
  247. package/skills.json +0 -820
  248. package/specs/contracts/behavior-contract.yaml +0 -40
  249. package/specs/expectations/qk-bug-resolution.yaml +0 -35
  250. package/specs/fixtures/user-payload.json +0 -12
  251. package/specs/regressions/api-integration-null-fields.yaml +0 -19
  252. package/specs/scenarios/fix-login-nullref.yaml +0 -3
  253. package/taste-skill/.claude-plugin/marketplace.json +0 -20
  254. package/taste-skill/.claude-plugin/plugin.json +0 -19
  255. package/taste-skill/.github/FUNDING.yml +0 -1
  256. package/taste-skill/.github/copilot-instructions.md +0 -11
  257. package/taste-skill/CHANGELOG.md +0 -111
  258. package/taste-skill/LICENSE +0 -21
  259. package/taste-skill/README.md +0 -212
  260. package/taste-skill/assets/.gitkeep +0 -0
  261. package/taste-skill/assets/readme-banner.webp +0 -0
  262. package/taste-skill/assets/readme-buttons/btn-agent-skills.webp +0 -0
  263. package/taste-skill/assets/readme-buttons/btn-changelog.webp +0 -0
  264. package/taste-skill/assets/readme-buttons/btn-mit.webp +0 -0
  265. package/taste-skill/assets/readme-buttons/btn-site.webp +0 -0
  266. package/taste-skill/assets/readme-buttons/btn-tools.webp +0 -0
  267. package/taste-skill/assets/readme-cta-tasteskill.svg +0 -5
  268. package/taste-skill/assets/sponsors/animations-dev.webp +0 -0
  269. package/taste-skill/assets/sponsors/emil-animations-dev.webp +0 -0
  270. package/taste-skill/assets/taste-skill-logo.png +0 -0
  271. package/taste-skill/assets/taste-skill-logo.webp +0 -0
  272. package/taste-skill/assets/vercel-oss-program-badge.svg +0 -44
  273. package/taste-skill/examples/floria-bottom.webp +0 -0
  274. package/taste-skill/examples/floria-full.webp +0 -0
  275. package/taste-skill/examples/floria-top.webp +0 -0
  276. package/taste-skill/research/README.md +0 -8
  277. package/taste-skill/research/laziness/README.md +0 -25
  278. package/taste-skill/research/laziness/findings/empirical-results.md +0 -58
  279. package/taste-skill/research/laziness/findings/references.md +0 -20
  280. package/taste-skill/research/laziness/remediation/architectural-patterns.md +0 -55
  281. package/taste-skill/research/laziness/remediation/parameter-tuning.md +0 -44
  282. package/taste-skill/research/laziness/remediation/prompt-engineering.md +0 -52
  283. package/taste-skill/research/laziness/remediation/reference-prompts.md +0 -79
  284. package/taste-skill/research/laziness/root-causes/cognitive-shortcuts.md +0 -23
  285. package/taste-skill/research/laziness/root-causes/output-limits.md +0 -39
  286. package/taste-skill/research/laziness/root-causes/rlhf-and-compute.md +0 -27
  287. package/taste-skill/research/laziness/root-causes/training-data-bias.md +0 -28
  288. package/taste-skill/scripts/build-emil-sponsor-row.mjs +0 -41
  289. package/taste-skill/scripts/convert-readme-assets-webp.mjs +0 -142
  290. package/taste-skill/scripts/process-readme-buttons.mjs +0 -108
  291. package/taste-skill/scripts/process-sponsor-badge.mjs +0 -83
  292. package/taste-skill/skill.sh +0 -25
  293. package/taste-skill/skills/brandkit/SKILL.md +0 -798
  294. package/taste-skill/skills/brutalist-skill/SKILL.md +0 -92
  295. package/taste-skill/skills/gpt-tasteskill/SKILL.md +0 -74
  296. package/taste-skill/skills/image-to-code-skill/SKILL.md +0 -1228
  297. package/taste-skill/skills/imagegen-frontend-mobile/SKILL.md +0 -1465
  298. package/taste-skill/skills/imagegen-frontend-web/SKILL.md +0 -987
  299. package/taste-skill/skills/llms.txt +0 -13
  300. package/taste-skill/skills/minimalist-skill/SKILL.md +0 -85
  301. package/taste-skill/skills/output-skill/SKILL.md +0 -49
  302. package/taste-skill/skills/redesign-skill/SKILL.md +0 -178
  303. package/taste-skill/skills/soft-skill/SKILL.md +0 -98
  304. package/taste-skill/skills/stitch-skill/DESIGN.md +0 -121
  305. package/taste-skill/skills/stitch-skill/SKILL.md +0 -184
  306. package/taste-skill/skills/taste-skill/SKILL.md +0 -1206
  307. package/taste-skill/skills/taste-skill-v1/SKILL.md +0 -226
  308. package/temp_fix.js +0 -61
  309. package/templates/DESIGN.md +0 -38
  310. package/templates/bug-report.md +0 -21
  311. package/templates/design-report.md +0 -21
  312. package/templates/feature-report.md +0 -20
  313. package/templates/review-report.md +0 -21
  314. package/templates/skill-template.md +0 -38
  315. package/tests/behavior-conformance.test.js +0 -154
  316. package/tests/install-script.test.js +0 -38
  317. package/tests/registry.test.js +0 -111
  318. package/update_template.js +0 -28
  319. package/vitest.config.js +0 -11
package/migrate-to-v6.js DELETED
@@ -1,130 +0,0 @@
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 DELETED
@@ -1,147 +0,0 @@
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 DELETED
@@ -1,133 +0,0 @@
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 DELETED
@@ -1,96 +0,0 @@
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/patch.js DELETED
@@ -1,15 +0,0 @@
1
- const fs = require('fs');
2
- let content = fs.readFileSync('bin/install.js', 'utf8');
3
-
4
- // Fix kiloConfig bug
5
- content = content.replace(
6
- "if (!Array.isArray(kiloConfig.skills) || typeof kiloConfig.skills !== 'object' || !kiloConfig.skills.paths) {",
7
- "if (!kiloConfig.skills || typeof kiloConfig.skills !== 'object' || Array.isArray(kiloConfig.skills) || !kiloConfig.skills.paths) {"
8
- );
9
-
10
- // Replace interactive prompt
11
- const startMarker = "rl.question(questionIde, (answerIde) => {";
12
- const endMarker = "} 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});";
13
-
14
- const startIdx = content.indexOf(startMarker);
15
- // Actually simpler regex
package/patch.py DELETED
@@ -1,89 +0,0 @@
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 DELETED
@@ -1,83 +0,0 @@
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.")