chad-code 1.3.1 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -6
- package/package.json +36 -98
- package/AGENTS.md +0 -27
- package/Dockerfile +0 -18
- package/README.npm.md +0 -64
- package/bunfig.toml +0 -7
- package/eslint.config.js +0 -29
- package/parsers-config.ts +0 -253
- package/script/build.ts +0 -167
- package/script/publish-registries.ts +0 -187
- package/script/publish.ts +0 -93
- package/script/schema.ts +0 -47
- package/src/acp/README.md +0 -164
- package/src/acp/agent.ts +0 -1086
- package/src/acp/session.ts +0 -101
- package/src/acp/types.ts +0 -22
- package/src/agent/agent.ts +0 -253
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/compaction.txt +0 -12
- package/src/agent/prompt/explore.txt +0 -18
- package/src/agent/prompt/summary.txt +0 -11
- package/src/agent/prompt/title.txt +0 -36
- package/src/auth/index.ts +0 -70
- package/src/bun/index.ts +0 -130
- package/src/bus/bus-event.ts +0 -43
- package/src/bus/global.ts +0 -10
- package/src/bus/index.ts +0 -105
- package/src/cli/bootstrap.ts +0 -17
- package/src/cli/cmd/acp.ts +0 -69
- package/src/cli/cmd/agent.ts +0 -257
- package/src/cli/cmd/auth.ts +0 -132
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/debug/agent.ts +0 -28
- package/src/cli/cmd/debug/config.ts +0 -15
- package/src/cli/cmd/debug/file.ts +0 -91
- package/src/cli/cmd/debug/index.ts +0 -45
- package/src/cli/cmd/debug/lsp.ts +0 -48
- package/src/cli/cmd/debug/ripgrep.ts +0 -83
- package/src/cli/cmd/debug/scrap.ts +0 -15
- package/src/cli/cmd/debug/skill.ts +0 -15
- package/src/cli/cmd/debug/snapshot.ts +0 -48
- package/src/cli/cmd/export.ts +0 -88
- package/src/cli/cmd/generate.ts +0 -38
- package/src/cli/cmd/github.ts +0 -32
- package/src/cli/cmd/import.ts +0 -98
- package/src/cli/cmd/mcp.ts +0 -670
- package/src/cli/cmd/models.ts +0 -42
- package/src/cli/cmd/pr.ts +0 -112
- package/src/cli/cmd/run.ts +0 -374
- package/src/cli/cmd/serve.ts +0 -16
- package/src/cli/cmd/session.ts +0 -135
- package/src/cli/cmd/stats.ts +0 -402
- package/src/cli/cmd/tui/app.tsx +0 -705
- package/src/cli/cmd/tui/attach.ts +0 -32
- package/src/cli/cmd/tui/component/border.tsx +0 -21
- package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-command.tsx +0 -124
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -232
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -228
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -115
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-status.tsx +0 -162
- package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
- package/src/cli/cmd/tui/component/did-you-know.tsx +0 -85
- package/src/cli/cmd/tui/component/logo.tsx +0 -43
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -654
- package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
- package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1078
- package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
- package/src/cli/cmd/tui/component/tips.ts +0 -92
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/context/args.tsx +0 -14
- package/src/cli/cmd/tui/context/directory.ts +0 -13
- package/src/cli/cmd/tui/context/exit.tsx +0 -23
- package/src/cli/cmd/tui/context/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/keybind.tsx +0 -101
- package/src/cli/cmd/tui/context/kv.tsx +0 -49
- package/src/cli/cmd/tui/context/local.tsx +0 -392
- package/src/cli/cmd/tui/context/prompt.tsx +0 -18
- package/src/cli/cmd/tui/context/route.tsx +0 -46
- package/src/cli/cmd/tui/context/sdk.tsx +0 -75
- package/src/cli/cmd/tui/context/sync.tsx +0 -384
- package/src/cli/cmd/tui/context/theme/aura.json +0 -69
- package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
- package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
- package/src/cli/cmd/tui/context/theme/chad.json +0 -245
- package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
- package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
- package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
- package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
- package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
- package/src/cli/cmd/tui/context/theme/github.json +0 -233
- package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -95
- package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -227
- package/src/cli/cmd/tui/context/theme/material.json +0 -235
- package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
- package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
- package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
- package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
- package/src/cli/cmd/tui/context/theme/nord.json +0 -223
- package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
- package/src/cli/cmd/tui/context/theme/orng.json +0 -245
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
- package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
- package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
- package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
- package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
- package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
- package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
- package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
- package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
- package/src/cli/cmd/tui/context/theme.tsx +0 -1137
- package/src/cli/cmd/tui/event.ts +0 -46
- package/src/cli/cmd/tui/routes/home.tsx +0 -138
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -64
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -109
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
- package/src/cli/cmd/tui/routes/session/footer.tsx +0 -88
- package/src/cli/cmd/tui/routes/session/header.tsx +0 -125
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -1814
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -416
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -318
- package/src/cli/cmd/tui/spawn.ts +0 -48
- package/src/cli/cmd/tui/thread.ts +0 -111
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -57
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -83
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -204
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -38
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -77
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -345
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -171
- package/src/cli/cmd/tui/ui/link.tsx +0 -28
- package/src/cli/cmd/tui/ui/spinner.ts +0 -368
- package/src/cli/cmd/tui/ui/toast.tsx +0 -100
- package/src/cli/cmd/tui/util/clipboard.ts +0 -127
- package/src/cli/cmd/tui/util/editor.ts +0 -32
- package/src/cli/cmd/tui/util/signal.ts +0 -7
- package/src/cli/cmd/tui/util/terminal.ts +0 -114
- package/src/cli/cmd/tui/util/transcript.ts +0 -98
- package/src/cli/cmd/tui/worker.ts +0 -68
- package/src/cli/cmd/uninstall.ts +0 -344
- package/src/cli/cmd/upgrade.ts +0 -67
- package/src/cli/cmd/web.ts +0 -73
- package/src/cli/error.ts +0 -56
- package/src/cli/network.ts +0 -53
- package/src/cli/ui.ts +0 -87
- package/src/cli/upgrade.ts +0 -25
- package/src/command/index.ts +0 -131
- package/src/command/template/initialize.txt +0 -10
- package/src/command/template/review.txt +0 -97
- package/src/config/config.ts +0 -1124
- package/src/config/markdown.ts +0 -41
- package/src/env/index.ts +0 -26
- package/src/file/ignore.ts +0 -83
- package/src/file/index.ts +0 -411
- package/src/file/ripgrep.ts +0 -402
- package/src/file/time.ts +0 -64
- package/src/file/watcher.ts +0 -117
- package/src/flag/flag.ts +0 -52
- package/src/format/formatter.ts +0 -359
- package/src/format/index.ts +0 -137
- package/src/global/index.ts +0 -55
- package/src/id/id.ts +0 -73
- package/src/ide/index.ts +0 -77
- package/src/index.ts +0 -159
- package/src/installation/index.ts +0 -198
- package/src/lsp/client.ts +0 -252
- package/src/lsp/index.ts +0 -485
- package/src/lsp/language.ts +0 -119
- package/src/lsp/server.ts +0 -2023
- package/src/mcp/auth.ts +0 -135
- package/src/mcp/index.ts +0 -874
- package/src/mcp/oauth-callback.ts +0 -200
- package/src/mcp/oauth-provider.ts +0 -154
- package/src/patch/index.ts +0 -622
- package/src/permission/arity.ts +0 -163
- package/src/permission/index.ts +0 -210
- package/src/permission/next.ts +0 -268
- package/src/plugin/index.ts +0 -106
- package/src/project/bootstrap.ts +0 -31
- package/src/project/instance.ts +0 -78
- package/src/project/project.ts +0 -263
- package/src/project/state.ts +0 -65
- package/src/project/vcs.ts +0 -76
- package/src/provider/auth.ts +0 -143
- package/src/provider/models-macro.ts +0 -4
- package/src/provider/models.ts +0 -77
- package/src/provider/provider.ts +0 -516
- package/src/provider/transform.ts +0 -114
- package/src/pty/index.ts +0 -212
- package/src/server/error.ts +0 -36
- package/src/server/mdns.ts +0 -57
- package/src/server/project.ts +0 -79
- package/src/server/server.ts +0 -2866
- package/src/server/tui.ts +0 -71
- package/src/session/compaction.ts +0 -225
- package/src/session/index.ts +0 -469
- package/src/session/llm.ts +0 -213
- package/src/session/message-v2.ts +0 -742
- package/src/session/message.ts +0 -189
- package/src/session/processor.ts +0 -402
- package/src/session/prompt/anthropic-20250930.txt +0 -166
- package/src/session/prompt/anthropic.txt +0 -105
- package/src/session/prompt/anthropic_spoof.txt +0 -1
- package/src/session/prompt/beast.txt +0 -147
- package/src/session/prompt/build-switch.txt +0 -5
- package/src/session/prompt/codex.txt +0 -318
- package/src/session/prompt/copilot-gpt-5.txt +0 -143
- package/src/session/prompt/gemini.txt +0 -155
- package/src/session/prompt/max-steps.txt +0 -16
- package/src/session/prompt/plan-reminder-anthropic.txt +0 -67
- package/src/session/prompt/plan.txt +0 -26
- package/src/session/prompt/qwen.txt +0 -109
- package/src/session/prompt.ts +0 -1621
- package/src/session/retry.ts +0 -90
- package/src/session/revert.ts +0 -108
- package/src/session/status.ts +0 -76
- package/src/session/summary.ts +0 -194
- package/src/session/system.ts +0 -108
- package/src/session/todo.ts +0 -37
- package/src/share/share-next.ts +0 -194
- package/src/share/share.ts +0 -23
- package/src/shell/shell.ts +0 -67
- package/src/skill/index.ts +0 -1
- package/src/skill/skill.ts +0 -124
- package/src/snapshot/index.ts +0 -197
- package/src/storage/storage.ts +0 -226
- package/src/tool/bash.ts +0 -262
- package/src/tool/bash.txt +0 -116
- package/src/tool/batch.ts +0 -175
- package/src/tool/batch.txt +0 -24
- package/src/tool/codesearch.ts +0 -132
- package/src/tool/codesearch.txt +0 -12
- package/src/tool/edit.ts +0 -655
- package/src/tool/edit.txt +0 -10
- package/src/tool/glob.ts +0 -75
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.ts +0 -132
- package/src/tool/grep.txt +0 -8
- package/src/tool/invalid.ts +0 -17
- package/src/tool/ls.ts +0 -119
- package/src/tool/ls.txt +0 -1
- package/src/tool/lsp.ts +0 -94
- package/src/tool/lsp.txt +0 -19
- package/src/tool/multiedit.ts +0 -46
- package/src/tool/multiedit.txt +0 -41
- package/src/tool/patch.ts +0 -210
- package/src/tool/patch.txt +0 -1
- package/src/tool/read.ts +0 -191
- package/src/tool/read.txt +0 -12
- package/src/tool/registry.ts +0 -137
- package/src/tool/skill.ts +0 -77
- package/src/tool/task.ts +0 -167
- package/src/tool/task.txt +0 -60
- package/src/tool/todo.ts +0 -53
- package/src/tool/todoread.txt +0 -14
- package/src/tool/todowrite.txt +0 -167
- package/src/tool/tool.ts +0 -73
- package/src/tool/webfetch.ts +0 -182
- package/src/tool/webfetch.txt +0 -13
- package/src/tool/websearch.ts +0 -144
- package/src/tool/websearch.txt +0 -11
- package/src/tool/write.ts +0 -84
- package/src/tool/write.txt +0 -8
- package/src/util/archive.ts +0 -16
- package/src/util/color.ts +0 -19
- package/src/util/context.ts +0 -25
- package/src/util/defer.ts +0 -12
- package/src/util/eventloop.ts +0 -20
- package/src/util/filesystem.ts +0 -83
- package/src/util/fn.ts +0 -11
- package/src/util/iife.ts +0 -3
- package/src/util/keybind.ts +0 -102
- package/src/util/lazy.ts +0 -18
- package/src/util/locale.ts +0 -81
- package/src/util/lock.ts +0 -98
- package/src/util/log.ts +0 -180
- package/src/util/queue.ts +0 -32
- package/src/util/rpc.ts +0 -42
- package/src/util/scrap.ts +0 -10
- package/src/util/signal.ts +0 -12
- package/src/util/timeout.ts +0 -14
- package/src/util/token.ts +0 -7
- package/src/util/wildcard.ts +0 -54
- package/src/worktree/index.ts +0 -217
- package/sst-env.d.ts +0 -9
- package/test/agent/agent.test.ts +0 -448
- package/test/bun.test.ts +0 -53
- package/test/cli/github-action.test.ts +0 -129
- package/test/cli/github-remote.test.ts +0 -80
- package/test/cli/tui/transcript.test.ts +0 -297
- package/test/config/agent-color.test.ts +0 -66
- package/test/config/config.test.ts +0 -870
- package/test/config/markdown.test.ts +0 -89
- package/test/file/ignore.test.ts +0 -10
- package/test/file/path-traversal.test.ts +0 -115
- package/test/fixture/fixture.ts +0 -45
- package/test/fixture/lsp/fake-lsp-server.js +0 -77
- package/test/ide/ide.test.ts +0 -82
- package/test/keybind.test.ts +0 -421
- package/test/lsp/client.test.ts +0 -95
- package/test/mcp/headers.test.ts +0 -153
- package/test/patch/patch.test.ts +0 -348
- package/test/permission/arity.test.ts +0 -33
- package/test/permission/next.test.ts +0 -652
- package/test/preload.ts +0 -63
- package/test/project/project.test.ts +0 -120
- package/test/provider/amazon-bedrock.test.ts +0 -236
- package/test/provider/provider.test.ts +0 -2127
- package/test/provider/transform.test.ts +0 -980
- package/test/server/session-select.test.ts +0 -78
- package/test/session/compaction.test.ts +0 -251
- package/test/session/message-v2.test.ts +0 -570
- package/test/session/retry.test.ts +0 -131
- package/test/session/revert-compact.test.ts +0 -285
- package/test/session/session.test.ts +0 -71
- package/test/skill/skill.test.ts +0 -185
- package/test/snapshot/snapshot.test.ts +0 -939
- package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
- package/test/tool/bash.test.ts +0 -232
- package/test/tool/grep.test.ts +0 -109
- package/test/tool/patch.test.ts +0 -261
- package/test/tool/read.test.ts +0 -167
- package/test/util/iife.test.ts +0 -36
- package/test/util/lazy.test.ts +0 -50
- package/test/util/timeout.test.ts +0 -21
- package/test/util/wildcard.test.ts +0 -55
- package/tsconfig.json +0 -16
- /package/{script/postinstall.mjs → postinstall.mjs} +0 -0
package/script/build.ts
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
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 "@opencode-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/chad-code`,
|
|
138
|
-
execArgv: [`--user-agent=chad-code/${Script.version}`, "--"],
|
|
139
|
-
windows: {},
|
|
140
|
-
},
|
|
141
|
-
entrypoints: ["./src/index.ts", parserWorker, workerPath],
|
|
142
|
-
define: {
|
|
143
|
-
OPENCODE_VERSION: `'${Script.version}'`,
|
|
144
|
-
OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + workerRelativePath,
|
|
145
|
-
OPENCODE_WORKER_PATH: workerPath,
|
|
146
|
-
OPENCODE_CHANNEL: `'${Script.channel}'`,
|
|
147
|
-
OPENCODE_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 }
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { $ } from "bun"
|
|
3
|
-
import { Script } from "@opencode-ai/script"
|
|
4
|
-
|
|
5
|
-
if (!Script.preview) {
|
|
6
|
-
// Calculate SHA values
|
|
7
|
-
const arm64Sha = await $`sha256sum ./dist/opencode-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
8
|
-
const x64Sha = await $`sha256sum ./dist/opencode-linux-x64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
9
|
-
const macX64Sha = await $`sha256sum ./dist/opencode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
10
|
-
const macArm64Sha = await $`sha256sum ./dist/opencode-darwin-arm64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
11
|
-
|
|
12
|
-
const [pkgver, _subver = ""] = Script.version.split(/(-.*)/, 2)
|
|
13
|
-
|
|
14
|
-
// arch
|
|
15
|
-
const binaryPkgbuild = [
|
|
16
|
-
"# Maintainer: dax",
|
|
17
|
-
"# Maintainer: adam",
|
|
18
|
-
"",
|
|
19
|
-
"pkgname='opencode-bin'",
|
|
20
|
-
`pkgver=${pkgver}`,
|
|
21
|
-
`_subver=${_subver}`,
|
|
22
|
-
"options=('!debug' '!strip')",
|
|
23
|
-
"pkgrel=1",
|
|
24
|
-
"pkgdesc='The AI coding agent built for the terminal.'",
|
|
25
|
-
"url='https://github.com/anomalyco/opencode'",
|
|
26
|
-
"arch=('aarch64' 'x86_64')",
|
|
27
|
-
"license=('MIT')",
|
|
28
|
-
"provides=('opencode')",
|
|
29
|
-
"conflicts=('opencode')",
|
|
30
|
-
"depends=('ripgrep')",
|
|
31
|
-
"",
|
|
32
|
-
`source_aarch64=("\${pkgname}_\${pkgver}_aarch64.tar.gz::https://github.com/anomalyco/opencode/releases/download/v\${pkgver}\${_subver}/opencode-linux-arm64.tar.gz")`,
|
|
33
|
-
`sha256sums_aarch64=('${arm64Sha}')`,
|
|
34
|
-
|
|
35
|
-
`source_x86_64=("\${pkgname}_\${pkgver}_x86_64.tar.gz::https://github.com/anomalyco/opencode/releases/download/v\${pkgver}\${_subver}/opencode-linux-x64.tar.gz")`,
|
|
36
|
-
`sha256sums_x86_64=('${x64Sha}')`,
|
|
37
|
-
"",
|
|
38
|
-
"package() {",
|
|
39
|
-
' install -Dm755 ./opencode "${pkgdir}/usr/bin/opencode"',
|
|
40
|
-
"}",
|
|
41
|
-
"",
|
|
42
|
-
].join("\n")
|
|
43
|
-
|
|
44
|
-
// Source-based PKGBUILD for opencode
|
|
45
|
-
const sourcePkgbuild = [
|
|
46
|
-
"# Maintainer: dax",
|
|
47
|
-
"# Maintainer: adam",
|
|
48
|
-
"",
|
|
49
|
-
"pkgname='opencode'",
|
|
50
|
-
`pkgver=${pkgver}`,
|
|
51
|
-
`_subver=${_subver}`,
|
|
52
|
-
"options=('!debug' '!strip')",
|
|
53
|
-
"pkgrel=1",
|
|
54
|
-
"pkgdesc='The AI coding agent built for the terminal.'",
|
|
55
|
-
"url='https://github.com/anomalyco/opencode'",
|
|
56
|
-
"arch=('aarch64' 'x86_64')",
|
|
57
|
-
"license=('MIT')",
|
|
58
|
-
"provides=('opencode')",
|
|
59
|
-
"conflicts=('opencode-bin')",
|
|
60
|
-
"depends=('ripgrep')",
|
|
61
|
-
"makedepends=('git' 'bun' 'go')",
|
|
62
|
-
"",
|
|
63
|
-
`source=("opencode-\${pkgver}.tar.gz::https://github.com/anomalyco/opencode/archive/v\${pkgver}\${_subver}.tar.gz")`,
|
|
64
|
-
`sha256sums=('SKIP')`,
|
|
65
|
-
"",
|
|
66
|
-
"build() {",
|
|
67
|
-
` cd "opencode-\${pkgver}"`,
|
|
68
|
-
` bun install`,
|
|
69
|
-
" cd ./packages/opencode",
|
|
70
|
-
` OPENCODE_CHANNEL=latest OPENCODE_VERSION=${pkgver} bun run ./script/build.ts --single`,
|
|
71
|
-
"}",
|
|
72
|
-
"",
|
|
73
|
-
"package() {",
|
|
74
|
-
` cd "opencode-\${pkgver}/packages/opencode"`,
|
|
75
|
-
' mkdir -p "${pkgdir}/usr/bin"',
|
|
76
|
-
' target_arch="x64"',
|
|
77
|
-
' case "$CARCH" in',
|
|
78
|
-
' x86_64) target_arch="x64" ;;',
|
|
79
|
-
' aarch64) target_arch="arm64" ;;',
|
|
80
|
-
' *) printf "unsupported architecture: %s\\n" "$CARCH" >&2 ; return 1 ;;',
|
|
81
|
-
" esac",
|
|
82
|
-
' libc=""',
|
|
83
|
-
" if command -v ldd >/dev/null 2>&1; then",
|
|
84
|
-
" if ldd --version 2>&1 | grep -qi musl; then",
|
|
85
|
-
' libc="-musl"',
|
|
86
|
-
" fi",
|
|
87
|
-
" fi",
|
|
88
|
-
' if [ -z "$libc" ] && ls /lib/ld-musl-* >/dev/null 2>&1; then',
|
|
89
|
-
' libc="-musl"',
|
|
90
|
-
" fi",
|
|
91
|
-
' base=""',
|
|
92
|
-
' if [ "$target_arch" = "x64" ]; then',
|
|
93
|
-
" if ! grep -qi avx2 /proc/cpuinfo 2>/dev/null; then",
|
|
94
|
-
' base="-baseline"',
|
|
95
|
-
" fi",
|
|
96
|
-
" fi",
|
|
97
|
-
' bin="dist/opencode-linux-${target_arch}${base}${libc}/bin/opencode"',
|
|
98
|
-
' if [ ! -f "$bin" ]; then',
|
|
99
|
-
' printf "unable to find binary for %s%s%s\\n" "$target_arch" "$base" "$libc" >&2',
|
|
100
|
-
" return 1",
|
|
101
|
-
" fi",
|
|
102
|
-
' install -Dm755 "$bin" "${pkgdir}/usr/bin/opencode"',
|
|
103
|
-
"}",
|
|
104
|
-
"",
|
|
105
|
-
].join("\n")
|
|
106
|
-
|
|
107
|
-
for (const [pkg, pkgbuild] of [
|
|
108
|
-
["opencode-bin", binaryPkgbuild],
|
|
109
|
-
["opencode", sourcePkgbuild],
|
|
110
|
-
]) {
|
|
111
|
-
for (let i = 0; i < 30; i++) {
|
|
112
|
-
try {
|
|
113
|
-
await $`rm -rf ./dist/aur-${pkg}`
|
|
114
|
-
await $`git clone ssh://aur@aur.archlinux.org/${pkg}.git ./dist/aur-${pkg}`
|
|
115
|
-
await $`cd ./dist/aur-${pkg} && git checkout master`
|
|
116
|
-
await Bun.file(`./dist/aur-${pkg}/PKGBUILD`).write(pkgbuild)
|
|
117
|
-
await $`cd ./dist/aur-${pkg} && makepkg --printsrcinfo > .SRCINFO`
|
|
118
|
-
await $`cd ./dist/aur-${pkg} && git add PKGBUILD .SRCINFO`
|
|
119
|
-
await $`cd ./dist/aur-${pkg} && git commit -m "Update to v${Script.version}"`
|
|
120
|
-
await $`cd ./dist/aur-${pkg} && git push`
|
|
121
|
-
break
|
|
122
|
-
} catch (e) {
|
|
123
|
-
continue
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Homebrew formula
|
|
129
|
-
const homebrewFormula = [
|
|
130
|
-
"# typed: false",
|
|
131
|
-
"# frozen_string_literal: true",
|
|
132
|
-
"",
|
|
133
|
-
"# This file was generated by GoReleaser. DO NOT EDIT.",
|
|
134
|
-
"class Opencode < Formula",
|
|
135
|
-
` desc "The AI coding agent built for the terminal."`,
|
|
136
|
-
` homepage "https://github.com/anomalyco/opencode"`,
|
|
137
|
-
` version "${Script.version.split("-")[0]}"`,
|
|
138
|
-
"",
|
|
139
|
-
` depends_on "ripgrep"`,
|
|
140
|
-
"",
|
|
141
|
-
" on_macos do",
|
|
142
|
-
" if Hardware::CPU.intel?",
|
|
143
|
-
` url "https://github.com/anomalyco/opencode/releases/download/v${Script.version}/opencode-darwin-x64.zip"`,
|
|
144
|
-
` sha256 "${macX64Sha}"`,
|
|
145
|
-
"",
|
|
146
|
-
" def install",
|
|
147
|
-
' bin.install "opencode"',
|
|
148
|
-
" end",
|
|
149
|
-
" end",
|
|
150
|
-
" if Hardware::CPU.arm?",
|
|
151
|
-
` url "https://github.com/anomalyco/opencode/releases/download/v${Script.version}/opencode-darwin-arm64.zip"`,
|
|
152
|
-
` sha256 "${macArm64Sha}"`,
|
|
153
|
-
"",
|
|
154
|
-
" def install",
|
|
155
|
-
' bin.install "opencode"',
|
|
156
|
-
" end",
|
|
157
|
-
" end",
|
|
158
|
-
" end",
|
|
159
|
-
"",
|
|
160
|
-
" on_linux do",
|
|
161
|
-
" if Hardware::CPU.intel? and Hardware::CPU.is_64_bit?",
|
|
162
|
-
` url "https://github.com/anomalyco/opencode/releases/download/v${Script.version}/opencode-linux-x64.tar.gz"`,
|
|
163
|
-
` sha256 "${x64Sha}"`,
|
|
164
|
-
" def install",
|
|
165
|
-
' bin.install "opencode"',
|
|
166
|
-
" end",
|
|
167
|
-
" end",
|
|
168
|
-
" if Hardware::CPU.arm? and Hardware::CPU.is_64_bit?",
|
|
169
|
-
` url "https://github.com/anomalyco/opencode/releases/download/v${Script.version}/opencode-linux-arm64.tar.gz"`,
|
|
170
|
-
` sha256 "${arm64Sha}"`,
|
|
171
|
-
" def install",
|
|
172
|
-
' bin.install "opencode"',
|
|
173
|
-
" end",
|
|
174
|
-
" end",
|
|
175
|
-
" end",
|
|
176
|
-
"end",
|
|
177
|
-
"",
|
|
178
|
-
"",
|
|
179
|
-
].join("\n")
|
|
180
|
-
|
|
181
|
-
await $`rm -rf ./dist/homebrew-tap`
|
|
182
|
-
await $`git clone https://${process.env["GITHUB_TOKEN"]}@github.com/sst/homebrew-tap.git ./dist/homebrew-tap`
|
|
183
|
-
await Bun.file("./dist/homebrew-tap/opencode.rb").write(homebrewFormula)
|
|
184
|
-
await $`cd ./dist/homebrew-tap && git add opencode.rb`
|
|
185
|
-
await $`cd ./dist/homebrew-tap && git commit -m "Update to v${Script.version}"`
|
|
186
|
-
await $`cd ./dist/homebrew-tap && git push`
|
|
187
|
-
}
|
package/script/publish.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { $ } from "bun"
|
|
3
|
-
import pkg from "../package.json"
|
|
4
|
-
import { Script } from "@opencode-ai/script"
|
|
5
|
-
import { fileURLToPath } from "url"
|
|
6
|
-
|
|
7
|
-
const dir = fileURLToPath(new URL("..", import.meta.url))
|
|
8
|
-
process.chdir(dir)
|
|
9
|
-
|
|
10
|
-
const { binaries } = await import("./build.ts")
|
|
11
|
-
{
|
|
12
|
-
const name = `${pkg.name}-${process.platform}-${process.arch}`
|
|
13
|
-
console.log(`smoke test: running dist/${name}/bin/chad-code --version`)
|
|
14
|
-
await $`./dist/${name}/bin/chad-code --version`
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
await $`mkdir -p ./dist/${pkg.name}`
|
|
18
|
-
await $`cp -r ./bin ./dist/${pkg.name}/bin`
|
|
19
|
-
await $`cp ./script/postinstall.mjs ./dist/${pkg.name}/postinstall.mjs`
|
|
20
|
-
await $`cp ./README.npm.md ./dist/${pkg.name}/README.md`
|
|
21
|
-
|
|
22
|
-
await Bun.file(`./dist/${pkg.name}/package.json`).write(
|
|
23
|
-
JSON.stringify(
|
|
24
|
-
{
|
|
25
|
-
name: pkg.name,
|
|
26
|
-
version: Script.version,
|
|
27
|
-
description: "AI-powered coding assistant for your terminal",
|
|
28
|
-
license: "MIT",
|
|
29
|
-
keywords: [
|
|
30
|
-
"ai",
|
|
31
|
-
"coding",
|
|
32
|
-
"assistant",
|
|
33
|
-
"cli",
|
|
34
|
-
"terminal",
|
|
35
|
-
"code-generation",
|
|
36
|
-
"developer-tools",
|
|
37
|
-
"chad",
|
|
38
|
-
"llm",
|
|
39
|
-
],
|
|
40
|
-
homepage: "https://corethink.ai",
|
|
41
|
-
repository: {
|
|
42
|
-
type: "git",
|
|
43
|
-
url: "https://github.com/corethink-ai/corethink-code",
|
|
44
|
-
},
|
|
45
|
-
bugs: {
|
|
46
|
-
url: "https://github.com/corethink-ai/corethink-code/issues",
|
|
47
|
-
},
|
|
48
|
-
bin: {
|
|
49
|
-
[pkg.name]: `./bin/${pkg.name}`,
|
|
50
|
-
},
|
|
51
|
-
scripts: {
|
|
52
|
-
postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs",
|
|
53
|
-
},
|
|
54
|
-
preferGlobal: true,
|
|
55
|
-
optionalDependencies: binaries,
|
|
56
|
-
},
|
|
57
|
-
null,
|
|
58
|
-
2,
|
|
59
|
-
),
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
const tags = [Script.channel]
|
|
63
|
-
|
|
64
|
-
const tasks = Object.entries(binaries).map(async ([name]) => {
|
|
65
|
-
if (process.platform !== "win32") {
|
|
66
|
-
await $`chmod -R 755 .`.cwd(`./dist/${name}`)
|
|
67
|
-
}
|
|
68
|
-
await $`bun pm pack`.cwd(`./dist/${name}`)
|
|
69
|
-
for (const tag of tags) {
|
|
70
|
-
await $`npm publish *.tgz --access public --tag ${tag}`.cwd(`./dist/${name}`)
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
await Promise.all(tasks)
|
|
74
|
-
for (const tag of tags) {
|
|
75
|
-
await $`cd ./dist/${pkg.name} && bun pm pack && npm publish *.tgz --access public --tag ${tag}`
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (!Script.preview) {
|
|
79
|
-
// Create archives for GitHub release
|
|
80
|
-
for (const key of Object.keys(binaries)) {
|
|
81
|
-
if (key.includes("linux")) {
|
|
82
|
-
await $`tar -czf ../../${key}.tar.gz *`.cwd(`dist/${key}/bin`)
|
|
83
|
-
} else {
|
|
84
|
-
await $`zip -r ../../${key}.zip *`.cwd(`dist/${key}/bin`)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const image = "ghcr.io/corethink-ai/chad-code"
|
|
89
|
-
const platforms = "linux/amd64,linux/arm64"
|
|
90
|
-
const tags = [`${image}:${Script.version}`, `${image}:latest`]
|
|
91
|
-
const tagFlags = tags.flatMap((t) => ["-t", t])
|
|
92
|
-
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
|
|
93
|
-
}
|
package/script/schema.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { z } from "zod"
|
|
4
|
-
import { Config } from "../src/config/config"
|
|
5
|
-
|
|
6
|
-
const file = process.argv[2]
|
|
7
|
-
console.log(file)
|
|
8
|
-
|
|
9
|
-
const result = z.toJSONSchema(Config.Info, {
|
|
10
|
-
io: "input", // Generate input shape (treats optional().default() as not required)
|
|
11
|
-
/**
|
|
12
|
-
* We'll use the `default` values of the field as the only value in `examples`.
|
|
13
|
-
* This will ensure no docs are needed to be read, as the configuration is
|
|
14
|
-
* self-documenting.
|
|
15
|
-
*
|
|
16
|
-
* See https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.9.5
|
|
17
|
-
*/
|
|
18
|
-
override(ctx) {
|
|
19
|
-
const schema = ctx.jsonSchema
|
|
20
|
-
|
|
21
|
-
// Preserve strictness: set additionalProperties: false for objects
|
|
22
|
-
if (schema && typeof schema === "object" && schema.type === "object" && schema.additionalProperties === undefined) {
|
|
23
|
-
schema.additionalProperties = false
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Add examples and default descriptions for string fields with defaults
|
|
27
|
-
if (schema && typeof schema === "object" && "type" in schema && schema.type === "string" && schema?.default) {
|
|
28
|
-
if (!schema.examples) {
|
|
29
|
-
schema.examples = [schema.default]
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
schema.description = [schema.description || "", `default: \`${schema.default}\``]
|
|
33
|
-
.filter(Boolean)
|
|
34
|
-
.join("\n\n")
|
|
35
|
-
.trim()
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
}) as Record<string, unknown> & {
|
|
39
|
-
allowComments?: boolean
|
|
40
|
-
allowTrailingCommas?: boolean
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// used for json lsps since config supports jsonc
|
|
44
|
-
result.allowComments = true
|
|
45
|
-
result.allowTrailingCommas = true
|
|
46
|
-
|
|
47
|
-
await Bun.write(file, JSON.stringify(result, null, 2))
|
package/src/acp/README.md
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
# ACP (Agent Client Protocol) Implementation
|
|
2
|
-
|
|
3
|
-
This directory contains a clean, protocol-compliant implementation of the [Agent Client Protocol](https://agentclientprotocol.com/) for opencode.
|
|
4
|
-
|
|
5
|
-
## Architecture
|
|
6
|
-
|
|
7
|
-
The implementation follows a clean separation of concerns:
|
|
8
|
-
|
|
9
|
-
### Core Components
|
|
10
|
-
|
|
11
|
-
- **`agent.ts`** - Implements the `Agent` interface from `@agentclientprotocol/sdk`
|
|
12
|
-
- Handles initialization and capability negotiation
|
|
13
|
-
- Manages session lifecycle (`session/new`, `session/load`)
|
|
14
|
-
- Processes prompts and returns responses
|
|
15
|
-
- Properly implements ACP protocol v1
|
|
16
|
-
|
|
17
|
-
- **`client.ts`** - Implements the `Client` interface for client-side capabilities
|
|
18
|
-
- File operations (`readTextFile`, `writeTextFile`)
|
|
19
|
-
- Permission requests (auto-approves for now)
|
|
20
|
-
- Terminal support (stub implementation)
|
|
21
|
-
|
|
22
|
-
- **`session.ts`** - Session state management
|
|
23
|
-
- Creates and tracks ACP sessions
|
|
24
|
-
- Maps ACP sessions to internal opencode sessions
|
|
25
|
-
- Maintains working directory context
|
|
26
|
-
- Handles MCP server configurations
|
|
27
|
-
|
|
28
|
-
- **`server.ts`** - ACP server startup and lifecycle
|
|
29
|
-
- Sets up JSON-RPC over stdio using the official library
|
|
30
|
-
- Manages graceful shutdown on SIGTERM/SIGINT
|
|
31
|
-
- Provides Instance context for the agent
|
|
32
|
-
|
|
33
|
-
- **`types.ts`** - Type definitions for internal use
|
|
34
|
-
|
|
35
|
-
## Usage
|
|
36
|
-
|
|
37
|
-
### Command Line
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Start the ACP server in the current directory
|
|
41
|
-
opencode acp
|
|
42
|
-
|
|
43
|
-
# Start in a specific directory
|
|
44
|
-
opencode acp --cwd /path/to/project
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Programmatic
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
import { ACPServer } from "./acp/server"
|
|
51
|
-
|
|
52
|
-
await ACPServer.start()
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Integration with Zed
|
|
56
|
-
|
|
57
|
-
Add to your Zed configuration (`~/.config/zed/settings.json`):
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{
|
|
61
|
-
"agent_servers": {
|
|
62
|
-
"OpenCode": {
|
|
63
|
-
"command": "opencode",
|
|
64
|
-
"args": ["acp"]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Protocol Compliance
|
|
71
|
-
|
|
72
|
-
This implementation follows the ACP specification v1:
|
|
73
|
-
|
|
74
|
-
✅ **Initialization**
|
|
75
|
-
|
|
76
|
-
- Proper `initialize` request/response with protocol version negotiation
|
|
77
|
-
- Capability advertisement (`agentCapabilities`)
|
|
78
|
-
- Authentication support (stub)
|
|
79
|
-
|
|
80
|
-
✅ **Session Management**
|
|
81
|
-
|
|
82
|
-
- `session/new` - Create new conversation sessions
|
|
83
|
-
- `session/load` - Resume existing sessions (basic support)
|
|
84
|
-
- Working directory context (`cwd`)
|
|
85
|
-
- MCP server configuration support
|
|
86
|
-
|
|
87
|
-
✅ **Prompting**
|
|
88
|
-
|
|
89
|
-
- `session/prompt` - Process user messages
|
|
90
|
-
- Content block handling (text, resources)
|
|
91
|
-
- Response with stop reasons
|
|
92
|
-
|
|
93
|
-
✅ **Client Capabilities**
|
|
94
|
-
|
|
95
|
-
- File read/write operations
|
|
96
|
-
- Permission requests
|
|
97
|
-
- Terminal support (stub for future)
|
|
98
|
-
|
|
99
|
-
## Current Limitations
|
|
100
|
-
|
|
101
|
-
### Not Yet Implemented
|
|
102
|
-
|
|
103
|
-
1. **Streaming Responses** - Currently returns complete responses instead of streaming via `session/update` notifications
|
|
104
|
-
2. **Tool Call Reporting** - Doesn't report tool execution progress
|
|
105
|
-
3. **Session Modes** - No mode switching support yet
|
|
106
|
-
4. **Authentication** - No actual auth implementation
|
|
107
|
-
5. **Terminal Support** - Placeholder only
|
|
108
|
-
6. **Session Persistence** - `session/load` doesn't restore actual conversation history
|
|
109
|
-
|
|
110
|
-
### Future Enhancements
|
|
111
|
-
|
|
112
|
-
- **Real-time Streaming**: Implement `session/update` notifications for progressive responses
|
|
113
|
-
- **Tool Call Visibility**: Report tool executions as they happen
|
|
114
|
-
- **Session Persistence**: Save and restore full conversation history
|
|
115
|
-
- **Mode Support**: Implement different operational modes (ask, code, etc.)
|
|
116
|
-
- **Enhanced Permissions**: More sophisticated permission handling
|
|
117
|
-
- **Terminal Integration**: Full terminal support via opencode's bash tool
|
|
118
|
-
|
|
119
|
-
## Testing
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
# Run ACP tests
|
|
123
|
-
bun test test/acp.test.ts
|
|
124
|
-
|
|
125
|
-
# Test manually with stdio
|
|
126
|
-
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | opencode acp
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## Design Decisions
|
|
130
|
-
|
|
131
|
-
### Why the Official Library?
|
|
132
|
-
|
|
133
|
-
We use `@agentclientprotocol/sdk` instead of implementing JSON-RPC ourselves because:
|
|
134
|
-
|
|
135
|
-
- Ensures protocol compliance
|
|
136
|
-
- Handles edge cases and future protocol versions
|
|
137
|
-
- Reduces maintenance burden
|
|
138
|
-
- Works with other ACP clients automatically
|
|
139
|
-
|
|
140
|
-
### Clean Architecture
|
|
141
|
-
|
|
142
|
-
Each component has a single responsibility:
|
|
143
|
-
|
|
144
|
-
- **Agent** = Protocol interface
|
|
145
|
-
- **Client** = Client-side operations
|
|
146
|
-
- **Session** = State management
|
|
147
|
-
- **Server** = Lifecycle and I/O
|
|
148
|
-
|
|
149
|
-
This makes the codebase maintainable and testable.
|
|
150
|
-
|
|
151
|
-
### Mapping to OpenCode
|
|
152
|
-
|
|
153
|
-
ACP sessions map cleanly to opencode's internal session model:
|
|
154
|
-
|
|
155
|
-
- ACP `session/new` → creates internal Session
|
|
156
|
-
- ACP `session/prompt` → uses SessionPrompt.prompt()
|
|
157
|
-
- Working directory context preserved per-session
|
|
158
|
-
- Tool execution uses existing ToolRegistry
|
|
159
|
-
|
|
160
|
-
## References
|
|
161
|
-
|
|
162
|
-
- [ACP Specification](https://agentclientprotocol.com/)
|
|
163
|
-
- [TypeScript Library](https://github.com/agentclientprotocol/typescript-sdk)
|
|
164
|
-
- [Protocol Examples](https://github.com/agentclientprotocol/typescript-sdk/tree/main/src/examples)
|