@lota-sdk/core 0.1.5

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 (153) hide show
  1. package/infrastructure/schema/00_workstream.surql +55 -0
  2. package/infrastructure/schema/01_memory.surql +47 -0
  3. package/infrastructure/schema/02_execution_plan.surql +62 -0
  4. package/infrastructure/schema/03_learned_skill.surql +32 -0
  5. package/infrastructure/schema/04_runtime_bootstrap.surql +8 -0
  6. package/package.json +128 -0
  7. package/src/ai/definitions.ts +308 -0
  8. package/src/bifrost/bifrost.ts +256 -0
  9. package/src/config/agent-defaults.ts +99 -0
  10. package/src/config/constants.ts +33 -0
  11. package/src/config/env-shapes.ts +122 -0
  12. package/src/config/logger.ts +29 -0
  13. package/src/config/model-constants.ts +31 -0
  14. package/src/config/search.ts +17 -0
  15. package/src/config/workstream-defaults.ts +68 -0
  16. package/src/db/base.service.ts +55 -0
  17. package/src/db/cursor-pagination.ts +73 -0
  18. package/src/db/memory-query-builder.ts +207 -0
  19. package/src/db/memory-store.helpers.ts +118 -0
  20. package/src/db/memory-store.rows.ts +29 -0
  21. package/src/db/memory-store.ts +974 -0
  22. package/src/db/memory-types.ts +193 -0
  23. package/src/db/memory.ts +505 -0
  24. package/src/db/record-id.ts +78 -0
  25. package/src/db/service.ts +932 -0
  26. package/src/db/startup.ts +152 -0
  27. package/src/db/tables.ts +20 -0
  28. package/src/document/org-document-chunking.ts +224 -0
  29. package/src/document/parsing.ts +40 -0
  30. package/src/embeddings/provider.ts +76 -0
  31. package/src/index.ts +302 -0
  32. package/src/queues/context-compaction.queue.ts +82 -0
  33. package/src/queues/document-processor.queue.ts +118 -0
  34. package/src/queues/memory-consolidation.queue.ts +65 -0
  35. package/src/queues/post-chat-memory.queue.ts +128 -0
  36. package/src/queues/recent-activity-title-refinement.queue.ts +69 -0
  37. package/src/queues/regular-chat-memory-digest.config.ts +12 -0
  38. package/src/queues/regular-chat-memory-digest.queue.ts +73 -0
  39. package/src/queues/skill-extraction.config.ts +9 -0
  40. package/src/queues/skill-extraction.queue.ts +62 -0
  41. package/src/redis/connection.ts +176 -0
  42. package/src/redis/index.ts +30 -0
  43. package/src/redis/org-memory-lock.ts +43 -0
  44. package/src/redis/redis-lease-lock.ts +158 -0
  45. package/src/runtime/agent-contract.ts +1 -0
  46. package/src/runtime/agent-prompt-context.ts +119 -0
  47. package/src/runtime/agent-runtime-policy.ts +192 -0
  48. package/src/runtime/agent-stream-helpers.ts +117 -0
  49. package/src/runtime/agent-types.ts +22 -0
  50. package/src/runtime/approval-continuation.ts +16 -0
  51. package/src/runtime/chat-attachments.ts +46 -0
  52. package/src/runtime/chat-message.ts +10 -0
  53. package/src/runtime/chat-request-routing.ts +21 -0
  54. package/src/runtime/chat-run-orchestration.ts +25 -0
  55. package/src/runtime/chat-run-registry.ts +20 -0
  56. package/src/runtime/chat-types.ts +18 -0
  57. package/src/runtime/context-compaction-constants.ts +11 -0
  58. package/src/runtime/context-compaction-runtime.ts +86 -0
  59. package/src/runtime/context-compaction.ts +909 -0
  60. package/src/runtime/execution-plan.ts +59 -0
  61. package/src/runtime/helper-model.ts +405 -0
  62. package/src/runtime/indexed-repositories-policy.ts +28 -0
  63. package/src/runtime/instruction-sections.ts +8 -0
  64. package/src/runtime/llm-content.ts +71 -0
  65. package/src/runtime/memory-block.ts +264 -0
  66. package/src/runtime/memory-digest-policy.ts +14 -0
  67. package/src/runtime/memory-format.ts +8 -0
  68. package/src/runtime/memory-pipeline.ts +570 -0
  69. package/src/runtime/memory-prompts-fact.ts +47 -0
  70. package/src/runtime/memory-prompts-parse.ts +3 -0
  71. package/src/runtime/memory-prompts-update.ts +37 -0
  72. package/src/runtime/memory-scope.ts +43 -0
  73. package/src/runtime/plugin-types.ts +10 -0
  74. package/src/runtime/retrieval-adapters.ts +25 -0
  75. package/src/runtime/retrieval-pipeline.ts +3 -0
  76. package/src/runtime/runtime-extensions.ts +154 -0
  77. package/src/runtime/skill-extraction-policy.ts +3 -0
  78. package/src/runtime/team-consultation-orchestrator.ts +245 -0
  79. package/src/runtime/team-consultation-prompts.ts +32 -0
  80. package/src/runtime/title-helpers.ts +12 -0
  81. package/src/runtime/turn-lifecycle.ts +28 -0
  82. package/src/runtime/workstream-chat-helpers.ts +187 -0
  83. package/src/runtime/workstream-routing-policy.ts +301 -0
  84. package/src/runtime/workstream-state.ts +261 -0
  85. package/src/services/attachment.service.ts +159 -0
  86. package/src/services/chat-attachments.service.ts +17 -0
  87. package/src/services/chat-run-registry.service.ts +3 -0
  88. package/src/services/context-compaction-runtime.ts +13 -0
  89. package/src/services/context-compaction.service.ts +115 -0
  90. package/src/services/document-chunk.service.ts +141 -0
  91. package/src/services/execution-plan.service.ts +890 -0
  92. package/src/services/learned-skill.service.ts +328 -0
  93. package/src/services/memory-assessment.service.ts +43 -0
  94. package/src/services/memory.service.ts +807 -0
  95. package/src/services/memory.utils.ts +84 -0
  96. package/src/services/mutating-approval.service.ts +110 -0
  97. package/src/services/recent-activity-title.service.ts +74 -0
  98. package/src/services/recent-activity.service.ts +397 -0
  99. package/src/services/workstream-change-tracker.service.ts +313 -0
  100. package/src/services/workstream-message.service.ts +283 -0
  101. package/src/services/workstream-title.service.ts +58 -0
  102. package/src/services/workstream-turn-preparation.ts +1340 -0
  103. package/src/services/workstream-turn.ts +37 -0
  104. package/src/services/workstream.service.ts +854 -0
  105. package/src/services/workstream.types.ts +118 -0
  106. package/src/storage/attachment-parser.ts +101 -0
  107. package/src/storage/attachment-storage.service.ts +391 -0
  108. package/src/storage/attachments.types.ts +11 -0
  109. package/src/storage/attachments.utils.ts +58 -0
  110. package/src/storage/generated-document-storage.service.ts +55 -0
  111. package/src/system-agents/agent-result.ts +27 -0
  112. package/src/system-agents/context-compacter.agent.ts +46 -0
  113. package/src/system-agents/delegated-agent-factory.ts +177 -0
  114. package/src/system-agents/helper-agent-options.ts +20 -0
  115. package/src/system-agents/memory-reranker.agent.ts +38 -0
  116. package/src/system-agents/memory.agent.ts +58 -0
  117. package/src/system-agents/recent-activity-title-refiner.agent.ts +53 -0
  118. package/src/system-agents/regular-chat-memory-digest.agent.ts +75 -0
  119. package/src/system-agents/researcher.agent.ts +34 -0
  120. package/src/system-agents/skill-extractor.agent.ts +88 -0
  121. package/src/system-agents/skill-manager.agent.ts +80 -0
  122. package/src/system-agents/title-generator.agent.ts +42 -0
  123. package/src/system-agents/workstream-tracker.agent.ts +58 -0
  124. package/src/tools/execution-plan.tool.ts +163 -0
  125. package/src/tools/fetch-webpage.tool.ts +132 -0
  126. package/src/tools/firecrawl-client.ts +12 -0
  127. package/src/tools/memory-block.tool.ts +55 -0
  128. package/src/tools/read-file-parts.tool.ts +80 -0
  129. package/src/tools/remember-memory.tool.ts +85 -0
  130. package/src/tools/research-topic.tool.ts +15 -0
  131. package/src/tools/search-tools.ts +55 -0
  132. package/src/tools/search-web.tool.ts +175 -0
  133. package/src/tools/team-think.tool.ts +125 -0
  134. package/src/tools/tool-contract.ts +21 -0
  135. package/src/tools/user-questions.tool.ts +18 -0
  136. package/src/utils/async.ts +50 -0
  137. package/src/utils/date-time.ts +34 -0
  138. package/src/utils/error.ts +10 -0
  139. package/src/utils/errors.ts +28 -0
  140. package/src/utils/hono-error-handler.ts +71 -0
  141. package/src/utils/string.ts +51 -0
  142. package/src/workers/bootstrap.ts +44 -0
  143. package/src/workers/memory-consolidation.worker.ts +318 -0
  144. package/src/workers/regular-chat-memory-digest.helpers.ts +100 -0
  145. package/src/workers/regular-chat-memory-digest.runner.ts +363 -0
  146. package/src/workers/regular-chat-memory-digest.worker.ts +22 -0
  147. package/src/workers/skill-extraction.runner.ts +331 -0
  148. package/src/workers/skill-extraction.worker.ts +22 -0
  149. package/src/workers/utils/repo-indexer-chunker.ts +331 -0
  150. package/src/workers/utils/repo-structure-extractor.ts +645 -0
  151. package/src/workers/utils/repomix-process-concurrency.ts +65 -0
  152. package/src/workers/utils/sandbox-error.ts +5 -0
  153. package/src/workers/worker-utils.ts +182 -0
@@ -0,0 +1,141 @@
1
+ import { createHash } from 'node:crypto'
2
+
3
+ import { chunkMarkdownDocument, chunkPagedDocument, chunkPlainTextDocument } from '../document/org-document-chunking'
4
+ import type { ParsedDocumentChunk } from '../document/org-document-chunking'
5
+ import { createDefaultEmbeddings } from '../embeddings/provider'
6
+
7
+ type DocumentChunkEmbeddings = {
8
+ embedDocuments(documents: string[]): Promise<number[][]>
9
+ embedQuery(query: string): Promise<number[]>
10
+ }
11
+
12
+ function createDocumentChunkEmbeddings(): DocumentChunkEmbeddings {
13
+ const embeddings = createDefaultEmbeddings()
14
+
15
+ return {
16
+ embedDocuments: async (documents) => await embeddings.embedDocuments(documents),
17
+ embedQuery: async (query) => await embeddings.embedQuery(query),
18
+ }
19
+ }
20
+
21
+ export interface VersionedDocumentChunkRecordShape {
22
+ chunkKey: string
23
+ chunkIndex: number
24
+ sectionPath?: string | null
25
+ pageStart?: number | null
26
+ pageEnd?: number | null
27
+ contentHash: string
28
+ sourceVersionKey: string
29
+ archivedAt?: string | number | Date | null
30
+ }
31
+
32
+ export class DocumentChunkService {
33
+ constructor(private readonly embeddings: DocumentChunkEmbeddings = createDocumentChunkEmbeddings()) {}
34
+
35
+ buildChunks(params: {
36
+ source: string
37
+ renderMode: 'markdown' | 'text' | 'pdf'
38
+ text: string
39
+ sectionPath?: string
40
+ pages?: Array<{ pageNumber: number; text: string }>
41
+ }): ParsedDocumentChunk[] {
42
+ if (
43
+ params.source === 'indexedOutcome' ||
44
+ params.source === 'websiteIntelligence' ||
45
+ params.renderMode === 'markdown'
46
+ ) {
47
+ return chunkMarkdownDocument({ text: params.text, baseSectionPath: params.sectionPath })
48
+ }
49
+
50
+ if (params.renderMode === 'pdf' && params.pages && params.pages.length > 0) {
51
+ return chunkPagedDocument({ pages: params.pages })
52
+ }
53
+
54
+ return chunkPlainTextDocument({ text: params.text, sectionPath: params.sectionPath })
55
+ }
56
+
57
+ hashContent(content: string): string {
58
+ return createHash('sha256').update(content).digest('hex')
59
+ }
60
+
61
+ estimateTokenCount(content: string): number {
62
+ return Math.max(1, Math.ceil(content.length / 4))
63
+ }
64
+
65
+ async embedQuery(query: string): Promise<number[]> {
66
+ return await this.embeddings.embedQuery(query)
67
+ }
68
+
69
+ async syncVersionedChunks<TRecord, TPayload>(params: {
70
+ sourceVersionKey: string
71
+ chunks: ParsedDocumentChunk[]
72
+ loadExisting: () => Promise<TRecord[]>
73
+ archive: (rows: TRecord[]) => Promise<void>
74
+ create: (payload: TPayload) => Promise<void>
75
+ update: (row: TRecord, payload: TPayload) => Promise<void>
76
+ buildPayload: (params: {
77
+ chunk: ParsedDocumentChunk
78
+ embedding: number[]
79
+ contentHash: string
80
+ tokenEstimate: number
81
+ }) => TPayload
82
+ selectShape: (row: TRecord) => VersionedDocumentChunkRecordShape
83
+ }): Promise<void> {
84
+ const existingRows = await params.loadExisting()
85
+ const existingByChunkKey = new Map(
86
+ existingRows
87
+ .filter((row) => params.selectShape(row).sourceVersionKey === params.sourceVersionKey)
88
+ .map((row) => [params.selectShape(row).chunkKey, row]),
89
+ )
90
+ const embeddings = await this.embeddings.embedDocuments(params.chunks.map((chunk) => chunk.content))
91
+ const seenChunkKeys = new Set<string>()
92
+ const staleVersionRows = existingRows.filter(
93
+ (row) => params.selectShape(row).sourceVersionKey !== params.sourceVersionKey,
94
+ )
95
+
96
+ await params.archive(staleVersionRows)
97
+
98
+ for (const [index, chunk] of params.chunks.entries()) {
99
+ const contentHash = this.hashContent(chunk.content)
100
+ const existingRow = existingByChunkKey.get(chunk.chunkKey)
101
+ const payload = params.buildPayload({
102
+ chunk,
103
+ embedding: embeddings[index] ?? [],
104
+ contentHash,
105
+ tokenEstimate: this.estimateTokenCount(chunk.content),
106
+ })
107
+
108
+ seenChunkKeys.add(chunk.chunkKey)
109
+
110
+ if (!existingRow) {
111
+ await params.create(payload)
112
+ continue
113
+ }
114
+
115
+ const current = params.selectShape(existingRow)
116
+ const hasChanged =
117
+ current.contentHash !== contentHash ||
118
+ current.chunkIndex !== chunk.chunkIndex ||
119
+ (current.sectionPath ?? null) !== (chunk.sectionPath ?? null) ||
120
+ (current.pageStart ?? null) !== (chunk.pageStart ?? null) ||
121
+ (current.pageEnd ?? null) !== (chunk.pageEnd ?? null)
122
+
123
+ if (!hasChanged) {
124
+ continue
125
+ }
126
+
127
+ await params.update(existingRow, payload)
128
+ }
129
+
130
+ const removedCurrentVersionRows = existingRows.filter((row) => {
131
+ const current = params.selectShape(row)
132
+ return current.sourceVersionKey === params.sourceVersionKey && !seenChunkKeys.has(current.chunkKey)
133
+ })
134
+
135
+ await params.archive(removedCurrentVersionRows)
136
+ }
137
+ }
138
+
139
+ export const documentChunkService = new DocumentChunkService()
140
+
141
+ export type { ParsedDocumentChunk }