bincode-cli 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 (300) hide show
  1. package/AGENTS.md +27 -0
  2. package/README.md +15 -0
  3. package/bin/bincode +98 -0
  4. package/bunfig.toml +4 -0
  5. package/package.json +124 -0
  6. package/parsers-config.ts +239 -0
  7. package/script/build.ts +167 -0
  8. package/script/postinstall.mjs +206 -0
  9. package/script/publish.ts +99 -0
  10. package/script/schema.ts +47 -0
  11. package/src/acp/README.md +164 -0
  12. package/src/acp/agent.ts +1051 -0
  13. package/src/acp/session.ts +101 -0
  14. package/src/acp/types.ts +22 -0
  15. package/src/agent/agent.ts +398 -0
  16. package/src/agent/generate.txt +75 -0
  17. package/src/agent/prompt/compaction.txt +12 -0
  18. package/src/agent/prompt/explore.txt +18 -0
  19. package/src/agent/prompt/summary.txt +10 -0
  20. package/src/agent/prompt/title.txt +36 -0
  21. package/src/auth/bineric-login.ts +506 -0
  22. package/src/auth/index.ts +70 -0
  23. package/src/bun/index.ts +114 -0
  24. package/src/bus/bus-event.ts +43 -0
  25. package/src/bus/global.ts +10 -0
  26. package/src/bus/index.ts +105 -0
  27. package/src/cli/auth-check.ts +61 -0
  28. package/src/cli/bootstrap.ts +21 -0
  29. package/src/cli/cmd/acp.ts +88 -0
  30. package/src/cli/cmd/agent.ts +256 -0
  31. package/src/cli/cmd/auth.ts +436 -0
  32. package/src/cli/cmd/cmd.ts +7 -0
  33. package/src/cli/cmd/debug/config.ts +15 -0
  34. package/src/cli/cmd/debug/file.ts +91 -0
  35. package/src/cli/cmd/debug/index.ts +43 -0
  36. package/src/cli/cmd/debug/lsp.ts +48 -0
  37. package/src/cli/cmd/debug/ripgrep.ts +83 -0
  38. package/src/cli/cmd/debug/scrap.ts +15 -0
  39. package/src/cli/cmd/debug/skill.ts +15 -0
  40. package/src/cli/cmd/debug/snapshot.ts +48 -0
  41. package/src/cli/cmd/export.ts +88 -0
  42. package/src/cli/cmd/generate.ts +38 -0
  43. package/src/cli/cmd/github.ts +1399 -0
  44. package/src/cli/cmd/import.ts +98 -0
  45. package/src/cli/cmd/login.ts +112 -0
  46. package/src/cli/cmd/logout.ts +38 -0
  47. package/src/cli/cmd/mcp.ts +654 -0
  48. package/src/cli/cmd/models.ts +77 -0
  49. package/src/cli/cmd/pr.ts +112 -0
  50. package/src/cli/cmd/run.ts +368 -0
  51. package/src/cli/cmd/serve.ts +31 -0
  52. package/src/cli/cmd/session.ts +106 -0
  53. package/src/cli/cmd/stats.ts +298 -0
  54. package/src/cli/cmd/tui/app.tsx +669 -0
  55. package/src/cli/cmd/tui/attach.ts +30 -0
  56. package/src/cli/cmd/tui/component/border.tsx +21 -0
  57. package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
  58. package/src/cli/cmd/tui/component/dialog-command.tsx +123 -0
  59. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  60. package/src/cli/cmd/tui/component/dialog-model.tsx +223 -0
  61. package/src/cli/cmd/tui/component/dialog-provider.tsx +224 -0
  62. package/src/cli/cmd/tui/component/dialog-session-list.tsx +102 -0
  63. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
  64. package/src/cli/cmd/tui/component/dialog-status.tsx +162 -0
  65. package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
  66. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
  67. package/src/cli/cmd/tui/component/logo.tsx +32 -0
  68. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +560 -0
  69. package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
  70. package/src/cli/cmd/tui/component/prompt/index.tsx +1052 -0
  71. package/src/cli/cmd/tui/context/args.tsx +14 -0
  72. package/src/cli/cmd/tui/context/directory.ts +13 -0
  73. package/src/cli/cmd/tui/context/exit.tsx +23 -0
  74. package/src/cli/cmd/tui/context/helper.tsx +25 -0
  75. package/src/cli/cmd/tui/context/keybind.tsx +101 -0
  76. package/src/cli/cmd/tui/context/kv.tsx +49 -0
  77. package/src/cli/cmd/tui/context/local.tsx +339 -0
  78. package/src/cli/cmd/tui/context/prompt.tsx +18 -0
  79. package/src/cli/cmd/tui/context/route.tsx +46 -0
  80. package/src/cli/cmd/tui/context/sdk.tsx +74 -0
  81. package/src/cli/cmd/tui/context/sync.tsx +372 -0
  82. package/src/cli/cmd/tui/context/theme/aura.json +69 -0
  83. package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
  84. package/src/cli/cmd/tui/context/theme/bincode.json +245 -0
  85. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
  86. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
  87. package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
  88. package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
  89. package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
  90. package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
  91. package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
  92. package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
  93. package/src/cli/cmd/tui/context/theme/github.json +233 -0
  94. package/src/cli/cmd/tui/context/theme/gruvbox.json +95 -0
  95. package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
  96. package/src/cli/cmd/tui/context/theme/lucent-orng.json +227 -0
  97. package/src/cli/cmd/tui/context/theme/material.json +235 -0
  98. package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
  99. package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
  100. package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
  101. package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
  102. package/src/cli/cmd/tui/context/theme/nord.json +223 -0
  103. package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
  104. package/src/cli/cmd/tui/context/theme/orng.json +245 -0
  105. package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
  106. package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
  107. package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
  108. package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
  109. package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
  110. package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
  111. package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
  112. package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
  113. package/src/cli/cmd/tui/context/theme.tsx +1109 -0
  114. package/src/cli/cmd/tui/event.ts +40 -0
  115. package/src/cli/cmd/tui/routes/home.tsx +105 -0
  116. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +64 -0
  117. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +109 -0
  118. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
  119. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  120. package/src/cli/cmd/tui/routes/session/footer.tsx +88 -0
  121. package/src/cli/cmd/tui/routes/session/header.tsx +141 -0
  122. package/src/cli/cmd/tui/routes/session/index.tsx +1888 -0
  123. package/src/cli/cmd/tui/routes/session/sidebar.tsx +321 -0
  124. package/src/cli/cmd/tui/spawn.ts +60 -0
  125. package/src/cli/cmd/tui/thread.ts +120 -0
  126. package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
  127. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
  128. package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
  129. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +77 -0
  130. package/src/cli/cmd/tui/ui/dialog-select.tsx +330 -0
  131. package/src/cli/cmd/tui/ui/dialog.tsx +170 -0
  132. package/src/cli/cmd/tui/ui/spinner.ts +368 -0
  133. package/src/cli/cmd/tui/ui/toast.tsx +100 -0
  134. package/src/cli/cmd/tui/util/clipboard.ts +127 -0
  135. package/src/cli/cmd/tui/util/editor.ts +32 -0
  136. package/src/cli/cmd/tui/util/terminal.ts +114 -0
  137. package/src/cli/cmd/tui/worker.ts +63 -0
  138. package/src/cli/cmd/uninstall.ts +344 -0
  139. package/src/cli/cmd/upgrade.ts +67 -0
  140. package/src/cli/cmd/web.ts +84 -0
  141. package/src/cli/error.ts +55 -0
  142. package/src/cli/ui.ts +84 -0
  143. package/src/cli/upgrade.ts +25 -0
  144. package/src/command/index.ts +80 -0
  145. package/src/command/template/initialize.txt +10 -0
  146. package/src/command/template/review.txt +97 -0
  147. package/src/config/config.ts +995 -0
  148. package/src/config/markdown.ts +41 -0
  149. package/src/env/index.ts +26 -0
  150. package/src/file/ignore.ts +83 -0
  151. package/src/file/index.ts +328 -0
  152. package/src/file/ripgrep.ts +393 -0
  153. package/src/file/time.ts +64 -0
  154. package/src/file/watcher.ts +103 -0
  155. package/src/flag/flag.ts +46 -0
  156. package/src/format/formatter.ts +315 -0
  157. package/src/format/index.ts +137 -0
  158. package/src/global/index.ts +52 -0
  159. package/src/id/id.ts +73 -0
  160. package/src/ide/index.ts +76 -0
  161. package/src/index.ts +217 -0
  162. package/src/installation/index.ts +196 -0
  163. package/src/lsp/client.ts +229 -0
  164. package/src/lsp/index.ts +485 -0
  165. package/src/lsp/language.ts +116 -0
  166. package/src/lsp/server.ts +1895 -0
  167. package/src/mcp/auth.ts +135 -0
  168. package/src/mcp/index.ts +654 -0
  169. package/src/mcp/oauth-callback.ts +200 -0
  170. package/src/mcp/oauth-provider.ts +154 -0
  171. package/src/patch/index.ts +622 -0
  172. package/src/permission/index.ts +199 -0
  173. package/src/plugin/index.ts +101 -0
  174. package/src/project/bootstrap.ts +31 -0
  175. package/src/project/instance.ts +78 -0
  176. package/src/project/project.ts +221 -0
  177. package/src/project/state.ts +65 -0
  178. package/src/project/vcs.ts +76 -0
  179. package/src/provider/auth.ts +143 -0
  180. package/src/provider/models-macro.ts +11 -0
  181. package/src/provider/models.ts +106 -0
  182. package/src/provider/provider.ts +1071 -0
  183. package/src/provider/sdk/openai-compatible/src/README.md +5 -0
  184. package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
  185. package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +101 -0
  186. package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
  187. package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
  188. package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
  189. package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
  190. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
  191. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1713 -0
  192. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
  193. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
  194. package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
  195. package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
  196. package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
  197. package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
  198. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
  199. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
  200. package/src/provider/transform.ts +455 -0
  201. package/src/pty/index.ts +231 -0
  202. package/src/server/error.ts +36 -0
  203. package/src/server/project.ts +79 -0
  204. package/src/server/server.ts +2642 -0
  205. package/src/server/tui.ts +71 -0
  206. package/src/session/compaction.ts +223 -0
  207. package/src/session/index.ts +458 -0
  208. package/src/session/llm.ts +201 -0
  209. package/src/session/message-v2.ts +659 -0
  210. package/src/session/message.ts +189 -0
  211. package/src/session/processor.ts +409 -0
  212. package/src/session/prompt/anthropic-20250930.txt +166 -0
  213. package/src/session/prompt/anthropic.txt +104 -0
  214. package/src/session/prompt/anthropic_spoof.txt +1 -0
  215. package/src/session/prompt/beast.txt +147 -0
  216. package/src/session/prompt/build-switch.txt +5 -0
  217. package/src/session/prompt/codex.txt +318 -0
  218. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  219. package/src/session/prompt/gemini.txt +155 -0
  220. package/src/session/prompt/max-steps.txt +16 -0
  221. package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  222. package/src/session/prompt/plan.txt +26 -0
  223. package/src/session/prompt/polaris.txt +106 -0
  224. package/src/session/prompt/qwen.txt +109 -0
  225. package/src/session/prompt.ts +1446 -0
  226. package/src/session/retry.ts +86 -0
  227. package/src/session/revert.ts +108 -0
  228. package/src/session/status.ts +76 -0
  229. package/src/session/summary.ts +194 -0
  230. package/src/session/system.ts +120 -0
  231. package/src/session/todo.ts +37 -0
  232. package/src/share/share-next.ts +194 -0
  233. package/src/share/share.ts +87 -0
  234. package/src/shell/shell.ts +67 -0
  235. package/src/skill/index.ts +1 -0
  236. package/src/skill/skill.ts +83 -0
  237. package/src/snapshot/index.ts +197 -0
  238. package/src/storage/storage.ts +226 -0
  239. package/src/tool/bash.ts +306 -0
  240. package/src/tool/bash.txt +158 -0
  241. package/src/tool/batch.ts +175 -0
  242. package/src/tool/batch.txt +24 -0
  243. package/src/tool/codesearch.ts +138 -0
  244. package/src/tool/codesearch.txt +12 -0
  245. package/src/tool/edit.ts +675 -0
  246. package/src/tool/edit.txt +10 -0
  247. package/src/tool/glob.ts +65 -0
  248. package/src/tool/glob.txt +6 -0
  249. package/src/tool/grep.ts +121 -0
  250. package/src/tool/grep.txt +8 -0
  251. package/src/tool/invalid.ts +17 -0
  252. package/src/tool/ls.ts +110 -0
  253. package/src/tool/ls.txt +1 -0
  254. package/src/tool/lsp-diagnostics.ts +26 -0
  255. package/src/tool/lsp-diagnostics.txt +1 -0
  256. package/src/tool/lsp-hover.ts +31 -0
  257. package/src/tool/lsp-hover.txt +1 -0
  258. package/src/tool/lsp.ts +87 -0
  259. package/src/tool/lsp.txt +19 -0
  260. package/src/tool/multiedit.ts +46 -0
  261. package/src/tool/multiedit.txt +41 -0
  262. package/src/tool/patch.ts +233 -0
  263. package/src/tool/patch.txt +1 -0
  264. package/src/tool/read.ts +219 -0
  265. package/src/tool/read.txt +12 -0
  266. package/src/tool/registry.ts +162 -0
  267. package/src/tool/skill.ts +100 -0
  268. package/src/tool/task.ts +136 -0
  269. package/src/tool/task.txt +60 -0
  270. package/src/tool/todo.ts +39 -0
  271. package/src/tool/todoread.txt +14 -0
  272. package/src/tool/todowrite.txt +167 -0
  273. package/src/tool/tool.ts +71 -0
  274. package/src/tool/webfetch.ts +187 -0
  275. package/src/tool/webfetch.txt +13 -0
  276. package/src/tool/websearch.ts +150 -0
  277. package/src/tool/websearch.txt +11 -0
  278. package/src/tool/write.ts +110 -0
  279. package/src/tool/write.txt +8 -0
  280. package/src/util/archive.ts +16 -0
  281. package/src/util/color.ts +19 -0
  282. package/src/util/context.ts +25 -0
  283. package/src/util/defer.ts +12 -0
  284. package/src/util/eventloop.ts +20 -0
  285. package/src/util/filesystem.ts +83 -0
  286. package/src/util/fn.ts +11 -0
  287. package/src/util/iife.ts +3 -0
  288. package/src/util/keybind.ts +102 -0
  289. package/src/util/lazy.ts +11 -0
  290. package/src/util/locale.ts +81 -0
  291. package/src/util/lock.ts +98 -0
  292. package/src/util/log.ts +180 -0
  293. package/src/util/queue.ts +32 -0
  294. package/src/util/rpc.ts +42 -0
  295. package/src/util/scrap.ts +10 -0
  296. package/src/util/signal.ts +12 -0
  297. package/src/util/timeout.ts +14 -0
  298. package/src/util/token.ts +7 -0
  299. package/src/util/wildcard.ts +54 -0
  300. package/tsconfig.json +16 -0
package/AGENTS.md ADDED
@@ -0,0 +1,27 @@
1
+ # bincode agent guidelines
2
+
3
+ ## Build/Test Commands
4
+
5
+ - **Install**: `bun install`
6
+ - **Run**: `bun run index.ts`
7
+ - **Typecheck**: `bun run typecheck` (npm run typecheck)
8
+ - **Test**: `bun test` (runs all tests)
9
+ - **Single test**: `bun test test/tool/tool.test.ts` (specific test file)
10
+
11
+ ## Code Style
12
+
13
+ - **Runtime**: Bun with TypeScript ESM modules
14
+ - **Imports**: Use relative imports for local modules, named imports preferred
15
+ - **Types**: Zod schemas for validation, TypeScript interfaces for structure
16
+ - **Naming**: camelCase for variables/functions, PascalCase for classes/namespaces
17
+ - **Error handling**: Use Result patterns, avoid throwing exceptions in tools
18
+ - **File structure**: Namespace-based organization (e.g., `Tool.define()`, `Session.create()`)
19
+
20
+ ## Architecture
21
+
22
+ - **Tools**: Implement `Tool.Info` interface with `execute()` method
23
+ - **Context**: Pass `sessionID` in tool context, use `App.provide()` for DI
24
+ - **Validation**: All inputs validated with Zod schemas
25
+ - **Logging**: Use `Log.create({ service: "name" })` pattern
26
+ - **Storage**: Use `Storage` namespace for persistence
27
+ - **API Client**: Go TUI communicates with TypeScript server via stainless SDK. When adding/modifying server endpoints in `packages/bincode/src/server/server.ts`, ask the user to generate a new client SDK to proceed with client-side changes.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # js
2
+
3
+ To install dependencies:
4
+
5
+ ```bash
6
+ bun install
7
+ ```
8
+
9
+ To run:
10
+
11
+ ```bash
12
+ bun run index.ts
13
+ ```
14
+
15
+ This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
package/bin/bincode ADDED
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env node
2
+
3
+ const childProcess = require("child_process")
4
+ const fs = require("fs")
5
+ const path = require("path")
6
+ const os = require("os")
7
+
8
+ function run(target) {
9
+ const result = childProcess.spawnSync(target, process.argv.slice(2), {
10
+ stdio: "inherit",
11
+ })
12
+ if (result.error) {
13
+ console.error(result.error.message)
14
+ process.exit(1)
15
+ }
16
+ const code = typeof result.status === "number" ? result.status : 0
17
+ process.exit(code)
18
+ }
19
+
20
+ const envPath = process.env.BINCODE_BIN_PATH
21
+ if (envPath) {
22
+ run(envPath)
23
+ }
24
+
25
+ const scriptPath = fs.realpathSync(__filename)
26
+ const scriptDir = path.dirname(scriptPath)
27
+
28
+ const platformMap = {
29
+ darwin: "darwin",
30
+ linux: "linux",
31
+ win32: "windows",
32
+ }
33
+ const archMap = {
34
+ x64: "x64",
35
+ arm64: "arm64",
36
+ arm: "arm",
37
+ }
38
+
39
+ let platform = platformMap[os.platform()]
40
+ if (!platform) {
41
+ platform = os.platform()
42
+ }
43
+ let arch = archMap[os.arch()]
44
+ if (!arch) {
45
+ arch = os.arch()
46
+ }
47
+ const base = "bincode-" + platform + "-" + arch
48
+ const binary = platform === "windows" ? "bincode.exe" : "bincode"
49
+
50
+ function findBinary(startDir) {
51
+ // First, try to find binary in local package binaries directory
52
+ const localBinariesPath = path.join(startDir, "..", "binaries", base, "bin", binary)
53
+ if (fs.existsSync(localBinariesPath)) {
54
+ return localBinariesPath
55
+ }
56
+
57
+ // Try baseline variant if available
58
+ const baselineBase = base + "-baseline"
59
+ const baselinePath = path.join(startDir, "..", "binaries", baselineBase, "bin", binary)
60
+ if (fs.existsSync(baselinePath)) {
61
+ return baselinePath
62
+ }
63
+
64
+ // Fallback: search in node_modules (for backward compatibility)
65
+ let current = startDir
66
+ for (;;) {
67
+ const modules = path.join(current, "node_modules")
68
+ if (fs.existsSync(modules)) {
69
+ const entries = fs.readdirSync(modules)
70
+ for (const entry of entries) {
71
+ if (!entry.startsWith(base)) {
72
+ continue
73
+ }
74
+ const candidate = path.join(modules, entry, "bin", binary)
75
+ if (fs.existsSync(candidate)) {
76
+ return candidate
77
+ }
78
+ }
79
+ }
80
+ const parent = path.dirname(current)
81
+ if (parent === current) {
82
+ return
83
+ }
84
+ current = parent
85
+ }
86
+ }
87
+
88
+ const resolved = findBinary(scriptDir)
89
+ if (!resolved) {
90
+ console.error(
91
+ 'It seems that your package manager failed to install the right version of the bincode CLI for your platform. You can try manually installing the "' +
92
+ base +
93
+ '" package',
94
+ )
95
+ process.exit(1)
96
+ }
97
+
98
+ run(resolved)
package/bunfig.toml ADDED
@@ -0,0 +1,4 @@
1
+ preload = ["@opentui/solid/preload"]
2
+
3
+ [test]
4
+ preload = ["./test/preload.ts"]
package/package.json ADDED
@@ -0,0 +1,124 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "version": "1.0.1",
4
+ "name": "bincode-cli",
5
+ "type": "module",
6
+ "private": false,
7
+ "scripts": {
8
+ "typecheck": "tsgo --noEmit",
9
+ "test": "bun test",
10
+ "build": "bun run script/build.ts",
11
+ "dev": "bun run --conditions=browser ./src/index.ts",
12
+ "publish:cli": "bun run script/publish.ts",
13
+ "random": "echo 'Random script updated at $(date)' && echo 'Change queued successfully' && echo 'Another change made' && echo 'Yet another change' && echo 'One more change' && echo 'Final change' && echo 'Another final change' && echo 'Yet another final change'",
14
+ "clean": "echo 'Cleaning up...' && rm -rf node_modules dist",
15
+ "lint": "echo 'Running lint checks...' && bun test --coverage",
16
+ "format": "echo 'Formatting code...' && bun run --prettier --write src/**/*.ts",
17
+ "docs": "echo 'Generating documentation...' && find src -name '*.ts' -exec echo 'Processing: {}' \\;",
18
+ "deploy": "echo 'Deploying application...' && bun run build && echo 'Deployment completed successfully'"
19
+ },
20
+ "bin": {
21
+ "bincode": "./bin/bincode"
22
+ },
23
+ "files": [
24
+ "bin",
25
+ "script",
26
+ "src",
27
+ "package.json",
28
+ "README.md",
29
+ "AGENTS.md",
30
+ "parsers-config.ts",
31
+ "bunfig.toml",
32
+ "tsconfig.json"
33
+ ],
34
+ "exports": {
35
+ "./*": "./src/*.ts"
36
+ },
37
+ "devDependencies": {
38
+ "@babel/core": "7.28.4",
39
+ "@octokit/webhooks-types": "7.6.1",
40
+ "@parcel/watcher-darwin-arm64": "2.5.1",
41
+ "@parcel/watcher-darwin-x64": "2.5.1",
42
+ "@parcel/watcher-linux-arm64-glibc": "2.5.1",
43
+ "@parcel/watcher-linux-arm64-musl": "2.5.1",
44
+ "@parcel/watcher-linux-x64-glibc": "2.5.1",
45
+ "@parcel/watcher-linux-x64-musl": "2.5.1",
46
+ "@parcel/watcher-win32-x64": "2.5.1",
47
+ "@standard-schema/spec": "1.0.0",
48
+ "@tsconfig/bun": "catalog:",
49
+ "@types/babel__core": "7.20.5",
50
+ "@types/bun": "catalog:",
51
+ "@types/turndown": "5.0.5",
52
+ "@types/yargs": "17.0.33",
53
+ "typescript": "catalog:",
54
+ "@typescript/native-preview": "catalog:",
55
+ "vscode-languageserver-types": "3.17.5",
56
+ "why-is-node-running": "3.2.2",
57
+ "zod-to-json-schema": "3.24.5",
58
+ "@bincode-ai/script": "workspace:*"
59
+ },
60
+ "dependencies": {
61
+ "@actions/core": "1.11.1",
62
+ "@actions/github": "6.0.1",
63
+ "@agentclientprotocol/sdk": "0.5.1",
64
+ "@ai-sdk/amazon-bedrock": "3.0.57",
65
+ "@ai-sdk/anthropic": "2.0.50",
66
+ "@ai-sdk/azure": "2.0.73",
67
+ "@ai-sdk/google": "2.0.44",
68
+ "@ai-sdk/google-vertex": "3.0.81",
69
+ "@ai-sdk/mcp": "0.0.8",
70
+ "@ai-sdk/mistral": "2.0.26",
71
+ "@ai-sdk/openai": "2.0.71",
72
+ "@ai-sdk/openai-compatible": "1.0.27",
73
+ "@ai-sdk/provider": "2.0.0",
74
+ "@ai-sdk/provider-utils": "3.0.18",
75
+ "@ai-sdk/xai": "2.0.42",
76
+ "@bincode-ai/plugin": "workspace:*",
77
+ "@bincode-ai/script": "workspace:*",
78
+ "@bincode-ai/sdk": "workspace:*",
79
+ "@bincode-ai/util": "workspace:*",
80
+ "@clack/prompts": "1.0.0-alpha.1",
81
+ "@hono/standard-validator": "0.1.5",
82
+ "@hono/zod-validator": "catalog:",
83
+ "@modelcontextprotocol/sdk": "1.15.1",
84
+ "@octokit/graphql": "9.0.2",
85
+ "@octokit/rest": "catalog:",
86
+ "@openauthjs/openauth": "catalog:",
87
+ "@openrouter/ai-sdk-provider": "1.5.2",
88
+ "@opentui/core": "0.1.63",
89
+ "@opentui/solid": "0.1.63",
90
+ "@parcel/watcher": "2.5.1",
91
+ "@pierre/diffs": "catalog:",
92
+ "@solid-primitives/event-bus": "1.1.2",
93
+ "@standard-schema/spec": "1.0.0",
94
+ "@zip.js/zip.js": "2.7.62",
95
+ "ai": "catalog:",
96
+ "bun-pty": "0.4.2",
97
+ "chokidar": "4.0.3",
98
+ "clipboardy": "4.0.0",
99
+ "decimal.js": "10.5.0",
100
+ "diff": "catalog:",
101
+ "fuzzysort": "3.1.0",
102
+ "gray-matter": "4.0.3",
103
+ "hono": "catalog:",
104
+ "hono-openapi": "catalog:",
105
+ "ignore": "7.0.5",
106
+ "jsonc-parser": "3.3.1",
107
+ "minimatch": "10.0.3",
108
+ "open": "10.1.2",
109
+ "opentui-spinner": "0.0.6",
110
+ "partial-json": "0.1.7",
111
+ "remeda": "catalog:",
112
+ "solid-js": "catalog:",
113
+ "strip-ansi": "7.1.2",
114
+ "tree-sitter-bash": "0.25.0",
115
+ "turndown": "7.2.0",
116
+ "ulid": "catalog:",
117
+ "vscode-jsonrpc": "8.2.1",
118
+ "web-tree-sitter": "0.25.10",
119
+ "xdg-basedir": "5.1.0",
120
+ "yargs": "18.0.0",
121
+ "zod": "catalog:",
122
+ "zod-to-json-schema": "3.24.5"
123
+ }
124
+ }
@@ -0,0 +1,239 @@
1
+ export default {
2
+ // NOTE: FOR markdown, javascript and typescript, we use the opentui built-in parsers
3
+ // Warn: when taking queries from the nvim-treesitter repo, make sure to include the query dependencies as well
4
+ // marked with for example `; inherits: ecma` at the top of the file. Just put the dependencies before the actual query.
5
+ // ALSO: Some queries use breaking changes in the nvim-treesitter repo, that are not compatible with the (web-)tree-sitter parser.
6
+ parsers: [
7
+ {
8
+ filetype: "python",
9
+ wasm: "https://github.com/tree-sitter/tree-sitter-python/releases/download/v0.23.6/tree-sitter-python.wasm",
10
+ queries: {
11
+ highlights: [
12
+ // NOTE: This nvim-treesitter query is currently broken, because the parser is not compatible with the query apparently.
13
+ // it is using "except" nodes that the parser is complaining about, but it has been in the query for 3+ years.
14
+ // Unclear.
15
+ // "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/python/highlights.scm",
16
+ "https://github.com/tree-sitter/tree-sitter-python/raw/refs/heads/master/queries/highlights.scm",
17
+ ],
18
+ locals: [
19
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/python/locals.scm",
20
+ ],
21
+ },
22
+ },
23
+ {
24
+ filetype: "rust",
25
+ wasm: "https://github.com/tree-sitter/tree-sitter-rust/releases/download/v0.24.0/tree-sitter-rust.wasm",
26
+ queries: {
27
+ highlights: [
28
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/rust/highlights.scm",
29
+ ],
30
+ locals: [
31
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/rust/locals.scm",
32
+ ],
33
+ },
34
+ },
35
+ {
36
+ filetype: "go",
37
+ wasm: "https://github.com/tree-sitter/tree-sitter-go/releases/download/v0.25.0/tree-sitter-go.wasm",
38
+ queries: {
39
+ highlights: [
40
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/go/highlights.scm",
41
+ ],
42
+ locals: [
43
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/go/locals.scm",
44
+ ],
45
+ },
46
+ },
47
+ {
48
+ filetype: "cpp",
49
+ wasm: "https://github.com/tree-sitter/tree-sitter-cpp/releases/download/v0.23.4/tree-sitter-cpp.wasm",
50
+ queries: {
51
+ highlights: [
52
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/cpp/highlights.scm",
53
+ ],
54
+ locals: [
55
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/cpp/locals.scm",
56
+ ],
57
+ },
58
+ },
59
+ {
60
+ filetype: "csharp",
61
+ wasm: "https://github.com/tree-sitter/tree-sitter-c-sharp/releases/download/v0.23.1/tree-sitter-c_sharp.wasm",
62
+ queries: {
63
+ highlights: [
64
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/c_sharp/highlights.scm",
65
+ ],
66
+ locals: [
67
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/c_sharp/locals.scm",
68
+ ],
69
+ },
70
+ },
71
+ {
72
+ filetype: "bash",
73
+ wasm: "https://github.com/tree-sitter/tree-sitter-bash/releases/download/v0.25.0/tree-sitter-bash.wasm",
74
+ queries: {
75
+ highlights: [
76
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/bash/highlights.scm",
77
+ ],
78
+ },
79
+ },
80
+ {
81
+ filetype: "c",
82
+ wasm: "https://github.com/tree-sitter/tree-sitter-c/releases/download/v0.24.1/tree-sitter-c.wasm",
83
+ queries: {
84
+ highlights: [
85
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/c/highlights.scm",
86
+ ],
87
+ locals: [
88
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/c/locals.scm",
89
+ ],
90
+ },
91
+ },
92
+ {
93
+ filetype: "java",
94
+ wasm: "https://github.com/tree-sitter/tree-sitter-java/releases/download/v0.23.5/tree-sitter-java.wasm",
95
+ queries: {
96
+ highlights: [
97
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/java/highlights.scm",
98
+ ],
99
+ locals: [
100
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/java/locals.scm",
101
+ ],
102
+ },
103
+ },
104
+ {
105
+ filetype: "ruby",
106
+ wasm: "https://github.com/tree-sitter/tree-sitter-ruby/releases/download/v0.23.1/tree-sitter-ruby.wasm",
107
+ queries: {
108
+ highlights: [
109
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/ruby/highlights.scm",
110
+ ],
111
+ locals: [
112
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/ruby/locals.scm",
113
+ ],
114
+ },
115
+ },
116
+ {
117
+ filetype: "php",
118
+ wasm: "https://github.com/tree-sitter/tree-sitter-php/releases/download/v0.24.2/tree-sitter-php.wasm",
119
+ queries: {
120
+ highlights: [
121
+ // NOTE: This nvim-treesitter query is currently broken, because the parser is not compatible with the query apparently.
122
+ // "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/php/highlights.scm",
123
+ "https://github.com/tree-sitter/tree-sitter-php/raw/refs/heads/master/queries/highlights.scm",
124
+ ],
125
+ },
126
+ },
127
+ {
128
+ filetype: "scala",
129
+ wasm: "https://github.com/tree-sitter/tree-sitter-scala/releases/download/v0.24.0/tree-sitter-scala.wasm",
130
+ queries: {
131
+ highlights: [
132
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/scala/highlights.scm",
133
+ ],
134
+ },
135
+ },
136
+ {
137
+ filetype: "html",
138
+ wasm: "https://github.com/tree-sitter/tree-sitter-html/releases/download/v0.23.2/tree-sitter-html.wasm",
139
+ queries: {
140
+ highlights: [
141
+ // NOTE: This nvim-treesitter query is currently broken, because the parser is not compatible with the query apparently.
142
+ // "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/html/highlights.scm",
143
+ "https://github.com/tree-sitter/tree-sitter-html/raw/refs/heads/master/queries/highlights.scm",
144
+ ],
145
+ // TODO: Injections not working for some reason
146
+ // injections: [
147
+ // "https://github.com/tree-sitter/tree-sitter-html/raw/refs/heads/master/queries/injections.scm",
148
+ // ],
149
+ },
150
+ // injectionMapping: {
151
+ // nodeTypes: {
152
+ // script_element: "javascript",
153
+ // style_element: "css",
154
+ // },
155
+ // infoStringMap: {
156
+ // javascript: "javascript",
157
+ // css: "css",
158
+ // },
159
+ // },
160
+ },
161
+ {
162
+ filetype: "json",
163
+ wasm: "https://github.com/tree-sitter/tree-sitter-json/releases/download/v0.24.8/tree-sitter-json.wasm",
164
+ queries: {
165
+ highlights: [
166
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/json/highlights.scm",
167
+ ],
168
+ },
169
+ },
170
+ {
171
+ filetype: "yaml",
172
+ wasm: "https://github.com/tree-sitter-grammars/tree-sitter-yaml/releases/download/v0.7.2/tree-sitter-yaml.wasm",
173
+ queries: {
174
+ highlights: [
175
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/yaml/highlights.scm",
176
+ ],
177
+ },
178
+ },
179
+ {
180
+ filetype: "haskell",
181
+ wasm: "https://github.com/tree-sitter/tree-sitter-haskell/releases/download/v0.23.1/tree-sitter-haskell.wasm",
182
+ queries: {
183
+ highlights: [
184
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/haskell/highlights.scm",
185
+ ],
186
+ },
187
+ },
188
+ {
189
+ filetype: "css",
190
+ wasm: "https://github.com/tree-sitter/tree-sitter-css/releases/download/v0.25.0/tree-sitter-css.wasm",
191
+ queries: {
192
+ highlights: [
193
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/css/highlights.scm",
194
+ ],
195
+ },
196
+ },
197
+ {
198
+ filetype: "julia",
199
+ wasm: "https://github.com/tree-sitter/tree-sitter-julia/releases/download/v0.23.1/tree-sitter-julia.wasm",
200
+ queries: {
201
+ highlights: [
202
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/julia/highlights.scm",
203
+ ],
204
+ },
205
+ },
206
+ {
207
+ filetype: "ocaml",
208
+ wasm: "https://github.com/tree-sitter/tree-sitter-ocaml/releases/download/v0.24.2/tree-sitter-ocaml.wasm",
209
+ queries: {
210
+ highlights: [
211
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/ocaml/highlights.scm",
212
+ ],
213
+ },
214
+ },
215
+ {
216
+ filetype: "clojure",
217
+ wasm: "https://github.com/sogaiu/tree-sitter-clojure/releases/download/v0.0.13/tree-sitter-clojure.wasm",
218
+ queries: {
219
+ highlights: [
220
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/clojure/highlights.scm",
221
+ ],
222
+ },
223
+ },
224
+ {
225
+ filetype: "swift",
226
+ wasm: "https://github.com/alex-pinkus/tree-sitter-swift/releases/download/0.7.1/tree-sitter-swift.wasm",
227
+ queries: {
228
+ highlights: [
229
+ // NOTE: Using parser repo queries instead of nvim-treesitter due to incompatible #lua-match? predicates
230
+ // "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/highlights.scm
231
+ "https://raw.githubusercontent.com/alex-pinkus/tree-sitter-swift/main/queries/highlights.scm",
232
+ ],
233
+ locals: [
234
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/swift/locals.scm",
235
+ ],
236
+ },
237
+ },
238
+ ],
239
+ }
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import solidPlugin from "../node_modules/@opentui/solid/scripts/solid-plugin"
4
+ import path from "path"
5
+ import fs from "fs"
6
+ import { $ } from "bun"
7
+ import { fileURLToPath } from "url"
8
+
9
+ const __filename = fileURLToPath(import.meta.url)
10
+ const __dirname = path.dirname(__filename)
11
+ const dir = path.resolve(__dirname, "..")
12
+
13
+ process.chdir(dir)
14
+
15
+ import pkg from "../package.json"
16
+ import { Script } from "@bincode-ai/script"
17
+
18
+ const singleFlag = process.argv.includes("--single")
19
+ const baselineFlag = process.argv.includes("--baseline")
20
+ const skipInstall = process.argv.includes("--skip-install")
21
+
22
+ const allTargets: {
23
+ os: string
24
+ arch: "arm64" | "x64"
25
+ abi?: "musl"
26
+ avx2?: false
27
+ }[] = [
28
+ {
29
+ os: "linux",
30
+ arch: "arm64",
31
+ },
32
+ {
33
+ os: "linux",
34
+ arch: "x64",
35
+ },
36
+ {
37
+ os: "linux",
38
+ arch: "x64",
39
+ avx2: false,
40
+ },
41
+ {
42
+ os: "linux",
43
+ arch: "arm64",
44
+ abi: "musl",
45
+ },
46
+ {
47
+ os: "linux",
48
+ arch: "x64",
49
+ abi: "musl",
50
+ },
51
+ {
52
+ os: "linux",
53
+ arch: "x64",
54
+ abi: "musl",
55
+ avx2: false,
56
+ },
57
+ {
58
+ os: "darwin",
59
+ arch: "arm64",
60
+ },
61
+ {
62
+ os: "darwin",
63
+ arch: "x64",
64
+ },
65
+ {
66
+ os: "darwin",
67
+ arch: "x64",
68
+ avx2: false,
69
+ },
70
+ {
71
+ os: "win32",
72
+ arch: "x64",
73
+ },
74
+ {
75
+ os: "win32",
76
+ arch: "x64",
77
+ avx2: false,
78
+ },
79
+ ]
80
+
81
+ const targets = singleFlag
82
+ ? allTargets.filter((item) => {
83
+ if (item.os !== process.platform || item.arch !== process.arch) {
84
+ return false
85
+ }
86
+
87
+ // When building for the current platform, prefer a single native binary by default.
88
+ // Baseline binaries require additional Bun artifacts and can be flaky to download.
89
+ if (item.avx2 === false) {
90
+ return baselineFlag
91
+ }
92
+
93
+ return true
94
+ })
95
+ : allTargets
96
+
97
+ await $`rm -rf dist`
98
+
99
+ const binaries: Record<string, string> = {}
100
+ if (!skipInstall) {
101
+ await $`bun install --os="*" --cpu="*" @opentui/core@${pkg.dependencies["@opentui/core"]}`
102
+ await $`bun install --os="*" --cpu="*" @parcel/watcher@${pkg.dependencies["@parcel/watcher"]}`
103
+ }
104
+ for (const item of targets) {
105
+ const name = [
106
+ pkg.name,
107
+ // changing to win32 flags npm for some reason
108
+ item.os === "win32" ? "windows" : item.os,
109
+ item.arch,
110
+ item.avx2 === false ? "baseline" : undefined,
111
+ item.abi === undefined ? undefined : item.abi,
112
+ ]
113
+ .filter(Boolean)
114
+ .join("-")
115
+ console.log(`building ${name}`)
116
+ await $`mkdir -p dist/${name}/bin`
117
+
118
+ const parserWorker = fs.realpathSync(path.resolve(dir, "./node_modules/@opentui/core/parser.worker.js"))
119
+ const workerPath = "./src/cli/cmd/tui/worker.ts"
120
+
121
+ // Use platform-specific bunfs root path based on target OS
122
+ const bunfsRoot = item.os === "win32" ? "B:/~BUN/root/" : "/$bunfs/root/"
123
+ const workerRelativePath = path.relative(dir, parserWorker).replaceAll("\\", "/")
124
+
125
+ await Bun.build({
126
+ conditions: ["browser"],
127
+ tsconfig: "./tsconfig.json",
128
+ plugins: [solidPlugin],
129
+ sourcemap: "external",
130
+ compile: {
131
+ autoloadBunfig: false,
132
+ autoloadDotenv: false,
133
+ //@ts-ignore (bun types aren't up to date)
134
+ autoloadTsconfig: true,
135
+ autoloadPackageJson: true,
136
+ target: name.replace(pkg.name, "bun") as any,
137
+ outfile: `dist/${name}/bin/bincode`,
138
+ execArgv: [`--user-agent=bincode/${Script.version}`, "--"],
139
+ windows: {},
140
+ },
141
+ entrypoints: ["./src/index.ts", parserWorker, workerPath],
142
+ define: {
143
+ BINCODE_VERSION: `'${Script.version}'`,
144
+ OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + workerRelativePath,
145
+ BINCODE_WORKER_PATH: workerPath,
146
+ BINCODE_CHANNEL: `'${Script.channel}'`,
147
+ BINCODE_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "",
148
+ },
149
+ })
150
+
151
+ await $`rm -rf ./dist/${name}/bin/tui`
152
+ await Bun.file(`dist/${name}/package.json`).write(
153
+ JSON.stringify(
154
+ {
155
+ name,
156
+ version: Script.version,
157
+ os: [item.os],
158
+ cpu: [item.arch],
159
+ },
160
+ null,
161
+ 2,
162
+ ),
163
+ )
164
+ binaries[name] = Script.version
165
+ }
166
+
167
+ export { binaries }