graph-agents-cli 0.3.1__py3-none-any.whl

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 (291) hide show
  1. graph_agents_cli/__init__.py +26 -0
  2. graph_agents_cli/_api_policy.py +2145 -0
  3. graph_agents_cli/_approvals.py +400 -0
  4. graph_agents_cli/_build.py +186 -0
  5. graph_agents_cli/_build_info.json +7 -0
  6. graph_agents_cli/_chat_client.py +462 -0
  7. graph_agents_cli/_click.py +157 -0
  8. graph_agents_cli/_defaults.py +139 -0
  9. graph_agents_cli/_experiments.py +64 -0
  10. graph_agents_cli/_http.py +192 -0
  11. graph_agents_cli/_output.py +83 -0
  12. graph_agents_cli/_project.py +462 -0
  13. graph_agents_cli/_remote.py +220 -0
  14. graph_agents_cli/_response_schema.py +264 -0
  15. graph_agents_cli/_runner.py +319 -0
  16. graph_agents_cli/_skills_check.py +274 -0
  17. graph_agents_cli/_tools.py +189 -0
  18. graph_agents_cli/_trust.py +66 -0
  19. graph_agents_cli/api/__init__.py +15 -0
  20. graph_agents_cli/api/_changes.py +506 -0
  21. graph_agents_cli/api/_files.py +658 -0
  22. graph_agents_cli/api/cmd_api.py +2480 -0
  23. graph_agents_cli/deploy/__init__.py +15 -0
  24. graph_agents_cli/deploy/_config.py +171 -0
  25. graph_agents_cli/deploy/_image.py +128 -0
  26. graph_agents_cli/deploy/_kube.py +286 -0
  27. graph_agents_cli/deploy/_modes.py +234 -0
  28. graph_agents_cli/deploy/_preflight.py +370 -0
  29. graph_agents_cli/deploy/_values.py +168 -0
  30. graph_agents_cli/deploy/cmd_deploy.py +1866 -0
  31. graph_agents_cli/deploy/gitops.py +562 -0
  32. graph_agents_cli/deploy/local_load.py +273 -0
  33. graph_agents_cli/dev/__init__.py +13 -0
  34. graph_agents_cli/dev/cmd_build.py +131 -0
  35. graph_agents_cli/dev/cmd_install.py +78 -0
  36. graph_agents_cli/dev/cmd_lint.py +119 -0
  37. graph_agents_cli/dev/cmd_playground.py +297 -0
  38. graph_agents_cli/dev/policy_check.py +1287 -0
  39. graph_agents_cli/eval/__init__.py +22 -0
  40. graph_agents_cli/eval/_client.py +670 -0
  41. graph_agents_cli/eval/_common.py +177 -0
  42. graph_agents_cli/eval/_judge.py +168 -0
  43. graph_agents_cli/eval/_judge_runner.py +238 -0
  44. graph_agents_cli/eval/_paths.py +212 -0
  45. graph_agents_cli/eval/checks.py +581 -0
  46. graph_agents_cli/eval/cmd_analyze.py +278 -0
  47. graph_agents_cli/eval/cmd_compare.py +284 -0
  48. graph_agents_cli/eval/cmd_eval_group.py +80 -0
  49. graph_agents_cli/eval/cmd_generate.py +558 -0
  50. graph_agents_cli/eval/cmd_grade.py +466 -0
  51. graph_agents_cli/eval/cmd_metric.py +156 -0
  52. graph_agents_cli/eval/cmd_run.py +370 -0
  53. graph_agents_cli/eval/cmd_submit.py +400 -0
  54. graph_agents_cli/eval/config.py +435 -0
  55. graph_agents_cli/eval/dataset.py +350 -0
  56. graph_agents_cli/eval/gate.py +420 -0
  57. graph_agents_cli/eval/transcript.py +192 -0
  58. graph_agents_cli/extension/__init__.py +13 -0
  59. graph_agents_cli/extension/_compat.py +86 -0
  60. graph_agents_cli/extension/_loader.py +293 -0
  61. graph_agents_cli/extension/_manifest.py +135 -0
  62. graph_agents_cli/extension/_overrides.py +195 -0
  63. graph_agents_cli/extension/_paths.py +91 -0
  64. graph_agents_cli/extension/_refs.py +193 -0
  65. graph_agents_cli/extension/_resolver.py +453 -0
  66. graph_agents_cli/extension/_schema.py +106 -0
  67. graph_agents_cli/extension/_spec.py +253 -0
  68. graph_agents_cli/extension/_sync.py +102 -0
  69. graph_agents_cli/extension/_trust.py +58 -0
  70. graph_agents_cli/extension/cmd_extension_add.py +259 -0
  71. graph_agents_cli/extension/cmd_extension_group.py +57 -0
  72. graph_agents_cli/extension/cmd_extension_list.py +56 -0
  73. graph_agents_cli/extension/cmd_extension_remove.py +61 -0
  74. graph_agents_cli/extension/cmd_extension_update.py +195 -0
  75. graph_agents_cli/info/__init__.py +13 -0
  76. graph_agents_cli/info/cmd_info.py +222 -0
  77. graph_agents_cli/infra/__init__.py +15 -0
  78. graph_agents_cli/infra/checks.py +1169 -0
  79. graph_agents_cli/infra/cmd_infra.py +103 -0
  80. graph_agents_cli/main.py +591 -0
  81. graph_agents_cli/peer/__init__.py +15 -0
  82. graph_agents_cli/peer/_generate.py +254 -0
  83. graph_agents_cli/peer/cmd_peer.py +1151 -0
  84. graph_agents_cli/run/__init__.py +13 -0
  85. graph_agents_cli/run/_local_server.py +1157 -0
  86. graph_agents_cli/run/_signals.py +141 -0
  87. graph_agents_cli/run/cmd_approvals.py +530 -0
  88. graph_agents_cli/run/cmd_run.py +1421 -0
  89. graph_agents_cli/scaffold/__init__.py +19 -0
  90. graph_agents_cli/scaffold/agents/README.md +24 -0
  91. graph_agents_cli/scaffold/agents/empty_py/.template/templateconfig.yaml +22 -0
  92. graph_agents_cli/scaffold/agents/langgraph/.env.example +292 -0
  93. graph_agents_cli/scaffold/agents/langgraph/.template/templateconfig.yaml +28 -0
  94. graph_agents_cli/scaffold/agents/langgraph/Dockerfile +59 -0
  95. graph_agents_cli/scaffold/agents/langgraph/Dockerfile.langgraph-server +59 -0
  96. graph_agents_cli/scaffold/agents/langgraph/README.md +571 -0
  97. graph_agents_cli/scaffold/agents/langgraph/api-policy.yaml +60 -0
  98. graph_agents_cli/scaffold/agents/langgraph/app/__init__.py +20 -0
  99. graph_agents_cli/scaffold/agents/langgraph/app/agent.py +174 -0
  100. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/__init__.py +15 -0
  101. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/a2a.py +2162 -0
  102. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/a2a_client.py +1167 -0
  103. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/api_client.py +4220 -0
  104. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/approvals.py +1349 -0
  105. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/auth.py +1986 -0
  106. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/chat.py +2962 -0
  107. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/checkpointer.py +432 -0
  108. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/content.py +569 -0
  109. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/db.py +580 -0
  110. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/limits.py +203 -0
  111. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/metrics.py +231 -0
  112. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/middleware.py +361 -0
  113. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/model.py +611 -0
  114. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/playground.py +230 -0
  115. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/run_locks.py +459 -0
  116. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/structured.py +755 -0
  117. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/telemetry.py +681 -0
  118. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/threads.py +493 -0
  119. graph_agents_cli/scaffold/agents/langgraph/app/app_utils/token_exchange.py +959 -0
  120. graph_agents_cli/scaffold/agents/langgraph/app/fast_api_app.py +770 -0
  121. graph_agents_cli/scaffold/agents/langgraph/app/policies/__init__.py +55 -0
  122. graph_agents_cli/scaffold/agents/langgraph/app/policies/custom.py +97 -0
  123. graph_agents_cli/scaffold/agents/langgraph/app/tools/__init__.py +46 -0
  124. graph_agents_cli/scaffold/agents/langgraph/app/tools/example_api.py +92 -0
  125. graph_agents_cli/scaffold/agents/langgraph/app/tools/weather.py +33 -0
  126. graph_agents_cli/scaffold/agents/langgraph/langgraph.json +14 -0
  127. graph_agents_cli/scaffold/agents/langgraph/pyproject.toml +78 -0
  128. graph_agents_cli/scaffold/agents/langgraph/tests/conftest.py +376 -0
  129. graph_agents_cli/scaffold/agents/langgraph/tests/eval/datasets/basic-dataset.json +53 -0
  130. graph_agents_cli/scaffold/agents/langgraph/tests/eval/eval_config.yaml +32 -0
  131. graph_agents_cli/scaffold/agents/langgraph/tests/integration/approval_graph.py +137 -0
  132. graph_agents_cli/scaffold/agents/langgraph/tests/integration/fake_issuer.py +216 -0
  133. graph_agents_cli/scaffold/agents/langgraph/tests/integration/fake_openai.py +357 -0
  134. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_a2a_outcomes.py +569 -0
  135. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_a2a_relay.py +479 -0
  136. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_api_surface.py +812 -0
  137. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_approvals.py +1367 -0
  138. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_approvals_server.py +794 -0
  139. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_cross_actor.py +497 -0
  140. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_cross_actor_server.py +247 -0
  141. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_history_repair.py +278 -0
  142. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_model_apis.py +242 -0
  143. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_postgres.py +637 -0
  144. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_resilience_postgres.py +770 -0
  145. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_runtime_guardrails.py +854 -0
  146. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_server_e2e.py +340 -0
  147. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_server_runtime.py +989 -0
  148. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_structured_answers.py +584 -0
  149. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_structured_server.py +222 -0
  150. graph_agents_cli/scaffold/agents/langgraph/tests/integration/test_token_exchange_issuer.py +650 -0
  151. graph_agents_cli/scaffold/agents/langgraph/tests/load_test/.results/.placeholder +0 -0
  152. graph_agents_cli/scaffold/agents/langgraph/tests/load_test/README.md +22 -0
  153. graph_agents_cli/scaffold/agents/langgraph/tests/load_test/conftest.py +21 -0
  154. graph_agents_cli/scaffold/agents/langgraph/tests/load_test/load_test.py +81 -0
  155. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_a2a_client.py +824 -0
  156. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_a2a_scoping.py +724 -0
  157. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_api_client.py +1214 -0
  158. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_api_client_hardening.py +716 -0
  159. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_api_policy_rpc.py +767 -0
  160. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_approval_ledger.py +1536 -0
  161. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_fake_model.py +115 -0
  162. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_jwt_policy.py +991 -0
  163. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_limits.py +310 -0
  164. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_logging.py +148 -0
  165. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_logging_hardening.py +271 -0
  166. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_policy.py +378 -0
  167. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_resilience.py +610 -0
  168. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_server_auth.py +702 -0
  169. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_structured.py +673 -0
  170. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_telemetry.py +404 -0
  171. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_thread_listing.py +255 -0
  172. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_threads.py +268 -0
  173. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_token_exchange.py +1320 -0
  174. graph_agents_cli/scaffold/agents/langgraph/tests/unit/test_untrusted_content.py +393 -0
  175. graph_agents_cli/scaffold/agents/langgraph/uv-fastapi.lock +2084 -0
  176. graph_agents_cli/scaffold/agents/langgraph/uv-langgraph-server.lock +2106 -0
  177. graph_agents_cli/scaffold/agents/langgraph/{{cookiecutter.agent_guidance_filename}} +129 -0
  178. graph_agents_cli/scaffold/base_templates/_shared/graph-agents-cli-manifest.yaml +36 -0
  179. graph_agents_cli/scaffold/base_templates/python/.dockerignore +32 -0
  180. graph_agents_cli/scaffold/base_templates/python/.github/CODEOWNERS +30 -0
  181. graph_agents_cli/scaffold/base_templates/python/.github/agent.env +7 -0
  182. graph_agents_cli/scaffold/base_templates/python/.github/workflows/pr_checks.yaml +214 -0
  183. graph_agents_cli/scaffold/base_templates/python/.gitignore +209 -0
  184. graph_agents_cli/scaffold/base_templates/python/tests/unit/test_dummy.py +23 -0
  185. graph_agents_cli/scaffold/base_templates/python/{{cookiecutter.agent_guidance_filename}} +35 -0
  186. graph_agents_cli/scaffold/cmd_scaffold_group.py +49 -0
  187. graph_agents_cli/scaffold/commands/__init__.py +13 -0
  188. graph_agents_cli/scaffold/commands/create.py +1424 -0
  189. graph_agents_cli/scaffold/commands/enhance.py +1652 -0
  190. graph_agents_cli/scaffold/commands/upgrade.py +570 -0
  191. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/.github/agent.env +12 -0
  192. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/.github/workflows/promote-to-prod.yaml +371 -0
  193. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/.github/workflows/staging.yaml +450 -0
  194. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/argocd/application-dev.yaml +43 -0
  195. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/argocd/application-prod.yaml +41 -0
  196. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/argocd/application-staging.yaml +43 -0
  197. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/.helmignore +14 -0
  198. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/Chart.yaml +21 -0
  199. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/examples/networkpolicy.yaml +103 -0
  200. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/NOTES.txt +48 -0
  201. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/_helpers.tpl +189 -0
  202. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/certificate.yaml +15 -0
  203. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/configmap.yaml +10 -0
  204. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/deployment.yaml +199 -0
  205. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/hpa.yaml +22 -0
  206. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/httproute.yaml +30 -0
  207. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/ingress.yaml +39 -0
  208. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/networkpolicy.yaml +48 -0
  209. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/pdb.yaml +13 -0
  210. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/postgresql-secret.yaml +37 -0
  211. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/service.yaml +15 -0
  212. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/serviceaccount.yaml +13 -0
  213. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/templates/servicemonitor.yaml +42 -0
  214. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/values-dev.yaml +22 -0
  215. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/values-prod.yaml +45 -0
  216. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/values-staging.yaml +29 -0
  217. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/deployment/helm/{{cookiecutter.project_name}}/values.yaml +396 -0
  218. graph_agents_cli/scaffold/deployment_targets/kubernetes/python/tests/integration/test_chart.py +269 -0
  219. graph_agents_cli/scaffold/deployment_targets/none/README.md +5 -0
  220. graph_agents_cli/scaffold/deployment_targets/none/python/README.md +6 -0
  221. graph_agents_cli/scaffold/utils/__init__.py +13 -0
  222. graph_agents_cli/scaffold/utils/backup.py +212 -0
  223. graph_agents_cli/scaffold/utils/build_record.py +257 -0
  224. graph_agents_cli/scaffold/utils/cli_options.py +184 -0
  225. graph_agents_cli/scaffold/utils/fs.py +83 -0
  226. graph_agents_cli/scaffold/utils/generate_locks.py +214 -0
  227. graph_agents_cli/scaffold/utils/generation_metadata.py +88 -0
  228. graph_agents_cli/scaffold/utils/keyedit.py +768 -0
  229. graph_agents_cli/scaffold/utils/keymerge.py +537 -0
  230. graph_agents_cli/scaffold/utils/language.py +138 -0
  231. graph_agents_cli/scaffold/utils/lock_utils.py +94 -0
  232. graph_agents_cli/scaffold/utils/logging.py +77 -0
  233. graph_agents_cli/scaffold/utils/manifest.py +292 -0
  234. graph_agents_cli/scaffold/utils/merge.py +970 -0
  235. graph_agents_cli/scaffold/utils/merge3.py +216 -0
  236. graph_agents_cli/scaffold/utils/openapi_seed.py +199 -0
  237. graph_agents_cli/scaffold/utils/remote_template.py +376 -0
  238. graph_agents_cli/scaffold/utils/template.py +1352 -0
  239. graph_agents_cli/scaffold/utils/upgrade.py +894 -0
  240. graph_agents_cli/scaffold/utils/version.py +438 -0
  241. graph_agents_cli/secrets/__init__.py +15 -0
  242. graph_agents_cli/secrets/_apply.py +954 -0
  243. graph_agents_cli/secrets/_required.py +188 -0
  244. graph_agents_cli/secrets/cmd_secrets.py +211 -0
  245. graph_agents_cli/setup/__init__.py +13 -0
  246. graph_agents_cli/setup/_antigravity.py +221 -0
  247. graph_agents_cli/setup/cmd_auth.py +1030 -0
  248. graph_agents_cli/setup/cmd_dev_token.py +513 -0
  249. graph_agents_cli/setup/cmd_setup.py +428 -0
  250. graph_agents_cli/setup/cmd_update.py +140 -0
  251. graph_agents_cli/skills/__init__.py +13 -0
  252. graph_agents_cli/skills/_bundle.py +65 -0
  253. graph_agents_cli/skills/data/README.md +19 -0
  254. graph_agents_cli/skills/data/graph-agents-cli-deploy/SKILL.md +357 -0
  255. graph_agents_cli/skills/data/graph-agents-cli-deploy/references/github-settings.md +113 -0
  256. graph_agents_cli/skills/data/graph-agents-cli-deploy/references/gitops.md +137 -0
  257. graph_agents_cli/skills/data/graph-agents-cli-deploy/references/kubernetes.md +315 -0
  258. graph_agents_cli/skills/data/graph-agents-cli-deploy/references/secrets.md +160 -0
  259. graph_agents_cli/skills/data/graph-agents-cli-eval/SKILL.md +303 -0
  260. graph_agents_cli/skills/data/graph-agents-cli-eval/references/dataset_schema.md +282 -0
  261. graph_agents_cli/skills/data/graph-agents-cli-eval/references/metrics-guide.md +143 -0
  262. graph_agents_cli/skills/data/graph-agents-cli-langgraph-code/SKILL.md +659 -0
  263. graph_agents_cli/skills/data/graph-agents-cli-langgraph-code/references/langchain-models.md +124 -0
  264. graph_agents_cli/skills/data/graph-agents-cli-langgraph-code/references/langgraph.md +235 -0
  265. graph_agents_cli/skills/data/graph-agents-cli-langgraph-code/references/template-contract.md +477 -0
  266. graph_agents_cli/skills/data/graph-agents-cli-observability/SKILL.md +231 -0
  267. graph_agents_cli/skills/data/graph-agents-cli-observability/references/langsmith.md +46 -0
  268. graph_agents_cli/skills/data/graph-agents-cli-observability/references/otel.md +59 -0
  269. graph_agents_cli/skills/data/graph-agents-cli-scaffold/SKILL.md +414 -0
  270. graph_agents_cli/skills/data/graph-agents-cli-scaffold/references/flags.md +134 -0
  271. graph_agents_cli/skills/data/graph-agents-cli-workflow/SKILL.md +478 -0
  272. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/brainstorming.md +118 -0
  273. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/commands.md +419 -0
  274. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/extension.md +156 -0
  275. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/internals.md +67 -0
  276. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/spec-template.md +56 -0
  277. graph_agents_cli/skills/data/graph-agents-cli-workflow/references/terminology.md +119 -0
  278. graph_agents_cli/system/__init__.py +15 -0
  279. graph_agents_cli/system/_apply.py +519 -0
  280. graph_agents_cli/system/_checks.py +1023 -0
  281. graph_agents_cli/system/_deploy.py +215 -0
  282. graph_agents_cli/system/_model.py +363 -0
  283. graph_agents_cli/system/_system.py +664 -0
  284. graph_agents_cli/system/_views.py +208 -0
  285. graph_agents_cli/system/cmd_system.py +423 -0
  286. graph_agents_cli-0.3.1.dist-info/METADATA +162 -0
  287. graph_agents_cli-0.3.1.dist-info/RECORD +291 -0
  288. graph_agents_cli-0.3.1.dist-info/WHEEL +4 -0
  289. graph_agents_cli-0.3.1.dist-info/entry_points.txt +2 -0
  290. graph_agents_cli-0.3.1.dist-info/licenses/LICENSE +201 -0
  291. graph_agents_cli-0.3.1.dist-info/licenses/NOTICE +19 -0
@@ -0,0 +1,370 @@
1
+ # Copyright 2026 graph-agents-cli contributors
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """graph-agents-cli eval run command: generate then grade, worst exit code wins."""
16
+
17
+ from __future__ import annotations
18
+
19
+ import sys
20
+ from pathlib import Path
21
+ from typing import TYPE_CHECKING
22
+
23
+ import click
24
+
25
+ from graph_agents_cli._output import Console
26
+ from graph_agents_cli._project import find_project_root
27
+ from graph_agents_cli._remote import deprecated_session_token, fold_session_token
28
+ from graph_agents_cli.eval import _paths
29
+ from graph_agents_cli.eval._client import DEFAULT_TIMEOUT
30
+ from graph_agents_cli.eval._common import (
31
+ EXIT_CONFIG_ERROR,
32
+ EXIT_INCOMPLETE,
33
+ EvalConfigError,
34
+ worst_exit_code,
35
+ )
36
+ from graph_agents_cli.eval.cmd_generate import DEFAULT_CONCURRENCY, generate_traces
37
+ from graph_agents_cli.eval.cmd_grade import DEFAULT_JUDGE_TIMEOUT, grade_traces
38
+
39
+ if TYPE_CHECKING:
40
+ from graph_agents_cli.extension._loader import ResolvedCommand
41
+
42
+
43
+ def _run_override_code(resolved: ResolvedCommand, argv: list[str], *, display_path: str) -> int:
44
+ """Run an override's vector and return its exit code (never exits here).
45
+
46
+ ``eval run`` must combine both stages' codes, so unlike
47
+ ``_overrides.run_override`` a non-zero child code is returned, not raised.
48
+ """
49
+ from graph_agents_cli._runner import run_extension_command
50
+
51
+ cwd = find_project_root() or Path.cwd()
52
+ try:
53
+ return run_extension_command(
54
+ resolved.contribution.run,
55
+ argv,
56
+ cwd=cwd,
57
+ extension_root=resolved.extension_root,
58
+ )
59
+ except FileNotFoundError as exc:
60
+ raise click.ClickException(
61
+ f"Extension '{resolved.extension_name}' command {display_path!r} could not run: "
62
+ f"executable {resolved.contribution.run[0]!r} not found. "
63
+ "Check the extension's `run:` entry."
64
+ ) from exc
65
+
66
+
67
+ def _preflight_grade_config(
68
+ project_root: Path, *, dataset: str | None, config_path: str | None
69
+ ) -> None:
70
+ """Validate the eval config and the dataset's metrics as `eval grade` will (exit 3).
71
+
72
+ Uses the same resolution as the grade stage: ``--config`` relative to the
73
+ project when it is not found as given, else the project's default config;
74
+ the dataset is the one generate is about to run.
75
+ """
76
+ from graph_agents_cli.eval import gate
77
+ from graph_agents_cli.eval.config import load_eval_config
78
+ from graph_agents_cli.eval.dataset import load_dataset
79
+
80
+ if config_path:
81
+ cfg_file = Path(config_path)
82
+ if not cfg_file.is_absolute() and not cfg_file.exists():
83
+ cfg_file = project_root / cfg_file
84
+ config = load_eval_config(cfg_file, required=True)
85
+ else:
86
+ config = load_eval_config(_paths.default_eval_config(project_root))
87
+ files = _paths.resolve_input_datasets(project_root, dataset)
88
+ if not files:
89
+ raise EvalConfigError(
90
+ f"no dataset found: pass --dataset PATH or add {_paths.DEFAULT_INPUT_DATASET}"
91
+ )
92
+ for case in load_dataset(files).cases:
93
+ gate.validate_case_metrics(config, case)
94
+
95
+
96
+ def _warn_live_target_for_override(
97
+ console: Console, project_root: Path, *, dataset: str | None, url: str
98
+ ) -> None:
99
+ from graph_agents_cli.eval.cmd_generate import warn_live_target
100
+ from graph_agents_cli.eval.dataset import load_dataset
101
+
102
+ files = _paths.resolve_input_datasets(project_root, dataset)
103
+ try:
104
+ count: int | None = len(load_dataset(files).cases) if files else None
105
+ except EvalConfigError:
106
+ count = None # the override reports its own dataset problems
107
+ warn_live_target(console, url.rstrip("/"), project_root, count)
108
+
109
+
110
+ def _generate_override_argv(
111
+ project_root: Path,
112
+ *,
113
+ dataset: str | None,
114
+ traces_file: Path,
115
+ url: str | None,
116
+ app_name: str | None,
117
+ concurrency: int,
118
+ header: tuple[str, ...],
119
+ cookie: tuple[str, ...],
120
+ session_token: str | None,
121
+ timeout: float = DEFAULT_TIMEOUT,
122
+ ) -> list[str]:
123
+ # The override is a separate process, so the default dataset is resolved
124
+ # here and passed absolute (run_extension_command forces cwd=project root).
125
+ files = _paths.resolve_input_datasets(project_root, dataset)
126
+ if not files:
127
+ raise EvalConfigError(
128
+ f"no dataset found: pass --dataset PATH or add {_paths.DEFAULT_INPUT_DATASET}"
129
+ )
130
+ dataset_arg = str(files[0].resolve()) if len(files) == 1 else str(files[0].parent.resolve())
131
+ argv = ["--dataset", dataset_arg, "--output", str(traces_file)]
132
+ if url:
133
+ argv += ["--url", url]
134
+ if app_name:
135
+ argv += ["--app-name", app_name]
136
+ if concurrency != DEFAULT_CONCURRENCY:
137
+ argv += ["--concurrency", str(concurrency)]
138
+ if timeout != DEFAULT_TIMEOUT:
139
+ # Forwarded like --concurrency: only a non-default value, so an override
140
+ # that does not know the flag keeps working at the defaults.
141
+ argv += ["--timeout", format(timeout, "g")]
142
+ for value in header:
143
+ argv += ["--header", value]
144
+ for value in cookie:
145
+ argv += ["--cookie", value]
146
+ if session_token:
147
+ argv += ["--session-token", session_token]
148
+ return argv
149
+
150
+
151
+ def _grade_override_argv(
152
+ *,
153
+ traces_file: Path,
154
+ dataset: str | None,
155
+ config_path: str | None,
156
+ output_path: str | None,
157
+ judge_provider: str | None,
158
+ judge_model: str | None,
159
+ judge_timeout: int = DEFAULT_JUDGE_TIMEOUT,
160
+ ) -> list[str]:
161
+ argv = ["--traces", str(traces_file)]
162
+ if dataset:
163
+ argv += ["--dataset", str(Path(dataset).resolve())]
164
+ if config_path:
165
+ argv += ["--config", str(Path(config_path).resolve())]
166
+ if output_path:
167
+ argv += ["--output", output_path]
168
+ if judge_provider:
169
+ argv += ["--judge-provider", judge_provider]
170
+ if judge_model:
171
+ argv += ["--judge-model", judge_model]
172
+ if judge_timeout != DEFAULT_JUDGE_TIMEOUT:
173
+ argv += ["--judge-timeout", str(judge_timeout)]
174
+ return argv
175
+
176
+
177
+ @click.command("run")
178
+ @click.option(
179
+ "--dataset", default=None, help="Dataset file or directory. Forwarded to `eval generate`."
180
+ )
181
+ @click.option(
182
+ "--url",
183
+ default=None,
184
+ help=(
185
+ "Base URL of a running agent; its tools run for real there, write tools included. "
186
+ "Forwarded to `eval generate`."
187
+ ),
188
+ )
189
+ @click.option(
190
+ "--concurrency",
191
+ type=click.IntRange(min=1),
192
+ default=DEFAULT_CONCURRENCY,
193
+ show_default=True,
194
+ help="Cases run in parallel. Forwarded to `eval generate`.",
195
+ )
196
+ @click.option(
197
+ "--header",
198
+ "-H",
199
+ multiple=True,
200
+ help=(
201
+ "Extra HTTP header 'Key: Value' (repeatable). For a bearer credential use "
202
+ "GRAPH_AGENTS_CLI_API_KEY instead (argv is visible to other local users)."
203
+ ),
204
+ )
205
+ @click.option("--cookie", multiple=True, help="Cookie 'name=value' (repeatable).")
206
+ @click.option(
207
+ "--session-token",
208
+ default=None,
209
+ hidden=True,
210
+ callback=deprecated_session_token,
211
+ help="Deprecated alias of --header 'X-Session-Token: ...'.",
212
+ )
213
+ @click.option("--app-name", default=None, help="Agent name recorded in the traces.")
214
+ @click.option(
215
+ "--timeout",
216
+ type=click.FloatRange(min=1),
217
+ default=DEFAULT_TIMEOUT,
218
+ show_default=True,
219
+ help="Seconds allowed per chat call. Forwarded to `eval generate`.",
220
+ )
221
+ @click.option(
222
+ "--config",
223
+ "config_path",
224
+ type=click.Path(),
225
+ default=None,
226
+ help="Eval config. Forwarded to `eval grade`.",
227
+ )
228
+ @click.option(
229
+ "--output",
230
+ "-o",
231
+ "output_path",
232
+ default=None,
233
+ help="Results file or directory. Forwarded to `eval grade`.",
234
+ )
235
+ @click.option(
236
+ "--judge-provider", default=None, help="Override the judge provider. Forwarded to `eval grade`."
237
+ )
238
+ @click.option(
239
+ "--judge-model", default=None, help="Override the judge model. Forwarded to `eval grade`."
240
+ )
241
+ @click.option(
242
+ "--judge-timeout",
243
+ type=click.IntRange(min=1),
244
+ default=DEFAULT_JUDGE_TIMEOUT,
245
+ show_default=True,
246
+ help="Seconds allowed for the judge runner. Forwarded to `eval grade`.",
247
+ )
248
+ def cmd_run(
249
+ *,
250
+ dataset: str | None,
251
+ url: str | None,
252
+ concurrency: int,
253
+ header: tuple[str, ...],
254
+ cookie: tuple[str, ...],
255
+ session_token: str | None,
256
+ app_name: str | None,
257
+ timeout: float,
258
+ config_path: str | None,
259
+ output_path: str | None,
260
+ judge_provider: str | None,
261
+ judge_model: str | None,
262
+ judge_timeout: int,
263
+ ) -> None:
264
+ """Chain `eval generate` and `eval grade` in one command.
265
+
266
+ Credentials are those of `eval generate`: a bearer credential goes in
267
+ GRAPH_AGENTS_CLI_API_KEY (locally, a shared-bearer project's API_KEY in
268
+ .env is used; a jwt project needs a token, e.g. from `graph-agents-cli auth
269
+ dev-token --sub <user>`), never on the command line.
270
+
271
+ Traces go to a fresh artifacts/traces/traces_<ts>.json and are graded
272
+ immediately. An extension that overrides `eval generate` or `eval grade`
273
+ is dispatched exactly as the standalone command would be. The exit code
274
+ is the worse of the two stages (0 gate met, 1 gate failed, 2 incomplete,
275
+ 3 configuration error).
276
+ """
277
+ console = Console()
278
+ # The deprecated --session-token is an X-Session-Token header from here on,
279
+ # so an eval.generate override is handed --header only.
280
+ header = fold_session_token(header, session_token)
281
+ session_token = None
282
+ project_root = find_project_root()
283
+ if project_root is None:
284
+ raise EvalConfigError(
285
+ "not inside a graph-agents-cli project (no graph-agents-cli-manifest.yaml found)"
286
+ )
287
+ traces_file = _paths.default_traces_path(project_root)
288
+
289
+ from graph_agents_cli.extension._overrides import installed_override
290
+
291
+ if installed_override("eval.grade") is None:
292
+ # Grade's configuration errors (an unknown metric, a missing threshold, a
293
+ # broken eval_config.yaml) surface before generate spends model calls.
294
+ _preflight_grade_config(project_root, dataset=dataset, config_path=config_path)
295
+
296
+ console.rule("[bold]Step 1/2: eval generate[/bold]")
297
+ generate_override = installed_override("eval.generate")
298
+ if generate_override is not None:
299
+ if url:
300
+ # The built-in generate warns itself; an override may not, and the
301
+ # side effects on the target are the same.
302
+ _warn_live_target_for_override(console, project_root, dataset=dataset, url=url)
303
+ argv = _generate_override_argv(
304
+ project_root,
305
+ dataset=dataset,
306
+ traces_file=traces_file,
307
+ url=url,
308
+ app_name=app_name,
309
+ concurrency=concurrency,
310
+ header=header,
311
+ cookie=cookie,
312
+ session_token=session_token,
313
+ timeout=timeout,
314
+ )
315
+ generate_code = _run_override_code(generate_override, argv, display_path="eval generate")
316
+ else:
317
+ generate_code = generate_traces(
318
+ dataset=dataset,
319
+ output=str(traces_file),
320
+ url=url,
321
+ concurrency=concurrency,
322
+ header=header,
323
+ cookie=cookie,
324
+ session_token=session_token,
325
+ app_name=app_name,
326
+ timeout=timeout,
327
+ console=console,
328
+ )
329
+
330
+ if generate_code >= EXIT_CONFIG_ERROR or not traces_file.exists():
331
+ code = (
332
+ worst_exit_code(generate_code, EXIT_INCOMPLETE)
333
+ if generate_code < EXIT_CONFIG_ERROR
334
+ else generate_code
335
+ )
336
+ click.echo(
337
+ f"eval generate produced no traces (exit code {generate_code}); skipping grade.",
338
+ err=True,
339
+ )
340
+ sys.exit(code)
341
+
342
+ console.rule("[bold]Step 2/2: eval grade[/bold]")
343
+ grade_override = installed_override("eval.grade")
344
+ if grade_override is not None:
345
+ argv = _grade_override_argv(
346
+ traces_file=traces_file,
347
+ dataset=dataset,
348
+ config_path=config_path,
349
+ output_path=output_path,
350
+ judge_provider=judge_provider,
351
+ judge_model=judge_model,
352
+ judge_timeout=judge_timeout,
353
+ )
354
+ grade_code = _run_override_code(grade_override, argv, display_path="eval grade")
355
+ else:
356
+ grade_code = grade_traces(
357
+ traces_path=str(traces_file),
358
+ dataset=dataset,
359
+ config_path=config_path,
360
+ output_path=output_path,
361
+ judge_provider=judge_provider,
362
+ judge_model=judge_model,
363
+ judge_timeout=judge_timeout,
364
+ console=console,
365
+ )
366
+
367
+ code = worst_exit_code(generate_code, grade_code)
368
+ if code:
369
+ click.echo(f"eval run: generate exit {generate_code}, grade exit {grade_code}", err=True)
370
+ sys.exit(code)