cccmemory 1.8.0

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 (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/dist/ConversationMemory.d.ts +231 -0
  4. package/dist/ConversationMemory.d.ts.map +1 -0
  5. package/dist/ConversationMemory.js +357 -0
  6. package/dist/ConversationMemory.js.map +1 -0
  7. package/dist/cache/QueryCache.d.ts +215 -0
  8. package/dist/cache/QueryCache.d.ts.map +1 -0
  9. package/dist/cache/QueryCache.js +294 -0
  10. package/dist/cache/QueryCache.js.map +1 -0
  11. package/dist/cli/commands.d.ts +9 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +954 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/help.d.ts +16 -0
  16. package/dist/cli/help.d.ts.map +1 -0
  17. package/dist/cli/help.js +361 -0
  18. package/dist/cli/help.js.map +1 -0
  19. package/dist/cli/index.d.ts +30 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +111 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/context/ContextInjector.d.ts +38 -0
  24. package/dist/context/ContextInjector.d.ts.map +1 -0
  25. package/dist/context/ContextInjector.js +235 -0
  26. package/dist/context/ContextInjector.js.map +1 -0
  27. package/dist/documentation/CodeAnalyzer.d.ts +29 -0
  28. package/dist/documentation/CodeAnalyzer.d.ts.map +1 -0
  29. package/dist/documentation/CodeAnalyzer.js +122 -0
  30. package/dist/documentation/CodeAnalyzer.js.map +1 -0
  31. package/dist/documentation/ConversationAnalyzer.d.ts +19 -0
  32. package/dist/documentation/ConversationAnalyzer.d.ts.map +1 -0
  33. package/dist/documentation/ConversationAnalyzer.js +157 -0
  34. package/dist/documentation/ConversationAnalyzer.js.map +1 -0
  35. package/dist/documentation/CrossReferencer.d.ts +67 -0
  36. package/dist/documentation/CrossReferencer.d.ts.map +1 -0
  37. package/dist/documentation/CrossReferencer.js +247 -0
  38. package/dist/documentation/CrossReferencer.js.map +1 -0
  39. package/dist/documentation/DocumentationGenerator.d.ts +22 -0
  40. package/dist/documentation/DocumentationGenerator.d.ts.map +1 -0
  41. package/dist/documentation/DocumentationGenerator.js +57 -0
  42. package/dist/documentation/DocumentationGenerator.js.map +1 -0
  43. package/dist/documentation/MarkdownFormatter.d.ts +26 -0
  44. package/dist/documentation/MarkdownFormatter.d.ts.map +1 -0
  45. package/dist/documentation/MarkdownFormatter.js +301 -0
  46. package/dist/documentation/MarkdownFormatter.js.map +1 -0
  47. package/dist/documentation/types.d.ts +176 -0
  48. package/dist/documentation/types.d.ts.map +1 -0
  49. package/dist/documentation/types.js +5 -0
  50. package/dist/documentation/types.js.map +1 -0
  51. package/dist/embeddings/ConfigManager.d.ts +46 -0
  52. package/dist/embeddings/ConfigManager.d.ts.map +1 -0
  53. package/dist/embeddings/ConfigManager.js +177 -0
  54. package/dist/embeddings/ConfigManager.js.map +1 -0
  55. package/dist/embeddings/EmbeddingConfig.d.ts +39 -0
  56. package/dist/embeddings/EmbeddingConfig.d.ts.map +1 -0
  57. package/dist/embeddings/EmbeddingConfig.js +132 -0
  58. package/dist/embeddings/EmbeddingConfig.js.map +1 -0
  59. package/dist/embeddings/EmbeddingGenerator.d.ts +51 -0
  60. package/dist/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  61. package/dist/embeddings/EmbeddingGenerator.js +157 -0
  62. package/dist/embeddings/EmbeddingGenerator.js.map +1 -0
  63. package/dist/embeddings/EmbeddingProvider.d.ts +34 -0
  64. package/dist/embeddings/EmbeddingProvider.d.ts.map +1 -0
  65. package/dist/embeddings/EmbeddingProvider.js +6 -0
  66. package/dist/embeddings/EmbeddingProvider.js.map +1 -0
  67. package/dist/embeddings/ModelRegistry.d.ts +48 -0
  68. package/dist/embeddings/ModelRegistry.d.ts.map +1 -0
  69. package/dist/embeddings/ModelRegistry.js +170 -0
  70. package/dist/embeddings/ModelRegistry.js.map +1 -0
  71. package/dist/embeddings/VectorStore.d.ts +114 -0
  72. package/dist/embeddings/VectorStore.d.ts.map +1 -0
  73. package/dist/embeddings/VectorStore.js +393 -0
  74. package/dist/embeddings/VectorStore.js.map +1 -0
  75. package/dist/embeddings/providers/OllamaEmbeddings.d.ts +38 -0
  76. package/dist/embeddings/providers/OllamaEmbeddings.d.ts.map +1 -0
  77. package/dist/embeddings/providers/OllamaEmbeddings.js +125 -0
  78. package/dist/embeddings/providers/OllamaEmbeddings.js.map +1 -0
  79. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts +40 -0
  80. package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -0
  81. package/dist/embeddings/providers/OpenAIEmbeddings.js +129 -0
  82. package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -0
  83. package/dist/embeddings/providers/TransformersEmbeddings.d.ts +38 -0
  84. package/dist/embeddings/providers/TransformersEmbeddings.d.ts.map +1 -0
  85. package/dist/embeddings/providers/TransformersEmbeddings.js +115 -0
  86. package/dist/embeddings/providers/TransformersEmbeddings.js.map +1 -0
  87. package/dist/handoff/SessionHandoffStore.d.ts +80 -0
  88. package/dist/handoff/SessionHandoffStore.d.ts.map +1 -0
  89. package/dist/handoff/SessionHandoffStore.js +314 -0
  90. package/dist/handoff/SessionHandoffStore.js.map +1 -0
  91. package/dist/index.d.ts +7 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +115 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/mcp-server.d.ts +27 -0
  96. package/dist/mcp-server.d.ts.map +1 -0
  97. package/dist/mcp-server.js +157 -0
  98. package/dist/mcp-server.js.map +1 -0
  99. package/dist/memory/WorkingMemoryStore.d.ts +83 -0
  100. package/dist/memory/WorkingMemoryStore.d.ts.map +1 -0
  101. package/dist/memory/WorkingMemoryStore.js +318 -0
  102. package/dist/memory/WorkingMemoryStore.js.map +1 -0
  103. package/dist/memory/types.d.ts +192 -0
  104. package/dist/memory/types.d.ts.map +1 -0
  105. package/dist/memory/types.js +8 -0
  106. package/dist/memory/types.js.map +1 -0
  107. package/dist/parsers/CodexConversationParser.d.ts +51 -0
  108. package/dist/parsers/CodexConversationParser.d.ts.map +1 -0
  109. package/dist/parsers/CodexConversationParser.js +301 -0
  110. package/dist/parsers/CodexConversationParser.js.map +1 -0
  111. package/dist/parsers/ConversationParser.d.ts +286 -0
  112. package/dist/parsers/ConversationParser.d.ts.map +1 -0
  113. package/dist/parsers/ConversationParser.js +795 -0
  114. package/dist/parsers/ConversationParser.js.map +1 -0
  115. package/dist/parsers/DecisionExtractor.d.ts +144 -0
  116. package/dist/parsers/DecisionExtractor.d.ts.map +1 -0
  117. package/dist/parsers/DecisionExtractor.js +434 -0
  118. package/dist/parsers/DecisionExtractor.js.map +1 -0
  119. package/dist/parsers/GitIntegrator.d.ts +156 -0
  120. package/dist/parsers/GitIntegrator.d.ts.map +1 -0
  121. package/dist/parsers/GitIntegrator.js +348 -0
  122. package/dist/parsers/GitIntegrator.js.map +1 -0
  123. package/dist/parsers/MistakeExtractor.d.ts +151 -0
  124. package/dist/parsers/MistakeExtractor.d.ts.map +1 -0
  125. package/dist/parsers/MistakeExtractor.js +460 -0
  126. package/dist/parsers/MistakeExtractor.js.map +1 -0
  127. package/dist/parsers/RequirementsExtractor.d.ts +166 -0
  128. package/dist/parsers/RequirementsExtractor.d.ts.map +1 -0
  129. package/dist/parsers/RequirementsExtractor.js +338 -0
  130. package/dist/parsers/RequirementsExtractor.js.map +1 -0
  131. package/dist/realtime/ConversationWatcher.d.ts +87 -0
  132. package/dist/realtime/ConversationWatcher.d.ts.map +1 -0
  133. package/dist/realtime/ConversationWatcher.js +204 -0
  134. package/dist/realtime/ConversationWatcher.js.map +1 -0
  135. package/dist/realtime/IncrementalParser.d.ts +83 -0
  136. package/dist/realtime/IncrementalParser.d.ts.map +1 -0
  137. package/dist/realtime/IncrementalParser.js +232 -0
  138. package/dist/realtime/IncrementalParser.js.map +1 -0
  139. package/dist/realtime/LiveExtractor.d.ts +72 -0
  140. package/dist/realtime/LiveExtractor.d.ts.map +1 -0
  141. package/dist/realtime/LiveExtractor.js +288 -0
  142. package/dist/realtime/LiveExtractor.js.map +1 -0
  143. package/dist/search/SemanticSearch.d.ts +121 -0
  144. package/dist/search/SemanticSearch.d.ts.map +1 -0
  145. package/dist/search/SemanticSearch.js +823 -0
  146. package/dist/search/SemanticSearch.js.map +1 -0
  147. package/dist/storage/BackupManager.d.ts +58 -0
  148. package/dist/storage/BackupManager.d.ts.map +1 -0
  149. package/dist/storage/BackupManager.js +223 -0
  150. package/dist/storage/BackupManager.js.map +1 -0
  151. package/dist/storage/ConversationStorage.d.ts +341 -0
  152. package/dist/storage/ConversationStorage.d.ts.map +1 -0
  153. package/dist/storage/ConversationStorage.js +792 -0
  154. package/dist/storage/ConversationStorage.js.map +1 -0
  155. package/dist/storage/DeletionService.d.ts +70 -0
  156. package/dist/storage/DeletionService.d.ts.map +1 -0
  157. package/dist/storage/DeletionService.js +253 -0
  158. package/dist/storage/DeletionService.js.map +1 -0
  159. package/dist/storage/GlobalIndex.d.ts +133 -0
  160. package/dist/storage/GlobalIndex.d.ts.map +1 -0
  161. package/dist/storage/GlobalIndex.js +310 -0
  162. package/dist/storage/GlobalIndex.js.map +1 -0
  163. package/dist/storage/SQLiteManager.d.ts +114 -0
  164. package/dist/storage/SQLiteManager.d.ts.map +1 -0
  165. package/dist/storage/SQLiteManager.js +636 -0
  166. package/dist/storage/SQLiteManager.js.map +1 -0
  167. package/dist/storage/migrations.d.ts +54 -0
  168. package/dist/storage/migrations.d.ts.map +1 -0
  169. package/dist/storage/migrations.js +285 -0
  170. package/dist/storage/migrations.js.map +1 -0
  171. package/dist/storage/schema.sql +436 -0
  172. package/dist/tools/ToolDefinitions.d.ts +946 -0
  173. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  174. package/dist/tools/ToolDefinitions.js +937 -0
  175. package/dist/tools/ToolDefinitions.js.map +1 -0
  176. package/dist/tools/ToolHandlers.d.ts +791 -0
  177. package/dist/tools/ToolHandlers.d.ts.map +1 -0
  178. package/dist/tools/ToolHandlers.js +3262 -0
  179. package/dist/tools/ToolHandlers.js.map +1 -0
  180. package/dist/types/ToolTypes.d.ts +824 -0
  181. package/dist/types/ToolTypes.d.ts.map +1 -0
  182. package/dist/types/ToolTypes.js +6 -0
  183. package/dist/types/ToolTypes.js.map +1 -0
  184. package/dist/utils/Logger.d.ts +70 -0
  185. package/dist/utils/Logger.d.ts.map +1 -0
  186. package/dist/utils/Logger.js +131 -0
  187. package/dist/utils/Logger.js.map +1 -0
  188. package/dist/utils/McpConfig.d.ts +54 -0
  189. package/dist/utils/McpConfig.d.ts.map +1 -0
  190. package/dist/utils/McpConfig.js +136 -0
  191. package/dist/utils/McpConfig.js.map +1 -0
  192. package/dist/utils/ProjectMigration.d.ts +82 -0
  193. package/dist/utils/ProjectMigration.d.ts.map +1 -0
  194. package/dist/utils/ProjectMigration.js +416 -0
  195. package/dist/utils/ProjectMigration.js.map +1 -0
  196. package/dist/utils/constants.d.ts +75 -0
  197. package/dist/utils/constants.d.ts.map +1 -0
  198. package/dist/utils/constants.js +105 -0
  199. package/dist/utils/constants.js.map +1 -0
  200. package/dist/utils/safeJson.d.ts +37 -0
  201. package/dist/utils/safeJson.d.ts.map +1 -0
  202. package/dist/utils/safeJson.js +48 -0
  203. package/dist/utils/safeJson.js.map +1 -0
  204. package/dist/utils/sanitization.d.ts +45 -0
  205. package/dist/utils/sanitization.d.ts.map +1 -0
  206. package/dist/utils/sanitization.js +153 -0
  207. package/dist/utils/sanitization.js.map +1 -0
  208. package/dist/utils/worktree.d.ts +15 -0
  209. package/dist/utils/worktree.d.ts.map +1 -0
  210. package/dist/utils/worktree.js +86 -0
  211. package/dist/utils/worktree.js.map +1 -0
  212. package/package.json +98 -0
  213. package/scripts/changelog-check.sh +62 -0
  214. package/scripts/check-node.js +17 -0
  215. package/scripts/dev-config.js +56 -0
  216. package/scripts/postinstall.js +117 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * OpenAI Embeddings Provider
3
+ * Uses OpenAI API for high-quality embeddings
4
+ */
5
+ import { getModelDimensions } from "../ModelRegistry.js";
6
+ export class OpenAIEmbeddings {
7
+ client = null;
8
+ model;
9
+ dimensions;
10
+ apiKey;
11
+ available = false;
12
+ initializationError = null;
13
+ constructor(apiKey, model = "text-embedding-3-small", dimensions) {
14
+ this.apiKey = apiKey;
15
+ this.model = model;
16
+ this.dimensions = dimensions || this.getDefaultDimensions(model);
17
+ }
18
+ /**
19
+ * Initialize OpenAI client
20
+ */
21
+ async initialize() {
22
+ try {
23
+ if (!this.apiKey) {
24
+ throw new Error("OpenAI API key required. Set OPENAI_API_KEY environment variable.");
25
+ }
26
+ // Dynamic import of OpenAI SDK (optional dependency)
27
+ const { default: OpenAI } = await import("openai");
28
+ this.client = new OpenAI({
29
+ apiKey: this.apiKey,
30
+ });
31
+ // Test the API key with a small request
32
+ await this.client.embeddings.create({
33
+ model: this.model,
34
+ input: "test",
35
+ });
36
+ this.available = true;
37
+ console.error(`✓ OpenAI embeddings ready (${this.model})`);
38
+ }
39
+ catch (error) {
40
+ this.initializationError = error;
41
+ this.available = false;
42
+ if (error.message.includes("Cannot find module")) {
43
+ console.error("⚠️ OpenAI SDK not installed");
44
+ console.error(" Install with: npm install openai");
45
+ }
46
+ else {
47
+ console.error("⚠️ OpenAI initialization failed:", error.message);
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Check if embeddings are available
53
+ */
54
+ isAvailable() {
55
+ return this.available;
56
+ }
57
+ /**
58
+ * Generate embedding for a single text
59
+ */
60
+ async embed(text) {
61
+ if (!this.available || !this.client) {
62
+ throw new Error(`OpenAI embeddings not available: ${this.initializationError?.message || "Not initialized"}`);
63
+ }
64
+ try {
65
+ const response = await this.client.embeddings.create({
66
+ model: this.model,
67
+ input: text,
68
+ });
69
+ return new Float32Array(response.data[0].embedding);
70
+ }
71
+ catch (error) {
72
+ console.error("Error generating embedding with OpenAI:", error);
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * Generate embeddings for multiple texts (batched)
78
+ * OpenAI supports batch requests natively
79
+ */
80
+ async embedBatch(texts, batchSize = 100) {
81
+ if (!this.available || !this.client) {
82
+ throw new Error("OpenAI embeddings not initialized");
83
+ }
84
+ const embeddings = [];
85
+ // OpenAI allows up to 2048 inputs per request, but we use smaller batches for reliability
86
+ for (let i = 0; i < texts.length; i += batchSize) {
87
+ const batch = texts.slice(i, i + batchSize);
88
+ console.error(`Generating embeddings for batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(texts.length / batchSize)} (OpenAI)`);
89
+ try {
90
+ const response = await this.client.embeddings.create({
91
+ model: this.model,
92
+ input: batch,
93
+ });
94
+ // Convert all embeddings in the batch
95
+ const batchEmbeddings = response.data.map((item) => new Float32Array(item.embedding));
96
+ embeddings.push(...batchEmbeddings);
97
+ }
98
+ catch (error) {
99
+ console.error("Error in batch embedding:", error);
100
+ throw error;
101
+ }
102
+ }
103
+ return embeddings;
104
+ }
105
+ /**
106
+ * Get model information
107
+ */
108
+ getModelInfo() {
109
+ return {
110
+ provider: "openai",
111
+ model: this.model,
112
+ dimensions: this.dimensions,
113
+ available: this.available,
114
+ };
115
+ }
116
+ /**
117
+ * Get default dimensions for OpenAI models using ModelRegistry
118
+ */
119
+ getDefaultDimensions(model) {
120
+ // Try to get dimensions from ModelRegistry
121
+ const dimensions = getModelDimensions(model);
122
+ if (dimensions) {
123
+ return dimensions;
124
+ }
125
+ // Default to 1536 if unknown (most common for OpenAI models)
126
+ return 1536;
127
+ }
128
+ }
129
+ //# sourceMappingURL=OpenAIEmbeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIEmbeddings.js","sourceRoot":"","sources":["../../../src/embeddings/providers/OpenAIEmbeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Transformers.js Embeddings Provider
3
+ * Uses @xenova/transformers for local, offline embeddings
4
+ */
5
+ import type { EmbeddingProvider, ModelInfo } from "../EmbeddingProvider.js";
6
+ export declare class TransformersEmbeddings implements EmbeddingProvider {
7
+ private pipeline;
8
+ private model;
9
+ private dimensions;
10
+ private available;
11
+ private initializationError;
12
+ constructor(model?: string, dimensions?: number);
13
+ /**
14
+ * Initialize the embedding pipeline
15
+ */
16
+ initialize(): Promise<void>;
17
+ /**
18
+ * Check if embeddings are available
19
+ */
20
+ isAvailable(): boolean;
21
+ /**
22
+ * Generate embedding for text
23
+ */
24
+ embed(text: string): Promise<Float32Array>;
25
+ /**
26
+ * Generate embeddings for multiple texts (batched)
27
+ */
28
+ embedBatch(texts: string[], batchSize?: number): Promise<Float32Array[]>;
29
+ /**
30
+ * Get model information
31
+ */
32
+ getModelInfo(): ModelInfo;
33
+ /**
34
+ * Get default dimensions for common transformer models using ModelRegistry
35
+ */
36
+ private getDefaultDimensions;
37
+ }
38
+ //# sourceMappingURL=TransformersEmbeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformersEmbeddings.d.ts","sourceRoot":"","sources":["../../../src/embeddings/providers/TransformersEmbeddings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAM5E,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAsB;gBAErC,KAAK,GAAE,MAAkC,EAAE,UAAU,CAAC,EAAE,MAAM;IAK1E;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhD;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAyBlF;;OAEG;IACH,YAAY,IAAI,SAAS;IASzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAU7B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Transformers.js Embeddings Provider
3
+ * Uses @xenova/transformers for local, offline embeddings
4
+ */
5
+ import { getModelDimensions } from "../ModelRegistry.js";
6
+ export class TransformersEmbeddings {
7
+ pipeline = null;
8
+ model;
9
+ dimensions;
10
+ available = false;
11
+ initializationError = null;
12
+ constructor(model = "Xenova/all-MiniLM-L6-v2", dimensions) {
13
+ this.model = model;
14
+ this.dimensions = dimensions || this.getDefaultDimensions(model);
15
+ }
16
+ /**
17
+ * Initialize the embedding pipeline
18
+ */
19
+ async initialize() {
20
+ if (this.available) {
21
+ return;
22
+ }
23
+ try {
24
+ // Try to import @xenova/transformers
25
+ const { pipeline } = await import("@xenova/transformers");
26
+ console.error(`Loading embedding model: ${this.model}...`);
27
+ this.pipeline = (await pipeline("feature-extraction", this.model));
28
+ this.available = true;
29
+ console.error(`✓ Transformers.js embeddings ready (${this.model})`);
30
+ }
31
+ catch (error) {
32
+ this.initializationError = error;
33
+ this.available = false;
34
+ if (error.message.includes("Cannot find module")) {
35
+ console.error("⚠️ @xenova/transformers not installed");
36
+ console.error(" Install with: npm install @xenova/transformers");
37
+ }
38
+ else {
39
+ console.error("⚠️ Could not load embedding model:", error.message);
40
+ }
41
+ }
42
+ }
43
+ /**
44
+ * Check if embeddings are available
45
+ */
46
+ isAvailable() {
47
+ return this.available && this.pipeline !== null;
48
+ }
49
+ /**
50
+ * Generate embedding for text
51
+ */
52
+ async embed(text) {
53
+ if (!this.isAvailable()) {
54
+ throw new Error(`Transformers embeddings not available: ${this.initializationError?.message || "Not initialized"}`);
55
+ }
56
+ if (!this.pipeline) {
57
+ throw new Error("Pipeline not initialized");
58
+ }
59
+ try {
60
+ // Generate embedding
61
+ const output = await this.pipeline(text, {
62
+ pooling: "mean",
63
+ normalize: true,
64
+ });
65
+ // Extract the embedding array
66
+ const embedding = output.data;
67
+ return new Float32Array(embedding);
68
+ }
69
+ catch (error) {
70
+ console.error("Error generating embedding:", error);
71
+ throw error;
72
+ }
73
+ }
74
+ /**
75
+ * Generate embeddings for multiple texts (batched)
76
+ */
77
+ async embedBatch(texts, batchSize = 32) {
78
+ if (!this.isAvailable()) {
79
+ throw new Error("Transformers embeddings not initialized");
80
+ }
81
+ const embeddings = [];
82
+ // Process in batches
83
+ for (let i = 0; i < texts.length; i += batchSize) {
84
+ const batch = texts.slice(i, i + batchSize);
85
+ console.error(`Generating embeddings for batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(texts.length / batchSize)} (Transformers.js)`);
86
+ const batchEmbeddings = await Promise.all(batch.map((text) => this.embed(text)));
87
+ embeddings.push(...batchEmbeddings);
88
+ }
89
+ return embeddings;
90
+ }
91
+ /**
92
+ * Get model information
93
+ */
94
+ getModelInfo() {
95
+ return {
96
+ provider: "transformers",
97
+ model: this.model,
98
+ dimensions: this.dimensions,
99
+ available: this.available,
100
+ };
101
+ }
102
+ /**
103
+ * Get default dimensions for common transformer models using ModelRegistry
104
+ */
105
+ getDefaultDimensions(model) {
106
+ // Try to get dimensions from ModelRegistry
107
+ const dimensions = getModelDimensions(model);
108
+ if (dimensions) {
109
+ return dimensions;
110
+ }
111
+ // Default to 384 if unknown (most common for small models)
112
+ return 384;
113
+ }
114
+ }
115
+ //# sourceMappingURL=TransformersEmbeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformersEmbeddings.js","sourceRoot":"","sources":["../../../src/embeddings/providers/TransformersEmbeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Session Handoff Store
3
+ *
4
+ * Manages session handoff documents for transferring context between
5
+ * conversations when context fills up or when explicitly requested.
6
+ */
7
+ import type { Database } from "better-sqlite3";
8
+ import type { SessionHandoff } from "../memory/types.js";
9
+ /**
10
+ * Options for creating a handoff
11
+ */
12
+ export interface PrepareHandoffOptions {
13
+ sessionId?: string;
14
+ projectPath: string;
15
+ include?: Array<"decisions" | "files" | "tasks" | "memory">;
16
+ }
17
+ /**
18
+ * Options for resuming from a handoff
19
+ */
20
+ export interface ResumeHandoffOptions {
21
+ handoffId?: string;
22
+ projectPath: string;
23
+ newSessionId?: string;
24
+ injectContext?: boolean;
25
+ }
26
+ export declare class SessionHandoffStore {
27
+ private db;
28
+ constructor(db: Database);
29
+ /**
30
+ * Prepare a handoff document from the current session
31
+ */
32
+ prepareHandoff(options: PrepareHandoffOptions): SessionHandoff;
33
+ /**
34
+ * Resume from a handoff in a new session
35
+ */
36
+ resumeFromHandoff(options: ResumeHandoffOptions): SessionHandoff | null;
37
+ /**
38
+ * List available handoffs for a project
39
+ */
40
+ listHandoffs(projectPath: string, options?: {
41
+ limit?: number;
42
+ includeResumed?: boolean;
43
+ }): Array<{
44
+ id: string;
45
+ fromSessionId: string;
46
+ createdAt: number;
47
+ resumedBy?: string;
48
+ resumedAt?: number;
49
+ summary: string;
50
+ }>;
51
+ /**
52
+ * Get a specific handoff by ID
53
+ */
54
+ getHandoff(handoffId: string): SessionHandoff | null;
55
+ /**
56
+ * Delete a handoff by ID
57
+ */
58
+ deleteHandoff(handoffId: string): boolean;
59
+ /**
60
+ * Get recent decisions from the database
61
+ */
62
+ private getRecentDecisions;
63
+ /**
64
+ * Get recent file activity from tool uses
65
+ */
66
+ private getActiveFiles;
67
+ /**
68
+ * Get pending tasks from working memory
69
+ */
70
+ private getPendingTasks;
71
+ /**
72
+ * Infer task status from tags
73
+ */
74
+ private inferTaskStatus;
75
+ /**
76
+ * Generate a context summary from handoff data
77
+ */
78
+ private generateContextSummary;
79
+ }
80
+ //# sourceMappingURL=SessionHandoffStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionHandoffStore.d.ts","sourceRoot":"","sources":["../../src/handoff/SessionHandoffStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAaD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc;IA6D9D;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,GAAG,IAAI;IAkEvE;;OAEG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GACrD,KAAK,CAAC;QACP,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAyBF;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAsBpD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IA8DtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA+B/B"}