refactor(core): support tiered layer nodes (#33937)

This commit is contained in:
James Long
2026-06-25 14:34:17 -04:00
committed by GitHub
parent 21b78c49fc
commit 0e731c2a1a
80 changed files with 1132 additions and 601 deletions
+14 -10
View File
@@ -599,15 +599,19 @@ export const defaultLayer = Layer.suspend(() =>
),
)
export const node = LayerNode.make(layer, [
Config.node,
Session.node,
Agent.node,
Plugin.node,
SessionProcessor.node,
Provider.node,
EventV2Bridge.node,
RuntimeFlags.node,
])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [
Config.node,
Session.node,
Agent.node,
Plugin.node,
SessionProcessor.node,
Provider.node,
EventV2Bridge.node,
RuntimeFlags.node,
],
})
export * as SessionCompaction from "./compaction"
+5 -1
View File
@@ -236,6 +236,10 @@ export function loaded(messages: SessionV1.WithParts[]) {
return extract(messages)
}
export const node = LayerNode.make(layer, [Config.node, FSUtil.node, Global.node, RuntimeFlags.node, httpClient])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [Config.node, FSUtil.node, Global.node, RuntimeFlags.node, httpClient],
})
export * as Instruction from "./instruction"
+14 -10
View File
@@ -401,15 +401,19 @@ export const defaultLayer = Layer.suspend(() =>
export const hasToolCalls = LLMRequestPrep.hasToolCalls
export const node = LayerNode.make(layer, [
Auth.node,
Config.node,
Provider.node,
Plugin.node,
Permission.node,
EventV2Bridge.node,
llmClient,
RuntimeFlags.node,
])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [
Auth.node,
Config.node,
Provider.node,
Plugin.node,
Permission.node,
EventV2Bridge.node,
llmClient,
RuntimeFlags.node,
],
})
export * as LLM from "./llm"
+19 -15
View File
@@ -1065,20 +1065,24 @@ export const defaultLayer = Layer.suspend(() =>
),
)
export const node = LayerNode.make(layer, [
Session.node,
Config.node,
Snapshot.node,
Agent.node,
LLM.node,
Permission.node,
Plugin.node,
SessionSummary.node,
SessionStatus.node,
Image.node,
EventV2Bridge.node,
RuntimeFlags.node,
Database.node,
])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [
Session.node,
Config.node,
Snapshot.node,
Agent.node,
LLM.node,
Permission.node,
Plugin.node,
SessionSummary.node,
SessionStatus.node,
Image.node,
EventV2Bridge.node,
RuntimeFlags.node,
Database.node,
],
})
export * as SessionProcessor from "./processor"
+32 -28
View File
@@ -1731,33 +1731,37 @@ const argsRegex = /(?:\[Image\s+\d+\]|"[^"]*"|'[^']*'|[^\s"']+)/gi
const placeholderRegex = /\$(\d+)/g
const quoteTrimRegex = /^["']|["']$/g
export const node = LayerNode.make(layer, [
SessionStatus.node,
Session.node,
Agent.node,
Provider.node,
SessionProcessor.node,
SessionCompaction.node,
Plugin.node,
Command.node,
Config.node,
Permission.node,
FSUtil.node,
MCP.node,
LSP.node,
ToolRegistry.node,
Truncate.node,
Image.node,
CrossSpawnSpawner.node,
Instruction.node,
SessionRunState.node,
SessionRevert.node,
SessionSummary.node,
SystemPrompt.node,
LLM.node,
EventV2Bridge.node,
RuntimeFlags.node,
Database.node,
])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [
SessionStatus.node,
Session.node,
Agent.node,
Provider.node,
SessionProcessor.node,
SessionCompaction.node,
Plugin.node,
Command.node,
Config.node,
Permission.node,
FSUtil.node,
MCP.node,
LSP.node,
ToolRegistry.node,
Truncate.node,
Image.node,
CrossSpawnSpawner.node,
Instruction.node,
SessionRunState.node,
SessionRevert.node,
SessionSummary.node,
SystemPrompt.node,
LLM.node,
EventV2Bridge.node,
RuntimeFlags.node,
Database.node,
],
})
export * as SessionPrompt from "./prompt"
+5 -8
View File
@@ -148,13 +148,10 @@ export const defaultLayer = Layer.suspend(() =>
),
)
export const node = LayerNode.make(layer, [
Session.node,
Snapshot.node,
Storage.node,
EventV2Bridge.node,
SessionSummary.node,
SessionRunState.node,
])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [Session.node, Snapshot.node, Storage.node, EventV2Bridge.node, SessionSummary.node, SessionRunState.node],
})
export * as SessionRevert from "./revert"
+1 -1
View File
@@ -151,6 +151,6 @@ function busyError(sessionID: SessionID) {
return new Session.BusyError({ sessionID })
}
export const node = LayerNode.make(layer, [BackgroundJob.node, SessionStatus.node])
export const node = LayerNode.make({ service: Service, layer: layer, deps: [BackgroundJob.node, SessionStatus.node] })
export * as SessionRunState from "./run-state"
+5 -1
View File
@@ -1070,6 +1070,10 @@ export function* listGlobal(input?: {
}
}
export const node = LayerNode.make(layer, [BackgroundJob.node, RuntimeFlags.node, Database.node, EventV2Bridge.node])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [BackgroundJob.node, RuntimeFlags.node, Database.node, EventV2Bridge.node],
})
export * as Session from "./session"
+1 -1
View File
@@ -53,6 +53,6 @@ export const layer = Layer.effect(
export const defaultLayer = layer.pipe(Layer.provide(EventV2Bridge.defaultLayer))
export const node = LayerNode.make(layer, [EventV2Bridge.node])
export const node = LayerNode.make({ service: Service, layer: layer, deps: [EventV2Bridge.node] })
export * as SessionStatus from "./status"
+5 -1
View File
@@ -160,6 +160,10 @@ export const DiffInput = Schema.Struct({
})
export type DiffInput = Schema.Schema.Type<typeof DiffInput>
export const node = LayerNode.make(layer, [Session.node, Snapshot.node, EventV2Bridge.node, Config.node])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [Session.node, Snapshot.node, EventV2Bridge.node, Config.node],
})
export * as SessionSummary from "./summary"
+6 -2
View File
@@ -134,8 +134,12 @@ export const defaultLayer = layer.pipe(
Layer.provide(LocationServiceMap.layer),
)
const locationServiceMapNode = LayerNode.make(LocationServiceMap.layer, [])
const locationServiceMapNode = LayerNode.make({ service: Service, layer: LocationServiceMap.layer, deps: [] })
export const node = LayerNode.make(layer, [Skill.node, MCP.node, locationServiceMapNode])
export const node = LayerNode.make({
service: Service,
layer: layer,
deps: [Skill.node, MCP.node, locationServiceMapNode],
})
export * as SystemPrompt from "./system"
+1 -1
View File
@@ -71,6 +71,6 @@ export const layer = Layer.effect(
export const defaultLayer = layer.pipe(Layer.provide(EventV2Bridge.defaultLayer), Layer.provide(Database.defaultLayer))
export const node = LayerNode.make(layer, [EventV2Bridge.node, Database.node])
export const node = LayerNode.make({ service: Service, layer: layer, deps: [EventV2Bridge.node, Database.node] })
export * as Todo from "./todo"