@techwavedev/agi-agent-kit 1.4.2 → 1.5.2

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 (476) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +28 -19
  3. package/README.pt-BR.md +537 -0
  4. package/bin/init.js +943 -84
  5. package/package.json +1 -1
  6. package/templates/base/.agent/rules/core_rules.md +69 -0
  7. package/templates/base/.agent/workflows/memory-usage.md +68 -0
  8. package/templates/base/.env.example +21 -4
  9. package/templates/base/AGENTS.md +37 -8
  10. package/templates/base/execution/memory_usage_proof.py +307 -0
  11. package/templates/skills/SKILLS_CATALOG.md +1 -1
  12. package/templates/skills/core/documentation/SKILL.md +5 -3
  13. package/templates/skills/core/documentation/scripts/__pycache__/analyze_code.cpython-312.pyc +0 -0
  14. package/templates/skills/core/documentation/scripts/__pycache__/detect_changes.cpython-312.pyc +0 -0
  15. package/templates/skills/core/documentation/scripts/__pycache__/generate_changelog.cpython-312.pyc +0 -0
  16. package/templates/skills/core/documentation/scripts/__pycache__/sync_docs.cpython-312.pyc +0 -0
  17. package/templates/skills/core/documentation/scripts/__pycache__/update_skill_docs.cpython-312.pyc +0 -0
  18. package/templates/skills/core/pdf-reader/scripts/__pycache__/extract_text.cpython-312.pyc +0 -0
  19. package/templates/skills/core/qdrant-memory/scripts/__pycache__/benchmark_token_savings.cpython-312.pyc +0 -0
  20. package/templates/skills/core/qdrant-memory/scripts/__pycache__/bm25_index.cpython-312.pyc +0 -0
  21. package/templates/skills/core/qdrant-memory/scripts/__pycache__/embedding_utils.cpython-312.pyc +0 -0
  22. package/templates/skills/core/qdrant-memory/scripts/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  23. package/templates/skills/core/qdrant-memory/scripts/__pycache__/init_collection.cpython-312.pyc +0 -0
  24. package/templates/skills/core/qdrant-memory/scripts/__pycache__/memory_retrieval.cpython-312.pyc +0 -0
  25. package/templates/skills/core/qdrant-memory/scripts/__pycache__/semantic_cache.cpython-312.pyc +0 -0
  26. package/templates/skills/core/qdrant-memory/scripts/__pycache__/test_skill.cpython-312.pyc +0 -0
  27. package/templates/skills/core/webcrawler/scripts/__pycache__/crawl_docs.cpython-312.pyc +0 -0
  28. package/templates/skills/core/webcrawler/scripts/__pycache__/extract_page.cpython-312.pyc +0 -0
  29. package/templates/skills/core/webcrawler/scripts/__pycache__/filter_docs.cpython-312.pyc +0 -0
  30. package/templates/skills/extended/ai-agents/last30days/scripts/__pycache__/last30days.cpython-312.pyc +0 -0
  31. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/__init__.cpython-312.pyc +0 -0
  32. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/cache.cpython-312.pyc +0 -0
  33. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/dates.cpython-312.pyc +0 -0
  34. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/dedupe.cpython-312.pyc +0 -0
  35. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/env.cpython-312.pyc +0 -0
  36. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/http.cpython-312.pyc +0 -0
  37. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/models.cpython-312.pyc +0 -0
  38. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/normalize.cpython-312.pyc +0 -0
  39. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/openai_reddit.cpython-312.pyc +0 -0
  40. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/reddit_enrich.cpython-312.pyc +0 -0
  41. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/render.cpython-312.pyc +0 -0
  42. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/schema.cpython-312.pyc +0 -0
  43. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/score.cpython-312.pyc +0 -0
  44. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/ui.cpython-312.pyc +0 -0
  45. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/websearch.cpython-312.pyc +0 -0
  46. package/templates/skills/extended/ai-agents/last30days/scripts/lib/__pycache__/xai_x.cpython-312.pyc +0 -0
  47. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  48. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_cache.cpython-312.pyc +0 -0
  49. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_dates.cpython-312.pyc +0 -0
  50. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_dedupe.cpython-312.pyc +0 -0
  51. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_models.cpython-312.pyc +0 -0
  52. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_normalize.cpython-312.pyc +0 -0
  53. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_render.cpython-312.pyc +0 -0
  54. package/templates/skills/extended/ai-agents/last30days/tests/__pycache__/test_score.cpython-312.pyc +0 -0
  55. package/templates/skills/extended/ai-agents/voice-ai-engine-development/examples/__pycache__/complete_voice_engine.cpython-312.pyc +0 -0
  56. package/templates/skills/extended/ai-agents/voice-ai-engine-development/examples/__pycache__/gemini_agent_example.cpython-312.pyc +0 -0
  57. package/templates/skills/extended/ai-agents/voice-ai-engine-development/examples/__pycache__/interrupt_system_example.cpython-312.pyc +0 -0
  58. package/templates/skills/extended/ai-agents/voice-ai-engine-development/templates/__pycache__/base_worker_template.cpython-312.pyc +0 -0
  59. package/templates/skills/extended/ai-agents/voice-ai-engine-development/templates/__pycache__/multi_provider_factory_template.cpython-312.pyc +0 -0
  60. package/templates/skills/extended/ai-agents/youtube-summarizer/scripts/__pycache__/extract-transcript.cpython-312.pyc +0 -0
  61. package/templates/skills/extended/backend/senior-architect/scripts/__pycache__/architecture_diagram_generator.cpython-312.pyc +0 -0
  62. package/templates/skills/extended/backend/senior-architect/scripts/__pycache__/dependency_analyzer.cpython-312.pyc +0 -0
  63. package/templates/skills/extended/backend/senior-architect/scripts/__pycache__/project_architect.cpython-312.pyc +0 -0
  64. package/templates/skills/extended/data/pdf/scripts/__pycache__/check_bounding_boxes.cpython-312.pyc +0 -0
  65. package/templates/skills/extended/data/pdf/scripts/__pycache__/check_bounding_boxes_test.cpython-312.pyc +0 -0
  66. package/templates/skills/extended/data/pdf/scripts/__pycache__/check_fillable_fields.cpython-312.pyc +0 -0
  67. package/templates/skills/extended/data/pdf/scripts/__pycache__/convert_pdf_to_images.cpython-312.pyc +0 -0
  68. package/templates/skills/extended/data/pdf/scripts/__pycache__/create_validation_image.cpython-312.pyc +0 -0
  69. package/templates/skills/extended/data/pdf/scripts/__pycache__/extract_form_field_info.cpython-312.pyc +0 -0
  70. package/templates/skills/extended/data/pdf/scripts/__pycache__/fill_fillable_fields.cpython-312.pyc +0 -0
  71. package/templates/skills/extended/data/pdf/scripts/__pycache__/fill_pdf_form_with_annotations.cpython-312.pyc +0 -0
  72. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/check_bounding_boxes.cpython-312.pyc +0 -0
  73. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/check_bounding_boxes_test.cpython-312.pyc +0 -0
  74. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/check_fillable_fields.cpython-312.pyc +0 -0
  75. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/convert_pdf_to_images.cpython-312.pyc +0 -0
  76. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/create_validation_image.cpython-312.pyc +0 -0
  77. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/extract_form_field_info.cpython-312.pyc +0 -0
  78. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/fill_fillable_fields.cpython-312.pyc +0 -0
  79. package/templates/skills/extended/data/pdf-official/scripts/__pycache__/fill_pdf_form_with_annotations.cpython-312.pyc +0 -0
  80. package/templates/skills/extended/data/xlsx/__pycache__/recalc.cpython-312.pyc +0 -0
  81. package/templates/skills/extended/data/xlsx-official/__pycache__/recalc.cpython-312.pyc +0 -0
  82. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/0.cpython-312.pyc +0 -0
  83. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/1.cpython-312.pyc +0 -0
  84. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/10.cpython-312.pyc +0 -0
  85. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/100.cpython-312.pyc +0 -0
  86. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/101.cpython-312.pyc +0 -0
  87. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/102.cpython-312.pyc +0 -0
  88. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/103.cpython-312.pyc +0 -0
  89. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/104.cpython-312.pyc +0 -0
  90. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/105.cpython-312.pyc +0 -0
  91. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/106.cpython-312.pyc +0 -0
  92. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/107.cpython-312.pyc +0 -0
  93. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/108.cpython-312.pyc +0 -0
  94. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/109.cpython-312.pyc +0 -0
  95. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/11.cpython-312.pyc +0 -0
  96. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/110.cpython-312.pyc +0 -0
  97. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/111.cpython-312.pyc +0 -0
  98. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/112.cpython-312.pyc +0 -0
  99. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/113.cpython-312.pyc +0 -0
  100. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/114.cpython-312.pyc +0 -0
  101. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/115.cpython-312.pyc +0 -0
  102. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/116.cpython-312.pyc +0 -0
  103. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/117.cpython-312.pyc +0 -0
  104. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/118.cpython-312.pyc +0 -0
  105. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/119.cpython-312.pyc +0 -0
  106. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/12.cpython-312.pyc +0 -0
  107. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/120.cpython-312.pyc +0 -0
  108. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/121.cpython-312.pyc +0 -0
  109. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/122.cpython-312.pyc +0 -0
  110. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/123.cpython-312.pyc +0 -0
  111. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/124.cpython-312.pyc +0 -0
  112. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/125.cpython-312.pyc +0 -0
  113. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/126.cpython-312.pyc +0 -0
  114. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/127.cpython-312.pyc +0 -0
  115. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/128.cpython-312.pyc +0 -0
  116. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/129.cpython-312.pyc +0 -0
  117. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/13.cpython-312.pyc +0 -0
  118. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/130.cpython-312.pyc +0 -0
  119. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/131.cpython-312.pyc +0 -0
  120. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/132.cpython-312.pyc +0 -0
  121. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/133.cpython-312.pyc +0 -0
  122. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/134.cpython-312.pyc +0 -0
  123. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/135.cpython-312.pyc +0 -0
  124. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/136.cpython-312.pyc +0 -0
  125. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/137.cpython-312.pyc +0 -0
  126. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/138.cpython-312.pyc +0 -0
  127. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/139.cpython-312.pyc +0 -0
  128. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/14.cpython-312.pyc +0 -0
  129. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/140.cpython-312.pyc +0 -0
  130. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/141.cpython-312.pyc +0 -0
  131. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/142.cpython-312.pyc +0 -0
  132. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/143.cpython-312.pyc +0 -0
  133. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/144.cpython-312.pyc +0 -0
  134. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/145.cpython-312.pyc +0 -0
  135. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/146.cpython-312.pyc +0 -0
  136. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/147.cpython-312.pyc +0 -0
  137. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/148.cpython-312.pyc +0 -0
  138. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/149.cpython-312.pyc +0 -0
  139. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/15.cpython-312.pyc +0 -0
  140. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/150.cpython-312.pyc +0 -0
  141. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/151.cpython-312.pyc +0 -0
  142. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/152.cpython-312.pyc +0 -0
  143. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/153.cpython-312.pyc +0 -0
  144. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/154.cpython-312.pyc +0 -0
  145. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/155.cpython-312.pyc +0 -0
  146. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/156.cpython-312.pyc +0 -0
  147. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/157.cpython-312.pyc +0 -0
  148. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/158.cpython-312.pyc +0 -0
  149. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/159.cpython-312.pyc +0 -0
  150. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/16.cpython-312.pyc +0 -0
  151. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/160.cpython-312.pyc +0 -0
  152. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/161.cpython-312.pyc +0 -0
  153. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/162.cpython-312.pyc +0 -0
  154. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/163.cpython-312.pyc +0 -0
  155. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/17.cpython-312.pyc +0 -0
  156. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/18.cpython-312.pyc +0 -0
  157. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/19.cpython-312.pyc +0 -0
  158. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/2.cpython-312.pyc +0 -0
  159. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/20.cpython-312.pyc +0 -0
  160. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/21.cpython-312.pyc +0 -0
  161. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/22.cpython-312.pyc +0 -0
  162. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/23.cpython-312.pyc +0 -0
  163. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/24.cpython-312.pyc +0 -0
  164. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/25.cpython-312.pyc +0 -0
  165. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/26.cpython-312.pyc +0 -0
  166. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/27.cpython-312.pyc +0 -0
  167. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/28.cpython-312.pyc +0 -0
  168. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/29.cpython-312.pyc +0 -0
  169. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/3.cpython-312.pyc +0 -0
  170. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/30.cpython-312.pyc +0 -0
  171. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/31.cpython-312.pyc +0 -0
  172. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/32.cpython-312.pyc +0 -0
  173. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/33.cpython-312.pyc +0 -0
  174. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/34.cpython-312.pyc +0 -0
  175. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/35.cpython-312.pyc +0 -0
  176. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/36.cpython-312.pyc +0 -0
  177. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/37.cpython-312.pyc +0 -0
  178. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/38.cpython-312.pyc +0 -0
  179. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/39.cpython-312.pyc +0 -0
  180. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/4.cpython-312.pyc +0 -0
  181. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/40.cpython-312.pyc +0 -0
  182. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/41.cpython-312.pyc +0 -0
  183. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/42.cpython-312.pyc +0 -0
  184. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/43.cpython-312.pyc +0 -0
  185. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/44.cpython-312.pyc +0 -0
  186. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/45.cpython-312.pyc +0 -0
  187. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/46.cpython-312.pyc +0 -0
  188. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/47.cpython-312.pyc +0 -0
  189. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/48.cpython-312.pyc +0 -0
  190. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/49.cpython-312.pyc +0 -0
  191. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/5.cpython-312.pyc +0 -0
  192. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/50.cpython-312.pyc +0 -0
  193. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/51.cpython-312.pyc +0 -0
  194. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/52.cpython-312.pyc +0 -0
  195. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/53.cpython-312.pyc +0 -0
  196. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/54.cpython-312.pyc +0 -0
  197. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/55.cpython-312.pyc +0 -0
  198. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/56.cpython-312.pyc +0 -0
  199. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/57.cpython-312.pyc +0 -0
  200. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/58.cpython-312.pyc +0 -0
  201. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/59.cpython-312.pyc +0 -0
  202. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/6.cpython-312.pyc +0 -0
  203. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/60.cpython-312.pyc +0 -0
  204. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/61.cpython-312.pyc +0 -0
  205. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/62.cpython-312.pyc +0 -0
  206. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/63.cpython-312.pyc +0 -0
  207. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/64.cpython-312.pyc +0 -0
  208. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/65.cpython-312.pyc +0 -0
  209. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/66.cpython-312.pyc +0 -0
  210. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/67.cpython-312.pyc +0 -0
  211. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/68.cpython-312.pyc +0 -0
  212. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/69.cpython-312.pyc +0 -0
  213. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/7.cpython-312.pyc +0 -0
  214. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/70.cpython-312.pyc +0 -0
  215. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/71.cpython-312.pyc +0 -0
  216. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/72.cpython-312.pyc +0 -0
  217. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/73.cpython-312.pyc +0 -0
  218. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/74.cpython-312.pyc +0 -0
  219. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/75.cpython-312.pyc +0 -0
  220. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/76.cpython-312.pyc +0 -0
  221. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/77.cpython-312.pyc +0 -0
  222. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/78.cpython-312.pyc +0 -0
  223. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/79.cpython-312.pyc +0 -0
  224. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/8.cpython-312.pyc +0 -0
  225. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/80.cpython-312.pyc +0 -0
  226. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/81.cpython-312.pyc +0 -0
  227. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/82.cpython-312.pyc +0 -0
  228. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/83.cpython-312.pyc +0 -0
  229. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/84.cpython-312.pyc +0 -0
  230. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/85.cpython-312.pyc +0 -0
  231. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/86.cpython-312.pyc +0 -0
  232. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/87.cpython-312.pyc +0 -0
  233. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/88.cpython-312.pyc +0 -0
  234. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/89.cpython-312.pyc +0 -0
  235. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/9.cpython-312.pyc +0 -0
  236. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/90.cpython-312.pyc +0 -0
  237. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/91.cpython-312.pyc +0 -0
  238. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/92.cpython-312.pyc +0 -0
  239. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/93.cpython-312.pyc +0 -0
  240. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/94.cpython-312.pyc +0 -0
  241. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/95.cpython-312.pyc +0 -0
  242. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/96.cpython-312.pyc +0 -0
  243. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/97.cpython-312.pyc +0 -0
  244. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/98.cpython-312.pyc +0 -0
  245. package/templates/skills/extended/devops/loki-mode/benchmarks/results/2026-01-05-00-49-17/humaneval-solutions/__pycache__/99.cpython-312.pyc +0 -0
  246. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/0.cpython-312.pyc +0 -0
  247. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/1.cpython-312.pyc +0 -0
  248. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/10.cpython-312.pyc +0 -0
  249. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/100.cpython-312.pyc +0 -0
  250. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/101.cpython-312.pyc +0 -0
  251. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/102.cpython-312.pyc +0 -0
  252. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/103.cpython-312.pyc +0 -0
  253. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/104.cpython-312.pyc +0 -0
  254. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/105.cpython-312.pyc +0 -0
  255. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/106.cpython-312.pyc +0 -0
  256. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/107.cpython-312.pyc +0 -0
  257. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/108.cpython-312.pyc +0 -0
  258. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/109.cpython-312.pyc +0 -0
  259. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/11.cpython-312.pyc +0 -0
  260. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/110.cpython-312.pyc +0 -0
  261. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/111.cpython-312.pyc +0 -0
  262. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/112.cpython-312.pyc +0 -0
  263. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/113.cpython-312.pyc +0 -0
  264. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/114.cpython-312.pyc +0 -0
  265. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/115.cpython-312.pyc +0 -0
  266. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/116.cpython-312.pyc +0 -0
  267. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/117.cpython-312.pyc +0 -0
  268. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/118.cpython-312.pyc +0 -0
  269. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/119.cpython-312.pyc +0 -0
  270. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/12.cpython-312.pyc +0 -0
  271. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/120.cpython-312.pyc +0 -0
  272. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/121.cpython-312.pyc +0 -0
  273. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/122.cpython-312.pyc +0 -0
  274. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/123.cpython-312.pyc +0 -0
  275. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/124.cpython-312.pyc +0 -0
  276. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/125.cpython-312.pyc +0 -0
  277. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/126.cpython-312.pyc +0 -0
  278. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/127.cpython-312.pyc +0 -0
  279. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/128.cpython-312.pyc +0 -0
  280. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/129.cpython-312.pyc +0 -0
  281. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/13.cpython-312.pyc +0 -0
  282. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/130.cpython-312.pyc +0 -0
  283. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/131.cpython-312.pyc +0 -0
  284. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/132.cpython-312.pyc +0 -0
  285. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/133.cpython-312.pyc +0 -0
  286. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/134.cpython-312.pyc +0 -0
  287. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/135.cpython-312.pyc +0 -0
  288. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/136.cpython-312.pyc +0 -0
  289. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/137.cpython-312.pyc +0 -0
  290. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/138.cpython-312.pyc +0 -0
  291. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/139.cpython-312.pyc +0 -0
  292. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/14.cpython-312.pyc +0 -0
  293. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/140.cpython-312.pyc +0 -0
  294. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/141.cpython-312.pyc +0 -0
  295. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/142.cpython-312.pyc +0 -0
  296. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/143.cpython-312.pyc +0 -0
  297. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/144.cpython-312.pyc +0 -0
  298. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/145.cpython-312.pyc +0 -0
  299. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/146.cpython-312.pyc +0 -0
  300. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/147.cpython-312.pyc +0 -0
  301. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/148.cpython-312.pyc +0 -0
  302. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/149.cpython-312.pyc +0 -0
  303. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/15.cpython-312.pyc +0 -0
  304. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/150.cpython-312.pyc +0 -0
  305. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/151.cpython-312.pyc +0 -0
  306. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/152.cpython-312.pyc +0 -0
  307. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/153.cpython-312.pyc +0 -0
  308. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/154.cpython-312.pyc +0 -0
  309. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/155.cpython-312.pyc +0 -0
  310. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/156.cpython-312.pyc +0 -0
  311. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/157.cpython-312.pyc +0 -0
  312. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/158.cpython-312.pyc +0 -0
  313. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/159.cpython-312.pyc +0 -0
  314. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/16.cpython-312.pyc +0 -0
  315. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/160.cpython-312.pyc +0 -0
  316. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/161.cpython-312.pyc +0 -0
  317. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/162.cpython-312.pyc +0 -0
  318. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/163.cpython-312.pyc +0 -0
  319. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/17.cpython-312.pyc +0 -0
  320. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/18.cpython-312.pyc +0 -0
  321. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/19.cpython-312.pyc +0 -0
  322. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/2.cpython-312.pyc +0 -0
  323. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/20.cpython-312.pyc +0 -0
  324. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/21.cpython-312.pyc +0 -0
  325. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/22.cpython-312.pyc +0 -0
  326. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/23.cpython-312.pyc +0 -0
  327. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/24.cpython-312.pyc +0 -0
  328. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/25.cpython-312.pyc +0 -0
  329. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/26.cpython-312.pyc +0 -0
  330. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/27.cpython-312.pyc +0 -0
  331. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/28.cpython-312.pyc +0 -0
  332. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/29.cpython-312.pyc +0 -0
  333. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/3.cpython-312.pyc +0 -0
  334. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/30.cpython-312.pyc +0 -0
  335. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/31.cpython-312.pyc +0 -0
  336. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/32.cpython-312.pyc +0 -0
  337. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/33.cpython-312.pyc +0 -0
  338. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/34.cpython-312.pyc +0 -0
  339. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/35.cpython-312.pyc +0 -0
  340. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/36.cpython-312.pyc +0 -0
  341. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/37.cpython-312.pyc +0 -0
  342. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/38.cpython-312.pyc +0 -0
  343. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/39.cpython-312.pyc +0 -0
  344. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/4.cpython-312.pyc +0 -0
  345. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/40.cpython-312.pyc +0 -0
  346. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/41.cpython-312.pyc +0 -0
  347. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/42.cpython-312.pyc +0 -0
  348. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/43.cpython-312.pyc +0 -0
  349. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/44.cpython-312.pyc +0 -0
  350. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/45.cpython-312.pyc +0 -0
  351. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/46.cpython-312.pyc +0 -0
  352. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/47.cpython-312.pyc +0 -0
  353. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/48.cpython-312.pyc +0 -0
  354. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/49.cpython-312.pyc +0 -0
  355. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/5.cpython-312.pyc +0 -0
  356. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/50.cpython-312.pyc +0 -0
  357. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/51.cpython-312.pyc +0 -0
  358. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/52.cpython-312.pyc +0 -0
  359. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/53.cpython-312.pyc +0 -0
  360. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/54.cpython-312.pyc +0 -0
  361. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/55.cpython-312.pyc +0 -0
  362. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/56.cpython-312.pyc +0 -0
  363. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/57.cpython-312.pyc +0 -0
  364. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/58.cpython-312.pyc +0 -0
  365. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/59.cpython-312.pyc +0 -0
  366. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/6.cpython-312.pyc +0 -0
  367. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/60.cpython-312.pyc +0 -0
  368. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/61.cpython-312.pyc +0 -0
  369. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/62.cpython-312.pyc +0 -0
  370. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/63.cpython-312.pyc +0 -0
  371. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/64.cpython-312.pyc +0 -0
  372. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/65.cpython-312.pyc +0 -0
  373. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/66.cpython-312.pyc +0 -0
  374. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/67.cpython-312.pyc +0 -0
  375. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/68.cpython-312.pyc +0 -0
  376. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/69.cpython-312.pyc +0 -0
  377. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/7.cpython-312.pyc +0 -0
  378. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/70.cpython-312.pyc +0 -0
  379. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/71.cpython-312.pyc +0 -0
  380. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/72.cpython-312.pyc +0 -0
  381. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/73.cpython-312.pyc +0 -0
  382. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/74.cpython-312.pyc +0 -0
  383. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/75.cpython-312.pyc +0 -0
  384. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/76.cpython-312.pyc +0 -0
  385. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/77.cpython-312.pyc +0 -0
  386. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/78.cpython-312.pyc +0 -0
  387. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/79.cpython-312.pyc +0 -0
  388. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/8.cpython-312.pyc +0 -0
  389. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/80.cpython-312.pyc +0 -0
  390. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/81.cpython-312.pyc +0 -0
  391. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/82.cpython-312.pyc +0 -0
  392. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/83.cpython-312.pyc +0 -0
  393. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/84.cpython-312.pyc +0 -0
  394. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/85.cpython-312.pyc +0 -0
  395. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/86.cpython-312.pyc +0 -0
  396. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/87.cpython-312.pyc +0 -0
  397. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/88.cpython-312.pyc +0 -0
  398. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/89.cpython-312.pyc +0 -0
  399. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/9.cpython-312.pyc +0 -0
  400. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/90.cpython-312.pyc +0 -0
  401. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/91.cpython-312.pyc +0 -0
  402. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/92.cpython-312.pyc +0 -0
  403. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/93.cpython-312.pyc +0 -0
  404. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/94.cpython-312.pyc +0 -0
  405. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/95.cpython-312.pyc +0 -0
  406. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/96.cpython-312.pyc +0 -0
  407. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/97.cpython-312.pyc +0 -0
  408. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/98.cpython-312.pyc +0 -0
  409. package/templates/skills/extended/devops/loki-mode/benchmarks/results/humaneval-loki-solutions/__pycache__/99.cpython-312.pyc +0 -0
  410. package/templates/skills/extended/documentation/documentation-generation-doc-generate/SKILL.md +1 -0
  411. package/templates/skills/extended/documentation/docx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
  412. package/templates/skills/extended/documentation/docx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
  413. package/templates/skills/extended/documentation/docx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
  414. package/templates/skills/extended/documentation/docx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
  415. package/templates/skills/extended/documentation/docx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
  416. package/templates/skills/extended/documentation/docx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
  417. package/templates/skills/extended/documentation/docx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
  418. package/templates/skills/extended/documentation/docx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
  419. package/templates/skills/extended/documentation/docx/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  420. package/templates/skills/extended/documentation/docx/scripts/__pycache__/document.cpython-312.pyc +0 -0
  421. package/templates/skills/extended/documentation/docx/scripts/__pycache__/utilities.cpython-312.pyc +0 -0
  422. package/templates/skills/extended/documentation/product-manager-toolkit/scripts/__pycache__/customer_interview_analyzer.cpython-312.pyc +0 -0
  423. package/templates/skills/extended/documentation/product-manager-toolkit/scripts/__pycache__/rice_prioritizer.cpython-312.pyc +0 -0
  424. package/templates/skills/extended/frontend/pptx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
  425. package/templates/skills/extended/frontend/pptx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
  426. package/templates/skills/extended/frontend/pptx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
  427. package/templates/skills/extended/frontend/pptx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
  428. package/templates/skills/extended/frontend/pptx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
  429. package/templates/skills/extended/frontend/pptx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
  430. package/templates/skills/extended/frontend/pptx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
  431. package/templates/skills/extended/frontend/pptx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
  432. package/templates/skills/extended/frontend/pptx/scripts/__pycache__/inventory.cpython-312.pyc +0 -0
  433. package/templates/skills/extended/frontend/pptx/scripts/__pycache__/rearrange.cpython-312.pyc +0 -0
  434. package/templates/skills/extended/frontend/pptx/scripts/__pycache__/replace.cpython-312.pyc +0 -0
  435. package/templates/skills/extended/frontend/pptx/scripts/__pycache__/thumbnail.cpython-312.pyc +0 -0
  436. package/templates/skills/extended/frontend/senior-fullstack/scripts/__pycache__/code_quality_analyzer.cpython-312.pyc +0 -0
  437. package/templates/skills/extended/frontend/senior-fullstack/scripts/__pycache__/fullstack_scaffolder.cpython-312.pyc +0 -0
  438. package/templates/skills/extended/frontend/senior-fullstack/scripts/__pycache__/project_scaffolder.cpython-312.pyc +0 -0
  439. package/templates/skills/extended/frontend/ui-ux-pro-max/SKILL.md +34 -1
  440. package/templates/skills/extended/frontend/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  441. package/templates/skills/extended/frontend/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  442. package/templates/skills/extended/frontend/ui-ux-pro-max/scripts/__pycache__/search.cpython-312.pyc +0 -0
  443. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/ab_test_planner.cpython-312.pyc +0 -0
  444. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/aso_scorer.cpython-312.pyc +0 -0
  445. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/competitor_analyzer.cpython-312.pyc +0 -0
  446. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/keyword_analyzer.cpython-312.pyc +0 -0
  447. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/launch_checklist.cpython-312.pyc +0 -0
  448. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/localization_helper.cpython-312.pyc +0 -0
  449. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/metadata_optimizer.cpython-312.pyc +0 -0
  450. package/templates/skills/extended/mobile/app-store-optimization/__pycache__/review_analyzer.cpython-312.pyc +0 -0
  451. package/templates/skills/extended/other/oss-hunter/bin/__pycache__/hunter.cpython-312.pyc +0 -0
  452. package/templates/skills/extended/other/typescript-expert/scripts/__pycache__/ts_diagnostic.cpython-312.pyc +0 -0
  453. package/templates/skills/extended/workflow/slack-gif-creator/core/__pycache__/easing.cpython-312.pyc +0 -0
  454. package/templates/skills/extended/workflow/slack-gif-creator/core/__pycache__/frame_composer.cpython-312.pyc +0 -0
  455. package/templates/skills/extended/workflow/slack-gif-creator/core/__pycache__/gif_builder.cpython-312.pyc +0 -0
  456. package/templates/skills/extended/workflow/slack-gif-creator/core/__pycache__/validators.cpython-312.pyc +0 -0
  457. package/templates/skills/knowledge/ai-agents/prompt-engineering-patterns/scripts/__pycache__/optimize-prompt.cpython-312.pyc +0 -0
  458. package/templates/skills/knowledge/backend/api-design-principles/assets/__pycache__/rest-api-template.cpython-312.pyc +0 -0
  459. package/templates/skills/knowledge/backend/api-patterns/scripts/__pycache__/api_validator.cpython-312.pyc +0 -0
  460. package/templates/skills/knowledge/backend/database-design/scripts/__pycache__/schema_validator.cpython-312.pyc +0 -0
  461. package/templates/skills/knowledge/content/content-creator/scripts/__pycache__/brand_voice_analyzer.cpython-312.pyc +0 -0
  462. package/templates/skills/knowledge/content/content-creator/scripts/__pycache__/seo_optimizer.cpython-312.pyc +0 -0
  463. package/templates/skills/knowledge/content/geo-fundamentals/scripts/__pycache__/geo_checker.cpython-312.pyc +0 -0
  464. package/templates/skills/knowledge/content/seo-fundamentals/scripts/__pycache__/seo_checker.cpython-312.pyc +0 -0
  465. package/templates/skills/knowledge/debugging/performance-profiling/scripts/__pycache__/lighthouse_audit.cpython-312.pyc +0 -0
  466. package/templates/skills/knowledge/frontend/frontend-design/scripts/__pycache__/accessibility_checker.cpython-312.pyc +0 -0
  467. package/templates/skills/knowledge/frontend/frontend-design/scripts/__pycache__/ux_audit.cpython-312.pyc +0 -0
  468. package/templates/skills/knowledge/i18n/i18n-localization/scripts/__pycache__/i18n_checker.cpython-312.pyc +0 -0
  469. package/templates/skills/knowledge/mobile/mobile-design/scripts/__pycache__/mobile_audit.cpython-312.pyc +0 -0
  470. package/templates/skills/knowledge/security/vulnerability-scanner/scripts/__pycache__/security_scan.cpython-312.pyc +0 -0
  471. package/templates/skills/knowledge/testing/lint-and-validate/scripts/__pycache__/lint_runner.cpython-312.pyc +0 -0
  472. package/templates/skills/knowledge/testing/lint-and-validate/scripts/__pycache__/type_coverage.cpython-312.pyc +0 -0
  473. package/templates/skills/knowledge/testing/testing-patterns/scripts/__pycache__/test_runner.cpython-312.pyc +0 -0
  474. package/templates/skills/knowledge/testing/webapp-testing/scripts/__pycache__/playwright_runner.cpython-312.pyc +0 -0
  475. package/templates/skills/knowledge/workflow/plugin-discovery/scripts/__pycache__/platform_setup.cpython-312.pyc +0 -0
  476. package/templates/skills/knowledge/workflow/self-update/scripts/__pycache__/update_kit.cpython-312.pyc +0 -0
package/bin/init.js CHANGED
@@ -22,6 +22,7 @@ const fs = require("fs");
22
22
  const path = require("path");
23
23
  const readline = require("readline");
24
24
  const { execSync } = require("child_process");
25
+ const os = require("os");
25
26
 
26
27
  // Color utilities for terminal output
27
28
  const colors = {
@@ -65,8 +66,33 @@ const PACKS = {
65
66
  skills: ["core", "knowledge", "extended"],
66
67
  includeAgent: true,
67
68
  },
69
+ custom: {
70
+ name: "Custom",
71
+ description: "Core + selected domains only",
72
+ skills: ["core"], // domains are resolved at install time via options.domains
73
+ includeAgent: true,
74
+ },
68
75
  };
69
76
 
77
+ // Domain definitions — maps domain name to skill counts per tier
78
+ const DOMAINS = [
79
+ { id: "ai-agents", label: "AI Agents & Orchestration", knowledge: 9, extended: 93 },
80
+ { id: "architecture", label: "Architecture & System Design", knowledge: 6, extended: 32 },
81
+ { id: "backend", label: "Backend & APIs", knowledge: 8, extended: 100 },
82
+ { id: "blockchain", label: "Blockchain & Web3", knowledge: 1, extended: 3 },
83
+ { id: "content", label: "Content & Copy", knowledge: 6, extended: 21 },
84
+ { id: "debugging", label: "Debugging & Observability", knowledge: 5, extended: 36 },
85
+ { id: "devops", label: "DevOps & Cloud", knowledge: 5, extended: 140 },
86
+ { id: "documentation",label: "Documentation", knowledge: 3, extended: 34 },
87
+ { id: "frontend", label: "Frontend & UI/UX", knowledge: 11, extended: 61 },
88
+ { id: "gaming", label: "Gaming & Creative", knowledge: 1, extended: 4 },
89
+ { id: "mobile", label: "Mobile (iOS/Android/RN)", knowledge: 1, extended: 8 },
90
+ { id: "security", label: "Security & Pen Testing", knowledge: 2, extended: 38 },
91
+ { id: "testing", label: "Testing & QA", knowledge: 6, extended: 32 },
92
+ { id: "workflow", label: "Workflow & Automation", knowledge: 10, extended: 142 },
93
+ { id: "i18n", label: "i18n & Localisation", knowledge: 1, extended: 0 },
94
+ ];
95
+
70
96
  // Parse command line arguments
71
97
  function parseArgs() {
72
98
  const args = process.argv.slice(2);
@@ -76,6 +102,8 @@ function parseArgs() {
76
102
  path: process.cwd(),
77
103
  symlinks: true,
78
104
  help: false,
105
+ global: false,
106
+ ci: false, // --ci: skip all prompts, use safe defaults
79
107
  };
80
108
 
81
109
  for (const arg of args) {
@@ -85,8 +113,13 @@ function parseArgs() {
85
113
  options.pack = arg.split("=")[1];
86
114
  } else if (arg.startsWith("--path=")) {
87
115
  options.path = path.resolve(arg.split("=")[1]);
116
+ } else if (arg === "--global" || arg === "-g") {
117
+ options.global = true;
118
+ options.path = path.join(os.homedir() || process.env.HOME || process.env.USERPROFILE || "", ".agent");
88
119
  } else if (arg === "--no-symlinks") {
89
120
  options.symlinks = false;
121
+ } else if (arg === "--ci") {
122
+ options.ci = true;
90
123
  } else if (arg === "--help" || arg === "-h") {
91
124
  options.help = true;
92
125
  }
@@ -106,6 +139,7 @@ ${colors.bright}Usage:${colors.reset}
106
139
  ${colors.bright}Options:${colors.reset}
107
140
  --pack=<pack> Select skill pack (core, medium, full)
108
141
  --path=<dir> Target directory (default: current)
142
+ --global, -g Install globally to ~/.agent directory
109
143
  --no-symlinks Skip GEMINI.md/CLAUDE.md symlink creation
110
144
  --help Show this help message
111
145
 
@@ -128,51 +162,540 @@ ${colors.bright}Note:${colors.reset} Most scripts require ${colors.cyan}python3$
128
162
  `);
129
163
  }
130
164
 
131
- // Prompt user for pack selection
165
+ // Prompt user for pack selection (including custom domain picker)
132
166
  async function promptPackSelection() {
167
+ console.log(`\n${colors.bright}Which pack would you like to install?${colors.reset}\n`);
168
+ console.log(` ${colors.green}1. core${colors.reset} — 4 essential skills (webcrawler, pdf-reader, qdrant-memory, documentation)`);
169
+ console.log(` ${colors.blue}2. medium${colors.reset} — Core + 89 domain skills + .agent/ structure`);
170
+ console.log(` ${colors.yellow}3. full${colors.reset} — Everything: Medium + 785 community skills (878 total)`);
171
+ console.log(` ${colors.cyan}4. custom${colors.reset} — Core + you choose specific domains\n`);
172
+
173
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
174
+
175
+ return new Promise((resolve) => {
176
+ rl.question(` Enter choice (1-4) or pack name (default: core): `, async (answer) => {
177
+ rl.close();
178
+ const choice = answer.trim().toLowerCase();
179
+
180
+ if (choice === "2" || choice === "medium" || choice === "knowledge") {
181
+ resolve("medium");
182
+ } else if (choice === "3" || choice === "full") {
183
+ resolve("full");
184
+ } else if (choice === "4" || choice === "custom") {
185
+ const domains = await promptDomainSelection();
186
+ resolve(domains.length > 0 ? "custom" : "core");
187
+ } else {
188
+ if (choice !== "1" && choice !== "core" && choice !== "") {
189
+ log.warn("Invalid choice, defaulting to core");
190
+ }
191
+ resolve("core");
192
+ }
193
+ });
194
+ });
195
+ }
196
+
197
+ // Multi-select domain picker for custom installs
198
+ async function promptDomainSelection() {
199
+ const templatesPath = path.join(__dirname, "..", "templates", "skills");
200
+
201
+ console.log(`\n${colors.bright}━━━ Custom Domain Selection ━━━${colors.reset}`);
202
+ console.log(` ${colors.cyan}Core skills (webcrawler, pdf-reader, qdrant-memory, documentation) are always included.${colors.reset}\n`);
203
+ console.log(` The numbers show ${colors.blue}professional skills${colors.reset} (curated, same as medium pack)`);
204
+ console.log(` and ${colors.yellow}community skills${colors.reset} (antigravity-awesome-skills, same as full pack).`);
205
+ console.log(` You get both tiers for each domain you select.\n`);
206
+ console.log(` ${"".padEnd(38)} ${colors.blue}■ professional${colors.reset} ${colors.yellow}■ community${colors.reset}`);
207
+ console.log(` ${"-".repeat(72)}`);
208
+
209
+ DOMAINS.forEach((d, i) => {
210
+ const num = String(i + 1).padStart(2);
211
+ const knStr = d.knowledge > 0 ? `${d.knowledge} skills` : `— `;
212
+ const exStr = d.extended > 0 ? `${d.extended} skills` : `—`;
213
+ const knColored = d.knowledge > 0
214
+ ? `${colors.blue}+${knStr}${colors.reset}`.padEnd(22)
215
+ : `${colors.dim}${knStr}${colors.reset}`.padEnd(22);
216
+ const exColored = d.extended > 0
217
+ ? `${colors.yellow}+${exStr}${colors.reset}`
218
+ : `${colors.dim}${exStr}${colors.reset}`;
219
+ console.log(` ${colors.bright}${num}.${colors.reset} ${d.label.padEnd(36)} ${knColored} ${exColored}`);
220
+ });
221
+
222
+ console.log(`\n Enter domain numbers separated by commas, or ranges (e.g. 1,3,5-7,9)`);
223
+ console.log(` Type ${colors.cyan}all${colors.reset} to select all, or press Enter to skip (core only)\n`);
224
+
225
+ const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
226
+
227
+ return new Promise((resolve) => {
228
+ rl2.question(` Your domains: `, (answer) => {
229
+ rl2.close();
230
+ const input = answer.trim().toLowerCase();
231
+
232
+ if (!input) {
233
+ log.info("No domains selected — core only.");
234
+ resolve([]);
235
+ return;
236
+ }
237
+
238
+ if (input === "all") {
239
+ log.success(`All ${DOMAINS.length} domains selected.`);
240
+ // Store selected domain ids on process env for copySkills to read
241
+ process.env._AGI_CUSTOM_DOMAINS = DOMAINS.map((d) => d.id).join(",");
242
+ resolve(DOMAINS.map((d) => d.id));
243
+ return;
244
+ }
245
+
246
+ // Parse numbers and ranges like "1,3,5-7"
247
+ const selected = [];
248
+ const parts = input.split(",");
249
+ for (const part of parts) {
250
+ const rangeParts = part.trim().split("-").map(Number);
251
+ if (rangeParts.length === 2) {
252
+ const [from, to] = rangeParts;
253
+ for (let n = from; n <= to; n++) {
254
+ if (n >= 1 && n <= DOMAINS.length) selected.push(DOMAINS[n - 1].id);
255
+ }
256
+ } else {
257
+ const n = parseInt(part.trim(), 10);
258
+ if (n >= 1 && n <= DOMAINS.length) selected.push(DOMAINS[n - 1].id);
259
+ }
260
+ }
261
+
262
+ if (selected.length === 0) {
263
+ log.warn("No valid domains selected — falling back to core.");
264
+ resolve([]);
265
+ return;
266
+ }
267
+
268
+ const names = selected.map((id) => DOMAINS.find((d) => d.id === id).label);
269
+ log.success(`Selected domains: ${colors.cyan}${names.join(", ")}${colors.reset}`);
270
+ process.env._AGI_CUSTOM_DOMAINS = selected.join(",");
271
+ resolve(selected);
272
+ });
273
+ });
274
+ }
275
+
276
+ // Prompt user for install scope: project-local vs global
277
+ async function promptInstallScope(options) {
278
+ // Skip prompt if the user already passed --global or an explicit --path
279
+ if (options.global || options._pathExplicit) {
280
+ return;
281
+ }
282
+
283
+ // Platform compatibility reference
284
+ const PLATFORM_COMPAT = [
285
+ { name: "Gemini CLI", globalDir: "~/.gemini/skills", globalOk: true, note: "" },
286
+ { name: "Claude Code", globalDir: "~/.claude/skills", globalOk: true, note: "" },
287
+ { name: "Cursor", globalDir: "~/.cursor/skills", globalOk: false, note: "reads skills from project dir only" },
288
+ { name: "Codex CLI", globalDir: "~/.codex/skills", globalOk: true, note: "requires CODEX_HOME env var if non-default" },
289
+ { name: "OpenCode", globalDir: "(project dir only)", globalOk: false, note: "global skill dirs not yet supported" },
290
+ { name: "OpenClaw", globalDir: "~/.openclaw/skills", globalOk: true, note: "" },
291
+ { name: "AdaL CLI", globalDir: "~/.adal/skills", globalOk: true, note: "" },
292
+ { name: "Copilot/VS", globalDir: "(project dir only)", globalOk: false, note: "skills loaded per-workspace only" },
293
+ ];
294
+
295
+ console.log(`\n${colors.bright}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
296
+ console.log(`${colors.bright} INSTALL SCOPE${colors.reset}`);
297
+ console.log(`${colors.bright}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}\n`);
298
+
299
+ console.log(` ${colors.bright}Option 1 — Project install (default, safest)${colors.reset}`);
300
+ console.log(` ─────────────────────────────────────────────`);
301
+ console.log(` Skills and agents are installed inside the ${colors.cyan}current directory${colors.reset}.`);
302
+ console.log(` Only this project can use them.\n`);
303
+ console.log(` ${colors.green}✔ Pitfalls to be aware of:${colors.reset}`);
304
+ console.log(` • You must run init again for every new project`);
305
+ console.log(` • Skills are NOT shared across projects`);
306
+ console.log(` • Existing files in this directory ${colors.yellow}may be overwritten${colors.reset} (e.g. AGENTS.md)\n`);
307
+
308
+ console.log(` ${colors.bright}Option 2 — Global install${colors.reset}`);
309
+ console.log(` ─────────────────────────────────────────────`);
310
+ console.log(` Skills installed once in ${colors.cyan}~/.agent${colors.reset} and symlinked into`);
311
+ console.log(` each supported AI platform's global skills directory.\n`);
312
+ console.log(` ${colors.yellow}⚠ Pitfalls to be aware of:${colors.reset}`);
313
+ console.log(` • Existing files in platform dirs ${colors.red}may be overwritten${colors.reset}`);
314
+ console.log(` • Not all platforms support global skill dirs (see table below)`);
315
+ console.log(` • Symlinks may conflict if you later do a project install`);
316
+ console.log(` • Removing skills requires manual cleanup of ~/.agent and symlinks\n`);
317
+
318
+ console.log(` ${colors.bright}Platform Global Install Compatibility:${colors.reset}`);
319
+ console.log(` ${"Platform".padEnd(14)} ${"Global Dir".padEnd(26)} ${"Supported?".padEnd(12)} Notes`);
320
+ console.log(` ${"─".repeat(72)}`);
321
+ for (const p of PLATFORM_COMPAT) {
322
+ const supported = p.globalOk
323
+ ? `${colors.green}✔ Yes${colors.reset} `
324
+ : `${colors.red}✖ No${colors.reset} `;
325
+ const note = p.note ? `${colors.yellow}⚠ ${p.note}${colors.reset}` : "";
326
+ console.log(` ${p.name.padEnd(14)} ${p.globalDir.padEnd(26)} ${supported} ${note}`);
327
+ }
328
+
329
+ console.log(`\n ${colors.bright}${colors.red}⚠ DISCLAIMER${colors.reset}`);
330
+ console.log(` ${"─".repeat(60)}`);
331
+ console.log(` By proceeding you acknowledge that:`);
332
+ console.log(` • This installer may ${colors.yellow}create, overwrite, or symlink files${colors.reset}`);
333
+ console.log(` in your project directory or home directory (~/.agent,`);
334
+ console.log(` ~/.gemini, ~/.claude, ~/.cursor, etc.)`);
335
+ console.log(` • ${colors.red}Existing AGENTS.md, GEMINI.md, CLAUDE.md${colors.reset} and platform`);
336
+ console.log(` skill dirs may be replaced.`);
337
+ console.log(` • The authors of agi-agent-kit ${colors.bright}assume no responsibility${colors.reset}`);
338
+ console.log(` for data loss, configuration conflicts, or any damages`);
339
+ console.log(` resulting from using this installer.`);
340
+ console.log(` • ${colors.cyan}Always back up important files before proceeding.${colors.reset}`);
341
+ console.log(``);
342
+
133
343
  const rl = readline.createInterface({
134
344
  input: process.stdin,
135
345
  output: process.stdout,
136
346
  });
137
347
 
138
348
  return new Promise((resolve) => {
139
- console.log(
140
- `\n${colors.bright}Which pack would you like to install?${colors.reset}\n`,
141
- );
142
- console.log(
143
- ` 1. ${colors.green}core${colors.reset} Essential skills (webcrawler, pdf-reader, qdrant-memory, documentation)`,
144
- );
145
- console.log(
146
- ` 2. ${colors.blue}medium${colors.reset} Core + 89 specialized skills + .agent/ structure`,
147
- );
148
- console.log(
149
- ` 3. ${colors.yellow}full${colors.reset} Complete suite (Medium + 785 community skills from antigravity-awesome-skills)\n`,
150
- );
151
-
152
349
  rl.question(
153
- `Enter choice (1-3) or pack name (default: core): `,
350
+ ` Choose install scope (1=Project / 2=Global, default: 1): `,
154
351
  (answer) => {
155
352
  rl.close();
156
- const choice = answer.trim().toLowerCase();
157
-
158
- if (choice === "1" || choice === "core" || choice === "")
159
- resolve("core");
160
- else if (
161
- choice === "2" ||
162
- choice === "medium" ||
163
- choice === "knowledge"
164
- )
165
- resolve("medium");
166
- else if (choice === "3" || choice === "full") resolve("full");
167
- else {
168
- log.warn("Invalid choice, defaulting to core");
169
- resolve("core");
353
+ const choice = answer.trim();
354
+
355
+ if (choice === "2" || choice.toLowerCase() === "global" || choice.toLowerCase() === "g") {
356
+ const os = require("os");
357
+ options.global = true;
358
+ options.path = path.join(os.homedir(), ".agent");
359
+ console.log(``);
360
+ log.warn(`Global install selected. Symlinks will be created in ~/.gemini/skills, ~/.claude/skills, etc.`);
361
+ log.warn(`Platforms marked ✖ above will NOT pick up global skills automatically.`);
362
+ log.success(`Target directory: ${colors.cyan}${options.path}${colors.reset}`);
363
+ } else {
364
+ log.success(`Project install — target: ${colors.cyan}${options.path}${colors.reset}`);
170
365
  }
366
+ resolve();
171
367
  },
172
368
  );
173
369
  });
174
370
  }
175
371
 
372
+ // Detect existing files that will be overwritten and offer to back them up
373
+ async function backupExistingFiles(targetPath, options = {}) {
374
+ const os = require("os");
375
+ const homeDir = os.homedir();
376
+
377
+ // Files and dirs the installer will create/overwrite in the target path
378
+ const WATCHED = [
379
+ "AGENTS.md", "GEMINI.md", "CLAUDE.md", "OPENCODE.md",
380
+ "COPILOT.md", "OPENCLAW.md", ".env", "directives",
381
+ "execution", "skills", "skill-creator", ".agent",
382
+ ];
383
+
384
+ // For global installs, also check platform dirs that will be symlinked
385
+ const GLOBAL_PLATFORM_DIRS = options.global ? [
386
+ path.join(homeDir, ".gemini", "skills"),
387
+ path.join(homeDir, ".claude", "skills"),
388
+ path.join(homeDir, ".codex", "skills"),
389
+ path.join(homeDir, ".cursor", "skills"),
390
+ path.join(homeDir, ".openclaw", "skills"),
391
+ path.join(homeDir, ".adal", "skills"),
392
+ ] : [];
393
+
394
+ const existing = WATCHED.filter((f) =>
395
+ fs.existsSync(path.join(targetPath, f)),
396
+ );
397
+
398
+ const existingGlobalDirs = GLOBAL_PLATFORM_DIRS.filter((p) =>
399
+ fs.existsSync(p) && !fs.lstatSync(p).isSymbolicLink(),
400
+ );
401
+
402
+ if (existing.length === 0 && existingGlobalDirs.length === 0) {
403
+ return; // Nothing to back up
404
+ }
405
+
406
+ console.log(`\n${colors.bright}━━━ Backup Existing Files ━━━${colors.reset}\n`);
407
+ console.log(` The following items already exist and ${colors.yellow}may be overwritten${colors.reset}:\n`);
408
+
409
+ for (const f of existing) {
410
+ const full = path.join(targetPath, f);
411
+ const isDir = fs.statSync(full).isDirectory();
412
+ console.log(` ${colors.yellow}${isDir ? "📁" : "📄"} ${full}${colors.reset}`);
413
+ }
414
+ for (const d of existingGlobalDirs) {
415
+ console.log(` ${colors.yellow}📁 ${d}${colors.reset} ${colors.red}(real dir — will be replaced by symlink)${colors.reset}`);
416
+ }
417
+
418
+ console.log(`
419
+ ${colors.bright}We strongly recommend backing these up before continuing.${colors.reset}`);
420
+ const backupBase = options.global
421
+ ? path.join(homeDir, `.agi-global-backup-<timestamp>`)
422
+ : path.join(targetPath, `.agi-backup-<timestamp>`);
423
+ console.log(` Backup will be saved to: ${colors.cyan}${backupBase}${colors.reset}\n`);
424
+
425
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
426
+
427
+ return new Promise((resolve) => {
428
+ rl.question(` Create backup now? (Y/n, default: Y): `, (answer) => {
429
+ rl.close();
430
+ const choice = answer.trim().toLowerCase();
431
+
432
+ if (choice === "n" || choice === "no") {
433
+ log.warn("Backup skipped — existing files may be overwritten.");
434
+ resolve();
435
+ return;
436
+ }
437
+
438
+ const ts = new Date().toISOString().replace(/[:.]/g, "-").replace("T", "_").slice(0, 19);
439
+ const backupDir = options.global
440
+ ? path.join(homeDir, `.agi-global-backup-${ts}`)
441
+ : path.join(targetPath, `.agi-backup-${ts}`);
442
+ fs.mkdirSync(backupDir, { recursive: true });
443
+
444
+ let backed = 0;
445
+ for (const f of existing) {
446
+ const src = path.join(targetPath, f);
447
+ const dest = path.join(backupDir, f);
448
+ try { copyDirSync(src, dest) || fs.copyFileSync(src, dest); backed++; } catch (e) {
449
+ log.warn(`Could not back up ${f}: ${e.message}`);
450
+ }
451
+ }
452
+ for (const d of existingGlobalDirs) {
453
+ const name = d.replace(homeDir, "~").replace(/\//g, "_").replace(/^_/, "");
454
+ const dest = path.join(backupDir, name);
455
+ try { copyDirSync(d, dest); backed++; } catch (e) {
456
+ log.warn(`Could not back up ${d}: ${e.message}`);
457
+ }
458
+ }
459
+
460
+ log.success(`Backup created: ${colors.cyan}${backupDir}${colors.reset} (${backed} items)`);
461
+ resolve();
462
+ });
463
+ });
464
+ }
465
+
466
+ // Generate an uninstall script for global installs
467
+ function generateUninstallScript(installPath, options) {
468
+ const os = require("os");
469
+ const homeDir = os.homedir();
470
+ const scriptPath = path.join(installPath, "uninstall-agi.sh");
471
+
472
+ const platformSymlinks = [
473
+ path.join(homeDir, ".gemini", "skills"),
474
+ path.join(homeDir, ".claude", "skills"),
475
+ path.join(homeDir, ".codex", "skills"),
476
+ path.join(homeDir, ".cursor", "skills"),
477
+ path.join(homeDir, ".openclaw", "skills"),
478
+ path.join(homeDir, ".adal", "skills"),
479
+ ];
480
+
481
+ const instructionLinks = ["GEMINI.md", "CLAUDE.md", "OPENCODE.md", "COPILOT.md", "OPENCLAW.md"]
482
+ .map((f) => path.join(installPath, f));
483
+
484
+ // Build the uninstall script content as a plain string to avoid quote escaping issues
485
+ let script = "#!/usr/bin/env bash\n";
486
+ script += "# AGI Agent Kit - Global Uninstaller\n";
487
+ script += "# Generated: " + new Date().toISOString() + "\n";
488
+ script += "# Install path: " + installPath + "\n";
489
+ script += "\n";
490
+ script += "set -e\n";
491
+ script += "\n";
492
+ script += "echo 'AGI Agent Kit - Global Uninstaller'\n";
493
+ script += "echo 'This will remove:'\n";
494
+ script += "echo ' - Skill symlinks from platform dirs (~/.gemini/skills, ~/.claude/skills, etc.)'\n";
495
+ script += "echo ' - Instruction file symlinks (GEMINI.md, CLAUDE.md, etc.)'\n";
496
+ script += "echo ' - The install directory: " + installPath + "'\n";
497
+ script += "echo ''\n";
498
+ script += "read -r -p 'Proceed? (y/N): ' confirm\n";
499
+ script += "if [ \"$confirm\" != 'y' ] && [ \"$confirm\" != 'Y' ]; then echo 'Aborted.'; exit 0; fi\n";
500
+ script += "\n";
501
+ script += "echo 'Removing platform skill symlinks...'\n";
502
+ for (const p of platformSymlinks) {
503
+ script += "[ -L '" + p + "' ] && rm '" + p + "' && echo ' Removed: " + p + "' || echo ' Skipped (not a symlink): " + p + "'\n";
504
+ }
505
+ script += "\n";
506
+ script += "echo 'Removing instruction file symlinks...'\n";
507
+ for (const p of instructionLinks) {
508
+ script += "[ -L '" + p + "' ] && rm '" + p + "' && echo ' Removed: " + p + "' || echo ' Skipped: " + p + "'\n";
509
+ }
510
+ script += "\n";
511
+ script += "echo 'Removing install directory: " + installPath + "'\n";
512
+ script += "rm -rf '" + installPath + "'\n";
513
+ script += "echo 'AGI Agent Kit global install removed successfully.'\n";
514
+ script += "echo 'Note: your .env and any backups were NOT removed.'\n";
515
+
516
+ fs.writeFileSync(scriptPath, script, { mode: 0o755 });
517
+ log.success("Uninstall script created: " + colors.cyan + scriptPath + colors.reset);
518
+ console.log(" Run it anytime to cleanly remove this global install:");
519
+ console.log(" " + colors.yellow + "bash " + scriptPath + colors.reset + "\n");
520
+ }
521
+
522
+ // Prompt user for local Qdrant + Ollama usage
523
+ async function promptLocalInfrastructure() {
524
+ // ── Step 1: Detect what's already running ──────────────────────────────────
525
+ const detected = { ollama: false, docker: false, qdrant: false };
526
+ let ollamaUrl = "http://localhost:11434";
527
+ let qdrantUrl = "http://localhost:6333";
528
+
529
+ try { execSync("ollama --version", { stdio: "pipe" }); detected.ollama = true; } catch (e) {}
530
+ try { execSync("docker --version", { stdio: "pipe" }); detected.docker = true; } catch (e) {}
531
+ try {
532
+ execSync(`curl -sf ${qdrantUrl}/healthz`, { stdio: "pipe", timeout: 3000 });
533
+ detected.qdrant = true;
534
+ } catch (e) {}
535
+
536
+ const icon = (ok) => ok ? `${colors.green}✔ detected${colors.reset}` : `${colors.red}✖ not found${colors.reset}`;
537
+
538
+ console.log(`\n${colors.bright}━━━ Local Memory Infrastructure (Qdrant + Ollama) ━━━${colors.reset}\n`);
539
+ console.log(` This toolkit supports a ${colors.cyan}local vector memory system${colors.reset} powered by:`);
540
+ console.log(` • ${colors.green}Qdrant${colors.reset} — local vector database for semantic agent memory`);
541
+ console.log(` • ${colors.green}Ollama${colors.reset} — local LLM runtime for private embeddings (nomic-embed-text)\n`);
542
+ console.log(` ${colors.bright}Current status:${colors.reset}`);
543
+ console.log(` Ollama CLI ${icon(detected.ollama)}`);
544
+ console.log(` Docker CLI ${icon(detected.docker)}`);
545
+ console.log(` Qdrant API ${icon(detected.qdrant)} (${qdrantUrl})\n`);
546
+
547
+ // ── Step 2: Ask enable/skip ────────────────────────────────────────────────
548
+ const allReady = detected.ollama && detected.qdrant;
549
+ if (allReady) {
550
+ console.log(` ${colors.green}✔ Both services detected — enabling memory is recommended.${colors.reset}\n`);
551
+ }
552
+
553
+ console.log(` ${colors.bright}1. Yes${colors.reset} — enable memory (Qdrant + Ollama)`);
554
+ console.log(` ${colors.bright}2. Skip${colors.reset} — disable for now (can enable later in .env)\n`);
555
+
556
+ const answer1 = await _ask(` Enable memory? (1/2, default: 1): `);
557
+ const wantsMemory = !(answer1 === "2" || ["skip","no","n"].includes(answer1.toLowerCase()));
558
+
559
+ if (!wantsMemory) {
560
+ log.info("Memory infrastructure skipped.");
561
+ return { useLocal: false, detected, ollamaUrl, qdrantUrl };
562
+ }
563
+
564
+ // ── Step 3: Per-service resolution when not detected ──────────────────────
565
+ if (!detected.ollama) {
566
+ console.log(`\n ${colors.yellow}⚠ Ollama not detected at localhost.${colors.reset}`);
567
+ console.log(` ${colors.bright}What would you like to do?${colors.reset}`);
568
+ console.log(` ${colors.bright}1.${colors.reset} I'll install it locally → ${colors.cyan}https://ollama.com/download${colors.reset}`);
569
+ console.log(` ${colors.bright}2.${colors.reset} I have it on a custom URL (remote server / Docker host)\n`);
570
+ const a = await _ask(` Choice (1/2, default: 1): `);
571
+ if (a === "2") {
572
+ const url = await _ask(` Enter Ollama URL (e.g. http://192.168.1.10:11434): `);
573
+ if (url.trim()) {
574
+ ollamaUrl = url.trim().replace(/\/$/, "");
575
+ log.success(`Ollama URL set to: ${colors.cyan}${ollamaUrl}${colors.reset}`);
576
+ // Verify it's reachable
577
+ try {
578
+ execSync(`curl -sf ${ollamaUrl}/api/tags`, { stdio: "pipe", timeout: 4000 });
579
+ log.success(`Ollama reachable at ${ollamaUrl}`);
580
+ detected.ollama = true;
581
+ } catch (e) {
582
+ log.warn(`Could not reach Ollama at ${ollamaUrl} — make sure it's running.`);
583
+ }
584
+ }
585
+ } else {
586
+ console.log(` ${colors.cyan}Install Ollama, then run:${colors.reset} ${colors.yellow}ollama pull nomic-embed-text${colors.reset}`);
587
+ console.log(` Memory will be written to .env — start Ollama before using the agent.\n`);
588
+ }
589
+ }
590
+
591
+ if (!detected.qdrant) {
592
+ console.log(`\n ${colors.yellow}⚠ Qdrant not detected at ${qdrantUrl}.${colors.reset}`);
593
+ console.log(` ${colors.bright}What would you like to do?${colors.reset}`);
594
+ console.log(` ${colors.bright}1.${colors.reset} I'll run it locally via Docker`);
595
+ console.log(` ${colors.yellow}docker run -d -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant${colors.reset}`);
596
+ console.log(` ${colors.bright}2.${colors.reset} I have Qdrant on a custom URL (Qdrant Cloud, remote server, etc.)\n`);
597
+ const a = await _ask(` Choice (1/2, default: 1): `);
598
+ if (a === "2") {
599
+ const url = await _ask(` Enter Qdrant URL (e.g. https://xyz.qdrant.tech or http://10.0.0.5:6333): `);
600
+ if (url.trim()) {
601
+ qdrantUrl = url.trim().replace(/\/$/, "");
602
+ const apiKey = await _ask(` Qdrant API key (leave blank if not required): `);
603
+ log.success(`Qdrant URL set to: ${colors.cyan}${qdrantUrl}${colors.reset}`);
604
+ // Verify
605
+ try {
606
+ const header = apiKey.trim() ? `-H 'api-key: ${apiKey.trim()}'` : "";
607
+ execSync(`curl -sf ${header} ${qdrantUrl}/healthz`, { stdio: "pipe", timeout: 4000 });
608
+ log.success(`Qdrant reachable at ${qdrantUrl}`);
609
+ detected.qdrant = true;
610
+ } catch (e) {
611
+ log.warn(`Could not reach Qdrant at ${qdrantUrl} — check URL and API key.`);
612
+ }
613
+ return { useLocal: true, detected, ollamaUrl, qdrantUrl, qdrantApiKey: apiKey.trim() };
614
+ }
615
+ } else {
616
+ if (!detected.docker) {
617
+ console.log(`\n ${colors.yellow}⚠ Docker also not found.${colors.reset} Install Docker Desktop first:`);
618
+ console.log(` ${colors.cyan}https://www.docker.com/products/docker-desktop${colors.reset}`);
619
+ }
620
+ console.log(` Memory config will be written to .env — start Qdrant before using the agent.\n`);
621
+ }
622
+ }
623
+
624
+ log.success("Memory infrastructure configured.");
625
+ return { useLocal: true, detected, ollamaUrl, qdrantUrl };
626
+ }
627
+
628
+ // Helper: promisified readline question
629
+ function _ask(question) {
630
+ return new Promise((resolve) => {
631
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
632
+ rl.question(question, (answer) => { rl.close(); resolve(answer.trim()); });
633
+ });
634
+ }
635
+
636
+ // Write (or merge) a .env file with memory configuration
637
+ function writeEnvFile(targetPath, infraChoice) {
638
+ const envPath = path.join(targetPath, ".env");
639
+ const envExamplePath = path.join(
640
+ __dirname,
641
+ "..",
642
+ "templates",
643
+ "base",
644
+ ".env.example",
645
+ );
646
+
647
+ // Build the memory block
648
+ const memoryEnabled = infraChoice.useLocal ? "true" : "false";
649
+ const qdrantUrl = infraChoice.qdrantUrl || "http://localhost:6333";
650
+ const qdrantApiKey = infraChoice.qdrantApiKey || "";
651
+ const ollamaUrl = infraChoice.ollamaUrl || "http://localhost:11434";
652
+
653
+ const memoryBlock = [
654
+ "",
655
+ "# ============================================================",
656
+ "# Agent Memory Configuration (Qdrant & Local LLM)",
657
+ "# ============================================================",
658
+ `MEMORY_ENABLED=${memoryEnabled}`,
659
+ `QDRANT_URL=${qdrantUrl}`,
660
+ `QDRANT_API_KEY=${qdrantApiKey}`,
661
+ "QDRANT_COLLECTION=agent_memory",
662
+ "EMBEDDING_PROVIDER=ollama",
663
+ `OLLAMA_URL=${ollamaUrl}`,
664
+ "EMBEDDING_MODEL=nomic-embed-text",
665
+ "CACHE_THRESHOLD=0.92",
666
+ "CACHE_TTL_DAYS=7",
667
+ "",
668
+ ].join("\n");
669
+
670
+ if (fs.existsSync(envPath)) {
671
+ // .env already exists — append the memory block only if not already present
672
+ const existing = fs.readFileSync(envPath, "utf8");
673
+ if (existing.includes("MEMORY_ENABLED")) {
674
+ // Already configured — patch just the MEMORY_ENABLED line
675
+ const patched = existing.replace(
676
+ /^MEMORY_ENABLED=.*/m,
677
+ `MEMORY_ENABLED=${memoryEnabled}`,
678
+ );
679
+ fs.writeFileSync(envPath, patched, "utf8");
680
+ log.success(`.env updated: MEMORY_ENABLED=${memoryEnabled}`);
681
+ } else {
682
+ // Append the new block
683
+ fs.appendFileSync(envPath, memoryBlock, "utf8");
684
+ log.success(`.env: memory configuration appended (MEMORY_ENABLED=${memoryEnabled})`);
685
+ }
686
+ } else {
687
+ // Create a fresh .env from the example template, then append memory block
688
+ let base = "";
689
+ if (fs.existsSync(envExamplePath)) {
690
+ base = fs.readFileSync(envExamplePath, "utf8");
691
+ } else {
692
+ base = "# AGI Agent Kit — Environment Configuration\n# Fill in your API keys below\n";
693
+ }
694
+ fs.writeFileSync(envPath, base + memoryBlock, "utf8");
695
+ log.success(`.env created (MEMORY_ENABLED=${memoryEnabled})`);
696
+ }
697
+ }
698
+
176
699
  // Prompt for update components
177
700
  async function promptUpdateSelection() {
178
701
  return new Promise((resolve) => {
@@ -228,48 +751,108 @@ function isSkillDir(dirPath) {
228
751
  // Supports both flat (core/) and categorized (knowledge/frontend/react-patterns/) layouts.
229
752
  // Skills are always installed flat at the destination: skills/<skill-name>/
230
753
  function copySkills(targetPath, pack, templatesPath) {
231
- log.header(`Installing ${PACKS[pack].name} skills...`);
754
+ const destSkillsPath = path.join(targetPath, "skills");
755
+
756
+ // Helper: install all skills inside a category directory
757
+ function installCategoryDir(categoryPath, categoryName) {
758
+ if (!fs.existsSync(categoryPath)) return 0;
759
+ let count = 0;
760
+ const entries = fs.readdirSync(categoryPath, { withFileTypes: true });
761
+ for (const entry of entries) {
762
+ if (!entry.isDirectory()) continue;
763
+ const entryPath = path.join(categoryPath, entry.name);
764
+ if (isSkillDir(entryPath)) {
765
+ // Direct skill (e.g. core/webcrawler/)
766
+ const dest = path.join(destSkillsPath, entry.name);
767
+ if (copyDirSync(entryPath, dest)) { count++; }
768
+ } else {
769
+ // Category dir (e.g. knowledge/frontend/) — recurse one level
770
+ const skillDirs = fs.readdirSync(entryPath, { withFileTypes: true })
771
+ .filter((d) => d.isDirectory() && isSkillDir(path.join(entryPath, d.name)));
772
+ for (const skill of skillDirs) {
773
+ const src = path.join(entryPath, skill.name);
774
+ const dest = path.join(destSkillsPath, skill.name);
775
+ if (copyDirSync(src, dest)) { count++; }
776
+ }
777
+ }
778
+ }
779
+ return count;
780
+ }
232
781
 
233
- const skillGroups = PACKS[pack].skills;
782
+ if (pack === "custom") {
783
+ // ── Custom pack: always install core, then per-domain selections ──
784
+ log.header("Installing Custom pack (core + selected domains)...");
234
785
 
235
- for (const group of skillGroups) {
236
- const srcSkillsPath = path.join(templatesPath, "skills", group);
237
- const destSkillsPath = path.join(targetPath, "skills");
786
+ // 1. Core skills always
787
+ const coreCount = installCategoryDir(
788
+ path.join(templatesPath, "skills", "core"), "core"
789
+ );
790
+ log.success(`Core: ${coreCount} skills installed`);
238
791
 
239
- if (fs.existsSync(srcSkillsPath)) {
240
- const entries = fs
241
- .readdirSync(srcSkillsPath, { withFileTypes: true })
242
- .filter((d) => d.isDirectory());
792
+ // 2. Selected domains from env (set by promptDomainSelection)
793
+ const selected = (process.env._AGI_CUSTOM_DOMAINS || "").split(",").filter(Boolean);
243
794
 
244
- for (const entry of entries) {
245
- const entryPath = path.join(srcSkillsPath, entry.name);
795
+ if (selected.length === 0) {
796
+ log.warn("No domains selected core only install.");
797
+ return;
798
+ }
246
799
 
247
- if (isSkillDir(entryPath)) {
248
- // Direct skill directory (e.g., core/webcrawler/)
249
- const dest = path.join(destSkillsPath, entry.name);
250
- if (copyDirSync(entryPath, dest)) {
251
- log.success(`Installed skill: ${entry.name}`);
252
- }
253
- } else {
254
- // Category directory (e.g., knowledge/frontend/) — recurse one level
255
- const categorySkills = fs
256
- .readdirSync(entryPath, { withFileTypes: true })
257
- .filter(
258
- (d) =>
259
- d.isDirectory() && isSkillDir(path.join(entryPath, d.name)),
260
- );
261
-
262
- for (const skill of categorySkills) {
263
- const src = path.join(entryPath, skill.name);
264
- const dest = path.join(destSkillsPath, skill.name);
265
- if (copyDirSync(src, dest)) {
266
- log.success(`Installed skill: ${skill.name} (${entry.name})`);
800
+ for (const domainId of selected) {
801
+ let total = 0;
802
+ // Install from knowledge/<domain> if it exists
803
+ const knPath = path.join(templatesPath, "skills", "knowledge", domainId);
804
+ if (fs.existsSync(knPath)) {
805
+ const n = installCategoryDir(knPath, domainId);
806
+ total += n;
807
+ }
808
+ // Install from extended/<domain> if it exists
809
+ const exPath = path.join(templatesPath, "skills", "extended", domainId);
810
+ if (fs.existsSync(exPath)) {
811
+ const n = installCategoryDir(exPath, domainId);
812
+ total += n;
813
+ }
814
+ const domainInfo = DOMAINS.find((d) => d.id === domainId);
815
+ const label = domainInfo ? domainInfo.label : domainId;
816
+ if (total > 0) {
817
+ log.success(`Domain ${colors.cyan}${label}${colors.reset}: ${total} skills installed`);
818
+ } else {
819
+ log.warn(`Domain ${label}: no skills found (check template paths)`);
820
+ }
821
+ }
822
+
823
+ } else {
824
+ // ── Standard pack: iterate skill groups ──
825
+ log.header(`Installing ${PACKS[pack].name} skills...`);
826
+ const skillGroups = PACKS[pack].skills;
827
+
828
+ for (const group of skillGroups) {
829
+ const srcSkillsPath = path.join(templatesPath, "skills", group);
830
+ if (fs.existsSync(srcSkillsPath)) {
831
+ const entries = fs.readdirSync(srcSkillsPath, { withFileTypes: true })
832
+ .filter((d) => d.isDirectory());
833
+
834
+ for (const entry of entries) {
835
+ const entryPath = path.join(srcSkillsPath, entry.name);
836
+ if (isSkillDir(entryPath)) {
837
+ const dest = path.join(destSkillsPath, entry.name);
838
+ if (copyDirSync(entryPath, dest)) {
839
+ log.success(`Installed skill: ${entry.name}`);
840
+ }
841
+ } else {
842
+ const categorySkills = fs.readdirSync(entryPath, { withFileTypes: true })
843
+ .filter((d) => d.isDirectory() && isSkillDir(path.join(entryPath, d.name)));
844
+ for (const skill of categorySkills) {
845
+ const src = path.join(entryPath, skill.name);
846
+ const dest = path.join(destSkillsPath, skill.name);
847
+ if (copyDirSync(src, dest)) {
848
+ log.success(`Installed skill: ${skill.name} (${entry.name})`);
849
+ }
267
850
  }
268
851
  }
269
852
  }
853
+ } else {
854
+ log.warn(`Skills directory not found: ${srcSkillsPath}`);
270
855
  }
271
- } else {
272
- log.warn(`Skills directory not found: ${srcSkillsPath}`);
273
856
  }
274
857
  }
275
858
  }
@@ -332,7 +915,7 @@ function copyBaseFiles(targetPath, templatesPath, options) {
332
915
  }
333
916
 
334
917
  // Create symlinks for multi-platform support
335
- function createSymlinks(targetPath) {
918
+ function createSymlinks(targetPath, options = {}) {
336
919
  log.header("Creating symlinks...");
337
920
 
338
921
  const agentsMd = path.join(targetPath, "AGENTS.md");
@@ -372,19 +955,21 @@ function createSymlinks(targetPath) {
372
955
  return;
373
956
  }
374
957
 
958
+ const homeDir = os.homedir() || process.env.HOME || process.env.USERPROFILE || "";
959
+
375
960
  const platformDirs = [
376
- { platform: ".claude/skills", platformName: "Claude Code" },
377
- { platform: ".gemini/skills", platformName: "Gemini CLI" },
378
- { platform: ".codex/skills", platformName: "Codex CLI" },
379
- { platform: ".cursor/skills", platformName: "Cursor" },
380
- { platform: ".adal/skills", platformName: "AdaL CLI" },
381
- { platform: ".openclaw/skills", platformName: "OpenClaw" },
961
+ { platform: ".claude/skills", platformName: "Claude Code", globalPath: path.join(homeDir, ".claude", "skills") },
962
+ { platform: ".gemini/skills", platformName: "Gemini CLI", globalPath: path.join(homeDir, ".gemini", "skills") },
963
+ { platform: ".codex/skills", platformName: "Codex CLI", globalPath: path.join(process.env.CODEX_HOME || homeDir, ".codex", "skills") },
964
+ { platform: ".cursor/skills", platformName: "Cursor", globalPath: path.join(homeDir, ".cursor", "skills") },
965
+ { platform: ".adal/skills", platformName: "AdaL CLI", globalPath: path.join(homeDir, ".adal", "skills") },
966
+ { platform: ".openclaw/skills", platformName: "OpenClaw", globalPath: path.join(homeDir, ".openclaw", "skills") },
382
967
  ];
383
968
 
384
- for (const { platform, platformName } of platformDirs) {
385
- const parts = platform.split("/");
386
- const parentDir = path.join(targetPath, parts[0]);
387
- const linkPath = path.join(targetPath, platform);
969
+ for (const info of platformDirs) {
970
+ const { platform, platformName, globalPath } = info;
971
+ const linkPath = options.global ? globalPath : path.join(targetPath, platform);
972
+ const parentDir = path.dirname(linkPath);
388
973
 
389
974
  try {
390
975
  // Create parent directory (e.g., .claude/)
@@ -513,6 +1098,62 @@ function setupPythonEnv(targetPath) {
513
1098
  log.info(`Activate with: ${colors.yellow}${activateCmd}${colors.reset}`);
514
1099
  }
515
1100
 
1101
+ // Ask user about platform orchestration features and apply them
1102
+ async function promptPlatformFeatures(targetPath) {
1103
+ const features = { agentTeams: false };
1104
+
1105
+ console.log(`\n${colors.bright}━━━ Platform Orchestration Features ━━━${colors.reset}\n`);
1106
+ console.log(` ${colors.bright}Agent Teams${colors.reset} (Claude Code only)`);
1107
+ console.log(` Enables true parallel multi-agent execution — multiple specialist`);
1108
+ console.log(` agents (frontend, backend, security, etc.) work simultaneously`);
1109
+ console.log(` rather than one at a time. Best for complex, multi-domain tasks.\n`);
1110
+ console.log(` ${colors.yellow}Requires:${colors.reset} Claude Code with experimental features enabled.`);
1111
+ console.log(` ${colors.green}Recommended${colors.reset} if you plan to use @orchestrator or specialist agents.\n`);
1112
+ console.log(` ${colors.bright}1. Enable Agent Teams${colors.reset} — writes to .claude/settings.json (recommended)`);
1113
+ console.log(` ${colors.bright}2. Skip${colors.reset} — you can enable it manually later\n`);
1114
+
1115
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
1116
+
1117
+ return new Promise((resolve) => {
1118
+ rl.question(` Enable Agent Teams? (1/2, default: 1): `, (answer) => {
1119
+ rl.close();
1120
+ const choice = answer.trim();
1121
+
1122
+ if (choice === "2" || choice.toLowerCase() === "skip" || choice.toLowerCase() === "n") {
1123
+ log.info("Agent Teams skipped. Enable later by editing .claude/settings.json.");
1124
+ console.log(` Add this to ${colors.cyan}.claude/settings.json${colors.reset}:`);
1125
+ console.log(` ${colors.yellow}{ "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }${colors.reset}\n`);
1126
+ resolve(features);
1127
+ return;
1128
+ }
1129
+
1130
+ // Write .claude/settings.json
1131
+ try {
1132
+ const claudeDir = path.join(targetPath, ".claude");
1133
+ fs.mkdirSync(claudeDir, { recursive: true });
1134
+ const settingsPath = path.join(claudeDir, "settings.json");
1135
+
1136
+ // Merge with existing settings if present
1137
+ let existing = {};
1138
+ if (fs.existsSync(settingsPath)) {
1139
+ try { existing = JSON.parse(fs.readFileSync(settingsPath, "utf8")); } catch (e) {}
1140
+ }
1141
+ existing.env = existing.env || {};
1142
+ existing.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
1143
+
1144
+ fs.writeFileSync(settingsPath, JSON.stringify(existing, null, 2), "utf8");
1145
+ features.agentTeams = true;
1146
+ log.success(`Agent Teams enabled → ${colors.cyan}${settingsPath}${colors.reset}`);
1147
+ console.log(` Restart Claude Code in this directory to activate.\n`);
1148
+ } catch (e) {
1149
+ log.warn(`Could not write .claude/settings.json: ${e.message}`);
1150
+ }
1151
+
1152
+ resolve(features);
1153
+ });
1154
+ });
1155
+ }
1156
+
516
1157
  // Auto-run platform setup wizard to pre-configure environment
517
1158
  function runPlatformSetup(targetPath) {
518
1159
  const setupScript = path.join(
@@ -561,14 +1202,166 @@ function runPlatformSetup(targetPath) {
561
1202
  }
562
1203
  }
563
1204
 
1205
+ // Verify memory system (Qdrant + Ollama) after .env is written
1206
+ function verifyMemorySetup(targetPath) {
1207
+ log.header("Verifying memory system (Qdrant + Ollama)...");
1208
+
1209
+ const bootScript = path.join(targetPath, "execution", "session_boot.py");
1210
+
1211
+ if (!fs.existsSync(bootScript)) {
1212
+ log.warn("session_boot.py not found — skipping memory verification.");
1213
+ console.log(
1214
+ ` You can verify later: ${colors.yellow}python3 execution/session_boot.py --auto-fix${colors.reset}`,
1215
+ );
1216
+ return false;
1217
+ }
1218
+
1219
+ const isWindows = process.platform === "win32";
1220
+ const venvPython = isWindows
1221
+ ? path.join(targetPath, ".venv", "Scripts", "python")
1222
+ : path.join(targetPath, ".venv", "bin", "python3");
1223
+ const pythonCmd = fs.existsSync(venvPython) ? `"${venvPython}"` : "python3";
1224
+
1225
+ try {
1226
+ const output = execSync(
1227
+ `${pythonCmd} "${bootScript}" --auto-fix`,
1228
+ { stdio: "pipe", timeout: 60000, cwd: targetPath },
1229
+ ).toString().trim();
1230
+ console.log(` ${output}`);
1231
+ return true;
1232
+ } catch (e) {
1233
+ // session_boot exits non-zero when services aren't running — show its output
1234
+ const output = (e.stdout || e.stderr || "").toString().trim();
1235
+ if (output) {
1236
+ console.log(`\n${output}\n`);
1237
+ }
1238
+ console.log(` ${colors.yellow}⚠ Memory services not detected yet.${colors.reset}`);
1239
+ console.log(`
1240
+ ${colors.bright}Follow these steps to get Qdrant + Ollama running:${colors.reset}
1241
+
1242
+ ${colors.bright}Step 1 — Install Ollama (if not already installed)${colors.reset}
1243
+ ${colors.cyan}https://ollama.com/download${colors.reset}
1244
+ Download and install for your OS, then come back here.
1245
+
1246
+ ${colors.bright}Step 2 — Start Ollama in a NEW terminal tab/window${colors.reset}
1247
+ ${colors.yellow}ollama serve${colors.reset}
1248
+ ${colors.red}⚠ IMPORTANT:${colors.reset} This command runs in the foreground and must stay open.
1249
+ Open a new terminal tab (Cmd+T on Mac) and leave this running there.
1250
+ You will see logs like "Listening on 127.0.0.1:11434" — that means it's ready.
1251
+
1252
+ ${colors.bright}Step 3 — Start Qdrant via Docker (in your original terminal)${colors.reset}
1253
+ ${colors.yellow}docker run -d -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant${colors.reset}
1254
+ The ${colors.cyan}-d${colors.reset} flag runs it in the background. Docker Desktop must be running first.
1255
+ Verify it's up: ${colors.yellow}curl http://localhost:6333/healthz${colors.reset} → should return ${colors.green}{"title":"qdrant"}${colors.reset}
1256
+
1257
+ ${colors.bright}Step 4 — Re-run the memory verification${colors.reset}
1258
+ ${colors.yellow}python3 execution/session_boot.py --auto-fix${colors.reset}
1259
+ This will pull the embedding model and create the memory collections automatically.
1260
+ `);
1261
+ return false;
1262
+ }
1263
+ }
1264
+
564
1265
  // Main init function
1266
+ // Detect an existing AGI Agent Kit install and ask the user what to do
1267
+ async function detectExistingInstall(targetPath) {
1268
+ const agentsMd = path.join(targetPath, "AGENTS.md");
1269
+ const versionFile = path.join(targetPath, ".agi-version");
1270
+
1271
+ if (!fs.existsSync(agentsMd)) {
1272
+ return { action: "install" }; // Clean install
1273
+ }
1274
+
1275
+ // Read installed version if available
1276
+ let installedVersion = "unknown";
1277
+ if (fs.existsSync(versionFile)) {
1278
+ installedVersion = fs.readFileSync(versionFile, "utf8").trim();
1279
+ } else {
1280
+ // Fallback: try to grep it from AGENTS.md
1281
+ const mdContent = fs.readFileSync(agentsMd, "utf8");
1282
+ const match = mdContent.match(/agi-agent-kit[\s@v]+([\d.]+)/);
1283
+ if (match) installedVersion = match[1];
1284
+ }
1285
+
1286
+ // Current package version
1287
+ let incomingVersion = "unknown";
1288
+ try {
1289
+ const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf8"));
1290
+ incomingVersion = pkg.version || "unknown";
1291
+ } catch (e) {}
1292
+
1293
+ console.log(`\n${colors.bright}━━━ Existing Installation Detected ━━━${colors.reset}\n`);
1294
+ console.log(` ${colors.yellow}AGI Agent Kit is already installed in this directory.${colors.reset}`);
1295
+ console.log(` Installed version : ${colors.cyan}${installedVersion}${colors.reset}`);
1296
+ console.log(` Incoming version : ${colors.green}${incomingVersion}${colors.reset}\n`);
1297
+
1298
+ const isSameVersion = installedVersion === incomingVersion;
1299
+ if (isSameVersion) {
1300
+ console.log(` ${colors.yellow}⚠ Same version detected.${colors.reset} Reinstalling will overwrite current files.\n`);
1301
+ } else if (installedVersion !== "unknown" && incomingVersion !== "unknown") {
1302
+ const [iMaj, iMin, iPatch] = installedVersion.split(".").map(Number);
1303
+ const [nMaj, nMin, nPatch] = incomingVersion.split(".").map(Number);
1304
+ const isDowngrade = nMaj < iMaj || (nMaj === iMaj && nMin < iMin) || (nMaj === iMaj && nMin === iMin && nPatch < iPatch);
1305
+ if (isDowngrade) {
1306
+ console.log(` ${colors.red}⚠ WARNING: Incoming version is OLDER than installed.${colors.reset}`);
1307
+ console.log(` You are about to downgrade. This may break things.\n`);
1308
+ }
1309
+ }
1310
+
1311
+ console.log(` What would you like to do?\n`);
1312
+ console.log(` ${colors.green}1. Update${colors.reset} — refresh skills, directives & execution scripts`);
1313
+ console.log(` ${colors.cyan}Preserves${colors.reset} your .env, custom skills, and .agent/ folder`);
1314
+ console.log(` ${colors.yellow}2. Reinstall${colors.reset} — full overwrite of all files (${colors.red}destructive${colors.reset})`);
1315
+ console.log(` You will be offered a backup before anything is changed`);
1316
+ console.log(` ${colors.red}3. Cancel${colors.reset} — abort, make no changes\n`);
1317
+
1318
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
1319
+
1320
+ return new Promise((resolve) => {
1321
+ rl.question(` Your choice (1/2/3, default: 1): `, (answer) => {
1322
+ rl.close();
1323
+ const choice = answer.trim();
1324
+
1325
+ if (choice === "3" || choice.toLowerCase() === "cancel") {
1326
+ log.info("Install cancelled.");
1327
+ process.exit(0);
1328
+ } else if (choice === "2" || choice.toLowerCase() === "reinstall") {
1329
+ log.warn("Full reinstall selected — all existing files will be overwritten.");
1330
+ resolve({ action: "reinstall", installedVersion, incomingVersion });
1331
+ } else {
1332
+ // Default: update
1333
+ log.success(`Update selected — refreshing to v${incomingVersion}, preserving .env and custom files.`);
1334
+ resolve({ action: "update", installedVersion, incomingVersion });
1335
+ }
1336
+ });
1337
+ });
1338
+ }
1339
+
565
1340
  async function init(options) {
566
1341
  log.header("🚀 AGI Agent Kit Initializer");
567
1342
 
1343
+ if (options.ci) {
1344
+ log.info("CI mode: all prompts skipped, using safe defaults (pack=core, memory=disabled, teams=skip).");
1345
+ }
1346
+
1347
+ // Detect existing install FIRST — before any scope/pack prompts
1348
+ const existingInstall = options.ci
1349
+ ? { action: "install" }
1350
+ : await detectExistingInstall(options.path);
1351
+ const isUpdate = existingInstall.action === "update";
1352
+
1353
+ // Ask install scope (project vs global) — skip if already set via CLI flag
1354
+ if (!options.ci) await promptInstallScope(options);
1355
+
1356
+ // Offer backup only for reinstall (update preserves files, and backup is implied)
1357
+ if (!isUpdate && !options.ci) {
1358
+ await backupExistingFiles(options.path, options);
1359
+ }
1360
+
568
1361
  // Determine pack
569
1362
  let pack = options.pack;
570
1363
  if (!pack) {
571
- pack = await promptPackSelection();
1364
+ pack = options.ci ? "core" : await promptPackSelection();
572
1365
  }
573
1366
 
574
1367
  if (!PACKS[pack]) {
@@ -597,7 +1390,7 @@ async function init(options) {
597
1390
 
598
1391
  // Create symlinks
599
1392
  if (options.symlinks) {
600
- createSymlinks(options.path);
1393
+ createSymlinks(options.path, options);
601
1394
  }
602
1395
 
603
1396
  // Copy .agent/ for full pack
@@ -608,21 +1401,87 @@ async function init(options) {
608
1401
  // Setup Python environment
609
1402
  setupPythonEnv(options.path);
610
1403
 
1404
+ // Ask user about local Qdrant + Ollama and write .env
1405
+ // Skip on update (preserve existing .env settings)
1406
+ let infraChoice = { useLocal: false, detected: {}, ollamaUrl: "http://localhost:11434", qdrantUrl: "http://localhost:6333" };
1407
+ if (!isUpdate && !options.ci) {
1408
+ infraChoice = await promptLocalInfrastructure();
1409
+ writeEnvFile(options.path, infraChoice);
1410
+ } else if (!isUpdate && options.ci) {
1411
+ // CI: write .env with memory disabled — no Qdrant/Ollama available
1412
+ writeEnvFile(options.path, infraChoice);
1413
+ log.info("CI mode: memory disabled in .env.");
1414
+ } else {
1415
+ // On update, read existing MEMORY_ENABLED from .env so hints stay accurate
1416
+ const envPath = path.join(options.path, ".env");
1417
+ if (fs.existsSync(envPath)) {
1418
+ const envContent = fs.readFileSync(envPath, "utf8");
1419
+ const memMatch = envContent.match(/^MEMORY_ENABLED=(.+)$/m);
1420
+ infraChoice.useLocal = memMatch && memMatch[1].trim() === "true";
1421
+ }
1422
+ log.info("Update mode: .env preserved, memory setting unchanged.");
1423
+ }
1424
+
1425
+ // If memory enabled, verify Qdrant + Ollama are up and configured
1426
+ let memoryVerified = false;
1427
+ if (infraChoice.useLocal) {
1428
+ memoryVerified = verifyMemorySetup(options.path);
1429
+ }
1430
+
1431
+ // Ask about platform features (Agent Teams, MCP, etc.) BEFORE running setup wizard
1432
+ const platformFeatures = options.ci
1433
+ ? { agentTeams: false }
1434
+ : await promptPlatformFeatures(options.path);
1435
+
611
1436
  // Auto-run platform setup wizard
612
1437
  runPlatformSetup(options.path);
613
1438
 
1439
+ // For global installs: generate an uninstall script
1440
+ if (options.global) {
1441
+ generateUninstallScript(options.path, options);
1442
+ }
1443
+
1444
+ // Write version stamp so future runs can detect the installed version
1445
+ try {
1446
+ const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf8"));
1447
+ fs.writeFileSync(path.join(options.path, ".agi-version"), pkg.version || "unknown", "utf8");
1448
+ } catch (e) { /* non-fatal */ }
1449
+
614
1450
  // Final message
615
- log.header("✨ Installation complete!");
1451
+ const actionLabel = isUpdate ? "🔄 Update complete!" : "✨ Installation complete!";
1452
+ log.header(actionLabel);
1453
+
1454
+ let memoryHint;
1455
+ if (!infraChoice.useLocal) {
1456
+ memoryHint = ` 3. ${colors.yellow}Memory is DISABLED${colors.reset}. To enable later, set ${colors.cyan}MEMORY_ENABLED=true${colors.reset} in ${colors.cyan}.env${colors.reset}.`;
1457
+ } else if (memoryVerified) {
1458
+ // Services were already up and verified during install
1459
+ memoryHint = ` 3. ${colors.green}✔ Memory is READY${colors.reset} — Qdrant + Ollama verified during setup.\n Run at any time to check: ${colors.yellow}python3 execution/session_boot.py${colors.reset}`;
1460
+ } else {
1461
+ // User chose to enable but services weren't up yet
1462
+ memoryHint = ` 3. ${colors.bright}Start memory services${colors.reset} (open a ${colors.red}NEW terminal tab${colors.reset} for Ollama):\n\n ${colors.yellow}# Terminal tab 1 — leave this running:${colors.reset}\n ${colors.yellow}ollama serve${colors.reset}\n\n ${colors.yellow}# Terminal tab 2 — run once:${colors.reset}\n ${colors.yellow}docker run -d -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant${colors.reset}\n ${colors.yellow}python3 execution/session_boot.py --auto-fix${colors.reset}`;
1463
+ }
1464
+
616
1465
  console.log(`
617
- Next steps:
618
- 1. Activate the Python environment:
1466
+ ${colors.bright}Summary of what was configured:${colors.reset}
1467
+ ${colors.green}✔${colors.reset} Python environment (.venv)
1468
+ ${colors.green}✔${colors.reset} Skills installed (${pack} pack)
1469
+ ${colors.green}✔${colors.reset} AGENTS.md + platform symlinks
1470
+ ${infraChoice.useLocal ? colors.green + "✔" + colors.reset : colors.yellow + "−" + colors.reset} Memory (Qdrant + Ollama): ${infraChoice.useLocal ? colors.green + "enabled" + colors.reset : colors.yellow + "disabled" + colors.reset}
1471
+ ${platformFeatures.agentTeams ? colors.green + "✔" + colors.reset : colors.yellow + "−" + colors.reset} Agent Teams (parallel execution): ${platformFeatures.agentTeams ? colors.green + "enabled" + colors.reset : colors.yellow + "skipped" + colors.reset}
1472
+ ${colors.dim}− MCP Servers: not configured (project-specific, add later)${colors.reset}
1473
+
1474
+ ${colors.bright}Next steps:${colors.reset}
1475
+ 1. Activate Python environment:
619
1476
  ${colors.yellow}source .venv/bin/activate${colors.reset}
620
1477
  2. Review ${colors.cyan}AGENTS.md${colors.reset} for architecture overview
621
- 3. Boot the memory system (optional, requires Qdrant + Ollama):
622
- ${colors.yellow}python3 execution/session_boot.py --auto-fix${colors.reset}
623
- 4. Check ${colors.cyan}skills/${colors.reset} for available capabilities
624
- 5. Create ${colors.cyan}.env${colors.reset} with your API keys
625
-
1478
+ ${memoryHint}${platformFeatures.agentTeams ? "" : `
1479
+ ▸ To enable Agent Teams later:\n ${colors.yellow}echo '${JSON.stringify({ env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1" } }, null, 2)}' > .claude/settings.json${colors.reset}`}
1480
+ To add MCP servers: edit ${colors.cyan}.claude/settings.json${colors.reset} ${colors.cyan}mcpServers${colors.reset} section
1481
+ To install Claude plugins (pyright-lsp etc): type inside Claude Code:
1482
+ ${colors.yellow}/plugin install pyright-lsp@claude-plugins-official${colors.reset}
1483
+ ▸ Check ${colors.cyan}skills/${colors.reset} for available capabilities
1484
+
626
1485
  Happy coding! 🎉
627
1486
  `);
628
1487
  }
@@ -714,7 +1573,7 @@ async function update(options) {
714
1573
  // 4. Update Core Documentation if needed
715
1574
  // We generally respect user's AGENTS.md, but maybe we update GEMINI.md/CLAUDE.md symlinks?
716
1575
  if (options.symlinks) {
717
- createSymlinks(options.path);
1576
+ createSymlinks(options.path, options);
718
1577
  }
719
1578
 
720
1579
  log.header("✨ Update complete!");