@scemoon/cdh 1.0.6 → 1.0.7

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 (550) hide show
  1. package/package.json +2 -2
  2. package/ai-dlc-skill/SKILL.md +0 -77
  3. package/ai-dlc-skill/agents/deliver-agent.md +0 -24
  4. package/ai-dlc-skill/agents/master.md +0 -50
  5. package/ai-dlc-skill/agents/plan-agent.md +0 -23
  6. package/ai-dlc-skill/agents/understand-agent.md +0 -23
  7. package/ai-dlc-skill/agents/verify-agent.md +0 -27
  8. package/ai-dlc-skill/architecture/project-structure.md +0 -78
  9. package/ai-dlc-skill/brownfield/README.md +0 -30
  10. package/ai-dlc-skill/brownfield/generate-context.sh +0 -64
  11. package/ai-dlc-skill/brownfield/scripts/deps.sh +0 -27
  12. package/ai-dlc-skill/brownfield/scripts/discover.sh +0 -34
  13. package/ai-dlc-skill/brownfield/scripts/extract-api.sh +0 -45
  14. package/ai-dlc-skill/components/backend.md +0 -34
  15. package/ai-dlc-skill/components/desktop.md +0 -30
  16. package/ai-dlc-skill/components/mya.md +0 -29
  17. package/ai-dlc-skill/components/native.md +0 -30
  18. package/ai-dlc-skill/components/tta.md +0 -29
  19. package/ai-dlc-skill/components/web.md +0 -31
  20. package/ai-dlc-skill/components/wxa.md +0 -29
  21. package/ai-dlc-skill/contracts/README.md +0 -25
  22. package/ai-dlc-skill/core/adaptive-flow.md +0 -36
  23. package/ai-dlc-skill/core/security.md +0 -29
  24. package/ai-dlc-skill/cross-tool/cline/export.sh +0 -31
  25. package/ai-dlc-skill/cross-tool/copilot/export.sh +0 -47
  26. package/ai-dlc-skill/cross-tool/cursor/export.sh +0 -32
  27. package/ai-dlc-skill/cross-tool/export.sh +0 -22
  28. package/ai-dlc-skill/cross-tool/onecode/config.yaml.tpl +0 -17
  29. package/ai-dlc-skill/cross-tool/onecode/export-skills.sh +0 -35
  30. package/ai-dlc-skill/cross-tool/onecode/export.sh +0 -54
  31. package/ai-dlc-skill/phases/deliver/entry.md +0 -26
  32. package/ai-dlc-skill/phases/deliver/lifecycle.md +0 -185
  33. package/ai-dlc-skill/phases/deliver/prompt.md +0 -40
  34. package/ai-dlc-skill/phases/deliver/rules.md +0 -61
  35. package/ai-dlc-skill/phases/plan/entry.md +0 -25
  36. package/ai-dlc-skill/phases/plan/lifecycle.md +0 -204
  37. package/ai-dlc-skill/phases/plan/prompt.md +0 -38
  38. package/ai-dlc-skill/phases/plan/rules.md +0 -25
  39. package/ai-dlc-skill/phases/understand/entry.md +0 -26
  40. package/ai-dlc-skill/phases/understand/lifecycle.md +0 -184
  41. package/ai-dlc-skill/phases/understand/prompt.md +0 -41
  42. package/ai-dlc-skill/phases/understand/rules.md +0 -37
  43. package/ai-dlc-skill/phases/verify/entry.md +0 -26
  44. package/ai-dlc-skill/phases/verify/lifecycle.md +0 -192
  45. package/ai-dlc-skill/phases/verify/prompt.md +0 -43
  46. package/ai-dlc-skill/phases/verify/rules.md +0 -73
  47. package/ai-dlc-skill/practices/bdd.md +0 -91
  48. package/ai-dlc-skill/practices/sdd.md +0 -84
  49. package/ai-dlc-skill/practices/tdd.md +0 -95
  50. package/ai-dlc-skill/providers/README.md +0 -114
  51. package/ai-dlc-skill/providers/aliyun/deployment.yaml +0 -66
  52. package/ai-dlc-skill/providers/aliyun/preview.yaml +0 -84
  53. package/ai-dlc-skill/providers/aliyun/provider.yaml +0 -160
  54. package/ai-dlc-skill/providers/tcb/deployment.yaml +0 -69
  55. package/ai-dlc-skill/providers/tcb/preview.yaml +0 -83
  56. package/ai-dlc-skill/providers/tcb/provider.yaml +0 -172
  57. package/ai-dlc-skill/requirements.md +0 -140
  58. package/ai-dlc-skill/skill.yaml +0 -147
  59. package/ai-dlc-skill/templates/integration/CHANGELOG.md +0 -41
  60. package/ai-dlc-skill/templates/integration/asyncapi.yaml +0 -43
  61. package/ai-dlc-skill/templates/integration/contract-diff.md +0 -63
  62. package/ai-dlc-skill/templates/integration/contract-spec.md +0 -49
  63. package/ai-dlc-skill/templates/integration/openapi.yaml +0 -18
  64. package/ai-dlc-skill/templates/integration/runtime-contract.yaml +0 -36
  65. package/ai-dlc-skill/templates/plan/design.md +0 -49
  66. package/ai-dlc-skill/templates/plan/task-list.md +0 -32
  67. package/ai-dlc-skill/templates/project/README.md +0 -126
  68. package/ai-dlc-skill/templates/project/template.md +0 -119
  69. package/ai-dlc-skill/templates/understand/feature.feature +0 -23
  70. package/ai-dlc-skill/templates/understand/intent.md +0 -29
  71. package/ai-dlc-skill/templates/understand/spec-delta.md +0 -47
  72. package/ai-dlc-skill/templates/verify/test-unit.py +0 -27
  73. package/ai-dlc-skill/walkthrough/collect.sh +0 -50
  74. package/ai-dlc-skill/walkthrough/template.md +0 -54
  75. package/ai-dlc-skill/workflows/ai-dlc.yaml +0 -110
  76. package/ai-dlc-skill/workflows/deployment.yaml +0 -199
  77. package/cdh/__init__.py +0 -0
  78. package/cdh/__main__.py +0 -4
  79. package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
  80. package/cdh/__pycache__/cdh_mcp_injector.cpython-314.pyc +0 -0
  81. package/cdh/__pycache__/cdh_mcp_loader.cpython-314.pyc +0 -0
  82. package/cdh/__pycache__/cdh_mcp_manager.cpython-314.pyc +0 -0
  83. package/cdh/__pycache__/cdh_session_aggregator.cpython-314.pyc +0 -0
  84. package/cdh/__pycache__/cdh_skill_loader.cpython-314.pyc +0 -0
  85. package/cdh/__pycache__/cdh_skill_manager.cpython-314.pyc +0 -0
  86. package/cdh/__pycache__/cli.cpython-313.pyc +0 -0
  87. package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
  88. package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
  89. package/cdh/cdh_mcp_injector.py +0 -115
  90. package/cdh/cdh_mcp_loader.py +0 -67
  91. package/cdh/cdh_mcp_manager.py +0 -73
  92. package/cdh/cdh_session_aggregator.py +0 -258
  93. package/cdh/cdh_skill_manager.py +0 -105
  94. package/cdh/cli.py +0 -807
  95. package/cdh/scaffold.py +0 -728
  96. package/onecode/__init__.py +0 -1
  97. package/onecode/__main__.py +0 -4
  98. package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
  99. package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
  100. package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
  101. package/onecode/__pycache__/config.cpython-314.pyc +0 -0
  102. package/onecode/__pycache__/config_screen.cpython-314.pyc +0 -0
  103. package/onecode/__pycache__/migrate.cpython-314.pyc +0 -0
  104. package/onecode/agent/__init__.py +0 -0
  105. package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
  106. package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
  107. package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
  108. package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
  109. package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
  110. package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
  111. package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
  112. package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
  113. package/onecode/agent/__pycache__/project_doc.cpython-314.pyc +0 -0
  114. package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
  115. package/onecode/agent/agents/__init__.py +0 -29
  116. package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  117. package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
  118. package/onecode/agent/agents/types.py +0 -589
  119. package/onecode/agent/attachments.py +0 -112
  120. package/onecode/agent/cdh_loader.py +0 -267
  121. package/onecode/agent/context.py +0 -343
  122. package/onecode/agent/engine.py +0 -2700
  123. package/onecode/agent/hooks.py +0 -86
  124. package/onecode/agent/onecode_agent_acp.py +0 -2743
  125. package/onecode/agent/onecode_agent_acp.py.bak +0 -2447
  126. package/onecode/agent/permissions.py +0 -150
  127. package/onecode/agent/permissions_store.py +0 -62
  128. package/onecode/agent/project_doc.py +0 -19
  129. package/onecode/agent/session.py +0 -195
  130. package/onecode/agent/snapshot.py +0 -144
  131. package/onecode/agent/tools/__init__.py +0 -17
  132. package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  133. package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
  134. package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
  135. package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
  136. package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
  137. package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
  138. package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
  139. package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
  140. package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
  141. package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
  142. package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
  143. package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
  144. package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
  145. package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
  146. package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
  147. package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
  148. package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
  149. package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
  150. package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
  151. package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
  152. package/onecode/agent/tools/__pycache__/todo_tools.cpython-314.pyc +0 -0
  153. package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
  154. package/onecode/agent/tools/agent_tools.py +0 -132
  155. package/onecode/agent/tools/apply_patch_tool.py +0 -138
  156. package/onecode/agent/tools/bash_tool.py +0 -111
  157. package/onecode/agent/tools/communication_tools.py +0 -148
  158. package/onecode/agent/tools/config_tool.py +0 -130
  159. package/onecode/agent/tools/cron_tools.py +0 -178
  160. package/onecode/agent/tools/errors.py +0 -17
  161. package/onecode/agent/tools/file_ops.py +0 -221
  162. package/onecode/agent/tools/file_tools.py +0 -225
  163. package/onecode/agent/tools/git_tools.py +0 -88
  164. package/onecode/agent/tools/lsp_tools.py +0 -404
  165. package/onecode/agent/tools/mcp_tools.py +0 -127
  166. package/onecode/agent/tools/permission_handler.py +0 -46
  167. package/onecode/agent/tools/permissions.py +0 -77
  168. package/onecode/agent/tools/protocol.py +0 -20
  169. package/onecode/agent/tools/registry.py +0 -201
  170. package/onecode/agent/tools/sandbox.py +0 -358
  171. package/onecode/agent/tools/schema_validation.py +0 -100
  172. package/onecode/agent/tools/skill_tools.py +0 -52
  173. package/onecode/agent/tools/todo_tools.py +0 -207
  174. package/onecode/agent/tools/web_tools.py +0 -169
  175. package/onecode/builtin_skills/agent-browser/SKILL.md +0 -212
  176. package/onecode/builtin_skills/agent-browser/skill.yaml +0 -8
  177. package/onecode/builtin_skills/git/SKILL.md +0 -64
  178. package/onecode/builtin_skills/git/skill.yaml +0 -7
  179. package/onecode/builtin_skills/shell/SKILL.md +0 -58
  180. package/onecode/builtin_skills/shell/skill.yaml +0 -8
  181. package/onecode/builtin_skills/skill-creator/SKILL.md +0 -106
  182. package/onecode/builtin_skills/skill-creator/skill.yaml +0 -8
  183. package/onecode/cli.py +0 -935
  184. package/onecode/cloud/__init__.py +0 -0
  185. package/onecode/cloud/base.py +0 -20
  186. package/onecode/codebase/__init__.py +0 -69
  187. package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
  188. package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
  189. package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
  190. package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
  191. package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
  192. package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
  193. package/onecode/codebase/chunker.py +0 -125
  194. package/onecode/codebase/indexer.py +0 -149
  195. package/onecode/codebase/retriever.py +0 -203
  196. package/onecode/codebase/storage.py +0 -131
  197. package/onecode/codebase/tools.py +0 -59
  198. package/onecode/commands.py +0 -596
  199. package/onecode/config.py +0 -314
  200. package/onecode/config_screen.py +0 -600
  201. package/onecode/cron/__init__.py +0 -3
  202. package/onecode/lsp/__init__.py +0 -3
  203. package/onecode/mcp/__init__.py +0 -4
  204. package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
  205. package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
  206. package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
  207. package/onecode/mcp/client.py +0 -193
  208. package/onecode/mcp/manager.py +0 -190
  209. package/onecode/memory/__init__.py +0 -49
  210. package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  211. package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
  212. package/onecode/memory/__pycache__/offload.cpython-314.pyc +0 -0
  213. package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
  214. package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
  215. package/onecode/memory/__pycache__/symbolic.cpython-314.pyc +0 -0
  216. package/onecode/memory/backend.py +0 -159
  217. package/onecode/memory/pyramid.py +0 -133
  218. package/onecode/memory/recall.py +0 -203
  219. package/onecode/migrate.py +0 -122
  220. package/onecode/models/__init__.py +0 -4
  221. package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
  222. package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
  223. package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
  224. package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
  225. package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
  226. package/onecode/models/errors.py +0 -104
  227. package/onecode/models/messages.py +0 -739
  228. package/onecode/models/provider.py +0 -699
  229. package/onecode/models/providers/__init__.py +0 -17
  230. package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  231. package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
  232. package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
  233. package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
  234. package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
  235. package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
  236. package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
  237. package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
  238. package/onecode/models/providers/anthropic_provider.py +0 -273
  239. package/onecode/models/providers/deepseek_provider.py +0 -212
  240. package/onecode/models/providers/glm_provider.py +0 -195
  241. package/onecode/models/providers/minimax_provider.py +0 -158
  242. package/onecode/models/providers/minimaxi_provider.py +0 -417
  243. package/onecode/models/providers/ollama_provider.py +0 -100
  244. package/onecode/models/providers/openai_provider.py +0 -237
  245. package/onecode/models/registry.py +0 -212
  246. package/onecode/server/__init__.py +0 -3
  247. package/onecode/server/app.py +0 -224
  248. package/onecode/skills/__init__.py +0 -11
  249. package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
  250. package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
  251. package/onecode/skills/__pycache__/bootstrap.cpython-314.pyc +0 -0
  252. package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
  253. package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
  254. package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
  255. package/onecode/skills/__pycache__/manager.cpython-314.pyc +0 -0
  256. package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
  257. package/onecode/skills/argument_substitution.py +0 -38
  258. package/onecode/skills/bootstrap.py +0 -124
  259. package/onecode/skills/create.py +0 -56
  260. package/onecode/skills/frontmatter.py +0 -33
  261. package/onecode/skills/loader.py +0 -139
  262. package/onecode/skills/manager.py +0 -75
  263. package/onecode/skills/model.py +0 -43
  264. package/onecode/storage/__init__.py +0 -0
  265. package/onecode/storage/activity.py +0 -63
  266. package/onecode/storage/project.py +0 -54
  267. package/onecode/storage/session.py +0 -112
  268. package/onecode/tasks/__init__.py +0 -26
  269. package/onecode/tasks/manager.py +0 -232
  270. package/onecode/tasks/models.py +0 -240
  271. package/onecode/trace/__init__.py +0 -0
  272. package/onecode/trace/tracer.py +0 -173
  273. package/onecode/utils/__init__.py +0 -0
  274. package/onecode/utils/helpers.py +0 -20
  275. package/pyproject.toml +0 -74
  276. package/tui/__init__.py +0 -46
  277. package/tui/__main__.py +0 -4
  278. package/tui/__pycache__/__init__.cpython-314.pyc +0 -0
  279. package/tui/__pycache__/_loop.cpython-314.pyc +0 -0
  280. package/tui/__pycache__/_path_fuzzy_search.cpython-314.pyc +0 -0
  281. package/tui/__pycache__/_path_match.cpython-314.pyc +0 -0
  282. package/tui/__pycache__/about.cpython-314.pyc +0 -0
  283. package/tui/__pycache__/agent.cpython-314.pyc +0 -0
  284. package/tui/__pycache__/agent_schema.cpython-314.pyc +0 -0
  285. package/tui/__pycache__/agents.cpython-314.pyc +0 -0
  286. package/tui/__pycache__/answer.cpython-314.pyc +0 -0
  287. package/tui/__pycache__/app.cpython-313.pyc +0 -0
  288. package/tui/__pycache__/app.cpython-314.pyc +0 -0
  289. package/tui/__pycache__/atomic.cpython-314.pyc +0 -0
  290. package/tui/__pycache__/complete.cpython-314.pyc +0 -0
  291. package/tui/__pycache__/constants.cpython-314.pyc +0 -0
  292. package/tui/__pycache__/conversation_markdown.cpython-314.pyc +0 -0
  293. package/tui/__pycache__/danger.cpython-314.pyc +0 -0
  294. package/tui/__pycache__/db.cpython-314.pyc +0 -0
  295. package/tui/__pycache__/dec.cpython-314.pyc +0 -0
  296. package/tui/__pycache__/directory.cpython-314.pyc +0 -0
  297. package/tui/__pycache__/directory_suggester.cpython-314.pyc +0 -0
  298. package/tui/__pycache__/directory_watcher.cpython-314.pyc +0 -0
  299. package/tui/__pycache__/format_path.cpython-314.pyc +0 -0
  300. package/tui/__pycache__/fuzzy.cpython-314.pyc +0 -0
  301. package/tui/__pycache__/fuzzy_index.cpython-314.pyc +0 -0
  302. package/tui/__pycache__/history.cpython-314.pyc +0 -0
  303. package/tui/__pycache__/jsonrpc.cpython-314.pyc +0 -0
  304. package/tui/__pycache__/menus.cpython-314.pyc +0 -0
  305. package/tui/__pycache__/message_log.cpython-314.pyc +0 -0
  306. package/tui/__pycache__/messages.cpython-314.pyc +0 -0
  307. package/tui/__pycache__/path_complete.cpython-314.pyc +0 -0
  308. package/tui/__pycache__/path_filter.cpython-314.pyc +0 -0
  309. package/tui/__pycache__/paths.cpython-314.pyc +0 -0
  310. package/tui/__pycache__/pill.cpython-314.pyc +0 -0
  311. package/tui/__pycache__/platform_commands.cpython-314.pyc +0 -0
  312. package/tui/__pycache__/protocol.cpython-314.pyc +0 -0
  313. package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
  314. package/tui/__pycache__/settings.cpython-314.pyc +0 -0
  315. package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -0
  316. package/tui/__pycache__/shell.cpython-314.pyc +0 -0
  317. package/tui/__pycache__/shell_read.cpython-314.pyc +0 -0
  318. package/tui/__pycache__/slash_command.cpython-314.pyc +0 -0
  319. package/tui/__pycache__/version.cpython-314.pyc +0 -0
  320. package/tui/_loop.py +0 -86
  321. package/tui/_path_fuzzy_search.py +0 -48
  322. package/tui/_path_match.py +0 -141
  323. package/tui/about.py +0 -95
  324. package/tui/acp/__pycache__/agent.cpython-314.pyc +0 -0
  325. package/tui/acp/__pycache__/api.cpython-314.pyc +0 -0
  326. package/tui/acp/__pycache__/encode_tool_call_id.cpython-314.pyc +0 -0
  327. package/tui/acp/__pycache__/messages.cpython-314.pyc +0 -0
  328. package/tui/acp/__pycache__/prompt.cpython-314.pyc +0 -0
  329. package/tui/acp/__pycache__/protocol.cpython-314.pyc +0 -0
  330. package/tui/acp/agent.py +0 -1002
  331. package/tui/acp/api.py +0 -73
  332. package/tui/acp/encode_tool_call_id.py +0 -12
  333. package/tui/acp/messages.py +0 -203
  334. package/tui/acp/prompt.py +0 -53
  335. package/tui/acp/protocol.py +0 -499
  336. package/tui/agent.py +0 -70
  337. package/tui/agent_schema.py +0 -76
  338. package/tui/agents.py +0 -46
  339. package/tui/ansi/__init__.py +0 -1
  340. package/tui/ansi/__pycache__/__init__.cpython-314.pyc +0 -0
  341. package/tui/ansi/__pycache__/_ansi.cpython-314.pyc +0 -0
  342. package/tui/ansi/__pycache__/_ansi_colors.cpython-314.pyc +0 -0
  343. package/tui/ansi/__pycache__/_control_codes.cpython-314.pyc +0 -0
  344. package/tui/ansi/__pycache__/_keys.cpython-314.pyc +0 -0
  345. package/tui/ansi/__pycache__/_sgr_styles.cpython-314.pyc +0 -0
  346. package/tui/ansi/__pycache__/_stream_parser.cpython-314.pyc +0 -0
  347. package/tui/ansi/_ansi.py +0 -1689
  348. package/tui/ansi/_ansi_colors.py +0 -264
  349. package/tui/ansi/_control_codes.py +0 -37
  350. package/tui/ansi/_keys.py +0 -251
  351. package/tui/ansi/_sgr_styles.py +0 -64
  352. package/tui/ansi/_stream_parser.py +0 -418
  353. package/tui/answer.py +0 -12
  354. package/tui/app.py +0 -1266
  355. package/tui/atomic.py +0 -37
  356. package/tui/cli.py +0 -313
  357. package/tui/code_analyze.py +0 -27
  358. package/tui/complete.py +0 -38
  359. package/tui/constants.py +0 -61
  360. package/tui/conversation_markdown.py +0 -30
  361. package/tui/danger.py +0 -372
  362. package/tui/data/agents/ampcode.com.toml +0 -52
  363. package/tui/data/agents/augmentcode.com.toml +0 -41
  364. package/tui/data/agents/cdh.cloud-dev-harness.toml +0 -23
  365. package/tui/data/agents/claude.com.toml +0 -41
  366. package/tui/data/agents/copilot.github.com.toml +0 -29
  367. package/tui/data/agents/crowai.dev.toml +0 -36
  368. package/tui/data/agents/cursor.com.toml +0 -38
  369. package/tui/data/agents/deepagents.langchain.com +0 -34
  370. package/tui/data/agents/docker.com.toml +0 -60
  371. package/tui/data/agents/geminicli.com.toml +0 -28
  372. package/tui/data/agents/goose.ai.toml +0 -52
  373. package/tui/data/agents/inference.huggingface.co.toml +0 -41
  374. package/tui/data/agents/kimi.com.toml +0 -35
  375. package/tui/data/agents/kiro.dev.toml +0 -43
  376. package/tui/data/agents/onecode.dev.toml +0 -22
  377. package/tui/data/agents/openai.com.toml +0 -53
  378. package/tui/data/agents/openclaw.ai.toml +0 -37
  379. package/tui/data/agents/opencode.ai.toml +0 -39
  380. package/tui/data/agents/openhands.dev.toml +0 -46
  381. package/tui/data/agents/stakpak.dev.toml +0 -62
  382. package/tui/data/agents/vibe.mistral.ai.toml +0 -31
  383. package/tui/data/agents/vtcode.dev.toml +0 -63
  384. package/tui/data/images/frog.png +0 -0
  385. package/tui/data/sounds/question.wav +0 -0
  386. package/tui/data/sounds/turn-over.wav +0 -0
  387. package/tui/db.py +0 -213
  388. package/tui/dec.py +0 -332
  389. package/tui/directory.py +0 -234
  390. package/tui/directory_suggester.py +0 -93
  391. package/tui/directory_watcher.py +0 -231
  392. package/tui/format_path.py +0 -25
  393. package/tui/fuzzy.py +0 -140
  394. package/tui/fuzzy_index.py +0 -275
  395. package/tui/gist.py +0 -33
  396. package/tui/history.py +0 -138
  397. package/tui/jsonrpc.py +0 -578
  398. package/tui/menus.py +0 -14
  399. package/tui/message_log.py +0 -69
  400. package/tui/messages.py +0 -144
  401. package/tui/option_content.py +0 -51
  402. package/tui/os.py +0 -0
  403. package/tui/path_complete.py +0 -217
  404. package/tui/path_filter.py +0 -124
  405. package/tui/paths.py +0 -87
  406. package/tui/pill.py +0 -23
  407. package/tui/platform_commands.py +0 -52
  408. package/tui/prompt/__pycache__/extract.cpython-314.pyc +0 -0
  409. package/tui/prompt/__pycache__/resource.cpython-314.pyc +0 -0
  410. package/tui/prompt/extract.py +0 -19
  411. package/tui/prompt/resource.py +0 -68
  412. package/tui/protocol.py +0 -28
  413. package/tui/screens/__init__.py +0 -0
  414. package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
  415. package/tui/screens/__pycache__/agent_modal.cpython-314.pyc +0 -0
  416. package/tui/screens/__pycache__/component_picker.cpython-314.pyc +0 -0
  417. package/tui/screens/__pycache__/diff_screen.cpython-314.pyc +0 -0
  418. package/tui/screens/__pycache__/log.cpython-314.pyc +0 -0
  419. package/tui/screens/__pycache__/main.cpython-313.pyc +0 -0
  420. package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
  421. package/tui/screens/__pycache__/permissions.cpython-314.pyc +0 -0
  422. package/tui/screens/__pycache__/projects_app.cpython-314.pyc +0 -0
  423. package/tui/screens/__pycache__/projects_screen.cpython-314.pyc +0 -0
  424. package/tui/screens/__pycache__/sessions.cpython-314.pyc +0 -0
  425. package/tui/screens/__pycache__/store.cpython-314.pyc +0 -0
  426. package/tui/screens/__pycache__/tool_content_screen.cpython-314.pyc +0 -0
  427. package/tui/screens/action_modal.py +0 -94
  428. package/tui/screens/agent_modal.py +0 -175
  429. package/tui/screens/command_edit_modal.py +0 -74
  430. package/tui/screens/component_picker.py +0 -168
  431. package/tui/screens/diff_screen.py +0 -84
  432. package/tui/screens/log.py +0 -553
  433. package/tui/screens/main.py +0 -385
  434. package/tui/screens/main.tcss +0 -655
  435. package/tui/screens/permissions.py +0 -404
  436. package/tui/screens/permissions.tcss +0 -72
  437. package/tui/screens/projects.tcss +0 -80
  438. package/tui/screens/projects_app.py +0 -347
  439. package/tui/screens/projects_screen.py +0 -284
  440. package/tui/screens/session_resume_modal.py +0 -172
  441. package/tui/screens/session_resume_modal.tcss +0 -35
  442. package/tui/screens/sessions.py +0 -164
  443. package/tui/screens/sessions.tcss +0 -119
  444. package/tui/screens/settings.py +0 -254
  445. package/tui/screens/settings.tcss +0 -101
  446. package/tui/screens/store.py +0 -500
  447. package/tui/screens/store.tcss +0 -274
  448. package/tui/screens/tool_content_screen.py +0 -59
  449. package/tui/session_tracker.py +0 -123
  450. package/tui/settings.py +0 -353
  451. package/tui/settings_schema.py +0 -431
  452. package/tui/shell.py +0 -304
  453. package/tui/shell_read.py +0 -42
  454. package/tui/slash_command.py +0 -34
  455. package/tui/tui.tcss +0 -246
  456. package/tui/twitter.py +0 -38
  457. package/tui/version.py +0 -80
  458. package/tui/visuals/__init__.py +0 -0
  459. package/tui/visuals/__pycache__/__init__.cpython-314.pyc +0 -0
  460. package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
  461. package/tui/visuals/columns.py +0 -272
  462. package/tui/widgets/__init__.py +0 -0
  463. package/tui/widgets/__pycache__/__init__.cpython-314.pyc +0 -0
  464. package/tui/widgets/__pycache__/acp_content.cpython-314.pyc +0 -0
  465. package/tui/widgets/__pycache__/agent_response.cpython-314.pyc +0 -0
  466. package/tui/widgets/__pycache__/agent_thought.cpython-314.pyc +0 -0
  467. package/tui/widgets/__pycache__/ask_user.cpython-314.pyc +0 -0
  468. package/tui/widgets/__pycache__/condensed_path.cpython-314.pyc +0 -0
  469. package/tui/widgets/__pycache__/context_stats.cpython-314.pyc +0 -0
  470. package/tui/widgets/__pycache__/conversation.cpython-314.pyc +0 -0
  471. package/tui/widgets/__pycache__/diff_view.cpython-314.pyc +0 -0
  472. package/tui/widgets/__pycache__/directory_input.cpython-314.pyc +0 -0
  473. package/tui/widgets/__pycache__/flash.cpython-314.pyc +0 -0
  474. package/tui/widgets/__pycache__/future_text.cpython-314.pyc +0 -0
  475. package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
  476. package/tui/widgets/__pycache__/highlighted_textarea.cpython-314.pyc +0 -0
  477. package/tui/widgets/__pycache__/load_more.cpython-314.pyc +0 -0
  478. package/tui/widgets/__pycache__/mandelbrot.cpython-314.pyc +0 -0
  479. package/tui/widgets/__pycache__/markdown_note.cpython-314.pyc +0 -0
  480. package/tui/widgets/__pycache__/menu.cpython-314.pyc +0 -0
  481. package/tui/widgets/__pycache__/modified_files.cpython-314.pyc +0 -0
  482. package/tui/widgets/__pycache__/non_selectable_label.cpython-314.pyc +0 -0
  483. package/tui/widgets/__pycache__/note.cpython-314.pyc +0 -0
  484. package/tui/widgets/__pycache__/path_search.cpython-314.pyc +0 -0
  485. package/tui/widgets/__pycache__/plan.cpython-314.pyc +0 -0
  486. package/tui/widgets/__pycache__/project_directory_tree.cpython-314.pyc +0 -0
  487. package/tui/widgets/__pycache__/project_grid_select.cpython-314.pyc +0 -0
  488. package/tui/widgets/__pycache__/project_summary.cpython-314.pyc +0 -0
  489. package/tui/widgets/__pycache__/prompt.cpython-314.pyc +0 -0
  490. package/tui/widgets/__pycache__/question.cpython-314.pyc +0 -0
  491. package/tui/widgets/__pycache__/session_grid_select.cpython-314.pyc +0 -0
  492. package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
  493. package/tui/widgets/__pycache__/session_tabs.cpython-314.pyc +0 -0
  494. package/tui/widgets/__pycache__/shell_result.cpython-314.pyc +0 -0
  495. package/tui/widgets/__pycache__/shell_terminal.cpython-314.pyc +0 -0
  496. package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
  497. package/tui/widgets/__pycache__/slash_complete.cpython-314.pyc +0 -0
  498. package/tui/widgets/__pycache__/strike_text.cpython-314.pyc +0 -0
  499. package/tui/widgets/__pycache__/subagent.cpython-314.pyc +0 -0
  500. package/tui/widgets/__pycache__/subagent_screen.cpython-314.pyc +0 -0
  501. package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
  502. package/tui/widgets/__pycache__/throbber.cpython-314.pyc +0 -0
  503. package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
  504. package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
  505. package/tui/widgets/acp_content.py +0 -70
  506. package/tui/widgets/agent_response.py +0 -76
  507. package/tui/widgets/agent_thought.py +0 -167
  508. package/tui/widgets/ask_user.py +0 -264
  509. package/tui/widgets/command_pane.py +0 -223
  510. package/tui/widgets/condensed_path.py +0 -115
  511. package/tui/widgets/context_stats.py +0 -66
  512. package/tui/widgets/conversation.py +0 -2641
  513. package/tui/widgets/danger_warning.py +0 -65
  514. package/tui/widgets/diff_view.py +0 -69
  515. package/tui/widgets/directory_input.py +0 -8
  516. package/tui/widgets/flash.py +0 -81
  517. package/tui/widgets/future_text.py +0 -126
  518. package/tui/widgets/grid_select.py +0 -234
  519. package/tui/widgets/highlighted_textarea.py +0 -180
  520. package/tui/widgets/load_more.py +0 -24
  521. package/tui/widgets/mandelbrot.py +0 -294
  522. package/tui/widgets/markdown_note.py +0 -13
  523. package/tui/widgets/menu.py +0 -147
  524. package/tui/widgets/modified_files.py +0 -306
  525. package/tui/widgets/non_selectable_label.py +0 -5
  526. package/tui/widgets/note.py +0 -18
  527. package/tui/widgets/path_search.py +0 -492
  528. package/tui/widgets/plan.py +0 -285
  529. package/tui/widgets/project_directory_tree.py +0 -102
  530. package/tui/widgets/project_grid_select.py +0 -64
  531. package/tui/widgets/project_summary.py +0 -33
  532. package/tui/widgets/prompt.py +0 -795
  533. package/tui/widgets/question.py +0 -360
  534. package/tui/widgets/session_grid_select.py +0 -230
  535. package/tui/widgets/session_summary.py +0 -115
  536. package/tui/widgets/session_tabs.py +0 -188
  537. package/tui/widgets/shell_result.py +0 -35
  538. package/tui/widgets/shell_terminal.py +0 -40
  539. package/tui/widgets/side_bar.py +0 -124
  540. package/tui/widgets/slash_complete.py +0 -235
  541. package/tui/widgets/strike_text.py +0 -70
  542. package/tui/widgets/subagent.py +0 -287
  543. package/tui/widgets/subagent_screen.py +0 -709
  544. package/tui/widgets/terminal.py +0 -576
  545. package/tui/widgets/terminal_tool.py +0 -360
  546. package/tui/widgets/throbber.py +0 -100
  547. package/tui/widgets/tool_call.py +0 -398
  548. package/tui/widgets/user_input.py +0 -23
  549. package/tui/widgets/version.py +0 -5
  550. package/tui/widgets/welcome.py +0 -31
@@ -1,237 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import json
4
- from typing import AsyncIterator, Callable, Optional
5
-
6
- import httpx
7
-
8
- from onecode.models.provider import ChatResponse, Message, ModelResponse, Provider, ProviderRegistry
9
-
10
-
11
- class OpenAIProvider(Provider):
12
- name = "openai"
13
-
14
- def __init__(self, api_key: str = "", endpoint: str = "", **kwargs):
15
- self.api_key = api_key
16
- self._endpoint = endpoint or "https://api.openai.com/v1"
17
- self._stream_tool_calls: dict[int, dict] = {}
18
-
19
- def is_anthropic_style(self) -> bool:
20
- return False
21
-
22
- def prepare_messages(self, messages: list[Message]) -> list[dict]:
23
- """Prepare messages for OpenAI API, supporting multimodal (text + image) content."""
24
- system_parts = []
25
- non_system = []
26
-
27
- for m in messages:
28
- if m.role == "system":
29
- system_parts.append(m.to_api_content())
30
- else:
31
- non_system.append(m.to_multimodal_dict())
32
-
33
- if len(system_parts) > 1:
34
- combined_system = "\n\n".join(system_parts)
35
- elif system_parts:
36
- combined_system = system_parts[0]
37
- else:
38
- combined_system = ""
39
-
40
- if combined_system:
41
- non_system.insert(0, {"role": "system", "content": combined_system})
42
-
43
- return non_system
44
-
45
- def get_stream_tool_calls(self) -> list[dict]:
46
- return list(self._stream_tool_calls.values())
47
-
48
- async def chat(
49
- self, messages: list[Message], model: str = "gpt-4-turbo", **kwargs
50
- ) -> ModelResponse:
51
- key = self.resolve_api_key(self.api_key)
52
- if not key:
53
- return ModelResponse(
54
- content="API key not configured. Set OPENAI_API_KEY.",
55
- model=model,
56
- )
57
- body = {
58
- "model": model,
59
- "messages": self.prepare_messages(messages),
60
- }
61
- tools = kwargs.get("tools")
62
- if tools:
63
- body["tools"] = tools
64
- body.update({k: v for k, v in kwargs.items() if k != "tools"})
65
-
66
- async with httpx.AsyncClient(timeout=120) as client:
67
- resp = await client.post(
68
- f"{self._endpoint}/chat/completions",
69
- headers={
70
- "Authorization": f"Bearer {key}",
71
- "content-type": "application/json",
72
- },
73
- json=body,
74
- )
75
- data = resp.json()
76
- choice = data.get("choices", [{}])[0]
77
- msg = choice.get("message", {})
78
-
79
- content_blocks = []
80
- text = msg.get("content", "") or ""
81
- if text:
82
- content_blocks.append({"type": "text", "text": text})
83
-
84
- tool_calls = msg.get("tool_calls", [])
85
- for tc in tool_calls:
86
- func = tc.get("function", {})
87
- try:
88
- args = __import__("json").loads(func.get("arguments", "{}"))
89
- except Exception:
90
- args = {"raw": func.get("arguments", "")}
91
- if not isinstance(args, dict):
92
- args = {"raw": args}
93
- content_blocks.append({
94
- "type": "tool_use",
95
- "id": tc.get("id", ""),
96
- "name": func.get("name", ""),
97
- "input": args,
98
- })
99
-
100
- return ModelResponse(
101
- content=content_blocks,
102
- model=model,
103
- usage=data.get("usage", {}),
104
- raw=data,
105
- )
106
-
107
- async def chat_stream(
108
- self, messages: list[Message], model: str = "gpt-4-turbo", **kwargs
109
- ) -> AsyncIterator[str]:
110
- key = self.resolve_api_key(self.api_key)
111
- if not key:
112
- yield "API key not configured."
113
- return
114
- self._stream_tool_calls = {}
115
- body = {
116
- "model": model,
117
- "messages": self.prepare_messages(messages),
118
- "stream": True,
119
- }
120
- tools = kwargs.get("tools")
121
- if tools:
122
- body["tools"] = tools
123
- body.update({k: v for k, v in kwargs.items() if k not in ("tools", "stream")})
124
-
125
- async with httpx.AsyncClient(timeout=300) as client:
126
- async with client.stream(
127
- "POST",
128
- f"{self._endpoint}/chat/completions",
129
- headers={
130
- "Authorization": f"Bearer {key}",
131
- "content-type": "application/json",
132
- },
133
- json=body,
134
- ) as resp:
135
- async for line in resp.aiter_lines():
136
- if line.startswith("data: ") and line[6:] != "[DONE]":
137
- import json
138
- chunk = json.loads(line[6:])
139
- delta = chunk.get("choices", [{}])[0].get("delta", {})
140
- yield delta.get("content", "")
141
- tc_deltas = delta.get("tool_calls", [])
142
- for tcd in tc_deltas:
143
- idx = tcd.get("index", 0)
144
- if idx not in self._stream_tool_calls:
145
- self._stream_tool_calls[idx] = {
146
- "id": tcd.get("id", ""),
147
- "name": tcd.get("function", {}).get("name", ""),
148
- "arguments": "",
149
- }
150
- args_delta = tcd.get("function", {}).get("arguments", "")
151
- self._stream_tool_calls[idx]["arguments"] += args_delta
152
- if tcd.get("id"):
153
- self._stream_tool_calls[idx]["id"] = tcd["id"]
154
- if tcd.get("function", {}).get("name"):
155
- self._stream_tool_calls[idx]["name"] = tcd["function"]["name"]
156
-
157
-
158
- async def chat_stream_response(
159
- self,
160
- messages: list[Message],
161
- model: str,
162
- on_text_chunk: Optional[Callable[[str], None]] = None,
163
- on_tool_call_delta: Optional[Callable[[str, str, str], None]] = None,
164
- **kwargs,
165
- ) -> ChatResponse:
166
- key = self.resolve_api_key(self.api_key)
167
- if not key:
168
- return ChatResponse(content="API key not configured.")
169
- self._stream_tool_calls = {}
170
- body = {
171
- "model": model,
172
- "messages": self.prepare_messages(messages),
173
- "stream": True,
174
- }
175
- tools = kwargs.get("tools")
176
- if tools:
177
- body["tools"] = tools
178
- body.update({k: v for k, v in kwargs.items() if k not in ("tools", "stream")})
179
-
180
- content_parts: list[str] = []
181
-
182
- async with httpx.AsyncClient(timeout=300) as client:
183
- async with client.stream(
184
- "POST",
185
- f"{self._endpoint}/chat/completions",
186
- headers={
187
- "Authorization": f"Bearer {key}",
188
- "content-type": "application/json",
189
- },
190
- json=body,
191
- ) as resp:
192
- async for line in resp.aiter_lines():
193
- if line.startswith("data: ") and line[6:] != "[DONE]":
194
- chunk = json.loads(line[6:])
195
- delta = chunk.get("choices", [{}])[0].get("delta", {})
196
- text = delta.get("content", "")
197
- if text:
198
- content_parts.append(text)
199
- if on_text_chunk:
200
- on_text_chunk(text)
201
- tc_deltas = delta.get("tool_calls", [])
202
- for tcd in tc_deltas:
203
- idx = tcd.get("index", 0)
204
- if idx not in self._stream_tool_calls:
205
- self._stream_tool_calls[idx] = {
206
- "id": tcd.get("id", ""),
207
- "name": tcd.get("function", {}).get("name", ""),
208
- "arguments": "",
209
- }
210
- args_delta = tcd.get("function", {}).get("arguments", "")
211
- self._stream_tool_calls[idx]["arguments"] += args_delta
212
- if tcd.get("id"):
213
- self._stream_tool_calls[idx]["id"] = tcd["id"]
214
- if tcd.get("function", {}).get("name"):
215
- self._stream_tool_calls[idx]["name"] = tcd["function"]["name"]
216
- if on_tool_call_delta:
217
- call_id = self._stream_tool_calls[idx].get("id", "")
218
- name = self._stream_tool_calls[idx].get("name", "")
219
- on_tool_call_delta(call_id, name, args_delta)
220
-
221
- tool_uses = []
222
- for nt in self._stream_tool_calls.values():
223
- try:
224
- inp = json.loads(nt.get("arguments", "{}"))
225
- except (json.JSONDecodeError, TypeError):
226
- inp = {"raw": nt.get("arguments", "")}
227
- if not isinstance(inp, dict):
228
- inp = {"raw": inp}
229
- tool_uses.append({"id": nt["id"], "name": nt["name"], "input": inp})
230
-
231
- return ChatResponse(
232
- content="".join(content_parts),
233
- tool_uses=tool_uses,
234
- )
235
-
236
-
237
- ProviderRegistry.register("openai", OpenAIProvider)
@@ -1,212 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass, field
4
- from typing import Optional
5
-
6
-
7
- @dataclass
8
- class ModelInfo:
9
- id: str
10
- provider: str
11
- context_window: int = 0
12
- max_output: int = 4096
13
- cost_per_1k_input: float = 0.0
14
- cost_per_1k_output: float = 0.0
15
- capabilities: list[str] = field(default_factory=list)
16
- description: str = ""
17
-
18
-
19
- REFERENCE_MODELS: list[ModelInfo] = [
20
- # ── Anthropic (Claude) ──
21
- ModelInfo(
22
- id="claude-3-opus-20240229",
23
- provider="anthropic",
24
- context_window=200000,
25
- max_output=4096,
26
- cost_per_1k_input=0.015,
27
- cost_per_1k_output=0.075,
28
- capabilities=["reasoning", "coding", "analysis", "complex"],
29
- description="Most capable Anthropic model for complex tasks",
30
- ),
31
- ModelInfo(
32
- id="claude-3-sonnet-20240229",
33
- provider="anthropic",
34
- context_window=200000,
35
- max_output=4096,
36
- cost_per_1k_input=0.003,
37
- cost_per_1k_output=0.015,
38
- capabilities=["coding", "design", "medium"],
39
- description="Balanced Anthropic model for everyday tasks",
40
- ),
41
- ModelInfo(
42
- id="claude-3-haiku-20240307",
43
- provider="anthropic",
44
- context_window=200000,
45
- max_output=4096,
46
- cost_per_1k_input=0.00025,
47
- cost_per_1k_output=0.00125,
48
- capabilities=["quick", "simple", "summarization"],
49
- description="Fastest Anthropic model for simple tasks",
50
- ),
51
- # ── OpenAI ──
52
- ModelInfo(
53
- id="gpt-4o",
54
- provider="openai",
55
- context_window=128000,
56
- max_output=16384,
57
- cost_per_1k_input=0.005,
58
- cost_per_1k_output=0.015,
59
- capabilities=["reasoning", "coding", "vision", "complex"],
60
- description="OpenAI multimodal flagship model",
61
- ),
62
- ModelInfo(
63
- id="gpt-4-turbo",
64
- provider="openai",
65
- context_window=128000,
66
- max_output=4096,
67
- cost_per_1k_input=0.01,
68
- cost_per_1k_output=0.03,
69
- capabilities=["reasoning", "coding", "complex"],
70
- description="OpenAI GPT-4 Turbo, fast and capable",
71
- ),
72
- # ── DeepSeek ──
73
- ModelInfo(
74
- id="deepseek-chat",
75
- provider="deepseek",
76
- context_window=128000,
77
- max_output=8192,
78
- cost_per_1k_input=0.00014,
79
- cost_per_1k_output=0.00028,
80
- capabilities=["reasoning", "coding", "general"],
81
- description="DeepSeek general-purpose chat model",
82
- ),
83
- ModelInfo(
84
- id="deepseek-reasoner",
85
- provider="deepseek",
86
- context_window=128000,
87
- max_output=8192,
88
- cost_per_1k_input=0.00055,
89
- cost_per_1k_output=0.00219,
90
- capabilities=["reasoning", "analysis", "complex"],
91
- description="DeepSeek reasoning model for complex tasks",
92
- ),
93
- # ── MiniMax ──
94
- ModelInfo(
95
- id="minimax-m1",
96
- provider="minimax",
97
- context_window=1000000,
98
- max_output=16384,
99
- cost_per_1k_input=0.001,
100
- cost_per_1k_output=0.003,
101
- capabilities=["reasoning", "coding", "long-context", "complex"],
102
- description="MiniMax M1 flagship model with 1M context",
103
- ),
104
- ModelInfo(
105
- id="minimax-m1-light",
106
- provider="minimax",
107
- context_window=128000,
108
- max_output=8192,
109
- cost_per_1k_input=0.0002,
110
- cost_per_1k_output=0.0006,
111
- capabilities=["coding", "general", "cost-efficient"],
112
- description="MiniMax M1 Light, faster and cost-effective",
113
- ),
114
- # ── Zhipu GLM ──
115
- ModelInfo(
116
- id="glm-4-plus",
117
- provider="glm",
118
- context_window=128000,
119
- max_output=8192,
120
- cost_per_1k_input=0.007,
121
- cost_per_1k_output=0.007,
122
- capabilities=["reasoning", "coding", "analysis"],
123
- description="GLM-4 Plus, Zhipu's most advanced model",
124
- ),
125
- ModelInfo(
126
- id="glm-4-flash",
127
- provider="glm",
128
- context_window=128000,
129
- max_output=4096,
130
- cost_per_1k_input=0.0001,
131
- cost_per_1k_output=0.0001,
132
- capabilities=["quick", "general", "cost-efficient"],
133
- description="GLM-4 Flash, fast and affordable",
134
- ),
135
- # ── Ollama (local) ──
136
- ModelInfo(
137
- id="llama2",
138
- provider="ollama",
139
- context_window=4096,
140
- max_output=2048,
141
- cost_per_1k_input=0.0,
142
- cost_per_1k_output=0.0,
143
- capabilities=["local", "simple"],
144
- description="Local Llama 2 model via Ollama",
145
- ),
146
- ModelInfo(
147
- id="codellama",
148
- provider="ollama",
149
- context_window=16384,
150
- max_output=4096,
151
- cost_per_1k_input=0.0,
152
- cost_per_1k_output=0.0,
153
- capabilities=["local", "coding"],
154
- description="Local CodeLlama model via Ollama",
155
- ),
156
- ]
157
-
158
-
159
- class ModelRegistry:
160
- _models: dict[str, ModelInfo] = {}
161
-
162
- @classmethod
163
- def initialize(cls):
164
- from onecode.config import load_config
165
- cfg = load_config()
166
- cls._models.clear()
167
- for provider, prov_cfg in cfg.providers.items():
168
- for model_id in prov_cfg.models:
169
- cls._models[model_id] = ModelInfo(
170
- id=model_id,
171
- provider=provider,
172
- context_window=0,
173
- max_output=4096,
174
- cost_per_1k_input=0.0,
175
- cost_per_1k_output=0.0,
176
- capabilities=[],
177
- description="",
178
- )
179
-
180
- @classmethod
181
- def get(cls, model_id: str) -> Optional[ModelInfo]:
182
- return cls._models.get(model_id)
183
-
184
- @classmethod
185
- def list_all(cls) -> list[ModelInfo]:
186
- return list(cls._models.values())
187
-
188
- @classmethod
189
- def list_by_provider(cls, provider: str) -> list[ModelInfo]:
190
- return [m for m in cls._models.values() if m.provider == provider]
191
-
192
- @classmethod
193
- def reference_table(cls) -> str:
194
- from rich.table import Table
195
-
196
- table = Table(title="Model Reference")
197
- table.add_column("Model", style="cyan")
198
- table.add_column("Provider", style="green")
199
- table.add_column("Context", justify="right")
200
- table.add_column("Input Cost", justify="right")
201
- table.add_column("Output Cost", justify="right")
202
- table.add_column("Capabilities")
203
- for m in cls._models.values():
204
- table.add_row(
205
- m.id,
206
- m.provider,
207
- f"{m.context_window:,}",
208
- f"${m.cost_per_1k_input:.5f}",
209
- f"${m.cost_per_1k_output:.5f}",
210
- ", ".join(m.capabilities),
211
- )
212
- return table
@@ -1,3 +0,0 @@
1
- from onecode.server.app import AgentServer
2
-
3
- __all__ = ["AgentServer"]
@@ -1,224 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
- import json
5
- import logging
6
- from typing import Optional
7
-
8
- from starlette.applications import Starlette
9
- from starlette.responses import JSONResponse, Response
10
- from starlette.routing import Route
11
-
12
- from onecode.agent.engine import AgentEngine
13
-
14
- logger = logging.getLogger("onecode.server")
15
-
16
-
17
- async def _sse_publisher(engine: AgentEngine, response: Response):
18
- """Stream agent output as SSE events."""
19
- send = response.__dict__.get("send")
20
-
21
- async def _on_text(text: str):
22
- if send:
23
- try:
24
- await send({
25
- "type": "http.response.body",
26
- "body": f"data: {json.dumps({'type': 'text', 'content': text})}\n\n".encode(),
27
- "more_body": True,
28
- })
29
- except Exception:
30
- pass
31
-
32
- engine.on_text_chunk = _on_text
33
- return send
34
-
35
-
36
- class AgentServer:
37
- """HTTP/SSE server for remote agent access (Clawd-Code pattern)."""
38
-
39
- def __init__(self, engine: AgentEngine, host: str = "127.0.0.1", port: int = 8765):
40
- self._engine = engine
41
- self._host = host
42
- self._port = port
43
- self._app = self._build_app()
44
- self._server: Optional[asyncio.AbstractServer] = None
45
-
46
- def _build_app(self) -> Starlette:
47
- routes = [
48
- Route("/health", endpoint=self._handle_health, methods=["GET"]),
49
- Route("/status", endpoint=self._handle_status, methods=["GET"]),
50
- Route("/chat", endpoint=self._handle_chat, methods=["POST"]),
51
- Route("/events", endpoint=self._handle_events, methods=["GET"]),
52
- ]
53
- return Starlette(routes=routes, on_shutdown=[self._shutdown])
54
-
55
- async def _handle_health(self, request):
56
- return JSONResponse({"status": "ok"})
57
-
58
- async def _handle_status(self, request):
59
- return JSONResponse({
60
- "iterations": self._engine.iterations,
61
- "total_tokens": self._engine.total_tokens,
62
- "provider": getattr(self._engine.app, "current_provider", None),
63
- "model": getattr(self._engine.app, "current_model", None),
64
- })
65
-
66
- async def _handle_chat(self, request):
67
- try:
68
- body = await request.json()
69
- except Exception:
70
- return JSONResponse({"error": "invalid JSON body"}, status_code=400)
71
-
72
- user_input = body.get("message", "")
73
- if not user_input:
74
- return JSONResponse({"error": "message is required"}, status_code=400)
75
-
76
- response_text = await self._engine.chat(user_input)
77
- return JSONResponse({"response": response_text})
78
-
79
- async def _handle_events(self, request):
80
- async def _send_events(send):
81
- await send({
82
- "type": "http.response.start",
83
- "status": 200,
84
- "headers": [
85
- (b"content-type", b"text/event-stream"),
86
- (b"cache-control", b"no-cache"),
87
- (b"connection", b"keep-alive"),
88
- (b"access-control-allow-origin", b"*"),
89
- ],
90
- })
91
-
92
- user_input = request.query_params.get("message", "")
93
- if not user_input:
94
- await send({
95
- "type": "http.response.body",
96
- "body": b"data: {\"error\": \"message query param required\"}\n\n",
97
- "more_body": False,
98
- })
99
- return
100
-
101
- from onecode.models.messages import StreamEvent, StreamEventType
102
-
103
- _tc_args: dict[str, str] = {}
104
-
105
- def _on_tool_call_delta(call_id: str, name: str, args_delta: str) -> None:
106
- if not args_delta:
107
- return
108
- _tc_args[call_id] = _tc_args.get(call_id, "") + args_delta
109
- payload = json.dumps({
110
- "type": "tool_call_args",
111
- "toolCallId": call_id,
112
- "name": name,
113
- "args": _tc_args[call_id],
114
- })
115
- asyncio.ensure_future(send({
116
- "type": "http.response.body",
117
- "body": f"data: {payload}\n\n".encode(),
118
- "more_body": True,
119
- }))
120
-
121
- self._engine.on_tool_call_delta = _on_tool_call_delta
122
-
123
- text_buffer = []
124
- async for event in self._engine.chat_stream(user_input):
125
- if isinstance(event, StreamEvent):
126
- if event.type == StreamEventType.TEXT_DELTA and event.text:
127
- text_buffer.append(event.text)
128
- payload = json.dumps({"type": "delta", "text": event.text})
129
- await send({
130
- "type": "http.response.body",
131
- "body": f"data: {payload}\n\n".encode(),
132
- "more_body": True,
133
- })
134
- elif event.type == StreamEventType.THINKING and event.thinking:
135
- payload = json.dumps({"type": "thinking", "content": event.thinking})
136
- await send({
137
- "type": "http.response.body",
138
- "body": f"data: {payload}\n\n".encode(),
139
- "more_body": True,
140
- })
141
- elif event.type == StreamEventType.TOOL_CALL_START:
142
- payload = json.dumps({
143
- "type": "tool_call_start",
144
- "toolCallId": event.tool_id,
145
- "name": event.tool_name,
146
- })
147
- await send({
148
- "type": "http.response.body",
149
- "body": f"data: {payload}\n\n".encode(),
150
- "more_body": True,
151
- })
152
- elif event.type == StreamEventType.TOOL_CALL_COMPLETE:
153
- payload = json.dumps({
154
- "type": "tool_call_complete",
155
- "toolCallId": event.tool_id,
156
- "name": event.tool_name,
157
- "args": event.tool_args,
158
- })
159
- await send({
160
- "type": "http.response.body",
161
- "body": f"data: {payload}\n\n".encode(),
162
- "more_body": True,
163
- })
164
- elif event.type == StreamEventType.TOOL_RESULT:
165
- payload = json.dumps({
166
- "type": "tool_result",
167
- "toolCallId": event.tool_id,
168
- "content": event.result_content,
169
- "isError": event.result_is_error,
170
- })
171
- await send({
172
- "type": "http.response.body",
173
- "body": f"data: {payload}\n\n".encode(),
174
- "more_body": True,
175
- })
176
- elif event.type == StreamEventType.ERROR:
177
- payload = json.dumps({"type": "error", "message": event.error_message})
178
- await send({
179
- "type": "http.response.body",
180
- "body": f"data: {payload}\n\n".encode(),
181
- "more_body": True,
182
- })
183
- else:
184
- text_buffer.append(str(event))
185
-
186
- full_text = "".join(text_buffer)
187
- payload = json.dumps({"type": "done", "text": full_text})
188
- await send({
189
- "type": "http.response.body",
190
- "body": f"data: {payload}\n\n".encode(),
191
- "more_body": False,
192
- })
193
-
194
- return Response(
195
- content=None,
196
- media_type="text/event-stream",
197
- headers={
198
- "Cache-Control": "no-cache",
199
- "Connection": "keep-alive",
200
- "Access-Control-Allow-Origin": "*",
201
- },
202
- )
203
-
204
- async def _shutdown(self):
205
- logger.info("Server shutting down")
206
-
207
- async def start(self):
208
- import uvicorn
209
- cfg = uvicorn.Config(
210
- self._app,
211
- host=self._host,
212
- port=self._port,
213
- log_level="info",
214
- lifespan="on",
215
- )
216
- server = uvicorn.Server(cfg)
217
- logger.info(f"Agent server starting on http://{self._host}:{self._port}")
218
- await server.serve()
219
-
220
- def start_background(self) -> None:
221
- """Start server in background thread."""
222
- import threading
223
- t = threading.Thread(target=lambda: asyncio.run(self.start()), daemon=True)
224
- t.start()
@@ -1,11 +0,0 @@
1
- from onecode.skills.model import Skill
2
- from onecode.skills.loader import SkillLoader
3
- from onecode.skills.frontmatter import parse_frontmatter
4
- from onecode.skills.argument_substitution import substitute_arguments
5
- from onecode.skills.create import create_skill_scaffold
6
-
7
- __all__ = [
8
- "Skill", "SkillLoader",
9
- "parse_frontmatter", "substitute_arguments",
10
- "create_skill_scaffold",
11
- ]