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.
- package/AGENTS.md +27 -0
- package/README.md +15 -0
- package/bin/bincode +98 -0
- package/bunfig.toml +4 -0
- package/package.json +124 -0
- package/parsers-config.ts +239 -0
- package/script/build.ts +167 -0
- package/script/postinstall.mjs +206 -0
- package/script/publish.ts +99 -0
- package/script/schema.ts +47 -0
- package/src/acp/README.md +164 -0
- package/src/acp/agent.ts +1051 -0
- package/src/acp/session.ts +101 -0
- package/src/acp/types.ts +22 -0
- package/src/agent/agent.ts +398 -0
- package/src/agent/generate.txt +75 -0
- package/src/agent/prompt/compaction.txt +12 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +10 -0
- package/src/agent/prompt/title.txt +36 -0
- package/src/auth/bineric-login.ts +506 -0
- package/src/auth/index.ts +70 -0
- package/src/bun/index.ts +114 -0
- package/src/bus/bus-event.ts +43 -0
- package/src/bus/global.ts +10 -0
- package/src/bus/index.ts +105 -0
- package/src/cli/auth-check.ts +61 -0
- package/src/cli/bootstrap.ts +21 -0
- package/src/cli/cmd/acp.ts +88 -0
- package/src/cli/cmd/agent.ts +256 -0
- package/src/cli/cmd/auth.ts +436 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/debug/config.ts +15 -0
- package/src/cli/cmd/debug/file.ts +91 -0
- package/src/cli/cmd/debug/index.ts +43 -0
- package/src/cli/cmd/debug/lsp.ts +48 -0
- package/src/cli/cmd/debug/ripgrep.ts +83 -0
- package/src/cli/cmd/debug/scrap.ts +15 -0
- package/src/cli/cmd/debug/skill.ts +15 -0
- package/src/cli/cmd/debug/snapshot.ts +48 -0
- package/src/cli/cmd/export.ts +88 -0
- package/src/cli/cmd/generate.ts +38 -0
- package/src/cli/cmd/github.ts +1399 -0
- package/src/cli/cmd/import.ts +98 -0
- package/src/cli/cmd/login.ts +112 -0
- package/src/cli/cmd/logout.ts +38 -0
- package/src/cli/cmd/mcp.ts +654 -0
- package/src/cli/cmd/models.ts +77 -0
- package/src/cli/cmd/pr.ts +112 -0
- package/src/cli/cmd/run.ts +368 -0
- package/src/cli/cmd/serve.ts +31 -0
- package/src/cli/cmd/session.ts +106 -0
- package/src/cli/cmd/stats.ts +298 -0
- package/src/cli/cmd/tui/app.tsx +669 -0
- package/src/cli/cmd/tui/attach.ts +30 -0
- package/src/cli/cmd/tui/component/border.tsx +21 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-command.tsx +123 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +223 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +224 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +102 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +162 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
- package/src/cli/cmd/tui/component/logo.tsx +32 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +560 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1052 -0
- package/src/cli/cmd/tui/context/args.tsx +14 -0
- package/src/cli/cmd/tui/context/directory.ts +13 -0
- package/src/cli/cmd/tui/context/exit.tsx +23 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/keybind.tsx +101 -0
- package/src/cli/cmd/tui/context/kv.tsx +49 -0
- package/src/cli/cmd/tui/context/local.tsx +339 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +46 -0
- package/src/cli/cmd/tui/context/sdk.tsx +74 -0
- package/src/cli/cmd/tui/context/sync.tsx +372 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/bincode.json +245 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +95 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +227 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
- package/src/cli/cmd/tui/context/theme/orng.json +245 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme.tsx +1109 -0
- package/src/cli/cmd/tui/event.ts +40 -0
- package/src/cli/cmd/tui/routes/home.tsx +105 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +64 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +109 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +88 -0
- package/src/cli/cmd/tui/routes/session/header.tsx +141 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +1888 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +321 -0
- package/src/cli/cmd/tui/spawn.ts +60 -0
- package/src/cli/cmd/tui/thread.ts +120 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +77 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +330 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +170 -0
- package/src/cli/cmd/tui/ui/spinner.ts +368 -0
- package/src/cli/cmd/tui/ui/toast.tsx +100 -0
- package/src/cli/cmd/tui/util/clipboard.ts +127 -0
- package/src/cli/cmd/tui/util/editor.ts +32 -0
- package/src/cli/cmd/tui/util/terminal.ts +114 -0
- package/src/cli/cmd/tui/worker.ts +63 -0
- package/src/cli/cmd/uninstall.ts +344 -0
- package/src/cli/cmd/upgrade.ts +67 -0
- package/src/cli/cmd/web.ts +84 -0
- package/src/cli/error.ts +55 -0
- package/src/cli/ui.ts +84 -0
- package/src/cli/upgrade.ts +25 -0
- package/src/command/index.ts +80 -0
- package/src/command/template/initialize.txt +10 -0
- package/src/command/template/review.txt +97 -0
- package/src/config/config.ts +995 -0
- package/src/config/markdown.ts +41 -0
- package/src/env/index.ts +26 -0
- package/src/file/ignore.ts +83 -0
- package/src/file/index.ts +328 -0
- package/src/file/ripgrep.ts +393 -0
- package/src/file/time.ts +64 -0
- package/src/file/watcher.ts +103 -0
- package/src/flag/flag.ts +46 -0
- package/src/format/formatter.ts +315 -0
- package/src/format/index.ts +137 -0
- package/src/global/index.ts +52 -0
- package/src/id/id.ts +73 -0
- package/src/ide/index.ts +76 -0
- package/src/index.ts +217 -0
- package/src/installation/index.ts +196 -0
- package/src/lsp/client.ts +229 -0
- package/src/lsp/index.ts +485 -0
- package/src/lsp/language.ts +116 -0
- package/src/lsp/server.ts +1895 -0
- package/src/mcp/auth.ts +135 -0
- package/src/mcp/index.ts +654 -0
- package/src/mcp/oauth-callback.ts +200 -0
- package/src/mcp/oauth-provider.ts +154 -0
- package/src/patch/index.ts +622 -0
- package/src/permission/index.ts +199 -0
- package/src/plugin/index.ts +101 -0
- package/src/project/bootstrap.ts +31 -0
- package/src/project/instance.ts +78 -0
- package/src/project/project.ts +221 -0
- package/src/project/state.ts +65 -0
- package/src/project/vcs.ts +76 -0
- package/src/provider/auth.ts +143 -0
- package/src/provider/models-macro.ts +11 -0
- package/src/provider/models.ts +106 -0
- package/src/provider/provider.ts +1071 -0
- package/src/provider/sdk/openai-compatible/src/README.md +5 -0
- package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
- package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +101 -0
- package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
- package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1713 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
- package/src/provider/transform.ts +455 -0
- package/src/pty/index.ts +231 -0
- package/src/server/error.ts +36 -0
- package/src/server/project.ts +79 -0
- package/src/server/server.ts +2642 -0
- package/src/server/tui.ts +71 -0
- package/src/session/compaction.ts +223 -0
- package/src/session/index.ts +458 -0
- package/src/session/llm.ts +201 -0
- package/src/session/message-v2.ts +659 -0
- package/src/session/message.ts +189 -0
- package/src/session/processor.ts +409 -0
- package/src/session/prompt/anthropic-20250930.txt +166 -0
- package/src/session/prompt/anthropic.txt +104 -0
- package/src/session/prompt/anthropic_spoof.txt +1 -0
- package/src/session/prompt/beast.txt +147 -0
- package/src/session/prompt/build-switch.txt +5 -0
- package/src/session/prompt/codex.txt +318 -0
- package/src/session/prompt/copilot-gpt-5.txt +143 -0
- package/src/session/prompt/gemini.txt +155 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
- package/src/session/prompt/plan.txt +26 -0
- package/src/session/prompt/polaris.txt +106 -0
- package/src/session/prompt/qwen.txt +109 -0
- package/src/session/prompt.ts +1446 -0
- package/src/session/retry.ts +86 -0
- package/src/session/revert.ts +108 -0
- package/src/session/status.ts +76 -0
- package/src/session/summary.ts +194 -0
- package/src/session/system.ts +120 -0
- package/src/session/todo.ts +37 -0
- package/src/share/share-next.ts +194 -0
- package/src/share/share.ts +87 -0
- package/src/shell/shell.ts +67 -0
- package/src/skill/index.ts +1 -0
- package/src/skill/skill.ts +83 -0
- package/src/snapshot/index.ts +197 -0
- package/src/storage/storage.ts +226 -0
- package/src/tool/bash.ts +306 -0
- package/src/tool/bash.txt +158 -0
- package/src/tool/batch.ts +175 -0
- package/src/tool/batch.txt +24 -0
- package/src/tool/codesearch.ts +138 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/edit.ts +675 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/glob.ts +65 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +121 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +17 -0
- package/src/tool/ls.ts +110 -0
- package/src/tool/ls.txt +1 -0
- package/src/tool/lsp-diagnostics.ts +26 -0
- package/src/tool/lsp-diagnostics.txt +1 -0
- package/src/tool/lsp-hover.ts +31 -0
- package/src/tool/lsp-hover.txt +1 -0
- package/src/tool/lsp.ts +87 -0
- package/src/tool/lsp.txt +19 -0
- package/src/tool/multiedit.ts +46 -0
- package/src/tool/multiedit.txt +41 -0
- package/src/tool/patch.ts +233 -0
- package/src/tool/patch.txt +1 -0
- package/src/tool/read.ts +219 -0
- package/src/tool/read.txt +12 -0
- package/src/tool/registry.ts +162 -0
- package/src/tool/skill.ts +100 -0
- package/src/tool/task.ts +136 -0
- package/src/tool/task.txt +60 -0
- package/src/tool/todo.ts +39 -0
- package/src/tool/todoread.txt +14 -0
- package/src/tool/todowrite.txt +167 -0
- package/src/tool/tool.ts +71 -0
- package/src/tool/webfetch.ts +187 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +150 -0
- package/src/tool/websearch.txt +11 -0
- package/src/tool/write.ts +110 -0
- package/src/tool/write.txt +8 -0
- package/src/util/archive.ts +16 -0
- package/src/util/color.ts +19 -0
- package/src/util/context.ts +25 -0
- package/src/util/defer.ts +12 -0
- package/src/util/eventloop.ts +20 -0
- package/src/util/filesystem.ts +83 -0
- package/src/util/fn.ts +11 -0
- package/src/util/iife.ts +3 -0
- package/src/util/keybind.ts +102 -0
- package/src/util/lazy.ts +11 -0
- package/src/util/locale.ts +81 -0
- package/src/util/lock.ts +98 -0
- package/src/util/log.ts +180 -0
- package/src/util/queue.ts +32 -0
- package/src/util/rpc.ts +42 -0
- package/src/util/scrap.ts +10 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +14 -0
- package/src/util/token.ts +7 -0
- package/src/util/wildcard.ts +54 -0
- 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
|
+
|