This commit is contained in:
Dax Raad
2025-08-06 23:15:19 -04:00
parent 390b660c81
commit 323ce486a5
20 changed files with 303 additions and 534 deletions
+4 -8
View File
@@ -42,16 +42,12 @@ import { mergeDeep, pipe, splitWhen } from "remeda"
import { ToolRegistry } from "../tool/registry"
import { Plugin } from "../plugin"
import { Project } from "../project/project"
import { Context } from "../util/context"
import { State } from "../project/state"
import { Paths } from "../project/path"
export namespace Session {
const log = Log.create({ service: "session" })
const context = Context.create<Info>("session")
export const use = context.use
export const provide = context.provide
const OUTPUT_TOKEN_MAX = 32_000
const parentSessionTitlePrefix = "New session - "
@@ -135,8 +131,8 @@ export namespace Session {
),
}
const state = App.state(
"session",
const state = State.create(
() => Paths.directory,
() => {
const pending = new Map<string, AbortController>()
const autoCompacting = new Map<string, boolean>()
+44 -40
View File
@@ -1,7 +1,8 @@
import { App } from "../app/app"
import { Config } from "../config/config"
import z from "zod"
import { Provider } from "../provider/provider"
import { State } from "../project/state"
import { Paths } from "../project/path"
export namespace Mode {
export const Info = z
@@ -22,47 +23,50 @@ export namespace Mode {
ref: "Mode",
})
export type Info = z.infer<typeof Info>
const state = App.state("mode", async () => {
const cfg = await Config.get()
const model = cfg.model ? Provider.parseModel(cfg.model) : undefined
const result: Record<string, Info> = {
build: {
model,
name: "build",
tools: {},
},
plan: {
name: "plan",
model,
tools: {
write: false,
edit: false,
patch: false,
},
},
}
for (const [key, value] of Object.entries(cfg.mode ?? {})) {
if (value.disable) continue
let item = result[key]
if (!item)
item = result[key] = {
name: key,
const state = State.create(
() => Paths.directory,
async () => {
const cfg = await Config.get()
const model = cfg.model ? Provider.parseModel(cfg.model) : undefined
const result: Record<string, Info> = {
build: {
model,
name: "build",
tools: {},
}
item.name = key
if (value.model) item.model = Provider.parseModel(value.model)
if (value.prompt) item.prompt = value.prompt
if (value.temperature != undefined) item.temperature = value.temperature
if (value.top_p != undefined) item.topP = value.top_p
if (value.tools)
item.tools = {
...value.tools,
...item.tools,
}
}
},
plan: {
name: "plan",
model,
tools: {
write: false,
edit: false,
patch: false,
},
},
}
for (const [key, value] of Object.entries(cfg.mode ?? {})) {
if (value.disable) continue
let item = result[key]
if (!item)
item = result[key] = {
name: key,
tools: {},
}
item.name = key
if (value.model) item.model = Provider.parseModel(value.model)
if (value.prompt) item.prompt = value.prompt
if (value.temperature != undefined) item.temperature = value.temperature
if (value.top_p != undefined) item.topP = value.top_p
if (value.tools)
item.tools = {
...value.tools,
...item.tools,
}
}
return result
})
return result
},
)
export async function get(mode: string) {
return state().then((x) => x[mode])