@scemoon/cdh 1.0.8 → 1.0.9-beta.2

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/ai-dlc-skill/SKILL.md +106 -0
  2. package/ai-dlc-skill/architecture/project-structure.md +78 -0
  3. package/ai-dlc-skill/brownfield/README.md +36 -0
  4. package/ai-dlc-skill/brownfield/entry.md +45 -0
  5. package/ai-dlc-skill/brownfield/generate-context.sh +64 -0
  6. package/ai-dlc-skill/brownfield/scripts/deps.sh +27 -0
  7. package/ai-dlc-skill/brownfield/scripts/discover.sh +34 -0
  8. package/ai-dlc-skill/brownfield/scripts/extract-api.sh +45 -0
  9. package/ai-dlc-skill/components/backend.md +47 -0
  10. package/ai-dlc-skill/components/desktop.md +63 -0
  11. package/ai-dlc-skill/components/mya.md +219 -0
  12. package/ai-dlc-skill/components/native.md +73 -0
  13. package/ai-dlc-skill/components/tta.md +235 -0
  14. package/ai-dlc-skill/components/web.md +77 -0
  15. package/ai-dlc-skill/components/wxa.md +219 -0
  16. package/ai-dlc-skill/contracts/README.md +25 -0
  17. package/ai-dlc-skill/core/adaptive-flow.md +107 -0
  18. package/ai-dlc-skill/core/security.md +29 -0
  19. package/ai-dlc-skill/core/task-registry.md +153 -0
  20. package/ai-dlc-skill/cross-tool/README.md +20 -0
  21. package/ai-dlc-skill/cross-tool/cline/export.sh +38 -0
  22. package/ai-dlc-skill/cross-tool/copilot/export.sh +41 -0
  23. package/ai-dlc-skill/cross-tool/cursor/export.sh +53 -0
  24. package/ai-dlc-skill/cross-tool/onecode/export.sh +27 -0
  25. package/ai-dlc-skill/cross-tool/opencode/export.sh +38 -0
  26. package/ai-dlc-skill/phases/debug/entry.md +48 -0
  27. package/ai-dlc-skill/phases/debug/lifecycle.md +284 -0
  28. package/ai-dlc-skill/phases/deliver/entry.md +35 -0
  29. package/ai-dlc-skill/phases/deliver/lifecycle.md +185 -0
  30. package/ai-dlc-skill/phases/deliver/prompt.md +54 -0
  31. package/ai-dlc-skill/phases/deliver/rules.md +61 -0
  32. package/ai-dlc-skill/phases/plan/design_system/accessibility.md +268 -0
  33. package/ai-dlc-skill/phases/plan/design_system/atomic_design.md +341 -0
  34. package/ai-dlc-skill/phases/plan/design_system/component_spec.md +398 -0
  35. package/ai-dlc-skill/phases/plan/design_system/design_tokens.md +190 -0
  36. package/ai-dlc-skill/phases/plan/design_system/iconography.md +299 -0
  37. package/ai-dlc-skill/phases/plan/design_system/platform_ui/desktop.md +318 -0
  38. package/ai-dlc-skill/phases/plan/design_system/platform_ui/mya.md +354 -0
  39. package/ai-dlc-skill/phases/plan/design_system/platform_ui/native.md +328 -0
  40. package/ai-dlc-skill/phases/plan/design_system/platform_ui/tta.md +394 -0
  41. package/ai-dlc-skill/phases/plan/design_system/platform_ui/web.md +287 -0
  42. package/ai-dlc-skill/phases/plan/design_system/platform_ui/wxa.md +374 -0
  43. package/ai-dlc-skill/phases/plan/design_system/theme_system.md +318 -0
  44. package/ai-dlc-skill/phases/plan/entry.md +33 -0
  45. package/ai-dlc-skill/phases/plan/lifecycle.md +260 -0
  46. package/ai-dlc-skill/phases/plan/prompt.md +75 -0
  47. package/ai-dlc-skill/phases/plan/rules.md +60 -0
  48. package/ai-dlc-skill/phases/understand/entry.md +36 -0
  49. package/ai-dlc-skill/phases/understand/lifecycle.md +184 -0
  50. package/ai-dlc-skill/phases/understand/prompt.md +58 -0
  51. package/ai-dlc-skill/phases/understand/rules.md +49 -0
  52. package/ai-dlc-skill/phases/verify/config/base_url.md +65 -0
  53. package/ai-dlc-skill/phases/verify/entry.md +59 -0
  54. package/ai-dlc-skill/phases/verify/gates/browser_e2e.md +96 -0
  55. package/ai-dlc-skill/phases/verify/lifecycle.md +217 -0
  56. package/ai-dlc-skill/phases/verify/prompt.md +73 -0
  57. package/ai-dlc-skill/phases/verify/rules.md +91 -0
  58. package/ai-dlc-skill/phases/verify/runners/playwright_local.md +103 -0
  59. package/ai-dlc-skill/practices/bdd.md +119 -0
  60. package/ai-dlc-skill/practices/sdd.md +84 -0
  61. package/ai-dlc-skill/practices/tdd.md +128 -0
  62. package/ai-dlc-skill/providers/README.md +114 -0
  63. package/ai-dlc-skill/providers/aliyun/SKILL.md +204 -0
  64. package/ai-dlc-skill/providers/aliyun/api/rest-api.md +214 -0
  65. package/ai-dlc-skill/providers/aliyun/api/sdk.md +307 -0
  66. package/ai-dlc-skill/providers/aliyun/best-practices/database-design.md +363 -0
  67. package/ai-dlc-skill/providers/aliyun/best-practices/function-design.md +424 -0
  68. package/ai-dlc-skill/providers/aliyun/best-practices/troubleshooting.md +258 -0
  69. package/ai-dlc-skill/providers/aliyun/cli/database.md +263 -0
  70. package/ai-dlc-skill/providers/aliyun/cli/functions.md +263 -0
  71. package/ai-dlc-skill/providers/aliyun/cli/hosting.md +226 -0
  72. package/ai-dlc-skill/providers/aliyun/cli/setup.md +235 -0
  73. package/ai-dlc-skill/providers/aliyun/cli/storage.md +315 -0
  74. package/ai-dlc-skill/providers/aliyun/deployment.yaml +66 -0
  75. package/ai-dlc-skill/providers/aliyun/integration/ci-cd.md +288 -0
  76. package/ai-dlc-skill/providers/aliyun/preview.yaml +84 -0
  77. package/ai-dlc-skill/providers/aliyun/provider.yaml +160 -0
  78. package/ai-dlc-skill/providers/aliyun/security/authentication.md +254 -0
  79. package/ai-dlc-skill/providers/aliyun/services/cdn-hosting.md +220 -0
  80. package/ai-dlc-skill/providers/aliyun/services/database.md +319 -0
  81. package/ai-dlc-skill/providers/aliyun/services/function-compute.md +273 -0
  82. package/ai-dlc-skill/providers/aliyun/services/overview.md +163 -0
  83. package/ai-dlc-skill/providers/aliyun/services/serverless-app-engine.md +266 -0
  84. package/ai-dlc-skill/providers/aliyun/services/storage.md +269 -0
  85. package/ai-dlc-skill/providers/tcb/SKILL.md +208 -0
  86. package/ai-dlc-skill/providers/tcb/api/rest-api.md +338 -0
  87. package/ai-dlc-skill/providers/tcb/api/sdk.md +288 -0
  88. package/ai-dlc-skill/providers/tcb/best-practices/database-design.md +452 -0
  89. package/ai-dlc-skill/providers/tcb/best-practices/function-design.md +502 -0
  90. package/ai-dlc-skill/providers/tcb/best-practices/troubleshooting.md +462 -0
  91. package/ai-dlc-skill/providers/tcb/cli/cls.md +133 -0
  92. package/ai-dlc-skill/providers/tcb/cli/database.md +230 -0
  93. package/ai-dlc-skill/providers/tcb/cli/env.md +207 -0
  94. package/ai-dlc-skill/providers/tcb/cli/functions.md +276 -0
  95. package/ai-dlc-skill/providers/tcb/cli/hosting.md +219 -0
  96. package/ai-dlc-skill/providers/tcb/cli/setup.md +218 -0
  97. package/ai-dlc-skill/providers/tcb/cli/storage.md +233 -0
  98. package/ai-dlc-skill/providers/tcb/deployment.yaml +111 -0
  99. package/ai-dlc-skill/providers/tcb/integration/ci-cd.md +309 -0
  100. package/ai-dlc-skill/providers/tcb/integration/mcp-server.md +371 -0
  101. package/ai-dlc-skill/providers/tcb/preview.yaml +83 -0
  102. package/ai-dlc-skill/providers/tcb/provider.yaml +172 -0
  103. package/ai-dlc-skill/providers/tcb/security/authentication.md +241 -0
  104. package/ai-dlc-skill/providers/tcb/services/cloud-database.md +299 -0
  105. package/ai-dlc-skill/providers/tcb/services/cloud-functions.md +265 -0
  106. package/ai-dlc-skill/providers/tcb/services/cloud-hosting.md +264 -0
  107. package/ai-dlc-skill/providers/tcb/services/cloud-run.md +285 -0
  108. package/ai-dlc-skill/providers/tcb/services/cloud-storage.md +245 -0
  109. package/ai-dlc-skill/providers/tcb/services/overview.md +174 -0
  110. package/ai-dlc-skill/pybdd/README.md +41 -0
  111. package/ai-dlc-skill/pybdd/conftest.py +17 -0
  112. package/ai-dlc-skill/pybdd/example/auth/login.feature +32 -0
  113. package/ai-dlc-skill/pybdd/pytest.ini +5 -0
  114. package/ai-dlc-skill/pybdd/steps/.gitkeep +1 -0
  115. package/ai-dlc-skill/pybdd/steps/test_example_steps.py +65 -0
  116. package/ai-dlc-skill/requirements.md +140 -0
  117. package/ai-dlc-skill/skill.yaml +135 -0
  118. package/ai-dlc-skill/templates/brownfield/context.md +78 -0
  119. package/ai-dlc-skill/templates/integration/CHANGELOG.md +41 -0
  120. package/ai-dlc-skill/templates/integration/asyncapi.yaml +43 -0
  121. package/ai-dlc-skill/templates/integration/contract-diff.md +63 -0
  122. package/ai-dlc-skill/templates/integration/contract-spec.md +49 -0
  123. package/ai-dlc-skill/templates/integration/openapi.yaml +18 -0
  124. package/ai-dlc-skill/templates/integration/runtime-contract.yaml +36 -0
  125. package/ai-dlc-skill/templates/plan/design.md +49 -0
  126. package/ai-dlc-skill/templates/plan/task-list.md +32 -0
  127. package/ai-dlc-skill/templates/project/README.md +126 -0
  128. package/ai-dlc-skill/templates/project/template.md +119 -0
  129. package/ai-dlc-skill/templates/understand/feature.feature +30 -0
  130. package/ai-dlc-skill/templates/understand/intent.md +29 -0
  131. package/ai-dlc-skill/templates/understand/spec-delta.md +47 -0
  132. package/ai-dlc-skill/templates/verify/test-unit.py +27 -0
  133. package/ai-dlc-skill/walkthrough/collect.sh +50 -0
  134. package/ai-dlc-skill/walkthrough/template.md +54 -0
  135. package/cdh/__init__.py +0 -0
  136. package/cdh/__main__.py +4 -0
  137. package/cdh/__pycache__/__init__.cpython-314.pyc +0 -0
  138. package/cdh/__pycache__/cli.cpython-314.pyc +0 -0
  139. package/cdh/__pycache__/cli_logging.cpython-314.pyc +0 -0
  140. package/cdh/__pycache__/config.cpython-314.pyc +0 -0
  141. package/cdh/__pycache__/project_loader.cpython-314.pyc +0 -0
  142. package/cdh/__pycache__/scaffold.cpython-314.pyc +0 -0
  143. package/cdh/__pycache__/session_store.cpython-314.pyc +0 -0
  144. package/cdh/cdh_session_aggregator.py +258 -0
  145. package/cdh/cli.py +3000 -0
  146. package/cdh/cli_logging.py +45 -0
  147. package/cdh/config.py +28 -0
  148. package/cdh/event_loop/__init__.py +7 -0
  149. package/cdh/event_loop/bus.py +123 -0
  150. package/cdh/event_loop/events.py +25 -0
  151. package/cdh/event_loop/runner.py +28 -0
  152. package/cdh/event_loop/scheduler.py +158 -0
  153. package/cdh/generators/__init__.py +35 -0
  154. package/cdh/generators/_runtime.py +176 -0
  155. package/cdh/generators/ada/MANIFEST.toml +14 -0
  156. package/cdh/generators/ada/template.ads.tmpl +7 -0
  157. package/cdh/generators/bash/MANIFEST.toml +14 -0
  158. package/cdh/generators/bash/template.sh.tmpl +16 -0
  159. package/cdh/generators/builtin_index.json +590 -0
  160. package/cdh/generators/c/MANIFEST.toml +14 -0
  161. package/cdh/generators/c/template.h.tmpl +20 -0
  162. package/cdh/generators/cli.py +379 -0
  163. package/cdh/generators/clojure/MANIFEST.toml +14 -0
  164. package/cdh/generators/clojure/template.clj.tmpl +13 -0
  165. package/cdh/generators/cobol/MANIFEST.toml +14 -0
  166. package/cdh/generators/cobol/template.cbl.tmpl +14 -0
  167. package/cdh/generators/cpp/MANIFEST.toml +14 -0
  168. package/cdh/generators/cpp/template.hpp.tmpl +32 -0
  169. package/cdh/generators/crystal/MANIFEST.toml +14 -0
  170. package/cdh/generators/crystal/template.cr.tmpl +11 -0
  171. package/cdh/generators/csharp/MANIFEST.toml +23 -0
  172. package/cdh/generators/csharp/template.cs.tmpl +14 -0
  173. package/cdh/generators/cython/MANIFEST.toml +14 -0
  174. package/cdh/generators/cython/template.pyx.tmpl +17 -0
  175. package/cdh/generators/d/MANIFEST.toml +14 -0
  176. package/cdh/generators/d/template.d.tmpl +24 -0
  177. package/cdh/generators/dart/MANIFEST.toml +17 -0
  178. package/cdh/generators/dart/template.dart.tmpl +27 -0
  179. package/cdh/generators/elixir/MANIFEST.toml +17 -0
  180. package/cdh/generators/elixir/template.ex.tmpl +27 -0
  181. package/cdh/generators/elm/MANIFEST.toml +14 -0
  182. package/cdh/generators/elm/template.elm.tmpl +20 -0
  183. package/cdh/generators/erlang/MANIFEST.toml +14 -0
  184. package/cdh/generators/erlang/template.erl.tmpl +18 -0
  185. package/cdh/generators/fortran/MANIFEST.toml +14 -0
  186. package/cdh/generators/fortran/template.f90.tmpl +24 -0
  187. package/cdh/generators/fsharp/MANIFEST.toml +14 -0
  188. package/cdh/generators/fsharp/template.fs.tmpl +17 -0
  189. package/cdh/generators/go/MANIFEST.toml +18 -0
  190. package/cdh/generators/go/imports.go.tmpl +3 -0
  191. package/cdh/generators/go/template.go.tmpl +9 -0
  192. package/cdh/generators/graphql-schema/MANIFEST.toml +18 -0
  193. package/cdh/generators/graphql-schema/template.graphqls.tmpl +12 -0
  194. package/cdh/generators/groovy/MANIFEST.toml +14 -0
  195. package/cdh/generators/groovy/template.groovy.tmpl +28 -0
  196. package/cdh/generators/hack/MANIFEST.toml +14 -0
  197. package/cdh/generators/hack/template.hh.tmpl +24 -0
  198. package/cdh/generators/haskell/MANIFEST.toml +14 -0
  199. package/cdh/generators/haskell/template.hs.tmpl +20 -0
  200. package/cdh/generators/haxe/MANIFEST.toml +14 -0
  201. package/cdh/generators/haxe/template.hx.tmpl +20 -0
  202. package/cdh/generators/idris/MANIFEST.toml +14 -0
  203. package/cdh/generators/idris/template.idr.tmpl +22 -0
  204. package/cdh/generators/java/MANIFEST.toml +18 -0
  205. package/cdh/generators/java/template.java.tmpl +13 -0
  206. package/cdh/generators/julia/MANIFEST.toml +14 -0
  207. package/cdh/generators/julia/template.jl.tmpl +27 -0
  208. package/cdh/generators/kotlin/MANIFEST.toml +18 -0
  209. package/cdh/generators/kotlin/template.kt.tmpl +12 -0
  210. package/cdh/generators/lua/MANIFEST.toml +14 -0
  211. package/cdh/generators/lua/template.lua.tmpl +27 -0
  212. package/cdh/generators/matlab/MANIFEST.toml +14 -0
  213. package/cdh/generators/matlab/template.m.tmpl +26 -0
  214. package/cdh/generators/nim/MANIFEST.toml +14 -0
  215. package/cdh/generators/nim/template.nim.tmpl +12 -0
  216. package/cdh/generators/nix/MANIFEST.toml +14 -0
  217. package/cdh/generators/nix/template.nix.tmpl +8 -0
  218. package/cdh/generators/objective-c/MANIFEST.toml +14 -0
  219. package/cdh/generators/objective-c/template.m.tmpl +31 -0
  220. package/cdh/generators/ocaml/MANIFEST.toml +14 -0
  221. package/cdh/generators/ocaml/template.ml.tmpl +13 -0
  222. package/cdh/generators/pascal/MANIFEST.toml +14 -0
  223. package/cdh/generators/pascal/template.pas.tmpl +5 -0
  224. package/cdh/generators/perl/MANIFEST.toml +14 -0
  225. package/cdh/generators/perl/template.pm.tmpl +27 -0
  226. package/cdh/generators/php/MANIFEST.toml +17 -0
  227. package/cdh/generators/php/template.php.tmpl +31 -0
  228. package/cdh/generators/powershell/MANIFEST.toml +14 -0
  229. package/cdh/generators/powershell/template.ps1.tmpl +20 -0
  230. package/cdh/generators/protobuf/MANIFEST.toml +18 -0
  231. package/cdh/generators/protobuf/template.proto.tmpl +13 -0
  232. package/cdh/generators/python/MANIFEST.toml +18 -0
  233. package/cdh/generators/python/template.py.tmpl +12 -0
  234. package/cdh/generators/r/MANIFEST.toml +14 -0
  235. package/cdh/generators/r/template.R.tmpl +29 -0
  236. package/cdh/generators/racket/MANIFEST.toml +14 -0
  237. package/cdh/generators/racket/template.rkt.tmpl +15 -0
  238. package/cdh/generators/registry.py +211 -0
  239. package/cdh/generators/ruby/MANIFEST.toml +17 -0
  240. package/cdh/generators/ruby/template.rb.tmpl +27 -0
  241. package/cdh/generators/rust/MANIFEST.toml +18 -0
  242. package/cdh/generators/rust/template.rs.tmpl +16 -0
  243. package/cdh/generators/scala/MANIFEST.toml +20 -0
  244. package/cdh/generators/scala/template.scala.tmpl +13 -0
  245. package/cdh/generators/scheme/MANIFEST.toml +14 -0
  246. package/cdh/generators/scheme/template.scm.tmpl +16 -0
  247. package/cdh/generators/solidity/MANIFEST.toml +14 -0
  248. package/cdh/generators/solidity/template.sol.tmpl +24 -0
  249. package/cdh/generators/swift/MANIFEST.toml +18 -0
  250. package/cdh/generators/swift/template.swift.tmpl +10 -0
  251. package/cdh/generators/typescript/MANIFEST.toml +18 -0
  252. package/cdh/generators/typescript/template.ts.tmpl +7 -0
  253. package/cdh/generators/version.py +214 -0
  254. package/cdh/generators/zig/MANIFEST.toml +14 -0
  255. package/cdh/generators/zig/template.zig.tmpl +20 -0
  256. package/cdh/logging.py +314 -0
  257. package/cdh/optimizer/__init__.py +7 -0
  258. package/cdh/optimizer/loop.py +201 -0
  259. package/cdh/optimizer/mutation.py +85 -0
  260. package/cdh/optimizer/reward.py +51 -0
  261. package/cdh/optimizer/tracker.py +118 -0
  262. package/cdh/project_loader.py +1022 -0
  263. package/cdh/rules/patterns.yaml +132 -0
  264. package/cdh/rules/spectral.yaml +301 -0
  265. package/cdh/scaffold.py +1436 -0
  266. package/cdh/session_store.py +221 -0
  267. package/cdh/state_schema.py +127 -0
  268. package/cdh/tools/__init__.py +57 -0
  269. package/cdh/tools/cls_search.py +406 -0
  270. package/cdh/tools/contract_diff.py +644 -0
  271. package/cdh/tools/deploy_stack.py +590 -0
  272. package/cdh/tools/generate_shared.py +300 -0
  273. package/cdh/tools/iac_gen.py +224 -0
  274. package/cdh/tools/otel_export.py +125 -0
  275. package/cdh/tools/pattern_detect.py +451 -0
  276. package/cdh/tools/retrofit_labels.py +505 -0
  277. package/cdh/trace/__init__.py +101 -0
  278. package/cdh/trace/__pycache__/__init__.cpython-314.pyc +0 -0
  279. package/cdh/trace/dashboard/__init__.py +61 -0
  280. package/cdh/trace/dashboard/api.py +1032 -0
  281. package/cdh/trace/dashboard/app.html +1321 -0
  282. package/cdh/trace/dashboard/server.py +310 -0
  283. package/cdh/trace/otel_exporter.py +462 -0
  284. package/cdh/trace/otel_tracer.py +281 -0
  285. package/cdh/tui.py +1084 -0
  286. package/cdh/validators/__init__.py +16 -0
  287. package/cdh/validators/__pycache__/__init__.cpython-314.pyc +0 -0
  288. package/cdh/validators/__pycache__/bdd.cpython-314.pyc +0 -0
  289. package/cdh/validators/__pycache__/dag.cpython-314.pyc +0 -0
  290. package/cdh/validators/__pycache__/ears.cpython-314.pyc +0 -0
  291. package/cdh/validators/__pycache__/fr_namespace.cpython-314.pyc +0 -0
  292. package/cdh/validators/bdd.py +144 -0
  293. package/cdh/validators/dag.py +179 -0
  294. package/cdh/validators/ears.py +452 -0
  295. package/cdh/validators/fr_namespace.py +143 -0
  296. package/cdh/validators/spectral.py +475 -0
  297. package/cdh/verification/__init__.py +3 -0
  298. package/cdh/verification/aggregation.py +53 -0
  299. package/cdh/verification/gates/__init__.py +5 -0
  300. package/cdh/verification/gates/base.py +18 -0
  301. package/cdh/verification/gates/lint_gate.py +37 -0
  302. package/cdh/verification/gates/test_gate.py +41 -0
  303. package/cdh/verification/loop.py +93 -0
  304. package/cdh/verification/policy.py +24 -0
  305. package/onecode/__init__.py +1 -0
  306. package/onecode/__main__.py +4 -0
  307. package/onecode/__pycache__/__init__.cpython-314.pyc +0 -0
  308. package/onecode/__pycache__/cli.cpython-314.pyc +0 -0
  309. package/onecode/__pycache__/commands.cpython-314.pyc +0 -0
  310. package/onecode/__pycache__/config.cpython-314.pyc +0 -0
  311. package/onecode/__pycache__/migrate.cpython-314.pyc +0 -0
  312. package/onecode/agent/__init__.py +0 -0
  313. package/onecode/agent/__pycache__/__init__.cpython-314.pyc +0 -0
  314. package/onecode/agent/__pycache__/cdh_loader.cpython-314.pyc +0 -0
  315. package/onecode/agent/__pycache__/checkpoint.cpython-314.pyc +0 -0
  316. package/onecode/agent/__pycache__/context.cpython-314.pyc +0 -0
  317. package/onecode/agent/__pycache__/engine.cpython-314.pyc +0 -0
  318. package/onecode/agent/__pycache__/hooks.cpython-314.pyc +0 -0
  319. package/onecode/agent/__pycache__/onecode_agent_acp.cpython-314.pyc +0 -0
  320. package/onecode/agent/__pycache__/permissions.cpython-314.pyc +0 -0
  321. package/onecode/agent/__pycache__/permissions_store.cpython-314.pyc +0 -0
  322. package/onecode/agent/__pycache__/project_doc.cpython-314.pyc +0 -0
  323. package/onecode/agent/__pycache__/session.cpython-314.pyc +0 -0
  324. package/onecode/agent/__pycache__/turn_record.cpython-314.pyc +0 -0
  325. package/onecode/agent/agents/__init__.py +29 -0
  326. package/onecode/agent/agents/__pycache__/__init__.cpython-314.pyc +0 -0
  327. package/onecode/agent/agents/__pycache__/types.cpython-314.pyc +0 -0
  328. package/onecode/agent/agents/prompts/build-agent.md +50 -0
  329. package/onecode/agent/agents/prompts/compaction-instructions.md +12 -0
  330. package/onecode/agent/agents/prompts/explore-agent.md +42 -0
  331. package/onecode/agent/agents/prompts/plan-agent.md +44 -0
  332. package/onecode/agent/agents/prompts/plan-gate-hard.md +4 -0
  333. package/onecode/agent/agents/prompts/plan-gate-soft.md +3 -0
  334. package/onecode/agent/agents/prompts/solo-agent.md +57 -0
  335. package/onecode/agent/agents/prompts/subagent-constraints.md +10 -0
  336. package/onecode/agent/agents/prompts/summary-instructions.md +7 -0
  337. package/onecode/agent/agents/prompts/title-instructions.md +3 -0
  338. package/onecode/agent/agents/prompts/tool-descriptions.md +129 -0
  339. package/onecode/agent/agents/types.py +786 -0
  340. package/onecode/agent/attachments.py +112 -0
  341. package/onecode/agent/cdh_loader.py +3 -0
  342. package/onecode/agent/checkpoint.py +285 -0
  343. package/onecode/agent/context.py +465 -0
  344. package/onecode/agent/engine.py +3547 -0
  345. package/onecode/agent/event_bridge.py +75 -0
  346. package/onecode/agent/hooks.py +86 -0
  347. package/onecode/agent/onecode_agent_acp.py +2993 -0
  348. package/onecode/agent/permissions.py +150 -0
  349. package/onecode/agent/permissions_store.py +73 -0
  350. package/onecode/agent/project_doc.py +19 -0
  351. package/onecode/agent/question_detect.py +230 -0
  352. package/onecode/agent/session.py +3 -0
  353. package/onecode/agent/snapshot.py +144 -0
  354. package/onecode/agent/tools/__init__.py +17 -0
  355. package/onecode/agent/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  356. package/onecode/agent/tools/__pycache__/agent_tools.cpython-314.pyc +0 -0
  357. package/onecode/agent/tools/__pycache__/apply_patch_tool.cpython-314.pyc +0 -0
  358. package/onecode/agent/tools/__pycache__/bash_tool.cpython-314.pyc +0 -0
  359. package/onecode/agent/tools/__pycache__/communication_tools.cpython-314.pyc +0 -0
  360. package/onecode/agent/tools/__pycache__/config_tool.cpython-314.pyc +0 -0
  361. package/onecode/agent/tools/__pycache__/cron_tools.cpython-314.pyc +0 -0
  362. package/onecode/agent/tools/__pycache__/errors.cpython-314.pyc +0 -0
  363. package/onecode/agent/tools/__pycache__/file_ops.cpython-314.pyc +0 -0
  364. package/onecode/agent/tools/__pycache__/file_tools.cpython-314.pyc +0 -0
  365. package/onecode/agent/tools/__pycache__/git_tools.cpython-314.pyc +0 -0
  366. package/onecode/agent/tools/__pycache__/lsp_tools.cpython-314.pyc +0 -0
  367. package/onecode/agent/tools/__pycache__/mcp_tools.cpython-314.pyc +0 -0
  368. package/onecode/agent/tools/__pycache__/permission_handler.cpython-314.pyc +0 -0
  369. package/onecode/agent/tools/__pycache__/permissions.cpython-314.pyc +0 -0
  370. package/onecode/agent/tools/__pycache__/protocol.cpython-314.pyc +0 -0
  371. package/onecode/agent/tools/__pycache__/registry.cpython-314.pyc +0 -0
  372. package/onecode/agent/tools/__pycache__/sandbox.cpython-314.pyc +0 -0
  373. package/onecode/agent/tools/__pycache__/schema_validation.cpython-314.pyc +0 -0
  374. package/onecode/agent/tools/__pycache__/skill_tools.cpython-314.pyc +0 -0
  375. package/onecode/agent/tools/__pycache__/todo_tools.cpython-314.pyc +0 -0
  376. package/onecode/agent/tools/__pycache__/web_tools.cpython-314.pyc +0 -0
  377. package/onecode/agent/tools/agent_tools.py +128 -0
  378. package/onecode/agent/tools/apply_patch_tool.py +138 -0
  379. package/onecode/agent/tools/bash_tool.py +121 -0
  380. package/onecode/agent/tools/communication_tools.py +154 -0
  381. package/onecode/agent/tools/config_tool.py +130 -0
  382. package/onecode/agent/tools/cron_tools.py +178 -0
  383. package/onecode/agent/tools/errors.py +17 -0
  384. package/onecode/agent/tools/file_ops.py +221 -0
  385. package/onecode/agent/tools/file_tools.py +225 -0
  386. package/onecode/agent/tools/git_tools.py +88 -0
  387. package/onecode/agent/tools/lsp_tools.py +404 -0
  388. package/onecode/agent/tools/mcp_tools.py +211 -0
  389. package/onecode/agent/tools/permission_handler.py +46 -0
  390. package/onecode/agent/tools/permissions.py +77 -0
  391. package/onecode/agent/tools/protocol.py +20 -0
  392. package/onecode/agent/tools/registry.py +210 -0
  393. package/onecode/agent/tools/sandbox.py +460 -0
  394. package/onecode/agent/tools/schema_validation.py +100 -0
  395. package/onecode/agent/tools/skill_tools.py +52 -0
  396. package/onecode/agent/tools/todo_tools.py +208 -0
  397. package/onecode/agent/tools/web_tools.py +530 -0
  398. package/onecode/agent/turn_record.py +28 -0
  399. package/onecode/builtin_skills/agent-browser/SKILL.md +212 -0
  400. package/onecode/builtin_skills/agent-browser/skill.yaml +8 -0
  401. package/onecode/builtin_skills/cloudbase/SKILL.md +162 -0
  402. package/onecode/builtin_skills/cloudbase/skill.yaml +7 -0
  403. package/onecode/builtin_skills/git/SKILL.md +64 -0
  404. package/onecode/builtin_skills/git/skill.yaml +7 -0
  405. package/onecode/builtin_skills/shell/SKILL.md +58 -0
  406. package/onecode/builtin_skills/shell/skill.yaml +8 -0
  407. package/onecode/builtin_skills/skill-creator/SKILL.md +106 -0
  408. package/onecode/builtin_skills/skill-creator/skill.yaml +8 -0
  409. package/onecode/cli.py +1325 -0
  410. package/onecode/codebase/__init__.py +69 -0
  411. package/onecode/codebase/__pycache__/__init__.cpython-314.pyc +0 -0
  412. package/onecode/codebase/__pycache__/chunker.cpython-314.pyc +0 -0
  413. package/onecode/codebase/__pycache__/indexer.cpython-314.pyc +0 -0
  414. package/onecode/codebase/__pycache__/retriever.cpython-314.pyc +0 -0
  415. package/onecode/codebase/__pycache__/storage.cpython-314.pyc +0 -0
  416. package/onecode/codebase/__pycache__/tools.cpython-314.pyc +0 -0
  417. package/onecode/codebase/chunker.py +125 -0
  418. package/onecode/codebase/indexer.py +154 -0
  419. package/onecode/codebase/retriever.py +240 -0
  420. package/onecode/codebase/storage.py +153 -0
  421. package/onecode/codebase/tools.py +59 -0
  422. package/onecode/commands.py +673 -0
  423. package/onecode/config.py +539 -0
  424. package/onecode/config_screen.py +486 -0
  425. package/onecode/cron/__init__.py +3 -0
  426. package/onecode/lsp/__init__.py +3 -0
  427. package/onecode/mcp/__init__.py +11 -0
  428. package/onecode/mcp/__pycache__/__init__.cpython-314.pyc +0 -0
  429. package/onecode/mcp/__pycache__/client.cpython-314.pyc +0 -0
  430. package/onecode/mcp/__pycache__/cloudbase.cpython-314.pyc +0 -0
  431. package/onecode/mcp/__pycache__/config.cpython-314.pyc +0 -0
  432. package/onecode/mcp/__pycache__/manager.cpython-314.pyc +0 -0
  433. package/onecode/mcp/__pycache__/oauth.cpython-314.pyc +0 -0
  434. package/onecode/mcp/client.py +305 -0
  435. package/onecode/mcp/cloudbase.py +188 -0
  436. package/onecode/mcp/config.py +363 -0
  437. package/onecode/mcp/manager.py +603 -0
  438. package/onecode/mcp/oauth.py +199 -0
  439. package/onecode/memory/__init__.py +106 -0
  440. package/onecode/memory/__pycache__/__init__.cpython-314.pyc +0 -0
  441. package/onecode/memory/__pycache__/backend.cpython-314.pyc +0 -0
  442. package/onecode/memory/__pycache__/pyramid.cpython-314.pyc +0 -0
  443. package/onecode/memory/__pycache__/recall.cpython-314.pyc +0 -0
  444. package/onecode/memory/backend.py +179 -0
  445. package/onecode/memory/pyramid.py +145 -0
  446. package/onecode/memory/recall.py +322 -0
  447. package/onecode/migrate.py +122 -0
  448. package/onecode/models/__init__.py +4 -0
  449. package/onecode/models/__pycache__/__init__.cpython-314.pyc +0 -0
  450. package/onecode/models/__pycache__/errors.cpython-314.pyc +0 -0
  451. package/onecode/models/__pycache__/messages.cpython-314.pyc +0 -0
  452. package/onecode/models/__pycache__/ollama_manager.cpython-314.pyc +0 -0
  453. package/onecode/models/__pycache__/provider.cpython-314.pyc +0 -0
  454. package/onecode/models/__pycache__/registry.cpython-314.pyc +0 -0
  455. package/onecode/models/errors.py +104 -0
  456. package/onecode/models/messages.py +750 -0
  457. package/onecode/models/ollama_manager.py +167 -0
  458. package/onecode/models/provider.py +730 -0
  459. package/onecode/models/providers/__init__.py +17 -0
  460. package/onecode/models/providers/__pycache__/__init__.cpython-314.pyc +0 -0
  461. package/onecode/models/providers/__pycache__/anthropic_provider.cpython-314.pyc +0 -0
  462. package/onecode/models/providers/__pycache__/deepseek_provider.cpython-314.pyc +0 -0
  463. package/onecode/models/providers/__pycache__/glm_provider.cpython-314.pyc +0 -0
  464. package/onecode/models/providers/__pycache__/minimax_provider.cpython-314.pyc +0 -0
  465. package/onecode/models/providers/__pycache__/minimaxi_provider.cpython-314.pyc +0 -0
  466. package/onecode/models/providers/__pycache__/ollama_provider.cpython-314.pyc +0 -0
  467. package/onecode/models/providers/__pycache__/openai_provider.cpython-314.pyc +0 -0
  468. package/onecode/models/providers/anthropic_provider.py +286 -0
  469. package/onecode/models/providers/deepseek_provider.py +221 -0
  470. package/onecode/models/providers/glm_provider.py +219 -0
  471. package/onecode/models/providers/minimax_provider.py +182 -0
  472. package/onecode/models/providers/minimaxi_provider.py +426 -0
  473. package/onecode/models/providers/ollama_provider.py +183 -0
  474. package/onecode/models/providers/openai_provider.py +234 -0
  475. package/onecode/models/registry.py +349 -0
  476. package/onecode/server/__init__.py +3 -0
  477. package/onecode/server/app.py +251 -0
  478. package/onecode/skills/__init__.py +11 -0
  479. package/onecode/skills/__pycache__/__init__.cpython-314.pyc +0 -0
  480. package/onecode/skills/__pycache__/argument_substitution.cpython-314.pyc +0 -0
  481. package/onecode/skills/__pycache__/bootstrap.cpython-314.pyc +0 -0
  482. package/onecode/skills/__pycache__/create.cpython-314.pyc +0 -0
  483. package/onecode/skills/__pycache__/frontmatter.cpython-314.pyc +0 -0
  484. package/onecode/skills/__pycache__/loader.cpython-314.pyc +0 -0
  485. package/onecode/skills/__pycache__/model.cpython-314.pyc +0 -0
  486. package/onecode/skills/argument_substitution.py +38 -0
  487. package/onecode/skills/bootstrap.py +37 -0
  488. package/onecode/skills/create.py +56 -0
  489. package/onecode/skills/frontmatter.py +33 -0
  490. package/onecode/skills/loader.py +215 -0
  491. package/onecode/skills/manager.py +75 -0
  492. package/onecode/skills/model.py +43 -0
  493. package/onecode/storage/__init__.py +0 -0
  494. package/onecode/storage/activity.py +63 -0
  495. package/onecode/storage/project.py +54 -0
  496. package/onecode/storage/session.py +112 -0
  497. package/onecode/tasks/__init__.py +26 -0
  498. package/onecode/tasks/manager.py +232 -0
  499. package/onecode/tasks/models.py +240 -0
  500. package/onecode/trace/__init__.py +0 -0
  501. package/onecode/trace/tracer.py +173 -0
  502. package/onecode/utils/__init__.py +0 -0
  503. package/onecode/utils/helpers.py +20 -0
  504. package/onecode/verification/__init__.py +5 -0
  505. package/onecode/verification/__pycache__/__init__.cpython-314.pyc +0 -0
  506. package/onecode/verification/__pycache__/aggregation.cpython-314.pyc +0 -0
  507. package/onecode/verification/__pycache__/loop.cpython-314.pyc +0 -0
  508. package/onecode/verification/__pycache__/policy.cpython-314.pyc +0 -0
  509. package/onecode/verification/aggregation.py +53 -0
  510. package/onecode/verification/gates/__init__.py +6 -0
  511. package/onecode/verification/gates/__pycache__/__init__.cpython-314.pyc +0 -0
  512. package/onecode/verification/gates/__pycache__/base.cpython-314.pyc +0 -0
  513. package/onecode/verification/gates/__pycache__/lint_gate.cpython-314.pyc +0 -0
  514. package/onecode/verification/gates/__pycache__/test_gate.cpython-314.pyc +0 -0
  515. package/onecode/verification/gates/__pycache__/type_gate.cpython-314.pyc +0 -0
  516. package/onecode/verification/gates/base.py +20 -0
  517. package/onecode/verification/gates/lint_gate.py +45 -0
  518. package/onecode/verification/gates/test_gate.py +62 -0
  519. package/onecode/verification/gates/type_gate.py +46 -0
  520. package/onecode/verification/loop.py +95 -0
  521. package/onecode/verification/policy.py +29 -0
  522. package/package.json +2 -2
  523. package/pyproject.toml +84 -0
  524. package/tui/__init__.py +46 -0
  525. package/tui/__main__.py +4 -0
  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 +86 -0
  565. package/tui/_path_fuzzy_search.py +48 -0
  566. package/tui/_path_match.py +141 -0
  567. package/tui/about.py +95 -0
  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 +1212 -0
  576. package/tui/acp/api.py +79 -0
  577. package/tui/acp/encode_tool_call_id.py +12 -0
  578. package/tui/acp/event_tap.py +107 -0
  579. package/tui/acp/messages.py +222 -0
  580. package/tui/acp/prompt.py +53 -0
  581. package/tui/acp/protocol.py +551 -0
  582. package/tui/agent.py +70 -0
  583. package/tui/agent_schema.py +76 -0
  584. package/tui/agents.py +46 -0
  585. package/tui/ansi/__init__.py +1 -0
  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 +1689 -0
  594. package/tui/ansi/_ansi_colors.py +264 -0
  595. package/tui/ansi/_control_codes.py +37 -0
  596. package/tui/ansi/_keys.py +251 -0
  597. package/tui/ansi/_sgr_styles.py +64 -0
  598. package/tui/ansi/_stream_parser.py +418 -0
  599. package/tui/answer.py +12 -0
  600. package/tui/app.py +1195 -0
  601. package/tui/atomic.py +37 -0
  602. package/tui/cli.py +208 -0
  603. package/tui/code_analyze.py +27 -0
  604. package/tui/complete.py +38 -0
  605. package/tui/constants.py +61 -0
  606. package/tui/conversation_markdown.py +30 -0
  607. package/tui/danger.py +372 -0
  608. package/tui/data/agents/ampcode.com.toml +52 -0
  609. package/tui/data/agents/augmentcode.com.toml +41 -0
  610. package/tui/data/agents/cdh.cloud-dev-harness.toml +23 -0
  611. package/tui/data/agents/claude.com.toml +41 -0
  612. package/tui/data/agents/copilot.github.com.toml +29 -0
  613. package/tui/data/agents/crowai.dev.toml +36 -0
  614. package/tui/data/agents/cursor.com.toml +38 -0
  615. package/tui/data/agents/deepagents.langchain.com +34 -0
  616. package/tui/data/agents/docker.com.toml +60 -0
  617. package/tui/data/agents/geminicli.com.toml +28 -0
  618. package/tui/data/agents/goose.ai.toml +52 -0
  619. package/tui/data/agents/inference.huggingface.co.toml +41 -0
  620. package/tui/data/agents/kimi.com.toml +35 -0
  621. package/tui/data/agents/kiro.dev.toml +43 -0
  622. package/tui/data/agents/onecode.dev.toml +22 -0
  623. package/tui/data/agents/openai.com.toml +53 -0
  624. package/tui/data/agents/openclaw.ai.toml +37 -0
  625. package/tui/data/agents/opencode.ai.toml +39 -0
  626. package/tui/data/agents/openhands.dev.toml +46 -0
  627. package/tui/data/agents/stakpak.dev.toml +62 -0
  628. package/tui/data/agents/vibe.mistral.ai.toml +31 -0
  629. package/tui/data/agents/vtcode.dev.toml +63 -0
  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 +213 -0
  634. package/tui/dec.py +332 -0
  635. package/tui/diff_utils.py +131 -0
  636. package/tui/directory.py +234 -0
  637. package/tui/directory_suggester.py +93 -0
  638. package/tui/directory_watcher.py +231 -0
  639. package/tui/format_path.py +25 -0
  640. package/tui/fuzzy.py +140 -0
  641. package/tui/fuzzy_index.py +275 -0
  642. package/tui/gist.py +33 -0
  643. package/tui/history.py +138 -0
  644. package/tui/jsonrpc.py +599 -0
  645. package/tui/menus.py +14 -0
  646. package/tui/message_log.py +69 -0
  647. package/tui/messages.py +144 -0
  648. package/tui/option_content.py +51 -0
  649. package/tui/os.py +0 -0
  650. package/tui/path_complete.py +217 -0
  651. package/tui/path_filter.py +124 -0
  652. package/tui/paths.py +87 -0
  653. package/tui/pill.py +23 -0
  654. package/tui/platform_commands.py +52 -0
  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 +19 -0
  658. package/tui/prompt/resource.py +68 -0
  659. package/tui/protocol.py +28 -0
  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 +94 -0
  666. package/tui/screens/agent_modal.py +175 -0
  667. package/tui/screens/command_edit_modal.py +74 -0
  668. package/tui/screens/diff_explorer_screen.py +419 -0
  669. package/tui/screens/diff_screen.py +84 -0
  670. package/tui/screens/ide_screen.py +461 -0
  671. package/tui/screens/main.py +397 -0
  672. package/tui/screens/main.tcss +662 -0
  673. package/tui/screens/permissions.py +404 -0
  674. package/tui/screens/permissions.tcss +72 -0
  675. package/tui/screens/projects.tcss +84 -0
  676. package/tui/screens/projects_app.py +341 -0
  677. package/tui/screens/projects_screen.py +277 -0
  678. package/tui/screens/session_resume_modal.py +172 -0
  679. package/tui/screens/session_resume_modal.tcss +35 -0
  680. package/tui/screens/sessions.py +171 -0
  681. package/tui/screens/sessions.tcss +119 -0
  682. package/tui/screens/settings.py +293 -0
  683. package/tui/screens/settings.tcss +113 -0
  684. package/tui/screens/store.py +502 -0
  685. package/tui/screens/store.tcss +274 -0
  686. package/tui/screens/tool_content_screen.py +59 -0
  687. package/tui/screens/trace.py +317 -0
  688. package/tui/session_tracker.py +123 -0
  689. package/tui/settings.py +353 -0
  690. package/tui/settings_schema.py +467 -0
  691. package/tui/shell.py +304 -0
  692. package/tui/shell_read.py +42 -0
  693. package/tui/slash_command.py +34 -0
  694. package/tui/tui.tcss +246 -0
  695. package/tui/twitter.py +38 -0
  696. package/tui/version.py +80 -0
  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 +272 -0
  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 +70 -0
  738. package/tui/widgets/agent_response.py +76 -0
  739. package/tui/widgets/agent_thought.py +167 -0
  740. package/tui/widgets/aidlc.py +334 -0
  741. package/tui/widgets/ask_user.py +604 -0
  742. package/tui/widgets/command_pane.py +223 -0
  743. package/tui/widgets/condensed_path.py +115 -0
  744. package/tui/widgets/context_stats.py +66 -0
  745. package/tui/widgets/conversation.py +3235 -0
  746. package/tui/widgets/danger_warning.py +65 -0
  747. package/tui/widgets/diff_view.py +69 -0
  748. package/tui/widgets/directory_input.py +8 -0
  749. package/tui/widgets/edit_field.py +206 -0
  750. package/tui/widgets/flash.py +81 -0
  751. package/tui/widgets/future_text.py +126 -0
  752. package/tui/widgets/grid_select.py +234 -0
  753. package/tui/widgets/highlighted_textarea.py +183 -0
  754. package/tui/widgets/load_more.py +24 -0
  755. package/tui/widgets/mandelbrot.py +294 -0
  756. package/tui/widgets/markdown_note.py +13 -0
  757. package/tui/widgets/menu.py +147 -0
  758. package/tui/widgets/model_status.py +230 -0
  759. package/tui/widgets/modified_files.py +315 -0
  760. package/tui/widgets/non_selectable_label.py +5 -0
  761. package/tui/widgets/note.py +18 -0
  762. package/tui/widgets/path_search.py +492 -0
  763. package/tui/widgets/pending_prompts.py +36 -0
  764. package/tui/widgets/plan.py +285 -0
  765. package/tui/widgets/project_directory_tree.py +102 -0
  766. package/tui/widgets/project_grid_select.py +68 -0
  767. package/tui/widgets/project_summary.py +33 -0
  768. package/tui/widgets/prompt.py +935 -0
  769. package/tui/widgets/question.py +360 -0
  770. package/tui/widgets/session_grid_select.py +230 -0
  771. package/tui/widgets/session_summary.py +115 -0
  772. package/tui/widgets/session_tabs.py +194 -0
  773. package/tui/widgets/shell_result.py +35 -0
  774. package/tui/widgets/shell_terminal.py +40 -0
  775. package/tui/widgets/side_bar.py +124 -0
  776. package/tui/widgets/slash_complete.py +235 -0
  777. package/tui/widgets/strike_text.py +70 -0
  778. package/tui/widgets/subagent.py +287 -0
  779. package/tui/widgets/subagent_screen.py +715 -0
  780. package/tui/widgets/terminal.py +576 -0
  781. package/tui/widgets/terminal_tool.py +360 -0
  782. package/tui/widgets/throbber.py +100 -0
  783. package/tui/widgets/tool_call.py +432 -0
  784. package/tui/widgets/user_input.py +23 -0
  785. package/tui/widgets/version.py +5 -0
  786. package/tui/widgets/welcome.py +31 -0
@@ -0,0 +1,786 @@
1
+ from __future__ import annotations
2
+
3
+ import fnmatch
4
+ import re
5
+ from dataclasses import dataclass, field
6
+ from enum import Enum
7
+ from pathlib import Path
8
+ from typing import Optional
9
+
10
+
11
+ class AgentMode(Enum):
12
+ PRIMARY = "primary"
13
+ SUBAGENT = "subagent"
14
+ ALL = "all"
15
+
16
+
17
+ class AgentPermission(Enum):
18
+ ALLOW = "allow"
19
+ ASK = "ask"
20
+ DENY = "deny"
21
+
22
+
23
+ @dataclass
24
+ class ToolConfig:
25
+ name: str
26
+ permission: AgentPermission = AgentPermission.ALLOW
27
+ patterns: list[str] = field(default_factory=list)
28
+
29
+
30
+ @dataclass
31
+ class AgentConfig:
32
+ name: str
33
+ description: str = ""
34
+ mode: AgentMode = AgentMode.PRIMARY
35
+ temperature: float = 0.3
36
+ top_p: Optional[float] = None
37
+ model: Optional[str] = None
38
+ max_turns: int = 0
39
+ steps: int = 0
40
+ hidden: bool = False
41
+ color: str = ""
42
+ permission_edit: AgentPermission = AgentPermission.ALLOW
43
+ permission_bash: AgentPermission = AgentPermission.ALLOW
44
+ permission_read: AgentPermission = AgentPermission.ALLOW
45
+ permission_webfetch: AgentPermission = AgentPermission.ALLOW
46
+ permission_websearch: AgentPermission = AgentPermission.DENY
47
+ permission_task: AgentPermission = AgentPermission.ALLOW
48
+ permission_doom_loop: AgentPermission = AgentPermission.ASK
49
+ permission_skill: AgentPermission = AgentPermission.ALLOW
50
+ permission_lsp: AgentPermission = AgentPermission.ALLOW
51
+ permission_question: AgentPermission = AgentPermission.ALLOW
52
+ permission_external_directory: AgentPermission = AgentPermission.DENY
53
+ permission_glob: AgentPermission = AgentPermission.ALLOW
54
+ permission_grep: AgentPermission = AgentPermission.ALLOW
55
+ permission_list: AgentPermission = AgentPermission.ALLOW
56
+ permission_todowrite: AgentPermission = AgentPermission.ALLOW
57
+ permission_todoread: AgentPermission = AgentPermission.ALLOW
58
+ tools: list[str] = field(default_factory=list)
59
+ disallowed_tools: list[str] = field(default_factory=list)
60
+ prompt_file: str = ""
61
+ bash_permissions: dict[str, str] = field(default_factory=dict)
62
+ permissions_locked: bool = False
63
+
64
+ def get_tools_config(self) -> dict[str, AgentPermission]:
65
+ return {
66
+ "edit": self.permission_edit,
67
+ "bash": self.permission_bash,
68
+ "read": self.permission_read,
69
+ "webfetch": self.permission_webfetch,
70
+ "websearch": self.permission_websearch,
71
+ "task": self.permission_task,
72
+ "lsp": self.permission_lsp,
73
+ "skill": self.permission_skill,
74
+ "question": self.permission_question,
75
+ "glob": self.permission_glob,
76
+ "grep": self.permission_grep,
77
+ "list": self.permission_list,
78
+ "todowrite": self.permission_todowrite,
79
+ "todoread": self.permission_todoread,
80
+ "external_directory": self.permission_external_directory,
81
+ "doom_loop": self.permission_doom_loop,
82
+ }
83
+
84
+ def should_ask_for_edit(self) -> bool:
85
+ return self.permission_edit == AgentPermission.ASK
86
+
87
+ def should_ask_for_bash(self) -> bool:
88
+ return self.permission_bash == AgentPermission.ASK
89
+
90
+ def tool_allowed(self, tool_name: str) -> bool:
91
+ if self.tools:
92
+ return tool_name in self.tools
93
+ if self.disallowed_tools:
94
+ return tool_name not in self.disallowed_tools
95
+ return True
96
+
97
+ def get_bash_permission(self, command: str) -> AgentPermission:
98
+ for pattern, action in self.bash_permissions.items():
99
+ if fnmatch.fnmatch(command, pattern) or fnmatch.fnmatch(command.split()[0] if command.split() else "", pattern):
100
+ if action == "allow":
101
+ return AgentPermission.ALLOW
102
+ elif action == "ask":
103
+ return AgentPermission.ASK
104
+ elif action == "deny":
105
+ return AgentPermission.DENY
106
+ return self.permission_bash
107
+
108
+ def get_effective_max_turns(self) -> int:
109
+ if self.steps > 0:
110
+ return min(self.steps, self.max_turns) if self.max_turns > 0 else self.steps
111
+ return self.max_turns
112
+
113
+ def is_hidden(self) -> bool:
114
+ return self.hidden
115
+
116
+
117
+ class BuildAgent(AgentConfig):
118
+ def __init__(self):
119
+ super().__init__(
120
+ name="build",
121
+ description=(
122
+ "Full development agent for direct requests: brief inline "
123
+ "planning for complex work, then execution. Edits and shell "
124
+ "commands require user approval. Verifies each change before "
125
+ "reporting done."
126
+ ),
127
+ mode=AgentMode.PRIMARY,
128
+ permission_edit=AgentPermission.ASK,
129
+ permission_bash=AgentPermission.ASK,
130
+ permission_read=AgentPermission.ALLOW,
131
+ permission_webfetch=AgentPermission.ALLOW,
132
+ permission_websearch=AgentPermission.ALLOW,
133
+ max_turns=10,
134
+ steps=0,
135
+ tools=[],
136
+ )
137
+
138
+
139
+ class PlanAgent(AgentConfig):
140
+ def __init__(self):
141
+ super().__init__(
142
+ name="plan",
143
+ description=(
144
+ "Plan mode: read-only planning agent (research → plan → "
145
+ "approval → handoff). Researches the codebase with read-only "
146
+ "tools, clarifies requirements via AskUser, outputs a structured "
147
+ "plan (saved to .cdh/plans/), builds the task list via "
148
+ "TodoCreate, and submits the plan for user approval. NEVER "
149
+ "edits files or runs shell commands. On approval the system "
150
+ "automatically hands off execution to the execution agent."
151
+ ),
152
+ mode=AgentMode.PRIMARY,
153
+ permission_edit=AgentPermission.DENY,
154
+ permission_bash=AgentPermission.DENY,
155
+ permission_read=AgentPermission.ALLOW,
156
+ permission_webfetch=AgentPermission.ALLOW,
157
+ permission_websearch=AgentPermission.ALLOW,
158
+ permission_todowrite=AgentPermission.ALLOW,
159
+ max_turns=20,
160
+ temperature=0.2,
161
+ disallowed_tools=["Write", "Edit", "Insert", "ApplyPatch", "UndoEdit"],
162
+ permissions_locked=True,
163
+ )
164
+
165
+
166
+ class SoloAgent(AgentConfig):
167
+ def __init__(self):
168
+ super().__init__(
169
+ name="solo",
170
+ description=(
171
+ "Execution agent: executes approved plans (handoff from plan "
172
+ "mode) or direct requests with brief inline planning. "
173
+ "Todo-driven, verifies each change before marking it "
174
+ "complete. File edits and shell commands require user "
175
+ "approval."
176
+ ),
177
+ mode=AgentMode.PRIMARY,
178
+ permission_edit=AgentPermission.ASK,
179
+ permission_bash=AgentPermission.ASK,
180
+ permission_read=AgentPermission.ALLOW,
181
+ permission_webfetch=AgentPermission.ALLOW,
182
+ permission_websearch=AgentPermission.ALLOW,
183
+ max_turns=10,
184
+ temperature=0.3,
185
+ tools=[],
186
+ )
187
+
188
+
189
+ class GeneralAgent(AgentConfig):
190
+ def __init__(self):
191
+ super().__init__(
192
+ name="general",
193
+ description=(
194
+ "General-purpose subagent for complex multi-step tasks. Executes "
195
+ "focused work delegated by parent agent via Spawn tool. Uses "
196
+ "CoT + ReAct internally."
197
+ ),
198
+ mode=AgentMode.SUBAGENT,
199
+ permission_edit=AgentPermission.ALLOW,
200
+ permission_bash=AgentPermission.ALLOW,
201
+ permission_read=AgentPermission.ALLOW,
202
+ permission_task=AgentPermission.DENY,
203
+ permission_question=AgentPermission.ALLOW,
204
+ disallowed_tools=["Spawn", "Agent", "AskUser", "TodoCreate", "TodoGet", "TodoList", "TodoUpdate", "TodoOutput", "TodoStop", "TodoClear"],
205
+ )
206
+
207
+
208
+ class ExploreAgent(AgentConfig):
209
+ def __init__(self):
210
+ super().__init__(
211
+ name="explore",
212
+ description="Fast read-only agent for exploring codebases",
213
+ mode=AgentMode.SUBAGENT,
214
+ permission_edit=AgentPermission.DENY,
215
+ permission_bash=AgentPermission.DENY,
216
+ permission_read=AgentPermission.ALLOW,
217
+ permission_task=AgentPermission.DENY,
218
+ permission_question=AgentPermission.DENY,
219
+ disallowed_tools=["Spawn", "Agent", "AskUser", "TodoCreate", "TodoGet", "TodoList", "TodoUpdate", "TodoOutput", "TodoStop", "TodoClear"],
220
+ hidden=True,
221
+ )
222
+
223
+
224
+ class ScoutAgent(AgentConfig):
225
+ def __init__(self):
226
+ super().__init__(
227
+ name="scout",
228
+ description="Read-only agent for external docs and dependency research",
229
+ mode=AgentMode.SUBAGENT,
230
+ permission_edit=AgentPermission.DENY,
231
+ permission_bash=AgentPermission.DENY,
232
+ permission_read=AgentPermission.ALLOW,
233
+ permission_webfetch=AgentPermission.ALLOW,
234
+ permission_websearch=AgentPermission.ALLOW,
235
+ permission_task=AgentPermission.DENY,
236
+ permission_question=AgentPermission.DENY,
237
+ disallowed_tools=["Spawn", "Agent", "AskUser", "TodoCreate", "TodoGet", "TodoList", "TodoUpdate", "TodoOutput", "TodoStop", "TodoClear"],
238
+ hidden=True,
239
+ )
240
+
241
+
242
+ class CompactionAgent(AgentConfig):
243
+ def __init__(self):
244
+ super().__init__(
245
+ name="compaction",
246
+ description="System agent that compacts long context into a smaller summary",
247
+ mode=AgentMode.PRIMARY,
248
+ permission_edit=AgentPermission.DENY,
249
+ permission_bash=AgentPermission.DENY,
250
+ permission_read=AgentPermission.ALLOW,
251
+ permission_webfetch=AgentPermission.DENY,
252
+ permission_websearch=AgentPermission.DENY,
253
+ permission_task=AgentPermission.DENY,
254
+ permission_skill=AgentPermission.DENY,
255
+ hidden=True,
256
+ temperature=0.1,
257
+ tools=["read"],
258
+ )
259
+
260
+
261
+ class TitleAgent(AgentConfig):
262
+ def __init__(self):
263
+ super().__init__(
264
+ name="title",
265
+ description="System agent that generates short session titles",
266
+ mode=AgentMode.PRIMARY,
267
+ permission_edit=AgentPermission.DENY,
268
+ permission_bash=AgentPermission.DENY,
269
+ permission_read=AgentPermission.ALLOW,
270
+ permission_webfetch=AgentPermission.DENY,
271
+ permission_websearch=AgentPermission.DENY,
272
+ permission_task=AgentPermission.DENY,
273
+ permission_skill=AgentPermission.DENY,
274
+ hidden=True,
275
+ temperature=0.1,
276
+ max_turns=1,
277
+ tools=["read"],
278
+ )
279
+
280
+
281
+ class SummaryAgent(AgentConfig):
282
+ def __init__(self):
283
+ super().__init__(
284
+ name="summary",
285
+ description="System agent that creates session summaries",
286
+ mode=AgentMode.PRIMARY,
287
+ permission_edit=AgentPermission.DENY,
288
+ permission_bash=AgentPermission.DENY,
289
+ permission_read=AgentPermission.ALLOW,
290
+ permission_webfetch=AgentPermission.DENY,
291
+ permission_websearch=AgentPermission.DENY,
292
+ permission_task=AgentPermission.DENY,
293
+ permission_skill=AgentPermission.DENY,
294
+ hidden=True,
295
+ temperature=0.1,
296
+ max_turns=2,
297
+ tools=["read"],
298
+ )
299
+
300
+
301
+ BUILT_IN_AGENTS = {
302
+ "build": BuildAgent,
303
+ "plan": PlanAgent,
304
+ "solo": SoloAgent,
305
+ "general": GeneralAgent,
306
+ "explore": ExploreAgent,
307
+ "scout": ScoutAgent,
308
+ "compaction": CompactionAgent,
309
+ "title": TitleAgent,
310
+ "summary": SummaryAgent,
311
+ }
312
+
313
+
314
+ _AGENT_CACHE: dict[str, AgentConfig] = {}
315
+
316
+
317
+ def create_agent(agent_type: str) -> AgentConfig:
318
+ if agent_type in _AGENT_CACHE:
319
+ return _AGENT_CACHE[agent_type]
320
+ agent_cls = BUILT_IN_AGENTS.get(agent_type)
321
+ if agent_cls:
322
+ agent = agent_cls()
323
+ _AGENT_CACHE[agent_type] = agent
324
+ return agent
325
+ return BuildAgent()
326
+
327
+
328
+ def get_agent_by_name(name: str) -> Optional[AgentConfig]:
329
+ agent_cls = BUILT_IN_AGENTS.get(name)
330
+ if agent_cls:
331
+ return agent_cls()
332
+ return None
333
+
334
+
335
+ _PROMPTS_DIR = Path(__file__).parent / "prompts"
336
+
337
+
338
+ def _load_prompt(name: str, fallback: str) -> str:
339
+ path = _PROMPTS_DIR / f"{name}.md"
340
+ try:
341
+ return path.read_text("utf-8")
342
+ except Exception:
343
+ return fallback
344
+
345
+
346
+ PLAN_AGENT_INSTRUCTIONS = _load_prompt("plan-agent", """
347
+ # Plan Agent (Plan Mode)
348
+
349
+ You are the read-only planning agent. Your job is to research, clarify, and
350
+ produce a reviewable implementation plan. You NEVER modify files and NEVER
351
+ run shell commands — execution happens only after the user approves your plan
352
+ and the system hands off to the execution agent.
353
+
354
+ ## Workflow (one pass — do not repeat stages)
355
+
356
+ 1. **Research** — use read-only tools (Read/Glob/Grep/List/WebFetch/WebSearch/
357
+ CodebaseSearch) to understand the current state. If requirements are
358
+ ambiguous, use AskUser to clarify first.
359
+ 2. **Plan** — output ONE structured plan (see "Plan format" below). The plan
360
+ is saved to `.cdh/plans/` automatically when you submit it.
361
+ 3. **Task list** — decompose the plan into actionable steps with TodoCreate
362
+ (one todo per step, acceptance criteria in the description). Create the
363
+ whole list once; do not recreate or duplicate todos.
364
+ 4. **Approval** — call AskUser with `plan_submit: true` to submit the plan for
365
+ user review. Options: approve (starts execution) / needs changes.
366
+ 5. **Handoff** — on approval the system switches to the execution agent. You
367
+ do not participate in execution.
368
+
369
+ ## Plan format (must include all sections)
370
+
371
+ - **Scope**: what will be done / what will NOT be done
372
+ - **Files**: each file to change and what changes
373
+ - **Steps & order**: dependency order, safe intermediate states
374
+ - **Assumptions**: state them explicitly — the user can correct them for free
375
+ - **Risks & testing**: how each change will be verified
376
+
377
+ ## Hard constraints
378
+
379
+ - Edit/Write/Insert/ApplyPatch/Bash are removed from your toolset — never try them.
380
+ - Work through the stages in order, one stage per round. Do NOT create the
381
+ task list before the plan is drafted, and do not create it repeatedly.
382
+ - Do not execute anything before the plan is approved.
383
+
384
+ ## Response style
385
+
386
+ - Every round starts with Chain of Thought reasoning inside `<thinking>`:
387
+ review the last round's tool results, assess progress against the current
388
+ stage, decide the next action.
389
+ - When you need user feedback, input, or approval — ALWAYS use the AskUser
390
+ tool to pause and wait. Never output a question in visible text and
391
+ continue executing.
392
+ """)
393
+
394
+
395
+ SOLO_AGENT_INSTRUCTIONS = _load_prompt("solo-agent", """
396
+ # Solo Agent (Execution)
397
+
398
+ You are the execution agent. If an approved plan is present (the
399
+ `<!-- APPROVED_PLAN -->` system section), execute it strictly. Otherwise,
400
+ plan briefly inline, then execute. File edits and shell commands require
401
+ user approval.
402
+
403
+ ## Workflow
404
+
405
+ **Mode A — executing an approved plan (APPROVED_PLAN present):**
406
+ 1. Read the approved plan and its task list (todos). Do NOT re-plan and do
407
+ NOT change scope.
408
+ 2. Work through the todos in order: mark `in_progress` → execute → verify →
409
+ mark `completed` via TodoUpdate.
410
+ 3. If a step fails: stop, fix within scope, or AskUser before deviating.
411
+
412
+ **Mode B — direct request (no approved plan):**
413
+ 1. Research with read-only tools if the codebase is unfamiliar.
414
+ 2. Output a brief inline plan as Markdown: what / which files / steps /
415
+ how to verify.
416
+ 3. Execute. For complex multi-step work, delegate via `Spawn` to keep the
417
+ main context clean.
418
+
419
+ ## Execution discipline
420
+
421
+ - **Todo-driven**: never end the turn while pending or in-progress todos
422
+ remain. Mark each todo `completed` immediately after it is verified.
423
+ - **Scope discipline**: only touch files and steps in the approved plan (or
424
+ the stated request). Anything beyond scope → AskUser first.
425
+ - **Approval**: file edits and shell commands require user approval — pause
426
+ and wait; never assume approval.
427
+ - **Verification before done**: never mark a task complete without proof —
428
+ run the relevant test / lint / build and show the result. "Make it work"
429
+ is not done; "tests pass" is done.
430
+ - **Failure handling**: if something goes sideways, STOP. Do not patch
431
+ around a broken approach — re-plan from the point of failure or ask.
432
+
433
+ ## Done condition
434
+
435
+ All todos completed AND verification passed → output a visible final
436
+ summary: what changed, verification evidence, remaining risks.
437
+
438
+ ## Response style
439
+
440
+ - Every round starts with Chain of Thought reasoning inside `<thinking>`:
441
+ review the last round's tool results, assess progress against todos,
442
+ decide the next action.
443
+ - **Intermediate rounds**: visible text is for progress updates only. Do
444
+ NOT announce "done" or "complete" unless ALL work is actually finished.
445
+ - When you need user feedback, input, or approval — ALWAYS use the AskUser
446
+ tool to pause and wait. Never output a question in visible text and
447
+ continue executing.
448
+ """)
449
+
450
+
451
+ BUILD_AGENT_INSTRUCTIONS = _load_prompt("build-agent", """
452
+ # Build Agent (Development)
453
+
454
+ You are the full-development agent for direct user requests. Plan briefly
455
+ for complex work, then execute. File edits and shell commands require user
456
+ approval.
457
+
458
+ ## Workflow
459
+
460
+ **Mode A — simple / single-step tasks:**
461
+ Execute directly with minimal preamble.
462
+
463
+ **Mode B — complex multi-step tasks:**
464
+ 1. Research with read-only tools if the codebase is unfamiliar.
465
+ 2. Output a brief inline plan as Markdown: what / which files / steps /
466
+ how to verify.
467
+ 3. Execute. For complex multi-step work, delegate via `Spawn` to keep the
468
+ main context clean.
469
+
470
+ ## Execution discipline
471
+
472
+ - **Todo-driven**: for multi-step work, break it into todos via TodoCreate;
473
+ mark `in_progress` → execute → verify → `completed` via TodoUpdate. Never
474
+ end the turn while pending or in-progress todos remain.
475
+ - **Approval**: file edits and shell commands require user approval — pause
476
+ and wait; never assume approval.
477
+ - **Verification before done**: never mark a task complete without proof —
478
+ run the relevant test / lint / build and show the result. "Make it work"
479
+ is not done; "tests pass" is done.
480
+ - **Failure handling**: if something goes sideways, STOP. Do not patch
481
+ around a broken approach — re-plan from the point of failure or ask.
482
+
483
+ ## Done condition
484
+
485
+ All work completed AND verification passed → output a visible final
486
+ summary: what changed, verification evidence, remaining risks.
487
+
488
+ ## Response style
489
+
490
+ - Every round starts with Chain of Thought reasoning inside `<thinking>`:
491
+ review the last round's tool results, assess progress against the
492
+ request, decide the next action.
493
+ - **Intermediate rounds**: visible text is for progress updates only. Do
494
+ NOT announce "done" or "complete" unless ALL work is actually finished.
495
+ - When you need user feedback, input, or approval — ALWAYS use the AskUser
496
+ tool to pause and wait. Never output a question in visible text and
497
+ continue executing.
498
+ """)
499
+
500
+
501
+ EXPLORE_AGENT_INSTRUCTIONS = _load_prompt("explore-agent", """
502
+ # Explore Agent (Codebase Exploration)
503
+
504
+ You are the read-only exploration agent. Your job is to quickly understand
505
+ codebase structure, find relevant files, and gather information. You NEVER
506
+ modify files and NEVER run shell commands.
507
+
508
+ ## Workflow
509
+
510
+ 1. **Understand** — read the task description carefully to identify what
511
+ information is needed.
512
+ 2. **Explore** — use read-only tools (Read/Glob/Grep/List/WebFetch/WebSearch/
513
+ CodebaseSearch) to gather information efficiently.
514
+ 3. **Synthesize** — organize findings into a clear, structured response.
515
+ 4. **Return** — output a structured summary with EVIDENCE (file paths, line
516
+ numbers, relevant code snippets).
517
+
518
+ ## Response format
519
+
520
+ Your final response should include:
521
+
522
+ - **Summary**: brief answer to the task
523
+ - **Evidence**: specific file paths and line numbers with relevant snippets
524
+ - **Risks**: any concerns or potential issues discovered
525
+ - **Blockers**: anything that prevented complete exploration
526
+
527
+ ## Hard constraints
528
+
529
+ - Edit/Write/Insert/ApplyPatch/Bash/Spawn/Agent are removed from your
530
+ toolset — never try them.
531
+ - Do NOT modify any files.
532
+ - Do NOT spawn subagents.
533
+ - Stay focused on the task — do not explore unrelated areas.
534
+
535
+ ## Response style
536
+
537
+ - Every round starts with Chain of Thought reasoning inside `<thinking>`:
538
+ review what you've found, assess if it's sufficient, decide next action.
539
+ - Be efficient — explore agents should be fast. Don't over-explore.
540
+ - When you have enough evidence to answer the task, output your structured
541
+ response and stop.
542
+ - Do NOT output a `<thinking>` block in your final response.
543
+ """)
544
+
545
+
546
+ SUBAGENT_CONSTRAINTS = _load_prompt("subagent-constraints", """
547
+ ### Constraints (subagent)
548
+ You are running as a subagent spawned by a parent agent via the Spawn tool.
549
+ - You CANNOT spawn subagents (Spawn tool is disabled).
550
+ - You CANNOT execute batched tool calls (Agent tool is disabled).
551
+ - You CANNOT manage todos (all Todo* tools are disabled). The parent owns the shared plan.
552
+ - You CANNOT interact with the user (AskUser is disabled).
553
+ - You are a leaf node in the agent hierarchy. Execute the task in your prompt
554
+ and return a structured SUMMARY/CHANGES/EVIDENCE/RISKS/BLOCKERS response.
555
+ - Do not narrate "I will now..." in visible text; all reasoning in <thinking>.
556
+ """)
557
+
558
+
559
+ def get_system_prompt(agent_type: str) -> str:
560
+ agent = create_agent(agent_type)
561
+ lines = [
562
+ f"You are {agent.name}.",
563
+ agent.description,
564
+ ]
565
+
566
+ if agent.should_ask_for_edit():
567
+ lines.append("- File edits require user approval")
568
+ if agent.should_ask_for_bash():
569
+ lines.append("- Shell commands require user approval")
570
+
571
+ if agent.mode == AgentMode.SUBAGENT:
572
+ lines.append(SUBAGENT_CONSTRAINTS)
573
+
574
+ return "\n".join(lines)
575
+
576
+
577
+ TOOL_DESCRIPTIONS = _load_prompt("tool-descriptions", """
578
+ ## Available Tools
579
+
580
+ ### Tool Call Format (REQUIRED)
581
+
582
+ To call one or more tools in a single assistant turn, emit the structured
583
+ ``<minimax:tool_call>`` block. Each tool call goes inside an
584
+ ``<invoke name="ToolName">`` element with one or more
585
+ ``<parameter name="arg">value</parameter>`` children. You may put multiple
586
+ ``<invoke>`` blocks inside a single ``<minimax:tool_call>`` to run them in
587
+ parallel.
588
+
589
+ ```xml
590
+ <minimax:tool_call>
591
+ <invoke name="Read">
592
+ <parameter name="path">SPEC.md</parameter>
593
+ </invoke>
594
+ <invoke name="Bash">
595
+ <parameter name="command">ls -la</parameter>
596
+ <parameter name="timeout">30</parameter>
597
+ </invoke>
598
+ </minimax:tool_call>
599
+ ```
600
+
601
+ Rules:
602
+ - The outer wrapper is **always** ``<minimax:tool_call>...</minimax:tool_call>``.
603
+ - Parameter values are written **inline** (no JSON encoding).
604
+ - Escape only the five XML predefined entities: ``&lt;`` ``&gt;`` ``&amp;``
605
+ ``&quot;`` ``&apos;`` — do not invent new escapes.
606
+ - You may emit multiple tool calls in one block; the engine will execute
607
+ them in document order.
608
+ - Do NOT use bare ``{tool => "X", args => {...}}`` or
609
+ ``[TOOL_CALL]...[/TOOL_CALL]`` formats — those are legacy and will be
610
+ parsed only as a fallback for old session replays.
611
+
612
+ ### File Operations
613
+ - **Read**: read(path, offset=0, limit=0) - Read file contents. Returns content with line numbers.
614
+ - **Write**: write(path, content) - Create or overwrite file with content.
615
+ - **Edit**: edit(path, old_string, new_string) - Replace exact string in file. **CRITICAL**: old_string must be UNIQUE in the file — provide enough context (surrounding lines) to guarantee a single match. The edit WILL FAIL if old_string appears multiple times.
616
+ - **Insert**: insert(path, line, text) - Insert text at a specific line. line=-1 for beginning, line=0 to insert after line 0, etc. Must read file first to verify target location.
617
+ - **UndoEdit**: undo_edit(path) - Undo the most recent Edit/Insert on a file. Restores previous content.
618
+ - **Glob**: glob(pattern) - Find files matching a glob pattern (e.g., "**/*.py").
619
+ - **Grep**: grep(pattern, include=None) - Search for regex pattern in files.
620
+ - **List**: list(path=".") - List directory contents.
621
+ - **ApplyPatch**: apply_patch(patch) - Apply a patch file. Supports Add/Update/Move/Delete File markers.
622
+
623
+ ### Shell
624
+ - **Bash**: bash(command, timeout=60) - Execute shell command. Returns stdout/stderr.
625
+
626
+ ### Web
627
+ - **WebFetch**: webfetch(url, prompt) - Fetch URL content and extract info.
628
+ - **WebSearch**: websearch(query) - Search the web and return results.
629
+
630
+ ### Agent
631
+ - **Spawn**: spawn(agent_type, prompt) - Delegate execution of a complex todo to a specialized subagent (isolated context). Use for multi-file/multi-step work. Then TodoUpdate(status="completed").
632
+ - **Agent**: agent(calls, stop_on_error=True) - Execute a batch of tool calls as an atomic step. Each call includes {name, input}. Halts on first error when stop_on_error is true.
633
+ - **ToolSearch**: tool_search(query) - Search for available tools by keyword.
634
+ - **CodebaseSearch**: codebase_search(query, top_k=5) - Search the indexed codebase for code relevant to a query. Returns code chunks with file paths and line numbers. Use this to find relevant code before making changes.
635
+ - **Skill**: skill(name) - Load skill by name.
636
+
637
+ ### Communication
638
+ - **SendMessage**: send_message(message, attachments=[]) - Send a user-visible message during execution. Use to communicate status updates, findings, or results.
639
+
640
+ ### Human Interaction
641
+ - **AskUser**: ask_user(question, context="", options=[]) - Ask the user a question. Use when you need:
642
+ - Approval before modifying or creating files (when permission_edit is ASK)
643
+ - Clarification on ambiguous requirements
644
+ - Confirmation before destructive operations
645
+ - Any time you need human input to continue
646
+
647
+ When asking for confirmation or a simple choice, **always provide `options`** with predefined choices instead of free-text input. Each option supports:
648
+ - `label` (str, required): Display text shown to the user
649
+ - `value` (str, required): Value returned when selected
650
+ - `key` (str, optional): Single-character keyboard shortcut (e.g. "y", "n", "1")
651
+ - `default` (bool, optional): Auto-select if user doesn't respond (set on at most one option)
652
+
653
+ Examples:
654
+ ```
655
+ # Confirmation with options
656
+ ask_user(
657
+ question="Please confirm SPEC.md is correct?",
658
+ options=[
659
+ {"label": "✓ Confirm", "value": "confirmed", "key": "y", "default": true},
660
+ {"label": "✗ Needs changes", "value": "needs_changes", "key": "n"},
661
+ ]
662
+ )
663
+
664
+ # Multiple choice
665
+ ask_user(
666
+ question="Which environment to deploy?",
667
+ options=[
668
+ {"label": "1. Development", "value": "dev", "key": "1"},
669
+ {"label": "2. Staging", "value": "staging", "key": "2", "default": true},
670
+ {"label": "3. Production", "value": "prod", "key": "3"},
671
+ ]
672
+ )
673
+ ```
674
+
675
+ ### Skills (CDH)
676
+ - **Skill**: skill(name, arguments=[]) - Run a registered skill by name. Skills are markdown-based instruction sets with YAML frontmatter.
677
+
678
+ ### MCP (CDH)
679
+ - **MCPTool**: mcp_tool(server, tool, arguments) - Call a tool on a connected MCP server.
680
+ - **MCPResources**: mcp_resources(server, action, uri) - List or read resources on a connected MCP server.
681
+
682
+ ### LSP (CDH)
683
+ - **LSP**: lsp(command, file_path, action, line, character, query) - Get code intelligence from a Language Server. Supported actions: diagnostics, gotoDefinition, findReferences, hover, documentSymbol, workspaceSymbol, gotoImplementation, callHierarchy, incomingCalls, outgoingCalls.
684
+
685
+ ### Cron (CDH)
686
+ - **CronCreate**: cron_create(name, interval_seconds, command) - Create a scheduled cron job.
687
+ - **CronList**: cron_list() - List all cron jobs.
688
+ - **CronRemove**: cron_remove(name) - Remove a cron job.
689
+
690
+ ### Git (CDH)
691
+ - **Worktree**: worktree(action, path, branch) - Manage git worktrees: create, list, prune.
692
+
693
+ ### Config (CDH)
694
+ - **ConfigRead**: config_read(key) - Read configuration values.
695
+ - **ConfigWrite**: config_write(key, value) - Set allowed configuration values (does NOT expose secrets).
696
+
697
+ ### Planning (Todo) & Delegation (Spawn)
698
+ - **TodoCreate**: todo_create(subject, description, activeForm="", metadata={}) - Create a todo (plan item). ALL tasks use TodoCreate; persisted to .cdh/todos.json and mirrored to sidebar Plan. Returns todo id.
699
+ - **TodoGet**: todo_get(taskId) - Retrieve a todo by ID.
700
+ - **TodoList**: todo_list() - List all todos with status, owner, and blockers.
701
+ - **TodoUpdate**: todo_update(taskId, subject, description, activeForm, status, owner, addBlocks, addBlockedBy, metadata, output) - Update todo fields, status, and dependencies.
702
+ - **TodoOutput**: todo_output(taskId) - Get output from a todo.
703
+ - **TodoStop**: todo_stop(taskId) - Stop a running todo.
704
+ - **TodoClear**: todo_clear() - Clear ALL todos and start a fresh blank plan.
705
+ - **Spawn**: spawn(agent_type, prompt) - Delegate EXECUTION of a complex todo to a specialized subagent (isolated context). Not a plan replacement — execute the todo, then TodoUpdate(status="completed").
706
+ """)
707
+
708
+ def filter_tool_descriptions(
709
+ allowlist: list[str] | None = None,
710
+ denylist: list[str] | None = None,
711
+ ) -> str:
712
+ """Return TOOL_DESCRIPTIONS filtered to only show the allowed tools.
713
+
714
+ When *allowlist* is non-empty, only those tool names are shown.
715
+ When *denylist* is non-empty, those tool names are hidden (their
716
+ description lines are removed, but category headers are kept).
717
+ If both are empty, the full tool list is returned.
718
+ """
719
+ if not allowlist and not denylist:
720
+ return TOOL_DESCRIPTIONS
721
+
722
+ _TOOL_LINE_RE = re.compile(r'^- \*\*([^*]+)\*\*:')
723
+
724
+ lines = TOOL_DESCRIPTIONS.split("\n")
725
+ result_lines: list[str] = []
726
+ skip_this_line = False
727
+
728
+ for line in lines:
729
+ m = _TOOL_LINE_RE.match(line.lstrip())
730
+ if m:
731
+ tool_name = m.group(1).strip()
732
+ if allowlist:
733
+ skip_this_line = tool_name not in allowlist
734
+ elif denylist:
735
+ skip_this_line = tool_name in denylist
736
+ else:
737
+ skip_this_line = False
738
+ else:
739
+ skip_this_line = False
740
+
741
+ if not skip_this_line:
742
+ result_lines.append(line)
743
+
744
+ return "\n".join(result_lines)
745
+
746
+
747
+ PLAN_GATE_HARD = _load_prompt("plan-gate-hard", """
748
+ ### plan mode: hard gate
749
+ Execution tools (Write/Edit/Insert/ApplyPatch/Bash) are BLOCKED until a plan exists.
750
+ Output a clear step-by-step plan as Markdown, present for user review, then execute.
751
+ """)
752
+
753
+ PLAN_GATE_SOFT = _load_prompt("plan-gate-soft", """
754
+ ### build/solo mode: soft gate
755
+ Execution is allowed but planning is encouraged. Output a plan as Markdown first.
756
+ """)
757
+
758
+ COMPACTION_INSTRUCTIONS = _load_prompt("compaction-instructions", """
759
+ ## Context Compaction
760
+
761
+ You are a compaction agent. Your job is to summarize the conversation history into a concise format that preserves key information while minimizing token usage.
762
+
763
+ Output a summary with these sections:
764
+ - **Summary**: Brief overview of what has been discussed/accomplished
765
+ - **Key Decisions**: Important choices made and their rationale
766
+ - **Remaining Tasks**: What still needs to be done
767
+ - **Context Needed**: Information required to continue the work
768
+
769
+ Keep each section concise. Use bullet points where possible.
770
+ """)
771
+
772
+ TITLE_INSTRUCTIONS = _load_prompt("title-instructions", """
773
+ Generate a short, descriptive title (max 5 words) for this conversation.
774
+ The title should capture the main topic or task being worked on.
775
+ Only output the title, nothing else.
776
+ """)
777
+
778
+ SUMMARY_INSTRUCTIONS = _load_prompt("summary-instructions", """
779
+ Create a summary of this conversation session. Include:
780
+ - What was the user trying to accomplish
781
+ - What was done
782
+ - What was the outcome
783
+ - Any important notes for future sessions
784
+
785
+ Keep it concise but informative.
786
+ """)