agent-devkit 0.1.6 → 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 (551) hide show
  1. package/README.md +13 -1
  2. package/package.json +1 -1
  3. package/runtime/README.md +53 -1
  4. package/runtime/agent +5 -0
  5. package/runtime/agents/README.md +26 -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/agent.yaml +6 -4
  189. package/runtime/agents/execution-reviewer/capabilities/review-agent-result/capability.yaml +1 -2
  190. package/runtime/agents/execution-reviewer/capabilities/review-final-output/capability.yaml +1 -2
  191. package/runtime/agents/execution-reviewer/capabilities/review-plan/capability.yaml +1 -2
  192. package/runtime/agents/figma-ui-ux-product-designer/agent.yaml +17 -5
  193. package/runtime/agents/figma-ui-ux-product-designer/capabilities/analyze-product-context/capability.yaml +1 -1
  194. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-interview/capability.yaml +1 -1
  195. package/runtime/agents/figma-ui-ux-product-designer/capabilities/conduct-design-review-session/capability.yaml +1 -1
  196. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-dev-handoff/capability.yaml +1 -1
  197. package/runtime/agents/figma-ui-ux-product-designer/capabilities/generate-user-journey-diagram/capability.yaml +1 -1
  198. package/runtime/agents/figma-ui-ux-product-designer/capabilities/ingest-design-source/capability.yaml +1 -1
  199. package/runtime/agents/figma-ui-ux-product-designer/capabilities/triage-design-feedback/capability.yaml +1 -1
  200. package/runtime/agents/generic-agent-builder/AGENTS.md +20 -0
  201. package/runtime/agents/generic-agent-builder/README.md +40 -0
  202. package/runtime/agents/generic-agent-builder/agent.yaml +43 -0
  203. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/capability.yaml +18 -0
  204. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/decision-rules.md +5 -0
  205. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/runner.py +33 -0
  206. package/runtime/agents/generic-agent-builder/capabilities/generate-agent-instructions/workflow.md +6 -0
  207. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/capability.yaml +20 -0
  208. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/decision-rules.md +6 -0
  209. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/runner.py +39 -0
  210. package/runtime/agents/generic-agent-builder/capabilities/generate-project-agent-files/workflow.md +7 -0
  211. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/capability.yaml +18 -0
  212. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/decision-rules.md +5 -0
  213. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/runner.py +33 -0
  214. package/runtime/agents/generic-agent-builder/capabilities/generate-skill/workflow.md +5 -0
  215. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/capability.yaml +18 -0
  216. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/decision-rules.md +6 -0
  217. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/runner.py +33 -0
  218. package/runtime/agents/generic-agent-builder/capabilities/plan-generic-agent/workflow.md +6 -0
  219. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/capability.yaml +20 -0
  220. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/decision-rules.md +6 -0
  221. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/runner.py +40 -0
  222. package/runtime/agents/generic-agent-builder/capabilities/review-generic-agent/workflow.md +7 -0
  223. package/runtime/agents/generic-agent-builder/infra/integrations/generic-agent/generic_agent_repository.py +445 -0
  224. package/runtime/agents/generic-agent-builder/knowledge/context.md +11 -0
  225. package/runtime/agents/generic-agent-builder/knowledge/policies.yaml +12 -0
  226. package/runtime/agents/generic-agent-builder/knowledge/system.md +17 -0
  227. package/runtime/agents/generic-agent-builder/templates/generic-agent-instructions.md +17 -0
  228. package/runtime/agents/generic-agent-builder/templates/generic-review-report.md +13 -0
  229. package/runtime/agents/generic-agent-builder/templates/generic-skill.md +14 -0
  230. package/runtime/agents/generic-agent-builder/tests/test_runners.py +220 -0
  231. package/runtime/agents/github-pr-reviewer/agent.yaml +17 -5
  232. package/runtime/agents/github-pr-reviewer/capabilities/create-review-automation/capability.yaml +1 -1
  233. package/runtime/agents/github-pr-reviewer/capabilities/inspect-pr/capability.yaml +1 -1
  234. package/runtime/agents/github-pr-reviewer/capabilities/list-review-requests/capability.yaml +1 -1
  235. package/runtime/agents/github-pr-reviewer/capabilities/review-pr-diff/capability.yaml +1 -1
  236. package/runtime/agents/knowledge-generator/agent.yaml +13 -3
  237. package/runtime/agents/knowledge-generator/capabilities/generate-knowledge/capability.yaml +1 -1
  238. package/runtime/agents/local-llm-operator/agent.yaml +6 -4
  239. package/runtime/agents/local-llm-operator/capabilities/delegate-operational-task/capability.yaml +1 -2
  240. package/runtime/agents/local-llm-operator/capabilities/inspect-local-models/capability.yaml +1 -2
  241. package/runtime/agents/local-llm-operator/capabilities/select-local-worker/capability.yaml +1 -2
  242. package/runtime/agents/n1-support-agent/agent.yaml +40 -1
  243. package/runtime/agents/n2-support-agent/agent.yaml +41 -2
  244. package/runtime/agents/n2-support-agent/knowledge/policies.yaml +2 -2
  245. package/runtime/agents/notification-operator/AGENTS.md +11 -0
  246. package/runtime/agents/notification-operator/README.md +15 -0
  247. package/runtime/agents/notification-operator/agent.yaml +43 -0
  248. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/capability.yaml +19 -0
  249. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/decision-rules.md +6 -0
  250. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/runner.py +33 -0
  251. package/runtime/agents/notification-operator/capabilities/configure-notification-channel/workflow.md +6 -0
  252. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/capability.yaml +25 -0
  253. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/decision-rules.md +7 -0
  254. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/runner.py +49 -0
  255. package/runtime/agents/notification-operator/capabilities/format-task-completion-notification/workflow.md +6 -0
  256. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/capability.yaml +27 -0
  257. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/decision-rules.md +6 -0
  258. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/runner.py +68 -0
  259. package/runtime/agents/notification-operator/capabilities/send-task-completion-notification/workflow.md +7 -0
  260. package/runtime/agents/notification-operator/infra/README.md +6 -0
  261. package/runtime/agents/notification-operator/knowledge/context.md +10 -0
  262. package/runtime/agents/notification-operator/knowledge/policies.yaml +9 -0
  263. package/runtime/agents/notification-operator/knowledge/system.md +7 -0
  264. package/runtime/agents/notification-operator/templates/README.md +6 -0
  265. package/runtime/agents/notification-operator/tests/test_runners.py +108 -0
  266. package/runtime/agents/playwright-automation-builder/AGENTS.md +23 -0
  267. package/runtime/agents/playwright-automation-builder/README.md +43 -0
  268. package/runtime/agents/playwright-automation-builder/agent.yaml +48 -0
  269. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/capability.yaml +20 -0
  270. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/decision-rules.md +6 -0
  271. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/runner.py +38 -0
  272. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-project-files/workflow.md +6 -0
  273. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/capability.yaml +18 -0
  274. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/decision-rules.md +6 -0
  275. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/runner.py +32 -0
  276. package/runtime/agents/playwright-automation-builder/capabilities/generate-playwright-script/workflow.md +6 -0
  277. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/capability.yaml +18 -0
  278. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/decision-rules.md +6 -0
  279. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/runner.py +32 -0
  280. package/runtime/agents/playwright-automation-builder/capabilities/plan-playwright-automation/workflow.md +6 -0
  281. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/capability.yaml +19 -0
  282. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/decision-rules.md +6 -0
  283. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/runner.py +33 -0
  284. package/runtime/agents/playwright-automation-builder/capabilities/review-playwright-artifacts/workflow.md +6 -0
  285. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/capability.yaml +22 -0
  286. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/decision-rules.md +6 -0
  287. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/runner.py +40 -0
  288. package/runtime/agents/playwright-automation-builder/capabilities/run-playwright-check/workflow.md +6 -0
  289. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/capability.yaml +22 -0
  290. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/decision-rules.md +6 -0
  291. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/runner.py +42 -0
  292. package/runtime/agents/playwright-automation-builder/capabilities/wrap-playwright-as-capability/workflow.md +6 -0
  293. package/runtime/agents/playwright-automation-builder/infra/integrations/playwright-automation/playwright_automation_repository.py +865 -0
  294. package/runtime/agents/playwright-automation-builder/knowledge/context.md +19 -0
  295. package/runtime/agents/playwright-automation-builder/knowledge/policies.yaml +25 -0
  296. package/runtime/agents/playwright-automation-builder/knowledge/system.md +19 -0
  297. package/runtime/agents/playwright-automation-builder/templates/capability-wrapper.md +4 -0
  298. package/runtime/agents/playwright-automation-builder/templates/playwright-automation.py +12 -0
  299. package/runtime/agents/playwright-automation-builder/templates/playwright-readme.md +13 -0
  300. package/runtime/agents/playwright-automation-builder/templates/playwright-review-report.md +9 -0
  301. package/runtime/agents/playwright-automation-builder/templates/playwright-test.py +2 -0
  302. package/runtime/agents/playwright-automation-builder/tests/test_runners.py +261 -0
  303. package/runtime/agents/postgres-data-analyzer/agent.yaml +13 -2
  304. package/runtime/agents/presentation-deck-builder/agent.yaml +14 -3
  305. package/runtime/agents/presentation-deck-builder/capabilities/create-template/capability.yaml +1 -1
  306. package/runtime/agents/presentation-deck-builder/capabilities/create-template-version/capability.yaml +1 -1
  307. package/runtime/agents/presentation-deck-builder/capabilities/generate-template-input-file/capability.yaml +1 -1
  308. package/runtime/agents/presentation-deck-builder/capabilities/refine-template/capability.yaml +1 -1
  309. package/runtime/agents/presentation-deck-builder/capabilities/register-template/capability.yaml +1 -1
  310. package/runtime/agents/presentation-deck-builder/knowledge/prompts/create-template.md +1 -1
  311. package/runtime/agents/presentation-deck-builder/knowledge/prompts/generate-template-input-file.md +1 -1
  312. package/runtime/agents/provider-configurator/agent.yaml +6 -4
  313. package/runtime/agents/provider-configurator/capabilities/collect-provider-credentials/capability.yaml +1 -2
  314. package/runtime/agents/provider-configurator/capabilities/configure-provider-source/capability.yaml +1 -2
  315. package/runtime/agents/provider-configurator/capabilities/validate-provider-readiness/capability.yaml +1 -2
  316. package/runtime/agents/pyautogui-automation-builder/AGENTS.md +32 -0
  317. package/runtime/agents/pyautogui-automation-builder/README.md +44 -0
  318. package/runtime/agents/pyautogui-automation-builder/agent.yaml +45 -0
  319. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/capability.yaml +20 -0
  320. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/decision-rules.md +6 -0
  321. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/runner.py +39 -0
  322. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-project-files/workflow.md +7 -0
  323. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/capability.yaml +18 -0
  324. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/decision-rules.md +7 -0
  325. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/runner.py +33 -0
  326. package/runtime/agents/pyautogui-automation-builder/capabilities/generate-pyautogui-script/workflow.md +7 -0
  327. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/capability.yaml +18 -0
  328. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/decision-rules.md +8 -0
  329. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/runner.py +33 -0
  330. package/runtime/agents/pyautogui-automation-builder/capabilities/plan-desktop-automation/workflow.md +9 -0
  331. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/capability.yaml +20 -0
  332. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/decision-rules.md +8 -0
  333. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/runner.py +43 -0
  334. package/runtime/agents/pyautogui-automation-builder/capabilities/review-pyautogui-script/workflow.md +7 -0
  335. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/capability.yaml +22 -0
  336. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/decision-rules.md +6 -0
  337. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/runner.py +43 -0
  338. package/runtime/agents/pyautogui-automation-builder/capabilities/wrap-pyautogui-as-capability/workflow.md +7 -0
  339. package/runtime/agents/pyautogui-automation-builder/infra/integrations/pyautogui-automation/pyautogui_automation_repository.py +856 -0
  340. package/runtime/agents/pyautogui-automation-builder/knowledge/context.md +17 -0
  341. package/runtime/agents/pyautogui-automation-builder/knowledge/policies.yaml +24 -0
  342. package/runtime/agents/pyautogui-automation-builder/knowledge/system.md +13 -0
  343. package/runtime/agents/pyautogui-automation-builder/templates/capability-wrapper.md +3 -0
  344. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-automation.py +12 -0
  345. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-readme.md +3 -0
  346. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-review-report.md +3 -0
  347. package/runtime/agents/pyautogui-automation-builder/templates/pyautogui-test.py +2 -0
  348. package/runtime/agents/pyautogui-automation-builder/tests/test_runners.py +376 -0
  349. package/runtime/agents/python-automation-builder/AGENTS.md +25 -0
  350. package/runtime/agents/python-automation-builder/README.md +43 -0
  351. package/runtime/agents/python-automation-builder/agent.yaml +45 -0
  352. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/capability.yaml +20 -0
  353. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/decision-rules.md +6 -0
  354. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/runner.py +39 -0
  355. package/runtime/agents/python-automation-builder/capabilities/generate-automation-project-files/workflow.md +7 -0
  356. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/capability.yaml +18 -0
  357. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/decision-rules.md +5 -0
  358. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/runner.py +33 -0
  359. package/runtime/agents/python-automation-builder/capabilities/generate-python-automation/workflow.md +5 -0
  360. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/capability.yaml +18 -0
  361. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/decision-rules.md +6 -0
  362. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/runner.py +33 -0
  363. package/runtime/agents/python-automation-builder/capabilities/plan-python-automation/workflow.md +6 -0
  364. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/capability.yaml +20 -0
  365. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/decision-rules.md +6 -0
  366. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/runner.py +43 -0
  367. package/runtime/agents/python-automation-builder/capabilities/review-python-automation/workflow.md +5 -0
  368. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/capability.yaml +22 -0
  369. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/decision-rules.md +6 -0
  370. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/runner.py +43 -0
  371. package/runtime/agents/python-automation-builder/capabilities/wrap-automation-as-capability/workflow.md +6 -0
  372. package/runtime/agents/python-automation-builder/infra/integrations/python-automation/python_automation_repository.py +717 -0
  373. package/runtime/agents/python-automation-builder/knowledge/context.md +15 -0
  374. package/runtime/agents/python-automation-builder/knowledge/policies.yaml +12 -0
  375. package/runtime/agents/python-automation-builder/knowledge/system.md +19 -0
  376. package/runtime/agents/python-automation-builder/templates/automation-readme.md +13 -0
  377. package/runtime/agents/python-automation-builder/templates/automation-review-report.md +13 -0
  378. package/runtime/agents/python-automation-builder/templates/automation-test.py +9 -0
  379. package/runtime/agents/python-automation-builder/templates/automation.py +19 -0
  380. package/runtime/agents/python-automation-builder/templates/capability-wrapper.md +4 -0
  381. package/runtime/agents/python-automation-builder/tests/test_runners.py +292 -0
  382. package/runtime/agents/selenium-automation-builder/AGENTS.md +27 -0
  383. package/runtime/agents/selenium-automation-builder/README.md +40 -0
  384. package/runtime/agents/selenium-automation-builder/agent.yaml +45 -0
  385. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/capability.yaml +20 -0
  386. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/decision-rules.md +6 -0
  387. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/runner.py +39 -0
  388. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-project-files/workflow.md +7 -0
  389. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/capability.yaml +18 -0
  390. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/decision-rules.md +6 -0
  391. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/runner.py +33 -0
  392. package/runtime/agents/selenium-automation-builder/capabilities/generate-selenium-script/workflow.md +6 -0
  393. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/capability.yaml +18 -0
  394. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/decision-rules.md +6 -0
  395. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/runner.py +33 -0
  396. package/runtime/agents/selenium-automation-builder/capabilities/plan-selenium-automation/workflow.md +6 -0
  397. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/capability.yaml +20 -0
  398. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/decision-rules.md +6 -0
  399. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/runner.py +40 -0
  400. package/runtime/agents/selenium-automation-builder/capabilities/review-selenium-script/workflow.md +6 -0
  401. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/capability.yaml +22 -0
  402. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/decision-rules.md +6 -0
  403. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/runner.py +43 -0
  404. package/runtime/agents/selenium-automation-builder/capabilities/wrap-selenium-as-capability/workflow.md +6 -0
  405. package/runtime/agents/selenium-automation-builder/infra/integrations/selenium-automation/selenium_automation_repository.py +793 -0
  406. package/runtime/agents/selenium-automation-builder/knowledge/context.md +15 -0
  407. package/runtime/agents/selenium-automation-builder/knowledge/policies.yaml +17 -0
  408. package/runtime/agents/selenium-automation-builder/knowledge/system.md +18 -0
  409. package/runtime/agents/selenium-automation-builder/templates/capability-wrapper.md +4 -0
  410. package/runtime/agents/selenium-automation-builder/templates/selenium-automation.py +20 -0
  411. package/runtime/agents/selenium-automation-builder/templates/selenium-readme.md +13 -0
  412. package/runtime/agents/selenium-automation-builder/templates/selenium-review-report.md +13 -0
  413. package/runtime/agents/selenium-automation-builder/templates/selenium-test.py +9 -0
  414. package/runtime/agents/selenium-automation-builder/tests/test_runners.py +282 -0
  415. package/runtime/agents/software-specification-analyst/agent.yaml +17 -4
  416. package/runtime/agents/software-specification-analyst/capabilities/analyze-multiple-projects/capability.yaml +1 -1
  417. package/runtime/agents/software-specification-analyst/capabilities/analyze-project-context/capability.yaml +1 -1
  418. package/runtime/agents/software-specification-analyst/capabilities/conduct-requirements-interview/capability.yaml +1 -1
  419. package/runtime/agents/software-specification-analyst/capabilities/create-complete-spec/capability.yaml +1 -1
  420. package/runtime/agents/software-specification-analyst/capabilities/create-final-spec-from-analysis/capability.yaml +1 -1
  421. package/runtime/agents/software-specification-analyst/capabilities/create-functional-spec/capability.yaml +11 -0
  422. package/runtime/agents/software-specification-analyst/capabilities/create-technical-spec/capability.yaml +12 -0
  423. package/runtime/agents/software-specification-analyst/capabilities/refine-analysis-with-feedback/capability.yaml +1 -1
  424. package/runtime/agents/software-specification-analyst/capabilities/write-user-stories/capability.yaml +12 -0
  425. package/runtime/agents/sqlserver-change-operator/agent.yaml +12 -1
  426. package/runtime/agents/sqlserver-data-analyzer/agent.yaml +13 -2
  427. package/runtime/agents/supabase-project-analyst/AGENTS.md +29 -0
  428. package/runtime/agents/supabase-project-analyst/README.md +23 -0
  429. package/runtime/agents/supabase-project-analyst/agent.yaml +53 -0
  430. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/capability.yaml +18 -0
  431. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/decision-rules.md +5 -0
  432. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/runner.py +32 -0
  433. package/runtime/agents/supabase-project-analyst/capabilities/audit-auth-security/workflow.md +6 -0
  434. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/capability.yaml +18 -0
  435. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/decision-rules.md +6 -0
  436. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/runner.py +32 -0
  437. package/runtime/agents/supabase-project-analyst/capabilities/audit-rls-policies/workflow.md +7 -0
  438. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/capability.yaml +18 -0
  439. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/decision-rules.md +5 -0
  440. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/runner.py +32 -0
  441. package/runtime/agents/supabase-project-analyst/capabilities/audit-storage-policies/workflow.md +6 -0
  442. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/capability.yaml +18 -0
  443. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/decision-rules.md +6 -0
  444. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/runner.py +32 -0
  445. package/runtime/agents/supabase-project-analyst/capabilities/generate-supabase-report/workflow.md +6 -0
  446. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/capability.yaml +19 -0
  447. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/decision-rules.md +6 -0
  448. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/runner.py +36 -0
  449. package/runtime/agents/supabase-project-analyst/capabilities/inspect-supabase-project/workflow.md +7 -0
  450. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/capability.yaml +18 -0
  451. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/decision-rules.md +6 -0
  452. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/runner.py +32 -0
  453. package/runtime/agents/supabase-project-analyst/capabilities/plan-supabase-fix/workflow.md +6 -0
  454. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/capability.yaml +18 -0
  455. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/decision-rules.md +6 -0
  456. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/runner.py +32 -0
  457. package/runtime/agents/supabase-project-analyst/capabilities/review-migrations/workflow.md +5 -0
  458. package/runtime/agents/supabase-project-analyst/infra/integrations/supabase-project/supabase_project_repository.py +589 -0
  459. package/runtime/agents/supabase-project-analyst/knowledge/context.md +11 -0
  460. package/runtime/agents/supabase-project-analyst/knowledge/policies.yaml +24 -0
  461. package/runtime/agents/supabase-project-analyst/knowledge/system.md +10 -0
  462. package/runtime/agents/supabase-project-analyst/templates/supabase-audit.md +3 -0
  463. package/runtime/agents/supabase-project-analyst/templates/supabase-fix-plan.md +3 -0
  464. package/runtime/agents/supabase-project-analyst/templates/supabase-inspection.md +3 -0
  465. package/runtime/agents/supabase-project-analyst/templates/supabase-report.md +3 -0
  466. package/runtime/agents/supabase-project-analyst/tests/test_runners.py +239 -0
  467. package/runtime/agents/task-orchestrator/agent.yaml +25 -3
  468. package/runtime/agents/task-orchestrator/capabilities/plan-task/capability.yaml +1 -2
  469. package/runtime/agents/task-orchestrator/capabilities/select-specialists/capability.yaml +1 -2
  470. package/runtime/agents/technical-integration-analyst/agent.yaml +15 -2
  471. package/runtime/agents/topdesk-orchestrator/agent.yaml +10 -2
  472. package/runtime/cli/aikit/__init__.py +1 -1
  473. package/runtime/cli/aikit/acceptance.py +166 -0
  474. package/runtime/cli/aikit/agent_executor.py +26 -3
  475. package/runtime/cli/aikit/agent_registry.py +244 -5
  476. package/runtime/cli/aikit/architecture.py +84 -0
  477. package/runtime/cli/aikit/audit.py +172 -3
  478. package/runtime/cli/aikit/autonomy.py +237 -0
  479. package/runtime/cli/aikit/capability_runtime.py +522 -0
  480. package/runtime/cli/aikit/catalog.py +246 -0
  481. package/runtime/cli/aikit/cli_dispatch.py +1078 -0
  482. package/runtime/cli/aikit/cli_parser.py +409 -0
  483. package/runtime/cli/aikit/collaboration.py +359 -0
  484. package/runtime/cli/aikit/configuration_orchestrator.py +52 -26
  485. package/runtime/cli/aikit/contribution.py +105 -0
  486. package/runtime/cli/aikit/core/__init__.py +1 -0
  487. package/runtime/cli/aikit/core/capability_contract.py +112 -0
  488. package/runtime/cli/aikit/core/requests.py +69 -0
  489. package/runtime/cli/aikit/core/runtime.py +64 -0
  490. package/runtime/cli/aikit/diagnostics.py +8 -2
  491. package/runtime/cli/aikit/doctor_runtime.py +79 -0
  492. package/runtime/cli/aikit/errors.py +7 -0
  493. package/runtime/cli/aikit/eval.py +158 -0
  494. package/runtime/cli/aikit/execution_reviewer.py +21 -0
  495. package/runtime/cli/aikit/extensions.py +140 -0
  496. package/runtime/cli/aikit/fallback.py +1 -0
  497. package/runtime/cli/aikit/github_pr.py +23 -0
  498. package/runtime/cli/aikit/guardrails.py +25 -10
  499. package/runtime/cli/aikit/human_output.py +1026 -0
  500. package/runtime/cli/aikit/impact_map.py +294 -0
  501. package/runtime/cli/aikit/interactive_wizard.py +79 -0
  502. package/runtime/cli/aikit/local_llm_operator.py +35 -1
  503. package/runtime/cli/aikit/main.py +9 -2834
  504. package/runtime/cli/aikit/mcp_manifest.py +229 -0
  505. package/runtime/cli/aikit/mcp_server.py +132 -0
  506. package/runtime/cli/aikit/mcp_tools.py +262 -0
  507. package/runtime/cli/aikit/mini_brain.py +227 -0
  508. package/runtime/cli/aikit/model_router.py +182 -18
  509. package/runtime/cli/aikit/module_controller.py +335 -0
  510. package/runtime/cli/aikit/natural_prompt_runtime.py +538 -0
  511. package/runtime/cli/aikit/notifications.py +716 -2
  512. package/runtime/cli/aikit/ollama.py +1 -0
  513. package/runtime/cli/aikit/orchestrator.py +809 -119
  514. package/runtime/cli/aikit/output.py +63 -2
  515. package/runtime/cli/aikit/permissions.py +14 -4
  516. package/runtime/cli/aikit/prompt_injection.py +57 -0
  517. package/runtime/cli/aikit/review_gate.py +38 -6
  518. package/runtime/cli/aikit/roadmap.py +195 -0
  519. package/runtime/cli/aikit/roadmap_cli.py +70 -0
  520. package/runtime/cli/aikit/router.py +41 -12
  521. package/runtime/cli/aikit/router_explain.py +152 -0
  522. package/runtime/cli/aikit/runtime_paths.py +11 -0
  523. package/runtime/cli/aikit/secrets.py +113 -0
  524. package/runtime/cli/aikit/sessions.py +88 -2
  525. package/runtime/cli/aikit/setup_wizard_payload.py +32 -0
  526. package/runtime/cli/aikit/sources.py +298 -50
  527. package/runtime/cli/aikit/tasks.py +449 -21
  528. package/runtime/cli/aikit/wizard_state.py +15 -1
  529. package/runtime/cli/aikit/workflows.py +115 -0
  530. package/runtime/cli/aikit/write_policy.py +108 -0
  531. package/runtime/plugins/claude-code-ai-devkit/README.md +17 -0
  532. package/runtime/plugins/claude-code-ai-devkit/agents/README.md +29 -2
  533. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-db-analyst.md +44 -0
  534. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-execution-reviewer.md +38 -0
  535. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-pr-reviewer.md +42 -0
  536. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-repo-explorer.md +40 -0
  537. package/runtime/plugins/claude-code-ai-devkit/agents/agent-devkit-support-triage.md +43 -0
  538. package/runtime/plugins/claude-code-ai-devkit/plugin.json +1 -1
  539. package/runtime/plugins/claude-code-ai-devkit/skills/ai-devkit-router/SKILL.md +16 -0
  540. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/SKILL.md +1 -0
  541. package/runtime/plugins/claude-skill-ai-devkit/ai-devkit/references/subagents.md +21 -0
  542. package/runtime/plugins/claude-skill-ai-devkit/plugin.json +1 -1
  543. package/runtime/providers/azure-devops.yaml +9 -0
  544. package/runtime/providers/github.yaml +4 -0
  545. package/runtime/providers/local-notification.yaml +5 -2
  546. package/runtime/providers/local-scheduler.yaml +1 -1
  547. package/runtime/providers/supabase.yaml +46 -0
  548. package/runtime/scripts/release-catalog-snapshot.json +543 -0
  549. package/runtime/scripts/release-gate.py +141 -1
  550. package/runtime/scripts/validate-repo.py +312 -0
  551. package/runtime/vendor/skills/napkin/napkin.md +15 -9
@@ -11,11 +11,14 @@ import sys
11
11
  from pathlib import Path
12
12
  from typing import Any
13
13
 
14
+ import yaml
15
+
14
16
 
15
17
  ROOT = Path(__file__).resolve().parents[1]
16
18
  AGENT = ROOT / "agent"
17
19
  VALIDATE_REPO = ROOT / "scripts" / "validate-repo.py"
18
20
  MVP_READINESS = ROOT / "scripts" / "mvp-readiness.py"
21
+ CATALOG_SNAPSHOT = ROOT / "scripts" / "release-catalog-snapshot.json"
19
22
  CLAUDE_SKILL = ROOT / "plugins" / "claude-skill-ai-devkit" / "ai-devkit"
20
23
  CODEX_HOME = Path(os.environ.get("CODEX_HOME", Path.home() / ".codex"))
21
24
  SKILL_VALIDATOR = CODEX_HOME / "skills" / ".system" / "skill-creator" / "scripts" / "quick_validate.py"
@@ -39,7 +42,9 @@ def run_gate(*, quick: bool = False) -> dict[str, Any]:
39
42
  checks = [
40
43
  check_command("agent version", [sys.executable, str(AGENT), "--version"], validate_agent_version),
41
44
  check_json("repo strict validation", [sys.executable, str(VALIDATE_REPO), "--strict", "--json"], validate_repo),
45
+ catalog_snapshot_check(),
42
46
  check_json("mvp readiness", [sys.executable, str(MVP_READINESS), "--json"], validate_mvp_readiness),
47
+ check_json("v0.2.0 runtime evals", [sys.executable, str(AGENT), "eval", "run", "all", "--json"], validate_v020_evals),
43
48
  skill_validation_check(),
44
49
  ]
45
50
  if quick:
@@ -71,13 +76,21 @@ def unittest_command() -> list[str]:
71
76
  paths = [
72
77
  path
73
78
  for path in ROOT.rglob("test*.py")
74
- if "vendor" not in path.relative_to(ROOT).parts
79
+ if include_unittest_path(path)
75
80
  ]
76
81
  paths.sort(key=unittest_path_sort_key)
77
82
  test_files = [str(path.relative_to(ROOT)) for path in paths]
78
83
  return [sys.executable, "-m", "unittest", *test_files]
79
84
 
80
85
 
86
+ def include_unittest_path(path: Path) -> bool:
87
+ relative = path.relative_to(ROOT)
88
+ parts = relative.parts
89
+ if "vendor" in parts:
90
+ return False
91
+ return parts[:3] != ("tooling", "agent-devkit", "runtime")
92
+
93
+
81
94
  def unittest_path_sort_key(path: Path) -> tuple[int, str]:
82
95
  relative = path.relative_to(ROOT)
83
96
  first = relative.parts[0] if relative.parts else ""
@@ -141,6 +154,104 @@ def validate_repo(payload: dict[str, Any]) -> str | None:
141
154
  return None
142
155
 
143
156
 
157
+ def catalog_snapshot_check() -> dict[str, Any]:
158
+ name = "catalog snapshot"
159
+ if not CATALOG_SNAPSHOT.exists():
160
+ return failed_static_check(name, f"catalog snapshot not found: {CATALOG_SNAPSHOT}")
161
+ try:
162
+ expected = json.loads(CATALOG_SNAPSHOT.read_text(encoding="utf-8"))
163
+ except json.JSONDecodeError as exc:
164
+ return failed_static_check(name, f"invalid catalog snapshot json: {exc}")
165
+ current = build_catalog_snapshot()
166
+ message = validate_catalog_snapshot(expected, current)
167
+ if message:
168
+ check = failed_static_check(name, message)
169
+ check["summary"] = {"expected": summarize_snapshot(expected), "current": summarize_snapshot(current)}
170
+ return check
171
+ check = ok_static_check(name)
172
+ check["summary"] = summarize_snapshot(current)
173
+ return check
174
+
175
+
176
+ def build_catalog_snapshot() -> dict[str, Any]:
177
+ agents: list[str] = []
178
+ capabilities_by_agent: dict[str, list[str]] = {}
179
+ for manifest_path in sorted(ROOT.glob("agents/*/agent.yaml")):
180
+ manifest = load_yaml(manifest_path)
181
+ agent_id = str(manifest.get("id") or manifest_path.parent.name)
182
+ agents.append(agent_id)
183
+ capabilities = []
184
+ for capability_path in sorted((manifest_path.parent / "capabilities").glob("*/capability.yaml")):
185
+ capability = load_yaml(capability_path)
186
+ capabilities.append(str(capability.get("id") or capability_path.parent.name).split(".")[-1])
187
+ capabilities_by_agent[agent_id] = sorted(capabilities)
188
+
189
+ providers = [
190
+ str(load_yaml(path).get("id") or path.stem)
191
+ for path in sorted(ROOT.glob("providers/*.yaml"))
192
+ ]
193
+ plugins = [
194
+ str(load_json(plugin_manifest_path(path)).get("id") or path.name)
195
+ for path in sorted((ROOT / "plugins").iterdir())
196
+ if path.is_dir() and plugin_manifest_path(path).exists()
197
+ ]
198
+ return {
199
+ "schema_version": "ai-devkit.release-catalog-snapshot/v1",
200
+ "version": expected_version(),
201
+ "summary": {
202
+ "agents": len(agents),
203
+ "capabilities": sum(len(items) for items in capabilities_by_agent.values()),
204
+ "providers": len(providers),
205
+ "plugins": len(plugins),
206
+ },
207
+ "agents": sorted(agents),
208
+ "providers": sorted(providers),
209
+ "plugins": sorted(plugins),
210
+ "capabilities_by_agent": capabilities_by_agent,
211
+ }
212
+
213
+
214
+ def validate_catalog_snapshot(expected: dict[str, Any], current: dict[str, Any]) -> str | None:
215
+ if expected.get("schema_version") != current["schema_version"]:
216
+ return "catalog snapshot schema_version is not supported"
217
+ for key in ("version", "summary", "agents", "providers", "plugins", "capabilities_by_agent"):
218
+ if expected.get(key) != current.get(key):
219
+ return f"catalog snapshot mismatch in {key}; update scripts/release-catalog-snapshot.json intentionally for this release"
220
+ return None
221
+
222
+
223
+ def summarize_snapshot(snapshot: dict[str, Any]) -> dict[str, Any]:
224
+ return {
225
+ "version": snapshot.get("version"),
226
+ "summary": snapshot.get("summary") or {},
227
+ }
228
+
229
+
230
+ def expected_version() -> str:
231
+ result = run([sys.executable, str(AGENT), "--version"])
232
+ prefix = "agent "
233
+ if result.returncode == 0 and result.stdout.startswith(prefix):
234
+ return result.stdout.strip()[len(prefix) :]
235
+ return "unknown"
236
+
237
+
238
+ def plugin_manifest_path(plugin_dir: Path) -> Path:
239
+ codex_manifest = plugin_dir / ".codex-plugin" / "plugin.json"
240
+ if codex_manifest.exists():
241
+ return codex_manifest
242
+ return plugin_dir / "plugin.json"
243
+
244
+
245
+ def load_yaml(path: Path) -> dict[str, Any]:
246
+ payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
247
+ return payload if isinstance(payload, dict) else {}
248
+
249
+
250
+ def load_json(path: Path) -> dict[str, Any]:
251
+ payload = json.loads(path.read_text(encoding="utf-8"))
252
+ return payload if isinstance(payload, dict) else {}
253
+
254
+
144
255
  def validate_mvp_readiness(payload: dict[str, Any]) -> str | None:
145
256
  if payload.get("kind") != "mvp-readiness" or payload.get("status") != "ok":
146
257
  return "mvp readiness is not ok"
@@ -149,6 +260,17 @@ def validate_mvp_readiness(payload: dict[str, Any]) -> str | None:
149
260
  return None
150
261
 
151
262
 
263
+ def validate_v020_evals(payload: dict[str, Any]) -> str | None:
264
+ if payload.get("kind") != "eval-run" or payload.get("suite") != "all":
265
+ return "v0.2.0 eval command returned an unexpected payload"
266
+ if payload.get("status") != "passed":
267
+ return "v0.2.0 runtime evals did not pass"
268
+ checks = payload.get("checks") or []
269
+ if not isinstance(checks, list) or len(checks) < 5:
270
+ return "v0.2.0 runtime evals returned too few suites"
271
+ return None
272
+
273
+
152
274
  def validate_skill_validation(result: subprocess.CompletedProcess[str]) -> str | None:
153
275
  if "Skill is valid!" not in result.stdout:
154
276
  return "Claude Desktop skill validation did not report success"
@@ -182,6 +304,15 @@ def ok_check(name: str, result: subprocess.CompletedProcess[str]) -> dict[str, A
182
304
  }
183
305
 
184
306
 
307
+ def ok_static_check(name: str) -> dict[str, Any]:
308
+ return {
309
+ "name": name,
310
+ "status": "ok",
311
+ "returncode": None,
312
+ "message": "",
313
+ }
314
+
315
+
185
316
  def failed_check(name: str, message: str, result: subprocess.CompletedProcess[str]) -> dict[str, Any]:
186
317
  return {
187
318
  "name": name,
@@ -193,6 +324,15 @@ def failed_check(name: str, message: str, result: subprocess.CompletedProcess[st
193
324
  }
194
325
 
195
326
 
327
+ def failed_static_check(name: str, message: str) -> dict[str, Any]:
328
+ return {
329
+ "name": name,
330
+ "status": "failed",
331
+ "returncode": None,
332
+ "message": message,
333
+ }
334
+
335
+
196
336
  def skipped_check(name: str, message: str) -> dict[str, Any]:
197
337
  return {
198
338
  "name": name,
@@ -11,8 +11,14 @@ from dataclasses import dataclass, field
11
11
  from pathlib import Path
12
12
  from typing import Any
13
13
 
14
+ REPO_ROOT = Path(__file__).resolve().parents[1]
15
+ if str(REPO_ROOT) not in sys.path:
16
+ sys.path.insert(0, str(REPO_ROOT))
17
+
14
18
  import yaml
15
19
 
20
+ from cli.aikit.write_policy import canonical_write_policies, legacy_write_policy_aliases
21
+
16
22
 
17
23
  KEBAB_CASE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
18
24
  AGENT_REQUIRED_KEYS = {
@@ -71,6 +77,36 @@ CAPABILITY_PROVIDER_FALLBACKS = {
71
77
  "skip_provider",
72
78
  "blocked",
73
79
  }
80
+ CAPABILITY_EXECUTION_FIELDS = {"modes", "idempotency", "timeout_seconds"}
81
+ CAPABILITY_EXECUTION_MODES = {"run", "dry-run"}
82
+ CAPABILITY_IDEMPOTENCY_VALUES = {
83
+ "safe-repeat",
84
+ "creates-artifact",
85
+ "external-read",
86
+ "external-write",
87
+ }
88
+ CAPABILITY_ARTIFACT_KINDS = {"markdown", "json", "xlsx", "pptx", "drawio", "log", "other"}
89
+ RUNTIME_SOURCE_FIELDS = {"enabled", "args", "env"}
90
+ SOURCE_CONTRACT_FIELDS = {"enabled", "supported", "args", "env", "mappings", "apply"}
91
+ SOURCE_MAPPING_FIELDS = {"field", "name", "arg", "env"}
92
+ RUNTIME_ROLE_KINDS = {"coordinator", "reviewer", "provider-configurator", "local-worker", "none"}
93
+ AGENT_MODE_TYPES = {"reactive", "workflow", "planner", "reviewer"}
94
+ AGENT_MODE_LLM_VALUES = {False, "optional", "required"}
95
+ AGENT_MODE_FIELDS = {
96
+ "type",
97
+ "max_steps",
98
+ "max_specialists",
99
+ "max_llm_calls",
100
+ "timeout_seconds",
101
+ "can_call_capabilities",
102
+ "can_call_llm",
103
+ "can_request_user_input",
104
+ "external_writes",
105
+ "allowed_capabilities",
106
+ "stop_conditions",
107
+ }
108
+ CANONICAL_WRITE_POLICIES = canonical_write_policies()
109
+ LEGACY_WRITE_POLICY_ALIASES = legacy_write_policy_aliases()
74
110
  SECRET_MARKERS = ("SECRET", "TOKEN", "PASSWORD", "PAT", "API_KEY", "PRIVATE_KEY")
75
111
  ROOT_ARTIFACT_NAMES = {"json", "markdown"}
76
112
  ROOT_IGNORED_NAMES = {
@@ -138,6 +174,7 @@ class ValidationState:
138
174
  "errors": self.errors,
139
175
  "warnings": self.warnings,
140
176
  "agents": self.agent_stats,
177
+ "providers": sorted(self.provider_ids),
141
178
  "plugins": self.plugin_stats,
142
179
  }
143
180
 
@@ -439,6 +476,10 @@ def validate_agent(state: ValidationState, agent_dir: Path, manifest_path: Path)
439
476
 
440
477
  validate_status(state, manifest_path, manifest.get("status"))
441
478
  validate_relative_refs(state, agent_dir, manifest.get("default_context", []), "default_context")
479
+ validate_agent_write_policy(state, manifest_path, manifest.get("write_policy"))
480
+ validate_routing(state, manifest_path, manifest.get("routing"))
481
+ validate_runtime_role(state, manifest_path, manifest.get("runtime_role"), agent_kind=manifest.get("kind"))
482
+ validate_agent_mode(state, manifest_path, manifest.get("agent_mode"), write_policy=manifest.get("write_policy"))
442
483
 
443
484
  surface = manifest.get("agent_surface", {}) or {}
444
485
  if isinstance(surface, dict):
@@ -498,6 +539,12 @@ def validate_capability(state: ValidationState, agent_dir: Path, manifest_path:
498
539
  )
499
540
 
500
541
  validate_status(state, manifest_path, manifest.get("status"))
542
+ validate_write_policy_value(state, manifest_path, manifest.get("write_policy"))
543
+ validate_routing(state, manifest_path, manifest.get("routing"))
544
+ validate_runtime_contract(state, manifest_path, manifest.get("runtime"))
545
+ validate_source_contract(state, manifest_path, manifest.get("source"), field_prefix="source")
546
+ validate_capability_execution(state, manifest_path, manifest.get("execution"))
547
+ validate_capability_outputs(state, manifest_path, manifest.get("outputs"))
501
548
 
502
549
  entrypoint = manifest.get("entrypoint", {}) or {}
503
550
  if isinstance(entrypoint, dict):
@@ -524,6 +571,220 @@ def validate_capability(state: ValidationState, agent_dir: Path, manifest_path:
524
571
  validate_capability_provider_requirements(state, manifest_path, manifest.get("requires", {}))
525
572
 
526
573
 
574
+ def validate_capability_execution(state: ValidationState, manifest_path: Path, execution: Any) -> None:
575
+ if execution is None:
576
+ return
577
+ relative_manifest = rel(state, manifest_path)
578
+ if not isinstance(execution, dict):
579
+ state.error(f"{relative_manifest} execution must be a mapping")
580
+ return
581
+ for key in execution:
582
+ if key not in CAPABILITY_EXECUTION_FIELDS:
583
+ state.error(f"{relative_manifest} execution has unsupported field: {key}")
584
+ modes = execution.get("modes")
585
+ if modes is not None:
586
+ if not isinstance(modes, list):
587
+ state.error(f"{relative_manifest} execution.modes must be a list")
588
+ else:
589
+ for mode in modes:
590
+ if mode not in CAPABILITY_EXECUTION_MODES:
591
+ state.error(f"{relative_manifest} execution.modes has unsupported mode: {mode}")
592
+ idempotency = execution.get("idempotency")
593
+ if idempotency is not None and idempotency not in CAPABILITY_IDEMPOTENCY_VALUES:
594
+ state.error(f"{relative_manifest} execution.idempotency has unsupported value: {idempotency}")
595
+ timeout = execution.get("timeout_seconds")
596
+ if timeout is not None and (not isinstance(timeout, int) or timeout <= 0):
597
+ state.error(f"{relative_manifest} execution.timeout_seconds must be a positive integer")
598
+
599
+
600
+ def validate_capability_outputs(state: ValidationState, manifest_path: Path, outputs: Any) -> None:
601
+ if outputs is None:
602
+ return
603
+ relative_manifest = rel(state, manifest_path)
604
+ if not isinstance(outputs, dict):
605
+ state.error(f"{relative_manifest} outputs must be a mapping")
606
+ return
607
+ artifacts = outputs.get("artifacts")
608
+ if artifacts is None:
609
+ return
610
+ if not isinstance(artifacts, list):
611
+ state.error(f"{relative_manifest} outputs.artifacts must be a list")
612
+ return
613
+ for item in artifacts:
614
+ if isinstance(item, str):
615
+ continue
616
+ if not isinstance(item, dict):
617
+ state.error(f"{relative_manifest} outputs.artifacts entries must be strings or mappings")
618
+ continue
619
+ path = item.get("path") or item.get("ref")
620
+ if not isinstance(path, str) or not path.strip():
621
+ state.error(f"{relative_manifest} outputs.artifacts entry missing path")
622
+ kind = item.get("kind")
623
+ if kind is not None and kind not in CAPABILITY_ARTIFACT_KINDS:
624
+ state.error(f"{relative_manifest} outputs.artifacts has unsupported kind: {kind}")
625
+ sensitive = item.get("sensitive")
626
+ if sensitive is not None and not isinstance(sensitive, bool):
627
+ state.error(f"{relative_manifest} outputs.artifacts sensitive must be boolean")
628
+
629
+
630
+ def validate_runtime_contract(state: ValidationState, manifest_path: Path, runtime: Any) -> None:
631
+ if runtime is None:
632
+ return
633
+ relative_manifest = rel(state, manifest_path)
634
+ if not isinstance(runtime, dict):
635
+ state.error(f"{relative_manifest} runtime must be a mapping")
636
+ return
637
+ provider = runtime.get("provider")
638
+ if provider is not None:
639
+ provider_id = str(provider)
640
+ if not provider_id:
641
+ state.error(f"{relative_manifest} runtime.provider must be a non-empty string")
642
+ elif provider_id not in state.provider_ids:
643
+ state.error(f"{relative_manifest} runtime references unknown provider: {provider_id}")
644
+ source = runtime.get("source")
645
+ if source is None:
646
+ return
647
+ validate_source_contract(state, manifest_path, source, field_prefix="runtime.source", allowed_fields=RUNTIME_SOURCE_FIELDS)
648
+
649
+
650
+ def validate_source_contract(
651
+ state: ValidationState,
652
+ manifest_path: Path,
653
+ source: Any,
654
+ *,
655
+ field_prefix: str,
656
+ allowed_fields: set[str] = SOURCE_CONTRACT_FIELDS,
657
+ ) -> None:
658
+ if source is None:
659
+ return
660
+ if not isinstance(source, dict):
661
+ state.error(f"{rel(state, manifest_path)} {field_prefix} must be a mapping")
662
+ return
663
+ relative_manifest = rel(state, manifest_path)
664
+ for key in source:
665
+ if key not in allowed_fields:
666
+ state.error(f"{relative_manifest} {field_prefix} has unsupported field: {key}")
667
+ for boolean_field in ("enabled", "supported"):
668
+ if boolean_field in source and not isinstance(source.get(boolean_field), bool):
669
+ state.error(f"{relative_manifest} {field_prefix}.{boolean_field} must be boolean")
670
+ for field in ("args", "env"):
671
+ mapping = source.get(field)
672
+ if mapping is None:
673
+ continue
674
+ if not isinstance(mapping, dict):
675
+ state.error(f"{relative_manifest} {field_prefix}.{field} must be a mapping")
676
+ continue
677
+ for name, value in mapping.items():
678
+ if not isinstance(name, str) or not name.strip() or not isinstance(value, str) or not value.strip():
679
+ state.error(f"{relative_manifest} {field_prefix}.{field} entries must be non-empty strings")
680
+ continue
681
+ if field == "args" and not value.startswith("--"):
682
+ state.error(f"{relative_manifest} {field_prefix}.args.{name} must map to a CLI flag")
683
+ if field == "env" and not re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", value):
684
+ state.error(f"{relative_manifest} {field_prefix}.env.{name} must map to an environment variable")
685
+ for list_field in ("mappings", "apply"):
686
+ mappings = source.get(list_field)
687
+ if mappings is None:
688
+ continue
689
+ if not isinstance(mappings, list):
690
+ state.error(f"{relative_manifest} {field_prefix}.{list_field} must be a list")
691
+ continue
692
+ for index, item in enumerate(mappings):
693
+ item_prefix = f"{field_prefix}.{list_field}[{index}]"
694
+ if not isinstance(item, dict):
695
+ state.error(f"{relative_manifest} {item_prefix} entries must be mappings")
696
+ continue
697
+ for key in item:
698
+ if key not in SOURCE_MAPPING_FIELDS:
699
+ state.error(f"{relative_manifest} {item_prefix} has unsupported field: {key}")
700
+ field_name = item.get("field") or item.get("name")
701
+ if not isinstance(field_name, str) or not field_name.strip():
702
+ state.error(f"{relative_manifest} {item_prefix} missing field")
703
+ arg = item.get("arg")
704
+ if arg is not None and (not isinstance(arg, str) or not arg.startswith("--")):
705
+ state.error(f"{relative_manifest} {item_prefix}.arg must map to a CLI flag")
706
+ env = item.get("env")
707
+ if env is not None and (not isinstance(env, str) or not re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", env)):
708
+ state.error(f"{relative_manifest} {item_prefix}.env must map to an environment variable")
709
+
710
+
711
+ def validate_runtime_role(state: ValidationState, manifest_path: Path, runtime_role: Any, *, agent_kind: Any) -> None:
712
+ relative_manifest = rel(state, manifest_path)
713
+ if agent_kind == "runtime-agent" and runtime_role is None:
714
+ state.error(f"{relative_manifest} runtime-agent must declare runtime_role")
715
+ return
716
+ if runtime_role is None:
717
+ return
718
+ if not isinstance(runtime_role, dict):
719
+ state.error(f"{relative_manifest} runtime_role must be a mapping")
720
+ return
721
+ role_kind = str(runtime_role.get("kind") or "")
722
+ if not role_kind:
723
+ state.error(f"{relative_manifest} runtime_role.kind must be a non-empty string")
724
+ elif role_kind not in RUNTIME_ROLE_KINDS:
725
+ state.error(f"{relative_manifest} runtime_role.kind has unsupported value: {role_kind}")
726
+
727
+
728
+ def validate_agent_mode(state: ValidationState, manifest_path: Path, agent_mode: Any, *, write_policy: Any) -> None:
729
+ if agent_mode is None:
730
+ return
731
+ relative_manifest = rel(state, manifest_path)
732
+ if not isinstance(agent_mode, dict):
733
+ state.error(f"{relative_manifest} agent_mode must be a mapping")
734
+ return
735
+ for key in agent_mode:
736
+ if key not in AGENT_MODE_FIELDS:
737
+ state.error(f"{relative_manifest} agent_mode has unsupported field: {key}")
738
+ mode_type = str(agent_mode.get("type") or "")
739
+ if not mode_type:
740
+ state.error(f"{relative_manifest} agent_mode.type must be a non-empty string")
741
+ elif mode_type not in AGENT_MODE_TYPES:
742
+ state.error(f"{relative_manifest} agent_mode.type has unsupported value: {mode_type}")
743
+ max_steps = agent_mode.get("max_steps")
744
+ if not isinstance(max_steps, int) or max_steps <= 0 or max_steps > 20:
745
+ state.error(f"{relative_manifest} agent_mode.max_steps must be an integer between 1 and 20")
746
+ max_specialists = agent_mode.get("max_specialists")
747
+ if max_specialists is not None and (not isinstance(max_specialists, int) or max_specialists <= 0 or max_specialists > 20):
748
+ state.error(f"{relative_manifest} agent_mode.max_specialists must be an integer between 1 and 20")
749
+ max_llm_calls = agent_mode.get("max_llm_calls")
750
+ if max_llm_calls is not None and (not isinstance(max_llm_calls, int) or max_llm_calls < 0 or max_llm_calls > 20):
751
+ state.error(f"{relative_manifest} agent_mode.max_llm_calls must be an integer between 0 and 20")
752
+ timeout = agent_mode.get("timeout_seconds")
753
+ if timeout is not None and (not isinstance(timeout, int) or timeout <= 0):
754
+ state.error(f"{relative_manifest} agent_mode.timeout_seconds must be a positive integer")
755
+ for boolean_field in ("can_call_capabilities", "can_request_user_input", "external_writes"):
756
+ if boolean_field in agent_mode and not isinstance(agent_mode.get(boolean_field), bool):
757
+ state.error(f"{relative_manifest} agent_mode.{boolean_field} must be boolean")
758
+ llm_value = agent_mode.get("can_call_llm")
759
+ if llm_value not in AGENT_MODE_LLM_VALUES:
760
+ state.error(f"{relative_manifest} agent_mode.can_call_llm must be false, optional, or required")
761
+ for list_field in ("allowed_capabilities", "stop_conditions"):
762
+ values = agent_mode.get(list_field)
763
+ if values is None:
764
+ continue
765
+ if not isinstance(values, list):
766
+ state.error(f"{relative_manifest} agent_mode.{list_field} must be a list")
767
+ continue
768
+ for item in values:
769
+ if not isinstance(item, str) or not item.strip():
770
+ state.error(f"{relative_manifest} agent_mode.{list_field} entries must be non-empty strings")
771
+ if agent_mode.get("external_writes") is True and not agent_write_policy_requires_confirmation(write_policy):
772
+ state.error(f"{relative_manifest} agent_mode.external_writes=true requires confirm, delegated, or blocked_by_default write_policy")
773
+
774
+
775
+ def agent_write_policy_requires_confirmation(write_policy: Any) -> bool:
776
+ if isinstance(write_policy, dict):
777
+ values = [normalize_write_policy_value(policy) for policy in write_policy.values()]
778
+ else:
779
+ values = [normalize_write_policy_value(write_policy)]
780
+ return any(value in {"confirm", "delegated", "blocked_by_default"} for value in values)
781
+
782
+
783
+ def normalize_write_policy_value(value: Any) -> str:
784
+ raw = str(value or "").strip()
785
+ return LEGACY_WRITE_POLICY_ALIASES.get(raw, raw)
786
+
787
+
527
788
  def validate_capability_provider_requirements(state: ValidationState, manifest_path: Path, requires: Any) -> None:
528
789
  if not requires:
529
790
  return
@@ -576,6 +837,57 @@ def validate_status(state: ValidationState, path: Path, status: Any) -> None:
576
837
  state.error(f"{rel(state, path)} has unsupported status: {status}")
577
838
 
578
839
 
840
+ def validate_agent_write_policy(state: ValidationState, path: Path, write_policy: Any) -> None:
841
+ if write_policy is None:
842
+ return
843
+ if isinstance(write_policy, dict):
844
+ for name, value in sorted(write_policy.items()):
845
+ validate_write_policy_value(state, path, value, field=f"write_policy.{name}")
846
+ return
847
+ validate_write_policy_value(state, path, write_policy)
848
+
849
+
850
+ def validate_write_policy_value(
851
+ state: ValidationState,
852
+ path: Path,
853
+ write_policy: Any,
854
+ *,
855
+ field: str = "write_policy",
856
+ ) -> None:
857
+ if write_policy is None:
858
+ return
859
+ policy = str(write_policy)
860
+ if policy in CANONICAL_WRITE_POLICIES:
861
+ return
862
+ if policy in LEGACY_WRITE_POLICY_ALIASES:
863
+ state.warn(
864
+ f"{rel(state, path)} uses legacy {field}: {policy!r}; use {LEGACY_WRITE_POLICY_ALIASES[policy]!r}"
865
+ )
866
+ return
867
+ state.error(f"{rel(state, path)} has unsupported {field}: {policy!r}")
868
+
869
+
870
+ def validate_routing(state: ValidationState, path: Path, routing: Any) -> None:
871
+ if routing is None:
872
+ return
873
+ relative = rel(state, path)
874
+ if not isinstance(routing, dict):
875
+ state.error(f"{relative} routing must be a mapping")
876
+ return
877
+ for field in ("aliases", "anchors", "domains", "entities", "intents", "keywords", "examples"):
878
+ value = routing.get(field)
879
+ if value is None:
880
+ continue
881
+ if not isinstance(value, list):
882
+ state.error(f"{relative} routing.{field} must be a list")
883
+ continue
884
+ for item in value:
885
+ if not isinstance(item, str) or not item.strip():
886
+ state.error(f"{relative} routing.{field} entries must be non-empty strings")
887
+ if "priority" in routing and not isinstance(routing.get("priority"), int):
888
+ state.error(f"{relative} routing.priority must be an integer")
889
+
890
+
579
891
  def validate_relative_refs(state: ValidationState, base: Path, refs: Any, field: str) -> None:
580
892
  if refs is None:
581
893
  return
@@ -25,23 +25,29 @@
25
25
  Do instead: intercept `--source` only for capabilities that explicitly support Agent DevKit source registry injection; otherwise leave it for the runner domain contract.
26
26
 
27
27
  ## Domain Behavior Guardrails
28
- 1. **[2026-06-28] Agentes devem ser agnosticos de cliente/projeto**
28
+ 1. **[2026-06-28] `write_policy` usa vocabulário canônico**
29
+ Do instead: usar apenas `read_only`, `dry_run`, `output_only`, `local_write`, `local_config_write`, `confirm`, `blocked_by_default` ou `delegated`; aliases antigos devem ser aceitos só em runtime e rejeitados como warning pelo validator.
30
+ 2. **[2026-06-28] Exemplos de roteamento nao sao evidencia por alias**
31
+ Do instead: ao usar `routing.examples`, comparar tokens reais ou frase exata; anchors/intents carregam aliases, exemplos nao devem promover matches genericos como apenas "analise".
32
+ 3. **[2026-06-28] Agentes devem ser agnosticos de cliente/projeto**
29
33
  Do instead: mover nomes de produto, cliente, URLs, paths locais, regras de elegibilidade e campos XML especificos para provider/config/env antes de versionar o agente.
30
- 2. **[2026-06-28] Sessao ativa nao deve vazar contexto entre projetos**
34
+ 4. **[2026-06-28] Sessao ativa nao deve vazar contexto entre projetos**
31
35
  Do instead: ao persistir contexto de conversa, reutilizar automaticamente apenas sessoes do mesmo projeto; para outro projeto, criar nova sessao ou exigir retomada explicita.
32
- 3. **[2026-06-28] Roteamento de PR deve usar tokens reais**
36
+ 5. **[2026-06-28] Roteamento de PR deve usar tokens reais**
33
37
  Do instead: detectar `pr`, `prs` ou `pull request` como tokens/expressao, nao substring ampla que captura palavras como `problema`.
34
- 4. **[2026-06-28] Tasks com escrita externa devem bloquear por padrao**
38
+ 6. **[2026-06-28] Tasks com escrita externa devem bloquear por padrao**
35
39
  Do instead: permitir `dry-run`, mas bloquear execucao real quando `action.external_writes=true` sem permissao explicita de escrita externa.
36
- 5. **[2026-06-20] Azure card descriptions may include sensitive production log data**
40
+ 7. **[2026-06-20] Azure card descriptions may include sensitive production log data**
37
41
  Do instead: retrieve the complete card for validation, but summarize PII-heavy log payloads in user-facing responses unless raw content is explicitly required.
38
- 6. **[2026-06-21] N1 restrictive-base uses a scoped SQL Server override**
42
+ 8. **[2026-06-21] N1 restrictive-base uses a scoped SQL Server override**
39
43
  Do instead: when the N1 agent checks the restrictive base, prefer `DB_RESTRICTIVE_CONN_STRING` only in the subprocess environment for `sqlserver-data-analyzer`, without changing the global SQL Server analyzer default.
40
44
 
41
45
  ## User Directives
42
- 1. **[2026-06-22] Implement agentic specs individually**
46
+ 1. **[2026-06-28] Rodar testes focados durante patches**
47
+ Do instead: para melhorias intermediarias, executar apenas testes necessarios para validar o patch; reservar suite completa para o fechamento do conjunto de melhorias.
48
+ 2. **[2026-06-22] Implement agentic specs individually**
43
49
  Do instead: process one `docs/agentic/*_plan.md` spec at a time with agent-specific analysis, tests, implementation, and review; do not use broad multi-agent waves or mechanical generation.
44
- 2. **[2026-06-22] Use Agent DevKit agents for work**
50
+ 3. **[2026-06-22] Use Agent DevKit agents for work**
45
51
  Do instead: route every current and future activity through the relevant Agent DevKit agent/capability before doing direct ad-hoc work.
46
- 3. **[2026-06-20] Keep generated docs out of final project versioning**
52
+ 4. **[2026-06-20] Keep generated docs out of final project versioning**
47
53
  Do instead: treat `docs/` as local development/generated artifact space and keep it ignored.