Dashboard › opencode › Distillation
5beb731c-139d-4c83-a6e0-7b652cc59ab5["lore_tm_v1_ctImh8BHi6DOH1MMh4LVOj2S8C8MGDW1310GuKnlaUk","lore_tm_v1_sjSGI55VNoTK4Yz61fc6pHY6pcOXREjwoA7SCPE-Xuo","lore_tm_v1_T9R9dxMHo1dx7QrJP26KKdSSHVnAdycZ_Qr2PVBRViA","lore_tm_v1_tvV5yC4OQIStVu5TckpIHOK3wz7TwwLPnfD9LC_qKIU","lore_tm_v1_uWnk3r0C0NAS-IfGhTxBcDKN6A3ecQINnYPaDl7dzXg","lore_tm_v1_gobJIukhms7hmoInXYjLlr429CE71g2cCHEf2gfLla4","lore_tm_v1_fYjoSeF7NV-RaYEW7ULuScMwc4Ipiqvwzh-8v9m_5-I","lore_tm_v1_aoQRcXS8RCJKA98j19nDipEXHSOYMqNynzR1qp8xvj8","lore_tm_v1_bz1TymWiFgQbf3IADUvDQWvPai-b2_m1PdM0JT0ew4I","lore_tm_v1_W94ZWagX4vcNydnqwpJ9NcRyKpPxDTsoXe9D6fqywAM","lore_tm_v1_TFdaMc0QH6AsujsykL1jbJLRBoeIpOXPH2W_w6_-qUo"]
Date: Sep 17, 2026
sdk-next composes Client, Core, and Server.import { foo as bar } and renamed imports such as resolve as pathResolve are prohibited).import * as Foo and import type * as Foo are prohibited); namespace-style use should import a module’s own named exported namespace, e.g. import { Project } from "@opencode-ai/core/project" and reference Project.ID.bun typecheck from package directories such as packages/opencode, never tsc directly.do-not-run-tests-from-root guard; tests must run from package directories such as packages/opencode.packages/client/src/generated and packages/client/src/generated-effect must not be edited directly; after public Protocol or Server HttpApi changes, run bun run generate from packages/client; regenerate the legacy JavaScript SDK with ./packages/sdk/js/script/build.ts.dev as the default branch; local main may not exist, so diffs should use dev or origin/dev.feat/ or fix/; commit messages and PR titles use type(scope): summary with valid types feat, fix, docs, chore, refactor, and test.ab9408c81cc9916177641ae8e9f08624fc27b5b9 in detached-HEAD state, with 34 changed paths: 30 modified and 4 untracked.packages/core/src/database/migration/20260914170650_session-recovery.ts, packages/core/src/session/execution/claim.ts, packages/core/src/session/recovery-id.ts, and packages/core/src/session/recovery.ts.SessionV2.prompt(...) admits one durable session_input row before advisory SessionExecution.wake(sessionID), unless resume: false requests admit-only behavior; the serialized runner promotes admitted inputs at safe boundaries.SessionExecution to remain process-global and Session-ID based, while SessionRunner, model resolution, tool registry, permissions, and filesystem remain Location-scoped; interruption targets the active process-local ownership chain, and idle or missing interruption is a no-op.llm.stream(request) call per provider turn and reloading projected history before durable continuation; orchestration must not bridge through legacy SessionPrompt.loop(...) or an in-memory tool loop.SessionRunCoordinator joins explicit same-Session resumes, coalesces prompt wakeups, and permits different Sessions to run concurrently; advisory wakes only drain eligible durable inbox rows, while post-crash continuation recovery requires a separate explicit design.steer and promote at the next safe provider-turn boundary; explicit queue inputs remain pending until the Session would otherwise idle, then one queued input is promoted before continuation is reevaluated.@opencode-ai/schema, preserving dependency direction @opencode-ai/schema <- @opencode-ai/protocol <- @opencode-ai/server; runtime behavior, services, side effects, and host-local details remain in their owning domain packages.HttpApiBuilder.group(...); declared routes needing raw request/response use handleRaw(...); raw HttpRouter.use(...) is reserved for routes outside the declared API surface, such as catch-all UI fallback.