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,53 @@
1
+ """Presenter for schema update output."""
2
+
3
+ from cli.infrastructure.formatting.fields import (
4
+ format_datetime,
5
+ format_optional,
6
+ format_uuid,
7
+ )
8
+ from cli.infrastructure.output import OutputService
9
+ from cli.infrastructure.renderers.entity_renderer import FieldConfig
10
+ from alloy_runtime_types.dtos.schemas import UpdateSchemaResponse
11
+
12
+
13
+ def _derive_scope(response: UpdateSchemaResponse) -> str:
14
+ """Derive scope string from organization_id and user_id fields."""
15
+ if response.organization_id is not None and response.user_id is None:
16
+ return "organization"
17
+ elif response.user_id is not None:
18
+ return "user"
19
+ else:
20
+ return "global"
21
+
22
+
23
+ def present_schema_update_success(response: UpdateSchemaResponse) -> None:
24
+ """Present successful schema update.
25
+
26
+ Args:
27
+ response: Schema update response from server
28
+ """
29
+ output = OutputService.get()
30
+ output.success("Schema updated successfully")
31
+
32
+ fields = [
33
+ FieldConfig("id", "ID", lambda v: format_uuid(v, short=False)),
34
+ FieldConfig("schema_name", "Name"),
35
+ FieldConfig("schema_format_id", "Format"),
36
+ FieldConfig("version", "Version", str),
37
+ FieldConfig("description", "Description", format_optional),
38
+ FieldConfig("scope", "Scope", lambda _: _derive_scope(response)),
39
+ FieldConfig(
40
+ "organization_id",
41
+ "Organization ID",
42
+ lambda v: format_optional(v, lambda x: format_uuid(x, short=True)),
43
+ ),
44
+ FieldConfig(
45
+ "user_id",
46
+ "User ID",
47
+ lambda v: format_optional(v, lambda x: format_uuid(x, short=True)),
48
+ ),
49
+ FieldConfig("is_latest", "Is Latest", str),
50
+ FieldConfig("created_at", "Created At", format_datetime),
51
+ ]
52
+
53
+ output.entity(response, f"Schema: {response.schema_name}", fields)
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1,47 @@
1
+ """Session delete command implementation."""
2
+
3
+ from uuid import UUID
4
+
5
+ import typer
6
+
7
+ from cli.commands.flag_utils import validate_uuid
8
+ from cli.commands.sessions.delete.presenter import present_delete_result
9
+ from cli.infrastructure.command import async_command, authenticated_client
10
+ from cli.infrastructure.console import Confirm
11
+
12
+
13
+ def sessions_delete_command(
14
+ session_id: str = typer.Argument(
15
+ ...,
16
+ help="Session UUID",
17
+ ),
18
+ yes: bool = typer.Option(
19
+ False,
20
+ "-y",
21
+ "--yes",
22
+ help="Skip confirmation",
23
+ ),
24
+ ) -> None:
25
+ """Delete a chat session and all its messages.
26
+
27
+ Examples:
28
+ ai sessions delete 123e4567-89ab-cdef-0123-456789abcdef
29
+ ai sessions delete 123e4567-89ab... -y
30
+ """
31
+ session_uuid = validate_uuid(session_id, "session")
32
+
33
+ if not yes:
34
+ confirmed = Confirm.ask(f"[yellow]Delete session {session_id}?[/yellow]")
35
+ if not confirmed:
36
+ raise typer.Abort()
37
+
38
+ _execute_delete(session_id=session_uuid)
39
+
40
+
41
+ @async_command
42
+ async def _execute_delete(session_id: UUID) -> None:
43
+ """Execute delete session operation."""
44
+ async with authenticated_client() as (_config, client):
45
+ response = await client.delete_session(session_id)
46
+
47
+ present_delete_result(response)
@@ -0,0 +1,10 @@
1
+ """Presenter for session delete command output."""
2
+
3
+ from cli.infrastructure.output import OutputService
4
+ from alloy_runtime_types.dtos.sessions import DeleteSessionResponse
5
+
6
+
7
+ def present_delete_result(response: DeleteSessionResponse) -> None:
8
+ """Present session deletion result."""
9
+ output = OutputService.get()
10
+ output.success(f"Deleted session {response.deleted_session.id}")
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1,42 @@
1
+ """Session get command implementation."""
2
+
3
+ from uuid import UUID
4
+
5
+ import typer
6
+
7
+ from cli.commands.flag_utils import validate_uuid
8
+ from cli.commands.sessions.get.presenter import present_session
9
+ from cli.infrastructure.command import async_command, authenticated_client
10
+
11
+
12
+ def sessions_get_command(
13
+ session_id: str = typer.Argument(
14
+ ...,
15
+ help="Session UUID",
16
+ ),
17
+ limit: int = typer.Option(
18
+ 20,
19
+ "-l",
20
+ "--limit",
21
+ min=1,
22
+ max=100,
23
+ help="Max messages to include",
24
+ ),
25
+ ) -> None:
26
+ """Get details of a chat session.
27
+
28
+ Examples:
29
+ ai sessions get 123e4567-89ab-cdef-0123-456789abcdef
30
+ ai sessions get 123e4567-89ab... -l 50
31
+ """
32
+ session_uuid = validate_uuid(session_id, "session")
33
+ _execute_get(session_id=session_uuid, limit=limit)
34
+
35
+
36
+ @async_command
37
+ async def _execute_get(session_id: UUID, limit: int) -> None:
38
+ """Execute get session operation."""
39
+ async with authenticated_client() as (_config, client):
40
+ response = await client.get_session(session_id, limit=limit)
41
+
42
+ present_session(response)
@@ -0,0 +1,59 @@
1
+ """Presenter for session get command output."""
2
+
3
+ from rich.panel import Panel
4
+ from rich.table import Table
5
+
6
+ from alloy_runtime_types.dtos.sessions import SessionDetailResponse
7
+
8
+ from cli.infrastructure.output import OutputService
9
+
10
+
11
+ def _truncate(text: str | None, max_len: int = 200) -> str:
12
+ """Truncate text for display."""
13
+ if not text:
14
+ return "-"
15
+ if len(text) > max_len:
16
+ return text[: max_len - 3] + "..."
17
+ return text
18
+
19
+
20
+ def present_session(response: SessionDetailResponse) -> None:
21
+ """Present session details with Rich formatting."""
22
+ output = OutputService.get()
23
+
24
+ # Create session info table
25
+ table = Table(show_header=False, box=None, padding=(0, 2))
26
+ table.add_column("Field", style="cyan")
27
+ table.add_column("Value")
28
+
29
+ table.add_row("ID", str(response.id))
30
+ table.add_row("Name", response.name or "(unnamed)")
31
+ table.add_row("Message Count", str(response.total_messages))
32
+ table.add_row("Created", response.created_at.strftime("%Y-%m-%d %H:%M:%S"))
33
+
34
+ output.console.print(
35
+ Panel(table, title=f"Session: {response.name or str(response.id)}")
36
+ )
37
+
38
+ # Show recent messages if available
39
+ if response.messages:
40
+ output.info(f"\nRecent Messages ({len(response.messages)}):")
41
+ for msg in response.messages:
42
+ role_style = {
43
+ "user": "green",
44
+ "assistant": "blue",
45
+ "system": "yellow",
46
+ "tool": "magenta",
47
+ }.get(msg.role, "white")
48
+
49
+ # Get content preview
50
+ content_preview = "-"
51
+ if msg.content_parts:
52
+ first_part = msg.content_parts[0]
53
+ if first_part.content_text:
54
+ content_preview = _truncate(first_part.content_text, 100)
55
+
56
+ output.console.print(
57
+ f" [{role_style}]{msg.role}[/{role_style}] "
58
+ f"({msg.sequence_number}): {content_preview}"
59
+ )
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1,61 @@
1
+ """Sessions list command implementation."""
2
+
3
+ from typing import Optional
4
+
5
+ import typer
6
+
7
+ from cli.commands.sessions.list.presenter import present_sessions_list
8
+ from cli.infrastructure.command import async_command, authenticated_client
9
+
10
+
11
+ def sessions_list_command(
12
+ search: Optional[str] = typer.Option(
13
+ None,
14
+ "-s",
15
+ "--search",
16
+ help="Fuzzy search terms",
17
+ ),
18
+ named_only: bool = typer.Option(
19
+ False,
20
+ "--named-only",
21
+ help="Only show named sessions",
22
+ ),
23
+ limit: int = typer.Option(
24
+ 50,
25
+ "-l",
26
+ "--limit",
27
+ min=1,
28
+ max=100,
29
+ help="Max results",
30
+ ),
31
+ offset: int = typer.Option(
32
+ 0,
33
+ "--offset",
34
+ min=0,
35
+ help="Skip N results",
36
+ ),
37
+ ) -> None:
38
+ """List chat sessions accessible to you.
39
+
40
+ Examples:
41
+ ai sessions list
42
+ ai sessions list -s "research"
43
+ ai sessions list --named-only
44
+ """
45
+ _execute_list(search=search, named_only=named_only, limit=limit, offset=offset)
46
+
47
+
48
+ @async_command
49
+ async def _execute_list(
50
+ search: Optional[str], named_only: bool, limit: int, offset: int
51
+ ) -> None:
52
+ """Execute list sessions operation."""
53
+ async with authenticated_client() as (_config, client):
54
+ response = await client.list_sessions(
55
+ search=search,
56
+ named_only=named_only,
57
+ limit=limit,
58
+ offset=offset,
59
+ )
60
+
61
+ present_sessions_list(response)
@@ -0,0 +1,68 @@
1
+ """Presenter for sessions list command output."""
2
+
3
+ from alloy_runtime_types.dtos.sessions import ListSessionsResponse
4
+
5
+ from cli.infrastructure.output import OutputService
6
+ from cli.infrastructure.renderers.list_renderer import ColumnConfig
7
+
8
+
9
+ def _format_name(name: str | None) -> str:
10
+ """Format session name."""
11
+ if not name:
12
+ return "(unnamed)"
13
+ if len(name) > 50:
14
+ return name[:47] + "..."
15
+ return name
16
+
17
+
18
+ def present_sessions_list(response: ListSessionsResponse) -> None:
19
+ """Present list of sessions with Rich table formatting."""
20
+ output = OutputService.get()
21
+
22
+ if not response.sessions:
23
+ output.info("No sessions found")
24
+ return
25
+
26
+ columns = [
27
+ ColumnConfig(
28
+ source_field="id",
29
+ header_label="ID",
30
+ compact_line=1,
31
+ compact_style="cyan",
32
+ ),
33
+ ColumnConfig(
34
+ source_field="message_count",
35
+ header_label="Messages",
36
+ align="right",
37
+ formatter=lambda x: f"{x} msgs" if x else "0 msgs",
38
+ compact_line=1,
39
+ compact_style="green",
40
+ ),
41
+ ColumnConfig(
42
+ source_field="created_at",
43
+ header_label="Created",
44
+ formatter=lambda x: x.strftime("%Y-%m-%d %H:%M") if x else "-",
45
+ compact_line=1,
46
+ compact_style="blue",
47
+ ),
48
+ ColumnConfig(
49
+ source_field="name",
50
+ header_label="Name",
51
+ formatter=_format_name,
52
+ compact_line=2,
53
+ compact_style="white bold",
54
+ ),
55
+ ColumnConfig(
56
+ source_field="agent_name",
57
+ header_label="Agent",
58
+ formatter=lambda x: x or "-",
59
+ compact_line=2,
60
+ compact_style="dim",
61
+ ),
62
+ ]
63
+
64
+ output.table(
65
+ items=response.sessions, # type: ignore[arg-type]
66
+ title=f"Sessions ({response.total})",
67
+ columns=columns,
68
+ )
@@ -0,0 +1 @@
1
+ # Empty per project convention - import directly from submodules
@@ -0,0 +1,78 @@
1
+ """Session messages list command implementation."""
2
+
3
+ from typing import Optional
4
+ from uuid import UUID
5
+
6
+ import typer
7
+
8
+ from cli.commands.flag_utils import validate_uuid
9
+ from cli.commands.sessions.messages.presenter import present_messages_list
10
+ from cli.infrastructure.command import async_command, authenticated_client
11
+
12
+
13
+ def sessions_messages_command(
14
+ session_id: str = typer.Argument(
15
+ ...,
16
+ help="Session UUID",
17
+ ),
18
+ role: Optional[str] = typer.Option(
19
+ None,
20
+ "--role",
21
+ help="Filter by role (user, assistant, system, tool)",
22
+ ),
23
+ limit: int = typer.Option(
24
+ 50,
25
+ "-l",
26
+ "--limit",
27
+ min=1,
28
+ max=100,
29
+ help="Max results",
30
+ ),
31
+ offset: int = typer.Option(
32
+ 0,
33
+ "--offset",
34
+ min=0,
35
+ help="Skip N results",
36
+ ),
37
+ order: str = typer.Option(
38
+ "asc",
39
+ "--order",
40
+ help="Sort order (asc or desc)",
41
+ ),
42
+ ) -> None:
43
+ """List messages in a chat session.
44
+
45
+ Examples:
46
+ ai sessions messages 123e4567-89ab...
47
+ ai sessions messages 123e4567-89ab... --role assistant
48
+ ai sessions messages 123e4567-89ab... --order desc -l 10
49
+ """
50
+ session_uuid = validate_uuid(session_id, "session")
51
+ _execute_list(
52
+ session_id=session_uuid,
53
+ role=role,
54
+ limit=limit,
55
+ offset=offset,
56
+ order=order,
57
+ )
58
+
59
+
60
+ @async_command
61
+ async def _execute_list(
62
+ session_id: UUID,
63
+ role: Optional[str],
64
+ limit: int,
65
+ offset: int,
66
+ order: str,
67
+ ) -> None:
68
+ """Execute list messages operation."""
69
+ async with authenticated_client() as (_config, client):
70
+ response = await client.list_session_messages(
71
+ session_id,
72
+ role=role,
73
+ limit=limit,
74
+ offset=offset,
75
+ order=order,
76
+ )
77
+
78
+ present_messages_list(response)
@@ -0,0 +1,79 @@
1
+ """Presenter for session messages command output."""
2
+
3
+ from alloy_runtime_types.dtos.sessions import (
4
+ ListSessionMessagesResponse,
5
+ MessageResponse,
6
+ )
7
+
8
+ from cli.infrastructure.output import OutputService
9
+ from cli.infrastructure.renderers.list_renderer import ColumnConfig
10
+
11
+
12
+ def _format_content(msg: MessageResponse) -> str:
13
+ """Format message content for display."""
14
+ if not msg.content_parts:
15
+ return "-"
16
+ first_part = msg.content_parts[0]
17
+ text = first_part.content_text or ""
18
+ if len(text) > 80:
19
+ return text[:77] + "..."
20
+ return text or "-"
21
+
22
+
23
+ def present_messages_list(response: ListSessionMessagesResponse) -> None:
24
+ """Present list of messages with Rich table formatting."""
25
+ output = OutputService.get()
26
+
27
+ if not response.messages:
28
+ output.info("No messages found")
29
+ return
30
+
31
+ columns = [
32
+ ColumnConfig(
33
+ source_field="sequence_number",
34
+ header_label="#",
35
+ align="right",
36
+ compact_line=1,
37
+ compact_style="cyan",
38
+ ),
39
+ ColumnConfig(
40
+ source_field="role",
41
+ header_label="Role",
42
+ compact_line=1,
43
+ compact_style="yellow",
44
+ ),
45
+ ColumnConfig(
46
+ source_field="created_at",
47
+ header_label="Time",
48
+ formatter=lambda x: x.strftime("%H:%M:%S") if x else "-",
49
+ compact_line=1,
50
+ compact_style="blue",
51
+ ),
52
+ ColumnConfig(
53
+ source_field="id",
54
+ header_label="ID",
55
+ compact_line=2,
56
+ compact_style="dim",
57
+ ),
58
+ ]
59
+
60
+ output.table(
61
+ items=response.messages, # type: ignore[arg-type]
62
+ title=f"Messages ({response.total})",
63
+ columns=columns,
64
+ )
65
+
66
+ # Show content preview for each message
67
+ output.info("\nContent:")
68
+ for msg in response.messages:
69
+ role_style = {
70
+ "user": "green",
71
+ "assistant": "blue",
72
+ "system": "yellow",
73
+ "tool": "magenta",
74
+ }.get(msg.role, "white")
75
+
76
+ content = _format_content(msg)
77
+ output.console.print(
78
+ f" [{role_style}]{msg.sequence_number}. {msg.role}[/{role_style}]: {content}"
79
+ )