@lota-sdk/core 0.4.9 → 0.4.10

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 (158) 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 +38 -10
  4. package/src/config/agent-defaults.ts +22 -9
  5. package/src/config/agent-types.ts +1 -1
  6. package/src/config/background-processing.ts +1 -1
  7. package/src/config/index.ts +0 -1
  8. package/src/config/logger.ts +20 -7
  9. package/src/config/thread-defaults.ts +12 -4
  10. package/src/create-runtime.ts +69 -656
  11. package/src/db/memory-query-builder.ts +2 -1
  12. package/src/db/memory-store.ts +29 -20
  13. package/src/db/memory.ts +188 -195
  14. package/src/db/service-normalization.ts +97 -64
  15. package/src/db/service.ts +706 -538
  16. package/src/db/startup.ts +30 -19
  17. package/src/effect/awaitable-effect.ts +46 -37
  18. package/src/effect/helpers.ts +30 -5
  19. package/src/effect/index.ts +7 -5
  20. package/src/effect/layers.ts +82 -72
  21. package/src/effect/runtime.ts +18 -3
  22. package/src/effect/services.ts +15 -11
  23. package/src/embeddings/provider.ts +65 -66
  24. package/src/index.ts +13 -11
  25. package/src/queues/autonomous-job.queue.ts +59 -71
  26. package/src/queues/context-compaction.queue.ts +6 -18
  27. package/src/queues/delayed-node-promotion.queue.ts +9 -17
  28. package/src/queues/organization-learning.queue.ts +17 -4
  29. package/src/queues/plan-agent-heartbeat.queue.ts +23 -20
  30. package/src/queues/plan-scheduler.queue.ts +6 -18
  31. package/src/queues/post-chat-memory.queue.ts +6 -18
  32. package/src/queues/queue-factory.ts +128 -50
  33. package/src/queues/title-generation.queue.ts +6 -17
  34. package/src/redis/connection.ts +181 -164
  35. package/src/redis/runtime-connection.ts +13 -3
  36. package/src/redis/stream-context.ts +17 -9
  37. package/src/runtime/agent-runtime-policy.ts +1 -1
  38. package/src/runtime/agent-stream-helpers.ts +15 -11
  39. package/src/runtime/chat-run-orchestration.ts +1 -1
  40. package/src/runtime/context-compaction/context-compaction-runtime.ts +1 -1
  41. package/src/runtime/context-compaction/context-compaction.ts +126 -82
  42. package/src/runtime/domain-layer.ts +192 -0
  43. package/src/runtime/graph-designer.ts +15 -7
  44. package/src/runtime/helper-model.ts +8 -4
  45. package/src/runtime/index.ts +0 -1
  46. package/src/runtime/memory/memory-block.ts +19 -9
  47. package/src/runtime/memory/memory-pipeline.ts +53 -66
  48. package/src/runtime/memory/memory-scope.ts +33 -29
  49. package/src/runtime/plugin-resolution.ts +33 -54
  50. package/src/runtime/post-turn-side-effects.ts +6 -26
  51. package/src/runtime/retrieval-adapters.ts +4 -4
  52. package/src/runtime/runtime-accessors.ts +92 -0
  53. package/src/runtime/runtime-config.ts +3 -3
  54. package/src/runtime/runtime-extensions.ts +20 -9
  55. package/src/runtime/runtime-lifecycle.ts +124 -0
  56. package/src/runtime/runtime-services.ts +386 -0
  57. package/src/runtime/runtime-token.ts +47 -0
  58. package/src/runtime/social-chat/social-chat-agent-runner.ts +7 -5
  59. package/src/runtime/social-chat/social-chat-history.ts +21 -12
  60. package/src/runtime/social-chat/social-chat.ts +401 -365
  61. package/src/runtime/team-consultation/team-consultation-orchestrator.ts +58 -52
  62. package/src/runtime/thread-turn-context.ts +21 -27
  63. package/src/services/agent-activity.service.ts +1 -1
  64. package/src/services/agent-executor.service.ts +179 -187
  65. package/src/services/artifact.service.ts +10 -5
  66. package/src/services/attachment.service.ts +35 -1
  67. package/src/services/autonomous-job.service.ts +58 -56
  68. package/src/services/background-work.service.ts +54 -0
  69. package/src/services/chat-run-registry.service.ts +3 -1
  70. package/src/services/context-compaction.service.ts +1 -1
  71. package/src/services/document-chunk.service.ts +8 -17
  72. package/src/services/execution-plan/execution-plan-graph.ts +74 -52
  73. package/src/services/execution-plan/execution-plan.service.ts +1 -1
  74. package/src/services/feedback-loop.service.ts +1 -1
  75. package/src/services/global-orchestrator.service.ts +33 -10
  76. package/src/services/graph-full-routing.ts +44 -33
  77. package/src/services/index.ts +1 -0
  78. package/src/services/institutional-memory.service.ts +8 -17
  79. package/src/services/learned-skill.service.ts +38 -35
  80. package/src/services/memory/memory-errors.ts +27 -0
  81. package/src/services/memory/memory-org-memory.ts +14 -3
  82. package/src/services/memory/memory-preseeded.ts +10 -4
  83. package/src/services/memory/memory-utils.ts +2 -1
  84. package/src/services/memory/memory.service.ts +26 -44
  85. package/src/services/memory/rerank.service.ts +3 -11
  86. package/src/services/monitoring-window.service.ts +1 -1
  87. package/src/services/mutating-approval.service.ts +1 -1
  88. package/src/services/node-workspace.service.ts +2 -2
  89. package/src/services/notification.service.ts +16 -4
  90. package/src/services/organization-member.service.ts +1 -1
  91. package/src/services/organization.service.ts +34 -51
  92. package/src/services/ownership-dispatcher.service.ts +132 -90
  93. package/src/services/plan/plan-agent-heartbeat.service.ts +1 -1
  94. package/src/services/plan/plan-agent-query.service.ts +1 -1
  95. package/src/services/plan/plan-approval.service.ts +52 -48
  96. package/src/services/plan/plan-artifact.service.ts +2 -2
  97. package/src/services/plan/plan-builder.service.ts +2 -2
  98. package/src/services/plan/plan-checkpoint.service.ts +1 -1
  99. package/src/services/plan/plan-compiler.service.ts +1 -1
  100. package/src/services/plan/plan-completion-side-effects.ts +18 -24
  101. package/src/services/plan/plan-coordination.service.ts +1 -1
  102. package/src/services/plan/plan-cycle.service.ts +171 -164
  103. package/src/services/plan/plan-deadline.service.ts +290 -304
  104. package/src/services/plan/plan-event-delivery.service.ts +44 -39
  105. package/src/services/plan/plan-executor-graph.ts +114 -67
  106. package/src/services/plan/plan-executor-helpers.ts +60 -75
  107. package/src/services/plan/plan-executor.service.ts +550 -467
  108. package/src/services/plan/plan-run.service.ts +12 -19
  109. package/src/services/plan/plan-scheduler.service.ts +27 -33
  110. package/src/services/plan/plan-template.service.ts +1 -1
  111. package/src/services/plan/plan-transaction-events.ts +8 -5
  112. package/src/services/plan/plan-validator.service.ts +1 -1
  113. package/src/services/plan/plan-workspace.service.ts +17 -11
  114. package/src/services/plugin-executor.service.ts +26 -21
  115. package/src/services/quality-metrics.service.ts +1 -1
  116. package/src/services/queue-job.service.ts +8 -17
  117. package/src/services/recent-activity-title.service.ts +17 -9
  118. package/src/services/recent-activity.service.ts +1 -1
  119. package/src/services/skill-resolver.service.ts +1 -1
  120. package/src/services/social-chat-history.service.ts +37 -20
  121. package/src/services/system-executor.service.ts +25 -20
  122. package/src/services/thread/thread-bootstrap.ts +26 -10
  123. package/src/services/thread/thread-listing.ts +2 -1
  124. package/src/services/thread/thread-memory-block.ts +18 -5
  125. package/src/services/thread/thread-message.service.ts +24 -8
  126. package/src/services/thread/thread-title.service.ts +1 -1
  127. package/src/services/thread/thread-turn-execution.ts +1 -1
  128. package/src/services/thread/thread-turn-preparation.service.ts +18 -16
  129. package/src/services/thread/thread-turn-streaming.ts +12 -11
  130. package/src/services/thread/thread-turn.ts +43 -10
  131. package/src/services/thread/thread.service.ts +11 -2
  132. package/src/services/user.service.ts +1 -1
  133. package/src/services/write-intent-validator.service.ts +1 -1
  134. package/src/storage/attachment-storage.service.ts +7 -4
  135. package/src/storage/generated-document-storage.service.ts +1 -1
  136. package/src/system-agents/context-compaction.agent.ts +1 -1
  137. package/src/system-agents/helper-agent-options.ts +1 -1
  138. package/src/system-agents/memory-reranker.agent.ts +1 -1
  139. package/src/system-agents/memory.agent.ts +1 -1
  140. package/src/system-agents/recent-activity-title-refiner.agent.ts +1 -1
  141. package/src/system-agents/regular-chat-memory-digest.agent.ts +1 -1
  142. package/src/system-agents/skill-extractor.agent.ts +1 -1
  143. package/src/system-agents/skill-manager.agent.ts +1 -1
  144. package/src/system-agents/title-generator.agent.ts +1 -1
  145. package/src/tools/execution-plan.tool.ts +28 -17
  146. package/src/tools/fetch-webpage.tool.ts +20 -13
  147. package/src/tools/firecrawl-client.ts +13 -3
  148. package/src/tools/plan-approval.tool.ts +9 -1
  149. package/src/tools/search-web.tool.ts +16 -9
  150. package/src/tools/team-think.tool.ts +2 -2
  151. package/src/utils/async.ts +15 -6
  152. package/src/utils/errors.ts +27 -15
  153. package/src/workers/bootstrap.ts +25 -48
  154. package/src/workers/organization-learning.worker.ts +1 -1
  155. package/src/workers/regular-chat-memory-digest.runner.ts +25 -15
  156. package/src/workers/worker-utils.ts +20 -2
  157. package/src/config/search.ts +0 -3
  158. package/src/runtime/agent-types.ts +0 -1
@@ -1,13 +1,12 @@
1
- import { Config, ConfigProvider, Schema, Effect, Layer, ManagedRuntime, Redacted } from 'effect'
1
+ import { ConfigProvider, Option, Schema, Effect, Layer, ManagedRuntime, Redacted } from 'effect'
2
2
 
3
3
  import { AiGatewayLive } from '../ai-gateway/ai-gateway'
4
4
  import { EmbeddingCacheLive } from '../ai/embedding-cache'
5
- import { DEFAULT_AI_GATEWAY_URL } from '../config/constants'
6
5
  import { configureLotaLogger, resolveLotaLogLevel, serverLogger } from '../config/logger'
7
6
  import { connectWithStartupRetry, waitForDatabaseBootstrap } from '../db/startup'
8
7
  import { buildWorkerInfrastructureLayer, setLotaSdkRuntime } from '../effect'
9
8
  import { DatabaseServiceTag } from '../effect/services'
10
- import { parseLotaRuntimeConfig, parseWorkerBootstrapEnv } from '../runtime/runtime-config'
9
+ import { lotaRuntimeEnvConfig, parseLotaRuntimeConfig, parseWorkerBootstrapEnv } from '../runtime/runtime-config'
11
10
  import { getConfiguredPluginDatabaseConnector } from '../runtime/runtime-extensions'
12
11
  import { FirecrawlLive } from '../tools/firecrawl-client'
13
12
  import { getErrorMessage } from '../utils/errors'
@@ -28,27 +27,8 @@ function toSandboxedWorkerBootstrapError(
28
27
  return new SandboxedWorkerBootstrapError({ stage, message: getErrorMessage(cause), cause })
29
28
  }
30
29
 
31
- const workerConfig = Config.all({
32
- surrealdbUrl: Config.string('SURREALDB_URL'),
33
- surrealdbNamespace: Config.string('SURREALDB_NAMESPACE'),
34
- surrealdbUser: Config.string('SURREALDB_USER'),
35
- surrealdbPassword: Config.redacted('SURREALDB_PASSWORD'),
36
- redisUrl: Config.string('REDIS_URL'),
37
- aiGatewayUrl: Config.string('AI_GATEWAY_URL').pipe(Config.withDefault(DEFAULT_AI_GATEWAY_URL)),
38
- aiGatewayKey: Config.redacted('AI_GATEWAY_KEY'),
39
- openRouterApiKey: Config.redacted('OPENROUTER_API_KEY'),
40
- s3Endpoint: Config.string('S3_ENDPOINT'),
41
- s3Bucket: Config.string('S3_BUCKET'),
42
- s3Region: Config.string('S3_REGION').pipe(Config.withDefault('garage')),
43
- s3AccessKeyId: Config.redacted('S3_ACCESS_KEY_ID'),
44
- s3SecretAccessKey: Config.redacted('S3_SECRET_ACCESS_KEY'),
45
- attachmentUrlExpiresIn: Config.string('ATTACHMENT_URL_EXPIRES_IN').pipe(Config.withDefault('1800')),
46
- firecrawlApiKey: Config.redacted('FIRECRAWL_API_KEY'),
47
- firecrawlApiBaseUrl: Config.string('FIRECRAWL_API_BASE_URL').pipe(Config.option),
48
- })
49
-
50
30
  function buildSandboxedWorkerRuntimeConfigEffect() {
51
- return workerConfig
31
+ return lotaRuntimeEnvConfig
52
32
  .parse(ConfigProvider.fromEnv())
53
33
  .pipe(
54
34
  Effect.map((env) =>
@@ -63,7 +43,9 @@ function buildSandboxedWorkerRuntimeConfigEffect() {
63
43
  aiGateway: {
64
44
  url: env.aiGatewayUrl,
65
45
  key: Redacted.value(env.aiGatewayKey),
66
- openRouterApiKey: Redacted.value(env.openRouterApiKey),
46
+ ...(Option.isSome(env.openRouterApiKey)
47
+ ? { openRouterApiKey: Redacted.value(env.openRouterApiKey.value) }
48
+ : {}),
67
49
  },
68
50
  s3: {
69
51
  endpoint: env.s3Endpoint,
@@ -75,7 +57,7 @@ function buildSandboxedWorkerRuntimeConfigEffect() {
75
57
  },
76
58
  firecrawl: {
77
59
  apiKey: Redacted.value(env.firecrawlApiKey),
78
- ...(env.firecrawlApiBaseUrl._tag === 'Some' ? { apiBaseUrl: env.firecrawlApiBaseUrl.value } : {}),
60
+ ...(Option.isSome(env.firecrawlApiBaseUrl) ? { apiBaseUrl: env.firecrawlApiBaseUrl.value } : {}),
79
61
  },
80
62
  agents: {
81
63
  roster: ['worker'],
@@ -91,20 +73,16 @@ function buildSandboxedWorkerRuntimeConfigEffect() {
91
73
  // eslint-disable-next-line typescript-eslint/no-explicit-any -- wildcard for host-provided ManagedRuntime
92
74
  type WorkerManagedRuntime = ManagedRuntime.ManagedRuntime<any, any>
93
75
 
94
- let sandboxedWorkerRuntimePromise: Promise<WorkerManagedRuntime> | null = null
95
- let sandboxedWorkerRuntime: WorkerManagedRuntime | null = null
96
- let sandboxedWorkerRuntimeSetupPromise: Promise<WorkerManagedRuntime> | null = null
76
+ let sandboxedWorkerSetupPromise: Promise<WorkerManagedRuntime> | null = null
77
+ let sandboxedWorkerInitPromise: Promise<WorkerManagedRuntime> | null = null
97
78
 
98
79
  function ensureSandboxedWorkerRuntimeConfigured(): Promise<WorkerManagedRuntime> {
99
- if (sandboxedWorkerRuntime) {
100
- return Promise.resolve(sandboxedWorkerRuntime)
101
- }
102
-
103
- if (sandboxedWorkerRuntimeSetupPromise) {
104
- return sandboxedWorkerRuntimeSetupPromise
80
+ if (sandboxedWorkerSetupPromise) {
81
+ return sandboxedWorkerSetupPromise
105
82
  }
106
83
 
107
- const setupPromise = Effect.runPromise(
84
+ // Assign before the async kicks off so concurrent callers observe the in-flight promise.
85
+ sandboxedWorkerSetupPromise = Effect.runPromise(
108
86
  Effect.gen(function* () {
109
87
  const runtimeConfig = yield* buildSandboxedWorkerRuntimeConfigEffect()
110
88
  yield* Effect.sync(() => configureLotaLogger(resolveLotaLogLevel(Bun.env.LOG_LEVEL) ?? 'info'))
@@ -119,25 +97,25 @@ function ensureSandboxedWorkerRuntimeConfigured(): Promise<WorkerManagedRuntime>
119
97
 
120
98
  yield* Effect.sync(() => {
121
99
  setLotaSdkRuntime(managedRuntime)
122
- sandboxedWorkerRuntime = managedRuntime
123
100
  })
124
101
 
125
102
  return managedRuntime
126
103
  }),
127
- ).finally(() => {
128
- sandboxedWorkerRuntimeSetupPromise = null
104
+ ).catch((error) => {
105
+ sandboxedWorkerSetupPromise = null
106
+ throw error
129
107
  })
130
108
 
131
- sandboxedWorkerRuntimeSetupPromise = setupPromise
132
- return setupPromise
109
+ return sandboxedWorkerSetupPromise
133
110
  }
134
111
 
135
112
  export function initializeSandboxedWorkerRuntime(): Promise<WorkerManagedRuntime> {
136
- if (sandboxedWorkerRuntimePromise) {
137
- return sandboxedWorkerRuntimePromise
113
+ if (sandboxedWorkerInitPromise) {
114
+ return sandboxedWorkerInitPromise
138
115
  }
139
116
 
140
- const initPromise = Effect.runPromise(
117
+ // Assign before the async kicks off so concurrent callers observe the in-flight promise.
118
+ sandboxedWorkerInitPromise = Effect.runPromise(
141
119
  Effect.gen(function* () {
142
120
  const env = parseWorkerBootstrapEnv(Bun.env)
143
121
  const runtime = yield* Effect.tryPromise({
@@ -186,11 +164,10 @@ export function initializeSandboxedWorkerRuntime(): Promise<WorkerManagedRuntime
186
164
 
187
165
  return runtime
188
166
  }),
189
- )
190
-
191
- sandboxedWorkerRuntimePromise = initPromise
192
- return initPromise.catch((error) => {
193
- sandboxedWorkerRuntimePromise = null
167
+ ).catch((error) => {
168
+ sandboxedWorkerInitPromise = null
194
169
  throw error
195
170
  })
171
+
172
+ return sandboxedWorkerInitPromise
196
173
  }
@@ -18,7 +18,7 @@ import { toSandboxedWorkerError } from './utils/sandbox-error'
18
18
  import { createTracedWorkerProcessor } from './worker-utils'
19
19
 
20
20
  const runtime = await initializeSandboxedWorkerRuntime()
21
- const resolve = async <I, T>(tag: Context.Key<I, T>): Promise<T> => await runtime.runPromise(Effect.service(tag))
21
+ const resolve = <I, T>(tag: Context.Key<I, T>): Promise<T> => runtime.runPromise(Effect.service(tag))
22
22
  const regularChatDigestServices: RegularChatDigestServices = {
23
23
  databaseService: await resolve(DatabaseServiceTag),
24
24
  memoryService: await resolve(MemoryServiceTag),
@@ -1,4 +1,4 @@
1
- import { Cause, Effect } from 'effect'
1
+ import { Effect, Schema } from 'effect'
2
2
  import type { Context } from 'effect'
3
3
  import { BoundQuery } from 'surrealdb'
4
4
  import { z } from 'zod'
@@ -35,6 +35,11 @@ import type { DigestMessage } from './utils/thread-message-query'
35
35
  // can be digested into durable memory and profile projections in the background.
36
36
  const StructuredProfilePatchSchema = z.record(z.string(), z.unknown()).default({})
37
37
 
38
+ class MemoryDigestError extends Schema.TaggedErrorClass<MemoryDigestError>()('MemoryDigestError', {
39
+ message: Schema.String,
40
+ cause: Schema.Defect,
41
+ }) {}
42
+
38
43
  const REGULAR_CHAT_MEMORY_DIGEST_TIMEOUT_MS = 10 * 60 * 1000
39
44
  const WorkspaceMemoryRowSchema = z.object({ content: z.string() })
40
45
  export interface RegularChatDigestServices {
@@ -120,11 +125,9 @@ function hasNewEligibleThreadMessages(params: {
120
125
  Effect.gen(function* () {
121
126
  if (params.threadIds.length === 0) return false
122
127
 
123
- let query: BoundQuery | null = null
124
- if (params.cursor) {
125
- const cursorRowId = ensureRecordId(params.cursor.id, TABLES.THREAD_MESSAGE)
126
- query = new BoundQuery(
127
- `SELECT id, createdAt FROM ${TABLES.THREAD_MESSAGE}
128
+ const query: BoundQuery | null = params.cursor
129
+ ? new BoundQuery(
130
+ `SELECT id, createdAt FROM ${TABLES.THREAD_MESSAGE}
128
131
  WHERE threadId IN $threadIds
129
132
  AND (
130
133
  createdAt > $cursorCreatedAt
@@ -132,18 +135,22 @@ function hasNewEligibleThreadMessages(params: {
132
135
  )
133
136
  ORDER BY createdAt ASC, id ASC
134
137
  LIMIT 1`,
135
- { threadIds: params.threadIds, cursorCreatedAt: params.cursor.createdAt, cursorRowId },
136
- )
137
- } else if (params.onboardingCutoff) {
138
- query = new BoundQuery(
139
- `SELECT id, createdAt FROM ${TABLES.THREAD_MESSAGE}
138
+ {
139
+ threadIds: params.threadIds,
140
+ cursorCreatedAt: params.cursor.createdAt,
141
+ cursorRowId: ensureRecordId(params.cursor.id, TABLES.THREAD_MESSAGE),
142
+ },
143
+ )
144
+ : params.onboardingCutoff
145
+ ? new BoundQuery(
146
+ `SELECT id, createdAt FROM ${TABLES.THREAD_MESSAGE}
140
147
  WHERE threadId IN $threadIds
141
148
  AND createdAt > $onboardingCutoff
142
149
  ORDER BY createdAt ASC, id ASC
143
150
  LIMIT 1`,
144
- { threadIds: params.threadIds, onboardingCutoff: params.onboardingCutoff },
145
- )
146
- }
151
+ { threadIds: params.threadIds, onboardingCutoff: params.onboardingCutoff },
152
+ )
153
+ : null
147
154
 
148
155
  if (!query) return false
149
156
  const rows = yield* effectTryPromise(() => params.db.query<unknown>(query))
@@ -261,7 +268,10 @@ function runRegularChatMemoryDigestEffect(
261
268
 
262
269
  const summaryBlock = normalizeBlock(synthesis.summaryBlock)
263
270
  if (!summaryBlock) {
264
- return yield* new Cause.UnknownError(new Error('Regular chat memory digest returned an empty summaryBlock'))
271
+ return yield* new MemoryDigestError({
272
+ message: 'Regular chat memory digest returned an empty summaryBlock',
273
+ cause: new Error('Regular chat memory digest returned an empty summaryBlock'),
274
+ })
265
275
  }
266
276
 
267
277
  const processedThreadCursor = getLastCursor(threadMessages)
@@ -5,11 +5,21 @@ import { Effect } from 'effect'
5
5
  import type { Context } from 'effect'
6
6
 
7
7
  import { chatLogger } from '../config/logger'
8
- import { getCurrentRuntime } from '../effect/runtime-ref'
8
+ import { resolveLotaService } from '../effect/runtime'
9
9
  import { QueueJobServiceTag } from '../services/queue-job.service'
10
10
 
11
+ let currentQueueJobService: Context.Service.Shape<typeof QueueJobServiceTag> | null = null
12
+
13
+ export function configureQueueJobService(service: Context.Service.Shape<typeof QueueJobServiceTag>): void {
14
+ currentQueueJobService = service
15
+ }
16
+
17
+ export function clearQueueJobService(): void {
18
+ currentQueueJobService = null
19
+ }
20
+
11
21
  export function getQueueJobService(): Context.Service.Shape<typeof QueueJobServiceTag> {
12
- return getCurrentRuntime().runSync(Effect.service(QueueJobServiceTag))
22
+ return currentQueueJobService ?? resolveLotaService(QueueJobServiceTag)
13
23
  }
14
24
 
15
25
  export const DEFAULT_JOB_RETENTION = { removeOnComplete: true, removeOnFail: { age: 24 * 60 * 60, count: 200 } }
@@ -132,6 +142,14 @@ export function createTracedWorkerProcessor<TJob extends TracedWorkerJobLike, TR
132
142
  )
133
143
  return yield* error
134
144
  }),
145
+ ).pipe(
146
+ Effect.withSpan(`worker.${queueName}.${job.name}`),
147
+ Effect.annotateSpans({
148
+ 'job.id': trackedJob.id !== undefined ? String(trackedJob.id) : 'unknown',
149
+ 'job.name': job.name,
150
+ 'job.attemptsMade': typeof job.attemptsMade === 'number' ? job.attemptsMade : -1,
151
+ 'queue.name': queueName,
152
+ }),
135
153
  ),
136
154
  )
137
155
  }
@@ -1,3 +0,0 @@
1
- export { VECTOR_SEARCH_OVERFETCH_MULTIPLIER } from '@lota-sdk/shared'
2
-
3
- export const DEFAULT_MEMORY_SEARCH_LIMIT = 10
@@ -1 +0,0 @@
1
- export type { ChatMode, CreateHelperToolLoopAgentOptions, CreateRoutedAgentOptions } from '@lota-sdk/shared'