dfcode 1.0.0 → 1.0.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 (344) hide show
  1. package/bin/dfcode +0 -0
  2. package/package.json +24 -101
  3. package/LICENSE +0 -21
  4. package/packages/dfcode/README.md +0 -15
  5. package/packages/dfcode/bin/dfcode +0 -84
  6. package/packages/dfcode/package.json +0 -115
  7. package/packages/dfcode/src/acp/README.md +0 -164
  8. package/packages/dfcode/src/acp/agent.ts +0 -1437
  9. package/packages/dfcode/src/acp/session.ts +0 -105
  10. package/packages/dfcode/src/acp/types.ts +0 -22
  11. package/packages/dfcode/src/agent/agent.ts +0 -332
  12. package/packages/dfcode/src/agent/generate.txt +0 -75
  13. package/packages/dfcode/src/agent/prompt/compaction.txt +0 -12
  14. package/packages/dfcode/src/agent/prompt/explore.txt +0 -18
  15. package/packages/dfcode/src/agent/prompt/summary.txt +0 -11
  16. package/packages/dfcode/src/agent/prompt/title.txt +0 -44
  17. package/packages/dfcode/src/auth/index.ts +0 -73
  18. package/packages/dfcode/src/bun/index.ts +0 -134
  19. package/packages/dfcode/src/bus/bus-event.ts +0 -43
  20. package/packages/dfcode/src/bus/global.ts +0 -10
  21. package/packages/dfcode/src/bus/index.ts +0 -105
  22. package/packages/dfcode/src/cli/bootstrap.ts +0 -17
  23. package/packages/dfcode/src/cli/cmd/acp.ts +0 -69
  24. package/packages/dfcode/src/cli/cmd/agent.ts +0 -257
  25. package/packages/dfcode/src/cli/cmd/auth.ts +0 -400
  26. package/packages/dfcode/src/cli/cmd/cmd.ts +0 -7
  27. package/packages/dfcode/src/cli/cmd/debug/agent.ts +0 -166
  28. package/packages/dfcode/src/cli/cmd/debug/config.ts +0 -16
  29. package/packages/dfcode/src/cli/cmd/debug/file.ts +0 -97
  30. package/packages/dfcode/src/cli/cmd/debug/index.ts +0 -48
  31. package/packages/dfcode/src/cli/cmd/debug/lsp.ts +0 -52
  32. package/packages/dfcode/src/cli/cmd/debug/ripgrep.ts +0 -87
  33. package/packages/dfcode/src/cli/cmd/debug/scrap.ts +0 -16
  34. package/packages/dfcode/src/cli/cmd/debug/skill.ts +0 -16
  35. package/packages/dfcode/src/cli/cmd/debug/snapshot.ts +0 -52
  36. package/packages/dfcode/src/cli/cmd/export.ts +0 -88
  37. package/packages/dfcode/src/cli/cmd/generate.ts +0 -38
  38. package/packages/dfcode/src/cli/cmd/github.ts +0 -1548
  39. package/packages/dfcode/src/cli/cmd/import.ts +0 -98
  40. package/packages/dfcode/src/cli/cmd/mcp.ts +0 -755
  41. package/packages/dfcode/src/cli/cmd/models.ts +0 -77
  42. package/packages/dfcode/src/cli/cmd/pr.ts +0 -112
  43. package/packages/dfcode/src/cli/cmd/run.ts +0 -395
  44. package/packages/dfcode/src/cli/cmd/serve.ts +0 -20
  45. package/packages/dfcode/src/cli/cmd/session.ts +0 -135
  46. package/packages/dfcode/src/cli/cmd/stats.ts +0 -402
  47. package/packages/dfcode/src/cli/cmd/tui/app.tsx +0 -750
  48. package/packages/dfcode/src/cli/cmd/tui/attach.ts +0 -39
  49. package/packages/dfcode/src/cli/cmd/tui/component/border.tsx +0 -21
  50. package/packages/dfcode/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  51. package/packages/dfcode/src/cli/cmd/tui/component/dialog-command.tsx +0 -148
  52. package/packages/dfcode/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  53. package/packages/dfcode/src/cli/cmd/tui/component/dialog-model.tsx +0 -234
  54. package/packages/dfcode/src/cli/cmd/tui/component/dialog-provider.tsx +0 -256
  55. package/packages/dfcode/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -114
  56. package/packages/dfcode/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  57. package/packages/dfcode/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  58. package/packages/dfcode/src/cli/cmd/tui/component/dialog-status.tsx +0 -164
  59. package/packages/dfcode/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  60. package/packages/dfcode/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  61. package/packages/dfcode/src/cli/cmd/tui/component/logo.tsx +0 -88
  62. package/packages/dfcode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -653
  63. package/packages/dfcode/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -89
  64. package/packages/dfcode/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
  65. package/packages/dfcode/src/cli/cmd/tui/component/prompt/index.tsx +0 -1102
  66. package/packages/dfcode/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  67. package/packages/dfcode/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  68. package/packages/dfcode/src/cli/cmd/tui/component/tips.tsx +0 -153
  69. package/packages/dfcode/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  70. package/packages/dfcode/src/cli/cmd/tui/context/args.tsx +0 -14
  71. package/packages/dfcode/src/cli/cmd/tui/context/directory.ts +0 -13
  72. package/packages/dfcode/src/cli/cmd/tui/context/exit.tsx +0 -23
  73. package/packages/dfcode/src/cli/cmd/tui/context/helper.tsx +0 -25
  74. package/packages/dfcode/src/cli/cmd/tui/context/keybind.tsx +0 -101
  75. package/packages/dfcode/src/cli/cmd/tui/context/kv.tsx +0 -52
  76. package/packages/dfcode/src/cli/cmd/tui/context/local.tsx +0 -402
  77. package/packages/dfcode/src/cli/cmd/tui/context/prompt.tsx +0 -18
  78. package/packages/dfcode/src/cli/cmd/tui/context/route.tsx +0 -46
  79. package/packages/dfcode/src/cli/cmd/tui/context/sdk.tsx +0 -94
  80. package/packages/dfcode/src/cli/cmd/tui/context/sync.tsx +0 -445
  81. package/packages/dfcode/src/cli/cmd/tui/context/theme/aura.json +0 -69
  82. package/packages/dfcode/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  83. package/packages/dfcode/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  84. package/packages/dfcode/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
  85. package/packages/dfcode/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
  86. package/packages/dfcode/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  87. package/packages/dfcode/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
  88. package/packages/dfcode/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  89. package/packages/dfcode/src/cli/cmd/tui/context/theme/dfcode.json +0 -245
  90. package/packages/dfcode/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  91. package/packages/dfcode/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  92. package/packages/dfcode/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  93. package/packages/dfcode/src/cli/cmd/tui/context/theme/github.json +0 -233
  94. package/packages/dfcode/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
  95. package/packages/dfcode/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  96. package/packages/dfcode/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
  97. package/packages/dfcode/src/cli/cmd/tui/context/theme/material.json +0 -235
  98. package/packages/dfcode/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  99. package/packages/dfcode/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  100. package/packages/dfcode/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  101. package/packages/dfcode/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  102. package/packages/dfcode/src/cli/cmd/tui/context/theme/nord.json +0 -223
  103. package/packages/dfcode/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  104. package/packages/dfcode/src/cli/cmd/tui/context/theme/orng.json +0 -249
  105. package/packages/dfcode/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  106. package/packages/dfcode/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  107. package/packages/dfcode/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  108. package/packages/dfcode/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  109. package/packages/dfcode/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  110. package/packages/dfcode/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  111. package/packages/dfcode/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  112. package/packages/dfcode/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  113. package/packages/dfcode/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  114. package/packages/dfcode/src/cli/cmd/tui/context/theme.tsx +0 -1152
  115. package/packages/dfcode/src/cli/cmd/tui/event.ts +0 -48
  116. package/packages/dfcode/src/cli/cmd/tui/routes/home.tsx +0 -140
  117. package/packages/dfcode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -64
  118. package/packages/dfcode/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -109
  119. package/packages/dfcode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
  120. package/packages/dfcode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  121. package/packages/dfcode/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
  122. package/packages/dfcode/src/cli/cmd/tui/routes/session/header.tsx +0 -142
  123. package/packages/dfcode/src/cli/cmd/tui/routes/session/index.tsx +0 -2050
  124. package/packages/dfcode/src/cli/cmd/tui/routes/session/permission.tsx +0 -508
  125. package/packages/dfcode/src/cli/cmd/tui/routes/session/question.tsx +0 -453
  126. package/packages/dfcode/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -313
  127. package/packages/dfcode/src/cli/cmd/tui/thread.ts +0 -165
  128. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -57
  129. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -83
  130. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -204
  131. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-help.tsx +0 -43
  132. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -77
  133. package/packages/dfcode/src/cli/cmd/tui/ui/dialog-select.tsx +0 -384
  134. package/packages/dfcode/src/cli/cmd/tui/ui/dialog.tsx +0 -167
  135. package/packages/dfcode/src/cli/cmd/tui/ui/link.tsx +0 -28
  136. package/packages/dfcode/src/cli/cmd/tui/ui/spinner.ts +0 -368
  137. package/packages/dfcode/src/cli/cmd/tui/ui/toast.tsx +0 -100
  138. package/packages/dfcode/src/cli/cmd/tui/util/clipboard.ts +0 -160
  139. package/packages/dfcode/src/cli/cmd/tui/util/editor.ts +0 -32
  140. package/packages/dfcode/src/cli/cmd/tui/util/signal.ts +0 -7
  141. package/packages/dfcode/src/cli/cmd/tui/util/terminal.ts +0 -114
  142. package/packages/dfcode/src/cli/cmd/tui/util/transcript.ts +0 -98
  143. package/packages/dfcode/src/cli/cmd/tui/worker.ts +0 -152
  144. package/packages/dfcode/src/cli/cmd/uninstall.ts +0 -357
  145. package/packages/dfcode/src/cli/cmd/upgrade.ts +0 -73
  146. package/packages/dfcode/src/cli/cmd/web.ts +0 -81
  147. package/packages/dfcode/src/cli/error.ts +0 -57
  148. package/packages/dfcode/src/cli/network.ts +0 -53
  149. package/packages/dfcode/src/cli/ui.ts +0 -83
  150. package/packages/dfcode/src/cli/upgrade.ts +0 -25
  151. package/packages/dfcode/src/command/index.ts +0 -131
  152. package/packages/dfcode/src/command/template/initialize.txt +0 -10
  153. package/packages/dfcode/src/command/template/review.txt +0 -99
  154. package/packages/dfcode/src/config/config.ts +0 -1367
  155. package/packages/dfcode/src/config/markdown.ts +0 -93
  156. package/packages/dfcode/src/env/index.ts +0 -26
  157. package/packages/dfcode/src/file/ignore.ts +0 -83
  158. package/packages/dfcode/src/file/index.ts +0 -411
  159. package/packages/dfcode/src/file/ripgrep.ts +0 -407
  160. package/packages/dfcode/src/file/time.ts +0 -69
  161. package/packages/dfcode/src/file/watcher.ts +0 -127
  162. package/packages/dfcode/src/flag/flag.ts +0 -79
  163. package/packages/dfcode/src/format/formatter.ts +0 -357
  164. package/packages/dfcode/src/format/index.ts +0 -137
  165. package/packages/dfcode/src/global/index.ts +0 -55
  166. package/packages/dfcode/src/id/id.ts +0 -83
  167. package/packages/dfcode/src/ide/index.ts +0 -76
  168. package/packages/dfcode/src/index.ts +0 -159
  169. package/packages/dfcode/src/installation/index.ts +0 -246
  170. package/packages/dfcode/src/lsp/client.ts +0 -252
  171. package/packages/dfcode/src/lsp/index.ts +0 -485
  172. package/packages/dfcode/src/lsp/language.ts +0 -119
  173. package/packages/dfcode/src/lsp/server.ts +0 -2046
  174. package/packages/dfcode/src/mcp/auth.ts +0 -135
  175. package/packages/dfcode/src/mcp/index.ts +0 -934
  176. package/packages/dfcode/src/mcp/oauth-callback.ts +0 -200
  177. package/packages/dfcode/src/mcp/oauth-provider.ts +0 -154
  178. package/packages/dfcode/src/patch/index.ts +0 -680
  179. package/packages/dfcode/src/permission/arity.ts +0 -163
  180. package/packages/dfcode/src/permission/index.ts +0 -210
  181. package/packages/dfcode/src/permission/next.ts +0 -280
  182. package/packages/dfcode/src/plugin/codex.ts +0 -506
  183. package/packages/dfcode/src/plugin/copilot.ts +0 -283
  184. package/packages/dfcode/src/plugin/index.ts +0 -135
  185. package/packages/dfcode/src/project/bootstrap.ts +0 -35
  186. package/packages/dfcode/src/project/instance.ts +0 -91
  187. package/packages/dfcode/src/project/project.ts +0 -371
  188. package/packages/dfcode/src/project/state.ts +0 -66
  189. package/packages/dfcode/src/project/vcs.ts +0 -76
  190. package/packages/dfcode/src/provider/auth.ts +0 -147
  191. package/packages/dfcode/src/provider/models.ts +0 -136
  192. package/packages/dfcode/src/provider/provider.ts +0 -1219
  193. package/packages/dfcode/src/provider/sdk/openai-compatible/src/README.md +0 -5
  194. package/packages/dfcode/src/provider/sdk/openai-compatible/src/index.ts +0 -2
  195. package/packages/dfcode/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +0 -100
  196. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +0 -303
  197. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +0 -22
  198. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +0 -18
  199. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +0 -22
  200. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +0 -207
  201. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +0 -1732
  202. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +0 -177
  203. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +0 -1
  204. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +0 -88
  205. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +0 -128
  206. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +0 -115
  207. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +0 -65
  208. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +0 -104
  209. package/packages/dfcode/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +0 -103
  210. package/packages/dfcode/src/provider/transform.ts +0 -741
  211. package/packages/dfcode/src/pty/index.ts +0 -241
  212. package/packages/dfcode/src/question/index.ts +0 -171
  213. package/packages/dfcode/src/scheduler/index.ts +0 -61
  214. package/packages/dfcode/src/server/error.ts +0 -36
  215. package/packages/dfcode/src/server/event.ts +0 -7
  216. package/packages/dfcode/src/server/mdns.ts +0 -59
  217. package/packages/dfcode/src/server/routes/config.ts +0 -92
  218. package/packages/dfcode/src/server/routes/experimental.ts +0 -208
  219. package/packages/dfcode/src/server/routes/file.ts +0 -197
  220. package/packages/dfcode/src/server/routes/global.ts +0 -135
  221. package/packages/dfcode/src/server/routes/mcp.ts +0 -225
  222. package/packages/dfcode/src/server/routes/permission.ts +0 -68
  223. package/packages/dfcode/src/server/routes/project.ts +0 -82
  224. package/packages/dfcode/src/server/routes/provider.ts +0 -165
  225. package/packages/dfcode/src/server/routes/pty.ts +0 -169
  226. package/packages/dfcode/src/server/routes/question.ts +0 -98
  227. package/packages/dfcode/src/server/routes/session.ts +0 -939
  228. package/packages/dfcode/src/server/routes/tui.ts +0 -379
  229. package/packages/dfcode/src/server/server.ts +0 -574
  230. package/packages/dfcode/src/session/compaction.ts +0 -225
  231. package/packages/dfcode/src/session/index.ts +0 -498
  232. package/packages/dfcode/src/session/llm.ts +0 -288
  233. package/packages/dfcode/src/session/message-v2.ts +0 -740
  234. package/packages/dfcode/src/session/message.ts +0 -189
  235. package/packages/dfcode/src/session/processor.ts +0 -406
  236. package/packages/dfcode/src/session/prompt/anthropic-20250930.txt +0 -164
  237. package/packages/dfcode/src/session/prompt/anthropic.txt +0 -102
  238. package/packages/dfcode/src/session/prompt/anthropic_spoof.txt +0 -1
  239. package/packages/dfcode/src/session/prompt/beast.txt +0 -147
  240. package/packages/dfcode/src/session/prompt/build-switch.txt +0 -5
  241. package/packages/dfcode/src/session/prompt/codex_header.txt +0 -79
  242. package/packages/dfcode/src/session/prompt/copilot-gpt-5.txt +0 -143
  243. package/packages/dfcode/src/session/prompt/gemini.txt +0 -155
  244. package/packages/dfcode/src/session/prompt/max-steps.txt +0 -16
  245. package/packages/dfcode/src/session/prompt/plan-reminder-anthropic.txt +0 -67
  246. package/packages/dfcode/src/session/prompt/plan.txt +0 -26
  247. package/packages/dfcode/src/session/prompt/qwen.txt +0 -107
  248. package/packages/dfcode/src/session/prompt.ts +0 -1815
  249. package/packages/dfcode/src/session/retry.ts +0 -90
  250. package/packages/dfcode/src/session/revert.ts +0 -121
  251. package/packages/dfcode/src/session/status.ts +0 -76
  252. package/packages/dfcode/src/session/summary.ts +0 -150
  253. package/packages/dfcode/src/session/system.ts +0 -157
  254. package/packages/dfcode/src/session/todo.ts +0 -37
  255. package/packages/dfcode/src/share/share-next.ts +0 -200
  256. package/packages/dfcode/src/share/share.ts +0 -92
  257. package/packages/dfcode/src/shell/shell.ts +0 -67
  258. package/packages/dfcode/src/skill/index.ts +0 -1
  259. package/packages/dfcode/src/skill/skill.ts +0 -135
  260. package/packages/dfcode/src/snapshot/index.ts +0 -236
  261. package/packages/dfcode/src/storage/storage.ts +0 -227
  262. package/packages/dfcode/src/tool/apply_patch.ts +0 -280
  263. package/packages/dfcode/src/tool/apply_patch.txt +0 -33
  264. package/packages/dfcode/src/tool/bash.ts +0 -258
  265. package/packages/dfcode/src/tool/bash.txt +0 -115
  266. package/packages/dfcode/src/tool/batch.ts +0 -175
  267. package/packages/dfcode/src/tool/batch.txt +0 -24
  268. package/packages/dfcode/src/tool/codesearch.ts +0 -132
  269. package/packages/dfcode/src/tool/codesearch.txt +0 -12
  270. package/packages/dfcode/src/tool/edit.ts +0 -645
  271. package/packages/dfcode/src/tool/edit.txt +0 -10
  272. package/packages/dfcode/src/tool/external-directory.ts +0 -32
  273. package/packages/dfcode/src/tool/glob.ts +0 -77
  274. package/packages/dfcode/src/tool/glob.txt +0 -6
  275. package/packages/dfcode/src/tool/grep.ts +0 -154
  276. package/packages/dfcode/src/tool/grep.txt +0 -8
  277. package/packages/dfcode/src/tool/invalid.ts +0 -17
  278. package/packages/dfcode/src/tool/ls.ts +0 -121
  279. package/packages/dfcode/src/tool/ls.txt +0 -1
  280. package/packages/dfcode/src/tool/lsp.ts +0 -96
  281. package/packages/dfcode/src/tool/lsp.txt +0 -19
  282. package/packages/dfcode/src/tool/multiedit.ts +0 -46
  283. package/packages/dfcode/src/tool/multiedit.txt +0 -41
  284. package/packages/dfcode/src/tool/plan-enter.txt +0 -14
  285. package/packages/dfcode/src/tool/plan-exit.txt +0 -13
  286. package/packages/dfcode/src/tool/plan.ts +0 -130
  287. package/packages/dfcode/src/tool/question.ts +0 -33
  288. package/packages/dfcode/src/tool/question.txt +0 -10
  289. package/packages/dfcode/src/tool/read.ts +0 -202
  290. package/packages/dfcode/src/tool/read.txt +0 -12
  291. package/packages/dfcode/src/tool/registry.ts +0 -158
  292. package/packages/dfcode/src/tool/skill.ts +0 -82
  293. package/packages/dfcode/src/tool/task.ts +0 -191
  294. package/packages/dfcode/src/tool/task.txt +0 -60
  295. package/packages/dfcode/src/tool/todo.ts +0 -53
  296. package/packages/dfcode/src/tool/todoread.txt +0 -14
  297. package/packages/dfcode/src/tool/todowrite.txt +0 -167
  298. package/packages/dfcode/src/tool/tool.ts +0 -88
  299. package/packages/dfcode/src/tool/truncation.ts +0 -106
  300. package/packages/dfcode/src/tool/webfetch.ts +0 -188
  301. package/packages/dfcode/src/tool/webfetch.txt +0 -13
  302. package/packages/dfcode/src/tool/websearch.ts +0 -150
  303. package/packages/dfcode/src/tool/websearch.txt +0 -14
  304. package/packages/dfcode/src/tool/write.ts +0 -80
  305. package/packages/dfcode/src/tool/write.txt +0 -8
  306. package/packages/dfcode/src/util/archive.ts +0 -16
  307. package/packages/dfcode/src/util/color.ts +0 -19
  308. package/packages/dfcode/src/util/context.ts +0 -25
  309. package/packages/dfcode/src/util/defer.ts +0 -12
  310. package/packages/dfcode/src/util/eventloop.ts +0 -20
  311. package/packages/dfcode/src/util/filesystem.ts +0 -93
  312. package/packages/dfcode/src/util/fn.ts +0 -11
  313. package/packages/dfcode/src/util/format.ts +0 -20
  314. package/packages/dfcode/src/util/iife.ts +0 -3
  315. package/packages/dfcode/src/util/keybind.ts +0 -103
  316. package/packages/dfcode/src/util/lazy.ts +0 -18
  317. package/packages/dfcode/src/util/locale.ts +0 -81
  318. package/packages/dfcode/src/util/lock.ts +0 -98
  319. package/packages/dfcode/src/util/log.ts +0 -180
  320. package/packages/dfcode/src/util/queue.ts +0 -32
  321. package/packages/dfcode/src/util/rpc.ts +0 -66
  322. package/packages/dfcode/src/util/scrap.ts +0 -10
  323. package/packages/dfcode/src/util/signal.ts +0 -12
  324. package/packages/dfcode/src/util/timeout.ts +0 -14
  325. package/packages/dfcode/src/util/token.ts +0 -7
  326. package/packages/dfcode/src/util/wildcard.ts +0 -56
  327. package/packages/dfcode/src/worktree/index.ts +0 -524
  328. package/packages/plugin/package.json +0 -28
  329. package/packages/plugin/src/example.ts +0 -18
  330. package/packages/plugin/src/index.ts +0 -226
  331. package/packages/plugin/src/shell.ts +0 -136
  332. package/packages/plugin/src/tool.ts +0 -28
  333. package/packages/util/package.json +0 -20
  334. package/packages/util/src/array.ts +0 -10
  335. package/packages/util/src/binary.ts +0 -41
  336. package/packages/util/src/encode.ts +0 -30
  337. package/packages/util/src/error.ts +0 -54
  338. package/packages/util/src/fn.ts +0 -11
  339. package/packages/util/src/identifier.ts +0 -48
  340. package/packages/util/src/iife.ts +0 -3
  341. package/packages/util/src/lazy.ts +0 -11
  342. package/packages/util/src/path.ts +0 -37
  343. package/packages/util/src/retry.ts +0 -41
  344. package/packages/util/src/slug.ts +0 -74
@@ -1,135 +0,0 @@
1
- import type { Argv } from "yargs"
2
- import { cmd } from "./cmd"
3
- import { Session } from "../../session"
4
- import { bootstrap } from "../bootstrap"
5
- import { UI } from "../ui"
6
- import { Locale } from "../../util/locale"
7
- import { Flag } from "../../flag/flag"
8
- import { EOL } from "os"
9
- import path from "path"
10
-
11
- function pagerCmd(): string[] {
12
- const lessOptions = ["-R", "-S"]
13
- if (process.platform !== "win32") {
14
- return ["less", ...lessOptions]
15
- }
16
-
17
- // user could have less installed via other options
18
- const lessOnPath = Bun.which("less")
19
- if (lessOnPath) {
20
- if (Bun.file(lessOnPath).size) return [lessOnPath, ...lessOptions]
21
- }
22
-
23
- if (Flag.DFCODE_GIT_BASH_PATH) {
24
- const less = path.join(Flag.DFCODE_GIT_BASH_PATH, "..", "..", "usr", "bin", "less.exe")
25
- if (Bun.file(less).size) return [less, ...lessOptions]
26
- }
27
-
28
- const git = Bun.which("git")
29
- if (git) {
30
- const less = path.join(git, "..", "..", "usr", "bin", "less.exe")
31
- if (Bun.file(less).size) return [less, ...lessOptions]
32
- }
33
-
34
- // Fall back to Windows built-in more (via cmd.exe)
35
- return ["cmd", "/c", "more"]
36
- }
37
-
38
- export const SessionCommand = cmd({
39
- command: "session",
40
- describe: "manage sessions",
41
- builder: (yargs: Argv) => yargs.command(SessionListCommand).demandCommand(),
42
- async handler() {},
43
- })
44
-
45
- export const SessionListCommand = cmd({
46
- command: "list",
47
- describe: "list sessions",
48
- builder: (yargs: Argv) => {
49
- return yargs
50
- .option("max-count", {
51
- alias: "n",
52
- describe: "limit to N most recent sessions",
53
- type: "number",
54
- })
55
- .option("format", {
56
- describe: "output format",
57
- type: "string",
58
- choices: ["table", "json"],
59
- default: "table",
60
- })
61
- },
62
- handler: async (args) => {
63
- await bootstrap(process.cwd(), async () => {
64
- const sessions = []
65
- for await (const session of Session.list()) {
66
- if (!session.parentID) {
67
- sessions.push(session)
68
- }
69
- }
70
-
71
- sessions.sort((a, b) => b.time.updated - a.time.updated)
72
-
73
- const limitedSessions = args.maxCount ? sessions.slice(0, args.maxCount) : sessions
74
-
75
- if (limitedSessions.length === 0) {
76
- return
77
- }
78
-
79
- let output: string
80
- if (args.format === "json") {
81
- output = formatSessionJSON(limitedSessions)
82
- } else {
83
- output = formatSessionTable(limitedSessions)
84
- }
85
-
86
- const shouldPaginate = process.stdout.isTTY && !args.maxCount && args.format === "table"
87
-
88
- if (shouldPaginate) {
89
- const proc = Bun.spawn({
90
- cmd: pagerCmd(),
91
- stdin: "pipe",
92
- stdout: "inherit",
93
- stderr: "inherit",
94
- })
95
-
96
- proc.stdin.write(output)
97
- proc.stdin.end()
98
- await proc.exited
99
- } else {
100
- console.log(output)
101
- }
102
- })
103
- },
104
- })
105
-
106
- function formatSessionTable(sessions: Session.Info[]): string {
107
- const lines: string[] = []
108
-
109
- const maxIdWidth = Math.max(20, ...sessions.map((s) => s.id.length))
110
- const maxTitleWidth = Math.max(25, ...sessions.map((s) => s.title.length))
111
-
112
- const header = `Session ID${" ".repeat(maxIdWidth - 10)} Title${" ".repeat(maxTitleWidth - 5)} Updated`
113
- lines.push(header)
114
- lines.push("─".repeat(header.length))
115
- for (const session of sessions) {
116
- const truncatedTitle = Locale.truncate(session.title, maxTitleWidth)
117
- const timeStr = Locale.todayTimeOrDateTime(session.time.updated)
118
- const line = `${session.id.padEnd(maxIdWidth)} ${truncatedTitle.padEnd(maxTitleWidth)} ${timeStr}`
119
- lines.push(line)
120
- }
121
-
122
- return lines.join(EOL)
123
- }
124
-
125
- function formatSessionJSON(sessions: Session.Info[]): string {
126
- const jsonData = sessions.map((session) => ({
127
- id: session.id,
128
- title: session.title,
129
- updated: session.time.updated,
130
- created: session.time.created,
131
- projectId: session.projectID,
132
- directory: session.directory,
133
- }))
134
- return JSON.stringify(jsonData, null, 2)
135
- }
@@ -1,402 +0,0 @@
1
- import type { Argv } from "yargs"
2
- import { cmd } from "./cmd"
3
- import { Session } from "../../session"
4
- import { bootstrap } from "../bootstrap"
5
- import { Storage } from "../../storage/storage"
6
- import { Project } from "../../project/project"
7
- import { Instance } from "../../project/instance"
8
-
9
- interface SessionStats {
10
- totalSessions: number
11
- totalMessages: number
12
- totalCost: number
13
- totalTokens: {
14
- input: number
15
- output: number
16
- reasoning: number
17
- cache: {
18
- read: number
19
- write: number
20
- }
21
- }
22
- toolUsage: Record<string, number>
23
- modelUsage: Record<
24
- string,
25
- {
26
- messages: number
27
- tokens: {
28
- input: number
29
- output: number
30
- }
31
- cost: number
32
- }
33
- >
34
- dateRange: {
35
- earliest: number
36
- latest: number
37
- }
38
- days: number
39
- costPerDay: number
40
- tokensPerSession: number
41
- medianTokensPerSession: number
42
- }
43
-
44
- export const StatsCommand = cmd({
45
- command: "stats",
46
- describe: "show token usage and cost statistics",
47
- builder: (yargs: Argv) => {
48
- return yargs
49
- .option("days", {
50
- describe: "show stats for the last N days (default: all time)",
51
- type: "number",
52
- })
53
- .option("tools", {
54
- describe: "number of tools to show (default: all)",
55
- type: "number",
56
- })
57
- .option("models", {
58
- describe: "show model statistics (default: hidden). Pass a number to show top N, otherwise shows all",
59
- })
60
- .option("project", {
61
- describe: "filter by project (default: all projects, empty string: current project)",
62
- type: "string",
63
- })
64
- },
65
- handler: async (args) => {
66
- await bootstrap(process.cwd(), async () => {
67
- const stats = await aggregateSessionStats(args.days, args.project)
68
-
69
- let modelLimit: number | undefined
70
- if (args.models === true) {
71
- modelLimit = Infinity
72
- } else if (typeof args.models === "number") {
73
- modelLimit = args.models
74
- }
75
-
76
- displayStats(stats, args.tools, modelLimit)
77
- })
78
- },
79
- })
80
-
81
- async function getCurrentProject(): Promise<Project.Info> {
82
- return Instance.project
83
- }
84
-
85
- async function getAllSessions(): Promise<Session.Info[]> {
86
- const sessions: Session.Info[] = []
87
-
88
- const projectKeys = await Storage.list(["project"])
89
- const projects = await Promise.all(projectKeys.map((key) => Storage.read<Project.Info>(key)))
90
-
91
- for (const project of projects) {
92
- if (!project) continue
93
-
94
- const sessionKeys = await Storage.list(["session", project.id])
95
- const projectSessions = await Promise.all(sessionKeys.map((key) => Storage.read<Session.Info>(key)))
96
-
97
- for (const session of projectSessions) {
98
- if (session) {
99
- sessions.push(session)
100
- }
101
- }
102
- }
103
-
104
- return sessions
105
- }
106
-
107
- export async function aggregateSessionStats(days?: number, projectFilter?: string): Promise<SessionStats> {
108
- const sessions = await getAllSessions()
109
- const MS_IN_DAY = 24 * 60 * 60 * 1000
110
-
111
- const cutoffTime = (() => {
112
- if (days === undefined) return 0
113
- if (days === 0) {
114
- const now = new Date()
115
- now.setHours(0, 0, 0, 0)
116
- return now.getTime()
117
- }
118
- return Date.now() - days * MS_IN_DAY
119
- })()
120
-
121
- const windowDays = (() => {
122
- if (days === undefined) return
123
- if (days === 0) return 1
124
- return days
125
- })()
126
-
127
- let filteredSessions = cutoffTime > 0 ? sessions.filter((session) => session.time.updated >= cutoffTime) : sessions
128
-
129
- if (projectFilter !== undefined) {
130
- if (projectFilter === "") {
131
- const currentProject = await getCurrentProject()
132
- filteredSessions = filteredSessions.filter((session) => session.projectID === currentProject.id)
133
- } else {
134
- filteredSessions = filteredSessions.filter((session) => session.projectID === projectFilter)
135
- }
136
- }
137
-
138
- const stats: SessionStats = {
139
- totalSessions: filteredSessions.length,
140
- totalMessages: 0,
141
- totalCost: 0,
142
- totalTokens: {
143
- input: 0,
144
- output: 0,
145
- reasoning: 0,
146
- cache: {
147
- read: 0,
148
- write: 0,
149
- },
150
- },
151
- toolUsage: {},
152
- modelUsage: {},
153
- dateRange: {
154
- earliest: Date.now(),
155
- latest: Date.now(),
156
- },
157
- days: 0,
158
- costPerDay: 0,
159
- tokensPerSession: 0,
160
- medianTokensPerSession: 0,
161
- }
162
-
163
- if (filteredSessions.length > 1000) {
164
- console.log(`Large dataset detected (${filteredSessions.length} sessions). This may take a while...`)
165
- }
166
-
167
- if (filteredSessions.length === 0) {
168
- stats.days = windowDays ?? 0
169
- return stats
170
- }
171
-
172
- let earliestTime = Date.now()
173
- let latestTime = 0
174
-
175
- const sessionTotalTokens: number[] = []
176
-
177
- const BATCH_SIZE = 20
178
- for (let i = 0; i < filteredSessions.length; i += BATCH_SIZE) {
179
- const batch = filteredSessions.slice(i, i + BATCH_SIZE)
180
-
181
- const batchPromises = batch.map(async (session) => {
182
- const messages = await Session.messages({ sessionID: session.id })
183
-
184
- let sessionCost = 0
185
- let sessionTokens = { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } }
186
- let sessionToolUsage: Record<string, number> = {}
187
- let sessionModelUsage: Record<
188
- string,
189
- {
190
- messages: number
191
- tokens: {
192
- input: number
193
- output: number
194
- }
195
- cost: number
196
- }
197
- > = {}
198
-
199
- for (const message of messages) {
200
- if (message.info.role === "assistant") {
201
- sessionCost += message.info.cost || 0
202
-
203
- const modelKey = `${message.info.providerID}/${message.info.modelID}`
204
- if (!sessionModelUsage[modelKey]) {
205
- sessionModelUsage[modelKey] = {
206
- messages: 0,
207
- tokens: { input: 0, output: 0 },
208
- cost: 0,
209
- }
210
- }
211
- sessionModelUsage[modelKey].messages++
212
- sessionModelUsage[modelKey].cost += message.info.cost || 0
213
-
214
- if (message.info.tokens) {
215
- sessionTokens.input += message.info.tokens.input || 0
216
- sessionTokens.output += message.info.tokens.output || 0
217
- sessionTokens.reasoning += message.info.tokens.reasoning || 0
218
- sessionTokens.cache.read += message.info.tokens.cache?.read || 0
219
- sessionTokens.cache.write += message.info.tokens.cache?.write || 0
220
-
221
- sessionModelUsage[modelKey].tokens.input += message.info.tokens.input || 0
222
- sessionModelUsage[modelKey].tokens.output +=
223
- (message.info.tokens.output || 0) + (message.info.tokens.reasoning || 0)
224
- }
225
- }
226
-
227
- for (const part of message.parts) {
228
- if (part.type === "tool" && part.tool) {
229
- sessionToolUsage[part.tool] = (sessionToolUsage[part.tool] || 0) + 1
230
- }
231
- }
232
- }
233
-
234
- return {
235
- messageCount: messages.length,
236
- sessionCost,
237
- sessionTokens,
238
- sessionTotalTokens: sessionTokens.input + sessionTokens.output + sessionTokens.reasoning,
239
- sessionToolUsage,
240
- sessionModelUsage,
241
- earliestTime: cutoffTime > 0 ? session.time.updated : session.time.created,
242
- latestTime: session.time.updated,
243
- }
244
- })
245
-
246
- const batchResults = await Promise.all(batchPromises)
247
-
248
- for (const result of batchResults) {
249
- earliestTime = Math.min(earliestTime, result.earliestTime)
250
- latestTime = Math.max(latestTime, result.latestTime)
251
- sessionTotalTokens.push(result.sessionTotalTokens)
252
-
253
- stats.totalMessages += result.messageCount
254
- stats.totalCost += result.sessionCost
255
- stats.totalTokens.input += result.sessionTokens.input
256
- stats.totalTokens.output += result.sessionTokens.output
257
- stats.totalTokens.reasoning += result.sessionTokens.reasoning
258
- stats.totalTokens.cache.read += result.sessionTokens.cache.read
259
- stats.totalTokens.cache.write += result.sessionTokens.cache.write
260
-
261
- for (const [tool, count] of Object.entries(result.sessionToolUsage)) {
262
- stats.toolUsage[tool] = (stats.toolUsage[tool] || 0) + count
263
- }
264
-
265
- for (const [model, usage] of Object.entries(result.sessionModelUsage)) {
266
- if (!stats.modelUsage[model]) {
267
- stats.modelUsage[model] = {
268
- messages: 0,
269
- tokens: { input: 0, output: 0 },
270
- cost: 0,
271
- }
272
- }
273
- stats.modelUsage[model].messages += usage.messages
274
- stats.modelUsage[model].tokens.input += usage.tokens.input
275
- stats.modelUsage[model].tokens.output += usage.tokens.output
276
- stats.modelUsage[model].cost += usage.cost
277
- }
278
- }
279
- }
280
-
281
- const rangeDays = Math.max(1, Math.ceil((latestTime - earliestTime) / MS_IN_DAY))
282
- const effectiveDays = windowDays ?? rangeDays
283
- stats.dateRange = {
284
- earliest: earliestTime,
285
- latest: latestTime,
286
- }
287
- stats.days = effectiveDays
288
- stats.costPerDay = stats.totalCost / effectiveDays
289
- const totalTokens = stats.totalTokens.input + stats.totalTokens.output + stats.totalTokens.reasoning
290
- stats.tokensPerSession = filteredSessions.length > 0 ? totalTokens / filteredSessions.length : 0
291
- sessionTotalTokens.sort((a, b) => a - b)
292
- const mid = Math.floor(sessionTotalTokens.length / 2)
293
- stats.medianTokensPerSession =
294
- sessionTotalTokens.length === 0
295
- ? 0
296
- : sessionTotalTokens.length % 2 === 0
297
- ? (sessionTotalTokens[mid - 1] + sessionTotalTokens[mid]) / 2
298
- : sessionTotalTokens[mid]
299
-
300
- return stats
301
- }
302
-
303
- export function displayStats(stats: SessionStats, toolLimit?: number, modelLimit?: number) {
304
- const width = 56
305
-
306
- function renderRow(label: string, value: string): string {
307
- const availableWidth = width - 1
308
- const paddingNeeded = availableWidth - label.length - value.length
309
- const padding = Math.max(0, paddingNeeded)
310
- return `│${label}${" ".repeat(padding)}${value} │`
311
- }
312
-
313
- // Overview section
314
- console.log("┌────────────────────────────────────────────────────────┐")
315
- console.log("│ OVERVIEW │")
316
- console.log("├────────────────────────────────────────────────────────┤")
317
- console.log(renderRow("Sessions", stats.totalSessions.toLocaleString()))
318
- console.log(renderRow("Messages", stats.totalMessages.toLocaleString()))
319
- console.log(renderRow("Days", stats.days.toString()))
320
- console.log("└────────────────────────────────────────────────────────┘")
321
- console.log()
322
-
323
- // Cost & Tokens section
324
- console.log("┌────────────────────────────────────────────────────────┐")
325
- console.log("│ COST & TOKENS │")
326
- console.log("├────────────────────────────────────────────────────────┤")
327
- const cost = isNaN(stats.totalCost) ? 0 : stats.totalCost
328
- const costPerDay = isNaN(stats.costPerDay) ? 0 : stats.costPerDay
329
- const tokensPerSession = isNaN(stats.tokensPerSession) ? 0 : stats.tokensPerSession
330
- console.log(renderRow("Total Cost", `$${cost.toFixed(2)}`))
331
- console.log(renderRow("Avg Cost/Day", `$${costPerDay.toFixed(2)}`))
332
- console.log(renderRow("Avg Tokens/Session", formatNumber(Math.round(tokensPerSession))))
333
- const medianTokensPerSession = isNaN(stats.medianTokensPerSession) ? 0 : stats.medianTokensPerSession
334
- console.log(renderRow("Median Tokens/Session", formatNumber(Math.round(medianTokensPerSession))))
335
- console.log(renderRow("Input", formatNumber(stats.totalTokens.input)))
336
- console.log(renderRow("Output", formatNumber(stats.totalTokens.output)))
337
- console.log(renderRow("Cache Read", formatNumber(stats.totalTokens.cache.read)))
338
- console.log(renderRow("Cache Write", formatNumber(stats.totalTokens.cache.write)))
339
- console.log("└────────────────────────────────────────────────────────┘")
340
- console.log()
341
-
342
- // Model Usage section
343
- if (modelLimit !== undefined && Object.keys(stats.modelUsage).length > 0) {
344
- const sortedModels = Object.entries(stats.modelUsage).sort(([, a], [, b]) => b.messages - a.messages)
345
- const modelsToDisplay = modelLimit === Infinity ? sortedModels : sortedModels.slice(0, modelLimit)
346
-
347
- console.log("┌────────────────────────────────────────────────────────┐")
348
- console.log("│ MODEL USAGE │")
349
- console.log("├────────────────────────────────────────────────────────┤")
350
-
351
- for (const [model, usage] of modelsToDisplay) {
352
- console.log(`│ ${model.padEnd(54)} │`)
353
- console.log(renderRow(" Messages", usage.messages.toLocaleString()))
354
- console.log(renderRow(" Input Tokens", formatNumber(usage.tokens.input)))
355
- console.log(renderRow(" Output Tokens", formatNumber(usage.tokens.output)))
356
- console.log(renderRow(" Cost", `$${usage.cost.toFixed(4)}`))
357
- console.log("├────────────────────────────────────────────────────────┤")
358
- }
359
- // Remove last separator and add bottom border
360
- process.stdout.write("\x1B[1A") // Move up one line
361
- console.log("└────────────────────────────────────────────────────────┘")
362
- }
363
- console.log()
364
-
365
- // Tool Usage section
366
- if (Object.keys(stats.toolUsage).length > 0) {
367
- const sortedTools = Object.entries(stats.toolUsage).sort(([, a], [, b]) => b - a)
368
- const toolsToDisplay = toolLimit ? sortedTools.slice(0, toolLimit) : sortedTools
369
-
370
- console.log("┌────────────────────────────────────────────────────────┐")
371
- console.log("│ TOOL USAGE │")
372
- console.log("├────────────────────────────────────────────────────────┤")
373
-
374
- const maxCount = Math.max(...toolsToDisplay.map(([, count]) => count))
375
- const totalToolUsage = Object.values(stats.toolUsage).reduce((a, b) => a + b, 0)
376
-
377
- for (const [tool, count] of toolsToDisplay) {
378
- const barLength = Math.max(1, Math.floor((count / maxCount) * 20))
379
- const bar = "█".repeat(barLength)
380
- const percentage = ((count / totalToolUsage) * 100).toFixed(1)
381
-
382
- const maxToolLength = 18
383
- const truncatedTool = tool.length > maxToolLength ? tool.substring(0, maxToolLength - 2) + ".." : tool
384
- const toolName = truncatedTool.padEnd(maxToolLength)
385
-
386
- const content = ` ${toolName} ${bar.padEnd(20)} ${count.toString().padStart(3)} (${percentage.padStart(4)}%)`
387
- const padding = Math.max(0, width - content.length - 1)
388
- console.log(`│${content}${" ".repeat(padding)} │`)
389
- }
390
- console.log("└────────────────────────────────────────────────────────┘")
391
- }
392
- console.log()
393
- }
394
-
395
- function formatNumber(num: number): string {
396
- if (num >= 1000000) {
397
- return (num / 1000000).toFixed(1) + "M"
398
- } else if (num >= 1000) {
399
- return (num / 1000).toFixed(1) + "K"
400
- }
401
- return num.toString()
402
- }