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
@@ -0,0 +1,98 @@
1
+ import type { Argv } from "yargs"
2
+ import { Session } from "../../session"
3
+ import { cmd } from "./cmd"
4
+ import { bootstrap } from "../bootstrap"
5
+ import { Storage } from "../../storage/storage"
6
+ import { Instance } from "../../project/instance"
7
+ import { EOL } from "os"
8
+
9
+ export const ImportCommand = cmd({
10
+ command: "import <file>",
11
+ describe: "import session data from JSON file or URL",
12
+ builder: (yargs: Argv) => {
13
+ return yargs.positional("file", {
14
+ describe: "path to JSON file or bincode.ai share URL",
15
+ type: "string",
16
+ demandOption: true,
17
+ })
18
+ },
19
+ handler: async (args) => {
20
+ await bootstrap(process.cwd(), async () => {
21
+ let exportData:
22
+ | {
23
+ info: Session.Info
24
+ messages: Array<{
25
+ info: any
26
+ parts: any[]
27
+ }>
28
+ }
29
+ | undefined
30
+
31
+ const isUrl = args.file.startsWith("http://") || args.file.startsWith("https://")
32
+
33
+ if (isUrl) {
34
+ const urlMatch = args.file.match(/https?:\/\/bincode\.ai\/s\/([a-zA-Z0-9_-]+)/)
35
+ if (!urlMatch) {
36
+ process.stdout.write(`Invalid URL format. Expected: https://bincode.ai/s/<slug>`)
37
+ process.stdout.write(EOL)
38
+ return
39
+ }
40
+
41
+ const slug = urlMatch[1]
42
+ const response = await fetch(`https://api.bincode.ai/share_data?id=${slug}`)
43
+
44
+ if (!response.ok) {
45
+ process.stdout.write(`Failed to fetch share data: ${response.statusText}`)
46
+ process.stdout.write(EOL)
47
+ return
48
+ }
49
+
50
+ const data = await response.json()
51
+
52
+ if (!data.info || !data.messages || Object.keys(data.messages).length === 0) {
53
+ process.stdout.write(`Share not found: ${slug}`)
54
+ process.stdout.write(EOL)
55
+ return
56
+ }
57
+
58
+ exportData = {
59
+ info: data.info,
60
+ messages: Object.values(data.messages).map((msg: any) => {
61
+ const { parts, ...info } = msg
62
+ return {
63
+ info,
64
+ parts,
65
+ }
66
+ }),
67
+ }
68
+ } else {
69
+ const file = Bun.file(args.file)
70
+ exportData = await file.json().catch(() => {})
71
+ if (!exportData) {
72
+ process.stdout.write(`File not found: ${args.file}`)
73
+ process.stdout.write(EOL)
74
+ return
75
+ }
76
+ }
77
+
78
+ if (!exportData) {
79
+ process.stdout.write(`Failed to read session data`)
80
+ process.stdout.write(EOL)
81
+ return
82
+ }
83
+
84
+ await Storage.write(["session", Instance.project.id, exportData.info.id], exportData.info)
85
+
86
+ for (const msg of exportData.messages) {
87
+ await Storage.write(["message", exportData.info.id, msg.info.id], msg.info)
88
+
89
+ for (const part of msg.parts) {
90
+ await Storage.write(["part", msg.info.id, part.id], part)
91
+ }
92
+ }
93
+
94
+ process.stdout.write(`Imported session: ${exportData.info.id}`)
95
+ process.stdout.write(EOL)
96
+ })
97
+ },
98
+ })
@@ -0,0 +1,112 @@
1
+ import { cmd } from "./cmd"
2
+ import { Instance } from "../../project/instance"
3
+ import * as prompts from "@clack/prompts"
4
+ import { UI } from "../ui"
5
+ import { BinericLogin } from "../../auth/bineric-login"
6
+ import { Server } from "../../server/server"
7
+
8
+ async function startBincodeServer(hostname: string, port: number) {
9
+ const server = Server.listen({ port, hostname })
10
+ prompts.log.success(`Server started on http://${server.hostname}:${server.port}`)
11
+ prompts.log.info("Press Ctrl+C to stop the server")
12
+ prompts.outro("Server is running")
13
+ await new Promise(() => {})
14
+ await server.stop()
15
+ }
16
+
17
+ export const LoginCommand = cmd({
18
+ command: "login",
19
+ describe: "log in to Bincode CLI and start server",
20
+ builder: (yargs) =>
21
+ yargs
22
+ .option("no-server", {
23
+ type: "boolean",
24
+ describe: "don't start server after login",
25
+ default: false,
26
+ })
27
+ .option("port", {
28
+ alias: ["p"],
29
+ type: "number",
30
+ describe: "port to listen on (when starting server)",
31
+ default: 4096,
32
+ })
33
+ .option("hostname", {
34
+ type: "string",
35
+ describe: "hostname to listen on (when starting server)",
36
+ default: "127.0.0.1",
37
+ }),
38
+ async handler(args) {
39
+ await Instance.provide({
40
+ directory: process.cwd(),
41
+ async fn() {
42
+ UI.empty()
43
+ prompts.intro("Bincode CLI Login")
44
+
45
+ try {
46
+ const isAlreadyLoggedIn = await BinericLogin.hasApiKey()
47
+
48
+ if (!isAlreadyLoggedIn) {
49
+ const baseUrl = await BinericLogin.getBaseUrl()
50
+ const { token } = await BinericLogin.login(baseUrl)
51
+ await BinericLogin.updateConfig(token)
52
+ prompts.log.success("Logged in successfully")
53
+ await BinericLogin.stop()
54
+ } else {
55
+ prompts.log.info("Already logged in. Skipping login...")
56
+ }
57
+
58
+ if (!args.noServer) {
59
+ const { Filesystem } = await import("../../util/filesystem")
60
+ const packageJsonPath = await Filesystem.findUp("package.json", process.cwd(), undefined)
61
+
62
+ if (packageJsonPath.length > 0) {
63
+ const packageJson = await Bun.file(packageJsonPath[0]).json().catch(() => null)
64
+
65
+ if (packageJson?.scripts?.dev) {
66
+ prompts.log.info("Found project with dev script. Starting development server...")
67
+ const proc = Bun.spawn({
68
+ cmd: ["bun", "run", "dev"],
69
+ cwd: process.cwd(),
70
+ stdout: "inherit",
71
+ stderr: "inherit",
72
+ stdin: "inherit",
73
+ })
74
+
75
+ prompts.log.success("Project started in development mode")
76
+ prompts.log.info("Press Ctrl+C to stop the server")
77
+ prompts.outro("Project is running")
78
+ await proc.exited
79
+ } else {
80
+ prompts.log.info("No dev script found. Starting Bincode server...")
81
+ try {
82
+ await startBincodeServer(args.hostname || "127.0.0.1", args.port || 4096)
83
+ } catch (serverError) {
84
+ prompts.log.error(`Failed to start server: ${serverError instanceof Error ? serverError.message : String(serverError)}`)
85
+ prompts.log.info("You can start the server manually with: bincode serve")
86
+ prompts.outro("Login successful")
87
+ }
88
+ }
89
+ } else {
90
+ prompts.log.info("No project found. Starting Bincode server...")
91
+ try {
92
+ await startBincodeServer(args.hostname || "127.0.0.1", args.port || 4096)
93
+ } catch (serverError) {
94
+ prompts.log.error(`Failed to start server: ${serverError instanceof Error ? serverError.message : String(serverError)}`)
95
+ prompts.log.info("You can start the server manually with: bincode serve")
96
+ prompts.outro("Login successful")
97
+ }
98
+ }
99
+ } else {
100
+ prompts.outro("Login successful! Run 'bun run dev' to start your project or 'bincode serve' to start the server.")
101
+ }
102
+ } catch (error) {
103
+ prompts.log.error(`Login failed: ${error instanceof Error ? error.message : String(error)}`)
104
+ await BinericLogin.stop()
105
+ prompts.outro("Login failed")
106
+ process.exit(1)
107
+ }
108
+ },
109
+ })
110
+ },
111
+ })
112
+
@@ -0,0 +1,38 @@
1
+ import { cmd } from "./cmd"
2
+ import { Instance } from "../../project/instance"
3
+ import * as prompts from "@clack/prompts"
4
+ import { UI } from "../ui"
5
+ import { BinericLogin } from "../../auth/bineric-login"
6
+
7
+ export const LogoutCommand = cmd({
8
+ command: "logout",
9
+ describe: "log out from Bincode CLI",
10
+ async handler() {
11
+ await Instance.provide({
12
+ directory: process.cwd(),
13
+ async fn() {
14
+ UI.empty()
15
+ prompts.intro("Bincode CLI Logout")
16
+
17
+ try {
18
+ const isLoggedIn = await BinericLogin.hasApiKey()
19
+
20
+ if (!isLoggedIn) {
21
+ prompts.log.warn("You are not logged in")
22
+ prompts.outro("Done")
23
+ return
24
+ }
25
+
26
+ await BinericLogin.removeToken()
27
+ prompts.log.success("Logged out successfully")
28
+ prompts.outro("Done")
29
+ } catch (error) {
30
+ prompts.log.error(`Logout failed: ${error instanceof Error ? error.message : String(error)}`)
31
+ prompts.outro("Logout failed")
32
+ process.exit(1)
33
+ }
34
+ },
35
+ })
36
+ },
37
+ })
38
+