@toolkit-cli/toolkode 1.3.8 → 1.3.9
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/package.json +19 -162
- package/{script/postinstall.mjs → postinstall.mjs} +5 -5
- package/AGENTS.md +0 -69
- package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
- package/Dockerfile +0 -18
- package/README.md +0 -95
- package/bin/opencode +0 -179
- package/bunfig.toml +0 -7
- package/drizzle.config.ts +0 -10
- package/git +0 -0
- package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
- package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
- package/migration/20260211171708_add_project_commands/migration.sql +0 -1
- package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
- package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
- package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
- package/migration/20260225215848_workspace/migration.sql +0 -7
- package/migration/20260225215848_workspace/snapshot.json +0 -959
- package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
- package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
- package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
- package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
- package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
- package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
- package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
- package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
- package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
- package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
- package/migration/20260323234822_events/migration.sql +0 -13
- package/migration/20260323234822_events/snapshot.json +0 -1271
- package/parsers-config.ts +0 -290
- package/script/build-node.ts +0 -54
- package/script/build.ts +0 -276
- package/script/check-migrations.ts +0 -16
- package/script/publish.ts +0 -181
- package/script/schema.ts +0 -63
- package/script/seed-e2e.ts +0 -60
- package/script/upgrade-opentui.ts +0 -64
- package/specs/effect-migration.md +0 -293
- package/specs/tui-plugins.md +0 -389
- package/src/account/account.sql.ts +0 -39
- package/src/account/index.ts +0 -397
- package/src/account/repo.ts +0 -163
- package/src/account/schema.ts +0 -91
- package/src/acp/README.md +0 -174
- package/src/acp/agent.ts +0 -1743
- package/src/acp/session.ts +0 -116
- package/src/acp/types.ts +0 -24
- package/src/agent/agent.ts +0 -418
- 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 -115
- package/src/bun/index.ts +0 -128
- package/src/bun/registry.ts +0 -50
- package/src/bus/bus-event.ts +0 -40
- package/src/bus/global.ts +0 -10
- package/src/bus/index.ts +0 -184
- package/src/channel/index.ts +0 -231
- package/src/cli/bootstrap.ts +0 -17
- package/src/cli/cmd/account.ts +0 -257
- package/src/cli/cmd/acp.ts +0 -70
- package/src/cli/cmd/agent.ts +0 -245
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/db.ts +0 -119
- 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 -53
- 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 -89
- package/src/cli/cmd/generate.ts +0 -38
- package/src/cli/cmd/github.ts +0 -1646
- package/src/cli/cmd/import.ts +0 -207
- package/src/cli/cmd/mcp.ts +0 -754
- package/src/cli/cmd/models.ts +0 -78
- package/src/cli/cmd/plug.ts +0 -231
- package/src/cli/cmd/pr.ts +0 -127
- package/src/cli/cmd/providers.ts +0 -482
- package/src/cli/cmd/run.ts +0 -738
- package/src/cli/cmd/serve.ts +0 -42
- package/src/cli/cmd/session.ts +0 -159
- package/src/cli/cmd/stats.ts +0 -410
- package/src/cli/cmd/tui/app.tsx +0 -1255
- package/src/cli/cmd/tui/attach.ts +0 -88
- 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 -171
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -264
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -334
- 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 -168
- 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/dialog-variant.tsx +0 -29
- package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +0 -320
- package/src/cli/cmd/tui/component/error-component.tsx +0 -91
- package/src/cli/cmd/tui/component/logo.tsx +0 -86
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -667
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
- package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
- package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1353
- package/src/cli/cmd/tui/component/prompt/part.ts +0 -16
- 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/startup-loading.tsx +0 -63
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/component/workspace/dialog-session-list.tsx +0 -151
- 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 -60
- package/src/cli/cmd/tui/context/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/keybind.tsx +0 -105
- package/src/cli/cmd/tui/context/kv.tsx +0 -52
- package/src/cli/cmd/tui/context/local.tsx +0 -406
- package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
- package/src/cli/cmd/tui/context/prompt.tsx +0 -18
- package/src/cli/cmd/tui/context/route.tsx +0 -52
- package/src/cli/cmd/tui/context/sdk.tsx +0 -128
- package/src/cli/cmd/tui/context/sync.tsx +0 -504
- package/src/cli/cmd/tui/context/theme/amber.json +0 -245
- package/src/cli/cmd/tui/context/theme/amiga.json +0 -245
- package/src/cli/cmd/tui/context/theme/atari.json +0 -245
- 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/borland.json +0 -245
- 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/commodore.json +0 -245
- package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
- package/src/cli/cmd/tui/context/theme/dos-edit.json +0 -245
- 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/gnu.json +0 -245
- package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
- package/src/cli/cmd/tui/context/theme/hacker.json +0 -245
- package/src/cli/cmd/tui/context/theme/irix.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/mac84.json +0 -245
- 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/norton.json +0 -245
- package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
- package/src/cli/cmd/tui/context/theme/opencode.json +0 -245
- 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/pine.json +0 -245
- package/src/cli/cmd/tui/context/theme/retrowave.json +0 -245
- 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/toolkode.json +0 -245
- package/src/cli/cmd/tui/context/theme/tron.json +0 -245
- package/src/cli/cmd/tui/context/theme/ubuntu.json +0 -245
- 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/vt100.json +0 -245
- package/src/cli/cmd/tui/context/theme/xcode.json +0 -245
- package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
- package/src/cli/cmd/tui/context/theme.tsx +0 -1288
- package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
- package/src/cli/cmd/tui/event.ts +0 -49
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -152
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -50
- package/src/cli/cmd/tui/feature-plugins/sidebar/agents-panel.tsx +0 -95
- package/src/cli/cmd/tui/feature-plugins/sidebar/btw-panel.tsx +0 -105
- package/src/cli/cmd/tui/feature-plugins/sidebar/commands-panel.tsx +0 -40
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -63
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
- package/src/cli/cmd/tui/feature-plugins/sidebar/git-panel.tsx +0 -36
- package/src/cli/cmd/tui/feature-plugins/sidebar/loop-panel.tsx +0 -124
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -96
- package/src/cli/cmd/tui/feature-plugins/sidebar/session-panel.tsx +0 -48
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -48
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -270
- package/src/cli/cmd/tui/plugin/api.tsx +0 -420
- package/src/cli/cmd/tui/plugin/index.ts +0 -3
- package/src/cli/cmd/tui/plugin/internal.ts +0 -37
- package/src/cli/cmd/tui/plugin/runtime.ts +0 -967
- package/src/cli/cmd/tui/plugin/slots.tsx +0 -61
- package/src/cli/cmd/tui/routes/home.tsx +0 -173
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -65
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -110
- 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/index.tsx +0 -2229
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -685
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -467
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -72
- package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -131
- package/src/cli/cmd/tui/thread.ts +0 -232
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -59
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -89
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -208
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -40
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -106
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -402
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -192
- 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 -192
- package/src/cli/cmd/tui/util/editor.ts +0 -37
- package/src/cli/cmd/tui/util/selection.ts +0 -25
- 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 -204
- package/src/cli/cmd/uninstall.ts +0 -353
- package/src/cli/cmd/upgrade.ts +0 -73
- package/src/cli/cmd/web.ts +0 -81
- package/src/cli/effect/prompt.ts +0 -25
- package/src/cli/error.ts +0 -46
- package/src/cli/logo.ts +0 -7
- package/src/cli/network.ts +0 -60
- package/src/cli/ui.ts +0 -116
- package/src/cli/upgrade.ts +0 -31
- package/src/command/index.ts +0 -195
- package/src/command/template/initialize.txt +0 -10
- package/src/command/template/review.txt +0 -101
- package/src/config/config.ts +0 -1693
- package/src/config/markdown.ts +0 -99
- package/src/config/migrate-tui-config.ts +0 -155
- package/src/config/paths.ts +0 -174
- package/src/config/tui-schema.ts +0 -36
- package/src/config/tui.ts +0 -212
- package/src/control-plane/adaptors/index.ts +0 -20
- package/src/control-plane/adaptors/worktree.ts +0 -38
- package/src/control-plane/schema.ts +0 -17
- package/src/control-plane/sse.ts +0 -66
- package/src/control-plane/types.ts +0 -21
- package/src/control-plane/workspace.sql.ts +0 -17
- package/src/control-plane/workspace.ts +0 -154
- package/src/cron/index.ts +0 -241
- package/src/cron/parse.ts +0 -189
- package/src/effect/cross-spawn-spawner.ts +0 -479
- package/src/effect/instance-registry.ts +0 -12
- package/src/effect/instance-state.ts +0 -47
- package/src/effect/run-service.ts +0 -19
- package/src/env/index.ts +0 -28
- package/src/file/ignore.ts +0 -82
- package/src/file/index.ts +0 -693
- package/src/file/protected.ts +0 -59
- package/src/file/ripgrep.ts +0 -376
- package/src/file/time.ts +0 -128
- package/src/file/watcher.ts +0 -171
- package/src/filesystem/index.ts +0 -226
- package/src/flag/flag.ts +0 -157
- package/src/format/formatter.ts +0 -396
- package/src/format/index.ts +0 -199
- package/src/global/index.ts +0 -54
- package/src/hooks/index.ts +0 -302
- package/src/id/id.ts +0 -85
- package/src/ide/index.ts +0 -74
- package/src/index.ts +0 -243
- package/src/installation/index.ts +0 -363
- package/src/lsp/client.ts +0 -252
- package/src/lsp/index.ts +0 -558
- package/src/lsp/language.ts +0 -120
- package/src/lsp/launch.ts +0 -21
- package/src/lsp/server.ts +0 -2093
- package/src/mcp/auth.ts +0 -181
- package/src/mcp/index.ts +0 -926
- package/src/mcp/oauth-callback.ts +0 -215
- package/src/mcp/oauth-provider.ts +0 -185
- package/src/node.ts +0 -1
- package/src/patch/index.ts +0 -680
- package/src/permission/arity.ts +0 -163
- package/src/permission/evaluate.ts +0 -15
- package/src/permission/index.ts +0 -322
- package/src/permission/schema.ts +0 -17
- package/src/plugin/codex.ts +0 -628
- package/src/plugin/copilot.ts +0 -343
- package/src/plugin/index.ts +0 -331
- package/src/plugin/install.ts +0 -384
- package/src/plugin/meta.ts +0 -165
- package/src/plugin/shared.ts +0 -172
- package/src/project/bootstrap.ts +0 -31
- package/src/project/instance.ts +0 -167
- package/src/project/project.sql.ts +0 -16
- package/src/project/project.ts +0 -519
- package/src/project/schema.ts +0 -16
- package/src/project/state.ts +0 -70
- package/src/project/vcs.ts +0 -124
- package/src/provider/auth.ts +0 -252
- package/src/provider/error.ts +0 -197
- package/src/provider/models.ts +0 -138
- package/src/provider/provider.ts +0 -1593
- package/src/provider/schema.ts +0 -39
- package/src/provider/sdk/copilot/README.md +0 -5
- package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
- 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 -19
- 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 -815
- 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 -83
- 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 -335
- 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 -214
- package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1769
- package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
- package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
- package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
- package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
- package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
- package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
- package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
- package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
- package/src/provider/toolkit-manifest.ts +0 -110
- package/src/provider/transform.ts +0 -1045
- package/src/pty/index.ts +0 -397
- package/src/pty/schema.ts +0 -17
- package/src/question/index.ts +0 -221
- package/src/question/schema.ts +0 -17
- package/src/server/error.ts +0 -36
- package/src/server/event.ts +0 -7
- package/src/server/instance.ts +0 -285
- package/src/server/mdns.ts +0 -60
- package/src/server/middleware.ts +0 -29
- package/src/server/projectors.ts +0 -28
- package/src/server/router.ts +0 -99
- package/src/server/routes/config.ts +0 -92
- package/src/server/routes/event.ts +0 -83
- package/src/server/routes/experimental.ts +0 -271
- package/src/server/routes/file.ts +0 -197
- package/src/server/routes/global.ts +0 -339
- package/src/server/routes/mcp.ts +0 -225
- package/src/server/routes/permission.ts +0 -69
- package/src/server/routes/project.ts +0 -118
- package/src/server/routes/provider.ts +0 -171
- package/src/server/routes/pty.ts +0 -211
- package/src/server/routes/question.ts +0 -99
- package/src/server/routes/session.ts +0 -1031
- package/src/server/routes/tui.ts +0 -379
- package/src/server/routes/workspace.ts +0 -94
- package/src/server/server.ts +0 -312
- package/src/session/compaction.ts +0 -424
- package/src/session/index.ts +0 -882
- package/src/session/instruction.ts +0 -321
- package/src/session/llm.ts +0 -341
- package/src/session/message-v2.ts +0 -1030
- package/src/session/message.ts +0 -191
- package/src/session/overflow.ts +0 -22
- package/src/session/processor.ts +0 -554
- package/src/session/projectors.ts +0 -135
- 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.txt +0 -79
- package/src/session/prompt/copilot-gpt-5.txt +0 -143
- package/src/session/prompt/default.txt +0 -108
- package/src/session/prompt/gemini.txt +0 -155
- package/src/session/prompt/gpt.txt +0 -107
- 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/trinity.txt +0 -97
- package/src/session/prompt.ts +0 -2058
- package/src/session/retry.ts +0 -106
- package/src/session/revert.ts +0 -138
- package/src/session/schema.ts +0 -38
- package/src/session/session.sql.ts +0 -103
- package/src/session/status.ts +0 -102
- package/src/session/summary.ts +0 -170
- package/src/session/system.ts +0 -74
- package/src/session/todo.ts +0 -57
- package/src/share/share-next.ts +0 -288
- package/src/share/share.sql.ts +0 -13
- package/src/shell/shell.ts +0 -73
- package/src/skill/discovery.ts +0 -116
- package/src/skill/index.ts +0 -284
- package/src/skills-marketplace/index.ts +0 -305
- package/src/snapshot/index.ts +0 -489
- package/src/sql.d.ts +0 -4
- package/src/storage/db.bun.ts +0 -8
- package/src/storage/db.node.ts +0 -8
- package/src/storage/db.ts +0 -177
- package/src/storage/json-migration.ts +0 -425
- package/src/storage/schema.sql.ts +0 -10
- package/src/storage/schema.ts +0 -5
- package/src/storage/storage.ts +0 -217
- package/src/sync/README.md +0 -179
- package/src/sync/event.sql.ts +0 -16
- package/src/sync/index.ts +0 -263
- package/src/sync/schema.ts +0 -14
- package/src/team/index.ts +0 -428
- package/src/tool/apply_patch.ts +0 -281
- package/src/tool/apply_patch.txt +0 -33
- package/src/tool/bash.ts +0 -271
- package/src/tool/bash.txt +0 -115
- package/src/tool/batch.ts +0 -183
- package/src/tool/batch.txt +0 -24
- package/src/tool/codesearch.ts +0 -132
- package/src/tool/codesearch.txt +0 -12
- package/src/tool/cron-create.ts +0 -54
- package/src/tool/cron-create.txt +0 -16
- package/src/tool/cron-delete.ts +0 -29
- package/src/tool/cron-delete.txt +0 -1
- package/src/tool/cron-list.ts +0 -41
- package/src/tool/cron-list.txt +0 -1
- package/src/tool/edit.ts +0 -667
- package/src/tool/edit.txt +0 -10
- package/src/tool/external-directory.ts +0 -32
- package/src/tool/glob.ts +0 -78
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.ts +0 -156
- 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 -97
- 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 -131
- package/src/tool/question.ts +0 -33
- package/src/tool/question.txt +0 -10
- package/src/tool/read.ts +0 -293
- package/src/tool/read.txt +0 -14
- package/src/tool/registry.ts +0 -232
- package/src/tool/schema.ts +0 -17
- package/src/tool/send-message.ts +0 -59
- package/src/tool/send-message.txt +0 -7
- package/src/tool/skill.ts +0 -105
- package/src/tool/task.ts +0 -230
- package/src/tool/task.txt +0 -62
- package/src/tool/team.ts +0 -235
- package/src/tool/team.txt +0 -22
- package/src/tool/todo.ts +0 -31
- package/src/tool/todowrite.txt +0 -167
- package/src/tool/tool.ts +0 -90
- package/src/tool/truncate.ts +0 -144
- package/src/tool/truncation-dir.ts +0 -4
- package/src/tool/webfetch.ts +0 -206
- 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 -84
- package/src/tool/write.txt +0 -8
- package/src/util/abort.ts +0 -35
- package/src/util/archive.ts +0 -17
- package/src/util/color.ts +0 -19
- package/src/util/context.ts +0 -25
- package/src/util/data-url.ts +0 -9
- package/src/util/defer.ts +0 -12
- package/src/util/effect-http-client.ts +0 -11
- package/src/util/effect-zod.ts +0 -98
- package/src/util/error.ts +0 -77
- package/src/util/filesystem.ts +0 -203
- package/src/util/flock.ts +0 -333
- package/src/util/fn.ts +0 -21
- package/src/util/format.ts +0 -20
- package/src/util/git.ts +0 -35
- package/src/util/glob.ts +0 -34
- package/src/util/hash.ts +0 -7
- package/src/util/iife.ts +0 -3
- package/src/util/keybind.ts +0 -103
- package/src/util/lazy.ts +0 -23
- package/src/util/locale.ts +0 -81
- package/src/util/lock.ts +0 -98
- package/src/util/log.ts +0 -182
- package/src/util/network.ts +0 -9
- package/src/util/process.ts +0 -172
- package/src/util/queue.ts +0 -32
- package/src/util/record.ts +0 -3
- package/src/util/rpc.ts +0 -66
- package/src/util/schema.ts +0 -53
- 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/update-schema.ts +0 -13
- package/src/util/which.ts +0 -14
- package/src/util/wildcard.ts +0 -59
- package/src/worktree/index.ts +0 -638
- package/sst-env.d.ts +0 -10
- package/test/AGENTS.md +0 -81
- package/test/account/repo.test.ts +0 -326
- package/test/account/service.test.ts +0 -282
- package/test/acp/agent-interface.test.ts +0 -51
- package/test/acp/event-subscription.test.ts +0 -685
- package/test/agent/agent.test.ts +0 -717
- package/test/auth/auth.test.ts +0 -58
- package/test/bun.test.ts +0 -53
- package/test/bus/bus-effect.test.ts +0 -164
- package/test/bus/bus-integration.test.ts +0 -87
- package/test/bus/bus.test.ts +0 -219
- package/test/cli/account.test.ts +0 -26
- package/test/cli/cmd/tui/prompt-part.test.ts +0 -47
- package/test/cli/github-action.test.ts +0 -198
- package/test/cli/github-remote.test.ts +0 -80
- package/test/cli/import.test.ts +0 -54
- package/test/cli/plugin-auth-picker.test.ts +0 -120
- package/test/cli/tui/keybind-plugin.test.ts +0 -90
- package/test/cli/tui/plugin-add.test.ts +0 -61
- package/test/cli/tui/plugin-install.test.ts +0 -95
- package/test/cli/tui/plugin-lifecycle.test.ts +0 -225
- package/test/cli/tui/plugin-loader-entrypoint.test.ts +0 -189
- package/test/cli/tui/plugin-loader-pure.test.ts +0 -71
- package/test/cli/tui/plugin-loader.test.ts +0 -563
- package/test/cli/tui/plugin-toggle.test.ts +0 -157
- package/test/cli/tui/theme-store.test.ts +0 -51
- package/test/cli/tui/thread.test.ts +0 -128
- 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 -2187
- 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/config/tui.test.ts +0 -667
- package/test/control-plane/sse.test.ts +0 -56
- package/test/effect/cross-spawn-spawner.test.ts +0 -402
- package/test/effect/instance-state.test.ts +0 -384
- package/test/effect/run-service.test.ts +0 -46
- package/test/file/fsmonitor.test.ts +0 -62
- package/test/file/ignore.test.ts +0 -10
- package/test/file/index.test.ts +0 -946
- package/test/file/path-traversal.test.ts +0 -198
- package/test/file/ripgrep.test.ts +0 -54
- package/test/file/time.test.ts +0 -354
- package/test/file/watcher.test.ts +0 -247
- package/test/filesystem/filesystem.test.ts +0 -319
- package/test/fixture/db.ts +0 -11
- package/test/fixture/fixture.test.ts +0 -26
- package/test/fixture/fixture.ts +0 -141
- package/test/fixture/flock-worker.ts +0 -72
- package/test/fixture/lsp/fake-lsp-server.js +0 -77
- package/test/fixture/plug-worker.ts +0 -93
- package/test/fixture/plugin-meta-worker.ts +0 -26
- package/test/fixture/skills/agents-sdk/SKILL.md +0 -152
- package/test/fixture/skills/agents-sdk/references/callable.md +0 -92
- package/test/fixture/skills/cloudflare/SKILL.md +0 -211
- package/test/fixture/skills/index.json +0 -6
- package/test/fixture/tui-plugin.ts +0 -335
- package/test/fixture/tui-runtime.ts +0 -34
- package/test/format/format.test.ts +0 -179
- package/test/ide/ide.test.ts +0 -82
- package/test/installation/installation.test.ts +0 -151
- package/test/keybind.test.ts +0 -421
- package/test/lib/effect.ts +0 -37
- package/test/lib/filesystem.ts +0 -10
- package/test/lsp/client.test.ts +0 -95
- package/test/lsp/index.test.ts +0 -55
- package/test/lsp/launch.test.ts +0 -22
- package/test/lsp/lifecycle.test.ts +0 -147
- package/test/mcp/headers.test.ts +0 -153
- package/test/mcp/lifecycle.test.ts +0 -750
- package/test/mcp/oauth-auto-connect.test.ts +0 -199
- package/test/mcp/oauth-browser.test.ts +0 -249
- package/test/memory/abort-leak.test.ts +0 -137
- package/test/patch/patch.test.ts +0 -348
- package/test/permission/arity.test.ts +0 -33
- package/test/permission/next.test.ts +0 -1148
- package/test/permission-task.test.ts +0 -323
- package/test/plugin/auth-override.test.ts +0 -74
- package/test/plugin/codex.test.ts +0 -123
- package/test/plugin/install-concurrency.test.ts +0 -134
- package/test/plugin/install.test.ts +0 -504
- package/test/plugin/loader-shared.test.ts +0 -625
- package/test/plugin/meta.test.ts +0 -137
- package/test/plugin/trigger.test.ts +0 -111
- package/test/preload.ts +0 -90
- package/test/project/migrate-global.test.ts +0 -140
- package/test/project/project.test.ts +0 -459
- package/test/project/state.test.ts +0 -115
- package/test/project/vcs.test.ts +0 -116
- package/test/project/worktree-remove.test.ts +0 -96
- package/test/project/worktree.test.ts +0 -173
- package/test/provider/amazon-bedrock.test.ts +0 -447
- 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 -412
- package/test/provider/provider.test.ts +0 -2284
- package/test/provider/transform.test.ts +0 -2758
- package/test/pty/pty-output-isolation.test.ts +0 -141
- package/test/pty/pty-session.test.ts +0 -92
- package/test/question/question.test.ts +0 -453
- package/test/server/global-session-list.test.ts +0 -89
- package/test/server/project-init-git.test.ts +0 -121
- package/test/server/session-list.test.ts +0 -90
- package/test/server/session-messages.test.ts +0 -132
- package/test/server/session-select.test.ts +0 -78
- package/test/session/compaction.test.ts +0 -1094
- package/test/session/instruction.test.ts +0 -170
- package/test/session/llm.test.ts +0 -882
- package/test/session/message-v2.test.ts +0 -957
- package/test/session/messages-pagination.test.ts +0 -115
- package/test/session/processor-effect.test.ts +0 -838
- package/test/session/prompt.test.ts +0 -518
- package/test/session/retry.test.ts +0 -232
- package/test/session/revert-compact.test.ts +0 -286
- package/test/session/session.test.ts +0 -142
- package/test/session/structured-output-integration.test.ts +0 -233
- package/test/session/structured-output.test.ts +0 -391
- package/test/session/system.test.ts +0 -59
- package/test/share/share-next.test.ts +0 -76
- package/test/skill/discovery.test.ts +0 -116
- package/test/skill/skill.test.ts +0 -392
- package/test/snapshot/snapshot.test.ts +0 -1235
- package/test/storage/db.test.ts +0 -14
- package/test/storage/json-migration.test.ts +0 -849
- package/test/sync/index.test.ts +0 -191
- package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
- package/test/tool/apply_patch.test.ts +0 -567
- package/test/tool/bash.test.ts +0 -403
- package/test/tool/edit.test.ts +0 -681
- package/test/tool/external-directory.test.ts +0 -128
- 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 -111
- package/test/tool/question.test.ts +0 -108
- package/test/tool/read.test.ts +0 -509
- package/test/tool/registry.test.ts +0 -126
- package/test/tool/skill.test.ts +0 -167
- package/test/tool/task.test.ts +0 -49
- package/test/tool/truncation.test.ts +0 -161
- package/test/tool/webfetch.test.ts +0 -101
- package/test/tool/write.test.ts +0 -353
- package/test/util/data-url.test.ts +0 -14
- package/test/util/effect-zod.test.ts +0 -61
- package/test/util/error.test.ts +0 -38
- package/test/util/filesystem.test.ts +0 -558
- package/test/util/flock.test.ts +0 -383
- package/test/util/format.test.ts +0 -59
- package/test/util/glob.test.ts +0 -164
- 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/module.test.ts +0 -59
- package/test/util/process.test.ts +0 -128
- package/test/util/timeout.test.ts +0 -21
- package/test/util/which.test.ts +0 -100
- package/test/util/wildcard.test.ts +0 -90
- package/tsconfig.json +0 -23
package/script/publish.ts
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { $ } from "bun"
|
|
3
|
-
import pkg from "../package.json"
|
|
4
|
-
import { Script } from "@toolkit-cli/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/toolkit-llm/toolkode"
|
|
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/opencode-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
62
|
-
const x64Sha = await $`sha256sum ./dist/opencode-linux-x64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
63
|
-
const macX64Sha = await $`sha256sum ./dist/opencode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
64
|
-
const macArm64Sha = await $`sha256sum ./dist/opencode-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='opencode-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/toolkit-llm/toolkode'",
|
|
80
|
-
"arch=('aarch64' 'x86_64')",
|
|
81
|
-
"license=('MIT')",
|
|
82
|
-
"provides=('opencode')",
|
|
83
|
-
"conflicts=('opencode')",
|
|
84
|
-
"depends=('ripgrep')",
|
|
85
|
-
"",
|
|
86
|
-
`source_aarch64=("\${pkgname}_\${pkgver}_aarch64.tar.gz::https://github.com/aaronmrosenthal/toolkode-releases/releases/download/v\${pkgver}\${_subver}/opencode-linux-arm64.tar.gz")`,
|
|
87
|
-
`sha256sums_aarch64=('${arm64Sha}')`,
|
|
88
|
-
|
|
89
|
-
`source_x86_64=("\${pkgname}_\${pkgver}_x86_64.tar.gz::https://github.com/aaronmrosenthal/toolkode-releases/releases/download/v\${pkgver}\${_subver}/opencode-linux-x64.tar.gz")`,
|
|
90
|
-
`sha256sums_x86_64=('${x64Sha}')`,
|
|
91
|
-
"",
|
|
92
|
-
"package() {",
|
|
93
|
-
' install -Dm755 ./opencode "${pkgdir}/usr/bin/opencode"',
|
|
94
|
-
"}",
|
|
95
|
-
"",
|
|
96
|
-
].join("\n")
|
|
97
|
-
|
|
98
|
-
for (const [pkg, pkgbuild] of [["opencode-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
|
-
"class Toolkode < Formula",
|
|
122
|
-
` desc "The AI engineering terminal. Free."`,
|
|
123
|
-
` homepage "https://toolkode.com"`,
|
|
124
|
-
` license :cannot_represent`,,
|
|
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/aaronmrosenthal/toolkode-releases/releases/download/v${Script.version}/@toolkit-cli/toolkode-darwin-x64.zip"`,
|
|
132
|
-
` sha256 "${macX64Sha}"`,
|
|
133
|
-
"",
|
|
134
|
-
" def install",
|
|
135
|
-
' bin.install "toolkode"',
|
|
136
|
-
" end",
|
|
137
|
-
" end",
|
|
138
|
-
" if Hardware::CPU.arm?",
|
|
139
|
-
` url "https://github.com/aaronmrosenthal/toolkode-releases/releases/download/v${Script.version}/@toolkit-cli/toolkode-darwin-arm64.zip"`,
|
|
140
|
-
` sha256 "${macArm64Sha}"`,
|
|
141
|
-
"",
|
|
142
|
-
" def install",
|
|
143
|
-
' bin.install "toolkode"',
|
|
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/aaronmrosenthal/toolkode-releases/releases/download/v${Script.version}/@toolkit-cli/toolkode-linux-x64.tar.gz"`,
|
|
151
|
-
` sha256 "${x64Sha}"`,
|
|
152
|
-
" def install",
|
|
153
|
-
' bin.install "toolkode"',
|
|
154
|
-
" end",
|
|
155
|
-
" end",
|
|
156
|
-
" if Hardware::CPU.arm? and Hardware::CPU.is_64_bit?",
|
|
157
|
-
` url "https://github.com/aaronmrosenthal/toolkode-releases/releases/download/v${Script.version}/@toolkit-cli/toolkode-linux-arm64.tar.gz"`,
|
|
158
|
-
` sha256 "${arm64Sha}"`,
|
|
159
|
-
" def install",
|
|
160
|
-
' bin.install "toolkode"',
|
|
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/aaronmrosenthal/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/toolkode.rb").write(homebrewFormula)
|
|
178
|
-
await $`cd ./dist/homebrew-tap && git add toolkode.rb`
|
|
179
|
-
await $`cd ./dist/homebrew-tap && git commit -m "toolkode v${Script.version}"`
|
|
180
|
-
await $`cd ./dist/homebrew-tap && git push`
|
|
181
|
-
}
|
package/script/schema.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { z } from "zod"
|
|
4
|
-
import { Config } from "../src/config/config"
|
|
5
|
-
import { TuiConfig } from "../src/config/tui"
|
|
6
|
-
|
|
7
|
-
function generate(schema: z.ZodType) {
|
|
8
|
-
const result = z.toJSONSchema(schema, {
|
|
9
|
-
io: "input", // Generate input shape (treats optional().default() as not required)
|
|
10
|
-
/**
|
|
11
|
-
* We'll use the `default` values of the field as the only value in `examples`.
|
|
12
|
-
* This will ensure no docs are needed to be read, as the configuration is
|
|
13
|
-
* self-documenting.
|
|
14
|
-
*
|
|
15
|
-
* See https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.9.5
|
|
16
|
-
*/
|
|
17
|
-
override(ctx) {
|
|
18
|
-
const schema = ctx.jsonSchema
|
|
19
|
-
|
|
20
|
-
// Preserve strictness: set additionalProperties: false for objects
|
|
21
|
-
if (
|
|
22
|
-
schema &&
|
|
23
|
-
typeof schema === "object" &&
|
|
24
|
-
schema.type === "object" &&
|
|
25
|
-
schema.additionalProperties === undefined
|
|
26
|
-
) {
|
|
27
|
-
schema.additionalProperties = false
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Add examples and default descriptions for string fields with defaults
|
|
31
|
-
if (schema && typeof schema === "object" && "type" in schema && schema.type === "string" && schema?.default) {
|
|
32
|
-
if (!schema.examples) {
|
|
33
|
-
schema.examples = [schema.default]
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
schema.description = [schema.description || "", `default: \`${schema.default}\``]
|
|
37
|
-
.filter(Boolean)
|
|
38
|
-
.join("\n\n")
|
|
39
|
-
.trim()
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
}) as Record<string, unknown> & {
|
|
43
|
-
allowComments?: boolean
|
|
44
|
-
allowTrailingCommas?: boolean
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// used for json lsps since config supports jsonc
|
|
48
|
-
result.allowComments = true
|
|
49
|
-
result.allowTrailingCommas = true
|
|
50
|
-
|
|
51
|
-
return result
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const configFile = process.argv[2]
|
|
55
|
-
const tuiFile = process.argv[3]
|
|
56
|
-
|
|
57
|
-
console.log(configFile)
|
|
58
|
-
await Bun.write(configFile, JSON.stringify(generate(Config.Info), null, 2))
|
|
59
|
-
|
|
60
|
-
if (tuiFile) {
|
|
61
|
-
console.log(tuiFile)
|
|
62
|
-
await Bun.write(tuiFile, JSON.stringify(generate(TuiConfig.Info), null, 2))
|
|
63
|
-
}
|
package/script/seed-e2e.ts
DELETED
|
@@ -1,60 +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 { Config } = await import("../src/config/config")
|
|
14
|
-
const { Session } = await import("../src/session")
|
|
15
|
-
const { MessageID, PartID } = await import("../src/session/schema")
|
|
16
|
-
const { Project } = await import("../src/project/project")
|
|
17
|
-
const { ModelID, ProviderID } = await import("../src/provider/schema")
|
|
18
|
-
const { ToolRegistry } = await import("../src/tool/registry")
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
await Instance.provide({
|
|
22
|
-
directory: dir,
|
|
23
|
-
init: InstanceBootstrap,
|
|
24
|
-
fn: async () => {
|
|
25
|
-
await Config.waitForDependencies()
|
|
26
|
-
await ToolRegistry.ids()
|
|
27
|
-
|
|
28
|
-
const session = await Session.create({ title })
|
|
29
|
-
const messageID = MessageID.ascending()
|
|
30
|
-
const partID = PartID.ascending()
|
|
31
|
-
const message = {
|
|
32
|
-
id: messageID,
|
|
33
|
-
sessionID: session.id,
|
|
34
|
-
role: "user" as const,
|
|
35
|
-
time: { created: now },
|
|
36
|
-
agent: "build",
|
|
37
|
-
model: {
|
|
38
|
-
providerID: ProviderID.make(providerID),
|
|
39
|
-
modelID: ModelID.make(modelID),
|
|
40
|
-
},
|
|
41
|
-
}
|
|
42
|
-
const part = {
|
|
43
|
-
id: partID,
|
|
44
|
-
sessionID: session.id,
|
|
45
|
-
messageID,
|
|
46
|
-
type: "text" as const,
|
|
47
|
-
text,
|
|
48
|
-
time: { start: now },
|
|
49
|
-
}
|
|
50
|
-
await Session.updateMessage(message)
|
|
51
|
-
await Session.updatePart(part)
|
|
52
|
-
await Project.update({ projectID: Instance.project.id, name: "E2E Project" })
|
|
53
|
-
},
|
|
54
|
-
})
|
|
55
|
-
} finally {
|
|
56
|
-
await Instance.disposeAll().catch(() => {})
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
await seed()
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import path from "node:path"
|
|
4
|
-
|
|
5
|
-
const raw = process.argv[2]
|
|
6
|
-
if (!raw) {
|
|
7
|
-
console.error("Usage: bun run script/upgrade-opentui.ts <version>")
|
|
8
|
-
process.exit(1)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const ver = raw.replace(/^v/, "")
|
|
12
|
-
const root = path.resolve(import.meta.dir, "../../..")
|
|
13
|
-
const skip = new Set([".git", ".opencode", ".turbo", "dist", "node_modules"])
|
|
14
|
-
const keys = ["@opentui/core", "@opentui/solid"] as const
|
|
15
|
-
|
|
16
|
-
const files = (await Array.fromAsync(new Bun.Glob("**/package.json").scan({ cwd: root }))).filter(
|
|
17
|
-
(file) => !file.split("/").some((part) => skip.has(part)),
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
const set = (cur: string) => {
|
|
21
|
-
if (cur.startsWith(">=")) return `>=${ver}`
|
|
22
|
-
if (cur.startsWith("^")) return `^${ver}`
|
|
23
|
-
if (cur.startsWith("~")) return `~${ver}`
|
|
24
|
-
return ver
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const edit = (obj: unknown) => {
|
|
28
|
-
if (!obj || typeof obj !== "object") return false
|
|
29
|
-
const map = obj as Record<string, unknown>
|
|
30
|
-
return keys
|
|
31
|
-
.map((key) => {
|
|
32
|
-
const cur = map[key]
|
|
33
|
-
if (typeof cur !== "string") return false
|
|
34
|
-
const next = set(cur)
|
|
35
|
-
if (next === cur) return false
|
|
36
|
-
map[key] = next
|
|
37
|
-
return true
|
|
38
|
-
})
|
|
39
|
-
.some(Boolean)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const out = (
|
|
43
|
-
await Promise.all(
|
|
44
|
-
files.map(async (rel) => {
|
|
45
|
-
const file = path.join(root, rel)
|
|
46
|
-
const txt = await Bun.file(file).text()
|
|
47
|
-
const json = JSON.parse(txt)
|
|
48
|
-
const hit = [json.dependencies, json.devDependencies, json.peerDependencies].map(edit).some(Boolean)
|
|
49
|
-
if (!hit) return null
|
|
50
|
-
await Bun.write(file, `${JSON.stringify(json, null, 2)}\n`)
|
|
51
|
-
return rel
|
|
52
|
-
}),
|
|
53
|
-
)
|
|
54
|
-
).filter((item): item is string => item !== null)
|
|
55
|
-
|
|
56
|
-
if (out.length === 0) {
|
|
57
|
-
console.log("No opentui deps found")
|
|
58
|
-
process.exit(0)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
console.log(`Updated opentui to ${ver} in:`)
|
|
62
|
-
for (const file of out) {
|
|
63
|
-
console.log(`- ${file}`)
|
|
64
|
-
}
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
# Effect patterns
|
|
2
|
-
|
|
3
|
-
Practical reference for new and migrated Effect code in `packages/toolkode`.
|
|
4
|
-
|
|
5
|
-
## Choose scope
|
|
6
|
-
|
|
7
|
-
Use `InstanceState` (from `src/effect/instance-state.ts`) for services that need per-directory state, per-instance cleanup, or project-bound background work. InstanceState uses a `ScopedCache` keyed by directory, so each open project gets its own copy of the state that is automatically cleaned up on disposal.
|
|
8
|
-
|
|
9
|
-
Use `makeRuntime` (from `src/effect/run-service.ts`) to create a per-service `ManagedRuntime` that lazily initializes and shares layers via a global `memoMap`. Returns `{ runPromise, runFork, runCallback }`.
|
|
10
|
-
|
|
11
|
-
- Global services (no per-directory state): Account, Auth, AppFileSystem, Installation, Truncate, Worktree
|
|
12
|
-
- Instance-scoped (per-directory state via InstanceState): Agent, Bus, Command, Config, File, FileTime, FileWatcher, Format, LSP, MCP, Permission, Plugin, ProviderAuth, Pty, Question, SessionStatus, Skill, Snapshot, ToolRegistry, Vcs
|
|
13
|
-
|
|
14
|
-
Rule of thumb: if two open directories should not share one copy of the service, it needs `InstanceState`.
|
|
15
|
-
|
|
16
|
-
## Service shape
|
|
17
|
-
|
|
18
|
-
Every service follows the same pattern — a single namespace with the service definition, layer, `runPromise`, and async facade functions:
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
export namespace Foo {
|
|
22
|
-
export interface Interface {
|
|
23
|
-
readonly get: (id: FooID) => Effect.Effect<FooInfo, FooError>
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export class Service extends ServiceMap.Service<Service, Interface>()("@opencode/Foo") {}
|
|
27
|
-
|
|
28
|
-
export const layer = Layer.effect(
|
|
29
|
-
Service,
|
|
30
|
-
Effect.gen(function* () {
|
|
31
|
-
// For instance-scoped services:
|
|
32
|
-
const state = yield* InstanceState.make<State>(
|
|
33
|
-
Effect.fn("Foo.state")(() => Effect.succeed({ ... })),
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
const get = Effect.fn("Foo.get")(function* (id: FooID) {
|
|
37
|
-
const s = yield* InstanceState.get(state)
|
|
38
|
-
// ...
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
return Service.of({ get })
|
|
42
|
-
}),
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
// Optional: wire dependencies
|
|
46
|
-
export const defaultLayer = layer.pipe(Layer.provide(FooDep.layer))
|
|
47
|
-
|
|
48
|
-
// Per-service runtime (inside the namespace)
|
|
49
|
-
const { runPromise } = makeRuntime(Service, defaultLayer)
|
|
50
|
-
|
|
51
|
-
// Async facade functions
|
|
52
|
-
export async function get(id: FooID) {
|
|
53
|
-
return runPromise((svc) => svc.get(id))
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Rules:
|
|
59
|
-
|
|
60
|
-
- Keep everything in one namespace, one file — no separate `service.ts` / `index.ts` split
|
|
61
|
-
- `runPromise` goes inside the namespace (not exported unless tests need it)
|
|
62
|
-
- Facade functions are plain `async function` — no `fn()` wrappers
|
|
63
|
-
- Use `Effect.fn("Namespace.method")` for all Effect functions (for tracing)
|
|
64
|
-
- No `Layer.fresh` — InstanceState handles per-directory isolation
|
|
65
|
-
|
|
66
|
-
## Schema → Zod interop
|
|
67
|
-
|
|
68
|
-
When a service uses Effect Schema internally but needs Zod schemas for the HTTP layer, derive Zod from Schema using the `zod()` helper from `@/util/effect-zod`:
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
import { zod } from "@/util/effect-zod"
|
|
72
|
-
|
|
73
|
-
export const ZodInfo = zod(Info) // derives z.ZodType from Schema.Union
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
See `Auth.ZodInfo` for the canonical example.
|
|
77
|
-
|
|
78
|
-
## InstanceState init patterns
|
|
79
|
-
|
|
80
|
-
The `InstanceState.make` init callback receives a `Scope`, so you can use `Effect.acquireRelease`, `Effect.addFinalizer`, and `Effect.forkScoped` inside it. Resources acquired this way are automatically cleaned up when the instance is disposed or invalidated by `ScopedCache`. This makes it the right place for:
|
|
81
|
-
|
|
82
|
-
- **Subscriptions**: Yield `Bus.Service` at the layer level, then use `Stream` + `forkScoped` inside the init closure. The fiber is automatically interrupted when the instance scope closes:
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
const bus = yield * Bus.Service
|
|
86
|
-
|
|
87
|
-
const cache =
|
|
88
|
-
yield *
|
|
89
|
-
InstanceState.make<State>(
|
|
90
|
-
Effect.fn("Foo.state")(function* (ctx) {
|
|
91
|
-
// ... load state ...
|
|
92
|
-
|
|
93
|
-
yield* bus.subscribeAll().pipe(
|
|
94
|
-
Stream.runForEach((event) =>
|
|
95
|
-
Effect.sync(() => {
|
|
96
|
-
/* handle */
|
|
97
|
-
}),
|
|
98
|
-
),
|
|
99
|
-
Effect.forkScoped,
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
return {
|
|
103
|
-
/* state */
|
|
104
|
-
}
|
|
105
|
-
}),
|
|
106
|
-
)
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
- **Resource cleanup**: Use `Effect.acquireRelease` or `Effect.addFinalizer` for resources that need teardown (native watchers, process handles, etc.):
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
yield *
|
|
113
|
-
Effect.acquireRelease(
|
|
114
|
-
Effect.sync(() => nativeAddon.watch(dir)),
|
|
115
|
-
(watcher) => Effect.sync(() => watcher.close()),
|
|
116
|
-
)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
- **Background fibers**: Use `Effect.forkScoped` — the fiber is interrupted on disposal.
|
|
120
|
-
- **Side effects at init**: Config notification, event wiring, etc. all belong in the init closure. Callers just do `InstanceState.get(cache)` to trigger everything, and `ScopedCache` deduplicates automatically.
|
|
121
|
-
|
|
122
|
-
The key insight: don't split init into a separate method with a `started` flag. Put everything in the `InstanceState.make` closure and let `ScopedCache` handle the run-once semantics.
|
|
123
|
-
|
|
124
|
-
## Effect.cached for deduplication
|
|
125
|
-
|
|
126
|
-
Use `Effect.cached` when multiple concurrent callers should share a single in-flight computation. It memoizes the result and deduplicates concurrent fibers — second caller joins the first caller's fiber instead of starting a new one.
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
// Inside the layer — yield* to initialize the memo
|
|
130
|
-
let cached = yield * Effect.cached(loadExpensive())
|
|
131
|
-
|
|
132
|
-
const get = Effect.fn("Foo.get")(function* () {
|
|
133
|
-
return yield* cached // concurrent callers share the same fiber
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
// To invalidate: swap in a fresh memo
|
|
137
|
-
const invalidate = Effect.fn("Foo.invalidate")(function* () {
|
|
138
|
-
cached = yield* Effect.cached(loadExpensive())
|
|
139
|
-
})
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Prefer `Effect.cached` over these patterns:
|
|
143
|
-
|
|
144
|
-
- Storing a `Fiber.Fiber | undefined` with manual check-and-fork (e.g. `file/index.ts` `ensure`)
|
|
145
|
-
- Storing a `Promise<void>` task for deduplication (e.g. `skill/index.ts` `ensure`)
|
|
146
|
-
- `let cached: X | undefined` with check-and-load (races when two callers see `undefined` before either resolves)
|
|
147
|
-
|
|
148
|
-
`Effect.cached` handles the run-once + concurrent-join semantics automatically. For invalidatable caches, reassign with `yield* Effect.cached(...)` — the old memo is discarded.
|
|
149
|
-
|
|
150
|
-
## Scheduled Tasks
|
|
151
|
-
|
|
152
|
-
For loops or periodic work, use `Effect.repeat` or `Effect.schedule` with `Effect.forkScoped` in the layer definition.
|
|
153
|
-
|
|
154
|
-
## Preferred Effect services
|
|
155
|
-
|
|
156
|
-
In effectified services, prefer yielding existing Effect services over dropping down to ad hoc platform APIs.
|
|
157
|
-
|
|
158
|
-
Prefer these first:
|
|
159
|
-
|
|
160
|
-
- `FileSystem.FileSystem` instead of raw `fs/promises` for effectful file I/O
|
|
161
|
-
- `ChildProcessSpawner.ChildProcessSpawner` with `ChildProcess.make(...)` instead of custom process wrappers
|
|
162
|
-
- `HttpClient.HttpClient` instead of raw `fetch`
|
|
163
|
-
- `Path.Path` instead of mixing path helpers into service code when you already need a path service
|
|
164
|
-
- `Config` for effect-native configuration reads
|
|
165
|
-
- `Clock` / `DateTime` for time reads inside effects
|
|
166
|
-
|
|
167
|
-
## Child processes
|
|
168
|
-
|
|
169
|
-
For child process work in services, yield `ChildProcessSpawner.ChildProcessSpawner` in the layer and use `ChildProcess.make(...)`.
|
|
170
|
-
|
|
171
|
-
Keep shelling-out code inside the service, not in callers.
|
|
172
|
-
|
|
173
|
-
## Shared leaf models
|
|
174
|
-
|
|
175
|
-
Shared schema or model files can stay outside the service namespace when lower layers also depend on them.
|
|
176
|
-
|
|
177
|
-
That is fine for leaf files like `schema.ts`. Keep the service surface in the owning namespace.
|
|
178
|
-
|
|
179
|
-
## Migration checklist
|
|
180
|
-
|
|
181
|
-
Fully migrated (single namespace, InstanceState where needed, flattened facade):
|
|
182
|
-
|
|
183
|
-
- [x] `Account` — `account/index.ts`
|
|
184
|
-
- [x] `Agent` — `agent/agent.ts`
|
|
185
|
-
- [x] `AppFileSystem` — `filesystem/index.ts`
|
|
186
|
-
- [x] `Auth` — `auth/index.ts` (uses `zod()` helper for Schema→Zod interop)
|
|
187
|
-
- [x] `Bus` — `bus/index.ts`
|
|
188
|
-
- [x] `Command` — `command/index.ts`
|
|
189
|
-
- [x] `Config` — `config/config.ts`
|
|
190
|
-
- [x] `Discovery` — `skill/discovery.ts` (dependency-only layer, no standalone runtime)
|
|
191
|
-
- [x] `File` — `file/index.ts`
|
|
192
|
-
- [x] `FileTime` — `file/time.ts`
|
|
193
|
-
- [x] `FileWatcher` — `file/watcher.ts`
|
|
194
|
-
- [x] `Format` — `format/index.ts`
|
|
195
|
-
- [x] `Installation` — `installation/index.ts`
|
|
196
|
-
- [x] `LSP` — `lsp/index.ts`
|
|
197
|
-
- [x] `MCP` — `mcp/index.ts`
|
|
198
|
-
- [x] `McpAuth` — `mcp/auth.ts`
|
|
199
|
-
- [x] `Permission` — `permission/index.ts`
|
|
200
|
-
- [x] `Plugin` — `plugin/index.ts`
|
|
201
|
-
- [x] `Project` — `project/project.ts`
|
|
202
|
-
- [x] `ProviderAuth` — `provider/auth.ts`
|
|
203
|
-
- [x] `Pty` — `pty/index.ts`
|
|
204
|
-
- [x] `Question` — `question/index.ts`
|
|
205
|
-
- [x] `SessionStatus` — `session/status.ts`
|
|
206
|
-
- [x] `Skill` — `skill/index.ts`
|
|
207
|
-
- [x] `Snapshot` — `snapshot/index.ts`
|
|
208
|
-
- [x] `ToolRegistry` — `tool/registry.ts`
|
|
209
|
-
- [x] `Truncate` — `tool/truncate.ts`
|
|
210
|
-
- [x] `Vcs` — `project/vcs.ts`
|
|
211
|
-
- [x] `Worktree` — `worktree/index.ts`
|
|
212
|
-
|
|
213
|
-
Still open and likely worth migrating:
|
|
214
|
-
|
|
215
|
-
- [x] `Session` — `session/index.ts`
|
|
216
|
-
- [ ] `SessionProcessor` — blocked by AI SDK v6 PR (#18433)
|
|
217
|
-
- [ ] `SessionPrompt` — blocked by AI SDK v6 PR (#18433)
|
|
218
|
-
- [ ] `SessionCompaction` — blocked by AI SDK v6 PR (#18433)
|
|
219
|
-
- [ ] `Provider` — blocked by AI SDK v6 PR (#18433)
|
|
220
|
-
|
|
221
|
-
Other services not yet migrated:
|
|
222
|
-
|
|
223
|
-
- [ ] `SessionSummary` — `session/summary.ts`
|
|
224
|
-
- [ ] `SessionTodo` — `session/todo.ts`
|
|
225
|
-
- [ ] `SessionRevert` — `session/revert.ts`
|
|
226
|
-
- [ ] `Instruction` — `session/instruction.ts`
|
|
227
|
-
- [ ] `ShareNext` — `share/share-next.ts`
|
|
228
|
-
- [ ] `SyncEvent` — `sync/index.ts`
|
|
229
|
-
- [ ] `Storage` — `storage/storage.ts`
|
|
230
|
-
- [ ] `Workspace` — `control-plane/workspace.ts`
|
|
231
|
-
|
|
232
|
-
## Tool interface → Effect
|
|
233
|
-
|
|
234
|
-
Once individual tools are effectified, change `Tool.Info` (`tool/tool.ts`) so `init` and `execute` return `Effect` instead of `Promise`. This lets tool implementations compose natively with the Effect pipeline rather than being wrapped in `Effect.promise()` at the call site. Requires:
|
|
235
|
-
|
|
236
|
-
1. Migrate each tool to return Effects
|
|
237
|
-
2. Update `Tool.define()` factory to work with Effects
|
|
238
|
-
3. Update `SessionPrompt` to `yield*` tool results instead of `await`ing — blocked by AI SDK v6 PR (#18433)
|
|
239
|
-
|
|
240
|
-
Individual tools, ordered by value:
|
|
241
|
-
|
|
242
|
-
- [ ] `apply_patch.ts` — HIGH: multi-step orchestration, error accumulation, Bus events
|
|
243
|
-
- [ ] `read.ts` — HIGH: streaming I/O, readline, binary detection → FileSystem + Stream
|
|
244
|
-
- [ ] `edit.ts` — HIGH: multi-step diff/format/publish pipeline, FileWatcher lock
|
|
245
|
-
- [ ] `grep.ts` — MEDIUM: spawns ripgrep → ChildProcessSpawner, timeout handling
|
|
246
|
-
- [ ] `write.ts` — MEDIUM: permission checks, diagnostics polling, Bus events
|
|
247
|
-
- [ ] `codesearch.ts` — MEDIUM: HTTP + SSE + manual timeout → HttpClient + Effect.timeout
|
|
248
|
-
- [ ] `webfetch.ts` — MEDIUM: fetch with UA retry, size limits → HttpClient
|
|
249
|
-
- [ ] `websearch.ts` — MEDIUM: MCP over HTTP → HttpClient
|
|
250
|
-
- [ ] `batch.ts` — MEDIUM: parallel execution, per-call error recovery → Effect.all
|
|
251
|
-
- [ ] `task.ts` — MEDIUM: task state management
|
|
252
|
-
- [ ] `glob.ts` — LOW: simple async generator
|
|
253
|
-
- [ ] `lsp.ts` — LOW: dispatch switch over LSP operations
|
|
254
|
-
- [ ] `skill.ts` — LOW: skill tool adapter
|
|
255
|
-
- [ ] `plan.ts` — LOW: plan file operations
|
|
256
|
-
|
|
257
|
-
## Effect service adoption in already-migrated code
|
|
258
|
-
|
|
259
|
-
Some services are effectified but still use raw `Filesystem.*` or `Process.spawn` instead of the Effect equivalents. These are low-hanging fruit — the layers already exist, they just need the dependency swap.
|
|
260
|
-
|
|
261
|
-
### `Filesystem.*` → `AppFileSystem.Service` (yield in layer)
|
|
262
|
-
|
|
263
|
-
- [ ] `file/index.ts` — 11 calls (the File service itself)
|
|
264
|
-
- [ ] `config/config.ts` — 7 calls
|
|
265
|
-
- [ ] `auth/index.ts` — 3 calls
|
|
266
|
-
- [ ] `skill/index.ts` — 3 calls
|
|
267
|
-
- [ ] `file/time.ts` — 1 call
|
|
268
|
-
|
|
269
|
-
### `Process.spawn` → `ChildProcessSpawner` (yield in layer)
|
|
270
|
-
|
|
271
|
-
- [ ] `format/index.ts` — 1 call
|
|
272
|
-
|
|
273
|
-
## Filesystem consolidation
|
|
274
|
-
|
|
275
|
-
`util/filesystem.ts` (raw fs wrapper) is used by **64 files**. The effectified `AppFileSystem` service (`filesystem/index.ts`) exists but only has **8 consumers**. As services and tools are effectified, they should switch from `Filesystem.*` to yielding `AppFileSystem.Service` — this happens naturally during each migration, not as a separate effort.
|
|
276
|
-
|
|
277
|
-
Similarly, **28 files** still import raw `fs` or `fs/promises` directly. These should migrate to `AppFileSystem` or `Filesystem.*` as they're touched.
|
|
278
|
-
|
|
279
|
-
Current raw fs users that will convert during tool migration:
|
|
280
|
-
|
|
281
|
-
- `tool/read.ts` — fs.createReadStream, readline
|
|
282
|
-
- `tool/apply_patch.ts` — fs/promises
|
|
283
|
-
- `tool/bash.ts` — fs/promises
|
|
284
|
-
- `file/ripgrep.ts` — fs/promises
|
|
285
|
-
- `storage/storage.ts` — fs/promises
|
|
286
|
-
- `patch/index.ts` — fs, fs/promises
|
|
287
|
-
|
|
288
|
-
## Primitives & utilities
|
|
289
|
-
|
|
290
|
-
- [ ] `util/lock.ts` — reader-writer lock → Effect Semaphore/Permit
|
|
291
|
-
- [ ] `util/flock.ts` — file-based distributed lock with heartbeat → Effect.repeat + addFinalizer
|
|
292
|
-
- [ ] `util/process.ts` — child process spawn wrapper → return Effect instead of Promise
|
|
293
|
-
- [ ] `util/lazy.ts` — replace uses in Effect code with Effect.cached; keep for sync-only code
|