@lota-sdk/core 0.4.8 → 0.4.9

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 (259) hide show
  1. package/package.json +11 -12
  2. package/src/ai/embedding-cache.ts +94 -22
  3. package/src/ai-gateway/ai-gateway.ts +738 -223
  4. package/src/config/agent-defaults.ts +176 -75
  5. package/src/config/agent-types.ts +54 -4
  6. package/src/config/constants.ts +8 -2
  7. package/src/config/logger.ts +286 -19
  8. package/src/config/thread-defaults.ts +33 -21
  9. package/src/create-runtime.ts +725 -387
  10. package/src/db/base.service.ts +52 -28
  11. package/src/db/cursor-pagination.ts +71 -30
  12. package/src/db/memory-store.helpers.ts +4 -7
  13. package/src/db/memory-store.ts +856 -598
  14. package/src/db/memory.ts +398 -275
  15. package/src/db/record-id.ts +32 -10
  16. package/src/db/schema-fingerprint.ts +30 -12
  17. package/src/db/service-normalization.ts +255 -0
  18. package/src/db/service.ts +726 -761
  19. package/src/db/startup.ts +140 -66
  20. package/src/db/transaction-conflict.ts +15 -0
  21. package/src/effect/awaitable-effect.ts +87 -0
  22. package/src/effect/errors.ts +121 -0
  23. package/src/effect/helpers.ts +98 -0
  24. package/src/effect/index.ts +22 -0
  25. package/src/effect/layers.ts +228 -0
  26. package/src/effect/runtime-ref.ts +25 -0
  27. package/src/effect/runtime.ts +31 -0
  28. package/src/effect/services.ts +57 -0
  29. package/src/effect/zod.ts +43 -0
  30. package/src/embeddings/provider.ts +122 -76
  31. package/src/index.ts +46 -1
  32. package/src/openrouter/direct-provider.ts +11 -35
  33. package/src/queues/autonomous-job.queue.ts +130 -74
  34. package/src/queues/context-compaction.queue.ts +60 -15
  35. package/src/queues/delayed-node-promotion.queue.ts +52 -15
  36. package/src/queues/document-processor.queue.ts +52 -77
  37. package/src/queues/memory-consolidation.queue.ts +47 -32
  38. package/src/queues/organization-learning.queue.ts +13 -4
  39. package/src/queues/plan-agent-heartbeat.queue.ts +65 -21
  40. package/src/queues/plan-scheduler.queue.ts +107 -31
  41. package/src/queues/post-chat-memory.queue.ts +66 -24
  42. package/src/queues/queue-factory.ts +142 -52
  43. package/src/queues/standalone-worker.ts +39 -0
  44. package/src/queues/title-generation.queue.ts +54 -9
  45. package/src/redis/connection.ts +84 -32
  46. package/src/redis/index.ts +6 -8
  47. package/src/redis/org-memory-lock.ts +60 -27
  48. package/src/redis/redis-lease-lock.ts +200 -121
  49. package/src/redis/runtime-connection.ts +10 -0
  50. package/src/redis/stream-context.ts +84 -46
  51. package/src/runtime/agent-identity-overrides.ts +2 -2
  52. package/src/runtime/agent-runtime-policy.ts +4 -1
  53. package/src/runtime/agent-stream-helpers.ts +20 -9
  54. package/src/runtime/chat-run-orchestration.ts +102 -19
  55. package/src/runtime/chat-run-registry.ts +36 -2
  56. package/src/runtime/context-compaction/context-compaction-runtime.ts +107 -0
  57. package/src/runtime/{context-compaction.ts → context-compaction/context-compaction.ts} +114 -91
  58. package/src/runtime/execution-plan-visibility.ts +2 -2
  59. package/src/runtime/execution-plan.ts +42 -15
  60. package/src/runtime/graph-designer.ts +11 -7
  61. package/src/runtime/helper-model.ts +135 -48
  62. package/src/runtime/index.ts +7 -7
  63. package/src/runtime/indexed-repositories-policy.ts +3 -3
  64. package/src/runtime/{memory-block.ts → memory/memory-block.ts} +40 -36
  65. package/src/runtime/{memory-digest-policy.ts → memory/memory-digest-policy.ts} +1 -1
  66. package/src/runtime/{memory-pipeline.ts → memory/memory-pipeline.ts} +1 -1
  67. package/src/runtime/{memory-prompts-fact.ts → memory/memory-prompts-fact.ts} +2 -2
  68. package/src/runtime/{memory-scope.ts → memory/memory-scope.ts} +12 -6
  69. package/src/runtime/plugin-resolution.ts +144 -24
  70. package/src/runtime/plugin-types.ts +9 -1
  71. package/src/runtime/post-turn-side-effects.ts +197 -130
  72. package/src/runtime/retrieval-adapters.ts +38 -4
  73. package/src/runtime/runtime-config.ts +150 -61
  74. package/src/runtime/runtime-extensions.ts +21 -34
  75. package/src/runtime/social-chat/social-chat-agent-runner.ts +157 -0
  76. package/src/runtime/{social-chat-history.ts → social-chat/social-chat-history.ts} +42 -20
  77. package/src/runtime/social-chat/social-chat.ts +594 -0
  78. package/src/runtime/specialist-runner.ts +36 -10
  79. package/src/runtime/team-consultation/team-consultation-orchestrator.ts +427 -0
  80. package/src/runtime/{team-consultation-prompts.ts → team-consultation/team-consultation-prompts.ts} +6 -2
  81. package/src/runtime/thread-chat-helpers.ts +2 -2
  82. package/src/runtime/thread-plan-turn.ts +2 -1
  83. package/src/runtime/thread-turn-context.ts +172 -94
  84. package/src/runtime/turn-lifecycle.ts +93 -27
  85. package/src/services/agent-activity.service.ts +287 -203
  86. package/src/services/agent-executor.service.ts +329 -217
  87. package/src/services/artifact.service.ts +225 -148
  88. package/src/services/attachment.service.ts +137 -115
  89. package/src/services/autonomous-job.service.ts +888 -491
  90. package/src/services/chat-run-registry.service.ts +11 -1
  91. package/src/services/context-compaction.service.ts +136 -86
  92. package/src/services/document-chunk.service.ts +162 -90
  93. package/src/services/execution-plan/execution-plan-approval.ts +26 -0
  94. package/src/services/execution-plan/execution-plan-context.ts +29 -0
  95. package/src/services/execution-plan/execution-plan-graph.ts +256 -0
  96. package/src/services/execution-plan/execution-plan-schedule.ts +84 -0
  97. package/src/services/execution-plan/execution-plan-spec.ts +75 -0
  98. package/src/services/execution-plan/execution-plan.service.ts +1041 -0
  99. package/src/services/feedback-loop.service.ts +132 -76
  100. package/src/services/global-orchestrator.service.ts +80 -170
  101. package/src/services/graph-full-routing.ts +182 -0
  102. package/src/services/index.ts +18 -21
  103. package/src/services/institutional-memory.service.ts +220 -123
  104. package/src/services/learned-skill.service.ts +364 -259
  105. package/src/services/memory/memory-conversation.ts +95 -0
  106. package/src/services/memory/memory-org-memory.ts +39 -0
  107. package/src/services/memory/memory-preseeded.ts +80 -0
  108. package/src/services/memory/memory-rerank.ts +297 -0
  109. package/src/services/{memory-utils.ts → memory/memory-utils.ts} +5 -5
  110. package/src/services/memory/memory.service.ts +692 -0
  111. package/src/services/memory/rerank.service.ts +209 -0
  112. package/src/services/monitoring-window.service.ts +92 -70
  113. package/src/services/mutating-approval.service.ts +62 -53
  114. package/src/services/node-workspace.service.ts +141 -98
  115. package/src/services/notification.service.ts +17 -16
  116. package/src/services/organization-member.service.ts +120 -66
  117. package/src/services/organization.service.ts +144 -51
  118. package/src/services/ownership-dispatcher.service.ts +415 -264
  119. package/src/services/plan/plan-agent-heartbeat.service.ts +234 -0
  120. package/src/services/plan/plan-agent-query.service.ts +322 -0
  121. package/src/services/plan/plan-approval.service.ts +102 -0
  122. package/src/services/plan/plan-artifact.service.ts +60 -0
  123. package/src/services/plan/plan-builder.service.ts +76 -0
  124. package/src/services/plan/plan-checkpoint.service.ts +103 -0
  125. package/src/services/{plan-compiler.service.ts → plan/plan-compiler.service.ts} +26 -9
  126. package/src/services/plan/plan-completion-side-effects.ts +175 -0
  127. package/src/services/plan/plan-coordination.service.ts +181 -0
  128. package/src/services/plan/plan-cycle.service.ts +398 -0
  129. package/src/services/plan/plan-deadline.service.ts +547 -0
  130. package/src/services/plan/plan-event-delivery.service.ts +261 -0
  131. package/src/services/plan/plan-executor-context.ts +35 -0
  132. package/src/services/plan/plan-executor-graph.ts +475 -0
  133. package/src/services/plan/plan-executor-helpers.ts +322 -0
  134. package/src/services/plan/plan-executor-persistence.ts +209 -0
  135. package/src/services/plan/plan-executor.service.ts +1654 -0
  136. package/src/services/{plan-helpers.ts → plan/plan-helpers.ts} +1 -1
  137. package/src/services/{plan-run-data.ts → plan/plan-run-data.ts} +4 -4
  138. package/src/services/plan/plan-run-serialization.ts +15 -0
  139. package/src/services/plan/plan-run.service.ts +644 -0
  140. package/src/services/plan/plan-scheduler.service.ts +385 -0
  141. package/src/services/plan/plan-template.service.ts +224 -0
  142. package/src/services/plan/plan-transaction-events.ts +33 -0
  143. package/src/services/plan/plan-validator.service.ts +907 -0
  144. package/src/services/plan/plan-workspace.service.ts +125 -0
  145. package/src/services/plugin-executor.service.ts +97 -68
  146. package/src/services/quality-metrics.service.ts +112 -94
  147. package/src/services/queue-job.service.ts +296 -230
  148. package/src/services/recent-activity-title.service.ts +65 -36
  149. package/src/services/recent-activity.service.ts +274 -259
  150. package/src/services/skill-resolver.service.ts +38 -12
  151. package/src/services/social-chat-history.service.ts +176 -125
  152. package/src/services/system-executor.service.ts +91 -61
  153. package/src/services/thread/thread-active-run.ts +203 -0
  154. package/src/services/thread/thread-bootstrap.ts +369 -0
  155. package/src/services/thread/thread-listing.ts +198 -0
  156. package/src/services/thread/thread-memory-block.ts +117 -0
  157. package/src/services/thread/thread-message.service.ts +363 -0
  158. package/src/services/thread/thread-record-store.ts +155 -0
  159. package/src/services/thread/thread-title.service.ts +74 -0
  160. package/src/services/thread/thread-turn-execution.ts +280 -0
  161. package/src/services/thread/thread-turn-message-context.ts +73 -0
  162. package/src/services/thread/thread-turn-preparation.service.ts +1146 -0
  163. package/src/services/thread/thread-turn-streaming.ts +402 -0
  164. package/src/services/thread/thread-turn-tracing.ts +35 -0
  165. package/src/services/thread/thread-turn.ts +343 -0
  166. package/src/services/thread/thread.service.ts +335 -0
  167. package/src/services/user.service.ts +82 -32
  168. package/src/services/write-intent-validator.service.ts +63 -51
  169. package/src/storage/attachment-parser.ts +69 -27
  170. package/src/storage/attachment-storage.service.ts +331 -275
  171. package/src/storage/generated-document-storage.service.ts +66 -34
  172. package/src/system-agents/agent-result.ts +3 -1
  173. package/src/system-agents/context-compaction.agent.ts +2 -2
  174. package/src/system-agents/delegated-agent-factory.ts +159 -90
  175. package/src/system-agents/memory-reranker.agent.ts +2 -2
  176. package/src/system-agents/memory.agent.ts +2 -2
  177. package/src/system-agents/recent-activity-title-refiner.agent.ts +2 -2
  178. package/src/system-agents/regular-chat-memory-digest.agent.ts +2 -2
  179. package/src/system-agents/skill-extractor.agent.ts +2 -2
  180. package/src/system-agents/skill-manager.agent.ts +2 -2
  181. package/src/system-agents/thread-router.agent.ts +157 -113
  182. package/src/system-agents/title-generator.agent.ts +2 -2
  183. package/src/tools/execution-plan.tool.ts +220 -161
  184. package/src/tools/fetch-webpage.tool.ts +21 -17
  185. package/src/tools/firecrawl-client.ts +16 -6
  186. package/src/tools/index.ts +1 -0
  187. package/src/tools/memory-block.tool.ts +14 -6
  188. package/src/tools/plan-approval.tool.ts +49 -47
  189. package/src/tools/read-file-parts.tool.ts +44 -33
  190. package/src/tools/remember-memory.tool.ts +65 -45
  191. package/src/tools/search-web.tool.ts +26 -22
  192. package/src/tools/search.tool.ts +41 -29
  193. package/src/tools/team-think.tool.ts +124 -83
  194. package/src/tools/user-questions.tool.ts +4 -3
  195. package/src/tools/web-tool-shared.ts +6 -0
  196. package/src/utils/async.ts +17 -23
  197. package/src/utils/crypto.ts +21 -0
  198. package/src/utils/date-time.ts +40 -1
  199. package/src/utils/errors.ts +95 -16
  200. package/src/utils/hono-error-handler.ts +24 -39
  201. package/src/utils/index.ts +2 -1
  202. package/src/utils/null-proto-record.ts +41 -0
  203. package/src/utils/sse-keepalive.ts +124 -21
  204. package/src/workers/bootstrap.ts +186 -51
  205. package/src/workers/memory-consolidation.worker.ts +325 -237
  206. package/src/workers/organization-learning.worker.ts +50 -16
  207. package/src/workers/regular-chat-memory-digest.helpers.ts +28 -27
  208. package/src/workers/regular-chat-memory-digest.runner.ts +175 -114
  209. package/src/workers/skill-extraction.runner.ts +176 -93
  210. package/src/workers/utils/file-section-chunker.ts +8 -10
  211. package/src/workers/utils/repo-structure-extractor.ts +349 -260
  212. package/src/workers/utils/repomix-file-sections.ts +2 -2
  213. package/src/workers/utils/thread-message-query.ts +97 -38
  214. package/src/workers/worker-utils.ts +56 -31
  215. package/src/config/debug-logger.ts +0 -47
  216. package/src/redis/connection-accessor.ts +0 -26
  217. package/src/runtime/context-compaction-runtime.ts +0 -87
  218. package/src/runtime/social-chat-agent-runner.ts +0 -118
  219. package/src/runtime/social-chat.ts +0 -516
  220. package/src/runtime/team-consultation-orchestrator.ts +0 -272
  221. package/src/services/adaptive-playbook.service.ts +0 -152
  222. package/src/services/artifact-provenance.service.ts +0 -172
  223. package/src/services/chat-attachments.service.ts +0 -17
  224. package/src/services/context-compaction-runtime.singleton.ts +0 -13
  225. package/src/services/execution-plan.service.ts +0 -1118
  226. package/src/services/memory.service.ts +0 -914
  227. package/src/services/plan-agent-heartbeat.service.ts +0 -136
  228. package/src/services/plan-agent-query.service.ts +0 -267
  229. package/src/services/plan-approval.service.ts +0 -83
  230. package/src/services/plan-artifact.service.ts +0 -50
  231. package/src/services/plan-builder.service.ts +0 -67
  232. package/src/services/plan-checkpoint.service.ts +0 -81
  233. package/src/services/plan-completion-side-effects.ts +0 -80
  234. package/src/services/plan-coordination.service.ts +0 -157
  235. package/src/services/plan-cycle.service.ts +0 -284
  236. package/src/services/plan-deadline.service.ts +0 -430
  237. package/src/services/plan-event-delivery.service.ts +0 -166
  238. package/src/services/plan-executor.service.ts +0 -1950
  239. package/src/services/plan-run.service.ts +0 -515
  240. package/src/services/plan-scheduler.service.ts +0 -240
  241. package/src/services/plan-template.service.ts +0 -177
  242. package/src/services/plan-validator.service.ts +0 -818
  243. package/src/services/plan-workspace.service.ts +0 -83
  244. package/src/services/rerank.service.ts +0 -156
  245. package/src/services/thread-message.service.ts +0 -275
  246. package/src/services/thread-plan-registry.service.ts +0 -22
  247. package/src/services/thread-title.service.ts +0 -39
  248. package/src/services/thread-turn-preparation.service.ts +0 -1147
  249. package/src/services/thread-turn.ts +0 -172
  250. package/src/services/thread.service.ts +0 -869
  251. package/src/utils/env.ts +0 -8
  252. /package/src/runtime/{context-compaction-constants.ts → context-compaction/context-compaction-constants.ts} +0 -0
  253. /package/src/runtime/{memory-format.ts → memory/memory-format.ts} +0 -0
  254. /package/src/runtime/{memory-prompts-parse.ts → memory/memory-prompts-parse.ts} +0 -0
  255. /package/src/runtime/{memory-prompts-update.ts → memory/memory-prompts-update.ts} +0 -0
  256. /package/src/runtime/{social-chat-prompts.ts → social-chat/social-chat-prompts.ts} +0 -0
  257. /package/src/services/{plan-node-spec.ts → plan/plan-node-spec.ts} +0 -0
  258. /package/src/services/{thread-constants.ts → thread/thread-constants.ts} +0 -0
  259. /package/src/services/{thread.types.ts → thread/thread.types.ts} +0 -0
@@ -1,8 +1,14 @@
1
+ import { Context, Effect, Layer } from 'effect'
2
+
1
3
  import type { RecordIdRef } from '../db/record-id'
2
4
  import { recordIdToString } from '../db/record-id'
3
5
  import { TABLES } from '../db/tables'
4
- import { attachmentStorageService } from '../storage/attachment-storage.service'
5
- import type { UploadedThreadAttachment as SdkUploadedThreadAttachment } from '../storage/attachment-storage.service'
6
+ import { runPromise } from '../effect/runtime'
7
+ import type {
8
+ makeAttachmentStorageService,
9
+ UploadedThreadAttachment as SdkUploadedThreadAttachment,
10
+ } from '../storage/attachment-storage.service'
11
+ import { AttachmentStorageServiceTag } from '../storage/attachment-storage.service'
6
12
  import type { MessagePartLike, ReadableUploadMetadata as SdkReadableUploadMetadata } from '../storage/attachment-types'
7
13
 
8
14
  export type ReadableUploadMetadata = SdkReadableUploadMetadata
@@ -15,136 +21,152 @@ function toUserId(userId: RecordIdRef): string {
15
21
  return recordIdToString(userId, TABLES.USER)
16
22
  }
17
23
 
18
- class AttachmentService {
19
- hydrateSignedFileUrlsInMessageParts({
20
- parts,
21
- orgId,
22
- userId,
23
- }: {
24
- parts: readonly MessagePartLike[]
25
- orgId: RecordIdRef
26
- userId: RecordIdRef
27
- }): MessagePartLike[] {
28
- return attachmentStorageService.hydrateSignedFileUrlsInMessageParts({
24
+ export function makeAttachmentService(attachmentStorage: ReturnType<typeof makeAttachmentStorageService>) {
25
+ return {
26
+ hydrateSignedFileUrlsInMessageParts<TPart extends MessagePartLike>({
29
27
  parts,
30
- orgId: toOrgId(orgId),
31
- userId: toUserId(userId),
32
- })
33
- }
28
+ orgId,
29
+ userId,
30
+ }: {
31
+ parts: readonly TPart[]
32
+ orgId: RecordIdRef
33
+ userId: RecordIdRef
34
+ }): TPart[] {
35
+ return attachmentStorage.hydrateSignedFileUrlsInMessageParts({
36
+ parts,
37
+ orgId: toOrgId(orgId),
38
+ userId: toUserId(userId),
39
+ })
40
+ },
34
41
 
35
- listReadableUploadsFromMessages({
36
- messages,
37
- orgId,
38
- userId,
39
- }: {
40
- messages: ReadonlyArray<{ parts: readonly MessagePartLike[] }>
41
- orgId: RecordIdRef
42
- userId: RecordIdRef
43
- }): ReadableUploadMetadata[] {
44
- return attachmentStorageService.listReadableUploadsFromMessages({
42
+ listReadableUploadsFromMessages<TPart extends MessagePartLike>({
45
43
  messages,
46
- orgId: toOrgId(orgId),
47
- userId: toUserId(userId),
48
- })
49
- }
44
+ orgId,
45
+ userId,
46
+ }: {
47
+ messages: ReadonlyArray<{ parts: readonly TPart[] }>
48
+ orgId: RecordIdRef
49
+ userId: RecordIdRef
50
+ }): ReadableUploadMetadata[] {
51
+ return attachmentStorage.listReadableUploadsFromMessages({
52
+ messages,
53
+ orgId: toOrgId(orgId),
54
+ userId: toUserId(userId),
55
+ })
56
+ },
50
57
 
51
- async extractStoredAttachmentText({
52
- storageKey,
53
- name,
54
- contentType,
55
- }: {
56
- storageKey: string
57
- name: string
58
- contentType: string
59
- }): Promise<string> {
60
- return attachmentStorageService.extractStoredAttachmentText({ storageKey, name, contentType })
61
- }
58
+ extractStoredAttachmentText({
59
+ storageKey,
60
+ name,
61
+ contentType,
62
+ }: {
63
+ storageKey: string
64
+ name: string
65
+ contentType: string
66
+ }): Promise<string> {
67
+ return runPromise(attachmentStorage.extractStoredAttachmentText({ storageKey, name, contentType }))
68
+ },
62
69
 
63
- async extractStoredAttachmentPages({
64
- storageKey,
65
- name,
66
- contentType,
67
- }: {
68
- storageKey: string
69
- name: string
70
- contentType: string
71
- }): Promise<{ pageMode: 'logical' | 'pdf'; pages: string[] }> {
72
- return attachmentStorageService.extractStoredAttachmentPages({ storageKey, name, contentType })
73
- }
70
+ extractStoredAttachmentPages({
71
+ storageKey,
72
+ name,
73
+ contentType,
74
+ }: {
75
+ storageKey: string
76
+ name: string
77
+ contentType: string
78
+ }): Promise<{ pageMode: 'logical' | 'pdf'; pages: string[] }> {
79
+ return runPromise(attachmentStorage.extractStoredAttachmentPages({ storageKey, name, contentType }))
80
+ },
74
81
 
75
- async readFilePartsFromUpload({
76
- upload,
77
- orgId,
78
- userId,
79
- part,
80
- pagesPerPart,
81
- }: {
82
- upload: ReadableUploadMetadata
83
- orgId: RecordIdRef
84
- userId: RecordIdRef
85
- part?: number
86
- pagesPerPart?: number
87
- }) {
88
- return attachmentStorageService.readFilePartsFromUpload({
82
+ readFilePartsFromUpload({
89
83
  upload,
90
- orgId: toOrgId(orgId),
91
- userId: toUserId(userId),
84
+ orgId,
85
+ userId,
92
86
  part,
93
87
  pagesPerPart,
94
- })
95
- }
88
+ }: {
89
+ upload: ReadableUploadMetadata
90
+ orgId: RecordIdRef
91
+ userId: RecordIdRef
92
+ part?: number
93
+ pagesPerPart?: number
94
+ }) {
95
+ return attachmentStorage.readFilePartsFromUpload({
96
+ upload,
97
+ orgId: toOrgId(orgId),
98
+ userId: toUserId(userId),
99
+ part,
100
+ pagesPerPart,
101
+ })
102
+ },
96
103
 
97
- getAttachmentUrl(storageKey: string): string {
98
- return attachmentStorageService.getAttachmentUrl(storageKey)
99
- }
104
+ getAttachmentUrl(storageKey: string): string {
105
+ return attachmentStorage.getAttachmentUrl(storageKey)
106
+ },
100
107
 
101
- async writeOrganizationDocument({
102
- orgId,
103
- namespace,
104
- relativePath,
105
- content,
106
- contentType,
107
- }: {
108
- orgId: RecordIdRef
109
- namespace: string
110
- relativePath: string
111
- content: string
112
- contentType: string
113
- }): Promise<{ storageKey: string; sizeBytes: number }> {
114
- return attachmentStorageService.writeOrganizationDocument({
115
- orgId: toOrgId(orgId),
108
+ writeOrganizationDocument({
109
+ orgId,
116
110
  namespace,
117
111
  relativePath,
118
112
  content,
119
113
  contentType,
120
- })
121
- }
114
+ }: {
115
+ orgId: RecordIdRef
116
+ namespace: string
117
+ relativePath: string
118
+ content: string
119
+ contentType: string
120
+ }): Promise<{ storageKey: string; sizeBytes: number }> {
121
+ return runPromise(
122
+ attachmentStorage.writeOrganizationDocument({
123
+ orgId: toOrgId(orgId),
124
+ namespace,
125
+ relativePath,
126
+ content,
127
+ contentType,
128
+ }),
129
+ )
130
+ },
122
131
 
123
- async uploadOrganizationDocument({
124
- file,
125
- orgId,
126
- namespace,
127
- relativePath,
128
- }: {
129
- file: File
130
- orgId: RecordIdRef
131
- namespace: string
132
- relativePath: string
133
- }) {
134
- return attachmentStorageService.uploadOrganizationDocument({ file, orgId: toOrgId(orgId), namespace, relativePath })
135
- }
132
+ uploadOrganizationDocument({
133
+ file,
134
+ orgId,
135
+ namespace,
136
+ relativePath,
137
+ }: {
138
+ file: File
139
+ orgId: RecordIdRef
140
+ namespace: string
141
+ relativePath: string
142
+ }) {
143
+ return attachmentStorage.uploadOrganizationDocument({ file, orgId: toOrgId(orgId), namespace, relativePath })
144
+ },
136
145
 
137
- async uploadThreadAttachment({
138
- file,
139
- orgId,
140
- userId,
141
- }: {
142
- file: File
143
- orgId: RecordIdRef
144
- userId: RecordIdRef
145
- }): Promise<SdkUploadedThreadAttachment> {
146
- return attachmentStorageService.uploadThreadAttachment({ file, orgId: toOrgId(orgId), userId: toUserId(userId) })
146
+ uploadThreadAttachment({
147
+ file,
148
+ orgId,
149
+ userId,
150
+ }: {
151
+ file: File
152
+ orgId: RecordIdRef
153
+ userId: RecordIdRef
154
+ }): Promise<SdkUploadedThreadAttachment> {
155
+ return runPromise(
156
+ attachmentStorage.uploadThreadAttachment({ file, orgId: toOrgId(orgId), userId: toUserId(userId) }),
157
+ )
158
+ },
147
159
  }
148
160
  }
149
161
 
150
- export const attachmentService = new AttachmentService()
162
+ export class AttachmentServiceTag extends Context.Service<
163
+ AttachmentServiceTag,
164
+ ReturnType<typeof makeAttachmentService>
165
+ >()('AttachmentService') {}
166
+
167
+ export const AttachmentServiceLive = Layer.effect(
168
+ AttachmentServiceTag,
169
+ Effect.map(AttachmentStorageServiceTag.asEffect(), (attachmentStorageService) =>
170
+ makeAttachmentService(attachmentStorageService),
171
+ ),
172
+ )