mcp-efficiency-engine 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/.github/CODEOWNERS +40 -0
  2. package/.github/GITHUB_MCP_INTEGRATION.md +366 -0
  3. package/.github/ISSUE_TEMPLATE/bug.md +51 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +45 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +18 -0
  6. package/.github/agents/backend.agent.md +18 -0
  7. package/.github/agents/community-manager.agent.md +18 -0
  8. package/.github/agents/dba.agent.md +18 -0
  9. package/.github/agents/frontend-agent.agent.md +18 -0
  10. package/.github/agents/github-repository-manager.agent.md +338 -0
  11. package/.github/agents/iot.agent.md +20 -0
  12. package/.github/agents/legacy.agent.md +18 -0
  13. package/.github/agents/rag-azure.agent.md +18 -0
  14. package/.github/agents/rag-local.agent.md +18 -0
  15. package/.github/agents/snapshot.agent.md +18 -0
  16. package/.github/agents/ux-ui.agent.md +18 -0
  17. package/.github/agents/wiki-agent.agent.md +23 -0
  18. package/.github/copilot-instructions.md +44 -0
  19. package/.github/instructions/always-on-optimization.instructions.md +54 -0
  20. package/.github/prompts/auto-route.prompt.md +33 -0
  21. package/.github/prompts/azure-rag.query.prompt.md +19 -0
  22. package/.github/prompts/backend.fix-bug.prompt.md +13 -0
  23. package/.github/prompts/cavecrew.prompt.md +16 -0
  24. package/.github/prompts/caveman-commit.prompt.md +14 -0
  25. package/.github/prompts/caveman-compress.prompt.md +15 -0
  26. package/.github/prompts/caveman-debug.prompt.md +13 -0
  27. package/.github/prompts/caveman-help.prompt.md +11 -0
  28. package/.github/prompts/caveman-review.prompt.md +15 -0
  29. package/.github/prompts/caveman-stats.prompt.md +11 -0
  30. package/.github/prompts/caveman.prompt.md +11 -0
  31. package/.github/prompts/community.post.prompt.md +14 -0
  32. package/.github/prompts/dba.query-review.prompt.md +15 -0
  33. package/.github/prompts/dev.fix-bug.prompt.md +13 -0
  34. package/.github/prompts/frontend.code.prompt.md +13 -0
  35. package/.github/prompts/legacy.impact-analysis.prompt.md +14 -0
  36. package/.github/prompts/project.kickoff-analysis.prompt.md +51 -0
  37. package/.github/prompts/rag.knowledge-answer.prompt.md +13 -0
  38. package/.github/prompts/token-saver-review.prompt.md +14 -0
  39. package/.github/prompts/ux-ui.review.prompt.md +14 -0
  40. package/.github/pull_request_template.md +71 -0
  41. package/.github/skills/ahorro-tokens/SKILL.md +36 -0
  42. package/.github/skills/azure-rag-enterprise/SKILL.md +24 -0
  43. package/.github/skills/backend-coding/SKILL.md +24 -0
  44. package/.github/skills/cavecrew/SKILL.md +17 -0
  45. package/.github/skills/caveman/SKILL.md +25 -0
  46. package/.github/skills/caveman-commit/SKILL.md +15 -0
  47. package/.github/skills/caveman-compress/SKILL.md +14 -0
  48. package/.github/skills/caveman-help/SKILL.md +19 -0
  49. package/.github/skills/caveman-mode/SKILL.md +43 -0
  50. package/.github/skills/caveman-review/SKILL.md +16 -0
  51. package/.github/skills/caveman-stats/SKILL.md +13 -0
  52. package/.github/skills/community-content/SKILL.md +22 -0
  53. package/.github/skills/database-analysis/SKILL.md +23 -0
  54. package/.github/skills/dev-coding/SKILL.md +24 -0
  55. package/.github/skills/frontend-coding/SKILL.md +24 -0
  56. package/.github/skills/human-in-the-loop/SKILL.md +47 -0
  57. package/.github/skills/iot-architecture/SKILL.md +22 -0
  58. package/.github/skills/legacy-migration/SKILL.md +22 -0
  59. package/.github/skills/rag-knowledge/SKILL.md +21 -0
  60. package/.github/skills/token-saver/SKILL.md +36 -0
  61. package/.github/skills/ux-ui-governance/SKILL.md +24 -0
  62. package/.github/skills/wiki-tools.json +24 -0
  63. package/.github/workflows/auto-devlog.yml +56 -0
  64. package/.github/workflows/auto-manage-issues.yml +64 -0
  65. package/.github/workflows/auto-sync.yml +54 -0
  66. package/.github/workflows/autodocs-sync.yml +114 -0
  67. package/.github/workflows/ci.yml +68 -0
  68. package/.github/workflows/pages.yml +59 -0
  69. package/.github/workflows/routing-evals.yml +59 -0
  70. package/.github/workflows/techriders-coverage-effective.yml +91 -0
  71. package/.vscode/mcp.json +44 -0
  72. package/AGENTS.md +160 -0
  73. package/ARCHITECTURE.md +57 -0
  74. package/FINAL_USAGE_GUIDE.md +106 -0
  75. package/LICENSE +21 -0
  76. package/README.md +385 -0
  77. package/README_WIKI.md +130 -0
  78. package/autodocs/README.md +22 -0
  79. package/autodocs/schema/wiki-node.schema.json +56 -0
  80. package/autolearning/feedback-loop.md +90 -0
  81. package/bin/install-host.js +326 -0
  82. package/bin/mcpee.js +116 -0
  83. package/context/repomix/repomix.config.json +20 -0
  84. package/memory/cross-memory-reasoning.md +17 -0
  85. package/memory/mempry-registry.yml +16 -0
  86. package/observability/evals/chat-token-usage-report.json +64 -0
  87. package/observability/evals/chat-token-usage-report.md +33 -0
  88. package/observability/evals/iteration-value-report.json +76 -0
  89. package/observability/evals/iteration-value-report.md +39 -0
  90. package/observability/evals/learning-loop-report.json +268 -0
  91. package/observability/evals/learning-loop-report.md +37 -0
  92. package/observability/evals/repo-intake-eval-cases.md +23 -0
  93. package/observability/evals/routing-eval-cases.json +68 -0
  94. package/observability/evals/routing-eval-cases.md +25 -0
  95. package/observability/evals/routing-eval-report.json +72 -0
  96. package/observability/evaluation.md +34 -0
  97. package/observability/logs/copilot-usage-ingest-report.json +13 -0
  98. package/observability/logs/iteration-metrics.jsonl +75 -0
  99. package/observability/logs/learning-feedback.jsonl +152 -0
  100. package/observability/logs/routing-decisions.jsonl +333 -0
  101. package/observability/logs/session/agent-pipeline-preflight-20260701-004146.log +8 -0
  102. package/observability/logs/session/agent-pipeline-preflight-20260701-005554.log +8 -0
  103. package/observability/logs/session/agent-pipeline-preflight-20260701-010351.log +8 -0
  104. package/observability/logs/session/agent-pipeline-preflight-20260704-145829.log +8 -0
  105. package/observability/logs/session/agent-pipeline-preflight-20260704-150021.log +8 -0
  106. package/observability/logs/session/agent-pipeline-preflight-20260704-154328.log +8 -0
  107. package/observability/logs/session/bye-20260629-221513.json +39 -0
  108. package/observability/logs/session/bye-20260629-221545.json +59 -0
  109. package/observability/logs/session/bye-20260629-222007.json +52 -0
  110. package/observability/logs/session/bye-20260629-222133.json +59 -0
  111. package/observability/logs/session/bye-20260629-222412.json +45 -0
  112. package/observability/logs/session/bye-20260629-223224.json +52 -0
  113. package/observability/logs/session/bye-20260629-224050.json +59 -0
  114. package/observability/logs/session/bye-20260630-105732.json +24 -0
  115. package/observability/logs/session/bye-20260630-211536.json +87 -0
  116. package/observability/logs/session/bye-20260630-223423.json +87 -0
  117. package/observability/logs/session/bye-20260630-232534.json +87 -0
  118. package/observability/logs/session/bye-20260701-003638.json +126 -0
  119. package/observability/logs/session/bye-20260701-003849.json +126 -0
  120. package/observability/logs/session/bye-20260701-004315.json +138 -0
  121. package/observability/logs/session/bye-20260701-004559.json +76 -0
  122. package/observability/logs/session/bye-20260701-005913.json +138 -0
  123. package/observability/logs/session/bye-20260701-010753.json +138 -0
  124. package/observability/logs/session/bye-20260703-194106.json +24 -0
  125. package/observability/logs/session/bye-20260703-233443.json +76 -0
  126. package/observability/logs/session/bye-20260703-233653.json +76 -0
  127. package/observability/logs/session/bye-20260704-150317.json +152 -0
  128. package/observability/logs/session/bye-20260704-150929.json +75 -0
  129. package/observability/logs/session/bye-20260704-151050.json +75 -0
  130. package/observability/logs/session/bye-20260705-115458.json +165 -0
  131. package/observability/logs/session/codegraph-status-20260701-004228.log +39 -0
  132. package/observability/logs/session/codegraph-status-20260701-004310.log +39 -0
  133. package/observability/logs/session/codegraph-status-20260701-005637.log +39 -0
  134. package/observability/logs/session/codegraph-status-20260701-005908.log +39 -0
  135. package/observability/logs/session/codegraph-status-20260701-010444.log +39 -0
  136. package/observability/logs/session/codegraph-status-20260701-010747.log +39 -0
  137. package/observability/logs/session/codegraph-status-20260704-150137.log +26 -0
  138. package/observability/logs/session/codegraph-status-20260704-150313.log +28 -0
  139. package/observability/logs/session/codegraph-status-20260704-154445.log +26 -0
  140. package/observability/logs/session/codegraph-status-20260705-115454.log +27 -0
  141. package/observability/logs/session/codegraph-sync-20260701-004211.log +88 -0
  142. package/observability/logs/session/codegraph-sync-20260701-004241.log +82 -0
  143. package/observability/logs/session/codegraph-sync-20260701-005620.log +89 -0
  144. package/observability/logs/session/codegraph-sync-20260701-005840.log +88 -0
  145. package/observability/logs/session/codegraph-sync-20260701-010419.log +93 -0
  146. package/observability/logs/session/codegraph-sync-20260701-010609.log +90 -0
  147. package/observability/logs/session/codegraph-sync-20260704-145856.log +70 -0
  148. package/observability/logs/session/codegraph-sync-20260704-150047.log +53 -0
  149. package/observability/logs/session/codegraph-sync-20260704-150204.log +44 -0
  150. package/observability/logs/session/codegraph-sync-20260704-154353.log +26 -0
  151. package/observability/logs/session/codegraph-sync-20260705-115337.log +32 -0
  152. package/observability/logs/session/hi-20260629-221459.json +38 -0
  153. package/observability/logs/session/hi-20260629-221945.json +59 -0
  154. package/observability/logs/session/hi-20260629-222108.json +66 -0
  155. package/observability/logs/session/hi-20260629-222352.json +45 -0
  156. package/observability/logs/session/hi-20260629-225719.json +59 -0
  157. package/observability/logs/session/hi-20260629-233722.json +52 -0
  158. package/observability/logs/session/hi-20260629-233913.json +198 -0
  159. package/observability/logs/session/hi-20260630-110156.json +177 -0
  160. package/observability/logs/session/hi-20260630-191243.json +184 -0
  161. package/observability/logs/session/hi-20260630-230050.json +234 -0
  162. package/observability/logs/session/hi-20260630-230523.json +227 -0
  163. package/observability/logs/session/hi-20260630-230855.json +227 -0
  164. package/observability/logs/session/hi-20260630-231638.json +227 -0
  165. package/observability/logs/session/hi-20260630-231756.json +219 -0
  166. package/observability/logs/session/hi-20260701-002842.json +234 -0
  167. package/observability/logs/session/hi-20260701-003458.json +282 -0
  168. package/observability/logs/session/hi-20260701-004233.json +290 -0
  169. package/observability/logs/session/hi-20260701-004554.json +236 -0
  170. package/observability/logs/session/hi-20260701-005641.json +290 -0
  171. package/observability/logs/session/hi-20260701-010450.json +290 -0
  172. package/observability/logs/session/hi-20260703-233854.json +312 -0
  173. package/observability/logs/session/hi-20260703-234448.json +318 -0
  174. package/observability/logs/session/hi-20260704-145907.json +353 -0
  175. package/observability/logs/session/hi-20260704-150141.json +392 -0
  176. package/observability/logs/session/hi-20260704-154448.json +392 -0
  177. package/observability/logs/session/iteration-value-refresh-20260701-004309.log +3 -0
  178. package/observability/logs/session/iteration-value-refresh-20260701-005907.log +3 -0
  179. package/observability/logs/session/iteration-value-refresh-20260701-010747.log +3 -0
  180. package/observability/logs/session/iteration-value-refresh-20260704-150312.log +3 -0
  181. package/observability/logs/session/iteration-value-refresh-20260705-115453.log +3 -0
  182. package/observability/logs/session/learning-loop-refresh-20260701-004309.log +3 -0
  183. package/observability/logs/session/learning-loop-refresh-20260701-005906.log +3 -0
  184. package/observability/logs/session/learning-loop-refresh-20260701-010745.log +3 -0
  185. package/observability/logs/session/learning-loop-refresh-20260704-150309.log +3 -0
  186. package/observability/logs/session/learning-loop-refresh-20260705-115450.log +3 -0
  187. package/observability/logs/session/project-notes-refresh-20260701-004227.log +1 -0
  188. package/observability/logs/session/project-notes-refresh-20260701-004308.log +1 -0
  189. package/observability/logs/session/project-notes-refresh-20260701-005636.log +1 -0
  190. package/observability/logs/session/project-notes-refresh-20260701-005906.log +1 -0
  191. package/observability/logs/session/project-notes-refresh-20260701-010443.log +1 -0
  192. package/observability/logs/session/project-notes-refresh-20260701-010744.log +1 -0
  193. package/observability/logs/session/project-notes-refresh-20260704-150133.log +1 -0
  194. package/observability/logs/session/project-notes-refresh-20260704-150309.log +1 -0
  195. package/observability/logs/session/project-notes-refresh-20260704-154442.log +1 -0
  196. package/observability/logs/session/project-notes-refresh-20260705-115449.log +1 -0
  197. package/observability/logs/session/repo-intake-20260701-004218.log +6 -0
  198. package/observability/logs/session/repo-intake-20260701-005626.log +6 -0
  199. package/observability/logs/session/repo-intake-20260701-010433.log +6 -0
  200. package/observability/logs/session/repo-intake-20260704-150053.log +6 -0
  201. package/observability/logs/session/repo-intake-20260704-154404.log +6 -0
  202. package/observability/logs/session/repo-intake-refresh-20260701-004247.log +6 -0
  203. package/observability/logs/session/repo-intake-refresh-20260701-005847.log +6 -0
  204. package/observability/logs/session/repo-intake-refresh-20260701-010615.log +6 -0
  205. package/observability/logs/session/repo-intake-refresh-20260704-150209.log +6 -0
  206. package/observability/logs/session/repo-intake-refresh-20260705-115342.log +6 -0
  207. package/observability/logs/session/repo-registry-validation-20260701-004234.log +2 -0
  208. package/observability/logs/session/repo-registry-validation-20260701-004556.log +2 -0
  209. package/observability/logs/session/repo-registry-validation-20260701-005833.log +2 -0
  210. package/observability/logs/session/repo-registry-validation-20260701-010601.log +2 -0
  211. package/observability/logs/session/repo-registry-validation-20260704-150155.log +2 -0
  212. package/observability/logs/session/repo-registry-validation-20260705-115323.log +2 -0
  213. package/observability/logs/session/repomix-refresh-20260701-003823.log +4236 -0
  214. package/observability/logs/session/repomix-refresh-20260701-004251.log +4275 -0
  215. package/observability/logs/session/repomix-refresh-20260701-005850.log +4248 -0
  216. package/observability/logs/session/repomix-refresh-20260701-010619.log +6531 -0
  217. package/observability/logs/session/repomix-refresh-20260704-150239.log +652 -0
  218. package/observability/logs/session/repomix-refresh-20260705-115419.log +178 -0
  219. package/observability/logs/session/routing-evals-20260701-004221.log +2 -0
  220. package/observability/logs/session/routing-evals-20260701-004235.log +2 -0
  221. package/observability/logs/session/routing-evals-20260701-005629.log +2 -0
  222. package/observability/logs/session/routing-evals-20260701-005834.log +2 -0
  223. package/observability/logs/session/routing-evals-20260701-010437.log +2 -0
  224. package/observability/logs/session/routing-evals-20260701-010603.log +2 -0
  225. package/observability/logs/session/routing-evals-20260704-150125.log +2 -0
  226. package/observability/logs/session/routing-evals-20260704-150157.log +2 -0
  227. package/observability/logs/session/routing-evals-20260704-154434.log +2 -0
  228. package/observability/logs/session/routing-evals-20260705-115327.log +2 -0
  229. package/observability/logs/session/sibling-discovery-refresh-20260701-004250.log +3 -0
  230. package/observability/logs/session/sibling-discovery-refresh-20260701-005850.log +3 -0
  231. package/observability/logs/session/sibling-discovery-refresh-20260701-010618.log +3 -0
  232. package/observability/logs/session/sibling-discovery-refresh-20260704-150238.log +3 -0
  233. package/observability/logs/session/sibling-discovery-refresh-20260705-115418.log +3 -0
  234. package/observability/logs.schema.json +95 -0
  235. package/observability/logs.schema.md +26 -0
  236. package/observability/metrics.md +35 -0
  237. package/observability/routing-evaluator.md +37 -0
  238. package/observability/scoring-rubric.md +38 -0
  239. package/optimization/ALWAYS_ON_OPTIMIZATION.md +98 -0
  240. package/optimization/caveman-mode.md +62 -0
  241. package/optimization/examples/login-bug.md +25 -0
  242. package/optimization/examples/sla-query.md +25 -0
  243. package/optimization/optimization-routing.md +30 -0
  244. package/optimization/policies/response-style.policy.md +45 -0
  245. package/optimization/policies/token-budget.policy.md +28 -0
  246. package/optimization/profiles/always-on.profile.md +19 -0
  247. package/optimization/profiles/architecture.profile.md +20 -0
  248. package/optimization/profiles/debug.profile.md +20 -0
  249. package/optimization/profiles/enterprise-rag.profile.md +20 -0
  250. package/optimization/profiles/training.profile.md +20 -0
  251. package/optimization/token-saver.md +58 -0
  252. package/orchestrator/corporate-routing.md +51 -0
  253. package/orchestrator/decision-matrix.md +33 -0
  254. package/orchestrator/fallback.md +29 -0
  255. package/orchestrator/repo-routing.md +58 -0
  256. package/orchestrator/router.md +75 -0
  257. package/orchestrator/wiki/__init__.py +5 -0
  258. package/orchestrator/wiki/graph_consolidator.py +506 -0
  259. package/orchestrator/wiki/incremental_engine.py +57 -0
  260. package/orchestrator/wiki/plugin_manager.py +40 -0
  261. package/package.json +70 -0
  262. package/policies/context-policy.md +25 -0
  263. package/policies/cost-policy.md +25 -0
  264. package/policies/repo-intake-policy.md +36 -0
  265. package/policies/security-policy.md +25 -0
  266. package/repo-intake/README.md +81 -0
  267. package/repo-intake/templates/agent.template.md +4 -0
  268. package/repo-intake/templates/context-manifest.template.md +4 -0
  269. package/repo-intake/templates/skill.template.md +3 -0
  270. package/repo-registry/repos.schema.json +102 -0
  271. package/repo-registry/repos.template.json +26 -0
  272. package/requirements.txt +1 -0
  273. package/scripts/README.md +109 -0
  274. package/scripts/__init__.py +0 -0
  275. package/scripts/bootstrap-portable.cmd +4 -0
  276. package/scripts/bootstrap-portable.ps1 +90 -0
  277. package/scripts/context/azure-rag-mcp-adapter.py +1 -0
  278. package/scripts/context/build-graphify.ps1 +1 -0
  279. package/scripts/context/build-repomix.ps1 +1 -0
  280. package/scripts/discovery/discover-boost-repos.cmd +4 -0
  281. package/scripts/discovery/discover-boost-repos.py +186 -0
  282. package/scripts/discovery/refresh-project-notes.py +179 -0
  283. package/scripts/github/INSTALL.md +295 -0
  284. package/scripts/github/README.md +455 -0
  285. package/scripts/github/apply-boost-templates.ps1 +163 -0
  286. package/scripts/github/apply-single-repo.ps1 +85 -0
  287. package/scripts/github/create-devlog.ps1 +380 -0
  288. package/scripts/github/manage-issues.ps1 +332 -0
  289. package/scripts/github/sync-repo.ps1 +267 -0
  290. package/scripts/intake/agent-pipeline-preflight.py +151 -0
  291. package/scripts/intake/init-template-registry.cmd +4 -0
  292. package/scripts/intake/init-template-registry.ps1 +258 -0
  293. package/scripts/intake/repo-intake.py +354 -0
  294. package/scripts/intake/resolve-routing.py +620 -0
  295. package/scripts/intake/run-repo-intake.cmd +4 -0
  296. package/scripts/intake/run-repo-intake.ps1 +46 -0
  297. package/scripts/intake/run-routing-evals.py +147 -0
  298. package/scripts/intake/validate-database-routing.py +91 -0
  299. package/scripts/intake/validate-rag-routing.py +85 -0
  300. package/scripts/intake/validate-repo-registry.ps1 +20 -0
  301. package/scripts/intake/validate-repo-registry.py +286 -0
  302. package/scripts/intake/validate-security.py +170 -0
  303. package/scripts/learning/autolearning-gate.py +71 -0
  304. package/scripts/learning/chat-token-usage-report.py +326 -0
  305. package/scripts/learning/ingest-copilot-session-usage.py +421 -0
  306. package/scripts/learning/iteration-value-report.py +275 -0
  307. package/scripts/learning/learning-loop-report.py +272 -0
  308. package/scripts/learning/record-iteration-metrics.py +116 -0
  309. package/scripts/learning/record-learning-feedback.py +91 -0
  310. package/scripts/ops/bye.ps1 +620 -0
  311. package/scripts/ops/compare-demo-results.ps1 +826 -0
  312. package/scripts/ops/demo1.ps1 +11 -0
  313. package/scripts/ops/demo2.ps1 +11 -0
  314. package/scripts/ops/demo3.ps1 +11 -0
  315. package/scripts/ops/demo4.ps1 +11 -0
  316. package/scripts/ops/hi.ps1 +1045 -0
  317. package/scripts/ops/llm-token-probe.py +164 -0
  318. package/scripts/ops/run-all-demos.ps1 +39 -0
  319. package/scripts/ops/run-demo-block.ps1 +85 -0
  320. package/scripts/ops/run-demo-session.ps1 +532 -0
  321. package/scripts/setup/optimize-engines.ps1 +183 -0
  322. package/scripts/setup/setup-codegraph.ps1 +3 -0
  323. package/scripts/setup/setup-gitnexus.ps1 +3 -0
  324. package/scripts/setup/setup-graphify.ps1 +2 -0
  325. package/scripts/setup/setup-prerequisites.ps1 +205 -0
  326. package/scripts/setup/start-gitnexus.ps1 +71 -0
  327. package/scripts/setup/validate-context.ps1 +361 -0
  328. package/scripts/wiki/__init__.py +0 -0
  329. package/scripts/wiki/compiler_main.py +189 -0
  330. package/scripts/wiki/normalizer.py +206 -0
  331. package/scripts/wiki/providers/base_provider.py +25 -0
  332. package/scripts/wiki/providers/codegraph_provider.py +49 -0
  333. package/scripts/wiki/providers/graphify_provider.py +49 -0
  334. package/scripts/wiki/providers/repo_content_provider.py +408 -0
  335. package/scripts/wiki/query_autodocs.py +60 -0
  336. package/scripts/wiki/validator.py +183 -0
  337. package/scripts/wiki/wiki_compiler.py +5 -0
  338. package/specs/architecture.spec.md +32 -0
  339. package/specs/azure-rag.spec.md +28 -0
  340. package/specs/coding-standards.spec.md +24 -0
  341. package/specs/database.spec.md +29 -0
  342. package/specs/migration.spec.md +26 -0
  343. package/specs/observability.spec.md +24 -0
  344. package/specs/optimization.spec.md +31 -0
  345. package/specs/rag.spec.md +30 -0
  346. package/specs/repo-intake.spec.md +25 -0
  347. package/specs/routing.spec.md +24 -0
  348. package/specs/security.spec.md +30 -0
  349. package/specs/wiki/provider-contract.json +33 -0
  350. package/specs/wiki/unified-knowledge-graph.json +25 -0
  351. package/templates/BOOST_README_TEMPLATE.md +96 -0
  352. package/templates/CODEOWNERS_TEMPLATE.txt +29 -0
  353. package/templates/LICENSE_MIT_TEMPLATE.txt +21 -0
  354. package/templates/PERSONAL_README_TEMPLATE.md +90 -0
  355. package/templates/README_boost_RAG_Azure.md +46 -0
  356. package/templates/README_boost_azure_iot_edge.md +48 -0
  357. package/templates/README_boost_backend.md +47 -0
  358. package/templates/README_boost_dba.md +57 -0
  359. package/templates/ci.yml.template +73 -0
  360. package/tooling/tooling.manifest.json +72 -0
@@ -0,0 +1,380 @@
1
+ #Requires -Version 7
2
+
3
+ <#
4
+ .SYNOPSIS
5
+ Genera devlog técnico automático a partir de commits recientes.
6
+
7
+ .DESCRIPTION
8
+ Analiza últimos N commits, extrae cambios significativos, y genera markdown
9
+ con insights técnicos. Crea archivo en autodocs/site/devlog/ y abre PR automáticamente.
10
+
11
+ .PARAMETER Repo
12
+ Repositorio (owner/repo). Por defecto: Sertxito/mcp-efficiency-engine
13
+
14
+ .PARAMETER CommitsToAnalyze
15
+ Número de commits a analizar. Por defecto: 10
16
+
17
+ .PARAMETER OutputDir
18
+ Directorio de salida. Por defecto: autodocs/site/devlog
19
+
20
+ .PARAMETER DryRun
21
+ No crear archivos ni PR, solo mostrar lo que haría.
22
+
23
+ .EXAMPLE
24
+ .\create-devlog.ps1
25
+
26
+ .EXAMPLE
27
+ .\create-devlog.ps1 -CommitsToAnalyze 20 -DryRun
28
+
29
+ #>
30
+
31
+ param(
32
+ [string]$Repo = "Sertxito/mcp-efficiency-engine",
33
+ [int]$CommitsToAnalyze = 10,
34
+ [string]$OutputDir = "autodocs/site/devlog",
35
+ [switch]$DryRun
36
+ )
37
+
38
+ $ErrorActionPreference = "Stop"
39
+
40
+ # Obtener últimos commits
41
+ function Get-RecentCommits {
42
+ param([string]$Repo, [int]$Count)
43
+
44
+ Write-Host "Obteniendo últimos $Count commits de $Repo..."
45
+
46
+ try {
47
+ $commits = gh api repos/$Repo/commits --limit $Count | ConvertFrom-Json
48
+ return $commits
49
+ } catch {
50
+ Write-Host "Error obteniendo commits: $_"
51
+ return @()
52
+ }
53
+ }
54
+
55
+ # Analizar cambios por tipo
56
+ function Analyze-CommitChanges {
57
+ param([array]$Commits)
58
+
59
+ $stats = @{
60
+ features = @()
61
+ fixes = @()
62
+ refactor = @()
63
+ docs = @()
64
+ tests = @()
65
+ other = @()
66
+ }
67
+
68
+ foreach ($commit in $Commits) {
69
+ $message = $commit.commit.message
70
+ $author = $commit.commit.author.name
71
+ $date = $commit.commit.author.date
72
+
73
+ $item = @{
74
+ message = $message.Split([Environment]::NewLine)[0]
75
+ author = $author
76
+ date = $date
77
+ sha = $commit.sha.Substring(0, 7)
78
+ }
79
+
80
+ if ($message -like "*feat*" -or $message -like "*feature*") {
81
+ $stats.features += $item
82
+ } elseif ($message -like "*fix*" -or $message -like "*bug*") {
83
+ $stats.fixes += $item
84
+ } elseif ($message -like "*refactor*") {
85
+ $stats.refactor += $item
86
+ } elseif ($message -like "*doc*") {
87
+ $stats.docs += $item
88
+ } elseif ($message -like "*test*") {
89
+ $stats.tests += $item
90
+ } else {
91
+ $stats.other += $item
92
+ }
93
+ }
94
+
95
+ return $stats
96
+ }
97
+
98
+ # Generar contenido markdown
99
+ function Generate-DevlogMarkdown {
100
+ param(
101
+ [hashtable]$Stats,
102
+ [string]$Repo,
103
+ [datetime]$GeneratedAt
104
+ )
105
+
106
+ $date = $GeneratedAt.ToString("yyyy-MM-dd")
107
+ $datetime = $GeneratedAt.ToString("yyyy-MM-dd HH:mm:ss")
108
+
109
+ $markdown = @"
110
+ # Devlog — $date
111
+
112
+ **Generado:** $datetime UTC
113
+ **Fuente:** [$Repo](https://github.com/$Repo)
114
+
115
+ ---
116
+
117
+ ## 📊 Resumen
118
+
119
+ | Categoría | Cantidad |
120
+ |-----------|----------|
121
+ | 🎯 Features | $($Stats.features.Count) |
122
+ | 🐛 Fixes | $($Stats.fixes.Count) |
123
+ | 🔧 Refactor | $($Stats.refactor.Count) |
124
+ | 📝 Docs | $($Stats.docs.Count) |
125
+ | ✅ Tests | $($Stats.tests.Count) |
126
+ | 📌 Otros | $($Stats.other.Count) |
127
+
128
+ ---
129
+
130
+ "@
131
+
132
+ # Features
133
+ if ($Stats.features.Count -gt 0) {
134
+ $markdown += @"
135
+ ## 🎯 Features Nuevas
136
+
137
+ "@
138
+ foreach ($item in $Stats.features) {
139
+ $markdown += @"
140
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
141
+ _Por $($item.author) el $($item.date)_
142
+
143
+ "@
144
+ }
145
+ $markdown += "`n"
146
+ }
147
+
148
+ # Fixes
149
+ if ($Stats.fixes.Count -gt 0) {
150
+ $markdown += @"
151
+ ## 🐛 Fixes y Resoluciones
152
+
153
+ "@
154
+ foreach ($item in $Stats.fixes) {
155
+ $markdown += @"
156
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
157
+ _Por $($item.author) el $($item.date)_
158
+
159
+ "@
160
+ }
161
+ $markdown += "`n"
162
+ }
163
+
164
+ # Refactor
165
+ if ($Stats.refactor.Count -gt 0) {
166
+ $markdown += @"
167
+ ## 🔧 Refactorizaciones
168
+
169
+ "@
170
+ foreach ($item in $Stats.refactor) {
171
+ $markdown += @"
172
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
173
+
174
+ "@
175
+ }
176
+ $markdown += "`n"
177
+ }
178
+
179
+ # Docs
180
+ if ($Stats.docs.Count -gt 0) {
181
+ $markdown += @"
182
+ ## 📝 Documentación
183
+
184
+ "@
185
+ foreach ($item in $Stats.docs) {
186
+ $markdown += @"
187
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
188
+
189
+ "@
190
+ }
191
+ $markdown += "`n"
192
+ }
193
+
194
+ # Tests
195
+ if ($Stats.tests.Count -gt 0) {
196
+ $markdown += @"
197
+ ## ✅ Tests y Validación
198
+
199
+ "@
200
+ foreach ($item in $Stats.tests) {
201
+ $markdown += @"
202
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
203
+
204
+ "@
205
+ }
206
+ $markdown += "`n"
207
+ }
208
+
209
+ # Otros
210
+ if ($Stats.other.Count -gt 0) {
211
+ $markdown += @"
212
+ ## 📌 Otros Cambios
213
+
214
+ "@
215
+ foreach ($item in $Stats.other) {
216
+ $markdown += @"
217
+ - **$($item.message)** — [\`$($item.sha)\`](https://github.com/$Repo/commit/$($item.sha))
218
+
219
+ "@
220
+ }
221
+ $markdown += "`n"
222
+ }
223
+
224
+ $markdown += @"
225
+ ---
226
+
227
+ **Generado automáticamente por GitHub MCP DevLog Generator**
228
+
229
+ "@
230
+
231
+ return $markdown
232
+ }
233
+
234
+ # Crear archivo devlog
235
+ function New-DevlogFile {
236
+ param([string]$Content, [string]$OutputDir, [string]$Date)
237
+
238
+ $fileName = "devlog-$Date.md"
239
+ $filePath = "$OutputDir/$fileName"
240
+
241
+ if ($DryRun) {
242
+ Write-Host "[DRY-RUN] Crearía archivo: $filePath"
243
+ Write-Host ""
244
+ Write-Host "─────────────────────────────────────────"
245
+ Write-Host $Content
246
+ Write-Host "─────────────────────────────────────────"
247
+ return $fileName
248
+ }
249
+
250
+ # Crear directorio si no existe
251
+ if (-not (Test-Path $OutputDir)) {
252
+ New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
253
+ Write-Host "✓ Directorio creado: $OutputDir"
254
+ }
255
+
256
+ # Guardar archivo
257
+ $Content | Out-File -FilePath $filePath -Encoding UTF8
258
+ Write-Host "✓ Archivo devlog creado: $filePath"
259
+
260
+ return $fileName
261
+ }
262
+
263
+ # Crear PR con devlog
264
+ function New-DevlogPullRequest {
265
+ param([string]$FileName, [int]$CommitCount)
266
+
267
+ $branchName = "devlog/$(Get-Date -Format 'yyyyMMdd')"
268
+ $title = "docs: Devlog de $CommitCount commits — $(Get-Date -Format 'yyyy-MM-dd')"
269
+
270
+ $body = @"
271
+ ## Devlog Automático
272
+
273
+ Se ha generado devlog técnico con análisis de últimos $CommitCount commits.
274
+
275
+ ### Contenido
276
+ - ✨ Features nuevas
277
+ - 🐛 Fixes y resoluciones
278
+ - 🔧 Refactorizaciones
279
+ - 📝 Cambios de documentación
280
+ - ✅ Tests y validación
281
+
282
+ ### Archivo
283
+ - **$FileName** en `autodocs/site/devlog/`
284
+
285
+ ### Acción Sugerida
286
+ 1. Revisar contenido del devlog
287
+ 2. Adaptar descripción técnica si es necesario
288
+ 3. Publicar en canal de documentación
289
+
290
+ ---
291
+
292
+ **Generado automáticamente por GitHub MCP DevLog Generator**
293
+ "@
294
+
295
+ if ($DryRun) {
296
+ Write-Host "[DRY-RUN] Crearía PR:"
297
+ Write-Host " Título: $title"
298
+ Write-Host " Rama: $branchName"
299
+ return $true
300
+ }
301
+
302
+ try {
303
+ # Crear rama
304
+ $mainSha = gh api repos/$Repo/git/refs/heads/main --jq '.object.sha' | Cut -c 1-7
305
+ Write-Host "Creando rama $branchName..."
306
+
307
+ # TODO: Implementar vía MCP GitHub cuando se tenga acceso
308
+ Write-Host "⚠ Creación de PR requiere configuración local de git"
309
+ Write-Host " Ejecutar manualmente:"
310
+ Write-Host " git checkout -b $branchName"
311
+ Write-Host " git add autodocs/site/devlog/$FileName"
312
+ Write-Host " git commit -m '$title'"
313
+ Write-Host " git push origin $branchName"
314
+
315
+ return $false
316
+ } catch {
317
+ Write-Host "Error creando PR: $_"
318
+ return $false
319
+ }
320
+ }
321
+
322
+ # ===================
323
+ # Main Execution
324
+ # ===================
325
+
326
+ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
327
+ Write-Host "GitHub MCP DevLog Generator"
328
+ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
329
+ Write-Host ""
330
+ Write-Host "Repositorio: $Repo"
331
+ Write-Host "Commits a analizar: $CommitsToAnalyze"
332
+ Write-Host "Directorio de salida: $OutputDir"
333
+
334
+ if ($DryRun) {
335
+ Write-Host "🔍 Modo DRY-RUN"
336
+ }
337
+ Write-Host ""
338
+
339
+ # 1. Obtener commits
340
+ $commits = Get-RecentCommits -Repo $Repo -Count $CommitsToAnalyze
341
+ if ($commits.Count -eq 0) {
342
+ Write-Host "✗ No se pudieron obtener commits"
343
+ exit 1
344
+ }
345
+
346
+ Write-Host "✓ Obtenidos $($commits.Count) commits"
347
+ Write-Host ""
348
+
349
+ # 2. Analizar cambios
350
+ $stats = Analyze-CommitChanges -Commits $commits
351
+
352
+ Write-Host "📊 Cambios detectados:"
353
+ Write-Host " 🎯 Features: $($stats.features.Count)"
354
+ Write-Host " 🐛 Fixes: $($stats.fixes.Count)"
355
+ Write-Host " 🔧 Refactor: $($stats.refactor.Count)"
356
+ Write-Host " 📝 Docs: $($stats.docs.Count)"
357
+ Write-Host " ✅ Tests: $($stats.tests.Count)"
358
+ Write-Host " 📌 Otros: $($stats.other.Count)"
359
+ Write-Host ""
360
+
361
+ # 3. Generar markdown
362
+ $now = Get-Date
363
+ $dateStr = $now.ToString("yyyy-MM-dd")
364
+ $markdown = Generate-DevlogMarkdown -Stats $stats -Repo $Repo -GeneratedAt $now
365
+
366
+ # 4. Crear archivo
367
+ $fileName = New-DevlogFile -Content $markdown -OutputDir $OutputDir -Date $dateStr
368
+ Write-Host ""
369
+
370
+ # 5. Crear PR (opcional)
371
+ $totalCommits = $stats.features.Count + $stats.fixes.Count + $stats.refactor.Count + `
372
+ $stats.docs.Count + $stats.tests.Count + $stats.other.Count
373
+
374
+ if ($totalCommits -gt 0) {
375
+ Write-Host "Creando PR con devlog..."
376
+ New-DevlogPullRequest -FileName $fileName -CommitCount $totalCommits
377
+ }
378
+
379
+ Write-Host ""
380
+ Write-Host "✓ DevLog generado exitosamente"
@@ -0,0 +1,332 @@
1
+ #Requires -Version 7
2
+
3
+ <#
4
+ .SYNOPSIS
5
+ Gestiona issues y PRs con asignación automática de Copilot.
6
+
7
+ .DESCRIPTION
8
+ Realiza acciones automáticas en issues y PRs:
9
+ - Asignar Copilot a issues sin asignar
10
+ - Solicitar review de Copilot en PRs abiertas
11
+ - Auto-cerrar issues cuando PR relacionada se mergea
12
+
13
+ .PARAMETER Repo
14
+ Repositorio (owner/repo). Por defecto: Sertxito/mcp-efficiency-engine
15
+
16
+ .PARAMETER Action
17
+ Acción a ejecutar: assign, review, close. Por defecto: assign
18
+
19
+ .PARAMETER State
20
+ Estado de issues: open, closed. Por defecto: open
21
+
22
+ .PARAMETER DryRun
23
+ No hacer cambios, solo mostrar lo que haría.
24
+
25
+ .EXAMPLE
26
+ .\manage-issues.ps1 -Action assign
27
+
28
+ .EXAMPLE
29
+ .\manage-issues.ps1 -Action review -DryRun
30
+
31
+ #>
32
+
33
+ param(
34
+ [string]$Repo = "Sertxito/mcp-efficiency-engine",
35
+ [ValidateSet("assign", "review", "close")]
36
+ [string]$Action = "assign",
37
+ [ValidateSet("open", "closed")]
38
+ [string]$State = "open",
39
+ [switch]$DryRun
40
+ )
41
+
42
+ $ErrorActionPreference = "Stop"
43
+
44
+ # Obtener issues sin asignar
45
+ function Get-UnassignedIssues {
46
+ param([string]$Repo)
47
+
48
+ Write-Host "Buscando issues sin asignar..."
49
+
50
+ try {
51
+ $issues = gh issue list --repo $Repo --state $State --assignee none --json number,title,labels
52
+ return $issues | ConvertFrom-Json
53
+ } catch {
54
+ Write-Host "Error obteniendo issues: $_"
55
+ return @()
56
+ }
57
+ }
58
+
59
+ # Obtener PRs abiertas sin review
60
+ function Get-OpenPullRequests {
61
+ param([string]$Repo)
62
+
63
+ Write-Host "Buscando PRs abiertas..."
64
+
65
+ try {
66
+ $prs = gh pr list --repo $Repo --state open --json number,title,author
67
+ return $prs | ConvertFrom-Json
68
+ } catch {
69
+ Write-Host "Error obteniendo PRs: $_"
70
+ return @()
71
+ }
72
+ }
73
+
74
+ # Asignar Copilot a issue
75
+ function Assign-CopilotToIssue {
76
+ param([string]$Repo, [int]$IssueNumber)
77
+
78
+ Write-Host " Asignando Copilot a issue #$IssueNumber..."
79
+
80
+ if ($DryRun) {
81
+ Write-Host " [DRY-RUN] Asignaría Copilot a issue #$IssueNumber"
82
+ return $true
83
+ }
84
+
85
+ try {
86
+ # Usar GitHub MCP: assign_copilot_to_issue
87
+ $body = @{
88
+ assignee = "copilot"
89
+ } | ConvertTo-Json
90
+
91
+ gh api repos/$Repo/issues/$IssueNumber \
92
+ -X PATCH \
93
+ -H "Accept: application/vnd.github+json" \
94
+ -f assignees=copilot | Out-Null
95
+
96
+ Write-Host " ✓ Copilot asignado a #$IssueNumber"
97
+ return $true
98
+ } catch {
99
+ Write-Host " ⚠ Error asignando Copilot: $_"
100
+ return $false
101
+ }
102
+ }
103
+
104
+ # Solicitar review de Copilot en PR
105
+ function Request-CopilotReview {
106
+ param([string]$Repo, [int]$PRNumber)
107
+
108
+ Write-Host " Solicitando review de Copilot para PR #$PRNumber..."
109
+
110
+ if ($DryRun) {
111
+ Write-Host " [DRY-RUN] Solicitaría review de Copilot para PR #$PRNumber"
112
+ return $true
113
+ }
114
+
115
+ try {
116
+ # Usar GitHub MCP: request_copilot_review
117
+ gh api repos/$Repo/pulls/$PRNumber/requested_reviewers \
118
+ -X POST \
119
+ -H "Accept: application/vnd.github+json" \
120
+ -f reviewers=copilot | Out-Null
121
+
122
+ Write-Host " ✓ Review de Copilot solicitado para #$PRNumber"
123
+ return $true
124
+ } catch {
125
+ Write-Host " ⚠ Error solicitando review: $_"
126
+ return $false
127
+ }
128
+ }
129
+
130
+ # Auto-cerrar issue si PR relacionada merged
131
+ function Auto-CloseResolvedIssues {
132
+ param([string]$Repo)
133
+
134
+ Write-Host "Buscando issues para auto-cerrar..."
135
+
136
+ try {
137
+ $closedPRs = gh pr list --repo $Repo --state closed --merged --limit 20 `
138
+ --json number,title,body,closedAt | ConvertFrom-Json
139
+
140
+ $closed = 0
141
+ foreach ($pr in $closedPRs) {
142
+ # Buscar referencias a issues en PR (Closes #123, Fixes #456, etc.)
143
+ $issueMatches = [regex]::Matches($pr.body, '#(\d+)')
144
+
145
+ foreach ($match in $issueMatches) {
146
+ $issueNum = $match.Groups[1].Value
147
+
148
+ # Verificar si issue aún está abierta
149
+ $issue = gh api repos/$Repo/issues/$issueNum | ConvertFrom-Json
150
+
151
+ if ($issue.state -eq "open") {
152
+ Write-Host " Auto-cerrando issue #$issueNum (referenced en PR #$($pr.number))..."
153
+
154
+ if ($DryRun) {
155
+ Write-Host " [DRY-RUN] Cerraría issue #$issueNum"
156
+ $closed++
157
+ continue
158
+ }
159
+
160
+ # Cerrar issue
161
+ gh api repos/$Repo/issues/$issueNum \
162
+ -X PATCH \
163
+ -H "Accept: application/vnd.github+json" \
164
+ -f state=closed \
165
+ -f state_reason=completed | Out-Null
166
+
167
+ Write-Host " ✓ Issue #$issueNum cerrada"
168
+ $closed++
169
+ }
170
+ }
171
+ }
172
+
173
+ return $closed
174
+ } catch {
175
+ Write-Host "Error en auto-close: $_"
176
+ return 0
177
+ }
178
+ }
179
+
180
+ # Agregar etiquetas a issues
181
+ function Add-LabelsToIssue {
182
+ param([string]$Repo, [int]$IssueNumber, [array]$Labels)
183
+
184
+ Write-Host " Agregando etiquetas a issue #$IssueNumber..."
185
+
186
+ if ($DryRun) {
187
+ Write-Host " [DRY-RUN] Agregaría etiquetas: $($Labels -join ', ')"
188
+ return $true
189
+ }
190
+
191
+ try {
192
+ $labelJson = $Labels | ConvertTo-Json
193
+
194
+ gh api repos/$Repo/issues/$IssueNumber/labels \
195
+ -X POST \
196
+ -H "Accept: application/vnd.github+json" `
197
+ --input - << $labelJson | Out-Null
198
+
199
+ Write-Host " ✓ Etiquetas agregadas"
200
+ return $true
201
+ } catch {
202
+ Write-Host " ⚠ Error agregando etiquetas: $_"
203
+ return $false
204
+ }
205
+ }
206
+
207
+ # Generar reporte de actividad
208
+ function Get-ActivityReport {
209
+ param([string]$Repo, [int]$AssignedCount, [int]$ReviewsRequested, [int]$IssuesClosed)
210
+
211
+ $report = @"
212
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
213
+ Reporte de Gestión de Issues
214
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
215
+
216
+ 📊 Actividad Realizada:
217
+
218
+ 🎯 Issues asignados a Copilot: $AssignedCount
219
+ 👁️ Reviews solicitados: $ReviewsRequested
220
+ ✓ Issues auto-cerradas: $IssuesClosed
221
+
222
+ 📌 Próximos Pasos:
223
+
224
+ 1. Revisar issues asignados a Copilot
225
+ 2. Verificar reviews de Copilot en PRs
226
+ 3. Validar closes automáticos
227
+
228
+ 🔗 Repositorio: https://github.com/$Repo
229
+ Issues: https://github.com/$Repo/issues
230
+ PRs: https://github.com/$Repo/pulls
231
+
232
+ "@
233
+
234
+ return $report
235
+ }
236
+
237
+ # ===================
238
+ # Main Execution
239
+ # ===================
240
+
241
+ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
242
+ Write-Host "GitHub MCP Issue Manager"
243
+ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
244
+ Write-Host ""
245
+ Write-Host "Repositorio: $Repo"
246
+ Write-Host "Acción: $Action"
247
+ Write-Host "Estado: $State"
248
+
249
+ if ($DryRun) {
250
+ Write-Host "🔍 Modo DRY-RUN"
251
+ }
252
+ Write-Host ""
253
+
254
+ $assigned = 0
255
+ $reviewsRequested = 0
256
+ $closed = 0
257
+
258
+ switch ($Action) {
259
+ "assign" {
260
+ Write-Host "Asignando Copilot a issues sin asignar..."
261
+ Write-Host ""
262
+
263
+ $issues = Get-UnassignedIssues -Repo $Repo
264
+
265
+ if ($issues.Count -eq 0) {
266
+ Write-Host "✓ No hay issues sin asignar"
267
+ } else {
268
+ Write-Host "Encontrados $($issues.Count) issues:"
269
+ Write-Host ""
270
+
271
+ foreach ($issue in $issues) {
272
+ Write-Host " #$($issue.number) — $($issue.title)"
273
+
274
+ # Asignar
275
+ if (Assign-CopilotToIssue -Repo $Repo -IssueNumber $issue.number) {
276
+ $assigned++
277
+ }
278
+ }
279
+ }
280
+
281
+ Write-Host ""
282
+ Write-Host "✓ Asignación completada: $assigned issues"
283
+ }
284
+
285
+ "review" {
286
+ Write-Host "Solicitando reviews de Copilot en PRs..."
287
+ Write-Host ""
288
+
289
+ $prs = Get-OpenPullRequests -Repo $Repo
290
+
291
+ if ($prs.Count -eq 0) {
292
+ Write-Host "✓ No hay PRs abiertas"
293
+ } else {
294
+ Write-Host "Encontradas $($prs.Count) PRs:"
295
+ Write-Host ""
296
+
297
+ foreach ($pr in $prs) {
298
+ Write-Host " #$($pr.number) — $($pr.title) (por @$($pr.author.login))"
299
+
300
+ # Solicitar review
301
+ if (Request-CopilotReview -Repo $Repo -PRNumber $pr.number) {
302
+ $reviewsRequested++
303
+ }
304
+ }
305
+ }
306
+
307
+ Write-Host ""
308
+ Write-Host "✓ Reviews solicitados: $reviewsRequested PRs"
309
+ }
310
+
311
+ "close" {
312
+ Write-Host "Buscando issues para auto-cerrar..."
313
+ Write-Host ""
314
+
315
+ $closed = Auto-CloseResolvedIssues -Repo $Repo
316
+
317
+ Write-Host ""
318
+ Write-Host "✓ Issues auto-cerradas: $closed"
319
+ }
320
+ }
321
+
322
+ Write-Host ""
323
+
324
+ # Mostrar reporte final
325
+ $report = Get-ActivityReport -Repo $Repo `
326
+ -AssignedCount $assigned `
327
+ -ReviewsRequested $reviewsRequested `
328
+ -IssuesClosed $closed
329
+
330
+ Write-Host $report
331
+
332
+ Write-Host "✓ Gestión de issues completada"