innocode 1.0.0 → 1.0.229
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/LICENSE +21 -0
- package/package.json +17 -118
- package/AGENTS.md +0 -27
- package/Dockerfile +0 -18
- package/README.md +0 -15
- package/bunfig.toml +0 -5
- package/parsers-config.ts +0 -253
- package/script/build.ts +0 -198
- package/script/publish.ts +0 -186
- package/script/schema.ts +0 -47
- package/script/seed-e2e.ts +0 -50
- package/src/acp/README.md +0 -164
- package/src/acp/agent.ts +0 -1676
- package/src/acp/session.ts +0 -117
- package/src/acp/types.ts +0 -23
- package/src/agent/agent.ts +0 -338
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/compaction.txt +0 -14
- package/src/agent/prompt/explore.txt +0 -18
- package/src/agent/prompt/summary.txt +0 -11
- package/src/agent/prompt/title.txt +0 -44
- package/src/auth/index.ts +0 -70
- package/src/bun/index.ts +0 -137
- package/src/bun/registry.ts +0 -48
- 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 -70
- package/src/cli/cmd/agent.ts +0 -257
- package/src/cli/cmd/auth.ts +0 -400
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/debug/agent.ts +0 -167
- package/src/cli/cmd/debug/config.ts +0 -16
- package/src/cli/cmd/debug/file.ts +0 -97
- package/src/cli/cmd/debug/index.ts +0 -48
- package/src/cli/cmd/debug/lsp.ts +0 -52
- package/src/cli/cmd/debug/ripgrep.ts +0 -87
- package/src/cli/cmd/debug/scrap.ts +0 -16
- package/src/cli/cmd/debug/skill.ts +0 -16
- package/src/cli/cmd/debug/snapshot.ts +0 -52
- package/src/cli/cmd/export.ts +0 -88
- package/src/cli/cmd/generate.ts +0 -38
- package/src/cli/cmd/github.ts +0 -1540
- package/src/cli/cmd/import.ts +0 -147
- package/src/cli/cmd/mcp.ts +0 -765
- package/src/cli/cmd/models.ts +0 -77
- package/src/cli/cmd/pr.ts +0 -113
- package/src/cli/cmd/run.ts +0 -598
- package/src/cli/cmd/serve.ts +0 -20
- package/src/cli/cmd/session.ts +0 -135
- package/src/cli/cmd/stats.ts +0 -426
- package/src/cli/cmd/tui/app.tsx +0 -812
- package/src/cli/cmd/tui/attach.ts +0 -60
- 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 -148
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -165
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -243
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -108
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -36
- package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
- package/src/cli/cmd/tui/component/dialog-status.tsx +0 -167
- 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/logo.tsx +0 -85
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -666
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -89
- package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
- package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1153
- package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
- package/src/cli/cmd/tui/component/spinner.tsx +0 -24
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
- package/src/cli/cmd/tui/component/tips.tsx +0 -153
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/context/args.tsx +0 -15
- package/src/cli/cmd/tui/context/directory.ts +0 -13
- package/src/cli/cmd/tui/context/exit.tsx +0 -54
- package/src/cli/cmd/tui/context/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/keybind.tsx +0 -100
- package/src/cli/cmd/tui/context/kv.tsx +0 -52
- package/src/cli/cmd/tui/context/local.tsx +0 -409
- 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 -101
- package/src/cli/cmd/tui/context/sync.tsx +0 -470
- 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/carbonfox.json +0 -248
- 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/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 -242
- package/src/cli/cmd/tui/context/theme/innocode.json +0 -245
- package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
- 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 -249
- 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 -1154
- package/src/cli/cmd/tui/event.ts +0 -48
- package/src/cli/cmd/tui/routes/home.tsx +0 -145
- 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 -91
- package/src/cli/cmd/tui/routes/session/header.tsx +0 -135
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -2139
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -508
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -466
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -313
- package/src/cli/cmd/tui/thread.ts +0 -188
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -59
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -85
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -207
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -40
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -80
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -401
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -167
- 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 -159
- 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/win32.ts +0 -129
- package/src/cli/cmd/tui/worker.ts +0 -152
- package/src/cli/cmd/uninstall.ts +0 -363
- package/src/cli/cmd/upgrade.ts +0 -73
- package/src/cli/cmd/web.ts +0 -81
- package/src/cli/error.ts +0 -57
- package/src/cli/logo.ts +0 -6
- package/src/cli/network.ts +0 -60
- package/src/cli/ui.ts +0 -113
- package/src/cli/upgrade.ts +0 -25
- package/src/command/index.ts +0 -150
- package/src/command/template/initialize.txt +0 -10
- package/src/command/template/review.txt +0 -101
- package/src/config/config.ts +0 -1517
- package/src/config/markdown.ts +0 -98
- package/src/env/index.ts +0 -28
- package/src/file/ignore.ts +0 -83
- package/src/file/index.ts +0 -583
- package/src/file/ripgrep.ts +0 -375
- package/src/file/time.ts +0 -69
- package/src/file/watcher.ts +0 -127
- package/src/flag/flag.ts +0 -148
- package/src/format/formatter.ts +0 -366
- package/src/format/index.ts +0 -137
- package/src/global/index.ts +0 -80
- package/src/id/id.ts +0 -83
- package/src/ide/index.ts +0 -76
- package/src/index.ts +0 -160
- package/src/installation/index.ts +0 -268
- 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 -2046
- package/src/mcp/auth.ts +0 -132
- package/src/mcp/index.ts +0 -937
- package/src/mcp/oauth-callback.ts +0 -200
- package/src/mcp/oauth-provider.ts +0 -154
- package/src/patch/index.ts +0 -680
- package/src/permission/arity.ts +0 -163
- package/src/permission/index.ts +0 -210
- package/src/permission/next.ts +0 -280
- package/src/plugin/codex.ts +0 -624
- package/src/plugin/copilot.ts +0 -327
- package/src/plugin/index.ts +0 -138
- package/src/project/bootstrap.ts +0 -35
- package/src/project/instance.ts +0 -114
- package/src/project/project.ts +0 -371
- package/src/project/state.ts +0 -70
- package/src/project/vcs.ts +0 -76
- package/src/provider/auth.ts +0 -147
- package/src/provider/error.ts +0 -189
- package/src/provider/models.ts +0 -133
- package/src/provider/provider.ts +0 -1370
- package/src/provider/sdk/copilot/README.md +0 -5
- package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -164
- package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
- package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -17
- package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -780
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
- package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
- package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -87
- package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
- package/src/provider/sdk/copilot/index.ts +0 -2
- package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
- package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -303
- package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
- package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
- package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
- package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -207
- package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1732
- package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -177
- package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
- package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -88
- package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -128
- package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -115
- package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -65
- package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -104
- package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -103
- package/src/provider/transform.ts +0 -806
- package/src/pty/index.ts +0 -286
- package/src/question/index.ts +0 -171
- package/src/scheduler/index.ts +0 -61
- package/src/server/error.ts +0 -36
- package/src/server/event.ts +0 -7
- package/src/server/mdns.ts +0 -60
- package/src/server/routes/config.ts +0 -92
- package/src/server/routes/experimental.ts +0 -208
- package/src/server/routes/file.ts +0 -197
- package/src/server/routes/global.ts +0 -183
- package/src/server/routes/mcp.ts +0 -225
- package/src/server/routes/permission.ts +0 -68
- package/src/server/routes/project.ts +0 -82
- package/src/server/routes/provider.ts +0 -179
- package/src/server/routes/pty.ts +0 -176
- package/src/server/routes/question.ts +0 -98
- package/src/server/routes/session.ts +0 -939
- package/src/server/routes/tui.ts +0 -379
- package/src/server/server.ts +0 -621
- package/src/session/compaction.ts +0 -261
- package/src/session/index.ts +0 -543
- package/src/session/instruction.ts +0 -197
- package/src/session/llm.ts +0 -283
- package/src/session/message-v2.ts +0 -841
- package/src/session/message.ts +0 -189
- package/src/session/processor.ts +0 -410
- package/src/session/prompt/anthropic-20250930.txt +0 -166
- package/src/session/prompt/anthropic.txt +0 -105
- package/src/session/prompt/beast.txt +0 -147
- package/src/session/prompt/build-switch.txt +0 -5
- package/src/session/prompt/codex_header.txt +0 -79
- 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/trinity.txt +0 -97
- package/src/session/prompt.ts +0 -1964
- package/src/session/retry.ts +0 -101
- package/src/session/revert.ts +0 -121
- package/src/session/status.ts +0 -76
- package/src/session/summary.ts +0 -203
- package/src/session/system.ts +0 -54
- package/src/session/todo.ts +0 -37
- package/src/share/share-next.ts +0 -200
- package/src/share/share.ts +0 -92
- package/src/shell/shell.ts +0 -67
- package/src/skill/discovery.ts +0 -97
- package/src/skill/index.ts +0 -1
- package/src/skill/skill.ts +0 -188
- package/src/snapshot/index.ts +0 -255
- package/src/storage/storage.ts +0 -227
- package/src/tool/apply_patch.ts +0 -281
- package/src/tool/apply_patch.txt +0 -33
- package/src/tool/bash.ts +0 -269
- package/src/tool/bash.txt +0 -115
- 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/external-directory.ts +0 -32
- package/src/tool/glob.ts +0 -80
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.ts +0 -150
- package/src/tool/grep.txt +0 -8
- package/src/tool/invalid.ts +0 -17
- package/src/tool/ls.ts +0 -121
- package/src/tool/ls.txt +0 -1
- package/src/tool/lsp.ts +0 -96
- package/src/tool/lsp.txt +0 -19
- package/src/tool/multiedit.ts +0 -46
- package/src/tool/multiedit.txt +0 -41
- package/src/tool/plan-enter.txt +0 -14
- package/src/tool/plan-exit.txt +0 -13
- package/src/tool/plan.ts +0 -130
- package/src/tool/question.ts +0 -33
- package/src/tool/question.txt +0 -10
- package/src/tool/read.ts +0 -261
- package/src/tool/read.txt +0 -14
- package/src/tool/registry.ts +0 -160
- package/src/tool/skill.ts +0 -123
- package/src/tool/task.ts +0 -165
- 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 -89
- package/src/tool/truncation.ts +0 -106
- package/src/tool/webfetch.ts +0 -186
- package/src/tool/webfetch.txt +0 -13
- package/src/tool/websearch.ts +0 -150
- package/src/tool/websearch.txt +0 -14
- package/src/tool/write.ts +0 -85
- package/src/tool/write.txt +0 -8
- package/src/util/abort.ts +0 -35
- 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 -93
- package/src/util/fn.ts +0 -11
- package/src/util/format.ts +0 -20
- package/src/util/iife.ts +0 -3
- package/src/util/keybind.ts +0 -103
- 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/proxied.ts +0 -3
- package/src/util/queue.ts +0 -32
- package/src/util/rpc.ts +0 -66
- 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 -56
- package/src/worktree/index.ts +0 -612
- package/sst-env.d.ts +0 -9
- package/test/acp/agent-interface.test.ts +0 -51
- package/test/acp/event-subscription.test.ts +0 -436
- package/test/agent/agent.test.ts +0 -675
- package/test/bun.test.ts +0 -53
- package/test/cli/github-action.test.ts +0 -161
- package/test/cli/github-remote.test.ts +0 -80
- package/test/cli/import.test.ts +0 -38
- package/test/cli/tui/transcript.test.ts +0 -322
- package/test/config/agent-color.test.ts +0 -71
- package/test/config/config.test.ts +0 -1802
- package/test/config/fixtures/empty-frontmatter.md +0 -4
- package/test/config/fixtures/frontmatter.md +0 -28
- package/test/config/fixtures/markdown-header.md +0 -11
- package/test/config/fixtures/no-frontmatter.md +0 -1
- package/test/config/fixtures/weird-model-id.md +0 -13
- package/test/config/markdown.test.ts +0 -228
- package/test/file/ignore.test.ts +0 -10
- package/test/file/path-traversal.test.ts +0 -198
- package/test/file/ripgrep.test.ts +0 -39
- 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/mcp/oauth-browser.test.ts +0 -249
- package/test/memory/abort-leak.test.ts +0 -136
- package/test/patch/patch.test.ts +0 -348
- package/test/permission/arity.test.ts +0 -33
- package/test/permission/next.test.ts +0 -690
- package/test/permission-task.test.ts +0 -319
- package/test/plugin/auth-override.test.ts +0 -44
- package/test/plugin/codex.test.ts +0 -123
- package/test/preload.ts +0 -63
- package/test/project/project.test.ts +0 -120
- package/test/provider/amazon-bedrock.test.ts +0 -445
- package/test/provider/copilot/convert-to-copilot-messages.test.ts +0 -523
- package/test/provider/copilot/copilot-chat-model.test.ts +0 -592
- package/test/provider/gitlab-duo.test.ts +0 -262
- package/test/provider/provider.test.ts +0 -2129
- package/test/provider/transform.test.ts +0 -1928
- package/test/question/question.test.ts +0 -300
- package/test/scheduler.test.ts +0 -73
- package/test/server/session-list.test.ts +0 -39
- package/test/server/session-select.test.ts +0 -78
- package/test/session/compaction.test.ts +0 -423
- package/test/session/instruction.test.ts +0 -170
- package/test/session/llm.test.ts +0 -667
- package/test/session/message-v2.test.ts +0 -924
- package/test/session/prompt-missing-file.test.ts +0 -53
- package/test/session/prompt-special-chars.test.ts +0 -56
- package/test/session/prompt-variant.test.ts +0 -68
- package/test/session/retry.test.ts +0 -188
- package/test/session/revert-compact.test.ts +0 -285
- package/test/session/session.test.ts +0 -71
- package/test/session/structured-output-integration.test.ts +0 -233
- package/test/session/structured-output.test.ts +0 -385
- package/test/skill/discovery.test.ts +0 -60
- package/test/skill/skill.test.ts +0 -388
- package/test/snapshot/snapshot.test.ts +0 -1040
- package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
- package/test/tool/apply_patch.test.ts +0 -559
- package/test/tool/bash.test.ts +0 -399
- package/test/tool/external-directory.test.ts +0 -127
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +0 -38413
- package/test/tool/grep.test.ts +0 -110
- package/test/tool/question.test.ts +0 -107
- package/test/tool/read.test.ts +0 -421
- package/test/tool/registry.test.ts +0 -122
- package/test/tool/skill.test.ts +0 -112
- package/test/tool/truncation.test.ts +0 -159
- package/test/util/filesystem.test.ts +0 -39
- package/test/util/format.test.ts +0 -59
- package/test/util/iife.test.ts +0 -36
- package/test/util/lazy.test.ts +0 -50
- package/test/util/lock.test.ts +0 -72
- package/test/util/timeout.test.ts +0 -21
- package/test/util/wildcard.test.ts +0 -75
- package/tsconfig.json +0 -16
- /package/{script/postinstall.mjs → postinstall.mjs} +0 -0
package/script/build.ts
DELETED
|
@@ -1,198 +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
|
-
const modelsUrl = process.env.OPENCODE_MODELS_URL || "https://models.dev"
|
|
18
|
-
// Fetch and generate models.dev snapshot
|
|
19
|
-
const modelsData = process.env.MODELS_DEV_API_JSON
|
|
20
|
-
? await Bun.file(process.env.MODELS_DEV_API_JSON).text()
|
|
21
|
-
: await fetch(`${modelsUrl}/api.json`).then((x) => x.text())
|
|
22
|
-
await Bun.write(
|
|
23
|
-
path.join(dir, "src/provider/models-snapshot.ts"),
|
|
24
|
-
`// Auto-generated by build.ts - do not edit\nexport const snapshot = ${modelsData} as const\n`,
|
|
25
|
-
)
|
|
26
|
-
console.log("Generated models-snapshot.ts")
|
|
27
|
-
|
|
28
|
-
const singleFlag = process.argv.includes("--single")
|
|
29
|
-
const baselineFlag = process.argv.includes("--baseline")
|
|
30
|
-
const skipInstall = process.argv.includes("--skip-install")
|
|
31
|
-
|
|
32
|
-
const allTargets: {
|
|
33
|
-
os: string
|
|
34
|
-
arch: "arm64" | "x64"
|
|
35
|
-
abi?: "musl"
|
|
36
|
-
avx2?: false
|
|
37
|
-
}[] = [
|
|
38
|
-
{
|
|
39
|
-
os: "linux",
|
|
40
|
-
arch: "arm64",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
os: "linux",
|
|
44
|
-
arch: "x64",
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
os: "linux",
|
|
48
|
-
arch: "x64",
|
|
49
|
-
avx2: false,
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
os: "linux",
|
|
53
|
-
arch: "arm64",
|
|
54
|
-
abi: "musl",
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
os: "linux",
|
|
58
|
-
arch: "x64",
|
|
59
|
-
abi: "musl",
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
os: "linux",
|
|
63
|
-
arch: "x64",
|
|
64
|
-
abi: "musl",
|
|
65
|
-
avx2: false,
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
os: "darwin",
|
|
69
|
-
arch: "arm64",
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
os: "darwin",
|
|
73
|
-
arch: "x64",
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
os: "darwin",
|
|
77
|
-
arch: "x64",
|
|
78
|
-
avx2: false,
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
os: "win32",
|
|
82
|
-
arch: "x64",
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
os: "win32",
|
|
86
|
-
arch: "x64",
|
|
87
|
-
avx2: false,
|
|
88
|
-
},
|
|
89
|
-
]
|
|
90
|
-
|
|
91
|
-
const targets = singleFlag
|
|
92
|
-
? allTargets.filter((item) => {
|
|
93
|
-
if (item.os !== process.platform || item.arch !== process.arch) {
|
|
94
|
-
return false
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// When building for the current platform, prefer a single native binary by default.
|
|
98
|
-
// Baseline binaries require additional Bun artifacts and can be flaky to download.
|
|
99
|
-
if (item.avx2 === false) {
|
|
100
|
-
return baselineFlag
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// also skip abi-specific builds for the same reason
|
|
104
|
-
if (item.abi !== undefined) {
|
|
105
|
-
return false
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return true
|
|
109
|
-
})
|
|
110
|
-
: allTargets
|
|
111
|
-
|
|
112
|
-
await $`rm -rf dist`
|
|
113
|
-
|
|
114
|
-
const binaries: Record<string, string> = {}
|
|
115
|
-
if (!skipInstall) {
|
|
116
|
-
await $`bun install --os="*" --cpu="*" @opentui/core@${pkg.dependencies["@opentui/core"]}`
|
|
117
|
-
await $`bun install --os="*" --cpu="*" @parcel/watcher@${pkg.dependencies["@parcel/watcher"]}`
|
|
118
|
-
}
|
|
119
|
-
for (const item of targets) {
|
|
120
|
-
const name = [
|
|
121
|
-
pkg.name,
|
|
122
|
-
// changing to win32 flags npm for some reason
|
|
123
|
-
item.os === "win32" ? "windows" : item.os,
|
|
124
|
-
item.arch,
|
|
125
|
-
item.avx2 === false ? "baseline" : undefined,
|
|
126
|
-
item.abi === undefined ? undefined : item.abi,
|
|
127
|
-
]
|
|
128
|
-
.filter(Boolean)
|
|
129
|
-
.join("-")
|
|
130
|
-
console.log(`building ${name}`)
|
|
131
|
-
await $`mkdir -p dist/${name}/bin`
|
|
132
|
-
|
|
133
|
-
const parserWorker = fs.realpathSync(path.resolve(dir, "./node_modules/@opentui/core/parser.worker.js"))
|
|
134
|
-
const workerPath = "./src/cli/cmd/tui/worker.ts"
|
|
135
|
-
|
|
136
|
-
// Use platform-specific bunfs root path based on target OS
|
|
137
|
-
const bunfsRoot = item.os === "win32" ? "B:/~BUN/root/" : "/$bunfs/root/"
|
|
138
|
-
const workerRelativePath = path.relative(dir, parserWorker).replaceAll("\\", "/")
|
|
139
|
-
|
|
140
|
-
const binaryName = item.os === "win32" ? "innocode.exe" : "innocode"
|
|
141
|
-
const compatBinaryName = item.os === "win32" ? "opencode.exe" : "opencode"
|
|
142
|
-
|
|
143
|
-
await Bun.build({
|
|
144
|
-
conditions: ["browser"],
|
|
145
|
-
tsconfig: "./tsconfig.json",
|
|
146
|
-
plugins: [solidPlugin],
|
|
147
|
-
sourcemap: "external",
|
|
148
|
-
compile: {
|
|
149
|
-
autoloadBunfig: false,
|
|
150
|
-
autoloadDotenv: false,
|
|
151
|
-
//@ts-ignore (bun types aren't up to date)
|
|
152
|
-
autoloadTsconfig: true,
|
|
153
|
-
autoloadPackageJson: true,
|
|
154
|
-
target: name.replace(pkg.name, "bun") as any,
|
|
155
|
-
outfile: `dist/${name}/bin/${binaryName}`,
|
|
156
|
-
execArgv: [`--user-agent=innocode/${Script.version}`, "--use-system-ca", "--"],
|
|
157
|
-
windows: {},
|
|
158
|
-
},
|
|
159
|
-
entrypoints: ["./src/index.ts", parserWorker, workerPath],
|
|
160
|
-
define: {
|
|
161
|
-
OPENCODE_VERSION: `'${Script.version}'`,
|
|
162
|
-
OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + workerRelativePath,
|
|
163
|
-
OPENCODE_WORKER_PATH: workerPath,
|
|
164
|
-
OPENCODE_CHANNEL: `'${Script.channel}'`,
|
|
165
|
-
OPENCODE_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "",
|
|
166
|
-
},
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
await $`cp dist/${name}/bin/${binaryName} dist/${name}/bin/${compatBinaryName}`
|
|
170
|
-
|
|
171
|
-
await $`rm -rf ./dist/${name}/bin/tui`
|
|
172
|
-
await Bun.file(`dist/${name}/package.json`).write(
|
|
173
|
-
JSON.stringify(
|
|
174
|
-
{
|
|
175
|
-
name,
|
|
176
|
-
version: Script.version,
|
|
177
|
-
os: [item.os],
|
|
178
|
-
cpu: [item.arch],
|
|
179
|
-
},
|
|
180
|
-
null,
|
|
181
|
-
2,
|
|
182
|
-
),
|
|
183
|
-
)
|
|
184
|
-
binaries[name] = Script.version
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if (Script.release) {
|
|
188
|
-
for (const key of Object.keys(binaries)) {
|
|
189
|
-
if (key.includes("linux")) {
|
|
190
|
-
await $`tar -czf ../../${key}.tar.gz *`.cwd(`dist/${key}/bin`)
|
|
191
|
-
} else {
|
|
192
|
-
await $`zip -r ../../${key}.zip *`.cwd(`dist/${key}/bin`)
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
await $`gh release upload v${Script.version} ./dist/*.zip ./dist/*.tar.gz --clobber`
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
export { binaries }
|
package/script/publish.ts
DELETED
|
@@ -1,186 +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: Record<string, string> = {}
|
|
11
|
-
for (const filepath of new Bun.Glob("*/package.json").scanSync({ cwd: "./dist" })) {
|
|
12
|
-
const pkg = await Bun.file(`./dist/${filepath}`).json()
|
|
13
|
-
binaries[pkg.name] = pkg.version
|
|
14
|
-
}
|
|
15
|
-
console.log("binaries", binaries)
|
|
16
|
-
const version = Object.values(binaries)[0]
|
|
17
|
-
|
|
18
|
-
await $`mkdir -p ./dist/${pkg.name}`
|
|
19
|
-
await $`cp -r ./bin ./dist/${pkg.name}/bin`
|
|
20
|
-
await $`cp ./script/postinstall.mjs ./dist/${pkg.name}/postinstall.mjs`
|
|
21
|
-
await Bun.file(`./dist/${pkg.name}/LICENSE`).write(await Bun.file("../../LICENSE").text())
|
|
22
|
-
|
|
23
|
-
await Bun.file(`./dist/${pkg.name}/package.json`).write(
|
|
24
|
-
JSON.stringify(
|
|
25
|
-
{
|
|
26
|
-
name: pkg.name + "-ai",
|
|
27
|
-
bin: {
|
|
28
|
-
[pkg.name]: `./bin/${pkg.name}`,
|
|
29
|
-
},
|
|
30
|
-
scripts: {
|
|
31
|
-
postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs",
|
|
32
|
-
},
|
|
33
|
-
version: version,
|
|
34
|
-
license: pkg.license,
|
|
35
|
-
optionalDependencies: binaries,
|
|
36
|
-
},
|
|
37
|
-
null,
|
|
38
|
-
2,
|
|
39
|
-
),
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
const tasks = Object.entries(binaries).map(async ([name]) => {
|
|
43
|
-
if (process.platform !== "win32") {
|
|
44
|
-
await $`chmod -R 755 .`.cwd(`./dist/${name}`)
|
|
45
|
-
}
|
|
46
|
-
await $`bun pm pack`.cwd(`./dist/${name}`)
|
|
47
|
-
await $`npm publish *.tgz --access public --tag ${Script.channel}`.cwd(`./dist/${name}`)
|
|
48
|
-
})
|
|
49
|
-
await Promise.all(tasks)
|
|
50
|
-
await $`cd ./dist/${pkg.name} && bun pm pack && npm publish *.tgz --access public --tag ${Script.channel}`
|
|
51
|
-
|
|
52
|
-
const image = "ghcr.io/inno-ki/innocode"
|
|
53
|
-
const platforms = "linux/amd64,linux/arm64"
|
|
54
|
-
const tags = [`${image}:${version}`, `${image}:${Script.channel}`]
|
|
55
|
-
const tagFlags = tags.flatMap((t) => ["-t", t])
|
|
56
|
-
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
|
|
57
|
-
|
|
58
|
-
// registries
|
|
59
|
-
if (!Script.preview) {
|
|
60
|
-
// Calculate SHA values
|
|
61
|
-
const arm64Sha = await $`sha256sum ./dist/innocode-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
62
|
-
const x64Sha = await $`sha256sum ./dist/innocode-linux-x64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
63
|
-
const macX64Sha = await $`sha256sum ./dist/innocode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
64
|
-
const macArm64Sha = await $`sha256sum ./dist/innocode-darwin-arm64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
65
|
-
|
|
66
|
-
const [pkgver, _subver = ""] = Script.version.split(/(-.*)/, 2)
|
|
67
|
-
|
|
68
|
-
// arch
|
|
69
|
-
const binaryPkgbuild = [
|
|
70
|
-
"# Maintainer: dax",
|
|
71
|
-
"# Maintainer: adam",
|
|
72
|
-
"",
|
|
73
|
-
"pkgname='innocode-bin'",
|
|
74
|
-
`pkgver=${pkgver}`,
|
|
75
|
-
`_subver=${_subver}`,
|
|
76
|
-
"options=('!debug' '!strip')",
|
|
77
|
-
"pkgrel=1",
|
|
78
|
-
"pkgdesc='The AI coding agent built for the terminal.'",
|
|
79
|
-
"url='https://github.com/Inno-ki/innocode'",
|
|
80
|
-
"arch=('aarch64' 'x86_64')",
|
|
81
|
-
"license=('MIT')",
|
|
82
|
-
"provides=('innocode')",
|
|
83
|
-
"conflicts=('innocode')",
|
|
84
|
-
"depends=('ripgrep')",
|
|
85
|
-
"",
|
|
86
|
-
`source_aarch64=("\${pkgname}_\${pkgver}_aarch64.tar.gz::https://github.com/Inno-ki/innocode/releases/download/v\${pkgver}\${_subver}/innocode-linux-arm64.tar.gz")`,
|
|
87
|
-
`sha256sums_aarch64=('${arm64Sha}')`,
|
|
88
|
-
|
|
89
|
-
`source_x86_64=("\${pkgname}_\${pkgver}_x86_64.tar.gz::https://github.com/Inno-ki/innocode/releases/download/v\${pkgver}\${_subver}/innocode-linux-x64.tar.gz")`,
|
|
90
|
-
`sha256sums_x86_64=('${x64Sha}')`,
|
|
91
|
-
"",
|
|
92
|
-
"package() {",
|
|
93
|
-
' install -Dm755 ./innocode "${pkgdir}/usr/bin/innocode"',
|
|
94
|
-
"}",
|
|
95
|
-
"",
|
|
96
|
-
].join("\n")
|
|
97
|
-
|
|
98
|
-
for (const [pkg, pkgbuild] of [["innocode-bin", binaryPkgbuild]]) {
|
|
99
|
-
for (let i = 0; i < 30; i++) {
|
|
100
|
-
try {
|
|
101
|
-
await $`rm -rf ./dist/aur-${pkg}`
|
|
102
|
-
await $`git clone ssh://aur@aur.archlinux.org/${pkg}.git ./dist/aur-${pkg}`
|
|
103
|
-
await $`cd ./dist/aur-${pkg} && git checkout master`
|
|
104
|
-
await Bun.file(`./dist/aur-${pkg}/PKGBUILD`).write(pkgbuild)
|
|
105
|
-
await $`cd ./dist/aur-${pkg} && makepkg --printsrcinfo > .SRCINFO`
|
|
106
|
-
await $`cd ./dist/aur-${pkg} && git add PKGBUILD .SRCINFO`
|
|
107
|
-
await $`cd ./dist/aur-${pkg} && git commit -m "Update to v${Script.version}"`
|
|
108
|
-
await $`cd ./dist/aur-${pkg} && git push`
|
|
109
|
-
break
|
|
110
|
-
} catch (e) {
|
|
111
|
-
continue
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Homebrew formula
|
|
117
|
-
const homebrewFormula = [
|
|
118
|
-
"# typed: false",
|
|
119
|
-
"# frozen_string_literal: true",
|
|
120
|
-
"",
|
|
121
|
-
"# This file was generated by GoReleaser. DO NOT EDIT.",
|
|
122
|
-
"class Innocode < Formula",
|
|
123
|
-
` desc "The AI coding agent built for the terminal."`,
|
|
124
|
-
` homepage "https://github.com/Inno-ki/innocode"`,
|
|
125
|
-
` version "${Script.version.split("-")[0]}"`,
|
|
126
|
-
"",
|
|
127
|
-
` depends_on "ripgrep"`,
|
|
128
|
-
"",
|
|
129
|
-
" on_macos do",
|
|
130
|
-
" if Hardware::CPU.intel?",
|
|
131
|
-
` url "https://github.com/Inno-ki/innocode/releases/download/v${Script.version}/innocode-darwin-x64.zip"`,
|
|
132
|
-
` sha256 "${macX64Sha}"`,
|
|
133
|
-
"",
|
|
134
|
-
" def install",
|
|
135
|
-
' bin.install "innocode"',
|
|
136
|
-
" end",
|
|
137
|
-
" end",
|
|
138
|
-
" if Hardware::CPU.arm?",
|
|
139
|
-
` url "https://github.com/Inno-ki/innocode/releases/download/v${Script.version}/innocode-darwin-arm64.zip"`,
|
|
140
|
-
` sha256 "${macArm64Sha}"`,
|
|
141
|
-
"",
|
|
142
|
-
" def install",
|
|
143
|
-
' bin.install "innocode"',
|
|
144
|
-
" end",
|
|
145
|
-
" end",
|
|
146
|
-
" end",
|
|
147
|
-
"",
|
|
148
|
-
" on_linux do",
|
|
149
|
-
" if Hardware::CPU.intel? and Hardware::CPU.is_64_bit?",
|
|
150
|
-
` url "https://github.com/Inno-ki/innocode/releases/download/v${Script.version}/innocode-linux-x64.tar.gz"`,
|
|
151
|
-
` sha256 "${x64Sha}"`,
|
|
152
|
-
" def install",
|
|
153
|
-
' bin.install "innocode"',
|
|
154
|
-
" end",
|
|
155
|
-
" end",
|
|
156
|
-
" if Hardware::CPU.arm? and Hardware::CPU.is_64_bit?",
|
|
157
|
-
` url "https://github.com/Inno-ki/innocode/releases/download/v${Script.version}/innocode-linux-arm64.tar.gz"`,
|
|
158
|
-
` sha256 "${arm64Sha}"`,
|
|
159
|
-
" def install",
|
|
160
|
-
' bin.install "innocode"',
|
|
161
|
-
" end",
|
|
162
|
-
" end",
|
|
163
|
-
" end",
|
|
164
|
-
"end",
|
|
165
|
-
"",
|
|
166
|
-
"",
|
|
167
|
-
].join("\n")
|
|
168
|
-
|
|
169
|
-
const token = process.env.GITHUB_TOKEN
|
|
170
|
-
if (!token) {
|
|
171
|
-
console.error("GITHUB_TOKEN is required to update homebrew tap")
|
|
172
|
-
process.exit(1)
|
|
173
|
-
}
|
|
174
|
-
const tap = `https://x-access-token:${token}@github.com/Inno-ki/homebrew-tap.git`
|
|
175
|
-
await $`rm -rf ./dist/homebrew-tap`
|
|
176
|
-
await $`git clone ${tap} ./dist/homebrew-tap`
|
|
177
|
-
await Bun.file("./dist/homebrew-tap/innocode.rb").write(homebrewFormula)
|
|
178
|
-
await $`cd ./dist/homebrew-tap && git add innocode.rb`
|
|
179
|
-
await $`cd ./dist/homebrew-tap && git commit -m "Update to v${Script.version}"`
|
|
180
|
-
await $`cd ./dist/homebrew-tap && git push`
|
|
181
|
-
const image = "ghcr.io/inno-ki/innocode"
|
|
182
|
-
const platforms = "linux/amd64,linux/arm64"
|
|
183
|
-
const tags = [`${image}:${Script.version}`, `${image}:latest`]
|
|
184
|
-
const tagFlags = tags.flatMap((t) => ["-t", t])
|
|
185
|
-
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
|
|
186
|
-
}
|
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/script/seed-e2e.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
const dir = process.env.OPENCODE_E2E_PROJECT_DIR ?? process.cwd()
|
|
2
|
-
const title = process.env.OPENCODE_E2E_SESSION_TITLE ?? "E2E Session"
|
|
3
|
-
const text = process.env.OPENCODE_E2E_MESSAGE ?? "Seeded for UI e2e"
|
|
4
|
-
const model = process.env.OPENCODE_E2E_MODEL ?? "opencode/gpt-5-nano"
|
|
5
|
-
const parts = model.split("/")
|
|
6
|
-
const providerID = parts[0] ?? "opencode"
|
|
7
|
-
const modelID = parts[1] ?? "gpt-5-nano"
|
|
8
|
-
const now = Date.now()
|
|
9
|
-
|
|
10
|
-
const seed = async () => {
|
|
11
|
-
const { Instance } = await import("../src/project/instance")
|
|
12
|
-
const { InstanceBootstrap } = await import("../src/project/bootstrap")
|
|
13
|
-
const { Session } = await import("../src/session")
|
|
14
|
-
const { Identifier } = await import("../src/id/id")
|
|
15
|
-
const { Project } = await import("../src/project/project")
|
|
16
|
-
|
|
17
|
-
await Instance.provide({
|
|
18
|
-
directory: dir,
|
|
19
|
-
init: InstanceBootstrap,
|
|
20
|
-
fn: async () => {
|
|
21
|
-
const session = await Session.create({ title })
|
|
22
|
-
const messageID = Identifier.descending("message")
|
|
23
|
-
const partID = Identifier.descending("part")
|
|
24
|
-
const message = {
|
|
25
|
-
id: messageID,
|
|
26
|
-
sessionID: session.id,
|
|
27
|
-
role: "user" as const,
|
|
28
|
-
time: { created: now },
|
|
29
|
-
agent: "build",
|
|
30
|
-
model: {
|
|
31
|
-
providerID,
|
|
32
|
-
modelID,
|
|
33
|
-
},
|
|
34
|
-
}
|
|
35
|
-
const part = {
|
|
36
|
-
id: partID,
|
|
37
|
-
sessionID: session.id,
|
|
38
|
-
messageID,
|
|
39
|
-
type: "text" as const,
|
|
40
|
-
text,
|
|
41
|
-
time: { start: now },
|
|
42
|
-
}
|
|
43
|
-
await Session.updateMessage(message)
|
|
44
|
-
await Session.updatePart(part)
|
|
45
|
-
await Project.update({ projectID: Instance.project.id, name: "E2E Project" })
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
await seed()
|
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
|
-
"InnoCode": {
|
|
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 InnoCode
|
|
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)
|