Skip to content

feat: [v1.18.10] merge upstream OpenCode v1.17.9 → v1.18.10 (grafted 3-way) - #1054

Open
anandgupta42 wants to merge 10 commits into
mainfrom
upstream/merge-v1.18.10
Open

feat: [v1.18.10] merge upstream OpenCode v1.17.9 → v1.18.10 (grafted 3-way)#1054
anandgupta42 wants to merge 10 commits into
mainfrom
upstream/merge-v1.18.10

Conversation

@anandgupta42

@anandgupta42 anandgupta42 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

PINEAPPLE

Summary

Merges upstream OpenCode v1.17.9 → v1.18.10 (~1,055 upstream commits, 1,937 changed files) into the fork.

Freeze-lift note: the 2026-07-18 harness decision set a 90-day freeze at the v1.17.9 base (security/provider cherry-picks only). This merge lifts that freeze at the user's explicit request — reviewer should confirm this is the intended posture change.

Merge mechanics (new this time)

  • True 3-way merge, not an overlay. The fork's tree has no git ancestor with upstream (the v1.4.0 bridge was a tree overlay), so two local, namespaced git replace --graft refs gave git merge v1.18.10 a real base (= v1.17.9). Fork changes — marked and unmarked — survived automatically unless upstream touched the same lines; this eliminates the overwrite class that produced v1.4.0's 16 regressions. Grafts were deleted after the merge; history flattened back to single-parent per fork convention.
  • Merge tooling hardened first (Codex plan review caught 4 blockers): skipFiles vs auditExclude split (the old config would have deleted 904 live files including the fork test suites), delete-only-newly-introduced guard, package.json imports map preservation, regex-escaped root-domain branding rule, provider identity headers documented in preservePatterns.

Adopted from upstream

  • Code Mode (experimental, flag-gated) + new packages/codemode; MCP resources (3 new tools + real file attachments with size/MIME guards); durable events (superseded 2 fork patches, dropped in upstream's favor).
  • Provider layer: adaptive thinking for current Claude models (Sonnet 5 / Opus 5 / Opus 4.5), reasoning_options + experimental.modes, family/release-date small-model selection, Vertex regional endpoints for Claude, unified prompt-cache keys, forceReasoning, Gemini sampling allowlists, Kimi/Moonshot detection, ~11 new bundled SDK mappings.
  • Session pipeline (ported into fork architecture): providerExecuted forwarding (closes a feat: [v1.17.9] bridge merge upstream OpenCode v1.4.0 → v1.17.9 #964 follow-up), per-attachment media support (Bedrock images-not-PDFs in tool results), header-timeout/stream-error retryable mapping, 2 new compaction plugin hooks.
  • Infra: new packages/protocol + packages/schema workspaces, LayerNode graph redesign (fork's lazy-deps re-added as LayerNode.lazy()), Effect beta.74→beta.83, turbo 2.10.2, SSE bounded queues + heartbeats, shared XSS-escaped OAuth pages, opentui 0.4.5 (build embedding ported — old embedding crashed every compiled TUI at startup).

Fork preserved (verified per-file by 5 review agents + guard suites)

Imperative session core (processor/prompt/llm/message-v2 with all ~15 marked safety/telemetry behaviors), 100+ altimate tools + skill ops, warehouse drivers, validator dispatch, tracing, per-location SSE filtering (now with proper location middleware on the event group), permission split-brain guard (143/143 regression tests), DDL safety denials, brand surfaces, DE tips, yolo/line-streaming, calm mode, Anthropic BUILTIN plugin (restored — dropped in resolution), Snowflake Cortex/Databricks/Altimate auth plugins, tail-preserving compaction, SessionSummary.diff workaround, qwen.txt safety-guardrail prompt.

upstream_fix reconciliation (pre-merge audit: 3 carried)

  • tools.ts model-id re-brand → dropped (upstream ships the identical fix via ModelV2.ID.make)
  • session/index.ts permission column, system.ts date-outside-cache → carried (upstream has no equivalent)
  • 2 core/event.ts replay fixes + 2 share-next catchCause guards → dropped (upstream's durable-events/scoped-fork designs supersede them)

Known issue (follow-up filed in-source)

  • AI-7519 phase labels: the TUI busy fallback ("Thinking...") works, but mapped labels ("Discovering tools...") no longer render — publish wiring and TUI store handler verified intact; the event stops somewhere in publish→GlobalBus→RPC→sync. The dev-only, CI-skipped e2e stays red locally as the signal. Schema manifest gap already fixed here.

Deferred (documented .todos + in-source markers, not regressions)

Upstream's Effect-native processor/prompt/message-v2 rewrites; setAgentModel session persistence; core ProviderPlugins header pipeline (NVIDIA billing headers); deeper plugin-config→provider registration; RuntimeFlags DI for the legacy alpha-model filter.

Test Plan

  • bunx turbo typecheck — 16/16 packages
  • analyze.ts --branding --strict — 0 leaks; --require-markers --strict — pass; marker guard per CI policy
  • Suites: core 1102/1102 · tui 203 (0 fail) · server 306/306 · provider 741 (0 fail) · mcp/code-mode 281/281 · permission 143/143 · guard/meta 315/315; full opencode suite re-run post-remediation (see final CI)
  • Upgrade path: new binary booted 3× against a copy of the real 1,194-session DB (XDG-isolated) — integrity ok, 0 rows lost, migration journal stable
  • Real-binary TUI smoke via pty: brand title + live render, no errors (caught + fixed the opentui 0.4.5 packaging crash that all code gates missed)
  • Bridge-guard audit categories (split-brain, fixtures, brand strings, logo, behavior patches, dropped files, script wrappers) covered via guard suites + agent review reports

Checklist

  • Tests added/updated
  • Documentation updated (merge runbook note on the graft technique to follow)
  • CHANGELOG updated (deferred to release PR)

Summary by cubic

Merges upstream OpenCode v1.17.9 → v1.18.10 into the fork with a true 3‑way graft to preserve local changes. Adds Code Mode, provider and session upgrades, a new CLI api command, and hardens SSE, CI build, and merge tooling; this lifts the v1.17.9 freeze.

  • New Features

    • Code Mode (flag‑gated) via packages/codemode, including OpenAPI‑derived tools and confined JS execution.
    • MCP resources: new tools and real file attachments with size/MIME guards.
    • Durable events adopted; replaces prior fork patches.
    • Provider layer updates: adaptive reasoning for Claude, reasoning_options/experimental.modes, Vertex regional endpoints, unified prompt‑cache keys, forceReasoning, Gemini sampling allowlists, plus new SDK mappings.
    • Session pipeline: providerExecuted forwarding, per‑attachment media support, retryable mapping, new compaction hooks.
    • CLI: new api subcommand to call server OpenAPI operations or METHOD path, with headers and JSON body support.
    • Infra: adds packages/protocol and packages/schema; SSE bounded queues + heartbeats; turbo 2.10.2.
  • Bug Fixes

    • SSE event manifest now includes session.status/idle/phase, fixing v2 SSE encode errors.
    • Merge tooling: cleanupSkipFiles only deletes newly introduced files and honors the base‑branch override end‑to‑end.
    • Code Mode registry: MCP server grouping uses clientName; session‑level permission filtering restored so session‑denied tools don’t appear in execute.
    • CI/build: GitHub Action sets Node 24 for node-gyp; typecheck includes packages/codemode, packages/protocol, and packages/schema.
    • Known issue: TUI phase labels still don’t render; follow‑up remains filed.

Written for commit 2a7b44b. Summary will update on new commits.

Review in cubic

anandgupta42 and others added 7 commits July 30, 2026 13:22
- Split `auditExclude` out of `skipFiles` in `script/upstream/utils/config.ts`:
  15 patterns (904 live files — `packages/opencode/test/**`, `packages/cli/**`,
  `patches/**`, generated SDK surfaces, repo-local `.opencode` metadata) were
  branding-audit exclusions but `merge.ts` treats `skipFiles` destructively
  (deletes matches, auto-resolves conflicts to upstream). Running a merge
  unpatched would have deleted the fork test suites.
- `cleanupSkipFiles` now only deletes files the merge newly introduced
  (base-branch tracked files are never removed) — defense in depth.
- `sanitizePackageJson` allowlist gains `imports` (was silently dropping the
  `#db` import map from `packages/opencode/package.json`).
- Branding scan honors `auditExclude` (behavior identical: 0 leaks before/after).
- `skipFiles` gains upstream v1.18.x web/preview packages we don't ship:
  `packages/client`, `packages/session-ui`, `packages/sdk-next`,
  `packages/httpapi-codegen`.

Found via Codex review of the v1.18.10 merge plan. Tooling tests 29/29 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	.github/ISSUE_TEMPLATE/question.yml
#	.github/workflows/compliance-close.yml
#	.github/workflows/duplicate-issues.yml
#	.github/workflows/publish.yml
#	.github/workflows/storybook.yml
#	.github/workflows/test.yml
#	.github/workflows/triage.yml
#	.opencode/tool/github-triage.ts
#	AGENTS.md
#	README.zh.md
#	README.zht.md
#	bun.lock
#	infra/console.ts
#	infra/enterprise.ts
#	infra/lake.ts
#	infra/secret.ts
#	infra/stage.ts
#	infra/stats.ts
#	nix/desktop.nix
#	nix/hashes.json
#	nix/opencode.nix
#	package.json
#	packages/app/e2e/performance/README.md
#	packages/app/e2e/performance/timeline/session-tab-flash.spec.ts
#	packages/app/e2e/performance/timeline/session-tab-switch-benchmark.spec.ts
#	packages/app/e2e/performance/timeline/session-tab-switch-metrics.ts
#	packages/app/e2e/performance/timeline/session-tab-switch-probe.ts
#	packages/app/e2e/performance/timeline/session-timeline-benchmark.fixture.ts
#	packages/app/e2e/performance/timeline/session-timeline-benchmark.spec.ts
#	packages/app/e2e/performance/timeline/session-timeline-stress.fixture.ts
#	packages/app/e2e/performance/timeline/timeline-test-helpers.ts
#	packages/app/e2e/performance/unit/session-tab-switch-metrics.test.ts
#	packages/app/e2e/regression/prompt-thinking-level.spec.ts
#	packages/app/e2e/regression/session-list-path-loading.spec.ts
#	packages/app/e2e/regression/session-timeline-collapse-state.spec.ts
#	packages/app/e2e/regression/session-timeline-context-resize.spec.ts
#	packages/app/e2e/smoke/session-timeline.fixture.ts
#	packages/app/e2e/smoke/session-timeline.spec.ts
#	packages/app/e2e/tsconfig.json
#	packages/app/e2e/utils/mock-server.ts
#	packages/app/index.html
#	packages/app/package.json
#	packages/app/public/oc-theme-preload.js
#	packages/app/src/addons/serialize.test.ts
#	packages/app/src/addons/serialize.ts
#	packages/app/src/app.tsx
#	packages/app/src/components/debug-bar.tsx
#	packages/app/src/components/dialog-connect-provider.tsx
#	packages/app/src/components/dialog-custom-provider.tsx
#	packages/app/src/components/dialog-edit-project.tsx
#	packages/app/src/components/dialog-fork.tsx
#	packages/app/src/components/dialog-manage-models.tsx
#	packages/app/src/components/dialog-select-directory-v2.tsx
#	packages/app/src/components/dialog-select-directory.tsx
#	packages/app/src/components/dialog-select-file.tsx
#	packages/app/src/components/dialog-select-mcp.tsx
#	packages/app/src/components/dialog-select-model-unpaid.tsx
#	packages/app/src/components/dialog-select-model.tsx
#	packages/app/src/components/dialog-select-server.tsx
#	packages/app/src/components/dialog-settings.tsx
#	packages/app/src/components/directory-picker-domain.test.ts
#	packages/app/src/components/directory-picker-domain.ts
#	packages/app/src/components/file-tree.tsx
#	packages/app/src/components/help-button.tsx
#	packages/app/src/components/model-tooltip.tsx
#	packages/app/src/components/prompt-input.stories.tsx
#	packages/app/src/components/prompt-input.tsx
#	packages/app/src/components/prompt-input/attachments.ts
#	packages/app/src/components/prompt-input/build-request-parts.test.ts
#	packages/app/src/components/prompt-input/build-request-parts.ts
#	packages/app/src/components/prompt-input/context-items.tsx
#	packages/app/src/components/prompt-input/image-attachments.tsx
#	packages/app/src/components/prompt-input/placeholder.ts
#	packages/app/src/components/prompt-input/slash-popover.tsx
#	packages/app/src/components/prompt-input/submit.test.ts
#	packages/app/src/components/prompt-input/submit.ts
#	packages/app/src/components/server/server-row-menu.tsx
#	packages/app/src/components/server/server-row.tsx
#	packages/app/src/components/session-context-usage.tsx
#	packages/app/src/components/session/index.ts
#	packages/app/src/components/session/session-context-metrics.test.ts
#	packages/app/src/components/session/session-context-metrics.ts
#	packages/app/src/components/session/session-context-tab.tsx
#	packages/app/src/components/session/session-header.tsx
#	packages/app/src/components/session/session-sortable-tab.tsx
#	packages/app/src/components/settings-general.tsx
#	packages/app/src/components/settings-keybinds.tsx
#	packages/app/src/components/settings-providers.tsx
#	packages/app/src/components/settings-server-picker.tsx
#	packages/app/src/components/settings-v2/dialog-server-v2.tsx
#	packages/app/src/components/settings-v2/dialog-settings-v2.tsx
#	packages/app/src/components/settings-v2/general.tsx
#	packages/app/src/components/settings-v2/models.tsx
#	packages/app/src/components/settings-v2/providers.tsx
#	packages/app/src/components/settings-v2/servers.tsx
#	packages/app/src/components/settings-v2/settings-v2.css
#	packages/app/src/components/status-popover-body.tsx
#	packages/app/src/components/status-popover.tsx
#	packages/app/src/components/terminal.tsx
#	packages/app/src/components/titlebar-session-events.test.ts
#	packages/app/src/components/titlebar-session-events.ts
#	packages/app/src/components/titlebar.css
#	packages/app/src/components/titlebar.tsx
#	packages/app/src/context/command.test.ts
#	packages/app/src/context/command.tsx
#	packages/app/src/context/comments.tsx
#	packages/app/src/context/directory-sync.ts
#	packages/app/src/context/file.tsx
#	packages/app/src/context/file/path.test.ts
#	packages/app/src/context/file/path.ts
#	packages/app/src/context/file/tree-store.ts
#	packages/app/src/context/global-sync/bootstrap.test.ts
#	packages/app/src/context/global-sync/bootstrap.ts
#	packages/app/src/context/global-sync/child-store.test.ts
#	packages/app/src/context/global-sync/child-store.ts
#	packages/app/src/context/global-sync/event-reducer.test.ts
#	packages/app/src/context/global-sync/event-reducer.ts
#	packages/app/src/context/global-sync/mcp.test.ts
#	packages/app/src/context/global-sync/mcp.ts
#	packages/app/src/context/global-sync/session-cache.test.ts
#	packages/app/src/context/global-sync/session-cache.ts
#	packages/app/src/context/global-sync/session-load.ts
#	packages/app/src/context/global-sync/types.ts
#	packages/app/src/context/global-sync/utils.test.ts
#	packages/app/src/context/global-sync/utils.ts
#	packages/app/src/context/global.tsx
#	packages/app/src/context/layout.tsx
#	packages/app/src/context/local.tsx
#	packages/app/src/context/models.tsx
#	packages/app/src/context/notification.tsx
#	packages/app/src/context/permission-auto-respond.test.ts
#	packages/app/src/context/permission-auto-respond.ts
#	packages/app/src/context/permission.tsx
#	packages/app/src/context/platform.tsx
#	packages/app/src/context/prompt.tsx
#	packages/app/src/context/sdk.tsx
#	packages/app/src/context/server-sdk.test.ts
#	packages/app/src/context/server-sdk.tsx
#	packages/app/src/context/server-sync.test.ts
#	packages/app/src/context/server-sync.tsx
#	packages/app/src/context/server.test.ts
#	packages/app/src/context/server.tsx
#	packages/app/src/context/settings.tsx
#	packages/app/src/context/sync.tsx
#	packages/app/src/context/tabs.tsx
#	packages/app/src/context/terminal.tsx
#	packages/app/src/env.d.ts
#	packages/app/src/hooks/use-providers.ts
#	packages/app/src/i18n/ar.ts
#	packages/app/src/i18n/br.ts
#	packages/app/src/i18n/bs.ts
#	packages/app/src/i18n/da.ts
#	packages/app/src/i18n/de.ts
#	packages/app/src/i18n/en.ts
#	packages/app/src/i18n/es.ts
#	packages/app/src/i18n/fr.ts
#	packages/app/src/i18n/ja.ts
#	packages/app/src/i18n/ko.ts
#	packages/app/src/i18n/no.ts
#	packages/app/src/i18n/parity.test.ts
#	packages/app/src/i18n/pl.ts
#	packages/app/src/i18n/ru.ts
#	packages/app/src/i18n/th.ts
#	packages/app/src/i18n/tr.ts
#	packages/app/src/i18n/uk.ts
#	packages/app/src/i18n/zh.ts
#	packages/app/src/i18n/zht.ts
#	packages/app/src/index.css
#	packages/app/src/index.ts
#	packages/app/src/pages/directory-layout.tsx
#	packages/app/src/pages/error.tsx
#	packages/app/src/pages/home.tsx
#	packages/app/src/pages/layout.tsx
#	packages/app/src/pages/layout/helpers.ts
#	packages/app/src/pages/layout/project-avatar-state.ts
#	packages/app/src/pages/layout/sidebar-items.tsx
#	packages/app/src/pages/layout/sidebar-project.tsx
#	packages/app/src/pages/layout/sidebar-workspace.tsx
#	packages/app/src/pages/new-session.tsx
#	packages/app/src/pages/session.tsx
#	packages/app/src/pages/session/composer/index.ts
#	packages/app/src/pages/session/composer/session-composer-region.tsx
#	packages/app/src/pages/session/composer/session-composer-state.test.ts
#	packages/app/src/pages/session/composer/session-composer-state.ts
#	packages/app/src/pages/session/composer/session-permission-dock.tsx
#	packages/app/src/pages/session/composer/session-question-dock.tsx
#	packages/app/src/pages/session/composer/session-revert-dock.tsx
#	packages/app/src/pages/session/composer/session-todo-dock.tsx
#	packages/app/src/pages/session/file-tabs.tsx
#	packages/app/src/pages/session/helpers.test.ts
#	packages/app/src/pages/session/helpers.ts
#	packages/app/src/pages/session/review-tab.tsx
#	packages/app/src/pages/session/session-layout.ts
#	packages/app/src/pages/session/session-model-helpers.test.ts
#	packages/app/src/pages/session/session-model-helpers.ts
#	packages/app/src/pages/session/session-side-panel.tsx
#	packages/app/src/pages/session/terminal-panel.tsx
#	packages/app/src/pages/session/timeline/message-timeline.tsx
#	packages/app/src/pages/session/timeline/model.test.ts
#	packages/app/src/pages/session/timeline/model.ts
#	packages/app/src/pages/session/timeline/projection.ts
#	packages/app/src/pages/session/timeline/rows.ts
#	packages/app/src/pages/session/usage-exceeded-dialogs.tsx
#	packages/app/src/pages/session/use-session-commands.tsx
#	packages/app/src/utils/diffs.test.ts
#	packages/app/src/utils/diffs.ts
#	packages/app/src/utils/persist.ts
#	packages/app/src/utils/server-errors.test.ts
#	packages/app/src/utils/server-errors.ts
#	packages/app/src/utils/server-health.test.ts
#	packages/app/src/utils/server-health.ts
#	packages/app/src/utils/server.ts
#	packages/app/src/utils/terminal-websocket-url.test.ts
#	packages/app/src/utils/terminal-websocket-url.ts
#	packages/app/src/utils/toast.tsx
#	packages/app/src/wsl/dialog-add-server.tsx
#	packages/app/src/wsl/settings-model.test.ts
#	packages/app/src/wsl/settings-model.ts
#	packages/app/src/wsl/settings.tsx
#	packages/app/src/wsl/types.ts
#	packages/app/test-browser/solid-virtual.test.ts
#	packages/console/app/package.json
#	packages/console/app/public/robots.txt
#	packages/console/app/src/asset/brand/preview-opencode-logo-dark-square.png
#	packages/console/app/src/asset/brand/preview-opencode-logo-light-square.png
#	packages/console/app/src/i18n/ar.ts
#	packages/console/app/src/i18n/br.ts
#	packages/console/app/src/i18n/da.ts
#	packages/console/app/src/i18n/de.ts
#	packages/console/app/src/i18n/en.ts
#	packages/console/app/src/i18n/es.ts
#	packages/console/app/src/i18n/fr.ts
#	packages/console/app/src/i18n/it.ts
#	packages/console/app/src/i18n/ja.ts
#	packages/console/app/src/i18n/ko.ts
#	packages/console/app/src/i18n/no.ts
#	packages/console/app/src/i18n/pl.ts
#	packages/console/app/src/i18n/ru.ts
#	packages/console/app/src/i18n/th.ts
#	packages/console/app/src/i18n/tr.ts
#	packages/console/app/src/i18n/uk.ts
#	packages/console/app/src/i18n/zh.ts
#	packages/console/app/src/i18n/zht.ts
#	packages/console/app/src/lib/stats-proxy.ts
#	packages/console/app/src/routes/brand/index.css
#	packages/console/app/src/routes/download/index.css
#	packages/console/app/src/routes/download/index.tsx
#	packages/console/app/src/routes/enterprise/index.tsx
#	packages/console/app/src/routes/feishu.ts
#	packages/console/app/src/routes/go/index.css
#	packages/console/app/src/routes/go/index.tsx
#	packages/console/app/src/routes/honeycomb/webhook.ts
#	packages/console/app/src/routes/workspace/[id]/go/lite-section.module.css
#	packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx
#	packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx
#	packages/console/app/src/routes/zen/util/error.ts
#	packages/console/app/src/routes/zen/util/handler.ts
#	packages/console/app/src/routes/zen/util/modelTpsLimiter.ts
#	packages/console/app/src/routes/zen/util/provider/anthropic.ts
#	packages/console/app/src/routes/zen/util/provider/google.ts
#	packages/console/app/src/routes/zen/util/provider/openai-compatible.ts
#	packages/console/app/src/routes/zen/util/provider/openai.ts
#	packages/console/app/src/routes/zen/util/provider/provider.ts
#	packages/console/app/src/routes/zen/util/providerBudgetTracker.ts
#	packages/console/app/test/providerUsage.test.ts
#	packages/console/core/package.json
#	packages/console/core/src/account.ts
#	packages/console/core/src/model.ts
#	packages/console/core/src/referral.ts
#	packages/console/core/src/schema/workspace.sql.ts
#	packages/console/core/src/user.ts
#	packages/console/core/src/workspace.ts
#	packages/console/function/package.json
#	packages/console/function/src/log-processor.ts
#	packages/console/mail/package.json
#	packages/console/support/package.json
#	packages/core/src/config.ts
#	packages/core/src/effect/layer-node.ts
#	packages/core/src/event.ts
#	packages/core/src/filesystem/search.ts
#	packages/core/src/location-layer.ts
#	packages/core/src/plugin/provider/openai-auth.ts
#	packages/core/src/schema.ts
#	packages/core/src/tool/webfetch.ts
#	packages/desktop/electron-builder.config.test.ts
#	packages/desktop/electron-builder.config.ts
#	packages/desktop/electron.vite.config.ts
#	packages/desktop/package.json
#	packages/desktop/scripts/prebuild.ts
#	packages/desktop/scripts/predev.ts
#	packages/desktop/scripts/utils.ts
#	packages/desktop/src/main/index.ts
#	packages/desktop/src/main/ipc.ts
#	packages/desktop/src/main/server.ts
#	packages/desktop/src/main/store-keys.ts
#	packages/desktop/src/main/store.ts
#	packages/desktop/src/main/unresponsive.ts
#	packages/desktop/src/main/updater.ts
#	packages/desktop/src/main/windows.ts
#	packages/desktop/src/main/wsl/ipc.ts
#	packages/desktop/src/main/wsl/policy.ts
#	packages/desktop/src/main/wsl/servers.test.ts
#	packages/desktop/src/main/wsl/servers.ts
#	packages/desktop/src/preload/index.ts
#	packages/desktop/src/preload/types.ts
#	packages/desktop/src/renderer/index.tsx
#	packages/enterprise/package.json
#	packages/enterprise/src/app.css
#	packages/enterprise/src/core/share.ts
#	packages/enterprise/src/routes/api/[...path].ts
#	packages/enterprise/src/routes/share/[shareID].tsx
#	packages/enterprise/test/core/share.test.ts
#	packages/function/package.json
#	packages/opencode/package.json
#	packages/opencode/script/build.ts
#	packages/opencode/src/account/account.ts
#	packages/opencode/src/account/repo.ts
#	packages/opencode/src/acp/directory.ts
#	packages/opencode/src/acp/usage.ts
#	packages/opencode/src/agent/agent.ts
#	packages/opencode/src/auth/index.ts
#	packages/opencode/src/cli/cmd/run.ts
#	packages/opencode/src/cli/cmd/tui.ts
#	packages/opencode/src/cli/tui/worker.ts
#	packages/opencode/src/command/index.ts
#	packages/opencode/src/config/config.ts
#	packages/opencode/src/config/tui.ts
#	packages/opencode/src/control-plane/workspace.ts
#	packages/opencode/src/effect/app-runtime.ts
#	packages/opencode/src/effect/runtime-flags.ts
#	packages/opencode/src/event-v2-bridge.ts
#	packages/opencode/src/format/index.ts
#	packages/opencode/src/git/index.ts
#	packages/opencode/src/image/image.ts
#	packages/opencode/src/installation/index.ts
#	packages/opencode/src/lsp/lsp.ts
#	packages/opencode/src/mcp/auth.ts
#	packages/opencode/src/mcp/index.ts
#	packages/opencode/src/mcp/oauth-callback.ts
#	packages/opencode/src/permission/index.ts
#	packages/opencode/src/plugin/digitalocean.ts
#	packages/opencode/src/plugin/github-copilot/models.ts
#	packages/opencode/src/plugin/index.ts
#	packages/opencode/src/plugin/openai/codex.ts
#	packages/opencode/src/plugin/snowflake-cortex.ts
#	packages/opencode/src/plugin/xai.ts
#	packages/opencode/src/project/bootstrap.ts
#	packages/opencode/src/project/instance-store.ts
#	packages/opencode/src/project/project.ts
#	packages/opencode/src/project/vcs.ts
#	packages/opencode/src/provider/auth.ts
#	packages/opencode/src/provider/provider.ts
#	packages/opencode/src/provider/transform.ts
#	packages/opencode/src/question/index.ts
#	packages/opencode/src/question/schema.ts
#	packages/opencode/src/server/server.ts
#	packages/opencode/src/session/compaction.ts
#	packages/opencode/src/session/instruction.ts
#	packages/opencode/src/session/llm.ts
#	packages/opencode/src/session/message-v2.ts
#	packages/opencode/src/session/processor.ts
#	packages/opencode/src/session/prompt.ts
#	packages/opencode/src/session/revert.ts
#	packages/opencode/src/session/run-state.ts
#	packages/opencode/src/session/schema.ts
#	packages/opencode/src/session/session.ts
#	packages/opencode/src/session/status.ts
#	packages/opencode/src/session/summary.ts
#	packages/opencode/src/session/system.ts
#	packages/opencode/src/session/todo.ts
#	packages/opencode/src/session/tools.ts
#	packages/opencode/src/share/session.ts
#	packages/opencode/src/share/share-next.ts
#	packages/opencode/src/skill/discovery.ts
#	packages/opencode/src/skill/index.ts
#	packages/opencode/src/snapshot/index.ts
#	packages/opencode/src/storage/storage.ts
#	packages/opencode/src/tool/registry.ts
#	packages/opencode/src/tool/skill.ts
#	packages/opencode/src/tool/task.ts
#	packages/opencode/src/tool/truncate.ts
#	packages/opencode/src/worktree/index.ts
#	packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap
#	packages/opencode/test/cli/import.test.ts
#	packages/opencode/test/cli/tui/thread.test.ts
#	packages/opencode/test/config/config.test.ts
#	packages/opencode/test/lib/cli-process.ts
#	packages/opencode/test/mcp/headers.test.ts
#	packages/opencode/test/mcp/lifecycle.test.ts
#	packages/opencode/test/mcp/oauth-callback.test.ts
#	packages/opencode/test/permission/next.test.ts
#	packages/opencode/test/plugin/workspace-adapter.test.ts
#	packages/opencode/test/project/project.test.ts
#	packages/opencode/test/project/worktree.test.ts
#	packages/opencode/test/provider/digitalocean.test.ts
#	packages/opencode/test/provider/header-timeout.test.ts
#	packages/opencode/test/provider/provider.test.ts
#	packages/opencode/test/provider/transform.test.ts
#	packages/opencode/test/server/httpapi-instance-context.test.ts
#	packages/opencode/test/server/httpapi-promptasync-context.test.ts
#	packages/opencode/test/server/httpapi-provider.test.ts
#	packages/opencode/test/server/httpapi-reference.test.ts
#	packages/opencode/test/session/compaction.test.ts
#	packages/opencode/test/session/instruction.test.ts
#	packages/opencode/test/session/llm-native-recorded.test.ts
#	packages/opencode/test/session/llm.test.ts
#	packages/opencode/test/session/messages-pagination.test.ts
#	packages/opencode/test/session/processor-effect.test.ts
#	packages/opencode/test/session/prompt.test.ts
#	packages/opencode/test/session/retry.test.ts
#	packages/opencode/test/session/system.test.ts
#	packages/opencode/test/tool/fixtures/models-api.json
#	packages/opencode/test/tool/question.test.ts
#	packages/opencode/test/tool/registry.test.ts
#	packages/opencode/test/tool/skill.test.ts
#	packages/opencode/test/tool/write.test.ts
#	packages/server/src/handlers/event.ts
#	packages/session-ui/src/components/apply-patch-file.test.ts
#	packages/session-ui/src/components/apply-patch-file.ts
#	packages/session-ui/src/components/basic-tool.css
#	packages/session-ui/src/components/basic-tool.stories.tsx
#	packages/session-ui/src/components/basic-tool.tsx
#	packages/session-ui/src/components/dock-prompt.stories.tsx
#	packages/session-ui/src/components/dock-prompt.tsx
#	packages/session-ui/src/components/file-media.tsx
#	packages/session-ui/src/components/file-search.tsx
#	packages/session-ui/src/components/file-ssr.tsx
#	packages/session-ui/src/components/file.css
#	packages/session-ui/src/components/file.tsx
#	packages/session-ui/src/components/line-comment-annotations.tsx
#	packages/session-ui/src/components/line-comment-styles.ts
#	packages/session-ui/src/components/line-comment.stories.tsx
#	packages/session-ui/src/components/line-comment.tsx
#	packages/session-ui/src/components/markdown-code-state.test.ts
#	packages/session-ui/src/components/markdown-code-state.ts
#	packages/session-ui/src/components/markdown-shiki.worker.ts
#	packages/session-ui/src/components/markdown-stream.test.ts
#	packages/session-ui/src/components/markdown-stream.ts
#	packages/session-ui/src/components/markdown-worker-protocol.test.ts
#	packages/session-ui/src/components/markdown-worker-protocol.ts
#	packages/session-ui/src/components/markdown-worker-queue.test.ts
#	packages/session-ui/src/components/markdown-worker-queue.ts
#	packages/session-ui/src/components/markdown-worker-transport.test.ts
#	packages/session-ui/src/components/markdown-worker-transport.ts
#	packages/session-ui/src/components/markdown-worker.ts
#	packages/session-ui/src/components/markdown.stories.tsx
#	packages/session-ui/src/components/markdown.tsx
#	packages/session-ui/src/components/message-file.test.ts
#	packages/session-ui/src/components/message-nav.css
#	packages/session-ui/src/components/message-nav.stories.tsx
#	packages/session-ui/src/components/message-nav.tsx
#	packages/session-ui/src/components/message-part-text.ts
#	packages/session-ui/src/components/message-part.css
#	packages/session-ui/src/components/message-part.stories.tsx
#	packages/session-ui/src/components/message-part.test.ts
#	packages/session-ui/src/components/message-part.tsx
#	packages/session-ui/src/components/session-diff.test.ts
#	packages/session-ui/src/components/session-diff.ts
#	packages/session-ui/src/components/session-retry.tsx
#	packages/session-ui/src/components/session-review.css
#	packages/session-ui/src/components/session-review.stories.tsx
#	packages/session-ui/src/components/session-review.tsx
#	packages/session-ui/src/components/session-turn.css
#	packages/session-ui/src/components/session-turn.stories.tsx
#	packages/session-ui/src/components/session-turn.tsx
#	packages/session-ui/src/components/shell-submessage-motion.stories.tsx
#	packages/session-ui/src/components/shell-submessage.css
#	packages/session-ui/src/components/timeline-playground.stories.tsx
#	packages/session-ui/src/components/tool-count-label.css
#	packages/session-ui/src/components/tool-count-label.tsx
#	packages/session-ui/src/components/tool-count-summary.css
#	packages/session-ui/src/components/tool-count-summary.stories.tsx
#	packages/session-ui/src/components/tool-count-summary.tsx
#	packages/session-ui/src/components/tool-error-card.css
#	packages/session-ui/src/components/tool-error-card.stories.tsx
#	packages/session-ui/src/components/tool-error-card.tsx
#	packages/session-ui/src/components/tool-status-title.css
#	packages/session-ui/src/components/tool-status-title.tsx
#	packages/session-ui/src/context/data.tsx
#	packages/session-ui/src/pierre/comment-hover.ts
#	packages/session-ui/src/pierre/commented-lines.ts
#	packages/session-ui/src/pierre/diff-selection.ts
#	packages/session-ui/src/pierre/file-find.ts
#	packages/session-ui/src/pierre/file-runtime.ts
#	packages/session-ui/src/pierre/file-selection.ts
#	packages/session-ui/src/pierre/index.ts
#	packages/session-ui/src/pierre/media.ts
#	packages/session-ui/src/pierre/selection-bridge.ts
#	packages/session-ui/src/pierre/virtualizer.ts
#	packages/session-ui/src/pierre/worker.ts
#	packages/session-ui/src/v2/components/basic-tool-v2.css
#	packages/session-ui/src/v2/components/basic-tool-v2.stories.tsx
#	packages/session-ui/src/v2/components/basic-tool-v2.tsx
#	packages/session-ui/src/v2/components/tool-error-card-v2.css
#	packages/session-ui/src/v2/components/tool-error-card-v2.stories.tsx
#	packages/session-ui/src/v2/components/tool-error-card-v2.tsx
#	packages/slack/package.json
#	packages/stats/app/package.json
#	packages/stats/app/src/app.tsx
#	packages/stats/app/src/entry-server.tsx
#	packages/stats/app/src/routes/[lab]/[model].tsx
#	packages/stats/app/src/routes/[lab]/index.tsx
#	packages/stats/app/src/routes/api/health.ts
#	packages/stats/app/src/routes/index.css
#	packages/stats/app/src/routes/index.tsx
#	packages/stats/app/src/routes/model-catalog.ts
#	packages/stats/app/src/routes/stats-shell.tsx
#	packages/stats/core/package.json
#	packages/stats/core/src/athena.ts
#	packages/stats/core/src/database.ts
#	packages/stats/core/src/domain/home.ts
#	packages/stats/core/src/domain/inference.ts
#	packages/stats/core/src/domain/model.ts
#	packages/stats/core/src/honeycomb-backfill.ts
#	packages/stats/core/src/stat-sync.ts
#	packages/stats/server/package.json
#	packages/stats/server/src/ingest.ts
#	packages/stats/server/src/stat-sync.ts
#	packages/storybook/.storybook/main.ts
#	packages/storybook/.storybook/mocks/app/components/dialog-select-model.tsx
#	packages/storybook/.storybook/mocks/app/context/command.ts
#	packages/storybook/.storybook/mocks/app/context/language.ts
#	packages/storybook/.storybook/mocks/app/context/prompt.ts
#	packages/storybook/.storybook/mocks/app/context/sync.ts
#	packages/storybook/.storybook/mocks/app/hooks/use-providers.ts
#	packages/storybook/.storybook/playground-css-plugin.ts
#	packages/storybook/.storybook/preview.tsx
#	packages/storybook/package.json
#	packages/tui/LICENSE
#	packages/tui/script/pack.ts
#	packages/tui/script/publish.ts
#	packages/tui/src/assets/fonts/Inter.ttf
#	packages/tui/src/assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2
#	packages/tui/src/component/error-component.tsx
#	packages/tui/src/component/logo.tsx
#	packages/tui/src/component/prompt/index.tsx
#	packages/tui/src/context/marked-code-span.test.ts
#	packages/tui/src/context/marked-code-span.ts
#	packages/tui/src/context/sync.tsx
#	packages/tui/src/feature-plugins/home/tips-view.tsx
#	packages/tui/src/routes/session/index.tsx
#	packages/tui/src/v2/components/divider-v2.css
#	packages/tui/src/v2/components/divider-v2.stories.tsx
#	packages/tui/src/v2/components/divider-v2.tsx
#	packages/tui/src/v2/components/file-tree-v2.css
#	packages/tui/src/v2/components/loader-v2.css
#	packages/tui/src/v2/components/loader-v2.stories.tsx
#	packages/tui/src/v2/components/loader-v2.tsx
#	packages/tui/src/v2/components/progress-circle-v2.css
#	packages/tui/src/v2/components/progress-circle-v2.tsx
#	packages/tui/src/v2/components/split-button-v2.css
#	packages/tui/src/v2/components/split-button-v2.tsx
#	packages/tui/test/cli/tui/diff-viewer.test.tsx
#	packages/tui/tsconfig.build.json
#	packages/ui/package.json
#	packages/ui/script/colors.txt
#	packages/ui/src/assets/favicon/site.webmanifest
#	packages/ui/src/components/accordion.css
#	packages/ui/src/components/card.css
#	packages/ui/src/components/card.tsx
#	packages/ui/src/components/collapsible.css
#	packages/ui/src/components/dialog.css
#	packages/ui/src/components/dock-surface.css
#	packages/ui/src/components/icon.stories.tsx
#	packages/ui/src/components/icon.tsx
#	packages/ui/src/components/motion-spring.tsx
#	packages/ui/src/components/progress-circle.css
#	packages/ui/src/components/progress-circle.tsx
#	packages/ui/src/components/resize-handle.tsx
#	packages/ui/src/components/scroll-view.css
#	packages/ui/src/components/scroll-view.test.ts
#	packages/ui/src/components/scroll-view.tsx
#	packages/ui/src/components/select.css
#	packages/ui/src/components/tabs.css
#	packages/ui/src/components/tooltip.tsx
#	packages/ui/src/context/index.ts
#	packages/ui/src/context/marked.tsx
#	packages/ui/src/i18n/ar.ts
#	packages/ui/src/i18n/br.ts
#	packages/ui/src/i18n/bs.ts
#	packages/ui/src/i18n/da.ts
#	packages/ui/src/i18n/de.ts
#	packages/ui/src/i18n/en.ts
#	packages/ui/src/i18n/es.ts
#	packages/ui/src/i18n/fr.ts
#	packages/ui/src/i18n/ja.ts
#	packages/ui/src/i18n/ko.ts
#	packages/ui/src/i18n/no.ts
#	packages/ui/src/i18n/pl.ts
#	packages/ui/src/i18n/ru.ts
#	packages/ui/src/i18n/th.ts
#	packages/ui/src/i18n/tr.ts
#	packages/ui/src/i18n/uk.ts
#	packages/ui/src/i18n/zh.ts
#	packages/ui/src/i18n/zht.ts
#	packages/ui/src/styles/index.css
#	packages/ui/src/styles/tailwind/colors.css
#	packages/ui/src/styles/tailwind/utilities.css
#	packages/ui/src/styles/theme.css
#	packages/ui/src/theme/context.tsx
#	packages/ui/src/theme/themes/oc-2.json
#	packages/ui/src/theme/v2/mapping.ts
#	packages/ui/src/v2/components/accordion-v2.css
#	packages/ui/src/v2/components/badge-v2.css
#	packages/ui/src/v2/components/badge-v2.stories.tsx
#	packages/ui/src/v2/components/badge-v2.tsx
#	packages/ui/src/v2/components/button-v2.css
#	packages/ui/src/v2/components/button-v2.stories.tsx
#	packages/ui/src/v2/components/button-v2.tsx
#	packages/ui/src/v2/components/checkbox-v2.css
#	packages/ui/src/v2/components/dialog-v2.css
#	packages/ui/src/v2/components/dialog-v2.stories.tsx
#	packages/ui/src/v2/components/dialog-v2.tsx
#	packages/ui/src/v2/components/diff-changes-v2.css
#	packages/ui/src/v2/components/field-v2.css
#	packages/ui/src/v2/components/icon-button-v2.css
#	packages/ui/src/v2/components/icon.tsx
#	packages/ui/src/v2/components/inline-input-v2.css
#	packages/ui/src/v2/components/inline-input-v2.tsx
#	packages/ui/src/v2/components/line-comment-v2.css
#	packages/ui/src/v2/components/line-comment-v2.tsx
#	packages/ui/src/v2/components/project-avatar-v2.css
#	packages/ui/src/v2/components/project-avatar-v2.stories.tsx
#	packages/ui/src/v2/components/project-avatar-v2.tsx
#	packages/ui/src/v2/components/radio-v2.css
#	packages/ui/src/v2/components/segmented-control-v2.css
#	packages/ui/src/v2/components/select-v2.css
#	packages/ui/src/v2/components/select-v2.tsx
#	packages/ui/src/v2/components/switch-v2.css
#	packages/ui/src/v2/components/tabs-v2.css
#	packages/ui/src/v2/components/text-input-v2.css
#	packages/ui/src/v2/components/text-input-v2.tsx
#	packages/ui/src/v2/components/text-shimmer-v2.css
#	packages/ui/src/v2/components/textarea-v2.css
#	packages/ui/src/v2/components/toast-v2.css
#	packages/ui/src/v2/components/toast-v2.stories.tsx
#	packages/ui/src/v2/components/toast-v2.tsx
#	packages/ui/src/v2/components/tooltip-v2.css
#	packages/ui/src/v2/components/tooltip-v2.tsx
#	packages/ui/src/v2/components/wordmark-v2.tsx
#	packages/ui/src/v2/styles/theme.css
#	packages/ui/vite.config.ts
#	packages/util/V1_API_MIGRATION.md
#	packages/util/e2e/performance/timeline-stability/README.md
#	packages/util/e2e/performance/timeline-stability/adverse.spec.ts
#	packages/util/e2e/performance/timeline-stability/context-matrix.spec.ts
#	packages/util/e2e/performance/timeline-stability/environment-matrix.spec.ts
#	packages/util/e2e/performance/timeline-stability/file-matrix.spec.ts
#	packages/util/e2e/performance/timeline-stability/file-mutation.spec.ts
#	packages/util/e2e/performance/timeline-stability/fixture.test.ts
#	packages/util/e2e/performance/timeline-stability/fixture.ts
#	packages/util/e2e/performance/timeline-stability/interaction.spec.ts
#	packages/util/e2e/performance/timeline-stability/lifecycle.spec.ts
#	packages/util/e2e/performance/timeline-stability/oracle-browser.spec.ts
#	packages/util/e2e/performance/timeline-stability/playwright.config.ts
#	packages/util/e2e/performance/timeline-stability/scroll-interaction.spec.ts
#	packages/util/e2e/performance/timeline-stability/shell-matrix.spec.ts
#	packages/util/e2e/performance/timeline-stability/tool-mutation.spec.ts
#	packages/util/e2e/performance/timeline-stability/tools.spec.ts
#	packages/util/e2e/performance/timeline-stability/transition-matrix.spec.ts
#	packages/util/e2e/performance/timeline/first-navigation-benchmark.spec.ts
#	packages/util/e2e/performance/timeline/first-navigation-metrics.ts
#	packages/util/e2e/performance/timeline/first-navigation-probe.ts
#	packages/util/e2e/performance/timeline/home-tab-navigation-benchmark.spec.ts
#	packages/util/e2e/performance/timeline/navigation-milestones.ts
#	packages/util/e2e/performance/timeline/review-pane-scaling-benchmark.spec.ts
#	packages/util/e2e/performance/timeline/session-parent-hydration-benchmark.spec.ts
#	packages/util/e2e/performance/unit/first-navigation-metrics.test.ts
#	packages/util/e2e/performance/unit/mock-server.test.ts
#	packages/util/e2e/performance/unit/navigation-milestones.test.ts
#	packages/util/e2e/performance/unit/session-tab-switch-probe.test.ts
#	packages/util/e2e/performance/unit/timeline-test-helpers.test.ts
#	packages/util/e2e/performance/unit/visual-stability.test.ts
#	packages/util/e2e/regression/cross-server-tab-close.spec.ts
#	packages/util/e2e/regression/file-browser-sidebar-tab-switch.spec.ts
#	packages/util/e2e/regression/legacy-new-session.spec.ts
#	packages/util/e2e/regression/new-session-panel-corner.spec.ts
#	packages/util/e2e/regression/open-file-expand-folder.spec.ts
#	packages/util/e2e/regression/prompt-input-v2-command-draft.spec.ts
#	packages/util/e2e/regression/remote-session-settings.spec.ts
#	packages/util/e2e/regression/remote-tab-busy.spec.ts
#	packages/util/e2e/regression/review-image-flash.spec.ts
#	packages/util/e2e/regression/review-line-comment.spec.ts
#	packages/util/e2e/regression/review-open-file.spec.ts
#	packages/util/e2e/regression/review-state-persistence.spec.ts
#	packages/util/e2e/regression/review-tab-switch.spec.ts
#	packages/util/e2e/regression/review-terminal-stacked.spec.ts
#	packages/util/e2e/regression/session-request-docks.spec.ts
#	packages/util/e2e/regression/session-timeline-accessibility.spec.ts
#	packages/util/e2e/regression/session-timeline-context-state.spec.ts
#	packages/util/e2e/regression/session-timeline-file-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-file-state.spec.ts
#	packages/util/e2e/regression/session-timeline-history-root.spec.ts
#	packages/util/e2e/regression/session-timeline-lifecycle-state.spec.ts
#	packages/util/e2e/regression/session-timeline-locale-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-reasoning-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-reducer-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-shell-outline.spec.ts
#	packages/util/e2e/regression/session-timeline-tool-projection.spec.ts
#	packages/util/e2e/regression/session-timeline-tool-state.spec.ts
#	packages/util/e2e/regression/session-timeline-transport.spec.ts
#	packages/util/e2e/regression/session-todo-dock-navigation.spec.ts
#	packages/util/e2e/regression/subagent-child-navigation.spec.ts
#	packages/util/e2e/regression/tab-navigate-mousedown.spec.ts
#	packages/util/e2e/regression/terminal-composer-focus.spec.ts
#	packages/util/e2e/regression/terminal-hidden.spec.ts
#	packages/util/e2e/regression/terminal-tab-switch.spec.ts
#	packages/util/e2e/reproduction/timeline-suspense/index.html
#	packages/util/e2e/reproduction/timeline-suspense/main.tsx
#	packages/util/e2e/reproduction/timeline-suspense/playwright.config.ts
#	packages/util/e2e/reproduction/timeline-suspense/timeline-suspense.repro.ts
#	packages/util/e2e/reproduction/timeline-suspense/vite.config.ts
#	packages/util/e2e/user-story/model-selection-flow.spec.ts
#	packages/util/e2e/utils/sse-transport.ts
#	packages/util/e2e/utils/visual-stability.ts
#	packages/util/e2e/utils/visual-stability/analyzer.ts
#	packages/util/e2e/utils/visual-stability/capture.ts
#	packages/util/e2e/utils/visual-stability/index.ts
#	packages/util/e2e/utils/visual-stability/invariant.ts
#	packages/util/e2e/utils/visual-stability/model.ts
#	packages/util/e2e/utils/visual-stability/probe.ts
#	packages/util/e2e/utils/visual-stability/regions.ts
#	packages/util/e2e/utils/visual-stability/reporter.ts
#	packages/util/e2e/utils/visual-stability/scenario.ts
#	packages/util/src/assets/help/home.png
#	packages/util/src/assets/help/introducing-tabs.mp4
#	packages/util/src/assets/help/placeholder.png
#	packages/util/src/assets/help/tabs.png
#	packages/util/src/components/command-palette.ts
#	packages/util/src/components/command-tooltip-keybind.test.ts
#	packages/util/src/components/command-tooltip-keybind.ts
#	packages/util/src/components/dialog-command-palette-v2.css
#	packages/util/src/components/dialog-command-palette-v2.tsx
#	packages/util/src/components/dialog-connect-provider.stories.tsx
#	packages/util/src/components/dialog-edit-project-v2.tsx
#	packages/util/src/components/dialog-select-model-search.test.ts
#	packages/util/src/components/dialog-select-model-search.ts
#	packages/util/src/components/dialog-select-model-unpaid-v2.stories.tsx
#	packages/util/src/components/dialog-select-model-unpaid-v2.tsx
#	packages/util/src/components/edit-project.ts
#	packages/util/src/components/file-tree-v2-model.test.ts
#	packages/util/src/components/file-tree-v2-model.ts
#	packages/util/src/components/file-tree-v2.tsx
#	packages/util/src/components/prompt-input-v2.tsx
#	packages/util/src/components/prompt-input/contracts.ts
#	packages/util/src/components/prompt-input/history-store.ts
#	packages/util/src/components/prompt-input/image-attachments.css
#	packages/util/src/components/prompt-input/submission-state.ts
#	packages/util/src/components/prompt-input/transient-state.ts
#	packages/util/src/components/prompt-project-selector.tsx
#	packages/util/src/components/prompt-workspace-selector.tsx
#	packages/util/src/components/session/open-in-app-v2.tsx
#	packages/util/src/components/session/open-in-app.tsx
#	packages/util/src/components/session/session-sortable-tab-v2.tsx
#	packages/util/src/components/session/session-sortable-terminal-tab-v2.tsx
#	packages/util/src/components/settings-dialog.tsx
#	packages/util/src/components/settings-v2/general-controller-behavior.ts
#	packages/util/src/components/settings-v2/general-controllers.test.ts
#	packages/util/src/components/settings-v2/general-controllers.ts
#	packages/util/src/components/settings-v2/interface-transition.stories.tsx
#	packages/util/src/components/settings-v2/interface-transition.tsx
#	packages/util/src/components/status-popover-indicator.test.ts
#	packages/util/src/components/status-popover-indicator.ts
#	packages/util/src/components/titlebar-tab-gesture.test.ts
#	packages/util/src/components/titlebar-tab-gesture.ts
#	packages/util/src/components/titlebar-tab-nav.css
#	packages/util/src/components/titlebar-tab-nav.tsx
#	packages/util/src/components/titlebar-tab-order.test.ts
#	packages/util/src/components/titlebar-tab-order.ts
#	packages/util/src/components/titlebar-tab-popover.css
#	packages/util/src/components/titlebar-tab-popover.tsx
#	packages/util/src/components/titlebar-tab-strip.tsx
#	packages/util/src/components/ui/drawer.tsx
#	packages/util/src/components/virtual-scroll-element.test.ts
#	packages/util/src/components/virtual-scroll-element.ts
#	packages/util/src/context/closed-tabs.ts
#	packages/util/src/context/global-sync/home-session-index.test.ts
#	packages/util/src/context/global-sync/home-session-index.ts
#	packages/util/src/context/layout-tabs.test.ts
#	packages/util/src/context/layout-tabs.ts
#	packages/util/src/context/local-agent.test.ts
#	packages/util/src/context/local-agent.ts
#	packages/util/src/context/prompt-state.test.ts
#	packages/util/src/context/prompt-state.ts
#	packages/util/src/context/server-session-v2-reducer.test.ts
#	packages/util/src/context/server-session-v2-reducer.ts
#	packages/util/src/context/server-session.test.ts
#	packages/util/src/context/server-session.ts
#	packages/util/src/context/settings.test.ts
#	packages/util/src/context/tab-memory.ts
#	packages/util/src/context/tab-migration.ts
#	packages/util/src/context/tabs.test.ts
#	packages/util/src/desktop-menu.test.ts
#	packages/util/src/hooks/provider-catalog.test.ts
#	packages/util/src/hooks/provider-catalog.ts
#	packages/util/src/pages/home-session-archive.test.ts
#	packages/util/src/pages/home-session-archive.ts
#	packages/util/src/pages/home-session-open.test.ts
#	packages/util/src/pages/home-session-open.ts
#	packages/util/src/pages/home/home-controller.ts
#	packages/util/src/pages/home/home-projects-controller.tsx
#	packages/util/src/pages/home/home-projects-view.tsx
#	packages/util/src/pages/home/home-projects.tsx
#	packages/util/src/pages/home/home-scroll-controller.ts
#	packages/util/src/pages/home/home-session-search-controller.ts
#	packages/util/src/pages/home/home-sessions-controller.tsx
#	packages/util/src/pages/home/home-sessions-view.tsx
#	packages/util/src/pages/home/home-sessions.tsx
#	packages/util/src/pages/home/legacy-home.tsx
#	packages/util/src/pages/layout-new.tsx
#	packages/util/src/pages/layout/session-tab-avatar.tsx
#	packages/util/src/pages/new-session/new-session-draft-controller.ts
#	packages/util/src/pages/new-session/new-session-view.tsx
#	packages/util/src/pages/new-session/new-session-workspace-controller.test.ts
#	packages/util/src/pages/new-session/new-session-workspace-controller.ts
#	packages/util/src/pages/new-session/use-new-session-commands.tsx
#	packages/util/src/pages/session/composer/prompt-model-selection.ts
#	packages/util/src/pages/session/composer/session-composer-controls.ts
#	packages/util/src/pages/session/composer/session-composer-region-controller.ts
#	packages/util/src/pages/session/composer/session-revert-dock.stories.tsx
#	packages/util/src/pages/session/composer/todo-panel-motion.stories.tsx
#	packages/util/src/pages/session/session-lineage.ts
#	packages/util/src/pages/session/session-ownership.ts
#	packages/util/src/pages/session/session-panel-layout.test.ts
#	packages/util/src/pages/session/session-panel-layout.ts
#	packages/util/src/pages/session/session-panel-width.test.ts
#	packages/util/src/pages/session/session-panel-width.ts
#	packages/util/src/pages/session/terminal-panel-v2.tsx
#	packages/util/src/pages/session/timeline/observe-element-offset.test.ts
#	packages/util/src/pages/session/timeline/observe-element-offset.ts
#	packages/util/src/pages/session/timeline/projection.test.ts
#	packages/util/src/pages/session/timeline/row-reconciliation.ts
#	packages/util/src/pages/session/timeline/rows-current.test.ts
#	packages/util/src/pages/session/timeline/summary-diffs.test.ts
#	packages/util/src/pages/session/timeline/summary-diffs.ts
#	packages/util/src/pages/session/timeline/timeline-row.ts
#	packages/util/src/pages/session/timeline/virtual-items.ts
#	packages/util/src/pages/session/use-composer-commands.tsx
#	packages/util/src/pages/session/v2/review-diff-kinds.test.ts
#	packages/util/src/pages/session/v2/review-diff-kinds.ts
#	packages/util/src/pages/session/v2/review-panel-v2-state.ts
#	packages/util/src/pages/session/v2/review-panel-v2.tsx
#	packages/util/src/pages/session/v2/session-file-browser-tab.tsx
#	packages/util/src/pages/session/v2/session-file-list-v2.tsx
#	packages/util/src/utils/file-manager.ts
#	packages/util/src/utils/menu-dismiss-controller.ts
#	packages/util/src/utils/search-keydown.ts
#	packages/util/src/utils/server-compat.test.ts
#	packages/util/src/utils/server-compat.ts
#	packages/util/src/utils/server-protocol.test.ts
#	packages/util/src/utils/server-protocol.ts
#	packages/util/src/utils/session-message.test.ts
#	packages/util/src/utils/session-message.ts
#	packages/util/src/utils/session-route.test.ts
#	packages/util/src/utils/session-route.ts
#	packages/util/src/utils/session.test.ts
#	packages/util/src/utils/session.ts
#	packages/util/src/wsl/add-server-probes.ts
#	packages/util/src/wsl/dialog-add-wsl-server.css
#	packages/util/test-browser/command-palette.test.ts
#	packages/util/test-browser/motion-spring.test.ts
#	packages/util/test-browser/prompt-attachments.test.ts
#	packages/util/test-browser/prompt-persistence.test.ts
#	packages/util/test-browser/prompt-scope.test.ts
#	packages/util/test-browser/prompt-submission-state.test.ts
#	packages/util/test-browser/prompt-transient-state.test.ts
#	packages/util/test-browser/review-panel-v2-state.test.ts
#	packages/util/test-browser/session-lineage.test.ts
#	packages/util/test-browser/session-ownership.test.ts
#	packages/util/test-browser/settings-keybinds.test.ts
#	packages/util/test-browser/solid-router-cleanup.test.ts
#	packages/util/test-browser/toast-owner.test.ts
#	packages/util/vendor/opencode-ai-client-1.17.13-v2.tgz
#	packages/web/package.json
#	packages/web/src/components/share/content-bash.tsx
#	packages/web/src/components/share/part.tsx
#	packages/web/src/content/docs/ar/go.mdx
#	packages/web/src/content/docs/ar/zen.mdx
#	packages/web/src/content/docs/bs/go.mdx
#	packages/web/src/content/docs/bs/zen.mdx
#	packages/web/src/content/docs/cli.mdx
#	packages/web/src/content/docs/config.mdx
#	packages/web/src/content/docs/da/go.mdx
#	packages/web/src/content/docs/da/zen.mdx
#	packages/web/src/content/docs/de/go.mdx
#	packages/web/src/content/docs/de/zen.mdx
#	packages/web/src/content/docs/ecosystem.mdx
#	packages/web/src/content/docs/enterprise.mdx
#	packages/web/src/content/docs/es/go.mdx
#	packages/web/src/content/docs/es/zen.mdx
#	packages/web/src/content/docs/fr/go.mdx
#	packages/web/src/content/docs/fr/zen.mdx
#	packages/web/src/content/docs/go.mdx
#	packages/web/src/content/docs/it/go.mdx
#	packages/web/src/content/docs/it/zen.mdx
#	packages/web/src/content/docs/ja/go.mdx
#	packages/web/src/content/docs/ja/zen.mdx
#	packages/web/src/content/docs/keybinds.mdx
#	packages/web/src/content/docs/ko/go.mdx
#	packages/web/src/content/docs/ko/zen.mdx
#	packages/web/src/content/docs/nb/go.mdx
#	packages/web/src/content/docs/nb/zen.mdx
#	packages/web/src/content/docs/permissions.mdx
#	packages/web/src/content/docs/pl/go.mdx
#	packages/web/src/content/docs/pl/zen.mdx
#	packages/web/src/content/docs/providers.mdx
#	packages/web/src/content/docs/pt-br/go.mdx
#	packages/web/src/content/docs/pt-br/zen.mdx
#	packages/web/src/content/docs/ru/go.mdx
#	packages/web/src/content/docs/ru/index.mdx
#	packages/web/src/content/docs/ru/zen.mdx
#	packages/web/src/content/docs/th/go.mdx
#	packages/web/src/content/docs/th/zen.mdx
#	packages/web/src/content/docs/tr/go.mdx
#	packages/web/src/content/docs/tr/zen.mdx
#	packages/web/src/content/docs/zen.mdx
#	packages/web/src/content/docs/zh-cn/go.mdx
#	packages/web/src/content/docs/zh-cn/zen.mdx
#	packages/web/src/content/docs/zh-tw/go.mdx
#	packages/web/src/content/docs/zh-tw/zen.mdx
#	sdks/vscode/package.json
#	specs/v2/config.md
#	specs/v2/instructions.md
#	specs/v2/provider-model.md
#	specs/v2/schema-changelog.md
#	specs/v2/session.md
#	specs/v2/todo.md
#	sst-env.d.ts
#	turbo.json
… test suite

Remediation pass after the v1.18.10 grafted 3-way merge:

- `LayerNode`: re-added the fork's lazy-deps capability on upstream's object
  API (`LayerNode.lazy()` + `nodeDependencies()` resolver at every consumer);
  swept all 47 opencode dep arrays + thunk call sites onto it.
- Module-init TDZ class closed: `Layer.suspend` on all restored core
  `defaultLayer`s and `AppLayer`; lazy bootstrap replacement in
  `AppNodeBuilderV1`; restored `Database`/`FSUtil`/`Global` defaultLayers.
- Fixed real regressions: dropped Anthropic `BUILTIN` plugin restored; CI
  typecheck filter gained `codemode`/`protocol`/`schema`; OpenAI header
  timeout restored to the fork's 10s; fork `tui.ts` event-definitions
  iteration bug; `discover.ts` test-isolation leak (`os.homedir()` →
  `Global.Path.home`); CORS origin regex missed by branding transform;
  `glob.ts` containment patch missing its `FSUtil.node` dep; event group
  now declares the location middleware (fork per-location SSE filtering).
- Completed the partially-ported upstream provider/transform v1.18.10 logic
  (prompt-cache keys, forceReasoning, Gemini sampling allowlist, adaptive
  thinking for current Claude models, reasoning_options/modes, Vertex REP,
  family-based small-model selection).
- Guard suites updated to assert adopted architectures (OauthCallbackPage
  escaping/branding, Effect-native Plugin.trigger isolation, beta.83 pin,
  turbo package-name task keys); 3 unclosed marker blocks fixed.
- Upstream-only integration depths converted to documented `.todo`s
  (NVIDIA ProviderPlugins pipeline, RuntimeFlags DI, plugin-config
  providers) — feature-parity follow-ups, not regressions.
- Merge tooling: regex-escaped root-domain branding rule; provider identity
  headers documented in preservePatterns.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…TUI crashed at startup

- Port upstream v1.18.10's `build.ts` change: embed `@opentui/core/parser.worker`
  as a virtual file (`opentui-tree-sitter-worker.js`) instead of a realpath
  entrypoint. The 0.4.5 loader's path normalization received `undefined` under
  the old embedding, killing every compiled binary at TUI startup
  ("undefined is not an object (evaluating 'loadedPath.startsWith')").
  Caught by the real-binary pty smoke test; code gates were all green.
- Regenerate CLI help snapshots for the new upstream flag layout (fork flags
  `--yolo` etc. verified intact).

Verified: rebuilt binary boots the TUI clean in an isolated sandbox (brand
title + live render, no errors); upgrade-path boot against a copy of the real
1,194-session DB preserves all data with a stable migration journal across
3 boots; permission ask→reply→resolve regression suite 143/143.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ning, phase manifest

- `cli/cmd/run.ts`: restore two upstream v1.18.10 behaviors dropped in the merge
  (attach + local-directory rejection before prompt admission; `--format json`
  emits a JSON error record for unknown-model failures instead of bare stderr).
- `provider/error.ts`: port one missing context-overflow classifier pattern from
  upstream's `isContextOverflow`.
- `session-status-event.ts` (schema): add the fork's AI-7519 `session.phase`
  event to the manifest — the v2 SSE handler encodes against the manifest union
  and drops unknown types.
- `run-process.test.ts`: serialize (cliIt.live) — 12+ concurrent `bun run src`
  cold-boots contend for CPU post-merge, rotating failures under load (each test
  passes in isolation); matches the win32 sequential precedent. 3/3 deterministic.
- `snapshot-tool-race.test.ts`: fix the mocked bash call (missing required
  `description` arg failed schema validation, masking the guarded scenario) and
  keep the file-created assertion.
- `message-v2.test.ts`: assert the adopted per-attachment media hoisting shape
  and align overflow-error identity with the fork's error classes.

KNOWN ISSUE (documented, follow-up): the AI-7519 phase LABEL ("Discovering
tools...") no longer renders in the TUI — the busy fallback ("Thinking...")
works, src publish wiring + TUI store handler are intact, but the event no
longer traverses publish→GlobalBus→RPC→sync store. The dev-only, CI-skipped
e2e (phase-label.tui-e2e.test.ts) stays red locally as the honest signal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, guard updates

- `tool/task.ts`: restore the fork's caller-permission filter on the subagent
  list (denied `task` subagent types are hidden from the tool description) —
  the resolution had dropped it with an incorrect "can't thread caller ctx"
  note; the restored `Tool.InitContext` threading supports it via the
  ctx-function Init shape.
- `tool/registry.ts`: port upstream v1.18.10's code-mode registry wiring —
  flag-gated lazy `execute` tool registration, per-call MCP catalog
  description (`describeCatalog`), drop-when-no-visible-MCP-tools gate.
  Catalog resolves through the injected `MCP.Service` (honors mocked layers);
  `MCP.node` added to the registry node deps.
- `test/altimate/tool-fixture.ts`: stub the services TaskTool's init now
  yields (BackgroundJob/Config/Session/RuntimeFlags).
- Guard updates for adopted architecture: manifest count 88→89 (fork
  `session.phase` addition), upgradeCurl body regex, OauthCallbackPage
  delegation in bridge-merge-e2e, `configured`-list assertion in
  upi-provider.

Verified: test/tool 553/553; task/registry/code-mode/parameters green;
pty-session 3/3 isolated (in-suite failures are load contention); typecheck 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

@github-actions

Copy link
Copy Markdown

This PR doesn't fully meet our contributing guidelines and PR template.

What needs to be fixed:

  • PR description is missing required template sections. Please use the PR template.

Please edit this PR description to address the above within 2 hours, or it will be automatically closed.

If you believe this was flagged incorrectly, please let a maintainer know.

@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 1008 files, which is 858 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5c7535cf-889d-4be5-a9ea-8610a5ad2072

📥 Commits

Reviewing files that changed from the base of the PR and between 28caf71 and 2a7b44b.

⛔ Files ignored due to path filters (21)
  • artifacts/glm52-rise-video/bun.lock is excluded by !**/*.lock
  • artifacts/glm52-rise-video/out/flash-share.mp4 is excluded by !**/*.mp4
  • artifacts/glm52-rise-video/out/glm-52-broke-out.mp4 is excluded by !**/*.mp4
  • artifacts/glm52-rise-video/out/june-totals.png is excluded by !**/*.png
  • artifacts/glm52-rise-video/out/minimax-climb.mp4 is excluded by !**/*.mp4
  • artifacts/glm52-rise-video/out/novel-1984.mp4 is excluded by !**/*.mp4
  • artifacts/glm52-rise-video/out/nz-sheep.mp4 is excluded by !**/*.mp4
  • artifacts/glm52-rise-video/public/book.jpg is excluded by !**/*.jpg
  • artifacts/glm52-rise-video/public/sheep.jpg is excluded by !**/*.jpg
  • bun.lock is excluded by !**/*.lock
  • packages/opencode/test/cli/help/__snapshots__/help-snapshots.test.ts.snap is excluded by !**/*.snap
  • packages/opencode/test/tool/__snapshots__/parameters.test.ts.snap is excluded by !**/*.snap
  • packages/sdk/js/src/gen/types.gen.ts is excluded by !**/gen/**
  • packages/sdk/js/src/v2/gen/sdk.gen.ts is excluded by !**/gen/**
  • packages/sdk/js/src/v2/gen/types.gen.ts is excluded by !**/gen/**
  • packages/tui/src/assets/fonts/Inter.ttf is excluded by !**/*.ttf
  • packages/tui/src/assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 is excluded by !**/*.woff2
  • packages/tui/test/cli/tui/__snapshots__/inline-tool-wrap-snapshot.test.tsx.snap is excluded by !**/*.snap
  • packages/util/src/assets/help/home.png is excluded by !**/*.png
  • packages/util/src/assets/help/placeholder.png is excluded by !**/*.png
  • packages/util/src/assets/help/tabs.png is excluded by !**/*.png
📒 Files selected for processing (1008)
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/TEAM_MEMBERS
  • .github/actions/setup-bun/action.yml
  • .github/meta/merge-report-v1.18.10.json
  • .github/workflows/ci.yml
  • .opencode/command/issues.md
  • .opencode/command/translate.md
  • .opencode/opencode.jsonc
  • .opencode/plugins/smoke-theme.json
  • .opencode/tui.json
  • .prettierignore
  • CONTEXT.md
  • artifacts/glm52-rise-video/.gitignore
  • artifacts/glm52-rise-video/package.json
  • artifacts/glm52-rise-video/src/data.ts
  • artifacts/glm52-rise-video/src/flash.tsx
  • artifacts/glm52-rise-video/src/index.tsx
  • artifacts/glm52-rise-video/src/june.tsx
  • artifacts/glm52-rise-video/src/minimax.tsx
  • artifacts/glm52-rise-video/src/novel.tsx
  • artifacts/glm52-rise-video/src/sheep.tsx
  • artifacts/glm52-rise-video/src/video.tsx
  • artifacts/glm52-rise-video/sst-env.d.ts
  • package.json
  • packages/cli/package.json
  • packages/cli/script/build.ts
  • packages/cli/script/generate.ts
  • packages/cli/script/publish.ts
  • packages/cli/src/commands/commands.ts
  • packages/cli/src/commands/handlers/api.test.ts
  • packages/cli/src/commands/handlers/api.ts
  • packages/cli/src/commands/handlers/serve.ts
  • packages/cli/src/index.ts
  • packages/cli/src/services/daemon.ts
  • packages/cli/src/tui.ts
  • packages/codemode/AGENTS.md
  • packages/codemode/README.md
  • packages/codemode/codemode.md
  • packages/codemode/package.json
  • packages/codemode/src/codemode.ts
  • packages/codemode/src/index.ts
  • packages/codemode/src/interpreter/model.ts
  • packages/codemode/src/interpreter/runtime.ts
  • packages/codemode/src/openapi/TODO.md
  • packages/codemode/src/openapi/index.ts
  • packages/codemode/src/openapi/runtime.ts
  • packages/codemode/src/openapi/spec.ts
  • packages/codemode/src/openapi/types.ts
  • packages/codemode/src/stdlib/collections.ts
  • packages/codemode/src/stdlib/console.ts
  • packages/codemode/src/stdlib/date.ts
  • packages/codemode/src/stdlib/json.ts
  • packages/codemode/src/stdlib/math.ts
  • packages/codemode/src/stdlib/number.ts
  • packages/codemode/src/stdlib/object.ts
  • packages/codemode/src/stdlib/promise.ts
  • packages/codemode/src/stdlib/regexp.ts
  • packages/codemode/src/stdlib/string.ts
  • packages/codemode/src/stdlib/url.ts
  • packages/codemode/src/stdlib/value.ts
  • packages/codemode/src/tool-error.ts
  • packages/codemode/src/tool-runtime.ts
  • packages/codemode/src/tool-schema.ts
  • packages/codemode/src/tool.ts
  • packages/codemode/src/values.ts
  • packages/codemode/sst-env.d.ts
  • packages/codemode/test/codemode.test.ts
  • packages/codemode/test/enumeration.test.ts
  • packages/codemode/test/fixtures/openapi-happy-path.json
  • packages/codemode/test/fixtures/opencode-v2-openapi.json
  • packages/codemode/test/openapi.test.ts
  • packages/codemode/test/parity.test.ts
  • packages/codemode/test/promise.test.ts
  • packages/codemode/test/signature.test.ts
  • packages/codemode/test/stdlib.test.ts
  • packages/codemode/tsconfig.json
  • packages/core/bunfig.toml
  • packages/core/package.json
  • packages/core/schema.json
  • packages/core/script/migration.ts
  • packages/core/src/account.ts
  • packages/core/src/agent.ts
  • packages/core/src/aisdk.ts
  • packages/core/src/background-job.ts
  • packages/core/src/catalog.ts
  • packages/core/src/command.ts
  • packages/core/src/config.ts
  • packages/core/src/config/agent.ts
  • packages/core/src/config/mcp.ts
  • packages/core/src/config/plugin/agent.ts
  • packages/core/src/config/plugin/command.ts
  • packages/core/src/config/plugin/external.ts
  • packages/core/src/config/plugin/provider.ts
  • packages/core/src/config/plugin/reference.ts
  • packages/core/src/config/plugin/skill.ts
  • packages/core/src/control-plane/move-session.ts
  • packages/core/src/credential.ts
  • packages/core/src/credential/sql.ts
  • packages/core/src/cross-spawn-spawner.ts
  • packages/core/src/database/database.ts
  • packages/core/src/database/migration.gen.ts
  • packages/core/src/database/migration.ts
  • packages/core/src/database/migration/20260622142730_simplify_session_context_epoch.ts
  • packages/core/src/database/migration/20260622170816_reset_v2_session_state.ts
  • packages/core/src/database/migration/20260622202450_simplify_session_input.ts
  • packages/core/src/database/schema.gen.ts
  • packages/core/src/effect/app-node-builder.ts
  • packages/core/src/effect/app-node-platform.ts
  • packages/core/src/effect/app-node.ts
  • packages/core/src/effect/layer-node-platform.ts
  • packages/core/src/effect/layer-node.ts
  • packages/core/src/event.ts
  • packages/core/src/file-mutation.ts
  • packages/core/src/file.ts
  • packages/core/src/filesystem.ts
  • packages/core/src/filesystem/schema.ts
  • packages/core/src/filesystem/search.ts
  • packages/core/src/filesystem/watcher.ts
  • packages/core/src/fs-util.ts
  • packages/core/src/git.ts
  • packages/core/src/github-copilot/responses/convert-to-openai-responses-input.ts
  • packages/core/src/github-copilot/responses/openai-responses-language-model.ts
  • packages/core/src/global.ts
  • packages/core/src/id/id.ts
  • packages/core/src/image.ts
  • packages/core/src/instruction-context.ts
  • packages/core/src/integration.ts
  • packages/core/src/integration/connection.ts
  • packages/core/src/integration/schema.ts
  • packages/core/src/location-layer.ts
  • packages/core/src/location-mutation.ts
  • packages/core/src/location-service-map.ts
  • packages/core/src/location-services.ts
  • packages/core/src/location.ts
  • packages/core/src/model-request.ts
  • packages/core/src/model.ts
  • packages/core/src/models-dev.ts
  • packages/core/src/npm.ts
  • packages/core/src/oauth/page.ts
  • packages/core/src/observability.ts
  • packages/core/src/permission.ts
  • packages/core/src/permission/saved.ts
  • packages/core/src/permission/schema.ts
  • packages/core/src/plugin.ts
  • packages/core/src/plugin/agent.ts
  • packages/core/src/plugin/boot.ts
  • packages/core/src/plugin/command.ts
  • packages/core/src/plugin/host.ts
  • packages/core/src/plugin/internal.ts
  • packages/core/src/plugin/models-dev.ts
  • packages/core/src/plugin/promise.ts
  • packages/core/src/plugin/provider.ts
  • packages/core/src/plugin/provider/alibaba.ts
  • packages/core/src/plugin/provider/amazon-bedrock.ts
  • packages/core/src/plugin/provider/anthropic.ts
  • packages/core/src/plugin/provider/azure.ts
  • packages/core/src/plugin/provider/cerebras.ts
  • packages/core/src/plugin/provider/cloudflare-ai-gateway.ts
  • packages/core/src/plugin/provider/cloudflare-workers-ai.ts
  • packages/core/src/plugin/provider/cohere.ts
  • packages/core/src/plugin/provider/deepinfra.ts
  • packages/core/src/plugin/provider/dynamic.ts
  • packages/core/src/plugin/provider/gateway.ts
  • packages/core/src/plugin/provider/github-copilot.ts
  • packages/core/src/plugin/provider/gitlab.ts
  • packages/core/src/plugin/provider/google-vertex.ts
  • packages/core/src/plugin/provider/google.ts
  • packages/core/src/plugin/provider/groq.ts
  • packages/core/src/plugin/provider/kilo.ts
  • packages/core/src/plugin/provider/llmgateway.ts
  • packages/core/src/plugin/provider/mistral.ts
  • packages/core/src/plugin/provider/nvidia.ts
  • packages/core/src/plugin/provider/openai-auth.ts
  • packages/core/src/plugin/provider/openai-compatible.ts
  • packages/core/src/plugin/provider/openai.ts
  • packages/core/src/plugin/provider/opencode.ts
  • packages/core/src/plugin/provider/openrouter.ts
  • packages/core/src/plugin/provider/perplexity.ts
  • packages/core/src/plugin/provider/sap-ai-core.ts
  • packages/core/src/plugin/provider/snowflake-cortex.ts
  • packages/core/src/plugin/provider/togetherai.ts
  • packages/core/src/plugin/provider/venice.ts
  • packages/core/src/plugin/provider/vercel.ts
  • packages/core/src/plugin/provider/xai.ts
  • packages/core/src/plugin/provider/zenmux.ts
  • packages/core/src/plugin/skill.ts
  • packages/core/src/plugin/skill/customize-opencode.md
  • packages/core/src/plugin/variant.ts
  • packages/core/src/policy.ts
  • packages/core/src/process.ts
  • packages/core/src/project.ts
  • packages/core/src/project/copy-strategies.ts
  • packages/core/src/project/copy.ts
  • packages/core/src/project/directories.ts
  • packages/core/src/project/schema.ts
  • packages/core/src/provider.ts
  • packages/core/src/pty.ts
  • packages/core/src/pty/pty.node.ts
  • packages/core/src/pty/schema.ts
  • packages/core/src/pty/ticket.ts
  • packages/core/src/public-event-manifest.ts
  • packages/core/src/public/opencode.ts
  • packages/core/src/public/session.ts
  • packages/core/src/question.ts
  • packages/core/src/reference.ts
  • packages/core/src/reference/guidance.ts
  • packages/core/src/repository-cache.ts
  • packages/core/src/repository.ts
  • packages/core/src/ripgrep.ts
  • packages/core/src/ripgrep/binary.ts
  • packages/core/src/schema.ts
  • packages/core/src/session.ts
  • packages/core/src/session/compaction.ts
  • packages/core/src/session/context-epoch.ts
  • packages/core/src/session/error.ts
  • packages/core/src/session/event.ts
  • packages/core/src/session/execution.ts
  • packages/core/src/session/execution/local.ts
  • packages/core/src/session/history.ts
  • packages/core/src/session/info.ts
  • packages/core/src/session/input.ts
  • packages/core/src/session/logging.ts
  • packages/core/src/session/message-id.ts
  • packages/core/src/session/message-updater.ts
  • packages/core/src/session/message.ts
  • packages/core/src/session/projector.ts
  • packages/core/src/session/prompt.ts
  • packages/core/src/session/revert.ts
  • packages/core/src/session/run-coordinator.ts
  • packages/core/src/session/runner/index.ts
  • packages/core/src/session/runner/llm.ts
  • packages/core/src/session/runner/model.ts
  • packages/core/src/session/runner/publish-llm-event.ts
  • packages/core/src/session/runner/to-llm-message.ts
  • packages/core/src/session/schema.ts
  • packages/core/src/session/sql.ts
  • packages/core/src/session/store.ts
  • packages/core/src/session/todo.ts
  • packages/core/src/skill.ts
  • packages/core/src/skill/discovery.ts
  • packages/core/src/skill/guidance.ts
  • packages/core/src/snapshot.ts
  • packages/core/src/state.ts
  • packages/core/src/system-context/builtins.ts
  • packages/core/src/system-context/index.ts
  • packages/core/src/system-context/registry.ts
  • packages/core/src/tool-output-store.ts
  • packages/core/src/tool/application-tools.ts
  • packages/core/src/tool/apply-patch.ts
  • packages/core/src/tool/bash.ts
  • packages/core/src/tool/builtins.ts
  • packages/core/src/tool/edit.ts
  • packages/core/src/tool/glob.ts
  • packages/core/src/tool/grep.ts
  • packages/core/src/tool/http-body.ts
  • packages/core/src/tool/question.ts
  • packages/core/src/tool/read-filesystem.ts
  • packages/core/src/tool/read.ts
  • packages/core/src/tool/registry.ts
  • packages/core/src/tool/skill.ts
  • packages/core/src/tool/todowrite.ts
  • packages/core/src/tool/tool.ts
  • packages/core/src/tool/webfetch.ts
  • packages/core/src/tool/websearch.ts
  • packages/core/src/tool/write.ts
  • packages/core/src/util/effect-flock.ts
  • packages/core/src/util/identifier.ts
  • packages/core/src/v1/config/config.ts
  • packages/core/src/v1/config/migrate.ts
  • packages/core/src/v1/config/provider-options.ts
  • packages/core/src/v1/permission.ts
  • packages/core/src/v1/session.ts
  • packages/core/src/v2-schema.ts
  • packages/core/src/workspace.ts
  • packages/core/test/agent.test.ts
  • packages/core/test/application-tools.test.ts
  • packages/core/test/background-job.test.ts
  • packages/core/test/catalog.test.ts
  • packages/core/test/command.test.ts
  • packages/core/test/config/agent.test.ts
  • packages/core/test/config/command.test.ts
  • packages/core/test/config/config.test.ts
  • packages/core/test/config/fixtures/plugin/directory-plugin.ts
  • packages/core/test/config/plugin.test.ts
  • packages/core/test/config/provider-options.test.ts
  • packages/core/test/config/provider.test.ts
  • packages/core/test/config/skill.test.ts
  • packages/core/test/credential.test.ts
  • packages/core/test/database-migration.test.ts
  • packages/core/test/effect/cross-spawn-spawner.test.ts
  • packages/core/test/effect/layer-node/layer-node-types.test.ts
  • packages/core/test/effect/layer-node/layer-node.test.ts
  • packages/core/test/effect/layer-node/node-build.test.ts
  • packages/core/test/event.test.ts
  • packages/core/test/file-mutation.test.ts
  • packages/core/test/filesystem/filesystem.test.ts
  • packages/core/test/filesystem/search.test.ts
  • packages/core/test/filesystem/watcher.test.ts
  • packages/core/test/fixture/effect-flock-worker.ts
  • packages/core/test/fixture/location.ts
  • packages/core/test/git.test.ts
  • packages/core/test/github-copilot/openai-responses-language-model.test.ts
  • packages/core/test/global.test.ts
  • packages/core/test/instruction-context.test.ts
  • packages/core/test/integration.test.ts
  • packages/core/test/legacy-event-schema.test.ts
  • packages/core/test/location-filesystem.test.ts
  • packages/core/test/location-layer.test.ts
  • packages/core/test/location-mutation.test.ts
  • packages/core/test/location.test.ts
  • packages/core/test/model-request.test.ts
  • packages/core/test/models.test.ts
  • packages/core/test/move-session.test.ts
  • packages/core/test/npm.test.ts
  • packages/core/test/oauth-page.test.ts
  • packages/core/test/permission.test.ts
  • packages/core/test/plugin.test.ts
  • packages/core/test/plugin/command.test.ts
  • packages/core/test/plugin/fixture.ts
  • packages/core/test/plugin/fixtures/config-effect-plugin.ts
  • packages/core/test/plugin/fixtures/config-promise-plugin.ts
  • packages/core/test/plugin/fixtures/invalid-plugin.ts
  • packages/core/test/plugin/host.ts
  • packages/core/test/plugin/models-dev.test.ts
  • packages/core/test/plugin/promise.test.ts
  • packages/core/test/plugin/provider-alibaba.test.ts
  • packages/core/test/plugin/provider-amazon-bedrock.test.ts
  • packages/core/test/plugin/provider-anthropic.test.ts
  • packages/core/test/plugin/provider-azure-cognitive-services.test.ts
  • packages/core/test/plugin/provider-azure.test.ts
  • packages/core/test/plugin/provider-cerebras.test.ts
  • packages/core/test/plugin/provider-cloudflare-ai-gateway.test.ts
  • packages/core/test/plugin/provider-cloudflare-workers-ai.test.ts
  • packages/core/test/plugin/provider-cohere.test.ts
  • packages/core/test/plugin/provider-deepinfra.test.ts
  • packages/core/test/plugin/provider-dynamic.test.ts
  • packages/core/test/plugin/provider-gateway.test.ts
  • packages/core/test/plugin/provider-github-copilot.test.ts
  • packages/core/test/plugin/provider-gitlab.test.ts
  • packages/core/test/plugin/provider-google-vertex-anthropic.test.ts
  • packages/core/test/plugin/provider-google-vertex.test.ts
  • packages/core/test/plugin/provider-google.test.ts
  • packages/core/test/plugin/provider-groq.test.ts
  • packages/core/test/plugin/provider-helper.ts
  • packages/core/test/plugin/provider-kilo.test.ts
  • packages/core/test/plugin/provider-llmgateway.test.ts
  • packages/core/test/plugin/provider-mistral.test.ts
  • packages/core/test/plugin/provider-nvidia.test.ts
  • packages/core/test/plugin/provider-openai-compatible.test.ts
  • packages/core/test/plugin/provider-openai.test.ts
  • packages/core/test/plugin/provider-opencode.test.ts
  • packages/core/test/plugin/provider-openrouter.test.ts
  • packages/core/test/plugin/provider-perplexity.test.ts
  • packages/core/test/plugin/provider-sap-ai-core.test.ts
  • packages/core/test/plugin/provider-snowflake-cortex.test.ts
  • packages/core/test/plugin/provider-togetherai.test.ts
  • packages/core/test/plugin/provider-venice.test.ts
  • packages/core/test/plugin/provider-vercel.test.ts
  • packages/core/test/plugin/provider-xai.test.ts
  • packages/core/test/plugin/provider-zenmux.test.ts
  • packages/core/test/plugin/skill.test.ts
  • packages/core/test/plugin/variant.test.ts
  • packages/core/test/policy.test.ts
  • packages/core/test/preload.ts
  • packages/core/test/process/process.test.ts
  • packages/core/test/project-copy.test.ts
  • packages/core/test/project-directories.test.ts
  • packages/core/test/project.test.ts
  • packages/core/test/provider-mistral.test.ts
  • packages/core/test/provider-xai-responses.test.ts
  • packages/core/test/pty/pty-session.test.ts
  • packages/core/test/pty/ticket.test.ts
  • packages/core/test/public-opencode.test.ts
  • packages/core/test/question.test.ts
  • packages/core/test/reference-guidance.test.ts
  • packages/core/test/reference.test.ts
  • packages/core/test/repository-cache.test.ts
  • packages/core/test/repository.test.ts
  • packages/core/test/ripgrep.test.ts
  • packages/core/test/session-compaction.test.ts
  • packages/core/test/session-create.test.ts
  • packages/core/test/session-history.test.ts
  • packages/core/test/session-logging.test.ts
  • packages/core/test/session-projector.test.ts
  • packages/core/test/session-prompt.test.ts
  • packages/core/test/session-run-coordinator.test.ts
  • packages/core/test/session-runner-message.test.ts
  • packages/core/test/session-runner-model.test.ts
  • packages/core/test/session-runner-recorded.test.ts
  • packages/core/test/session-runner-tool-events.test.ts
  • packages/core/test/session-runner-tool-registry.test.ts
  • packages/core/test/session-runner.test.ts
  • packages/core/test/session-todo.test.ts
  • packages/core/test/session-tool-progress.test.ts
  • packages/core/test/shared-schema.test.ts
  • packages/core/test/skill-discovery.test.ts
  • packages/core/test/skill.test.ts
  • packages/core/test/skill/guidance.test.ts
  • packages/core/test/snapshot.test.ts
  • packages/core/test/state.test.ts
  • packages/core/test/system-context/builtins.test.ts
  • packages/core/test/system-context/registry.test.ts
  • packages/core/test/tool-apply-patch.test.ts
  • packages/core/test/tool-bash.test.ts
  • packages/core/test/tool-edit.test.ts
  • packages/core/test/tool-grep-glob-containment.test.ts
  • packages/core/test/tool-output-store.test.ts
  • packages/core/test/tool-question.test.ts
  • packages/core/test/tool-read-filesystem.test.ts
  • packages/core/test/tool-read.test.ts
  • packages/core/test/tool-skill.test.ts
  • packages/core/test/tool-todowrite.test.ts
  • packages/core/test/tool-webfetch.test.ts
  • packages/core/test/tool-websearch.test.ts
  • packages/core/test/tool-write.test.ts
  • packages/core/test/util/effect-flock.test.ts
  • packages/effect-drizzle-sqlite/examples/basic.ts
  • packages/effect-drizzle-sqlite/package.json
  • packages/effect-sqlite-node/package.json
  • packages/http-recorder/package.json
  • packages/llm/DESIGN.md
  • packages/llm/example/tutorial.ts
  • packages/llm/package.json
  • packages/llm/script/recording-cost-report.ts
  • packages/llm/src/protocols/anthropic-messages.ts
  • packages/llm/src/protocols/bedrock-converse.ts
  • packages/llm/src/protocols/gemini.ts
  • packages/llm/src/protocols/openai-chat.ts
  • packages/llm/src/protocols/openai-responses.ts
  • packages/llm/src/protocols/shared.ts
  • packages/llm/src/protocols/utils/gemini-tool-schema.ts
  • packages/llm/src/protocols/utils/tool-schema.ts
  • packages/llm/src/provider-error.ts
  • packages/llm/src/provider.ts
  • packages/llm/src/providers/github-copilot.ts
  • packages/llm/src/route/client.ts
  • packages/llm/src/route/executor.ts
  • packages/llm/src/route/transport/http.ts
  • packages/llm/src/schema/errors.ts
  • packages/llm/src/schema/events.ts
  • packages/llm/src/schema/ids.ts
  • packages/llm/src/schema/messages.ts
  • packages/llm/src/schema/options.ts
  • packages/llm/test/adapter.test.ts
  • packages/llm/test/exports.test.ts
  • packages/llm/test/fixtures/recordings/gemini-cache/reports-cachedcontenttokencount-on-identical-second-call.json
  • packages/llm/test/fixtures/recordings/openai-responses/gpt-5-5-drives-a-tool-loop.json
  • packages/llm/test/fixtures/recordings/openai-responses/gpt-5-5-streams-tool-call.json
  • packages/llm/test/fixtures/recordings/openai-responses/openai-responses-gpt-5-5-image-tool-result.json
  • packages/llm/test/fixtures/recordings/openai-responses/openai-responses-gpt-5-5-reasoning-continuation.json
  • packages/llm/test/llm.test.ts
  • packages/llm/test/prepare.test.ts
  • packages/llm/test/provider-error.test.ts
  • packages/llm/test/provider/anthropic-messages.test.ts
  • packages/llm/test/provider/gemini.test.ts
  • packages/llm/test/provider/openai-chat.test.ts
  • packages/llm/test/provider/openai-responses.test.ts
  • packages/llm/test/response.test.ts
  • packages/llm/test/tool-runtime.test.ts
  • packages/llm/test/tool-schema-projection.test.ts
  • packages/opencode/package.json
  • packages/opencode/script/build.ts
  • packages/opencode/specs/tui-plugins.md
  • packages/opencode/src/account/account.ts
  • packages/opencode/src/account/repo.ts
  • packages/opencode/src/account/schema.ts
  • packages/opencode/src/acp/content.ts
  • packages/opencode/src/acp/directory.ts
  • packages/opencode/src/acp/error.ts
  • packages/opencode/src/acp/permission.ts
  • packages/opencode/src/acp/service.ts
  • packages/opencode/src/acp/session.ts
  • packages/opencode/src/acp/tool.ts
  • packages/opencode/src/acp/usage.ts
  • packages/opencode/src/agent/agent.ts
  • packages/opencode/src/auth/index.ts
  • packages/opencode/src/auth/service.ts
  • packages/opencode/src/background/job.ts
  • packages/opencode/src/cli/cmd/attach.ts
  • packages/opencode/src/cli/cmd/cmd.ts
  • packages/opencode/src/cli/cmd/debug/file.ts
  • packages/opencode/src/cli/cmd/debug/scrap.ts
  • packages/opencode/src/cli/cmd/debug/v2.ts
  • packages/opencode/src/cli/cmd/import.ts
  • packages/opencode/src/cli/cmd/mcp.ts
  • packages/opencode/src/cli/cmd/run.ts
  • packages/opencode/src/cli/cmd/run/footer.command.tsx
  • packages/opencode/src/cli/cmd/run/footer.subagent.tsx
  • packages/opencode/src/cli/cmd/run/footer.view.tsx
  • packages/opencode/src/cli/cmd/run/runtime.stdin.ts
  • packages/opencode/src/cli/cmd/run/runtime.ts
  • packages/opencode/src/cli/cmd/run/splash.ts
  • packages/opencode/src/cli/cmd/run/tool.ts
  • packages/opencode/src/cli/cmd/run/types.ts
  • packages/opencode/src/cli/cmd/run/variant.shared.ts
  • packages/opencode/src/cli/cmd/tui.ts
  • packages/opencode/src/cli/network.ts
  • packages/opencode/src/cli/tui/layer.ts
  • packages/opencode/src/cli/tui/worker.ts
  • packages/opencode/src/command/index.ts
  • packages/opencode/src/config/config.ts
  • packages/opencode/src/config/tui-migrate.ts
  • packages/opencode/src/config/tui.ts
  • packages/opencode/src/control-plane/workspace.ts
  • packages/opencode/src/effect/app-node-builder-v1.ts
  • packages/opencode/src/effect/app-runtime.ts
  • packages/opencode/src/effect/bootstrap-runtime.ts
  • packages/opencode/src/effect/config-service.ts
  • packages/opencode/src/effect/runtime-flags.ts
  • packages/opencode/src/env/index.ts
  • packages/opencode/src/event-manifest.ts
  • packages/opencode/src/event-v2-bridge.ts
  • packages/opencode/src/format/index.ts
  • packages/opencode/src/git/index.ts
  • packages/opencode/src/ide/index.ts
  • packages/opencode/src/image/image.ts
  • packages/opencode/src/installation/index.ts
  • packages/opencode/src/lsp/client.ts
  • packages/opencode/src/lsp/lsp.ts
  • packages/opencode/src/mcp/auth.ts
  • packages/opencode/src/mcp/browser.ts
  • packages/opencode/src/mcp/catalog.ts
  • packages/opencode/src/mcp/discover.ts
  • packages/opencode/src/mcp/index.ts
  • packages/opencode/src/mcp/oauth-callback.ts
  • packages/opencode/src/mcp/oauth-provider.ts
  • packages/opencode/src/permission/index.ts
  • packages/opencode/src/permission/schema.ts
  • packages/opencode/src/plugin/digitalocean.ts
  • packages/opencode/src/plugin/github-copilot/models.ts
  • packages/opencode/src/plugin/index.ts
  • packages/opencode/src/plugin/modal/modal.ts
  • packages/opencode/src/plugin/modal/models.ts
  • packages/opencode/src/plugin/openai/codex.ts
  • packages/opencode/src/plugin/snowflake-cortex.ts
  • packages/opencode/src/plugin/tui/runtime.ts
  • packages/opencode/src/plugin/xai.ts
  • packages/opencode/src/project/bootstrap.ts
  • packages/opencode/src/project/instance-layer.ts
  • packages/opencode/src/project/instance-store.ts
  • packages/opencode/src/project/project.ts
  • packages/opencode/src/project/vcs.ts
  • packages/opencode/src/provider/auth.ts
  • packages/opencode/src/provider/error.ts
  • packages/opencode/src/provider/models.ts
  • packages/opencode/src/provider/provider.ts
  • packages/opencode/src/provider/transform.ts
  • packages/opencode/src/question/index.ts
  • packages/opencode/src/question/schema.ts
  • packages/opencode/src/server/event.ts
  • packages/opencode/src/server/routes/instance/httpapi/api.ts
  • packages/opencode/src/server/routes/instance/httpapi/groups/global.ts
  • packages/opencode/src/server/routes/instance/httpapi/handlers/experimental.ts
  • packages/opencode/src/server/routes/instance/httpapi/handlers/file.ts
  • packages/opencode/src/server/routes/instance/httpapi/handlers/pty.ts
  • packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts
  • packages/opencode/src/server/routes/instance/httpapi/public.ts
  • packages/opencode/src/server/routes/instance/httpapi/server.ts
  • packages/opencode/src/server/routes/instance/httpapi/websocket-tracker.ts
  • packages/opencode/src/server/routes/tui.ts
  • packages/opencode/src/server/tui-event.ts
  • packages/opencode/src/session/compaction.ts
  • packages/opencode/src/session/index.ts
  • packages/opencode/src/session/instruction.ts
  • packages/opencode/src/session/llm.ts
  • packages/opencode/src/session/llm/request.ts
  • packages/opencode/src/session/message-v2.ts
  • packages/opencode/src/session/processor.ts
  • packages/opencode/src/session/prompt.ts
  • packages/opencode/src/session/prompt/meta.txt
  • packages/opencode/src/session/revert.ts
  • packages/opencode/src/session/run-state.ts
  • packages/opencode/src/session/session.ts
  • packages/opencode/src/session/status.ts
  • packages/opencode/src/session/summary.ts
  • packages/opencode/src/session/system.ts
  • packages/opencode/src/session/todo.ts
  • packages/opencode/src/session/tools.ts
  • packages/opencode/src/share/session.ts
  • packages/opencode/src/share/share-next.ts
  • packages/opencode/src/skill/discovery.ts
  • packages/opencode/src/skill/index.ts
  • packages/opencode/src/snapshot/index.ts
  • packages/opencode/src/storage/storage.ts
  • packages/opencode/src/sync/schema.ts
  • packages/opencode/src/tool/code-mode.ts
  • packages/opencode/src/tool/grep.ts
  • packages/opencode/src/tool/registry.ts
  • packages/opencode/src/tool/schema.ts
  • packages/opencode/src/tool/shell.ts
  • packages/opencode/src/tool/shell/prompt.ts
  • packages/opencode/src/tool/task.ts
  • packages/opencode/src/tool/todo.ts
  • packages/opencode/src/tool/truncate.ts
  • packages/opencode/src/worktree/index.ts
  • packages/opencode/test/account/repo.test.ts
  • packages/opencode/test/account/service.test.ts
  • packages/opencode/test/acp/content.test.ts
  • packages/opencode/test/acp/directory.test.ts
  • packages/opencode/test/acp/event.test.ts
  • packages/opencode/test/acp/permission.test.ts
  • packages/opencode/test/acp/service-session.test.ts
  • packages/opencode/test/acp/session.test.ts
  • packages/opencode/test/acp/tool.test.ts
  • packages/opencode/test/acp/usage.test.ts
  • packages/opencode/test/agent/agent.test.ts
  • packages/opencode/test/agent/plan-mode-subagent-bypass.test.ts
  • packages/opencode/test/agent/plugin-agent-regression.test.ts
  • packages/opencode/test/altimate/carry-forward/agent-safety.test.ts
  • packages/opencode/test/altimate/tool-fixture.ts
  • packages/opencode/test/auth/auth.test.ts
  • packages/opencode/test/background/job.test.ts
  • packages/opencode/test/branding/build-integrity.test.ts
  • packages/opencode/test/branding/upstream-merge-guard.test.ts
  • packages/opencode/test/cli/account.test.ts
  • packages/opencode/test/cli/effect-cmd-instance-als.test.ts
  • packages/opencode/test/cli/error.test.ts
  • packages/opencode/test/cli/help/help-snapshots.test.ts
  • packages/opencode/test/cli/import.test.ts
  • packages/opencode/test/cli/run/footer.view.test.tsx
  • packages/opencode/test/cli/run/permission.shared.test.ts
  • packages/opencode/test/cli/run/run-process.test.ts
  • packages/opencode/test/cli/run/scrollback.surface.test.ts
  • packages/opencode/test/cli/run/session-data.test.ts
  • packages/opencode/test/cli/run/session-replay.test.ts
  • packages/opencode/test/cli/run/variant.shared.test.ts
  • packages/opencode/test/cli/tui/command.test.ts
  • packages/opencode/test/config/agent-color.test.ts
  • packages/opencode/test/config/config.test.ts
  • packages/opencode/test/config/tui.test.ts
  • packages/opencode/test/control-plane/workspace.test.ts
  • packages/opencode/test/effect/app-graph-types.test.ts
  • packages/opencode/test/effect/app-graph.test.ts
  • packages/opencode/test/effect/app-runtime-logger.test.ts
  • packages/opencode/test/effect/config-service.test.ts
  • packages/opencode/test/effect/instance-state.test.ts
  • packages/opencode/test/effect/runtime-flags.test.ts
  • packages/opencode/test/event-manifest.test.ts
  • packages/opencode/test/filesystem/filesystem.test.ts
  • packages/opencode/test/fixture/fixture.ts
  • packages/opencode/test/fixture/mcp-lifecycle-stdio.ts
  • packages/opencode/test/fixture/workspace.ts
  • packages/opencode/test/fixtures/recordings/session/native-openai-oauth-tool-loop.json
  • packages/opencode/test/fixtures/recordings/session/native-zen-tool-loop.json
  • packages/opencode/test/format/format.test.ts
  • packages/opencode/test/git/git.test.ts
  • packages/opencode/test/image/image.test.ts
  • packages/opencode/test/installation/installation.test.ts
  • packages/opencode/test/installation/upgrade.test.ts
  • packages/opencode/test/installation/version.test.ts
  • packages/opencode/test/lib/cli-process.ts
  • packages/opencode/test/lib/effect.ts
  • packages/opencode/test/lib/test-provider.ts
  • packages/opencode/test/lsp/index.test.ts
  • packages/opencode/test/lsp/lifecycle.test.ts
  • packages/opencode/test/mcp/auth.test.ts
  • packages/opencode/test/mcp/catalog.test.ts
  • packages/opencode/test/mcp/headers.test.ts
  • packages/opencode/test/mcp/lifecycle.test.ts
  • packages/opencode/test/mcp/mcp.test.ts
  • packages/opencode/test/mcp/oauth-auto-connect.test.ts
  • packages/opencode/test/mcp/oauth-browser.test.ts
  • packages/opencode/test/mcp/oauth-callback.test.ts
  • packages/opencode/test/mcp/oauth-provider.test.ts
  • packages/opencode/test/patch/patch.test.ts
  • packages/opencode/test/permission-task.test.ts
  • packages/opencode/test/permission/next.test.ts
  • packages/opencode/test/plugin/auth-override.test.ts
  • packages/opencode/test/plugin/codex.test.ts
  • packages/opencode/test/plugin/github-copilot-models.test.ts
  • packages/opencode/test/plugin/internal-providers.test.ts
  • packages/opencode/test/plugin/loader-shared.test.ts
  • packages/opencode/test/plugin/modal-models.test.ts
  • packages/opencode/test/plugin/openai-ws.test.ts
  • packages/opencode/test/plugin/trigger.test.ts
  • packages/opencode/test/plugin/workspace-adapter.test.ts
  • packages/opencode/test/project/instance-bootstrap.test.ts
  • packages/opencode/test/project/instance.test.ts
  • packages/opencode/test/project/migrate-global.test.ts
  • packages/opencode/test/project/project-directory.test.ts
  • packages/opencode/test/project/project.test.ts
  • packages/opencode/test/project/vcs.test.ts
  • packages/opencode/test/project/worktree-remove.test.ts
  • packages/opencode/test/project/worktree.test.ts
  • packages/opencode/test/provider/amazon-bedrock.test.ts
  • packages/opencode/test/provider/auth.test.ts
  • packages/opencode/test/provider/digitalocean.test.ts
  • packages/opencode/test/provider/gitlab-duo.test.ts
  • packages/opencode/test/provider/header-timeout.test.ts
  • packages/opencode/test/provider/provider.test.ts
  • packages/opencode/test/provider/transform.test.ts
  • packages/opencode/test/question/question.test.ts
  • packages/opencode/test/release-validation/windows-installer-930.test.ts
  • packages/opencode/test/server/global-session-list.test.ts
  • packages/opencode/test/server/httpapi-authorization.test.ts
  • packages/opencode/test/server/httpapi-control-plane.test.ts
  • packages/opencode/test/server/httpapi-cors.test.ts
  • packages/opencode/test/server/httpapi-exercise/index.ts
  • packages/opencode/test/server/httpapi-exercise/types.ts
  • packages/opencode/test/server/httpapi-experimental.test.ts
  • packages/opencode/test/server/httpapi-file.test.ts
  • packages/opencode/test/server/httpapi-global.test.ts
  • packages/opencode/test/server/httpapi-instance-context.test.ts
  • packages/opencode/test/server/httpapi-promptasync-context.test.ts
  • packages/opencode/test/server/httpapi-provider.test.ts
  • packages/opencode/test/server/httpapi-public-openapi.test.ts
  • packages/opencode/test/server/httpapi-query-schema-drift.test.ts
  • packages/opencode/test/server/httpapi-reference.test.ts
  • packages/opencode/test/server/httpapi-schema-error-body.test.ts
  • packages/opencode/test/server/httpapi-sdk.test.ts
  • packages/opencode/test/server/httpapi-session.test.ts
  • packages/opencode/test/server/httpapi-sync.test.ts
  • packages/opencode/test/server/httpapi-ui.test.ts
  • packages/opencode/test/server/httpapi-v2-location.test.ts
  • packages/opencode/test/server/httpapi-workspace-routing.test.ts
  • packages/opencode/test/server/httpapi-workspace.test.ts
  • packages/opencode/test/server/negative-tokens-regression.test.ts
  • packages/opencode/test/server/project-copy.test.ts
  • packages/opencode/test/server/project-init-git.test.ts
  • packages/opencode/test/server/session-actions.test.ts
  • packages/opencode/test/server/session-diff-missing-patch.test.ts
  • packages/opencode/test/server/session-list.test.ts
  • packages/opencode/test/server/session-messages.test.ts
  • packages/opencode/test/server/session-select.test.ts
  • packages/opencode/test/session/compaction.test.ts
  • packages/opencode/test/session/instruction.test.ts
  • packages/opencode/test/session/llm-native-recorded.test.ts
  • packages/opencode/test/session/llm-native.test.ts
  • packages/opencode/test/session/llm.test.ts
  • packages/opencode/test/session/message-v2.test.ts
  • packages/opencode/test/session/messages-pagination.test.ts
  • packages/opencode/test/session/processor-effect.test.ts
  • packages/opencode/test/session/prompt.test.ts
  • packages/opencode/test/session/revert-compact.test.ts
  • packages/opencode/test/session/schema-decoding.test.ts
  • packages/opencode/test/session/session-utils.test.ts
  • packages/opencode/test/session/session.test.ts
  • packages/opencode/test/session/snapshot-tool-race.test.ts
  • packages/opencode/test/session/structured-output-integration.test.ts
  • packages/opencode/test/session/summary.test.ts
  • packages/opencode/test/session/system.test.ts
  • packages/opencode/test/session/todo.test.ts
  • packages/opencode/test/share/share-next-error-handling.test.ts
  • packages/opencode/test/share/share-next.test.ts
  • packages/opencode/test/skill/discovery.test.ts
  • packages/opencode/test/skill/release-v0.7.2-adversarial.test.ts
  • packages/opencode/test/skill/skill.test.ts
  • packages/opencode/test/snapshot/snapshot.test.ts
  • packages/opencode/test/storage/storage.test.ts
  • packages/opencode/test/tool/apply_patch.test.ts
  • packages/opencode/test/tool/code-mode-integration.test.ts
  • packages/opencode/test/tool/code-mode.test.ts
  • packages/opencode/test/tool/edit.test.ts
  • packages/opencode/test/tool/external-directory.test.ts
  • packages/opencode/test/tool/fixtures/models-api.json
  • packages/opencode/test/tool/glob.test.ts
  • packages/opencode/test/tool/grep.test.ts
  • packages/opencode/test/tool/lsp.test.ts
  • packages/opencode/test/tool/parameters.test.ts
  • packages/opencode/test/tool/question.test.ts
  • packages/opencode/test/tool/read.test.ts
  • packages/opencode/test/tool/registry.test.ts
  • packages/opencode/test/tool/shell.test.ts
  • packages/opencode/test/tool/task.test.ts
  • packages/opencode/test/tool/tool-define.test.ts
  • packages/opencode/test/tool/truncation.test.ts
  • packages/opencode/test/tool/webfetch.test.ts
  • packages/opencode/test/tool/write.test.ts
  • packages/opencode/test/upstream/adversarial/upi-provider.test.ts
  • packages/opencode/test/upstream/adversarial/upi-runtime-session.test.ts
  • packages/opencode/test/upstream/altimate-features.test.ts
  • packages/opencode/test/upstream/bridge-merge-e2e.test.ts
  • packages/opencode/test/upstream/bridge-merge-invariants.test.ts
  • packages/opencode/test/upstream/bridge-merge-v3.test.ts
  • packages/opencode/test/upstream/v140-merge-chaos.test.ts
  • packages/plugin/package.json
  • packages/plugin/src/tui.ts
  • packages/plugin/src/v2/effect/PLAN.md
  • packages/plugin/src/v2/effect/README.md
  • packages/plugin/src/v2/effect/agent.ts
  • packages/plugin/src/v2/effect/aisdk.ts
  • packages/plugin/src/v2/effect/catalog.ts
  • packages/plugin/src/v2/effect/command.ts
  • packages/plugin/src/v2/effect/context.ts
  • packages/plugin/src/v2/effect/event.ts
  • packages/plugin/src/v2/effect/filesystem.ts
  • packages/plugin/src/v2/effect/index.ts
  • packages/plugin/src/v2/effect/integration.ts
  • packages/plugin/src/v2/effect/location.ts
  • packages/plugin/src/v2/effect/npm.ts
  • packages/plugin/src/v2/effect/path.ts
  • packages/plugin/src/v2/effect/plugin.ts
  • packages/plugin/src/v2/effect/reference.ts
  • packages/plugin/src/v2/effect/registration.ts
  • packages/plugin/src/v2/effect/skill.ts
  • packages/plugin/src/v2/options.ts
  • packages/plugin/src/v2/promise/README.md
  • packages/plugin/src/v2/promise/agent.ts
  • packages/plugin/src/v2/promise/aisdk.ts
  • packages/plugin/src/v2/promise/catalog.ts
  • packages/plugin/src/v2/promise/command.ts
  • packages/plugin/src/v2/promise/context.ts
  • packages/plugin/src/v2/promise/index.ts
  • packages/plugin/src/v2/promise/integration.ts
  • packages/plugin/src/v2/promise/plugin.ts
  • packages/plugin/src/v2/promise/reference.ts
  • packages/plugin/src/v2/promise/registration.ts
  • packages/plugin/src/v2/promise/skill.ts
  • packages/protocol/package.json
  • packages/protocol/src/api.ts
  • packages/protocol/src/errors.ts
  • packages/protocol/src/groups/agent.ts
  • packages/protocol/src/groups/command.ts
  • packages/protocol/src/groups/credential.ts
  • packages/protocol/src/groups/event.ts
  • packages/protocol/src/groups/fs.ts
  • packages/protocol/src/groups/health.ts
  • packages/protocol/src/groups/integration.ts
  • packages/protocol/src/groups/location.ts
  • packages/protocol/src/groups/message.ts
  • packages/protocol/src/groups/model.ts
  • packages/protocol/src/groups/permission.ts
  • packages/protocol/src/groups/project-copy.ts
  • packages/protocol/src/groups/provider.ts
  • packages/protocol/src/groups/pty.ts
  • packages/protocol/src/groups/question.ts
  • packages/protocol/src/groups/reference.ts
  • packages/protocol/src/groups/session.ts
  • packages/protocol/src/groups/skill.ts
  • packages/protocol/src/middleware/authorization.ts
  • packages/protocol/src/middleware/schema-error.ts
  • packages/protocol/sst-env.d.ts
  • packages/protocol/test/session-cursor.test.ts
  • packages/protocol/tsconfig.json
  • packages/schema/AGENTS.md
  • packages/schema/package.json
  • packages/schema/src/agent.ts
  • packages/schema/src/catalog.ts
  • packages/schema/src/command.ts
  • packages/schema/src/connection.ts
  • packages/schema/src/credential.ts
  • packages/schema/src/durable-event-manifest.ts
  • packages/schema/src/event-manifest.ts
  • packages/schema/src/event.ts
  • packages/schema/src/file-diff.ts
  • packages/schema/src/filesystem-watcher.ts
  • packages/schema/src/filesystem.ts
  • packages/schema/src/ide-event.ts
  • packages/schema/src/identifier.ts
  • packages/schema/src/index.ts
  • packages/schema/src/installation-event.ts
  • packages/schema/src/integration-id.ts
  • packages/schema/src/integration.ts
  • packages/schema/src/legacy-event.ts
  • packages/schema/src/llm.ts
  • packages/schema/src/location.ts
  • packages/schema/src/lsp-event.ts
  • packages/schema/src/mcp-event.ts
  • packages/schema/src/model.ts
  • packages/schema/src/models-dev.ts
  • packages/schema/src/permission-saved.ts
  • packages/schema/src/permission-v1.ts
  • packages/schema/src/permission.ts
  • packages/schema/src/plugin.ts
  • packages/schema/src/project-copy.ts
  • packages/schema/src/project-directories.ts
  • packages/schema/src/project-id.ts
  • packages/schema/src/project.ts
  • packages/schema/src/prompt-input.ts
  • packages/schema/src/prompt.ts
  • packages/schema/src/provider.ts
  • packages/schema/src/pty-ticket.ts
  • packages/schema/src/pty.ts
  • packages/schema/src/question-v1.ts
  • packages/schema/src/question.ts
  • packages/schema/src/reference.ts
  • packages/schema/src/revert.ts
  • packages/schema/src/schema.ts
  • packages/schema/src/server-event.ts
  • packages/schema/src/session-compaction-event.ts
  • packages/schema/src/session-delivery.ts
  • packages/schema/src/session-event.ts
  • packages/schema/src/session-id.ts
  • packages/schema/src/session-input.ts
  • packages/schema/src/session-message.ts
  • packages/schema/src/session-status-event.ts
  • packages/schema/src/session-todo.ts
  • packages/schema/src/session-v1.ts
  • packages/schema/src/session.ts
  • packages/schema/src/skill.ts
  • packages/schema/src/tui-event.ts
  • packages/schema/src/v1/legacy-event.ts
  • packages/schema/src/v1/permission.ts
  • packages/schema/src/v1/question.ts
  • packages/schema/src/v1/session.ts
  • packages/schema/src/vcs-event.ts
  • packages/schema/src/workspace-event.ts
  • packages/schema/src/workspace-id.ts
  • packages/schema/src/workspace.ts
  • packages/schema/src/worktree-event.ts
  • packages/schema/sst-env.d.ts
  • packages/schema/test/compatibility.test.ts
  • packages/schema/test/contract-hygiene.test.ts
  • packages/schema/test/event-manifest.test.ts
  • packages/schema/test/event.test.ts
  • packages/schema/test/legacy-event.test.ts
  • packages/schema/test/v1-isolation.test.ts
  • packages/schema/tsconfig.json
  • packages/sdk/js/package.json
  • packages/sdk/js/script/build.ts
  • packages/sdk/js/src/v2/client.ts
  • packages/sdk/js/test/session-history.test.ts
  • packages/sdk/openapi.json
  • packages/server/package.json
  • packages/server/src/api.ts
  • packages/server/src/auth.ts
  • packages/server/src/cors.ts
  • packages/server/src/groups/agent.ts
  • packages/server/src/groups/event.ts
  • packages/server/src/groups/location.ts
  • packages/server/src/groups/permission.ts
  • packages/server/src/groups/question.ts
  • packages/server/src/groups/session.ts
  • packages/server/src/handlers.ts
  • packages/server/src/handlers/agent.ts
  • packages/server/src/handlers/command.ts
  • packages/server/src/handlers/event.ts
  • packages/server/src/handlers/fs.ts
  • packages/server/src/handlers/integration.ts
  • packages/server/src/handlers/message.ts
  • packages/server/src/handlers/model.ts
  • packages/server/src/handlers/permission.ts
  • packages/server/src/handlers/project-copy.ts
  • packages/server/src/handlers/provider.ts
  • packages/server/src/handlers/pty.ts
  • packages/server/src/handlers/question.ts
  • packages/server/src/handlers/reference.ts
  • packages/server/src/handlers/session.ts
  • packages/server/src/handlers/skill.ts
  • packages/server/src/location.ts
  • packages/server/src/middleware/authorization.ts
  • packages/server/src/middleware/schema-error.ts
  • packages/server/src/middleware/session-location.ts
  • packages/server/src/pty-environment.ts
  • packages/server/src/routes.ts
  • packages/tui/package.json
  • packages/tui/src/app.tsx
  • packages/tui/src/component/dialog-debug.tsx
  • packages/tui/src/component/dialog-model.tsx
  • packages/tui/src/component/dialog-provider.tsx
  • packages/tui/src/component/dialog-session-list.tsx
  • packages/tui/src/component/dialog-skill.tsx
  • packages/tui/src/component/error-component.tsx
  • packages/tui/src/component/logo.tsx
  • packages/tui/src/component/prompt/autocomplete.tsx
  • packages/tui/src/component/prompt/index.tsx
  • packages/tui/src/component/register-spinner.ts
  • packages/tui/src/component/spinner.tsx
  • packages/tui/src/config/keybind.ts
  • packages/tui/src/context/args.tsx
  • packages/tui/src/context/data.tsx
  • packages/tui/src/context/local.tsx
  • packages/tui/src/context/location.tsx
  • packages/tui/src/context/path-format.tsx
  • packages/tui/src/context/permission.tsx
  • packages/tui/src/context/sync.tsx
  • packages/tui/src/feature-plugins/home/tips-view.tsx
  • packages/tui/src/feature-plugins/system/diff-viewer.tsx
  • packages/tui/src/plugin/adapters.tsx
  • packages/tui/src/routes/session/index.tsx
  • packages/tui/src/routes/session/permission.tsx
  • packages/tui/src/ui/dialog-prompt.tsx
  • packages/tui/src/ui/dialog-select.tsx
  • packages/tui/src/ui/dialog.tsx
  • packages/tui/src/util/locale.ts
  • packages/tui/src/util/system.ts
  • packages/tui/test/app-lifecycle.test.tsx
  • packages/tui/test/cli/cmd/tui/model-options.test.ts
  • packages/tui/test/cli/cmd/tui/sync-fixture.tsx
  • packages/tui/test/cli/cmd/tui/sync.test.tsx
  • packages/tui/test/cli/tui/data.test.tsx
  • packages/tui/test/cli/tui/diff-viewer.test.tsx
  • packages/tui/test/cli/tui/inline-tool-wrap-snapshot.test.tsx
  • packages/tui/test/component/dialog-session-list.test.ts
  • packages/tui/test/config.test.tsx
  • packages/tui/test/fixture/tui-sdk.ts
  • packages/tui/test/util/presentation.test.ts
  • patches/@ai-sdk%2Fmistral@3.0.51.patch
  • patches/@ai-sdk%2Fxai@3.0.102.patch
  • patches/@ai-sdk%2Fxai@3.0.82.patch
  • patches/@modelcontextprotocol%2Fsdk@1.29.0.patch
  • patches/@tanstack%2Fsolid-virtual@3.13.28.patch
  • patches/@tanstack%2Fvirtual-core@3.17.0.patch
  • patches/@tanstack%2Fvirtual-core@3.17.3.patch
  • patches/effect@4.0.0-beta.83.patch
  • patches/install-korean-ime-fix.sh
  • patches/solid-js@1.9.10.patch
  • script/github/close-issues.ts
  • script/github/close-prs.ts
  • script/publish.ts
  • script/release-preflight.ts
  • script/translate-app.md
  • script/translate-app.test.ts
  • script/translate-app.ts
  • script/upstream/analyze.ts
  • script/upstream/merge.ts
  • script/upstream/utils/config.ts
  • turbo.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e4205513b5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

},
"exports": {
"./public": "./src/public/index.ts",
"./effect/layer-node": "./src/effect/layer-node.ts",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore the supported public Core export

Existing embedding consumers that import @opencode-ai/core/public will now fail with ERR_PACKAGE_PATH_NOT_EXPORTED: this patch removes the ./public export and deletes the corresponding implementation and contract tests, even though src/public/index.ts explicitly described it as the supported native API. Preserve this export or provide a compatible replacement before removing the public modules.

Useful? React with 👍 / 👎.

Comment on lines +40 to +41
const output = yield* Effect.promise(() => response.text())
if (output) process.stdout.write(output + (output.endsWith(EOL) ? "" : EOL))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fail the api command on HTTP errors

When the requested endpoint returns a 4xx or 5xx response—for example, a rejected mutation or authorization failure—the handler prints the response body and completes successfully because it never checks response.ok. Scripts invoking this command therefore cannot distinguish a failed request from a successful one via the exit status; propagate an error after reading the body when the response is not successful.

Useful? React with 👍 / 👎.

Comment thread packages/opencode/src/plugin/index.ts Outdated
if (seen.has(entry)) continue
seen.add(entry)
const plugin = getServerPlugin(entry)
if (!plugin) throw new TypeError("Plugin export is not a function")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip non-callable exports in legacy plugins

For a legacy function-style plugin that also exports an ordinary value such as version, readV1Plugin(..., "detect") falls through to this loader and the non-callable export now throws, causing the entire plugin to be skipped. The previous loader deliberately ignored non-function exports, so existing plugins with helper constants or types emitted at runtime stop loading; continue past non-plugin exports while retaining deduplication of callable exports.

Useful? React with 👍 / 👎.

const isLoading = createMemo(() => props.part.state.status === "pending" || props.part.state.status === "running")
const calls = createMemo(() => executeCalls(props.metadata.toolCalls))
const output = createMemo(() => stripAnsi(props.output?.trim() ?? ""))
const hasRuntimeError = createMemo(() => props.metadata.error === true)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat string error metadata as an execution failure

When Code Mode is cancelled, CodeModeTool returns a normal result with metadata.error set to the string "Execution cancelled."; the shared tool metadata contract also declares this field as string. This strict comparison is therefore always false for that result, so the TUI renders a success checkmark and hides the cancellation output instead of showing the error. Check for a non-empty error value rather than the boolean literal.

Useful? React with 👍 / 👎.

… code-mode fixes

Codex diff review of PR #1054 found four blockers, all fixed:

1. `session.status`/`idle`/`phase` were absent from `ServerDefinitions` — the
   union `/api/event` encodes against — so one status event killed the v2 SSE
   stream with an encode error. Added `SessionStatusEvent.Definitions` to the
   inventory (marked); schema manifest pins updated (61/89/89/35) and the
   brittle positional-slice assertion replaced with Latest-map identity checks.
2. `cleanupSkipFiles`' directory sweep (`rmSync` recursive) bypassed the
   newly-introduced-only guard — it now skips any `/**` directory containing
   base-branch-tracked files, and the baseline honors the `--base-branch`
   override end-to-end (threaded through `postMergeTransforms`).
3. Code-mode server grouping read `entry.client` (the MCP client OBJECT) —
   now uses the fork's `entry.clientName`, so underscore-containing server
   names group into the same `tools.<server>.<tool>` paths the runtime
   exposes instead of splitting at the wrong boundary.
4. Restored upstream's session-level permission filtering in the code-mode
   visibility gate: `registry.tools()` accepts `permission` again,
   `session/tools.ts` passes `input.session.permission`, and the ruleset
   merges session rules after agent rules — session-denied MCP tools no
   longer leak into `execute`'s description.

Note: the phase-label e2e still fails locally — the SSE-killer was real but
is not the (only) label-delivery break; known-issue status unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@anandgupta42

Copy link
Copy Markdown
Contributor Author

Codex diff review completed (4 blockers found, all fixed in f9d64e1):

  1. SSE stream killer: session.status/idle/phase were missing from ServerDefinitions — the union /api/event encodes against — so any status event terminated the v2 SSE stream. Fixed + schema manifest pins updated.
  2. skipFiles rm guard bypass: the directory sweep in cleanupSkipFiles recursively deleted /**-pattern dirs regardless of base-branch content; now skips dirs with baseline-tracked files and honors --base-branch.
  3. Code-mode server grouping: read the MCP client object instead of clientName — underscore-containing server names advertised nonexistent tools.<x>.<y> paths. Fixed.
  4. Session-permission filtering: restored upstream's session-level ruleset in the code-mode visibility gate (session-denied MCP tools no longer leak into execute's description).

Codex verdict otherwise: no DDL-safety / XSS / path-containment / deny-filter / lazy-layer / location-middleware / opentui-embedding defects found. Phase-label known issue: the SSE killer was real but not the only delivery break — follow-up stands.

@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

27 issues found and verified against the latest diff

Not reviewed (too large): packages/opencode/test/provider/provider.test.ts (~4,196 lines), .github/meta/merge-report-v1.18.10.json (~2,037 lines), patches/@ai-sdk%2Fmistral@3.0.51.patch (~709 lines) - if these are generated or fixture files, add them to ignored paths to exclude them from future reviews.

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="packages/core/src/tool/edit.ts">

<violation number="1" location="packages/core/src/tool/edit.ts:183">
P3: Edit and apply_patch now maintain identical FileDiff construction separately, so later diff/count changes can diverge between mutation tools. Consider sharing a FileDiff builder for the common modified-file case.</violation>
</file>

<file name="packages/codemode/src/openapi/index.ts">

<violation number="1" location="packages/codemode/src/openapi/index.ts:51">
P2: Referenced path items silently disappear from the generated subtree because this loop examines `$ref` instead of the resolved Path Item Object. Resolve each `pathValue` before method iteration, and use that resolved value for path-level servers and parameters.</violation>

<violation number="2" location="packages/codemode/src/openapi/index.ts:92">
P3: Malformed path templates create tools that always fail (`/pets/{id}` with no `id` parameter) or silently call the wrong endpoint (a declared `id` absent from the path). Validate a one-to-one match between `{...}` placeholders and parsed path parameters, then add an unsupported operation to `skipped` when it does not match.</violation>
</file>

<file name="packages/core/src/location-service-map.ts">

<violation number="1" location="packages/core/src/location-service-map.ts:10">
P3: Runtime diagnostics and missing-service errors will label the production location map as an example service. Use the production service-key namespace to keep service identity and observability consistent with core.</violation>
</file>

<file name="packages/core/src/session/runner/publish-llm-event.ts">

<violation number="1" location="packages/core/src/session/runner/publish-llm-event.ts:400">
P1: A user-declined tool leaves the assistant step unclosed because `Step.Ended` is deferred past the early interrupt return. Settle the stored step before that return, or emit a terminal failure there, so started steps always have a terminal event.</violation>
</file>

<file name=".opencode/opencode.jsonc">

<violation number="1" location=".opencode/opencode.jsonc:2">
P1: The `$schema` URL `https://altimate.ai/config.json` returns a 404 (HTML landing page), breaking IDE validation, autocomplete, and documentation for this config file. Either host the schema at that URL or point `$schema` to a resolvable schema endpoint so editors and tooling can validate the file.</violation>
</file>

<file name="packages/codemode/src/stdlib/date.ts">

<violation number="1" location="packages/codemode/src/stdlib/date.ts:1">
P3: Programs using the documented Date getter set cannot call `getYear()`: property access is not made callable because this allowlist omits it. Include `getYear` and dispatch it to `hosted.getYear()` (or narrow the public Date-support promise).</violation>
</file>

<file name="packages/core/src/effect/app-node-builder.ts">

<violation number="1" location="packages/core/src/effect/app-node-builder.ts:10">
P2: A replacement that adds a `LocationServiceMap.node` dependency fails at compile time because this check runs before replacement resolution. Register the automatic map replacement whenever callers have not supplied their own `LocationServiceMap` replacement (or inspect the resolved graph), so introduced dependencies are covered.</violation>
</file>

<file name="packages/cli/src/commands/handlers/api.ts">

<violation number="1" location="packages/cli/src/commands/handlers/api.ts:56">
P1: Raw paths such as `//attacker.example/x` (or `/\\attacker.example/x`) resolve off-origin and send the daemon’s Basic Authorization header to that host. Restrict raw input to a single-origin absolute path before resolving it.</violation>
</file>

<file name="packages/core/src/process.ts">

<violation number="1" location="packages/core/src/process.ts:159">
P2: Failed combined-output commands passed through `requireSuccess` produce an error with no command diagnostics, because this branch deliberately empties `stderr` while `requireSuccess` only reads `result.stderr`. Have `requireSuccess` and `requireExitIn` use `result.output ?? result.stderr` when constructing `AppProcessError`.</violation>
</file>

<file name="packages/core/src/models-dev.ts">

<violation number="1" location="packages/core/src/models-dev.ts:161">
P2: Users upgrading with a fresh `models.json` from models.dev continue using that old catalog for up to an hour instead of the new Altimate source. Give the new default a distinct cache filename (or invalidate/migrate the old file) so switching the endpoint takes effect immediately.</violation>
</file>

<file name="packages/core/src/database/migration/20260622170816_reset_v2_session_state.ts">

<violation number="1" location="packages/core/src/database/migration/20260622170816_reset_v2_session_state.ts:8">
P3: Upgrades run this complete session-state reset twice because the immediately following `20260622202450_simplify_session_input` migration has identical SQL. Consolidating these migrations avoids a redundant write transaction and leaves one authoritative reset path.</violation>
</file>

<file name="packages/core/src/tool/tool.ts">

<violation number="1" location="packages/core/src/tool/tool.ts:86">
P2: A partially specified structured projection can advertise one output schema while emitting another. Require `structured` and `toStructuredOutput` as a pair, or fall back to `output` unless both are present.</violation>
</file>

<file name="packages/llm/src/protocols/bedrock-converse.ts">

<violation number="1" location="packages/llm/src/protocols/bedrock-converse.ts:226">
P3: Bedrock compatibility projection has no protocol-level assertion. Add a `LLMClient.prepare` case with a compatibility-tagged Bedrock model so regressions in the raw `toolSpec.inputSchema.json` payload are caught without OpenAI's additional projection masking them.</violation>
</file>

<file name="packages/core/src/database/migration.ts">

<violation number="1" location="packages/core/src/database/migration.ts:146">
P1: Pre-simplification databases without this migration journal now fingerprint as current, so adoption records `simplify_session_context_epoch` without dropping these three columns (and skips subsequent reset migrations). Compare the live column set for equality, not only required-column inclusion, before adopting.</violation>
</file>

<file name="packages/codemode/src/stdlib/regexp.ts">

<violation number="1" location="packages/codemode/src/stdlib/regexp.ts:6">
P2: Programs cannot set `RegExp.lastIndex`, so global/sticky scans cannot be started or reset at a chosen offset despite exposing the property. Return a writable member reference for `lastIndex` and route writes to `SandboxRegExp.regex.lastIndex`.</violation>
</file>

<file name="packages/core/src/skill/guidance.ts">

<violation number="1" location="packages/core/src/skill/guidance.ts:76">
P2: First prompt after location startup can render no available skills: plugin registration now runs in a background fiber, but `SkillGuidance.load` no longer waits for it before calling `skills.list()`. Keep an explicit readiness dependency/await for plugin boot before loading guidance.</violation>
</file>

<file name="packages/codemode/src/openapi/types.ts">

<violation number="1" location="packages/codemode/src/openapi/types.ts:30">
P2: A resolver can supply a credential incompatible with its declared security scheme and still send it, producing requests that do not satisfy the OpenAPI contract. Validate credential/scheme pairs in `applyCredentials` (or make the resolver result scheme-dependent) and fail with `ToolError` on a mismatch.</violation>
</file>

<file name="packages/codemode/src/stdlib/value.ts">

<violation number="1" location="packages/codemode/src/stdlib/value.ts:40">
P2: String coercion loses error messages: branded `Error` values fall into the generic object branch and render as `[object Object]`. Handle `errorBrandName(value)` before that branch so thrown/caught errors retain their standard `Error: message` representation.</violation>

<violation number="2" location="packages/codemode/src/stdlib/value.ts:60">
P2: `parseInt` ignores its radix whenever input is a sandbox value, so `parseInt(new Date(0), 16)` and `dates.map(parseInt)` produce base-10 results instead of using the supplied radix/index. Preserve the same radix handling used by the non-sandbox path.</violation>
</file>

<file name="packages/cli/src/commands/handlers/serve.ts">

<violation number="1" location="packages/cli/src/commands/handlers/serve.ts:34">
P2: An invalid/unavailable `--hostname` can make `serve` attempt every port through 65535 before reporting the actual error. Restrict fallback to address-in-use failures; propagate other bind errors immediately.</violation>
</file>

<file name="packages/core/src/session/revert.ts">

<violation number="1" location="packages/core/src/session/revert.ts:76">
P1: Staging can restore files while this session's runner is still executing, so an in-flight tool or LLM step can write against a reverted worktree and corrupt the staged result. Reject or interrupt active sessions before snapshot operations, matching the legacy busy guard.</violation>

<violation number="2" location="packages/core/src/session/revert.ts:116">
P1: Committing during an active run deletes messages and inputs the runner may still be recording or consuming. Gate commit on session idleness (or interrupt and await execution) before publishing the durable deletion event.</violation>
</file>

<file name="packages/codemode/src/stdlib/object.ts">

<violation number="1" location="packages/codemode/src/stdlib/object.ts:33">
P2: `Object.values(["a"])` and `Object.entries(["a"])` now throw instead of returning indexed values. Handle arrays in these two helpers, matching `Object.keys` and normal JavaScript behavior.</violation>

<violation number="2" location="packages/codemode/src/stdlib/object.ts:38">
P2: `Object.assign(target, source)` does not update `target`, so later reads through the original reference miss assigned fields. Validate the first argument but use it as `out`, then copy only `args.slice(1)`.</violation>

<violation number="3" location="packages/codemode/src/stdlib/object.ts:62">
P2: `Object.fromEntries(new Set([["a", 1]]))` fails even though `Set` is a supported iterable. Materialize `SandboxSet` values as entry pairs before the array-only fallback.</violation>
</file>

<file name="packages/cli/src/commands/commands.ts">

<violation number="1" location="packages/cli/src/commands/commands.ts:17">
P2: The `header` flag may be missing `Flag.optional` — all other optional params in this command and file use it, and `Flag.atMost(100)` only controls the upper cardinality bound. Without it, a user might be forced to supply at least one `--header` for every `api` call, which breaks the expected usage pattern for most endpoints.</violation>
</file>

Note: This PR contains a large number of files. cubic only reviews up to 200 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.

Re-trigger cubic

})
assistantActive = false
if (stepSettlement) return yield* Effect.die("Duplicate step finish")
stepSettlement = { finish: event.reason, tokens: tokens(event.usage) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: A user-declined tool leaves the assistant step unclosed because Step.Ended is deferred past the early interrupt return. Settle the stored step before that return, or emit a terminal failure there, so started steps always have a terminal event.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/core/src/session/runner/publish-llm-event.ts, line 400:

<comment>A user-declined tool leaves the assistant step unclosed because `Step.Ended` is deferred past the early interrupt return. Settle the stored step before that return, or emit a terminal failure there, so started steps always have a terminal event.</comment>

<file context>
@@ -375,36 +395,28 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
-        })
+        assistantActive = false
+        if (stepSettlement) return yield* Effect.die("Duplicate step finish")
+        stepSettlement = { finish: event.reason, tokens: tokens(event.usage) }
         return
       case "finish":
</file context>

Comment thread .opencode/opencode.jsonc
@@ -1,5 +1,5 @@
{
"$schema": "https://opencode.ai/config.json",
"$schema": "https://altimate.ai/config.json",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: The $schema URL https://altimate.ai/config.json returns a 404 (HTML landing page), breaking IDE validation, autocomplete, and documentation for this config file. Either host the schema at that URL or point $schema to a resolvable schema endpoint so editors and tooling can validate the file.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .opencode/opencode.jsonc, line 2:

<comment>The `$schema` URL `https://altimate.ai/config.json` returns a 404 (HTML landing page), breaking IDE validation, autocomplete, and documentation for this config file. Either host the schema at that URL or point `$schema` to a resolvable schema endpoint so editors and tooling can validate the file.</comment>

<file context>
@@ -1,5 +1,5 @@
 {
-  "$schema": "https://opencode.ai/config.json",
+  "$schema": "https://altimate.ai/config.json",
   "provider": {},
   "permission": {},
</file context>

}

export function rawRequest(input: readonly string[]) {
if (input.length !== 2 || !methods.has(input[0].toLowerCase()) || !input[1].startsWith("/")) return

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: Raw paths such as //attacker.example/x (or /\\attacker.example/x) resolve off-origin and send the daemon’s Basic Authorization header to that host. Restrict raw input to a single-origin absolute path before resolving it.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/src/commands/handlers/api.ts, line 56:

<comment>Raw paths such as `//attacker.example/x` (or `/\\attacker.example/x`) resolve off-origin and send the daemon’s Basic Authorization header to that host. Restrict raw input to a single-origin absolute path before resolving it.</comment>

<file context>
@@ -0,0 +1,85 @@
+}
+
+export function rawRequest(input: readonly string[]) {
+  if (input.length !== 2 || !methods.has(input[0].toLowerCase()) || !input[1].startsWith("/")) return
+  return { method: input[0].toUpperCase(), path: input[1] }
+}
</file context>

"time_compacting",
"time_archived",
],
session_context_epoch: ["session_id", "baseline", "snapshot", "baseline_seq"],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: Pre-simplification databases without this migration journal now fingerprint as current, so adoption records simplify_session_context_epoch without dropping these three columns (and skips subsequent reset migrations). Compare the live column set for equality, not only required-column inclusion, before adopting.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/core/src/database/migration.ts, line 146:

<comment>Pre-simplification databases without this migration journal now fingerprint as current, so adoption records `simplify_session_context_epoch` without dropping these three columns (and skips subsequent reset migrations). Compare the live column set for equality, not only required-column inclusion, before adopting.</comment>

<file context>
@@ -70,18 +70,80 @@ export const currentSchemaTables = [
+    "time_compacting",
+    "time_archived",
+  ],
+  session_context_epoch: ["session_id", "baseline", "snapshot", "baseline_seq"],
   session_input: ["id", "session_id", "prompt", "delivery", "admitted_seq", "promoted_seq", "time_created"],
   session_message: ["id", "session_id", "type", "seq", "time_created", "time_updated", "data"],
</file context>

export const commit = Effect.fn("SessionRevert.commit")(function* (session: SessionSchema.Info) {
if (!session.revert) return
const events = yield* EventV2.Service
yield* events.publish(SessionEvent.RevertEvent.Committed, {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: Committing during an active run deletes messages and inputs the runner may still be recording or consuming. Gate commit on session idleness (or interrupt and await execution) before publishing the durable deletion event.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/core/src/session/revert.ts, line 116:

<comment>Committing during an active run deletes messages and inputs the runner may still be recording or consuming. Gate commit on session idleness (or interrupt and await execution) before publishing the durable deletion event.</comment>

<file context>
@@ -0,0 +1,121 @@
+export const commit = Effect.fn("SessionRevert.commit")(function* (session: SessionSchema.Info) {
+  if (!session.revert) return
+  const events = yield* EventV2.Service
+  yield* events.publish(SessionEvent.RevertEvent.Committed, {
+    sessionID: session.id,
+    messageID: session.revert.messageID,
</file context>

}
const plan = {
operation,
url: `${resolvedBaseUrl.value.replace(/\/+$/, "")}${path}`,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Malformed path templates create tools that always fail (/pets/{id} with no id parameter) or silently call the wrong endpoint (a declared id absent from the path). Validate a one-to-one match between {...} placeholders and parsed path parameters, then add an unsupported operation to skipped when it does not match.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/codemode/src/openapi/index.ts, line 92:

<comment>Malformed path templates create tools that always fail (`/pets/{id}` with no `id` parameter) or silently call the wrong endpoint (a declared `id` absent from the path). Validate a one-to-one match between `{...}` placeholders and parsed path parameters, then add an unsupported operation to `skipped` when it does not match.</comment>

<file context>
@@ -0,0 +1,130 @@
+      }
+      const plan = {
+        operation,
+        url: `${resolvedBaseUrl.value.replace(/\/+$/, "")}${path}`,
+        fields: input.fields,
+        body: input.body,
</file context>

export class Service extends Context.Service<
Service,
LayerMap.LayerMap<Location.Ref, LocationServices, LocationError>
>()("@opencode/example/LocationServiceMap") {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Runtime diagnostics and missing-service errors will label the production location map as an example service. Use the production service-key namespace to keep service identity and observability consistent with core.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/core/src/location-service-map.ts, line 10:

<comment>Runtime diagnostics and missing-service errors will label the production location map as an example service. Use the production service-key namespace to keep service identity and observability consistent with core.</comment>

<file context>
@@ -0,0 +1,18 @@
+export class Service extends Context.Service<
+  Service,
+  LayerMap.LayerMap<Location.Ref, LocationServices, LocationError>
+>()("@opencode/example/LocationServiceMap") {
+  static get(ref: Location.Ref) {
+    return Layer.unwrap(Effect.map(Service, (locations) => locations.get(ref)))
</file context>

@@ -0,0 +1,94 @@
export const dateMethods = new Set([

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Programs using the documented Date getter set cannot call getYear(): property access is not made callable because this allowlist omits it. Include getYear and dispatch it to hosted.getYear() (or narrow the public Date-support promise).

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/codemode/src/stdlib/date.ts, line 1:

<comment>Programs using the documented Date getter set cannot call `getYear()`: property access is not made callable because this allowlist omits it. Include `getYear` and dispatch it to `hosted.getYear()` (or narrow the public Date-support promise).</comment>

<file context>
@@ -0,0 +1,94 @@
+export const dateMethods = new Set([
+  "getTime",
+  "valueOf",
</file context>

id: "20260622170816_reset_v2_session_state",
up(tx) {
return Effect.gen(function* () {
yield* tx.run(`DELETE FROM \`session_context_epoch\`;`)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Upgrades run this complete session-state reset twice because the immediately following 20260622202450_simplify_session_input migration has identical SQL. Consolidating these migrations avoids a redundant write transaction and leaves one authoritative reset path.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/core/src/database/migration/20260622170816_reset_v2_session_state.ts, line 8:

<comment>Upgrades run this complete session-state reset twice because the immediately following `20260622202450_simplify_session_input` migration has identical SQL. Consolidating these migrations avoids a redundant write transaction and leaves one authoritative reset path.</comment>

<file context>
@@ -0,0 +1,17 @@
+  id: "20260622170816_reset_v2_session_state",
+  up(tx) {
+    return Effect.gen(function* () {
+      yield* tx.run(`DELETE FROM \`session_context_epoch\`;`)
+      yield* tx.run(`DELETE FROM \`session_input\`;`)
+      yield* tx.run(`DELETE FROM \`session_message\`;`)
</file context>

const result: BedrockTool[] = []
for (const tool of tools) {
result.push(lowerToolSpec(tool))
result.push(lowerToolSpec(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, compatibility)))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Bedrock compatibility projection has no protocol-level assertion. Add a LLMClient.prepare case with a compatibility-tagged Bedrock model so regressions in the raw toolSpec.inputSchema.json payload are caught without OpenAI's additional projection masking them.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/llm/src/protocols/bedrock-converse.ts, line 226:

<comment>Bedrock compatibility projection has no protocol-level assertion. Add a `LLMClient.prepare` case with a compatibility-tagged Bedrock model so regressions in the raw `toolSpec.inputSchema.json` payload are caught without OpenAI's additional projection masking them.</comment>

<file context>
@@ -205,18 +208,22 @@ type BedrockEvent = Schema.Schema.Type<typeof BedrockEvent>
   const result: BedrockTool[] = []
   for (const tool of tools) {
-    result.push(lowerToolSpec(tool))
+    result.push(lowerToolSpec(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, compatibility)))
     const cachePoint = BedrockCache.block(breakpoints, tool.cache)
     if (cachePoint) result.push(cachePoint)
</file context>

@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f9d64e126a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

break
}
const mime = block.resource.mimeType ?? "application/octet-stream"
push({ type: "file", mime, url: dataUrl(mime, block.resource.blob), filename: lastSegment(block.resource.uri) })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply MCP attachment guards in Code Mode

When experimental Code Mode is enabled and an MCP tool returns a binary resource, this path attaches the blob without the MIME allowlist or 10 MiB limit enforced by the normal MCP path in session/tools.ts. An unsupported resource such as application/octet-stream is consequently forwarded as model media and can make the next provider request fail, while a very large blob is retained in session state and model payloads; apply the same type and decoded-size checks before collecting the attachment.

Useful? React with 👍 / 👎.

Comment thread packages/opencode/src/tool/registry.ts Outdated
Comment on lines +529 to +530
const codeMode = runtimeFlags?.experimentalCodeMode ? [(await loadCodeMode()).tool] : []
return [...resolved, ...custom, ...pluginCustom, ...codeMode]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Pass runtime flags through the active session tool resolver

With OPENCODE_EXPERIMENTAL_CODE_MODE enabled, the active /session/:id/prompt path still calls the namespace ToolRegistry.tools(model, agent) from SessionPrompt.resolveTools without this runtimeFlags argument, so it remains undefined here and execute is never added. The alternative SessionTools.resolve implementation that captures RuntimeFlags.Service has no callers anywhere in the repository, meaning the feature flag has no effect for ordinary sessions; thread the flags through the active resolver or switch that pipeline to the service-backed resolver.

Useful? React with 👍 / 👎.

Comment thread packages/opencode/src/session/prompt.ts Outdated
Comment on lines +1861 to +1865
const result = await client.callTool(
{ name: def.name, arguments: args },
undefined,
timeout !== undefined ? { timeout } : undefined,
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Propagate MCP error results as tool failures

When an MCP server returns a valid CallToolResult with isError: true, this direct call path continues through formatting and returns its text as a successful tool result, so the session marks a rejected MCP operation as completed and the model cannot reliably distinguish it from normal output. Both McpCatalog.convertTool and the new Code Mode adapter explicitly throw for isError; perform the same check before firing the success hook and constructing the output here.

Useful? React with 👍 / 👎.

Comment thread packages/opencode/src/session/prompt.ts Outdated
Comment on lines +1863 to +1864
undefined,
timeout !== undefined ? { timeout } : undefined,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Forward cancellation and progress options to MCP calls

For MCP tools invoked by the active legacy prompt pipeline, this replacement for the previous AI SDK adapter passes only timeout; it drops opts.abortSignal, resetTimeoutOnProgress, and the progress callback that McpCatalog.convertTool supplies. Consequently, cancelling a session does not cancel an in-flight MCP request, and a long-running tool that reports progress can still time out instead of extending its deadline; pass the execution signal and progress-reset options to client.callTool.

Useful? React with 👍 / 👎.

const textParts: string[] = []
const attachments: Omit<MessageV2.FilePart, "id" | "sessionID" | "messageID">[] = []

for (const contentItem of (result.content ?? []) as any[]) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve structured-only MCP results

When an MCP tool returns the valid shape { content: [], structuredContent: ... }, this manual projection iterates only content and produces an empty successful output, discarding the actual result. The prior adapter behavior is retained in McpCatalog.convertTool, which synthesizes a JSON text block when only structuredContent is present, and its focused tests cover this case; apply that fallback here or reuse the shared converter.

Useful? React with 👍 / 👎.

Comment thread script/translate-app.ts
Comment on lines +375 to +379
const proc = Bun.spawn(
[
"opencode",
"--pure",
"run",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Invoke the fork CLI when translating

Running the newly documented bun run translate:app -- <locale> command reaches this spawn, but this repository publishes only the altimate and altimate-code binaries; there is no opencode bin in packages/opencode/package.json or the workspace. On a normal fork development environment without an unrelated upstream CLI installed, every translation job therefore fails with ENOENT, while this same script correctly uses altimate for its models and export subprocesses; use the fork binary consistently.

Useful? React with 👍 / 👎.

anandgupta42 and others added 2 commits July 31, 2026 10:30
# Conflicts:
#	packages/opencode/test/acp/permission.test.ts
#	packages/opencode/test/lib/cli-process.ts
#	packages/opencode/test/mcp/lifecycle.test.ts
#	packages/tui/src/component/dialog-model.tsx
#	packages/tui/src/component/prompt/autocomplete.tsx
#	packages/tui/src/component/prompt/index.tsx
#	packages/tui/src/feature-plugins/sidebar/footer.tsx
… code-mode fixes

Codex diff review of PR #1054 found four blockers, all fixed:

1. `session.status`/`idle`/`phase` were absent from `ServerDefinitions` — the
   union `/api/event` encodes against — so one status event killed the v2 SSE
   stream with an encode error. Added `SessionStatusEvent.Definitions` to the
   inventory (marked); schema manifest pins updated (61/89/89/35) and the
   brittle positional-slice assertion replaced with Latest-map identity checks.
2. `cleanupSkipFiles`' directory sweep (`rmSync` recursive) bypassed the
   newly-introduced-only guard — it now skips any `/**` directory containing
   base-branch-tracked files, and the baseline honors the `--base-branch`
   override end-to-end (threaded through `postMergeTransforms`).
3. Code-mode server grouping read `entry.client` (the MCP client OBJECT) —
   now uses the fork's `entry.clientName`, so underscore-containing server
   names group into the same `tools.<server>.<tool>` paths the runtime
   exposes instead of splitting at the wrong boundary.
4. Restored upstream's session-level permission filtering in the code-mode
   visibility gate: `registry.tools()` accepts `permission` again,
   `session/tools.ts` passes `input.session.permission`, and the ruleset
   merges session rules after agent rules — session-denied MCP tools no
   longer leak into `execute`'s description.

Note: the phase-label e2e still fails locally — the SSE-killer was real but
is not the (only) label-delivery break; known-issue status unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@anandgupta42

Copy link
Copy Markdown
Contributor Author

Review-comment triage (Codex GitHub + cubic inline)

Fixed in 80e327d + 2a7b44b:

Comment Fix
P1 restore @opencode-ai/core/public Restored + ported onto the v1.18.10 node graph; the removed PluginBoot.wait() guarantee reconstructed as plugin.wait("variant") + synchronous catalog.reload() (transform registration is sync, materialization is a deferred batch flush — waiting alone races); contract tests back and green
P2 runtime flags in the live resolver codeModeEnabled() env fallback — code mode now actually activates in real sessions
P2 MCP isError as failure Direct-call path now throws, mirroring McpCatalog.convertTool
P2 MCP cancellation/progress abortSignal + resetTimeoutOnProgress + progress hook forwarded
P2 structured-only MCP results JSON text block synthesized when content is empty
P2 legacy plugin non-callable exports Skipped instead of failing the whole plugin
P2 TUI string error metadata Non-empty check — code-mode cancellations render as errors
P2 translate:app binary Spawns altimate-code

Also resolved the merge conflicts with main (v0.9.4 + #1001 gateway onboarding): took main's newer fork UX where it superseded merge-era code, and re-homed main's v0.9.4 harness fixes (database-locked retry, homedir-spy stable-dir + afterEach restore) onto the rewritten test files.

Declined (out of merge scope — upstream's own code, adopted as-is): cubic's comments on packages/codemode stdlib semantics (Object/parseInt/RegExp/Date quirks), v2-core session runner/revert/migration behavior, packages/cli preview api command (not shipped in the fork binary), and the .opencode/opencode.jsonc $schema URL (fork-consistent, dev-metadata). Changing upstream internals inside a merge PR grows divergence; these are candidates for upstream issues.

Deferred as follow-up (with the existing list): Code Mode MCP attachment size/MIME guards (flag-gated experimental feature; the guard exists on the non-code-mode path).

@github-actions

Copy link
Copy Markdown
- - - - - - - - - - - - - - - - - - - - - - - - -
                    AIRECEIPTS                    
            3 sessions behind this PR             

claude-fable-5 100% · &lt;synthetic…...≥ $439.3422
  session slice: turns 1–709 of 737
  SUBAGENTS (28).......................≥ $283.5563
  CODEX HELPERS (2) — no commits
  gpt-5.6-sol · 9m.......................≥ $2.4949
  (unattributed usage) · 13m......9,986,044 tokens
--------------------------------------------------
TOTAL priced...........................≥ $725.3934
TOTAL unpriced..................≥ 9,986,044 tokens
  standard API-equivalent floor; not an invoice
  counted: 3 sessions + 28 subagents
  cache served 99% of input tokens

22 candidate sessions not attributed
(in repo + branch window, no branch commit)

1 GPT-5.6 Codex session omitted cache-write tokens
(floor excludes any write premium — see docs/cost-model.md)
  full receipts + session ids: section below
- - - - - - - - - - - - - - - - - - - - - - - - -
                npx aireceipts-cli                
         github.com/anandgupta42/receipts         
- - - - - - - - - - - - - - - - - - - - - - - - -
full receipts (3 sessions)
session id scope turns time tokens in / out cached
orchestrator 7ae64021 turns 1–709 of 737 709 21h 28m 1.4k / 427k 99%
codex bf34869b no commits 1 9m 215k / 22k 87%
codex 389b8aa4 no commits 1 13m 337k / 27k 97%

orchestrator · 7ae64021

- - - - - - - - - - - - - - - - - - - - - - - - -
                    AIRECEIPTS                    
 “Review upstream merge traces and execute main…” 
  Claude Code · Jul 30 2026 20:01 UTC · 21h 28m   
       claude-fable-5 100% · <synthetic> 0%       
         cache served 99% of input tokens         

pre-edit: 1% of priced floor (19/707 turns)
  (share before the first named edit tool)

Bash......................≥ $363.3914  (617 calls)
Edit.......................≥ $37.1419  (141 calls)
(thinking/reply)............≥ $24.4175  (54 turns)
SendMessage..................≥ $3.9459  (13 calls)
Agent........................≥ $3.2298  (15 calls)
Read.........................≥ $2.2811  (11 calls)
TaskUpdate...................≥ $2.2579  (10 calls)
Write.........................≥ $1.8600  (3 calls)
ToolSearch....................≥ $0.4823  (2 calls)
TaskCreate....................≥ $0.3341  (5 calls)

≈ re-priced eligible trivial spans.......≈ $1.0034
  (22 tiny turns, priced at claude-haiku-4-5)
--------------------------------------------------
TOTAL..................................≥ $439.3419
standard API-equivalent floor; not an invoice
same tokens on claude-haiku-4-5.........≥ $43.9342
  (90% lower observable floor)
  (arithmetic, not a prediction)
- - - - - - - - - - - - - - - - - - - - - - - - -
                npx aireceipts-cli                
         github.com/anandgupta42/receipts         
- - - - - - - - - - - - - - - - - - - - - - - - -
subagents (28)
subagent cost
agent-amerge-misc-656526cb5b9ead26 · claude-sonnet-5 ≥ $39.6251
agent-afix-src-errors-8884253d2aa6943c · claude-sonnet-5 ≥ $35.9186
agent-amerge-provider-f91c2cc70ae74a38 · claude-sonnet-5 ≥ $31.8725
agent-afix-t-misc-4ffdae80fce64a8f · claude-sonnet-5 ≥ $28.5665
agent-afix-t-provider-192137aa70eca91a · claude-sonnet-5 ≥ $16.2223
agent-afix-test-errors-48721089ad1731db · claude-sonnet-5 ≥ $12.8623
agent-a175829052802353f · claude-sonnet-5 ≥ $11.4221
agent-amerge-session-a955e6132d1fa4c0 · claude-sonnet-5 ≥ $10.8287
agent-a271ffc7c8a00784c · claude-sonnet-5 ≥ $9.6853
agent-amerge-coretui-0a1ae438ceb768e4 · claude-sonnet-5 ≥ $8.7704
agent-afix-final-8-8339362751bea908 · claude-sonnet-5 ≥ $8.1541
agent-ab41b6eb19fef171d · claude-sonnet-5 ≥ $7.8212
agent-afix-provider-tests-3b7088c2084e338a · claude-sonnet-5 ≥ $6.1689
agent-afcb6b0105a3e561b · claude-sonnet-5 ≥ $5.4706
agent-aafb7ece5fef5aecd · claude-sonnet-5 ≥ $5.3669
agent-afix-core-failures-d1d12fba2f41f957 · claude-sonnet-5 ≥ $5.3286
agent-a3da2521d3084a4c3 · claude-sonnet-5 ≥ $4.5729
agent-ae7e274ab5fb062fa · claude-sonnet-5 ≥ $4.1359
agent-adeb69f69e48f0f1b · claude-sonnet-5 ≥ $3.9527
9 more subagents ≥ $26.8097

codex · bf34869b

- - - - - - - - - - - - - - - - - - - - - - - - -
                    AIRECEIPTS                    
 “You are reviewing a merge plan for a fork of…”  
    Codex · Jul 30 2026 20:08:38 UTC · 9m 00s     
                 gpt-5.6-sol 100%                 
         cache served 87% of input tokens         

pre-edit: no named edit tool observed
  (share before the first named edit tool)

exec_command.................≥ $2.3909  (23 calls)
list_projects..................≥ $0.1039  (1 call)

caveat: Codex trace omits GPT-5.6 cache-write tokens — floor excludes any write premium
--------------------------------------------------
KNOWN PRICED SUBTOTAL....................≥ $2.4948
standard API-equivalent floor; not an invoice
partial pricing coverage; invoice total unknown
same tokens on gpt-5.4-mini..............≥ $0.3742
  (85% lower observable floor)
  (arithmetic, not a prediction)
- - - - - - - - - - - - - - - - - - - - - - - - -
                npx aireceipts-cli                
         github.com/anandgupta42/receipts         
- - - - - - - - - - - - - - - - - - - - - - - - -

codex · 389b8aa4

- - - - - - - - - - - - - - - - - - - - - - - - -
                    AIRECEIPTS                    
 “Review PR #1054 on this repo (branch upstream…” 
    Codex · Jul 31 2026 08:39:52 UTC · 13m 46s    
            (unattributed usage) 100%             
         cache served 97% of input tokens         

(unattributed usage)......9,986,044 tok  (0 calls)
exec.............................0 tok  (67 calls)
exec_command.......................0 tok  (1 call)
list_projects.....................0 tok  (2 calls)
update_plan.......................0 tok  (4 calls)

caveat: Codex request envelopes did not reconcile — request-level pricing disabled
--------------------------------------------------
TOTAL................................9,986,044 tok
no price table matched
- - - - - - - - - - - - - - - - - - - - - - - - -
                npx aireceipts-cli                
         github.com/anandgupta42/receipts         
- - - - - - - - - - - - - - - - - - - - - - - - -
handoff — flagged pattern cost ≈ 9,625,079 tok
FLAGGED PATTERN COST...............≈ 9,625,079 tok
  heuristic pattern subtotal · not proven savings

≈ re-priced eligible trivial spans.......≈ $1.0034
  (22 tiny turns, priced at claude-haiku-4-5)
  → route short replies to a cheaper model

covers: 3 sessions · 711 turns · 1 flagged-pattern line

Generated by aireceipts

@github-actions

Copy link
Copy Markdown

👋 This PR was automatically closed by our quality checks.

Common reasons:

  • New GitHub account with limited contribution history
  • PR description doesn't meet our guidelines
  • Contribution appears to be AI-generated without meaningful review

If you believe this was a mistake, please open an issue explaining your intended contribution and a maintainer will help you.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2a7b44bc4e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread script/translate-app.ts

export function targetFiles(locale: Locale) {
return [
`packages/app/src/i18n/${locale}.ts`,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Point the translation command at existing packages

Running the newly added bun run translate:app -- <locale> command always fails during inspect(): every locale begins by importing packages/app/src/i18n/en.ts, but git ls-tree 034545d:packages confirms that packages/app, packages/ui, and packages/desktop are all absent from this commit (and the merge configuration explicitly skips them). Retarget this script to translation dictionaries that exist in the fork, or do not expose the command here.

Useful? React with 👍 / 👎.

return bind(hostname, 4096, password).pipe(Effect.catch(() => bind(hostname, 0, password)))
const next = (port: number): ReturnType<typeof bind> =>
bind(hostname, port, password).pipe(
Effect.catch((error) => (port === 65_535 ? Effect.fail(error) : next(port + 1))),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Retry serve only for occupied ports

When serve is started without an explicit port and bind fails for any reason other than an occupied port—for example, an invalid --hostname—this catch recursively retries every port from 4096 through 65535 instead of returning the original error promptly. Inspect the bind failure and advance to the next port only for EADDRINUSE; otherwise fail immediately.

Useful? React with 👍 / 👎.

Comment on lines +349 to +350
export async function mcpInstructions(agent: Agent.Info, permission?: PermissionV1.Ruleset) {
return runSystemPrompt((s) => s.mcp(agent, permission))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include MCP server instructions in the active system prompt

When a connected MCP server advertises usage instructions, this new facade computes them but no production caller invokes it: the active prompt builder in session/prompt.ts constructs its system array from SystemPrompt.environment, SystemPrompt.skills, local instructions, and reminders only. Consequently the model never receives the server-provided guidance; call this facade from that builder and pass the session permission rules so its visibility filtering is preserved.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant