@yolk-sdk/knowledge 0.1.0-canary.78 → 0.1.0-canary.79

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/README.md CHANGED
@@ -69,6 +69,9 @@ construct and enforce them; the package does not infer identity, tenancy, or per
69
69
  ids or kinds. The **value** `KnowledgeSearchScope` is the single-id constructor
70
70
  (`KnowledgeSearchScope.make({ id })`, tag `KnowledgeScope`). `KnowledgeSearchScopes.make({ ids })`
71
71
  is the non-empty-ids variant. The **type** `KnowledgeSearchScope` remains the union of both.
72
+ Scope and document references use the branded `KnowledgeScopeId` and `KnowledgeDocumentId`
73
+ (non-empty trimmed strings, same wire representation). Hosts Effect-decode raw external/persisted
74
+ ids at their boundary and use `.make` for trusted constants and minted values.
72
75
 
73
76
  ## Subpaths
74
77
 
@@ -1,11 +1,11 @@
1
- import { KnowledgeChunk, KnowledgeMetadata } from "./documents.mjs";
1
+ import { KnowledgeChunk, KnowledgeDocumentId, KnowledgeMetadata, KnowledgeScopeId } from "./documents.mjs";
2
2
  import { KnowledgeChunkingError } from "./errors.mjs";
3
3
  import { Context, Effect, Layer } from "effect";
4
4
 
5
5
  //#region src/chunking.d.ts
6
6
  type ChunkKnowledgeDocumentInput = {
7
- readonly scopeId: string;
8
- readonly documentId: string;
7
+ readonly scopeId: KnowledgeScopeId;
8
+ readonly documentId: KnowledgeDocumentId;
9
9
  readonly content: string;
10
10
  readonly maxTokens?: number;
11
11
  readonly metadata?: KnowledgeMetadata;
@@ -18,8 +18,8 @@ declare class KnowledgeChunker extends KnowledgeChunker_base {}
18
18
  declare const countKnowledgeChunkTokens: (text: string) => number;
19
19
  declare const chunkKnowledgeText: (input: ChunkKnowledgeDocumentInput, maxTokens: number) => Effect.Effect<{
20
20
  id: string;
21
- scopeId: string;
22
- documentId: string;
21
+ scopeId: string & import("effect/Brand").Brand<"KnowledgeScopeId">;
22
+ documentId: string & import("effect/Brand").Brand<"KnowledgeDocumentId">;
23
23
  content: string;
24
24
  position: number;
25
25
  tokenCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"chunking.d.mts","names":[],"sources":["../src/chunking.ts"],"mappings":";;;;;KAWY,2BAAA;EAAA,SACD,OAAA;EAAA,SACA,UAAA;EAAA,SACA,OAAA;EAAA,SACA,SAAA;EAAA,SACA,QAAA,GAAW,iBAAiB;AAAA;AAAA,KAG3B,mBAAA;EAAA,SACD,KAAA,GACP,KAAA,EAAO,2BAAA,KACJ,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,cAAA,GAAiB,sBAAA;AAAA;AAAA,cACnD,qBAAA;cAEY,gBAAA,SAAyB,qBAErC;AAAA,cAEY,yBAAA,GAA6B,IAAY;AAAA,cAqHzC,kBAAA,GAAsB,KAAA,EAAO,2BAAA,EAA6B,SAAA,aAAiB,MAAA,CAAA,MAAA;;;;;;;;;;;cAkC3E,2BAAA,GAA+B,KAAA;EAAA,SACjC,SAAA;AAAA,MACP,mBAEF;AAAA,cAEW,2BAAA,GACX,KAAA;EAAA,SAAkB,SAAA;AAAA,MAAwC,KAAA,CAAA,KAAA,CAAA,gBAAA"}
1
+ {"version":3,"file":"chunking.d.mts","names":[],"sources":["../src/chunking.ts"],"mappings":";;;;;KAgBY,2BAAA;EAAA,SACD,OAAA,EAAS,gBAAA;EAAA,SACT,UAAA,EAAY,mBAAA;EAAA,SACZ,OAAA;EAAA,SACA,SAAA;EAAA,SACA,QAAA,GAAW,iBAAA;AAAA;AAAA,KAGV,mBAAA;EAAA,SACD,KAAA,GACP,KAAA,EAAO,2BAAA,KACJ,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,cAAA,GAAiB,sBAAA;AAAA;AAAA,cACnD,qBAAA;cAEY,gBAAA,SAAyB,qBAErC;AAAA,cAEY,yBAAA,GAA6B,IAAY;AAAA,cAqHzC,kBAAA,GAAsB,KAAA,EAAO,2BAAA,EAA6B,SAAA,aAAiB,MAAA,CAAA,MAAA;;;;;;;;;;;cAkC3E,2BAAA,GAA+B,KAAA;EAAA,SACjC,SAAA;AAAA,MACP,mBAEF;AAAA,cAEW,2BAAA,GACX,KAAA;EAAA,SAAkB,SAAA;AAAA,MAAwC,KAAA,CAAA,KAAA,CAAA,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"chunking.mjs","names":[],"sources":["../src/chunking.ts"],"sourcesContent":["import { Context, Effect, Layer } from 'effect'\nimport { countTokens, decode, encode } from 'gpt-tokenizer/encoding/o200k_base'\nimport type { KnowledgeChunk, KnowledgeMetadata } from './documents.ts'\nimport { KnowledgeChunkingError } from './errors.ts'\n\nconst SENTENCE_PATTERN = /[^.!?]+[.!?]+(?:[\"')\\]]+)?\\s*|[^.!?]+$/g\n\nconst PARAGRAPH_BREAK_PATTERN = /(\\n{2,})/\n\nconst WORD_PATTERN = /\\S+\\s*/g\n\nexport type ChunkKnowledgeDocumentInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly content: string\n readonly maxTokens?: number\n readonly metadata?: KnowledgeMetadata\n}\n\nexport type KnowledgeChunkerApi = {\n readonly chunk: (\n input: ChunkKnowledgeDocumentInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunk>, KnowledgeChunkingError>\n}\n\nexport class KnowledgeChunker extends Context.Service<KnowledgeChunker, KnowledgeChunkerApi>()(\n '@yolk-sdk/knowledge/KnowledgeChunker'\n) {}\n\nexport const countKnowledgeChunkTokens = (text: string) => countTokens(text)\n\nconst sanitizeText = (text: string) =>\n text\n .replace(/\\r\\n/g, '\\n')\n .replace(/[\\t ]+/g, ' ')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\nconst splitSentences = (text: string) =>\n text\n .split(PARAGRAPH_BREAK_PATTERN)\n .flatMap(part => {\n if (part.length === 0) {\n return []\n }\n\n if (/^\\n{2,}$/.test(part)) {\n return ['\\n\\n']\n }\n\n return part.match(SENTENCE_PATTERN) ?? [part]\n })\n .filter(unit => unit.length > 0)\n\nconst splitEncodedTokens = (text: string, maxTokens: number) => {\n const tokens = encode(text)\n\n return Array.from({ length: Math.ceil(tokens.length / maxTokens) }, (_, index) =>\n decode(tokens.slice(index * maxTokens, index * maxTokens + maxTokens)).trim()\n ).filter(chunk => chunk.length > 0)\n}\n\nconst splitOversizedUnit = (text: string, maxTokens: number) => {\n const words = text.match(WORD_PATTERN) ?? []\n const chunks: string[] = []\n let current = ''\n let currentTokenCount = 0\n\n for (const word of words) {\n const wordTokenCount = countTokens(word)\n\n if (wordTokenCount > maxTokens) {\n const currentChunk = current.trim()\n\n if (currentChunk.length > 0) {\n chunks.push(currentChunk)\n }\n\n chunks.push(...splitEncodedTokens(word, maxTokens))\n current = ''\n currentTokenCount = 0\n continue\n }\n\n if (currentTokenCount > 0 && currentTokenCount + wordTokenCount > maxTokens) {\n const currentChunk = current.trim()\n\n if (currentChunk.length > 0) {\n chunks.push(currentChunk)\n }\n\n current = word\n currentTokenCount = wordTokenCount\n continue\n }\n\n current = `${current}${word}`\n currentTokenCount += wordTokenCount\n }\n\n const finalChunk = current.trim()\n\n if (finalChunk.length > 0) {\n chunks.push(finalChunk)\n }\n\n return chunks\n}\n\nconst splitUnitsBySize = (units: ReadonlyArray<string>, maxTokens: number) =>\n units.flatMap(unit =>\n countTokens(unit) <= maxTokens ? [unit] : splitOversizedUnit(unit, maxTokens)\n )\n\nconst buildChunkContents = (units: ReadonlyArray<string>, maxTokens: number) => {\n const chunks: string[] = []\n let current = ''\n let currentTokenCount = 0\n\n const pushCurrent = () => {\n const content = current.trim()\n\n if (content.length > 0) {\n chunks.push(content)\n }\n }\n\n for (const unit of units) {\n const unitTokenCount = countTokens(unit)\n\n if (currentTokenCount > 0 && currentTokenCount + unitTokenCount > maxTokens) {\n pushCurrent()\n current = unit\n currentTokenCount = unitTokenCount\n continue\n }\n\n current = `${current}${unit}`\n currentTokenCount += unitTokenCount\n }\n\n pushCurrent()\n\n return chunks\n}\n\nexport const chunkKnowledgeText = (input: ChunkKnowledgeDocumentInput, maxTokens: number) =>\n Effect.gen(function* () {\n if (!Number.isInteger(maxTokens) || maxTokens < 1) {\n return yield* Effect.fail(\n new KnowledgeChunkingError({ message: 'Chunk maxTokens must be a positive integer' })\n )\n }\n\n const sanitized = sanitizeText(input.content)\n\n if (sanitized.length === 0) {\n return yield* Effect.fail(\n new KnowledgeChunkingError({ message: 'Cannot chunk empty content' })\n )\n }\n\n const units = splitUnitsBySize(splitSentences(sanitized), maxTokens)\n const contents = buildChunkContents(units, maxTokens)\n\n if (contents.length === 0) {\n return yield* Effect.fail(new KnowledgeChunkingError({ message: 'No chunks produced' }))\n }\n\n return contents.map((content, position) => ({\n id: `${input.documentId}:chunk:${position}`,\n scopeId: input.scopeId,\n documentId: input.documentId,\n content,\n position,\n tokenCount: countTokens(content),\n metadata: input.metadata\n })) satisfies ReadonlyArray<KnowledgeChunk>\n })\n\nexport const makeDefaultKnowledgeChunker = (input: {\n readonly maxTokens: number\n}): KnowledgeChunkerApi => ({\n chunk: document => chunkKnowledgeText(document, document.maxTokens ?? input.maxTokens)\n})\n\nexport const DefaultKnowledgeChunkerLive = (\n input: { readonly maxTokens: number } = { maxTokens: 512 }\n) => Layer.succeed(KnowledgeChunker, makeDefaultKnowledgeChunker(input))\n"],"mappings":"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"}
1
+ {"version":3,"file":"chunking.mjs","names":[],"sources":["../src/chunking.ts"],"sourcesContent":["import { Context, Effect, Layer } from 'effect'\nimport { countTokens, decode, encode } from 'gpt-tokenizer/encoding/o200k_base'\nimport type {\n KnowledgeChunk,\n KnowledgeDocumentId,\n KnowledgeMetadata,\n KnowledgeScopeId\n} from './documents.ts'\nimport { KnowledgeChunkingError } from './errors.ts'\n\nconst SENTENCE_PATTERN = /[^.!?]+[.!?]+(?:[\"')\\]]+)?\\s*|[^.!?]+$/g\n\nconst PARAGRAPH_BREAK_PATTERN = /(\\n{2,})/\n\nconst WORD_PATTERN = /\\S+\\s*/g\n\nexport type ChunkKnowledgeDocumentInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly content: string\n readonly maxTokens?: number\n readonly metadata?: KnowledgeMetadata\n}\n\nexport type KnowledgeChunkerApi = {\n readonly chunk: (\n input: ChunkKnowledgeDocumentInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunk>, KnowledgeChunkingError>\n}\n\nexport class KnowledgeChunker extends Context.Service<KnowledgeChunker, KnowledgeChunkerApi>()(\n '@yolk-sdk/knowledge/KnowledgeChunker'\n) {}\n\nexport const countKnowledgeChunkTokens = (text: string) => countTokens(text)\n\nconst sanitizeText = (text: string) =>\n text\n .replace(/\\r\\n/g, '\\n')\n .replace(/[\\t ]+/g, ' ')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\nconst splitSentences = (text: string) =>\n text\n .split(PARAGRAPH_BREAK_PATTERN)\n .flatMap(part => {\n if (part.length === 0) {\n return []\n }\n\n if (/^\\n{2,}$/.test(part)) {\n return ['\\n\\n']\n }\n\n return part.match(SENTENCE_PATTERN) ?? [part]\n })\n .filter(unit => unit.length > 0)\n\nconst splitEncodedTokens = (text: string, maxTokens: number) => {\n const tokens = encode(text)\n\n return Array.from({ length: Math.ceil(tokens.length / maxTokens) }, (_, index) =>\n decode(tokens.slice(index * maxTokens, index * maxTokens + maxTokens)).trim()\n ).filter(chunk => chunk.length > 0)\n}\n\nconst splitOversizedUnit = (text: string, maxTokens: number) => {\n const words = text.match(WORD_PATTERN) ?? []\n const chunks: string[] = []\n let current = ''\n let currentTokenCount = 0\n\n for (const word of words) {\n const wordTokenCount = countTokens(word)\n\n if (wordTokenCount > maxTokens) {\n const currentChunk = current.trim()\n\n if (currentChunk.length > 0) {\n chunks.push(currentChunk)\n }\n\n chunks.push(...splitEncodedTokens(word, maxTokens))\n current = ''\n currentTokenCount = 0\n continue\n }\n\n if (currentTokenCount > 0 && currentTokenCount + wordTokenCount > maxTokens) {\n const currentChunk = current.trim()\n\n if (currentChunk.length > 0) {\n chunks.push(currentChunk)\n }\n\n current = word\n currentTokenCount = wordTokenCount\n continue\n }\n\n current = `${current}${word}`\n currentTokenCount += wordTokenCount\n }\n\n const finalChunk = current.trim()\n\n if (finalChunk.length > 0) {\n chunks.push(finalChunk)\n }\n\n return chunks\n}\n\nconst splitUnitsBySize = (units: ReadonlyArray<string>, maxTokens: number) =>\n units.flatMap(unit =>\n countTokens(unit) <= maxTokens ? [unit] : splitOversizedUnit(unit, maxTokens)\n )\n\nconst buildChunkContents = (units: ReadonlyArray<string>, maxTokens: number) => {\n const chunks: string[] = []\n let current = ''\n let currentTokenCount = 0\n\n const pushCurrent = () => {\n const content = current.trim()\n\n if (content.length > 0) {\n chunks.push(content)\n }\n }\n\n for (const unit of units) {\n const unitTokenCount = countTokens(unit)\n\n if (currentTokenCount > 0 && currentTokenCount + unitTokenCount > maxTokens) {\n pushCurrent()\n current = unit\n currentTokenCount = unitTokenCount\n continue\n }\n\n current = `${current}${unit}`\n currentTokenCount += unitTokenCount\n }\n\n pushCurrent()\n\n return chunks\n}\n\nexport const chunkKnowledgeText = (input: ChunkKnowledgeDocumentInput, maxTokens: number) =>\n Effect.gen(function* () {\n if (!Number.isInteger(maxTokens) || maxTokens < 1) {\n return yield* Effect.fail(\n new KnowledgeChunkingError({ message: 'Chunk maxTokens must be a positive integer' })\n )\n }\n\n const sanitized = sanitizeText(input.content)\n\n if (sanitized.length === 0) {\n return yield* Effect.fail(\n new KnowledgeChunkingError({ message: 'Cannot chunk empty content' })\n )\n }\n\n const units = splitUnitsBySize(splitSentences(sanitized), maxTokens)\n const contents = buildChunkContents(units, maxTokens)\n\n if (contents.length === 0) {\n return yield* Effect.fail(new KnowledgeChunkingError({ message: 'No chunks produced' }))\n }\n\n return contents.map((content, position) => ({\n id: `${input.documentId}:chunk:${position}`,\n scopeId: input.scopeId,\n documentId: input.documentId,\n content,\n position,\n tokenCount: countTokens(content),\n metadata: input.metadata\n })) satisfies ReadonlyArray<KnowledgeChunk>\n })\n\nexport const makeDefaultKnowledgeChunker = (input: {\n readonly maxTokens: number\n}): KnowledgeChunkerApi => ({\n chunk: document => chunkKnowledgeText(document, document.maxTokens ?? input.maxTokens)\n})\n\nexport const DefaultKnowledgeChunkerLive = (\n input: { readonly maxTokens: number } = { maxTokens: 512 }\n) => Layer.succeed(KnowledgeChunker, makeDefaultKnowledgeChunker(input))\n"],"mappings":"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"}
@@ -10,13 +10,17 @@ declare const KnowledgeAvailabilitySchema: Schema.Literals<readonly ["pinned", "
10
10
  type KnowledgeAvailability = Schema.Schema.Type<typeof KnowledgeAvailabilitySchema>;
11
11
  declare const KnowledgeDocumentStatusSchema: Schema.Literals<readonly ["processing", "ready", "error"]>;
12
12
  type KnowledgeDocumentStatus = Schema.Schema.Type<typeof KnowledgeDocumentStatusSchema>;
13
+ declare const KnowledgeScopeId: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
14
+ type KnowledgeScopeId = typeof KnowledgeScopeId.Type;
15
+ declare const KnowledgeDocumentId: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
16
+ type KnowledgeDocumentId = typeof KnowledgeDocumentId.Type;
13
17
  declare const KnowledgeScopeSchema: Schema.Struct<{
14
- readonly id: Schema.Trimmed;
18
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
15
19
  readonly kind: Schema.optional<Schema.Trimmed>;
16
20
  }>;
17
21
  type KnowledgeScope = Schema.Schema.Type<typeof KnowledgeScopeSchema>;
18
22
  declare const KnowledgeDocumentSchema: Schema.Struct<{
19
- readonly id: Schema.Trimmed;
23
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
20
24
  readonly slug: Schema.Trimmed;
21
25
  readonly title: Schema.Trimmed;
22
26
  readonly purpose: Schema.Trimmed;
@@ -34,7 +38,7 @@ declare const KnowledgeDocumentSchema: Schema.Struct<{
34
38
  type KnowledgeDocument = Schema.Schema.Type<typeof KnowledgeDocumentSchema>;
35
39
  declare const CreateKnowledgeDocumentInputSchema: Schema.Struct<{
36
40
  readonly scope: Schema.Struct<{
37
- readonly id: Schema.Trimmed;
41
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
38
42
  readonly kind: Schema.optional<Schema.Trimmed>;
39
43
  }>;
40
44
  readonly slug: Schema.Trimmed;
@@ -49,10 +53,10 @@ declare const CreateKnowledgeDocumentInputSchema: Schema.Struct<{
49
53
  type CreateKnowledgeDocumentInput = Schema.Schema.Type<typeof CreateKnowledgeDocumentInputSchema>;
50
54
  declare const UpdateKnowledgeDocumentInputSchema: Schema.Struct<{
51
55
  readonly scope: Schema.Struct<{
52
- readonly id: Schema.Trimmed;
56
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
53
57
  readonly kind: Schema.optional<Schema.Trimmed>;
54
58
  }>;
55
- readonly id: Schema.Trimmed;
59
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
56
60
  readonly slug: Schema.optional<Schema.Trimmed>;
57
61
  readonly title: Schema.optional<Schema.Trimmed>;
58
62
  readonly purpose: Schema.optional<Schema.Trimmed>;
@@ -68,7 +72,7 @@ declare const UpdateKnowledgeDocumentInputSchema: Schema.Struct<{
68
72
  type UpdateKnowledgeDocumentInput = Schema.Schema.Type<typeof UpdateKnowledgeDocumentInputSchema>;
69
73
  declare const KnowledgeFileSchema: Schema.Struct<{
70
74
  readonly id: Schema.Trimmed;
71
- readonly documentId: Schema.Trimmed;
75
+ readonly documentId: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
72
76
  readonly storageKey: Schema.Trimmed;
73
77
  readonly mediaType: Schema.optional<Schema.Trimmed>;
74
78
  readonly byteSize: Schema.optional<Schema.Int>;
@@ -79,8 +83,8 @@ declare const KnowledgeFileSchema: Schema.Struct<{
79
83
  type KnowledgeFile = Schema.Schema.Type<typeof KnowledgeFileSchema>;
80
84
  declare const KnowledgeChunkSchema: Schema.Struct<{
81
85
  readonly id: Schema.Trimmed;
82
- readonly scopeId: Schema.Trimmed;
83
- readonly documentId: Schema.Trimmed;
86
+ readonly scopeId: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
87
+ readonly documentId: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
84
88
  readonly content: Schema.Trimmed;
85
89
  readonly position: Schema.Int;
86
90
  readonly tokenCount: Schema.Int;
@@ -88,15 +92,15 @@ declare const KnowledgeChunkSchema: Schema.Struct<{
88
92
  }>;
89
93
  type KnowledgeChunk = Schema.Schema.Type<typeof KnowledgeChunkSchema>;
90
94
  declare const KnowledgeSearchScope: Schema.TaggedStruct<"KnowledgeScope", {
91
- readonly id: Schema.Trimmed;
95
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
92
96
  }>;
93
97
  declare const KnowledgeSearchScopes: Schema.TaggedStruct<"KnowledgeScopes", {
94
- readonly ids: Schema.NonEmptyArray<Schema.Trimmed>;
98
+ readonly ids: Schema.NonEmptyArray<Schema.brand<Schema.Trimmed, "KnowledgeScopeId">>;
95
99
  }>;
96
100
  declare const KnowledgeSearchScopeSchema: Schema.Union<readonly [Schema.TaggedStruct<"KnowledgeScope", {
97
- readonly id: Schema.Trimmed;
101
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
98
102
  }>, Schema.TaggedStruct<"KnowledgeScopes", {
99
- readonly ids: Schema.NonEmptyArray<Schema.Trimmed>;
103
+ readonly ids: Schema.NonEmptyArray<Schema.brand<Schema.Trimmed, "KnowledgeScopeId">>;
100
104
  }>]>;
101
105
  type KnowledgeSearchScope = typeof KnowledgeSearchScopeSchema.Type;
102
106
  declare const KnowledgeFileSource: Schema.TaggedStruct<"File", {
@@ -121,8 +125,8 @@ declare const KnowledgeSourceSchema: Schema.Union<readonly [Schema.TaggedStruct<
121
125
  }>]>;
122
126
  type KnowledgeSource = typeof KnowledgeSourceSchema.Type;
123
127
  declare const IndexedKnowledgeDocumentSchema: Schema.Struct<{
124
- readonly id: Schema.Trimmed;
125
- readonly scopeId: Schema.Trimmed;
128
+ readonly id: Schema.brand<Schema.Trimmed, "KnowledgeDocumentId">;
129
+ readonly scopeId: Schema.brand<Schema.Trimmed, "KnowledgeScopeId">;
126
130
  readonly source: Schema.Union<readonly [Schema.TaggedStruct<"File", {
127
131
  readonly ref: Schema.Trimmed;
128
132
  readonly name: Schema.optional<Schema.Trimmed>;
@@ -151,5 +155,5 @@ declare const ExtractedKnowledgeDocumentSchema: Schema.Struct<{
151
155
  type ExtractedKnowledgeDocument = Schema.Schema.Type<typeof ExtractedKnowledgeDocumentSchema>;
152
156
  declare const defaultKnowledgeChunkMaxTokens = 512;
153
157
  //#endregion
154
- export { CreateKnowledgeDocumentInput, CreateKnowledgeDocumentInputSchema, ExtractedKnowledgeDocument, ExtractedKnowledgeDocumentSchema, IndexedKnowledgeDocument, IndexedKnowledgeDocumentSchema, KnowledgeAvailability, KnowledgeAvailabilitySchema, KnowledgeChunk, KnowledgeChunkSchema, KnowledgeDocument, KnowledgeDocumentSchema, KnowledgeDocumentStatus, KnowledgeDocumentStatusSchema, KnowledgeFile, KnowledgeFileSchema, KnowledgeFileSource, KnowledgeMetadata, KnowledgeMetadataSchema, KnowledgeScope, KnowledgeScopeSchema, KnowledgeSearchScope, KnowledgeSearchScopeSchema, KnowledgeSearchScopes, KnowledgeSource, KnowledgeSourceSchema, KnowledgeTextSource, KnowledgeUrlSource, NonEmptyTrimmedString, NonNegativeInteger, PositiveInteger, UpdateKnowledgeDocumentInput, UpdateKnowledgeDocumentInputSchema, defaultKnowledgeChunkMaxTokens };
158
+ export { CreateKnowledgeDocumentInput, CreateKnowledgeDocumentInputSchema, ExtractedKnowledgeDocument, ExtractedKnowledgeDocumentSchema, IndexedKnowledgeDocument, IndexedKnowledgeDocumentSchema, KnowledgeAvailability, KnowledgeAvailabilitySchema, KnowledgeChunk, KnowledgeChunkSchema, KnowledgeDocument, KnowledgeDocumentId, KnowledgeDocumentSchema, KnowledgeDocumentStatus, KnowledgeDocumentStatusSchema, KnowledgeFile, KnowledgeFileSchema, KnowledgeFileSource, KnowledgeMetadata, KnowledgeMetadataSchema, KnowledgeScope, KnowledgeScopeId, KnowledgeScopeSchema, KnowledgeSearchScope, KnowledgeSearchScopeSchema, KnowledgeSearchScopes, KnowledgeSource, KnowledgeSourceSchema, KnowledgeTextSource, KnowledgeUrlSource, NonEmptyTrimmedString, NonNegativeInteger, PositiveInteger, UpdateKnowledgeDocumentInput, UpdateKnowledgeDocumentInputSchema, defaultKnowledgeChunkMaxTokens };
155
159
  //# sourceMappingURL=documents.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.mts","names":[],"sources":["../src/documents.ts"],"mappings":";;;cAEa,qBAAA,EAAqB,MAAA,CAAA,OAAyD;AAAA,cAE9E,kBAAA,EAAkB,MAAA,CAAA,GAAkE;AAAA,cAEpF,eAAA,EAAe,MAAA,CAAA,GAAyD;AAAA,cAExE,uBAAA,EAAuB,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA;AAAA,KAExB,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,uBAAA;AAAA,cAE7C,2BAAA,EAA2B,MAAA,CAAA,QAAA;AAAA,KAE5B,qBAAA,GAAwB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,2BAAA;AAAA,cAEjD,6BAAA,EAA6B,MAAA,CAAA,QAAA;AAAA,KAE9B,uBAAA,GAA0B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,6BAAA;AAAA,cAEnD,oBAAA,EAAoB,MAAA,CAAA,MAAA;EAAA;;;KAKrB,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,oBAAA;AAAA,cAE1C,uBAAA,EAAuB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;KAiBxB,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,uBAAA;AAAA,cAE7C,kCAAA,EAAkC,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;KAYnC,4BAAA,GAA+B,MAAA,CAAO,MAAA,CAAO,IAAI,QACpD,kCAAA;AAAA,cAGI,kCAAA,EAAkC,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;KAgBnC,4BAAA,GAA+B,MAAA,CAAO,MAAA,CAAO,IAAI,QACpD,kCAAA;AAAA,cAGI,mBAAA,EAAmB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;KAWpB,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,mBAAA;AAAA,cAEzC,oBAAA,EAAoB,MAAA,CAAA,MAAA;EAAA;;;;;;;;KAUrB,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,oBAAA;AAAA,cAE1C,oBAAA,EAAoB,MAAA,CAAA,YAAA;EAAA,aAE/B,MAAA,CAAA,OAAA;AAAA;AAAA,cAEW,qBAAA,EAAqB,MAAA,CAAA,YAAA;EAAA;;cAIrB,0BAAA,EAA0B,MAAA,CAAA,KAAA,WAAA,MAAA,CAAA,YAAA;EAAA;;;;KAK3B,oBAAA,UAA8B,0BAAA,CAA2B,IAAI;AAAA,cAE5D,mBAAA,EAAmB,MAAA,CAAA,YAAA;EAAA;;;;cAMnB,kBAAA,EAAkB,MAAA,CAAA,YAAA;EAAA,cAE7B,MAAA,CAAA,OAAA;AAAA;AAAA,cAEW,mBAAA,EAAmB,MAAA,CAAA,YAAA;EAAA;;cAInB,qBAAA,EAAqB,MAAA,CAAA,KAAA,WAAA,MAAA,CAAA,YAAA;EAAA;;;;;;;;KAMtB,eAAA,UAAyB,qBAAA,CAAsB,IAAI;AAAA,cAElD,8BAAA,EAA8B,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;KAc/B,wBAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,8BAAA;AAAA,cAEpD,gCAAA,EAAgC,MAAA,CAAA,MAAA;EAAA;;;;;KAOjC,0BAAA,GAA6B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,gCAAA;AAAA,cAEtD,8BAAA"}
1
+ {"version":3,"file":"documents.d.mts","names":[],"sources":["../src/documents.ts"],"mappings":";;;cAEa,qBAAA,EAAqB,MAAA,CAAA,OAAyD;AAAA,cAE9E,kBAAA,EAAkB,MAAA,CAAA,GAAkE;AAAA,cAEpF,eAAA,EAAe,MAAA,CAAA,GAAyD;AAAA,cAExE,uBAAA,EAAuB,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA;AAAA,KAExB,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,uBAAA;AAAA,cAE7C,2BAAA,EAA2B,MAAA,CAAA,QAAA;AAAA,KAE5B,qBAAA,GAAwB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,2BAAA;AAAA,cAEjD,6BAAA,EAA6B,MAAA,CAAA,QAAA;AAAA,KAE9B,uBAAA,GAA0B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,6BAAA;AAAA,cAEnD,gBAAA,EAAgB,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA;AAAA,KAEjB,gBAAA,UAA0B,gBAAA,CAAiB,IAAI;AAAA,cAE9C,mBAAA,EAAmB,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA;AAAA,KAEpB,mBAAA,UAA6B,mBAAA,CAAoB,IAAI;AAAA,cAEpD,oBAAA,EAAoB,MAAA,CAAA,MAAA;EAAA;;;KAKrB,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,oBAAA;AAAA,cAE1C,uBAAA,EAAuB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;KAiBxB,iBAAA,GAAoB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,uBAAA;AAAA,cAE7C,kCAAA,EAAkC,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;KAYnC,4BAAA,GAA+B,MAAA,CAAO,MAAA,CAAO,IAAI,QACpD,kCAAA;AAAA,cAGI,kCAAA,EAAkC,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;KAgBnC,4BAAA,GAA+B,MAAA,CAAO,MAAA,CAAO,IAAI,QACpD,kCAAA;AAAA,cAGI,mBAAA,EAAmB,MAAA,CAAA,MAAA;EAAA;;;;;;;;;KAWpB,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,mBAAA;AAAA,cAEzC,oBAAA,EAAoB,MAAA,CAAA,MAAA;EAAA;;;;;;;;KAUrB,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,oBAAA;AAAA,cAE1C,oBAAA,EAAoB,MAAA,CAAA,YAAA;EAAA;;cAIpB,qBAAA,EAAqB,MAAA,CAAA,YAAA;EAAA;;cAIrB,0BAAA,EAA0B,MAAA,CAAA,KAAA,WAAA,MAAA,CAAA,YAAA;EAAA;;;;KAK3B,oBAAA,UAA8B,0BAAA,CAA2B,IAAI;AAAA,cAE5D,mBAAA,EAAmB,MAAA,CAAA,YAAA;EAAA;;;;cAMnB,kBAAA,EAAkB,MAAA,CAAA,YAAA;EAAA,cAE7B,MAAA,CAAA,OAAA;AAAA;AAAA,cAEW,mBAAA,EAAmB,MAAA,CAAA,YAAA;EAAA;;cAInB,qBAAA,EAAqB,MAAA,CAAA,KAAA,WAAA,MAAA,CAAA,YAAA;EAAA;;;;;;;;KAMtB,eAAA,UAAyB,qBAAA,CAAsB,IAAI;AAAA,cAElD,8BAAA,EAA8B,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;KAc/B,wBAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,8BAAA;AAAA,cAEpD,gCAAA,EAAgC,MAAA,CAAA,MAAA;EAAA;;;;;KAOjC,0BAAA,GAA6B,MAAA,CAAO,MAAA,CAAO,IAAI,QAAQ,gCAAA;AAAA,cAEtD,8BAAA"}
@@ -14,12 +14,14 @@ const KnowledgeDocumentStatusSchema = Schema.Literals([
14
14
  "ready",
15
15
  "error"
16
16
  ]);
17
+ const KnowledgeScopeId = NonEmptyTrimmedString.pipe(Schema.brand("KnowledgeScopeId"));
18
+ const KnowledgeDocumentId = NonEmptyTrimmedString.pipe(Schema.brand("KnowledgeDocumentId"));
17
19
  const KnowledgeScopeSchema = Schema.Struct({
18
- id: NonEmptyTrimmedString,
20
+ id: KnowledgeScopeId,
19
21
  kind: Schema.optional(NonEmptyTrimmedString)
20
22
  });
21
23
  const KnowledgeDocumentSchema = Schema.Struct({
22
- id: NonEmptyTrimmedString,
24
+ id: KnowledgeDocumentId,
23
25
  slug: NonEmptyTrimmedString,
24
26
  title: NonEmptyTrimmedString,
25
27
  purpose: NonEmptyTrimmedString,
@@ -47,7 +49,7 @@ const CreateKnowledgeDocumentInputSchema = Schema.Struct({
47
49
  });
48
50
  const UpdateKnowledgeDocumentInputSchema = Schema.Struct({
49
51
  scope: KnowledgeScopeSchema,
50
- id: NonEmptyTrimmedString,
52
+ id: KnowledgeDocumentId,
51
53
  slug: Schema.optional(NonEmptyTrimmedString),
52
54
  title: Schema.optional(NonEmptyTrimmedString),
53
55
  purpose: Schema.optional(NonEmptyTrimmedString),
@@ -62,7 +64,7 @@ const UpdateKnowledgeDocumentInputSchema = Schema.Struct({
62
64
  });
63
65
  const KnowledgeFileSchema = Schema.Struct({
64
66
  id: NonEmptyTrimmedString,
65
- documentId: NonEmptyTrimmedString,
67
+ documentId: KnowledgeDocumentId,
66
68
  storageKey: NonEmptyTrimmedString,
67
69
  mediaType: Schema.optional(NonEmptyTrimmedString),
68
70
  byteSize: Schema.optional(NonNegativeInteger),
@@ -72,15 +74,15 @@ const KnowledgeFileSchema = Schema.Struct({
72
74
  });
73
75
  const KnowledgeChunkSchema = Schema.Struct({
74
76
  id: NonEmptyTrimmedString,
75
- scopeId: NonEmptyTrimmedString,
76
- documentId: NonEmptyTrimmedString,
77
+ scopeId: KnowledgeScopeId,
78
+ documentId: KnowledgeDocumentId,
77
79
  content: NonEmptyTrimmedString,
78
80
  position: NonNegativeInteger,
79
81
  tokenCount: PositiveInteger,
80
82
  metadata: Schema.optional(KnowledgeMetadataSchema)
81
83
  });
82
- const KnowledgeSearchScope = Schema.TaggedStruct("KnowledgeScope", { id: NonEmptyTrimmedString });
83
- const KnowledgeSearchScopes = Schema.TaggedStruct("KnowledgeScopes", { ids: Schema.NonEmptyArray(NonEmptyTrimmedString) });
84
+ const KnowledgeSearchScope = Schema.TaggedStruct("KnowledgeScope", { id: KnowledgeScopeId });
85
+ const KnowledgeSearchScopes = Schema.TaggedStruct("KnowledgeScopes", { ids: Schema.NonEmptyArray(KnowledgeScopeId) });
84
86
  const KnowledgeSearchScopeSchema = Schema.Union([KnowledgeSearchScope, KnowledgeSearchScopes]);
85
87
  const KnowledgeFileSource = Schema.TaggedStruct("File", {
86
88
  ref: NonEmptyTrimmedString,
@@ -95,8 +97,8 @@ const KnowledgeSourceSchema = Schema.Union([
95
97
  KnowledgeTextSource
96
98
  ]);
97
99
  const IndexedKnowledgeDocumentSchema = Schema.Struct({
98
- id: NonEmptyTrimmedString,
99
- scopeId: NonEmptyTrimmedString,
100
+ id: KnowledgeDocumentId,
101
+ scopeId: KnowledgeScopeId,
100
102
  source: KnowledgeSourceSchema,
101
103
  status: KnowledgeDocumentStatusSchema,
102
104
  title: Schema.optional(NonEmptyTrimmedString),
@@ -115,6 +117,6 @@ const ExtractedKnowledgeDocumentSchema = Schema.Struct({
115
117
  });
116
118
  const defaultKnowledgeChunkMaxTokens = 512;
117
119
  //#endregion
118
- export { CreateKnowledgeDocumentInputSchema, ExtractedKnowledgeDocumentSchema, IndexedKnowledgeDocumentSchema, KnowledgeAvailabilitySchema, KnowledgeChunkSchema, KnowledgeDocumentSchema, KnowledgeDocumentStatusSchema, KnowledgeFileSchema, KnowledgeFileSource, KnowledgeMetadataSchema, KnowledgeScopeSchema, KnowledgeSearchScope, KnowledgeSearchScopeSchema, KnowledgeSearchScopes, KnowledgeSourceSchema, KnowledgeTextSource, KnowledgeUrlSource, NonEmptyTrimmedString, NonNegativeInteger, PositiveInteger, UpdateKnowledgeDocumentInputSchema, defaultKnowledgeChunkMaxTokens };
120
+ export { CreateKnowledgeDocumentInputSchema, ExtractedKnowledgeDocumentSchema, IndexedKnowledgeDocumentSchema, KnowledgeAvailabilitySchema, KnowledgeChunkSchema, KnowledgeDocumentId, KnowledgeDocumentSchema, KnowledgeDocumentStatusSchema, KnowledgeFileSchema, KnowledgeFileSource, KnowledgeMetadataSchema, KnowledgeScopeId, KnowledgeScopeSchema, KnowledgeSearchScope, KnowledgeSearchScopeSchema, KnowledgeSearchScopes, KnowledgeSourceSchema, KnowledgeTextSource, KnowledgeUrlSource, NonEmptyTrimmedString, NonNegativeInteger, PositiveInteger, UpdateKnowledgeDocumentInputSchema, defaultKnowledgeChunkMaxTokens };
119
121
 
120
122
  //# sourceMappingURL=documents.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.mjs","names":[],"sources":["../src/documents.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\n\nexport const NonEmptyTrimmedString = Schema.Trimmed.pipe(Schema.check(Schema.isNonEmpty()))\n\nexport const NonNegativeInteger = Schema.Int.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(0)))\n\nexport const PositiveInteger = Schema.Int.pipe(Schema.check(Schema.isGreaterThan(0)))\n\nexport const KnowledgeMetadataSchema = Schema.Record(Schema.String, Schema.Unknown)\n\nexport type KnowledgeMetadata = Schema.Schema.Type<typeof KnowledgeMetadataSchema>\n\nexport const KnowledgeAvailabilitySchema = Schema.Literals(['pinned', 'searchable', 'archived'])\n\nexport type KnowledgeAvailability = Schema.Schema.Type<typeof KnowledgeAvailabilitySchema>\n\nexport const KnowledgeDocumentStatusSchema = Schema.Literals(['processing', 'ready', 'error'])\n\nexport type KnowledgeDocumentStatus = Schema.Schema.Type<typeof KnowledgeDocumentStatusSchema>\n\nexport const KnowledgeScopeSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n kind: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport type KnowledgeScope = Schema.Schema.Type<typeof KnowledgeScopeSchema>\n\nexport const KnowledgeDocumentSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n slug: NonEmptyTrimmedString,\n title: NonEmptyTrimmedString,\n purpose: NonEmptyTrimmedString,\n origin: NonEmptyTrimmedString,\n content: NonEmptyTrimmedString,\n status: KnowledgeDocumentStatusSchema,\n availability: KnowledgeAvailabilitySchema,\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n reviewedAt: Schema.optional(Schema.DateTimeUtc),\n metadata: Schema.optional(KnowledgeMetadataSchema),\n createdAt: Schema.DateTimeUtc,\n updatedAt: Schema.DateTimeUtc\n})\n\nexport type KnowledgeDocument = Schema.Schema.Type<typeof KnowledgeDocumentSchema>\n\nexport const CreateKnowledgeDocumentInputSchema = Schema.Struct({\n scope: KnowledgeScopeSchema,\n slug: NonEmptyTrimmedString,\n title: NonEmptyTrimmedString,\n purpose: NonEmptyTrimmedString,\n origin: NonEmptyTrimmedString,\n content: NonEmptyTrimmedString,\n availability: KnowledgeAvailabilitySchema,\n summary: Schema.optional(Schema.String),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type CreateKnowledgeDocumentInput = Schema.Schema.Type<\n typeof CreateKnowledgeDocumentInputSchema\n>\n\nexport const UpdateKnowledgeDocumentInputSchema = Schema.Struct({\n scope: KnowledgeScopeSchema,\n id: NonEmptyTrimmedString,\n slug: Schema.optional(NonEmptyTrimmedString),\n title: Schema.optional(NonEmptyTrimmedString),\n purpose: Schema.optional(NonEmptyTrimmedString),\n origin: Schema.optional(NonEmptyTrimmedString),\n content: Schema.optional(NonEmptyTrimmedString),\n status: Schema.optional(KnowledgeDocumentStatusSchema),\n availability: Schema.optional(KnowledgeAvailabilitySchema),\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n reviewedAt: Schema.optional(Schema.DateTimeUtc),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type UpdateKnowledgeDocumentInput = Schema.Schema.Type<\n typeof UpdateKnowledgeDocumentInputSchema\n>\n\nexport const KnowledgeFileSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n documentId: NonEmptyTrimmedString,\n storageKey: NonEmptyTrimmedString,\n mediaType: Schema.optional(NonEmptyTrimmedString),\n byteSize: Schema.optional(NonNegativeInteger),\n checksum: Schema.optional(NonEmptyTrimmedString),\n metadata: Schema.optional(KnowledgeMetadataSchema),\n createdAt: Schema.DateTimeUtc\n})\n\nexport type KnowledgeFile = Schema.Schema.Type<typeof KnowledgeFileSchema>\n\nexport const KnowledgeChunkSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n scopeId: NonEmptyTrimmedString,\n documentId: NonEmptyTrimmedString,\n content: NonEmptyTrimmedString,\n position: NonNegativeInteger,\n tokenCount: PositiveInteger,\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type KnowledgeChunk = Schema.Schema.Type<typeof KnowledgeChunkSchema>\n\nexport const KnowledgeSearchScope = Schema.TaggedStruct('KnowledgeScope', {\n id: NonEmptyTrimmedString\n})\n\nexport const KnowledgeSearchScopes = Schema.TaggedStruct('KnowledgeScopes', {\n ids: Schema.NonEmptyArray(NonEmptyTrimmedString)\n})\n\nexport const KnowledgeSearchScopeSchema = Schema.Union([\n KnowledgeSearchScope,\n KnowledgeSearchScopes\n])\n\nexport type KnowledgeSearchScope = typeof KnowledgeSearchScopeSchema.Type\n\nexport const KnowledgeFileSource = Schema.TaggedStruct('File', {\n ref: NonEmptyTrimmedString,\n name: Schema.optional(NonEmptyTrimmedString),\n mediaType: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport const KnowledgeUrlSource = Schema.TaggedStruct('Url', {\n url: NonEmptyTrimmedString\n})\n\nexport const KnowledgeTextSource = Schema.TaggedStruct('Text', {\n label: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport const KnowledgeSourceSchema = Schema.Union([\n KnowledgeFileSource,\n KnowledgeUrlSource,\n KnowledgeTextSource\n])\n\nexport type KnowledgeSource = typeof KnowledgeSourceSchema.Type\n\nexport const IndexedKnowledgeDocumentSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n scopeId: NonEmptyTrimmedString,\n source: KnowledgeSourceSchema,\n status: KnowledgeDocumentStatusSchema,\n title: Schema.optional(NonEmptyTrimmedString),\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n contentHash: Schema.optional(NonEmptyTrimmedString),\n tokenCount: Schema.optional(NonNegativeInteger),\n chunkCount: Schema.optional(NonNegativeInteger),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type IndexedKnowledgeDocument = Schema.Schema.Type<typeof IndexedKnowledgeDocumentSchema>\n\nexport const ExtractedKnowledgeDocumentSchema = Schema.Struct({\n content: NonEmptyTrimmedString,\n title: Schema.optional(NonEmptyTrimmedString),\n summary: Schema.optional(Schema.String),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type ExtractedKnowledgeDocument = Schema.Schema.Type<typeof ExtractedKnowledgeDocumentSchema>\n\nexport const defaultKnowledgeChunkMaxTokens = 512\n"],"mappings":"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"}
1
+ {"version":3,"file":"documents.mjs","names":[],"sources":["../src/documents.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\n\nexport const NonEmptyTrimmedString = Schema.Trimmed.pipe(Schema.check(Schema.isNonEmpty()))\n\nexport const NonNegativeInteger = Schema.Int.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(0)))\n\nexport const PositiveInteger = Schema.Int.pipe(Schema.check(Schema.isGreaterThan(0)))\n\nexport const KnowledgeMetadataSchema = Schema.Record(Schema.String, Schema.Unknown)\n\nexport type KnowledgeMetadata = Schema.Schema.Type<typeof KnowledgeMetadataSchema>\n\nexport const KnowledgeAvailabilitySchema = Schema.Literals(['pinned', 'searchable', 'archived'])\n\nexport type KnowledgeAvailability = Schema.Schema.Type<typeof KnowledgeAvailabilitySchema>\n\nexport const KnowledgeDocumentStatusSchema = Schema.Literals(['processing', 'ready', 'error'])\n\nexport type KnowledgeDocumentStatus = Schema.Schema.Type<typeof KnowledgeDocumentStatusSchema>\n\nexport const KnowledgeScopeId = NonEmptyTrimmedString.pipe(Schema.brand('KnowledgeScopeId'))\n\nexport type KnowledgeScopeId = typeof KnowledgeScopeId.Type\n\nexport const KnowledgeDocumentId = NonEmptyTrimmedString.pipe(Schema.brand('KnowledgeDocumentId'))\n\nexport type KnowledgeDocumentId = typeof KnowledgeDocumentId.Type\n\nexport const KnowledgeScopeSchema = Schema.Struct({\n id: KnowledgeScopeId,\n kind: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport type KnowledgeScope = Schema.Schema.Type<typeof KnowledgeScopeSchema>\n\nexport const KnowledgeDocumentSchema = Schema.Struct({\n id: KnowledgeDocumentId,\n slug: NonEmptyTrimmedString,\n title: NonEmptyTrimmedString,\n purpose: NonEmptyTrimmedString,\n origin: NonEmptyTrimmedString,\n content: NonEmptyTrimmedString,\n status: KnowledgeDocumentStatusSchema,\n availability: KnowledgeAvailabilitySchema,\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n reviewedAt: Schema.optional(Schema.DateTimeUtc),\n metadata: Schema.optional(KnowledgeMetadataSchema),\n createdAt: Schema.DateTimeUtc,\n updatedAt: Schema.DateTimeUtc\n})\n\nexport type KnowledgeDocument = Schema.Schema.Type<typeof KnowledgeDocumentSchema>\n\nexport const CreateKnowledgeDocumentInputSchema = Schema.Struct({\n scope: KnowledgeScopeSchema,\n slug: NonEmptyTrimmedString,\n title: NonEmptyTrimmedString,\n purpose: NonEmptyTrimmedString,\n origin: NonEmptyTrimmedString,\n content: NonEmptyTrimmedString,\n availability: KnowledgeAvailabilitySchema,\n summary: Schema.optional(Schema.String),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type CreateKnowledgeDocumentInput = Schema.Schema.Type<\n typeof CreateKnowledgeDocumentInputSchema\n>\n\nexport const UpdateKnowledgeDocumentInputSchema = Schema.Struct({\n scope: KnowledgeScopeSchema,\n id: KnowledgeDocumentId,\n slug: Schema.optional(NonEmptyTrimmedString),\n title: Schema.optional(NonEmptyTrimmedString),\n purpose: Schema.optional(NonEmptyTrimmedString),\n origin: Schema.optional(NonEmptyTrimmedString),\n content: Schema.optional(NonEmptyTrimmedString),\n status: Schema.optional(KnowledgeDocumentStatusSchema),\n availability: Schema.optional(KnowledgeAvailabilitySchema),\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n reviewedAt: Schema.optional(Schema.DateTimeUtc),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type UpdateKnowledgeDocumentInput = Schema.Schema.Type<\n typeof UpdateKnowledgeDocumentInputSchema\n>\n\nexport const KnowledgeFileSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n documentId: KnowledgeDocumentId,\n storageKey: NonEmptyTrimmedString,\n mediaType: Schema.optional(NonEmptyTrimmedString),\n byteSize: Schema.optional(NonNegativeInteger),\n checksum: Schema.optional(NonEmptyTrimmedString),\n metadata: Schema.optional(KnowledgeMetadataSchema),\n createdAt: Schema.DateTimeUtc\n})\n\nexport type KnowledgeFile = Schema.Schema.Type<typeof KnowledgeFileSchema>\n\nexport const KnowledgeChunkSchema = Schema.Struct({\n id: NonEmptyTrimmedString,\n scopeId: KnowledgeScopeId,\n documentId: KnowledgeDocumentId,\n content: NonEmptyTrimmedString,\n position: NonNegativeInteger,\n tokenCount: PositiveInteger,\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type KnowledgeChunk = Schema.Schema.Type<typeof KnowledgeChunkSchema>\n\nexport const KnowledgeSearchScope = Schema.TaggedStruct('KnowledgeScope', {\n id: KnowledgeScopeId\n})\n\nexport const KnowledgeSearchScopes = Schema.TaggedStruct('KnowledgeScopes', {\n ids: Schema.NonEmptyArray(KnowledgeScopeId)\n})\n\nexport const KnowledgeSearchScopeSchema = Schema.Union([\n KnowledgeSearchScope,\n KnowledgeSearchScopes\n])\n\nexport type KnowledgeSearchScope = typeof KnowledgeSearchScopeSchema.Type\n\nexport const KnowledgeFileSource = Schema.TaggedStruct('File', {\n ref: NonEmptyTrimmedString,\n name: Schema.optional(NonEmptyTrimmedString),\n mediaType: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport const KnowledgeUrlSource = Schema.TaggedStruct('Url', {\n url: NonEmptyTrimmedString\n})\n\nexport const KnowledgeTextSource = Schema.TaggedStruct('Text', {\n label: Schema.optional(NonEmptyTrimmedString)\n})\n\nexport const KnowledgeSourceSchema = Schema.Union([\n KnowledgeFileSource,\n KnowledgeUrlSource,\n KnowledgeTextSource\n])\n\nexport type KnowledgeSource = typeof KnowledgeSourceSchema.Type\n\nexport const IndexedKnowledgeDocumentSchema = Schema.Struct({\n id: KnowledgeDocumentId,\n scopeId: KnowledgeScopeId,\n source: KnowledgeSourceSchema,\n status: KnowledgeDocumentStatusSchema,\n title: Schema.optional(NonEmptyTrimmedString),\n summary: Schema.optional(Schema.String),\n errorMessage: Schema.optional(Schema.String),\n contentHash: Schema.optional(NonEmptyTrimmedString),\n tokenCount: Schema.optional(NonNegativeInteger),\n chunkCount: Schema.optional(NonNegativeInteger),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type IndexedKnowledgeDocument = Schema.Schema.Type<typeof IndexedKnowledgeDocumentSchema>\n\nexport const ExtractedKnowledgeDocumentSchema = Schema.Struct({\n content: NonEmptyTrimmedString,\n title: Schema.optional(NonEmptyTrimmedString),\n summary: Schema.optional(Schema.String),\n metadata: Schema.optional(KnowledgeMetadataSchema)\n})\n\nexport type ExtractedKnowledgeDocument = Schema.Schema.Type<typeof ExtractedKnowledgeDocumentSchema>\n\nexport const defaultKnowledgeChunkMaxTokens = 512\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { KnowledgeDocumentId, KnowledgeScopeId } from "./documents.mjs";
1
2
  import { KnowledgeIngestionError } from "./errors.mjs";
2
3
  import { KnowledgeChunker } from "./chunking.mjs";
3
4
  import { KnowledgeEmbedder } from "./embeddings.mjs";
@@ -8,15 +9,15 @@ import { Effect } from "effect";
8
9
 
9
10
  //#region src/ingestion.d.ts
10
11
  type IngestKnowledgeDocumentInput = {
11
- readonly scopeId: string;
12
- readonly documentId: string;
12
+ readonly scopeId: KnowledgeScopeId;
13
+ readonly documentId: KnowledgeDocumentId;
13
14
  readonly source: LoadedKnowledgeSource;
14
15
  readonly contentHash?: string;
15
16
  readonly maxTokens?: number;
16
17
  };
17
18
  declare const ingestKnowledgeDocument: (input: IngestKnowledgeDocumentInput) => Effect.Effect<{
18
- readonly id: string;
19
- readonly scopeId: string;
19
+ readonly id: string & import("effect/Brand").Brand<"KnowledgeDocumentId">;
20
+ readonly scopeId: string & import("effect/Brand").Brand<"KnowledgeScopeId">;
20
21
  readonly status: "processing" | "ready" | "error";
21
22
  readonly source: {
22
23
  readonly _tag: "File";
@@ -39,7 +40,7 @@ declare const ingestKnowledgeDocument: (input: IngestKnowledgeDocumentInput) =>
39
40
  readonly title?: string | undefined;
40
41
  readonly contentHash?: string | undefined;
41
42
  readonly chunkCount?: number | undefined;
42
- }, KnowledgeIngestionError, KnowledgeSummarizer | KnowledgeChunker | KnowledgeEmbedder | KnowledgeExtractor | SearchIndexStore>;
43
+ }, KnowledgeIngestionError, KnowledgeSummarizer | KnowledgeChunker | SearchIndexStore | KnowledgeEmbedder | KnowledgeExtractor>;
43
44
  type KnowledgeIngestionPipeline = {
44
45
  readonly ingest: (input: IngestKnowledgeDocumentInput) => ReturnType<typeof ingestKnowledgeDocument>;
45
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ingestion.d.mts","names":[],"sources":["../src/ingestion.ts"],"mappings":";;;;;;;;;KAUY,4BAAA;EAAA,SACD,OAAA;EAAA,SACA,UAAA;EAAA,SACA,MAAA,EAAQ,qBAAqB;EAAA,SAC7B,WAAA;EAAA,SACA,SAAA;AAAA;AAAA,cAaE,uBAAA,GAA2B,KAAA,EAAO,4BAAA,KAA4B,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KA0I/D,0BAAA;EAAA,SACD,MAAA,GACP,KAAA,EAAO,4BAAA,KACJ,UAAA,QAAkB,uBAAA;AAAA;AAAA,cAGZ,qBAAA,QAA4B,0BAEvC"}
1
+ {"version":3,"file":"ingestion.d.mts","names":[],"sources":["../src/ingestion.ts"],"mappings":";;;;;;;;;;KAWY,4BAAA;EAAA,SACD,OAAA,EAAS,gBAAA;EAAA,SACT,UAAA,EAAY,mBAAA;EAAA,SACZ,MAAA,EAAQ,qBAAA;EAAA,SACR,WAAA;EAAA,SACA,SAAA;AAAA;AAAA,cAaE,uBAAA,GAA2B,KAAA,EAAO,4BAAA,KAA4B,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;KA0I/D,0BAAA;EAAA,SACD,MAAA,GACP,KAAA,EAAO,4BAAA,KACJ,UAAA,QAAkB,uBAAA;AAAA;AAAA,cAGZ,qBAAA,QAA4B,0BAEvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestion.mjs","names":["Arr"],"sources":["../src/ingestion.ts"],"sourcesContent":["import { Array as Arr, Effect } from 'effect'\nimport { KnowledgeChunker } from './chunking.ts'\nimport { defaultKnowledgeChunkMaxTokens } from './documents.ts'\nimport { KnowledgeEmbedder } from './embeddings.ts'\nimport { KnowledgeExtractor } from './extraction.ts'\nimport { KnowledgeSummarizer } from './summarization.ts'\nimport type { LoadedKnowledgeSource } from './extraction.ts'\nimport { KnowledgeIngestionError } from './errors.ts'\nimport { SearchIndexStore } from './store.ts'\n\nexport type IngestKnowledgeDocumentInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly source: LoadedKnowledgeSource\n readonly contentHash?: string\n readonly maxTokens?: number\n}\n\nconst markErrorBestEffort = (input: IngestKnowledgeDocumentInput, error: KnowledgeIngestionError) =>\n Effect.gen(function* () {\n const store = yield* SearchIndexStore\n yield* store.markDocumentError({\n scopeId: input.scopeId,\n documentId: input.documentId,\n message: error.message\n })\n }).pipe(Effect.catch(() => Effect.void))\n\nexport const ingestKnowledgeDocument = (input: IngestKnowledgeDocumentInput) =>\n Effect.gen(function* () {\n yield* Effect.annotateCurrentSpan({\n 'knowledge_search.scope_id': input.scopeId,\n 'knowledge_search.document_id': input.documentId,\n 'knowledge_search.source_type': input.source.source._tag\n })\n const store = yield* SearchIndexStore\n const extractor = yield* KnowledgeExtractor\n const chunker = yield* KnowledgeChunker\n const embedder = yield* KnowledgeEmbedder\n const summarizer = yield* KnowledgeSummarizer\n\n yield* store\n .upsertDocument({\n document: {\n id: input.documentId,\n scopeId: input.scopeId,\n source: input.source.source,\n status: 'processing',\n metadata: input.source.metadata\n }\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n\n const extracted = yield* extractor\n .extract(input.source)\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'extract', cause: error })\n )\n )\n\n const chunks = yield* chunker\n .chunk({\n scopeId: input.scopeId,\n documentId: input.documentId,\n content: extracted.content,\n maxTokens: input.maxTokens ?? defaultKnowledgeChunkMaxTokens,\n metadata: extracted.metadata\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'chunk', cause: error })\n )\n )\n\n const indexed = yield* Effect.all(\n {\n embeddings: embedder.embedTexts(chunks.map(chunk => chunk.content)).pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({\n message: error.message,\n stage: 'embed',\n cause: error\n })\n )\n ),\n summary: summarizer\n .summarize({\n content: extracted.content,\n sourceTitle: extracted.title,\n metadata: extracted.metadata\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({\n message: error.message,\n stage: 'summarize',\n cause: error\n })\n )\n )\n },\n { concurrency: 'unbounded' }\n )\n\n if (indexed.embeddings.length !== chunks.length) {\n return yield* Effect.fail(\n new KnowledgeIngestionError({\n message: 'Embedding count did not match chunk count',\n stage: 'embed'\n })\n )\n }\n\n const indexedChunks = Arr.zip(chunks, indexed.embeddings).map(([chunk, embedding]) => ({\n chunk,\n embedding\n }))\n\n yield* store\n .replaceDocumentChunks({\n scopeId: input.scopeId,\n documentId: input.documentId,\n chunks: indexedChunks\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n\n const tokenCount = chunks.reduce((total, chunk) => total + chunk.tokenCount, 0)\n\n return yield* store\n .markDocumentReady({\n scopeId: input.scopeId,\n documentId: input.documentId,\n title: indexed.summary.title ?? extracted.title,\n summary: indexed.summary.summary ?? extracted.summary,\n contentHash: input.contentHash,\n tokenCount,\n chunkCount: chunks.length\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n }).pipe(\n Effect.withSpan('knowledge_search.ingestDocument'),\n Effect.catch(error =>\n markErrorBestEffort(input, error).pipe(Effect.flatMap(() => Effect.fail(error)))\n )\n )\n\nexport type KnowledgeIngestionPipeline = {\n readonly ingest: (\n input: IngestKnowledgeDocumentInput\n ) => ReturnType<typeof ingestKnowledgeDocument>\n}\n\nexport const makeIngestionPipeline = (): KnowledgeIngestionPipeline => ({\n ingest: ingestKnowledgeDocument\n})\n"],"mappings":";;;;;;;;;AAkBA,MAAM,uBAAuB,OAAqC,UAChE,OAAO,IAAI,aAAa;CAEtB,QAAO,OADc,kBACR,kBAAkB;EAC7B,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,SAAS,MAAM;CACjB,CAAC;AACH,CAAC,EAAE,KAAK,OAAO,YAAY,OAAO,IAAI,CAAC;AAEzC,MAAa,2BAA2B,UACtC,OAAO,IAAI,aAAa;CACtB,OAAO,OAAO,oBAAoB;EAChC,6BAA6B,MAAM;EACnC,gCAAgC,MAAM;EACtC,gCAAgC,MAAM,OAAO,OAAO;CACtD,CAAC;CACD,MAAM,QAAQ,OAAO;CACrB,MAAM,YAAY,OAAO;CACzB,MAAM,UAAU,OAAO;CACvB,MAAM,WAAW,OAAO;CACxB,MAAM,aAAa,OAAO;CAE1B,OAAO,MACJ,eAAe,EACd,UAAU;EACR,IAAI,MAAM;EACV,SAAS,MAAM;EACf,QAAQ,MAAM,OAAO;EACrB,QAAQ;EACR,UAAU,MAAM,OAAO;CACzB,EACF,CAAC,EACA,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;EAAE,SAAS,MAAM;EAAS,OAAO;EAAS,OAAO;CAAM,CAAC,CACxF,CACF;CAEF,MAAM,YAAY,OAAO,UACtB,QAAQ,MAAM,MAAM,EACpB,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;EAAE,SAAS,MAAM;EAAS,OAAO;EAAW,OAAO;CAAM,CAAC,CAC1F,CACF;CAEF,MAAM,SAAS,OAAO,QACnB,MAAM;EACL,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,SAAS,UAAU;EACnB,WAAW,MAAM,aAAA;EACjB,UAAU,UAAU;CACtB,CAAC,EACA,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;EAAE,SAAS,MAAM;EAAS,OAAO;EAAS,OAAO;CAAM,CAAC,CACxF,CACF;CAEF,MAAM,UAAU,OAAO,OAAO,IAC5B;EACE,YAAY,SAAS,WAAW,OAAO,KAAI,UAAS,MAAM,OAAO,CAAC,EAAE,KAClE,OAAO,UACL,UACE,IAAI,wBAAwB;GAC1B,SAAS,MAAM;GACf,OAAO;GACP,OAAO;EACT,CAAC,CACL,CACF;EACA,SAAS,WACN,UAAU;GACT,SAAS,UAAU;GACnB,aAAa,UAAU;GACvB,UAAU,UAAU;EACtB,CAAC,EACA,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;GAC1B,SAAS,MAAM;GACf,OAAO;GACP,OAAO;EACT,CAAC,CACL,CACF;CACJ,GACA,EAAE,aAAa,YAAY,CAC7B;CAEA,IAAI,QAAQ,WAAW,WAAW,OAAO,QACvC,OAAO,OAAO,OAAO,KACnB,IAAI,wBAAwB;EAC1B,SAAS;EACT,OAAO;CACT,CAAC,CACH;CAGF,MAAM,gBAAgBA,MAAI,IAAI,QAAQ,QAAQ,UAAU,EAAE,KAAK,CAAC,OAAO,gBAAgB;EACrF;EACA;CACF,EAAE;CAEF,OAAO,MACJ,sBAAsB;EACrB,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,QAAQ;CACV,CAAC,EACA,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;EAAE,SAAS,MAAM;EAAS,OAAO;EAAS,OAAO;CAAM,CAAC,CACxF,CACF;CAEF,MAAM,aAAa,OAAO,QAAQ,OAAO,UAAU,QAAQ,MAAM,YAAY,CAAC;CAE9E,OAAO,OAAO,MACX,kBAAkB;EACjB,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,OAAO,QAAQ,QAAQ,SAAS,UAAU;EAC1C,SAAS,QAAQ,QAAQ,WAAW,UAAU;EAC9C,aAAa,MAAM;EACnB;EACA,YAAY,OAAO;CACrB,CAAC,EACA,KACC,OAAO,UACL,UACE,IAAI,wBAAwB;EAAE,SAAS,MAAM;EAAS,OAAO;EAAS,OAAO;CAAM,CAAC,CACxF,CACF;AACJ,CAAC,EAAE,KACD,OAAO,SAAS,iCAAiC,GACjD,OAAO,OAAM,UACX,oBAAoB,OAAO,KAAK,EAAE,KAAK,OAAO,cAAc,OAAO,KAAK,KAAK,CAAC,CAAC,CACjF,CACF;AAQF,MAAa,+BAA2D,EACtE,QAAQ,wBACV"}
1
+ {"version":3,"file":"ingestion.mjs","names":["Arr"],"sources":["../src/ingestion.ts"],"sourcesContent":["import { Array as Arr, Effect } from 'effect'\nimport { KnowledgeChunker } from './chunking.ts'\nimport { defaultKnowledgeChunkMaxTokens } from './documents.ts'\nimport type { KnowledgeDocumentId, KnowledgeScopeId } from './documents.ts'\nimport { KnowledgeEmbedder } from './embeddings.ts'\nimport { KnowledgeExtractor } from './extraction.ts'\nimport { KnowledgeSummarizer } from './summarization.ts'\nimport type { LoadedKnowledgeSource } from './extraction.ts'\nimport { KnowledgeIngestionError } from './errors.ts'\nimport { SearchIndexStore } from './store.ts'\n\nexport type IngestKnowledgeDocumentInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly source: LoadedKnowledgeSource\n readonly contentHash?: string\n readonly maxTokens?: number\n}\n\nconst markErrorBestEffort = (input: IngestKnowledgeDocumentInput, error: KnowledgeIngestionError) =>\n Effect.gen(function* () {\n const store = yield* SearchIndexStore\n yield* store.markDocumentError({\n scopeId: input.scopeId,\n documentId: input.documentId,\n message: error.message\n })\n }).pipe(Effect.catch(() => Effect.void))\n\nexport const ingestKnowledgeDocument = (input: IngestKnowledgeDocumentInput) =>\n Effect.gen(function* () {\n yield* Effect.annotateCurrentSpan({\n 'knowledge_search.scope_id': input.scopeId,\n 'knowledge_search.document_id': input.documentId,\n 'knowledge_search.source_type': input.source.source._tag\n })\n const store = yield* SearchIndexStore\n const extractor = yield* KnowledgeExtractor\n const chunker = yield* KnowledgeChunker\n const embedder = yield* KnowledgeEmbedder\n const summarizer = yield* KnowledgeSummarizer\n\n yield* store\n .upsertDocument({\n document: {\n id: input.documentId,\n scopeId: input.scopeId,\n source: input.source.source,\n status: 'processing',\n metadata: input.source.metadata\n }\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n\n const extracted = yield* extractor\n .extract(input.source)\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'extract', cause: error })\n )\n )\n\n const chunks = yield* chunker\n .chunk({\n scopeId: input.scopeId,\n documentId: input.documentId,\n content: extracted.content,\n maxTokens: input.maxTokens ?? defaultKnowledgeChunkMaxTokens,\n metadata: extracted.metadata\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'chunk', cause: error })\n )\n )\n\n const indexed = yield* Effect.all(\n {\n embeddings: embedder.embedTexts(chunks.map(chunk => chunk.content)).pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({\n message: error.message,\n stage: 'embed',\n cause: error\n })\n )\n ),\n summary: summarizer\n .summarize({\n content: extracted.content,\n sourceTitle: extracted.title,\n metadata: extracted.metadata\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({\n message: error.message,\n stage: 'summarize',\n cause: error\n })\n )\n )\n },\n { concurrency: 'unbounded' }\n )\n\n if (indexed.embeddings.length !== chunks.length) {\n return yield* Effect.fail(\n new KnowledgeIngestionError({\n message: 'Embedding count did not match chunk count',\n stage: 'embed'\n })\n )\n }\n\n const indexedChunks = Arr.zip(chunks, indexed.embeddings).map(([chunk, embedding]) => ({\n chunk,\n embedding\n }))\n\n yield* store\n .replaceDocumentChunks({\n scopeId: input.scopeId,\n documentId: input.documentId,\n chunks: indexedChunks\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n\n const tokenCount = chunks.reduce((total, chunk) => total + chunk.tokenCount, 0)\n\n return yield* store\n .markDocumentReady({\n scopeId: input.scopeId,\n documentId: input.documentId,\n title: indexed.summary.title ?? extracted.title,\n summary: indexed.summary.summary ?? extracted.summary,\n contentHash: input.contentHash,\n tokenCount,\n chunkCount: chunks.length\n })\n .pipe(\n Effect.mapError(\n error =>\n new KnowledgeIngestionError({ message: error.message, stage: 'store', cause: error })\n )\n )\n }).pipe(\n Effect.withSpan('knowledge_search.ingestDocument'),\n Effect.catch(error =>\n markErrorBestEffort(input, error).pipe(Effect.flatMap(() => Effect.fail(error)))\n )\n )\n\nexport type KnowledgeIngestionPipeline = {\n readonly ingest: (\n input: IngestKnowledgeDocumentInput\n ) => ReturnType<typeof ingestKnowledgeDocument>\n}\n\nexport const makeIngestionPipeline = (): KnowledgeIngestionPipeline => ({\n ingest: ingestKnowledgeDocument\n})\n"],"mappings":"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"}
package/dist/search.d.mts CHANGED
@@ -43,7 +43,7 @@ declare const fuseKnowledgeSearchResults: (input: {
43
43
  readonly limit: number;
44
44
  readonly rankConstant?: number;
45
45
  }) => ReadonlyArray<KnowledgeSearchResult>;
46
- declare const searchKnowledge: (input: KnowledgeSearchInput) => Effect.Effect<readonly KnowledgeSearchResult[], KnowledgeSearchError, KnowledgeEmbedder | SearchIndexStore>;
46
+ declare const searchKnowledge: (input: KnowledgeSearchInput) => Effect.Effect<readonly KnowledgeSearchResult[], KnowledgeSearchError, SearchIndexStore | KnowledgeEmbedder>;
47
47
  //#endregion
48
48
  export { KnowledgeSearchContext, KnowledgeSearchInput, KnowledgeSearchMode, KnowledgeSearchResult, KnowledgeSearchScores, KnowledgeSearcher, fuseKnowledgeSearchResults, packKnowledgeSearchContext, searchKnowledge };
49
49
  //# sourceMappingURL=search.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.mts","names":[],"sources":["../src/search.ts"],"mappings":";;;;;;;KAMY,oBAAA;EAAA,SACD,KAAA,EAAO,oBAAA;EAAA,SACP,KAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA;EAAA,SACA,aAAA;EAAA,SACA,IAAA,GAAO,mBAAmB;EAAA,SAC1B,WAAA;EAAA,SACA,SAAA;AAAA;AAAA,KAGC,mBAAA;AAAA,KAEA,qBAAA;EAAA,SACD,MAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGC,qBAAA;EAAA,SACD,KAAA,EAAO,cAAA;EAAA,SACP,KAAA;EAAA,SACA,QAAA,EAAU,wBAAA;EAAA,SACV,OAAA,GAAU,aAAA,CAAc,cAAA;EAAA,SACxB,MAAA,GAAS,qBAAA;AAAA;AAAA,KAGR,sBAAA;EAAA,SACD,KAAA;EAAA,SACA,OAAA,EAAS,aAAa,CAAC,qBAAA;EAAA,SACvB,IAAA;AAAA;AAAA,KAGC,iBAAA;EAAA,SACD,MAAA,GACP,KAAA,EAAO,oBAAA,KACJ,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,qBAAA,GAAwB,oBAAA;AAAA;AAAA,cAM9C,0BAAA,GACX,KAAA,UACA,OAAA,EAAS,aAAA,CAAc,qBAAA,MACtB,sBAAA;AAAA,cAkBU,0BAAA,GAA8B,KAAA;EAAA,SAChC,aAAA,EAAe,aAAA,CAAc,qBAAA;EAAA,SAC7B,WAAA,EAAa,aAAA,CAAc,qBAAA;EAAA,SAC3B,KAAA;EAAA,SACA,YAAA;AAAA,MACP,aAAA,CAAc,qBAAA;AAAA,cA8JL,eAAA,GAAmB,KAAA,EAAO,oBAAA,KAAoB,MAAA,CAAA,MAAA,UAAA,qBAAA,IAAA,oBAAA,EAAA,iBAAA,GAAA,gBAAA"}
1
+ {"version":3,"file":"search.d.mts","names":[],"sources":["../src/search.ts"],"mappings":";;;;;;;KAMY,oBAAA;EAAA,SACD,KAAA,EAAO,oBAAA;EAAA,SACP,KAAA;EAAA,SACA,KAAA;EAAA,SACA,QAAA;EAAA,SACA,aAAA;EAAA,SACA,IAAA,GAAO,mBAAmB;EAAA,SAC1B,WAAA;EAAA,SACA,SAAA;AAAA;AAAA,KAGC,mBAAA;AAAA,KAEA,qBAAA;EAAA,SACD,MAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGC,qBAAA;EAAA,SACD,KAAA,EAAO,cAAA;EAAA,SACP,KAAA;EAAA,SACA,QAAA,EAAU,wBAAA;EAAA,SACV,OAAA,GAAU,aAAA,CAAc,cAAA;EAAA,SACxB,MAAA,GAAS,qBAAA;AAAA;AAAA,KAGR,sBAAA;EAAA,SACD,KAAA;EAAA,SACA,OAAA,EAAS,aAAa,CAAC,qBAAA;EAAA,SACvB,IAAA;AAAA;AAAA,KAGC,iBAAA;EAAA,SACD,MAAA,GACP,KAAA,EAAO,oBAAA,KACJ,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,qBAAA,GAAwB,oBAAA;AAAA;AAAA,cAM9C,0BAAA,GACX,KAAA,UACA,OAAA,EAAS,aAAA,CAAc,qBAAA,MACtB,sBAAA;AAAA,cAkBU,0BAAA,GAA8B,KAAA;EAAA,SAChC,aAAA,EAAe,aAAA,CAAc,qBAAA;EAAA,SAC7B,WAAA,EAAa,aAAA,CAAc,qBAAA;EAAA,SAC3B,KAAA;EAAA,SACA,YAAA;AAAA,MACP,aAAA,CAAc,qBAAA;AAAA,cA8JL,eAAA,GAAmB,KAAA,EAAO,oBAAA,KAAoB,MAAA,CAAA,MAAA,UAAA,qBAAA,IAAA,oBAAA,EAAA,gBAAA,GAAA,iBAAA"}
package/dist/store.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { CreateKnowledgeDocumentInput, IndexedKnowledgeDocument, KnowledgeChunk, KnowledgeDocument, KnowledgeFile, KnowledgeScope, KnowledgeSearchScope, UpdateKnowledgeDocumentInput } from "./documents.mjs";
1
+ import { CreateKnowledgeDocumentInput, IndexedKnowledgeDocument, KnowledgeChunk, KnowledgeDocument, KnowledgeDocumentId, KnowledgeFile, KnowledgeScope, KnowledgeScopeId, KnowledgeSearchScope, UpdateKnowledgeDocumentInput } from "./documents.mjs";
2
2
  import { KnowledgeStoreError, SearchIndexStoreError } from "./errors.mjs";
3
3
  import { KnowledgeEmbedding } from "./embeddings.mjs";
4
4
  import { Context, Effect } from "effect";
@@ -6,7 +6,7 @@ import { Context, Effect } from "effect";
6
6
  //#region src/store.d.ts
7
7
  type GetKnowledgeDocumentInput = {
8
8
  readonly scope: KnowledgeScope;
9
- readonly id: string;
9
+ readonly id: KnowledgeDocumentId;
10
10
  };
11
11
  type GetKnowledgeDocumentBySlugInput = {
12
12
  readonly scope: KnowledgeScope;
@@ -43,16 +43,16 @@ type UpsertIndexedKnowledgeDocumentInput = {
43
43
  readonly document: IndexedKnowledgeDocument;
44
44
  };
45
45
  type ReplaceKnowledgeDocumentChunksInput = {
46
- readonly scopeId: string;
47
- readonly documentId: string;
46
+ readonly scopeId: KnowledgeScopeId;
47
+ readonly documentId: KnowledgeDocumentId;
48
48
  readonly chunks: ReadonlyArray<{
49
49
  readonly chunk: KnowledgeChunk;
50
50
  readonly embedding: KnowledgeEmbedding;
51
51
  }>;
52
52
  };
53
53
  type MarkKnowledgeDocumentReadyInput = {
54
- readonly scopeId: string;
55
- readonly documentId: string;
54
+ readonly scopeId: KnowledgeScopeId;
55
+ readonly documentId: KnowledgeDocumentId;
56
56
  readonly title?: string;
57
57
  readonly summary?: string;
58
58
  readonly contentHash?: string;
@@ -60,8 +60,8 @@ type MarkKnowledgeDocumentReadyInput = {
60
60
  readonly chunkCount: number;
61
61
  };
62
62
  type MarkKnowledgeDocumentErrorInput = {
63
- readonly scopeId: string;
64
- readonly documentId: string;
63
+ readonly scopeId: KnowledgeScopeId;
64
+ readonly documentId: KnowledgeDocumentId;
65
65
  readonly message: string;
66
66
  };
67
67
  type KnowledgeChunkSearchInput = {
@@ -81,23 +81,23 @@ type KnowledgeChunkSearchResult = {
81
81
  readonly document: IndexedKnowledgeDocument;
82
82
  };
83
83
  type KnowledgeSearchContextChunksInput = {
84
- readonly scopeId: string;
85
- readonly documentId: string;
84
+ readonly scopeId: KnowledgeScopeId;
85
+ readonly documentId: KnowledgeDocumentId;
86
86
  readonly position: number;
87
87
  readonly contextChunks: number;
88
88
  };
89
89
  type SearchIndexStoreApi = {
90
90
  readonly upsertDocument: (input: UpsertIndexedKnowledgeDocumentInput) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>;
91
91
  readonly markDocumentProcessing: (input: {
92
- readonly scopeId: string;
93
- readonly documentId: string;
92
+ readonly scopeId: KnowledgeScopeId;
93
+ readonly documentId: KnowledgeDocumentId;
94
94
  }) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>;
95
95
  readonly replaceDocumentChunks: (input: ReplaceKnowledgeDocumentChunksInput) => Effect.Effect<void, SearchIndexStoreError>;
96
96
  readonly markDocumentReady: (input: MarkKnowledgeDocumentReadyInput) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>;
97
97
  readonly markDocumentError: (input: MarkKnowledgeDocumentErrorInput) => Effect.Effect<void, SearchIndexStoreError>;
98
98
  readonly deleteDocument: (input: {
99
- readonly scopeId: string;
100
- readonly documentId: string;
99
+ readonly scopeId: KnowledgeScopeId;
100
+ readonly documentId: KnowledgeDocumentId;
101
101
  }) => Effect.Effect<void, SearchIndexStoreError>;
102
102
  readonly searchChunks: (input: KnowledgeChunkSearchInput) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>;
103
103
  readonly searchChunksByText: (input: KnowledgeChunkTextSearchInput) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.mts","names":[],"sources":["../src/store.ts"],"mappings":"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"}
1
+ {"version":3,"file":"store.d.mts","names":[],"sources":["../src/store.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.mjs","names":[],"sources":["../src/store.ts"],"sourcesContent":["import { Context } from 'effect'\nimport type { Effect } from 'effect'\nimport type {\n CreateKnowledgeDocumentInput,\n IndexedKnowledgeDocument,\n KnowledgeChunk,\n KnowledgeDocument,\n KnowledgeFile,\n KnowledgeScope,\n KnowledgeSearchScope,\n UpdateKnowledgeDocumentInput\n} from './documents.ts'\nimport type { KnowledgeEmbedding } from './embeddings.ts'\nimport type { KnowledgeStoreError, SearchIndexStoreError } from './errors.ts'\n\nexport type GetKnowledgeDocumentInput = {\n readonly scope: KnowledgeScope\n readonly id: string\n}\n\nexport type GetKnowledgeDocumentBySlugInput = {\n readonly scope: KnowledgeScope\n readonly slug: string\n}\n\nexport type ListKnowledgeDocumentsInput = {\n readonly scope: KnowledgeScope\n readonly limit: number\n readonly availability?: KnowledgeDocument['availability']\n}\n\nexport type ListKnowledgeDocumentsResult = {\n readonly documents: ReadonlyArray<KnowledgeDocument>\n}\n\nexport type ListPinnedKnowledgeInput = {\n readonly scope: KnowledgeScope\n readonly limit: number\n}\n\nexport type ListPinnedKnowledgeResult = {\n readonly documents: ReadonlyArray<KnowledgeDocument>\n}\n\nexport type KnowledgeStoreApi = {\n readonly createDocument: (\n input: CreateKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly updateDocument: (\n input: UpdateKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly getDocument: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly getDocumentBySlug: (\n input: GetKnowledgeDocumentBySlugInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly listDocuments: (\n input: ListKnowledgeDocumentsInput\n ) => Effect.Effect<ListKnowledgeDocumentsResult, KnowledgeStoreError>\n readonly listPinned: (\n input: ListPinnedKnowledgeInput\n ) => Effect.Effect<ListPinnedKnowledgeResult, KnowledgeStoreError>\n readonly deleteDocument: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<void, KnowledgeStoreError>\n readonly listFiles: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeFile>, KnowledgeStoreError>\n}\n\nexport class KnowledgeStore extends Context.Service<KnowledgeStore, KnowledgeStoreApi>()(\n '@yolk-sdk/knowledge/KnowledgeStore'\n) {}\n\nexport type UpsertIndexedKnowledgeDocumentInput = {\n readonly document: IndexedKnowledgeDocument\n}\n\nexport type ReplaceKnowledgeDocumentChunksInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly chunks: ReadonlyArray<{\n readonly chunk: KnowledgeChunk\n readonly embedding: KnowledgeEmbedding\n }>\n}\n\nexport type MarkKnowledgeDocumentReadyInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly title?: string\n readonly summary?: string\n readonly contentHash?: string\n readonly tokenCount: number\n readonly chunkCount: number\n}\n\nexport type MarkKnowledgeDocumentErrorInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly message: string\n}\n\nexport type KnowledgeChunkSearchInput = {\n readonly scope: KnowledgeSearchScope\n readonly embedding: KnowledgeEmbedding\n readonly limit: number\n readonly minScore?: number\n}\n\nexport type KnowledgeChunkTextSearchInput = {\n readonly scope: KnowledgeSearchScope\n readonly query: string\n readonly limit: number\n}\n\nexport type KnowledgeChunkSearchResult = {\n readonly chunk: KnowledgeChunk\n readonly score: number\n readonly document: IndexedKnowledgeDocument\n}\n\nexport type KnowledgeSearchContextChunksInput = {\n readonly scopeId: string\n readonly documentId: string\n readonly position: number\n readonly contextChunks: number\n}\n\nexport type SearchIndexStoreApi = {\n readonly upsertDocument: (\n input: UpsertIndexedKnowledgeDocumentInput\n ) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly markDocumentProcessing: (input: {\n readonly scopeId: string\n readonly documentId: string\n }) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly replaceDocumentChunks: (\n input: ReplaceKnowledgeDocumentChunksInput\n ) => Effect.Effect<void, SearchIndexStoreError>\n readonly markDocumentReady: (\n input: MarkKnowledgeDocumentReadyInput\n ) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly markDocumentError: (\n input: MarkKnowledgeDocumentErrorInput\n ) => Effect.Effect<void, SearchIndexStoreError>\n readonly deleteDocument: (input: {\n readonly scopeId: string\n readonly documentId: string\n }) => Effect.Effect<void, SearchIndexStoreError>\n readonly searchChunks: (\n input: KnowledgeChunkSearchInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>\n readonly searchChunksByText: (\n input: KnowledgeChunkTextSearchInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>\n readonly getContextChunks: (\n input: KnowledgeSearchContextChunksInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunk>, SearchIndexStoreError>\n}\n\nexport class SearchIndexStore extends Context.Service<SearchIndexStore, SearchIndexStoreApi>()(\n '@yolk-sdk/knowledge/SearchIndexStore'\n) {}\n"],"mappings":";;AAuEA,IAAa,iBAAb,cAAoC,QAAQ,QAA2C,EACrF,oCACF,EAAE,CAAC;AAyFH,IAAa,mBAAb,cAAsC,QAAQ,QAA+C,EAC3F,sCACF,EAAE,CAAC"}
1
+ {"version":3,"file":"store.mjs","names":[],"sources":["../src/store.ts"],"sourcesContent":["import { Context } from 'effect'\nimport type { Effect } from 'effect'\nimport type {\n CreateKnowledgeDocumentInput,\n IndexedKnowledgeDocument,\n KnowledgeChunk,\n KnowledgeDocument,\n KnowledgeDocumentId,\n KnowledgeFile,\n KnowledgeScope,\n KnowledgeScopeId,\n KnowledgeSearchScope,\n UpdateKnowledgeDocumentInput\n} from './documents.ts'\nimport type { KnowledgeEmbedding } from './embeddings.ts'\nimport type { KnowledgeStoreError, SearchIndexStoreError } from './errors.ts'\n\nexport type GetKnowledgeDocumentInput = {\n readonly scope: KnowledgeScope\n readonly id: KnowledgeDocumentId\n}\n\nexport type GetKnowledgeDocumentBySlugInput = {\n readonly scope: KnowledgeScope\n readonly slug: string\n}\n\nexport type ListKnowledgeDocumentsInput = {\n readonly scope: KnowledgeScope\n readonly limit: number\n readonly availability?: KnowledgeDocument['availability']\n}\n\nexport type ListKnowledgeDocumentsResult = {\n readonly documents: ReadonlyArray<KnowledgeDocument>\n}\n\nexport type ListPinnedKnowledgeInput = {\n readonly scope: KnowledgeScope\n readonly limit: number\n}\n\nexport type ListPinnedKnowledgeResult = {\n readonly documents: ReadonlyArray<KnowledgeDocument>\n}\n\nexport type KnowledgeStoreApi = {\n readonly createDocument: (\n input: CreateKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly updateDocument: (\n input: UpdateKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly getDocument: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly getDocumentBySlug: (\n input: GetKnowledgeDocumentBySlugInput\n ) => Effect.Effect<KnowledgeDocument, KnowledgeStoreError>\n readonly listDocuments: (\n input: ListKnowledgeDocumentsInput\n ) => Effect.Effect<ListKnowledgeDocumentsResult, KnowledgeStoreError>\n readonly listPinned: (\n input: ListPinnedKnowledgeInput\n ) => Effect.Effect<ListPinnedKnowledgeResult, KnowledgeStoreError>\n readonly deleteDocument: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<void, KnowledgeStoreError>\n readonly listFiles: (\n input: GetKnowledgeDocumentInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeFile>, KnowledgeStoreError>\n}\n\nexport class KnowledgeStore extends Context.Service<KnowledgeStore, KnowledgeStoreApi>()(\n '@yolk-sdk/knowledge/KnowledgeStore'\n) {}\n\nexport type UpsertIndexedKnowledgeDocumentInput = {\n readonly document: IndexedKnowledgeDocument\n}\n\nexport type ReplaceKnowledgeDocumentChunksInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly chunks: ReadonlyArray<{\n readonly chunk: KnowledgeChunk\n readonly embedding: KnowledgeEmbedding\n }>\n}\n\nexport type MarkKnowledgeDocumentReadyInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly title?: string\n readonly summary?: string\n readonly contentHash?: string\n readonly tokenCount: number\n readonly chunkCount: number\n}\n\nexport type MarkKnowledgeDocumentErrorInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly message: string\n}\n\nexport type KnowledgeChunkSearchInput = {\n readonly scope: KnowledgeSearchScope\n readonly embedding: KnowledgeEmbedding\n readonly limit: number\n readonly minScore?: number\n}\n\nexport type KnowledgeChunkTextSearchInput = {\n readonly scope: KnowledgeSearchScope\n readonly query: string\n readonly limit: number\n}\n\nexport type KnowledgeChunkSearchResult = {\n readonly chunk: KnowledgeChunk\n readonly score: number\n readonly document: IndexedKnowledgeDocument\n}\n\nexport type KnowledgeSearchContextChunksInput = {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n readonly position: number\n readonly contextChunks: number\n}\n\nexport type SearchIndexStoreApi = {\n readonly upsertDocument: (\n input: UpsertIndexedKnowledgeDocumentInput\n ) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly markDocumentProcessing: (input: {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n }) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly replaceDocumentChunks: (\n input: ReplaceKnowledgeDocumentChunksInput\n ) => Effect.Effect<void, SearchIndexStoreError>\n readonly markDocumentReady: (\n input: MarkKnowledgeDocumentReadyInput\n ) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>\n readonly markDocumentError: (\n input: MarkKnowledgeDocumentErrorInput\n ) => Effect.Effect<void, SearchIndexStoreError>\n readonly deleteDocument: (input: {\n readonly scopeId: KnowledgeScopeId\n readonly documentId: KnowledgeDocumentId\n }) => Effect.Effect<void, SearchIndexStoreError>\n readonly searchChunks: (\n input: KnowledgeChunkSearchInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>\n readonly searchChunksByText: (\n input: KnowledgeChunkTextSearchInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunkSearchResult>, SearchIndexStoreError>\n readonly getContextChunks: (\n input: KnowledgeSearchContextChunksInput\n ) => Effect.Effect<ReadonlyArray<KnowledgeChunk>, SearchIndexStoreError>\n}\n\nexport class SearchIndexStore extends Context.Service<SearchIndexStore, SearchIndexStoreApi>()(\n '@yolk-sdk/knowledge/SearchIndexStore'\n) {}\n"],"mappings":";;AAyEA,IAAa,iBAAb,cAAoC,QAAQ,QAA2C,EACrF,oCACF,EAAE,CAAC;AAyFH,IAAa,mBAAb,cAAsC,QAAQ,QAA+C,EAC3F,sCACF,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolk-sdk/knowledge",
3
- "version": "0.1.0-canary.78",
3
+ "version": "0.1.0-canary.79",
4
4
  "description": "Domain-free knowledge document/source/file/context, ingestion, hybrid search, and lookup/manage tool helpers for agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -106,7 +106,7 @@
106
106
  "dependencies": {
107
107
  "effect": "4.0.0-rc.115",
108
108
  "gpt-tokenizer": "^3.4.0",
109
- "@yolk-sdk/agent": "^0.1.0-canary.78"
109
+ "@yolk-sdk/agent": "^0.1.0-canary.79"
110
110
  },
111
111
  "scripts": {
112
112
  "build": "tsdown",
package/src/chunking.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  import { Context, Effect, Layer } from 'effect'
2
2
  import { countTokens, decode, encode } from 'gpt-tokenizer/encoding/o200k_base'
3
- import type { KnowledgeChunk, KnowledgeMetadata } from './documents.ts'
3
+ import type {
4
+ KnowledgeChunk,
5
+ KnowledgeDocumentId,
6
+ KnowledgeMetadata,
7
+ KnowledgeScopeId
8
+ } from './documents.ts'
4
9
  import { KnowledgeChunkingError } from './errors.ts'
5
10
 
6
11
  const SENTENCE_PATTERN = /[^.!?]+[.!?]+(?:["')\]]+)?\s*|[^.!?]+$/g
@@ -10,8 +15,8 @@ const PARAGRAPH_BREAK_PATTERN = /(\n{2,})/
10
15
  const WORD_PATTERN = /\S+\s*/g
11
16
 
12
17
  export type ChunkKnowledgeDocumentInput = {
13
- readonly scopeId: string
14
- readonly documentId: string
18
+ readonly scopeId: KnowledgeScopeId
19
+ readonly documentId: KnowledgeDocumentId
15
20
  readonly content: string
16
21
  readonly maxTokens?: number
17
22
  readonly metadata?: KnowledgeMetadata
package/src/documents.ts CHANGED
@@ -18,15 +18,23 @@ export const KnowledgeDocumentStatusSchema = Schema.Literals(['processing', 'rea
18
18
 
19
19
  export type KnowledgeDocumentStatus = Schema.Schema.Type<typeof KnowledgeDocumentStatusSchema>
20
20
 
21
+ export const KnowledgeScopeId = NonEmptyTrimmedString.pipe(Schema.brand('KnowledgeScopeId'))
22
+
23
+ export type KnowledgeScopeId = typeof KnowledgeScopeId.Type
24
+
25
+ export const KnowledgeDocumentId = NonEmptyTrimmedString.pipe(Schema.brand('KnowledgeDocumentId'))
26
+
27
+ export type KnowledgeDocumentId = typeof KnowledgeDocumentId.Type
28
+
21
29
  export const KnowledgeScopeSchema = Schema.Struct({
22
- id: NonEmptyTrimmedString,
30
+ id: KnowledgeScopeId,
23
31
  kind: Schema.optional(NonEmptyTrimmedString)
24
32
  })
25
33
 
26
34
  export type KnowledgeScope = Schema.Schema.Type<typeof KnowledgeScopeSchema>
27
35
 
28
36
  export const KnowledgeDocumentSchema = Schema.Struct({
29
- id: NonEmptyTrimmedString,
37
+ id: KnowledgeDocumentId,
30
38
  slug: NonEmptyTrimmedString,
31
39
  title: NonEmptyTrimmedString,
32
40
  purpose: NonEmptyTrimmedString,
@@ -62,7 +70,7 @@ export type CreateKnowledgeDocumentInput = Schema.Schema.Type<
62
70
 
63
71
  export const UpdateKnowledgeDocumentInputSchema = Schema.Struct({
64
72
  scope: KnowledgeScopeSchema,
65
- id: NonEmptyTrimmedString,
73
+ id: KnowledgeDocumentId,
66
74
  slug: Schema.optional(NonEmptyTrimmedString),
67
75
  title: Schema.optional(NonEmptyTrimmedString),
68
76
  purpose: Schema.optional(NonEmptyTrimmedString),
@@ -82,7 +90,7 @@ export type UpdateKnowledgeDocumentInput = Schema.Schema.Type<
82
90
 
83
91
  export const KnowledgeFileSchema = Schema.Struct({
84
92
  id: NonEmptyTrimmedString,
85
- documentId: NonEmptyTrimmedString,
93
+ documentId: KnowledgeDocumentId,
86
94
  storageKey: NonEmptyTrimmedString,
87
95
  mediaType: Schema.optional(NonEmptyTrimmedString),
88
96
  byteSize: Schema.optional(NonNegativeInteger),
@@ -95,8 +103,8 @@ export type KnowledgeFile = Schema.Schema.Type<typeof KnowledgeFileSchema>
95
103
 
96
104
  export const KnowledgeChunkSchema = Schema.Struct({
97
105
  id: NonEmptyTrimmedString,
98
- scopeId: NonEmptyTrimmedString,
99
- documentId: NonEmptyTrimmedString,
106
+ scopeId: KnowledgeScopeId,
107
+ documentId: KnowledgeDocumentId,
100
108
  content: NonEmptyTrimmedString,
101
109
  position: NonNegativeInteger,
102
110
  tokenCount: PositiveInteger,
@@ -106,11 +114,11 @@ export const KnowledgeChunkSchema = Schema.Struct({
106
114
  export type KnowledgeChunk = Schema.Schema.Type<typeof KnowledgeChunkSchema>
107
115
 
108
116
  export const KnowledgeSearchScope = Schema.TaggedStruct('KnowledgeScope', {
109
- id: NonEmptyTrimmedString
117
+ id: KnowledgeScopeId
110
118
  })
111
119
 
112
120
  export const KnowledgeSearchScopes = Schema.TaggedStruct('KnowledgeScopes', {
113
- ids: Schema.NonEmptyArray(NonEmptyTrimmedString)
121
+ ids: Schema.NonEmptyArray(KnowledgeScopeId)
114
122
  })
115
123
 
116
124
  export const KnowledgeSearchScopeSchema = Schema.Union([
@@ -143,8 +151,8 @@ export const KnowledgeSourceSchema = Schema.Union([
143
151
  export type KnowledgeSource = typeof KnowledgeSourceSchema.Type
144
152
 
145
153
  export const IndexedKnowledgeDocumentSchema = Schema.Struct({
146
- id: NonEmptyTrimmedString,
147
- scopeId: NonEmptyTrimmedString,
154
+ id: KnowledgeDocumentId,
155
+ scopeId: KnowledgeScopeId,
148
156
  source: KnowledgeSourceSchema,
149
157
  status: KnowledgeDocumentStatusSchema,
150
158
  title: Schema.optional(NonEmptyTrimmedString),
package/src/ingestion.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Array as Arr, Effect } from 'effect'
2
2
  import { KnowledgeChunker } from './chunking.ts'
3
3
  import { defaultKnowledgeChunkMaxTokens } from './documents.ts'
4
+ import type { KnowledgeDocumentId, KnowledgeScopeId } from './documents.ts'
4
5
  import { KnowledgeEmbedder } from './embeddings.ts'
5
6
  import { KnowledgeExtractor } from './extraction.ts'
6
7
  import { KnowledgeSummarizer } from './summarization.ts'
@@ -9,8 +10,8 @@ import { KnowledgeIngestionError } from './errors.ts'
9
10
  import { SearchIndexStore } from './store.ts'
10
11
 
11
12
  export type IngestKnowledgeDocumentInput = {
12
- readonly scopeId: string
13
- readonly documentId: string
13
+ readonly scopeId: KnowledgeScopeId
14
+ readonly documentId: KnowledgeDocumentId
14
15
  readonly source: LoadedKnowledgeSource
15
16
  readonly contentHash?: string
16
17
  readonly maxTokens?: number
package/src/store.ts CHANGED
@@ -5,8 +5,10 @@ import type {
5
5
  IndexedKnowledgeDocument,
6
6
  KnowledgeChunk,
7
7
  KnowledgeDocument,
8
+ KnowledgeDocumentId,
8
9
  KnowledgeFile,
9
10
  KnowledgeScope,
11
+ KnowledgeScopeId,
10
12
  KnowledgeSearchScope,
11
13
  UpdateKnowledgeDocumentInput
12
14
  } from './documents.ts'
@@ -15,7 +17,7 @@ import type { KnowledgeStoreError, SearchIndexStoreError } from './errors.ts'
15
17
 
16
18
  export type GetKnowledgeDocumentInput = {
17
19
  readonly scope: KnowledgeScope
18
- readonly id: string
20
+ readonly id: KnowledgeDocumentId
19
21
  }
20
22
 
21
23
  export type GetKnowledgeDocumentBySlugInput = {
@@ -78,8 +80,8 @@ export type UpsertIndexedKnowledgeDocumentInput = {
78
80
  }
79
81
 
80
82
  export type ReplaceKnowledgeDocumentChunksInput = {
81
- readonly scopeId: string
82
- readonly documentId: string
83
+ readonly scopeId: KnowledgeScopeId
84
+ readonly documentId: KnowledgeDocumentId
83
85
  readonly chunks: ReadonlyArray<{
84
86
  readonly chunk: KnowledgeChunk
85
87
  readonly embedding: KnowledgeEmbedding
@@ -87,8 +89,8 @@ export type ReplaceKnowledgeDocumentChunksInput = {
87
89
  }
88
90
 
89
91
  export type MarkKnowledgeDocumentReadyInput = {
90
- readonly scopeId: string
91
- readonly documentId: string
92
+ readonly scopeId: KnowledgeScopeId
93
+ readonly documentId: KnowledgeDocumentId
92
94
  readonly title?: string
93
95
  readonly summary?: string
94
96
  readonly contentHash?: string
@@ -97,8 +99,8 @@ export type MarkKnowledgeDocumentReadyInput = {
97
99
  }
98
100
 
99
101
  export type MarkKnowledgeDocumentErrorInput = {
100
- readonly scopeId: string
101
- readonly documentId: string
102
+ readonly scopeId: KnowledgeScopeId
103
+ readonly documentId: KnowledgeDocumentId
102
104
  readonly message: string
103
105
  }
104
106
 
@@ -122,8 +124,8 @@ export type KnowledgeChunkSearchResult = {
122
124
  }
123
125
 
124
126
  export type KnowledgeSearchContextChunksInput = {
125
- readonly scopeId: string
126
- readonly documentId: string
127
+ readonly scopeId: KnowledgeScopeId
128
+ readonly documentId: KnowledgeDocumentId
127
129
  readonly position: number
128
130
  readonly contextChunks: number
129
131
  }
@@ -133,8 +135,8 @@ export type SearchIndexStoreApi = {
133
135
  input: UpsertIndexedKnowledgeDocumentInput
134
136
  ) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>
135
137
  readonly markDocumentProcessing: (input: {
136
- readonly scopeId: string
137
- readonly documentId: string
138
+ readonly scopeId: KnowledgeScopeId
139
+ readonly documentId: KnowledgeDocumentId
138
140
  }) => Effect.Effect<IndexedKnowledgeDocument, SearchIndexStoreError>
139
141
  readonly replaceDocumentChunks: (
140
142
  input: ReplaceKnowledgeDocumentChunksInput
@@ -146,8 +148,8 @@ export type SearchIndexStoreApi = {
146
148
  input: MarkKnowledgeDocumentErrorInput
147
149
  ) => Effect.Effect<void, SearchIndexStoreError>
148
150
  readonly deleteDocument: (input: {
149
- readonly scopeId: string
150
- readonly documentId: string
151
+ readonly scopeId: KnowledgeScopeId
152
+ readonly documentId: KnowledgeDocumentId
151
153
  }) => Effect.Effect<void, SearchIndexStoreError>
152
154
  readonly searchChunks: (
153
155
  input: KnowledgeChunkSearchInput