@scemoon/cdh 1.0.9 → 1.0.10-beta.1

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 (786) hide show
  1. package/package.json +9 -2
  2. package/ai-dlc-skill/SKILL.md +0 -106
  3. package/ai-dlc-skill/architecture/project-structure.md +0 -78
  4. package/ai-dlc-skill/brownfield/README.md +0 -36
  5. package/ai-dlc-skill/brownfield/entry.md +0 -45
  6. package/ai-dlc-skill/brownfield/generate-context.sh +0 -64
  7. package/ai-dlc-skill/brownfield/scripts/deps.sh +0 -27
  8. package/ai-dlc-skill/brownfield/scripts/discover.sh +0 -34
  9. package/ai-dlc-skill/brownfield/scripts/extract-api.sh +0 -45
  10. package/ai-dlc-skill/components/backend.md +0 -47
  11. package/ai-dlc-skill/components/desktop.md +0 -63
  12. package/ai-dlc-skill/components/mya.md +0 -219
  13. package/ai-dlc-skill/components/native.md +0 -73
  14. package/ai-dlc-skill/components/tta.md +0 -235
  15. package/ai-dlc-skill/components/web.md +0 -77
  16. package/ai-dlc-skill/components/wxa.md +0 -219
  17. package/ai-dlc-skill/contracts/README.md +0 -25
  18. package/ai-dlc-skill/core/adaptive-flow.md +0 -107
  19. package/ai-dlc-skill/core/security.md +0 -29
  20. package/ai-dlc-skill/core/task-registry.md +0 -153
  21. package/ai-dlc-skill/cross-tool/README.md +0 -20
  22. package/ai-dlc-skill/cross-tool/cline/export.sh +0 -38
  23. package/ai-dlc-skill/cross-tool/copilot/export.sh +0 -41
  24. package/ai-dlc-skill/cross-tool/cursor/export.sh +0 -53
  25. package/ai-dlc-skill/cross-tool/onecode/export.sh +0 -27
  26. package/ai-dlc-skill/cross-tool/opencode/export.sh +0 -38
  27. package/ai-dlc-skill/phases/debug/entry.md +0 -48
  28. package/ai-dlc-skill/phases/debug/lifecycle.md +0 -284
  29. package/ai-dlc-skill/phases/deliver/entry.md +0 -35
  30. package/ai-dlc-skill/phases/deliver/lifecycle.md +0 -185
  31. package/ai-dlc-skill/phases/deliver/prompt.md +0 -54
  32. package/ai-dlc-skill/phases/deliver/rules.md +0 -61
  33. package/ai-dlc-skill/phases/plan/design_system/accessibility.md +0 -268
  34. package/ai-dlc-skill/phases/plan/design_system/atomic_design.md +0 -341
  35. package/ai-dlc-skill/phases/plan/design_system/component_spec.md +0 -398
  36. package/ai-dlc-skill/phases/plan/design_system/design_tokens.md +0 -190
  37. package/ai-dlc-skill/phases/plan/design_system/iconography.md +0 -299
  38. package/ai-dlc-skill/phases/plan/design_system/platform_ui/desktop.md +0 -318
  39. package/ai-dlc-skill/phases/plan/design_system/platform_ui/mya.md +0 -354
  40. package/ai-dlc-skill/phases/plan/design_system/platform_ui/native.md +0 -328
  41. package/ai-dlc-skill/phases/plan/design_system/platform_ui/tta.md +0 -394
  42. package/ai-dlc-skill/phases/plan/design_system/platform_ui/web.md +0 -287
  43. package/ai-dlc-skill/phases/plan/design_system/platform_ui/wxa.md +0 -374
  44. package/ai-dlc-skill/phases/plan/design_system/theme_system.md +0 -318
  45. package/ai-dlc-skill/phases/plan/entry.md +0 -33
  46. package/ai-dlc-skill/phases/plan/lifecycle.md +0 -260
  47. package/ai-dlc-skill/phases/plan/prompt.md +0 -75
  48. package/ai-dlc-skill/phases/plan/rules.md +0 -60
  49. package/ai-dlc-skill/phases/understand/entry.md +0 -36
  50. package/ai-dlc-skill/phases/understand/lifecycle.md +0 -184
  51. package/ai-dlc-skill/phases/understand/prompt.md +0 -58
  52. package/ai-dlc-skill/phases/understand/rules.md +0 -49
  53. package/ai-dlc-skill/phases/verify/config/base_url.md +0 -65
  54. package/ai-dlc-skill/phases/verify/entry.md +0 -59
  55. package/ai-dlc-skill/phases/verify/gates/browser_e2e.md +0 -96
  56. package/ai-dlc-skill/phases/verify/lifecycle.md +0 -217
  57. package/ai-dlc-skill/phases/verify/prompt.md +0 -73
  58. package/ai-dlc-skill/phases/verify/rules.md +0 -91
  59. package/ai-dlc-skill/phases/verify/runners/playwright_local.md +0 -103
  60. package/ai-dlc-skill/practices/bdd.md +0 -119
  61. package/ai-dlc-skill/practices/sdd.md +0 -84
  62. package/ai-dlc-skill/practices/tdd.md +0 -128
  63. package/ai-dlc-skill/providers/README.md +0 -114
  64. package/ai-dlc-skill/providers/aliyun/SKILL.md +0 -204
  65. package/ai-dlc-skill/providers/aliyun/api/rest-api.md +0 -214
  66. package/ai-dlc-skill/providers/aliyun/api/sdk.md +0 -307
  67. package/ai-dlc-skill/providers/aliyun/best-practices/database-design.md +0 -363
  68. package/ai-dlc-skill/providers/aliyun/best-practices/function-design.md +0 -424
  69. package/ai-dlc-skill/providers/aliyun/best-practices/troubleshooting.md +0 -258
  70. package/ai-dlc-skill/providers/aliyun/cli/database.md +0 -263
  71. package/ai-dlc-skill/providers/aliyun/cli/functions.md +0 -263
  72. package/ai-dlc-skill/providers/aliyun/cli/hosting.md +0 -226
  73. package/ai-dlc-skill/providers/aliyun/cli/setup.md +0 -235
  74. package/ai-dlc-skill/providers/aliyun/cli/storage.md +0 -315
  75. package/ai-dlc-skill/providers/aliyun/deployment.yaml +0 -66
  76. package/ai-dlc-skill/providers/aliyun/integration/ci-cd.md +0 -288
  77. package/ai-dlc-skill/providers/aliyun/preview.yaml +0 -84
  78. package/ai-dlc-skill/providers/aliyun/provider.yaml +0 -160
  79. package/ai-dlc-skill/providers/aliyun/security/authentication.md +0 -254
  80. package/ai-dlc-skill/providers/aliyun/services/cdn-hosting.md +0 -220
  81. package/ai-dlc-skill/providers/aliyun/services/database.md +0 -319
  82. package/ai-dlc-skill/providers/aliyun/services/function-compute.md +0 -273
  83. package/ai-dlc-skill/providers/aliyun/services/overview.md +0 -163
  84. package/ai-dlc-skill/providers/aliyun/services/serverless-app-engine.md +0 -266
  85. package/ai-dlc-skill/providers/aliyun/services/storage.md +0 -269
  86. package/ai-dlc-skill/providers/tcb/SKILL.md +0 -208
  87. package/ai-dlc-skill/providers/tcb/api/rest-api.md +0 -338
  88. package/ai-dlc-skill/providers/tcb/api/sdk.md +0 -288
  89. package/ai-dlc-skill/providers/tcb/best-practices/database-design.md +0 -452
  90. package/ai-dlc-skill/providers/tcb/best-practices/function-design.md +0 -502
  91. package/ai-dlc-skill/providers/tcb/best-practices/troubleshooting.md +0 -462
  92. package/ai-dlc-skill/providers/tcb/cli/cls.md +0 -133
  93. package/ai-dlc-skill/providers/tcb/cli/database.md +0 -230
  94. package/ai-dlc-skill/providers/tcb/cli/env.md +0 -207
  95. package/ai-dlc-skill/providers/tcb/cli/functions.md +0 -276
  96. package/ai-dlc-skill/providers/tcb/cli/hosting.md +0 -219
  97. package/ai-dlc-skill/providers/tcb/cli/setup.md +0 -218
  98. package/ai-dlc-skill/providers/tcb/cli/storage.md +0 -233
  99. package/ai-dlc-skill/providers/tcb/deployment.yaml +0 -111
  100. package/ai-dlc-skill/providers/tcb/integration/ci-cd.md +0 -309
  101. package/ai-dlc-skill/providers/tcb/integration/mcp-server.md +0 -371
  102. package/ai-dlc-skill/providers/tcb/preview.yaml +0 -83
  103. package/ai-dlc-skill/providers/tcb/provider.yaml +0 -172
  104. package/ai-dlc-skill/providers/tcb/security/authentication.md +0 -241
  105. package/ai-dlc-skill/providers/tcb/services/cloud-database.md +0 -299
  106. package/ai-dlc-skill/providers/tcb/services/cloud-functions.md +0 -265
  107. package/ai-dlc-skill/providers/tcb/services/cloud-hosting.md +0 -264
  108. package/ai-dlc-skill/providers/tcb/services/cloud-run.md +0 -285
  109. package/ai-dlc-skill/providers/tcb/services/cloud-storage.md +0 -245
  110. package/ai-dlc-skill/providers/tcb/services/overview.md +0 -174
  111. package/ai-dlc-skill/pybdd/README.md +0 -41
  112. package/ai-dlc-skill/pybdd/conftest.py +0 -17
  113. package/ai-dlc-skill/pybdd/example/auth/login.feature +0 -32
  114. package/ai-dlc-skill/pybdd/pytest.ini +0 -5
  115. package/ai-dlc-skill/pybdd/steps/.gitkeep +0 -1
  116. package/ai-dlc-skill/pybdd/steps/test_example_steps.py +0 -65
  117. package/ai-dlc-skill/requirements.md +0 -140
  118. package/ai-dlc-skill/skill.yaml +0 -135
  119. package/ai-dlc-skill/templates/brownfield/context.md +0 -78
  120. package/ai-dlc-skill/templates/integration/CHANGELOG.md +0 -41
  121. package/ai-dlc-skill/templates/integration/asyncapi.yaml +0 -43
  122. package/ai-dlc-skill/templates/integration/contract-diff.md +0 -63
  123. package/ai-dlc-skill/templates/integration/contract-spec.md +0 -49
  124. package/ai-dlc-skill/templates/integration/openapi.yaml +0 -18
  125. package/ai-dlc-skill/templates/integration/runtime-contract.yaml +0 -36
  126. package/ai-dlc-skill/templates/plan/design.md +0 -49
  127. package/ai-dlc-skill/templates/plan/task-list.md +0 -32
  128. package/ai-dlc-skill/templates/project/README.md +0 -126
  129. package/ai-dlc-skill/templates/project/template.md +0 -119
  130. package/ai-dlc-skill/templates/understand/feature.feature +0 -30
  131. package/ai-dlc-skill/templates/understand/intent.md +0 -29
  132. package/ai-dlc-skill/templates/understand/spec-delta.md +0 -47
  133. package/ai-dlc-skill/templates/verify/test-unit.py +0 -27
  134. package/ai-dlc-skill/walkthrough/collect.sh +0 -50
  135. package/ai-dlc-skill/walkthrough/template.md +0 -54
  136. package/cdh/__init__.py +0 -0
  137. package/cdh/__main__.py +0 -4
  138. package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
  139. package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
  140. package/cdh/__pycache__/cli_logging.cpython-314.pyc +0 -0
  141. package/cdh/__pycache__/config.cpython-314.pyc +0 -0
  142. package/cdh/__pycache__/project_loader.cpython-314.pyc +0 -0
  143. package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
  144. package/cdh/__pycache__/session_store.cpython-314.pyc +0 -0
  145. package/cdh/cdh_session_aggregator.py +0 -258
  146. package/cdh/cli.py +0 -3000
  147. package/cdh/cli_logging.py +0 -45
  148. package/cdh/config.py +0 -28
  149. package/cdh/event_loop/__init__.py +0 -7
  150. package/cdh/event_loop/bus.py +0 -123
  151. package/cdh/event_loop/events.py +0 -25
  152. package/cdh/event_loop/runner.py +0 -28
  153. package/cdh/event_loop/scheduler.py +0 -158
  154. package/cdh/generators/__init__.py +0 -35
  155. package/cdh/generators/_runtime.py +0 -176
  156. package/cdh/generators/ada/MANIFEST.toml +0 -14
  157. package/cdh/generators/ada/template.ads.tmpl +0 -7
  158. package/cdh/generators/bash/MANIFEST.toml +0 -14
  159. package/cdh/generators/bash/template.sh.tmpl +0 -16
  160. package/cdh/generators/builtin_index.json +0 -590
  161. package/cdh/generators/c/MANIFEST.toml +0 -14
  162. package/cdh/generators/c/template.h.tmpl +0 -20
  163. package/cdh/generators/cli.py +0 -379
  164. package/cdh/generators/clojure/MANIFEST.toml +0 -14
  165. package/cdh/generators/clojure/template.clj.tmpl +0 -13
  166. package/cdh/generators/cobol/MANIFEST.toml +0 -14
  167. package/cdh/generators/cobol/template.cbl.tmpl +0 -14
  168. package/cdh/generators/cpp/MANIFEST.toml +0 -14
  169. package/cdh/generators/cpp/template.hpp.tmpl +0 -32
  170. package/cdh/generators/crystal/MANIFEST.toml +0 -14
  171. package/cdh/generators/crystal/template.cr.tmpl +0 -11
  172. package/cdh/generators/csharp/MANIFEST.toml +0 -23
  173. package/cdh/generators/csharp/template.cs.tmpl +0 -14
  174. package/cdh/generators/cython/MANIFEST.toml +0 -14
  175. package/cdh/generators/cython/template.pyx.tmpl +0 -17
  176. package/cdh/generators/d/MANIFEST.toml +0 -14
  177. package/cdh/generators/d/template.d.tmpl +0 -24
  178. package/cdh/generators/dart/MANIFEST.toml +0 -17
  179. package/cdh/generators/dart/template.dart.tmpl +0 -27
  180. package/cdh/generators/elixir/MANIFEST.toml +0 -17
  181. package/cdh/generators/elixir/template.ex.tmpl +0 -27
  182. package/cdh/generators/elm/MANIFEST.toml +0 -14
  183. package/cdh/generators/elm/template.elm.tmpl +0 -20
  184. package/cdh/generators/erlang/MANIFEST.toml +0 -14
  185. package/cdh/generators/erlang/template.erl.tmpl +0 -18
  186. package/cdh/generators/fortran/MANIFEST.toml +0 -14
  187. package/cdh/generators/fortran/template.f90.tmpl +0 -24
  188. package/cdh/generators/fsharp/MANIFEST.toml +0 -14
  189. package/cdh/generators/fsharp/template.fs.tmpl +0 -17
  190. package/cdh/generators/go/MANIFEST.toml +0 -18
  191. package/cdh/generators/go/imports.go.tmpl +0 -3
  192. package/cdh/generators/go/template.go.tmpl +0 -9
  193. package/cdh/generators/graphql-schema/MANIFEST.toml +0 -18
  194. package/cdh/generators/graphql-schema/template.graphqls.tmpl +0 -12
  195. package/cdh/generators/groovy/MANIFEST.toml +0 -14
  196. package/cdh/generators/groovy/template.groovy.tmpl +0 -28
  197. package/cdh/generators/hack/MANIFEST.toml +0 -14
  198. package/cdh/generators/hack/template.hh.tmpl +0 -24
  199. package/cdh/generators/haskell/MANIFEST.toml +0 -14
  200. package/cdh/generators/haskell/template.hs.tmpl +0 -20
  201. package/cdh/generators/haxe/MANIFEST.toml +0 -14
  202. package/cdh/generators/haxe/template.hx.tmpl +0 -20
  203. package/cdh/generators/idris/MANIFEST.toml +0 -14
  204. package/cdh/generators/idris/template.idr.tmpl +0 -22
  205. package/cdh/generators/java/MANIFEST.toml +0 -18
  206. package/cdh/generators/java/template.java.tmpl +0 -13
  207. package/cdh/generators/julia/MANIFEST.toml +0 -14
  208. package/cdh/generators/julia/template.jl.tmpl +0 -27
  209. package/cdh/generators/kotlin/MANIFEST.toml +0 -18
  210. package/cdh/generators/kotlin/template.kt.tmpl +0 -12
  211. package/cdh/generators/lua/MANIFEST.toml +0 -14
  212. package/cdh/generators/lua/template.lua.tmpl +0 -27
  213. package/cdh/generators/matlab/MANIFEST.toml +0 -14
  214. package/cdh/generators/matlab/template.m.tmpl +0 -26
  215. package/cdh/generators/nim/MANIFEST.toml +0 -14
  216. package/cdh/generators/nim/template.nim.tmpl +0 -12
  217. package/cdh/generators/nix/MANIFEST.toml +0 -14
  218. package/cdh/generators/nix/template.nix.tmpl +0 -8
  219. package/cdh/generators/objective-c/MANIFEST.toml +0 -14
  220. package/cdh/generators/objective-c/template.m.tmpl +0 -31
  221. package/cdh/generators/ocaml/MANIFEST.toml +0 -14
  222. package/cdh/generators/ocaml/template.ml.tmpl +0 -13
  223. package/cdh/generators/pascal/MANIFEST.toml +0 -14
  224. package/cdh/generators/pascal/template.pas.tmpl +0 -5
  225. package/cdh/generators/perl/MANIFEST.toml +0 -14
  226. package/cdh/generators/perl/template.pm.tmpl +0 -27
  227. package/cdh/generators/php/MANIFEST.toml +0 -17
  228. package/cdh/generators/php/template.php.tmpl +0 -31
  229. package/cdh/generators/powershell/MANIFEST.toml +0 -14
  230. package/cdh/generators/powershell/template.ps1.tmpl +0 -20
  231. package/cdh/generators/protobuf/MANIFEST.toml +0 -18
  232. package/cdh/generators/protobuf/template.proto.tmpl +0 -13
  233. package/cdh/generators/python/MANIFEST.toml +0 -18
  234. package/cdh/generators/python/template.py.tmpl +0 -12
  235. package/cdh/generators/r/MANIFEST.toml +0 -14
  236. package/cdh/generators/r/template.R.tmpl +0 -29
  237. package/cdh/generators/racket/MANIFEST.toml +0 -14
  238. package/cdh/generators/racket/template.rkt.tmpl +0 -15
  239. package/cdh/generators/registry.py +0 -211
  240. package/cdh/generators/ruby/MANIFEST.toml +0 -17
  241. package/cdh/generators/ruby/template.rb.tmpl +0 -27
  242. package/cdh/generators/rust/MANIFEST.toml +0 -18
  243. package/cdh/generators/rust/template.rs.tmpl +0 -16
  244. package/cdh/generators/scala/MANIFEST.toml +0 -20
  245. package/cdh/generators/scala/template.scala.tmpl +0 -13
  246. package/cdh/generators/scheme/MANIFEST.toml +0 -14
  247. package/cdh/generators/scheme/template.scm.tmpl +0 -16
  248. package/cdh/generators/solidity/MANIFEST.toml +0 -14
  249. package/cdh/generators/solidity/template.sol.tmpl +0 -24
  250. package/cdh/generators/swift/MANIFEST.toml +0 -18
  251. package/cdh/generators/swift/template.swift.tmpl +0 -10
  252. package/cdh/generators/typescript/MANIFEST.toml +0 -18
  253. package/cdh/generators/typescript/template.ts.tmpl +0 -7
  254. package/cdh/generators/version.py +0 -214
  255. package/cdh/generators/zig/MANIFEST.toml +0 -14
  256. package/cdh/generators/zig/template.zig.tmpl +0 -20
  257. package/cdh/logging.py +0 -314
  258. package/cdh/optimizer/__init__.py +0 -7
  259. package/cdh/optimizer/loop.py +0 -201
  260. package/cdh/optimizer/mutation.py +0 -85
  261. package/cdh/optimizer/reward.py +0 -51
  262. package/cdh/optimizer/tracker.py +0 -118
  263. package/cdh/project_loader.py +0 -1022
  264. package/cdh/rules/patterns.yaml +0 -132
  265. package/cdh/rules/spectral.yaml +0 -301
  266. package/cdh/scaffold.py +0 -1436
  267. package/cdh/session_store.py +0 -221
  268. package/cdh/state_schema.py +0 -127
  269. package/cdh/tools/__init__.py +0 -57
  270. package/cdh/tools/cls_search.py +0 -406
  271. package/cdh/tools/contract_diff.py +0 -644
  272. package/cdh/tools/deploy_stack.py +0 -590
  273. package/cdh/tools/generate_shared.py +0 -300
  274. package/cdh/tools/iac_gen.py +0 -224
  275. package/cdh/tools/otel_export.py +0 -125
  276. package/cdh/tools/pattern_detect.py +0 -451
  277. package/cdh/tools/retrofit_labels.py +0 -505
  278. package/cdh/trace/__init__.py +0 -101
  279. package/cdh/trace/__pycache__/__init__.cpython-314.pyc +0 -0
  280. package/cdh/trace/dashboard/__init__.py +0 -61
  281. package/cdh/trace/dashboard/api.py +0 -1032
  282. package/cdh/trace/dashboard/app.html +0 -1321
  283. package/cdh/trace/dashboard/server.py +0 -310
  284. package/cdh/trace/otel_exporter.py +0 -462
  285. package/cdh/trace/otel_tracer.py +0 -281
  286. package/cdh/tui.py +0 -1084
  287. package/cdh/validators/__init__.py +0 -16
  288. package/cdh/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  289. package/cdh/validators/__pycache__/bdd.cpython-314.pyc +0 -0
  290. package/cdh/validators/__pycache__/dag.cpython-314.pyc +0 -0
  291. package/cdh/validators/__pycache__/ears.cpython-314.pyc +0 -0
  292. package/cdh/validators/__pycache__/fr_namespace.cpython-314.pyc +0 -0
  293. package/cdh/validators/bdd.py +0 -144
  294. package/cdh/validators/dag.py +0 -179
  295. package/cdh/validators/ears.py +0 -452
  296. package/cdh/validators/fr_namespace.py +0 -143
  297. package/cdh/validators/spectral.py +0 -475
  298. package/cdh/verification/__init__.py +0 -3
  299. package/cdh/verification/aggregation.py +0 -53
  300. package/cdh/verification/gates/__init__.py +0 -5
  301. package/cdh/verification/gates/base.py +0 -18
  302. package/cdh/verification/gates/lint_gate.py +0 -37
  303. package/cdh/verification/gates/test_gate.py +0 -41
  304. package/cdh/verification/loop.py +0 -93
  305. package/cdh/verification/policy.py +0 -24
  306. package/onecode/__init__.py +0 -1
  307. package/onecode/__main__.py +0 -4
  308. package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
  309. package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
  310. package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
  311. package/onecode/__pycache__/config.cpython-314.pyc +0 -0
  312. package/onecode/__pycache__/migrate.cpython-314.pyc +0 -0
  313. package/onecode/agent/__init__.py +0 -0
  314. package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
  315. package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
  316. package/onecode/agent/__pycache__/checkpoint.cpython-314.pyc +0 -0
  317. package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
  318. package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
  319. package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
  320. package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
  321. package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
  322. package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
  323. package/onecode/agent/__pycache__/project_doc.cpython-314.pyc +0 -0
  324. package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
  325. package/onecode/agent/__pycache__/turn_record.cpython-314.pyc +0 -0
  326. package/onecode/agent/agents/__init__.py +0 -29
  327. package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  328. package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
  329. package/onecode/agent/agents/prompts/build-agent.md +0 -50
  330. package/onecode/agent/agents/prompts/compaction-instructions.md +0 -12
  331. package/onecode/agent/agents/prompts/explore-agent.md +0 -42
  332. package/onecode/agent/agents/prompts/plan-agent.md +0 -44
  333. package/onecode/agent/agents/prompts/plan-gate-hard.md +0 -4
  334. package/onecode/agent/agents/prompts/plan-gate-soft.md +0 -3
  335. package/onecode/agent/agents/prompts/solo-agent.md +0 -57
  336. package/onecode/agent/agents/prompts/subagent-constraints.md +0 -10
  337. package/onecode/agent/agents/prompts/summary-instructions.md +0 -7
  338. package/onecode/agent/agents/prompts/title-instructions.md +0 -3
  339. package/onecode/agent/agents/prompts/tool-descriptions.md +0 -129
  340. package/onecode/agent/agents/types.py +0 -786
  341. package/onecode/agent/attachments.py +0 -112
  342. package/onecode/agent/cdh_loader.py +0 -3
  343. package/onecode/agent/checkpoint.py +0 -285
  344. package/onecode/agent/context.py +0 -465
  345. package/onecode/agent/engine.py +0 -3547
  346. package/onecode/agent/event_bridge.py +0 -75
  347. package/onecode/agent/hooks.py +0 -86
  348. package/onecode/agent/onecode_agent_acp.py +0 -2993
  349. package/onecode/agent/permissions.py +0 -150
  350. package/onecode/agent/permissions_store.py +0 -73
  351. package/onecode/agent/project_doc.py +0 -19
  352. package/onecode/agent/question_detect.py +0 -230
  353. package/onecode/agent/session.py +0 -3
  354. package/onecode/agent/snapshot.py +0 -144
  355. package/onecode/agent/tools/__init__.py +0 -17
  356. package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  357. package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
  358. package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
  359. package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
  360. package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
  361. package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
  362. package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
  363. package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
  364. package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
  365. package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
  366. package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
  367. package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
  368. package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
  369. package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
  370. package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
  371. package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
  372. package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
  373. package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
  374. package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
  375. package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
  376. package/onecode/agent/tools/__pycache__/todo_tools.cpython-314.pyc +0 -0
  377. package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
  378. package/onecode/agent/tools/agent_tools.py +0 -128
  379. package/onecode/agent/tools/apply_patch_tool.py +0 -138
  380. package/onecode/agent/tools/bash_tool.py +0 -121
  381. package/onecode/agent/tools/communication_tools.py +0 -154
  382. package/onecode/agent/tools/config_tool.py +0 -130
  383. package/onecode/agent/tools/cron_tools.py +0 -178
  384. package/onecode/agent/tools/errors.py +0 -17
  385. package/onecode/agent/tools/file_ops.py +0 -221
  386. package/onecode/agent/tools/file_tools.py +0 -225
  387. package/onecode/agent/tools/git_tools.py +0 -88
  388. package/onecode/agent/tools/lsp_tools.py +0 -404
  389. package/onecode/agent/tools/mcp_tools.py +0 -211
  390. package/onecode/agent/tools/permission_handler.py +0 -46
  391. package/onecode/agent/tools/permissions.py +0 -77
  392. package/onecode/agent/tools/protocol.py +0 -20
  393. package/onecode/agent/tools/registry.py +0 -210
  394. package/onecode/agent/tools/sandbox.py +0 -460
  395. package/onecode/agent/tools/schema_validation.py +0 -100
  396. package/onecode/agent/tools/skill_tools.py +0 -52
  397. package/onecode/agent/tools/todo_tools.py +0 -208
  398. package/onecode/agent/tools/web_tools.py +0 -530
  399. package/onecode/agent/turn_record.py +0 -28
  400. package/onecode/builtin_skills/agent-browser/SKILL.md +0 -212
  401. package/onecode/builtin_skills/agent-browser/skill.yaml +0 -8
  402. package/onecode/builtin_skills/cloudbase/SKILL.md +0 -162
  403. package/onecode/builtin_skills/cloudbase/skill.yaml +0 -7
  404. package/onecode/builtin_skills/git/SKILL.md +0 -64
  405. package/onecode/builtin_skills/git/skill.yaml +0 -7
  406. package/onecode/builtin_skills/shell/SKILL.md +0 -58
  407. package/onecode/builtin_skills/shell/skill.yaml +0 -8
  408. package/onecode/builtin_skills/skill-creator/SKILL.md +0 -106
  409. package/onecode/builtin_skills/skill-creator/skill.yaml +0 -8
  410. package/onecode/cli.py +0 -1325
  411. package/onecode/codebase/__init__.py +0 -69
  412. package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
  413. package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
  414. package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
  415. package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
  416. package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
  417. package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
  418. package/onecode/codebase/chunker.py +0 -125
  419. package/onecode/codebase/indexer.py +0 -154
  420. package/onecode/codebase/retriever.py +0 -240
  421. package/onecode/codebase/storage.py +0 -153
  422. package/onecode/codebase/tools.py +0 -59
  423. package/onecode/commands.py +0 -673
  424. package/onecode/config.py +0 -539
  425. package/onecode/config_screen.py +0 -486
  426. package/onecode/cron/__init__.py +0 -3
  427. package/onecode/lsp/__init__.py +0 -3
  428. package/onecode/mcp/__init__.py +0 -11
  429. package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
  430. package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
  431. package/onecode/mcp/__pycache__/cloudbase.cpython-314.pyc +0 -0
  432. package/onecode/mcp/__pycache__/config.cpython-314.pyc +0 -0
  433. package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
  434. package/onecode/mcp/__pycache__/oauth.cpython-314.pyc +0 -0
  435. package/onecode/mcp/client.py +0 -305
  436. package/onecode/mcp/cloudbase.py +0 -188
  437. package/onecode/mcp/config.py +0 -363
  438. package/onecode/mcp/manager.py +0 -603
  439. package/onecode/mcp/oauth.py +0 -199
  440. package/onecode/memory/__init__.py +0 -106
  441. package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  442. package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
  443. package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
  444. package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
  445. package/onecode/memory/backend.py +0 -179
  446. package/onecode/memory/pyramid.py +0 -145
  447. package/onecode/memory/recall.py +0 -322
  448. package/onecode/migrate.py +0 -122
  449. package/onecode/models/__init__.py +0 -4
  450. package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
  451. package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
  452. package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
  453. package/onecode/models/__pycache__/ollama_manager.cpython-314.pyc +0 -0
  454. package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
  455. package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
  456. package/onecode/models/errors.py +0 -104
  457. package/onecode/models/messages.py +0 -750
  458. package/onecode/models/ollama_manager.py +0 -167
  459. package/onecode/models/provider.py +0 -730
  460. package/onecode/models/providers/__init__.py +0 -17
  461. package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  462. package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
  463. package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
  464. package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
  465. package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
  466. package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
  467. package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
  468. package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
  469. package/onecode/models/providers/anthropic_provider.py +0 -286
  470. package/onecode/models/providers/deepseek_provider.py +0 -221
  471. package/onecode/models/providers/glm_provider.py +0 -219
  472. package/onecode/models/providers/minimax_provider.py +0 -182
  473. package/onecode/models/providers/minimaxi_provider.py +0 -426
  474. package/onecode/models/providers/ollama_provider.py +0 -183
  475. package/onecode/models/providers/openai_provider.py +0 -234
  476. package/onecode/models/registry.py +0 -349
  477. package/onecode/server/__init__.py +0 -3
  478. package/onecode/server/app.py +0 -251
  479. package/onecode/skills/__init__.py +0 -11
  480. package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
  481. package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
  482. package/onecode/skills/__pycache__/bootstrap.cpython-314.pyc +0 -0
  483. package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
  484. package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
  485. package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
  486. package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
  487. package/onecode/skills/argument_substitution.py +0 -38
  488. package/onecode/skills/bootstrap.py +0 -37
  489. package/onecode/skills/create.py +0 -56
  490. package/onecode/skills/frontmatter.py +0 -33
  491. package/onecode/skills/loader.py +0 -215
  492. package/onecode/skills/manager.py +0 -75
  493. package/onecode/skills/model.py +0 -43
  494. package/onecode/storage/__init__.py +0 -0
  495. package/onecode/storage/activity.py +0 -63
  496. package/onecode/storage/project.py +0 -54
  497. package/onecode/storage/session.py +0 -112
  498. package/onecode/tasks/__init__.py +0 -26
  499. package/onecode/tasks/manager.py +0 -232
  500. package/onecode/tasks/models.py +0 -240
  501. package/onecode/trace/__init__.py +0 -0
  502. package/onecode/trace/tracer.py +0 -173
  503. package/onecode/utils/__init__.py +0 -0
  504. package/onecode/utils/helpers.py +0 -20
  505. package/onecode/verification/__init__.py +0 -5
  506. package/onecode/verification/__pycache__/__init__.cpython-314.pyc +0 -0
  507. package/onecode/verification/__pycache__/aggregation.cpython-314.pyc +0 -0
  508. package/onecode/verification/__pycache__/loop.cpython-314.pyc +0 -0
  509. package/onecode/verification/__pycache__/policy.cpython-314.pyc +0 -0
  510. package/onecode/verification/aggregation.py +0 -53
  511. package/onecode/verification/gates/__init__.py +0 -6
  512. package/onecode/verification/gates/__pycache__/__init__.cpython-314.pyc +0 -0
  513. package/onecode/verification/gates/__pycache__/base.cpython-314.pyc +0 -0
  514. package/onecode/verification/gates/__pycache__/lint_gate.cpython-314.pyc +0 -0
  515. package/onecode/verification/gates/__pycache__/test_gate.cpython-314.pyc +0 -0
  516. package/onecode/verification/gates/__pycache__/type_gate.cpython-314.pyc +0 -0
  517. package/onecode/verification/gates/base.py +0 -20
  518. package/onecode/verification/gates/lint_gate.py +0 -45
  519. package/onecode/verification/gates/test_gate.py +0 -62
  520. package/onecode/verification/gates/type_gate.py +0 -46
  521. package/onecode/verification/loop.py +0 -95
  522. package/onecode/verification/policy.py +0 -29
  523. package/pyproject.toml +0 -84
  524. package/tui/__init__.py +0 -46
  525. package/tui/__main__.py +0 -4
  526. package/tui/__pycache__/__init__.cpython-314.pyc +0 -0
  527. package/tui/__pycache__/_loop.cpython-314.pyc +0 -0
  528. package/tui/__pycache__/_path_fuzzy_search.cpython-314.pyc +0 -0
  529. package/tui/__pycache__/_path_match.cpython-314.pyc +0 -0
  530. package/tui/__pycache__/agent.cpython-314.pyc +0 -0
  531. package/tui/__pycache__/agent_schema.cpython-314.pyc +0 -0
  532. package/tui/__pycache__/agents.cpython-314.pyc +0 -0
  533. package/tui/__pycache__/answer.cpython-314.pyc +0 -0
  534. package/tui/__pycache__/app.cpython-314.pyc +0 -0
  535. package/tui/__pycache__/atomic.cpython-314.pyc +0 -0
  536. package/tui/__pycache__/complete.cpython-314.pyc +0 -0
  537. package/tui/__pycache__/constants.cpython-314.pyc +0 -0
  538. package/tui/__pycache__/conversation_markdown.cpython-314.pyc +0 -0
  539. package/tui/__pycache__/db.cpython-314.pyc +0 -0
  540. package/tui/__pycache__/dec.cpython-314.pyc +0 -0
  541. package/tui/__pycache__/directory.cpython-314.pyc +0 -0
  542. package/tui/__pycache__/directory_watcher.cpython-314.pyc +0 -0
  543. package/tui/__pycache__/format_path.cpython-314.pyc +0 -0
  544. package/tui/__pycache__/fuzzy.cpython-314.pyc +0 -0
  545. package/tui/__pycache__/fuzzy_index.cpython-314.pyc +0 -0
  546. package/tui/__pycache__/history.cpython-314.pyc +0 -0
  547. package/tui/__pycache__/jsonrpc.cpython-314.pyc +0 -0
  548. package/tui/__pycache__/menus.cpython-314.pyc +0 -0
  549. package/tui/__pycache__/message_log.cpython-314.pyc +0 -0
  550. package/tui/__pycache__/messages.cpython-314.pyc +0 -0
  551. package/tui/__pycache__/path_complete.cpython-314.pyc +0 -0
  552. package/tui/__pycache__/path_filter.cpython-314.pyc +0 -0
  553. package/tui/__pycache__/paths.cpython-314.pyc +0 -0
  554. package/tui/__pycache__/pill.cpython-314.pyc +0 -0
  555. package/tui/__pycache__/platform_commands.cpython-314.pyc +0 -0
  556. package/tui/__pycache__/protocol.cpython-314.pyc +0 -0
  557. package/tui/__pycache__/session_tracker.cpython-314.pyc +0 -0
  558. package/tui/__pycache__/settings.cpython-314.pyc +0 -0
  559. package/tui/__pycache__/settings_schema.cpython-314.pyc +0 -0
  560. package/tui/__pycache__/shell.cpython-314.pyc +0 -0
  561. package/tui/__pycache__/shell_read.cpython-314.pyc +0 -0
  562. package/tui/__pycache__/slash_command.cpython-314.pyc +0 -0
  563. package/tui/__pycache__/version.cpython-314.pyc +0 -0
  564. package/tui/_loop.py +0 -86
  565. package/tui/_path_fuzzy_search.py +0 -48
  566. package/tui/_path_match.py +0 -141
  567. package/tui/about.py +0 -95
  568. package/tui/acp/__pycache__/agent.cpython-314.pyc +0 -0
  569. package/tui/acp/__pycache__/api.cpython-314.pyc +0 -0
  570. package/tui/acp/__pycache__/encode_tool_call_id.cpython-314.pyc +0 -0
  571. package/tui/acp/__pycache__/event_tap.cpython-314.pyc +0 -0
  572. package/tui/acp/__pycache__/messages.cpython-314.pyc +0 -0
  573. package/tui/acp/__pycache__/prompt.cpython-314.pyc +0 -0
  574. package/tui/acp/__pycache__/protocol.cpython-314.pyc +0 -0
  575. package/tui/acp/agent.py +0 -1212
  576. package/tui/acp/api.py +0 -79
  577. package/tui/acp/encode_tool_call_id.py +0 -12
  578. package/tui/acp/event_tap.py +0 -107
  579. package/tui/acp/messages.py +0 -222
  580. package/tui/acp/prompt.py +0 -53
  581. package/tui/acp/protocol.py +0 -551
  582. package/tui/agent.py +0 -70
  583. package/tui/agent_schema.py +0 -76
  584. package/tui/agents.py +0 -46
  585. package/tui/ansi/__init__.py +0 -1
  586. package/tui/ansi/__pycache__/__init__.cpython-314.pyc +0 -0
  587. package/tui/ansi/__pycache__/_ansi.cpython-314.pyc +0 -0
  588. package/tui/ansi/__pycache__/_ansi_colors.cpython-314.pyc +0 -0
  589. package/tui/ansi/__pycache__/_control_codes.cpython-314.pyc +0 -0
  590. package/tui/ansi/__pycache__/_keys.cpython-314.pyc +0 -0
  591. package/tui/ansi/__pycache__/_sgr_styles.cpython-314.pyc +0 -0
  592. package/tui/ansi/__pycache__/_stream_parser.cpython-314.pyc +0 -0
  593. package/tui/ansi/_ansi.py +0 -1689
  594. package/tui/ansi/_ansi_colors.py +0 -264
  595. package/tui/ansi/_control_codes.py +0 -37
  596. package/tui/ansi/_keys.py +0 -251
  597. package/tui/ansi/_sgr_styles.py +0 -64
  598. package/tui/ansi/_stream_parser.py +0 -418
  599. package/tui/answer.py +0 -12
  600. package/tui/app.py +0 -1195
  601. package/tui/atomic.py +0 -37
  602. package/tui/cli.py +0 -208
  603. package/tui/code_analyze.py +0 -27
  604. package/tui/complete.py +0 -38
  605. package/tui/constants.py +0 -61
  606. package/tui/conversation_markdown.py +0 -30
  607. package/tui/danger.py +0 -372
  608. package/tui/data/agents/ampcode.com.toml +0 -52
  609. package/tui/data/agents/augmentcode.com.toml +0 -41
  610. package/tui/data/agents/cdh.cloud-dev-harness.toml +0 -23
  611. package/tui/data/agents/claude.com.toml +0 -42
  612. package/tui/data/agents/copilot.github.com.toml +0 -29
  613. package/tui/data/agents/crowai.dev.toml +0 -36
  614. package/tui/data/agents/cursor.com.toml +0 -38
  615. package/tui/data/agents/deepagents.langchain.com +0 -34
  616. package/tui/data/agents/docker.com.toml +0 -60
  617. package/tui/data/agents/geminicli.com.toml +0 -28
  618. package/tui/data/agents/goose.ai.toml +0 -52
  619. package/tui/data/agents/inference.huggingface.co.toml +0 -41
  620. package/tui/data/agents/kimi.com.toml +0 -35
  621. package/tui/data/agents/kiro.dev.toml +0 -43
  622. package/tui/data/agents/onecode.dev.toml +0 -22
  623. package/tui/data/agents/openai.com.toml +0 -53
  624. package/tui/data/agents/openclaw.ai.toml +0 -37
  625. package/tui/data/agents/opencode.ai.toml +0 -39
  626. package/tui/data/agents/openhands.dev.toml +0 -46
  627. package/tui/data/agents/stakpak.dev.toml +0 -62
  628. package/tui/data/agents/vibe.mistral.ai.toml +0 -31
  629. package/tui/data/agents/vtcode.dev.toml +0 -63
  630. package/tui/data/images/frog.png +0 -0
  631. package/tui/data/sounds/question.wav +0 -0
  632. package/tui/data/sounds/turn-over.wav +0 -0
  633. package/tui/db.py +0 -213
  634. package/tui/dec.py +0 -332
  635. package/tui/diff_utils.py +0 -131
  636. package/tui/directory.py +0 -234
  637. package/tui/directory_suggester.py +0 -93
  638. package/tui/directory_watcher.py +0 -231
  639. package/tui/format_path.py +0 -25
  640. package/tui/fuzzy.py +0 -140
  641. package/tui/fuzzy_index.py +0 -275
  642. package/tui/gist.py +0 -33
  643. package/tui/history.py +0 -138
  644. package/tui/jsonrpc.py +0 -599
  645. package/tui/menus.py +0 -14
  646. package/tui/message_log.py +0 -69
  647. package/tui/messages.py +0 -144
  648. package/tui/option_content.py +0 -51
  649. package/tui/os.py +0 -0
  650. package/tui/path_complete.py +0 -217
  651. package/tui/path_filter.py +0 -124
  652. package/tui/paths.py +0 -87
  653. package/tui/pill.py +0 -23
  654. package/tui/platform_commands.py +0 -52
  655. package/tui/prompt/__pycache__/extract.cpython-314.pyc +0 -0
  656. package/tui/prompt/__pycache__/resource.cpython-314.pyc +0 -0
  657. package/tui/prompt/extract.py +0 -19
  658. package/tui/prompt/resource.py +0 -68
  659. package/tui/protocol.py +0 -28
  660. package/tui/screens/__init__.py +0 -0
  661. package/tui/screens/__pycache__/__init__.cpython-314.pyc +0 -0
  662. package/tui/screens/__pycache__/diff_screen.cpython-314.pyc +0 -0
  663. package/tui/screens/__pycache__/main.cpython-314.pyc +0 -0
  664. package/tui/screens/__pycache__/sessions.cpython-314.pyc +0 -0
  665. package/tui/screens/action_modal.py +0 -94
  666. package/tui/screens/agent_modal.py +0 -175
  667. package/tui/screens/command_edit_modal.py +0 -74
  668. package/tui/screens/diff_explorer_screen.py +0 -419
  669. package/tui/screens/diff_screen.py +0 -84
  670. package/tui/screens/ide_screen.py +0 -461
  671. package/tui/screens/main.py +0 -397
  672. package/tui/screens/main.tcss +0 -662
  673. package/tui/screens/permissions.py +0 -404
  674. package/tui/screens/permissions.tcss +0 -72
  675. package/tui/screens/projects.tcss +0 -84
  676. package/tui/screens/projects_app.py +0 -341
  677. package/tui/screens/projects_screen.py +0 -277
  678. package/tui/screens/session_resume_modal.py +0 -172
  679. package/tui/screens/session_resume_modal.tcss +0 -35
  680. package/tui/screens/sessions.py +0 -171
  681. package/tui/screens/sessions.tcss +0 -119
  682. package/tui/screens/settings.py +0 -293
  683. package/tui/screens/settings.tcss +0 -113
  684. package/tui/screens/store.py +0 -502
  685. package/tui/screens/store.tcss +0 -274
  686. package/tui/screens/tool_content_screen.py +0 -59
  687. package/tui/screens/trace.py +0 -317
  688. package/tui/session_tracker.py +0 -123
  689. package/tui/settings.py +0 -353
  690. package/tui/settings_schema.py +0 -467
  691. package/tui/shell.py +0 -304
  692. package/tui/shell_read.py +0 -42
  693. package/tui/slash_command.py +0 -34
  694. package/tui/tui.tcss +0 -246
  695. package/tui/twitter.py +0 -38
  696. package/tui/version.py +0 -80
  697. package/tui/visuals/__init__.py +0 -0
  698. package/tui/visuals/__pycache__/__init__.cpython-314.pyc +0 -0
  699. package/tui/visuals/__pycache__/columns.cpython-314.pyc +0 -0
  700. package/tui/visuals/columns.py +0 -272
  701. package/tui/widgets/__init__.py +0 -0
  702. package/tui/widgets/__pycache__/__init__.cpython-314.pyc +0 -0
  703. package/tui/widgets/__pycache__/agent_response.cpython-314.pyc +0 -0
  704. package/tui/widgets/__pycache__/agent_thought.cpython-314.pyc +0 -0
  705. package/tui/widgets/__pycache__/aidlc.cpython-314.pyc +0 -0
  706. package/tui/widgets/__pycache__/ask_user.cpython-314.pyc +0 -0
  707. package/tui/widgets/__pycache__/condensed_path.cpython-314.pyc +0 -0
  708. package/tui/widgets/__pycache__/context_stats.cpython-314.pyc +0 -0
  709. package/tui/widgets/__pycache__/conversation.cpython-314.pyc +0 -0
  710. package/tui/widgets/__pycache__/diff_view.cpython-314.pyc +0 -0
  711. package/tui/widgets/__pycache__/flash.cpython-314.pyc +0 -0
  712. package/tui/widgets/__pycache__/future_text.cpython-314.pyc +0 -0
  713. package/tui/widgets/__pycache__/grid_select.cpython-314.pyc +0 -0
  714. package/tui/widgets/__pycache__/highlighted_textarea.cpython-314.pyc +0 -0
  715. package/tui/widgets/__pycache__/load_more.cpython-314.pyc +0 -0
  716. package/tui/widgets/__pycache__/menu.cpython-314.pyc +0 -0
  717. package/tui/widgets/__pycache__/modified_files.cpython-314.pyc +0 -0
  718. package/tui/widgets/__pycache__/non_selectable_label.cpython-314.pyc +0 -0
  719. package/tui/widgets/__pycache__/note.cpython-314.pyc +0 -0
  720. package/tui/widgets/__pycache__/path_search.cpython-314.pyc +0 -0
  721. package/tui/widgets/__pycache__/pending_prompts.cpython-314.pyc +0 -0
  722. package/tui/widgets/__pycache__/plan.cpython-314.pyc +0 -0
  723. package/tui/widgets/__pycache__/project_directory_tree.cpython-314.pyc +0 -0
  724. package/tui/widgets/__pycache__/prompt.cpython-314.pyc +0 -0
  725. package/tui/widgets/__pycache__/question.cpython-314.pyc +0 -0
  726. package/tui/widgets/__pycache__/session_grid_select.cpython-314.pyc +0 -0
  727. package/tui/widgets/__pycache__/session_summary.cpython-314.pyc +0 -0
  728. package/tui/widgets/__pycache__/session_tabs.cpython-314.pyc +0 -0
  729. package/tui/widgets/__pycache__/shell_terminal.cpython-314.pyc +0 -0
  730. package/tui/widgets/__pycache__/side_bar.cpython-314.pyc +0 -0
  731. package/tui/widgets/__pycache__/slash_complete.cpython-314.pyc +0 -0
  732. package/tui/widgets/__pycache__/strike_text.cpython-314.pyc +0 -0
  733. package/tui/widgets/__pycache__/terminal.cpython-314.pyc +0 -0
  734. package/tui/widgets/__pycache__/throbber.cpython-314.pyc +0 -0
  735. package/tui/widgets/__pycache__/tool_call.cpython-314.pyc +0 -0
  736. package/tui/widgets/__pycache__/user_input.cpython-314.pyc +0 -0
  737. package/tui/widgets/acp_content.py +0 -70
  738. package/tui/widgets/agent_response.py +0 -76
  739. package/tui/widgets/agent_thought.py +0 -167
  740. package/tui/widgets/aidlc.py +0 -334
  741. package/tui/widgets/ask_user.py +0 -604
  742. package/tui/widgets/command_pane.py +0 -223
  743. package/tui/widgets/condensed_path.py +0 -115
  744. package/tui/widgets/context_stats.py +0 -66
  745. package/tui/widgets/conversation.py +0 -3235
  746. package/tui/widgets/danger_warning.py +0 -65
  747. package/tui/widgets/diff_view.py +0 -69
  748. package/tui/widgets/directory_input.py +0 -8
  749. package/tui/widgets/edit_field.py +0 -206
  750. package/tui/widgets/flash.py +0 -81
  751. package/tui/widgets/future_text.py +0 -126
  752. package/tui/widgets/grid_select.py +0 -234
  753. package/tui/widgets/highlighted_textarea.py +0 -183
  754. package/tui/widgets/load_more.py +0 -24
  755. package/tui/widgets/mandelbrot.py +0 -294
  756. package/tui/widgets/markdown_note.py +0 -13
  757. package/tui/widgets/menu.py +0 -147
  758. package/tui/widgets/model_status.py +0 -230
  759. package/tui/widgets/modified_files.py +0 -315
  760. package/tui/widgets/non_selectable_label.py +0 -5
  761. package/tui/widgets/note.py +0 -18
  762. package/tui/widgets/path_search.py +0 -492
  763. package/tui/widgets/pending_prompts.py +0 -36
  764. package/tui/widgets/plan.py +0 -285
  765. package/tui/widgets/project_directory_tree.py +0 -102
  766. package/tui/widgets/project_grid_select.py +0 -68
  767. package/tui/widgets/project_summary.py +0 -33
  768. package/tui/widgets/prompt.py +0 -935
  769. package/tui/widgets/question.py +0 -360
  770. package/tui/widgets/session_grid_select.py +0 -230
  771. package/tui/widgets/session_summary.py +0 -115
  772. package/tui/widgets/session_tabs.py +0 -194
  773. package/tui/widgets/shell_result.py +0 -35
  774. package/tui/widgets/shell_terminal.py +0 -40
  775. package/tui/widgets/side_bar.py +0 -124
  776. package/tui/widgets/slash_complete.py +0 -235
  777. package/tui/widgets/strike_text.py +0 -70
  778. package/tui/widgets/subagent.py +0 -287
  779. package/tui/widgets/subagent_screen.py +0 -715
  780. package/tui/widgets/terminal.py +0 -576
  781. package/tui/widgets/terminal_tool.py +0 -360
  782. package/tui/widgets/throbber.py +0 -100
  783. package/tui/widgets/tool_call.py +0 -432
  784. package/tui/widgets/user_input.py +0 -23
  785. package/tui/widgets/version.py +0 -5
  786. package/tui/widgets/welcome.py +0 -31
@@ -1,715 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
- import logging
5
- from pathlib import Path
6
- from typing import ClassVar
7
-
8
- from textual import on
9
- from textual.app import ComposeResult
10
- from textual.binding import Binding, BindingType
11
- from textual.containers import Grid, Vertical, VerticalGroup, VerticalScroll
12
- from textual.css.query import NoMatches
13
- from textual.geometry import Offset, Region, Spacing
14
- from textual.layouts.grid import GridLayout
15
- from textual.layouts.vertical import WidgetPlacement
16
- from textual.reactive import reactive
17
- from textual.screen import Screen
18
- from textual.widget import Widget
19
- from textual.widgets import Header, Static
20
-
21
- from rich.segment import Segment
22
- from textual.strip import Strip
23
-
24
- from tui.menus import MenuItem
25
- from tui.protocol import BlockProtocol, ExpandProtocol, MenuProtocol
26
- from tui.widgets.agent_response import AgentResponse
27
- from tui.widgets.agent_thought import AgentThought
28
- from tui.widgets.conversation import Cursor
29
- from tui.widgets.menu import Menu
30
- from tui.widgets.subagent import SubAgent
31
- from tui.widgets.tool_call import ToolCall as ToolCallWidget
32
-
33
- _sa_logger = logging.getLogger("tui.widgets.subagent_screen")
34
- _DEBUG_LOG = Path.home() / ".cdh" / "logs" / "subagent_cursor_debug.log"
35
-
36
- _TODO_TOOLS: frozenset[str] = frozenset({
37
- "TodoCreate", "TodoGet", "TodoList", "TodoUpdate",
38
- "TodoOutput", "TodoStop", "TodoClear",
39
- })
40
-
41
- _SELECTABLE_BLOCK_TYPES: tuple[type[Widget], ...] = (
42
- AgentResponse,
43
- AgentThought,
44
- ToolCallWidget,
45
- )
46
-
47
-
48
- def _is_selectable(child: Widget) -> bool:
49
- return isinstance(child, _SELECTABLE_BLOCK_TYPES)
50
-
51
-
52
- class SubAgentCursorContainer(Vertical):
53
- def render_lines(self, crop: Region) -> list[Strip]:
54
- rich_style = self.visual_style.rich_style
55
- strips = [Strip([Segment("▌", rich_style)], cell_length=1)] * crop.height
56
- if crop.y == 0 and strips:
57
- strips[0] = Strip([Segment(" ", rich_style)], cell_length=1)
58
- return strips
59
-
60
-
61
- class SubAgentContentsGrid(Grid):
62
- BLANK = True
63
-
64
- def pre_layout(self, layout) -> None:
65
- assert isinstance(layout, GridLayout)
66
- layout.stretch_height = True
67
-
68
-
69
- class SubAgentScreen(Screen):
70
- """Full-screen view of a SubAgent output.
71
-
72
- Renders identically to the main Conversation:
73
- - AgentResponse for streaming text (MarkdownStream)
74
- - ToolCall cards mounted inline between text blocks
75
- - AgentThought (thinking) as inline siblings at position of occurrence
76
- - All widgets as siblings in a single #content container
77
- - Vertical-bar block cursor in a left-side CursorContainer, matching
78
- Conversation's visual treatment.
79
-
80
- Mirrors Conversation's block cursor: Ctrl+J/K move between blocks,
81
- Enter opens a Menu (copy / maximize), Ctrl+X toggles expand/collapse
82
- on ExpandProtocol blocks.
83
- """
84
-
85
- BINDINGS: ClassVar[list[BindingType]] = [
86
- Binding("escape", "app.pop_screen", "Back", priority=True),
87
- Binding("ctrl+j", "cursor_down", "Next block", show=False, priority=True),
88
- Binding("ctrl+k", "cursor_up", "Prev block", show=False, priority=True),
89
- Binding("enter", "select_block", "Block menu", show=False, priority=True),
90
- Binding("ctrl+x", "toggle_expand", "Toggle expand", show=False, priority=True),
91
- Binding("up", "scroll_up", "Up", priority=True),
92
- Binding("down", "scroll_down", "Down", priority=True),
93
- Binding("pageup", "scroll_page_up", "Page Up", priority=True),
94
- Binding("pagedown", "scroll_page_down", "Page Down", priority=True),
95
- Binding("home", "scroll_home", "Home", priority=True),
96
- Binding("end", "scroll_end", "End", priority=True),
97
- ]
98
-
99
- DEFAULT_CSS = """
100
- SubAgentScreen {
101
- background: $surface;
102
- padding-left: 1;
103
- }
104
-
105
- #scroll {
106
- height: 1fr;
107
- overflow-y: auto;
108
- scrollbar-gutter: stable;
109
- padding-bottom: 1;
110
- }
111
-
112
- #content-grid {
113
- layout: grid;
114
- grid-size: 2 1;
115
- grid-columns: 1 1fr;
116
- grid-gutter: 0;
117
- height: auto;
118
- width: 1fr;
119
- }
120
-
121
- #cursor-container {
122
- width: 1;
123
- height: auto;
124
- color: $foreground 7%;
125
- }
126
-
127
- #cursor-container > Cursor {
128
- height: 0;
129
- width: 1;
130
- border-left: outer $text-accent;
131
- visibility: visible;
132
- &.-blink {
133
- border-left: outer $text-accent 20%;
134
- }
135
- }
136
-
137
- #content {
138
- layout: stream;
139
- width: 1fr;
140
- overflow: hidden;
141
- height: auto;
142
- padding: 0 0 0 0;
143
- }
144
-
145
- #content > AgentResponse {
146
- min-height: 1;
147
- padding: 0 0 0 0;
148
- overflow-x: auto;
149
- scrollbar-size-horizontal: 0;
150
- layout: stream;
151
- }
152
-
153
- #content > ToolCall {
154
- margin: 0 0 0 1 !important;
155
- width: 1fr;
156
- layout: stream;
157
- height: auto;
158
- }
159
-
160
- #content > AgentThought {
161
- margin: 1 1 1 0;
162
- }
163
-
164
- #content > ToolCall ToolCallHeader {
165
- color: $text-secondary;
166
- pointer: pointer;
167
- width: auto;
168
- max-width: 1fr;
169
- margin: 0 1 0 0;
170
- text-wrap: nowrap;
171
- text-overflow: ellipsis;
172
- }
173
-
174
- #content > ToolCall #tool-content {
175
- display: none;
176
- }
177
-
178
- #content > ToolCall.-has-content #tool-content {
179
- margin: 1 1 1 0;
180
- }
181
-
182
- #content > ToolCall.-expanded #tool-content {
183
- display: block;
184
- max-height: 60vh;
185
- overflow-y: hidden;
186
- }
187
-
188
- #content > ToolCall.-expanded ToolCallHeader {
189
- text-wrap: wrap;
190
- text-overflow: fold;
191
- }
192
-
193
- #content > AgentResponse > MarkdownBlock:last-child,
194
- #content > AgentThought > #thought-content MarkdownBlock:last-child {
195
- margin-bottom: 0;
196
- }
197
-
198
- #footer {
199
- dock: bottom;
200
- height: 1;
201
- padding: 0 1;
202
- color: $text-muted;
203
- background: $boost;
204
- }
205
- """
206
-
207
- class Content(VerticalGroup, can_focus=False):
208
- """Matches Conversation.Contents — strips bottom margin from last child."""
209
-
210
- def process_layout(
211
- self, placements: list[WidgetPlacement]
212
- ) -> list[WidgetPlacement]:
213
- if placements:
214
- last = placements[-1]
215
- top, right, _bottom, left = last.margin
216
- placements[-1] = last._replace(
217
- margin=Spacing(top, right, 0, left)
218
- )
219
- return placements
220
-
221
- cursor_offset: reactive[int] = reactive(-1)
222
-
223
- def __init__(self, subagent: SubAgent) -> None:
224
- super().__init__()
225
- _DEBUG_LOG.parent.mkdir(parents=True, exist_ok=True)
226
- _sa_logger.addHandler(logging.FileHandler(str(_DEBUG_LOG), mode="w"))
227
- _sa_logger.setLevel(logging.DEBUG)
228
- self.subagent = subagent
229
- self._event_lock = asyncio.Lock()
230
- self._current_response: AgentResponse | None = None
231
- self._current_thought: AgentThought | None = None
232
- self._auto_follow = True
233
- self._active_menu: Menu | None = None
234
-
235
- def compose(self) -> ComposeResult:
236
- yield Header(show_clock=False)
237
- with VerticalScroll(id="scroll"):
238
- with SubAgentContentsGrid(id="content-grid"):
239
- with SubAgentCursorContainer(id="cursor-container"):
240
- yield Cursor()
241
- yield self.Content(id="content")
242
- yield Static(
243
- "[$text-muted]esc[/] 返回 "
244
- "[$text-muted]ctrl+j/k[/] 移动 "
245
- "[$text-muted]enter[/] 菜单 "
246
- "[$text-muted]ctrl+x[/] 折叠 "
247
- "[$text-muted]↑↓[/] 滚动",
248
- id="footer",
249
- )
250
-
251
- # ── Lifecycle ──
252
-
253
- async def on_mount(self) -> None:
254
- self.subagent._screen_handler = self._on_event
255
- self.run_worker(self._replay_all(), exit_on_error=False)
256
- try:
257
- self.query_one("#scroll", VerticalScroll).focus()
258
- except Exception:
259
- pass
260
-
261
- def on_unmount(self) -> None:
262
- self.subagent._screen_handler = None
263
- self._current_response = None
264
- self._current_thought = None
265
-
266
- def check_action(self, action: str, parameters: tuple[object, ...]) -> bool | None:
267
- if self._active_menu is not None and action in (
268
- "select_block",
269
- "scroll_up",
270
- "scroll_down",
271
- "scroll_page_up",
272
- "scroll_page_down",
273
- "scroll_home",
274
- "scroll_end",
275
- "app.pop_screen",
276
- ):
277
- return False
278
- return True
279
-
280
- # ── Event processing ──
281
-
282
- async def _replay_all(self) -> None:
283
- """Process every event already in ``subagent._events``."""
284
- try:
285
- container = self.query_one("#content", VerticalGroup)
286
- events = list(self.subagent._events)
287
- for i, (event_type, data) in enumerate(events):
288
- await self._handle_one(container, event_type, data)
289
- if i > 0 and i % 50 == 0:
290
- await asyncio.sleep(0)
291
- await self._flush_streams()
292
- self._post_process()
293
- except Exception:
294
- _sa_logger.exception("_replay_all failed")
295
-
296
- async def _on_event(self, event_type: str, data) -> None:
297
- """Handle a single real-time event from the SubAgent.
298
-
299
- Called via ``run_worker`` inside ``SubAgent.*`` methods.
300
- The lock serialises concurrently-scheduled workers.
301
- """
302
- async with self._event_lock:
303
- try:
304
- container = self.query_one("#content", VerticalGroup)
305
- await self._handle_one(container, event_type, data)
306
- self._post_process()
307
- except Exception:
308
- _sa_logger.exception("_on_event failed")
309
-
310
- async def _handle_one(self, container: VerticalGroup, event_type: str, data) -> None:
311
- """Dispatch a single event to the appropriate handler."""
312
- if event_type == "thinking":
313
- await self._handle_thinking(container, data)
314
- elif event_type == "text":
315
- self._complete_current_thought()
316
- await self._handle_text(container, data)
317
- elif event_type == "tool":
318
- self._complete_current_thought()
319
- await self._handle_tool(container, data)
320
- elif event_type == "complete":
321
- self._complete_current_thought()
322
-
323
- def _post_process(self) -> None:
324
- """Common work after every event – title, footer, cursor, scroll."""
325
- try:
326
- if self._current_thought is not None and not self._current_thought._completed:
327
- if self.subagent._status in ("completed", "failed"):
328
- self._current_thought.mark_completed()
329
- self._current_thought = None
330
- self._update_title()
331
- self._update_footer()
332
- self._schedule_cursor_refresh()
333
- if self._auto_follow:
334
- self.call_after_refresh(self._scroll_to_end)
335
- except Exception:
336
- _sa_logger.exception("_post_process failed")
337
-
338
- def _schedule_cursor_refresh(self) -> None:
339
- if getattr(self, "_cursor_refresh_pending", False):
340
- return
341
- self._cursor_refresh_pending = True
342
- self.call_after_refresh(self._do_cursor_refresh)
343
-
344
- def _do_cursor_refresh(self) -> None:
345
- self._cursor_refresh_pending = False
346
- self._refresh_block_cursor()
347
-
348
- async def _handle_thinking(self, container: VerticalGroup, fragment: str) -> None:
349
- if self._current_thought is None:
350
- self._current_thought = AgentThought(fragment)
351
- await container.mount(self._current_thought)
352
- else:
353
- await self._current_thought.append_fragment(fragment)
354
-
355
- async def _handle_text(self, container: VerticalGroup, fragment: str) -> None:
356
- if self._current_response is None:
357
- self._current_response = AgentResponse("")
358
- await container.mount(self._current_response)
359
- await self._current_response.append_fragment(fragment)
360
-
361
- async def _handle_tool(self, container: VerticalGroup, data) -> None:
362
- tool_id, tc = data
363
- self._current_response = None
364
-
365
- # Skip todo tool calls — not relevant in subagent view
366
- title = tc.get("title", "") if isinstance(tc, dict) else ""
367
- tool_name = title.split(":")[0] if ":" in title else title
368
- if tool_name in _TODO_TOOLS:
369
- return
370
-
371
- scr_id = f"scr-{tool_id}"
372
- try:
373
- existing: ToolCallWidget = container.get_child_by_id(scr_id) # type: ignore[assignment]
374
- await existing.update_tool_call(tc)
375
- except NoMatches:
376
- await container.mount(ToolCallWidget(tc, id=scr_id))
377
- except Exception:
378
- _sa_logger.exception("_handle_tool failed %s", tool_id)
379
-
380
- def _complete_current_thought(self) -> None:
381
- if self._current_thought is not None and not self._current_thought._completed:
382
- self._current_thought.mark_completed()
383
- self._current_thought = None
384
-
385
- def _scroll_to_end(self) -> None:
386
- try:
387
- self.query_one("#scroll", VerticalScroll).scroll_end(animate=True)
388
- except Exception:
389
- pass
390
-
391
- async def _flush_streams(self) -> None:
392
- """Ensure all markdown streams have finished processing before cursor navigation."""
393
- try:
394
- container = self.query_one("#content", VerticalGroup)
395
- except Exception:
396
- return
397
- for child in container.children:
398
- stream = getattr(child, "_stream", None)
399
- if stream is not None:
400
- _sa_logger.warning(
401
- "▓ flush stream | widget=%s | task_alive=%s",
402
- type(child).__name__,
403
- stream._task is not None and not stream._task.done() if stream._task else False,
404
- )
405
- try:
406
- await stream.stop()
407
- except Exception:
408
- pass
409
- else:
410
- _sa_logger.warning(
411
- "▓ no stream | widget=%s | children=%s",
412
- type(child).__name__,
413
- len(child.children) if hasattr(child, 'children') else '?',
414
- )
415
-
416
- # ── Block cursor ──
417
-
418
- def _selectable_children(self) -> list[Widget]:
419
- try:
420
- container = self.query_one("#content", VerticalGroup)
421
- except Exception:
422
- return []
423
- return [child for child in container.children if _is_selectable(child)]
424
-
425
- @property
426
- def cursor_block(self) -> Widget | None:
427
- if self.cursor_offset == -1:
428
- return None
429
- children = self._selectable_children()
430
- if not children or self.cursor_offset >= len(children):
431
- return None
432
- return children[self.cursor_offset]
433
-
434
- @property
435
- def cursor_block_child(self) -> Widget | None:
436
- if (block := self.cursor_block) is not None:
437
- if isinstance(block, BlockProtocol):
438
- inner = block.get_cursor_block()
439
- if inner is not None:
440
- _sa_logger.warning(
441
- "┃ child inner=%s children=%s attached=%s",
442
- type(inner).__name__,
443
- len(block.children) if hasattr(block, 'children') else '?',
444
- inner.is_attached,
445
- )
446
- return inner
447
- _sa_logger.warning(
448
- "┃ child fallback → outer=%s children=%s",
449
- type(block).__name__,
450
- len(block.children) if hasattr(block, 'children') else '?',
451
- )
452
- return block
453
-
454
- def _cursor_widget(self) -> Cursor | None:
455
- try:
456
- return self.query_one("#cursor-container Cursor", Cursor)
457
- except Exception:
458
- return None
459
-
460
- def _content_region(self) -> Region | None:
461
- try:
462
- return self.query_one("#content", VerticalGroup).content_region
463
- except Exception:
464
- return None
465
-
466
- def _refresh_block_cursor(self) -> None:
467
- cursor = self._cursor_widget()
468
- if cursor is None:
469
- return
470
- block = self.cursor_block_child
471
- if block is not None:
472
- cursor.visible = True
473
- cursor.follow(block)
474
- _sa_logger.warning(
475
- "┃ follow | block=%s | offset=(%s,%s) | h=%s | visible=%s",
476
- type(block).__name__,
477
- cursor.offset.x, cursor.offset.y,
478
- cursor.styles.height,
479
- cursor.visible,
480
- )
481
- scroll = self._scroll_widget()
482
- if scroll is not None:
483
- scroll.focus()
484
- self.call_after_refresh(
485
- scroll.scroll_to_center, block, immediate=True
486
- )
487
- else:
488
- cursor.visible = False
489
- cursor.follow(None)
490
- self.refresh_bindings()
491
-
492
- def action_cursor_up(self) -> None:
493
- children = self._selectable_children()
494
- _sa_logger.warning(
495
- "▲ cursor_up | offset=%s | num_children=%s | types=%s",
496
- self.cursor_offset,
497
- len(children),
498
- [type(c).__name__ for c in children],
499
- )
500
- if not children:
501
- return
502
- if self.cursor_offset == -1:
503
- self.cursor_offset = len(children) - 1
504
- cursor_block = self.cursor_block
505
- if isinstance(cursor_block, BlockProtocol):
506
- cursor_block.block_cursor_clear()
507
- cursor_block.block_cursor_up()
508
- else:
509
- cursor_block = self.cursor_block
510
- if isinstance(cursor_block, BlockProtocol):
511
- if cursor_block.block_cursor_up() is None:
512
- if self.cursor_offset > 0:
513
- self.cursor_offset -= 1
514
- cursor_block = self.cursor_block
515
- if isinstance(cursor_block, BlockProtocol):
516
- cursor_block.block_cursor_clear()
517
- cursor_block.block_cursor_up()
518
- else:
519
- if self.cursor_offset > 0:
520
- self.cursor_offset -= 1
521
- cursor_block = self.cursor_block
522
- if isinstance(cursor_block, BlockProtocol):
523
- cursor_block.block_cursor_clear()
524
- cursor_block.block_cursor_up()
525
- self._auto_follow = False
526
- self._refresh_block_cursor()
527
-
528
- def action_cursor_down(self) -> None:
529
- children = self._selectable_children()
530
- if not children or self.cursor_offset == -1:
531
- return
532
- cursor_block = self.cursor_block
533
- if isinstance(cursor_block, BlockProtocol):
534
- if cursor_block.block_cursor_down() is None:
535
- if self.cursor_offset < len(children) - 1:
536
- self.cursor_offset += 1
537
- cursor_block = self.cursor_block
538
- if isinstance(cursor_block, BlockProtocol):
539
- cursor_block.block_cursor_clear()
540
- cursor_block.block_cursor_down()
541
- else:
542
- if self.cursor_offset < len(children) - 1:
543
- self.cursor_offset += 1
544
- cursor_block = self.cursor_block
545
- if isinstance(cursor_block, BlockProtocol):
546
- cursor_block.block_cursor_clear()
547
- cursor_block.block_cursor_down()
548
- self._auto_follow = False
549
- self._refresh_block_cursor()
550
-
551
- async def action_select_block(self) -> None:
552
- block = self.cursor_block
553
- if block is None:
554
- return
555
- menu_options: list[MenuItem] = [
556
- MenuItem("[u]C[/]opy to clipboard", "copy_to_clipboard", "c"),
557
- ]
558
- if getattr(block, "ALLOW_MAXIMIZE", False):
559
- menu_options.append(MenuItem("[u]M[/u]aximize", "maximize_block", "m"))
560
- if isinstance(block, MenuProtocol):
561
- menu_options.extend(block.get_block_menu())
562
- if isinstance(block, ExpandProtocol):
563
- if block.is_block_expanded():
564
- menu_options.append(MenuItem("[u]C[/]ollapse", "collapse_block", "x"))
565
- else:
566
- menu_options.append(MenuItem("E[x]pand", "expand_block", "x"))
567
- menu = Menu(block, menu_options)
568
- try:
569
- container = self.query_one("#content", VerticalGroup)
570
- region = container.content_region
571
- menu.styles.offset = Offset(
572
- region.x + 1,
573
- block.virtual_region.y + container.virtual_region.y,
574
- )
575
- except Exception:
576
- pass
577
- await self.mount(menu)
578
- menu.focus()
579
- self._active_menu = menu
580
-
581
- @on(Menu.OptionSelected)
582
- async def on_menu_option_selected(self, event: Menu.OptionSelected) -> None:
583
- event.stop()
584
- event.menu.display = False
585
- if event.action is not None:
586
- await self.run_action(event.action, {"block": event.owner})
587
- self._active_menu = None
588
- self.call_after_refresh(event.menu.remove)
589
-
590
- @on(Menu.Dismissed)
591
- async def on_menu_dismissed(self, event: Menu.Dismissed) -> None:
592
- event.stop()
593
- if event.menu.has_focus:
594
- self.query_one("#scroll", VerticalScroll).focus(scroll_visible=False)
595
- self._active_menu = None
596
- await event.menu.remove()
597
-
598
- def action_copy_to_clipboard(self, block: Widget | None = None) -> None:
599
- if block is None:
600
- block = self.cursor_block
601
- if isinstance(block, MenuProtocol):
602
- text = block.get_block_content("clipboard")
603
- else:
604
- text = None
605
- if text:
606
- self.app.copy_to_clipboard(text)
607
- self.flash("Copied to clipboard")
608
-
609
- def action_maximize_block(self) -> None:
610
- if (block := self.cursor_block) is not None:
611
- self.app.screen.maximize(block, container=False)
612
- block.focus()
613
-
614
- def action_expand_block(self) -> None:
615
- if (block := self.cursor_block) is not None and isinstance(block, ExpandProtocol):
616
- block.expand_block()
617
- self._refresh_block_cursor()
618
-
619
- def action_collapse_block(self) -> None:
620
- if (block := self.cursor_block) is not None and isinstance(block, ExpandProtocol):
621
- block.collapse_block()
622
- self._refresh_block_cursor()
623
-
624
- def action_toggle_expand(self) -> None:
625
- block = self.cursor_block
626
- if block is None:
627
- # No cursor → fall back to "toggle latest completed thought"
628
- try:
629
- container = self.query_one("#content", VerticalGroup)
630
- for child in reversed(container.children):
631
- if isinstance(child, AgentThought) and child._completed:
632
- child.action_toggle()
633
- return
634
- except Exception:
635
- return
636
- return
637
- if isinstance(block, ExpandProtocol):
638
- if block.is_block_expanded():
639
- block.collapse_block()
640
- else:
641
- block.expand_block()
642
- self._refresh_block_cursor()
643
-
644
- # ── Title / Footer ──
645
-
646
- def _update_title(self) -> None:
647
- sa = self.subagent
648
- status_icon = {"running": "🔄", "completed": "✔", "failed": "✗"}.get(sa._status, "?")
649
- self.title = f"{status_icon} Subagent ({sa.agent_type})"
650
- chunks = len("".join(sa._chunks))
651
- tools = len(sa._tool_calls)
652
- parts = [sa._status]
653
- if chunks:
654
- parts.append(f"{chunks}B")
655
- if tools:
656
- parts.append(f"{tools} tool calls")
657
- self.sub_title = " | ".join(parts)
658
-
659
- def _update_footer(self) -> None:
660
- try:
661
- self.query_one("#footer", Static).update(
662
- "[$text-muted]esc[/] 返回 "
663
- "[$text-muted]ctrl+j/k[/] 移动 "
664
- "[$text-muted]enter[/] 菜单 "
665
- "[$text-muted]ctrl+x[/] 折叠 "
666
- "[$text-muted]↑↓[/] 滚动"
667
- )
668
- except Exception:
669
- pass
670
-
671
- # ── Scroll actions ──
672
-
673
- def _scroll_widget(self) -> VerticalScroll | None:
674
- try:
675
- return self.query_one("#scroll", VerticalScroll)
676
- except Exception:
677
- return None
678
-
679
- def action_scroll_up(self) -> None:
680
- self._auto_follow = False
681
- if w := self._scroll_widget():
682
- w.scroll_up()
683
-
684
- def action_scroll_down(self) -> None:
685
- if w := self._scroll_widget():
686
- w.scroll_down()
687
-
688
- def action_scroll_page_up(self) -> None:
689
- self._auto_follow = False
690
- if w := self._scroll_widget():
691
- w.scroll_page_up()
692
-
693
- def action_scroll_page_down(self) -> None:
694
- if w := self._scroll_widget():
695
- w.scroll_page_down()
696
-
697
- def action_scroll_home(self) -> None:
698
- self._auto_follow = False
699
- if w := self._scroll_widget():
700
- w.scroll_home()
701
-
702
- def action_scroll_end(self) -> None:
703
- self._auto_follow = True
704
- if w := self._scroll_widget():
705
- w.scroll_end(animate=True)
706
-
707
- # ── Scroll tracking ──
708
-
709
- def on_scroll(self, event) -> None:
710
- try:
711
- scroll = self.query_one("#scroll", VerticalScroll)
712
- at_end = scroll.scroll_y >= scroll.max_scroll_y - 1
713
- self._auto_follow = at_end
714
- except Exception:
715
- pass