@lota-sdk/core 0.4.9 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/package.json +2 -2
  2. package/src/ai/embedding-cache.ts +3 -1
  3. package/src/ai-gateway/ai-gateway.ts +164 -82
  4. package/src/ai-gateway/index.ts +16 -1
  5. package/src/config/agent-defaults.ts +4 -107
  6. package/src/config/agent-types.ts +1 -1
  7. package/src/config/background-processing.ts +1 -1
  8. package/src/config/index.ts +0 -1
  9. package/src/config/logger.ts +22 -25
  10. package/src/config/thread-defaults.ts +1 -10
  11. package/src/create-runtime.ts +145 -670
  12. package/src/db/base.service.ts +30 -38
  13. package/src/db/memory-query-builder.ts +2 -1
  14. package/src/db/memory-store.ts +29 -20
  15. package/src/db/memory.ts +188 -195
  16. package/src/db/service-normalization.ts +97 -64
  17. package/src/db/service.ts +496 -384
  18. package/src/db/startup.ts +30 -19
  19. package/src/effect/helpers.ts +30 -5
  20. package/src/effect/index.ts +7 -7
  21. package/src/effect/layers.ts +75 -72
  22. package/src/effect/services.ts +15 -11
  23. package/src/embeddings/provider.ts +65 -71
  24. package/src/index.ts +13 -12
  25. package/src/queues/autonomous-job.queue.ts +177 -143
  26. package/src/queues/context-compaction.queue.ts +41 -39
  27. package/src/queues/delayed-node-promotion.queue.ts +61 -42
  28. package/src/queues/document-processor.queue.ts +5 -3
  29. package/src/queues/index.ts +1 -0
  30. package/src/queues/memory-consolidation.queue.ts +79 -53
  31. package/src/queues/organization-learning.queue.ts +70 -33
  32. package/src/queues/plan-agent-heartbeat.queue.ts +111 -83
  33. package/src/queues/plan-scheduler.queue.ts +101 -97
  34. package/src/queues/post-chat-memory.queue.ts +56 -46
  35. package/src/queues/queue-factory.ts +146 -69
  36. package/src/queues/queues.service.ts +61 -0
  37. package/src/queues/title-generation.queue.ts +44 -44
  38. package/src/redis/connection.ts +181 -164
  39. package/src/redis/org-memory-lock.ts +24 -9
  40. package/src/redis/redis-lease-lock.ts +8 -1
  41. package/src/redis/stream-context.ts +17 -9
  42. package/src/runtime/agent-identity-overrides.ts +7 -3
  43. package/src/runtime/agent-runtime-policy.ts +10 -5
  44. package/src/runtime/agent-stream-helpers.ts +24 -15
  45. package/src/runtime/chat-run-orchestration.ts +1 -1
  46. package/src/runtime/context-compaction/context-compaction-runtime.ts +28 -32
  47. package/src/runtime/context-compaction/context-compaction.ts +131 -85
  48. package/src/runtime/domain-layer.ts +203 -0
  49. package/src/runtime/execution-plan-visibility.ts +5 -2
  50. package/src/runtime/graph-designer.ts +0 -14
  51. package/src/runtime/helper-model.ts +8 -4
  52. package/src/runtime/index.ts +1 -1
  53. package/src/runtime/indexed-repositories-policy.ts +2 -6
  54. package/src/runtime/memory/memory-block.ts +19 -9
  55. package/src/runtime/memory/memory-pipeline.ts +53 -66
  56. package/src/runtime/memory/memory-scope.ts +33 -29
  57. package/src/runtime/plugin-resolution.ts +58 -62
  58. package/src/runtime/post-turn-side-effects.ts +139 -161
  59. package/src/runtime/retrieval-adapters.ts +4 -4
  60. package/src/runtime/runtime-config.ts +3 -9
  61. package/src/runtime/runtime-extensions.ts +0 -43
  62. package/src/runtime/runtime-lifecycle.ts +124 -0
  63. package/src/runtime/runtime-services.ts +455 -0
  64. package/src/runtime/runtime-worker-registry.ts +113 -30
  65. package/src/runtime/social-chat/social-chat-agent-runner.ts +13 -8
  66. package/src/runtime/social-chat/social-chat-history.ts +24 -13
  67. package/src/runtime/social-chat/social-chat.ts +420 -369
  68. package/src/runtime/team-consultation/team-consultation-orchestrator.ts +64 -57
  69. package/src/runtime/team-consultation/team-consultation-prompts.ts +11 -6
  70. package/src/runtime/thread-chat-helpers.ts +18 -9
  71. package/src/runtime/thread-turn-context.ts +28 -74
  72. package/src/runtime/turn-lifecycle.ts +6 -14
  73. package/src/services/agent-activity.service.ts +169 -176
  74. package/src/services/agent-executor.service.ts +207 -196
  75. package/src/services/artifact.service.ts +10 -5
  76. package/src/services/attachment.service.ts +16 -48
  77. package/src/services/autonomous-job.service.ts +81 -87
  78. package/src/services/background-work.service.ts +54 -0
  79. package/src/services/chat-run-registry.service.ts +3 -1
  80. package/src/services/context-compaction.service.ts +8 -10
  81. package/src/services/document-chunk.service.ts +8 -17
  82. package/src/services/execution-plan/execution-plan-graph.ts +122 -109
  83. package/src/services/execution-plan/execution-plan-schedule.ts +1 -15
  84. package/src/services/execution-plan/execution-plan.service.ts +68 -51
  85. package/src/services/feedback-loop.service.ts +1 -1
  86. package/src/services/global-orchestrator.service.ts +49 -15
  87. package/src/services/graph-full-routing.ts +49 -37
  88. package/src/services/index.ts +1 -0
  89. package/src/services/institutional-memory.service.ts +8 -17
  90. package/src/services/learned-skill.service.ts +38 -35
  91. package/src/services/memory/memory-conversation.ts +10 -5
  92. package/src/services/memory/memory-errors.ts +27 -0
  93. package/src/services/memory/memory-org-memory.ts +14 -3
  94. package/src/services/memory/memory-preseeded.ts +10 -4
  95. package/src/services/memory/memory-utils.ts +2 -1
  96. package/src/services/memory/memory.service.ts +37 -52
  97. package/src/services/memory/rerank.service.ts +3 -11
  98. package/src/services/monitoring-window.service.ts +1 -1
  99. package/src/services/mutating-approval.service.ts +1 -1
  100. package/src/services/node-workspace.service.ts +2 -2
  101. package/src/services/notification.service.ts +16 -4
  102. package/src/services/organization-member.service.ts +1 -1
  103. package/src/services/organization.service.ts +34 -51
  104. package/src/services/ownership-dispatcher.service.ts +148 -95
  105. package/src/services/plan/plan-agent-heartbeat.service.ts +30 -16
  106. package/src/services/plan/plan-agent-query.service.ts +13 -9
  107. package/src/services/plan/plan-approval.service.ts +52 -48
  108. package/src/services/plan/plan-artifact.service.ts +2 -2
  109. package/src/services/plan/plan-builder.service.ts +2 -2
  110. package/src/services/plan/plan-checkpoint.service.ts +1 -1
  111. package/src/services/plan/plan-compiler.service.ts +1 -1
  112. package/src/services/plan/plan-completion-side-effects.ts +99 -113
  113. package/src/services/plan/plan-coordination.service.ts +1 -1
  114. package/src/services/plan/plan-cycle.service.ts +171 -202
  115. package/src/services/plan/plan-deadline.service.ts +304 -307
  116. package/src/services/plan/plan-event-delivery.service.ts +84 -72
  117. package/src/services/plan/plan-executor-context.ts +2 -0
  118. package/src/services/plan/plan-executor-graph.ts +375 -353
  119. package/src/services/plan/plan-executor-helpers.ts +60 -75
  120. package/src/services/plan/plan-executor.service.ts +494 -489
  121. package/src/services/plan/plan-run.service.ts +12 -19
  122. package/src/services/plan/plan-scheduler.service.ts +89 -82
  123. package/src/services/plan/plan-template.service.ts +1 -1
  124. package/src/services/plan/plan-transaction-events.ts +8 -5
  125. package/src/services/plan/plan-validator.service.ts +1 -1
  126. package/src/services/plan/plan-workspace.service.ts +17 -11
  127. package/src/services/plugin-executor.service.ts +26 -21
  128. package/src/services/quality-metrics.service.ts +1 -1
  129. package/src/services/queue-job.service.ts +8 -17
  130. package/src/services/recent-activity-title.service.ts +22 -10
  131. package/src/services/recent-activity.service.ts +1 -1
  132. package/src/services/skill-resolver.service.ts +1 -1
  133. package/src/services/social-chat-history.service.ts +37 -20
  134. package/src/services/system-executor.service.ts +25 -20
  135. package/src/services/thread/thread-bootstrap.ts +37 -19
  136. package/src/services/thread/thread-listing.ts +2 -1
  137. package/src/services/thread/thread-memory-block.ts +18 -5
  138. package/src/services/thread/thread-message.service.ts +30 -13
  139. package/src/services/thread/thread-title.service.ts +1 -1
  140. package/src/services/thread/thread-turn-execution.ts +87 -83
  141. package/src/services/thread/thread-turn-preparation.service.ts +65 -40
  142. package/src/services/thread/thread-turn-streaming.ts +32 -36
  143. package/src/services/thread/thread-turn.ts +43 -29
  144. package/src/services/thread/thread.service.ts +32 -8
  145. package/src/services/user.service.ts +1 -1
  146. package/src/services/write-intent-validator.service.ts +1 -1
  147. package/src/storage/attachment-storage.service.ts +7 -4
  148. package/src/storage/generated-document-storage.service.ts +1 -1
  149. package/src/system-agents/context-compaction.agent.ts +1 -1
  150. package/src/system-agents/helper-agent-options.ts +1 -1
  151. package/src/system-agents/memory-reranker.agent.ts +1 -1
  152. package/src/system-agents/memory.agent.ts +1 -1
  153. package/src/system-agents/recent-activity-title-refiner.agent.ts +9 -6
  154. package/src/system-agents/regular-chat-memory-digest.agent.ts +1 -1
  155. package/src/system-agents/skill-extractor.agent.ts +1 -1
  156. package/src/system-agents/skill-manager.agent.ts +1 -1
  157. package/src/system-agents/thread-router.agent.ts +23 -20
  158. package/src/system-agents/title-generator.agent.ts +1 -1
  159. package/src/tools/execution-plan.tool.ts +36 -20
  160. package/src/tools/fetch-webpage.tool.ts +30 -22
  161. package/src/tools/firecrawl-client.ts +1 -6
  162. package/src/tools/plan-approval.tool.ts +9 -1
  163. package/src/tools/remember-memory.tool.ts +3 -6
  164. package/src/tools/research-topic.tool.ts +12 -3
  165. package/src/tools/search-web.tool.ts +26 -18
  166. package/src/tools/search.tool.ts +4 -5
  167. package/src/tools/team-think.tool.ts +139 -121
  168. package/src/utils/async.ts +15 -6
  169. package/src/utils/errors.ts +27 -15
  170. package/src/workers/bootstrap.ts +34 -58
  171. package/src/workers/memory-consolidation.worker.ts +4 -1
  172. package/src/workers/organization-learning.worker.ts +16 -3
  173. package/src/workers/regular-chat-memory-digest.helpers.ts +3 -4
  174. package/src/workers/regular-chat-memory-digest.runner.ts +46 -29
  175. package/src/workers/skill-extraction.runner.ts +13 -15
  176. package/src/workers/worker-utils.ts +14 -8
  177. package/src/config/search.ts +0 -3
  178. package/src/effect/awaitable-effect.ts +0 -87
  179. package/src/effect/runtime-ref.ts +0 -25
  180. package/src/effect/runtime.ts +0 -31
  181. package/src/redis/runtime-connection.ts +0 -10
  182. package/src/runtime/agent-types.ts +0 -1
@@ -1,15 +1,21 @@
1
1
  import type { PlanEventRecord } from '@lota-sdk/shared'
2
2
  import { Context, Schema, Effect, Layer } from 'effect'
3
3
 
4
+ import type { ResolvedAgentConfig } from '../../config/agent-defaults'
4
5
  import { ensureRecordId, recordIdToString } from '../../db/record-id'
5
6
  import type { SurrealDBService } from '../../db/service'
6
7
  import { TABLES } from '../../db/tables'
7
- import { runPromise } from '../../effect/runtime'
8
- import { DatabaseServiceTag, RedisServiceTag } from '../../effect/services'
8
+ import {
9
+ AgentConfigServiceTag,
10
+ DatabaseServiceTag,
11
+ RedisServiceTag,
12
+ RuntimeAdaptersServiceTag,
13
+ } from '../../effect/services'
14
+ import type { PlanAgentHeartbeatQueueRuntime } from '../../queues/plan-agent-heartbeat.queue'
15
+ import { LotaQueuesServiceTag } from '../../queues/queues.service'
9
16
  import type { RedisConnectionManager } from '../../redis/connection'
10
17
  import { resolvePlanNodeExecutionVisibility } from '../../runtime/execution-plan-visibility'
11
- import { getRuntimeAdapters } from '../../runtime/runtime-extensions'
12
- import type { LotaRuntimePlanEventEnvelope } from '../../runtime/runtime-extensions'
18
+ import type { LotaRuntimeAdapters, LotaRuntimePlanEventEnvelope } from '../../runtime/runtime-extensions'
13
19
  import { getErrorMessage } from '../../utils/errors'
14
20
  import { ThreadSchema } from '../thread/thread.types'
15
21
  import type { makeUserService } from '../user.service'
@@ -28,19 +34,22 @@ function buildDeliveredKey(eventId: string): string {
28
34
  return `plan-event:delivered:${eventId}`
29
35
  }
30
36
 
31
- function dispatchAdapterEvent(envelope: LotaRuntimePlanEventEnvelope) {
32
- const adapter = getRuntimeAdapters().planEventAdapter
33
- if (!adapter) {
34
- return Effect.void
35
- }
37
+ function dispatchAdapterEvent(runtimeAdapters: LotaRuntimeAdapters, envelope: LotaRuntimePlanEventEnvelope) {
38
+ return Effect.gen(function* () {
39
+ const adapter = runtimeAdapters.planEventAdapter
40
+ if (!adapter) {
41
+ return
42
+ }
36
43
 
37
- return Effect.tryPromise({
38
- try: () => adapter.onPlanEvent(envelope),
39
- catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
44
+ yield* Effect.tryPromise({
45
+ try: () => adapter.onPlanEvent(envelope),
46
+ catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
47
+ })
40
48
  })
41
49
  }
42
50
 
43
51
  function resolveWakeTarget(
52
+ agentConfig: ResolvedAgentConfig,
44
53
  envelope: LotaRuntimePlanEventEnvelope,
45
54
  nodeSpecsById: Map<string, NonNullable<LotaRuntimePlanEventEnvelope['nodeSpec']>>,
46
55
  ): { nodeId: string; agentId: string; reason: string } | null {
@@ -55,7 +64,7 @@ function resolveWakeTarget(
55
64
  return null
56
65
  }
57
66
 
58
- const isVisible = resolvePlanNodeExecutionVisibility(envelope.spec, effectiveNodeSpec) === 'visible'
67
+ const isVisible = resolvePlanNodeExecutionVisibility(agentConfig, envelope.spec, effectiveNodeSpec) === 'visible'
59
68
  if (!isVisible) {
60
69
  return null
61
70
  }
@@ -76,22 +85,20 @@ function resolveWakeTarget(
76
85
  }
77
86
 
78
87
  function enqueueWakeIfNeeded(
88
+ agentConfig: ResolvedAgentConfig,
79
89
  envelope: LotaRuntimePlanEventEnvelope,
80
90
  nodeSpecsById: Map<string, NonNullable<LotaRuntimePlanEventEnvelope['nodeSpec']>>,
91
+ planAgentHeartbeatQueue: PlanAgentHeartbeatQueueRuntime,
81
92
  ) {
82
93
  return Effect.gen(function* () {
83
- const wakeTarget = resolveWakeTarget(envelope, nodeSpecsById)
94
+ const wakeTarget = resolveWakeTarget(agentConfig, envelope, nodeSpecsById)
84
95
  if (!wakeTarget) {
85
96
  return
86
97
  }
87
98
 
88
- const { enqueuePlanAgentHeartbeatWake } = yield* Effect.tryPromise({
89
- try: () => import('../../queues/plan-agent-heartbeat.queue'),
90
- catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
91
- })
92
99
  yield* Effect.tryPromise({
93
100
  try: () =>
94
- enqueuePlanAgentHeartbeatWake({
101
+ planAgentHeartbeatQueue.enqueuePlanAgentHeartbeatWake({
95
102
  organizationId: envelope.organizationId,
96
103
  threadId: envelope.threadId,
97
104
  runId: envelope.runId,
@@ -105,14 +112,17 @@ function enqueueWakeIfNeeded(
105
112
  }
106
113
 
107
114
  interface PlanEventDeliveryDeps {
115
+ agentConfig: ResolvedAgentConfig
108
116
  db: SurrealDBService
109
117
  redis: RedisConnectionManager
110
118
  planRunService: ReturnType<typeof makePlanRunService>
111
119
  userService: ReturnType<typeof makeUserService>
120
+ planAgentHeartbeatQueue: PlanAgentHeartbeatQueueRuntime
121
+ runtimeAdapters: LotaRuntimeAdapters
112
122
  }
113
123
 
114
124
  export function makePlanEventDeliveryService(deps: PlanEventDeliveryDeps) {
115
- const { db, redis, planRunService, userService } = deps
125
+ const { agentConfig, db, redis, planRunService, userService, planAgentHeartbeatQueue, runtimeAdapters } = deps
116
126
 
117
127
  function deliverEvent(event: PlanEventRecord) {
118
128
  return Effect.gen(function* () {
@@ -182,80 +192,82 @@ export function makePlanEventDeliveryService(deps: PlanEventDeliveryDeps) {
182
192
  ...(userName ? { userName } : {}),
183
193
  }
184
194
 
185
- yield* dispatchAdapterEvent(envelope)
186
- yield* enqueueWakeIfNeeded(envelope, nodeSpecsById)
195
+ yield* dispatchAdapterEvent(runtimeAdapters, envelope)
196
+ yield* enqueueWakeIfNeeded(agentConfig, envelope, nodeSpecsById, planAgentHeartbeatQueue)
187
197
  })
188
198
  }
189
199
 
190
- function dispatchEventEffect(event: PlanEventRecord) {
191
- return Effect.gen(function* () {
192
- const eventId = recordIdToString(event.id, TABLES.PLAN_EVENT)
193
- const deliveredKey = buildDeliveredKey(eventId)
194
- const exists = yield* Effect.tryPromise({
195
- try: () => redis.getConnection().exists(deliveredKey),
196
- catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
197
- })
198
- if (exists) {
199
- return
200
- }
201
-
202
- yield* deliverEvent(event)
203
- yield* Effect.tryPromise({
204
- try: () => redis.getConnection().set(deliveredKey, '1', 'PX', PLAN_EVENT_DELIVERED_TTL_MS),
205
- catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
206
- })
200
+ const dispatchEventEffect = Effect.fn('PlanEventDelivery.dispatchEvent')(function* (event: PlanEventRecord) {
201
+ const eventId = recordIdToString(event.id, TABLES.PLAN_EVENT)
202
+ const deliveredKey = buildDeliveredKey(eventId)
203
+ const exists = yield* Effect.tryPromise({
204
+ try: () => redis.getConnection().exists(deliveredKey),
205
+ catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
207
206
  })
208
- }
209
-
210
- function dispatchUndeliveredEventsEffect(runId: string, options?: { limit?: number }) {
211
- return Effect.gen(function* () {
212
- const run = yield* planRunService
213
- .getRunById(runId)
214
- .pipe(Effect.mapError((error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error })))
215
- const events = yield* planRunService
216
- .listEvents(run.id, options?.limit ?? 200)
217
- .pipe(Effect.mapError((error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error })))
207
+ if (exists) {
208
+ return
209
+ }
218
210
 
219
- for (const event of events) {
220
- yield* dispatchEventEffect(event)
221
- }
211
+ yield* deliverEvent(event)
212
+ yield* Effect.tryPromise({
213
+ try: () => redis.getConnection().set(deliveredKey, '1', 'PX', PLAN_EVENT_DELIVERED_TTL_MS),
214
+ catch: (error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error }),
222
215
  })
223
- }
216
+ })
224
217
 
225
- return {
226
- dispatchEvents(events: PlanEventRecord[]): Promise<void> {
227
- return runPromise(
228
- Effect.gen(function* () {
229
- const runIds = new Set(events.map((event) => recordIdToString(event.runId, TABLES.PLAN_RUN)))
230
- for (const runId of runIds) {
231
- yield* dispatchUndeliveredEventsEffect(runId)
232
- }
233
- }),
234
- )
235
- },
218
+ const dispatchUndeliveredEventsEffect = Effect.fn('PlanEventDelivery.dispatchUndeliveredEvents')(function* (
219
+ runId: string,
220
+ options?: { limit?: number },
221
+ ) {
222
+ const run = yield* planRunService
223
+ .getRunById(runId)
224
+ .pipe(Effect.mapError((error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error })))
225
+ const events = yield* planRunService
226
+ .listEvents(run.id, options?.limit ?? 200)
227
+ .pipe(Effect.mapError((error) => new PlanEventDeliveryError({ message: getErrorMessage(error), cause: error })))
228
+
229
+ for (const event of events) {
230
+ yield* dispatchEventEffect(event)
231
+ }
232
+ })
236
233
 
237
- dispatchEvent(event: PlanEventRecord): Promise<void> {
238
- return runPromise(dispatchEventEffect(event))
239
- },
234
+ const dispatchEventsEffect = Effect.fn('PlanEventDelivery.dispatchEvents')(function* (events: PlanEventRecord[]) {
235
+ const runIds = new Set(events.map((event) => recordIdToString(event.runId, TABLES.PLAN_RUN)))
236
+ for (const runId of runIds) {
237
+ yield* dispatchUndeliveredEventsEffect(runId)
238
+ }
239
+ })
240
240
 
241
- dispatchUndeliveredEvents(runId: string, options?: { limit?: number }): Promise<void> {
242
- return runPromise(dispatchUndeliveredEventsEffect(runId, options))
243
- },
241
+ return {
242
+ dispatchEvents: dispatchEventsEffect,
243
+ dispatchEvent: dispatchEventEffect,
244
+ dispatchUndeliveredEvents: dispatchUndeliveredEventsEffect,
244
245
  }
245
246
  }
246
247
 
247
248
  export class PlanEventDeliveryServiceTag extends Context.Service<
248
249
  PlanEventDeliveryServiceTag,
249
250
  ReturnType<typeof makePlanEventDeliveryService>
250
- >()('PlanEventDeliveryService') {}
251
+ >()('@lota-sdk/core/PlanEventDeliveryService') {}
251
252
 
252
253
  export const PlanEventDeliveryServiceLive = Layer.effect(
253
254
  PlanEventDeliveryServiceTag,
254
255
  Effect.gen(function* () {
256
+ const agentConfig = yield* AgentConfigServiceTag
255
257
  const db = yield* DatabaseServiceTag
256
258
  const redis = yield* RedisServiceTag
257
259
  const planRunService = yield* PlanRunServiceTag
258
260
  const userService = yield* UserServiceTag
259
- return makePlanEventDeliveryService({ db, redis, planRunService, userService })
261
+ const queues = yield* LotaQueuesServiceTag
262
+ const runtimeAdapters = yield* RuntimeAdaptersServiceTag
263
+ return makePlanEventDeliveryService({
264
+ agentConfig,
265
+ db,
266
+ redis,
267
+ planRunService,
268
+ userService,
269
+ planAgentHeartbeatQueue: queues.planAgentHeartbeat,
270
+ runtimeAdapters,
271
+ })
260
272
  }),
261
273
  )
@@ -1,6 +1,7 @@
1
1
  import type { Context } from 'effect'
2
2
 
3
3
  import type { SurrealDBService } from '../../db/service'
4
+ import type { DelayedNodePromotionQueueRuntime } from '../../queues/delayed-node-promotion.queue'
4
5
  import type { makeGeneratedDocumentStorageService } from '../../storage/generated-document-storage.service'
5
6
  import type { makeArtifactService } from '../artifact.service'
6
7
  import type { FeedbackLoopServiceTag } from '../feedback-loop.service'
@@ -32,4 +33,5 @@ export interface PlanExecutorContext {
32
33
  planValidatorService: ReturnType<typeof makePlanValidatorService>
33
34
  qualityMetricsService: Context.Service.Shape<typeof QualityMetricsServiceTag>
34
35
  planCompletionSideEffects: ReturnType<typeof makePlanCompletionSideEffects>
36
+ delayedNodePromotionQueue: DelayedNodePromotionQueueRuntime
35
37
  }