@apart-tech/intelligence-core 1.11.4 → 1.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/auth/ability.d.ts +148 -0
  2. package/dist/auth/ability.d.ts.map +1 -0
  3. package/dist/auth/ability.js +291 -0
  4. package/dist/auth/ability.js.map +1 -0
  5. package/dist/auth/ability.test.d.ts +2 -0
  6. package/dist/auth/ability.test.d.ts.map +1 -0
  7. package/dist/auth/ability.test.js +693 -0
  8. package/dist/auth/ability.test.js.map +1 -0
  9. package/dist/auth/delegation-jwt.d.ts +167 -0
  10. package/dist/auth/delegation-jwt.d.ts.map +1 -0
  11. package/dist/auth/delegation-jwt.js +237 -0
  12. package/dist/auth/delegation-jwt.js.map +1 -0
  13. package/dist/auth/delegation-jwt.test.d.ts +2 -0
  14. package/dist/auth/delegation-jwt.test.d.ts.map +1 -0
  15. package/dist/auth/delegation-jwt.test.js +283 -0
  16. package/dist/auth/delegation-jwt.test.js.map +1 -0
  17. package/dist/auth/principal.d.ts +94 -0
  18. package/dist/auth/principal.d.ts.map +1 -0
  19. package/dist/auth/principal.js +33 -0
  20. package/dist/auth/principal.js.map +1 -0
  21. package/dist/config/config.test.d.ts +2 -0
  22. package/dist/config/config.test.d.ts.map +1 -0
  23. package/dist/config/config.test.js +57 -0
  24. package/dist/config/config.test.js.map +1 -0
  25. package/dist/config/index.d.ts.map +1 -1
  26. package/dist/config/index.js +22 -1
  27. package/dist/config/index.js.map +1 -1
  28. package/dist/db/tenant.d.ts.map +1 -1
  29. package/dist/db/tenant.js +8 -0
  30. package/dist/db/tenant.js.map +1 -1
  31. package/dist/index.d.ts +19 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +10 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/__tests__/jwt.test.d.ts +2 -0
  36. package/dist/lib/__tests__/jwt.test.d.ts.map +1 -0
  37. package/dist/lib/__tests__/jwt.test.js +97 -0
  38. package/dist/lib/__tests__/jwt.test.js.map +1 -0
  39. package/dist/lib/jwt.d.ts +20 -0
  40. package/dist/lib/jwt.d.ts.map +1 -1
  41. package/dist/lib/jwt.js +56 -3
  42. package/dist/lib/jwt.js.map +1 -1
  43. package/dist/services/__tests__/chunk-service.test.d.ts +2 -0
  44. package/dist/services/__tests__/chunk-service.test.d.ts.map +1 -0
  45. package/dist/services/__tests__/chunk-service.test.js +111 -0
  46. package/dist/services/__tests__/chunk-service.test.js.map +1 -0
  47. package/dist/services/__tests__/chunker.test.d.ts +2 -0
  48. package/dist/services/__tests__/chunker.test.d.ts.map +1 -0
  49. package/dist/services/__tests__/chunker.test.js +113 -0
  50. package/dist/services/__tests__/chunker.test.js.map +1 -0
  51. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts +2 -0
  52. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts.map +1 -0
  53. package/dist/services/__tests__/delegation-cleanup-service.test.js +211 -0
  54. package/dist/services/__tests__/delegation-cleanup-service.test.js.map +1 -0
  55. package/dist/services/__tests__/node-service.test.d.ts +2 -0
  56. package/dist/services/__tests__/node-service.test.d.ts.map +1 -0
  57. package/dist/services/__tests__/node-service.test.js +207 -0
  58. package/dist/services/__tests__/node-service.test.js.map +1 -0
  59. package/dist/services/__tests__/pii-detector-service.test.js +51 -0
  60. package/dist/services/__tests__/pii-detector-service.test.js.map +1 -1
  61. package/dist/services/__tests__/pii-encryption-service.test.js +37 -0
  62. package/dist/services/__tests__/pii-encryption-service.test.js.map +1 -1
  63. package/dist/services/__tests__/search-service.test.d.ts +2 -0
  64. package/dist/services/__tests__/search-service.test.d.ts.map +1 -0
  65. package/dist/services/__tests__/search-service.test.js +163 -0
  66. package/dist/services/__tests__/search-service.test.js.map +1 -0
  67. package/dist/services/agent-run-service.d.ts +44 -7
  68. package/dist/services/agent-run-service.d.ts.map +1 -1
  69. package/dist/services/agent-run-service.js +14 -0
  70. package/dist/services/agent-run-service.js.map +1 -1
  71. package/dist/services/agent-schedule-service.d.ts +21 -0
  72. package/dist/services/agent-schedule-service.d.ts.map +1 -1
  73. package/dist/services/agent-schedule-service.js +12 -0
  74. package/dist/services/agent-schedule-service.js.map +1 -1
  75. package/dist/services/audit-event-service.d.ts +76 -0
  76. package/dist/services/audit-event-service.d.ts.map +1 -0
  77. package/dist/services/audit-event-service.js +48 -0
  78. package/dist/services/audit-event-service.js.map +1 -0
  79. package/dist/services/backfill-chunks.d.ts +30 -0
  80. package/dist/services/backfill-chunks.d.ts.map +1 -0
  81. package/dist/services/backfill-chunks.js +55 -0
  82. package/dist/services/backfill-chunks.js.map +1 -0
  83. package/dist/services/chunk-service.d.ts +45 -0
  84. package/dist/services/chunk-service.d.ts.map +1 -0
  85. package/dist/services/chunk-service.js +111 -0
  86. package/dist/services/chunk-service.js.map +1 -0
  87. package/dist/services/chunker.d.ts +32 -0
  88. package/dist/services/chunker.d.ts.map +1 -0
  89. package/dist/services/chunker.js +289 -0
  90. package/dist/services/chunker.js.map +1 -0
  91. package/dist/services/context-service.d.ts +3 -1
  92. package/dist/services/context-service.d.ts.map +1 -1
  93. package/dist/services/context-service.js +17 -1
  94. package/dist/services/context-service.js.map +1 -1
  95. package/dist/services/delegation-cleanup-service.d.ts +133 -0
  96. package/dist/services/delegation-cleanup-service.d.ts.map +1 -0
  97. package/dist/services/delegation-cleanup-service.js +111 -0
  98. package/dist/services/delegation-cleanup-service.js.map +1 -0
  99. package/dist/services/edge-service.d.ts.map +1 -1
  100. package/dist/services/edge-service.js +3 -0
  101. package/dist/services/edge-service.js.map +1 -1
  102. package/dist/services/node-service.d.ts +12 -1
  103. package/dist/services/node-service.d.ts.map +1 -1
  104. package/dist/services/node-service.js +54 -11
  105. package/dist/services/node-service.js.map +1 -1
  106. package/dist/services/org-agent-type-service.d.ts +15 -0
  107. package/dist/services/org-agent-type-service.d.ts.map +1 -1
  108. package/dist/services/org-agent-type-service.js +2 -0
  109. package/dist/services/org-agent-type-service.js.map +1 -1
  110. package/dist/services/pii-detector-service.d.ts +1 -0
  111. package/dist/services/pii-detector-service.d.ts.map +1 -1
  112. package/dist/services/pii-detector-service.js +95 -2
  113. package/dist/services/pii-detector-service.js.map +1 -1
  114. package/dist/services/pii-encryption-service.d.ts +10 -0
  115. package/dist/services/pii-encryption-service.d.ts.map +1 -1
  116. package/dist/services/pii-encryption-service.js +32 -0
  117. package/dist/services/pii-encryption-service.js.map +1 -1
  118. package/dist/services/search-service.d.ts +30 -1
  119. package/dist/services/search-service.d.ts.map +1 -1
  120. package/dist/services/search-service.js +262 -45
  121. package/dist/services/search-service.js.map +1 -1
  122. package/dist/services/tag-service.d.ts +78 -0
  123. package/dist/services/tag-service.d.ts.map +1 -0
  124. package/dist/services/tag-service.js +639 -0
  125. package/dist/services/tag-service.js.map +1 -0
  126. package/dist/services/tag-service.test.d.ts +2 -0
  127. package/dist/services/tag-service.test.d.ts.map +1 -0
  128. package/dist/services/tag-service.test.js +448 -0
  129. package/dist/services/tag-service.test.js.map +1 -0
  130. package/dist/services/usage-service.d.ts +48 -0
  131. package/dist/services/usage-service.d.ts.map +1 -0
  132. package/dist/services/usage-service.js +116 -0
  133. package/dist/services/usage-service.js.map +1 -0
  134. package/dist/services/user-service.d.ts.map +1 -1
  135. package/dist/services/user-service.js +24 -6
  136. package/dist/services/user-service.js.map +1 -1
  137. package/dist/services/user-service.test.d.ts +2 -0
  138. package/dist/services/user-service.test.d.ts.map +1 -0
  139. package/dist/services/user-service.test.js +86 -0
  140. package/dist/services/user-service.test.js.map +1 -0
  141. package/dist/services/workspace-service.d.ts +2 -0
  142. package/dist/services/workspace-service.d.ts.map +1 -1
  143. package/dist/services/workspace-service.js +7 -1
  144. package/dist/services/workspace-service.js.map +1 -1
  145. package/dist/types/index.d.ts +80 -2
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/package.json +3 -2
  148. package/prisma/schema.prisma +335 -82
  149. package/dist/db/schema.d.ts +0 -507
  150. package/dist/db/schema.d.ts.map +0 -1
  151. package/dist/db/schema.js +0 -77
  152. package/dist/db/schema.js.map +0 -1
@@ -0,0 +1,45 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ import type { EmbeddingProvider } from "../types/index.js";
3
+ import { type TenantContext } from "../db/tenant.js";
4
+ import type { PiiEncryptionService } from "./pii-encryption-service.js";
5
+ import type { PiiEncryptionOptions } from "./pii-encryption-service.js";
6
+ export declare class ChunkService {
7
+ private db;
8
+ private embeddings;
9
+ private piiEncryption?;
10
+ private piiOptions?;
11
+ private tenantCtx;
12
+ constructor(db: PrismaClient, embeddings: EmbeddingProvider, tenantCtx?: TenantContext, piiEncryption?: PiiEncryptionService | undefined, piiOptions?: PiiEncryptionOptions | undefined);
13
+ /**
14
+ * Chunk a node's content, embed each chunk, and store in node_chunks.
15
+ * Replaces any existing chunks for the node (atomic replace).
16
+ */
17
+ chunkAndEmbed(nodeId: string, title: string, content: string): Promise<void>;
18
+ /**
19
+ * Delete all chunks for a node.
20
+ */
21
+ deleteByNodeId(nodeId: string): Promise<void>;
22
+ /**
23
+ * Get all chunks for a node, ordered by chunk_index.
24
+ */
25
+ getByNodeId(nodeId: string): Promise<Array<{
26
+ id: string;
27
+ nodeId: string;
28
+ chunkIndex: number;
29
+ content: string;
30
+ tokenCount: number;
31
+ headingContext: string | null;
32
+ startOffset: number;
33
+ endOffset: number;
34
+ overlapPrev: number;
35
+ embeddingPiiMode: string | null;
36
+ }>>;
37
+ /**
38
+ * Insert chunks with embeddings via raw SQL.
39
+ * Uses gen_random_uuid() in VALUES (Accelerate proxy gotcha).
40
+ */
41
+ private insertChunksBatch;
42
+ private stripForEmbedding;
43
+ private resolvePiiMode;
44
+ }
45
+ //# sourceMappingURL=chunk-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-service.d.ts","sourceRoot":"","sources":["../../src/services/chunk-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,qBAAa,YAAY;IAIrB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,UAAU,CAAC;IAPrB,OAAO,CAAC,SAAS,CAAgB;gBAGvB,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,iBAAiB,EACrC,SAAS,CAAC,EAAE,aAAa,EACjB,aAAa,CAAC,EAAE,oBAAoB,YAAA,EACpC,UAAU,CAAC,EAAE,oBAAoB,YAAA;IAK3C;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlF;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/C,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC,CAAC;IAgBH;;;OAGG;YACW,iBAAiB;IA6C/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,cAAc;CAIvB"}
@@ -0,0 +1,111 @@
1
+ import { tenantWhere, SINGLE_TENANT_ORG_ID } from "../db/tenant.js";
2
+ import { chunkText } from "./chunker.js";
3
+ export class ChunkService {
4
+ db;
5
+ embeddings;
6
+ piiEncryption;
7
+ piiOptions;
8
+ tenantCtx;
9
+ constructor(db, embeddings, tenantCtx, piiEncryption, piiOptions) {
10
+ this.db = db;
11
+ this.embeddings = embeddings;
12
+ this.piiEncryption = piiEncryption;
13
+ this.piiOptions = piiOptions;
14
+ this.tenantCtx = tenantCtx ?? { organizationId: SINGLE_TENANT_ORG_ID };
15
+ }
16
+ /**
17
+ * Chunk a node's content, embed each chunk, and store in node_chunks.
18
+ * Replaces any existing chunks for the node (atomic replace).
19
+ */
20
+ async chunkAndEmbed(nodeId, title, content) {
21
+ // Strip PII before chunking to prevent PII reaching the provider
22
+ const strippedText = this.stripForEmbedding(`${title}\n\n${content}`);
23
+ const chunks = chunkText(strippedText);
24
+ if (chunks.length === 0)
25
+ return;
26
+ // Prepend heading context to each chunk for embedding
27
+ const textsForEmbedding = chunks.map((c) => c.headingContext ? `${c.headingContext}: ${c.content}` : c.content);
28
+ const embeddings = await this.embeddings.embedBatch(textsForEmbedding, {
29
+ inputType: "document",
30
+ });
31
+ // Atomic replace: delete existing, then insert new
32
+ await this.deleteByNodeId(nodeId);
33
+ await this.insertChunksBatch(nodeId, chunks, embeddings);
34
+ }
35
+ /**
36
+ * Delete all chunks for a node.
37
+ */
38
+ async deleteByNodeId(nodeId) {
39
+ const orgFilter = tenantWhere(this.tenantCtx);
40
+ await this.db.$executeRaw `
41
+ DELETE FROM node_chunks
42
+ WHERE node_id = ${nodeId}::uuid
43
+ AND ${orgFilter}
44
+ `;
45
+ }
46
+ /**
47
+ * Get all chunks for a node, ordered by chunk_index.
48
+ */
49
+ async getByNodeId(nodeId) {
50
+ const orgFilter = tenantWhere(this.tenantCtx);
51
+ return this.db.$queryRaw `
52
+ SELECT id, node_id as "nodeId", chunk_index as "chunkIndex",
53
+ content, token_count as "tokenCount",
54
+ heading_context as "headingContext",
55
+ start_offset as "startOffset", end_offset as "endOffset",
56
+ overlap_prev as "overlapPrev",
57
+ embedding_pii_mode as "embeddingPiiMode"
58
+ FROM node_chunks
59
+ WHERE node_id = ${nodeId}::uuid
60
+ AND ${orgFilter}
61
+ ORDER BY chunk_index ASC
62
+ `;
63
+ }
64
+ /**
65
+ * Insert chunks with embeddings via raw SQL.
66
+ * Uses gen_random_uuid() in VALUES (Accelerate proxy gotcha).
67
+ */
68
+ async insertChunksBatch(nodeId, chunks, embeddings) {
69
+ if (chunks.length === 0)
70
+ return;
71
+ const piiMode = this.resolvePiiMode();
72
+ const orgId = this.tenantCtx.organizationId;
73
+ const values = [];
74
+ const params = [];
75
+ let paramIdx = 1;
76
+ for (let i = 0; i < chunks.length; i++) {
77
+ const chunk = chunks[i];
78
+ const embeddingStr = `[${embeddings[i].join(",")}]`;
79
+ values.push(`(gen_random_uuid(), $${paramIdx}::uuid, $${paramIdx + 1}, $${paramIdx + 2}, $${paramIdx + 3}, $${paramIdx + 4}, $${paramIdx + 5}, $${paramIdx + 6}, $${paramIdx + 7}, $${paramIdx + 8}::vector, $${paramIdx + 9}, $${paramIdx + 10}::uuid, NOW())`);
80
+ params.push(nodeId, // node_id
81
+ chunk.chunkIndex, // chunk_index
82
+ chunk.content, // content
83
+ chunk.tokenCount, // token_count
84
+ chunk.headingContext, // heading_context
85
+ chunk.startOffset, // start_offset
86
+ chunk.endOffset, // end_offset
87
+ chunk.overlapPrev, // overlap_prev
88
+ embeddingStr, // embedding
89
+ piiMode, // embedding_pii_mode
90
+ orgId);
91
+ paramIdx += 11;
92
+ }
93
+ const sql = `
94
+ INSERT INTO node_chunks (id, node_id, chunk_index, content, token_count, heading_context, start_offset, end_offset, overlap_prev, embedding, embedding_pii_mode, organization_id, created_at)
95
+ VALUES ${values.join(", ")}
96
+ `;
97
+ await this.db.$queryRawUnsafe(sql, ...params);
98
+ }
99
+ stripForEmbedding(text) {
100
+ if (!this.piiEncryption || !this.piiOptions || this.piiOptions.mode === "disabled") {
101
+ return text;
102
+ }
103
+ return this.piiEncryption.stripPii(text, this.piiOptions.allowedPiiTypes).text;
104
+ }
105
+ resolvePiiMode() {
106
+ if (!this.piiOptions || this.piiOptions.mode === "disabled")
107
+ return null;
108
+ return this.piiOptions.mode;
109
+ }
110
+ }
111
+ //# sourceMappingURL=chunk-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-service.js","sourceRoot":"","sources":["../../src/services/chunk-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pure text splitting function for content chunking.
3
+ * No I/O — takes text, returns chunk descriptors.
4
+ */
5
+ export interface ChunkInput {
6
+ content: string;
7
+ chunkIndex: number;
8
+ tokenCount: number;
9
+ headingContext: string | null;
10
+ startOffset: number;
11
+ endOffset: number;
12
+ overlapPrev: number;
13
+ }
14
+ /** Target chunk size in estimated tokens */
15
+ export declare const TARGET_CHUNK_TOKENS = 400;
16
+ /** Hard cap — never exceed this */
17
+ export declare const MAX_CHUNK_TOKENS = 600;
18
+ /** Rough token estimate: ~4 chars per token */
19
+ export declare function estimateTokens(text: string): number;
20
+ /**
21
+ * Main entry point: split text into chunks suitable for embedding.
22
+ *
23
+ * Algorithm:
24
+ * 1. Parse markdown headings into sections
25
+ * 2. Within each section, split into paragraphs
26
+ * 3. Accumulate paragraphs into chunks up to ~TARGET_CHUNK_TOKENS
27
+ * 4. Structural boundaries (headings, paragraph breaks) → overlap = 0
28
+ * 5. Forced mid-paragraph splits → overlap = trailing sentences
29
+ * 6. Code blocks are atomic — never split within
30
+ */
31
+ export declare function chunkText(text: string): ChunkInput[];
32
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/services/chunker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAsND;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAgGpD"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Pure text splitting function for content chunking.
3
+ * No I/O — takes text, returns chunk descriptors.
4
+ */
5
+ /** Target chunk size in estimated tokens */
6
+ export const TARGET_CHUNK_TOKENS = 400;
7
+ /** Hard cap — never exceed this */
8
+ export const MAX_CHUNK_TOKENS = 600;
9
+ /** Rough token estimate: ~4 chars per token */
10
+ export function estimateTokens(text) {
11
+ return Math.ceil(text.length / 4);
12
+ }
13
+ /**
14
+ * Parse markdown text into sections by headings.
15
+ * Each section carries its heading context and start offset.
16
+ */
17
+ function parseSections(text) {
18
+ const sections = [];
19
+ const headingRe = /^(#{1,6})\s+(.+)$/gm;
20
+ let lastIndex = 0;
21
+ let currentHeading = null;
22
+ let match;
23
+ while ((match = headingRe.exec(text)) !== null) {
24
+ // Content before this heading belongs to the previous section
25
+ if (match.index > lastIndex) {
26
+ const content = text.slice(lastIndex, match.index);
27
+ if (content.trim()) {
28
+ sections.push({
29
+ heading: currentHeading,
30
+ content,
31
+ startOffset: lastIndex,
32
+ });
33
+ }
34
+ }
35
+ currentHeading = match[2].trim();
36
+ lastIndex = match.index + match[0].length;
37
+ // Skip the newline after the heading
38
+ if (text[lastIndex] === "\n")
39
+ lastIndex++;
40
+ }
41
+ // Remaining content after last heading
42
+ if (lastIndex < text.length) {
43
+ const content = text.slice(lastIndex);
44
+ if (content.trim()) {
45
+ sections.push({
46
+ heading: currentHeading,
47
+ content,
48
+ startOffset: lastIndex,
49
+ });
50
+ }
51
+ }
52
+ // If no headings found, treat entire text as one section
53
+ if (sections.length === 0 && text.trim()) {
54
+ sections.push({ heading: null, content: text, startOffset: 0 });
55
+ }
56
+ return sections;
57
+ }
58
+ /**
59
+ * Check if a line starts a fenced code block (``` or ~~~).
60
+ */
61
+ function isCodeFence(line) {
62
+ const trimmed = line.trimStart();
63
+ return trimmed.startsWith("```") || trimmed.startsWith("~~~");
64
+ }
65
+ /**
66
+ * Split section content into paragraphs, keeping code blocks atomic.
67
+ * Returns array of paragraph strings.
68
+ */
69
+ function splitParagraphs(text) {
70
+ const lines = text.split("\n");
71
+ const paragraphs = [];
72
+ let current = [];
73
+ let inCodeBlock = false;
74
+ for (const line of lines) {
75
+ if (isCodeFence(line)) {
76
+ if (inCodeBlock) {
77
+ // Closing fence — end of code block
78
+ current.push(line);
79
+ inCodeBlock = false;
80
+ continue;
81
+ }
82
+ else {
83
+ // Opening fence — if we have accumulated text, flush it
84
+ if (current.length > 0 && current.some((l) => l.trim())) {
85
+ paragraphs.push(current.join("\n"));
86
+ current = [];
87
+ }
88
+ inCodeBlock = true;
89
+ current.push(line);
90
+ continue;
91
+ }
92
+ }
93
+ if (inCodeBlock) {
94
+ current.push(line);
95
+ continue;
96
+ }
97
+ // Empty line = paragraph boundary
98
+ if (line.trim() === "") {
99
+ if (current.length > 0 && current.some((l) => l.trim())) {
100
+ paragraphs.push(current.join("\n"));
101
+ current = [];
102
+ }
103
+ }
104
+ else {
105
+ current.push(line);
106
+ }
107
+ }
108
+ // Flush remaining
109
+ if (current.length > 0 && current.some((l) => l.trim())) {
110
+ paragraphs.push(current.join("\n"));
111
+ }
112
+ return paragraphs;
113
+ }
114
+ /**
115
+ * Find the last sentence boundary in text.
116
+ * Returns the index after the sentence-ending punctuation + space,
117
+ * or -1 if no boundary found.
118
+ */
119
+ function lastSentenceBoundary(text) {
120
+ // Look for ". " or "! " or "? " from the end
121
+ const sentenceEndRe = /[.!?]\s/g;
122
+ let lastIdx = -1;
123
+ let m;
124
+ while ((m = sentenceEndRe.exec(text)) !== null) {
125
+ lastIdx = m.index + m[0].length;
126
+ }
127
+ return lastIdx;
128
+ }
129
+ /**
130
+ * Split a single long paragraph into chunks at sentence boundaries.
131
+ * Returns chunks with overlap information.
132
+ */
133
+ function splitLongParagraph(text, heading, baseOffset) {
134
+ const chunks = [];
135
+ let remaining = text;
136
+ let offset = baseOffset;
137
+ let chunkIndex = 0;
138
+ let overlapText = "";
139
+ while (remaining.length > 0) {
140
+ const withOverlap = overlapText + remaining;
141
+ const overlapLen = overlapText.length;
142
+ if (estimateTokens(withOverlap) <= MAX_CHUNK_TOKENS) {
143
+ // Fits in one chunk
144
+ chunks.push({
145
+ content: withOverlap.trim(),
146
+ chunkIndex,
147
+ tokenCount: estimateTokens(withOverlap.trim()),
148
+ headingContext: heading,
149
+ startOffset: offset - overlapLen,
150
+ endOffset: offset + remaining.length,
151
+ overlapPrev: overlapLen,
152
+ });
153
+ break;
154
+ }
155
+ // Need to split — find a good boundary within TARGET_CHUNK_TOKENS
156
+ const targetChars = TARGET_CHUNK_TOKENS * 4;
157
+ const candidateEnd = Math.min(targetChars, withOverlap.length);
158
+ const candidate = withOverlap.slice(0, candidateEnd);
159
+ const boundary = lastSentenceBoundary(candidate);
160
+ let splitAt;
161
+ if (boundary > overlapLen && boundary > candidate.length * 0.3) {
162
+ splitAt = boundary;
163
+ }
164
+ else {
165
+ // No good sentence boundary — split at target size
166
+ splitAt = candidateEnd;
167
+ }
168
+ const chunkContent = withOverlap.slice(0, splitAt).trim();
169
+ const consumedFromRemaining = splitAt - overlapLen;
170
+ chunks.push({
171
+ content: chunkContent,
172
+ chunkIndex,
173
+ tokenCount: estimateTokens(chunkContent),
174
+ headingContext: heading,
175
+ startOffset: offset - overlapLen,
176
+ endOffset: offset + consumedFromRemaining,
177
+ overlapPrev: overlapLen,
178
+ });
179
+ // Build overlap for next chunk: last 1-2 sentences
180
+ const overlapCandidate = withOverlap.slice(Math.max(0, splitAt - 240), splitAt);
181
+ const overlapBoundary = lastSentenceBoundary(overlapCandidate);
182
+ if (overlapBoundary > 0) {
183
+ overlapText = overlapCandidate.slice(overlapBoundary);
184
+ }
185
+ else {
186
+ overlapText = "";
187
+ }
188
+ remaining = remaining.slice(consumedFromRemaining);
189
+ offset += consumedFromRemaining;
190
+ chunkIndex++;
191
+ }
192
+ return chunks;
193
+ }
194
+ /**
195
+ * Main entry point: split text into chunks suitable for embedding.
196
+ *
197
+ * Algorithm:
198
+ * 1. Parse markdown headings into sections
199
+ * 2. Within each section, split into paragraphs
200
+ * 3. Accumulate paragraphs into chunks up to ~TARGET_CHUNK_TOKENS
201
+ * 4. Structural boundaries (headings, paragraph breaks) → overlap = 0
202
+ * 5. Forced mid-paragraph splits → overlap = trailing sentences
203
+ * 6. Code blocks are atomic — never split within
204
+ */
205
+ export function chunkText(text) {
206
+ if (!text || !text.trim())
207
+ return [];
208
+ const sections = parseSections(text);
209
+ const allChunks = [];
210
+ let globalChunkIndex = 0;
211
+ for (const section of sections) {
212
+ const paragraphs = splitParagraphs(section.content);
213
+ let currentParagraphs = [];
214
+ let currentTokens = 0;
215
+ let chunkStartOffset = section.startOffset;
216
+ for (const para of paragraphs) {
217
+ const paraTokens = estimateTokens(para);
218
+ // Single paragraph exceeds max — split it
219
+ if (paraTokens > MAX_CHUNK_TOKENS) {
220
+ // Flush accumulated paragraphs first
221
+ if (currentParagraphs.length > 0) {
222
+ const content = currentParagraphs.join("\n\n").trim();
223
+ if (content) {
224
+ allChunks.push({
225
+ content,
226
+ chunkIndex: globalChunkIndex++,
227
+ tokenCount: estimateTokens(content),
228
+ headingContext: section.heading,
229
+ startOffset: chunkStartOffset,
230
+ endOffset: chunkStartOffset + content.length,
231
+ overlapPrev: 0,
232
+ });
233
+ }
234
+ currentParagraphs = [];
235
+ currentTokens = 0;
236
+ }
237
+ // Split the long paragraph
238
+ const paraOffset = section.startOffset +
239
+ section.content.indexOf(para);
240
+ const subChunks = splitLongParagraph(para, section.heading, paraOffset);
241
+ for (const sub of subChunks) {
242
+ allChunks.push({
243
+ ...sub,
244
+ chunkIndex: globalChunkIndex++,
245
+ });
246
+ }
247
+ chunkStartOffset = paraOffset + para.length;
248
+ continue;
249
+ }
250
+ // Would exceed target — flush current
251
+ if (currentTokens + paraTokens > TARGET_CHUNK_TOKENS && currentParagraphs.length > 0) {
252
+ const content = currentParagraphs.join("\n\n").trim();
253
+ if (content) {
254
+ allChunks.push({
255
+ content,
256
+ chunkIndex: globalChunkIndex++,
257
+ tokenCount: estimateTokens(content),
258
+ headingContext: section.heading,
259
+ startOffset: chunkStartOffset,
260
+ endOffset: chunkStartOffset + content.length,
261
+ overlapPrev: 0,
262
+ });
263
+ }
264
+ chunkStartOffset = section.startOffset + section.content.indexOf(para);
265
+ currentParagraphs = [];
266
+ currentTokens = 0;
267
+ }
268
+ currentParagraphs.push(para);
269
+ currentTokens += paraTokens;
270
+ }
271
+ // Flush remaining paragraphs in section
272
+ if (currentParagraphs.length > 0) {
273
+ const content = currentParagraphs.join("\n\n").trim();
274
+ if (content) {
275
+ allChunks.push({
276
+ content,
277
+ chunkIndex: globalChunkIndex++,
278
+ tokenCount: estimateTokens(content),
279
+ headingContext: section.heading,
280
+ startOffset: chunkStartOffset,
281
+ endOffset: chunkStartOffset + content.length,
282
+ overlapPrev: 0,
283
+ });
284
+ }
285
+ }
286
+ }
287
+ return allChunks;
288
+ }
289
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/services/chunker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,mCAAmC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,+CAA+C;AAC/C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAQD;;;GAGG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,qBAAqB,CAAC;IACxC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,8DAA8D;QAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE,cAAc;oBACvB,OAAO;oBACP,WAAW,EAAE,SAAS;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,qCAAqC;QACrC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED,uCAAuC;IACvC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,cAAc;gBACvB,OAAO;gBACP,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,WAAW,EAAE,CAAC;gBAChB,oCAAoC;gBACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,WAAW,GAAG,KAAK,CAAC;gBACpB,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,wDAAwD;gBACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACxD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,OAAO,GAAG,EAAE,CAAC;gBACf,CAAC;gBACD,WAAW,GAAG,IAAI,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACxC,6CAA6C;IAC7C,MAAM,aAAa,GAAG,UAAU,CAAC;IACjC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,IAAY,EACZ,OAAsB,EACtB,UAAkB;IAElB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;QAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;QAEtC,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACpD,oBAAoB;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE;gBAC3B,UAAU;gBACV,UAAU,EAAE,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC9C,cAAc,EAAE,OAAO;gBACvB,WAAW,EAAE,MAAM,GAAG,UAAU;gBAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM;gBACpC,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAED,kEAAkE;QAClE,MAAM,WAAW,GAAG,mBAAmB,GAAG,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,OAAe,CAAC;QACpB,IAAI,QAAQ,GAAG,UAAU,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC/D,OAAO,GAAG,QAAQ,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,OAAO,GAAG,YAAY,CAAC;QACzB,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,qBAAqB,GAAG,OAAO,GAAG,UAAU,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,YAAY;YACrB,UAAU;YACV,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC;YACxC,cAAc,EAAE,OAAO;YACvB,WAAW,EAAE,MAAM,GAAG,UAAU;YAChC,SAAS,EAAE,MAAM,GAAG,qBAAqB;YACzC,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CACxC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,EAC1B,OAAO,CACR,CAAC;QACF,MAAM,eAAe,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC/D,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnD,MAAM,IAAI,qBAAqB,CAAC;QAChC,UAAU,EAAE,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,iBAAiB,GAAa,EAAE,CAAC;QACrC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAExC,0CAA0C;YAC1C,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBAClC,qCAAqC;gBACrC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;oBACtD,IAAI,OAAO,EAAE,CAAC;wBACZ,SAAS,CAAC,IAAI,CAAC;4BACb,OAAO;4BACP,UAAU,EAAE,gBAAgB,EAAE;4BAC9B,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC;4BACnC,cAAc,EAAE,OAAO,CAAC,OAAO;4BAC/B,WAAW,EAAE,gBAAgB;4BAC7B,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM;4BAC5C,WAAW,EAAE,CAAC;yBACf,CAAC,CAAC;oBACL,CAAC;oBACD,iBAAiB,GAAG,EAAE,CAAC;oBACvB,aAAa,GAAG,CAAC,CAAC;gBACpB,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,UAAU,GACd,OAAO,CAAC,WAAW;oBACnB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,SAAS,GAAG,kBAAkB,CAClC,IAAI,EACJ,OAAO,CAAC,OAAO,EACf,UAAU,CACX,CAAC;gBACF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,SAAS,CAAC,IAAI,CAAC;wBACb,GAAG,GAAG;wBACN,UAAU,EAAE,gBAAgB,EAAE;qBAC/B,CAAC,CAAC;gBACL,CAAC;gBACD,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,sCAAsC;YACtC,IAAI,aAAa,GAAG,UAAU,GAAG,mBAAmB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,IAAI,CAAC;wBACb,OAAO;wBACP,UAAU,EAAE,gBAAgB,EAAE;wBAC9B,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC;wBACnC,cAAc,EAAE,OAAO,CAAC,OAAO;wBAC/B,WAAW,EAAE,gBAAgB;wBAC7B,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM;wBAC5C,WAAW,EAAE,CAAC;qBACf,CAAC,CAAC;gBACL,CAAC;gBACD,gBAAgB,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvE,iBAAiB,GAAG,EAAE,CAAC;gBACvB,aAAa,GAAG,CAAC,CAAC;YACpB,CAAC;YAED,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,aAAa,IAAI,UAAU,CAAC;QAC9B,CAAC;QAED,wCAAwC;QACxC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC;oBACb,OAAO;oBACP,UAAU,EAAE,gBAAgB,EAAE;oBAC9B,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC;oBACnC,cAAc,EAAE,OAAO,CAAC,OAAO;oBAC/B,WAAW,EAAE,gBAAgB;oBAC7B,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM;oBAC5C,WAAW,EAAE,CAAC;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -4,6 +4,7 @@ import type { EdgeService } from "./edge-service.js";
4
4
  import type { NodeService } from "./node-service.js";
5
5
  import type { WorkspaceService } from "./workspace-service.js";
6
6
  import type { DomainService } from "./domain-service.js";
7
+ import type { ChunkService } from "./chunk-service.js";
7
8
  export declare class ContextService {
8
9
  private nodeService;
9
10
  private edgeService;
@@ -11,7 +12,8 @@ export declare class ContextService {
11
12
  private config;
12
13
  private workspaceService?;
13
14
  private domainService?;
14
- constructor(nodeService: NodeService, edgeService: EdgeService, searchService: SearchService, config: ApartConfig, workspaceService?: WorkspaceService | undefined, domainService?: DomainService | undefined);
15
+ private chunkService?;
16
+ constructor(nodeService: NodeService, edgeService: EdgeService, searchService: SearchService, config: ApartConfig, workspaceService?: WorkspaceService | undefined, domainService?: DomainService | undefined, chunkService?: ChunkService | undefined);
15
17
  assemble(options: ContextOptions): Promise<ContextPackage>;
16
18
  }
17
19
  //# sourceMappingURL=context-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-service.d.ts","sourceRoot":"","sources":["../../src/services/context-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,cAAc;IAEvB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,gBAAgB,CAAC;IACzB,OAAO,CAAC,aAAa,CAAC;gBALd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,gBAAgB,YAAA,EACnC,aAAa,CAAC,EAAE,aAAa,YAAA;IAGjC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAsGjE"}
1
+ {"version":3,"file":"context-service.d.ts","sourceRoot":"","sources":["../../src/services/context-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,cAAc;IAEvB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,gBAAgB,CAAC;IACzB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,YAAY,CAAC;gBANb,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,gBAAgB,YAAA,EACnC,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,YAAY,CAAC,EAAE,YAAY,YAAA;IAG/B,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;CAoHjE"}
@@ -5,13 +5,15 @@ export class ContextService {
5
5
  config;
6
6
  workspaceService;
7
7
  domainService;
8
- constructor(nodeService, edgeService, searchService, config, workspaceService, domainService) {
8
+ chunkService;
9
+ constructor(nodeService, edgeService, searchService, config, workspaceService, domainService, chunkService) {
9
10
  this.nodeService = nodeService;
10
11
  this.edgeService = edgeService;
11
12
  this.searchService = searchService;
12
13
  this.config = config;
13
14
  this.workspaceService = workspaceService;
14
15
  this.domainService = domainService;
16
+ this.chunkService = chunkService;
15
17
  }
16
18
  async assemble(options) {
17
19
  // Resolve workspace filter and merge into options (workspace values as defaults, explicit options override)
@@ -91,12 +93,26 @@ export class ContextService {
91
93
  edgeIds.add(e.id);
92
94
  return true;
93
95
  });
96
+ // Fetch chunks for context nodes if chunk service is available
97
+ let chunks;
98
+ if (this.chunkService) {
99
+ chunks = {};
100
+ for (const node of allNodes) {
101
+ const nodeChunks = await this.chunkService.getByNodeId(node.id);
102
+ if (nodeChunks.length > 0) {
103
+ chunks[node.id] = nodeChunks.map((c) => c.content);
104
+ }
105
+ }
106
+ if (Object.keys(chunks).length === 0)
107
+ chunks = undefined;
108
+ }
94
109
  return {
95
110
  nodes: allNodes,
96
111
  edges: uniqueEdges,
97
112
  query: options.query,
98
113
  assembledAt: new Date().toISOString(),
99
114
  ...(workspaceInfo && { workspace: workspaceInfo }),
115
+ ...(chunks && { chunks }),
100
116
  };
101
117
  }
102
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context-service.js","sourceRoot":"","sources":["../../src/services/context-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-service.js","sourceRoot":"","sources":["../../src/services/context-service.ts"],"names":[],"mappings":"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"}