@lota-sdk/core 0.4.13 → 0.4.14
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.
- package/package.json +4 -4
- package/src/ai/embedding-cache.ts +17 -11
- package/src/ai-gateway/ai-gateway.ts +164 -94
- package/src/ai-gateway/index.ts +4 -1
- package/src/config/agent-defaults.ts +2 -2
- package/src/config/agent-types.ts +1 -1
- package/src/create-runtime.ts +259 -200
- package/src/db/cursor-pagination.ts +2 -9
- package/src/db/memory-store.ts +194 -175
- package/src/db/memory.ts +125 -71
- package/src/db/schema-fingerprint.ts +5 -4
- package/src/db/service-normalization.ts +4 -3
- package/src/db/service.ts +3 -2
- package/src/db/startup.ts +15 -16
- package/src/effect/errors.ts +161 -21
- package/src/effect/index.ts +0 -1
- package/src/embeddings/provider.ts +15 -7
- package/src/queues/autonomous-job.queue.ts +10 -22
- package/src/queues/delayed-node-promotion.queue.ts +8 -14
- package/src/queues/document-processor.queue.ts +13 -4
- package/src/queues/memory-consolidation.queue.ts +26 -14
- package/src/queues/plan-agent-heartbeat.queue.ts +10 -9
- package/src/queues/plan-scheduler.queue.ts +37 -15
- package/src/queues/queue-factory.ts +59 -35
- package/src/queues/standalone-worker.ts +3 -2
- package/src/redis/connection.ts +10 -3
- package/src/redis/org-memory-lock.ts +1 -1
- package/src/redis/redis-lease-lock.ts +5 -5
- package/src/redis/stream-context.ts +1 -1
- package/src/runtime/chat-message.ts +64 -1
- package/src/runtime/chat-run-orchestration.ts +33 -20
- package/src/runtime/context-compaction/context-compaction-runtime.ts +14 -7
- package/src/runtime/context-compaction/context-compaction.ts +78 -66
- package/src/runtime/domain-layer.ts +13 -7
- package/src/runtime/execution-plan.ts +7 -3
- package/src/runtime/memory/memory-block.ts +3 -9
- package/src/runtime/memory/memory-scope.ts +3 -1
- package/src/runtime/plugin-resolution.ts +2 -1
- package/src/runtime/post-turn-side-effects.ts +6 -5
- package/src/runtime/retrieval-adapters.ts +8 -20
- package/src/runtime/runtime-config.ts +3 -9
- package/src/runtime/runtime-extensions.ts +2 -4
- package/src/runtime/runtime-lifecycle.ts +56 -16
- package/src/runtime/runtime-services.ts +180 -102
- package/src/runtime/runtime-worker-registry.ts +3 -1
- package/src/runtime/social-chat/social-chat-agent-runner.ts +1 -1
- package/src/runtime/social-chat/social-chat-history.ts +21 -18
- package/src/runtime/social-chat/social-chat.ts +356 -223
- package/src/runtime/specialist-runner.ts +3 -1
- package/src/runtime/team-consultation/team-consultation-orchestrator.ts +3 -2
- package/src/runtime/thread-turn-context.ts +142 -102
- package/src/runtime/turn-lifecycle.ts +15 -46
- package/src/services/agent-activity.service.ts +1 -1
- package/src/services/agent-executor.service.ts +107 -77
- package/src/services/autonomous-job.service.ts +354 -293
- package/src/services/background-work.service.ts +3 -3
- package/src/services/context-compaction.service.ts +7 -2
- package/src/services/document-chunk.service.ts +50 -32
- package/src/services/execution-plan/execution-plan-schedule.ts +5 -3
- package/src/services/execution-plan/execution-plan.service.ts +162 -179
- package/src/services/feedback-loop.service.ts +5 -4
- package/src/services/graph-full-routing.ts +37 -36
- package/src/services/institutional-memory.service.ts +28 -30
- package/src/services/learned-skill.service.ts +107 -72
- package/src/services/memory/memory-errors.ts +4 -23
- package/src/services/memory/memory-org-memory.ts +10 -5
- package/src/services/memory/memory-rerank.ts +18 -6
- package/src/services/memory/memory.service.ts +170 -111
- package/src/services/memory/rerank.service.ts +29 -20
- package/src/services/organization-member.service.ts +1 -1
- package/src/services/organization.service.ts +69 -75
- package/src/services/ownership-dispatcher.service.ts +40 -39
- package/src/services/plan/plan-agent-heartbeat.service.ts +26 -23
- package/src/services/plan/plan-agent-query.service.ts +39 -31
- package/src/services/plan/plan-completion-side-effects.ts +13 -17
- package/src/services/plan/plan-coordination.service.ts +2 -1
- package/src/services/plan/plan-cycle.service.ts +6 -5
- package/src/services/plan/plan-deadline.service.ts +57 -54
- package/src/services/plan/plan-event-delivery.service.ts +5 -4
- package/src/services/plan/plan-executor-graph.ts +18 -15
- package/src/services/plan/plan-executor.service.ts +235 -262
- package/src/services/plan/plan-run.service.ts +169 -93
- package/src/services/plan/plan-scheduler.service.ts +192 -202
- package/src/services/plan/plan-template.service.ts +1 -1
- package/src/services/plan/plan-transaction-events.ts +1 -1
- package/src/services/plan/plan-workspace.service.ts +23 -14
- package/src/services/plugin-executor.service.ts +5 -9
- package/src/services/queue-job.service.ts +117 -59
- package/src/services/recent-activity-title.service.ts +13 -12
- package/src/services/recent-activity.service.ts +6 -1
- package/src/services/social-chat-history.service.ts +29 -25
- package/src/services/system-executor.service.ts +5 -9
- package/src/services/thread/thread-active-run.ts +2 -2
- package/src/services/thread/thread-listing.ts +61 -57
- package/src/services/thread/thread-memory-block.ts +73 -48
- package/src/services/thread/thread-message.service.ts +76 -65
- package/src/services/thread/thread-record-store.ts +8 -8
- package/src/services/thread/thread-title.service.ts +10 -4
- package/src/services/thread/thread-turn-execution.ts +43 -45
- package/src/services/thread/thread-turn-preparation.service.ts +257 -135
- package/src/services/thread/thread-turn-streaming.ts +82 -85
- package/src/services/thread/thread-turn.ts +8 -8
- package/src/services/thread/thread.service.ts +135 -100
- package/src/services/user.service.ts +45 -48
- package/src/storage/attachment-parser.ts +6 -2
- package/src/storage/attachment-storage.service.ts +5 -6
- package/src/storage/generated-document-storage.service.ts +1 -1
- package/src/system-agents/context-compaction.agent.ts +10 -9
- package/src/system-agents/delegated-agent-factory.ts +30 -6
- package/src/system-agents/memory-reranker.agent.ts +10 -9
- package/src/system-agents/memory.agent.ts +10 -9
- package/src/system-agents/recent-activity-title-refiner.agent.ts +13 -15
- package/src/system-agents/regular-chat-memory-digest.agent.ts +13 -12
- package/src/system-agents/skill-extractor.agent.ts +13 -12
- package/src/system-agents/skill-manager.agent.ts +13 -12
- package/src/system-agents/thread-router.agent.ts +10 -5
- package/src/system-agents/title-generator.agent.ts +13 -12
- package/src/tools/fetch-webpage.tool.ts +13 -13
- package/src/tools/memory-block.tool.ts +3 -1
- package/src/tools/plan-approval.tool.ts +4 -2
- package/src/tools/read-file-parts.tool.ts +10 -4
- package/src/tools/remember-memory.tool.ts +3 -1
- package/src/tools/research-topic.tool.ts +9 -5
- package/src/tools/search-web.tool.ts +16 -16
- package/src/tools/search.tool.ts +20 -5
- package/src/tools/team-think.tool.ts +61 -38
- package/src/utils/async.ts +5 -5
- package/src/utils/errors.ts +19 -18
- package/src/utils/sse-keepalive.ts +28 -25
- package/src/workers/bootstrap.ts +75 -11
- package/src/workers/memory-consolidation.worker.ts +82 -91
- package/src/workers/organization-learning.worker.ts +14 -4
- package/src/workers/regular-chat-memory-digest.runner.ts +105 -67
- package/src/workers/skill-extraction.runner.ts +97 -61
- package/src/workers/utils/repo-structure-extractor.ts +13 -8
- package/src/workers/utils/thread-message-query.ts +24 -24
- package/src/workers/worker-utils.ts +23 -4
- package/src/effect/helpers.ts +0 -123
|
@@ -14,6 +14,7 @@ import type { RecordIdInput } from '../../db/record-id'
|
|
|
14
14
|
import { ensureRecordId, recordIdToString } from '../../db/record-id'
|
|
15
15
|
import type { SurrealDBService } from '../../db/service'
|
|
16
16
|
import { TABLES } from '../../db/tables'
|
|
17
|
+
import { ERROR_TAGS } from '../../effect/errors'
|
|
17
18
|
import { DatabaseServiceTag } from '../../effect/services'
|
|
18
19
|
import { nowDate, nowEpochMillis, unsafeDateFrom } from '../../utils/date-time'
|
|
19
20
|
import type { makePlanSchedulerService } from './plan-scheduler.service'
|
|
@@ -23,13 +24,13 @@ import { PlanTemplateServiceTag } from './plan-template.service'
|
|
|
23
24
|
|
|
24
25
|
const TERMINAL_RUN_STATUSES: ReadonlySet<PlanRunStatus> = new Set(['completed', 'failed', 'aborted'])
|
|
25
26
|
|
|
26
|
-
class PlanCycleNotFoundError extends Schema.TaggedErrorClass<PlanCycleNotFoundError>()(
|
|
27
|
-
|
|
28
|
-
message: Schema.String,
|
|
29
|
-
|
|
27
|
+
class PlanCycleNotFoundError extends Schema.TaggedErrorClass<PlanCycleNotFoundError>()(
|
|
28
|
+
ERROR_TAGS.PlanCycleNotFoundError,
|
|
29
|
+
{ cycleId: Schema.String, message: Schema.String },
|
|
30
|
+
) {}
|
|
30
31
|
|
|
31
32
|
class PlanTemplateNotFoundForCycleError extends Schema.TaggedErrorClass<PlanTemplateNotFoundForCycleError>()(
|
|
32
|
-
'PlanTemplateNotFoundForCycleError',
|
|
33
|
+
'@lota-sdk/core/PlanTemplateNotFoundForCycleError',
|
|
33
34
|
{ templateId: Schema.String, message: Schema.String },
|
|
34
35
|
) {}
|
|
35
36
|
|
|
@@ -15,7 +15,7 @@ import type { RecordIdInput } from '../../db/record-id'
|
|
|
15
15
|
import { ensureRecordId, recordIdToString } from '../../db/record-id'
|
|
16
16
|
import type { SurrealDBService } from '../../db/service'
|
|
17
17
|
import { TABLES } from '../../db/tables'
|
|
18
|
-
import {
|
|
18
|
+
import { ERROR_TAGS } from '../../effect/errors'
|
|
19
19
|
import { DatabaseServiceTag } from '../../effect/services'
|
|
20
20
|
import type { PlanSchedulerQueueRuntime } from '../../queues/plan-scheduler.queue'
|
|
21
21
|
import { LotaQueuesServiceTag } from '../../queues/queues.service'
|
|
@@ -91,16 +91,17 @@ interface PlanDeadlineDeps {
|
|
|
91
91
|
planSchedulerQueue: PlanSchedulerQueueRuntime
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
class PlanDeadlineError extends Schema.TaggedErrorClass<PlanDeadlineError>()(
|
|
94
|
+
class PlanDeadlineError extends Schema.TaggedErrorClass<PlanDeadlineError>()(ERROR_TAGS.PlanDeadlineError, {
|
|
95
95
|
message: Schema.String,
|
|
96
96
|
cause: Schema.optional(Schema.Defect),
|
|
97
97
|
}) {}
|
|
98
98
|
|
|
99
|
+
function toPlanDeadlineError(message: string, cause: unknown): PlanDeadlineError {
|
|
100
|
+
return new PlanDeadlineError({ message, cause })
|
|
101
|
+
}
|
|
102
|
+
|
|
99
103
|
export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
100
104
|
const { db, planEventDeliveryService, planExecutorService, planRunService, planSchedulerQueue } = deps
|
|
101
|
-
const effectTryPromise = makeEffectTryPromiseWithMessage(
|
|
102
|
-
(message, cause) => new PlanDeadlineError({ message, cause }),
|
|
103
|
-
)
|
|
104
105
|
const loadPlanSchedulerQueue = (): Effect.Effect<PlanSchedulerQueueRuntime, PlanDeadlineError> =>
|
|
105
106
|
Effect.succeed(planSchedulerQueue)
|
|
106
107
|
|
|
@@ -115,16 +116,19 @@ export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
const collectDeadlineSweepEffect = Effect.fn('PlanDeadline.collectDeadlineSweep')(function* (now: Date) {
|
|
118
|
-
const activeNodeRuns = yield*
|
|
119
|
-
(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
119
|
+
const activeNodeRuns = yield* db
|
|
120
|
+
.queryMany(
|
|
121
|
+
new BoundQuery(`SELECT * FROM ${TABLES.PLAN_NODE_RUN} WHERE status IN $statuses`, {
|
|
122
|
+
statuses: ['running', 'awaiting-human'],
|
|
123
|
+
}),
|
|
124
|
+
PlanNodeRunSchema,
|
|
125
|
+
)
|
|
126
|
+
.pipe(
|
|
127
|
+
Effect.mapError((cause) =>
|
|
128
|
+
toPlanDeadlineError('Failed to load active plan node runs for deadline sweep.', cause),
|
|
125
129
|
),
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
Effect.withSpan('PlanDeadline.loadActiveNodeRuns'),
|
|
131
|
+
)
|
|
128
132
|
const results = yield* Effect.forEach(
|
|
129
133
|
activeNodeRuns,
|
|
130
134
|
(nodeRun) =>
|
|
@@ -171,27 +175,25 @@ export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
|
171
175
|
const existing =
|
|
172
176
|
dedupeKey === null
|
|
173
177
|
? []
|
|
174
|
-
: yield*
|
|
175
|
-
(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
`SELECT * FROM ${TABLES.PLAN_EVENT}
|
|
178
|
+
: yield* db
|
|
179
|
+
.queryMany(
|
|
180
|
+
new BoundQuery(
|
|
181
|
+
`SELECT * FROM ${TABLES.PLAN_EVENT}
|
|
179
182
|
WHERE runId = $runId
|
|
180
183
|
AND nodeId = $nodeId
|
|
181
184
|
AND eventType = $eventType
|
|
182
185
|
AND detail.dedupeKey = $dedupeKey
|
|
183
186
|
LIMIT 1`,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
),
|
|
191
|
-
PlanEventSchema,
|
|
187
|
+
{
|
|
188
|
+
runId: ensureRecordId(params.run.id, TABLES.PLAN_RUN),
|
|
189
|
+
nodeId: params.nodeRun.nodeId,
|
|
190
|
+
eventType: params.eventType,
|
|
191
|
+
dedupeKey,
|
|
192
|
+
},
|
|
192
193
|
),
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
PlanEventSchema,
|
|
195
|
+
)
|
|
196
|
+
.pipe(Effect.mapError((cause) => toPlanDeadlineError('Failed to load existing deadline event.', cause)))
|
|
195
197
|
if (existing.length > 0) {
|
|
196
198
|
return
|
|
197
199
|
}
|
|
@@ -203,24 +205,22 @@ export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
|
203
205
|
(cause) => new PlanDeadlineError({ message: 'Failed to load plan spec for deadline event.', cause }),
|
|
204
206
|
),
|
|
205
207
|
)
|
|
206
|
-
const event = yield*
|
|
207
|
-
(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
'Failed to create deadline event.',
|
|
223
|
-
)
|
|
208
|
+
const event = yield* db
|
|
209
|
+
.create(
|
|
210
|
+
TABLES.PLAN_EVENT,
|
|
211
|
+
{
|
|
212
|
+
id: new RecordId(TABLES.PLAN_EVENT, Bun.randomUUIDv7()),
|
|
213
|
+
planSpecId: ensureRecordId(spec.id, TABLES.PLAN_SPEC),
|
|
214
|
+
runId: ensureRecordId(params.run.id, TABLES.PLAN_RUN),
|
|
215
|
+
nodeId: params.nodeRun.nodeId,
|
|
216
|
+
eventType: params.eventType,
|
|
217
|
+
message: params.message,
|
|
218
|
+
emittedBy: params.emittedBy,
|
|
219
|
+
detail: params.detail,
|
|
220
|
+
},
|
|
221
|
+
PlanEventSchema,
|
|
222
|
+
)
|
|
223
|
+
.pipe(Effect.mapError((cause) => toPlanDeadlineError('Failed to create deadline event.', cause)))
|
|
224
224
|
yield* planEventDeliveryService
|
|
225
225
|
.dispatchEvent(PlanEventSchema.parse(event))
|
|
226
226
|
.pipe(
|
|
@@ -378,8 +378,11 @@ export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
|
378
378
|
)
|
|
379
379
|
|
|
380
380
|
const enqueueDeadlineCheckEffect = Effect.fn('PlanDeadline.enqueueDeadlineCheck')(function* (scheduledFor: Date) {
|
|
381
|
-
const
|
|
382
|
-
yield*
|
|
381
|
+
const queue = yield* loadPlanSchedulerQueue()
|
|
382
|
+
yield* Effect.tryPromise({
|
|
383
|
+
try: () => queue.enqueueDeadlineCheck(scheduledFor),
|
|
384
|
+
catch: (cause) => toPlanDeadlineError('Failed to enqueue deadline check.', cause),
|
|
385
|
+
})
|
|
383
386
|
})
|
|
384
387
|
|
|
385
388
|
const checkDeadlinesEffect = Effect.fn('PlanDeadline.checkDeadlines')(function* (now?: Date) {
|
|
@@ -403,11 +406,11 @@ export function makePlanDeadlineService(deps: PlanDeadlineDeps) {
|
|
|
403
406
|
const cachedRun = runCache.get(runIdStr)
|
|
404
407
|
const run =
|
|
405
408
|
cachedRun ??
|
|
406
|
-
(yield*
|
|
407
|
-
()
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
409
|
+
(yield* db
|
|
410
|
+
.findOne(TABLES.PLAN_RUN, { id: ensureRecordId(entry.nodeRun.runId, TABLES.PLAN_RUN) }, PlanRunSchema)
|
|
411
|
+
.pipe(
|
|
412
|
+
Effect.mapError((cause) => toPlanDeadlineError('Failed to load plan run during deadline check.', cause)),
|
|
413
|
+
))
|
|
411
414
|
if (!run) {
|
|
412
415
|
return
|
|
413
416
|
}
|
|
@@ -5,6 +5,7 @@ import type { ResolvedAgentConfig } from '../../config/agent-defaults'
|
|
|
5
5
|
import { ensureRecordId, recordIdToString } from '../../db/record-id'
|
|
6
6
|
import type { SurrealDBService } from '../../db/service'
|
|
7
7
|
import { TABLES } from '../../db/tables'
|
|
8
|
+
import { ERROR_TAGS } from '../../effect/errors'
|
|
8
9
|
import {
|
|
9
10
|
AgentConfigServiceTag,
|
|
10
11
|
DatabaseServiceTag,
|
|
@@ -25,10 +26,10 @@ import { PlanRunServiceTag } from './plan-run.service'
|
|
|
25
26
|
|
|
26
27
|
const PLAN_EVENT_DELIVERED_TTL_MS = 7 * 24 * 60 * 60 * 1000
|
|
27
28
|
|
|
28
|
-
class PlanEventDeliveryError extends Schema.TaggedErrorClass<PlanEventDeliveryError>()(
|
|
29
|
-
|
|
30
|
-
cause: Schema.optional(Schema.Defect),
|
|
31
|
-
|
|
29
|
+
class PlanEventDeliveryError extends Schema.TaggedErrorClass<PlanEventDeliveryError>()(
|
|
30
|
+
ERROR_TAGS.PlanEventDeliveryError,
|
|
31
|
+
{ message: Schema.String, cause: Schema.optional(Schema.Defect) },
|
|
32
|
+
) {}
|
|
32
33
|
|
|
33
34
|
function buildDeliveredKey(eventId: string): string {
|
|
34
35
|
return `plan-event:delivered:${eventId}`
|
|
@@ -13,7 +13,7 @@ import type { RecordIdInput } from '../../db/record-id'
|
|
|
13
13
|
import { ensureRecordId, recordIdToString } from '../../db/record-id'
|
|
14
14
|
import type { DatabaseTransaction } from '../../db/service'
|
|
15
15
|
import { TABLES } from '../../db/tables'
|
|
16
|
-
import { NotFoundError } from '../../effect/errors'
|
|
16
|
+
import { ERROR_TAGS, NotFoundError } from '../../effect/errors'
|
|
17
17
|
import { nowDate } from '../../utils/date-time'
|
|
18
18
|
import type { PlanExecutorContext } from './plan-executor-context'
|
|
19
19
|
import {
|
|
@@ -27,10 +27,10 @@ import {
|
|
|
27
27
|
} from './plan-executor-helpers'
|
|
28
28
|
import { emitEvent, replaceRun } from './plan-executor-persistence'
|
|
29
29
|
|
|
30
|
-
class PlanExecutorGraphError extends Schema.TaggedErrorClass<PlanExecutorGraphError>()(
|
|
31
|
-
|
|
32
|
-
cause: Schema.optional(Schema.Defect),
|
|
33
|
-
|
|
30
|
+
class PlanExecutorGraphError extends Schema.TaggedErrorClass<PlanExecutorGraphError>()(
|
|
31
|
+
ERROR_TAGS.PlanExecutorGraphError,
|
|
32
|
+
{ message: Schema.String, cause: Schema.optional(Schema.Defect) },
|
|
33
|
+
) {}
|
|
34
34
|
|
|
35
35
|
function parseRowOrFail<T>(
|
|
36
36
|
schema: z.ZodType<T>,
|
|
@@ -220,16 +220,19 @@ export function syncRunGraph(
|
|
|
220
220
|
})
|
|
221
221
|
const scheduledNodeRun = yield* parseRowOrFail(PlanNodeRunSchema, scheduledNodeRunRow, 'plan node run')
|
|
222
222
|
replaceNodeRun(scheduledNodeRun)
|
|
223
|
-
yield* Effect.tryPromise(
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
223
|
+
yield* Effect.tryPromise({
|
|
224
|
+
try: () =>
|
|
225
|
+
delayedNodePromotionQueue.enqueueDelayedNodePromotion(
|
|
226
|
+
{
|
|
227
|
+
runId: recordIdToString(currentRun.id, TABLES.PLAN_RUN),
|
|
228
|
+
nodeId: nodeSpec.nodeId,
|
|
229
|
+
emittedBy: params.emittedBy,
|
|
230
|
+
},
|
|
231
|
+
delayAfterPredecessorMs,
|
|
232
|
+
),
|
|
233
|
+
catch: (cause) =>
|
|
234
|
+
new PlanExecutorGraphError({ message: 'Failed to enqueue delayed node promotion.', cause }),
|
|
235
|
+
})
|
|
233
236
|
yield* emitEvent({
|
|
234
237
|
tx: params.tx,
|
|
235
238
|
run: currentRun,
|