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,10 @@
1
+ """Presenter for tag delete command output."""
2
+
3
+ from cli.infrastructure.output import OutputService
4
+ from alloy_runtime_types.dtos.tags import DeleteTagResponse
5
+
6
+
7
+ def present_delete_result(response: DeleteTagResponse) -> None:
8
+ """Present tag deletion result."""
9
+ output = OutputService.get()
10
+ output.success(f"Deleted tag: {response.deleted_tag.tag_path}")
@@ -0,0 +1,31 @@
1
+ """Tags get command implementation."""
2
+
3
+ from uuid import UUID
4
+ import typer
5
+
6
+ from cli.commands.tags.get.presenter import present_tag_details
7
+ from cli.commands.flag_utils import validate_uuid
8
+ from cli.infrastructure.command import async_command, authenticated_client
9
+
10
+
11
+ def tags_get_command(
12
+ tag_id: str = typer.Argument(
13
+ ...,
14
+ help="Tag UUID",
15
+ ),
16
+ ) -> None:
17
+ """Get details of a single tag.
18
+
19
+ Examples:
20
+ ai tags get 123e4567-89ab-cdef-0123-456789abcdef
21
+ """
22
+ tag_uuid = validate_uuid(tag_id, "tag")
23
+ _execute_get(tag_id=tag_uuid)
24
+
25
+
26
+ @async_command
27
+ async def _execute_get(tag_id: UUID) -> None:
28
+ async with authenticated_client() as (_config, client):
29
+ response = await client.get_tag(tag_id)
30
+
31
+ present_tag_details(response)
@@ -0,0 +1,23 @@
1
+ """Presenter for tags get command output."""
2
+
3
+ from rich.table import Table
4
+
5
+ from cli.infrastructure.output import OutputService
6
+ from alloy_runtime_types.dtos.tags import GetTagResponse
7
+
8
+
9
+ def present_tag_details(response: GetTagResponse) -> None:
10
+ output = OutputService.get()
11
+
12
+ output.success(f"Retrieved tag: {response.tag.tag_path}")
13
+
14
+ table = Table(show_header=False, box=None, padding=(0, 1))
15
+ table.add_column("Field", style="dim", width=20)
16
+ table.add_column("Value")
17
+
18
+ table.add_row("ID", str(response.tag.id))
19
+ table.add_row("Tag Path", response.tag.tag_path)
20
+ table.add_row("Display Name", response.tag.display_name or "-")
21
+ table.add_row("Description", response.tag.description or "-")
22
+
23
+ output.console.print(table)
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1,52 @@
1
+ """Tags list command implementation."""
2
+
3
+ from typing import Optional
4
+
5
+ import typer
6
+
7
+ from cli.commands.tags.list.presenter import present_tags_list
8
+ from cli.infrastructure.command import async_command, authenticated_client
9
+
10
+
11
+ def tags_list_command(
12
+ search: Optional[str] = typer.Option(
13
+ None,
14
+ "-s",
15
+ "--search",
16
+ help="Fuzzy search terms",
17
+ ),
18
+ limit: int = typer.Option(
19
+ 50,
20
+ "-l",
21
+ "--limit",
22
+ min=1,
23
+ max=100,
24
+ help="Max results",
25
+ ),
26
+ offset: int = typer.Option(
27
+ 0,
28
+ "--offset",
29
+ min=0,
30
+ help="Skip N results",
31
+ ),
32
+ ) -> None:
33
+ """List tags in your organization.
34
+
35
+ Examples:
36
+ ai tags list
37
+ ai tags list -s "marketing"
38
+ """
39
+ _execute_list(search=search, limit=limit, offset=offset)
40
+
41
+
42
+ @async_command
43
+ async def _execute_list(search: Optional[str], limit: int, offset: int) -> None:
44
+ """Execute list tags operation."""
45
+ async with authenticated_client() as (_config, client):
46
+ response = await client.list_tags(
47
+ search=search,
48
+ limit=limit,
49
+ offset=offset,
50
+ )
51
+
52
+ present_tags_list(response)
@@ -0,0 +1,49 @@
1
+ """Presenter for tags list command output."""
2
+
3
+ from alloy_runtime_types.dtos.tags import ListTagsResponse
4
+
5
+ from cli.infrastructure.output import OutputService
6
+ from cli.infrastructure.renderers.list_renderer import ColumnConfig
7
+
8
+
9
+ def present_tags_list(response: ListTagsResponse) -> None:
10
+ """Present list of tags with Rich table formatting."""
11
+ output = OutputService.get()
12
+
13
+ if not response.tags:
14
+ output.info("No tags found")
15
+ return
16
+
17
+ columns = [
18
+ ColumnConfig(
19
+ source_field="id",
20
+ header_label="ID",
21
+ compact_line=1,
22
+ compact_style="cyan",
23
+ ),
24
+ ColumnConfig(
25
+ source_field="tag_path",
26
+ header_label="Path",
27
+ compact_line=1,
28
+ compact_style="green",
29
+ ),
30
+ ColumnConfig(
31
+ source_field="display_name",
32
+ header_label="Display Name",
33
+ compact_line=2,
34
+ compact_style="white bold",
35
+ ),
36
+ ColumnConfig(
37
+ source_field="description",
38
+ header_label="Description",
39
+ formatter=lambda x: x[:60] + "..." if x and len(x) > 60 else (x or "-"),
40
+ compact_line=2,
41
+ compact_style="dim",
42
+ ),
43
+ ]
44
+
45
+ output.table(
46
+ items=response.tags, # type: ignore[arg-type]
47
+ title=f"Tags ({response.total})",
48
+ columns=columns,
49
+ )
@@ -0,0 +1,64 @@
1
+ """Tags update command implementation."""
2
+
3
+ from typing import Optional
4
+ from uuid import UUID
5
+
6
+ import typer
7
+
8
+ from cli.commands.tags.update.presenter import present_update_result
9
+ from cli.commands.flag_utils import validate_uuid, require_update_flags
10
+ from cli.infrastructure.command import async_command, authenticated_client
11
+ from alloy_runtime_types.dtos.tags import UpdateTagRequest
12
+
13
+
14
+ def tags_update_command(
15
+ tag_id: str = typer.Argument(
16
+ ...,
17
+ help="Tag UUID",
18
+ ),
19
+ display_name: Optional[str] = typer.Option(
20
+ None,
21
+ "-n",
22
+ "--display-name",
23
+ help="New display name",
24
+ ),
25
+ description: Optional[str] = typer.Option(
26
+ None,
27
+ "-d",
28
+ "--description",
29
+ help="New description",
30
+ ),
31
+ ) -> None:
32
+ """Update a tag's display name or description.
33
+
34
+ Examples:
35
+ ai tags update 123e4567-89ab... -n "New Name"
36
+ ai tags update 123e4567-89ab... -d "New description"
37
+ """
38
+ require_update_flags(
39
+ ("--display-name", display_name),
40
+ ("--description", description),
41
+ )
42
+
43
+ tag_uuid = validate_uuid(tag_id, "tag")
44
+ _execute_update(
45
+ tag_id=tag_uuid,
46
+ display_name=display_name,
47
+ description=description,
48
+ )
49
+
50
+
51
+ @async_command
52
+ async def _execute_update(
53
+ tag_id: UUID,
54
+ display_name: Optional[str],
55
+ description: Optional[str],
56
+ ) -> None:
57
+ request = UpdateTagRequest(
58
+ display_name=display_name,
59
+ description=description,
60
+ )
61
+ async with authenticated_client() as (_config, client):
62
+ response = await client.update_tag(tag_id, request)
63
+
64
+ present_update_result(response)
@@ -0,0 +1,9 @@
1
+ """Presenter for tags update command output."""
2
+
3
+ from cli.infrastructure.output import OutputService
4
+ from alloy_runtime_types.dtos.tags import UpdateTagResponse
5
+
6
+
7
+ def present_update_result(response: UpdateTagResponse) -> None:
8
+ output = OutputService.get()
9
+ output.success(f"Updated tag: {response.tag.tag_path}")
File without changes
File without changes
@@ -0,0 +1,152 @@
1
+ """Template create command implementation."""
2
+
3
+ from pathlib import Path
4
+ from typing import Optional
5
+
6
+ import typer
7
+
8
+ from cli.commands.flag_utils import (
9
+ parse_tags_required,
10
+ require_one_of,
11
+ validate_template_content_type,
12
+ validate_visibility,
13
+ )
14
+ from cli.commands.templates.create.presenter import present_template_create_success
15
+ from cli.infrastructure.command import async_command, authenticated_client
16
+ from cli.infrastructure.file_content import FileContentError, resolve_content
17
+ from alloy_runtime_types.dtos.templates import CreateTemplateRequest
18
+
19
+
20
+ def templates_create_command(
21
+ name: str = typer.Option(
22
+ ...,
23
+ "-n",
24
+ "--name",
25
+ help="Template name",
26
+ ),
27
+ content_type: str = typer.Option(
28
+ ...,
29
+ "--type",
30
+ help="Type: system_instruction, user_message, fragment",
31
+ ),
32
+ visibility: str = typer.Option(
33
+ ...,
34
+ "-V",
35
+ "--visibility",
36
+ help="Visibility: private, organization, public",
37
+ ),
38
+ tags: str = typer.Option(
39
+ ...,
40
+ "-t",
41
+ "--tags",
42
+ help="Comma-separated tags",
43
+ ),
44
+ content_file: Optional[Path] = typer.Option(
45
+ None,
46
+ "-f",
47
+ "--file",
48
+ help="Read content from file",
49
+ exists=True,
50
+ readable=True,
51
+ ),
52
+ content: Optional[str] = typer.Option(
53
+ None,
54
+ "-c",
55
+ "--content",
56
+ help="Inline content (or @file)",
57
+ ),
58
+ description: Optional[str] = typer.Option(
59
+ None,
60
+ "-d",
61
+ "--description",
62
+ help="Template description",
63
+ ),
64
+ upsert: bool = typer.Option(
65
+ False,
66
+ "--upsert",
67
+ help="Return existing if name exists",
68
+ ),
69
+ escape_jinja: bool = typer.Option(
70
+ False,
71
+ "--escape-jinja",
72
+ help="Escape Jinja syntax as literals",
73
+ ),
74
+ ) -> None:
75
+ """Create a new template.
76
+
77
+ Examples:
78
+ ai templates create -n my-template --type system_instruction -V private -f template.jinja2 -t "email"
79
+ ai templates create -n greeting --type fragment -V private -c "Hello, {{ name }}!" -t "greeting"
80
+ ai tpl create -n email.header --type fragment -V organization -f header.jinja2 -d "Email header" -t "email,header"
81
+ """
82
+ require_one_of(("--file", content_file), ("--content", content))
83
+
84
+ _execute_create_from_flags(
85
+ name=name,
86
+ content_type=content_type,
87
+ visibility=visibility,
88
+ content_file=content_file,
89
+ content=content,
90
+ description=description,
91
+ tags=tags,
92
+ upsert=upsert,
93
+ escape_jinja=escape_jinja,
94
+ )
95
+
96
+
97
+ @async_command
98
+ async def _execute_create(request: CreateTemplateRequest) -> None:
99
+ """Execute the template creation with the given request."""
100
+ async with authenticated_client() as (_config, client):
101
+ response = await client.create_template(request)
102
+
103
+ present_template_create_success(response)
104
+
105
+
106
+ def _execute_create_from_flags(
107
+ name: str,
108
+ content_type: str,
109
+ visibility: str,
110
+ content_file: Optional[Path],
111
+ content: Optional[str],
112
+ description: Optional[str],
113
+ tags: str,
114
+ upsert: bool,
115
+ escape_jinja: bool,
116
+ ) -> None:
117
+ """Build and execute template creation from command flags."""
118
+ # Resolve @file references in content
119
+ try:
120
+ content = resolve_content(content)
121
+ except FileContentError as e:
122
+ raise typer.BadParameter(str(e))
123
+
124
+ # Validate enums
125
+ content_type_enum = validate_template_content_type(content_type)
126
+ visibility_enum = validate_visibility(visibility)
127
+
128
+ # Get content from file or inline
129
+ if content_file:
130
+ template_content = content_file.read_text()
131
+ else:
132
+ template_content = content or ""
133
+
134
+ if not template_content.strip():
135
+ raise typer.BadParameter("Template content cannot be empty")
136
+
137
+ # Parse tags
138
+ tag_paths = parse_tags_required(tags)
139
+
140
+ # Build request
141
+ request = CreateTemplateRequest(
142
+ name=name,
143
+ content_type=content_type_enum,
144
+ visibility=visibility_enum,
145
+ initial_content=template_content,
146
+ tag_paths=tag_paths,
147
+ description=description,
148
+ upsert=upsert,
149
+ escape_jinja=escape_jinja,
150
+ )
151
+
152
+ _execute_create(request)
@@ -0,0 +1,86 @@
1
+ """Presenter for template creation output."""
2
+
3
+ from rich.panel import Panel
4
+ from rich.table import Table
5
+ from rich.text import Text
6
+
7
+ from cli.infrastructure.formatting.fields import (
8
+ format_datetime,
9
+ format_optional,
10
+ format_uuid,
11
+ )
12
+ from cli.infrastructure.output import OutputService
13
+ from alloy_runtime_types.dtos.templates import CreateTemplateResponse
14
+
15
+
16
+ def present_template_create_success(response: CreateTemplateResponse) -> None:
17
+ """Present successful template creation.
18
+
19
+ Args:
20
+ response: Template creation response from server
21
+ """
22
+ output = OutputService.get()
23
+
24
+ template = response.template
25
+ version = response.version
26
+ dependencies = response.dependencies
27
+
28
+ output.success("Template created successfully")
29
+
30
+ # Build a table for template display
31
+ table = Table(show_header=False, box=None, padding=(0, 1))
32
+ table.add_column("Field", style="dim")
33
+ table.add_column("Value")
34
+
35
+ # Template info
36
+ table.add_row("ID", format_uuid(template.id, short=False))
37
+ table.add_row("Name", template.name)
38
+ table.add_row("Content Type", template.content_type_id)
39
+ table.add_row("Visibility", template.visibility_id)
40
+ table.add_row("Description", format_optional(template.description))
41
+
42
+ # Version info
43
+ table.add_row("Version", str(version.version))
44
+ table.add_row("Version ID", format_uuid(version.id, short=True))
45
+ table.add_row("Content Length", f"{len(version.content)} chars")
46
+
47
+ # Tags
48
+ if template.tags:
49
+ tag_str = ", ".join(t.tag_path for t in template.tags)
50
+ table.add_row("Tags", tag_str)
51
+ else:
52
+ table.add_row("Tags", "(none)")
53
+
54
+ # Dependencies
55
+ if dependencies:
56
+ dep_str = ", ".join(d.child_template_name for d in dependencies)
57
+ table.add_row("Dependencies", dep_str)
58
+ else:
59
+ table.add_row("Dependencies", "(none)")
60
+
61
+ # Ownership
62
+ table.add_row(
63
+ "Organization ID",
64
+ format_optional(template.organization_id, lambda x: format_uuid(x, short=True)),
65
+ )
66
+ table.add_row(
67
+ "User ID",
68
+ format_optional(template.user_id, lambda x: format_uuid(x, short=True)),
69
+ )
70
+ table.add_row("Created At", format_datetime(template.created_at))
71
+
72
+ panel = Panel(table, title=f"Template: {template.name}", border_style="green")
73
+ output.console.print(panel)
74
+
75
+ # Show content preview
76
+ if version.content:
77
+ content_preview = version.content
78
+ if len(content_preview) > 500:
79
+ content_preview = content_preview[:500] + "\n... (truncated)"
80
+
81
+ content_panel = Panel(
82
+ Text(content_preview, style="dim"),
83
+ title="Content Preview",
84
+ border_style="blue",
85
+ )
86
+ output.console.print(content_panel)
File without changes
@@ -0,0 +1,47 @@
1
+ """Templates delete command implementation."""
2
+
3
+ import typer
4
+
5
+ from cli.commands.templates.delete.presenter import present_delete_result
6
+ from cli.infrastructure.command import async_command, authenticated_client
7
+ from cli.infrastructure.console import Confirm
8
+
9
+
10
+ def templates_delete_command(
11
+ template: str = typer.Argument(
12
+ ...,
13
+ help="Template name or UUID",
14
+ ),
15
+ yes: bool = typer.Option(
16
+ False,
17
+ "-y",
18
+ "--yes",
19
+ help="Skip confirmation",
20
+ ),
21
+ ) -> None:
22
+ """Delete a template.
23
+
24
+ Permanently removes the template and all versions.
25
+ Templates referenced by others cannot be deleted.
26
+
27
+ Examples:
28
+ ai templates delete my-template
29
+ ai tpl delete email.welcome -y
30
+ """
31
+ _execute_delete(template_identifier=template, skip_confirm=yes)
32
+
33
+
34
+ @async_command
35
+ async def _execute_delete(template_identifier: str, skip_confirm: bool) -> None:
36
+ """Execute delete template operation."""
37
+ if not skip_confirm:
38
+ confirmed = Confirm.ask(
39
+ f"[yellow]Delete template '{template_identifier}'?[/yellow] This cannot be undone"
40
+ )
41
+ if not confirmed:
42
+ raise typer.Abort()
43
+
44
+ async with authenticated_client() as (_config, client):
45
+ response = await client.delete_template(template_identifier)
46
+
47
+ present_delete_result(response)
@@ -0,0 +1,16 @@
1
+ """Presenter for template delete command output."""
2
+
3
+ from cli.infrastructure.output import OutputService
4
+ from alloy_runtime_types.dtos.templates import DeleteTemplateResponse
5
+
6
+
7
+ def present_delete_result(response: DeleteTemplateResponse) -> None:
8
+ """Present template deletion result.
9
+
10
+ Args:
11
+ response: DeleteTemplateResponse from server
12
+ """
13
+ output = OutputService.get()
14
+ deleted = response.deleted_template
15
+
16
+ output.success(f"Template '{deleted.name}' deleted successfully")
File without changes
@@ -0,0 +1,52 @@
1
+ """Templates get command implementation."""
2
+
3
+ from typing import Optional
4
+
5
+ import typer
6
+
7
+ from cli.commands.templates.get.presenter import present_template_details
8
+ from cli.infrastructure.command import async_command, authenticated_client
9
+
10
+
11
+ def templates_get_command(
12
+ template: str = typer.Argument(
13
+ ...,
14
+ help="Template name or UUID",
15
+ ),
16
+ version: Optional[int] = typer.Option(
17
+ None,
18
+ "--version",
19
+ min=1,
20
+ help="Specific version number",
21
+ ),
22
+ full: bool = typer.Option(
23
+ False,
24
+ "--full",
25
+ help="Show full content (no truncation)",
26
+ ),
27
+ copy: bool = typer.Option(
28
+ False,
29
+ "--copy",
30
+ help="Copy content to clipboard",
31
+ ),
32
+ ) -> None:
33
+ """Get template details.
34
+
35
+ Examples:
36
+ ai templates get my-template
37
+ ai tpl get email.welcome --version 2
38
+ ai tpl get my-template --full
39
+ ai tpl get my-template --copy
40
+ """
41
+ _execute_get(template_identifier=template, version=version, full=full, copy=copy)
42
+
43
+
44
+ @async_command
45
+ async def _execute_get(
46
+ template_identifier: str, version: Optional[int], full: bool, copy: bool
47
+ ) -> None:
48
+ """Execute get template operation."""
49
+ async with authenticated_client() as (_config, client):
50
+ response = await client.get_template(template_identifier, version)
51
+
52
+ present_template_details(response, full=full, copy=copy)