@pcircle/memesh 4.1.0 → 4.1.2
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 -3
- package/dashboard/dist/index.html +3 -3
- package/dist/core/analytics.d.ts +53 -0
- package/dist/core/analytics.d.ts.map +1 -0
- package/dist/core/analytics.js +127 -0
- package/dist/core/analytics.js.map +1 -0
- package/dist/core/auto-tagger.d.ts.map +1 -1
- package/dist/core/auto-tagger.js +14 -54
- package/dist/core/auto-tagger.js.map +1 -1
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/consolidator.d.ts.map +1 -1
- package/dist/core/consolidator.js +11 -61
- package/dist/core/consolidator.js.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +47 -0
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/failure-analyzer.d.ts +2 -1
- package/dist/core/failure-analyzer.d.ts.map +1 -1
- package/dist/core/failure-analyzer.js +14 -47
- package/dist/core/failure-analyzer.js.map +1 -1
- package/dist/core/graph.d.ts +13 -0
- package/dist/core/graph.d.ts.map +1 -0
- package/dist/core/graph.js +13 -0
- package/dist/core/graph.js.map +1 -0
- package/dist/core/lesson-engine.d.ts +2 -1
- package/dist/core/lesson-engine.d.ts.map +1 -1
- package/dist/core/lesson-engine.js +2 -0
- package/dist/core/lesson-engine.js.map +1 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +2 -1
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/llm-client.d.ts +6 -0
- package/dist/core/llm-client.d.ts.map +1 -0
- package/dist/core/llm-client.js +64 -0
- package/dist/core/llm-client.js.map +1 -0
- package/dist/core/operations.d.ts +0 -1
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +40 -61
- package/dist/core/operations.js.map +1 -1
- package/dist/core/prompt-safety.d.ts +3 -0
- package/dist/core/prompt-safety.d.ts.map +1 -0
- package/dist/core/prompt-safety.js +13 -0
- package/dist/core/prompt-safety.js.map +1 -0
- package/dist/core/query-expander.d.ts.map +1 -1
- package/dist/core/query-expander.js +11 -72
- package/dist/core/query-expander.js.map +1 -1
- package/dist/core/schema-export.d.ts.map +1 -1
- package/dist/core/schema-export.js +38 -0
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/skill-usage-log.d.ts.map +1 -1
- package/dist/core/skill-usage-log.js +5 -1
- package/dist/core/skill-usage-log.js.map +1 -1
- package/dist/core/stats.d.ts +12 -0
- package/dist/core/stats.d.ts.map +1 -0
- package/dist/core/stats.js +19 -0
- package/dist/core/stats.js.map +1 -0
- package/dist/core/types.d.ts +9 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/verifier.d.ts.map +1 -1
- package/dist/core/verifier.js +59 -6
- package/dist/core/verifier.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +14 -0
- package/dist/db.js.map +1 -1
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +8 -43
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/skills-manifest.json +71 -0
- package/dist/storage/conflicts.d.ts +4 -0
- package/dist/storage/conflicts.d.ts.map +1 -0
- package/dist/storage/conflicts.js +32 -0
- package/dist/storage/conflicts.js.map +1 -0
- package/dist/storage/fts-index.d.ts +4 -0
- package/dist/storage/fts-index.d.ts.map +1 -0
- package/dist/storage/fts-index.js +18 -0
- package/dist/storage/fts-index.js.map +1 -0
- package/dist/transports/cli/cli.js +97 -73
- package/dist/transports/cli/cli.js.map +1 -1
- package/dist/transports/http/server.d.ts +1 -0
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +142 -244
- package/dist/transports/http/server.js.map +1 -1
- package/package.json +2 -2
- package/plugin.json +1 -1
- package/scripts/hooks/_shared.js +207 -1
- package/scripts/hooks/post-commit.js +5 -76
- package/scripts/hooks/pre-bash-orchestration-nudge.js +2 -2
- package/scripts/hooks/pre-compact.js +8 -76
- package/scripts/hooks/session-start.js +16 -8
- package/scripts/hooks/session-summary.js +12 -81
|
@@ -5,64 +5,12 @@
|
|
|
5
5
|
// and stores as session-insight entities in MeMesh.
|
|
6
6
|
|
|
7
7
|
import { createRequire } from 'module';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { fileURLToPath } from 'url';
|
|
12
|
-
import { getMemeshDir } from './_shared.js';
|
|
8
|
+
import { join, basename } from 'path';
|
|
9
|
+
import { existsSync, readFileSync } from 'fs';
|
|
10
|
+
import { getMemeshDir, isAutoCaptureEnabled, openHookDb, resolvePluginRoot } from './_shared.js';
|
|
13
11
|
|
|
14
12
|
const require = createRequire(import.meta.url);
|
|
15
13
|
|
|
16
|
-
const SCHEMA_SQL = `
|
|
17
|
-
CREATE TABLE IF NOT EXISTS entities (
|
|
18
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
-
name TEXT NOT NULL UNIQUE,
|
|
20
|
-
type TEXT NOT NULL,
|
|
21
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
22
|
-
metadata JSON
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
CREATE TABLE IF NOT EXISTS observations (
|
|
26
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
27
|
-
entity_id INTEGER NOT NULL,
|
|
28
|
-
content TEXT NOT NULL,
|
|
29
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
30
|
-
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
CREATE TABLE IF NOT EXISTS relations (
|
|
34
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
35
|
-
from_entity_id INTEGER NOT NULL,
|
|
36
|
-
to_entity_id INTEGER NOT NULL,
|
|
37
|
-
relation_type TEXT NOT NULL,
|
|
38
|
-
metadata JSON,
|
|
39
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
40
|
-
FOREIGN KEY (from_entity_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
41
|
-
FOREIGN KEY (to_entity_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
42
|
-
UNIQUE(from_entity_id, to_entity_id, relation_type)
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
CREATE TABLE IF NOT EXISTS tags (
|
|
46
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
-
entity_id INTEGER NOT NULL,
|
|
48
|
-
tag TEXT NOT NULL,
|
|
49
|
-
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
CREATE INDEX IF NOT EXISTS idx_tags_entity ON tags(entity_id);
|
|
53
|
-
CREATE INDEX IF NOT EXISTS idx_tags_tag ON tags(tag);
|
|
54
|
-
DELETE FROM tags
|
|
55
|
-
WHERE id NOT IN (
|
|
56
|
-
SELECT MIN(id)
|
|
57
|
-
FROM tags
|
|
58
|
-
GROUP BY entity_id, tag
|
|
59
|
-
);
|
|
60
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_tags_entity_tag_unique ON tags(entity_id, tag);
|
|
61
|
-
CREATE INDEX IF NOT EXISTS idx_observations_entity ON observations(entity_id);
|
|
62
|
-
CREATE INDEX IF NOT EXISTS idx_relations_from ON relations(from_entity_id);
|
|
63
|
-
CREATE INDEX IF NOT EXISTS idx_relations_to ON relations(to_entity_id);
|
|
64
|
-
`;
|
|
65
|
-
|
|
66
14
|
// Parse a JSONL transcript file.
|
|
67
15
|
// Mirrors logic in src/core/extractor.ts parseTranscript().
|
|
68
16
|
// Defensive: never throws — malformed lines are silently skipped.
|
|
@@ -124,8 +72,8 @@ process.stdin.on('end', async () => {
|
|
|
124
72
|
try {
|
|
125
73
|
if (!input.trim()) return exit0();
|
|
126
74
|
|
|
127
|
-
// Opt-out check
|
|
128
|
-
if (process.env
|
|
75
|
+
// Opt-out check (env > config > default-on)
|
|
76
|
+
if (!isAutoCaptureEnabled(process.env)) return exit0();
|
|
129
77
|
|
|
130
78
|
let inputData;
|
|
131
79
|
try {
|
|
@@ -151,30 +99,12 @@ process.stdin.on('end', async () => {
|
|
|
151
99
|
// Skip sessions with too little activity
|
|
152
100
|
if (toolCallCount < 3) return exit0();
|
|
153
101
|
|
|
154
|
-
// Open DB
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (!existsSync(dbDir)) mkdirSync(dbDir, { recursive: true });
|
|
158
|
-
|
|
159
|
-
const Database = require('better-sqlite3');
|
|
102
|
+
// Open DB via shared helper — applies SCHEMA_SQL + status migration.
|
|
103
|
+
// sqlite-vec is loaded separately because only this hook needs it
|
|
104
|
+
// (for embedding-aware recall-effectiveness tracking).
|
|
160
105
|
const sqliteVec = require('sqlite-vec');
|
|
161
|
-
|
|
162
|
-
const db = new Database(dbPath);
|
|
106
|
+
const { db } = openHookDb(process.env);
|
|
163
107
|
try {
|
|
164
|
-
db.pragma('journal_mode = WAL');
|
|
165
|
-
db.pragma('foreign_keys = ON');
|
|
166
|
-
|
|
167
|
-
// Ensure schema exists (tables may already exist from MeMesh server)
|
|
168
|
-
db.exec(SCHEMA_SQL);
|
|
169
|
-
|
|
170
|
-
// Migrate: add status column if missing (v2.11 -> v2.12)
|
|
171
|
-
const cols = db.prepare("PRAGMA table_info(entities)").all();
|
|
172
|
-
if (!cols.some(c => c.name === 'status')) {
|
|
173
|
-
db.exec("ALTER TABLE entities ADD COLUMN status TEXT NOT NULL DEFAULT 'active'");
|
|
174
|
-
db.exec("CREATE INDEX IF NOT EXISTS idx_entities_status ON entities(status)");
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// Load sqlite-vec extension
|
|
178
108
|
sqliteVec.load(db);
|
|
179
109
|
|
|
180
110
|
// Duplicate detection: if we already captured this session, bail
|
|
@@ -326,8 +256,9 @@ process.stdin.on('end', async () => {
|
|
|
326
256
|
// Wrapped in its own try/catch — never blocks rule-based extraction.
|
|
327
257
|
if (errorsEncountered.length > 0 && filesEdited.length > 0) {
|
|
328
258
|
try {
|
|
329
|
-
|
|
330
|
-
|
|
259
|
+
// F5: derive pluginRoot strictly from this file's location.
|
|
260
|
+
// See `resolvePluginRoot` for the full reasoning.
|
|
261
|
+
const pluginRoot = resolvePluginRoot(import.meta.url);
|
|
331
262
|
const configMod = await import(join(pluginRoot, 'dist/core/config.js'));
|
|
332
263
|
const config = configMod.readConfig();
|
|
333
264
|
|