agent-devkit 0.1.6 → 0.3.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 (691) hide show
  1. package/README.md +59 -5
  2. package/bin/agent.mjs +133 -7
  3. package/package.json +1 -1
  4. package/runtime/README.md +239 -5
  5. package/runtime/agent +36 -5
  6. package/runtime/agents/README.md +44 -0
  7. package/runtime/agents/agent-devkit-agent-builder/AGENTS.md +24 -0
  8. package/runtime/agents/agent-devkit-agent-builder/README.md +37 -0
  9. package/runtime/agents/agent-devkit-agent-builder/agent.yaml +46 -0
  10. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/capability.yaml +29 -0
  11. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/decision-rules.md +7 -0
  12. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/runner.py +33 -0
  13. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/workflow.md +8 -0
  14. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/capability.yaml +31 -0
  15. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/decision-rules.md +9 -0
  16. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/runner.py +39 -0
  17. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/workflow.md +8 -0
  18. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/capability.yaml +28 -0
  19. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/decision-rules.md +6 -0
  20. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/runner.py +33 -0
  21. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/workflow.md +7 -0
  22. package/runtime/agents/agent-devkit-agent-builder/infra/integrations/agent-devkit/agent_builder_repository.py +527 -0
  23. package/runtime/agents/agent-devkit-agent-builder/knowledge/context.md +15 -0
  24. package/runtime/agents/agent-devkit-agent-builder/knowledge/policies.yaml +11 -0
  25. package/runtime/agents/agent-devkit-agent-builder/knowledge/system.md +11 -0
  26. package/runtime/agents/agent-devkit-agent-builder/templates/agent-plan-output.md +20 -0
  27. package/runtime/agents/agent-devkit-agent-builder/templates/scaffold-plan-output.md +13 -0
  28. package/runtime/agents/agent-devkit-agent-builder/templates/validation-report-output.md +13 -0
  29. package/runtime/agents/agent-devkit-agent-builder/tests/test_runners.py +188 -0
  30. package/runtime/agents/automation-architect/AGENTS.md +11 -0
  31. package/runtime/agents/automation-architect/README.md +27 -0
  32. package/runtime/agents/automation-architect/agent.yaml +57 -0
  33. package/runtime/agents/automation-architect/capabilities/classify-automation-request/capability.yaml +35 -0
  34. package/runtime/agents/automation-architect/capabilities/classify-automation-request/decision-rules.md +10 -0
  35. package/runtime/agents/automation-architect/capabilities/classify-automation-request/runner.py +37 -0
  36. package/runtime/agents/automation-architect/capabilities/classify-automation-request/workflow.md +7 -0
  37. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/capability.yaml +34 -0
  38. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/decision-rules.md +7 -0
  39. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/runner.py +37 -0
  40. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/workflow.md +6 -0
  41. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/capability.yaml +35 -0
  42. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/decision-rules.md +7 -0
  43. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/runner.py +37 -0
  44. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/workflow.md +7 -0
  45. package/runtime/agents/automation-architect/capabilities/review-automation-solution/capability.yaml +36 -0
  46. package/runtime/agents/automation-architect/capabilities/review-automation-solution/decision-rules.md +7 -0
  47. package/runtime/agents/automation-architect/capabilities/review-automation-solution/runner.py +39 -0
  48. package/runtime/agents/automation-architect/capabilities/review-automation-solution/workflow.md +7 -0
  49. package/runtime/agents/automation-architect/infra/integrations/automation-architecture/automation_architecture_repository.py +481 -0
  50. package/runtime/agents/automation-architect/knowledge/context.md +22 -0
  51. package/runtime/agents/automation-architect/knowledge/policies.yaml +20 -0
  52. package/runtime/agents/automation-architect/knowledge/system.md +8 -0
  53. package/runtime/agents/automation-architect/templates/automation-classification.md +6 -0
  54. package/runtime/agents/automation-architect/templates/automation-plan.md +5 -0
  55. package/runtime/agents/automation-architect/tests/test_runners.py +135 -0
  56. package/runtime/agents/aws-architecture-analyst/agent.yaml +17 -4
  57. package/runtime/agents/aws-cloudwatch-log-analyzer/agent.yaml +12 -2
  58. package/runtime/agents/aws-cloudwatch-log-analyzer/capabilities/analyze-service-error/capability.yaml +16 -0
  59. package/runtime/agents/aws-lambda-builder/AGENTS.md +27 -0
  60. package/runtime/agents/aws-lambda-builder/README.md +21 -0
  61. package/runtime/agents/aws-lambda-builder/agent.yaml +46 -0
  62. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/capability.yaml +18 -0
  63. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/decision-rules.md +6 -0
  64. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/runner.py +33 -0
  65. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/workflow.md +6 -0
  66. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/capability.yaml +20 -0
  67. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/decision-rules.md +6 -0
  68. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/runner.py +39 -0
  69. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/workflow.md +7 -0
  70. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/capability.yaml +22 -0
  71. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/decision-rules.md +6 -0
  72. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/runner.py +41 -0
  73. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/workflow.md +6 -0
  74. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/capability.yaml +18 -0
  75. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/decision-rules.md +7 -0
  76. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/runner.py +33 -0
  77. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/workflow.md +6 -0
  78. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/capability.yaml +18 -0
  79. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/decision-rules.md +7 -0
  80. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/runner.py +33 -0
  81. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/workflow.md +5 -0
  82. package/runtime/agents/aws-lambda-builder/infra/integrations/aws-lambda/aws_lambda_repository.py +688 -0
  83. package/runtime/agents/aws-lambda-builder/knowledge/context.md +12 -0
  84. package/runtime/agents/aws-lambda-builder/knowledge/policies.yaml +23 -0
  85. package/runtime/agents/aws-lambda-builder/knowledge/system.md +10 -0
  86. package/runtime/agents/aws-lambda-builder/templates/lambda-deploy-plan.md +3 -0
  87. package/runtime/agents/aws-lambda-builder/templates/lambda-package.md +3 -0
  88. package/runtime/agents/aws-lambda-builder/templates/lambda-plan.md +3 -0
  89. package/runtime/agents/aws-lambda-builder/templates/lambda-readme.md +3 -0
  90. package/runtime/agents/aws-lambda-builder/templates/lambda-security-review.md +3 -0
  91. package/runtime/agents/aws-lambda-builder/tests/test_runners.py +355 -0
  92. package/runtime/agents/aws-operations-operator/agent.yaml +18 -6
  93. package/runtime/agents/aws-security-governance-auditor/agent.yaml +17 -5
  94. package/runtime/agents/azure-devops-orchestrator/agent.yaml +15 -2
  95. package/runtime/agents/azure-devops-orchestrator/capabilities/read-card/capability.yaml +29 -0
  96. package/runtime/agents/bpo-analyser/agent.yaml +12 -2
  97. package/runtime/agents/bpo-analyser/knowledge/policies.yaml +2 -2
  98. package/runtime/agents/contribution-reviewer/AGENTS.md +8 -0
  99. package/runtime/agents/contribution-reviewer/README.md +8 -0
  100. package/runtime/agents/contribution-reviewer/agent.yaml +40 -0
  101. package/runtime/agents/contribution-reviewer/capabilities/plan-contribution-pr/capability.yaml +27 -0
  102. package/runtime/agents/contribution-reviewer/capabilities/plan-contribution-pr/decision-rules.md +5 -0
  103. package/runtime/agents/contribution-reviewer/capabilities/plan-contribution-pr/workflow.md +6 -0
  104. package/runtime/agents/contribution-reviewer/capabilities/review-contribution/capability.yaml +25 -0
  105. package/runtime/agents/contribution-reviewer/capabilities/review-contribution/decision-rules.md +5 -0
  106. package/runtime/agents/contribution-reviewer/capabilities/review-contribution/workflow.md +5 -0
  107. package/runtime/agents/contribution-reviewer/capabilities/validate-local-contribution/capability.yaml +26 -0
  108. package/runtime/agents/contribution-reviewer/capabilities/validate-local-contribution/decision-rules.md +5 -0
  109. package/runtime/agents/contribution-reviewer/capabilities/validate-local-contribution/workflow.md +6 -0
  110. package/runtime/agents/contribution-reviewer/infra/README.md +6 -0
  111. package/runtime/agents/contribution-reviewer/knowledge/context.md +8 -0
  112. package/runtime/agents/contribution-reviewer/knowledge/system.md +8 -0
  113. package/runtime/agents/contribution-reviewer/templates/README.md +3 -0
  114. package/runtime/agents/data-scientist-analyst/agent.yaml +16 -4
  115. package/runtime/agents/data-scientist-analyst/capabilities/generate-data-report/capability.yaml +1 -1
  116. package/runtime/agents/data-scientist-analyst/capabilities/generate-reconciliation-report/capability.yaml +1 -1
  117. package/runtime/agents/data-scientist-analyst/capabilities/run-data-pipeline/capability.yaml +1 -1
  118. package/runtime/agents/data-scientist-analyst/infra/integrations/agent-bridge/methods/analyze-sql-source.yaml +1 -1
  119. package/runtime/agents/data-scientist-analyst/knowledge/policies.yaml +4 -4
  120. package/runtime/agents/data-scientist-analyst/knowledge/system.md +1 -1
  121. package/runtime/agents/data-scientist-analyst/tests/test_runners.py +1 -1
  122. package/runtime/agents/database-change-operator/agent.yaml +12 -1
  123. package/runtime/agents/docker-container-builder/AGENTS.md +27 -0
  124. package/runtime/agents/docker-container-builder/README.md +21 -0
  125. package/runtime/agents/docker-container-builder/agent.yaml +52 -0
  126. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/capability.yaml +18 -0
  127. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/decision-rules.md +6 -0
  128. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/runner.py +32 -0
  129. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/workflow.md +6 -0
  130. package/runtime/agents/docker-container-builder/capabilities/generate-compose/capability.yaml +18 -0
  131. package/runtime/agents/docker-container-builder/capabilities/generate-compose/decision-rules.md +7 -0
  132. package/runtime/agents/docker-container-builder/capabilities/generate-compose/runner.py +32 -0
  133. package/runtime/agents/docker-container-builder/capabilities/generate-compose/workflow.md +6 -0
  134. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/capability.yaml +20 -0
  135. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/decision-rules.md +7 -0
  136. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/runner.py +38 -0
  137. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/workflow.md +7 -0
  138. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/capability.yaml +18 -0
  139. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/decision-rules.md +6 -0
  140. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/runner.py +32 -0
  141. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/workflow.md +7 -0
  142. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/capability.yaml +18 -0
  143. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/decision-rules.md +6 -0
  144. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/runner.py +32 -0
  145. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/workflow.md +6 -0
  146. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/capability.yaml +21 -0
  147. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/decision-rules.md +6 -0
  148. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/runner.py +43 -0
  149. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/workflow.md +5 -0
  150. package/runtime/agents/docker-container-builder/infra/integrations/docker-container/docker_container_repository.py +837 -0
  151. package/runtime/agents/docker-container-builder/knowledge/context.md +21 -0
  152. package/runtime/agents/docker-container-builder/knowledge/policies.yaml +13 -0
  153. package/runtime/agents/docker-container-builder/knowledge/system.md +21 -0
  154. package/runtime/agents/docker-container-builder/templates/container-plan.md +4 -0
  155. package/runtime/agents/docker-container-builder/templates/container-review.md +4 -0
  156. package/runtime/agents/docker-container-builder/templates/docker-compose.md +5 -0
  157. package/runtime/agents/docker-container-builder/templates/docker-readme.md +3 -0
  158. package/runtime/agents/docker-container-builder/templates/dockerfile.md +5 -0
  159. package/runtime/agents/docker-container-builder/tests/test_runners.py +255 -0
  160. package/runtime/agents/drawio-diagram-builder/agent.yaml +11 -2
  161. package/runtime/agents/drawio-diagram-builder/capabilities/execute-diagram-delivery/capability.yaml +1 -1
  162. package/runtime/agents/drawio-diagram-builder/capabilities/read-azure-card-context/capability.yaml +1 -1
  163. package/runtime/agents/elasticsearch-log-analyzer/agent.yaml +14 -2
  164. package/runtime/agents/elasticsearch-log-analyzer/capabilities/analyze-service-errors/capability.yaml +14 -0
  165. package/runtime/agents/excel-workbook-builder/agent.yaml +10 -0
  166. package/runtime/agents/excel-workbook-builder/capabilities/create-template/capability.yaml +1 -1
  167. package/runtime/agents/excel-workbook-builder/capabilities/create-template/workflow.md +1 -1
  168. package/runtime/agents/excel-workbook-builder/capabilities/create-template-version/capability.yaml +1 -1
  169. package/runtime/agents/excel-workbook-builder/capabilities/generate-template-input-file/capability.yaml +1 -2
  170. package/runtime/agents/excel-workbook-builder/capabilities/refine-template/capability.yaml +1 -1
  171. package/runtime/agents/excel-workbook-builder/capabilities/register-template/capability.yaml +1 -2
  172. package/runtime/agents/excel-workbook-builder/capabilities/register-template/workflow.md +1 -1
  173. package/runtime/agents/execution-loop-builder/AGENTS.md +24 -0
  174. package/runtime/agents/execution-loop-builder/README.md +19 -0
  175. package/runtime/agents/execution-loop-builder/agent.yaml +49 -0
  176. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/capability.yaml +20 -0
  177. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/decision-rules.md +6 -0
  178. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/runner.py +38 -0
  179. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/workflow.md +7 -0
  180. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/capability.yaml +18 -0
  181. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/decision-rules.md +5 -0
  182. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/runner.py +32 -0
  183. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/workflow.md +6 -0
  184. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/capability.yaml +18 -0
  185. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/decision-rules.md +6 -0
  186. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/runner.py +32 -0
  187. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/workflow.md +6 -0
  188. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/capability.yaml +19 -0
  189. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/decision-rules.md +6 -0
  190. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/runner.py +36 -0
  191. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/workflow.md +6 -0
  192. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/capability.yaml +19 -0
  193. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/decision-rules.md +6 -0
  194. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/runner.py +39 -0
  195. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/workflow.md +5 -0
  196. package/runtime/agents/execution-loop-builder/infra/integrations/execution-loop/execution_loop_repository.py +608 -0
  197. package/runtime/agents/execution-loop-builder/knowledge/context.md +26 -0
  198. package/runtime/agents/execution-loop-builder/knowledge/policies.yaml +13 -0
  199. package/runtime/agents/execution-loop-builder/knowledge/system.md +19 -0
  200. package/runtime/agents/execution-loop-builder/templates/loop-plan.md +3 -0
  201. package/runtime/agents/execution-loop-builder/templates/loop-readme.md +3 -0
  202. package/runtime/agents/execution-loop-builder/templates/loop-review.md +3 -0
  203. package/runtime/agents/execution-loop-builder/templates/loop-runner.py +2 -0
  204. package/runtime/agents/execution-loop-builder/tests/test_runners.py +274 -0
  205. package/runtime/agents/execution-reviewer/agent.yaml +6 -4
  206. package/runtime/agents/execution-reviewer/capabilities/review-agent-result/capability.yaml +1 -2
  207. package/runtime/agents/execution-reviewer/capabilities/review-final-output/capability.yaml +1 -2
  208. package/runtime/agents/execution-reviewer/capabilities/review-plan/capability.yaml +1 -2
  209. package/runtime/agents/figma-ui-ux-product-designer/agent.yaml +17 -5
  210. package/runtime/agents/figma-ui-ux-product-designer/capabilities/analyze-product-context/capability.yaml +1 -1
  211. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-interview/capability.yaml +1 -1
  212. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-review-session/capability.yaml +1 -1
  213. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-dev-handoff/capability.yaml +1 -1
  214. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-user-journey-diagram/capability.yaml +1 -1
  215. package/runtime/agents/figma-ui-ux-product-designer/capabilities/ingest-design-source/capability.yaml +1 -1
  216. package/runtime/agents/figma-ui-ux-product-designer/capabilities/triage-design-feedback/capability.yaml +1 -1
  217. package/runtime/agents/generic-agent-builder/AGENTS.md +20 -0
  218. package/runtime/agents/generic-agent-builder/README.md +40 -0
  219. package/runtime/agents/generic-agent-builder/agent.yaml +43 -0
  220. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/capability.yaml +18 -0
  221. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/decision-rules.md +5 -0
  222. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/runner.py +33 -0
  223. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/workflow.md +6 -0
  224. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/capability.yaml +20 -0
  225. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/decision-rules.md +6 -0
  226. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/runner.py +39 -0
  227. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/workflow.md +7 -0
  228. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/capability.yaml +18 -0
  229. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/decision-rules.md +5 -0
  230. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/runner.py +33 -0
  231. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/workflow.md +5 -0
  232. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/capability.yaml +18 -0
  233. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/decision-rules.md +6 -0
  234. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/runner.py +33 -0
  235. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/workflow.md +6 -0
  236. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/capability.yaml +20 -0
  237. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/decision-rules.md +6 -0
  238. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/runner.py +40 -0
  239. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/workflow.md +7 -0
  240. package/runtime/agents/generic-agent-builder/infra/integrations/generic-agent/generic_agent_repository.py +445 -0
  241. package/runtime/agents/generic-agent-builder/knowledge/context.md +11 -0
  242. package/runtime/agents/generic-agent-builder/knowledge/policies.yaml +12 -0
  243. package/runtime/agents/generic-agent-builder/knowledge/system.md +17 -0
  244. package/runtime/agents/generic-agent-builder/templates/generic-agent-instructions.md +17 -0
  245. package/runtime/agents/generic-agent-builder/templates/generic-review-report.md +13 -0
  246. package/runtime/agents/generic-agent-builder/templates/generic-skill.md +14 -0
  247. package/runtime/agents/generic-agent-builder/tests/test_runners.py +220 -0
  248. package/runtime/agents/github-pr-reviewer/agent.yaml +17 -5
  249. package/runtime/agents/github-pr-reviewer/capabilities/create-review-automation/capability.yaml +1 -1
  250. package/runtime/agents/github-pr-reviewer/capabilities/inspect-pr/capability.yaml +1 -1
  251. package/runtime/agents/github-pr-reviewer/capabilities/list-review-requests/capability.yaml +1 -1
  252. package/runtime/agents/github-pr-reviewer/capabilities/review-pr-diff/capability.yaml +1 -1
  253. package/runtime/agents/knowledge-author/AGENTS.md +7 -0
  254. package/runtime/agents/knowledge-author/README.md +7 -0
  255. package/runtime/agents/knowledge-author/agent.yaml +37 -0
  256. package/runtime/agents/knowledge-author/capabilities/create-knowledge-snapshot/capability.yaml +30 -0
  257. package/runtime/agents/knowledge-author/capabilities/create-knowledge-snapshot/decision-rules.md +6 -0
  258. package/runtime/agents/knowledge-author/capabilities/create-knowledge-snapshot/workflow.md +7 -0
  259. package/runtime/agents/knowledge-author/infra/.gitkeep +1 -0
  260. package/runtime/agents/knowledge-author/knowledge/context.md +4 -0
  261. package/runtime/agents/knowledge-author/knowledge/system.md +4 -0
  262. package/runtime/agents/knowledge-author/templates/.gitkeep +1 -0
  263. package/runtime/agents/knowledge-curator/AGENTS.md +7 -0
  264. package/runtime/agents/knowledge-curator/README.md +6 -0
  265. package/runtime/agents/knowledge-curator/agent.yaml +37 -0
  266. package/runtime/agents/knowledge-curator/capabilities/curate-knowledge-base/capability.yaml +29 -0
  267. package/runtime/agents/knowledge-curator/capabilities/curate-knowledge-base/decision-rules.md +6 -0
  268. package/runtime/agents/knowledge-curator/capabilities/curate-knowledge-base/workflow.md +7 -0
  269. package/runtime/agents/knowledge-curator/infra/.gitkeep +1 -0
  270. package/runtime/agents/knowledge-curator/knowledge/context.md +4 -0
  271. package/runtime/agents/knowledge-curator/knowledge/system.md +4 -0
  272. package/runtime/agents/knowledge-curator/templates/.gitkeep +1 -0
  273. package/runtime/agents/knowledge-generator/agent.yaml +13 -3
  274. package/runtime/agents/knowledge-generator/capabilities/generate-knowledge/capability.yaml +1 -1
  275. package/runtime/agents/knowledge-infra-builder/AGENTS.md +8 -0
  276. package/runtime/agents/knowledge-infra-builder/README.md +8 -0
  277. package/runtime/agents/knowledge-infra-builder/agent.yaml +38 -0
  278. package/runtime/agents/knowledge-infra-builder/capabilities/create-knowledge-base/capability.yaml +30 -0
  279. package/runtime/agents/knowledge-infra-builder/capabilities/create-knowledge-base/decision-rules.md +6 -0
  280. package/runtime/agents/knowledge-infra-builder/capabilities/create-knowledge-base/workflow.md +7 -0
  281. package/runtime/agents/knowledge-infra-builder/infra/.gitkeep +1 -0
  282. package/runtime/agents/knowledge-infra-builder/knowledge/context.md +4 -0
  283. package/runtime/agents/knowledge-infra-builder/knowledge/system.md +4 -0
  284. package/runtime/agents/knowledge-infra-builder/templates/.gitkeep +1 -0
  285. package/runtime/agents/knowledge-owner/AGENTS.md +7 -0
  286. package/runtime/agents/knowledge-owner/README.md +6 -0
  287. package/runtime/agents/knowledge-owner/agent.yaml +37 -0
  288. package/runtime/agents/knowledge-owner/capabilities/publish-knowledge-snapshot/capability.yaml +28 -0
  289. package/runtime/agents/knowledge-owner/capabilities/publish-knowledge-snapshot/decision-rules.md +6 -0
  290. package/runtime/agents/knowledge-owner/capabilities/publish-knowledge-snapshot/workflow.md +7 -0
  291. package/runtime/agents/knowledge-owner/infra/.gitkeep +1 -0
  292. package/runtime/agents/knowledge-owner/knowledge/context.md +4 -0
  293. package/runtime/agents/knowledge-owner/knowledge/system.md +4 -0
  294. package/runtime/agents/knowledge-owner/templates/.gitkeep +1 -0
  295. package/runtime/agents/knowledge-reviewer/AGENTS.md +7 -0
  296. package/runtime/agents/knowledge-reviewer/README.md +7 -0
  297. package/runtime/agents/knowledge-reviewer/agent.yaml +36 -0
  298. package/runtime/agents/knowledge-reviewer/capabilities/review-knowledge-snapshot/capability.yaml +26 -0
  299. package/runtime/agents/knowledge-reviewer/capabilities/review-knowledge-snapshot/decision-rules.md +6 -0
  300. package/runtime/agents/knowledge-reviewer/capabilities/review-knowledge-snapshot/workflow.md +7 -0
  301. package/runtime/agents/knowledge-reviewer/infra/.gitkeep +1 -0
  302. package/runtime/agents/knowledge-reviewer/knowledge/context.md +4 -0
  303. package/runtime/agents/knowledge-reviewer/knowledge/system.md +4 -0
  304. package/runtime/agents/knowledge-reviewer/templates/.gitkeep +1 -0
  305. package/runtime/agents/local-llm-operator/agent.yaml +6 -4
  306. package/runtime/agents/local-llm-operator/capabilities/delegate-operational-task/capability.yaml +1 -2
  307. package/runtime/agents/local-llm-operator/capabilities/inspect-local-models/capability.yaml +1 -2
  308. package/runtime/agents/local-llm-operator/capabilities/select-local-worker/capability.yaml +1 -2
  309. package/runtime/agents/local-memory-manager/AGENTS.md +5 -0
  310. package/runtime/agents/local-memory-manager/README.md +7 -0
  311. package/runtime/agents/local-memory-manager/agent.yaml +38 -0
  312. package/runtime/agents/local-memory-manager/capabilities/curate-local-memory/capability.yaml +19 -0
  313. package/runtime/agents/local-memory-manager/capabilities/curate-local-memory/decision-rules.md +5 -0
  314. package/runtime/agents/local-memory-manager/capabilities/curate-local-memory/workflow.md +6 -0
  315. package/runtime/agents/local-memory-manager/capabilities/inspect-local-memory/capability.yaml +19 -0
  316. package/runtime/agents/local-memory-manager/capabilities/inspect-local-memory/decision-rules.md +5 -0
  317. package/runtime/agents/local-memory-manager/capabilities/inspect-local-memory/workflow.md +5 -0
  318. package/runtime/agents/local-memory-manager/infra/.gitkeep +1 -0
  319. package/runtime/agents/local-memory-manager/knowledge/context.md +4 -0
  320. package/runtime/agents/local-memory-manager/knowledge/system.md +4 -0
  321. package/runtime/agents/local-memory-manager/templates/.gitkeep +1 -0
  322. package/runtime/agents/memory-sync-manager/AGENTS.md +7 -0
  323. package/runtime/agents/memory-sync-manager/README.md +7 -0
  324. package/runtime/agents/memory-sync-manager/agent.yaml +37 -0
  325. package/runtime/agents/memory-sync-manager/capabilities/plan-memory-backup/capability.yaml +29 -0
  326. package/runtime/agents/memory-sync-manager/capabilities/plan-memory-backup/decision-rules.md +6 -0
  327. package/runtime/agents/memory-sync-manager/capabilities/plan-memory-backup/workflow.md +7 -0
  328. package/runtime/agents/memory-sync-manager/infra/.gitkeep +1 -0
  329. package/runtime/agents/memory-sync-manager/knowledge/context.md +4 -0
  330. package/runtime/agents/memory-sync-manager/knowledge/system.md +4 -0
  331. package/runtime/agents/memory-sync-manager/templates/.gitkeep +1 -0
  332. package/runtime/agents/n1-support-agent/agent.yaml +40 -1
  333. package/runtime/agents/n2-support-agent/agent.yaml +41 -2
  334. package/runtime/agents/n2-support-agent/knowledge/policies.yaml +2 -2
  335. package/runtime/agents/notification-operator/AGENTS.md +11 -0
  336. package/runtime/agents/notification-operator/README.md +15 -0
  337. package/runtime/agents/notification-operator/agent.yaml +43 -0
  338. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/capability.yaml +19 -0
  339. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/decision-rules.md +6 -0
  340. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/runner.py +33 -0
  341. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/workflow.md +6 -0
  342. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/capability.yaml +25 -0
  343. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/decision-rules.md +7 -0
  344. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/runner.py +49 -0
  345. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/workflow.md +6 -0
  346. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/capability.yaml +27 -0
  347. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/decision-rules.md +6 -0
  348. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/runner.py +68 -0
  349. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/workflow.md +7 -0
  350. package/runtime/agents/notification-operator/infra/README.md +6 -0
  351. package/runtime/agents/notification-operator/knowledge/context.md +10 -0
  352. package/runtime/agents/notification-operator/knowledge/policies.yaml +9 -0
  353. package/runtime/agents/notification-operator/knowledge/system.md +7 -0
  354. package/runtime/agents/notification-operator/templates/README.md +6 -0
  355. package/runtime/agents/notification-operator/tests/test_runners.py +108 -0
  356. package/runtime/agents/playwright-automation-builder/AGENTS.md +23 -0
  357. package/runtime/agents/playwright-automation-builder/README.md +43 -0
  358. package/runtime/agents/playwright-automation-builder/agent.yaml +48 -0
  359. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/capability.yaml +20 -0
  360. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/decision-rules.md +6 -0
  361. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/runner.py +38 -0
  362. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/workflow.md +6 -0
  363. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/capability.yaml +18 -0
  364. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/decision-rules.md +6 -0
  365. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/runner.py +32 -0
  366. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/workflow.md +6 -0
  367. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/capability.yaml +18 -0
  368. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/decision-rules.md +6 -0
  369. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/runner.py +32 -0
  370. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/workflow.md +6 -0
  371. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/capability.yaml +19 -0
  372. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/decision-rules.md +6 -0
  373. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/runner.py +33 -0
  374. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/workflow.md +6 -0
  375. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/capability.yaml +22 -0
  376. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/decision-rules.md +6 -0
  377. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/runner.py +40 -0
  378. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/workflow.md +6 -0
  379. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/capability.yaml +22 -0
  380. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/decision-rules.md +6 -0
  381. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/runner.py +42 -0
  382. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/workflow.md +6 -0
  383. package/runtime/agents/playwright-automation-builder/infra/integrations/playwright-automation/playwright_automation_repository.py +865 -0
  384. package/runtime/agents/playwright-automation-builder/knowledge/context.md +19 -0
  385. package/runtime/agents/playwright-automation-builder/knowledge/policies.yaml +25 -0
  386. package/runtime/agents/playwright-automation-builder/knowledge/system.md +19 -0
  387. package/runtime/agents/playwright-automation-builder/templates/capability-wrapper.md +4 -0
  388. package/runtime/agents/playwright-automation-builder/templates/playwright-automation.py +12 -0
  389. package/runtime/agents/playwright-automation-builder/templates/playwright-readme.md +13 -0
  390. package/runtime/agents/playwright-automation-builder/templates/playwright-review-report.md +9 -0
  391. package/runtime/agents/playwright-automation-builder/templates/playwright-test.py +2 -0
  392. package/runtime/agents/playwright-automation-builder/tests/test_runners.py +261 -0
  393. package/runtime/agents/postgres-data-analyzer/agent.yaml +13 -2
  394. package/runtime/agents/presentation-deck-builder/agent.yaml +14 -3
  395. package/runtime/agents/presentation-deck-builder/capabilities/create-template/capability.yaml +1 -1
  396. package/runtime/agents/presentation-deck-builder/capabilities/create-template-version/capability.yaml +1 -1
  397. package/runtime/agents/presentation-deck-builder/capabilities/generate-template-input-file/capability.yaml +1 -1
  398. package/runtime/agents/presentation-deck-builder/capabilities/refine-template/capability.yaml +1 -1
  399. package/runtime/agents/presentation-deck-builder/capabilities/register-template/capability.yaml +1 -1
  400. package/runtime/agents/presentation-deck-builder/knowledge/prompts/create-template.md +1 -1
  401. package/runtime/agents/presentation-deck-builder/knowledge/prompts/generate-template-input-file.md +1 -1
  402. package/runtime/agents/provider-configurator/agent.yaml +6 -4
  403. package/runtime/agents/provider-configurator/capabilities/collect-provider-credentials/capability.yaml +1 -2
  404. package/runtime/agents/provider-configurator/capabilities/configure-provider-source/capability.yaml +1 -2
  405. package/runtime/agents/provider-configurator/capabilities/validate-provider-readiness/capability.yaml +1 -2
  406. package/runtime/agents/pyautogui-automation-builder/AGENTS.md +32 -0
  407. package/runtime/agents/pyautogui-automation-builder/README.md +44 -0
  408. package/runtime/agents/pyautogui-automation-builder/agent.yaml +45 -0
  409. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/capability.yaml +20 -0
  410. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/decision-rules.md +6 -0
  411. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/runner.py +39 -0
  412. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/workflow.md +7 -0
  413. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/capability.yaml +18 -0
  414. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/decision-rules.md +7 -0
  415. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/runner.py +33 -0
  416. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/workflow.md +7 -0
  417. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/capability.yaml +18 -0
  418. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/decision-rules.md +8 -0
  419. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/runner.py +33 -0
  420. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/workflow.md +9 -0
  421. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/capability.yaml +20 -0
  422. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/decision-rules.md +8 -0
  423. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/runner.py +43 -0
  424. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/workflow.md +7 -0
  425. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/capability.yaml +22 -0
  426. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/decision-rules.md +6 -0
  427. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/runner.py +43 -0
  428. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/workflow.md +7 -0
  429. package/runtime/agents/pyautogui-automation-builder/infra/integrations/pyautogui-automation/pyautogui_automation_repository.py +856 -0
  430. package/runtime/agents/pyautogui-automation-builder/knowledge/context.md +17 -0
  431. package/runtime/agents/pyautogui-automation-builder/knowledge/policies.yaml +24 -0
  432. package/runtime/agents/pyautogui-automation-builder/knowledge/system.md +13 -0
  433. package/runtime/agents/pyautogui-automation-builder/templates/capability-wrapper.md +3 -0
  434. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-automation.py +12 -0
  435. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-readme.md +3 -0
  436. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-review-report.md +3 -0
  437. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-test.py +2 -0
  438. package/runtime/agents/pyautogui-automation-builder/tests/test_runners.py +376 -0
  439. package/runtime/agents/python-automation-builder/AGENTS.md +25 -0
  440. package/runtime/agents/python-automation-builder/README.md +43 -0
  441. package/runtime/agents/python-automation-builder/agent.yaml +45 -0
  442. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/capability.yaml +20 -0
  443. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/decision-rules.md +6 -0
  444. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/runner.py +39 -0
  445. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/workflow.md +7 -0
  446. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/capability.yaml +18 -0
  447. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/decision-rules.md +5 -0
  448. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/runner.py +33 -0
  449. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/workflow.md +5 -0
  450. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/capability.yaml +18 -0
  451. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/decision-rules.md +6 -0
  452. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/runner.py +33 -0
  453. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/workflow.md +6 -0
  454. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/capability.yaml +20 -0
  455. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/decision-rules.md +6 -0
  456. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/runner.py +43 -0
  457. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/workflow.md +5 -0
  458. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/capability.yaml +22 -0
  459. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/decision-rules.md +6 -0
  460. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/runner.py +43 -0
  461. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/workflow.md +6 -0
  462. package/runtime/agents/python-automation-builder/infra/integrations/python-automation/python_automation_repository.py +717 -0
  463. package/runtime/agents/python-automation-builder/knowledge/context.md +15 -0
  464. package/runtime/agents/python-automation-builder/knowledge/policies.yaml +12 -0
  465. package/runtime/agents/python-automation-builder/knowledge/system.md +19 -0
  466. package/runtime/agents/python-automation-builder/templates/automation-readme.md +13 -0
  467. package/runtime/agents/python-automation-builder/templates/automation-review-report.md +13 -0
  468. package/runtime/agents/python-automation-builder/templates/automation-test.py +9 -0
  469. package/runtime/agents/python-automation-builder/templates/automation.py +19 -0
  470. package/runtime/agents/python-automation-builder/templates/capability-wrapper.md +4 -0
  471. package/runtime/agents/python-automation-builder/tests/test_runners.py +292 -0
  472. package/runtime/agents/selenium-automation-builder/AGENTS.md +27 -0
  473. package/runtime/agents/selenium-automation-builder/README.md +40 -0
  474. package/runtime/agents/selenium-automation-builder/agent.yaml +45 -0
  475. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/capability.yaml +20 -0
  476. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/decision-rules.md +6 -0
  477. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/runner.py +39 -0
  478. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/workflow.md +7 -0
  479. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/capability.yaml +18 -0
  480. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/decision-rules.md +6 -0
  481. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/runner.py +33 -0
  482. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/workflow.md +6 -0
  483. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/capability.yaml +18 -0
  484. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/decision-rules.md +6 -0
  485. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/runner.py +33 -0
  486. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/workflow.md +6 -0
  487. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/capability.yaml +20 -0
  488. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/decision-rules.md +6 -0
  489. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/runner.py +40 -0
  490. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/workflow.md +6 -0
  491. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/capability.yaml +22 -0
  492. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/decision-rules.md +6 -0
  493. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/runner.py +43 -0
  494. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/workflow.md +6 -0
  495. package/runtime/agents/selenium-automation-builder/infra/integrations/selenium-automation/selenium_automation_repository.py +793 -0
  496. package/runtime/agents/selenium-automation-builder/knowledge/context.md +15 -0
  497. package/runtime/agents/selenium-automation-builder/knowledge/policies.yaml +17 -0
  498. package/runtime/agents/selenium-automation-builder/knowledge/system.md +18 -0
  499. package/runtime/agents/selenium-automation-builder/templates/capability-wrapper.md +4 -0
  500. package/runtime/agents/selenium-automation-builder/templates/selenium-automation.py +20 -0
  501. package/runtime/agents/selenium-automation-builder/templates/selenium-readme.md +13 -0
  502. package/runtime/agents/selenium-automation-builder/templates/selenium-review-report.md +13 -0
  503. package/runtime/agents/selenium-automation-builder/templates/selenium-test.py +9 -0
  504. package/runtime/agents/selenium-automation-builder/tests/test_runners.py +282 -0
  505. package/runtime/agents/shared-memory-curator/AGENTS.md +5 -0
  506. package/runtime/agents/shared-memory-curator/README.md +6 -0
  507. package/runtime/agents/shared-memory-curator/agent.yaml +38 -0
  508. package/runtime/agents/shared-memory-curator/capabilities/create-shared-memory/capability.yaml +19 -0
  509. package/runtime/agents/shared-memory-curator/capabilities/create-shared-memory/decision-rules.md +5 -0
  510. package/runtime/agents/shared-memory-curator/capabilities/create-shared-memory/workflow.md +5 -0
  511. package/runtime/agents/shared-memory-curator/capabilities/publish-shared-submission/capability.yaml +19 -0
  512. package/runtime/agents/shared-memory-curator/capabilities/publish-shared-submission/decision-rules.md +5 -0
  513. package/runtime/agents/shared-memory-curator/capabilities/publish-shared-submission/workflow.md +5 -0
  514. package/runtime/agents/shared-memory-curator/capabilities/review-shared-submission/capability.yaml +19 -0
  515. package/runtime/agents/shared-memory-curator/capabilities/review-shared-submission/decision-rules.md +5 -0
  516. package/runtime/agents/shared-memory-curator/capabilities/review-shared-submission/workflow.md +5 -0
  517. package/runtime/agents/shared-memory-curator/infra/.gitkeep +1 -0
  518. package/runtime/agents/shared-memory-curator/knowledge/context.md +5 -0
  519. package/runtime/agents/shared-memory-curator/knowledge/system.md +4 -0
  520. package/runtime/agents/shared-memory-curator/templates/.gitkeep +1 -0
  521. package/runtime/agents/software-specification-analyst/agent.yaml +17 -4
  522. package/runtime/agents/software-specification-analyst/capabilities/analyze-multiple-projects/capability.yaml +1 -1
  523. package/runtime/agents/software-specification-analyst/capabilities/analyze-project-context/capability.yaml +1 -1
  524. package/runtime/agents/software-specification-analyst/capabilities/conduct-requirements-interview/capability.yaml +1 -1
  525. package/runtime/agents/software-specification-analyst/capabilities/create-complete-spec/capability.yaml +1 -1
  526. package/runtime/agents/software-specification-analyst/capabilities/create-final-spec-from-analysis/capability.yaml +1 -1
  527. package/runtime/agents/software-specification-analyst/capabilities/create-functional-spec/capability.yaml +11 -0
  528. package/runtime/agents/software-specification-analyst/capabilities/create-technical-spec/capability.yaml +12 -0
  529. package/runtime/agents/software-specification-analyst/capabilities/refine-analysis-with-feedback/capability.yaml +1 -1
  530. package/runtime/agents/software-specification-analyst/capabilities/write-user-stories/capability.yaml +12 -0
  531. package/runtime/agents/sqlserver-change-operator/agent.yaml +12 -1
  532. package/runtime/agents/sqlserver-data-analyzer/agent.yaml +13 -2
  533. package/runtime/agents/supabase-project-analyst/AGENTS.md +29 -0
  534. package/runtime/agents/supabase-project-analyst/README.md +23 -0
  535. package/runtime/agents/supabase-project-analyst/agent.yaml +53 -0
  536. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/capability.yaml +18 -0
  537. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/decision-rules.md +5 -0
  538. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/runner.py +32 -0
  539. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/workflow.md +6 -0
  540. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/capability.yaml +18 -0
  541. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/decision-rules.md +6 -0
  542. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/runner.py +32 -0
  543. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/workflow.md +7 -0
  544. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/capability.yaml +18 -0
  545. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/decision-rules.md +5 -0
  546. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/runner.py +32 -0
  547. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/workflow.md +6 -0
  548. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/capability.yaml +18 -0
  549. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/decision-rules.md +6 -0
  550. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/runner.py +32 -0
  551. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/workflow.md +6 -0
  552. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/capability.yaml +19 -0
  553. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/decision-rules.md +6 -0
  554. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/runner.py +36 -0
  555. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/workflow.md +7 -0
  556. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/capability.yaml +18 -0
  557. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/decision-rules.md +6 -0
  558. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/runner.py +32 -0
  559. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/workflow.md +6 -0
  560. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/capability.yaml +18 -0
  561. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/decision-rules.md +6 -0
  562. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/runner.py +32 -0
  563. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/workflow.md +5 -0
  564. package/runtime/agents/supabase-project-analyst/infra/integrations/supabase-project/supabase_project_repository.py +589 -0
  565. package/runtime/agents/supabase-project-analyst/knowledge/context.md +11 -0
  566. package/runtime/agents/supabase-project-analyst/knowledge/policies.yaml +24 -0
  567. package/runtime/agents/supabase-project-analyst/knowledge/system.md +10 -0
  568. package/runtime/agents/supabase-project-analyst/templates/supabase-audit.md +3 -0
  569. package/runtime/agents/supabase-project-analyst/templates/supabase-fix-plan.md +3 -0
  570. package/runtime/agents/supabase-project-analyst/templates/supabase-inspection.md +3 -0
  571. package/runtime/agents/supabase-project-analyst/templates/supabase-report.md +3 -0
  572. package/runtime/agents/supabase-project-analyst/tests/test_runners.py +239 -0
  573. package/runtime/agents/task-orchestrator/agent.yaml +25 -3
  574. package/runtime/agents/task-orchestrator/capabilities/plan-task/capability.yaml +1 -2
  575. package/runtime/agents/task-orchestrator/capabilities/select-specialists/capability.yaml +1 -2
  576. package/runtime/agents/technical-integration-analyst/agent.yaml +15 -2
  577. package/runtime/agents/topdesk-orchestrator/agent.yaml +10 -2
  578. package/runtime/cli/README.md +35 -4
  579. package/runtime/cli/aikit/__init__.py +1 -1
  580. package/runtime/cli/aikit/acceptance.py +166 -0
  581. package/runtime/cli/aikit/agent_executor.py +26 -3
  582. package/runtime/cli/aikit/agent_registry.py +247 -6
  583. package/runtime/cli/aikit/agentic_commands.py +158 -0
  584. package/runtime/cli/aikit/app_home.py +1 -0
  585. package/runtime/cli/aikit/architecture.py +84 -0
  586. package/runtime/cli/aikit/audit.py +187 -8
  587. package/runtime/cli/aikit/autonomy.py +237 -0
  588. package/runtime/cli/aikit/capability_runtime.py +522 -0
  589. package/runtime/cli/aikit/catalog.py +516 -0
  590. package/runtime/cli/aikit/cli_dispatch.py +1554 -0
  591. package/runtime/cli/aikit/cli_parser.py +547 -0
  592. package/runtime/cli/aikit/collaboration.py +359 -0
  593. package/runtime/cli/aikit/configuration_orchestrator.py +52 -26
  594. package/runtime/cli/aikit/contribution.py +235 -0
  595. package/runtime/cli/aikit/core/__init__.py +1 -0
  596. package/runtime/cli/aikit/core/capability_contract.py +112 -0
  597. package/runtime/cli/aikit/core/requests.py +69 -0
  598. package/runtime/cli/aikit/core/runtime.py +64 -0
  599. package/runtime/cli/aikit/diagnostics.py +8 -2
  600. package/runtime/cli/aikit/doctor_runtime.py +164 -0
  601. package/runtime/cli/aikit/errors.py +7 -0
  602. package/runtime/cli/aikit/eval.py +504 -0
  603. package/runtime/cli/aikit/execution_reviewer.py +21 -0
  604. package/runtime/cli/aikit/extensions.py +140 -0
  605. package/runtime/cli/aikit/fallback.py +1 -0
  606. package/runtime/cli/aikit/github_pr.py +23 -0
  607. package/runtime/cli/aikit/guardrails.py +25 -10
  608. package/runtime/cli/aikit/human_output.py +1332 -0
  609. package/runtime/cli/aikit/impact_map.py +294 -0
  610. package/runtime/cli/aikit/interactive_wizard.py +227 -0
  611. package/runtime/cli/aikit/knowledge_base.py +1067 -0
  612. package/runtime/cli/aikit/llm.py +12 -4
  613. package/runtime/cli/aikit/local_artifacts.py +444 -0
  614. package/runtime/cli/aikit/local_llm.py +161 -0
  615. package/runtime/cli/aikit/local_llm_operator.py +35 -1
  616. package/runtime/cli/aikit/main.py +23 -2833
  617. package/runtime/cli/aikit/mcp_manifest.py +1027 -0
  618. package/runtime/cli/aikit/mcp_server.py +132 -0
  619. package/runtime/cli/aikit/mcp_tools.py +900 -0
  620. package/runtime/cli/aikit/memory.py +405 -0
  621. package/runtime/cli/aikit/mini_brain.py +246 -0
  622. package/runtime/cli/aikit/model_router.py +182 -18
  623. package/runtime/cli/aikit/module_controller.py +335 -0
  624. package/runtime/cli/aikit/natural_prompt_runtime.py +662 -0
  625. package/runtime/cli/aikit/notifications.py +716 -2
  626. package/runtime/cli/aikit/ollama.py +64 -14
  627. package/runtime/cli/aikit/onboarding.py +551 -0
  628. package/runtime/cli/aikit/orchestrator.py +809 -119
  629. package/runtime/cli/aikit/output.py +130 -2
  630. package/runtime/cli/aikit/permissions.py +14 -4
  631. package/runtime/cli/aikit/prompt_injection.py +68 -0
  632. package/runtime/cli/aikit/review_gate.py +38 -6
  633. package/runtime/cli/aikit/roadmap.py +195 -0
  634. package/runtime/cli/aikit/roadmap_cli.py +70 -0
  635. package/runtime/cli/aikit/router.py +41 -12
  636. package/runtime/cli/aikit/router_explain.py +152 -0
  637. package/runtime/cli/aikit/runtime_paths.py +11 -0
  638. package/runtime/cli/aikit/secrets.py +114 -0
  639. package/runtime/cli/aikit/sessions.py +88 -2
  640. package/runtime/cli/aikit/setup_wizard_payload.py +35 -0
  641. package/runtime/cli/aikit/shared_memory.py +415 -0
  642. package/runtime/cli/aikit/sources.py +298 -50
  643. package/runtime/cli/aikit/specialist_readiness.py +152 -0
  644. package/runtime/cli/aikit/tasks.py +553 -22
  645. package/runtime/cli/aikit/team.py +380 -0
  646. package/runtime/cli/aikit/toolchain.py +7 -2
  647. package/runtime/cli/aikit/wizard_state.py +15 -1
  648. package/runtime/cli/aikit/workflows.py +216 -0
  649. package/runtime/cli/aikit/write_policy.py +108 -0
  650. package/runtime/plugins/claude-code-ai-devkit/README.md +17 -0
  651. package/runtime/plugins/claude-code-ai-devkit/agents/README.md +29 -2
  652. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-db-analyst.md +44 -0
  653. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-execution-reviewer.md +38 -0
  654. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-pr-reviewer.md +42 -0
  655. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-repo-explorer.md +40 -0
  656. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-support-triage.md +43 -0
  657. package/runtime/plugins/claude-code-ai-devkit/plugin.json +1 -1
  658. package/runtime/plugins/claude-code-ai-devkit/skills/ai-devkit-router/SKILL.md +16 -0
  659. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/SKILL.md +1 -0
  660. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/references/subagents.md +21 -0
  661. package/runtime/plugins/claude-skill-ai-devkit/plugin.json +1 -1
  662. package/runtime/providers/azure-devops.yaml +9 -0
  663. package/runtime/providers/github.yaml +4 -0
  664. package/runtime/providers/knowledge-github.yaml +40 -0
  665. package/runtime/providers/knowledge-google-drive.yaml +32 -0
  666. package/runtime/providers/knowledge-local.yaml +26 -0
  667. package/runtime/providers/knowledge-notion.yaml +32 -0
  668. package/runtime/providers/knowledge-obsidian.yaml +24 -0
  669. package/runtime/providers/knowledge-onedrive.yaml +36 -0
  670. package/runtime/providers/knowledge-s3.yaml +45 -0
  671. package/runtime/providers/knowledge-sharepoint.yaml +39 -0
  672. package/runtime/providers/knowledge-supabase.yaml +43 -0
  673. package/runtime/providers/knowledge-vector.yaml +39 -0
  674. package/runtime/providers/local-notification.yaml +5 -2
  675. package/runtime/providers/local-scheduler.yaml +1 -1
  676. package/runtime/providers/supabase.yaml +46 -0
  677. package/runtime/requirements.txt +6 -0
  678. package/runtime/scripts/docker-cli-qa.sh +453 -0
  679. package/runtime/scripts/release-catalog-snapshot.json +594 -0
  680. package/runtime/scripts/release-gate.py +189 -8
  681. package/runtime/scripts/validate-repo.py +312 -0
  682. package/runtime/tooling/toolchain.yaml +92 -0
  683. package/runtime/vendor/skills/napkin/napkin.md +32 -12
  684. package/runtime/workflows/azure-card-analysis/README.md +3 -0
  685. package/runtime/workflows/azure-card-analysis/workflow.yaml +30 -0
  686. package/runtime/workflows/daily-pr-review/README.md +3 -0
  687. package/runtime/workflows/daily-pr-review/workflow.yaml +31 -0
  688. package/runtime/workflows/incident-analysis/README.md +3 -0
  689. package/runtime/workflows/incident-analysis/workflow.yaml +33 -0
  690. package/runtime/workflows/release-prep/README.md +3 -0
  691. package/runtime/workflows/release-prep/workflow.yaml +30 -0
@@ -0,0 +1,1554 @@
1
+ """Command dispatchers for the Agent DevKit CLI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+ from cli.aikit import __version__
10
+ from cli.aikit.aliases import add_alias, list_aliases, remove_alias, sync_aliases
11
+ from cli.aikit.agentic_commands import agentic_execute, agentic_plan
12
+ from cli.aikit.app_home import app_home_status, migrate_default_home
13
+ from cli.aikit.architecture import architecture_contract
14
+ from cli.aikit.audit import export_audit, list_audits, record_audit, show_audit, try_record_audit
15
+ from cli.aikit.calendar import calendar_list, calendar_today, calendar_tomorrow, configure_calendar
16
+ from cli.aikit.catalog import catalog_list, catalog_rebuild_index, catalog_search, catalog_show
17
+ from cli.aikit.cli_parser import DETERMINISTIC_COMMANDS, LLM_COMMANDS
18
+ from cli.aikit.contribution import (
19
+ contribution_checklist,
20
+ contribution_list,
21
+ contribution_prepare,
22
+ contribution_pr,
23
+ contribution_review,
24
+ contribution_validate,
25
+ )
26
+ from cli.aikit.core.requests import AgentPromptRequest, CapabilityRunRequest
27
+ from cli.aikit.core.runtime import (
28
+ inspect_capability_request,
29
+ list_agent_modules,
30
+ list_capability_modules,
31
+ run_agent_prompt,
32
+ run_capability_request,
33
+ )
34
+ from cli.aikit.credentials import CredentialResolverError, credential_backends
35
+ from cli.aikit.decision_store import forget_decision, list_decisions, reset_decisions, set_decision
36
+ from cli.aikit.doctor_runtime import doctor
37
+ from cli.aikit.eval import eval_list, eval_report, eval_run
38
+ from cli.aikit.errors import DevKitError
39
+ from cli.aikit.extensions import (
40
+ local_extension_add,
41
+ local_extension_enable,
42
+ local_extension_remove,
43
+ local_extension_validate,
44
+ local_extensions_list,
45
+ )
46
+ from cli.aikit.github_pr import planned_pr_commands, pr_create_automation, pr_inspect, pr_list_review_requests, pr_review
47
+ from cli.aikit.install import InstallError, install_runtime
48
+ from cli.aikit.knowledge_base import (
49
+ knowledge_base_create,
50
+ knowledge_base_join,
51
+ knowledge_base_rotate_token,
52
+ knowledge_base_status,
53
+ knowledge_base_tokens,
54
+ knowledge_curate,
55
+ knowledge_doctor,
56
+ knowledge_index,
57
+ knowledge_init,
58
+ knowledge_publish,
59
+ knowledge_review,
60
+ knowledge_review_list,
61
+ knowledge_search,
62
+ knowledge_snapshot_list,
63
+ knowledge_snapshot_score,
64
+ knowledge_snapshot_create,
65
+ knowledge_snapshot_show,
66
+ knowledge_snapshot_submit,
67
+ knowledge_sync,
68
+ )
69
+ from cli.aikit.llm import (
70
+ configure_backend,
71
+ doctor_backends,
72
+ list_backends,
73
+ llm_preference,
74
+ set_default_backend,
75
+ set_llm_preference,
76
+ )
77
+ from cli.aikit.local_llm import (
78
+ local_llm_benchmark,
79
+ local_llm_doctor,
80
+ local_llm_install,
81
+ local_llm_list,
82
+ local_llm_models,
83
+ local_llm_remove,
84
+ )
85
+ from cli.aikit.local_artifacts import (
86
+ local_agent_create,
87
+ local_agent_list,
88
+ local_agent_show,
89
+ local_agent_validate,
90
+ local_automation_create,
91
+ local_automation_enable,
92
+ local_automation_list,
93
+ local_automation_remove,
94
+ local_automation_show,
95
+ local_automation_update,
96
+ local_automation_validate,
97
+ script_create,
98
+ script_list,
99
+ script_run,
100
+ skill_create,
101
+ skill_delete,
102
+ skill_list,
103
+ skill_show,
104
+ skill_update,
105
+ )
106
+ from cli.aikit.lock import parse_profiles
107
+ from cli.aikit.memory import (
108
+ create_memory_backup,
109
+ delete_memory_backup,
110
+ list_memory_backups,
111
+ memory_path_payload,
112
+ reset_memory,
113
+ restore_memory_backup,
114
+ show_memory,
115
+ )
116
+ from cli.aikit.mcp_manifest import mcp_doctor, mcp_manifest, mcp_tools_payload
117
+ from cli.aikit.mcp_server import serve_mcp_stdio
118
+ from cli.aikit.mini_brain import setup_mini_brain
119
+ from cli.aikit.notifications import (
120
+ configure_notification_channel,
121
+ configure_notifications,
122
+ format_notification_event,
123
+ list_notification_channels,
124
+ list_notification_events,
125
+ notification_doctor,
126
+ send_notification_command,
127
+ )
128
+ from cli.aikit.ollama import ollama_models, ollama_pull, ollama_status, ollama_update
129
+ from cli.aikit.onboarding import onboarding_plan, onboarding_status
130
+ from cli.aikit.permissions import grant_permission, revoke_permission, show_permissions
131
+ from cli.aikit.personality import load_personality, reset_personality, setup_personality, update_personality
132
+ from cli.aikit.providers import (
133
+ ProviderRegistryError,
134
+ configure_provider,
135
+ credential_resolution,
136
+ list_providers,
137
+ provider_status_with_credentials,
138
+ unset_provider_config,
139
+ )
140
+ from cli.aikit.roadmap_cli import roadmap_payload
141
+ from cli.aikit.router_explain import explain_route
142
+ from cli.aikit.runtime_paths import ROOT
143
+ from cli.aikit.scheduler import run_scheduler_once, scheduler_daemon_plan
144
+ from cli.aikit.sessions import list_sessions, resume_session, show_session
145
+ from cli.aikit.setup_wizard import setup_wizard
146
+ from cli.aikit.secrets import (
147
+ add_secret_reference,
148
+ list_secret_references,
149
+ remove_secret_reference,
150
+ secret_backends,
151
+ secrets_doctor,
152
+ )
153
+ from cli.aikit.shared_memory import (
154
+ shared_memory_create,
155
+ shared_memory_list,
156
+ shared_memory_publish,
157
+ shared_memory_read,
158
+ shared_memory_review,
159
+ shared_memory_status,
160
+ shared_memory_submit,
161
+ )
162
+ from cli.aikit.sources import SourceConfigBlockedError, SourceRegistryError, add_source, list_sources, remove_source, source_status
163
+ from cli.aikit.tasks import (
164
+ create_task,
165
+ delete_task,
166
+ list_tasks,
167
+ run_task,
168
+ show_task,
169
+ task_history,
170
+ update_task_schedule,
171
+ update_task_status,
172
+ )
173
+ from cli.aikit.team import (
174
+ team_doctor,
175
+ team_init,
176
+ team_onboard,
177
+ team_profile_export,
178
+ team_profile_import,
179
+ team_profile_list,
180
+ team_profile_show,
181
+ team_profile_use,
182
+ team_status,
183
+ )
184
+ from cli.aikit.toolchain import doctor_toolchain, install_toolchain, list_toolchain
185
+ from cli.aikit.workflows import workflow_install, workflow_list, workflow_run, workflow_show
186
+ from cli.aikit.wizard_state import WizardStateError, answer_wizard, cancel_wizard, list_wizards, show_wizard
187
+ from cli.aikit.interactive_wizard import resume_agent_prompt
188
+
189
+
190
+ def dispatch(args: argparse.Namespace) -> dict[str, Any] | None:
191
+ if args.version:
192
+ return {"kind": "version", "program": getattr(args, "prog_name", "aikit"), "version": __version__}
193
+ if args.sessions_shortcut:
194
+ return list_sessions()
195
+
196
+ if not args.command:
197
+ raise DevKitError("missing command. Use --help for usage.")
198
+
199
+ command = canonical_command(args.command)
200
+ if command == "agent":
201
+ return run_agent_prompt(agent_prompt_request_from_args(args))
202
+ if command == "commands":
203
+ return list_command_modes()
204
+ if command == "onboard":
205
+ return dispatch_onboard(args)
206
+ if command == "architecture":
207
+ return architecture_contract(ROOT)
208
+ if command == "roadmap":
209
+ return dispatch_roadmap(args)
210
+ if command == "catalog":
211
+ return dispatch_catalog(args)
212
+ if command == "plan":
213
+ return dispatch_agentic_plan(args)
214
+ if command in {"execute", "orchestrate"}:
215
+ return dispatch_agentic_execute(command, args)
216
+ if command == "route":
217
+ return dispatch_route(args)
218
+ if command == "eval":
219
+ return dispatch_eval(args)
220
+ if command == "secret":
221
+ return dispatch_secret(args)
222
+ if command == "secrets":
223
+ return dispatch_secrets(args)
224
+ if command == "providers":
225
+ return dispatch_providers(args)
226
+ if command == "provider":
227
+ return dispatch_provider(args)
228
+ if command == "credential":
229
+ return dispatch_credential(args)
230
+ if command == "source":
231
+ return dispatch_source(args)
232
+ if command == "wizard":
233
+ return dispatch_wizard(args)
234
+ if command == "memory":
235
+ return dispatch_memory(args)
236
+ if command == "shared-memory":
237
+ return dispatch_shared_memory(args)
238
+ if command == "personality":
239
+ return dispatch_personality(args)
240
+ if command == "setup":
241
+ return dispatch_setup(args)
242
+ if command == "alias":
243
+ return dispatch_alias(args)
244
+ if command == "session":
245
+ return dispatch_session(args)
246
+ if command == "toolchain":
247
+ return dispatch_toolchain(args)
248
+ if command == "task":
249
+ return dispatch_task(args)
250
+ if command == "scheduler":
251
+ return dispatch_scheduler(args)
252
+ if command == "notifications":
253
+ return dispatch_notifications(args)
254
+ if command == "calendar":
255
+ return dispatch_calendar(args)
256
+ if command == "pr":
257
+ return dispatch_pr(args)
258
+ if command == "permissions":
259
+ return dispatch_permissions(args)
260
+ if command == "audit":
261
+ return dispatch_audit(args)
262
+ if command == "config":
263
+ return dispatch_config(args)
264
+ if command in {"tools", "integrations", "skills"}:
265
+ return dispatch_control_category(command, args)
266
+ if command == "skill":
267
+ return dispatch_skill(args)
268
+ if command == "script":
269
+ return dispatch_script(args)
270
+ if command == "decisions":
271
+ return dispatch_decisions(args)
272
+ if command == "ollama":
273
+ return dispatch_ollama(args)
274
+ if command == "local-llm":
275
+ return dispatch_local_llm(args)
276
+ if command == "mcp":
277
+ return dispatch_mcp(args)
278
+ if command == "local":
279
+ return dispatch_local(args)
280
+ if command == "workflow":
281
+ return dispatch_workflow(args)
282
+ if command == "team":
283
+ return dispatch_team(args)
284
+ if command == "knowledge":
285
+ return dispatch_knowledge(args)
286
+ if command == "knowledge-base":
287
+ return dispatch_knowledge_base(args)
288
+ if command in {"contribute", "contribution"}:
289
+ return dispatch_contribution(args)
290
+ if command == "llm":
291
+ return dispatch_llm(args)
292
+ if command == "install":
293
+ return dispatch_install(args)
294
+ if command == "agents":
295
+ return dispatch_agents(args)
296
+ if command == "capabilities":
297
+ return dispatch_capabilities(args)
298
+ if command == "inspect":
299
+ return inspect_capability_request(args.agent, args.capability)
300
+ if command == "run":
301
+ return run_capability_request(
302
+ CapabilityRunRequest(
303
+ agent_id=args.agent,
304
+ capability_id=args.capability,
305
+ capability_args=list(args.capability_args),
306
+ capture_output=args.json,
307
+ origin="cli",
308
+ dry_run=effective_dry_run(args),
309
+ )
310
+ )
311
+ if command == "doctor":
312
+ return doctor(args.project, args.home, args.scope)
313
+ raise DevKitError(f"unsupported command: {args.command}")
314
+
315
+
316
+ def canonical_command(command: str) -> str:
317
+ aliases = {
318
+ "a": "agents",
319
+ "c": "capabilities",
320
+ "i": "inspect",
321
+ "r": "run",
322
+ }
323
+ return aliases.get(command, command)
324
+
325
+
326
+ def agent_prompt_request_from_args(args: argparse.Namespace) -> AgentPromptRequest:
327
+ return AgentPromptRequest(
328
+ prompt=" ".join(args.prompt).strip(),
329
+ llm=args.llm,
330
+ dry_run=effective_dry_run(args),
331
+ session_id=args.session_id,
332
+ new_session=args.new_session,
333
+ no_llm_fallback=args.no_llm_fallback,
334
+ prog_name=getattr(args, "prog_name", "agent"),
335
+ project=str(Path.cwd()),
336
+ )
337
+
338
+
339
+ def capabilities_agent_from_args(args: argparse.Namespace) -> str | None:
340
+ if args.agent:
341
+ return args.agent
342
+ action_or_agent = args.action_or_agent
343
+ if action_or_agent == "list":
344
+ return args.legacy_agent
345
+ if args.legacy_agent:
346
+ raise DevKitError("unexpected extra argument for capabilities")
347
+ return action_or_agent
348
+
349
+
350
+ def list_command_modes() -> dict[str, Any]:
351
+ return {
352
+ "kind": "commands",
353
+ "deterministic": [
354
+ {
355
+ "command": command,
356
+ "requires_llm": False,
357
+ }
358
+ for command in DETERMINISTIC_COMMANDS
359
+ ],
360
+ "llm": [
361
+ llm_command_mode(command)
362
+ for command in LLM_COMMANDS
363
+ ],
364
+ }
365
+
366
+
367
+ def llm_command_mode(command: str) -> dict[str, Any]:
368
+ if command == "agent":
369
+ return {
370
+ "command": command,
371
+ "requires_llm": False,
372
+ "mode": "adaptive",
373
+ "uses_llm_when_needed": True,
374
+ "local_without_llm": [
375
+ "onboarding",
376
+ "identity",
377
+ "rename",
378
+ "capabilities-help",
379
+ "deterministic-routing",
380
+ ],
381
+ }
382
+ return {
383
+ "command": command,
384
+ "requires_llm": True,
385
+ "mode": "llm",
386
+ "uses_llm_when_needed": True,
387
+ }
388
+
389
+
390
+ def dispatch_onboard(args: argparse.Namespace) -> dict[str, Any]:
391
+ action = getattr(args, "action", "show")
392
+ if action in {"minimal", "complete"}:
393
+ try:
394
+ return onboarding_plan(ROOT, action)
395
+ except ValueError as exc:
396
+ raise DevKitError(str(exc)) from exc
397
+ if action != "show":
398
+ raise DevKitError(f"unsupported onboard action: {args.action}")
399
+ return onboarding_status(ROOT)
400
+
401
+
402
+ def dispatch_roadmap(args: argparse.Namespace) -> dict[str, Any]:
403
+ if args.action == "show":
404
+ if args.target:
405
+ raise DevKitError("roadmap show does not accept a target")
406
+ return roadmap_payload(ROOT)
407
+ if args.action in {"phase", "problem"}:
408
+ if not args.target or not str(args.target).isdigit():
409
+ raise DevKitError(f"roadmap {args.action} requires a numeric target")
410
+ number = int(args.target)
411
+ return roadmap_payload(ROOT, phase=number if args.action == "phase" else None, problem=number if args.action == "problem" else None)
412
+ raise DevKitError(f"unsupported roadmap action: {args.action}")
413
+
414
+
415
+ def dispatch_catalog(args: argparse.Namespace) -> dict[str, Any]:
416
+ filters = catalog_filters_from_args(args)
417
+ if args.action == "list":
418
+ if args.query or getattr(args, "target", None):
419
+ raise DevKitError("catalog list does not accept a query")
420
+ return catalog_list(ROOT, item_type=args.item_type, filters=filters)
421
+ if args.action == "search":
422
+ if getattr(args, "target", None):
423
+ raise DevKitError("catalog search does not accept a second query")
424
+ return catalog_search(args.query or "", ROOT, item_type=args.item_type, filters=filters)
425
+ if args.action == "show":
426
+ if getattr(args, "target", None):
427
+ raise DevKitError("catalog show accepts only one item id")
428
+ return catalog_show(args.query or "", ROOT, item_type=args.item_type)
429
+ if args.action == "inspect":
430
+ if not args.query or not args.target:
431
+ raise DevKitError("catalog inspect requires <type> <id>")
432
+ return catalog_show(args.target, ROOT, item_type=args.query)
433
+ if args.action == "rebuild-index":
434
+ if args.query or getattr(args, "target", None):
435
+ raise DevKitError("catalog rebuild-index does not accept arguments")
436
+ return catalog_rebuild_index(ROOT)
437
+ raise DevKitError(f"unsupported catalog action: {args.action}")
438
+
439
+
440
+ def dispatch_agentic_plan(args: argparse.Namespace) -> dict[str, Any]:
441
+ return agentic_plan(ROOT, list(getattr(args, "prompt", []) or []))
442
+
443
+
444
+ def dispatch_agentic_execute(command: str, args: argparse.Namespace) -> dict[str, Any]:
445
+ return agentic_execute(
446
+ list(getattr(args, "prompt", []) or []),
447
+ llm=getattr(args, "llm", None),
448
+ dry_run=effective_dry_run(args),
449
+ session_id=getattr(args, "session_id", None),
450
+ new_session=bool(getattr(args, "new_session", False)),
451
+ no_llm_fallback=bool(getattr(args, "no_llm_fallback", False)),
452
+ prog_name=getattr(args, "prog_name", "agent"),
453
+ project=str(Path.cwd()),
454
+ mode=command,
455
+ )
456
+
457
+
458
+ def catalog_filters_from_args(args: argparse.Namespace) -> dict[str, Any]:
459
+ return {
460
+ "provider": getattr(args, "provider", None),
461
+ "status": getattr(args, "status", None),
462
+ "write_policy": getattr(args, "write_policy", None),
463
+ "readiness": getattr(args, "readiness", None),
464
+ }
465
+
466
+
467
+ def dispatch_route(args: argparse.Namespace) -> dict[str, Any]:
468
+ prompt = " ".join(args.prompt or []).strip()
469
+ if not prompt:
470
+ raise DevKitError("route explain requires a prompt")
471
+ return explain_route(prompt, ROOT)
472
+
473
+
474
+ def dispatch_eval(args: argparse.Namespace) -> dict[str, Any]:
475
+ try:
476
+ if args.action == "list":
477
+ if args.suite:
478
+ raise DevKitError("eval list does not accept a suite")
479
+ return eval_list()
480
+ if args.action == "run":
481
+ return eval_run(args.suite or "all", ROOT)
482
+ if args.action == "report":
483
+ return eval_report(args.suite)
484
+ except ValueError as exc:
485
+ raise DevKitError(str(exc)) from exc
486
+ raise DevKitError(f"unsupported eval action: {args.action}")
487
+
488
+
489
+ def dispatch_secrets(args: argparse.Namespace) -> dict[str, Any]:
490
+ if args.action == "doctor":
491
+ if args.reference_action or args.provider or args.key:
492
+ raise DevKitError("secrets doctor does not accept reference arguments")
493
+ return secrets_doctor()
494
+ if args.action == "backends":
495
+ if args.reference_action or args.provider or args.key:
496
+ raise DevKitError("secrets backends does not accept reference arguments")
497
+ return secret_backends()
498
+ if args.action == "reference":
499
+ if args.reference_action == "list":
500
+ return list_secret_references()
501
+ if args.reference_action == "add":
502
+ return add_secret_reference(args.provider, args.key, env=args.env)
503
+ if args.reference_action == "remove":
504
+ return remove_secret_reference(args.provider, args.key)
505
+ raise DevKitError("secrets reference requires add, list or remove")
506
+ raise DevKitError(f"unsupported secrets action: {args.action}")
507
+
508
+
509
+ def dispatch_secret(args: argparse.Namespace) -> dict[str, Any]:
510
+ if args.action == "doctor":
511
+ return secrets_doctor()
512
+ if args.action == "list":
513
+ return list_secret_references()
514
+ if args.action == "set":
515
+ if not args.provider or not args.key:
516
+ raise DevKitError("secret set requires <provider> <key>")
517
+ return add_secret_reference(args.provider, args.key, env=args.env)
518
+ if args.action == "get":
519
+ provider, key = secret_ref_parts(args.secret_ref, args.provider, args.key)
520
+ payload = list_secret_references()
521
+ for item in payload.get("references") or []:
522
+ if item.get("provider") == provider and item.get("key") == key:
523
+ return {"kind": "secret-reference", "status": "found", "reference": item, "value_returned": False}
524
+ return {"kind": "secret-reference", "status": "not-found", "reference": {"provider": provider, "key": key}, "value_returned": False}
525
+ if args.action == "delete":
526
+ provider, key = secret_ref_parts(args.secret_ref, args.provider, args.key)
527
+ return remove_secret_reference(provider, key)
528
+ raise DevKitError(f"unsupported secret action: {args.action}")
529
+
530
+
531
+ def secret_ref_parts(secret_ref: str | None, provider: str | None, key: str | None) -> tuple[str, str]:
532
+ if secret_ref:
533
+ normalized = secret_ref.removeprefix("secret:").replace("/", ".")
534
+ parts = [part for part in normalized.split(".") if part]
535
+ if len(parts) >= 2:
536
+ return parts[0], ".".join(parts[1:])
537
+ raise DevKitError("--ref must use provider.key or secret:provider.key")
538
+ if not provider or not key:
539
+ raise DevKitError("secret reference requires <provider> <key> or --ref provider.key")
540
+ return provider, key
541
+
542
+
543
+ def dispatch_agents(args: argparse.Namespace) -> dict[str, Any]:
544
+ if args.action == "list":
545
+ if args.query:
546
+ raise DevKitError("agents list does not accept a query")
547
+ return list_agent_modules()
548
+ if args.action == "search":
549
+ return catalog_search(args.query or "", ROOT, item_type="agent")
550
+ if args.action == "show":
551
+ return catalog_show(args.query or "", ROOT, item_type="agent")
552
+ if args.action == "create":
553
+ return local_agent_create(args.query, description=args.description, force=args.force)
554
+ if args.action == "validate":
555
+ return local_agent_validate(args.query)
556
+ if args.action == "local-list":
557
+ return local_agent_list()
558
+ raise DevKitError(f"unsupported agents action: {args.action}")
559
+
560
+
561
+ def dispatch_capabilities(args: argparse.Namespace) -> dict[str, Any]:
562
+ action = args.action_or_agent
563
+ if action == "search":
564
+ if not args.legacy_agent:
565
+ raise DevKitError("capabilities search requires a query")
566
+ if args.show_capability:
567
+ raise DevKitError("capabilities search received too many arguments")
568
+ return catalog_search(args.legacy_agent, ROOT, item_type="capability")
569
+ if action == "show":
570
+ if not args.legacy_agent:
571
+ raise DevKitError("capabilities show requires an agent id")
572
+ if not args.show_capability:
573
+ raise DevKitError("capabilities show requires a capability id")
574
+ return catalog_show(f"{args.legacy_agent}/{args.show_capability}", ROOT, item_type="capability")
575
+ if args.show_capability:
576
+ raise DevKitError("unexpected extra argument for capabilities")
577
+ return list_capability_modules(capabilities_agent_from_args(args))
578
+
579
+
580
+ def dispatch_local(args: argparse.Namespace) -> dict[str, Any]:
581
+ if args.action == "automation":
582
+ return dispatch_local_automation(args)
583
+ if args.action == "agents":
584
+ if args.extension_id:
585
+ raise DevKitError("local agents does not accept an argument")
586
+ return local_agent_list()
587
+ if args.action == "agent":
588
+ action = args.extension_id or "list"
589
+ if action == "list":
590
+ if args.local_item_id:
591
+ raise DevKitError("local agent list does not accept an agent id")
592
+ return local_agent_list()
593
+ if action == "create":
594
+ return local_agent_create(args.local_item_id, description=args.title or args.prompt, force=args.force)
595
+ if action == "show":
596
+ return local_agent_show(args.local_item_id)
597
+ if action == "validate":
598
+ return local_agent_validate(args.local_item_id)
599
+ raise DevKitError(f"unsupported local agent action: {action}")
600
+ if args.action == "list":
601
+ if args.extension_id:
602
+ raise DevKitError("local list does not accept an extension id")
603
+ return local_extensions_list()
604
+ if args.action == "add":
605
+ return local_extension_add(args.path)
606
+ if args.action == "enable":
607
+ require_id(args.extension_id, "local enable")
608
+ return local_extension_enable(args.extension_id, True)
609
+ if args.action == "disable":
610
+ require_id(args.extension_id, "local disable")
611
+ return local_extension_enable(args.extension_id, False)
612
+ if args.action == "remove":
613
+ require_id(args.extension_id, "local remove")
614
+ return local_extension_remove(args.extension_id)
615
+ if args.action == "validate":
616
+ require_id(args.extension_id, "local validate")
617
+ return local_extension_validate(args.extension_id)
618
+ raise DevKitError(f"unsupported local action: {args.action}")
619
+
620
+
621
+ def dispatch_local_automation(args: argparse.Namespace) -> dict[str, Any]:
622
+ action = args.extension_id or "list"
623
+ automation_id = args.local_item_id
624
+ if action == "list":
625
+ if automation_id:
626
+ raise DevKitError("local automation list does not accept an automation id")
627
+ return local_automation_list()
628
+ if action == "create":
629
+ return local_automation_create(
630
+ automation_id,
631
+ title=args.title,
632
+ prompt=args.prompt,
633
+ command=args.local_command,
634
+ every=args.every,
635
+ cron=args.cron,
636
+ force=args.force,
637
+ )
638
+ if action == "show":
639
+ return local_automation_show(automation_id)
640
+ if action == "update":
641
+ return local_automation_update(
642
+ automation_id,
643
+ title=args.title,
644
+ prompt=args.prompt,
645
+ command=args.local_command,
646
+ every=args.every,
647
+ cron=args.cron,
648
+ )
649
+ if action == "enable":
650
+ return local_automation_enable(automation_id, True)
651
+ if action == "disable":
652
+ return local_automation_enable(automation_id, False)
653
+ if action in {"remove", "delete"}:
654
+ return local_automation_remove(automation_id, yes=args.yes)
655
+ if action == "validate":
656
+ return local_automation_validate(automation_id)
657
+ raise DevKitError(f"unsupported local automation action: {action}")
658
+
659
+
660
+ def dispatch_skill(args: argparse.Namespace) -> dict[str, Any]:
661
+ if args.action == "create":
662
+ return skill_create(args.skill_id, description=args.description, force=args.force)
663
+ if args.action == "list":
664
+ if args.skill_id:
665
+ raise DevKitError("skill list does not accept a skill id")
666
+ return skill_list()
667
+ if args.action == "show":
668
+ return skill_show(args.skill_id)
669
+ if args.action == "update":
670
+ return skill_update(args.skill_id, description=args.description)
671
+ if args.action == "delete":
672
+ return skill_delete(args.skill_id, yes=args.yes)
673
+ raise DevKitError(f"unsupported skill action: {args.action}")
674
+
675
+
676
+ def dispatch_script(args: argparse.Namespace) -> dict[str, Any]:
677
+ if args.action == "create":
678
+ return script_create(args.script_id, command=args.script_command, force=args.force)
679
+ if args.action == "list":
680
+ if args.script_id:
681
+ raise DevKitError("script list does not accept a script id")
682
+ return script_list()
683
+ if args.action == "run":
684
+ return script_run(args.script_id, dry_run=effective_dry_run(args), yes=args.yes)
685
+ raise DevKitError(f"unsupported script action: {args.action}")
686
+
687
+
688
+ def dispatch_workflow(args: argparse.Namespace) -> dict[str, Any]:
689
+ try:
690
+ if args.action == "list":
691
+ if args.workflow_id:
692
+ raise DevKitError("workflow list does not accept a workflow id")
693
+ return workflow_list()
694
+ require_id(args.workflow_id, f"workflow {args.action}")
695
+ if args.action == "show":
696
+ return workflow_show(args.workflow_id)
697
+ if args.action == "install":
698
+ return workflow_install(args.workflow_id, dry_run=effective_dry_run(args) or not args.yes, yes=args.yes)
699
+ if args.action == "run":
700
+ return workflow_run(args.workflow_id, dry_run=effective_dry_run(args) or not args.yes)
701
+ except ValueError as exc:
702
+ raise DevKitError(str(exc)) from exc
703
+ raise DevKitError(f"unsupported workflow action: {args.action}")
704
+
705
+
706
+ def dispatch_team(args: argparse.Namespace) -> dict[str, Any]:
707
+ project = Path.cwd()
708
+ if args.action == "init":
709
+ return team_init(project, force=args.force)
710
+ if args.action == "status":
711
+ return team_status(project)
712
+ if args.action == "doctor":
713
+ return team_doctor(project)
714
+ if args.action == "onboard":
715
+ return team_onboard(project)
716
+ if args.action == "profile":
717
+ action = args.profile_action or "list"
718
+ if action == "list":
719
+ return team_profile_list(project)
720
+ if action == "show":
721
+ return team_profile_show(args.profile_id, project)
722
+ if action == "use":
723
+ return team_profile_use(args.profile_id, project)
724
+ if action == "export":
725
+ return team_profile_export(args.profile_id, args.profile_path, project)
726
+ if action == "import":
727
+ return team_profile_import(args.profile_path or args.profile_id, project)
728
+ raise DevKitError(f"unsupported team profile action: {action}")
729
+ raise DevKitError(f"unsupported team action: {args.action}")
730
+
731
+
732
+ def dispatch_knowledge(args: argparse.Namespace) -> dict[str, Any]:
733
+ project = Path.cwd()
734
+ if args.action == "init":
735
+ return knowledge_init(project, force=args.force)
736
+ if args.action == "doctor":
737
+ return knowledge_doctor(project)
738
+ if args.action == "search":
739
+ return knowledge_search(args.target, project)
740
+ if args.action in {"index", "reindex"}:
741
+ return knowledge_index(project)
742
+ if args.action == "snapshot":
743
+ snapshot_action = args.target or "list"
744
+ snapshot_target = args.snapshot_action
745
+ if not snapshot_action or snapshot_action == "list":
746
+ if snapshot_target:
747
+ raise DevKitError("knowledge snapshot list does not accept a snapshot id")
748
+ return knowledge_snapshot_list(project)
749
+ if snapshot_action == "create":
750
+ if snapshot_target:
751
+ raise DevKitError("knowledge snapshot create does not accept a positional snapshot id")
752
+ return knowledge_snapshot_create(
753
+ title=args.title,
754
+ content=args.content,
755
+ from_file=args.from_file,
756
+ entry_type=args.entry_type,
757
+ project=project,
758
+ )
759
+ if snapshot_action == "show":
760
+ return knowledge_snapshot_show(snapshot_target, project)
761
+ if snapshot_action == "score":
762
+ return knowledge_snapshot_score(snapshot_target, project)
763
+ if snapshot_action == "submit":
764
+ return knowledge_snapshot_submit(snapshot_target, project)
765
+ raise DevKitError("knowledge snapshot action must be create, list, show, score or submit")
766
+ if args.action == "review":
767
+ if args.target == "list" or not args.target:
768
+ return knowledge_review_list(project)
769
+ return knowledge_review(args.target, project)
770
+ if args.action == "curate":
771
+ return knowledge_curate(project)
772
+ if args.action == "publish":
773
+ return knowledge_publish(args.target, project, yes=args.yes, owner_agent=args.owner_agent)
774
+ if args.action == "sync":
775
+ return knowledge_sync(project)
776
+ raise DevKitError(f"unsupported knowledge action: {args.action}")
777
+
778
+
779
+ def dispatch_knowledge_base(args: argparse.Namespace) -> dict[str, Any]:
780
+ project = Path.cwd()
781
+ if args.action == "create":
782
+ return knowledge_base_create(project, provider=args.provider, force=args.force)
783
+ if args.action == "join":
784
+ return knowledge_base_join(args.target, project, provider=args.provider, force=args.force)
785
+ if args.action == "status":
786
+ return knowledge_base_status(project)
787
+ if args.action == "tokens":
788
+ return knowledge_base_tokens(project)
789
+ if args.action == "rotate-token":
790
+ return knowledge_base_rotate_token(args.target, project)
791
+ raise DevKitError(f"unsupported knowledge-base action: {args.action}")
792
+
793
+
794
+ def dispatch_contribution(args: argparse.Namespace) -> dict[str, Any]:
795
+ if args.action == "list":
796
+ if args.extension_id:
797
+ raise DevKitError(f"{args.command} list does not accept an extension id")
798
+ return contribution_list()
799
+ require_id(args.extension_id, f"{args.command} {args.action}")
800
+ if args.action == "prepare":
801
+ return contribution_prepare(args.extension_id)
802
+ if args.action == "pr":
803
+ return contribution_pr(args.extension_id, dry_run=effective_dry_run(args) or not args.yes, yes=args.yes)
804
+ if args.action == "validate":
805
+ return contribution_validate(args.extension_id)
806
+ if args.action == "review":
807
+ return contribution_review(args.extension_id)
808
+ if args.action == "checklist":
809
+ return contribution_checklist(args.extension_id)
810
+ raise DevKitError(f"unsupported {args.command} action: {args.action}")
811
+
812
+
813
+ def maybe_record_cli_audit(args: argparse.Namespace, *, result: dict[str, Any] | None, error: str | None) -> dict[str, Any] | None:
814
+ command = canonical_command(getattr(args, "command", None) or "")
815
+ if command in {"", "audit"} or getattr(args, "version", False):
816
+ return None
817
+ audit_result = try_record_audit(
818
+ command=command,
819
+ args=vars(args),
820
+ result=result,
821
+ error=error,
822
+ origin="cli",
823
+ required=False,
824
+ recorder=record_audit,
825
+ )
826
+ warning = audit_result.get("audit_warning")
827
+ if warning:
828
+ if result is not None:
829
+ result["audit_warning"] = warning
830
+ add_payload_warning(result, warning)
831
+ return warning
832
+ audit = audit_result.get("audit")
833
+ if result is not None:
834
+ result["audit"] = audit
835
+ return audit
836
+
837
+
838
+ def is_audit_warning(value: object) -> bool:
839
+ return isinstance(value, dict) and value.get("kind") == "audit-warning"
840
+
841
+
842
+ def format_audit_warning(warning: dict[str, object]) -> str:
843
+ reason = str(warning.get("reason") or "").strip()
844
+ suffix = f" ({reason})" if reason else ""
845
+ return f"warning: {warning.get('message') or 'Audit trail could not be written.'}{suffix}"
846
+
847
+
848
+ def add_payload_warning(result: dict[str, Any], warning: dict[str, Any]) -> None:
849
+ warnings = result.get("warnings")
850
+ if isinstance(warnings, list):
851
+ warnings.append(warning)
852
+ elif warnings:
853
+ result["warnings"] = [warnings, warning]
854
+ else:
855
+ result["warnings"] = [warning]
856
+
857
+
858
+ def dispatch_llm(args: argparse.Namespace) -> dict[str, Any]:
859
+ try:
860
+ if args.action != "preference" and args.preference_value:
861
+ raise DevKitError(f"llm {args.action} received an unexpected argument: {args.preference_value}")
862
+ if args.action == "list":
863
+ if args.backend:
864
+ raise DevKitError("llm list does not accept a backend argument")
865
+ return list_backends()
866
+ if args.action == "doctor":
867
+ return doctor_backends(args.backend)
868
+ if args.action == "configure":
869
+ if not args.backend:
870
+ raise DevKitError("llm configure requires a backend")
871
+ return configure_backend(
872
+ args.backend,
873
+ api_key_env=args.api_key_env,
874
+ base_url=args.base_url,
875
+ model=args.model,
876
+ command=args.host_command,
877
+ set_default=args.set_default,
878
+ )
879
+ if args.action in {"set-default", "default"}:
880
+ if not args.backend:
881
+ raise DevKitError(f"llm {args.action} requires a backend")
882
+ return set_default_backend(args.backend)
883
+ if args.action in {"enable", "disable"}:
884
+ if not args.backend:
885
+ raise DevKitError(f"llm {args.action} requires a backend")
886
+ state = "enabled" if args.action == "enable" else "disabled_by_user"
887
+ return set_decision("llms", args.backend, state, reason=f"llm {args.action} command")
888
+ if args.action == "preference":
889
+ if args.backend in {None, "show"}:
890
+ return llm_preference()
891
+ if args.backend == "set":
892
+ if not args.primary and not args.order:
893
+ raise DevKitError("llm preference set requires --primary or --order")
894
+ return set_llm_preference(primary=args.primary, order=args.order)
895
+ if args.backend == "reorder":
896
+ order = args.preference_value or args.order
897
+ if not order:
898
+ raise DevKitError("llm preference reorder requires an order value or --order")
899
+ return set_llm_preference(order=order)
900
+ raise DevKitError("llm preference action must be show, set or reorder")
901
+ except ValueError as exc:
902
+ raise DevKitError(str(exc)) from exc
903
+ raise DevKitError(f"unsupported llm action: {args.action}")
904
+
905
+
906
+ def dispatch_config(args: argparse.Namespace) -> dict[str, Any]:
907
+ from cli.aikit.llm import config_path
908
+
909
+ if args.action == "path":
910
+ return {"kind": "config", "status": "ok", "path": str(config_path()), "home": app_home_status()}
911
+ if args.action == "migrate-home":
912
+ return migrate_default_home(dry_run=effective_dry_run(args))
913
+ if args.action == "show":
914
+ return {
915
+ "kind": "config",
916
+ "status": "ok",
917
+ "path": str(config_path()),
918
+ "home": app_home_status(),
919
+ "decisions": list_decisions(),
920
+ "llm": llm_preference(),
921
+ "ollama": ollama_status(),
922
+ }
923
+ raise DevKitError(f"unsupported config action: {args.action}")
924
+
925
+
926
+ def dispatch_mcp(args: argparse.Namespace) -> dict[str, Any] | None:
927
+ if args.action == "manifest":
928
+ return mcp_manifest()
929
+ if args.action == "tools":
930
+ return mcp_tools_payload()
931
+ if args.action == "doctor":
932
+ return mcp_doctor()
933
+ if args.action == "serve":
934
+ serve_mcp_stdio()
935
+ return None
936
+ raise DevKitError(f"unsupported mcp action: {args.action}")
937
+
938
+
939
+ def dispatch_control_category(command: str, args: argparse.Namespace) -> dict[str, Any]:
940
+ try:
941
+ category = command
942
+ if args.action == "list":
943
+ if args.item_id:
944
+ raise DevKitError(f"{command} list does not accept an item id")
945
+ payload = list_decisions(category)
946
+ payload["kind"] = command
947
+ return payload
948
+ if args.action in {"enable", "disable"}:
949
+ if not args.item_id:
950
+ raise DevKitError(f"{command} {args.action} requires an item id")
951
+ state = "enabled" if args.action == "enable" else "disabled_by_user"
952
+ payload = set_decision(category, args.item_id, state, reason=f"{command} {args.action} command")
953
+ payload["kind"] = command[:-1] if command.endswith("s") else command
954
+ return payload
955
+ except ValueError as exc:
956
+ raise DevKitError(str(exc)) from exc
957
+ raise DevKitError(f"unsupported {command} action: {args.action}")
958
+
959
+
960
+ def dispatch_decisions(args: argparse.Namespace) -> dict[str, Any]:
961
+ try:
962
+ if args.action == "list":
963
+ if args.item_id:
964
+ raise DevKitError("decisions list does not accept an item id")
965
+ return list_decisions(args.category)
966
+ if args.action == "reset":
967
+ if args.item_id:
968
+ raise DevKitError("decisions reset does not accept an item id")
969
+ return reset_decisions(args.category)
970
+ if args.action == "forget":
971
+ if not args.item_id:
972
+ raise DevKitError("decisions forget requires an item id")
973
+ category = args.category or "tools"
974
+ return forget_decision(category, args.item_id)
975
+ except ValueError as exc:
976
+ raise DevKitError(str(exc)) from exc
977
+ raise DevKitError(f"unsupported decisions action: {args.action}")
978
+
979
+
980
+ def dispatch_ollama(args: argparse.Namespace) -> dict[str, Any]:
981
+ try:
982
+ if args.action == "status":
983
+ if args.model:
984
+ raise DevKitError("ollama status does not accept a model")
985
+ return ollama_status()
986
+ if args.action == "models":
987
+ if args.model:
988
+ raise DevKitError("ollama models does not accept a model")
989
+ return ollama_models()
990
+ if args.action == "pull":
991
+ return ollama_pull(args.model, yes=args.yes, dry_run=effective_dry_run(args))
992
+ if args.action == "update":
993
+ if args.model:
994
+ raise DevKitError("ollama update does not accept a model")
995
+ return ollama_update(yes=args.yes, dry_run=effective_dry_run(args))
996
+ except ValueError as exc:
997
+ raise DevKitError(str(exc)) from exc
998
+ raise DevKitError(f"unsupported ollama action: {args.action}")
999
+
1000
+
1001
+ def dispatch_local_llm(args: argparse.Namespace) -> dict[str, Any]:
1002
+ if args.action == "list":
1003
+ if args.model:
1004
+ raise DevKitError("local-llm list does not accept a model")
1005
+ return local_llm_list()
1006
+ if args.action == "doctor":
1007
+ if args.model:
1008
+ raise DevKitError("local-llm doctor does not accept a model")
1009
+ return local_llm_doctor()
1010
+ if args.action == "models":
1011
+ if args.model:
1012
+ raise DevKitError("local-llm models does not accept a model")
1013
+ return local_llm_models()
1014
+ if args.action == "install":
1015
+ return local_llm_install(args.model, dry_run=effective_dry_run(args), yes=args.yes)
1016
+ if args.action == "remove":
1017
+ return local_llm_remove(args.model, dry_run=effective_dry_run(args), yes=args.yes)
1018
+ if args.action == "benchmark":
1019
+ return local_llm_benchmark(args.model)
1020
+ raise DevKitError(f"unsupported local-llm action: {args.action}")
1021
+
1022
+
1023
+ def dispatch_install(args: argparse.Namespace) -> dict[str, Any]:
1024
+ try:
1025
+ return install_runtime(
1026
+ ROOT,
1027
+ scope=args.scope,
1028
+ host=args.host,
1029
+ target=Path(args.target) if args.target else None,
1030
+ home=Path(args.home) if args.home else None,
1031
+ dry_run=effective_dry_run(args),
1032
+ profiles=parse_profiles(args.profiles),
1033
+ )
1034
+ except InstallError as exc:
1035
+ raise DevKitError(str(exc)) from exc
1036
+
1037
+
1038
+ def dispatch_providers(args: argparse.Namespace) -> dict[str, Any]:
1039
+ if args.action != "list":
1040
+ raise DevKitError(f"unsupported providers action: {args.action}")
1041
+ try:
1042
+ return list_providers(ROOT)
1043
+ except ProviderRegistryError as exc:
1044
+ raise DevKitError(str(exc)) from exc
1045
+
1046
+
1047
+ def dispatch_provider(args: argparse.Namespace) -> dict[str, Any]:
1048
+ try:
1049
+ if args.action in {"status", "doctor"}:
1050
+ return provider_status_with_credentials(ROOT, args.provider, env_files=[Path(item) for item in args.env_file])
1051
+ if args.action == "configure":
1052
+ if not args.provider:
1053
+ raise DevKitError("provider configure requires a provider id")
1054
+ return configure_provider(
1055
+ ROOT,
1056
+ args.provider,
1057
+ env_refs=args.env,
1058
+ env_files=[Path(item) for item in args.env_file],
1059
+ from_env=args.from_env,
1060
+ session_only=args.session_only,
1061
+ )
1062
+ if args.action == "unset":
1063
+ if not args.provider:
1064
+ raise DevKitError("provider unset requires a provider id")
1065
+ return unset_provider_config(ROOT, args.provider)
1066
+ except ProviderRegistryError as exc:
1067
+ raise DevKitError(str(exc)) from exc
1068
+ except CredentialResolverError as exc:
1069
+ raise DevKitError(str(exc)) from exc
1070
+ raise DevKitError(f"unsupported provider action: {args.action}")
1071
+
1072
+
1073
+ def dispatch_credential(args: argparse.Namespace) -> dict[str, Any]:
1074
+ if args.action == "backends":
1075
+ if args.provider:
1076
+ raise DevKitError("credential backends does not accept a provider argument")
1077
+ return credential_backends()
1078
+ if args.action == "resolve":
1079
+ if not args.provider:
1080
+ raise DevKitError("credential resolve requires a provider id")
1081
+ try:
1082
+ return credential_resolution(ROOT, args.provider, env_files=[Path(item) for item in args.env_file])
1083
+ except (ProviderRegistryError, CredentialResolverError) as exc:
1084
+ raise DevKitError(str(exc)) from exc
1085
+ raise DevKitError(f"unsupported credential action: {args.action}")
1086
+
1087
+
1088
+ def dispatch_source(args: argparse.Namespace) -> dict[str, Any]:
1089
+ try:
1090
+ if args.action == "list":
1091
+ return list_sources()
1092
+ if args.action == "add":
1093
+ if not args.source_id:
1094
+ raise DevKitError("source add requires a source id")
1095
+ return add_source(
1096
+ args.source_id,
1097
+ provider=args.provider,
1098
+ label=args.label,
1099
+ config_pairs=args.config,
1100
+ env_refs=args.env,
1101
+ env_files=args.env_file,
1102
+ default_for=args.default_for,
1103
+ default_for_agent=args.default_for_agent,
1104
+ set_default=args.set_default,
1105
+ )
1106
+ if args.action == "status":
1107
+ return source_status(args.source_id)
1108
+ if args.action == "remove":
1109
+ if not args.source_id:
1110
+ raise DevKitError("source remove requires a source id")
1111
+ return remove_source(args.source_id)
1112
+ except SourceConfigBlockedError as exc:
1113
+ return exc.payload
1114
+ except SourceRegistryError as exc:
1115
+ raise DevKitError(str(exc)) from exc
1116
+ raise DevKitError(f"unsupported source action: {args.action}")
1117
+
1118
+
1119
+ def dispatch_wizard(args: argparse.Namespace) -> dict[str, Any]:
1120
+ try:
1121
+ if args.action == "list":
1122
+ return list_wizards(status=args.status)
1123
+ if args.action == "show":
1124
+ require_id(args.wizard_id, "wizard show")
1125
+ return show_wizard(args.wizard_id)
1126
+ if args.action == "cancel":
1127
+ require_id(args.wizard_id, "wizard cancel")
1128
+ return cancel_wizard(args.wizard_id)
1129
+ if args.action == "answer":
1130
+ require_id(args.wizard_id, "wizard answer")
1131
+ answer = " ".join(args.answer or []).strip()
1132
+ if not answer:
1133
+ raise DevKitError("wizard answer requires an answer")
1134
+ payload = answer_wizard(args.wizard_id, answer)
1135
+ if payload.get("status") == "completed" and not args.no_run:
1136
+ resume_prompt = payload.get("resume_prompt") or (payload.get("wizard") or {}).get("resume_prompt")
1137
+ if resume_prompt:
1138
+ payload["resumed_prompt"] = True
1139
+ payload["resume_result"] = resume_agent_prompt(str(resume_prompt))
1140
+ else:
1141
+ payload["resumed_prompt"] = False
1142
+ else:
1143
+ payload.setdefault("resumed_prompt", False)
1144
+ return payload
1145
+ except WizardStateError as exc:
1146
+ raise DevKitError(str(exc)) from exc
1147
+ except SourceRegistryError as exc:
1148
+ raise DevKitError(str(exc)) from exc
1149
+ raise DevKitError(f"unsupported wizard action: {args.action}")
1150
+
1151
+
1152
+
1153
+ def dispatch_memory(args: argparse.Namespace) -> dict[str, Any]:
1154
+ if args.action == "show":
1155
+ return show_memory(ROOT, agent_id=args.agent_id, source_id=args.source_id)
1156
+ if args.action == "path":
1157
+ return memory_path_payload()
1158
+ if args.action == "backup":
1159
+ backup_action = args.memory_id or "list"
1160
+ if backup_action in {"list", "show"}:
1161
+ if args.submission_id:
1162
+ raise DevKitError("memory backup list does not accept a backup id")
1163
+ return list_memory_backups()
1164
+ if backup_action == "create":
1165
+ if args.submission_id:
1166
+ raise DevKitError("memory backup create does not accept a backup id")
1167
+ try:
1168
+ return create_memory_backup(
1169
+ title=args.title,
1170
+ encrypted=args.encrypted,
1171
+ passphrase_env=args.passphrase_env,
1172
+ )
1173
+ except ValueError as exc:
1174
+ raise DevKitError(str(exc)) from exc
1175
+ if backup_action == "restore":
1176
+ try:
1177
+ if not args.submission_id and not args.backup_file:
1178
+ raise ValueError("memory backup restore requires a backup id or --file")
1179
+ return restore_memory_backup(
1180
+ args.submission_id,
1181
+ yes=args.yes,
1182
+ backup_file=args.backup_file,
1183
+ passphrase_env=args.passphrase_env,
1184
+ )
1185
+ except ValueError as exc:
1186
+ raise DevKitError(str(exc)) from exc
1187
+ if backup_action == "delete":
1188
+ try:
1189
+ return delete_memory_backup(args.submission_id, yes=args.yes)
1190
+ except ValueError as exc:
1191
+ raise DevKitError(str(exc)) from exc
1192
+ raise DevKitError("memory backup action must be create, list, restore or delete")
1193
+ if args.action in {"share", "shared"}:
1194
+ if args.memory_id:
1195
+ return shared_memory_status(args.memory_id)
1196
+ return shared_memory_create(args.title)
1197
+ if args.action == "read":
1198
+ return shared_memory_read(args.memory_id, args.submission_id, contributor_key=args.contributor_key)
1199
+ if args.action == "submit":
1200
+ return shared_memory_submit(args.memory_id, title=args.title, content=args.content, contributor_key=args.contributor_key)
1201
+ if args.action == "review":
1202
+ return shared_memory_review(args.memory_id, args.submission_id)
1203
+ if args.action == "publish":
1204
+ return shared_memory_publish(args.memory_id, args.submission_id, yes=args.yes, owner_key=getattr(args, "owner_key", None))
1205
+ if args.action == "reset":
1206
+ return reset_memory(
1207
+ all_memory=args.all,
1208
+ agent_id=args.agent_id,
1209
+ source_id=args.source_id,
1210
+ reset_sessions=args.sessions,
1211
+ reset_tasks=args.tasks,
1212
+ reset_cache=args.cache,
1213
+ )
1214
+ raise DevKitError(f"unsupported memory action: {args.action}")
1215
+
1216
+
1217
+ def dispatch_shared_memory(args: argparse.Namespace) -> dict[str, Any]:
1218
+ if args.action == "create":
1219
+ return shared_memory_create(args.title)
1220
+ if args.action == "list":
1221
+ return shared_memory_list()
1222
+ if args.action == "status":
1223
+ return shared_memory_status(args.memory_id)
1224
+ if args.action == "read":
1225
+ return shared_memory_read(args.memory_id, args.submission_id, contributor_key=args.contributor_key)
1226
+ if args.action == "submit":
1227
+ return shared_memory_submit(args.memory_id, title=args.title, content=args.content, contributor_key=args.contributor_key)
1228
+ if args.action == "review":
1229
+ return shared_memory_review(args.memory_id, args.submission_id)
1230
+ if args.action == "publish":
1231
+ return shared_memory_publish(args.memory_id, args.submission_id, yes=args.yes, owner_key=args.owner_key)
1232
+ raise DevKitError(f"unsupported shared-memory action: {args.action}")
1233
+
1234
+
1235
+ def dispatch_personality(args: argparse.Namespace) -> dict[str, Any]:
1236
+ if args.action == "show":
1237
+ return load_personality()
1238
+ if args.action == "edit":
1239
+ if not any([args.agent_name, args.user_name, args.language, args.tone, args.detail_level]):
1240
+ payload = load_personality()
1241
+ payload["status"] = "needs-input"
1242
+ payload["message"] = "Use --name, --user-name, --language, --tone or --detail-level to edit non-interactively."
1243
+ return payload
1244
+ return update_personality(
1245
+ agent_name=args.agent_name,
1246
+ user_name=args.user_name,
1247
+ language=args.language,
1248
+ tone=args.tone,
1249
+ detail_level=args.detail_level,
1250
+ )
1251
+ if args.action == "reset":
1252
+ return reset_personality()
1253
+ raise DevKitError(f"unsupported personality action: {args.action}")
1254
+
1255
+
1256
+ def dispatch_setup(args: argparse.Namespace) -> dict[str, Any]:
1257
+ if args.action == "personality":
1258
+ return setup_personality()
1259
+ if args.action == "mini-brain":
1260
+ return setup_mini_brain(
1261
+ dry_run=effective_dry_run(args),
1262
+ yes=args.yes,
1263
+ set_default=args.set_default,
1264
+ )
1265
+ if args.action == "plan":
1266
+ return setup_wizard(ROOT, dry_run=effective_dry_run(args), yes=args.yes)
1267
+ raise DevKitError(f"unsupported setup action: {args.action}")
1268
+
1269
+
1270
+ def dispatch_toolchain(args: argparse.Namespace) -> dict[str, Any]:
1271
+ try:
1272
+ if args.action == "list":
1273
+ if args.tool != "all":
1274
+ raise DevKitError("toolchain list does not accept a tool argument")
1275
+ return list_toolchain(ROOT)
1276
+ if args.action == "doctor":
1277
+ return doctor_toolchain(ROOT, None if args.tool == "all" else args.tool)
1278
+ if args.action == "install":
1279
+ return install_toolchain(ROOT, None if args.tool == "all" else args.tool, dry_run=effective_dry_run(args), yes=args.yes)
1280
+ except ValueError as exc:
1281
+ raise DevKitError(str(exc)) from exc
1282
+ raise DevKitError(f"unsupported toolchain action: {args.action}")
1283
+
1284
+
1285
+ def dispatch_task(args: argparse.Namespace) -> dict[str, Any]:
1286
+ try:
1287
+ if args.action == "list":
1288
+ return list_tasks()
1289
+ if args.action == "create":
1290
+ schedule = {"type": "manual"}
1291
+ if args.every:
1292
+ schedule = {"type": "interval", "every": args.every}
1293
+ if args.cron:
1294
+ schedule = {"type": "cron", "cron": args.cron}
1295
+ return create_task(task_id=args.task_id, title=args.title, prompt=args.prompt, schedule=schedule)
1296
+ if args.action == "show":
1297
+ require_id(args.task_id, "task show")
1298
+ return show_task(args.task_id)
1299
+ if args.action == "history":
1300
+ require_id(args.task_id, "task history")
1301
+ return task_history(args.task_id)
1302
+ if args.action == "run":
1303
+ require_id(args.task_id, "task run")
1304
+ return run_task(args.task_id, dry_run=effective_dry_run(args))
1305
+ if args.action in {"pause", "disable"}:
1306
+ require_id(args.task_id, f"task {args.action}")
1307
+ return update_task_status(args.task_id, "paused" if args.action == "pause" else "disabled")
1308
+ if args.action in {"resume", "enable"}:
1309
+ require_id(args.task_id, f"task {args.action}")
1310
+ return update_task_status(args.task_id, "enabled")
1311
+ if args.action == "update":
1312
+ require_id(args.task_id, "task update")
1313
+ return update_task_schedule(args.task_id, every=args.every, cron=args.cron)
1314
+ if args.action == "delete":
1315
+ require_id(args.task_id, "task delete")
1316
+ return delete_task(args.task_id, yes=args.yes)
1317
+ except ValueError as exc:
1318
+ raise DevKitError(str(exc)) from exc
1319
+ raise DevKitError(f"unsupported task action: {args.action}")
1320
+
1321
+
1322
+ def dispatch_scheduler(args: argparse.Namespace) -> dict[str, Any]:
1323
+ if args.action == "run-once":
1324
+ return run_scheduler_once(dry_run=effective_dry_run(args))
1325
+ if args.action == "daemon":
1326
+ return scheduler_daemon_plan()
1327
+ raise DevKitError(f"unsupported scheduler action: {args.action}")
1328
+
1329
+
1330
+ def dispatch_notifications(args: argparse.Namespace) -> dict[str, Any]:
1331
+ try:
1332
+ if args.action == "doctor":
1333
+ return notification_doctor()
1334
+ if args.action == "list-events":
1335
+ return list_notification_events()
1336
+ if args.action == "list-channels":
1337
+ return list_notification_channels()
1338
+ if args.action == "configure":
1339
+ enabled = None
1340
+ if args.enabled is not None:
1341
+ enabled = args.enabled.lower() == "true"
1342
+ return configure_notifications(enabled=enabled, events=args.event_filter or None)
1343
+ if args.action == "configure-channel":
1344
+ enabled = None
1345
+ if args.enabled is not None:
1346
+ enabled = args.enabled.lower() == "true"
1347
+ channel = args.channel[0] if args.channel else "desktop"
1348
+ return configure_notification_channel(channel, enabled=enabled, events=args.event_filter or None)
1349
+ if args.action == "format":
1350
+ return format_notification_event(notification_payload_from_args(args))
1351
+ if args.action == "send":
1352
+ if not args.message:
1353
+ raise DevKitError("notifications send requires --message")
1354
+ return send_notification_command(
1355
+ title=args.title,
1356
+ message=args.message,
1357
+ event=args.event,
1358
+ status=args.status,
1359
+ summary=args.summary,
1360
+ severity=args.severity,
1361
+ task_id=args.task_id,
1362
+ origin=args.origin,
1363
+ artifacts=args.artifact,
1364
+ next_steps=args.next_step,
1365
+ sensitive=args.sensitive,
1366
+ channels=args.channel or None,
1367
+ )
1368
+ except ValueError as exc:
1369
+ raise DevKitError(str(exc)) from exc
1370
+ raise DevKitError(f"unsupported notifications action: {args.action}")
1371
+
1372
+
1373
+ def notification_payload_from_args(args: argparse.Namespace) -> dict[str, Any]:
1374
+ return {
1375
+ "event": args.event,
1376
+ "status": args.status,
1377
+ "title": args.title,
1378
+ "message": args.message,
1379
+ "summary": args.summary,
1380
+ "severity": args.severity,
1381
+ "task_id": args.task_id,
1382
+ "origin": args.origin,
1383
+ "artifacts": args.artifact,
1384
+ "next_steps": args.next_step,
1385
+ "sensitive": args.sensitive,
1386
+ }
1387
+
1388
+
1389
+ def dispatch_calendar(args: argparse.Namespace) -> dict[str, Any]:
1390
+ try:
1391
+ if args.action == "configure":
1392
+ return configure_calendar(ics_path=args.ics, timezone=args.timezone)
1393
+ if args.action == "today":
1394
+ return calendar_today()
1395
+ if args.action == "tomorrow":
1396
+ return calendar_tomorrow()
1397
+ if args.action == "list":
1398
+ return calendar_list(args.date_from, args.date_to)
1399
+ except ValueError as exc:
1400
+ raise DevKitError(str(exc)) from exc
1401
+ raise DevKitError(f"unsupported calendar action: {args.action}")
1402
+
1403
+
1404
+ def dispatch_pr(args: argparse.Namespace) -> dict[str, Any]:
1405
+ if args.action == "list-review-requests":
1406
+ if effective_dry_run(args):
1407
+ return pr_read_dry_run("list-review-requests")
1408
+ return pr_list_review_requests()
1409
+ if args.action == "inspect":
1410
+ require_id(args.pr_ref, "pr inspect")
1411
+ if effective_dry_run(args):
1412
+ return pr_read_dry_run("inspect", pr_ref=args.pr_ref)
1413
+ return pr_inspect(args.pr_ref)
1414
+ if args.action == "review":
1415
+ require_id(args.pr_ref, "pr review")
1416
+ return pr_review(
1417
+ args.pr_ref,
1418
+ approve=args.approve,
1419
+ request_changes=args.request_changes,
1420
+ comment=args.comment,
1421
+ allow_write=args.allow_write,
1422
+ dry_run=effective_dry_run(args),
1423
+ )
1424
+ if args.action == "automation":
1425
+ if args.automation_action not in {None, "create"}:
1426
+ raise DevKitError("pr automation action must be create")
1427
+ if effective_dry_run(args):
1428
+ return pr_automation_dry_run(time=args.time)
1429
+ return pr_create_automation(time=args.time)
1430
+ raise DevKitError(f"unsupported pr action: {args.action}")
1431
+
1432
+
1433
+ def dispatch_permissions(args: argparse.Namespace) -> dict[str, Any]:
1434
+ try:
1435
+ if args.action == "show":
1436
+ return show_permissions()
1437
+ if args.action == "grant":
1438
+ if not args.agent or not args.provider or not args.level:
1439
+ raise DevKitError("permissions grant requires agent, provider and level")
1440
+ return grant_permission(args.agent, args.provider, args.level, project=args.project, task_id=args.task_id)
1441
+ if args.action == "revoke":
1442
+ if not args.agent or not args.provider:
1443
+ raise DevKitError("permissions revoke requires agent and provider")
1444
+ return revoke_permission(args.agent, args.provider, args.level, project=args.project, task_id=args.task_id)
1445
+ except ValueError as exc:
1446
+ raise DevKitError(str(exc)) from exc
1447
+ raise DevKitError(f"unsupported permissions action: {args.action}")
1448
+
1449
+
1450
+ def dispatch_audit(args: argparse.Namespace) -> dict[str, Any]:
1451
+ try:
1452
+ if args.action == "list":
1453
+ if args.execution_id:
1454
+ raise DevKitError("audit list does not accept an execution id")
1455
+ return list_audits(limit=max(1, int(args.limit or 20)))
1456
+ if args.action == "show":
1457
+ require_id(args.execution_id, "audit show")
1458
+ return show_audit(args.execution_id)
1459
+ if args.action == "export":
1460
+ require_id(args.execution_id, "audit export")
1461
+ return export_audit(args.execution_id, fmt=args.format)
1462
+ except ValueError as exc:
1463
+ raise DevKitError(str(exc)) from exc
1464
+ raise DevKitError(f"unsupported audit action: {args.action}")
1465
+
1466
+
1467
+ def pr_read_dry_run(action: str, *, pr_ref: str | None = None) -> dict[str, Any]:
1468
+ return {
1469
+ "kind": "pr",
1470
+ "status": "planned",
1471
+ "ok": True,
1472
+ "dry_run": True,
1473
+ "mode": "report-only",
1474
+ "provider": "github",
1475
+ "action": action,
1476
+ "pr_ref": pr_ref,
1477
+ "commands": planned_pr_commands(action, pr_ref=pr_ref),
1478
+ "summary": "Dry-run only. GitHub would be read through gh; no PR write action would be submitted.",
1479
+ }
1480
+
1481
+
1482
+ def pr_automation_dry_run(*, time: str) -> dict[str, Any]:
1483
+ return {
1484
+ "kind": "pr-automation",
1485
+ "status": "planned",
1486
+ "ok": True,
1487
+ "dry_run": True,
1488
+ "mode": "report-only",
1489
+ "provider": "github",
1490
+ "task": {
1491
+ "id": "daily-pr-review",
1492
+ "title": "Revisar PRs pendentes diariamente",
1493
+ "schedule": {"type": "daily", "time": time},
1494
+ "action": {
1495
+ "type": "capability",
1496
+ "agent": "github-pr-reviewer",
1497
+ "capability": "list-review-requests",
1498
+ "external_writes": False,
1499
+ },
1500
+ "permissions": {"mode": "report-only", "comment": False, "approve": False, "request_changes": False},
1501
+ },
1502
+ "summary": "Dry-run only. A local report-only PR review task would be created.",
1503
+ }
1504
+
1505
+
1506
+ def require_id(value: str | None, command: str) -> None:
1507
+ if not value:
1508
+ raise DevKitError(f"{command} requires an id")
1509
+
1510
+
1511
+ def effective_dry_run(args: argparse.Namespace) -> bool:
1512
+ return bool(getattr(args, "dry_run", False) or getattr(args, "global_dry_run", False))
1513
+
1514
+
1515
+ def dispatch_alias(args: argparse.Namespace) -> dict[str, Any]:
1516
+ try:
1517
+ if args.action == "list":
1518
+ if args.name:
1519
+ raise DevKitError("alias list does not accept a name")
1520
+ return list_aliases()
1521
+ if args.action == "add":
1522
+ if not args.name:
1523
+ raise DevKitError("alias add requires a name")
1524
+ return add_alias(args.name, force=args.force)
1525
+ if args.action == "remove":
1526
+ if not args.name:
1527
+ raise DevKitError("alias remove requires a name")
1528
+ return remove_alias(args.name)
1529
+ if args.action == "sync":
1530
+ if args.name:
1531
+ raise DevKitError("alias sync does not accept a name")
1532
+ return sync_aliases()
1533
+ except ValueError as exc:
1534
+ raise DevKitError(str(exc)) from exc
1535
+ raise DevKitError(f"unsupported alias action: {args.action}")
1536
+
1537
+
1538
+ def dispatch_session(args: argparse.Namespace) -> dict[str, Any]:
1539
+ try:
1540
+ if args.action == "list":
1541
+ if args.session_id:
1542
+ raise DevKitError("session list does not accept a session id")
1543
+ return list_sessions()
1544
+ if args.action == "show":
1545
+ if not args.session_id:
1546
+ raise DevKitError("session show requires a session id")
1547
+ return show_session(args.session_id)
1548
+ if args.action == "resume":
1549
+ if not args.session_id:
1550
+ raise DevKitError("session resume requires a session id")
1551
+ return resume_session(args.session_id)
1552
+ except ValueError as exc:
1553
+ raise DevKitError(str(exc)) from exc
1554
+ raise DevKitError(f"unsupported session action: {args.action}")