@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.
- package/infrastructure/schema/00_workstream.surql +55 -0
- package/infrastructure/schema/01_memory.surql +47 -0
- package/infrastructure/schema/02_execution_plan.surql +62 -0
- package/infrastructure/schema/03_learned_skill.surql +32 -0
- package/infrastructure/schema/04_runtime_bootstrap.surql +8 -0
- package/package.json +128 -0
- package/src/ai/definitions.ts +308 -0
- package/src/bifrost/bifrost.ts +256 -0
- package/src/config/agent-defaults.ts +99 -0
- package/src/config/constants.ts +33 -0
- package/src/config/env-shapes.ts +122 -0
- package/src/config/logger.ts +29 -0
- package/src/config/model-constants.ts +31 -0
- package/src/config/search.ts +17 -0
- package/src/config/workstream-defaults.ts +68 -0
- package/src/db/base.service.ts +55 -0
- package/src/db/cursor-pagination.ts +73 -0
- package/src/db/memory-query-builder.ts +207 -0
- package/src/db/memory-store.helpers.ts +118 -0
- package/src/db/memory-store.rows.ts +29 -0
- package/src/db/memory-store.ts +974 -0
- package/src/db/memory-types.ts +193 -0
- package/src/db/memory.ts +505 -0
- package/src/db/record-id.ts +78 -0
- package/src/db/service.ts +932 -0
- package/src/db/startup.ts +152 -0
- package/src/db/tables.ts +20 -0
- package/src/document/org-document-chunking.ts +224 -0
- package/src/document/parsing.ts +40 -0
- package/src/embeddings/provider.ts +76 -0
- package/src/index.ts +302 -0
- package/src/queues/context-compaction.queue.ts +82 -0
- package/src/queues/document-processor.queue.ts +118 -0
- package/src/queues/memory-consolidation.queue.ts +65 -0
- package/src/queues/post-chat-memory.queue.ts +128 -0
- package/src/queues/recent-activity-title-refinement.queue.ts +69 -0
- package/src/queues/regular-chat-memory-digest.config.ts +12 -0
- package/src/queues/regular-chat-memory-digest.queue.ts +73 -0
- package/src/queues/skill-extraction.config.ts +9 -0
- package/src/queues/skill-extraction.queue.ts +62 -0
- package/src/redis/connection.ts +176 -0
- package/src/redis/index.ts +30 -0
- package/src/redis/org-memory-lock.ts +43 -0
- package/src/redis/redis-lease-lock.ts +158 -0
- package/src/runtime/agent-contract.ts +1 -0
- package/src/runtime/agent-prompt-context.ts +119 -0
- package/src/runtime/agent-runtime-policy.ts +192 -0
- package/src/runtime/agent-stream-helpers.ts +117 -0
- package/src/runtime/agent-types.ts +22 -0
- package/src/runtime/approval-continuation.ts +16 -0
- package/src/runtime/chat-attachments.ts +46 -0
- package/src/runtime/chat-message.ts +10 -0
- package/src/runtime/chat-request-routing.ts +21 -0
- package/src/runtime/chat-run-orchestration.ts +25 -0
- package/src/runtime/chat-run-registry.ts +20 -0
- package/src/runtime/chat-types.ts +18 -0
- package/src/runtime/context-compaction-constants.ts +11 -0
- package/src/runtime/context-compaction-runtime.ts +86 -0
- package/src/runtime/context-compaction.ts +909 -0
- package/src/runtime/execution-plan.ts +59 -0
- package/src/runtime/helper-model.ts +405 -0
- package/src/runtime/indexed-repositories-policy.ts +28 -0
- package/src/runtime/instruction-sections.ts +8 -0
- package/src/runtime/llm-content.ts +71 -0
- package/src/runtime/memory-block.ts +264 -0
- package/src/runtime/memory-digest-policy.ts +14 -0
- package/src/runtime/memory-format.ts +8 -0
- package/src/runtime/memory-pipeline.ts +570 -0
- package/src/runtime/memory-prompts-fact.ts +47 -0
- package/src/runtime/memory-prompts-parse.ts +3 -0
- package/src/runtime/memory-prompts-update.ts +37 -0
- package/src/runtime/memory-scope.ts +43 -0
- package/src/runtime/plugin-types.ts +10 -0
- package/src/runtime/retrieval-adapters.ts +25 -0
- package/src/runtime/retrieval-pipeline.ts +3 -0
- package/src/runtime/runtime-extensions.ts +154 -0
- package/src/runtime/skill-extraction-policy.ts +3 -0
- package/src/runtime/team-consultation-orchestrator.ts +245 -0
- package/src/runtime/team-consultation-prompts.ts +32 -0
- package/src/runtime/title-helpers.ts +12 -0
- package/src/runtime/turn-lifecycle.ts +28 -0
- package/src/runtime/workstream-chat-helpers.ts +187 -0
- package/src/runtime/workstream-routing-policy.ts +301 -0
- package/src/runtime/workstream-state.ts +261 -0
- package/src/services/attachment.service.ts +159 -0
- package/src/services/chat-attachments.service.ts +17 -0
- package/src/services/chat-run-registry.service.ts +3 -0
- package/src/services/context-compaction-runtime.ts +13 -0
- package/src/services/context-compaction.service.ts +115 -0
- package/src/services/document-chunk.service.ts +141 -0
- package/src/services/execution-plan.service.ts +890 -0
- package/src/services/learned-skill.service.ts +328 -0
- package/src/services/memory-assessment.service.ts +43 -0
- package/src/services/memory.service.ts +807 -0
- package/src/services/memory.utils.ts +84 -0
- package/src/services/mutating-approval.service.ts +110 -0
- package/src/services/recent-activity-title.service.ts +74 -0
- package/src/services/recent-activity.service.ts +397 -0
- package/src/services/workstream-change-tracker.service.ts +313 -0
- package/src/services/workstream-message.service.ts +283 -0
- package/src/services/workstream-title.service.ts +58 -0
- package/src/services/workstream-turn-preparation.ts +1340 -0
- package/src/services/workstream-turn.ts +37 -0
- package/src/services/workstream.service.ts +854 -0
- package/src/services/workstream.types.ts +118 -0
- package/src/storage/attachment-parser.ts +101 -0
- package/src/storage/attachment-storage.service.ts +391 -0
- package/src/storage/attachments.types.ts +11 -0
- package/src/storage/attachments.utils.ts +58 -0
- package/src/storage/generated-document-storage.service.ts +55 -0
- package/src/system-agents/agent-result.ts +27 -0
- package/src/system-agents/context-compacter.agent.ts +46 -0
- package/src/system-agents/delegated-agent-factory.ts +177 -0
- package/src/system-agents/helper-agent-options.ts +20 -0
- package/src/system-agents/memory-reranker.agent.ts +38 -0
- package/src/system-agents/memory.agent.ts +58 -0
- package/src/system-agents/recent-activity-title-refiner.agent.ts +53 -0
- package/src/system-agents/regular-chat-memory-digest.agent.ts +75 -0
- package/src/system-agents/researcher.agent.ts +34 -0
- package/src/system-agents/skill-extractor.agent.ts +88 -0
- package/src/system-agents/skill-manager.agent.ts +80 -0
- package/src/system-agents/title-generator.agent.ts +42 -0
- package/src/system-agents/workstream-tracker.agent.ts +58 -0
- package/src/tools/execution-plan.tool.ts +163 -0
- package/src/tools/fetch-webpage.tool.ts +132 -0
- package/src/tools/firecrawl-client.ts +12 -0
- package/src/tools/memory-block.tool.ts +55 -0
- package/src/tools/read-file-parts.tool.ts +80 -0
- package/src/tools/remember-memory.tool.ts +85 -0
- package/src/tools/research-topic.tool.ts +15 -0
- package/src/tools/search-tools.ts +55 -0
- package/src/tools/search-web.tool.ts +175 -0
- package/src/tools/team-think.tool.ts +125 -0
- package/src/tools/tool-contract.ts +21 -0
- package/src/tools/user-questions.tool.ts +18 -0
- package/src/utils/async.ts +50 -0
- package/src/utils/date-time.ts +34 -0
- package/src/utils/error.ts +10 -0
- package/src/utils/errors.ts +28 -0
- package/src/utils/hono-error-handler.ts +71 -0
- package/src/utils/string.ts +51 -0
- package/src/workers/bootstrap.ts +44 -0
- package/src/workers/memory-consolidation.worker.ts +318 -0
- package/src/workers/regular-chat-memory-digest.helpers.ts +100 -0
- package/src/workers/regular-chat-memory-digest.runner.ts +363 -0
- package/src/workers/regular-chat-memory-digest.worker.ts +22 -0
- package/src/workers/skill-extraction.runner.ts +331 -0
- package/src/workers/skill-extraction.worker.ts +22 -0
- package/src/workers/utils/repo-indexer-chunker.ts +331 -0
- package/src/workers/utils/repo-structure-extractor.ts +645 -0
- package/src/workers/utils/repomix-process-concurrency.ts +65 -0
- package/src/workers/utils/sandbox-error.ts +5 -0
- 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 }
|