claude-memory-layer 1.0.31 → 1.0.32
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 +9 -2
- package/dist/cli/index.js +1 -1
- package/package.json +11 -2
- package/scripts/postinstall-embedding-backend.cjs +16 -12
- package/AGENTS.md +0 -71
- package/CLAUDE.md +0 -30
- package/HANDOFF.md +0 -92
- package/Memo.txt +0 -558
- package/benchmarks/replay/anonymized-real-sessions.json +0 -48
- package/config/kpi-thresholds.json +0 -7
- package/context.md +0 -636
- package/docs/ARCHITECTURE_COMPARISON_AND_RECOMMENDATIONS.md +0 -627
- package/docs/HERMES_MEMORY_INGESTION_ANALYSIS.md +0 -440
- package/docs/MCP_MEMORY_SERVICE_COMPARATIVE_REVIEW.md +0 -271
- package/docs/MEMORY_USEFULNESS_AUDIT.md +0 -371
- package/docs/MEMORY_USEFULNESS_AUDIT_RAW.json +0 -80
- package/docs/MEMSEARCH_PROJECT_STRUCTURE_ANALYSIS.md +0 -333
- package/docs/MEMU_ADOPTION.md +0 -40
- package/docs/OPERATIONS.md +0 -18
- package/docs/PRODUCT_VALIDATION_MATRIX.md +0 -82
- package/docs/PROJECT_STRUCTURE_ANALYSIS.md +0 -421
- package/docs/REFACTORING_MILESTONES_AND_ISSUES.md +0 -501
- package/docs/REFACTORING_PLAN_THIN_CORE.md +0 -414
- package/docs/REFERENCE_PROJECT_ANALYSES.md +0 -25
- package/docs/SUPERLOCALMEMORY_PROJECT_STRUCTURE_ANALYSIS.md +0 -452
- package/docs/TARGET_ARCHITECTURE_AND_FOLDER_STRUCTURE.md +0 -446
- package/docs/architecture/comparison-index.md +0 -47
- package/docs/reports/codex-real-data-validation-20260505T040447Z.md +0 -46
- package/plan.md +0 -1642
- package/scripts/build.ts +0 -159
- package/scripts/bump-patch-version.sh +0 -18
- package/scripts/delete-unknown-projects.js +0 -154
- package/scripts/fix-sync-gap.js +0 -32
- package/scripts/generate-session-qrels.ts +0 -126
- package/scripts/heartbeat-memory-orchestrator.sh +0 -28
- package/scripts/replay-retrieval-benchmark.ts +0 -69
- package/scripts/report-sync-gap.js +0 -26
- package/scripts/review-queue-auto-resolve.js +0 -21
- package/scripts/sync-gap-auto-heal.sh +0 -17
- package/spec.md +0 -624
- package/specs/20260207-dashboard-upgrade/context.md +0 -38
- package/specs/20260207-dashboard-upgrade/spec.md +0 -96
- package/specs/citations-system/context.md +0 -243
- package/specs/citations-system/plan.md +0 -495
- package/specs/citations-system/spec.md +0 -371
- package/specs/endless-mode/context.md +0 -305
- package/specs/endless-mode/plan.md +0 -620
- package/specs/endless-mode/spec.md +0 -455
- package/specs/entity-edge-model/context.md +0 -401
- package/specs/entity-edge-model/plan.md +0 -459
- package/specs/entity-edge-model/spec.md +0 -391
- package/specs/evidence-aligner-v2/context.md +0 -401
- package/specs/evidence-aligner-v2/plan.md +0 -303
- package/specs/evidence-aligner-v2/spec.md +0 -312
- package/specs/mcp-desktop-integration/context.md +0 -278
- package/specs/mcp-desktop-integration/plan.md +0 -550
- package/specs/mcp-desktop-integration/spec.md +0 -494
- package/specs/memory-utilization-improvements/context.md +0 -145
- package/specs/memory-utilization-improvements/plan.md +0 -361
- package/specs/memory-utilization-improvements/spec.md +0 -361
- package/specs/post-tool-use-hook/context.md +0 -319
- package/specs/post-tool-use-hook/plan.md +0 -469
- package/specs/post-tool-use-hook/spec.md +0 -364
- package/specs/private-tags/context.md +0 -288
- package/specs/private-tags/plan.md +0 -412
- package/specs/private-tags/spec.md +0 -345
- package/specs/progressive-disclosure/context.md +0 -346
- package/specs/progressive-disclosure/plan.md +0 -663
- package/specs/progressive-disclosure/spec.md +0 -415
- package/specs/selective-tool-observation/context.md +0 -100
- package/specs/selective-tool-observation/plan.md +0 -158
- package/specs/selective-tool-observation/spec.md +0 -127
- package/specs/task-entity-system/context.md +0 -297
- package/specs/task-entity-system/plan.md +0 -301
- package/specs/task-entity-system/spec.md +0 -314
- package/specs/thin-core-refactor/context.md +0 -275
- package/specs/thin-core-refactor/plan.md +0 -536
- package/specs/thin-core-refactor/spec.md +0 -465
- package/specs/vector-outbox-v2/context.md +0 -470
- package/specs/vector-outbox-v2/plan.md +0 -562
- package/specs/vector-outbox-v2/spec.md +0 -466
- package/specs/web-viewer-ui/context.md +0 -384
- package/specs/web-viewer-ui/plan.md +0 -797
- package/specs/web-viewer-ui/spec.md +0 -516
- package/src/adapters/claude/capture/index.ts +0 -3
- package/src/adapters/claude/context/index.ts +0 -3
- package/src/adapters/claude/hooks/index.ts +0 -21
- package/src/adapters/claude/hooks/post-tool-use.ts +0 -239
- package/src/adapters/claude/hooks/prompt-injection-policy.ts +0 -104
- package/src/adapters/claude/hooks/semantic-daemon-client.ts +0 -209
- package/src/adapters/claude/hooks/semantic-daemon.ts +0 -283
- package/src/adapters/claude/hooks/session-end.ts +0 -59
- package/src/adapters/claude/hooks/session-start.ts +0 -73
- package/src/adapters/claude/hooks/stop.ts +0 -128
- package/src/adapters/claude/hooks/user-prompt-submit.ts +0 -361
- package/src/adapters/claude/index.ts +0 -4
- package/src/adapters/claude/transcript/index.ts +0 -4
- package/src/adapters/claude/transcript/transcript-reader.ts +0 -57
- package/src/adapters/claude/transcript/turn-reconstructor.ts +0 -65
- package/src/apps/cli/claude-settings-hooks.ts +0 -138
- package/src/apps/cli/codex-import-runner.ts +0 -125
- package/src/apps/cli/codex-validation-output.ts +0 -95
- package/src/apps/cli/hermes-import-runner.ts +0 -130
- package/src/apps/cli/hermes-validation-output.ts +0 -91
- package/src/apps/cli/index.ts +0 -1735
- package/src/apps/cli/mcp-install.ts +0 -106
- package/src/apps/cli/retrieval-disclosure-output.ts +0 -196
- package/src/apps/dashboard/assets/js/bootstrap.js +0 -244
- package/src/apps/dashboard/assets/js/chat.js +0 -373
- package/src/apps/dashboard/assets/js/disclosure.js +0 -232
- package/src/apps/dashboard/assets/js/modals.js +0 -298
- package/src/apps/dashboard/assets/js/overview.js +0 -655
- package/src/apps/dashboard/assets/js/state.js +0 -72
- package/src/apps/dashboard/assets/js/views.js +0 -468
- package/src/apps/dashboard/index.html +0 -543
- package/src/apps/dashboard/index.ts +0 -3
- package/src/apps/dashboard/style.css +0 -1750
- package/src/apps/index.ts +0 -5
- package/src/apps/server/api/chat.ts +0 -244
- package/src/apps/server/api/citations.ts +0 -105
- package/src/apps/server/api/events.ts +0 -137
- package/src/apps/server/api/health.ts +0 -53
- package/src/apps/server/api/index.ts +0 -26
- package/src/apps/server/api/projects.ts +0 -74
- package/src/apps/server/api/search.ts +0 -184
- package/src/apps/server/api/sessions.ts +0 -115
- package/src/apps/server/api/stats.ts +0 -723
- package/src/apps/server/api/turns.ts +0 -143
- package/src/apps/server/api/utils.ts +0 -65
- package/src/apps/server/index.ts +0 -111
- package/src/cli/index.ts +0 -3
- package/src/cli/retrieval-disclosure-output.ts +0 -2
- package/src/compat/index.ts +0 -5
- package/src/core/canonical-key.ts +0 -186
- package/src/core/citation-generator.ts +0 -63
- package/src/core/consolidated-store.ts +0 -356
- package/src/core/consolidation-worker.ts +0 -493
- package/src/core/context-formatter.ts +0 -276
- package/src/core/continuity-manager.ts +0 -341
- package/src/core/db-wrapper.ts +0 -64
- package/src/core/derive/fact-deriver.ts +0 -170
- package/src/core/derive/index.ts +0 -2
- package/src/core/derive/summary-deriver.ts +0 -76
- package/src/core/edge-repo.ts +0 -333
- package/src/core/embedder.ts +0 -4
- package/src/core/engine/embedding-maintenance-service.ts +0 -187
- package/src/core/engine/endless-memory-services.ts +0 -4
- package/src/core/engine/index.ts +0 -19
- package/src/core/engine/memory-engine-services.ts +0 -170
- package/src/core/engine/memory-ingest-service.ts +0 -317
- package/src/core/engine/memory-query-service.ts +0 -173
- package/src/core/engine/memory-runtime-service.ts +0 -162
- package/src/core/engine/memory-service-composition.ts +0 -231
- package/src/core/engine/retrieval-analytics-service.ts +0 -181
- package/src/core/engine/retrieval-disclosure-service.ts +0 -420
- package/src/core/engine/retrieval-orchestrator.ts +0 -377
- package/src/core/engine/retrieval-services.ts +0 -176
- package/src/core/engine/shared-memory-services.ts +0 -4
- package/src/core/entity-repo.ts +0 -349
- package/src/core/event-store.ts +0 -779
- package/src/core/evidence-aligner.ts +0 -635
- package/src/core/external-market-context.ts +0 -582
- package/src/core/graduation-worker.ts +0 -171
- package/src/core/graduation.ts +0 -377
- package/src/core/index.ts +0 -64
- package/src/core/ingest-interceptor.ts +0 -80
- package/src/core/markdown-mirror.ts +0 -70
- package/src/core/matcher.ts +0 -208
- package/src/core/md-mirror.ts +0 -92
- package/src/core/metadata-extractor.ts +0 -203
- package/src/core/model/memory-fact.ts +0 -30
- package/src/core/model/memory-rule.ts +0 -14
- package/src/core/model/memory-summary.ts +0 -21
- package/src/core/model/raw-event.ts +0 -28
- package/src/core/model/retrieval-result.ts +0 -35
- package/src/core/mongo-sync-config.ts +0 -165
- package/src/core/mongo-sync-worker.ts +0 -381
- package/src/core/privacy/filter.ts +0 -190
- package/src/core/privacy/index.ts +0 -20
- package/src/core/privacy/tag-parser.ts +0 -145
- package/src/core/product-validation-matrix.ts +0 -314
- package/src/core/progressive-retriever.ts +0 -414
- package/src/core/registry/project-path.ts +0 -54
- package/src/core/registry/session-registry.ts +0 -69
- package/src/core/replay-evaluator.ts +0 -625
- package/src/core/retrieval-benchmark.ts +0 -117
- package/src/core/retrieval-quality.ts +0 -109
- package/src/core/retriever.ts +0 -800
- package/src/core/session-qrels.ts +0 -360
- package/src/core/shared-event-store.ts +0 -114
- package/src/core/shared-promoter.ts +0 -249
- package/src/core/shared-store.ts +0 -289
- package/src/core/shared-vector-store.ts +0 -203
- package/src/core/sqlite-event-store.ts +0 -1846
- package/src/core/sqlite-wrapper.ts +0 -116
- package/src/core/sync-worker.ts +0 -228
- package/src/core/tag-taxonomy.ts +0 -51
- package/src/core/task/blocker-resolver.ts +0 -333
- package/src/core/task/index.ts +0 -9
- package/src/core/task/task-matcher.ts +0 -240
- package/src/core/task/task-projector.ts +0 -358
- package/src/core/task/task-resolver.ts +0 -421
- package/src/core/turn-state.ts +0 -207
- package/src/core/types.ts +0 -952
- package/src/core/vector-outbox.ts +0 -299
- package/src/core/vector-store.ts +0 -231
- package/src/core/vector-worker.ts +0 -521
- package/src/core/working-set-store.ts +0 -257
- package/src/extensions/endless-memory/endless-memory-services.ts +0 -350
- package/src/extensions/endless-memory/index.ts +0 -1
- package/src/extensions/index.ts +0 -5
- package/src/extensions/mcp/handlers.ts +0 -960
- package/src/extensions/mcp/index.ts +0 -48
- package/src/extensions/mcp/tools.ts +0 -252
- package/src/extensions/shared-memory/index.ts +0 -1
- package/src/extensions/shared-memory/shared-memory-services.ts +0 -211
- package/src/extensions/vector/embedder.ts +0 -234
- package/src/extensions/vector/index.ts +0 -1
- package/src/hooks/post-tool-use.ts +0 -9
- package/src/hooks/semantic-daemon-client.ts +0 -1
- package/src/hooks/semantic-daemon.ts +0 -11
- package/src/hooks/session-end.ts +0 -9
- package/src/hooks/session-start.ts +0 -9
- package/src/hooks/stop.ts +0 -9
- package/src/hooks/user-prompt-submit.ts +0 -9
- package/src/index.ts +0 -13
- package/src/mcp/handlers.ts +0 -2
- package/src/mcp/index.ts +0 -4
- package/src/mcp/tools.ts +0 -2
- package/src/server/api/chat.ts +0 -2
- package/src/server/api/citations.ts +0 -2
- package/src/server/api/events.ts +0 -2
- package/src/server/api/health.ts +0 -2
- package/src/server/api/index.ts +0 -2
- package/src/server/api/projects.ts +0 -2
- package/src/server/api/search.ts +0 -2
- package/src/server/api/sessions.ts +0 -2
- package/src/server/api/stats.ts +0 -2
- package/src/server/api/turns.ts +0 -2
- package/src/server/api/utils.ts +0 -2
- package/src/server/index.ts +0 -2
- package/src/services/bootstrap-organizer.ts +0 -463
- package/src/services/codex-session-history-importer.ts +0 -966
- package/src/services/hermes-session-history-importer.ts +0 -733
- package/src/services/memory-service-config.ts +0 -36
- package/src/services/memory-service-registry.ts +0 -150
- package/src/services/memory-service.ts +0 -688
- package/src/services/session-history-importer.ts +0 -629
- package/tests/README.md +0 -23
- package/tests/adapters/claude/claude-semantic-daemon-adapter.test.ts +0 -54
- package/tests/adapters/claude/claude-transcript-reconstructor.test.ts +0 -98
- package/tests/adapters/claude-hook-prompt-injection-policy.test.ts +0 -99
- package/tests/apps/app-layer-boundary.test.ts +0 -48
- package/tests/apps/claude-settings-hooks.test.ts +0 -107
- package/tests/apps/cli-disclosure-output.test.ts +0 -212
- package/tests/apps/codex-import-runner.test.ts +0 -99
- package/tests/apps/codex-validation-output.test.ts +0 -100
- package/tests/apps/hermes-import-runner.test.ts +0 -99
- package/tests/apps/mcp-install-command.test.ts +0 -59
- package/tests/apps/package-build-entrypoints.test.ts +0 -30
- package/tests/apps/postinstall-embedding-backend.test.ts +0 -185
- package/tests/apps/search-api-disclosure.test.ts +0 -162
- package/tests/apps/stats-api-lightweight.test.ts +0 -67
- package/tests/apps/ui-disclosure-output.test.ts +0 -140
- package/tests/core/bootstrap-organizer.test.ts +0 -111
- package/tests/core/canonical-key.test.ts +0 -101
- package/tests/core/codex-session-history-importer-validation.test.ts +0 -185
- package/tests/core/consolidation-worker.test.ts +0 -75
- package/tests/core/embedding-maintenance-service.test.ts +0 -282
- package/tests/core/evidence-aligner.test.ts +0 -152
- package/tests/core/external-market-context.test.ts +0 -209
- package/tests/core/fact-deriver.test.ts +0 -79
- package/tests/core/hermes-session-history-importer-validation.test.ts +0 -609
- package/tests/core/ingest-interceptor.test.ts +0 -38
- package/tests/core/markdown-mirror.test.ts +0 -85
- package/tests/core/matcher.test.ts +0 -112
- package/tests/core/md-mirror.test.ts +0 -50
- package/tests/core/memory-engine-services.test.ts +0 -240
- package/tests/core/memory-ingest-service.test.ts +0 -296
- package/tests/core/memory-query-service.test.ts +0 -129
- package/tests/core/memory-runtime-service.test.ts +0 -201
- package/tests/core/memory-service-composition.test.ts +0 -192
- package/tests/core/memory-service-config.test.ts +0 -41
- package/tests/core/memory-service-facade.test.ts +0 -30
- package/tests/core/memory-service-registry.test.ts +0 -206
- package/tests/core/product-validation-matrix.test.ts +0 -61
- package/tests/core/project-registry.test.ts +0 -78
- package/tests/core/replay-evaluator.test.ts +0 -181
- package/tests/core/retrieval-analytics-service.test.ts +0 -210
- package/tests/core/retrieval-benchmark.test.ts +0 -93
- package/tests/core/retrieval-disclosure-service.test.ts +0 -264
- package/tests/core/retrieval-orchestrator.test.ts +0 -403
- package/tests/core/retrieval-quality.test.ts +0 -31
- package/tests/core/retrieval-services.test.ts +0 -185
- package/tests/core/retriever-fallback-chain.test.ts +0 -223
- package/tests/core/retriever-strategy-scope.test.ts +0 -164
- package/tests/core/retriever.memu-adoption.test.ts +0 -122
- package/tests/core/session-history-importer-filter.test.ts +0 -78
- package/tests/core/session-qrels.test.ts +0 -250
- package/tests/core/sqlite-event-store-replication.test.ts +0 -127
- package/tests/core/summary-deriver.test.ts +0 -66
- package/tests/extensions/embedder-warning-suppression.test.ts +0 -84
- package/tests/extensions/endless-memory-extension-boundary.test.ts +0 -17
- package/tests/extensions/endless-memory-services.test.ts +0 -325
- package/tests/extensions/mcp-context-tools.test.ts +0 -905
- package/tests/extensions/mcp-extension-boundary.test.ts +0 -21
- package/tests/extensions/mcp-package-build.test.ts +0 -22
- package/tests/extensions/mcp-project-aware-tools.test.ts +0 -102
- package/tests/extensions/shared-memory-extension-boundary.test.ts +0 -24
- package/tests/extensions/shared-memory-services.test.ts +0 -309
- package/tests/extensions/vector-extension-boundary.test.ts +0 -21
- package/tsconfig.json +0 -24
- package/vitest.config.ts +0 -15
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local Embedding Generator using @huggingface/transformers
|
|
3
|
-
* AXIOMMIND Principle 7: Standard JSON format for vectors
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export interface EmbeddingResult {
|
|
7
|
-
vector: number[];
|
|
8
|
-
model: string;
|
|
9
|
-
dimensions: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type FeatureExtractionPipelineFactory = (
|
|
13
|
-
task: 'feature-extraction',
|
|
14
|
-
model: string
|
|
15
|
-
) => Promise<NonNullable<Embedder['pipeline']>>;
|
|
16
|
-
|
|
17
|
-
export const DEFAULT_EMBEDDING_MODEL = 'Xenova/multilingual-e5-small';
|
|
18
|
-
export const DEFAULT_EMBEDDING_FALLBACK_MODEL = 'intfloat/multilingual-e5-small';
|
|
19
|
-
|
|
20
|
-
export class Embedder {
|
|
21
|
-
private pipeline: ((input: string, options?: Record<string, unknown>) => Promise<{ data: Float32Array }>) | null = null;
|
|
22
|
-
private readonly modelName: string;
|
|
23
|
-
private activeModelName: string;
|
|
24
|
-
private initialized = false;
|
|
25
|
-
|
|
26
|
-
constructor(modelName: string = DEFAULT_EMBEDDING_MODEL) {
|
|
27
|
-
this.modelName = modelName;
|
|
28
|
-
this.activeModelName = modelName;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Initialize the embedding pipeline
|
|
33
|
-
*/
|
|
34
|
-
async initialize(): Promise<void> {
|
|
35
|
-
if (this.initialized) return;
|
|
36
|
-
|
|
37
|
-
const pipeline = await withSuppressedKnownTransformersWarnings(async () => {
|
|
38
|
-
try {
|
|
39
|
-
return await loadTransformersPipeline();
|
|
40
|
-
} catch (error) {
|
|
41
|
-
if (isMissingTransformersDependencyError(error)) {
|
|
42
|
-
throw createEmbeddingBackendUnavailableError(error);
|
|
43
|
-
}
|
|
44
|
-
throw error;
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
this.pipeline = await withSuppressedKnownTransformersWarnings(() => pipeline('feature-extraction', this.modelName));
|
|
50
|
-
this.activeModelName = this.modelName;
|
|
51
|
-
this.initialized = true;
|
|
52
|
-
return;
|
|
53
|
-
} catch (primaryError) {
|
|
54
|
-
const fallbackModel = process.env.CLAUDE_MEMORY_EMBEDDING_FALLBACK_MODEL || DEFAULT_EMBEDDING_FALLBACK_MODEL;
|
|
55
|
-
if (fallbackModel === this.modelName) {
|
|
56
|
-
throw primaryError;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
console.warn(`[Embedder] Primary model failed (${this.modelName}). Falling back to ${fallbackModel}`);
|
|
60
|
-
this.pipeline = await withSuppressedKnownTransformersWarnings(() => pipeline('feature-extraction', fallbackModel));
|
|
61
|
-
this.activeModelName = fallbackModel;
|
|
62
|
-
this.initialized = true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// ~4 chars per token; 512 tokens * 4 = 2048, use 2000 to be safe
|
|
67
|
-
private static readonly MAX_CHARS = 2000;
|
|
68
|
-
|
|
69
|
-
private truncate(text: string): string {
|
|
70
|
-
return text.length > Embedder.MAX_CHARS ? text.slice(0, Embedder.MAX_CHARS) : text;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Generate embedding for a single text
|
|
75
|
-
*/
|
|
76
|
-
async embed(text: string): Promise<EmbeddingResult> {
|
|
77
|
-
await this.initialize();
|
|
78
|
-
|
|
79
|
-
if (!this.pipeline) {
|
|
80
|
-
throw new Error('Embedding pipeline not initialized');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const output = await this.pipeline(this.truncate(text), {
|
|
84
|
-
pooling: 'mean',
|
|
85
|
-
normalize: true,
|
|
86
|
-
truncation: true,
|
|
87
|
-
max_length: 512
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
const vector = Array.from(output.data);
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
vector,
|
|
94
|
-
model: this.activeModelName,
|
|
95
|
-
dimensions: vector.length
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Generate embeddings for multiple texts in batch
|
|
101
|
-
*/
|
|
102
|
-
async embedBatch(texts: string[]): Promise<EmbeddingResult[]> {
|
|
103
|
-
await this.initialize();
|
|
104
|
-
|
|
105
|
-
if (!this.pipeline) {
|
|
106
|
-
throw new Error('Embedding pipeline not initialized');
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const results: EmbeddingResult[] = [];
|
|
110
|
-
|
|
111
|
-
// Process in batches of 32 for memory efficiency
|
|
112
|
-
const batchSize = 32;
|
|
113
|
-
for (let i = 0; i < texts.length; i += batchSize) {
|
|
114
|
-
const batch = texts.slice(i, i + batchSize);
|
|
115
|
-
|
|
116
|
-
for (const text of batch) {
|
|
117
|
-
const output = await this.pipeline(this.truncate(text), {
|
|
118
|
-
pooling: 'mean',
|
|
119
|
-
normalize: true,
|
|
120
|
-
truncation: true,
|
|
121
|
-
max_length: 512
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
const vector = Array.from(output.data);
|
|
125
|
-
|
|
126
|
-
results.push({
|
|
127
|
-
vector,
|
|
128
|
-
model: this.activeModelName,
|
|
129
|
-
dimensions: vector.length
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return results;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Get embedding dimensions for the current model
|
|
139
|
-
*/
|
|
140
|
-
async getDimensions(): Promise<number> {
|
|
141
|
-
const result = await this.embed('test');
|
|
142
|
-
return result.dimensions;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Check if embedder is ready
|
|
147
|
-
*/
|
|
148
|
-
isReady(): boolean {
|
|
149
|
-
return this.initialized && this.pipeline !== null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Get model name
|
|
154
|
-
*/
|
|
155
|
-
getModelName(): string {
|
|
156
|
-
return this.activeModelName;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Singleton instance for reuse
|
|
161
|
-
let defaultEmbedder: Embedder | null = null;
|
|
162
|
-
|
|
163
|
-
export function getDefaultEmbedder(): Embedder {
|
|
164
|
-
const envModel = process.env.CLAUDE_MEMORY_EMBEDDING_MODEL;
|
|
165
|
-
if (!defaultEmbedder) {
|
|
166
|
-
defaultEmbedder = new Embedder(envModel || undefined);
|
|
167
|
-
}
|
|
168
|
-
return defaultEmbedder;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
let transformersWarningSuppressionDepth = 0;
|
|
172
|
-
let originalConsoleWarn: typeof console.warn | null = null;
|
|
173
|
-
|
|
174
|
-
export async function withSuppressedKnownTransformersWarnings<T>(fn: () => Promise<T>): Promise<T> {
|
|
175
|
-
if (transformersWarningSuppressionDepth === 0) {
|
|
176
|
-
originalConsoleWarn = console.warn;
|
|
177
|
-
console.warn = (...args: unknown[]) => {
|
|
178
|
-
const message = args.map(String).join(' ');
|
|
179
|
-
if (isKnownBenignTransformersWarning(message)) return;
|
|
180
|
-
(originalConsoleWarn ?? console.warn)(...args);
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
transformersWarningSuppressionDepth += 1;
|
|
184
|
-
|
|
185
|
-
try {
|
|
186
|
-
return await fn();
|
|
187
|
-
} finally {
|
|
188
|
-
transformersWarningSuppressionDepth -= 1;
|
|
189
|
-
if (transformersWarningSuppressionDepth === 0 && originalConsoleWarn) {
|
|
190
|
-
console.warn = originalConsoleWarn;
|
|
191
|
-
originalConsoleWarn = null;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export function isKnownBenignTransformersWarning(message: string): boolean {
|
|
197
|
-
return message.includes('Unknown model class "eurobert"') ||
|
|
198
|
-
message.includes('dtype not specified for "model"');
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export function isMissingTransformersDependencyError(error: unknown): boolean {
|
|
202
|
-
const maybeError = error as { code?: unknown; message?: unknown } | null;
|
|
203
|
-
const message = typeof maybeError?.message === 'string' ? maybeError.message : '';
|
|
204
|
-
return maybeError?.code === 'ERR_MODULE_NOT_FOUND' &&
|
|
205
|
-
message.includes("@huggingface/transformers");
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
export function createEmbeddingBackendUnavailableError(cause: unknown): Error & { cause?: unknown } {
|
|
209
|
-
const error = new Error(
|
|
210
|
-
[
|
|
211
|
-
'Required embedding backend is not installed.',
|
|
212
|
-
'',
|
|
213
|
-
'Claude Memory Layer requires @huggingface/transformers for local semantic/vector embeddings.',
|
|
214
|
-
'The backend runs on CPU-only ONNX Runtime; CUDA is not required.',
|
|
215
|
-
'Reinstall globally with:',
|
|
216
|
-
' ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install -g claude-memory-layer@latest',
|
|
217
|
-
'',
|
|
218
|
-
'If you are inside a local checkout or package directory, repair only the backend with:',
|
|
219
|
-
' ONNXRUNTIME_NODE_INSTALL_CUDA=skip npm install --no-save --no-package-lock --omit=dev @huggingface/transformers@3.8.1'
|
|
220
|
-
].join('\n')
|
|
221
|
-
) as Error & { cause?: unknown };
|
|
222
|
-
error.cause = cause;
|
|
223
|
-
return error;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
async function loadTransformersPipeline(): Promise<FeatureExtractionPipelineFactory> {
|
|
227
|
-
// Keep @huggingface/transformers lazy so importing MemoryService or pure
|
|
228
|
-
// adapter helpers does not eagerly dlopen onnxruntime native bindings.
|
|
229
|
-
const dynamicImport = new Function('specifier', 'return import(specifier)') as (
|
|
230
|
-
specifier: string
|
|
231
|
-
) => Promise<{ pipeline: unknown }>;
|
|
232
|
-
const transformers = await dynamicImport('@huggingface/transformers');
|
|
233
|
-
return transformers.pipeline as FeatureExtractionPipelineFactory;
|
|
234
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './embedder.js';
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude post-tool-use hook.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/post-tool-use.js';
|
|
8
|
-
|
|
9
|
-
main().catch(console.error);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '../adapters/claude/hooks/semantic-daemon-client.js';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude semantic daemon hook runtime.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/semantic-daemon.js';
|
|
8
|
-
|
|
9
|
-
main().catch(() => {
|
|
10
|
-
process.exit(1);
|
|
11
|
-
});
|
package/src/hooks/session-end.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude session-end hook.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/session-end.js';
|
|
8
|
-
|
|
9
|
-
main().catch(console.error);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude session-start hook.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/session-start.js';
|
|
8
|
-
|
|
9
|
-
main().catch(console.error);
|
package/src/hooks/stop.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude stop hook.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/stop.js';
|
|
8
|
-
|
|
9
|
-
main().catch(console.error);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Compatibility entrypoint for the Claude user-prompt-submit hook.
|
|
4
|
-
*
|
|
5
|
-
* Implementation lives in the Claude adapter layer so core stays platform-agnostic.
|
|
6
|
-
*/
|
|
7
|
-
import { main } from '../adapters/claude/hooks/user-prompt-submit.js';
|
|
8
|
-
|
|
9
|
-
main().catch(console.error);
|
package/src/index.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public package entrypoint.
|
|
3
|
-
*
|
|
4
|
-
* Keep this file lightweight: consumers importing `claude-memory-layer` should
|
|
5
|
-
* receive the core/service APIs described by package.json `main` without having
|
|
6
|
-
* to import CLI or hook executables.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
export * from './core/index.js';
|
|
10
|
-
export * from './services/memory-service.js';
|
|
11
|
-
export * from './services/memory-service-config.js';
|
|
12
|
-
export * from './services/memory-service-registry.js';
|
|
13
|
-
export * from './services/codex-session-history-importer.js';
|
package/src/mcp/handlers.ts
DELETED
package/src/mcp/index.ts
DELETED
package/src/mcp/tools.ts
DELETED
package/src/server/api/chat.ts
DELETED
package/src/server/api/events.ts
DELETED
package/src/server/api/health.ts
DELETED
package/src/server/api/index.ts
DELETED
package/src/server/api/search.ts
DELETED
package/src/server/api/stats.ts
DELETED
package/src/server/api/turns.ts
DELETED
package/src/server/api/utils.ts
DELETED
package/src/server/index.ts
DELETED