@scemoon/cdh 1.0.0

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 (528) hide show
  1. package/ai-dlc-skill/SKILL.md +75 -0
  2. package/ai-dlc-skill/agents/deliver-agent.md +24 -0
  3. package/ai-dlc-skill/agents/master.md +44 -0
  4. package/ai-dlc-skill/agents/plan-agent.md +23 -0
  5. package/ai-dlc-skill/agents/understand-agent.md +23 -0
  6. package/ai-dlc-skill/agents/verify-agent.md +27 -0
  7. package/ai-dlc-skill/architecture/project-structure.md +78 -0
  8. package/ai-dlc-skill/brownfield/README.md +30 -0
  9. package/ai-dlc-skill/brownfield/generate-context.sh +64 -0
  10. package/ai-dlc-skill/brownfield/scripts/deps.sh +27 -0
  11. package/ai-dlc-skill/brownfield/scripts/discover.sh +34 -0
  12. package/ai-dlc-skill/brownfield/scripts/extract-api.sh +45 -0
  13. package/ai-dlc-skill/components/backend.md +34 -0
  14. package/ai-dlc-skill/components/desktop.md +30 -0
  15. package/ai-dlc-skill/components/mya.md +29 -0
  16. package/ai-dlc-skill/components/native.md +30 -0
  17. package/ai-dlc-skill/components/tta.md +29 -0
  18. package/ai-dlc-skill/components/web.md +31 -0
  19. package/ai-dlc-skill/components/wxa.md +29 -0
  20. package/ai-dlc-skill/contracts/README.md +25 -0
  21. package/ai-dlc-skill/core/adaptive-flow.md +36 -0
  22. package/ai-dlc-skill/core/security.md +29 -0
  23. package/ai-dlc-skill/cross-tool/cline/export.sh +31 -0
  24. package/ai-dlc-skill/cross-tool/copilot/export.sh +47 -0
  25. package/ai-dlc-skill/cross-tool/cursor/export.sh +32 -0
  26. package/ai-dlc-skill/cross-tool/export.sh +22 -0
  27. package/ai-dlc-skill/cross-tool/onecode/config.yaml.tpl +17 -0
  28. package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +31 -0
  29. package/ai-dlc-skill/cross-tool/onecode/export.sh +48 -0
  30. package/ai-dlc-skill/phases/deliver/entry.md +26 -0
  31. package/ai-dlc-skill/phases/deliver/lifecycle.md +185 -0
  32. package/ai-dlc-skill/phases/deliver/prompt.md +40 -0
  33. package/ai-dlc-skill/phases/deliver/rules.md +61 -0
  34. package/ai-dlc-skill/phases/plan/entry.md +25 -0
  35. package/ai-dlc-skill/phases/plan/lifecycle.md +204 -0
  36. package/ai-dlc-skill/phases/plan/prompt.md +38 -0
  37. package/ai-dlc-skill/phases/plan/rules.md +25 -0
  38. package/ai-dlc-skill/phases/understand/entry.md +26 -0
  39. package/ai-dlc-skill/phases/understand/lifecycle.md +184 -0
  40. package/ai-dlc-skill/phases/understand/prompt.md +41 -0
  41. package/ai-dlc-skill/phases/understand/rules.md +37 -0
  42. package/ai-dlc-skill/phases/verify/entry.md +26 -0
  43. package/ai-dlc-skill/phases/verify/lifecycle.md +192 -0
  44. package/ai-dlc-skill/phases/verify/prompt.md +43 -0
  45. package/ai-dlc-skill/phases/verify/rules.md +73 -0
  46. package/ai-dlc-skill/practices/bdd.md +91 -0
  47. package/ai-dlc-skill/practices/sdd.md +84 -0
  48. package/ai-dlc-skill/practices/tdd.md +95 -0
  49. package/ai-dlc-skill/providers/README.md +114 -0
  50. package/ai-dlc-skill/providers/aliyun/deployment.yaml +66 -0
  51. package/ai-dlc-skill/providers/aliyun/preview.yaml +84 -0
  52. package/ai-dlc-skill/providers/aliyun/provider.yaml +160 -0
  53. package/ai-dlc-skill/providers/tcb/deployment.yaml +69 -0
  54. package/ai-dlc-skill/providers/tcb/preview.yaml +83 -0
  55. package/ai-dlc-skill/providers/tcb/provider.yaml +172 -0
  56. package/ai-dlc-skill/requirements.md +140 -0
  57. package/ai-dlc-skill/skill.yaml +147 -0
  58. package/ai-dlc-skill/templates/integration/CHANGELOG.md +41 -0
  59. package/ai-dlc-skill/templates/integration/asyncapi.yaml +43 -0
  60. package/ai-dlc-skill/templates/integration/contract-diff.md +63 -0
  61. package/ai-dlc-skill/templates/integration/contract-spec.md +49 -0
  62. package/ai-dlc-skill/templates/integration/openapi.yaml +18 -0
  63. package/ai-dlc-skill/templates/integration/runtime-contract.yaml +36 -0
  64. package/ai-dlc-skill/templates/plan/design.md +49 -0
  65. package/ai-dlc-skill/templates/plan/task-list.md +32 -0
  66. package/ai-dlc-skill/templates/project/README.md +127 -0
  67. package/ai-dlc-skill/templates/project/template.md +119 -0
  68. package/ai-dlc-skill/templates/understand/feature.feature +23 -0
  69. package/ai-dlc-skill/templates/understand/intent.md +29 -0
  70. package/ai-dlc-skill/templates/understand/spec-delta.md +47 -0
  71. package/ai-dlc-skill/templates/verify/test-unit.py +27 -0
  72. package/ai-dlc-skill/walkthrough/collect.sh +50 -0
  73. package/ai-dlc-skill/walkthrough/template.md +54 -0
  74. package/ai-dlc-skill/workflows/ai-dlc.yaml +110 -0
  75. package/ai-dlc-skill/workflows/deployment.yaml +199 -0
  76. package/cdh/__init__.py +0 -0
  77. package/cdh/__main__.py +4 -0
  78. package/cdh/__pycache__/__init__.cpython-313.pyc +0 -0
  79. package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
  80. package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
  81. package/cdh/__pycache__/scaffold.cpython-313.pyc +0 -0
  82. package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
  83. package/cdh/cli.py +361 -0
  84. package/cdh/scaffold.py +312 -0
  85. package/cli.js +2 -0
  86. package/onecode/__init__.py +1 -0
  87. package/onecode/__main__.py +4 -0
  88. package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
  89. package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
  90. package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
  91. package/onecode/__pycache__/config.cpython-314.pyc +0 -0
  92. package/onecode/__pycache__/config_screen.cpython-314.pyc +0 -0
  93. package/onecode/__pycache__/mock_data.cpython-314.pyc +0 -0
  94. package/onecode/agent/__init__.py +0 -0
  95. package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
  96. package/onecode/agent/__pycache__/cdh_agent_acp.cpython-313.pyc +0 -0
  97. package/onecode/agent/__pycache__/cdh_agent_acp.cpython-314.pyc +0 -0
  98. package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
  99. package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
  100. package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
  101. package/onecode/agent/__pycache__/harness_skill.cpython-314.pyc +0 -0
  102. package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
  103. package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
  104. package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
  105. package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
  106. package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
  107. package/onecode/agent/agents/__init__.py +29 -0
  108. package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  109. package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
  110. package/onecode/agent/agents/types.py +662 -0
  111. package/onecode/agent/attachments.py +113 -0
  112. package/onecode/agent/cdh_loader.py +262 -0
  113. package/onecode/agent/context.py +338 -0
  114. package/onecode/agent/engine.py +1894 -0
  115. package/onecode/agent/hooks.py +86 -0
  116. package/onecode/agent/onecode_agent_acp.py +2203 -0
  117. package/onecode/agent/permissions.py +151 -0
  118. package/onecode/agent/permissions_store.py +62 -0
  119. package/onecode/agent/session.py +186 -0
  120. package/onecode/agent/snapshot.py +145 -0
  121. package/onecode/agent/tools/__init__.py +17 -0
  122. package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  123. package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
  124. package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
  125. package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
  126. package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
  127. package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
  128. package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
  129. package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
  130. package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
  131. package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
  132. package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
  133. package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
  134. package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
  135. package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
  136. package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
  137. package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
  138. package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
  139. package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
  140. package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
  141. package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
  142. package/onecode/agent/tools/__pycache__/task_tools.cpython-314.pyc +0 -0
  143. package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
  144. package/onecode/agent/tools/agent_tools.py +134 -0
  145. package/onecode/agent/tools/apply_patch_tool.py +144 -0
  146. package/onecode/agent/tools/bash_tool.py +91 -0
  147. package/onecode/agent/tools/communication_tools.py +149 -0
  148. package/onecode/agent/tools/config_tool.py +130 -0
  149. package/onecode/agent/tools/cron_tools.py +179 -0
  150. package/onecode/agent/tools/errors.py +17 -0
  151. package/onecode/agent/tools/file_ops.py +187 -0
  152. package/onecode/agent/tools/file_tools.py +226 -0
  153. package/onecode/agent/tools/git_tools.py +88 -0
  154. package/onecode/agent/tools/lsp_tools.py +404 -0
  155. package/onecode/agent/tools/mcp_tools.py +129 -0
  156. package/onecode/agent/tools/permission_handler.py +46 -0
  157. package/onecode/agent/tools/permissions.py +77 -0
  158. package/onecode/agent/tools/protocol.py +20 -0
  159. package/onecode/agent/tools/registry.py +134 -0
  160. package/onecode/agent/tools/sandbox.py +264 -0
  161. package/onecode/agent/tools/schema_validation.py +100 -0
  162. package/onecode/agent/tools/skill_tools.py +52 -0
  163. package/onecode/agent/tools/task_tools.py +249 -0
  164. package/onecode/agent/tools/web_tools.py +170 -0
  165. package/onecode/builtin_skills/git/SKILL.md +64 -0
  166. package/onecode/builtin_skills/git/skill.yaml +7 -0
  167. package/onecode/builtin_skills/shell/SKILL.md +58 -0
  168. package/onecode/builtin_skills/shell/skill.yaml +8 -0
  169. package/onecode/cli.py +755 -0
  170. package/onecode/cloud/__init__.py +0 -0
  171. package/onecode/cloud/base.py +20 -0
  172. package/onecode/codebase/__init__.py +69 -0
  173. package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
  174. package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
  175. package/onecode/codebase/__pycache__/config.cpython-314.pyc +0 -0
  176. package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
  177. package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
  178. package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
  179. package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
  180. package/onecode/codebase/chunker.py +130 -0
  181. package/onecode/codebase/indexer.py +136 -0
  182. package/onecode/codebase/retriever.py +192 -0
  183. package/onecode/codebase/storage.py +130 -0
  184. package/onecode/codebase/tools.py +59 -0
  185. package/onecode/commands.py +276 -0
  186. package/onecode/config.py +285 -0
  187. package/onecode/config_screen.py +594 -0
  188. package/onecode/cron/__init__.py +3 -0
  189. package/onecode/lsp/__init__.py +3 -0
  190. package/onecode/mcp/__init__.py +4 -0
  191. package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
  192. package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
  193. package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
  194. package/onecode/mcp/client.py +193 -0
  195. package/onecode/mcp/manager.py +191 -0
  196. package/onecode/memory/__init__.py +95 -0
  197. package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  198. package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
  199. package/onecode/memory/__pycache__/offload.cpython-314.pyc +0 -0
  200. package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
  201. package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
  202. package/onecode/memory/__pycache__/symbolic.cpython-314.pyc +0 -0
  203. package/onecode/memory/backend.py +185 -0
  204. package/onecode/memory/offload.py +114 -0
  205. package/onecode/memory/pyramid.py +202 -0
  206. package/onecode/memory/recall.py +168 -0
  207. package/onecode/memory/symbolic.py +164 -0
  208. package/onecode/models/__init__.py +4 -0
  209. package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
  210. package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
  211. package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
  212. package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
  213. package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
  214. package/onecode/models/errors.py +94 -0
  215. package/onecode/models/messages.py +662 -0
  216. package/onecode/models/provider.py +450 -0
  217. package/onecode/models/providers/__init__.py +17 -0
  218. package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  219. package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
  220. package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
  221. package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
  222. package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
  223. package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
  224. package/onecode/models/providers/__pycache__/mock_provider.cpython-314.pyc +0 -0
  225. package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
  226. package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
  227. package/onecode/models/providers/anthropic_provider.py +224 -0
  228. package/onecode/models/providers/deepseek_provider.py +210 -0
  229. package/onecode/models/providers/glm_provider.py +154 -0
  230. package/onecode/models/providers/minimax_provider.py +154 -0
  231. package/onecode/models/providers/minimaxi_provider.py +363 -0
  232. package/onecode/models/providers/ollama_provider.py +96 -0
  233. package/onecode/models/providers/openai_provider.py +233 -0
  234. package/onecode/models/registry.py +212 -0
  235. package/onecode/server/__init__.py +3 -0
  236. package/onecode/server/app.py +224 -0
  237. package/onecode/skills/__init__.py +11 -0
  238. package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
  239. package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
  240. package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
  241. package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
  242. package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
  243. package/onecode/skills/__pycache__/manager.cpython-314.pyc +0 -0
  244. package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
  245. package/onecode/skills/argument_substitution.py +39 -0
  246. package/onecode/skills/create.py +56 -0
  247. package/onecode/skills/frontmatter.py +33 -0
  248. package/onecode/skills/loader.py +157 -0
  249. package/onecode/skills/manager.py +75 -0
  250. package/onecode/skills/model.py +43 -0
  251. package/onecode/storage/__init__.py +0 -0
  252. package/onecode/storage/activity.py +64 -0
  253. package/onecode/storage/project.py +54 -0
  254. package/onecode/storage/session.py +113 -0
  255. package/onecode/tasks/__init__.py +26 -0
  256. package/onecode/tasks/manager.py +219 -0
  257. package/onecode/tasks/models.py +240 -0
  258. package/onecode/trace/__init__.py +0 -0
  259. package/onecode/trace/tracer.py +174 -0
  260. package/onecode/utils/__init__.py +0 -0
  261. package/onecode/utils/helpers.py +20 -0
  262. package/onecode-cli.js +2 -0
  263. package/package.json +32 -0
  264. package/pyproject.toml +60 -0
  265. package/run.js +86 -0
  266. package/tui/__init__.py +46 -0
  267. package/tui/__main__.py +4 -0
  268. package/tui/__pycache__/__init__.cpython-314.pyc +0 -0
  269. package/tui/__pycache__/_loop.cpython-314.pyc +0 -0
  270. package/tui/__pycache__/_path_fuzzy_search.cpython-314.pyc +0 -0
  271. package/tui/__pycache__/_path_match.cpython-314.pyc +0 -0
  272. package/tui/__pycache__/agent.cpython-314.pyc +0 -0
  273. package/tui/__pycache__/agent_schema.cpython-314.pyc +0 -0
  274. package/tui/__pycache__/agents.cpython-314.pyc +0 -0
  275. package/tui/__pycache__/answer.cpython-314.pyc +0 -0
  276. package/tui/__pycache__/app.cpython-314.pyc +0 -0
  277. package/tui/__pycache__/atomic.cpython-314.pyc +0 -0
  278. package/tui/__pycache__/complete.cpython-314.pyc +0 -0
  279. package/tui/__pycache__/constants.cpython-314.pyc +0 -0
  280. package/tui/__pycache__/conversation_markdown.cpython-314.pyc +0 -0
  281. package/tui/__pycache__/danger.cpython-314.pyc +0 -0
  282. package/tui/__pycache__/db.cpython-314.pyc +0 -0
  283. package/tui/__pycache__/dec.cpython-314.pyc +0 -0
  284. package/tui/__pycache__/directory.cpython-314.pyc +0 -0
  285. package/tui/__pycache__/directory_suggester.cpython-314.pyc +0 -0
  286. package/tui/__pycache__/directory_watcher.cpython-314.pyc +0 -0
  287. package/tui/__pycache__/format_path.cpython-314.pyc +0 -0
  288. package/tui/__pycache__/fuzzy.cpython-314.pyc +0 -0
  289. package/tui/__pycache__/fuzzy_index.cpython-314.pyc +0 -0
  290. package/tui/__pycache__/history.cpython-314.pyc +0 -0
  291. package/tui/__pycache__/jsonrpc.cpython-314.pyc +0 -0
  292. package/tui/__pycache__/menus.cpython-314.pyc +0 -0
  293. package/tui/__pycache__/message_log.cpython-314.pyc +0 -0
  294. package/tui/__pycache__/messages.cpython-314.pyc +0 -0
  295. package/tui/__pycache__/path_complete.cpython-314.pyc +0 -0
  296. package/tui/__pycache__/path_filter.cpython-314.pyc +0 -0
  297. package/tui/__pycache__/paths.cpython-314.pyc +0 -0
  298. package/tui/__pycache__/pill.cpython-314.pyc +0 -0
  299. package/tui/__pycache__/platform_commands.cpython-314.pyc +0 -0
  300. package/tui/__pycache__/protocol.cpython-314.pyc +0 -0
  301. package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
  302. package/tui/__pycache__/settings.cpython-314.pyc +0 -0
  303. package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -0
  304. package/tui/__pycache__/shell.cpython-314.pyc +0 -0
  305. package/tui/__pycache__/shell_read.cpython-314.pyc +0 -0
  306. package/tui/__pycache__/slash_command.cpython-314.pyc +0 -0
  307. package/tui/__pycache__/version.cpython-314.pyc +0 -0
  308. package/tui/_loop.py +86 -0
  309. package/tui/_path_fuzzy_search.py +48 -0
  310. package/tui/_path_match.py +141 -0
  311. package/tui/about.py +95 -0
  312. package/tui/acp/__pycache__/agent.cpython-314.pyc +0 -0
  313. package/tui/acp/__pycache__/api.cpython-314.pyc +0 -0
  314. package/tui/acp/__pycache__/encode_tool_call_id.cpython-314.pyc +0 -0
  315. package/tui/acp/__pycache__/messages.cpython-314.pyc +0 -0
  316. package/tui/acp/__pycache__/prompt.cpython-314.pyc +0 -0
  317. package/tui/acp/__pycache__/protocol.cpython-314.pyc +0 -0
  318. package/tui/acp/agent.py +886 -0
  319. package/tui/acp/api.py +55 -0
  320. package/tui/acp/encode_tool_call_id.py +12 -0
  321. package/tui/acp/messages.py +190 -0
  322. package/tui/acp/prompt.py +110 -0
  323. package/tui/acp/protocol.py +462 -0
  324. package/tui/agent.py +70 -0
  325. package/tui/agent_schema.py +76 -0
  326. package/tui/agents.py +45 -0
  327. package/tui/ansi/__init__.py +1 -0
  328. package/tui/ansi/__pycache__/__init__.cpython-314.pyc +0 -0
  329. package/tui/ansi/__pycache__/_ansi.cpython-314.pyc +0 -0
  330. package/tui/ansi/__pycache__/_ansi_colors.cpython-314.pyc +0 -0
  331. package/tui/ansi/__pycache__/_control_codes.cpython-314.pyc +0 -0
  332. package/tui/ansi/__pycache__/_keys.cpython-314.pyc +0 -0
  333. package/tui/ansi/__pycache__/_sgr_styles.cpython-314.pyc +0 -0
  334. package/tui/ansi/__pycache__/_stream_parser.cpython-314.pyc +0 -0
  335. package/tui/ansi/_ansi.py +1689 -0
  336. package/tui/ansi/_ansi_colors.py +264 -0
  337. package/tui/ansi/_control_codes.py +37 -0
  338. package/tui/ansi/_keys.py +251 -0
  339. package/tui/ansi/_sgr_styles.py +64 -0
  340. package/tui/ansi/_stream_parser.py +418 -0
  341. package/tui/answer.py +12 -0
  342. package/tui/app.py +1236 -0
  343. package/tui/atomic.py +37 -0
  344. package/tui/cli.py +313 -0
  345. package/tui/code_analyze.py +27 -0
  346. package/tui/complete.py +38 -0
  347. package/tui/constants.py +61 -0
  348. package/tui/conversation_markdown.py +30 -0
  349. package/tui/danger.py +372 -0
  350. package/tui/data/agents/ampcode.com.toml +51 -0
  351. package/tui/data/agents/augmentcode.com.toml +40 -0
  352. package/tui/data/agents/cdh.cloud-dev-harness.toml +22 -0
  353. package/tui/data/agents/claude.com.toml +41 -0
  354. package/tui/data/agents/copilot.github.com.toml +29 -0
  355. package/tui/data/agents/crowai.dev.toml +35 -0
  356. package/tui/data/agents/cursor.com.toml +38 -0
  357. package/tui/data/agents/deepagents.langchain.com +33 -0
  358. package/tui/data/agents/docker.com.toml +59 -0
  359. package/tui/data/agents/geminicli.com.toml +28 -0
  360. package/tui/data/agents/goose.ai.toml +51 -0
  361. package/tui/data/agents/inference.huggingface.co.toml +41 -0
  362. package/tui/data/agents/kimi.com.toml +35 -0
  363. package/tui/data/agents/kiro.dev.toml +42 -0
  364. package/tui/data/agents/openai.com.toml +53 -0
  365. package/tui/data/agents/openclaw.ai.toml +37 -0
  366. package/tui/data/agents/opencode.ai.toml +39 -0
  367. package/tui/data/agents/openhands.dev.toml +45 -0
  368. package/tui/data/agents/stakpak.dev.toml +61 -0
  369. package/tui/data/agents/vibe.mistral.ai.toml +30 -0
  370. package/tui/data/agents/vtcode.dev.toml +62 -0
  371. package/tui/data/images/frog.png +0 -0
  372. package/tui/data/sounds/question.wav +0 -0
  373. package/tui/data/sounds/turn-over.wav +0 -0
  374. package/tui/db.py +190 -0
  375. package/tui/dec.py +332 -0
  376. package/tui/directory.py +234 -0
  377. package/tui/directory_suggester.py +93 -0
  378. package/tui/directory_watcher.py +197 -0
  379. package/tui/format_path.py +25 -0
  380. package/tui/fuzzy.py +140 -0
  381. package/tui/fuzzy_index.py +275 -0
  382. package/tui/gist.py +33 -0
  383. package/tui/history.py +138 -0
  384. package/tui/jsonrpc.py +578 -0
  385. package/tui/menus.py +14 -0
  386. package/tui/message_log.py +69 -0
  387. package/tui/messages.py +139 -0
  388. package/tui/option_content.py +51 -0
  389. package/tui/os.py +0 -0
  390. package/tui/path_complete.py +217 -0
  391. package/tui/path_filter.py +124 -0
  392. package/tui/paths.py +71 -0
  393. package/tui/pill.py +23 -0
  394. package/tui/platform_commands.py +52 -0
  395. package/tui/prompt/__pycache__/extract.cpython-314.pyc +0 -0
  396. package/tui/prompt/__pycache__/resource.cpython-314.pyc +0 -0
  397. package/tui/prompt/extract.py +19 -0
  398. package/tui/prompt/resource.py +68 -0
  399. package/tui/protocol.py +28 -0
  400. package/tui/screens/__init__.py +0 -0
  401. package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
  402. package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
  403. package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
  404. package/tui/screens/__pycache__/projects_screen.cpython-314.pyc +0 -0
  405. package/tui/screens/__pycache__/sessions.cpython-314.pyc +0 -0
  406. package/tui/screens/__pycache__/settings.cpython-314.pyc +0 -0
  407. package/tui/screens/__pycache__/store.cpython-314.pyc +0 -0
  408. package/tui/screens/action_modal.py +94 -0
  409. package/tui/screens/agent_modal.py +175 -0
  410. package/tui/screens/command_edit_modal.py +74 -0
  411. package/tui/screens/log.py +553 -0
  412. package/tui/screens/main.py +411 -0
  413. package/tui/screens/main.tcss +655 -0
  414. package/tui/screens/permissions.py +404 -0
  415. package/tui/screens/permissions.tcss +72 -0
  416. package/tui/screens/projects.tcss +66 -0
  417. package/tui/screens/projects_app.py +319 -0
  418. package/tui/screens/projects_screen.py +142 -0
  419. package/tui/screens/session_resume_modal.py +172 -0
  420. package/tui/screens/session_resume_modal.tcss +35 -0
  421. package/tui/screens/sessions.py +166 -0
  422. package/tui/screens/sessions.tcss +119 -0
  423. package/tui/screens/settings.py +254 -0
  424. package/tui/screens/settings.tcss +101 -0
  425. package/tui/screens/store.py +500 -0
  426. package/tui/screens/store.tcss +274 -0
  427. package/tui/screens/tool_content_screen.py +59 -0
  428. package/tui/session_tracker.py +120 -0
  429. package/tui/settings.py +353 -0
  430. package/tui/settings_schema.py +431 -0
  431. package/tui/shell.py +304 -0
  432. package/tui/shell_read.py +42 -0
  433. package/tui/slash_command.py +34 -0
  434. package/tui/tui.tcss +246 -0
  435. package/tui/twitter.py +38 -0
  436. package/tui/version.py +80 -0
  437. package/tui/visuals/__init__.py +0 -0
  438. package/tui/visuals/__pycache__/__init__.cpython-314.pyc +0 -0
  439. package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
  440. package/tui/visuals/columns.py +273 -0
  441. package/tui/widgets/__init__.py +0 -0
  442. package/tui/widgets/__pycache__/__init__.cpython-314.pyc +0 -0
  443. package/tui/widgets/__pycache__/acp_content.cpython-314.pyc +0 -0
  444. package/tui/widgets/__pycache__/agent_response.cpython-314.pyc +0 -0
  445. package/tui/widgets/__pycache__/agent_thought.cpython-314.pyc +0 -0
  446. package/tui/widgets/__pycache__/ask_user.cpython-314.pyc +0 -0
  447. package/tui/widgets/__pycache__/condensed_path.cpython-314.pyc +0 -0
  448. package/tui/widgets/__pycache__/context_stats.cpython-314.pyc +0 -0
  449. package/tui/widgets/__pycache__/conversation.cpython-313.pyc +0 -0
  450. package/tui/widgets/__pycache__/conversation.cpython-314.pyc +0 -0
  451. package/tui/widgets/__pycache__/diff_view.cpython-314.pyc +0 -0
  452. package/tui/widgets/__pycache__/directory_input.cpython-314.pyc +0 -0
  453. package/tui/widgets/__pycache__/flash.cpython-314.pyc +0 -0
  454. package/tui/widgets/__pycache__/future_text.cpython-314.pyc +0 -0
  455. package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
  456. package/tui/widgets/__pycache__/highlighted_textarea.cpython-314.pyc +0 -0
  457. package/tui/widgets/__pycache__/mandelbrot.cpython-314.pyc +0 -0
  458. package/tui/widgets/__pycache__/markdown_note.cpython-314.pyc +0 -0
  459. package/tui/widgets/__pycache__/menu.cpython-314.pyc +0 -0
  460. package/tui/widgets/__pycache__/modified_files.cpython-314.pyc +0 -0
  461. package/tui/widgets/__pycache__/non_selectable_label.cpython-314.pyc +0 -0
  462. package/tui/widgets/__pycache__/note.cpython-314.pyc +0 -0
  463. package/tui/widgets/__pycache__/path_search.cpython-314.pyc +0 -0
  464. package/tui/widgets/__pycache__/plan.cpython-314.pyc +0 -0
  465. package/tui/widgets/__pycache__/project_directory_tree.cpython-314.pyc +0 -0
  466. package/tui/widgets/__pycache__/project_grid_select.cpython-314.pyc +0 -0
  467. package/tui/widgets/__pycache__/project_summary.cpython-314.pyc +0 -0
  468. package/tui/widgets/__pycache__/prompt.cpython-314.pyc +0 -0
  469. package/tui/widgets/__pycache__/question.cpython-314.pyc +0 -0
  470. package/tui/widgets/__pycache__/session_grid_select.cpython-314.pyc +0 -0
  471. package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
  472. package/tui/widgets/__pycache__/session_tabs.cpython-314.pyc +0 -0
  473. package/tui/widgets/__pycache__/shell_result.cpython-314.pyc +0 -0
  474. package/tui/widgets/__pycache__/shell_terminal.cpython-314.pyc +0 -0
  475. package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
  476. package/tui/widgets/__pycache__/slash_complete.cpython-314.pyc +0 -0
  477. package/tui/widgets/__pycache__/strike_text.cpython-314.pyc +0 -0
  478. package/tui/widgets/__pycache__/subagent.cpython-314.pyc +0 -0
  479. package/tui/widgets/__pycache__/terminal.cpython-313.pyc +0 -0
  480. package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
  481. package/tui/widgets/__pycache__/throbber.cpython-314.pyc +0 -0
  482. package/tui/widgets/__pycache__/tool_call.cpython-313.pyc +0 -0
  483. package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
  484. package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
  485. package/tui/widgets/acp_content.py +70 -0
  486. package/tui/widgets/agent_response.py +77 -0
  487. package/tui/widgets/agent_thought.py +168 -0
  488. package/tui/widgets/ask_user.py +264 -0
  489. package/tui/widgets/command_pane.py +223 -0
  490. package/tui/widgets/condensed_path.py +115 -0
  491. package/tui/widgets/context_stats.py +66 -0
  492. package/tui/widgets/conversation.py +2441 -0
  493. package/tui/widgets/danger_warning.py +65 -0
  494. package/tui/widgets/diff_view.py +59 -0
  495. package/tui/widgets/directory_input.py +8 -0
  496. package/tui/widgets/flash.py +81 -0
  497. package/tui/widgets/future_text.py +126 -0
  498. package/tui/widgets/grid_select.py +234 -0
  499. package/tui/widgets/highlighted_textarea.py +180 -0
  500. package/tui/widgets/mandelbrot.py +294 -0
  501. package/tui/widgets/markdown_note.py +13 -0
  502. package/tui/widgets/menu.py +147 -0
  503. package/tui/widgets/modified_files.py +106 -0
  504. package/tui/widgets/non_selectable_label.py +5 -0
  505. package/tui/widgets/note.py +18 -0
  506. package/tui/widgets/path_search.py +492 -0
  507. package/tui/widgets/plan.py +263 -0
  508. package/tui/widgets/project_directory_tree.py +90 -0
  509. package/tui/widgets/project_grid_select.py +35 -0
  510. package/tui/widgets/project_summary.py +33 -0
  511. package/tui/widgets/prompt.py +795 -0
  512. package/tui/widgets/question.py +360 -0
  513. package/tui/widgets/session_grid_select.py +224 -0
  514. package/tui/widgets/session_summary.py +115 -0
  515. package/tui/widgets/session_tabs.py +188 -0
  516. package/tui/widgets/shell_result.py +35 -0
  517. package/tui/widgets/shell_terminal.py +40 -0
  518. package/tui/widgets/side_bar.py +114 -0
  519. package/tui/widgets/slash_complete.py +235 -0
  520. package/tui/widgets/strike_text.py +70 -0
  521. package/tui/widgets/subagent.py +87 -0
  522. package/tui/widgets/terminal.py +577 -0
  523. package/tui/widgets/terminal_tool.py +351 -0
  524. package/tui/widgets/throbber.py +100 -0
  525. package/tui/widgets/tool_call.py +368 -0
  526. package/tui/widgets/user_input.py +23 -0
  527. package/tui/widgets/version.py +5 -0
  528. package/tui/widgets/welcome.py +31 -0
@@ -0,0 +1,462 @@
1
+ from typing_extensions import Any, TypedDict, Required, Literal
2
+
3
+
4
+ class SchemaDict(TypedDict, total=False, extra_items=Any):
5
+ pass
6
+
7
+
8
+ # ---------------------------------------------------------------------------------------
9
+ # Types
10
+
11
+
12
+ # https://agentclientprotocol.com/rfds/session-usage#context-window-and-cost-via-session/update
13
+ class Cost(TypedDict, total=False, extra_items=Any):
14
+ amount: float
15
+ currency: str
16
+
17
+
18
+ class FileSystemCapability(SchemaDict, total=False, extra_items=Any):
19
+ readTextFile: bool
20
+ writeTextFile: bool
21
+
22
+
23
+ # https://agentclientprotocol.com/protocol/schema#clientcapabilities
24
+ class ClientCapabilities(SchemaDict, total=False, extra_items=Any):
25
+ fs: FileSystemCapability
26
+ terminal: bool
27
+
28
+
29
+ # https://agentclientprotocol.com/protocol/schema#implementation
30
+ class Implementation(SchemaDict, total=False, extra_items=Any):
31
+ name: Required[str]
32
+ title: str | None
33
+ version: Required[str]
34
+
35
+
36
+ # https://agentclientprotocol.com/protocol/schema#promptcapabilities
37
+ class PromptCapabilities(SchemaDict, total=False, extra_items=Any):
38
+ audio: bool
39
+ embeddedContent: bool
40
+ image: bool
41
+
42
+
43
+ # https://agentclientprotocol.com/protocol/schema#agentcapabilities
44
+ class AgentCapabilities(SchemaDict, total=False, extra_items=Any):
45
+ loadSession: bool
46
+ promptCapabilities: PromptCapabilities
47
+
48
+
49
+ class AuthMethod(SchemaDict, total=False, extra_items=Any):
50
+ description: str | None
51
+ id: Required[str]
52
+ name: Required[str]
53
+
54
+
55
+ # https://agentclientprotocol.com/protocol/schema#envvariable
56
+ class EnvVariable(SchemaDict, total=False, extra_items=Any):
57
+ _meta: dict
58
+ name: Required[str]
59
+ value: Required[str]
60
+
61
+
62
+ # https://agentclientprotocol.com/protocol/schema#terminalexitstatus
63
+ class TerminalExitStatus(SchemaDict, total=False, extra_items=Any):
64
+ _meta: dict
65
+ exitCode: int | None
66
+ signal: str | None
67
+
68
+
69
+ # https://agentclientprotocol.com/protocol/schema#mcpserver
70
+ class McpServer(SchemaDict, total=False, extra_items=Any):
71
+ args: list[str]
72
+ command: str
73
+ env: list[EnvVariable]
74
+ name: str
75
+
76
+
77
+ # https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations
78
+ class Annotations(SchemaDict, total=False, extra_items=Any):
79
+ audience: list[str]
80
+ priority: float
81
+ lastModified: str
82
+
83
+
84
+ class TextContent(SchemaDict, total=False, extra_items=Any):
85
+ type: Required[str]
86
+ text: Required[str]
87
+ annotations: Annotations
88
+
89
+
90
+ class ImageContent(SchemaDict, total=False, extra_items=Any):
91
+ type: Required[str]
92
+ data: Required[str]
93
+ mimeType: Required[str]
94
+ url: str
95
+ annotations: Annotations
96
+
97
+
98
+ class AudioContent(SchemaDict, total=False, extra_items=Any):
99
+ type: Required[str]
100
+ data: Required[str]
101
+ mimeType: Required[str]
102
+ Annotations: Annotations
103
+
104
+
105
+ class EmbeddedResourceText(SchemaDict, total=False, extra_items=Any):
106
+ uri: Required[str]
107
+ text: Required[str]
108
+ mimeType: str
109
+
110
+
111
+ class EmbeddedResourceBlob(SchemaDict, total=False, extra_items=Any):
112
+ uri: Required[str]
113
+ blob: Required[str]
114
+ mimeType: str
115
+
116
+
117
+ # https://agentclientprotocol.com/protocol/content#embedded-resource
118
+ class EmbeddedResourceContent(SchemaDict, total=False, extra_items=Any):
119
+ type: Required[str]
120
+ resource: EmbeddedResourceText | EmbeddedResourceBlob
121
+
122
+
123
+ class ResourceLinkContent(SchemaDict, total=False, extra_items=Any):
124
+ annotations: Annotations | None
125
+ description: str | None
126
+ mimeType: str | None
127
+ name: Required[str]
128
+ size: int | None
129
+ title: str | None
130
+ type: Required[str]
131
+ uri: Required[str]
132
+
133
+
134
+ # https://agentclientprotocol.com/protocol/schema#contentblock
135
+ type ContentBlock = (
136
+ TextContent
137
+ | ImageContent
138
+ | AudioContent
139
+ | EmbeddedResourceContent
140
+ | ResourceLinkContent
141
+ )
142
+
143
+
144
+ # https://agentclientprotocol.com/protocol/schema#param-user-message-chunk
145
+ class UserMessageChunk(SchemaDict, total=False, extra_items=Any):
146
+ content: Required[ContentBlock]
147
+ sessionUpdate: Required[Literal["user_message_chunk"]]
148
+
149
+
150
+ class AgentMessageChunk(SchemaDict, total=False, extra_items=Any):
151
+ content: Required[ContentBlock]
152
+ sessionUpdate: Required[Literal["agent_message_chunk"]]
153
+
154
+
155
+ class AgentThoughtChunk(SchemaDict, total=False, extra_items=Any):
156
+ content: Required[ContentBlock]
157
+ sessionUpdate: Required[Literal["agent_thought_chunk"]]
158
+
159
+
160
+ class ToolCallContentContent(SchemaDict, total=False, extra_items=Any):
161
+ content: Required[ContentBlock]
162
+ type: Required[Literal["content"]]
163
+
164
+
165
+ # https://agentclientprotocol.com/protocol/schema#param-diff
166
+ class ToolCallContentDiff(SchemaDict, total=False, extra_items=Any):
167
+ newText: Required[str]
168
+ oldText: str | None
169
+ path: Required[str]
170
+ type: Required[Literal["diff"]]
171
+
172
+
173
+ class ToolCallContentTerminal(SchemaDict, total=False, extra_items=Any):
174
+ terminalId: Required[str]
175
+ type: Required[Literal["terminal"]]
176
+
177
+
178
+ # https://agentclientprotocol.com/protocol/schema#toolcallcontent
179
+ type ToolCallContent = (
180
+ ToolCallContentContent | ToolCallContentDiff | ToolCallContentTerminal
181
+ )
182
+
183
+ # https://agentclientprotocol.com/protocol/schema#toolkind
184
+ type ToolKind = Literal[
185
+ "read",
186
+ "edit",
187
+ "delete",
188
+ "move",
189
+ "search",
190
+ "execute",
191
+ "think",
192
+ "fetch",
193
+ "switch_mode",
194
+ "other",
195
+ ]
196
+
197
+ type ToolCallStatus = Literal["pending", "in_progress", "completed", "failed"]
198
+
199
+
200
+ class ToolCallLocation(SchemaDict, total=False, extra_items=Any):
201
+ line: int | None
202
+ path: Required[str]
203
+
204
+
205
+ type ToolCallId = str
206
+
207
+
208
+ # https://agentclientprotocol.com/protocol/schema#toolcall
209
+ class ToolCall(SchemaDict, total=False, extra_items=Any):
210
+ _meta: dict
211
+ content: list[ToolCallContent]
212
+ kind: ToolKind
213
+ locations: list[ToolCallLocation]
214
+ rawInput: dict
215
+ rawOutput: dict
216
+ sessionUpdate: Required[Literal["tool_call"]]
217
+ status: ToolCallStatus
218
+ title: Required[str]
219
+ toolCallId: Required[ToolCallId]
220
+
221
+
222
+ # https://agentclientprotocol.com/protocol/schema#toolcallupdate
223
+ class ToolCallUpdate(SchemaDict, total=False, extra_items=Any):
224
+ _meta: dict
225
+ content: list[ToolCallContent] | None
226
+ kind: ToolKind | None
227
+ locations: list | None
228
+ rawInput: dict
229
+ rawOutput: dict
230
+ sessionUpdate: Required[Literal["tool_call_update"]]
231
+ status: ToolCallStatus | None
232
+ title: str | None
233
+ toolCallId: Required[ToolCallId]
234
+
235
+
236
+ # https://agentclientprotocol.com/protocol/schema#param-tool-call
237
+ # Use in the session/request_permission call (not the same as ToolCallUpdate)
238
+ class ToolCallUpdatePermissionRequest(SchemaDict, total=False, extra_items=Any):
239
+ _meta: dict
240
+ content: list[ToolCallContent] | None
241
+ kind: ToolKind | None
242
+ locations: list | None
243
+ rawInput: dict
244
+ rawOutput: dict
245
+ status: ToolCallStatus | None
246
+ title: str | None
247
+ toolCallId: Required[ToolCallId]
248
+
249
+
250
+ class PlanEntry(SchemaDict, total=False, extra_items=Any):
251
+ content: Required[str]
252
+ priority: Literal["high", "medium", "low"]
253
+ status: Literal["pending", "in_progress", "completed"]
254
+
255
+
256
+ type SessionModeId = str
257
+
258
+
259
+ # https://agentclientprotocol.com/protocol/schema#sessionmode
260
+ class SessionMode(SchemaDict, total=False, extra_items=Any):
261
+ _meta: dict
262
+ description: str | None
263
+ id: Required[SessionModeId]
264
+ name: Required[str]
265
+
266
+
267
+ class SessionModeState(SchemaDict, total=False, extra_items=Any):
268
+ _meta: dict
269
+ availableModes: Required[list[SessionMode]]
270
+ currentModeId: Required[SessionModeId]
271
+
272
+
273
+ type ModelId = str
274
+
275
+
276
+ # https://agentclientprotocol.com/protocol/schema#modelinfo
277
+ class ModelInfo(SchemaDict, total=False, extra_items=Any):
278
+ _meta: dict
279
+ description: str | None
280
+ modelId: Required[ModelId]
281
+ name: Required[str]
282
+
283
+
284
+ # https://agentclientprotocol.com/protocol/schema#sessionmodelstate
285
+ class SessionModelState(SchemaDict, total=False, extra_items=Any):
286
+ _meta: dict
287
+ availableModels: Required[list[ModelInfo]]
288
+ currentModelId: Required[ModelId]
289
+
290
+
291
+ # https://agentclientprotocol.com/protocol/schema#param-plan
292
+ class Plan(SchemaDict, total=False, extra_items=Any):
293
+ entries: Required[list[PlanEntry]]
294
+ sessionUpdate: Required[Literal["plan"]]
295
+
296
+
297
+ class AvailableCommandInput(SchemaDict, total=False, extra_items=Any):
298
+ hint: Required[str]
299
+
300
+
301
+ class AvailableCommand(SchemaDict, total=False, extra_items=Any):
302
+ description: Required[str]
303
+ input: AvailableCommandInput | None
304
+ name: Required[str]
305
+
306
+
307
+ class AvailableCommandsUpdate(SchemaDict, total=False, extra_items=Any):
308
+ availableCommands: Required[list[AvailableCommand]]
309
+ sessionUpdate: Required[Literal["available_commands_update"]]
310
+
311
+
312
+ class CurrentModeUpdate(SchemaDict, total=False, extra_items=Any):
313
+ currentModeId: Required[str]
314
+ sessionUpdate: Required[Literal["current_mode_update"]]
315
+
316
+
317
+ class UsageUpdate(SchemaDict, total=False, extra_items=object):
318
+ sessionUpdate: Required[Literal["usage_update"]]
319
+ used: Required[int]
320
+ size: Required[int]
321
+ cost: Cost
322
+
323
+
324
+ type SessionUpdate = (
325
+ UserMessageChunk
326
+ | AgentMessageChunk
327
+ | AgentThoughtChunk
328
+ | ToolCall
329
+ | ToolCallUpdate
330
+ | Plan
331
+ | AvailableCommandsUpdate
332
+ | CurrentModeUpdate
333
+ | UsageUpdate
334
+ )
335
+
336
+
337
+ class SessionNotification(TypedDict, total=False, extra_items=Any):
338
+ sessionId: str
339
+ update: SessionUpdate
340
+
341
+
342
+ type PermissionOptionKind = Literal[
343
+ "allow_once", "allow_always", "reject_once", "reject_always"
344
+ ]
345
+ type PermissionOptionId = str
346
+
347
+
348
+ class PermissionOption(TypedDict, total=False, extra_items=Any):
349
+ _meta: dict
350
+ kind: Required[PermissionOptionKind]
351
+ name: Required[str]
352
+ optionId: Required[PermissionOptionId]
353
+
354
+
355
+ class OutcomeCancelled(TypedDict, total=False, extra_items=Any):
356
+ outcome: Literal["cancelled"]
357
+
358
+
359
+ class OutcomeSelected(TypedDict, total=False, extra_items=Any):
360
+ optionId: Required[PermissionOptionId]
361
+ outcome: Literal["selected"]
362
+
363
+
364
+ # https://agentclientprotocol.com/protocol/schema#requestpermissionoutcome
365
+ type RequestPermissionOutcome = OutcomeSelected | OutcomeCancelled
366
+
367
+ # ---------------------------------------------------------------------------------------
368
+ # RPC responses
369
+
370
+
371
+ class InitializeResponse(SchemaDict, total=False, extra_items=Any):
372
+ agentCapabilities: AgentCapabilities
373
+ authMethods: list[AuthMethod]
374
+ protocolVersion: Required[int]
375
+
376
+
377
+ # https://agentclientprotocol.com/protocol/schema#newsessionresponse
378
+ class NewSessionResponse(SchemaDict, total=False, extra_items=Any):
379
+ _meta: object
380
+ sessionId: Required[str]
381
+ # Unstable from here
382
+ models: SessionModelState | None
383
+ modes: SessionModeState | None
384
+
385
+
386
+ # https://agentclientprotocol.com/protocol/schema#loadsessionresponse
387
+ class LoadSessionResponse(SchemaDict, total=False, extra_items=Any):
388
+ _meta: object
389
+ modes: SessionModeState | None
390
+
391
+
392
+ class SessionPromptResponse(SchemaDict, total=False, extra_items=object):
393
+ sessionId: Required[str]
394
+ stopReason: Required[
395
+ Literal[
396
+ "end_turn",
397
+ "max_tokens",
398
+ "max_turn_requests",
399
+ "refusal",
400
+ "cancelled",
401
+ ]
402
+ ]
403
+ usage: Usage
404
+
405
+
406
+ # https://agentclientprotocol.com/protocol/schema#requestpermissionresponse
407
+ class RequestPermissionResponse(TypedDict, total=False, extra_items=Any):
408
+ _meta: dict
409
+ outcome: Required[RequestPermissionOutcome]
410
+
411
+ class AskUserResponse(TypedDict, total=False, extra_items=Any):
412
+ answer: str
413
+ cancelled: bool
414
+
415
+
416
+ # https://agentclientprotocol.com/protocol/schema#createterminalresponse
417
+ class CreateTerminalResponse(TypedDict, total=False, extra_items=Any):
418
+ _meta: dict
419
+ terminalId: Required[str]
420
+
421
+
422
+ # https://agentclientprotocol.com/protocol/schema#killterminalcommandresponse
423
+ class KillTerminalCommandResponse(TypedDict, total=False, extra_items=Any):
424
+ _meta: dict
425
+
426
+
427
+ # https://agentclientprotocol.com/protocol/schema#terminaloutputresponse
428
+ class TerminalOutputResponse(TypedDict, total=False, extra_items=Any):
429
+ _meta: dict
430
+ exitStatus: TerminalExitStatus | None
431
+ output: Required[str]
432
+ truncated: Required[bool]
433
+
434
+
435
+ # https://agentclientprotocol.com/protocol/schema#releaseterminalresponse
436
+ class ReleaseTerminalResponse(TypedDict, total=False, extra_items=Any):
437
+ _meta: dict
438
+
439
+
440
+ # https://agentclientprotocol.com/protocol/schema#waitforterminalexitresponse
441
+ class WaitForTerminalExitResponse(TypedDict, total=False, extra_items=Any):
442
+ _meta: dict
443
+ exitCode: int | None
444
+ signal: str | None
445
+
446
+
447
+ # https://agentclientprotocol.com/protocol/schema#setsessionmoderesponse
448
+ class SetSessionModeResponse(TypedDict, total=False, extra_items=Any):
449
+ meta: dict
450
+
451
+
452
+ # ---------------------------------------------------------------------------------------
453
+
454
+
455
+ # https://agentclientprotocol.com/rfds/session-usage#usage-fields
456
+ class Usage(TypedDict, total=False, extra_items=Any):
457
+ total_tokens: Required[int]
458
+ input_tokens: Required[int]
459
+ output_tokens: Required[int]
460
+ thought_tokens: int
461
+ cached_read_tokens: int
462
+ cached_write_tokens: int
package/tui/agent.py ADDED
@@ -0,0 +1,70 @@
1
+ from abc import ABC, abstractmethod
2
+ from dataclasses import dataclass
3
+ from pathlib import Path
4
+
5
+ from textual.content import Content
6
+ from textual.message import Message
7
+
8
+
9
+ class AgentReady(Message):
10
+ """Agent is ready."""
11
+
12
+
13
+ @dataclass
14
+ class AgentFail(Message):
15
+ """Agent failed to start."""
16
+
17
+ message: str
18
+ details: str = ""
19
+ help: str = "fail"
20
+
21
+
22
+ class AgentBase(ABC):
23
+ """Base class for an 'agent'."""
24
+
25
+ def __init__(self, project_root: Path) -> None:
26
+ self.project_root_path = project_root
27
+ super().__init__()
28
+
29
+ @abstractmethod
30
+ async def send_prompt(self, prompt: str) -> str | None:
31
+ """Send a prompt to the agent.
32
+
33
+ Args:
34
+ prompt: Prompt text.
35
+
36
+ Returns:
37
+ str: The stop reason.
38
+ """
39
+
40
+ async def set_mode(self, mode_id: str) -> str | None:
41
+ """Put the agent in a new mode.
42
+
43
+ Args:
44
+ mode_id: Mode id.
45
+
46
+ Returns:
47
+ str: The stop reason.
48
+ """
49
+
50
+ async def cancel(self) -> bool:
51
+ """Cancel prompt.
52
+
53
+ Returns:
54
+ bool: `True` if success, `False` if the turn wasn't cancelled.
55
+
56
+ """
57
+ return False
58
+
59
+ async def set_session_name(self, name: str) -> None:
60
+ """Set the session name.
61
+
62
+ Args:
63
+ name: New name for the session.
64
+ """
65
+
66
+ def get_info(self) -> Content:
67
+ return Content("")
68
+
69
+ async def stop(self) -> None:
70
+ """Stop the agent (gracefully exit the process)"""
@@ -0,0 +1,76 @@
1
+ from typing import TypedDict, Literal, NotRequired
2
+
3
+ type Tag = str
4
+ """A tag used for categorizing the agent. For example: 'open-source', 'reasoning'."""
5
+ type OS = Literal["macos", "linux", "windows", "*"]
6
+ """An operating system identifier, or a '*" wildcard, if it is the same for all OSes."""
7
+ type Action = str
8
+ """An action which the agent supports."""
9
+ type AgentType = Literal["coding", "chat"]
10
+ """The type of agent. More types TBD."""
11
+ type AgentProtocol = Literal["acp"]
12
+ """The protocol used to communicate with the agent. Currently only "acp" is supported."""
13
+
14
+
15
+ class Command(TypedDict):
16
+ """Used to perform an action associate with an Agent."""
17
+
18
+ description: str
19
+ """Describes what the script will do. For example: 'Install Claude Code'."""
20
+ command: str
21
+ """Command to run."""
22
+ bootstrap_uv: NotRequired[bool]
23
+ """Bootstrap UV installer (set to `true` if the command users `uv`)."""
24
+
25
+
26
+ class Agent(TypedDict):
27
+ """Describes an agent which A2TUI can connect to. Currently only Agent Client Protocol is supported.
28
+
29
+ This information is stoed within TOML files, where the filename is the "identity" key plus the extension ".toml"
30
+
31
+ """
32
+
33
+ active: NotRequired[bool]
34
+ """If `True` (default), the agent will be shown in the UI. If `False` the agent will be removed from the UI."""
35
+ recommended: NotRequired[bool]
36
+ """Agent is in recommended set. Set to `True` in main branch only if previously agreed with Will McGugan."""
37
+ identity: str
38
+ """A unique identifier for this agent. Should be a domain the agent developer owns,
39
+ although it doesn't have to resolve to anything. Must be useable in a filename on all platforms.
40
+ For example: 'claude.anthropic.ai'"""
41
+ name: str
42
+ """The name of the agent. For example: 'Claude Code'."""
43
+ short_name: str
44
+ """A short name, usable on the command line. Try to make it unique. For example: 'claude'."""
45
+ url: str
46
+ """A URL for the agent."""
47
+ protocol: AgentProtocol
48
+ """The protocol used by the agent. Currently only 'acp' is supported."""
49
+ type: "AgentType"
50
+ """The type of the agent. Currently "coding" or "chat". More types TBD."""
51
+ author_name: str
52
+ """The author of the agent. For example 'Anthropic'."""
53
+ author_url: str
54
+ """The authors homepage. For example 'https://www.anthropic.com/'."""
55
+ publisher_name: str
56
+ """The publisher's name (individual or organization that wrote this data)."""
57
+ publisher_url: str
58
+ """The publisher's url."""
59
+ description: str
60
+ """A description of the agent. A few sentences max. May contain content markup (https://textual.textualize.io/guide/content/#markup) if used subtly."""
61
+ tags: list[Tag]
62
+ """Tags which identify the agent. Should be empty for now."""
63
+ help: str
64
+ """A Markdown document with additional details regarding the agent."""
65
+ welcome: NotRequired[str]
66
+ """A Markdown document shown to the user when the conversation starts. Should contain a welcome message and any advice on getting started."""
67
+ run_command: dict[OS, str]
68
+ """Command to run the agent, by OS or wildcard."""
69
+ commands_prefix: NotRequired[str]
70
+ """Prefix for slash commands registered by this agent (e.g. `"onecode:"`)."""
71
+ commands_module: NotRequired[str]
72
+ """Python module path to a commands module with a `register_commands()` function.
73
+ If set, the TUI will import this module and call `register_commands()` to register
74
+ platform-specific slash commands (e.g. `onecode:mode`, `onecode:spec`)."""
75
+ actions: dict[OS, dict[Action, Command]]
76
+ """Scripts to perform actions, typically at least to install the agent."""
package/tui/agents.py ADDED
@@ -0,0 +1,45 @@
1
+ from importlib.resources import files
2
+ import asyncio
3
+
4
+ from tui.agent_schema import Agent
5
+
6
+
7
+ class AgentReadError(Exception):
8
+ """Problem reading the agents."""
9
+
10
+
11
+ async def read_agents() -> dict[str, Agent]:
12
+ """Read agent information from data/agents
13
+
14
+ Raises:
15
+ AgentReadError: If the files could not be read.
16
+
17
+ Returns:
18
+ A mapping of identity on to Agent dict.
19
+ """
20
+ import tomllib
21
+
22
+ def read_agents() -> list[Agent]:
23
+ """Read agent information.
24
+
25
+ Stored in data/agents
26
+
27
+ Returns:
28
+ List of agent dicts.
29
+ """
30
+ agents: list[Agent] = []
31
+ try:
32
+ for file in files("tui.data").joinpath("agents").iterdir():
33
+ agent: Agent = tomllib.load(file.open("rb"))
34
+ if agent.get("active", True):
35
+ agents.append(agent)
36
+
37
+ except Exception as error:
38
+ raise AgentReadError(f"Failed to read agents; {error}")
39
+
40
+ return agents
41
+
42
+ agents = await asyncio.to_thread(read_agents)
43
+ agent_map = {agent["identity"]: agent for agent in agents}
44
+
45
+ return agent_map
@@ -0,0 +1 @@
1
+ from tui.ansi._ansi import TerminalState as TerminalState