agent-devkit 0.1.5 → 0.2.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 (606) hide show
  1. package/README.md +14 -2
  2. package/package.json +1 -1
  3. package/runtime/README.md +127 -6
  4. package/runtime/agent +5 -0
  5. package/runtime/agents/README.md +34 -0
  6. package/runtime/agents/agent-devkit-agent-builder/AGENTS.md +24 -0
  7. package/runtime/agents/agent-devkit-agent-builder/README.md +37 -0
  8. package/runtime/agents/agent-devkit-agent-builder/agent.yaml +46 -0
  9. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/capability.yaml +29 -0
  10. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/decision-rules.md +7 -0
  11. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/runner.py +33 -0
  12. package/runtime/agents/agent-devkit-agent-builder/capabilities/plan-agent/workflow.md +8 -0
  13. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/capability.yaml +31 -0
  14. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/decision-rules.md +9 -0
  15. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/runner.py +39 -0
  16. package/runtime/agents/agent-devkit-agent-builder/capabilities/scaffold-agent/workflow.md +8 -0
  17. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/capability.yaml +28 -0
  18. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/decision-rules.md +6 -0
  19. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/runner.py +33 -0
  20. package/runtime/agents/agent-devkit-agent-builder/capabilities/validate-agent-contract/workflow.md +7 -0
  21. package/runtime/agents/agent-devkit-agent-builder/infra/integrations/agent-devkit/agent_builder_repository.py +527 -0
  22. package/runtime/agents/agent-devkit-agent-builder/knowledge/context.md +15 -0
  23. package/runtime/agents/agent-devkit-agent-builder/knowledge/policies.yaml +11 -0
  24. package/runtime/agents/agent-devkit-agent-builder/knowledge/system.md +11 -0
  25. package/runtime/agents/agent-devkit-agent-builder/templates/agent-plan-output.md +20 -0
  26. package/runtime/agents/agent-devkit-agent-builder/templates/scaffold-plan-output.md +13 -0
  27. package/runtime/agents/agent-devkit-agent-builder/templates/validation-report-output.md +13 -0
  28. package/runtime/agents/agent-devkit-agent-builder/tests/test_runners.py +188 -0
  29. package/runtime/agents/automation-architect/AGENTS.md +11 -0
  30. package/runtime/agents/automation-architect/README.md +27 -0
  31. package/runtime/agents/automation-architect/agent.yaml +57 -0
  32. package/runtime/agents/automation-architect/capabilities/classify-automation-request/capability.yaml +35 -0
  33. package/runtime/agents/automation-architect/capabilities/classify-automation-request/decision-rules.md +10 -0
  34. package/runtime/agents/automation-architect/capabilities/classify-automation-request/runner.py +37 -0
  35. package/runtime/agents/automation-architect/capabilities/classify-automation-request/workflow.md +7 -0
  36. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/capability.yaml +34 -0
  37. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/decision-rules.md +7 -0
  38. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/runner.py +37 -0
  39. package/runtime/agents/automation-architect/capabilities/delegate-automation-build/workflow.md +6 -0
  40. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/capability.yaml +35 -0
  41. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/decision-rules.md +7 -0
  42. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/runner.py +37 -0
  43. package/runtime/agents/automation-architect/capabilities/plan-automation-solution/workflow.md +7 -0
  44. package/runtime/agents/automation-architect/capabilities/review-automation-solution/capability.yaml +36 -0
  45. package/runtime/agents/automation-architect/capabilities/review-automation-solution/decision-rules.md +7 -0
  46. package/runtime/agents/automation-architect/capabilities/review-automation-solution/runner.py +39 -0
  47. package/runtime/agents/automation-architect/capabilities/review-automation-solution/workflow.md +7 -0
  48. package/runtime/agents/automation-architect/infra/integrations/automation-architecture/automation_architecture_repository.py +481 -0
  49. package/runtime/agents/automation-architect/knowledge/context.md +22 -0
  50. package/runtime/agents/automation-architect/knowledge/policies.yaml +20 -0
  51. package/runtime/agents/automation-architect/knowledge/system.md +8 -0
  52. package/runtime/agents/automation-architect/templates/automation-classification.md +6 -0
  53. package/runtime/agents/automation-architect/templates/automation-plan.md +5 -0
  54. package/runtime/agents/automation-architect/tests/test_runners.py +135 -0
  55. package/runtime/agents/aws-architecture-analyst/agent.yaml +17 -4
  56. package/runtime/agents/aws-cloudwatch-log-analyzer/agent.yaml +12 -2
  57. package/runtime/agents/aws-cloudwatch-log-analyzer/capabilities/analyze-service-error/capability.yaml +16 -0
  58. package/runtime/agents/aws-lambda-builder/AGENTS.md +27 -0
  59. package/runtime/agents/aws-lambda-builder/README.md +21 -0
  60. package/runtime/agents/aws-lambda-builder/agent.yaml +46 -0
  61. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/capability.yaml +18 -0
  62. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/decision-rules.md +6 -0
  63. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/runner.py +33 -0
  64. package/runtime/agents/aws-lambda-builder/capabilities/deploy-lambda-plan/workflow.md +6 -0
  65. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/capability.yaml +20 -0
  66. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/decision-rules.md +6 -0
  67. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/runner.py +39 -0
  68. package/runtime/agents/aws-lambda-builder/capabilities/generate-lambda-project/workflow.md +7 -0
  69. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/capability.yaml +22 -0
  70. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/decision-rules.md +6 -0
  71. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/runner.py +41 -0
  72. package/runtime/agents/aws-lambda-builder/capabilities/package-lambda/workflow.md +6 -0
  73. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/capability.yaml +18 -0
  74. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/decision-rules.md +7 -0
  75. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/runner.py +33 -0
  76. package/runtime/agents/aws-lambda-builder/capabilities/plan-lambda/workflow.md +6 -0
  77. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/capability.yaml +18 -0
  78. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/decision-rules.md +7 -0
  79. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/runner.py +33 -0
  80. package/runtime/agents/aws-lambda-builder/capabilities/review-lambda-security/workflow.md +5 -0
  81. package/runtime/agents/aws-lambda-builder/infra/integrations/aws-lambda/aws_lambda_repository.py +688 -0
  82. package/runtime/agents/aws-lambda-builder/knowledge/context.md +12 -0
  83. package/runtime/agents/aws-lambda-builder/knowledge/policies.yaml +23 -0
  84. package/runtime/agents/aws-lambda-builder/knowledge/system.md +10 -0
  85. package/runtime/agents/aws-lambda-builder/templates/lambda-deploy-plan.md +3 -0
  86. package/runtime/agents/aws-lambda-builder/templates/lambda-package.md +3 -0
  87. package/runtime/agents/aws-lambda-builder/templates/lambda-plan.md +3 -0
  88. package/runtime/agents/aws-lambda-builder/templates/lambda-readme.md +3 -0
  89. package/runtime/agents/aws-lambda-builder/templates/lambda-security-review.md +3 -0
  90. package/runtime/agents/aws-lambda-builder/tests/test_runners.py +355 -0
  91. package/runtime/agents/aws-operations-operator/agent.yaml +18 -6
  92. package/runtime/agents/aws-security-governance-auditor/agent.yaml +17 -5
  93. package/runtime/agents/azure-devops-orchestrator/agent.yaml +15 -2
  94. package/runtime/agents/azure-devops-orchestrator/capabilities/read-card/capability.yaml +29 -0
  95. package/runtime/agents/bpo-analyser/agent.yaml +12 -2
  96. package/runtime/agents/bpo-analyser/knowledge/policies.yaml +2 -2
  97. package/runtime/agents/data-scientist-analyst/agent.yaml +16 -4
  98. package/runtime/agents/data-scientist-analyst/capabilities/generate-data-report/capability.yaml +1 -1
  99. package/runtime/agents/data-scientist-analyst/capabilities/generate-reconciliation-report/capability.yaml +1 -1
  100. package/runtime/agents/data-scientist-analyst/capabilities/run-data-pipeline/capability.yaml +1 -1
  101. package/runtime/agents/data-scientist-analyst/infra/integrations/agent-bridge/methods/analyze-sql-source.yaml +1 -1
  102. package/runtime/agents/data-scientist-analyst/knowledge/policies.yaml +4 -4
  103. package/runtime/agents/data-scientist-analyst/knowledge/system.md +1 -1
  104. package/runtime/agents/data-scientist-analyst/tests/test_runners.py +1 -1
  105. package/runtime/agents/database-change-operator/agent.yaml +12 -1
  106. package/runtime/agents/docker-container-builder/AGENTS.md +27 -0
  107. package/runtime/agents/docker-container-builder/README.md +21 -0
  108. package/runtime/agents/docker-container-builder/agent.yaml +52 -0
  109. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/capability.yaml +18 -0
  110. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/decision-rules.md +6 -0
  111. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/runner.py +32 -0
  112. package/runtime/agents/docker-container-builder/capabilities/analyze-containerization-target/workflow.md +6 -0
  113. package/runtime/agents/docker-container-builder/capabilities/generate-compose/capability.yaml +18 -0
  114. package/runtime/agents/docker-container-builder/capabilities/generate-compose/decision-rules.md +7 -0
  115. package/runtime/agents/docker-container-builder/capabilities/generate-compose/runner.py +32 -0
  116. package/runtime/agents/docker-container-builder/capabilities/generate-compose/workflow.md +6 -0
  117. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/capability.yaml +20 -0
  118. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/decision-rules.md +7 -0
  119. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/runner.py +38 -0
  120. package/runtime/agents/docker-container-builder/capabilities/generate-container-project-files/workflow.md +7 -0
  121. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/capability.yaml +18 -0
  122. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/decision-rules.md +6 -0
  123. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/runner.py +32 -0
  124. package/runtime/agents/docker-container-builder/capabilities/generate-dockerfile/workflow.md +7 -0
  125. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/capability.yaml +18 -0
  126. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/decision-rules.md +6 -0
  127. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/runner.py +32 -0
  128. package/runtime/agents/docker-container-builder/capabilities/plan-image-build/workflow.md +6 -0
  129. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/capability.yaml +21 -0
  130. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/decision-rules.md +6 -0
  131. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/runner.py +43 -0
  132. package/runtime/agents/docker-container-builder/capabilities/review-docker-security/workflow.md +5 -0
  133. package/runtime/agents/docker-container-builder/infra/integrations/docker-container/docker_container_repository.py +837 -0
  134. package/runtime/agents/docker-container-builder/knowledge/context.md +21 -0
  135. package/runtime/agents/docker-container-builder/knowledge/policies.yaml +13 -0
  136. package/runtime/agents/docker-container-builder/knowledge/system.md +21 -0
  137. package/runtime/agents/docker-container-builder/templates/container-plan.md +4 -0
  138. package/runtime/agents/docker-container-builder/templates/container-review.md +4 -0
  139. package/runtime/agents/docker-container-builder/templates/docker-compose.md +5 -0
  140. package/runtime/agents/docker-container-builder/templates/docker-readme.md +3 -0
  141. package/runtime/agents/docker-container-builder/templates/dockerfile.md +5 -0
  142. package/runtime/agents/docker-container-builder/tests/test_runners.py +255 -0
  143. package/runtime/agents/drawio-diagram-builder/agent.yaml +11 -2
  144. package/runtime/agents/drawio-diagram-builder/capabilities/execute-diagram-delivery/capability.yaml +1 -1
  145. package/runtime/agents/drawio-diagram-builder/capabilities/read-azure-card-context/capability.yaml +1 -1
  146. package/runtime/agents/elasticsearch-log-analyzer/agent.yaml +14 -2
  147. package/runtime/agents/elasticsearch-log-analyzer/capabilities/analyze-service-errors/capability.yaml +14 -0
  148. package/runtime/agents/excel-workbook-builder/agent.yaml +10 -0
  149. package/runtime/agents/excel-workbook-builder/capabilities/create-template/capability.yaml +1 -1
  150. package/runtime/agents/excel-workbook-builder/capabilities/create-template/workflow.md +1 -1
  151. package/runtime/agents/excel-workbook-builder/capabilities/create-template-version/capability.yaml +1 -1
  152. package/runtime/agents/excel-workbook-builder/capabilities/generate-template-input-file/capability.yaml +1 -2
  153. package/runtime/agents/excel-workbook-builder/capabilities/refine-template/capability.yaml +1 -1
  154. package/runtime/agents/excel-workbook-builder/capabilities/register-template/capability.yaml +1 -2
  155. package/runtime/agents/excel-workbook-builder/capabilities/register-template/workflow.md +1 -1
  156. package/runtime/agents/execution-loop-builder/AGENTS.md +24 -0
  157. package/runtime/agents/execution-loop-builder/README.md +19 -0
  158. package/runtime/agents/execution-loop-builder/agent.yaml +49 -0
  159. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/capability.yaml +20 -0
  160. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/decision-rules.md +6 -0
  161. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/runner.py +38 -0
  162. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-project-files/workflow.md +7 -0
  163. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/capability.yaml +18 -0
  164. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/decision-rules.md +5 -0
  165. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/runner.py +32 -0
  166. package/runtime/agents/execution-loop-builder/capabilities/generate-loop-runner/workflow.md +6 -0
  167. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/capability.yaml +18 -0
  168. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/decision-rules.md +6 -0
  169. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/runner.py +32 -0
  170. package/runtime/agents/execution-loop-builder/capabilities/plan-execution-loop/workflow.md +6 -0
  171. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/capability.yaml +19 -0
  172. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/decision-rules.md +6 -0
  173. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/runner.py +36 -0
  174. package/runtime/agents/execution-loop-builder/capabilities/register-loop-task/workflow.md +6 -0
  175. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/capability.yaml +19 -0
  176. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/decision-rules.md +6 -0
  177. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/runner.py +39 -0
  178. package/runtime/agents/execution-loop-builder/capabilities/review-loop-safety/workflow.md +5 -0
  179. package/runtime/agents/execution-loop-builder/infra/integrations/execution-loop/execution_loop_repository.py +608 -0
  180. package/runtime/agents/execution-loop-builder/knowledge/context.md +26 -0
  181. package/runtime/agents/execution-loop-builder/knowledge/policies.yaml +13 -0
  182. package/runtime/agents/execution-loop-builder/knowledge/system.md +19 -0
  183. package/runtime/agents/execution-loop-builder/templates/loop-plan.md +3 -0
  184. package/runtime/agents/execution-loop-builder/templates/loop-readme.md +3 -0
  185. package/runtime/agents/execution-loop-builder/templates/loop-review.md +3 -0
  186. package/runtime/agents/execution-loop-builder/templates/loop-runner.py +2 -0
  187. package/runtime/agents/execution-loop-builder/tests/test_runners.py +274 -0
  188. package/runtime/agents/execution-reviewer/AGENTS.md +8 -0
  189. package/runtime/agents/execution-reviewer/README.md +13 -0
  190. package/runtime/agents/execution-reviewer/agent.yaml +27 -0
  191. package/runtime/agents/execution-reviewer/capabilities/review-agent-result/capability.yaml +14 -0
  192. package/runtime/agents/execution-reviewer/capabilities/review-agent-result/decision-rules.md +6 -0
  193. package/runtime/agents/execution-reviewer/capabilities/review-agent-result/workflow.md +7 -0
  194. package/runtime/agents/execution-reviewer/capabilities/review-final-output/capability.yaml +14 -0
  195. package/runtime/agents/execution-reviewer/capabilities/review-final-output/decision-rules.md +6 -0
  196. package/runtime/agents/execution-reviewer/capabilities/review-final-output/workflow.md +7 -0
  197. package/runtime/agents/execution-reviewer/capabilities/review-plan/capability.yaml +14 -0
  198. package/runtime/agents/execution-reviewer/capabilities/review-plan/decision-rules.md +6 -0
  199. package/runtime/agents/execution-reviewer/capabilities/review-plan/workflow.md +7 -0
  200. package/runtime/agents/execution-reviewer/infra/README.md +4 -0
  201. package/runtime/agents/execution-reviewer/knowledge/context.md +6 -0
  202. package/runtime/agents/execution-reviewer/knowledge/system.md +18 -0
  203. package/runtime/agents/execution-reviewer/templates/README.md +4 -0
  204. package/runtime/agents/figma-ui-ux-product-designer/agent.yaml +17 -5
  205. package/runtime/agents/figma-ui-ux-product-designer/capabilities/analyze-product-context/capability.yaml +1 -1
  206. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-interview/capability.yaml +1 -1
  207. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-review-session/capability.yaml +1 -1
  208. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-dev-handoff/capability.yaml +1 -1
  209. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-user-journey-diagram/capability.yaml +1 -1
  210. package/runtime/agents/figma-ui-ux-product-designer/capabilities/ingest-design-source/capability.yaml +1 -1
  211. package/runtime/agents/figma-ui-ux-product-designer/capabilities/triage-design-feedback/capability.yaml +1 -1
  212. package/runtime/agents/generic-agent-builder/AGENTS.md +20 -0
  213. package/runtime/agents/generic-agent-builder/README.md +40 -0
  214. package/runtime/agents/generic-agent-builder/agent.yaml +43 -0
  215. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/capability.yaml +18 -0
  216. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/decision-rules.md +5 -0
  217. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/runner.py +33 -0
  218. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/workflow.md +6 -0
  219. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/capability.yaml +20 -0
  220. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/decision-rules.md +6 -0
  221. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/runner.py +39 -0
  222. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/workflow.md +7 -0
  223. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/capability.yaml +18 -0
  224. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/decision-rules.md +5 -0
  225. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/runner.py +33 -0
  226. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/workflow.md +5 -0
  227. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/capability.yaml +18 -0
  228. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/decision-rules.md +6 -0
  229. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/runner.py +33 -0
  230. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/workflow.md +6 -0
  231. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/capability.yaml +20 -0
  232. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/decision-rules.md +6 -0
  233. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/runner.py +40 -0
  234. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/workflow.md +7 -0
  235. package/runtime/agents/generic-agent-builder/infra/integrations/generic-agent/generic_agent_repository.py +445 -0
  236. package/runtime/agents/generic-agent-builder/knowledge/context.md +11 -0
  237. package/runtime/agents/generic-agent-builder/knowledge/policies.yaml +12 -0
  238. package/runtime/agents/generic-agent-builder/knowledge/system.md +17 -0
  239. package/runtime/agents/generic-agent-builder/templates/generic-agent-instructions.md +17 -0
  240. package/runtime/agents/generic-agent-builder/templates/generic-review-report.md +13 -0
  241. package/runtime/agents/generic-agent-builder/templates/generic-skill.md +14 -0
  242. package/runtime/agents/generic-agent-builder/tests/test_runners.py +220 -0
  243. package/runtime/agents/github-pr-reviewer/agent.yaml +17 -5
  244. package/runtime/agents/github-pr-reviewer/capabilities/create-review-automation/capability.yaml +1 -1
  245. package/runtime/agents/github-pr-reviewer/capabilities/inspect-pr/capability.yaml +1 -1
  246. package/runtime/agents/github-pr-reviewer/capabilities/list-review-requests/capability.yaml +1 -1
  247. package/runtime/agents/github-pr-reviewer/capabilities/review-pr-diff/capability.yaml +1 -1
  248. package/runtime/agents/knowledge-generator/agent.yaml +13 -3
  249. package/runtime/agents/knowledge-generator/capabilities/generate-knowledge/capability.yaml +1 -1
  250. package/runtime/agents/local-llm-operator/AGENTS.md +8 -0
  251. package/runtime/agents/local-llm-operator/README.md +12 -0
  252. package/runtime/agents/local-llm-operator/agent.yaml +28 -0
  253. package/runtime/agents/local-llm-operator/capabilities/delegate-operational-task/capability.yaml +14 -0
  254. package/runtime/agents/local-llm-operator/capabilities/delegate-operational-task/decision-rules.md +6 -0
  255. package/runtime/agents/local-llm-operator/capabilities/delegate-operational-task/workflow.md +7 -0
  256. package/runtime/agents/local-llm-operator/capabilities/inspect-local-models/capability.yaml +14 -0
  257. package/runtime/agents/local-llm-operator/capabilities/inspect-local-models/decision-rules.md +5 -0
  258. package/runtime/agents/local-llm-operator/capabilities/inspect-local-models/workflow.md +6 -0
  259. package/runtime/agents/local-llm-operator/capabilities/select-local-worker/capability.yaml +14 -0
  260. package/runtime/agents/local-llm-operator/capabilities/select-local-worker/decision-rules.md +6 -0
  261. package/runtime/agents/local-llm-operator/capabilities/select-local-worker/workflow.md +7 -0
  262. package/runtime/agents/local-llm-operator/infra/README.md +4 -0
  263. package/runtime/agents/local-llm-operator/knowledge/context.md +6 -0
  264. package/runtime/agents/local-llm-operator/knowledge/system.md +18 -0
  265. package/runtime/agents/local-llm-operator/templates/README.md +4 -0
  266. package/runtime/agents/n1-support-agent/agent.yaml +40 -1
  267. package/runtime/agents/n2-support-agent/agent.yaml +41 -2
  268. package/runtime/agents/n2-support-agent/knowledge/policies.yaml +2 -2
  269. package/runtime/agents/notification-operator/AGENTS.md +11 -0
  270. package/runtime/agents/notification-operator/README.md +15 -0
  271. package/runtime/agents/notification-operator/agent.yaml +43 -0
  272. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/capability.yaml +19 -0
  273. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/decision-rules.md +6 -0
  274. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/runner.py +33 -0
  275. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/workflow.md +6 -0
  276. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/capability.yaml +25 -0
  277. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/decision-rules.md +7 -0
  278. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/runner.py +49 -0
  279. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/workflow.md +6 -0
  280. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/capability.yaml +27 -0
  281. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/decision-rules.md +6 -0
  282. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/runner.py +68 -0
  283. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/workflow.md +7 -0
  284. package/runtime/agents/notification-operator/infra/README.md +6 -0
  285. package/runtime/agents/notification-operator/knowledge/context.md +10 -0
  286. package/runtime/agents/notification-operator/knowledge/policies.yaml +9 -0
  287. package/runtime/agents/notification-operator/knowledge/system.md +7 -0
  288. package/runtime/agents/notification-operator/templates/README.md +6 -0
  289. package/runtime/agents/notification-operator/tests/test_runners.py +108 -0
  290. package/runtime/agents/playwright-automation-builder/AGENTS.md +23 -0
  291. package/runtime/agents/playwright-automation-builder/README.md +43 -0
  292. package/runtime/agents/playwright-automation-builder/agent.yaml +48 -0
  293. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/capability.yaml +20 -0
  294. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/decision-rules.md +6 -0
  295. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/runner.py +38 -0
  296. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/workflow.md +6 -0
  297. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/capability.yaml +18 -0
  298. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/decision-rules.md +6 -0
  299. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/runner.py +32 -0
  300. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/workflow.md +6 -0
  301. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/capability.yaml +18 -0
  302. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/decision-rules.md +6 -0
  303. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/runner.py +32 -0
  304. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/workflow.md +6 -0
  305. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/capability.yaml +19 -0
  306. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/decision-rules.md +6 -0
  307. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/runner.py +33 -0
  308. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/workflow.md +6 -0
  309. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/capability.yaml +22 -0
  310. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/decision-rules.md +6 -0
  311. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/runner.py +40 -0
  312. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/workflow.md +6 -0
  313. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/capability.yaml +22 -0
  314. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/decision-rules.md +6 -0
  315. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/runner.py +42 -0
  316. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/workflow.md +6 -0
  317. package/runtime/agents/playwright-automation-builder/infra/integrations/playwright-automation/playwright_automation_repository.py +865 -0
  318. package/runtime/agents/playwright-automation-builder/knowledge/context.md +19 -0
  319. package/runtime/agents/playwright-automation-builder/knowledge/policies.yaml +25 -0
  320. package/runtime/agents/playwright-automation-builder/knowledge/system.md +19 -0
  321. package/runtime/agents/playwright-automation-builder/templates/capability-wrapper.md +4 -0
  322. package/runtime/agents/playwright-automation-builder/templates/playwright-automation.py +12 -0
  323. package/runtime/agents/playwright-automation-builder/templates/playwright-readme.md +13 -0
  324. package/runtime/agents/playwright-automation-builder/templates/playwright-review-report.md +9 -0
  325. package/runtime/agents/playwright-automation-builder/templates/playwright-test.py +2 -0
  326. package/runtime/agents/playwright-automation-builder/tests/test_runners.py +261 -0
  327. package/runtime/agents/postgres-data-analyzer/agent.yaml +13 -2
  328. package/runtime/agents/presentation-deck-builder/agent.yaml +14 -3
  329. package/runtime/agents/presentation-deck-builder/capabilities/create-template/capability.yaml +1 -1
  330. package/runtime/agents/presentation-deck-builder/capabilities/create-template-version/capability.yaml +1 -1
  331. package/runtime/agents/presentation-deck-builder/capabilities/generate-template-input-file/capability.yaml +1 -1
  332. package/runtime/agents/presentation-deck-builder/capabilities/refine-template/capability.yaml +1 -1
  333. package/runtime/agents/presentation-deck-builder/capabilities/register-template/capability.yaml +1 -1
  334. package/runtime/agents/presentation-deck-builder/knowledge/prompts/create-template.md +1 -1
  335. package/runtime/agents/presentation-deck-builder/knowledge/prompts/generate-template-input-file.md +1 -1
  336. package/runtime/agents/provider-configurator/AGENTS.md +8 -0
  337. package/runtime/agents/provider-configurator/README.md +5 -0
  338. package/runtime/agents/provider-configurator/agent.yaml +27 -0
  339. package/runtime/agents/provider-configurator/capabilities/collect-provider-credentials/capability.yaml +14 -0
  340. package/runtime/agents/provider-configurator/capabilities/collect-provider-credentials/decision-rules.md +6 -0
  341. package/runtime/agents/provider-configurator/capabilities/collect-provider-credentials/workflow.md +7 -0
  342. package/runtime/agents/provider-configurator/capabilities/configure-provider-source/capability.yaml +14 -0
  343. package/runtime/agents/provider-configurator/capabilities/configure-provider-source/decision-rules.md +6 -0
  344. package/runtime/agents/provider-configurator/capabilities/configure-provider-source/workflow.md +8 -0
  345. package/runtime/agents/provider-configurator/capabilities/validate-provider-readiness/capability.yaml +14 -0
  346. package/runtime/agents/provider-configurator/capabilities/validate-provider-readiness/decision-rules.md +6 -0
  347. package/runtime/agents/provider-configurator/capabilities/validate-provider-readiness/workflow.md +7 -0
  348. package/runtime/agents/provider-configurator/infra/README.md +5 -0
  349. package/runtime/agents/provider-configurator/knowledge/context.md +8 -0
  350. package/runtime/agents/provider-configurator/knowledge/system.md +19 -0
  351. package/runtime/agents/provider-configurator/templates/README.md +4 -0
  352. package/runtime/agents/pyautogui-automation-builder/AGENTS.md +32 -0
  353. package/runtime/agents/pyautogui-automation-builder/README.md +44 -0
  354. package/runtime/agents/pyautogui-automation-builder/agent.yaml +45 -0
  355. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/capability.yaml +20 -0
  356. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/decision-rules.md +6 -0
  357. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/runner.py +39 -0
  358. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/workflow.md +7 -0
  359. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/capability.yaml +18 -0
  360. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/decision-rules.md +7 -0
  361. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/runner.py +33 -0
  362. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/workflow.md +7 -0
  363. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/capability.yaml +18 -0
  364. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/decision-rules.md +8 -0
  365. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/runner.py +33 -0
  366. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/workflow.md +9 -0
  367. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/capability.yaml +20 -0
  368. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/decision-rules.md +8 -0
  369. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/runner.py +43 -0
  370. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/workflow.md +7 -0
  371. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/capability.yaml +22 -0
  372. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/decision-rules.md +6 -0
  373. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/runner.py +43 -0
  374. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/workflow.md +7 -0
  375. package/runtime/agents/pyautogui-automation-builder/infra/integrations/pyautogui-automation/pyautogui_automation_repository.py +856 -0
  376. package/runtime/agents/pyautogui-automation-builder/knowledge/context.md +17 -0
  377. package/runtime/agents/pyautogui-automation-builder/knowledge/policies.yaml +24 -0
  378. package/runtime/agents/pyautogui-automation-builder/knowledge/system.md +13 -0
  379. package/runtime/agents/pyautogui-automation-builder/templates/capability-wrapper.md +3 -0
  380. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-automation.py +12 -0
  381. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-readme.md +3 -0
  382. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-review-report.md +3 -0
  383. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-test.py +2 -0
  384. package/runtime/agents/pyautogui-automation-builder/tests/test_runners.py +376 -0
  385. package/runtime/agents/python-automation-builder/AGENTS.md +25 -0
  386. package/runtime/agents/python-automation-builder/README.md +43 -0
  387. package/runtime/agents/python-automation-builder/agent.yaml +45 -0
  388. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/capability.yaml +20 -0
  389. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/decision-rules.md +6 -0
  390. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/runner.py +39 -0
  391. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/workflow.md +7 -0
  392. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/capability.yaml +18 -0
  393. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/decision-rules.md +5 -0
  394. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/runner.py +33 -0
  395. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/workflow.md +5 -0
  396. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/capability.yaml +18 -0
  397. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/decision-rules.md +6 -0
  398. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/runner.py +33 -0
  399. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/workflow.md +6 -0
  400. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/capability.yaml +20 -0
  401. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/decision-rules.md +6 -0
  402. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/runner.py +43 -0
  403. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/workflow.md +5 -0
  404. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/capability.yaml +22 -0
  405. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/decision-rules.md +6 -0
  406. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/runner.py +43 -0
  407. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/workflow.md +6 -0
  408. package/runtime/agents/python-automation-builder/infra/integrations/python-automation/python_automation_repository.py +717 -0
  409. package/runtime/agents/python-automation-builder/knowledge/context.md +15 -0
  410. package/runtime/agents/python-automation-builder/knowledge/policies.yaml +12 -0
  411. package/runtime/agents/python-automation-builder/knowledge/system.md +19 -0
  412. package/runtime/agents/python-automation-builder/templates/automation-readme.md +13 -0
  413. package/runtime/agents/python-automation-builder/templates/automation-review-report.md +13 -0
  414. package/runtime/agents/python-automation-builder/templates/automation-test.py +9 -0
  415. package/runtime/agents/python-automation-builder/templates/automation.py +19 -0
  416. package/runtime/agents/python-automation-builder/templates/capability-wrapper.md +4 -0
  417. package/runtime/agents/python-automation-builder/tests/test_runners.py +292 -0
  418. package/runtime/agents/selenium-automation-builder/AGENTS.md +27 -0
  419. package/runtime/agents/selenium-automation-builder/README.md +40 -0
  420. package/runtime/agents/selenium-automation-builder/agent.yaml +45 -0
  421. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/capability.yaml +20 -0
  422. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/decision-rules.md +6 -0
  423. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/runner.py +39 -0
  424. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/workflow.md +7 -0
  425. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/capability.yaml +18 -0
  426. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/decision-rules.md +6 -0
  427. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/runner.py +33 -0
  428. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/workflow.md +6 -0
  429. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/capability.yaml +18 -0
  430. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/decision-rules.md +6 -0
  431. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/runner.py +33 -0
  432. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/workflow.md +6 -0
  433. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/capability.yaml +20 -0
  434. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/decision-rules.md +6 -0
  435. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/runner.py +40 -0
  436. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/workflow.md +6 -0
  437. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/capability.yaml +22 -0
  438. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/decision-rules.md +6 -0
  439. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/runner.py +43 -0
  440. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/workflow.md +6 -0
  441. package/runtime/agents/selenium-automation-builder/infra/integrations/selenium-automation/selenium_automation_repository.py +793 -0
  442. package/runtime/agents/selenium-automation-builder/knowledge/context.md +15 -0
  443. package/runtime/agents/selenium-automation-builder/knowledge/policies.yaml +17 -0
  444. package/runtime/agents/selenium-automation-builder/knowledge/system.md +18 -0
  445. package/runtime/agents/selenium-automation-builder/templates/capability-wrapper.md +4 -0
  446. package/runtime/agents/selenium-automation-builder/templates/selenium-automation.py +20 -0
  447. package/runtime/agents/selenium-automation-builder/templates/selenium-readme.md +13 -0
  448. package/runtime/agents/selenium-automation-builder/templates/selenium-review-report.md +13 -0
  449. package/runtime/agents/selenium-automation-builder/templates/selenium-test.py +9 -0
  450. package/runtime/agents/selenium-automation-builder/tests/test_runners.py +282 -0
  451. package/runtime/agents/software-specification-analyst/agent.yaml +17 -4
  452. package/runtime/agents/software-specification-analyst/capabilities/analyze-multiple-projects/capability.yaml +1 -1
  453. package/runtime/agents/software-specification-analyst/capabilities/analyze-project-context/capability.yaml +1 -1
  454. package/runtime/agents/software-specification-analyst/capabilities/conduct-requirements-interview/capability.yaml +1 -1
  455. package/runtime/agents/software-specification-analyst/capabilities/create-complete-spec/capability.yaml +1 -1
  456. package/runtime/agents/software-specification-analyst/capabilities/create-final-spec-from-analysis/capability.yaml +1 -1
  457. package/runtime/agents/software-specification-analyst/capabilities/create-functional-spec/capability.yaml +11 -0
  458. package/runtime/agents/software-specification-analyst/capabilities/create-technical-spec/capability.yaml +12 -0
  459. package/runtime/agents/software-specification-analyst/capabilities/refine-analysis-with-feedback/capability.yaml +1 -1
  460. package/runtime/agents/software-specification-analyst/capabilities/write-user-stories/capability.yaml +12 -0
  461. package/runtime/agents/sqlserver-change-operator/agent.yaml +12 -1
  462. package/runtime/agents/sqlserver-data-analyzer/agent.yaml +13 -2
  463. package/runtime/agents/supabase-project-analyst/AGENTS.md +29 -0
  464. package/runtime/agents/supabase-project-analyst/README.md +23 -0
  465. package/runtime/agents/supabase-project-analyst/agent.yaml +53 -0
  466. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/capability.yaml +18 -0
  467. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/decision-rules.md +5 -0
  468. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/runner.py +32 -0
  469. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/workflow.md +6 -0
  470. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/capability.yaml +18 -0
  471. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/decision-rules.md +6 -0
  472. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/runner.py +32 -0
  473. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/workflow.md +7 -0
  474. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/capability.yaml +18 -0
  475. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/decision-rules.md +5 -0
  476. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/runner.py +32 -0
  477. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/workflow.md +6 -0
  478. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/capability.yaml +18 -0
  479. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/decision-rules.md +6 -0
  480. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/runner.py +32 -0
  481. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/workflow.md +6 -0
  482. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/capability.yaml +19 -0
  483. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/decision-rules.md +6 -0
  484. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/runner.py +36 -0
  485. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/workflow.md +7 -0
  486. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/capability.yaml +18 -0
  487. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/decision-rules.md +6 -0
  488. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/runner.py +32 -0
  489. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/workflow.md +6 -0
  490. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/capability.yaml +18 -0
  491. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/decision-rules.md +6 -0
  492. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/runner.py +32 -0
  493. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/workflow.md +5 -0
  494. package/runtime/agents/supabase-project-analyst/infra/integrations/supabase-project/supabase_project_repository.py +589 -0
  495. package/runtime/agents/supabase-project-analyst/knowledge/context.md +11 -0
  496. package/runtime/agents/supabase-project-analyst/knowledge/policies.yaml +24 -0
  497. package/runtime/agents/supabase-project-analyst/knowledge/system.md +10 -0
  498. package/runtime/agents/supabase-project-analyst/templates/supabase-audit.md +3 -0
  499. package/runtime/agents/supabase-project-analyst/templates/supabase-fix-plan.md +3 -0
  500. package/runtime/agents/supabase-project-analyst/templates/supabase-inspection.md +3 -0
  501. package/runtime/agents/supabase-project-analyst/templates/supabase-report.md +3 -0
  502. package/runtime/agents/supabase-project-analyst/tests/test_runners.py +239 -0
  503. package/runtime/agents/task-orchestrator/AGENTS.md +8 -0
  504. package/runtime/agents/task-orchestrator/README.md +7 -0
  505. package/runtime/agents/task-orchestrator/agent.yaml +53 -0
  506. package/runtime/agents/task-orchestrator/capabilities/coordinate-execution/capability.yaml +15 -0
  507. package/runtime/agents/task-orchestrator/capabilities/coordinate-execution/decision-rules.md +6 -0
  508. package/runtime/agents/task-orchestrator/capabilities/coordinate-execution/workflow.md +7 -0
  509. package/runtime/agents/task-orchestrator/capabilities/plan-task/capability.yaml +14 -0
  510. package/runtime/agents/task-orchestrator/capabilities/plan-task/decision-rules.md +6 -0
  511. package/runtime/agents/task-orchestrator/capabilities/plan-task/workflow.md +8 -0
  512. package/runtime/agents/task-orchestrator/capabilities/select-specialists/capability.yaml +14 -0
  513. package/runtime/agents/task-orchestrator/capabilities/select-specialists/decision-rules.md +6 -0
  514. package/runtime/agents/task-orchestrator/capabilities/select-specialists/workflow.md +7 -0
  515. package/runtime/agents/task-orchestrator/infra/README.md +5 -0
  516. package/runtime/agents/task-orchestrator/knowledge/context.md +9 -0
  517. package/runtime/agents/task-orchestrator/knowledge/system.md +20 -0
  518. package/runtime/agents/task-orchestrator/templates/README.md +4 -0
  519. package/runtime/agents/technical-integration-analyst/agent.yaml +15 -2
  520. package/runtime/agents/topdesk-orchestrator/agent.yaml +10 -2
  521. package/runtime/cli/README.md +76 -11
  522. package/runtime/cli/aikit/__init__.py +1 -1
  523. package/runtime/cli/aikit/acceptance.py +166 -0
  524. package/runtime/cli/aikit/agent_executor.py +89 -0
  525. package/runtime/cli/aikit/agent_registry.py +319 -0
  526. package/runtime/cli/aikit/app_home.py +87 -2
  527. package/runtime/cli/aikit/architecture.py +84 -0
  528. package/runtime/cli/aikit/audit.py +216 -3
  529. package/runtime/cli/aikit/autonomy.py +237 -0
  530. package/runtime/cli/aikit/capability_runtime.py +522 -0
  531. package/runtime/cli/aikit/catalog.py +246 -0
  532. package/runtime/cli/aikit/cli_dispatch.py +1078 -0
  533. package/runtime/cli/aikit/cli_parser.py +409 -0
  534. package/runtime/cli/aikit/collaboration.py +359 -0
  535. package/runtime/cli/aikit/configuration_orchestrator.py +52 -26
  536. package/runtime/cli/aikit/contribution.py +105 -0
  537. package/runtime/cli/aikit/control_router.py +298 -0
  538. package/runtime/cli/aikit/core/__init__.py +1 -0
  539. package/runtime/cli/aikit/core/capability_contract.py +112 -0
  540. package/runtime/cli/aikit/core/requests.py +69 -0
  541. package/runtime/cli/aikit/core/runtime.py +64 -0
  542. package/runtime/cli/aikit/decision_store.py +17 -0
  543. package/runtime/cli/aikit/diagnostics.py +10 -3
  544. package/runtime/cli/aikit/doctor_runtime.py +79 -0
  545. package/runtime/cli/aikit/errors.py +7 -0
  546. package/runtime/cli/aikit/eval.py +158 -0
  547. package/runtime/cli/aikit/execution_reviewer.py +195 -0
  548. package/runtime/cli/aikit/extensions.py +140 -0
  549. package/runtime/cli/aikit/fallback.py +1 -0
  550. package/runtime/cli/aikit/github_pr.py +23 -0
  551. package/runtime/cli/aikit/guardrails.py +25 -10
  552. package/runtime/cli/aikit/human_output.py +1026 -0
  553. package/runtime/cli/aikit/impact_map.py +294 -0
  554. package/runtime/cli/aikit/install.py +4 -3
  555. package/runtime/cli/aikit/interactive_wizard.py +79 -0
  556. package/runtime/cli/aikit/local_llm_operator.py +146 -0
  557. package/runtime/cli/aikit/lock.py +4 -1
  558. package/runtime/cli/aikit/main.py +11 -2561
  559. package/runtime/cli/aikit/mcp_manifest.py +229 -0
  560. package/runtime/cli/aikit/mcp_server.py +132 -0
  561. package/runtime/cli/aikit/mcp_tools.py +262 -0
  562. package/runtime/cli/aikit/mini_brain.py +227 -0
  563. package/runtime/cli/aikit/model_router.py +193 -20
  564. package/runtime/cli/aikit/module_controller.py +335 -0
  565. package/runtime/cli/aikit/natural_prompt_runtime.py +538 -0
  566. package/runtime/cli/aikit/notifications.py +716 -2
  567. package/runtime/cli/aikit/ollama.py +1 -0
  568. package/runtime/cli/aikit/orchestrator.py +1225 -0
  569. package/runtime/cli/aikit/output.py +63 -2
  570. package/runtime/cli/aikit/permissions.py +14 -4
  571. package/runtime/cli/aikit/prompt_injection.py +57 -0
  572. package/runtime/cli/aikit/review_gate.py +38 -6
  573. package/runtime/cli/aikit/roadmap.py +195 -0
  574. package/runtime/cli/aikit/roadmap_cli.py +70 -0
  575. package/runtime/cli/aikit/router.py +41 -12
  576. package/runtime/cli/aikit/router_explain.py +152 -0
  577. package/runtime/cli/aikit/runtime_paths.py +11 -0
  578. package/runtime/cli/aikit/secrets.py +113 -0
  579. package/runtime/cli/aikit/sessions.py +125 -2
  580. package/runtime/cli/aikit/setup_wizard_payload.py +32 -0
  581. package/runtime/cli/aikit/sources.py +298 -46
  582. package/runtime/cli/aikit/tasks.py +449 -21
  583. package/runtime/cli/aikit/wizard_state.py +517 -0
  584. package/runtime/cli/aikit/workflows.py +115 -0
  585. package/runtime/cli/aikit/write_policy.py +108 -0
  586. package/runtime/plugins/claude-code-ai-devkit/README.md +17 -0
  587. package/runtime/plugins/claude-code-ai-devkit/agents/README.md +29 -2
  588. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-db-analyst.md +44 -0
  589. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-execution-reviewer.md +38 -0
  590. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-pr-reviewer.md +42 -0
  591. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-repo-explorer.md +40 -0
  592. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-support-triage.md +43 -0
  593. package/runtime/plugins/claude-code-ai-devkit/plugin.json +1 -1
  594. package/runtime/plugins/claude-code-ai-devkit/skills/ai-devkit-router/SKILL.md +16 -0
  595. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/SKILL.md +1 -0
  596. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/references/subagents.md +21 -0
  597. package/runtime/plugins/claude-skill-ai-devkit/plugin.json +1 -1
  598. package/runtime/providers/azure-devops.yaml +9 -0
  599. package/runtime/providers/github.yaml +4 -0
  600. package/runtime/providers/local-notification.yaml +5 -2
  601. package/runtime/providers/local-scheduler.yaml +1 -1
  602. package/runtime/providers/supabase.yaml +46 -0
  603. package/runtime/scripts/release-catalog-snapshot.json +543 -0
  604. package/runtime/scripts/release-gate.py +141 -1
  605. package/runtime/scripts/validate-repo.py +312 -0
  606. package/runtime/vendor/skills/napkin/napkin.md +15 -9
@@ -0,0 +1,1026 @@
1
+ """Human-readable rendering for Agent DevKit CLI payloads."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import Any
7
+
8
+ from cli.aikit.calendar import calendar_summary
9
+ from cli.aikit.github_pr import summarize_pr_list
10
+
11
+
12
+ def print_human(result: dict[str, Any]) -> None:
13
+ kind = result["kind"]
14
+ if kind == "version":
15
+ print(f"{result.get('program', 'aikit')} {result['version']}")
16
+ elif kind == "agents":
17
+ print_agents(result["items"])
18
+ elif kind == "capabilities":
19
+ print_capabilities(result["agent"], result["items"])
20
+ elif kind == "capability":
21
+ print_capability(result)
22
+ elif kind == "run":
23
+ print_run(result)
24
+ elif kind == "doctor":
25
+ print_doctor(result)
26
+ elif kind == "commands":
27
+ print_command_modes(result)
28
+ elif kind == "architecture":
29
+ print_architecture(result)
30
+ elif kind == "roadmap":
31
+ print_roadmap(result)
32
+ elif kind in {"catalog", "catalog-item"}:
33
+ print_catalog(result)
34
+ elif kind == "route-explain":
35
+ print_route_explain(result)
36
+ elif kind in {"eval-suites", "eval-run", "eval-report"}:
37
+ print_eval(result)
38
+ elif kind in {"secrets-doctor", "secret-backends", "secret-references", "secret-reference", "secret-reference-remove"}:
39
+ print_secrets(result)
40
+ elif kind in {"local-extensions", "local-extension", "local-extension-remove", "local-extension-validation"}:
41
+ print_local_extensions(result)
42
+ elif kind in {"workflows", "workflow", "workflow-install", "workflow-run"}:
43
+ print_workflows(result)
44
+ elif kind in {"contributions", "contribution-checklist", "contribution-validation", "contribution-prepare", "contribution-review"}:
45
+ print_contribution(result)
46
+ elif kind == "agent":
47
+ print_agent_response(result)
48
+ elif kind == "llm-backends":
49
+ print_llm_backends(result)
50
+ elif kind == "llm-doctor":
51
+ print_llm_doctor(result)
52
+ elif kind == "llm-configure":
53
+ print_llm_configure(result)
54
+ elif kind == "llm-default":
55
+ print_llm_default(result)
56
+ elif kind == "llm-preference":
57
+ print_llm_preference(result)
58
+ elif kind == "providers":
59
+ print_providers(result)
60
+ elif kind == "provider-status":
61
+ print_provider_status(result)
62
+ elif kind == "provider-configure":
63
+ print_provider_configure(result)
64
+ elif kind == "provider-unset":
65
+ print_provider_unset(result)
66
+ elif kind == "credential-resolution":
67
+ print_credential_resolution(result)
68
+ elif kind == "credential-backends":
69
+ print_credential_backends(result)
70
+ elif kind == "sources":
71
+ print_sources(result)
72
+ elif kind == "source-status":
73
+ print_source_status(result)
74
+ elif kind == "source-configure":
75
+ print_source_configure(result)
76
+ elif kind == "source-remove":
77
+ print_source_remove(result)
78
+ elif kind in {"wizards", "wizard"}:
79
+ print_wizard(result)
80
+ elif kind == "memory":
81
+ print_memory(result)
82
+ elif kind == "memory-path":
83
+ print_memory_path(result)
84
+ elif kind == "memory-reset":
85
+ print_memory_reset(result)
86
+ elif kind == "personality":
87
+ print_personality(result)
88
+ elif kind == "aliases":
89
+ print_aliases(result)
90
+ elif kind == "alias":
91
+ print_alias(result)
92
+ elif kind == "sessions":
93
+ print_sessions(result)
94
+ elif kind == "session":
95
+ print_session(result)
96
+ elif kind == "setup":
97
+ print_setup(result)
98
+ elif kind == "toolchain":
99
+ print_toolchain(result)
100
+ elif kind == "toolchain-doctor":
101
+ print_toolchain_doctor(result)
102
+ elif kind == "toolchain-install":
103
+ print_toolchain_install(result)
104
+ elif kind == "tasks":
105
+ print_tasks(result)
106
+ elif kind == "task":
107
+ print_task(result)
108
+ elif kind == "task-history":
109
+ print_task_history(result)
110
+ elif kind == "task-run":
111
+ print_task_run(result)
112
+ elif kind == "scheduler":
113
+ print_scheduler(result)
114
+ elif kind == "notification-event":
115
+ print_notification_event(result)
116
+ elif kind == "notifications":
117
+ print_notifications(result)
118
+ elif kind == "calendar":
119
+ print_calendar(result)
120
+ elif kind == "calendar-configure":
121
+ print_calendar_configure(result)
122
+ elif kind in {"pr", "pr-review", "pr-automation"}:
123
+ print_pr(result)
124
+ elif kind == "permissions":
125
+ print_permissions(result)
126
+ elif kind in {"audit", "audit-entry", "audit-export"}:
127
+ print_audit(result)
128
+ elif kind == "config":
129
+ print_config(result)
130
+ elif kind in {"tools", "tool", "integrations", "integration", "skills", "skill", "decisions", "decision", "decisions-reset"}:
131
+ print_control(result)
132
+ elif kind in {"ollama-status", "ollama-models", "ollama-pull", "ollama-update"}:
133
+ print_ollama(result)
134
+ elif kind in {"mcp-manifest", "mcp-tools", "mcp-doctor"}:
135
+ print_mcp(result)
136
+ elif kind == "install":
137
+ print_install(result)
138
+ else:
139
+ print(json.dumps(result, ensure_ascii=False, indent=2))
140
+ print_structured_warnings(result)
141
+
142
+
143
+ def print_agents(items: list[dict[str, Any]]) -> None:
144
+ if not items:
145
+ print("No agents found.")
146
+ return
147
+ for item in items:
148
+ count = item.get("capabilities", 0)
149
+ print(f"{item['id']} {item.get('status') or '-'} {count} capabilities")
150
+ if item.get("purpose"):
151
+ print(f" {item['purpose']}")
152
+
153
+
154
+ def print_roadmap(result: dict[str, Any]) -> None:
155
+ print(f"Agent DevKit roadmap {result.get('version_scope')}: {len(result.get('active_problems') or [])} active problems")
156
+ preteridos = result.get("preteridos") or []
157
+ if preteridos:
158
+ print(f"Out of scope: {', '.join(str(item) for item in preteridos)}")
159
+ for phase in result.get("phases") or []:
160
+ problems = ", ".join(str(item) for item in phase.get("problems") or []) or "-"
161
+ print(f"- {phase.get('number')}: {phase.get('name')} [{problems}]")
162
+
163
+
164
+ def print_catalog(result: dict[str, Any]) -> None:
165
+ if result["kind"] == "catalog-item":
166
+ item = result["item"]
167
+ print(f"{item.get('type')} {item.get('id')}")
168
+ if item.get("description"):
169
+ print(item["description"])
170
+ print(f"Path: {item.get('path') or '-'}")
171
+ print(f"Status: {item.get('status') or '-'}")
172
+ return
173
+ print(f"Catalog {result.get('action')}: {result.get('count', 0)} item(s)")
174
+ for item in result.get("items") or []:
175
+ print(f"- {item.get('type')} {item.get('id')} {item.get('status') or '-'}")
176
+
177
+
178
+ def print_route_explain(result: dict[str, Any]) -> None:
179
+ selected = result.get("selected") or {}
180
+ print(f"Route: {result.get('decision')} ({result.get('confidence_label')})")
181
+ print(f"Selected: {selected.get('agent_id') or '-'} / {selected.get('capability_id') or '-'}")
182
+ print(f"Execution: {result.get('execution')}")
183
+ if result.get("reason"):
184
+ print(result["reason"])
185
+ if result.get("next_step"):
186
+ print(f"Next: {result['next_step']}")
187
+
188
+
189
+ def print_eval(result: dict[str, Any]) -> None:
190
+ if result["kind"] == "eval-suites":
191
+ print("Eval suites:")
192
+ for suite in result.get("suites") or []:
193
+ print(f"- {suite.get('id')}")
194
+ return
195
+ if result["kind"] == "eval-run":
196
+ print(f"Eval {result.get('suite')}: {result.get('status')}")
197
+ for check in result.get("checks") or []:
198
+ print(f"- {check.get('id')}: {check.get('status')}")
199
+ return
200
+ print(result.get("message") or "Eval report")
201
+
202
+
203
+ def print_secrets(result: dict[str, Any]) -> None:
204
+ print(f"{result['kind']}: {result.get('status')}")
205
+ if result.get("backends"):
206
+ for backend in result["backends"]:
207
+ print(f"- {backend.get('id')}: {backend.get('status')}")
208
+ if result.get("references"):
209
+ print(f"References: {len(result['references'])}")
210
+
211
+
212
+ def print_local_extensions(result: dict[str, Any]) -> None:
213
+ print(f"{result['kind']}: {result.get('status')}")
214
+ for item in result.get("items") or []:
215
+ state = "enabled" if item.get("enabled") else "disabled"
216
+ print(f"- {item.get('id')} {state} {item.get('path')}")
217
+
218
+
219
+ def print_workflows(result: dict[str, Any]) -> None:
220
+ print(f"{result['kind']}: {result.get('status')}")
221
+ for item in result.get("items") or []:
222
+ print(f"- {item.get('id')}: {item.get('description')}")
223
+ if result.get("workflow"):
224
+ workflow = result["workflow"]
225
+ print(f"{workflow.get('id')}: {workflow.get('description')}")
226
+
227
+
228
+ def print_contribution(result: dict[str, Any]) -> None:
229
+ print(f"{result['kind']}: {result.get('status')}")
230
+ for check in result.get("checks") or []:
231
+ print(f"- {check.get('id')}: {check.get('status')}")
232
+
233
+
234
+ def print_structured_warnings(result: dict[str, Any]) -> None:
235
+ warnings = [
236
+ warning
237
+ for warning in (result.get("warnings") or [])
238
+ if isinstance(warning, dict)
239
+ ]
240
+ audit_warning = result.get("audit_warning")
241
+ if isinstance(audit_warning, dict) and audit_warning not in warnings:
242
+ warnings.insert(0, audit_warning)
243
+ if not warnings:
244
+ return
245
+ print("\nWarnings:")
246
+ for warning in warnings:
247
+ if warning.get("kind") == "audit-warning":
248
+ reason = warning.get("reason")
249
+ suffix = f" Reason: {reason}" if reason else ""
250
+ print(f"- Warning: audit trail was not recorded.{suffix}")
251
+ continue
252
+ message = warning.get("message") or warning.get("code") or "Warning"
253
+ detail = warning.get("error")
254
+ if detail:
255
+ print(f"- {message}: {detail}")
256
+ else:
257
+ print(f"- {message}")
258
+
259
+
260
+ def print_capabilities(agent: str | None, items: list[dict[str, Any]]) -> None:
261
+ if not items:
262
+ suffix = f" for {agent}" if agent else ""
263
+ print(f"No capabilities found{suffix}.")
264
+ return
265
+ if agent:
266
+ print(f"{agent}:")
267
+ for item in items:
268
+ short_id = item["id"].split(".")[-1]
269
+ prefix = "" if agent else f"{item.get('agent', '-')}/"
270
+ runner = "runner" if item.get("has_runner") else "no-runner"
271
+ workflow = "workflow" if item.get("has_workflow") else "no-workflow"
272
+ rules = "rules" if item.get("has_decision_rules") else "no-rules"
273
+ print(f"- {prefix}{short_id} {format_write_policy(item)} {item.get('status') or '-'} {runner} {workflow} {rules}")
274
+ if item.get("purpose"):
275
+ print(f" {item['purpose']}")
276
+
277
+
278
+ def print_capability(result: dict[str, Any]) -> None:
279
+ agent = result["agent"]
280
+ capability = result["capability"]
281
+ print(f"{agent['id']} / {capability['id'].split('.')[-1]}")
282
+ print(f"Status: {capability.get('status') or '-'}")
283
+ print(f"Version: {capability.get('version') or '-'}")
284
+ print(f"Write policy: {format_write_policy(capability)}")
285
+ if capability.get("purpose"):
286
+ print(f"\n{capability['purpose']}")
287
+ print("\nEntrypoints:")
288
+ for key, value in capability.get("entrypoint", {}).items():
289
+ if isinstance(value, dict):
290
+ marker = "ok" if value["exists"] else "missing"
291
+ print(f"- {key}: {value['path']} [{marker}]")
292
+ integration = capability.get("integration", {})
293
+ if integration:
294
+ print("\nIntegration:")
295
+ repo = integration.get("repository")
296
+ if repo:
297
+ marker = "ok" if repo["exists"] else "missing"
298
+ print(f"- repository: {repo['path']} [{marker}]")
299
+ for method in integration.get("methods", []):
300
+ marker = "ok" if method["exists"] else "missing"
301
+ print(f"- method: {method['path']} [{marker}]")
302
+
303
+
304
+ def format_write_policy(item: dict[str, Any]) -> str:
305
+ policy = item.get("write_policy") or "-"
306
+ metadata = item.get("write_policy_metadata") if isinstance(item.get("write_policy_metadata"), dict) else {}
307
+ raw = metadata.get("raw") or item.get("write_policy_raw")
308
+ if raw and raw != policy:
309
+ return f"{policy} (raw: {raw})"
310
+ return str(policy)
311
+
312
+
313
+ def print_run(result: dict[str, Any]) -> None:
314
+ if result.get("status") in {None, "ok"}:
315
+ print(result.get("stdout", ""), end="")
316
+ return
317
+
318
+ print(f"Run {result['status']}: {result['agent']['id']} / {result['capability'].split('.')[-1]}")
319
+ if result.get("fallback_applied"):
320
+ print(f"Fallback: {result['fallback_applied']}")
321
+ providers = result.get("providers") or {}
322
+ missing = providers.get("missing") or []
323
+ if missing:
324
+ print(f"Missing providers: {', '.join(missing)}")
325
+ if result.get("risks"):
326
+ print("\nRisks:")
327
+ for risk in result["risks"]:
328
+ print(f"- {risk}")
329
+ if result.get("next_steps"):
330
+ print("\nNext steps:")
331
+ for step in result["next_steps"]:
332
+ print(f"- {step}")
333
+
334
+
335
+ def print_doctor(result: dict[str, Any]) -> None:
336
+ print(f"AI DevKit doctor: {result['status']}")
337
+ print(f"Root: {result['root']}")
338
+ summary = result["summary"]
339
+ print(f"Agents: {summary['agents']}")
340
+ print(f"Capabilities: {summary['capabilities']}")
341
+ print(f"Declared runners: {summary['declared_runners']}")
342
+ print(f"Workflows: {summary['workflows']}")
343
+ print(f"Decision rules: {summary['decision_rules']}")
344
+ diagnostics = result.get("diagnostics") or {}
345
+ if diagnostics:
346
+ providers = diagnostics.get("providers") or {}
347
+ llm = diagnostics.get("llm") or {}
348
+ plugins = diagnostics.get("plugins") or {}
349
+ locks = diagnostics.get("locks") or {}
350
+ print("\nDiagnostics:")
351
+ print(f"- Locks: {locks.get('status', '-')}")
352
+ print(f"- Plugins: {plugins.get('status', '-')}")
353
+ print(f"- Providers: {providers.get('status', '-')} ({providers.get('ok', 0)} ok, {providers.get('missing', 0)} missing)")
354
+ print(f"- LLM: {llm.get('status', '-')} ({llm.get('ok', 0)} ok, {llm.get('missing', 0)} missing)")
355
+ if result["warnings"]:
356
+ print("\nWarnings:")
357
+ for warning in result["warnings"]:
358
+ print(f"- {warning}")
359
+ if result["errors"]:
360
+ print("\nErrors:")
361
+ for error in result["errors"]:
362
+ print(f"- {error}")
363
+
364
+
365
+ def print_command_modes(result: dict[str, Any]) -> None:
366
+ print("Deterministic commands (no LLM required):")
367
+ for item in result["deterministic"]:
368
+ print(f"- {item['command']}")
369
+ print("\nLLM commands:")
370
+ for item in result["llm"]:
371
+ print(f"- {item['command']}")
372
+
373
+
374
+ def print_architecture(result: dict[str, Any]) -> None:
375
+ principal = result.get("principal_agent") or {}
376
+ print(f"{principal.get('name', 'Agent DevKit')}: {principal.get('role', 'runtime-agent')}")
377
+ if principal.get("description"):
378
+ print(principal["description"])
379
+ print("\nModel:")
380
+ for key, value in (result.get("model") or {}).items():
381
+ print(f"- {key}: {value}")
382
+ counts = result.get("counts") or {}
383
+ print("\nInventory:")
384
+ print(f"- Runtime agents: {counts.get('runtime_agents', 0)}")
385
+ print(f"- Specialist agents: {counts.get('specialist_agents', 0)}")
386
+ print(f"- Capabilities: {counts.get('capabilities', 0)}")
387
+ print(f"- Executable capabilities: {counts.get('executable_capabilities', 0)}")
388
+ phases = result.get("implementation_phases") or []
389
+ if phases:
390
+ print("\nImplementation phases:")
391
+ for phase in phases:
392
+ print(f"- {phase.get('number')}: {phase.get('name')}")
393
+ acceptance = result.get("acceptance_model") or {}
394
+ sections = acceptance.get("sections") or []
395
+ change_types = acceptance.get("change_types") or []
396
+ if sections:
397
+ section_ids = ", ".join(str(section.get("id")) for section in sections)
398
+ change_type_ids = ", ".join(str(change_type.get("id")) for change_type in change_types)
399
+ print("\nAcceptance model:")
400
+ print(f"- Sections: {section_ids}")
401
+ print(f"- Change types: {change_type_ids}")
402
+ impact = result.get("impact_model") or {}
403
+ areas = impact.get("areas") or []
404
+ if areas:
405
+ area_ids = ", ".join(str(area.get("id")) for area in areas)
406
+ print("\nImpact model:")
407
+ print(f"- Areas: {area_ids}")
408
+
409
+
410
+ def print_agent_response(result: dict[str, Any]) -> None:
411
+ if result.get("status") == "ok":
412
+ print(result.get("response", ""))
413
+ return
414
+ print(result.get("message") or result.get("response") or "Agent execution did not complete.")
415
+ question = result.get("next_question") or ((result.get("setup_wizard") or {}).get("next_question") if isinstance(result.get("setup_wizard"), dict) else None)
416
+ if isinstance(question, dict) and question.get("text"):
417
+ print(f"\nPergunta: {question['text']}")
418
+ if question.get("type") == "confirm":
419
+ print("[s/N]")
420
+ wizard = result.get("setup_wizard") if isinstance(result.get("setup_wizard"), dict) else {}
421
+ if wizard.get("wizard_id"):
422
+ print(f"\nWizard: {wizard['wizard_id']}")
423
+ print(f"Responder: agent wizard answer {wizard['wizard_id']} <resposta>")
424
+ if result.get("llm_backend"):
425
+ print(f"Requested backend: {result['llm_backend']}")
426
+ if result.get("next_steps"):
427
+ print("\nNext steps:")
428
+ for step in result["next_steps"]:
429
+ print(f"- {step}")
430
+
431
+
432
+ def print_wizard(result: dict[str, Any]) -> None:
433
+ if result.get("kind") == "wizards":
434
+ items = result.get("items") or []
435
+ print(f"Wizards: {len(items)}")
436
+ for item in items:
437
+ print(f"- {item.get('wizard_id')} {item.get('status')} {item.get('provider')}")
438
+ return
439
+ wizard = result.get("wizard") if isinstance(result.get("wizard"), dict) else result.get("setup_wizard")
440
+ if not isinstance(wizard, dict):
441
+ print(json.dumps(result, ensure_ascii=False, indent=2))
442
+ return
443
+ print(f"Wizard {wizard.get('wizard_id')}: {wizard.get('status')}")
444
+ print(f"Provider: {wizard.get('provider')}")
445
+ question = result.get("next_question") or wizard.get("next_question")
446
+ if isinstance(question, dict) and question.get("text"):
447
+ print(f"Pergunta: {question['text']}")
448
+ if question.get("type") == "confirm":
449
+ print("[s/N]")
450
+ print(f"Responder: agent wizard answer {wizard.get('wizard_id')} <resposta>")
451
+ if result.get("source_result"):
452
+ source = result["source_result"].get("source") or {}
453
+ print(f"Source configurada: {source.get('id')}")
454
+ if result.get("resumed_prompt"):
455
+ resume = result.get("resume_result") or {}
456
+ print(f"Prompt retomado: {resume.get('status')}")
457
+
458
+
459
+ def print_sources(result: dict[str, Any]) -> None:
460
+ print(f"Sources config: {result['config_path']}")
461
+ if not result["items"]:
462
+ print("No sources configured.")
463
+ return
464
+ for item in result["items"]:
465
+ marker = " [unsafe config]" if item.get("stored_secret") else ""
466
+ print(f"- {item['id']} {item['provider']} {item.get('label') or '-'}{marker}")
467
+ if item.get("unsafe_config_keys"):
468
+ print(f" Unsafe config keys: {', '.join(item['unsafe_config_keys'])}")
469
+
470
+
471
+ def print_source_status(result: dict[str, Any]) -> None:
472
+ print(f"Source status: {result['status']}")
473
+ for item in result["items"]:
474
+ print(f"- {item['id']}: {item['status']}")
475
+ missing = item.get("missing_env_refs") or []
476
+ if missing:
477
+ print(f" Missing env refs: {', '.join(missing)}")
478
+ unsafe = item.get("unsafe_config_keys") or []
479
+ if unsafe:
480
+ print(f" Unsafe config keys: {', '.join(unsafe)}")
481
+ for step in item.get("next_steps") or []:
482
+ print(f" - {step}")
483
+
484
+
485
+ def print_source_configure(result: dict[str, Any]) -> None:
486
+ if result.get("status") == "blocked":
487
+ print("Source configuration blocked.")
488
+ print(f"Field: {result.get('field') or '-'}")
489
+ print(f"Reason: {result.get('reason') or '-'}")
490
+ if result.get("message"):
491
+ print(str(result["message"]))
492
+ print("Stored secret: no")
493
+ return
494
+ source = result["source"]
495
+ print(f"Source configured: {source['id']}")
496
+ print(f"Provider: {source['provider']}")
497
+ print(f"Config: {result['config_path']}")
498
+ print(f"Stored secret: {'yes' if result.get('stored_secret') else 'no'}")
499
+
500
+
501
+ def print_source_remove(result: dict[str, Any]) -> None:
502
+ print(f"Source removed: {result['source']['id']}")
503
+ print(f"Config: {result['config_path']}")
504
+
505
+
506
+ def print_memory(result: dict[str, Any]) -> None:
507
+ print(f"Memory home: {result['memory_home']}")
508
+ if result.get("files"):
509
+ print("\nFiles:")
510
+ for item in result["files"]:
511
+ print(f"- {item['name']}: {item['path']}")
512
+ for bucket in ("prompts", "routes", "sources"):
513
+ print(f"\n{bucket.title()}:")
514
+ items = result["usage"].get(bucket) or []
515
+ if not items:
516
+ print("- none")
517
+ continue
518
+ for item in items:
519
+ print(f"- {item['key']} ({item.get('count', 0)})")
520
+
521
+
522
+ def print_memory_reset(result: dict[str, Any]) -> None:
523
+ print("Memory reset.")
524
+ print(f"Config: {result['config_path']}")
525
+
526
+
527
+ def print_memory_path(result: dict[str, Any]) -> None:
528
+ print(f"Memory home: {result['home']}")
529
+ if result.get("created"):
530
+ print("Created:")
531
+ for path in result["created"]:
532
+ print(f"- {path}")
533
+ print("Files:")
534
+ for item in result["files"]:
535
+ print(f"- {item['name']}: {item['path']}")
536
+
537
+
538
+ def print_personality(result: dict[str, Any]) -> None:
539
+ print(f"Personality: {result.get('status', 'ok')}")
540
+ print(f"Path: {result['path']}")
541
+ print(f"Agent name: {result.get('agent_name') or '-'}")
542
+ print(f"User name: {result.get('user_name') or '-'}")
543
+ print(f"Language: {result.get('language') or '-'}")
544
+ print(f"Tone: {result.get('tone') or '-'}")
545
+ print(f"Detail level: {result.get('detail_level') or '-'}")
546
+ if result.get("message"):
547
+ print(result["message"])
548
+ if result.get("questions"):
549
+ print("Setup questions:")
550
+ for question in result["questions"]:
551
+ print(f"- {question}")
552
+
553
+
554
+ def print_aliases(result: dict[str, Any]) -> None:
555
+ print(f"Aliases config: {result['config_path']}")
556
+ if not result["items"]:
557
+ print("No aliases configured.")
558
+ return
559
+ for item in result["items"]:
560
+ print(f"- {item['name']}: {item['path']}")
561
+
562
+
563
+ def print_alias(result: dict[str, Any]) -> None:
564
+ print(f"Alias {result['status']}: {result['name']}")
565
+ if result.get("path"):
566
+ print(f"Path: {result['path']}")
567
+ if result.get("removed_paths"):
568
+ print("Removed:")
569
+ for path in result["removed_paths"]:
570
+ print(f"- {path}")
571
+ print(f"Config: {result['config_path']}")
572
+
573
+
574
+ def print_sessions(result: dict[str, Any]) -> None:
575
+ print(f"Sessions home: {result['home']}")
576
+ if result.get("active_session_id"):
577
+ print(f"Active: {result['active_session_id']}")
578
+ if not result["items"]:
579
+ print("No sessions found.")
580
+ return
581
+ for item in result["items"]:
582
+ marker = " active" if item.get("active") else ""
583
+ print(
584
+ f"- {item['id']}{marker} {item.get('title') or '-'} "
585
+ f"{item.get('exchange_count', 0)} exchanges ~{item.get('token_estimate', 0)} tokens"
586
+ )
587
+ if item.get("project"):
588
+ print(f" Project: {item['project']}")
589
+
590
+
591
+ def print_session(result: dict[str, Any]) -> None:
592
+ session = result["session"]
593
+ print(f"Session {result['status']}: {session['id']}")
594
+ print(f"Title: {session.get('title') or '-'}")
595
+ print(f"Path: {session.get('path') or '-'}")
596
+ print(f"Project: {session.get('project') or '-'}")
597
+ print(f"Exchanges: {session.get('exchange_count', 0)}")
598
+ print(f"Token estimate: {session.get('token_estimate', 0)}")
599
+
600
+
601
+ def print_setup(result: dict[str, Any]) -> None:
602
+ print(f"Setup: {result['status']}")
603
+ print(f"Dry-run: {result.get('dry_run', False)}")
604
+ if result.get("kind") == "mini-brain-setup":
605
+ mini_brain = result.get("mini_brain") or {}
606
+ print(f"Mini-brain: {mini_brain.get('status', '-')}")
607
+ print(f"Model: {mini_brain.get('ollama_model') or mini_brain.get('hf_model') or '-'}")
608
+ pull = result.get("pull") or {}
609
+ if pull:
610
+ print(f"Ollama pull: {pull.get('status', '-')}")
611
+ if result.get("message"):
612
+ print(result["message"])
613
+ if result.get("next_steps"):
614
+ print("Next steps:")
615
+ for step in result["next_steps"]:
616
+ print(f"- {step}")
617
+ return
618
+ toolchain = result.get("toolchain") or {}
619
+ print(f"Toolchain: {toolchain.get('status', '-')}")
620
+ missing = (toolchain.get("required_missing") or []) + (toolchain.get("optional_missing") or [])
621
+ if missing:
622
+ print(f"Missing: {', '.join(missing)}")
623
+ if result.get("next_steps"):
624
+ print("Next steps:")
625
+ for step in result["next_steps"]:
626
+ print(f"- {step}")
627
+
628
+
629
+ def print_toolchain(result: dict[str, Any]) -> None:
630
+ print(f"Toolchain: {result['status']}")
631
+ print(f"Platform: {result['platform']}")
632
+ for item in result["items"]:
633
+ print(f"- {item['id']} {item['command']} required={item['required']}")
634
+
635
+
636
+ def print_toolchain_doctor(result: dict[str, Any]) -> None:
637
+ print(f"Toolchain doctor: {result['status']}")
638
+ print(f"Platform: {result['platform']}")
639
+ for item in result["items"]:
640
+ print(f"- {item['id']}: {item['status']}")
641
+ if item.get("binary"):
642
+ print(f" {item['binary']}")
643
+ if item.get("install"):
644
+ print(f" Install: {item['install']}")
645
+
646
+
647
+ def print_toolchain_install(result: dict[str, Any]) -> None:
648
+ print(f"Toolchain install: {result['status']}")
649
+ if result.get("message"):
650
+ print(result["message"])
651
+ for plan in result["plans"]:
652
+ print(f"- {plan['id']}: {plan.get('command') or '-'}")
653
+
654
+
655
+ def print_tasks(result: dict[str, Any]) -> None:
656
+ print(f"Tasks: {len(result['items'])}")
657
+ for item in result["items"]:
658
+ print(f"- {item['id']} {item['status']} {item.get('title') or '-'}")
659
+
660
+
661
+ def print_task(result: dict[str, Any]) -> None:
662
+ if result.get("message"):
663
+ print(result["message"])
664
+ task = result.get("task") or {}
665
+ if task:
666
+ print(f"Task {result['status']}: {task.get('id')}")
667
+ print(f"Title: {task.get('title') or '-'}")
668
+ print(f"Status: {task.get('status') or '-'}")
669
+
670
+
671
+ def print_task_history(result: dict[str, Any]) -> None:
672
+ print(result.get("history") or "No history.")
673
+
674
+
675
+ def print_task_run(result: dict[str, Any]) -> None:
676
+ print(f"Task run: {result['status']}")
677
+ if result.get("run_id"):
678
+ print(f"Run: {result['run_id']}")
679
+ if result.get("duration_seconds") is not None:
680
+ print(f"Duration: {result['duration_seconds']}s")
681
+ if result.get("audit_id"):
682
+ print(f"Audit: {result['audit_id']}")
683
+ if result.get("message"):
684
+ print(result["message"])
685
+ notification = result.get("notification")
686
+ if isinstance(notification, dict):
687
+ print(f"Notification: {notification.get('status')}")
688
+ if notification.get("reason"):
689
+ print(f"Reason: {notification['reason']}")
690
+
691
+
692
+ def print_scheduler(result: dict[str, Any]) -> None:
693
+ print(f"Scheduler: {result['status']}")
694
+ if result.get("message"):
695
+ print(result["message"])
696
+ if "due_count" in result:
697
+ print(f"Due tasks: {result['due_count']}")
698
+ if result.get("events_path"):
699
+ print(f"Events: {result['events_path']}")
700
+
701
+
702
+ def print_notifications(result: dict[str, Any]) -> None:
703
+ action = result.get("action")
704
+ status = result.get("status") or "ok"
705
+ print(f"Notifications: {status}")
706
+ if action:
707
+ print(f"Action: {action}")
708
+ if result.get("reason"):
709
+ print(f"Reason: {result['reason']}")
710
+ if result.get("channel"):
711
+ print(f"Channel: {result['channel']}")
712
+ if isinstance(result.get("notification"), dict):
713
+ notification = result["notification"]
714
+ print(f"Event: {notification.get('event')}")
715
+ print(f"Summary: {notification.get('summary') or notification.get('message')}")
716
+ deliveries = result.get("deliveries") if isinstance(result.get("deliveries"), list) else []
717
+ if deliveries:
718
+ print("Deliveries:")
719
+ for delivery in deliveries:
720
+ detail = delivery.get("reason") or delivery.get("status") or "-"
721
+ print(f"- {delivery.get('channel') or '-'}: {detail}")
722
+ desktop = result.get("desktop")
723
+ if isinstance(desktop, dict):
724
+ print(f"Desktop enabled: {desktop.get('enabled', '-')}")
725
+ events = desktop.get("events") or []
726
+ if events:
727
+ print(f"Events: {', '.join(str(item) for item in events)}")
728
+ backend = desktop.get("backend")
729
+ if isinstance(backend, dict):
730
+ print(f"Backend: {backend.get('name') or '-'} ({backend.get('status') or '-'})")
731
+ if result.get("events"):
732
+ print("Events:")
733
+ for event in result["events"]:
734
+ print(f"- {event}")
735
+ if result.get("channels"):
736
+ print("Channels:")
737
+ for channel in result["channels"]:
738
+ print(f"- {channel.get('id')}: {channel.get('status')}")
739
+ channel_config = result.get("channel_config")
740
+ if isinstance(channel_config, dict):
741
+ print(f"Channel enabled: {channel_config.get('enabled', '-')}")
742
+ events = channel_config.get("events") or []
743
+ if events:
744
+ print(f"Channel events: {', '.join(str(item) for item in events)}")
745
+ if result.get("config_path"):
746
+ print(f"Config: {result['config_path']}")
747
+ if result.get("history_path"):
748
+ print(f"History: {result['history_path']}")
749
+
750
+
751
+ def print_notification_event(result: dict[str, Any]) -> None:
752
+ print(f"Notification event: {result.get('event')}")
753
+ print(f"Status: {result.get('status')}")
754
+ print(f"Title: {result.get('title')}")
755
+ print(f"Summary: {result.get('summary')}")
756
+
757
+
758
+ def print_calendar(result: dict[str, Any]) -> None:
759
+ if result.get("status") != "ok":
760
+ print(result.get("message") or "Calendar is not available.")
761
+ for step in result.get("next_steps") or []:
762
+ print(f"- {step}")
763
+ return
764
+ print(calendar_summary(result))
765
+
766
+
767
+ def print_calendar_configure(result: dict[str, Any]) -> None:
768
+ print(f"Calendar configured: {result['provider']}")
769
+ print(f"Source: {result['source_ref']}")
770
+ print("Stored secret: no")
771
+
772
+
773
+ def print_pr(result: dict[str, Any]) -> None:
774
+ if result.get("message"):
775
+ print(result["message"])
776
+ if result.get("items") is not None:
777
+ print(summarize_pr_list(result))
778
+ elif result.get("summary"):
779
+ print(result["summary"])
780
+ elif result.get("task"):
781
+ task = result["task"]
782
+ print(f"PR automation {result['status']}: {task.get('id')}")
783
+
784
+
785
+ def print_permissions(result: dict[str, Any]) -> None:
786
+ print(f"Permissions: {result['status']}")
787
+ if result.get("default_level"):
788
+ print(f"Default: {result['default_level']}")
789
+ if result.get("grant"):
790
+ grant = result["grant"]
791
+ print(f"Grant: {grant.get('agent')} / {grant.get('provider')} -> {grant.get('level')}")
792
+ if result.get("removed") is not None:
793
+ print(f"Removed: {len(result.get('removed') or [])}")
794
+ grants = result.get("grants")
795
+ if grants is not None:
796
+ if not grants:
797
+ print("No explicit grants.")
798
+ for grant in grants:
799
+ print(f"- {grant.get('agent')} / {grant.get('provider')} -> {grant.get('level')}")
800
+ if result.get("json_path"):
801
+ print(f"Policy: {result['json_path']}")
802
+
803
+
804
+ def print_audit(result: dict[str, Any]) -> None:
805
+ if result["kind"] == "audit":
806
+ print(f"Audit home: {result['home']}")
807
+ for item in result.get("items") or []:
808
+ print(f"- {item.get('id')} {item.get('created_at')} {item.get('command')} {item.get('status')}")
809
+ return
810
+ if result["kind"] == "audit-entry":
811
+ entry = result.get("entry") or {}
812
+ print(f"Audit: {entry.get('id')}")
813
+ print(f"Created: {entry.get('created_at')}")
814
+ print(f"Command: {entry.get('command')}")
815
+ print(f"Status: {(entry.get('result') or {}).get('status')}")
816
+ print(f"JSON: {result.get('json_path')}")
817
+ print(f"Markdown: {result.get('markdown_path')}")
818
+ return
819
+ print(result.get("content") or "")
820
+
821
+
822
+ def print_llm_backends(result: dict[str, Any]) -> None:
823
+ print(f"LLM config: {result['config_path']}")
824
+ print(f"Default: {result.get('default') or '-'}")
825
+ for item in result["items"]:
826
+ markers = []
827
+ if item.get("configured"):
828
+ markers.append("configured")
829
+ if item.get("default"):
830
+ markers.append("default")
831
+ suffix = f" [{' '.join(markers)}]" if markers else ""
832
+ print(f"- {item['id']} {item['kind']} {item['auth']}{suffix}")
833
+ if item.get("notes"):
834
+ print(f" {item['notes']}")
835
+
836
+
837
+ def print_llm_doctor(result: dict[str, Any]) -> None:
838
+ print(f"LLM doctor: {result['status']}")
839
+ print(f"Config: {result['config_path']}")
840
+ print(f"Default: {result.get('default') or '-'}")
841
+ for item in result["items"]:
842
+ print(f"- {item['id']}: {item['status']}")
843
+ if item.get("message"):
844
+ print(f" {item['message']}")
845
+
846
+
847
+ def print_llm_configure(result: dict[str, Any]) -> None:
848
+ print(f"LLM backend configured: {result['backend']}")
849
+ print(f"Config: {result['config_path']}")
850
+ print(f"Default: {result.get('default') or '-'}")
851
+ print("Stored secret: no")
852
+
853
+
854
+ def print_llm_default(result: dict[str, Any]) -> None:
855
+ print(f"Default LLM backend: {result['default']}")
856
+ print(f"Config: {result['config_path']}")
857
+
858
+
859
+ def print_llm_preference(result: dict[str, Any]) -> None:
860
+ print(f"LLM preference: {result.get('status', 'ok')}")
861
+ print(f"Primary: {result.get('primary') or '-'}")
862
+ print(f"Fallback enabled: {result.get('fallback_enabled', True)}")
863
+ print("Order:")
864
+ for backend_id in result.get("order") or []:
865
+ print(f"- {backend_id}")
866
+ print(f"Config: {result['config_path']}")
867
+
868
+
869
+ def print_providers(result: dict[str, Any]) -> None:
870
+ if not result["items"]:
871
+ print("No providers found.")
872
+ return
873
+ for item in result["items"]:
874
+ write_marker = "writes" if item.get("writes") else "read"
875
+ print(f"- {item['id']} {item['kind']} {item['status']} {write_marker}")
876
+ if item.get("description"):
877
+ print(f" {item['description']}")
878
+
879
+
880
+ def print_provider_status(result: dict[str, Any]) -> None:
881
+ print(f"Provider status: {result['status']}")
882
+ for item in result["items"]:
883
+ print(f"- {item['id']}: {item['status']}")
884
+ if item.get("message"):
885
+ print(f" {item['message']}")
886
+ missing = item.get("missing_required_fields") or []
887
+ if missing:
888
+ print(f" Missing config: {', '.join(missing)}")
889
+ auth = item.get("auth") or {}
890
+ missing_secret_fields = auth.get("missing_secret_fields") or []
891
+ if missing_secret_fields:
892
+ print(f" Missing secret refs: {', '.join(missing_secret_fields)}")
893
+ detected_env_file = item.get("detected_env_file") or []
894
+ if detected_env_file:
895
+ print(f" Detected in env-file: {', '.join(detected_env_file)}")
896
+
897
+
898
+ def print_provider_configure(result: dict[str, Any]) -> None:
899
+ print(result.get("message") or f"Provider configuration {result['status']}.")
900
+ print(f"Provider: {result['provider']}")
901
+ if result.get("status") == "configured":
902
+ print(f"Config: {result['config_path']}")
903
+ print("Stored secret: no")
904
+ return
905
+ if result.get("status") == "session-only":
906
+ print("Session-only: yes")
907
+ print("Stored secret: no")
908
+ return
909
+ if result.get("required_config_fields"):
910
+ print("Required config fields:")
911
+ for field in result["required_config_fields"]:
912
+ print(f"- {field}")
913
+ print("Next steps:")
914
+ for step in result["next_steps"]:
915
+ print(f"- {step}")
916
+
917
+
918
+ def print_provider_unset(result: dict[str, Any]) -> None:
919
+ print(f"Provider config {result['status']}: {result['provider']}")
920
+ print(f"Config: {result['config_path']}")
921
+
922
+
923
+ def print_credential_resolution(result: dict[str, Any]) -> None:
924
+ print(f"Credential resolution for {result['provider']}: {result['status']}")
925
+ if result.get("detected_env"):
926
+ print(f"Detected in env: {', '.join(result['detected_env'])}")
927
+ if result.get("detected_env_file"):
928
+ print(f"Detected in env-file: {', '.join(result['detected_env_file'])}")
929
+ if result.get("missing_required_fields"):
930
+ print(f"Missing required fields: {', '.join(result['missing_required_fields'])}")
931
+ auth = result.get("auth") or {}
932
+ if auth.get("missing_secret_fields"):
933
+ print(f"Missing secret refs: {', '.join(auth['missing_secret_fields'])}")
934
+ print("Secret values returned: no")
935
+
936
+
937
+ def print_credential_backends(result: dict[str, Any]) -> None:
938
+ print("Credential resolver backends:")
939
+ for item in result["items"]:
940
+ print(f"- {item}")
941
+
942
+
943
+ def print_config(result: dict[str, Any]) -> None:
944
+ print(f"Config: {result.get('path')}")
945
+ if result.get("llm"):
946
+ print(f"Primary LLM: {(result['llm'] or {}).get('primary') or '-'}")
947
+ if result.get("ollama"):
948
+ print(f"Ollama: {(result['ollama'] or {}).get('status')}")
949
+
950
+
951
+ def print_control(result: dict[str, Any]) -> None:
952
+ kind = result.get("kind")
953
+ if kind == "decisions-reset":
954
+ print(f"Decisions reset: {result.get('category') or 'all'}")
955
+ print(f"Path: {result.get('path')}")
956
+ return
957
+ if "items" in result:
958
+ print(f"{kind}:")
959
+ for item in result.get("items") or []:
960
+ print(f"- {item.get('category')}:{item.get('id')} {item.get('state')}")
961
+ if not result.get("items"):
962
+ print("- none")
963
+ return
964
+ item = result.get("item") or result
965
+ print(f"{item.get('category') or result.get('category')}:{item.get('id') or result.get('id')} {item.get('state') or result.get('state')}")
966
+
967
+
968
+ def print_ollama(result: dict[str, Any]) -> None:
969
+ kind = result.get("kind")
970
+ if kind == "ollama-status":
971
+ print(f"Ollama: {result.get('status')}")
972
+ print(f"Binary: {result.get('binary') or '-'}")
973
+ print(f"Version: {result.get('version') or '-'}")
974
+ daemon = result.get("daemon") or {}
975
+ print(f"Daemon: {daemon.get('status') or '-'}")
976
+ print(f"Models: {result.get('model_count', 0)}")
977
+ if result.get("install_plan"):
978
+ print(f"Install: {(result['install_plan'] or {}).get('command')}")
979
+ return
980
+ if kind == "ollama-models":
981
+ print(f"Ollama models: {result.get('status')}")
982
+ for item in result.get("items") or []:
983
+ print(f"- {item.get('name')} {item.get('size') or '-'}")
984
+ if not result.get("items"):
985
+ print("- none")
986
+ return
987
+ print(f"{kind}: {result.get('status')}")
988
+ if result.get("command"):
989
+ command = result["command"]
990
+ print("Command: " + (" ".join(command) if isinstance(command, list) else str(command)))
991
+ if result.get("message"):
992
+ print(result["message"])
993
+
994
+
995
+ def print_mcp(result: dict[str, Any]) -> None:
996
+ print(f"MCP: {result.get('status', 'ok')}")
997
+ print(f"Transport: {result.get('transport', '-')}")
998
+ print(f"Protocol: {result.get('protocol_version', '-')}")
999
+ server = result.get("server") if isinstance(result.get("server"), dict) else {}
1000
+ if server:
1001
+ print(f"Server: {server.get('name', '-')} {server.get('version', '')}".rstrip())
1002
+ tools = result.get("tools")
1003
+ if isinstance(tools, list):
1004
+ print("Tools:")
1005
+ for tool in tools:
1006
+ print(f"- {tool.get('name')}")
1007
+ elif isinstance(tools, dict):
1008
+ print(f"Tools: {tools.get('count', 0)}")
1009
+
1010
+
1011
+ def print_install(result: dict[str, Any]) -> None:
1012
+ print(f"AI DevKit install: {result['status']}")
1013
+ print(f"Scope: {result['scope']}")
1014
+ print(f"Target: {result['target']}")
1015
+ print(f"Hosts: {', '.join(result['hosts'])}")
1016
+ print("Stored secret: no")
1017
+ paths = result["planned"] if result.get("dry_run") else result["written"]
1018
+ if paths:
1019
+ label = "Planned writes" if result.get("dry_run") else "Written files"
1020
+ print(f"\n{label}:")
1021
+ for path in paths:
1022
+ print(f"- {path}")
1023
+ if result.get("next_steps"):
1024
+ print("\nNext steps:")
1025
+ for step in result["next_steps"]:
1026
+ print(f"- {step}")