claude-memory-layer 1.0.15 → 1.0.16
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 +3 -0
- package/dist/cli/index.js +54 -41
- package/dist/cli/index.js.map +2 -2
- package/dist/core/index.js +53 -40
- package/dist/core/index.js.map +2 -2
- package/dist/hooks/post-tool-use.js +53 -40
- package/dist/hooks/post-tool-use.js.map +2 -2
- package/dist/hooks/session-end.js +53 -40
- package/dist/hooks/session-end.js.map +2 -2
- package/dist/hooks/session-start.js +53 -40
- package/dist/hooks/session-start.js.map +2 -2
- package/dist/hooks/stop.js +53 -40
- package/dist/hooks/stop.js.map +2 -2
- package/dist/hooks/user-prompt-submit.js +72 -43
- package/dist/hooks/user-prompt-submit.js.map +2 -2
- package/dist/server/api/index.js +53 -40
- package/dist/server/api/index.js.map +2 -2
- package/dist/server/index.js +53 -40
- package/dist/server/index.js.map +2 -2
- package/dist/services/memory-service.js +53 -40
- package/dist/services/memory-service.js.map +2 -2
- package/memory/_index.md +2 -0
- package/memory/tool_observation/uncategorized/2026-02-26.md +201 -0
- package/memory/user_prompt/uncategorized/2026-02-26.md +10 -0
- package/package.json +1 -1
- package/src/core/sqlite-event-store.ts +52 -40
- package/src/hooks/user-prompt-submit.ts +22 -3
package/README.md
CHANGED
|
@@ -71,6 +71,9 @@ npx claude-memory-layer search "배포 이슈"
|
|
|
71
71
|
- `GET /health` (서버 헬스)
|
|
72
72
|
- `GET /api/health` (outbox pending/failed 포함 상세 헬스)
|
|
73
73
|
- `GET /api/stats/retrieval-traces` (검색→컨텍스트 채택 추적)
|
|
74
|
+
- 주입 임계값 튜닝(환경변수):
|
|
75
|
+
- `CLAUDE_MEMORY_MIN_SCORE` (기본 0.4)
|
|
76
|
+
- `CLAUDE_MEMORY_FALLBACK_MIN_SCORE` (기본 0.3, 결과 0건일 때 재시도)
|
|
74
77
|
|
|
75
78
|
---
|
|
76
79
|
|
package/dist/cli/index.js
CHANGED
|
@@ -2046,49 +2046,62 @@ var SQLiteEventStore = class {
|
|
|
2046
2046
|
}
|
|
2047
2047
|
async getRecentRetrievalTraces(limit = 50) {
|
|
2048
2048
|
await this.initialize();
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2049
|
+
try {
|
|
2050
|
+
const rows = sqliteAll(
|
|
2051
|
+
this.db,
|
|
2052
|
+
`SELECT * FROM retrieval_traces ORDER BY created_at DESC LIMIT ?`,
|
|
2053
|
+
[limit]
|
|
2054
|
+
);
|
|
2055
|
+
return rows.map((row) => ({
|
|
2056
|
+
traceId: row.trace_id,
|
|
2057
|
+
sessionId: row.session_id || void 0,
|
|
2058
|
+
projectHash: row.project_hash || void 0,
|
|
2059
|
+
queryText: row.query_text,
|
|
2060
|
+
strategy: row.strategy || void 0,
|
|
2061
|
+
candidateEventIds: row.candidate_event_ids ? JSON.parse(row.candidate_event_ids) : [],
|
|
2062
|
+
selectedEventIds: row.selected_event_ids ? JSON.parse(row.selected_event_ids) : [],
|
|
2063
|
+
candidateDetails: row.candidate_details_json ? JSON.parse(row.candidate_details_json) : [],
|
|
2064
|
+
selectedDetails: row.selected_details_json ? JSON.parse(row.selected_details_json) : [],
|
|
2065
|
+
candidateCount: Number(row.candidate_count || 0),
|
|
2066
|
+
selectedCount: Number(row.selected_count || 0),
|
|
2067
|
+
confidence: row.confidence || void 0,
|
|
2068
|
+
fallbackTrace: row.fallback_trace ? JSON.parse(row.fallback_trace) : [],
|
|
2069
|
+
createdAt: toDateFromSQLite(row.created_at)
|
|
2070
|
+
}));
|
|
2071
|
+
} catch (err) {
|
|
2072
|
+
if (err?.message?.includes("no such table"))
|
|
2073
|
+
return [];
|
|
2074
|
+
throw err;
|
|
2075
|
+
}
|
|
2070
2076
|
}
|
|
2071
2077
|
async getRetrievalTraceStats() {
|
|
2072
2078
|
await this.initialize();
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2079
|
+
try {
|
|
2080
|
+
const row = sqliteGet(
|
|
2081
|
+
this.db,
|
|
2082
|
+
`SELECT
|
|
2083
|
+
COUNT(*) as total_queries,
|
|
2084
|
+
AVG(candidate_count) as avg_candidate_count,
|
|
2085
|
+
AVG(selected_count) as avg_selected_count,
|
|
2086
|
+
CASE
|
|
2087
|
+
WHEN SUM(candidate_count) > 0 THEN (SUM(selected_count) * 1.0 / SUM(candidate_count))
|
|
2088
|
+
ELSE 0
|
|
2089
|
+
END as selection_rate
|
|
2090
|
+
FROM retrieval_traces`,
|
|
2091
|
+
[]
|
|
2092
|
+
);
|
|
2093
|
+
return {
|
|
2094
|
+
totalQueries: Number(row?.total_queries || 0),
|
|
2095
|
+
avgCandidateCount: Number(row?.avg_candidate_count || 0),
|
|
2096
|
+
avgSelectedCount: Number(row?.avg_selected_count || 0),
|
|
2097
|
+
selectionRate: Number(row?.selection_rate || 0)
|
|
2098
|
+
};
|
|
2099
|
+
} catch (err) {
|
|
2100
|
+
if (err?.message?.includes("no such table")) {
|
|
2101
|
+
return { totalQueries: 0, avgCandidateCount: 0, avgSelectedCount: 0, selectionRate: 0 };
|
|
2102
|
+
}
|
|
2103
|
+
throw err;
|
|
2104
|
+
}
|
|
2092
2105
|
}
|
|
2093
2106
|
/**
|
|
2094
2107
|
* Close database connection
|
|
@@ -9241,7 +9254,7 @@ function getHooksConfig(pluginPath) {
|
|
|
9241
9254
|
};
|
|
9242
9255
|
}
|
|
9243
9256
|
var program = new Command();
|
|
9244
|
-
program.name("claude-memory-layer").description("Claude Code Memory Plugin CLI").version("1.0.
|
|
9257
|
+
program.name("claude-memory-layer").description("Claude Code Memory Plugin CLI").version("1.0.16");
|
|
9245
9258
|
program.command("install").description("Install hooks into Claude Code settings").option("--path <path>", "Custom plugin path (defaults to auto-detect)").action(async (options) => {
|
|
9246
9259
|
try {
|
|
9247
9260
|
const pluginPath = options.path || getPluginPath();
|