alloy-runtime-cli 0.1.0__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 (451) hide show
  1. alloy_runtime_cli-0.1.0.dist-info/METADATA +61 -0
  2. alloy_runtime_cli-0.1.0.dist-info/RECORD +451 -0
  3. alloy_runtime_cli-0.1.0.dist-info/WHEEL +5 -0
  4. alloy_runtime_cli-0.1.0.dist-info/entry_points.txt +2 -0
  5. alloy_runtime_cli-0.1.0.dist-info/top_level.txt +1 -0
  6. cli/__init__.py +0 -0
  7. cli/commands/__init__.py +0 -0
  8. cli/commands/admin/__init__.py +0 -0
  9. cli/commands/admin/bootstrap_command.py +118 -0
  10. cli/commands/admin/credentials/__init__.py +0 -0
  11. cli/commands/admin/credentials/create/__init__.py +0 -0
  12. cli/commands/admin/credentials/create/command.py +148 -0
  13. cli/commands/admin/credentials/create/presenter.py +16 -0
  14. cli/commands/admin/credentials/grant/__init__.py +0 -0
  15. cli/commands/admin/credentials/grant/command.py +119 -0
  16. cli/commands/admin/credentials/grant/fields.py +33 -0
  17. cli/commands/admin/credentials/grant/presenter.py +23 -0
  18. cli/commands/agents/__init__.py +0 -0
  19. cli/commands/agents/create/__init__.py +0 -0
  20. cli/commands/agents/create/command.py +475 -0
  21. cli/commands/agents/create/fields.py +64 -0
  22. cli/commands/agents/create/presenter.py +68 -0
  23. cli/commands/agents/delete/__init__.py +0 -0
  24. cli/commands/agents/delete/command.py +47 -0
  25. cli/commands/agents/delete/presenter.py +16 -0
  26. cli/commands/agents/get/command.py +37 -0
  27. cli/commands/agents/get/presenter.py +32 -0
  28. cli/commands/agents/list/__init__.py +1 -0
  29. cli/commands/agents/list/command.py +54 -0
  30. cli/commands/agents/list/presenter.py +82 -0
  31. cli/commands/agents/update/__init__.py +0 -0
  32. cli/commands/agents/update/command.py +435 -0
  33. cli/commands/agents/update/fields.py +40 -0
  34. cli/commands/agents/update/presenter.py +68 -0
  35. cli/commands/audio/__init__.py +0 -0
  36. cli/commands/audio/transcribe/__init__.py +0 -0
  37. cli/commands/audio/transcribe/command.py +144 -0
  38. cli/commands/audio/transcribe/presenter.py +15 -0
  39. cli/commands/auth/__init__.py +0 -0
  40. cli/commands/auth/login/__init__.py +0 -0
  41. cli/commands/auth/login/command.py +80 -0
  42. cli/commands/auth/signup/__init__.py +0 -0
  43. cli/commands/auth/signup/command.py +115 -0
  44. cli/commands/billing/__init__.py +1 -0
  45. cli/commands/billing/costs/__init__.py +1 -0
  46. cli/commands/billing/costs/by_agent/__init__.py +1 -0
  47. cli/commands/billing/costs/by_agent/command.py +57 -0
  48. cli/commands/billing/costs/by_agent/presenter.py +81 -0
  49. cli/commands/billing/costs/by_model/__init__.py +1 -0
  50. cli/commands/billing/costs/by_model/command.py +57 -0
  51. cli/commands/billing/costs/by_model/presenter.py +80 -0
  52. cli/commands/billing/costs/daily/__init__.py +1 -0
  53. cli/commands/billing/costs/daily/command.py +55 -0
  54. cli/commands/billing/costs/daily/presenter.py +75 -0
  55. cli/commands/billing/costs/summary/__init__.py +1 -0
  56. cli/commands/billing/costs/summary/command.py +57 -0
  57. cli/commands/billing/costs/summary/presenter.py +42 -0
  58. cli/commands/billing/projects/__init__.py +1 -0
  59. cli/commands/billing/projects/create/__init__.py +1 -0
  60. cli/commands/billing/projects/create/command.py +60 -0
  61. cli/commands/billing/projects/create/presenter.py +26 -0
  62. cli/commands/billing/projects/get/__init__.py +1 -0
  63. cli/commands/billing/projects/get/command.py +33 -0
  64. cli/commands/billing/projects/get/presenter.py +32 -0
  65. cli/commands/billing/projects/list/__init__.py +1 -0
  66. cli/commands/billing/projects/list/command.py +40 -0
  67. cli/commands/billing/projects/list/presenter.py +57 -0
  68. cli/commands/content/__init__.py +1 -0
  69. cli/commands/content/delete/__init__.py +0 -0
  70. cli/commands/content/delete/command.py +49 -0
  71. cli/commands/content/delete/presenter.py +18 -0
  72. cli/commands/content/edit/__init__.py +1 -0
  73. cli/commands/content/edit/command.py +155 -0
  74. cli/commands/content/edit/editor.py +150 -0
  75. cli/commands/content/edit/presenter.py +146 -0
  76. cli/commands/content/get/__init__.py +1 -0
  77. cli/commands/content/get/command.py +39 -0
  78. cli/commands/content/get/presenter.py +176 -0
  79. cli/commands/content/list/__init__.py +1 -0
  80. cli/commands/content/list/command.py +347 -0
  81. cli/commands/content/list/export_formatters.py +409 -0
  82. cli/commands/content/list/export_handler.py +165 -0
  83. cli/commands/content/list/presenter.py +190 -0
  84. cli/commands/credentials/__init__.py +0 -0
  85. cli/commands/credentials/create/__init__.py +0 -0
  86. cli/commands/credentials/create/command.py +165 -0
  87. cli/commands/credentials/create/fields.py +38 -0
  88. cli/commands/credentials/create/presenter.py +20 -0
  89. cli/commands/credentials/update/__init__.py +0 -0
  90. cli/commands/credentials/update/command.py +53 -0
  91. cli/commands/credentials/update/fields.py +71 -0
  92. cli/commands/credentials/update/presenter.py +16 -0
  93. cli/commands/flag_utils.py +366 -0
  94. cli/commands/generate/__init__.py +0 -0
  95. cli/commands/generate/cancel/__init__.py +1 -0
  96. cli/commands/generate/cancel/command.py +44 -0
  97. cli/commands/generate/cancel/presenter.py +26 -0
  98. cli/commands/generate/status/__init__.py +1 -0
  99. cli/commands/generate/status/command.py +58 -0
  100. cli/commands/generate/status/presenter.py +78 -0
  101. cli/commands/generate/text/__init__.py +0 -0
  102. cli/commands/generate/text/command.py +1325 -0
  103. cli/commands/generate/text/concurrent_renderer.py +355 -0
  104. cli/commands/generate/text/presenter.py +287 -0
  105. cli/commands/generate/text/stream_renderer.py +129 -0
  106. cli/commands/knowledge/__init__.py +0 -0
  107. cli/commands/knowledge/collections/__init__.py +0 -0
  108. cli/commands/knowledge/collections/cluster/__init__.py +0 -0
  109. cli/commands/knowledge/collections/cluster/command.py +64 -0
  110. cli/commands/knowledge/collections/cluster/presenter.py +74 -0
  111. cli/commands/knowledge/collections/cluster_status/__init__.py +0 -0
  112. cli/commands/knowledge/collections/cluster_status/command.py +46 -0
  113. cli/commands/knowledge/collections/cluster_status/presenter.py +10 -0
  114. cli/commands/knowledge/collections/create/__init__.py +0 -0
  115. cli/commands/knowledge/collections/create/command.py +137 -0
  116. cli/commands/knowledge/collections/create/presenter.py +38 -0
  117. cli/commands/knowledge/collections/delete/__init__.py +1 -0
  118. cli/commands/knowledge/collections/delete/command.py +47 -0
  119. cli/commands/knowledge/collections/delete/presenter.py +20 -0
  120. cli/commands/knowledge/collections/get/__init__.py +1 -0
  121. cli/commands/knowledge/collections/get/command.py +30 -0
  122. cli/commands/knowledge/collections/get/presenter.py +44 -0
  123. cli/commands/knowledge/collections/list/__init__.py +1 -0
  124. cli/commands/knowledge/collections/list/command.py +41 -0
  125. cli/commands/knowledge/collections/list/presenter.py +68 -0
  126. cli/commands/knowledge/collections/update/__init__.py +0 -0
  127. cli/commands/knowledge/collections/update/command.py +97 -0
  128. cli/commands/knowledge/collections/update/presenter.py +42 -0
  129. cli/commands/knowledge/documents/__init__.py +0 -0
  130. cli/commands/knowledge/documents/bulk_metadata/__init__.py +0 -0
  131. cli/commands/knowledge/documents/bulk_metadata/command.py +119 -0
  132. cli/commands/knowledge/documents/bulk_metadata/presenter.py +36 -0
  133. cli/commands/knowledge/documents/delete/__init__.py +0 -0
  134. cli/commands/knowledge/documents/delete/command.py +47 -0
  135. cli/commands/knowledge/documents/delete/presenter.py +20 -0
  136. cli/commands/knowledge/documents/get/__init__.py +0 -0
  137. cli/commands/knowledge/documents/get/command.py +39 -0
  138. cli/commands/knowledge/documents/get/presenter.py +78 -0
  139. cli/commands/knowledge/documents/ingest/__init__.py +0 -0
  140. cli/commands/knowledge/documents/ingest/command.py +222 -0
  141. cli/commands/knowledge/documents/ingest/presenter.py +41 -0
  142. cli/commands/knowledge/documents/list/__init__.py +0 -0
  143. cli/commands/knowledge/documents/list/command.py +69 -0
  144. cli/commands/knowledge/documents/list/presenter.py +86 -0
  145. cli/commands/knowledge/documents/reingest/__init__.py +0 -0
  146. cli/commands/knowledge/documents/reingest/command.py +102 -0
  147. cli/commands/knowledge/documents/reingest/presenter.py +70 -0
  148. cli/commands/knowledge/documents/update/__init__.py +0 -0
  149. cli/commands/knowledge/documents/update/command.py +85 -0
  150. cli/commands/knowledge/documents/update/presenter.py +37 -0
  151. cli/commands/knowledge/recover/__init__.py +0 -0
  152. cli/commands/knowledge/recover/command.py +46 -0
  153. cli/commands/knowledge/recover/presenter.py +79 -0
  154. cli/commands/knowledge/search/__init__.py +0 -0
  155. cli/commands/knowledge/search/command.py +218 -0
  156. cli/commands/knowledge/search/presenter.py +111 -0
  157. cli/commands/knowledge/synthesis/__init__.py +0 -0
  158. cli/commands/knowledge/synthesis/create/__init__.py +0 -0
  159. cli/commands/knowledge/synthesis/create/command.py +127 -0
  160. cli/commands/knowledge/synthesis/create/presenter.py +33 -0
  161. cli/commands/knowledge/synthesis/delete/__init__.py +0 -0
  162. cli/commands/knowledge/synthesis/delete/command.py +53 -0
  163. cli/commands/knowledge/synthesis/delete/presenter.py +31 -0
  164. cli/commands/knowledge/synthesis/get/__init__.py +0 -0
  165. cli/commands/knowledge/synthesis/get/command.py +55 -0
  166. cli/commands/knowledge/synthesis/get/presenter.py +114 -0
  167. cli/commands/knowledge/synthesis/list/__init__.py +0 -0
  168. cli/commands/knowledge/synthesis/list/command.py +132 -0
  169. cli/commands/knowledge/synthesis/list/presenter.py +84 -0
  170. cli/commands/knowledge/synthesis/refresh/__init__.py +0 -0
  171. cli/commands/knowledge/synthesis/refresh/command.py +42 -0
  172. cli/commands/knowledge/synthesis/refresh/presenter.py +33 -0
  173. cli/commands/knowledge/synthesis/update/__init__.py +0 -0
  174. cli/commands/knowledge/synthesis/update/command.py +76 -0
  175. cli/commands/knowledge/synthesis/update/presenter.py +41 -0
  176. cli/commands/models/__init__.py +0 -0
  177. cli/commands/models/list/__init__.py +0 -0
  178. cli/commands/models/list/command.py +84 -0
  179. cli/commands/models/list/presenter.py +114 -0
  180. cli/commands/organizations/__init__.py +0 -0
  181. cli/commands/organizations/create/command.py +32 -0
  182. cli/commands/organizations/create/presenter.py +9 -0
  183. cli/commands/pipelines/__init__.py +1 -0
  184. cli/commands/pipelines/approvals/__init__.py +1 -0
  185. cli/commands/pipelines/approvals/decide_command.py +77 -0
  186. cli/commands/pipelines/approvals/get_command.py +44 -0
  187. cli/commands/pipelines/approvals/presenter.py +56 -0
  188. cli/commands/pipelines/costs/__init__.py +1 -0
  189. cli/commands/pipelines/costs/command.py +57 -0
  190. cli/commands/pipelines/costs/daily_command.py +54 -0
  191. cli/commands/pipelines/costs/daily_presenter.py +59 -0
  192. cli/commands/pipelines/costs/presenter.py +37 -0
  193. cli/commands/pipelines/create/__init__.py +1 -0
  194. cli/commands/pipelines/create/command.py +103 -0
  195. cli/commands/pipelines/create/presenter.py +22 -0
  196. cli/commands/pipelines/env_vars/__init__.py +1 -0
  197. cli/commands/pipelines/env_vars/command.py +51 -0
  198. cli/commands/pipelines/env_vars/presenter.py +16 -0
  199. cli/commands/pipelines/execute/__init__.py +1 -0
  200. cli/commands/pipelines/execute/command.py +142 -0
  201. cli/commands/pipelines/execute/presenter.py +47 -0
  202. cli/commands/pipelines/executions/__init__.py +1 -0
  203. cli/commands/pipelines/executions/costs/__init__.py +1 -0
  204. cli/commands/pipelines/executions/costs/command.py +48 -0
  205. cli/commands/pipelines/executions/costs/presenter.py +29 -0
  206. cli/commands/pipelines/executions/costs_by_model/__init__.py +1 -0
  207. cli/commands/pipelines/executions/costs_by_model/command.py +50 -0
  208. cli/commands/pipelines/executions/costs_by_model/presenter.py +78 -0
  209. cli/commands/pipelines/executions/costs_by_step/__init__.py +1 -0
  210. cli/commands/pipelines/executions/costs_by_step/command.py +50 -0
  211. cli/commands/pipelines/executions/costs_by_step/presenter.py +72 -0
  212. cli/commands/pipelines/executions/get_command.py +38 -0
  213. cli/commands/pipelines/executions/list_command.py +123 -0
  214. cli/commands/pipelines/executions/presenter.py +131 -0
  215. cli/commands/pipelines/executions/rerun_command.py +41 -0
  216. cli/commands/pipelines/executions/update/__init__.py +1 -0
  217. cli/commands/pipelines/executions/update/command.py +110 -0
  218. cli/commands/pipelines/executions/update/presenter.py +28 -0
  219. cli/commands/pipelines/get/__init__.py +1 -0
  220. cli/commands/pipelines/get/command.py +33 -0
  221. cli/commands/pipelines/get/presenter.py +48 -0
  222. cli/commands/pipelines/list/__init__.py +1 -0
  223. cli/commands/pipelines/list/command.py +53 -0
  224. cli/commands/pipelines/list/presenter.py +66 -0
  225. cli/commands/pipelines/schedules/__init__.py +1 -0
  226. cli/commands/pipelines/schedules/create_command.py +119 -0
  227. cli/commands/pipelines/schedules/create_presenter.py +35 -0
  228. cli/commands/pipelines/schedules/delete_command.py +52 -0
  229. cli/commands/pipelines/schedules/env_vars_command.py +59 -0
  230. cli/commands/pipelines/schedules/env_vars_presenter.py +16 -0
  231. cli/commands/pipelines/schedules/get_command.py +38 -0
  232. cli/commands/pipelines/schedules/list_command.py +33 -0
  233. cli/commands/pipelines/schedules/once_command.py +90 -0
  234. cli/commands/pipelines/schedules/once_presenter.py +30 -0
  235. cli/commands/pipelines/schedules/presenter.py +104 -0
  236. cli/commands/pipelines/schedules/update_command.py +139 -0
  237. cli/commands/pipelines/schedules/update_presenter.py +29 -0
  238. cli/commands/render/__init__.py +0 -0
  239. cli/commands/render/html_to_image/__init__.py +0 -0
  240. cli/commands/render/html_to_image/command.py +170 -0
  241. cli/commands/schemas/__init__.py +0 -0
  242. cli/commands/schemas/create/__init__.py +0 -0
  243. cli/commands/schemas/create/command.py +122 -0
  244. cli/commands/schemas/create/presenter.py +53 -0
  245. cli/commands/schemas/delete/command.py +45 -0
  246. cli/commands/schemas/delete/presenter.py +9 -0
  247. cli/commands/schemas/get/__init__.py +0 -0
  248. cli/commands/schemas/get/command.py +56 -0
  249. cli/commands/schemas/get/presenter.py +129 -0
  250. cli/commands/schemas/list/__init__.py +0 -0
  251. cli/commands/schemas/list/command.py +64 -0
  252. cli/commands/schemas/list/presenter.py +133 -0
  253. cli/commands/schemas/update/__init__.py +0 -0
  254. cli/commands/schemas/update/command.py +369 -0
  255. cli/commands/schemas/update/presenter.py +53 -0
  256. cli/commands/sessions/__init__.py +1 -0
  257. cli/commands/sessions/delete/__init__.py +1 -0
  258. cli/commands/sessions/delete/command.py +47 -0
  259. cli/commands/sessions/delete/presenter.py +10 -0
  260. cli/commands/sessions/get/__init__.py +1 -0
  261. cli/commands/sessions/get/command.py +42 -0
  262. cli/commands/sessions/get/presenter.py +59 -0
  263. cli/commands/sessions/list/__init__.py +1 -0
  264. cli/commands/sessions/list/command.py +61 -0
  265. cli/commands/sessions/list/presenter.py +68 -0
  266. cli/commands/sessions/messages/__init__.py +1 -0
  267. cli/commands/sessions/messages/command.py +78 -0
  268. cli/commands/sessions/messages/presenter.py +79 -0
  269. cli/commands/shared_flags.py +500 -0
  270. cli/commands/sync/__init__.py +0 -0
  271. cli/commands/sync/command.py +45 -0
  272. cli/commands/sync/presenter.py +49 -0
  273. cli/commands/tags/__init__.py +1 -0
  274. cli/commands/tags/create/__init__.py +1 -0
  275. cli/commands/tags/create/command.py +60 -0
  276. cli/commands/tags/delete/__init__.py +1 -0
  277. cli/commands/tags/delete/command.py +47 -0
  278. cli/commands/tags/delete/presenter.py +10 -0
  279. cli/commands/tags/get/command.py +31 -0
  280. cli/commands/tags/get/presenter.py +23 -0
  281. cli/commands/tags/list/__init__.py +1 -0
  282. cli/commands/tags/list/command.py +52 -0
  283. cli/commands/tags/list/presenter.py +49 -0
  284. cli/commands/tags/update/command.py +64 -0
  285. cli/commands/tags/update/presenter.py +9 -0
  286. cli/commands/templates/__init__.py +0 -0
  287. cli/commands/templates/create/__init__.py +0 -0
  288. cli/commands/templates/create/command.py +152 -0
  289. cli/commands/templates/create/presenter.py +86 -0
  290. cli/commands/templates/delete/__init__.py +0 -0
  291. cli/commands/templates/delete/command.py +47 -0
  292. cli/commands/templates/delete/presenter.py +16 -0
  293. cli/commands/templates/get/__init__.py +0 -0
  294. cli/commands/templates/get/command.py +52 -0
  295. cli/commands/templates/get/presenter.py +233 -0
  296. cli/commands/templates/get_by_version/command.py +32 -0
  297. cli/commands/templates/get_by_version/presenter.py +30 -0
  298. cli/commands/templates/list/__init__.py +1 -0
  299. cli/commands/templates/list/command.py +102 -0
  300. cli/commands/templates/list/presenter.py +93 -0
  301. cli/commands/templates/render/__init__.py +0 -0
  302. cli/commands/templates/render/command.py +115 -0
  303. cli/commands/templates/render/presenter.py +276 -0
  304. cli/commands/templates/update/__init__.py +0 -0
  305. cli/commands/templates/update/command.py +199 -0
  306. cli/commands/templates/update/presenter.py +94 -0
  307. cli/commands/templates/version/__init__.py +1 -0
  308. cli/commands/templates/version/command.py +116 -0
  309. cli/commands/templates/version/presenter.py +100 -0
  310. cli/commands/tool_configs/__init__.py +0 -0
  311. cli/commands/tool_configs/create/__init__.py +0 -0
  312. cli/commands/tool_configs/create/command.py +118 -0
  313. cli/commands/tool_configs/create/presenter.py +53 -0
  314. cli/commands/tool_configs/delete/__init__.py +0 -0
  315. cli/commands/tool_configs/delete/command.py +47 -0
  316. cli/commands/tool_configs/delete/presenter.py +18 -0
  317. cli/commands/tool_configs/get/__init__.py +0 -0
  318. cli/commands/tool_configs/get/command.py +31 -0
  319. cli/commands/tool_configs/get/presenter.py +62 -0
  320. cli/commands/tool_configs/list/__init__.py +0 -0
  321. cli/commands/tool_configs/list/command.py +59 -0
  322. cli/commands/tool_configs/list/presenter.py +60 -0
  323. cli/commands/tool_configs/update/__init__.py +0 -0
  324. cli/commands/tool_configs/update/command.py +128 -0
  325. cli/commands/tool_configs/update/presenter.py +53 -0
  326. cli/commands/tools/__init__.py +1 -0
  327. cli/commands/tools/get/__init__.py +1 -0
  328. cli/commands/tools/get/command.py +42 -0
  329. cli/commands/tools/get/presenter.py +45 -0
  330. cli/commands/tools/list/__init__.py +1 -0
  331. cli/commands/tools/list/command.py +56 -0
  332. cli/commands/tools/list/presenter.py +44 -0
  333. cli/commands/users/__init__.py +0 -0
  334. cli/commands/users/create/command.py +53 -0
  335. cli/commands/users/create/presenter.py +9 -0
  336. cli/commands/whoami/__init__.py +0 -0
  337. cli/commands/whoami/command.py +42 -0
  338. cli/infrastructure/__init__.py +0 -0
  339. cli/infrastructure/auth_storage.py +71 -0
  340. cli/infrastructure/client_factory.py +36 -0
  341. cli/infrastructure/command.py +75 -0
  342. cli/infrastructure/config.py +188 -0
  343. cli/infrastructure/console.py +27 -0
  344. cli/infrastructure/editor.py +138 -0
  345. cli/infrastructure/error_display.py +178 -0
  346. cli/infrastructure/field_extractor.py +360 -0
  347. cli/infrastructure/file_content.py +210 -0
  348. cli/infrastructure/filter_parser.py +256 -0
  349. cli/infrastructure/formatters/__init__.py +0 -0
  350. cli/infrastructure/formatters/base.py +99 -0
  351. cli/infrastructure/formatters/compact_formatter.py +245 -0
  352. cli/infrastructure/formatters/json_formatter.py +84 -0
  353. cli/infrastructure/formatters/lines_formatter.py +102 -0
  354. cli/infrastructure/formatting/__init__.py +0 -0
  355. cli/infrastructure/formatting/fields.py +193 -0
  356. cli/infrastructure/forms/__init__.py +0 -0
  357. cli/infrastructure/forms/agent_picker.py +123 -0
  358. cli/infrastructure/forms/agent_tool_editor.py +384 -0
  359. cli/infrastructure/forms/agent_tools_manager.py +212 -0
  360. cli/infrastructure/forms/base_picker.py +469 -0
  361. cli/infrastructure/forms/components.py +126 -0
  362. cli/infrastructure/forms/json_schema_builder.py +149 -0
  363. cli/infrastructure/forms/model_picker.py +134 -0
  364. cli/infrastructure/forms/parsers.py +173 -0
  365. cli/infrastructure/forms/resolution_modal.py +302 -0
  366. cli/infrastructure/forms/schema_picker.py +137 -0
  367. cli/infrastructure/forms/tag_management_modal.py +103 -0
  368. cli/infrastructure/forms/tag_picker.py +207 -0
  369. cli/infrastructure/forms/template_picker.py +131 -0
  370. cli/infrastructure/forms/tool_config_picker.py +130 -0
  371. cli/infrastructure/forms/tool_picker.py +103 -0
  372. cli/infrastructure/injection/__init__.py +0 -0
  373. cli/infrastructure/injection/parser.py +302 -0
  374. cli/infrastructure/injection/resolver.py +399 -0
  375. cli/infrastructure/kv_parser.py +130 -0
  376. cli/infrastructure/local_storage.py +227 -0
  377. cli/infrastructure/macro_parser.py +215 -0
  378. cli/infrastructure/output.py +192 -0
  379. cli/infrastructure/provider_setup.py +81 -0
  380. cli/infrastructure/renderers/__init__.py +0 -0
  381. cli/infrastructure/renderers/entity_renderer.py +77 -0
  382. cli/infrastructure/renderers/list_renderer.py +114 -0
  383. cli/infrastructure/scope_utils.py +47 -0
  384. cli/infrastructure/spinner.py +101 -0
  385. cli/infrastructure/tui/__init__.py +0 -0
  386. cli/infrastructure/tui/clipboard.py +41 -0
  387. cli/infrastructure/tui/formatters.py +105 -0
  388. cli/infrastructure/tui/preview.py +14 -0
  389. cli/infrastructure/tui/selectable.py +198 -0
  390. cli/infrastructure/validation/__init__.py +0 -0
  391. cli/infrastructure/validation/tag_validation.py +74 -0
  392. cli/main.py +759 -0
  393. cli/tui/__init__.py +0 -0
  394. cli/tui/app.py +199 -0
  395. cli/tui/app_store.py +73 -0
  396. cli/tui/chat/__init__.py +0 -0
  397. cli/tui/chat/commands/__init__.py +0 -0
  398. cli/tui/chat/commands/base.py +65 -0
  399. cli/tui/chat/commands/create_session.py +135 -0
  400. cli/tui/chat/commands/load_session.py +119 -0
  401. cli/tui/chat/commands/regenerate.py +120 -0
  402. cli/tui/chat/commands/reload_session.py +63 -0
  403. cli/tui/chat/commands/send_message.py +190 -0
  404. cli/tui/chat/commands/undo.py +66 -0
  405. cli/tui/chat/editor.py +71 -0
  406. cli/tui/chat/messages.py +223 -0
  407. cli/tui/chat/pane.py +141 -0
  408. cli/tui/chat/renderers/__init__.py +0 -0
  409. cli/tui/chat/renderers/base.py +72 -0
  410. cli/tui/chat/renderers/markdown.py +250 -0
  411. cli/tui/chat/renderers/plain.py +83 -0
  412. cli/tui/chat/screen.py +1155 -0
  413. cli/tui/chat/services/__init__.py +0 -0
  414. cli/tui/chat/services/injection.py +386 -0
  415. cli/tui/chat/services/name_generator.py +256 -0
  416. cli/tui/chat/slash_commands.py +424 -0
  417. cli/tui/chat/store.py +280 -0
  418. cli/tui/chat/types.py +220 -0
  419. cli/tui/chat/widgets/__init__.py +0 -0
  420. cli/tui/chat/widgets/chat_header.py +75 -0
  421. cli/tui/chat/widgets/chat_input.py +362 -0
  422. cli/tui/chat/widgets/injection_popup.py +161 -0
  423. cli/tui/chat/widgets/message_display.py +287 -0
  424. cli/tui/chat/widgets/session_sidebar.py +214 -0
  425. cli/tui/chat/widgets/welcome_screen.py +290 -0
  426. cli/tui/screens/__init__.py +0 -0
  427. cli/tui/screens/agents.py +344 -0
  428. cli/tui/screens/base.py +301 -0
  429. cli/tui/screens/content.py +508 -0
  430. cli/tui/screens/dashboard.py +89 -0
  431. cli/tui/screens/models.py +96 -0
  432. cli/tui/screens/nav_screen.py +186 -0
  433. cli/tui/screens/schemas.py +522 -0
  434. cli/tui/screens/templates.py +734 -0
  435. cli/tui/screens/tool_configs.py +335 -0
  436. cli/tui/styles/__init__.py +0 -0
  437. cli/tui/widgets/__init__.py +0 -0
  438. cli/tui/widgets/agent_create_modal.py +139 -0
  439. cli/tui/widgets/agent_form_modal.py +659 -0
  440. cli/tui/widgets/agent_update_modal.py +299 -0
  441. cli/tui/widgets/base_form_modal.py +77 -0
  442. cli/tui/widgets/confirm_modal.py +75 -0
  443. cli/tui/widgets/help_modal.py +145 -0
  444. cli/tui/widgets/new_session_modal.py +328 -0
  445. cli/tui/widgets/schema_create_modal.py +271 -0
  446. cli/tui/widgets/schema_update_modal.py +188 -0
  447. cli/tui/widgets/status_footer.py +147 -0
  448. cli/tui/widgets/template_create_modal.py +502 -0
  449. cli/tui/widgets/template_update_modal.py +308 -0
  450. cli/tui/widgets/tool_config_create_modal.py +216 -0
  451. cli/tui/widgets/tool_config_update_modal.py +208 -0
@@ -0,0 +1,118 @@
1
+ """Bootstrap admin command implementation."""
2
+
3
+ import typer
4
+
5
+ from cli.infrastructure.auth_storage import save_credentials
6
+ from cli.infrastructure.command import async_command
7
+ from cli.infrastructure.config import get_api_url
8
+ from cli.infrastructure.console import Prompt
9
+ from cli.infrastructure.output import print_info, print_success
10
+ from alloy_runtime_sdk.api_client.client import ApiClient
11
+ from alloy_runtime_types.dtos.auth import BootstrapAdminRequest
12
+
13
+
14
+ def bootstrap_admin_command(
15
+ email: str | None = typer.Option(None, "--email", "-e", help="Admin email address"),
16
+ password: str | None = typer.Option(
17
+ None, "--password", "-p", help="Password (not recommended for security)"
18
+ ),
19
+ name: str | None = typer.Option(None, "--name", "-n", help="Admin display name"),
20
+ org_name: str = typer.Option(
21
+ "Platform Team",
22
+ "--org",
23
+ "-o",
24
+ help="Organization name for system admin",
25
+ ),
26
+ token: str | None = typer.Option(
27
+ None,
28
+ "--token",
29
+ "-t",
30
+ envvar="BOOTSTRAP_TOKEN",
31
+ help="Bootstrap security token (required, can use BOOTSTRAP_TOKEN env var)",
32
+ ),
33
+ ) -> None:
34
+ """Bootstrap the first system administrator.
35
+
36
+ This command creates the initial system admin user when setting up
37
+ a new instance. It can only be run ONCE - if any users already exist,
38
+ it will fail with a safety error.
39
+
40
+ Examples:
41
+
42
+ # Interactive (recommended for security)
43
+ ai2 admin bootstrap
44
+
45
+ # Non-interactive (for automation)
46
+ ai2 admin bootstrap -e admin@example.com -p SecurePass123 -n "Admin User"
47
+
48
+ Security Notes:
49
+ - Only works on a fresh database with no users
50
+ - Creates a system_admin user with full privileges
51
+ - Stores credentials securely with bcrypt
52
+ """
53
+ _execute_bootstrap(email, password, name, org_name, token)
54
+
55
+
56
+ @async_command
57
+ async def _execute_bootstrap(
58
+ email: str | None,
59
+ password: str | None,
60
+ name: str | None,
61
+ org_name: str,
62
+ token: str | None,
63
+ ) -> None:
64
+ """Execute the bootstrap operation."""
65
+ api_url = get_api_url()
66
+
67
+ # Prompt for required fields if not provided
68
+ if not email:
69
+ email = Prompt.ask("[cyan]Admin email address[/cyan]")
70
+
71
+ if not name:
72
+ name = Prompt.ask("[cyan]Admin name[/cyan]")
73
+
74
+ if not token:
75
+ token = Prompt.ask(
76
+ "[cyan]Bootstrap token[/cyan] (from server's BOOTSTRAP_TOKEN env var)",
77
+ password=True,
78
+ )
79
+
80
+ if not password:
81
+ while True:
82
+ password = Prompt.ask("[cyan]Password[/cyan] (min 8 chars)", password=True)
83
+ confirm = Prompt.ask("[cyan]Confirm password[/cyan]", password=True)
84
+
85
+ if password != confirm:
86
+ print_info("Passwords don't match. Please try again.")
87
+ continue
88
+
89
+ if len(password) < 8:
90
+ print_info("Password must be at least 8 characters.")
91
+ continue
92
+
93
+ break
94
+
95
+ # Create the bootstrap request
96
+ request = BootstrapAdminRequest(
97
+ email=email,
98
+ password=password,
99
+ name=name,
100
+ organization_name=org_name,
101
+ bootstrap_token=token,
102
+ )
103
+
104
+ # Send request to server (no API key needed - bootstrapping fresh system)
105
+ async with ApiClient(base_url=api_url, api_key="") as client:
106
+ response = await client.bootstrap_admin(request)
107
+
108
+ # Save credentials
109
+ save_credentials(api_url, response.api_key)
110
+
111
+ # Show success
112
+ print_success(f"System administrator created for {response.name}")
113
+ print_info(f"Email: {response.email}")
114
+ print_info(f"Organization ID: {response.organization_id}")
115
+ print_info("API key saved to ~/.alloy-runtime/config")
116
+ print_info("")
117
+ print_info("You are now logged in as the system administrator.")
118
+ print_info("You can now run admin commands like: [cyan]ai2 sync models[/cyan]")
File without changes
File without changes
@@ -0,0 +1,148 @@
1
+ """Admin credentials create command implementation."""
2
+
3
+ from decimal import Decimal
4
+ from typing import Optional
5
+
6
+ import typer
7
+
8
+ from cli.commands.admin.credentials.create.presenter import (
9
+ present_credential_create_success,
10
+ )
11
+ from cli.commands.flag_utils import validate_provider
12
+ from cli.commands.shared_flags import (
13
+ CREDENTIAL_VALUE,
14
+ DESCRIPTION,
15
+ NAME,
16
+ PROVIDER_REQUIRED,
17
+ )
18
+ from cli.infrastructure.command import async_command, authenticated_client
19
+ from alloy_runtime_types.dtos.credentials import CreateSystemCredentialRequest
20
+
21
+
22
+ def admin_credentials_create_command(
23
+ credential_type_id: str = typer.Option(
24
+ ...,
25
+ "--type",
26
+ help="Credential type (e.g., system_provider)",
27
+ ),
28
+ name: str = NAME,
29
+ plaintext_value: str = CREDENTIAL_VALUE,
30
+ provider: str = PROVIDER_REQUIRED,
31
+ description: Optional[str] = DESCRIPTION,
32
+ priority: int = typer.Option(
33
+ 0,
34
+ "--priority",
35
+ help="Selection priority (default: 0)",
36
+ ),
37
+ is_default: bool = typer.Option(
38
+ False,
39
+ "--default",
40
+ help="Default credential for provider",
41
+ ),
42
+ daily_request_limit: Optional[int] = typer.Option(
43
+ None,
44
+ "--daily-limit",
45
+ help="Daily request limit",
46
+ ),
47
+ monthly_cost_limit_usd: Optional[str] = typer.Option(
48
+ None,
49
+ "--monthly-cost-limit",
50
+ help="Monthly USD limit (e.g., 50.00)",
51
+ ),
52
+ requests_per_minute_limit: Optional[int] = typer.Option(
53
+ None,
54
+ "--rate-limit",
55
+ help="Requests/minute limit",
56
+ ),
57
+ ) -> None:
58
+ """Create a system credential (requires system admin).
59
+
60
+ SECURITY: Use env var: --value "$OPENAI_API_KEY"
61
+
62
+ Examples:
63
+
64
+ ai admin credentials create --type system_provider -n "OpenAI" --value "sk-..." -p openai
65
+ ai admin credentials create --type system_provider -n "Default" --value "sk-..." -p openrouter --default
66
+ """
67
+ _execute_create(
68
+ credential_type_id=credential_type_id,
69
+ name=name,
70
+ plaintext_value=plaintext_value,
71
+ provider=provider,
72
+ description=description,
73
+ priority=priority,
74
+ is_default=is_default,
75
+ daily_request_limit=daily_request_limit,
76
+ monthly_cost_limit_usd=monthly_cost_limit_usd,
77
+ requests_per_minute_limit=requests_per_minute_limit,
78
+ )
79
+
80
+
81
+ @async_command
82
+ async def _execute_create(
83
+ credential_type_id: str,
84
+ name: str,
85
+ plaintext_value: str,
86
+ provider: str,
87
+ description: Optional[str],
88
+ priority: int,
89
+ is_default: bool,
90
+ daily_request_limit: Optional[int],
91
+ monthly_cost_limit_usd: Optional[str],
92
+ requests_per_minute_limit: Optional[int],
93
+ ) -> None:
94
+ """Execute the credential creation operation.
95
+
96
+ Args:
97
+ credential_type_id: Credential type ID
98
+ name: Friendly name
99
+ plaintext_value: API key value
100
+ provider: Provider key string
101
+ description: Optional description
102
+ priority: Priority for selection
103
+ is_default: Whether this is the default for the provider
104
+ daily_request_limit: Optional daily request limit
105
+ monthly_cost_limit_usd: Optional monthly cost limit as string
106
+ requests_per_minute_limit: Optional rate limit
107
+
108
+ Raises:
109
+ ConfigurationError: If environment variables are missing
110
+ AuthenticationError: If API key is invalid
111
+ ForbiddenError: If user is not system admin
112
+ ValidationError: If request data is invalid
113
+ ConflictError: If duplicate default credential exists
114
+ ServerError: If server returns 5xx error
115
+ """
116
+ # Validate and convert provider string to enum
117
+ provider_enum = validate_provider(provider)
118
+
119
+ # Convert monthly cost limit string to Decimal if provided
120
+ monthly_cost_decimal = None
121
+ if monthly_cost_limit_usd is not None:
122
+ try:
123
+ monthly_cost_decimal = Decimal(monthly_cost_limit_usd)
124
+ except Exception:
125
+ raise typer.BadParameter(
126
+ f"Invalid monthly cost limit '{monthly_cost_limit_usd}'. Must be a valid decimal number (e.g., '50.00')"
127
+ )
128
+
129
+ # Build request
130
+ request = CreateSystemCredentialRequest(
131
+ credential_type_id=credential_type_id,
132
+ name=name,
133
+ plaintext_value=plaintext_value,
134
+ provider_key=provider_enum,
135
+ description=description,
136
+ priority=priority,
137
+ is_default=is_default,
138
+ daily_request_limit=daily_request_limit,
139
+ monthly_cost_limit_usd=monthly_cost_decimal,
140
+ requests_per_minute_limit=requests_per_minute_limit,
141
+ )
142
+
143
+ # Execute API call with authenticated client
144
+ async with authenticated_client() as (_config, client):
145
+ response = await client.create_system_credential(request)
146
+
147
+ # Present success output
148
+ present_credential_create_success(response)
@@ -0,0 +1,16 @@
1
+ """Presenter for admin credentials create command output."""
2
+
3
+ from cli.commands.credentials.update.fields import CREDENTIAL_FIELDS
4
+ from cli.infrastructure.output import OutputService
5
+ from alloy_runtime_types.dtos.credentials import SystemCredentialResponse
6
+
7
+
8
+ def present_credential_create_success(credential: SystemCredentialResponse) -> None:
9
+ """Present a successful credential creation with Rich formatting.
10
+
11
+ Args:
12
+ credential: Created credential data from server
13
+ """
14
+ output = OutputService.get()
15
+ output.success(f"Created system credential: {credential.name}")
16
+ output.entity(credential, "System Credential Details", CREDENTIAL_FIELDS)
File without changes
@@ -0,0 +1,119 @@
1
+ """Admin credentials grant command implementation."""
2
+
3
+ from datetime import datetime
4
+ from typing import Optional
5
+ from uuid import UUID
6
+
7
+ import typer
8
+
9
+ from cli.commands.admin.credentials.grant.presenter import present_grant_success
10
+ from cli.commands.flag_utils import require_one_of, require_exclusive, validate_uuid
11
+ from cli.infrastructure.command import async_command, authenticated_client
12
+ from alloy_runtime_types.dtos.credentials import GrantSystemCredentialRequest
13
+
14
+
15
+ def admin_credentials_grant_command(
16
+ credential_id: str = typer.Option(
17
+ ...,
18
+ "--credential",
19
+ help="System credential ID",
20
+ ),
21
+ user_id: Optional[str] = typer.Option(
22
+ None,
23
+ "--user",
24
+ help="User ID (mutually exclusive with --org)",
25
+ ),
26
+ organization_id: Optional[str] = typer.Option(
27
+ None,
28
+ "--org",
29
+ help="Organization ID (mutually exclusive with --user)",
30
+ ),
31
+ expires_at: Optional[str] = typer.Option(
32
+ None,
33
+ "--expires-at",
34
+ help="Expiration (ISO 8601)",
35
+ ),
36
+ ) -> None:
37
+ """Grant system credential access (requires system admin).
38
+
39
+ Exactly one of --user or --org required.
40
+
41
+ Examples:
42
+
43
+ ai admin credentials grant --credential <id> --org <org-id>
44
+ ai admin credentials grant --credential <id> --user <user-id>
45
+ """
46
+ _execute_grant(
47
+ credential_id=credential_id,
48
+ user_id=user_id,
49
+ organization_id=organization_id,
50
+ expires_at=expires_at,
51
+ )
52
+
53
+
54
+ @async_command
55
+ async def _execute_grant(
56
+ credential_id: str,
57
+ user_id: Optional[str],
58
+ organization_id: Optional[str],
59
+ expires_at: Optional[str],
60
+ ) -> None:
61
+ """Execute the credential grant operation.
62
+
63
+ Args:
64
+ credential_id: System credential ID (string UUID)
65
+ user_id: Optional user ID (string UUID)
66
+ organization_id: Optional organization ID (string UUID)
67
+ expires_at: Optional expiration datetime (ISO 8601 string)
68
+
69
+ Raises:
70
+ typer.BadParameter: If UUID or datetime format is invalid
71
+ typer.BadParameter: If neither or both target IDs are provided
72
+ ConfigurationError: If environment variables are missing
73
+ AuthenticationError: If API key is invalid
74
+ ForbiddenError: If user is not system admin
75
+ ValidationError: If request data is invalid (neither/both targets)
76
+ ConflictError: If grant already exists
77
+ ServerError: If server returns 5xx error
78
+ """
79
+ # Validate and convert credential_id to UUID
80
+ credential_uuid = validate_uuid(credential_id, "credential")
81
+
82
+ # Validate mutual exclusivity at CLI level for better UX
83
+ require_one_of(("--user", user_id), ("--org", organization_id))
84
+ require_exclusive(("--user", user_id), ("--org", organization_id))
85
+
86
+ # Convert UUIDs
87
+ user_uuid: Optional[UUID] = None
88
+ org_uuid: Optional[UUID] = None
89
+
90
+ if user_id:
91
+ user_uuid = validate_uuid(user_id, "user")
92
+
93
+ if organization_id:
94
+ org_uuid = validate_uuid(organization_id, "organization")
95
+
96
+ # Parse expires_at if provided
97
+ expires_datetime: Optional[datetime] = None
98
+ if expires_at:
99
+ try:
100
+ expires_datetime = datetime.fromisoformat(expires_at.replace("Z", "+00:00"))
101
+ except ValueError:
102
+ raise typer.BadParameter(
103
+ f"Invalid datetime format: '{expires_at}'. Must be ISO 8601 format (e.g., '2025-12-31T23:59:59Z')"
104
+ )
105
+
106
+ # Build request
107
+ request = GrantSystemCredentialRequest(
108
+ credential_id=credential_uuid,
109
+ user_id=user_uuid,
110
+ organization_id=org_uuid,
111
+ expires_at=expires_datetime,
112
+ )
113
+
114
+ # Execute API call with authenticated client
115
+ async with authenticated_client() as (_config, client):
116
+ response = await client.grant_system_credential(request)
117
+
118
+ # Present success output
119
+ present_grant_success(response)
@@ -0,0 +1,33 @@
1
+ """Field definitions for system credential grant presentation."""
2
+
3
+ from typing import Any
4
+
5
+ from cli.infrastructure.formatting.fields import format_datetime, format_uuid
6
+ from cli.infrastructure.renderers.entity_renderer import FieldConfig
7
+
8
+
9
+ def format_optional_uuid(value: Any) -> str:
10
+ """Format optional UUID value."""
11
+ return format_uuid(value, short=False) if value else "(not set)"
12
+
13
+
14
+ def format_optional_datetime(value: Any) -> str:
15
+ """Format optional datetime value."""
16
+ return format_datetime(value) if value else "(not set)"
17
+
18
+
19
+ GRANT_FIELDS: list[FieldConfig] = [
20
+ FieldConfig("id", "Grant ID", lambda v: format_uuid(v, short=False)),
21
+ FieldConfig(
22
+ "credential_id", "Credential ID", lambda v: format_uuid(v, short=False)
23
+ ),
24
+ FieldConfig("organization_id", "Organization ID", format_optional_uuid),
25
+ FieldConfig("user_id", "User ID", format_optional_uuid),
26
+ FieldConfig(
27
+ "granted_by_user_id",
28
+ "Granted By User ID",
29
+ lambda v: format_uuid(v, short=False),
30
+ ),
31
+ FieldConfig("granted_at", "Granted At", format_datetime),
32
+ FieldConfig("expires_at", "Expires At", format_optional_datetime),
33
+ ]
@@ -0,0 +1,23 @@
1
+ """Presenter for admin credentials grant command output."""
2
+
3
+ from cli.commands.admin.credentials.grant.fields import GRANT_FIELDS
4
+ from cli.infrastructure.output import OutputService
5
+ from alloy_runtime_types.dtos.credentials import GrantSystemCredentialResponse
6
+
7
+
8
+ def present_grant_success(grant: GrantSystemCredentialResponse) -> None:
9
+ """Present a successful credential grant with Rich formatting.
10
+
11
+ Args:
12
+ grant: Created grant data from server
13
+ """
14
+ output = OutputService.get()
15
+
16
+ # Determine target type for success message
17
+ if grant.organization_id:
18
+ target = f"organization {grant.organization_id}"
19
+ else:
20
+ target = f"user {grant.user_id}"
21
+
22
+ output.success(f"Granted system credential access to {target}")
23
+ output.entity(grant, "System Credential Grant Details", GRANT_FIELDS)
File without changes
File without changes