Dashboard › opencode › Distillation
32e4d9d3-57ce-4778-8ebd-4297cc7a3caf["lore_tm_v1_2pdq78_aZIgBBmQBdBHt3isOHk9-4WSsfviijI5dTsg","lore_tm_v1_hOi0SawZ7V9zRgtnQXzdWeAUQvZFllByksKPQB1iifE","lore_tm_v1_ypInlxKuUq2zG1gZdcYP_IiobOoUdwLfC1913auXzng","lore_tm_v1_HEAHlVwKXcxSK7sKDW6fkNOa0ylewN0YB89jBvbr9bs","lore_tm_v1_zAKeiZNeR4RwhOpYeryYHavUJp00OTif5bVAwcdyrVc","lore_tm_v1_cRDcjAf391Kqnv9MEuAc9ljgsEZdZcEFnVsUISMQzR0","lore_tm_v1_i0V5ms1SEOz6fnQ7LiW89oRgtjsiF__e8drtk4zwYOk","lore_tm_v1_m4dHIFmI7jP4_ixdkGLRuxiX0-8tcIIfsowAsdPCm30","lore_tm_v1_7euLrDOffdKDLXB_L9KxzY5a6ONRJnPHFkrVT_DiX44"]
/home/byk/.local/share/opencode-v2-pilot/config/opencode/opencode.json contains exactly 3 lines and only configures "$schema": "https://opencode.ai/config.json".synthetic-related matches across session code: packages/core/src/session/subagent-completion.ts:36; packages/core/src/session/sql.ts:15,109,134; packages/core/src/session/session.ts:23,198,222,299-300,316; packages/core/src/session/projector.ts:614,662; packages/core/src/session/message-updater.ts:144,149; packages/core/src/session/instructions.ts:70,74,104; packages/core/src/session/inbox.ts:14-15,37-38,52-53,99,101-102,137,139-140,304; packages/core/src/session/error.ts:91-92; packages/core/src/session/compaction.ts:291; packages/core/src/session/runner/llm.ts:280; and packages/core/src/session/execution/restart.ts:92,116.packages/core/src/session/session.ts:282-323 defines Session.synthetic(sessionID, input) with input fields id?: SessionMessage.ID, text: string, description?: string, metadata?: Record<string, unknown>, delivery?: SessionInbox.Delivery, and resume?: boolean. It runs uninterruptibly, verifies the session via get(sessionID), creates an ID with SessionMessage.ID.create() when absent, builds a "synthetic" SessionInbox.Item using SessionInbox.SyntheticPayload.make(), defaults delivery to "steer", and submits it through admission.admit().packages/core/src/session/session.ts:313-320 maps SessionInbox.LifecycleConflict during synthetic admission to SyntheticConflictError({ sessionID, inputID }); after admission it calls execution.wake(sessionID) unless input.resume === false or the session has a staged revert, then returns the admitted input.packages/plugin/src/promise/adapter.ts:576 exposes the Promise plugin session method with synthetic: adaptApiMethod(SessionEndpoints["session.synthetic"], host.session.synthetic).packages/plugin/src/promise/session.ts and packages/plugin/src/effect/session.ts.packages/plugin/src/promise/session.ts defines SessionRequestKind as "primary" | "compaction" | "title" | "generate" and defines SessionHooks keys prompt, context, "model.request", "http.request", "http.response", and retry.packages/plugin/src/promise/session.ts:85-102 defines SessionDomain as a Pick<SessionApi> containing, in order, "create", "get", "switchAgent", "switchModel", "prompt", "generate", "command", "synthetic", "interrupt", "rename", "move", "wait", and "context", plus readonly hook: ModelHooks<SessionHooks>.packages/core/src/session/message-updater.ts:142-153 projects "session.synthetic" events by calling adapter.appendMessage(SessionMessage.Synthetic.make(...)); the resulting message copies text, description, and metadata from event.data, derives id through SessionMessage.ID.fromEvent(event.id), sets type: "synthetic", and records time: { created }.packages/core/src/session/runner/to-llm-message.ts:257; packages/core/src/session/runner/llm.ts:280 directly publishes SessionEvent.Synthetic with { sessionID, text: CONTINUE_AFTER_INCOMPLETE_STREAM }.