orynacode-ai 1.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +131 -0
- package/BUN_SHELL_MIGRATION_PLAN.md +136 -0
- package/Dockerfile +18 -0
- package/README.md +15 -0
- package/bin/orynacode +199 -0
- package/bunfig.toml +7 -0
- package/git +0 -0
- package/migration/20260511173437_session-metadata/migration.sql +1 -0
- package/migration/20260511173437_session-metadata/snapshot.json +1500 -0
- package/package.json +155 -0
- package/parsers-config.ts +386 -0
- package/script/bench-search.ts +115 -0
- package/script/bench-test-suite.ts +52 -0
- package/script/build.ts +244 -0
- package/script/generate.ts +14 -0
- package/script/httpapi-exercise.ts +1 -0
- package/script/postinstall.mjs +189 -0
- package/script/profile-test-files.ts +42 -0
- package/script/publish.ts +213 -0
- package/script/run-workspace-server +106 -0
- package/script/schema.ts +77 -0
- package/script/time.ts +6 -0
- package/script/trace-imports.ts +153 -0
- package/specs/effect/error-boundaries-plan.md +235 -0
- package/specs/effect/errors.md +207 -0
- package/specs/effect/facades.md +218 -0
- package/specs/effect/guide.md +247 -0
- package/specs/effect/instance-context.md +13 -0
- package/specs/effect/loose-ends.md +30 -0
- package/specs/effect/migration.md +62 -0
- package/specs/effect/routes.md +61 -0
- package/specs/effect/schema.md +88 -0
- package/specs/effect/server-package.md +58 -0
- package/specs/effect/todo.md +241 -0
- package/specs/effect/tools.md +88 -0
- package/specs/openapi-translation-cleanup.md +204 -0
- package/specs/tui-plugins.md +544 -0
- package/specs/v2/api.ts +67 -0
- package/specs/v2/message-shape.md +136 -0
- package/specs/v2/notifications.md +13 -0
- package/specs/v2/tui-command-shim.md +67 -0
- package/src/account/account.ts +459 -0
- package/src/account/repo.ts +170 -0
- package/src/account/schema.ts +99 -0
- package/src/account/url.ts +8 -0
- package/src/acp/agent.ts +95 -0
- package/src/acp/config-option.ts +203 -0
- package/src/acp/content.ts +250 -0
- package/src/acp/directory.ts +210 -0
- package/src/acp/error.ts +90 -0
- package/src/acp/event.ts +344 -0
- package/src/acp/permission.ts +145 -0
- package/src/acp/profile.ts +42 -0
- package/src/acp/service.ts +1062 -0
- package/src/acp/session.ts +231 -0
- package/src/acp/tool.ts +317 -0
- package/src/acp/usage.ts +239 -0
- package/src/agent/agent.ts +433 -0
- package/src/agent/generate.txt +75 -0
- package/src/agent/prompt/compaction.txt +9 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +11 -0
- package/src/agent/prompt/title.txt +44 -0
- package/src/agent/subagent-permissions.ts +35 -0
- package/src/audio.d.ts +14 -0
- package/src/auth/index.ts +96 -0
- package/src/background/job.ts +36 -0
- package/src/bus/global.ts +22 -0
- package/src/cli/bootstrap.ts +11 -0
- package/src/cli/cmd/account.ts +264 -0
- package/src/cli/cmd/acp.ts +76 -0
- package/src/cli/cmd/agent.ts +259 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/db.ts +62 -0
- package/src/cli/cmd/debug/agent.handler.ts +193 -0
- package/src/cli/cmd/debug/agent.ts +27 -0
- package/src/cli/cmd/debug/config.ts +14 -0
- package/src/cli/cmd/debug/file.ts +87 -0
- package/src/cli/cmd/debug/index.ts +87 -0
- package/src/cli/cmd/debug/lsp.ts +51 -0
- package/src/cli/cmd/debug/ripgrep.ts +99 -0
- package/src/cli/cmd/debug/scrap.ts +18 -0
- package/src/cli/cmd/debug/skill.ts +15 -0
- package/src/cli/cmd/debug/snapshot.ts +50 -0
- package/src/cli/cmd/debug/startup.ts +11 -0
- package/src/cli/cmd/debug/v2.ts +46 -0
- package/src/cli/cmd/export.ts +292 -0
- package/src/cli/cmd/generate.ts +54 -0
- package/src/cli/cmd/github.handler.ts +1593 -0
- package/src/cli/cmd/github.shared.ts +30 -0
- package/src/cli/cmd/github.ts +42 -0
- package/src/cli/cmd/import.ts +224 -0
- package/src/cli/cmd/mcp.ts +846 -0
- package/src/cli/cmd/models.ts +66 -0
- package/src/cli/cmd/plug.ts +230 -0
- package/src/cli/cmd/pr.ts +115 -0
- package/src/cli/cmd/prompt-display.ts +48 -0
- package/src/cli/cmd/providers.ts +506 -0
- package/src/cli/cmd/run/demo.ts +1274 -0
- package/src/cli/cmd/run/entry.body.ts +194 -0
- package/src/cli/cmd/run/footer.command.tsx +899 -0
- package/src/cli/cmd/run/footer.menu.tsx +306 -0
- package/src/cli/cmd/run/footer.permission.tsx +475 -0
- package/src/cli/cmd/run/footer.prompt.tsx +1207 -0
- package/src/cli/cmd/run/footer.question.tsx +579 -0
- package/src/cli/cmd/run/footer.subagent.tsx +171 -0
- package/src/cli/cmd/run/footer.ts +1092 -0
- package/src/cli/cmd/run/footer.view.tsx +935 -0
- package/src/cli/cmd/run/otel.ts +117 -0
- package/src/cli/cmd/run/permission.shared.ts +256 -0
- package/src/cli/cmd/run/prompt.shared.ts +147 -0
- package/src/cli/cmd/run/question.shared.ts +340 -0
- package/src/cli/cmd/run/runtime.boot.ts +210 -0
- package/src/cli/cmd/run/runtime.lifecycle.ts +369 -0
- package/src/cli/cmd/run/runtime.queue.ts +347 -0
- package/src/cli/cmd/run/runtime.shared.ts +17 -0
- package/src/cli/cmd/run/runtime.stdin.ts +37 -0
- package/src/cli/cmd/run/runtime.ts +879 -0
- package/src/cli/cmd/run/scrollback.shared.ts +92 -0
- package/src/cli/cmd/run/scrollback.surface.ts +435 -0
- package/src/cli/cmd/run/scrollback.writer.tsx +335 -0
- package/src/cli/cmd/run/session-data.ts +1113 -0
- package/src/cli/cmd/run/session-replay.ts +301 -0
- package/src/cli/cmd/run/session.shared.ts +196 -0
- package/src/cli/cmd/run/splash.ts +310 -0
- package/src/cli/cmd/run/stream.transport.ts +1465 -0
- package/src/cli/cmd/run/stream.ts +175 -0
- package/src/cli/cmd/run/subagent-data.ts +844 -0
- package/src/cli/cmd/run/theme.ts +603 -0
- package/src/cli/cmd/run/tool.ts +1489 -0
- package/src/cli/cmd/run/trace.ts +94 -0
- package/src/cli/cmd/run/types.ts +342 -0
- package/src/cli/cmd/run/variant.shared.ts +215 -0
- package/src/cli/cmd/run.ts +879 -0
- package/src/cli/cmd/serve.ts +24 -0
- package/src/cli/cmd/session.ts +147 -0
- package/src/cli/cmd/stats.ts +393 -0
- package/src/cli/cmd/tui/app.tsx +1113 -0
- package/src/cli/cmd/tui/attach.ts +103 -0
- package/src/cli/cmd/tui/attention.ts +262 -0
- package/src/cli/cmd/tui/component/bg-pulse-render.ts +436 -0
- package/src/cli/cmd/tui/component/bg-pulse.tsx +99 -0
- package/src/cli/cmd/tui/component/border.tsx +21 -0
- package/src/cli/cmd/tui/component/command-palette.tsx +79 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-console-org.tsx +103 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +85 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +185 -0
- package/src/cli/cmd/tui/component/dialog-move-session.tsx +240 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +687 -0
- package/src/cli/cmd/tui/component/dialog-retry-action.tsx +160 -0
- package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +99 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +318 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-skill.tsx +36 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +168 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +47 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
- package/src/cli/cmd/tui/component/dialog-variant.tsx +39 -0
- package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +313 -0
- package/src/cli/cmd/tui/component/dialog-workspace-file-changes.tsx +144 -0
- package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +112 -0
- package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +69 -0
- package/src/cli/cmd/tui/component/error-component.tsx +81 -0
- package/src/cli/cmd/tui/component/logo.tsx +885 -0
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +799 -0
- package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +90 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +117 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1725 -0
- package/src/cli/cmd/tui/component/prompt/move.tsx +192 -0
- package/src/cli/cmd/tui/component/prompt/part.ts +31 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
- package/src/cli/cmd/tui/component/prompt/traits.ts +35 -0
- package/src/cli/cmd/tui/component/prompt/workspace.tsx +137 -0
- package/src/cli/cmd/tui/component/spinner.tsx +24 -0
- package/src/cli/cmd/tui/component/startup-loading.tsx +63 -0
- package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
- package/src/cli/cmd/tui/component/use-connected.tsx +9 -0
- package/src/cli/cmd/tui/component/workspace-label.tsx +19 -0
- package/src/cli/cmd/tui/config/cwd.ts +5 -0
- package/src/cli/cmd/tui/config/keybind.ts +467 -0
- package/src/cli/cmd/tui/config/tui-migrate.ts +154 -0
- package/src/cli/cmd/tui/config/tui-schema.ts +88 -0
- package/src/cli/cmd/tui/config/tui.ts +308 -0
- package/src/cli/cmd/tui/context/agent.tsx +11 -0
- package/src/cli/cmd/tui/context/aggregate-failures.ts +51 -0
- package/src/cli/cmd/tui/context/args.tsx +15 -0
- package/src/cli/cmd/tui/context/directory.ts +15 -0
- package/src/cli/cmd/tui/context/editor-zed.ts +287 -0
- package/src/cli/cmd/tui/context/editor.ts +469 -0
- package/src/cli/cmd/tui/context/event.ts +38 -0
- package/src/cli/cmd/tui/context/exit.tsx +42 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/kv.tsx +76 -0
- package/src/cli/cmd/tui/context/local.tsx +510 -0
- package/src/cli/cmd/tui/context/path-format.tsx +39 -0
- package/src/cli/cmd/tui/context/project.tsx +111 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +52 -0
- package/src/cli/cmd/tui/context/sdk.tsx +142 -0
- package/src/cli/cmd/tui/context/sync-v2.tsx +447 -0
- package/src/cli/cmd/tui/context/sync.tsx +628 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +230 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +230 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +225 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +234 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
- package/src/cli/cmd/tui/context/theme/opencode.json +245 -0
- package/src/cli/cmd/tui/context/theme/orng.json +249 -0
- package/src/cli/cmd/tui/context/theme/oryna.json +95 -0
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +93 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme.tsx +1341 -0
- package/src/cli/cmd/tui/context/thinking.ts +67 -0
- package/src/cli/cmd/tui/context/tui-config.tsx +9 -0
- package/src/cli/cmd/tui/event.ts +53 -0
- package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +98 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +288 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +59 -0
- package/src/cli/cmd/tui/feature-plugins/session/dialog.tsx +356 -0
- package/src/cli/cmd/tui/feature-plugins/session/index.tsx +32 -0
- package/src/cli/cmd/tui/feature-plugins/session/preview-pane.tsx +288 -0
- package/src/cli/cmd/tui/feature-plugins/session/util.tsx +54 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +65 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +70 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +96 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +65 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +97 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +49 -0
- package/src/cli/cmd/tui/feature-plugins/system/diff-viewer-file-tree-utils.ts +232 -0
- package/src/cli/cmd/tui/feature-plugins/system/diff-viewer-file-tree.tsx +162 -0
- package/src/cli/cmd/tui/feature-plugins/system/diff-viewer-ui.tsx +103 -0
- package/src/cli/cmd/tui/feature-plugins/system/diff-viewer.tsx +1058 -0
- package/src/cli/cmd/tui/feature-plugins/system/notifications.ts +94 -0
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +269 -0
- package/src/cli/cmd/tui/feature-plugins/system/session-v2.tsx +1184 -0
- package/src/cli/cmd/tui/feature-plugins/system/which-key.tsx +608 -0
- package/src/cli/cmd/tui/keymap.tsx +283 -0
- package/src/cli/cmd/tui/layer.ts +6 -0
- package/src/cli/cmd/tui/plugin/api.tsx +390 -0
- package/src/cli/cmd/tui/plugin/command-shim.ts +109 -0
- package/src/cli/cmd/tui/plugin/internal.ts +42 -0
- package/src/cli/cmd/tui/plugin/runtime.ts +1131 -0
- package/src/cli/cmd/tui/plugin/slots.tsx +60 -0
- package/src/cli/cmd/tui/routes/home/session-destination.tsx +39 -0
- package/src/cli/cmd/tui/routes/home.tsx +149 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +76 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +108 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +91 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +2629 -0
- package/src/cli/cmd/tui/routes/session/permission.tsx +729 -0
- package/src/cli/cmd/tui/routes/session/question.tsx +514 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +102 -0
- package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +132 -0
- package/src/cli/cmd/tui/thread.ts +264 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +66 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +108 -0
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +217 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +40 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +126 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +712 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +218 -0
- package/src/cli/cmd/tui/ui/link.tsx +34 -0
- package/src/cli/cmd/tui/ui/spinner.ts +368 -0
- package/src/cli/cmd/tui/ui/toast.tsx +102 -0
- package/src/cli/cmd/tui/util/audio.ts +58 -0
- package/src/cli/cmd/tui/util/clipboard.ts +181 -0
- package/src/cli/cmd/tui/util/collapse-tool-output.ts +19 -0
- package/src/cli/cmd/tui/util/editor.ts +43 -0
- package/src/cli/cmd/tui/util/layout.ts +25 -0
- package/src/cli/cmd/tui/util/model.ts +23 -0
- package/src/cli/cmd/tui/util/provider-origin.ts +7 -0
- package/src/cli/cmd/tui/util/revert-diff.ts +18 -0
- package/src/cli/cmd/tui/util/scroll.ts +25 -0
- package/src/cli/cmd/tui/util/selection.ts +73 -0
- package/src/cli/cmd/tui/util/signal.ts +41 -0
- package/src/cli/cmd/tui/util/transcript.ts +112 -0
- package/src/cli/cmd/tui/validate-session.ts +29 -0
- package/src/cli/cmd/tui/win32.ts +130 -0
- package/src/cli/cmd/tui/worker.ts +99 -0
- package/src/cli/cmd/uninstall.ts +353 -0
- package/src/cli/cmd/upgrade.ts +74 -0
- package/src/cli/cmd/web.ts +84 -0
- package/src/cli/effect/prompt.ts +37 -0
- package/src/cli/effect-cmd.ts +96 -0
- package/src/cli/error.ts +118 -0
- package/src/cli/heap.ts +59 -0
- package/src/cli/logo.ts +21 -0
- package/src/cli/network.ts +64 -0
- package/src/cli/ui.ts +132 -0
- package/src/cli/upgrade.ts +53 -0
- package/src/command/index.ts +181 -0
- package/src/command/template/initialize.txt +66 -0
- package/src/command/template/review.txt +101 -0
- package/src/config/agent.ts +68 -0
- package/src/config/command.ts +45 -0
- package/src/config/config.ts +679 -0
- package/src/config/entry-name.ts +19 -0
- package/src/config/managed.ts +77 -0
- package/src/config/markdown.ts +36 -0
- package/src/config/parse.ts +79 -0
- package/src/config/paths.ts +45 -0
- package/src/config/plugin.ts +79 -0
- package/src/config/reference.ts +48 -0
- package/src/config/variable.ts +91 -0
- package/src/control-plane/adapters/index.ts +41 -0
- package/src/control-plane/adapters/worktree.ts +96 -0
- package/src/control-plane/dev/README.md +19 -0
- package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
- package/src/control-plane/types.ts +59 -0
- package/src/control-plane/util.ts +39 -0
- package/src/control-plane/workspace-adapter-runtime.ts +51 -0
- package/src/control-plane/workspace-context.ts +26 -0
- package/src/control-plane/workspace.ts +1075 -0
- package/src/effect/app-runtime.ts +133 -0
- package/src/effect/bootstrap-runtime.ts +23 -0
- package/src/effect/bridge.ts +84 -0
- package/src/effect/config-service.ts +67 -0
- package/src/effect/instance-ref.ts +11 -0
- package/src/effect/instance-registry.ts +12 -0
- package/src/effect/instance-state.ts +72 -0
- package/src/effect/promise.ts +17 -0
- package/src/effect/run-service.ts +47 -0
- package/src/effect/runner.ts +217 -0
- package/src/effect/runtime-flags.ts +76 -0
- package/src/env/index.ts +40 -0
- package/src/event-v2-bridge.ts +76 -0
- package/src/format/formatter.ts +404 -0
- package/src/format/index.ts +212 -0
- package/src/git/index.ts +347 -0
- package/src/id/id.ts +80 -0
- package/src/ide/index.ts +70 -0
- package/src/image/image.ts +177 -0
- package/src/index.ts +208 -0
- package/src/installation/index.ts +349 -0
- package/src/lsp/client.ts +686 -0
- package/src/lsp/diagnostic.ts +29 -0
- package/src/lsp/language.ts +121 -0
- package/src/lsp/launch.ts +21 -0
- package/src/lsp/lsp.ts +517 -0
- package/src/lsp/server.ts +2064 -0
- package/src/markdown.d.ts +4 -0
- package/src/mcp/auth.ts +171 -0
- package/src/mcp/index.ts +982 -0
- package/src/mcp/oauth-callback.ts +232 -0
- package/src/mcp/oauth-provider.ts +217 -0
- package/src/node.ts +5 -0
- package/src/oryna/agent.ts +112 -0
- package/src/oryna/reply-service.ts +8 -0
- package/src/patch/index.ts +689 -0
- package/src/permission/arity.ts +163 -0
- package/src/permission/evaluate.ts +1 -0
- package/src/permission/index.ts +230 -0
- package/src/plugin/azure.ts +26 -0
- package/src/plugin/cloudflare.ts +76 -0
- package/src/plugin/digitalocean.ts +391 -0
- package/src/plugin/github-copilot/copilot.ts +417 -0
- package/src/plugin/github-copilot/models.ts +246 -0
- package/src/plugin/index.ts +323 -0
- package/src/plugin/install.ts +439 -0
- package/src/plugin/loader.ts +237 -0
- package/src/plugin/meta.ts +188 -0
- package/src/plugin/openai/README.md +31 -0
- package/src/plugin/openai/codex.ts +647 -0
- package/src/plugin/openai/ws-pool.ts +290 -0
- package/src/plugin/openai/ws.ts +381 -0
- package/src/plugin/oryna.ts +349 -0
- package/src/plugin/shared.ts +323 -0
- package/src/plugin/xai.ts +742 -0
- package/src/project/bootstrap-service.ts +9 -0
- package/src/project/bootstrap.ts +80 -0
- package/src/project/instance-context.ts +24 -0
- package/src/project/instance-layer.ts +11 -0
- package/src/project/instance-runtime.ts +16 -0
- package/src/project/instance-store.ts +207 -0
- package/src/project/project.ts +520 -0
- package/src/project/vcs.ts +435 -0
- package/src/provider/auth.ts +230 -0
- package/src/provider/error.ts +188 -0
- package/src/provider/model-status.ts +8 -0
- package/src/provider/provider.ts +2009 -0
- package/src/provider/transform.ts +1363 -0
- package/src/pty-preparation.ts +30 -0
- package/src/question/index.ts +229 -0
- package/src/question/schema.ts +10 -0
- package/src/reference/reference.ts +239 -0
- package/src/reference/repository-cache.ts +320 -0
- package/src/server/auth.ts +48 -0
- package/src/server/cors.ts +34 -0
- package/src/server/event.ts +13 -0
- package/src/server/global-lifecycle.ts +37 -0
- package/src/server/init-projectors.ts +3 -0
- package/src/server/mdns.ts +60 -0
- package/src/server/projectors.ts +1 -0
- package/src/server/proxy-util.ts +48 -0
- package/src/server/routes/instance/httpapi/AGENTS.md +39 -0
- package/src/server/routes/instance/httpapi/api.ts +78 -0
- package/src/server/routes/instance/httpapi/errors.ts +193 -0
- package/src/server/routes/instance/httpapi/groups/config.ts +65 -0
- package/src/server/routes/instance/httpapi/groups/control-plane.ts +35 -0
- package/src/server/routes/instance/httpapi/groups/control.ts +76 -0
- package/src/server/routes/instance/httpapi/groups/event.ts +29 -0
- package/src/server/routes/instance/httpapi/groups/experimental.ts +260 -0
- package/src/server/routes/instance/httpapi/groups/file.ts +172 -0
- package/src/server/routes/instance/httpapi/groups/global.ts +138 -0
- package/src/server/routes/instance/httpapi/groups/instance.ts +206 -0
- package/src/server/routes/instance/httpapi/groups/mcp.ts +156 -0
- package/src/server/routes/instance/httpapi/groups/metadata.ts +18 -0
- package/src/server/routes/instance/httpapi/groups/permission.ts +61 -0
- package/src/server/routes/instance/httpapi/groups/project-copy.ts +88 -0
- package/src/server/routes/instance/httpapi/groups/project.ts +93 -0
- package/src/server/routes/instance/httpapi/groups/provider.ts +101 -0
- package/src/server/routes/instance/httpapi/groups/pty.ts +172 -0
- package/src/server/routes/instance/httpapi/groups/query.ts +12 -0
- package/src/server/routes/instance/httpapi/groups/question.ts +74 -0
- package/src/server/routes/instance/httpapi/groups/session.ts +462 -0
- package/src/server/routes/instance/httpapi/groups/sync.ts +113 -0
- package/src/server/routes/instance/httpapi/groups/tui.ts +208 -0
- package/src/server/routes/instance/httpapi/groups/workspace.ts +141 -0
- package/src/server/routes/instance/httpapi/handlers/config.ts +151 -0
- package/src/server/routes/instance/httpapi/handlers/control-plane.ts +37 -0
- package/src/server/routes/instance/httpapi/handlers/control.ts +40 -0
- package/src/server/routes/instance/httpapi/handlers/event.ts +102 -0
- package/src/server/routes/instance/httpapi/handlers/experimental.ts +187 -0
- package/src/server/routes/instance/httpapi/handlers/file.ts +103 -0
- package/src/server/routes/instance/httpapi/handlers/global.ts +157 -0
- package/src/server/routes/instance/httpapi/handlers/instance.ts +110 -0
- package/src/server/routes/instance/httpapi/handlers/mcp.ts +111 -0
- package/src/server/routes/instance/httpapi/handlers/permission.ts +41 -0
- package/src/server/routes/instance/httpapi/handlers/project-copy.ts +157 -0
- package/src/server/routes/instance/httpapi/handlers/project.ts +63 -0
- package/src/server/routes/instance/httpapi/handlers/provider.ts +160 -0
- package/src/server/routes/instance/httpapi/handlers/pty.ts +258 -0
- package/src/server/routes/instance/httpapi/handlers/question.ts +54 -0
- package/src/server/routes/instance/httpapi/handlers/session-errors.ts +21 -0
- package/src/server/routes/instance/httpapi/handlers/session.ts +442 -0
- package/src/server/routes/instance/httpapi/handlers/sync.ts +95 -0
- package/src/server/routes/instance/httpapi/handlers/tui.ts +131 -0
- package/src/server/routes/instance/httpapi/handlers/workspace.ts +102 -0
- package/src/server/routes/instance/httpapi/lifecycle.ts +57 -0
- package/src/server/routes/instance/httpapi/middleware/authorization.ts +147 -0
- package/src/server/routes/instance/httpapi/middleware/compression.ts +64 -0
- package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +29 -0
- package/src/server/routes/instance/httpapi/middleware/error.ts +36 -0
- package/src/server/routes/instance/httpapi/middleware/fence.ts +25 -0
- package/src/server/routes/instance/httpapi/middleware/instance-context.ts +43 -0
- package/src/server/routes/instance/httpapi/middleware/proxy.ts +108 -0
- package/src/server/routes/instance/httpapi/middleware/schema-error.ts +42 -0
- package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +250 -0
- package/src/server/routes/instance/httpapi/public.ts +535 -0
- package/src/server/routes/instance/httpapi/server.ts +277 -0
- package/src/server/routes/instance/httpapi/websocket-tracker.ts +57 -0
- package/src/server/server.ts +218 -0
- package/src/server/shared/fence.ts +68 -0
- package/src/server/shared/pty-ticket.ts +15 -0
- package/src/server/shared/public-ui.ts +12 -0
- package/src/server/shared/tui-control.ts +28 -0
- package/src/server/shared/ui.ts +108 -0
- package/src/server/shared/workspace-routing.ts +38 -0
- package/src/session/compaction.ts +609 -0
- package/src/session/instruction.ts +237 -0
- package/src/session/llm/AGENTS.md +90 -0
- package/src/session/llm/ai-sdk.ts +288 -0
- package/src/session/llm/native-request.ts +196 -0
- package/src/session/llm/native-runtime.ts +195 -0
- package/src/session/llm/request.ts +215 -0
- package/src/session/llm.ts +402 -0
- package/src/session/message-error.ts +14 -0
- package/src/session/message-v2.ts +745 -0
- package/src/session/message.ts +148 -0
- package/src/session/overflow.ts +34 -0
- package/src/session/processor.ts +1063 -0
- package/src/session/prompt/anthropic.txt +105 -0
- package/src/session/prompt/beast.txt +147 -0
- package/src/session/prompt/build-switch.txt +5 -0
- package/src/session/prompt/codex.txt +79 -0
- package/src/session/prompt/copilot-gpt-5.txt +143 -0
- package/src/session/prompt/default.txt +95 -0
- package/src/session/prompt/gemini.txt +155 -0
- package/src/session/prompt/gpt.txt +107 -0
- package/src/session/prompt/kimi.txt +95 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-mode.txt +70 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
- package/src/session/prompt/plan.txt +26 -0
- package/src/session/prompt/reference.ts +72 -0
- package/src/session/prompt/trinity.txt +97 -0
- package/src/session/prompt.ts +1755 -0
- package/src/session/reminders.ts +92 -0
- package/src/session/retry.ts +201 -0
- package/src/session/revert.ts +153 -0
- package/src/session/run-state.ts +153 -0
- package/src/session/schema.ts +26 -0
- package/src/session/session.ts +1116 -0
- package/src/session/status.ts +94 -0
- package/src/session/summary.ts +162 -0
- package/src/session/system.ts +84 -0
- package/src/session/todo.ts +87 -0
- package/src/session/tools.ts +211 -0
- package/src/share/session.ts +58 -0
- package/src/share/share-next.ts +379 -0
- package/src/shell/shell.ts +215 -0
- package/src/skill/discovery.ts +115 -0
- package/src/skill/index.ts +357 -0
- package/src/snapshot/index.ts +759 -0
- package/src/sql.d.ts +4 -0
- package/src/storage/schema.ts +5 -0
- package/src/storage/storage.ts +329 -0
- package/src/sync/README.md +179 -0
- package/src/sync/schema.ts +11 -0
- package/src/temporary.ts +33 -0
- package/src/tool/apply_patch.ts +313 -0
- package/src/tool/apply_patch.txt +33 -0
- package/src/tool/edit.ts +737 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/external-directory.ts +49 -0
- package/src/tool/glob.ts +84 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +140 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +21 -0
- package/src/tool/json-schema.ts +164 -0
- package/src/tool/lsp.ts +113 -0
- package/src/tool/lsp.txt +24 -0
- package/src/tool/mcp-websearch.ts +96 -0
- package/src/tool/plan-enter.txt +14 -0
- package/src/tool/plan-exit.txt +13 -0
- package/src/tool/plan.ts +79 -0
- package/src/tool/question.ts +44 -0
- package/src/tool/question.txt +10 -0
- package/src/tool/read.ts +392 -0
- package/src/tool/read.txt +14 -0
- package/src/tool/registry.ts +475 -0
- package/src/tool/reply.ts +29 -0
- package/src/tool/schema.ts +14 -0
- package/src/tool/shell/id.ts +19 -0
- package/src/tool/shell/prompt.ts +307 -0
- package/src/tool/shell/shell.txt +21 -0
- package/src/tool/shell.ts +660 -0
- package/src/tool/skill.ts +72 -0
- package/src/tool/skill.txt +5 -0
- package/src/tool/task.ts +338 -0
- package/src/tool/task.txt +19 -0
- package/src/tool/todo.ts +57 -0
- package/src/tool/todowrite.txt +44 -0
- package/src/tool/tool.ts +183 -0
- package/src/tool/truncate.ts +160 -0
- package/src/tool/truncation-dir.ts +4 -0
- package/src/tool/webfetch.ts +192 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +143 -0
- package/src/tool/websearch.txt +14 -0
- package/src/tool/write.ts +104 -0
- package/src/tool/write.txt +8 -0
- package/src/util/archive.ts +17 -0
- package/src/util/bom.ts +27 -0
- package/src/util/data-url.ts +9 -0
- package/src/util/defer.ts +10 -0
- package/src/util/effect-http-client.ts +11 -0
- package/src/util/error.ts +88 -0
- package/src/util/filesystem.ts +251 -0
- package/src/util/format.ts +20 -0
- package/src/util/iife.ts +3 -0
- package/src/util/lan-scan.ts +90 -0
- package/src/util/lazy.ts +20 -0
- package/src/util/local-context.ts +25 -0
- package/src/util/locale.ts +86 -0
- package/src/util/media.ts +26 -0
- package/src/util/process.ts +176 -0
- package/src/util/proxy-env.ts +72 -0
- package/src/util/queue.ts +32 -0
- package/src/util/record.ts +3 -0
- package/src/util/repository.ts +232 -0
- package/src/util/rpc.ts +66 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +13 -0
- package/src/util/token.ts +1 -0
- package/src/util/wildcard.ts +59 -0
- package/src/worktree/index.ts +645 -0
- package/sst-env.d.ts +10 -0
- package/test/AGENTS.md +204 -0
- package/test/EFFECT_TEST_MIGRATION.md +169 -0
- package/test/account/repo.test.ts +353 -0
- package/test/account/service.test.ts +453 -0
- package/test/acp/config-option.test.ts +229 -0
- package/test/acp/content.test.ts +201 -0
- package/test/acp/directory.test.ts +186 -0
- package/test/acp/error.test.ts +67 -0
- package/test/acp/event.test.ts +711 -0
- package/test/acp/permission.test.ts +273 -0
- package/test/acp/service-session.test.ts +1174 -0
- package/test/acp/session.test.ts +200 -0
- package/test/acp/tool.test.ts +210 -0
- package/test/acp/usage.test.ts +315 -0
- package/test/agent/agent.test.ts +710 -0
- package/test/agent/plan-mode-subagent-bypass.test.ts +213 -0
- package/test/agent/plugin-agent-regression.test.ts +62 -0
- package/test/auth/auth.test.ts +77 -0
- package/test/background/job.test.ts +243 -0
- package/test/cli/account.test.ts +30 -0
- package/test/cli/acp/acp-test-client.ts +97 -0
- package/test/cli/acp/config-options.test.ts +103 -0
- package/test/cli/acp/helpers.ts +96 -0
- package/test/cli/acp/initialize-auth.test.ts +61 -0
- package/test/cli/acp/lifecycle.test.ts +118 -0
- package/test/cli/acp/prompt-content.test.ts +97 -0
- package/test/cli/acp/skills.test.ts +38 -0
- package/test/cli/cmd/tui/aggregate-failures.test.ts +93 -0
- package/test/cli/cmd/tui/attention.test.ts +484 -0
- package/test/cli/cmd/tui/dialog-workspace-create.test.ts +28 -0
- package/test/cli/cmd/tui/model-options.test.ts +30 -0
- package/test/cli/cmd/tui/notifications.test.ts +267 -0
- package/test/cli/cmd/tui/prompt-history.test.ts +44 -0
- package/test/cli/cmd/tui/prompt-part.test.ts +77 -0
- package/test/cli/cmd/tui/prompt-traits.test.ts +29 -0
- package/test/cli/cmd/tui/provider-options.test.ts +29 -0
- package/test/cli/cmd/tui/sync-fixture.tsx +64 -0
- package/test/cli/cmd/tui/sync-live-hydration.test.tsx +278 -0
- package/test/cli/cmd/tui/sync-undefined-messages.test.tsx +47 -0
- package/test/cli/cmd/tui/sync.test.tsx +70 -0
- package/test/cli/effect-cmd-instance-als.test.ts +39 -0
- package/test/cli/error.test.ts +95 -0
- package/test/cli/github-action.test.ts +199 -0
- package/test/cli/github-remote.test.ts +90 -0
- package/test/cli/help/__snapshots__/help-snapshots.test.ts.snap +631 -0
- package/test/cli/help/help-snapshots.test.ts +137 -0
- package/test/cli/import.test.ts +54 -0
- package/test/cli/mcp-add.test.ts +74 -0
- package/test/cli/plugin-auth-picker.test.ts +120 -0
- package/test/cli/run/entry.body.test.ts +536 -0
- package/test/cli/run/footer.menu.test.ts +43 -0
- package/test/cli/run/footer.view.test.tsx +927 -0
- package/test/cli/run/permission.shared.test.ts +144 -0
- package/test/cli/run/prompt.shared.test.ts +133 -0
- package/test/cli/run/question.shared.test.ts +115 -0
- package/test/cli/run/run-process.test.ts +84 -0
- package/test/cli/run/runtime.boot.test.ts +282 -0
- package/test/cli/run/runtime.queue.test.ts +465 -0
- package/test/cli/run/runtime.stdin.test.ts +71 -0
- package/test/cli/run/scrollback.surface.test.ts +1048 -0
- package/test/cli/run/session-data.test.ts +595 -0
- package/test/cli/run/session-replay.test.ts +456 -0
- package/test/cli/run/session.shared.test.ts +247 -0
- package/test/cli/run/stream.test.ts +56 -0
- package/test/cli/run/stream.transport.test.ts +2363 -0
- package/test/cli/run/subagent-data.test.ts +456 -0
- package/test/cli/run/theme.test.ts +152 -0
- package/test/cli/run/variant.shared.test.ts +217 -0
- package/test/cli/serve/serve-process.test.ts +61 -0
- package/test/cli/smokes/read-only.test.ts +115 -0
- package/test/cli/tui/__snapshots__/inline-tool-wrap-snapshot.test.tsx.snap +72 -0
- package/test/cli/tui/app-lifecycle.test.ts +261 -0
- package/test/cli/tui/dialog-prompt.test.tsx +146 -0
- package/test/cli/tui/diff-viewer-file-tree-utils.test.ts +323 -0
- package/test/cli/tui/diff-viewer-file-tree.test.tsx +197 -0
- package/test/cli/tui/diff-viewer.test.tsx +230 -0
- package/test/cli/tui/editor-context-zed.test.ts +384 -0
- package/test/cli/tui/editor-context.test.tsx +288 -0
- package/test/cli/tui/inline-tool-wrap-snapshot.test.tsx +232 -0
- package/test/cli/tui/keymap.test.tsx +136 -0
- package/test/cli/tui/plugin-add.test.ts +110 -0
- package/test/cli/tui/plugin-install.test.ts +87 -0
- package/test/cli/tui/plugin-lifecycle.test.ts +224 -0
- package/test/cli/tui/plugin-loader-entrypoint.test.ts +485 -0
- package/test/cli/tui/plugin-loader-pure.test.ts +72 -0
- package/test/cli/tui/plugin-loader.test.ts +1332 -0
- package/test/cli/tui/plugin-toggle.test.ts +264 -0
- package/test/cli/tui/prompt-submit-race.test.ts +98 -0
- package/test/cli/tui/revert-diff.test.ts +35 -0
- package/test/cli/tui/slot-replace.test.tsx +50 -0
- package/test/cli/tui/sync-v2.test.tsx +558 -0
- package/test/cli/tui/theme-store.test.ts +76 -0
- package/test/cli/tui/thinking.test.ts +36 -0
- package/test/cli/tui/thread.test.ts +28 -0
- package/test/cli/tui/transcript.test.ts +426 -0
- package/test/cli/tui/use-event.test.tsx +145 -0
- package/test/config/agent-color.test.ts +47 -0
- package/test/config/config.test.ts +1991 -0
- package/test/config/entry-name.test.ts +57 -0
- package/test/config/fixtures/empty-frontmatter.md +4 -0
- package/test/config/fixtures/frontmatter.md +28 -0
- package/test/config/fixtures/markdown-header.md +11 -0
- package/test/config/fixtures/no-frontmatter.md +1 -0
- package/test/config/fixtures/weird-model-id.md +13 -0
- package/test/config/lsp.test.ts +69 -0
- package/test/config/markdown.test.ts +228 -0
- package/test/config/plugin.test.ts +0 -0
- package/test/config/tui.test.ts +878 -0
- package/test/control-plane/adapters.test.ts +71 -0
- package/test/control-plane/workspace.test.ts +1704 -0
- package/test/effect/app-runtime-logger.test.ts +105 -0
- package/test/effect/config-service.test.ts +65 -0
- package/test/effect/instance-state.test.ts +391 -0
- package/test/effect/run-service.test.ts +89 -0
- package/test/effect/runner.test.ts +514 -0
- package/test/effect/runtime-flags.test.ts +373 -0
- package/test/fake/account.ts +9 -0
- package/test/fake/auth.ts +8 -0
- package/test/fake/npm.ts +8 -0
- package/test/fake/provider.ts +82 -0
- package/test/fake/skill.ts +8 -0
- package/test/filesystem/filesystem.test.ts +319 -0
- package/test/fixture/agent-plugin.constants.ts +6 -0
- package/test/fixture/agent-plugin.ts +12 -0
- package/test/fixture/config.ts +23 -0
- package/test/fixture/db.ts +11 -0
- package/test/fixture/fixture.test.ts +26 -0
- package/test/fixture/fixture.ts +224 -0
- package/test/fixture/flag.ts +20 -0
- package/test/fixture/flock-worker.ts +72 -0
- package/test/fixture/lsp/fake-lsp-server.js +249 -0
- package/test/fixture/plug-worker.ts +93 -0
- package/test/fixture/plugin-meta-worker.ts +19 -0
- package/test/fixture/plugin.ts +10 -0
- package/test/fixture/skills/agents-sdk/SKILL.md +152 -0
- package/test/fixture/skills/agents-sdk/references/callable.md +92 -0
- package/test/fixture/skills/cloudflare/SKILL.md +211 -0
- package/test/fixture/skills/index.json +6 -0
- package/test/fixture/tui-plugin.ts +355 -0
- package/test/fixture/tui-runtime.ts +64 -0
- package/test/fixture/tui-sdk.ts +82 -0
- package/test/fixture/workspace.ts +30 -0
- package/test/fixtures/recordings/session/native-anthropic-tool-loop.json +49 -0
- package/test/fixtures/recordings/session/native-openai-oauth-tool-loop.json +45 -0
- package/test/fixtures/recordings/session/native-zen-tool-loop.json +49 -0
- package/test/format/format.test.ts +228 -0
- package/test/git/git.test.ts +178 -0
- package/test/ide/ide.test.ts +82 -0
- package/test/image/fixtures/picture-5mb-base64.png +0 -0
- package/test/image/image.test.ts +123 -0
- package/test/installation/installation.test.ts +230 -0
- package/test/lib/cli-process.ts +459 -0
- package/test/lib/effect.ts +177 -0
- package/test/lib/filesystem.ts +10 -0
- package/test/lib/llm-server.ts +771 -0
- package/test/lib/snapshot.ts +73 -0
- package/test/lib/test-provider.ts +37 -0
- package/test/lib/websocket.ts +46 -0
- package/test/lsp/client.test.ts +493 -0
- package/test/lsp/index.test.ts +232 -0
- package/test/lsp/launch.test.ts +22 -0
- package/test/lsp/lifecycle.test.ts +160 -0
- package/test/mcp/auth.test.ts +78 -0
- package/test/mcp/headers.test.ts +126 -0
- package/test/mcp/lifecycle.test.ts +888 -0
- package/test/mcp/oauth-auto-connect.test.ts +236 -0
- package/test/mcp/oauth-browser.test.ts +228 -0
- package/test/mcp/oauth-callback.test.ts +34 -0
- package/test/mcp/oauth-provider.test.ts +61 -0
- package/test/patch/patch.test.ts +383 -0
- package/test/permission/arity.test.ts +33 -0
- package/test/permission/next.test.ts +1176 -0
- package/test/permission-task.test.ts +318 -0
- package/test/plugin/auth-override.test.ts +105 -0
- package/test/plugin/cloudflare.test.ts +68 -0
- package/test/plugin/codex.test.ts +247 -0
- package/test/plugin/github-copilot-models.test.ts +332 -0
- package/test/plugin/install-concurrency.test.ts +140 -0
- package/test/plugin/install.test.ts +570 -0
- package/test/plugin/loader-shared.test.ts +1303 -0
- package/test/plugin/meta.test.ts +137 -0
- package/test/plugin/openai-rollout.test.ts +17 -0
- package/test/plugin/openai-ws.test.ts +877 -0
- package/test/plugin/shared.test.ts +88 -0
- package/test/plugin/trigger.test.ts +120 -0
- package/test/plugin/workspace-adapter.test.ts +137 -0
- package/test/plugin/xai.test.ts +634 -0
- package/test/preload.ts +95 -0
- package/test/project/instance-bootstrap.test.ts +110 -0
- package/test/project/instance.test.ts +245 -0
- package/test/project/migrate-global.test.ts +170 -0
- package/test/project/project-directory.test.ts +169 -0
- package/test/project/project.test.ts +818 -0
- package/test/project/vcs.test.ts +336 -0
- package/test/project/worktree-remove.test.ts +126 -0
- package/test/project/worktree.test.ts +320 -0
- package/test/provider/amazon-bedrock.test.ts +360 -0
- package/test/provider/cf-ai-gateway-e2e.test.ts +132 -0
- package/test/provider/digitalocean.test.ts +123 -0
- package/test/provider/gitlab-duo.test.ts +412 -0
- package/test/provider/header-timeout.test.ts +233 -0
- package/test/provider/model-status.test.ts +61 -0
- package/test/provider/provider.test.ts +1793 -0
- package/test/provider/transform.test.ts +3937 -0
- package/test/pty/pty-shell.test.ts +102 -0
- package/test/question/question.test.ts +465 -0
- package/test/reference/reference.test.ts +310 -0
- package/test/server/AGENTS.md +15 -0
- package/test/server/auth.test.ts +59 -0
- package/test/server/global-bus.ts +31 -0
- package/test/server/global-session-list.test.ts +107 -0
- package/test/server/httpapi-authorization.test.ts +174 -0
- package/test/server/httpapi-compression.test.ts +154 -0
- package/test/server/httpapi-config.test.ts +113 -0
- package/test/server/httpapi-control-plane.test.ts +63 -0
- package/test/server/httpapi-cors-vary.test.ts +66 -0
- package/test/server/httpapi-cors.test.ts +122 -0
- package/test/server/httpapi-error-middleware.test.ts +96 -0
- package/test/server/httpapi-event.test.ts +97 -0
- package/test/server/httpapi-exercise/assertions.ts +64 -0
- package/test/server/httpapi-exercise/backend.ts +144 -0
- package/test/server/httpapi-exercise/dsl.ts +210 -0
- package/test/server/httpapi-exercise/environment.ts +40 -0
- package/test/server/httpapi-exercise/index.ts +1535 -0
- package/test/server/httpapi-exercise/report.ts +66 -0
- package/test/server/httpapi-exercise/routing.ts +96 -0
- package/test/server/httpapi-exercise/runner.ts +267 -0
- package/test/server/httpapi-exercise/runtime.ts +52 -0
- package/test/server/httpapi-exercise/types.ts +123 -0
- package/test/server/httpapi-experimental.test.ts +300 -0
- package/test/server/httpapi-file.test.ts +76 -0
- package/test/server/httpapi-global.test.ts +66 -0
- package/test/server/httpapi-instance-context.test.ts +347 -0
- package/test/server/httpapi-instance-route-auth.test.ts +84 -0
- package/test/server/httpapi-instance.test.ts +265 -0
- package/test/server/httpapi-layer.ts +33 -0
- package/test/server/httpapi-listen.test.ts +415 -0
- package/test/server/httpapi-mcp-oauth.test.ts +73 -0
- package/test/server/httpapi-mcp.test.ts +226 -0
- package/test/server/httpapi-mdns.test.ts +82 -0
- package/test/server/httpapi-promptasync-context.test.ts +222 -0
- package/test/server/httpapi-provider.test.ts +403 -0
- package/test/server/httpapi-pty.test.ts +275 -0
- package/test/server/httpapi-public-openapi.test.ts +297 -0
- package/test/server/httpapi-query-schema-drift.test.ts +330 -0
- package/test/server/httpapi-schema-error-body.test.ts +165 -0
- package/test/server/httpapi-sdk.test.ts +909 -0
- package/test/server/httpapi-session.test.ts +1013 -0
- package/test/server/httpapi-sync.test.ts +154 -0
- package/test/server/httpapi-ui.test.ts +456 -0
- package/test/server/httpapi-v2-location.test.ts +85 -0
- package/test/server/httpapi-workspace-routing.test.ts +554 -0
- package/test/server/httpapi-workspace.test.ts +515 -0
- package/test/server/negative-tokens-regression.test.ts +83 -0
- package/test/server/project-copy.test.ts +101 -0
- package/test/server/project-init-git.test.ts +117 -0
- package/test/server/proxy-util.test.ts +113 -0
- package/test/server/sdk-error-shape.test.ts +84 -0
- package/test/server/sdk-v1-smoke.test.ts +60 -0
- package/test/server/session-actions.test.ts +112 -0
- package/test/server/session-diff-missing-patch.test.ts +99 -0
- package/test/server/session-list.test.ts +314 -0
- package/test/server/session-messages.test.ts +182 -0
- package/test/server/session-select.test.ts +69 -0
- package/test/server/workspace-proxy.test.ts +181 -0
- package/test/server/workspace-routing.test.ts +94 -0
- package/test/server/worktree-endpoint-repro.test.ts +307 -0
- package/test/session/compaction.test.ts +1835 -0
- package/test/session/instruction.test.ts +256 -0
- package/test/session/llm-native-recorded.test.ts +433 -0
- package/test/session/llm-native.test.ts +760 -0
- package/test/session/llm.test.ts +1932 -0
- package/test/session/message-v2.test.ts +1661 -0
- package/test/session/messages-pagination.test.ts +1059 -0
- package/test/session/processor-effect.test.ts +1101 -0
- package/test/session/prompt.test.ts +2318 -0
- package/test/session/retry.test.ts +439 -0
- package/test/session/revert-compact.test.ts +642 -0
- package/test/session/schema-decoding.test.ts +313 -0
- package/test/session/session-schema.test.ts +78 -0
- package/test/session/session.test.ts +251 -0
- package/test/session/snapshot-tool-race.test.ts +280 -0
- package/test/session/structured-output-integration.test.ts +235 -0
- package/test/session/structured-output.test.ts +387 -0
- package/test/session/system.test.ts +84 -0
- package/test/share/share-next.test.ts +344 -0
- package/test/shell/shell.test.ts +99 -0
- package/test/skill/discovery.test.ts +139 -0
- package/test/skill/skill.test.ts +571 -0
- package/test/snapshot/snapshot.test.ts +1121 -0
- package/test/storage/storage.test.ts +296 -0
- package/test/storage/workspace-time-migration.test.ts +50 -0
- package/test/tool/__snapshots__/parameters.test.ts.snap +484 -0
- package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
- package/test/tool/apply_patch.test.ts +533 -0
- package/test/tool/edit.test.ts +578 -0
- package/test/tool/external-directory.test.ts +155 -0
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +117299 -0
- package/test/tool/glob.test.ts +188 -0
- package/test/tool/grep.test.ts +266 -0
- package/test/tool/lsp.test.ts +181 -0
- package/test/tool/parameters.test.ts +293 -0
- package/test/tool/question.test.ts +138 -0
- package/test/tool/read.test.ts +654 -0
- package/test/tool/registry.test.ts +539 -0
- package/test/tool/shell.test.ts +1238 -0
- package/test/tool/skill.test.ts +132 -0
- package/test/tool/task.test.ts +901 -0
- package/test/tool/tool-define.test.ts +153 -0
- package/test/tool/truncation.test.ts +266 -0
- package/test/tool/webfetch.test.ts +113 -0
- package/test/tool/websearch.test.ts +99 -0
- package/test/tool/write.test.ts +276 -0
- package/test/util/data-url.test.ts +14 -0
- package/test/util/error.test.ts +64 -0
- package/test/util/filesystem.test.ts +656 -0
- package/test/util/format.test.ts +59 -0
- package/test/util/glob.test.ts +164 -0
- package/test/util/iife.test.ts +36 -0
- package/test/util/lazy.test.ts +50 -0
- package/test/util/log.test.ts +77 -0
- package/test/util/module.test.ts +59 -0
- package/test/util/process.test.ts +128 -0
- package/test/util/repository.test.ts +93 -0
- package/test/util/timeout.test.ts +21 -0
- package/test/util/wildcard.test.ts +90 -0
- package/test/v2/session-message-updater.test.ts +270 -0
- package/tsconfig.json +17 -0
package/test/AGENTS.md
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Test Fixtures Guide
|
|
2
|
+
|
|
3
|
+
## Temporary Directory Fixture
|
|
4
|
+
|
|
5
|
+
The `tmpdir` function in `fixture/fixture.ts` creates temporary directories for tests with automatic cleanup.
|
|
6
|
+
|
|
7
|
+
### Basic Usage
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { tmpdir } from "./fixture/fixture"
|
|
11
|
+
|
|
12
|
+
test("example", async () => {
|
|
13
|
+
await using tmp = await tmpdir()
|
|
14
|
+
// tmp.path is the temp directory path
|
|
15
|
+
// automatically cleaned up when test ends
|
|
16
|
+
})
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Options
|
|
20
|
+
|
|
21
|
+
- `git?: boolean` - Initialize a git repo with a root commit
|
|
22
|
+
- `config?: Partial<Config.Info>` - Write an `opencode.json` config file
|
|
23
|
+
- `init?: (dir: string) => Promise<T>` - Custom setup function, returns value accessible as `tmp.extra`
|
|
24
|
+
- `dispose?: (dir: string) => Promise<T>` - Custom cleanup function
|
|
25
|
+
|
|
26
|
+
### Examples
|
|
27
|
+
|
|
28
|
+
**Git repository:**
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
await using tmp = await tmpdir({ git: true })
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**With config file:**
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
await using tmp = await tmpdir({
|
|
38
|
+
config: { model: "test/model", username: "testuser" },
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Custom initialization (returns extra data):**
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
await using tmp = await tmpdir<string>({
|
|
46
|
+
init: async (dir) => {
|
|
47
|
+
await Bun.write(path.join(dir, "file.txt"), "content")
|
|
48
|
+
return "extra data"
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
|
+
// Access extra data via tmp.extra
|
|
52
|
+
console.log(tmp.extra) // "extra data"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**With cleanup:**
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
await using tmp = await tmpdir({
|
|
59
|
+
init: async (dir) => {
|
|
60
|
+
const specialDir = path.join(dir, "special")
|
|
61
|
+
await fs.mkdir(specialDir)
|
|
62
|
+
return specialDir
|
|
63
|
+
},
|
|
64
|
+
dispose: async (dir) => {
|
|
65
|
+
// Custom cleanup logic
|
|
66
|
+
await fs.rm(path.join(dir, "special"), { recursive: true })
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Returned Object
|
|
72
|
+
|
|
73
|
+
- `path: string` - Absolute path to the temp directory (realpath resolved)
|
|
74
|
+
- `extra: T` - Value returned by the `init` function
|
|
75
|
+
- `[Symbol.asyncDispose]` - Enables automatic cleanup via `await using`
|
|
76
|
+
|
|
77
|
+
### Notes
|
|
78
|
+
|
|
79
|
+
- Directories are created in the system temp folder with prefix `opencode-test-`
|
|
80
|
+
- Use `await using` for automatic cleanup when the variable goes out of scope
|
|
81
|
+
- Paths are sanitized to strip null bytes (defensive fix for CI environments)
|
|
82
|
+
|
|
83
|
+
## Testing With Effects
|
|
84
|
+
|
|
85
|
+
Use `testEffect(...)` from `test/lib/effect.ts` for tests that exercise Effect services or Effect-based workflows.
|
|
86
|
+
|
|
87
|
+
### Core Pattern
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { describe, expect } from "bun:test"
|
|
91
|
+
import { Effect, Layer } from "effect"
|
|
92
|
+
import { testEffect } from "../lib/effect"
|
|
93
|
+
|
|
94
|
+
const it = testEffect(Layer.mergeAll(MyService.defaultLayer))
|
|
95
|
+
|
|
96
|
+
describe("my service", () => {
|
|
97
|
+
it.instance("does the thing", () =>
|
|
98
|
+
Effect.gen(function* () {
|
|
99
|
+
const svc = yield* MyService.Service
|
|
100
|
+
const out = yield* svc.run()
|
|
101
|
+
expect(out).toEqual("ok")
|
|
102
|
+
}),
|
|
103
|
+
)
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### `it.effect` vs `it.live`
|
|
108
|
+
|
|
109
|
+
- Use `it.effect(...)` when the test should run with `TestClock` and `TestConsole`.
|
|
110
|
+
- Use `it.live(...)` when the test depends on real time, filesystem mtimes, child processes, git, locks, or other live OS behavior.
|
|
111
|
+
- Use `it.instance(...)` for live Effect tests that need a scoped temporary directory and instance context.
|
|
112
|
+
- Most integration-style tests in this package use `it.live(...)`.
|
|
113
|
+
|
|
114
|
+
### Effect Fixtures
|
|
115
|
+
|
|
116
|
+
Prefer the Effect-aware helpers from `fixture/fixture.ts` instead of building a manual runtime in each test.
|
|
117
|
+
|
|
118
|
+
- `tmpdirScoped(options?)` creates a scoped temp directory and cleans it up when the Effect scope closes.
|
|
119
|
+
- `provideInstance(dir)(effect)` is the low-level helper. It does not create a directory; it runs an Effect with `InstanceRef` provided for `dir`.
|
|
120
|
+
- `provideTmpdirInstance((dir) => effect, options?)` is the convenience helper. It creates a temp directory, binds it as the active instance, and disposes the instance on cleanup.
|
|
121
|
+
- `provideTmpdirServer((input) => effect, options?)` does the same, but also provides the test LLM server.
|
|
122
|
+
|
|
123
|
+
Use `it.instance(...)` by default when a test only needs one temp instance. Yield `TestInstance` from `fixture/fixture.ts` when the test needs the temp directory path:
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { TestInstance } from "../fixture/fixture"
|
|
127
|
+
|
|
128
|
+
it.instance("uses the temp directory", () =>
|
|
129
|
+
Effect.gen(function* () {
|
|
130
|
+
const test = yield* TestInstance
|
|
131
|
+
expect(test.directory).toContain("opencode-test-")
|
|
132
|
+
}),
|
|
133
|
+
)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Use `provideTmpdirInstance(...)` or `tmpdirScoped()` plus `provideInstance(...)` when a test needs multiple directories, custom setup before binding, needs to switch instance context within one test, or explicitly tests instance disposal/reload lifetime.
|
|
137
|
+
|
|
138
|
+
### Style
|
|
139
|
+
|
|
140
|
+
- Define `const it = testEffect(...)` near the top of the file.
|
|
141
|
+
- Keep the test body inside `Effect.gen(function* () { ... })`.
|
|
142
|
+
- Yield services directly with `yield* MyService.Service` or `yield* MyTool`.
|
|
143
|
+
- Avoid custom `ManagedRuntime`, `attach(...)`, or ad hoc `run(...)` wrappers when `testEffect(...)` already provides the runtime.
|
|
144
|
+
- When a test needs instance-local state, prefer `it.instance(...)` over manual `Instance.provide(...)` inside Promise-style tests.
|
|
145
|
+
|
|
146
|
+
### Partial Service Stubs
|
|
147
|
+
|
|
148
|
+
When a test only needs to override one or two methods of a service, prefer `Layer.mock` over a hand-rolled `Layer.succeed(Service, Service.of({ ... }))`. `Layer.mock` lets you supply just the methods that matter — anything else throws an `UnimplementedError` defect if the test accidentally calls it, which is exactly the signal you want.
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
import { Effect, Layer } from "effect"
|
|
152
|
+
import { Account } from "@/account/account"
|
|
153
|
+
|
|
154
|
+
const failingAccountLayer = Layer.mock(Account.Service, {
|
|
155
|
+
orgsByAccount: () => Effect.fail(new Account.AccountServiceError({ message: "simulated upstream failure" })),
|
|
156
|
+
})
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
This is much shorter than stubbing every method with `Effect.void` / `Effect.succeed(...)` placeholders, and it keeps the test focused on the behaviour under test.
|
|
160
|
+
|
|
161
|
+
## Synchronizing With Concurrent Work
|
|
162
|
+
|
|
163
|
+
### The Anti-Pattern
|
|
164
|
+
|
|
165
|
+
Using `Effect.sleep(N)` or `setTimeout` as a "wait for the forked fiber to be ready" hack races the scheduler. The forked fiber may not have reached the synchronization point within `N` ms on a slow CI host, and the test fails intermittently. See PR #27622 for a concrete flake that fell out of this exact pattern.
|
|
166
|
+
|
|
167
|
+
### The Fix
|
|
168
|
+
|
|
169
|
+
Wait on a **published readiness signal**, not wall-clock time. Available affordances:
|
|
170
|
+
|
|
171
|
+
- `pollWithTimeout(effect, message, duration?)` from `test/lib/effect.ts` — repeatedly run a predicate effect until it returns a non-`undefined` value, with a timeout.
|
|
172
|
+
- `awaitWithTimeout(effect, message, duration?)` from `test/lib/effect.ts` — wrap any effect with `Effect.timeoutOrElse` and a custom error message.
|
|
173
|
+
- `llm.wait(n)` from `test/lib/llm-server.ts` — wait until the mock LLM has received `n` HTTP calls.
|
|
174
|
+
- `SessionStatus.Service` `.get(sessionID)` — observable per-session state (`{ type: "busy" | "idle" | ... }`).
|
|
175
|
+
- `BackgroundJob.wait({ id, timeout })` from `src/background/job.ts` — wait for a background job to complete.
|
|
176
|
+
- Bus subscriptions — fork `Stream.runForEach(bus.subscribe(Event), ...)` and open a `Latch` inside the callback to signal first-event readiness.
|
|
177
|
+
- `Deferred.await(deferred).pipe(Effect.timeoutOrElse(...))` for one-shot signals.
|
|
178
|
+
|
|
179
|
+
### Example
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
// Antipattern — race
|
|
183
|
+
yield * prompt.shell({ command: "sleep 30" }).pipe(Effect.forkChild)
|
|
184
|
+
yield * Effect.sleep(50)
|
|
185
|
+
yield * prompt.cancel(chat.id)
|
|
186
|
+
|
|
187
|
+
// Fix — wait for a published readiness signal
|
|
188
|
+
yield * prompt.shell({ command: "sleep 30" }).pipe(Effect.forkChild)
|
|
189
|
+
yield *
|
|
190
|
+
pollWithTimeout(
|
|
191
|
+
Effect.gen(function* () {
|
|
192
|
+
const s = yield* (yield* SessionStatus.Service).get(chat.id)
|
|
193
|
+
return s.type === "busy" ? (true as const) : undefined
|
|
194
|
+
}),
|
|
195
|
+
"session never became busy",
|
|
196
|
+
)
|
|
197
|
+
yield * prompt.cancel(chat.id)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### When Fixed Sleeps Are OK
|
|
201
|
+
|
|
202
|
+
- Testing debounce or throttle behavior, where the sleep **is** the test.
|
|
203
|
+
- Letting real wall-clock advance past a genuine timestamp resolution boundary (e.g. mtime granularity).
|
|
204
|
+
- Simulating network latency in race-regression tests that intentionally exercise ordering.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Effect Test Migration
|
|
2
|
+
|
|
3
|
+
Move tests that exercise Effect services out of Promise-land and into the
|
|
4
|
+
shared `testEffect` pattern.
|
|
5
|
+
|
|
6
|
+
This file is guidance, not a live inventory. Before claiming a migration,
|
|
7
|
+
search current `dev` for the exact anti-pattern and update any PR notes
|
|
8
|
+
with what you actually changed.
|
|
9
|
+
|
|
10
|
+
## Target Pattern
|
|
11
|
+
|
|
12
|
+
Every Effect service test should have one local runner near the top:
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
const it = testEffect(layer)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use the runner method that matches the behavior:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
it.effect("pure service behavior", () =>
|
|
22
|
+
Effect.gen(function* () {
|
|
23
|
+
const service = yield* SomeService.Service
|
|
24
|
+
expect(yield* service.run()).toEqual("ok")
|
|
25
|
+
}),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
it.instance("instance-local behavior", () =>
|
|
29
|
+
Effect.gen(function* () {
|
|
30
|
+
const test = yield* TestInstance
|
|
31
|
+
expect(test.directory).toContain("opencode-test-")
|
|
32
|
+
}),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
it.live("live filesystem or process behavior", () =>
|
|
36
|
+
Effect.gen(function* () {
|
|
37
|
+
const dir = yield* tmpdirScoped()
|
|
38
|
+
// real clock / fs / git / process work
|
|
39
|
+
}),
|
|
40
|
+
)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Choosing The Runner
|
|
44
|
+
|
|
45
|
+
- `it.effect(...)` — pure Effect behavior with `TestClock` and
|
|
46
|
+
`TestConsole`.
|
|
47
|
+
- `it.instance(...)` — service behavior that needs one scoped opencode
|
|
48
|
+
instance.
|
|
49
|
+
- `it.live(...)` — real time, filesystem mtimes, child processes, git,
|
|
50
|
+
locks, servers, watchers, or OS behavior.
|
|
51
|
+
|
|
52
|
+
Most integration-style tests use `it.live(...)` or `it.instance(...)`.
|
|
53
|
+
|
|
54
|
+
## Layer Rules
|
|
55
|
+
|
|
56
|
+
Compose tests from open service layers when a dependency needs replacing.
|
|
57
|
+
Do not use a closed `defaultLayer` and then try to override an inner
|
|
58
|
+
dependency after it has already been provided.
|
|
59
|
+
|
|
60
|
+
Prefer small reusable fake boundary layers in `test/fake/*`:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
AuthTest.empty
|
|
64
|
+
AccountTest.empty
|
|
65
|
+
NpmTest.noop
|
|
66
|
+
SkillTest.empty
|
|
67
|
+
ProviderTest.fake().layer
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Use `Layer.mock` for partial service stubs. Missing methods should fail
|
|
71
|
+
loudly if the test accidentally calls them.
|
|
72
|
+
|
|
73
|
+
Do not add generic test-layer builders until repeated local compositions
|
|
74
|
+
prove the need.
|
|
75
|
+
|
|
76
|
+
## Fixture Rules
|
|
77
|
+
|
|
78
|
+
Use Effect-aware fixtures from `test/fixture/fixture.ts`:
|
|
79
|
+
|
|
80
|
+
- `TestInstance` inside `it.instance(...)` for the current temp instance.
|
|
81
|
+
- `tmpdirScoped(...)` inside `Effect.gen` for extra temp directories.
|
|
82
|
+
- `provideInstance(dir)(effect)` when one test needs to switch instance
|
|
83
|
+
context.
|
|
84
|
+
- `provideTmpdirInstance((dir) => effect, options)` when a live test needs
|
|
85
|
+
custom instance setup or multiple instance scopes.
|
|
86
|
+
- `disposeAllInstances()` in `afterEach` only for integration tests that
|
|
87
|
+
intentionally touch shared instance registries.
|
|
88
|
+
|
|
89
|
+
Avoid mutable global setup. If a global mutation is unavoidable during a
|
|
90
|
+
migration, scope it with acquire/release and treat it as temporary.
|
|
91
|
+
|
|
92
|
+
Long term, tests should not toggle `process.env`, `Global.Path`, or
|
|
93
|
+
mutable flags when behavior can be modeled with services. Prefer layers
|
|
94
|
+
such as `RuntimeFlags.layer(...)` or focused fake services.
|
|
95
|
+
|
|
96
|
+
## Anti-Patterns To Remove
|
|
97
|
+
|
|
98
|
+
- `test(..., async () => Effect.runPromise(...))`
|
|
99
|
+
- local `run(...)`, `load(...)`, `svc(...)`, or `runtime.runPromise(...)`
|
|
100
|
+
wrappers that only provide a layer
|
|
101
|
+
- `tmpdir()` plus legacy instance provision in Promise test bodies
|
|
102
|
+
- custom `ManagedRuntime.make(...)` in test files
|
|
103
|
+
- Promise `try/catch` around Effect failures
|
|
104
|
+
- `Promise.withResolvers`, `Bun.sleep`, or `setTimeout` for synchronization
|
|
105
|
+
when events, `Deferred`, fibers, or deterministic state checks fit
|
|
106
|
+
- mutable env/global/flag changes after layers are built
|
|
107
|
+
|
|
108
|
+
Promise helpers are acceptable at non-Effect boundaries, but yield them from
|
|
109
|
+
inside an Effect body with `Effect.promise(...)` rather than making them the
|
|
110
|
+
test harness.
|
|
111
|
+
|
|
112
|
+
## Conversion Recipe
|
|
113
|
+
|
|
114
|
+
1. Identify the real service under test and whether its open `layer` or
|
|
115
|
+
closed `defaultLayer` is appropriate.
|
|
116
|
+
2. Build one top-level `layer` with real dependencies where relevant and
|
|
117
|
+
fake layers at slow or external boundaries.
|
|
118
|
+
3. Replace local Promise wrappers with Effect helpers.
|
|
119
|
+
4. Convert `test(..., async () => { ... })` to `it.effect`, `it.instance`,
|
|
120
|
+
or `it.live`.
|
|
121
|
+
5. Move `await` calls inside `Effect.gen` as `yield*` calls.
|
|
122
|
+
6. Replace `await using tmp = await tmpdir(...)` with
|
|
123
|
+
`yield* tmpdirScoped(...)` when the temp directory lives inside the
|
|
124
|
+
Effect test.
|
|
125
|
+
7. Replace Promise failure assertions with `Effect.exit`, `Effect.flip`, or
|
|
126
|
+
focused assertion helpers.
|
|
127
|
+
8. Preserve concurrency with fibers, `Deferred`, and
|
|
128
|
+
`Effect.all(..., { concurrency: "unbounded" })`; do not accidentally
|
|
129
|
+
serialize formerly parallel behavior.
|
|
130
|
+
9. Run the focused test file and `bun typecheck` from `packages/opencode`.
|
|
131
|
+
|
|
132
|
+
## Good Examples
|
|
133
|
+
|
|
134
|
+
Use current examples as patterns, but re-check them before copying because
|
|
135
|
+
test migrations are active:
|
|
136
|
+
|
|
137
|
+
- `test/effect/instance-state.test.ts` — scoped directories, instance
|
|
138
|
+
switching, disposal, and concurrency.
|
|
139
|
+
- `test/bus/bus-effect.test.ts` — `Deferred`, streams, scoped fibers.
|
|
140
|
+
- `test/agent/plugin-agent-regression.test.ts` — real service layers plus
|
|
141
|
+
fake boundary layers.
|
|
142
|
+
- `test/account/service.test.ts` — service-level live tests, typed errors,
|
|
143
|
+
fake HTTP clients.
|
|
144
|
+
|
|
145
|
+
## Migration Queue Policy
|
|
146
|
+
|
|
147
|
+
Do not maintain a long file checklist here. It goes stale quickly.
|
|
148
|
+
|
|
149
|
+
When looking for the next target, search for current anti-patterns:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git grep -n "Effect.runPromise\|ManagedRuntime\|Promise.withResolvers\|Bun.sleep\|withTestInstance" -- packages/opencode/test
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Then choose one file or one small cluster, keep the PR focused, and mention
|
|
156
|
+
the focused verification in the PR body.
|
|
157
|
+
|
|
158
|
+
## Rough Edges To Watch
|
|
159
|
+
|
|
160
|
+
- Failure assertions against `Exit` / `Cause` can get verbose. Add helpers
|
|
161
|
+
only after the same shape repeats across multiple files.
|
|
162
|
+
- Some tests still need `Effect.promise(...)` around Node/Bun APIs. Prefer
|
|
163
|
+
Effect platform services when the surrounding code already uses them, but
|
|
164
|
+
do not block useful migrations on perfect abstraction.
|
|
165
|
+
- Layer composition can be noisy when a test needs real service subtrees plus
|
|
166
|
+
fake boundaries. Extract small `test/fake/*` layers before inventing
|
|
167
|
+
larger builders.
|
|
168
|
+
- Concurrency tests can get harder to read after replacing Promise
|
|
169
|
+
resolvers. Look for repeated patterns that deserve named helpers.
|