refactor(session): align namespace imports and inline trivial helpers (#30180)
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { SessionID, MessageID, PartID } from "./schema"
|
import { SessionID, MessageID, PartID } from "./schema"
|
||||||
import { Provider } from "@/provider/provider"
|
import { Provider } from "@/provider/provider"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import { Token } from "@/util/token"
|
import { Token } from "@/util/token"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { SessionProcessor } from "./processor"
|
import { SessionProcessor } from "./processor"
|
||||||
import { Agent } from "@/agent/agent"
|
import { Agent } from "@/agent/agent"
|
||||||
import { Plugin } from "@/plugin"
|
import { Plugin } from "@/plugin"
|
||||||
|
|||||||
@@ -12,12 +12,6 @@ import { Global } from "@opencode-ai/core/global"
|
|||||||
import type { MessageV2 } from "./message-v2"
|
import type { MessageV2 } from "./message-v2"
|
||||||
import type { MessageID } from "./schema"
|
import type { MessageID } from "./schema"
|
||||||
|
|
||||||
const files = (disableClaudeCodePrompt: boolean) => [
|
|
||||||
"AGENTS.md",
|
|
||||||
...(disableClaudeCodePrompt ? [] : ["CLAUDE.md"]),
|
|
||||||
"CONTEXT.md", // deprecated
|
|
||||||
]
|
|
||||||
|
|
||||||
function extract(messages: SessionLegacy.WithParts[]) {
|
function extract(messages: SessionLegacy.WithParts[]) {
|
||||||
const paths = new Set<string>()
|
const paths = new Set<string>()
|
||||||
for (const msg of messages) {
|
for (const msg of messages) {
|
||||||
@@ -65,7 +59,11 @@ export const layer: Layer.Layer<
|
|||||||
path.join(global.config, "AGENTS.md"),
|
path.join(global.config, "AGENTS.md"),
|
||||||
...(!flags.disableClaudeCodePrompt ? [path.join(global.home, ".claude", "CLAUDE.md")] : []),
|
...(!flags.disableClaudeCodePrompt ? [path.join(global.home, ".claude", "CLAUDE.md")] : []),
|
||||||
]
|
]
|
||||||
const instructionFiles = files(flags.disableClaudeCodePrompt)
|
const instructionFiles = [
|
||||||
|
"AGENTS.md",
|
||||||
|
...(!flags.disableClaudeCodePrompt ? ["CLAUDE.md"] : []),
|
||||||
|
"CONTEXT.md", // deprecated
|
||||||
|
]
|
||||||
|
|
||||||
const state = yield* InstanceState.make(
|
const state = yield* InstanceState.make(
|
||||||
Effect.fn("Instruction.state")(() =>
|
Effect.fn("Instruction.state")(() =>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Provider } from "@/provider/provider"
|
import { Provider } from "@/provider/provider"
|
||||||
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
||||||
import { serviceUse } from "@opencode-ai/core/effect/service-use"
|
import { serviceUse } from "@opencode-ai/core/effect/service-use"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { Context, Effect, Layer } from "effect"
|
import { Context, Effect, Layer } from "effect"
|
||||||
import * as Stream from "effect/Stream"
|
import * as Stream from "effect/Stream"
|
||||||
import { streamText, wrapLanguageModel, type ModelMessage, type Tool } from "ai"
|
import { streamText, wrapLanguageModel, type ModelMessage, type Tool } from "ai"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import { inArray } from "drizzle-orm"
|
|||||||
import { lt } from "drizzle-orm"
|
import { lt } from "drizzle-orm"
|
||||||
import { or } from "drizzle-orm"
|
import { or } from "drizzle-orm"
|
||||||
import { MessageTable, PartTable, SessionTable } from "@opencode-ai/core/session/sql"
|
import { MessageTable, PartTable, SessionTable } from "@opencode-ai/core/session/sql"
|
||||||
import * as ProviderError from "@/provider/error"
|
import { ProviderError } from "@/provider/error"
|
||||||
import { iife } from "@/util/iife"
|
import { iife } from "@/util/iife"
|
||||||
import { errorMessage } from "@/util/error"
|
import { errorMessage } from "@/util/error"
|
||||||
import { isMedia } from "@/util/media"
|
import { isMedia } from "@/util/media"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Config } from "@/config/config"
|
|||||||
import { Permission } from "@/permission"
|
import { Permission } from "@/permission"
|
||||||
import { Plugin } from "@/plugin"
|
import { Plugin } from "@/plugin"
|
||||||
import { Snapshot } from "@/snapshot"
|
import { Snapshot } from "@/snapshot"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { LLM } from "./llm"
|
import { LLM } from "./llm"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import { isOverflow } from "./overflow"
|
import { isOverflow } from "./overflow"
|
||||||
@@ -19,7 +19,7 @@ import { SessionSummary } from "./summary"
|
|||||||
import type { Provider } from "@/provider/provider"
|
import type { Provider } from "@/provider/provider"
|
||||||
import { Question } from "@/question"
|
import { Question } from "@/question"
|
||||||
import { errorMessage } from "@/util/error"
|
import { errorMessage } from "@/util/error"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { isRecord } from "@/util/record"
|
import { isRecord } from "@/util/record"
|
||||||
import { EventV2Bridge } from "@/event-v2-bridge"
|
import { EventV2Bridge } from "@/event-v2-bridge"
|
||||||
import { Database } from "@opencode-ai/core/database/database"
|
import { Database } from "@opencode-ai/core/database/database"
|
||||||
@@ -301,8 +301,6 @@ export const layer = Layer.effect(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const toolInput = (value: unknown): Record<string, any> => (isRecord(value) ? value : { value })
|
|
||||||
|
|
||||||
const handleEvent = Effect.fnUntraced(function* (value: StreamEvent) {
|
const handleEvent = Effect.fnUntraced(function* (value: StreamEvent) {
|
||||||
switch (value.type) {
|
switch (value.type) {
|
||||||
case "reasoning-start":
|
case "reasoning-start":
|
||||||
@@ -380,7 +378,7 @@ export const layer = Layer.effect(
|
|||||||
throw new Error(`Tool call not allowed while generating summary: ${value.name}`)
|
throw new Error(`Tool call not allowed while generating summary: ${value.name}`)
|
||||||
}
|
}
|
||||||
const toolCall = yield* ensureToolCall(value)
|
const toolCall = yield* ensureToolCall(value)
|
||||||
const input = toolInput(value.input)
|
const input = isRecord(value.input) ? value.input : { value: value.input }
|
||||||
if (!toolCall.call.inputEnded) {
|
if (!toolCall.call.inputEnded) {
|
||||||
// TODO(v2): Temporary dual-write while migrating session messages to v2 events.
|
// TODO(v2): Temporary dual-write while migrating session messages to v2 events.
|
||||||
if (flags.experimentalEventSystem) {
|
if (flags.experimentalEventSystem) {
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
|||||||
import os from "os"
|
import os from "os"
|
||||||
import { SessionID, MessageID, PartID } from "./schema"
|
import { SessionID, MessageID, PartID } from "./schema"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { SessionRevert } from "./revert"
|
import { SessionRevert } from "./revert"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { Agent } from "../agent/agent"
|
import { Agent } from "../agent/agent"
|
||||||
import { Provider } from "@/provider/provider"
|
import { Provider } from "@/provider/provider"
|
||||||
|
|
||||||
@@ -148,10 +148,6 @@ export const layer = Layer.effect(
|
|||||||
const parts: Types.DeepMutable<PromptInput["parts"]> = [{ type: "text", text: template }]
|
const parts: Types.DeepMutable<PromptInput["parts"]> = [{ type: "text", text: template }]
|
||||||
const files = ConfigMarkdown.files(template)
|
const files = ConfigMarkdown.files(template)
|
||||||
const seen = new Set<string>()
|
const seen = new Set<string>()
|
||||||
const mentionSource = (match: RegExpMatchArray) => {
|
|
||||||
const start = match.index ?? 0
|
|
||||||
return { value: match[0], start, end: start + match[0].length }
|
|
||||||
}
|
|
||||||
yield* Effect.forEach(
|
yield* Effect.forEach(
|
||||||
files,
|
files,
|
||||||
Effect.fnUntraced(function* (match) {
|
Effect.fnUntraced(function* (match) {
|
||||||
@@ -164,7 +160,8 @@ export const layer = Layer.effect(
|
|||||||
const alias = slash === -1 ? name : name.slice(0, slash)
|
const alias = slash === -1 ? name : name.slice(0, slash)
|
||||||
const reference = yield* references.get(alias)
|
const reference = yield* references.get(alias)
|
||||||
if (reference) {
|
if (reference) {
|
||||||
const source = mentionSource(match)
|
const start = match.index ?? 0
|
||||||
|
const source = { value: match[0], start, end: start + match[0].length }
|
||||||
if (reference.kind === "invalid") {
|
if (reference.kind === "invalid") {
|
||||||
parts.push(
|
parts.push(
|
||||||
referenceTextPart({ reference, source, target: slash === -1 ? undefined : name.slice(slash + 1) }),
|
referenceTextPart({ reference, source, target: slash === -1 ? undefined : name.slice(slash + 1) }),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { InstanceState } from "@/effect/instance-state"
|
|||||||
import { RuntimeFlags } from "@/effect/runtime-flags"
|
import { RuntimeFlags } from "@/effect/runtime-flags"
|
||||||
import { PartID } from "./schema"
|
import { PartID } from "./schema"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import PROMPT_PLAN from "./prompt/plan.txt"
|
import PROMPT_PLAN from "./prompt/plan.txt"
|
||||||
import BUILD_SWITCH from "./prompt/build-switch.txt"
|
import BUILD_SWITCH from "./prompt/build-switch.txt"
|
||||||
import PLAN_MODE from "./prompt/plan-mode.txt"
|
import PLAN_MODE from "./prompt/plan-mode.txt"
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
|||||||
import { EventV2Bridge } from "@/event-v2-bridge"
|
import { EventV2Bridge } from "@/event-v2-bridge"
|
||||||
import { Snapshot } from "../snapshot"
|
import { Snapshot } from "../snapshot"
|
||||||
import { Storage } from "@/storage/storage"
|
import { Storage } from "@/storage/storage"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import { SessionID, MessageID, PartID } from "./schema"
|
import { SessionID, MessageID, PartID } from "./schema"
|
||||||
import { SessionRunState } from "./run-state"
|
import { SessionRunState } from "./run-state"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
|||||||
import { Runner } from "@/effect/runner"
|
import { Runner } from "@/effect/runner"
|
||||||
import { BackgroundJob } from "@/background/job"
|
import { BackgroundJob } from "@/background/job"
|
||||||
import { Effect, Latch, Layer, Scope, Context } from "effect"
|
import { Effect, Latch, Layer, Scope, Context } from "effect"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import { SessionID } from "./schema"
|
import { SessionID } from "./schema"
|
||||||
import { SessionStatus } from "./status"
|
import { SessionStatus } from "./status"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import { or } from "drizzle-orm"
|
|||||||
import type { SQL } from "drizzle-orm"
|
import type { SQL } from "drizzle-orm"
|
||||||
import { PartTable, SessionTable } from "@opencode-ai/core/session/sql"
|
import { PartTable, SessionTable } from "@opencode-ai/core/session/sql"
|
||||||
import { ProjectTable } from "@opencode-ai/core/project/sql"
|
import { ProjectTable } from "@opencode-ai/core/project/sql"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import type { InstanceContext } from "../project/instance-context"
|
import type { InstanceContext } from "../project/instance-context"
|
||||||
import { InstanceState } from "@/effect/instance-state"
|
import { InstanceState } from "@/effect/instance-state"
|
||||||
@@ -48,10 +48,6 @@ const runtime = makeRuntime(Database.Service, Database.defaultLayer)
|
|||||||
const parentTitlePrefix = "New session - "
|
const parentTitlePrefix = "New session - "
|
||||||
const childTitlePrefix = "Child session - "
|
const childTitlePrefix = "Child session - "
|
||||||
|
|
||||||
function createDefaultTitle(isChild = false) {
|
|
||||||
return (isChild ? childTitlePrefix : parentTitlePrefix) + new Date().toISOString()
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isDefaultTitle(title: string) {
|
export function isDefaultTitle(title: string) {
|
||||||
return new RegExp(
|
return new RegExp(
|
||||||
`^(${parentTitlePrefix}|${childTitlePrefix})\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$`,
|
`^(${parentTitlePrefix}|${childTitlePrefix})\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$`,
|
||||||
@@ -581,7 +577,7 @@ export const layer: Layer.Layer<
|
|||||||
path: input.path,
|
path: input.path,
|
||||||
workspaceID: input.workspaceID,
|
workspaceID: input.workspaceID,
|
||||||
parentID: input.parentID,
|
parentID: input.parentID,
|
||||||
title: input.title ?? createDefaultTitle(!!input.parentID),
|
title: input.title ?? (input.parentID ? childTitlePrefix : parentTitlePrefix) + new Date().toISOString(),
|
||||||
agent: input.agent,
|
agent: input.agent,
|
||||||
model: input.model,
|
model: input.model,
|
||||||
metadata: input.metadata,
|
metadata: input.metadata,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Effect, Layer, Context, Schema } from "effect"
|
|||||||
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
import { SessionLegacy } from "@opencode-ai/core/session/legacy"
|
||||||
import { EventV2Bridge } from "@/event-v2-bridge"
|
import { EventV2Bridge } from "@/event-v2-bridge"
|
||||||
import { Snapshot } from "@/snapshot"
|
import { Snapshot } from "@/snapshot"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { SessionID, MessageID } from "./schema"
|
import { SessionID, MessageID } from "./schema"
|
||||||
import { Config } from "@/config/config"
|
import { Config } from "@/config/config"
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import type { TaskPromptOps } from "@/tool/task"
|
|||||||
import { type Tool as AITool, tool, jsonSchema, type ToolExecutionOptions, asSchema } from "ai"
|
import { type Tool as AITool, tool, jsonSchema, type ToolExecutionOptions, asSchema } from "ai"
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import * as Session from "./session"
|
import { Session } from "./session"
|
||||||
import { SessionProcessor } from "./processor"
|
import { SessionProcessor } from "./processor"
|
||||||
import { PartID } from "./schema"
|
import { PartID } from "./schema"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import { Log } from "@opencode-ai/core/util/log"
|
||||||
import { EffectBridge } from "@/effect/bridge"
|
import { EffectBridge } from "@/effect/bridge"
|
||||||
import { ProviderV2 } from "@opencode-ai/core/provider"
|
import { ProviderV2 } from "@opencode-ai/core/provider"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user