claude-memory-layer 1.0.22 → 1.0.24
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/.claude/settings.local.json +11 -0
- package/README.md +2 -0
- package/dist/cli/index.js +87 -17
- package/dist/cli/index.js.map +2 -2
- package/dist/core/index.js +30 -5
- package/dist/core/index.js.map +2 -2
- package/dist/hooks/post-tool-use.js +117 -18
- package/dist/hooks/post-tool-use.js.map +2 -2
- package/dist/hooks/semantic-daemon.js +7337 -0
- package/dist/hooks/semantic-daemon.js.map +7 -0
- package/dist/hooks/session-end.js +71 -16
- package/dist/hooks/session-end.js.map +2 -2
- package/dist/hooks/session-start.js +156 -24
- package/dist/hooks/session-start.js.map +4 -4
- package/dist/hooks/stop.js +101 -18
- package/dist/hooks/stop.js.map +2 -2
- package/dist/hooks/user-prompt-submit.js +291 -102
- package/dist/hooks/user-prompt-submit.js.map +4 -4
- package/dist/server/api/index.js +71 -16
- package/dist/server/api/index.js.map +2 -2
- package/dist/server/index.js +71 -16
- package/dist/server/index.js.map +2 -2
- package/dist/services/memory-service.js +71 -16
- package/dist/services/memory-service.js.map +2 -2
- package/dist/ui/app.js +48 -1
- package/dist/ui/index.html +11 -3
- package/memory/_index.md +1 -0
- package/memory/agent_response/uncategorized/2026-03-04.md +1138 -1
- package/memory/session_summary/uncategorized/2026-03-04.md +31 -0
- package/memory/tool_observation/uncategorized/2026-03-04.md +785 -1
- package/memory/user_prompt/uncategorized/2026-03-04.md +438 -1
- package/package.json +1 -1
- package/scripts/build.ts +2 -1
- package/specs/selective-tool-observation/context.md +100 -0
- package/specs/selective-tool-observation/plan.md +158 -0
- package/specs/selective-tool-observation/spec.md +127 -0
- package/src/cli/index.ts +1 -0
- package/src/core/embedder.ts +15 -4
- package/src/core/sqlite-event-store.ts +16 -0
- package/src/core/turn-state.ts +48 -0
- package/src/core/types.ts +1 -0
- package/src/hooks/post-tool-use.ts +47 -2
- package/src/hooks/semantic-daemon-client.ts +208 -0
- package/src/hooks/semantic-daemon.ts +276 -0
- package/src/hooks/session-start.ts +7 -0
- package/src/hooks/stop.ts +19 -4
- package/src/hooks/user-prompt-submit.ts +48 -40
- package/src/services/memory-service.ts +59 -16
- package/src/services/session-history-importer.ts +18 -0
- package/src/ui/app.js +48 -1
- package/src/ui/index.html +11 -3
package/dist/core/index.js
CHANGED
|
@@ -124,6 +124,7 @@ var ConfigSchema = z.object({
|
|
|
124
124
|
toolObservation: z.object({
|
|
125
125
|
enabled: z.boolean().default(true),
|
|
126
126
|
excludedTools: z.array(z.string()).default(["TodoWrite", "TodoRead"]),
|
|
127
|
+
minOutputLength: z.number().default(100),
|
|
127
128
|
maxOutputLength: z.number().default(1e4),
|
|
128
129
|
maxOutputLines: z.number().default(100),
|
|
129
130
|
storeOnlyOnSuccess: z.boolean().default(false)
|
|
@@ -2418,6 +2419,21 @@ var SQLiteEventStore = class {
|
|
|
2418
2419
|
[id, eventId, sessionId, score, query.slice(0, 100)]
|
|
2419
2420
|
);
|
|
2420
2421
|
}
|
|
2422
|
+
/**
|
|
2423
|
+
* Get session IDs that have unevaluated retrievals (measured_at IS NULL).
|
|
2424
|
+
* Excludes the current session. Used to backfill sessions that ended without Stop hook.
|
|
2425
|
+
*/
|
|
2426
|
+
async getUnevaluatedSessions(currentSessionId, limit = 5) {
|
|
2427
|
+
await this.initialize();
|
|
2428
|
+
const rows = sqliteAll(
|
|
2429
|
+
this.db,
|
|
2430
|
+
`SELECT DISTINCT session_id FROM memory_helpfulness
|
|
2431
|
+
WHERE measured_at IS NULL AND session_id != ?
|
|
2432
|
+
ORDER BY created_at DESC LIMIT ?`,
|
|
2433
|
+
[currentSessionId, limit]
|
|
2434
|
+
);
|
|
2435
|
+
return rows.map((r) => r.session_id);
|
|
2436
|
+
}
|
|
2421
2437
|
/**
|
|
2422
2438
|
* Evaluate helpfulness for all retrievals in a session
|
|
2423
2439
|
* Called at session end - uses behavioral signals to compute score
|
|
@@ -3997,7 +4013,7 @@ var VectorStore = class {
|
|
|
3997
4013
|
|
|
3998
4014
|
// src/core/embedder.ts
|
|
3999
4015
|
import { pipeline } from "@huggingface/transformers";
|
|
4000
|
-
var Embedder = class {
|
|
4016
|
+
var Embedder = class _Embedder {
|
|
4001
4017
|
pipeline = null;
|
|
4002
4018
|
modelName;
|
|
4003
4019
|
activeModelName;
|
|
@@ -4028,6 +4044,11 @@ var Embedder = class {
|
|
|
4028
4044
|
this.initialized = true;
|
|
4029
4045
|
}
|
|
4030
4046
|
}
|
|
4047
|
+
// ~4 chars per token; 512 tokens * 4 = 2048, use 2000 to be safe
|
|
4048
|
+
static MAX_CHARS = 2e3;
|
|
4049
|
+
truncate(text) {
|
|
4050
|
+
return text.length > _Embedder.MAX_CHARS ? text.slice(0, _Embedder.MAX_CHARS) : text;
|
|
4051
|
+
}
|
|
4031
4052
|
/**
|
|
4032
4053
|
* Generate embedding for a single text
|
|
4033
4054
|
*/
|
|
@@ -4036,9 +4057,11 @@ var Embedder = class {
|
|
|
4036
4057
|
if (!this.pipeline) {
|
|
4037
4058
|
throw new Error("Embedding pipeline not initialized");
|
|
4038
4059
|
}
|
|
4039
|
-
const output = await this.pipeline(text, {
|
|
4060
|
+
const output = await this.pipeline(this.truncate(text), {
|
|
4040
4061
|
pooling: "mean",
|
|
4041
|
-
normalize: true
|
|
4062
|
+
normalize: true,
|
|
4063
|
+
truncation: true,
|
|
4064
|
+
max_length: 512
|
|
4042
4065
|
});
|
|
4043
4066
|
const vector = Array.from(output.data);
|
|
4044
4067
|
return {
|
|
@@ -4060,9 +4083,11 @@ var Embedder = class {
|
|
|
4060
4083
|
for (let i = 0; i < texts.length; i += batchSize) {
|
|
4061
4084
|
const batch = texts.slice(i, i + batchSize);
|
|
4062
4085
|
for (const text of batch) {
|
|
4063
|
-
const output = await this.pipeline(text, {
|
|
4086
|
+
const output = await this.pipeline(this.truncate(text), {
|
|
4064
4087
|
pooling: "mean",
|
|
4065
|
-
normalize: true
|
|
4088
|
+
normalize: true,
|
|
4089
|
+
truncation: true,
|
|
4090
|
+
max_length: 512
|
|
4066
4091
|
});
|
|
4067
4092
|
const vector = Array.from(output.data);
|
|
4068
4093
|
results.push({
|