@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
@@ -2,7 +2,7 @@ import { stepCountIs } from 'ai'
2
2
  import type { ToolSet } from 'ai'
3
3
  import { Schema, Effect } from 'effect'
4
4
 
5
- import { getAgentRuntimeConfig, getResolvedAgentFactoryConfig } from '../../config/agent-defaults'
5
+ import type { ResolvedAgentFactoryConfig } from '../../config/agent-defaults'
6
6
  import { aiLogger } from '../../config/logger'
7
7
 
8
8
  interface ExecutableToolDefinition {
@@ -46,13 +46,13 @@ export function withLoggedSocialToolSet(
46
46
  execute: (...args: unknown[]): Promise<unknown> =>
47
47
  Effect.runPromise(
48
48
  Effect.gen(function* () {
49
- aiLogger.info`Slack social-chat tool start: agentId=${params.agentId}, tool=${toolName}, channelId=${params.channelId}, threadId=${params.threadId}`
49
+ aiLogger.debug`Slack social-chat tool start: agentId=${params.agentId}, tool=${toolName}, channelId=${params.channelId}, threadId=${params.threadId}`
50
50
  const result: unknown = yield* Effect.tryPromise({
51
51
  try: () => executableTool.execute(...args),
52
52
  catch: (error: unknown) => new SocialChatAgentRunnerError({ message: String(error), cause: error }),
53
53
  })
54
54
  params.executedToolNames.push(toolName)
55
- aiLogger.info`Slack social-chat tool finish: agentId=${params.agentId}, tool=${toolName}, channelId=${params.channelId}, threadId=${params.threadId}`
55
+ aiLogger.debug`Slack social-chat tool finish: agentId=${params.agentId}, tool=${toolName}, channelId=${params.channelId}, threadId=${params.threadId}`
56
56
  return result
57
57
  }).pipe(
58
58
  Effect.tapError((error) =>
@@ -69,6 +69,7 @@ export function withLoggedSocialToolSet(
69
69
  }
70
70
 
71
71
  function runSocialAgentTurnEffect(params: {
72
+ agentFactoryConfig: ResolvedAgentFactoryConfig
72
73
  agentId: string
73
74
  mode: 'fixedThreadMode' | 'threadMode'
74
75
  threadType: 'group'
@@ -85,7 +86,8 @@ function runSocialAgentTurnEffect(params: {
85
86
  abortSignal: AbortSignal
86
87
  }): Effect.Effect<{ text: string; displayName: string }, SocialChatAgentRunnerError> {
87
88
  return Effect.gen(function* () {
88
- const runtimeConfig = getAgentRuntimeConfig({
89
+ const { agentFactoryConfig } = params
90
+ const runtimeConfig = agentFactoryConfig.getAgentRuntimeConfig({
89
91
  agentId: params.agentId,
90
92
  threadType: params.threadType,
91
93
  mode: params.mode,
@@ -103,7 +105,7 @@ function runSocialAgentTurnEffect(params: {
103
105
  additionalInstructionSections: params.additionalInstructionSections,
104
106
  })
105
107
 
106
- const agentFactoryEntry = getResolvedAgentFactoryConfig().createAgent[runtimeConfig.id]
108
+ const agentFactoryEntry = agentFactoryConfig.createAgent[runtimeConfig.id]
107
109
  if (typeof agentFactoryEntry !== 'function') {
108
110
  return yield* new SocialChatAgentRunnerError({
109
111
  message: `Social chat agent factory is not configured for ${runtimeConfig.id}`,
@@ -117,9 +119,11 @@ function runSocialAgentTurnEffect(params: {
117
119
  extraInstructions: runtimeConfig.extraInstructions,
118
120
  stopWhen: [stepCountIs(runtimeConfig.maxSteps)],
119
121
  })
120
- const response = yield* Effect.promise(() =>
121
- agent.generate({ prompt: params.prompt, abortSignal: params.abortSignal }),
122
- )
122
+ const response = yield* Effect.tryPromise({
123
+ try: () => agent.generate({ prompt: params.prompt, abortSignal: params.abortSignal }),
124
+ catch: (cause) =>
125
+ new SocialChatAgentRunnerError({ message: `Social chat agent ${params.agentId} generate() failed.`, cause }),
126
+ })
123
127
  const text = response.text.trim()
124
128
  if (!text) {
125
129
  return yield* new SocialChatAgentRunnerError({
@@ -138,6 +142,7 @@ function runSocialAgentTurnEffect(params: {
138
142
  }
139
143
 
140
144
  export function runSocialAgentTurn(params: {
145
+ agentFactoryConfig: ResolvedAgentFactoryConfig
141
146
  agentId: string
142
147
  mode: 'fixedThreadMode' | 'threadMode'
143
148
  threadType: 'group'
@@ -2,6 +2,8 @@ import { stripSlackToolExecutionNoticeMarkdown } from '@lota-sdk/shared'
2
2
  import type { Message, Thread } from 'chat'
3
3
  import { Schema, Effect } from 'effect'
4
4
 
5
+ import type { ResolvedAgentConfig } from '../../config/agent-defaults'
6
+ import { iterateEffect } from '../../effect/helpers'
5
7
  import type {
6
8
  SocialChatHistoryMessage,
7
9
  SocialChatHistoryMetadata,
@@ -24,9 +26,10 @@ export function readSlackAuthorName(message: Message): string | undefined {
24
26
  }
25
27
 
26
28
  export function buildSocialChatThreadTranscript(
29
+ agentConfig: ResolvedAgentConfig,
27
30
  messages: ReadonlyArray<Pick<SocialChatHistoryMessage, 'role' | 'parts' | 'metadata'>>,
28
31
  ): string {
29
- const historyMessages = toHistoryMessages([...messages])
32
+ const historyMessages = toHistoryMessages(agentConfig, [...messages])
30
33
  if (historyMessages.length === 0) return 'No prior thread history.'
31
34
 
32
35
  return historyMessages
@@ -107,21 +110,29 @@ export function collectThreadMessages(thread: Thread, incomingMessage: Message):
107
110
  return Effect.runPromise(
108
111
  Effect.catch(
109
112
  Effect.gen(function* () {
110
- const collected: Message[] = []
111
113
  const iterator = thread.allMessages[Symbol.asyncIterator]()
112
114
 
113
- for (;;) {
114
- const next = yield* Effect.tryPromise({
115
- try: () => iterator.next(),
116
- catch: (error: unknown) =>
117
- new SocialChatHistoryError({ message: 'Failed to read thread messages', cause: error }),
118
- })
119
- if (next.done) break
120
- collected.push(next.value)
121
- }
115
+ const collected = yield* iterateEffect<{ messages: Message[]; done: boolean }, SocialChatHistoryError, never>(
116
+ { messages: [], done: false },
117
+ {
118
+ while: (state) => !state.done,
119
+ body: (state) =>
120
+ Effect.tryPromise({
121
+ try: () => iterator.next(),
122
+ catch: (error: unknown) =>
123
+ new SocialChatHistoryError({ message: 'Failed to read thread messages', cause: error }),
124
+ }).pipe(
125
+ Effect.map((next) =>
126
+ next.done
127
+ ? { messages: state.messages, done: true }
128
+ : { messages: [...state.messages, next.value], done: false },
129
+ ),
130
+ ),
131
+ },
132
+ )
122
133
 
123
- return collected.length > 0
124
- ? collected
134
+ return collected.messages.length > 0
135
+ ? collected.messages
125
136
  : thread.recentMessages.length > 0
126
137
  ? [...thread.recentMessages]
127
138
  : [incomingMessage]