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,233 @@
1
+ """Presenter for template get command output."""
2
+
3
+ import pyperclip
4
+ from rich.console import Console
5
+ from rich.panel import Panel
6
+ from rich.table import Table
7
+ from rich.text import Text
8
+
9
+ from cli.infrastructure.formatting.fields import (
10
+ format_datetime,
11
+ format_optional,
12
+ format_uuid,
13
+ )
14
+ from cli.infrastructure.output import OutputService
15
+ from alloy_runtime_types.dtos.templates import (
16
+ GetTemplateResponse,
17
+ TagResponse,
18
+ TemplateDependencyResponse,
19
+ TemplateVersionResponse,
20
+ )
21
+
22
+
23
+ def _format_tags(tags: list[TagResponse]) -> str:
24
+ """Format tags for display.
25
+
26
+ Args:
27
+ tags: List of tag responses
28
+
29
+ Returns:
30
+ Formatted tags string or "(none)" if empty
31
+ """
32
+ if not tags:
33
+ return "(none)"
34
+ return ", ".join(t.tag_path for t in tags)
35
+
36
+
37
+ def _format_dependencies(dependencies: list[TemplateDependencyResponse]) -> str:
38
+ """Format dependencies for display.
39
+
40
+ Args:
41
+ dependencies: List of dependency responses
42
+
43
+ Returns:
44
+ Formatted dependencies string or "(none)" if empty
45
+ """
46
+ if not dependencies:
47
+ return "(none)"
48
+ return ", ".join(d.child_template_name for d in dependencies)
49
+
50
+
51
+ def _format_variables(variables: list[str]) -> str:
52
+ """Format required variables for display.
53
+
54
+ Args:
55
+ variables: List of variable names
56
+
57
+ Returns:
58
+ Formatted variables string or "(none)" if empty
59
+ """
60
+ if not variables:
61
+ return "(none)"
62
+ return ", ".join(variables)
63
+
64
+
65
+ def _truncate_content(content: str, max_length: int = 500) -> str:
66
+ """Truncate content for preview display.
67
+
68
+ Args:
69
+ content: Content string to truncate
70
+ max_length: Maximum length before truncation
71
+
72
+ Returns:
73
+ Truncated content with indicator if truncated
74
+ """
75
+ if len(content) <= max_length:
76
+ return content
77
+ return content[:max_length] + "\n... (truncated)"
78
+
79
+
80
+ def _copy_to_clipboard(content: str, console: Console) -> bool:
81
+ """Copy content to clipboard.
82
+
83
+ Args:
84
+ content: Text to copy
85
+ console: Console for output messages
86
+
87
+ Returns:
88
+ True if successful, False otherwise
89
+ """
90
+ try:
91
+ pyperclip.copy(content)
92
+ console.print("[green]✓[/green] Content copied to clipboard")
93
+ return True
94
+ except pyperclip.PyperclipException as e:
95
+ console.print(f"[red]✗[/red] Failed to copy to clipboard: {e}")
96
+ return False
97
+
98
+
99
+ def present_template_details(
100
+ response: GetTemplateResponse, full: bool = False, copy: bool = False
101
+ ) -> None:
102
+ """Present template details with Rich formatting.
103
+
104
+ Args:
105
+ response: GetTemplateResponse from server
106
+ full: Whether to print full content instead of preview
107
+ copy: Whether to copy content to clipboard
108
+ """
109
+ output = OutputService.get()
110
+ template = response.template
111
+ versions = response.versions
112
+ dependencies = response.dependencies
113
+
114
+ # Find latest version for required variables
115
+ latest_version = next((v for v in versions if v.is_latest), None)
116
+ required_variables = latest_version.required_variables if latest_version else []
117
+
118
+ # Build metadata table
119
+ metadata_table = Table(show_header=False, box=None, padding=(0, 1))
120
+ metadata_table.add_column("Field", style="dim")
121
+ metadata_table.add_column("Value")
122
+
123
+ metadata_table.add_row("ID", format_uuid(template.id, short=False))
124
+ metadata_table.add_row("Name", template.name)
125
+ metadata_table.add_row("Content Type", template.content_type_id)
126
+ metadata_table.add_row("Visibility", template.visibility_id)
127
+ metadata_table.add_row("Description", format_optional(template.description))
128
+ metadata_table.add_row("Tags", _format_tags(template.tags))
129
+ metadata_table.add_row("Dependencies", _format_dependencies(dependencies))
130
+ metadata_table.add_row("Required Variables", _format_variables(required_variables))
131
+ metadata_table.add_row(
132
+ "Organization ID",
133
+ format_optional(template.organization_id, lambda x: format_uuid(x, short=True)),
134
+ )
135
+ metadata_table.add_row(
136
+ "User ID",
137
+ format_optional(template.user_id, lambda x: format_uuid(x, short=True)),
138
+ )
139
+ metadata_table.add_row("Created At", format_datetime(template.created_at))
140
+ metadata_table.add_row("Updated At", format_datetime(template.updated_at))
141
+
142
+ # Display metadata panel
143
+ metadata_panel = Panel(
144
+ metadata_table,
145
+ title=f"Template: {template.name}",
146
+ border_style="green",
147
+ )
148
+ output.console.print(metadata_panel)
149
+
150
+ # Build versions table
151
+ if versions:
152
+ _present_versions_table(output, versions)
153
+
154
+ # Handle content display based on flags
155
+ if latest_version and latest_version.content:
156
+ content = latest_version.content
157
+
158
+ # Copy to clipboard if requested
159
+ if copy:
160
+ _copy_to_clipboard(content, output.console)
161
+
162
+ # Show full content or preview
163
+ if full:
164
+ _present_full_content(output, latest_version)
165
+ else:
166
+ _present_content_preview(output, latest_version)
167
+
168
+
169
+ def _present_versions_table(
170
+ output: OutputService, versions: list[TemplateVersionResponse]
171
+ ) -> None:
172
+ """Present versions as a table.
173
+
174
+ Args:
175
+ output: OutputService instance
176
+ versions: List of template versions
177
+ """
178
+ versions_table = Table(
179
+ title=f"Versions ({len(versions)})",
180
+ show_header=True,
181
+ header_style="bold",
182
+ )
183
+ versions_table.add_column("Version", justify="right")
184
+ versions_table.add_column("Latest")
185
+ versions_table.add_column("Content Length", justify="right")
186
+ versions_table.add_column("Variables")
187
+ versions_table.add_column("Created At")
188
+
189
+ for v in versions:
190
+ versions_table.add_row(
191
+ f"v{v.version}",
192
+ "Yes" if v.is_latest else "-",
193
+ f"{len(v.content)} chars",
194
+ _format_variables(v.required_variables) if v.is_latest else "-",
195
+ format_datetime(v.created_at),
196
+ )
197
+
198
+ output.console.print(versions_table)
199
+
200
+
201
+ def _present_content_preview(
202
+ output: OutputService, version: TemplateVersionResponse
203
+ ) -> None:
204
+ """Present content preview for a version.
205
+
206
+ Args:
207
+ output: OutputService instance
208
+ version: Template version to preview
209
+ """
210
+ content_preview = _truncate_content(version.content)
211
+ content_panel = Panel(
212
+ Text(content_preview, style="dim"),
213
+ title=f"Content Preview (v{version.version})",
214
+ border_style="blue",
215
+ )
216
+ output.console.print(content_panel)
217
+
218
+
219
+ def _present_full_content(
220
+ output: OutputService, version: TemplateVersionResponse
221
+ ) -> None:
222
+ """Present full content for a version.
223
+
224
+ Args:
225
+ output: OutputService instance
226
+ version: Template version to display
227
+ """
228
+ content_panel = Panel(
229
+ Text(version.content),
230
+ title=f"Content (v{version.version}) - {len(version.content)} chars",
231
+ border_style="blue",
232
+ )
233
+ output.console.print(content_panel)
@@ -0,0 +1,32 @@
1
+ """Templates get_by_version command implementation."""
2
+
3
+ from uuid import UUID
4
+
5
+ import typer
6
+
7
+ from cli.commands.templates.get_by_version.presenter import present_template_details
8
+ from cli.commands.flag_utils import validate_uuid
9
+ from cli.infrastructure.command import async_command, authenticated_client
10
+
11
+
12
+ def templates_get_by_version_command(
13
+ version_id: str = typer.Argument(
14
+ ...,
15
+ help="Template version UUID",
16
+ ),
17
+ ) -> None:
18
+ """Get a template by its version ID.
19
+
20
+ Examples:
21
+ ai templates get-by-version 123e4567-89ab-cdef-0123-456789abcdef
22
+ """
23
+ version_uuid = validate_uuid(version_id, "template version")
24
+ _execute_get(version_id=version_uuid)
25
+
26
+
27
+ @async_command
28
+ async def _execute_get(version_id: UUID) -> None:
29
+ async with authenticated_client() as (_config, client):
30
+ response = await client.get_template_by_version(version_id)
31
+
32
+ present_template_details(response)
@@ -0,0 +1,30 @@
1
+ """Presenter for templates get_by_version command output."""
2
+
3
+ from rich.table import Table
4
+
5
+ from cli.infrastructure.output import OutputService
6
+ from alloy_runtime_types.dtos.templates import GetTemplateResponse
7
+
8
+
9
+ def present_template_details(response: GetTemplateResponse) -> None:
10
+ output = OutputService.get()
11
+
12
+ output.success(f"Retrieved template: {response.template.name}")
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.template.id))
19
+ table.add_row("Name", response.template.name)
20
+ table.add_row("Description", response.template.description or "-")
21
+ table.add_row("Content Type", response.template.content_type_id)
22
+ table.add_row("Visibility", response.template.visibility_id)
23
+ table.add_row(
24
+ "Tags",
25
+ ", ".join(t.tag_path for t in response.template.tags)
26
+ if response.template.tags
27
+ else "-",
28
+ )
29
+
30
+ output.console.print(table)
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,102 @@
1
+ """Templates list command implementation."""
2
+
3
+ from typing import Optional
4
+
5
+ import typer
6
+
7
+ from cli.commands.flag_utils import validate_template_content_type, validate_visibility
8
+ from cli.commands.templates.list.presenter import present_templates_list
9
+ from cli.infrastructure.command import async_command, authenticated_client
10
+ from alloy_runtime_types.enums.template_enums import (
11
+ TemplateContentType,
12
+ TemplateVisibility,
13
+ )
14
+
15
+
16
+ def templates_list_command(
17
+ search: Optional[str] = typer.Option(
18
+ None,
19
+ "-s",
20
+ "--search",
21
+ help="Fuzzy search terms",
22
+ ),
23
+ content_type: Optional[str] = typer.Option(
24
+ None,
25
+ "--type",
26
+ help="Filter by type: system_instruction, user_message, fragment",
27
+ ),
28
+ visibility: Optional[str] = typer.Option(
29
+ None,
30
+ "-V",
31
+ "--visibility",
32
+ help="Filter by: private, organization, public",
33
+ ),
34
+ tag_path: Optional[str] = typer.Option(
35
+ None,
36
+ "-t",
37
+ "--tag",
38
+ help="Filter by tag pattern (e.g., '*.email.*')",
39
+ ),
40
+ limit: int = typer.Option(
41
+ 50,
42
+ "-l",
43
+ "--limit",
44
+ min=1,
45
+ max=100,
46
+ help="Max results",
47
+ ),
48
+ cursor: Optional[str] = typer.Option(
49
+ None,
50
+ "--cursor",
51
+ help="Pagination cursor",
52
+ ),
53
+ ) -> None:
54
+ """List templates.
55
+
56
+ Examples:
57
+ ai templates list
58
+ ai tpl list -s "email newsletter"
59
+ ai tpl list --type system_instruction
60
+ ai tpl list -V organization -t "*.email.*"
61
+ ai tpl list -l 20
62
+ """
63
+ # Parse and validate enums
64
+ content_type_enum: Optional[TemplateContentType] = None
65
+ if content_type:
66
+ content_type_enum = validate_template_content_type(content_type)
67
+
68
+ visibility_enum: Optional[TemplateVisibility] = None
69
+ if visibility:
70
+ visibility_enum = validate_visibility(visibility)
71
+
72
+ _execute_list(
73
+ search=search,
74
+ content_type=content_type_enum,
75
+ visibility=visibility_enum,
76
+ tag_path=tag_path,
77
+ limit=limit,
78
+ cursor=cursor,
79
+ )
80
+
81
+
82
+ @async_command
83
+ async def _execute_list(
84
+ search: Optional[str],
85
+ content_type: Optional[TemplateContentType],
86
+ visibility: Optional[TemplateVisibility],
87
+ tag_path: Optional[str],
88
+ limit: int,
89
+ cursor: Optional[str],
90
+ ) -> None:
91
+ """Execute list templates operation."""
92
+ async with authenticated_client() as (_config, client):
93
+ response = await client.list_templates(
94
+ search=search,
95
+ content_type=content_type,
96
+ visibility=visibility,
97
+ tag_path=tag_path,
98
+ limit=limit,
99
+ cursor=cursor,
100
+ )
101
+
102
+ present_templates_list(response)
@@ -0,0 +1,93 @@
1
+ """Presenter for templates list command output."""
2
+
3
+ from alloy_runtime_types.dtos.templates import ListTemplatesResponse, TagResponse
4
+
5
+ from cli.infrastructure.output import OutputService
6
+ from cli.infrastructure.renderers.list_renderer import ColumnConfig
7
+
8
+
9
+ def _format_tags(tags: list[TagResponse]) -> str:
10
+ """Format tags for display, truncating if too many.
11
+
12
+ Args:
13
+ tags: List of tag responses
14
+
15
+ Returns:
16
+ Formatted tags string
17
+ """
18
+ if not tags:
19
+ return "-"
20
+ tag_paths = [t.tag_path for t in tags[:3]]
21
+ result = ", ".join(tag_paths)
22
+ if len(tags) > 3:
23
+ result += f" (+{len(tags) - 3})"
24
+ return result
25
+
26
+
27
+ def present_templates_list(response: ListTemplatesResponse) -> None:
28
+ """Present list of templates with Rich table formatting.
29
+
30
+ Args:
31
+ response: List templates response from server
32
+ """
33
+ output = OutputService.get()
34
+
35
+ if not response.templates:
36
+ output.info("No templates found")
37
+ return
38
+
39
+ # Define table columns with compact layout configuration
40
+ # Line 1 (primary): ID, type, visibility, version - machine-readable data
41
+ # Line 2 (detail): Name, tags - human-readable content
42
+ columns = [
43
+ ColumnConfig(
44
+ source_field="id",
45
+ header_label="UUID",
46
+ compact_line=1,
47
+ compact_style="cyan",
48
+ ),
49
+ ColumnConfig(
50
+ source_field="content_type_id",
51
+ header_label="Type",
52
+ compact_line=1,
53
+ compact_style="magenta",
54
+ ),
55
+ ColumnConfig(
56
+ source_field="visibility_id",
57
+ header_label="Visibility",
58
+ compact_line=1,
59
+ compact_style="dim",
60
+ ),
61
+ ColumnConfig(
62
+ source_field="latest_version_number",
63
+ header_label="Version",
64
+ formatter=lambda x: f"v{x}" if x else "-",
65
+ align="right",
66
+ compact_line=1,
67
+ compact_style="yellow",
68
+ ),
69
+ ColumnConfig(
70
+ source_field="name",
71
+ header_label="Name",
72
+ compact_line=2,
73
+ compact_style="white bold",
74
+ ),
75
+ ColumnConfig(
76
+ source_field="tags",
77
+ header_label="Tags",
78
+ formatter=_format_tags,
79
+ compact_line=2,
80
+ compact_style="dim italic",
81
+ ),
82
+ ]
83
+
84
+ # Render table
85
+ output.table(
86
+ items=response.templates, # type: ignore[arg-type]
87
+ title=f"Templates ({response.total_count})",
88
+ columns=columns,
89
+ )
90
+
91
+ # Show pagination info if there's a next page
92
+ if response.cursor:
93
+ output.status(f"Next page: ai templates list --cursor '{response.cursor}'")
File without changes
@@ -0,0 +1,115 @@
1
+ """Template render command implementation."""
2
+
3
+ from typing import Annotated, Any, Optional
4
+
5
+ import typer
6
+
7
+ from cli.commands.flag_utils import validate_output_mode
8
+ from cli.commands.templates.render.presenter import present_render_result
9
+ from cli.infrastructure.command import async_command, authenticated_client
10
+ from cli.infrastructure.kv_parser import parse_kv_pairs
11
+ from alloy_runtime_types.dtos.templates import RenderTemplateRequest
12
+
13
+
14
+ def templates_render_command(
15
+ template: str = typer.Option(
16
+ ...,
17
+ "-T",
18
+ "--template",
19
+ help="Template name or UUID",
20
+ ),
21
+ variables: Annotated[
22
+ Optional[list[str]],
23
+ typer.Option(
24
+ "-v",
25
+ "--var",
26
+ help="Variable (key=value or key:=json). Repeatable.",
27
+ ),
28
+ ] = None,
29
+ output: str = typer.Option(
30
+ "console",
31
+ "-o",
32
+ "--output",
33
+ help="Output: console, clipboard, file, editor",
34
+ ),
35
+ output_file: Optional[str] = typer.Option(
36
+ None,
37
+ "-O",
38
+ "--output-file",
39
+ help="Output file path (for --output file)",
40
+ ),
41
+ print_escaped: bool = typer.Option(
42
+ False,
43
+ "--print-escaped",
44
+ help="Print remaining Jinja syntax (from raw blocks)",
45
+ ),
46
+ ) -> None:
47
+ """Render a template with variables.
48
+
49
+ Examples:
50
+ ai templates render -T my-template -v name=World -v greeting=Hello
51
+ ai tpl render -T email.welcome -v user=John -o clipboard
52
+ ai tpl render -T my-template -v count:=5 -v active:=true
53
+ ai tpl render -T my-template -o file -O output.txt
54
+ """
55
+ validate_output_mode(
56
+ output, output_file, ("console", "clipboard", "file", "editor")
57
+ )
58
+
59
+ variables_dict = parse_kv_pairs(variables)
60
+
61
+ _execute_render_from_flags(
62
+ template_identifier=template,
63
+ variables_dict=variables_dict,
64
+ output_mode=output,
65
+ output_file=output_file,
66
+ print_escaped=print_escaped,
67
+ )
68
+
69
+
70
+ def _execute_render_from_flags(
71
+ template_identifier: str,
72
+ variables_dict: dict[str, Any] | None,
73
+ output_mode: str,
74
+ output_file: str | None = None,
75
+ print_escaped: bool = False,
76
+ ) -> None:
77
+ """Execute template rendering from command flags."""
78
+ _execute_render(
79
+ template_identifier=template_identifier,
80
+ variables=variables_dict,
81
+ output_mode=output_mode,
82
+ output_file=output_file,
83
+ print_escaped=print_escaped,
84
+ )
85
+
86
+
87
+ @async_command
88
+ async def _execute_render(
89
+ template_identifier: str,
90
+ variables: dict[str, Any] | None,
91
+ output_mode: str,
92
+ output_file: str | None = None,
93
+ print_escaped: bool = False,
94
+ ) -> None:
95
+ """Execute the template render API call."""
96
+ from alloy_runtime_sdk.exceptions.errors import NotFoundError
97
+
98
+ async with authenticated_client() as (_config, client):
99
+ try:
100
+ template_data = await client.get_template(template_identifier)
101
+ except NotFoundError:
102
+ raise typer.BadParameter(
103
+ f"Template '{template_identifier}' not found. Use 'ai templates list' to see available templates."
104
+ )
105
+
106
+ request = RenderTemplateRequest(variables=variables or {})
107
+ response = await client.render_template(template_data.template.id, request)
108
+
109
+ present_render_result(
110
+ response,
111
+ template_data.template.name,
112
+ output_mode,
113
+ output_file=output_file,
114
+ print_escaped=print_escaped,
115
+ )