@pcircle/memesh 4.0.3 → 4.1.1
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.de.md +227 -53
- package/README.es.md +230 -56
- package/README.fr.md +230 -56
- package/README.ja.md +229 -55
- package/README.ko.md +230 -56
- package/README.md +54 -3
- package/README.pt.md +230 -56
- package/README.th.md +230 -56
- package/README.vi.md +228 -54
- package/README.zh-CN.md +230 -56
- package/README.zh-TW.md +228 -54
- 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 +6 -10
- 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 +40 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +264 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/embedder.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 +72 -0
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/skill-usage-log.d.ts +11 -0
- package/dist/core/skill-usage-log.d.ts.map +1 -0
- package/dist/core/skill-usage-log.js +125 -0
- package/dist/core/skill-usage-log.js.map +1 -0
- 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 +37 -0
- package/dist/core/verifier.d.ts.map +1 -0
- package/dist/core/verifier.js +195 -0
- package/dist/core/verifier.js.map +1 -0
- 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 +203 -69
- 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 +138 -231
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/mcp/handlers.d.ts +93 -0
- package/dist/transports/mcp/handlers.d.ts.map +1 -1
- package/dist/transports/mcp/handlers.js +51 -1
- package/dist/transports/mcp/handlers.js.map +1 -1
- package/dist/transports/schemas.d.ts +28 -0
- package/dist/transports/schemas.d.ts.map +1 -1
- package/dist/transports/schemas.js +25 -0
- package/dist/transports/schemas.js.map +1 -1
- package/hooks/hooks.json +10 -0
- package/package.json +5 -3
- 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 +150 -0
- package/scripts/hooks/pre-compact.js +8 -76
- package/scripts/hooks/pre-edit-recall.js +0 -0
- package/scripts/hooks/session-start.js +69 -8
- package/scripts/hooks/session-summary.js +12 -81
- package/skills/agentic-orchestration/SKILL.md +399 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { appendFileSync, chmodSync, closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, renameSync, unlinkSync, writeFileSync, } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
const MAX_BYTES = 10 * 1024 * 1024;
|
|
5
|
+
const TRUNCATE_KEEP = 6 * 1024 * 1024;
|
|
6
|
+
function defaultLogPath() {
|
|
7
|
+
return join(homedir(), '.memesh', 'skill-usage.jsonl');
|
|
8
|
+
}
|
|
9
|
+
function ensureParent(path) {
|
|
10
|
+
try {
|
|
11
|
+
const dir = dirname(path);
|
|
12
|
+
if (!existsSync(dir))
|
|
13
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function rotateIfNeeded(path) {
|
|
19
|
+
let fd = null;
|
|
20
|
+
let tmpPath = null;
|
|
21
|
+
try {
|
|
22
|
+
try {
|
|
23
|
+
fd = openSync(path, 'r');
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const { size } = fstatSync(fd);
|
|
29
|
+
if (size < MAX_BYTES * 1.2)
|
|
30
|
+
return;
|
|
31
|
+
const readLen = Math.min(TRUNCATE_KEEP, size);
|
|
32
|
+
const offset = size - readLen;
|
|
33
|
+
const buf = Buffer.alloc(readLen);
|
|
34
|
+
let totalRead = 0;
|
|
35
|
+
while (totalRead < readLen) {
|
|
36
|
+
const n = readSync(fd, buf, totalRead, readLen - totalRead, offset + totalRead);
|
|
37
|
+
if (n === 0)
|
|
38
|
+
break;
|
|
39
|
+
totalRead += n;
|
|
40
|
+
}
|
|
41
|
+
closeSync(fd);
|
|
42
|
+
fd = null;
|
|
43
|
+
const tail = buf.subarray(0, totalRead);
|
|
44
|
+
const firstNl = tail.indexOf(0x0a);
|
|
45
|
+
const aligned = firstNl >= 0 ? tail.subarray(firstNl + 1) : tail;
|
|
46
|
+
tmpPath = `${path}.rot.${process.pid}.${Date.now()}`;
|
|
47
|
+
writeFileSync(tmpPath, aligned, { mode: 0o600 });
|
|
48
|
+
renameSync(tmpPath, path);
|
|
49
|
+
tmpPath = null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
if (fd !== null) {
|
|
55
|
+
try {
|
|
56
|
+
closeSync(fd);
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
}
|
|
60
|
+
if (tmpPath !== null) {
|
|
61
|
+
try {
|
|
62
|
+
unlinkSync(tmpPath);
|
|
63
|
+
}
|
|
64
|
+
catch { }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function logSkillEvent(event, payload, path) {
|
|
69
|
+
const target = path ?? defaultLogPath();
|
|
70
|
+
try {
|
|
71
|
+
ensureParent(target);
|
|
72
|
+
rotateIfNeeded(target);
|
|
73
|
+
const line = JSON.stringify({ ts: new Date().toISOString(), event, payload }) + '\n';
|
|
74
|
+
appendFileSync(target, line);
|
|
75
|
+
try {
|
|
76
|
+
chmodSync(target, 0o600);
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function summariseSkillUsage(path) {
|
|
84
|
+
const target = path ?? defaultLogPath();
|
|
85
|
+
const out = {
|
|
86
|
+
total_events: 0,
|
|
87
|
+
events_by_name: {},
|
|
88
|
+
log_path: target,
|
|
89
|
+
log_bytes: 0,
|
|
90
|
+
};
|
|
91
|
+
if (!existsSync(target))
|
|
92
|
+
return out;
|
|
93
|
+
let raw;
|
|
94
|
+
try {
|
|
95
|
+
const buf = readFileSync(target);
|
|
96
|
+
out.log_bytes = buf.length;
|
|
97
|
+
raw = buf.toString('utf8');
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
for (const line of raw.split('\n')) {
|
|
103
|
+
if (!line.trim())
|
|
104
|
+
continue;
|
|
105
|
+
let parsed;
|
|
106
|
+
try {
|
|
107
|
+
parsed = JSON.parse(line);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (!parsed.event || typeof parsed.event !== 'string')
|
|
113
|
+
continue;
|
|
114
|
+
out.total_events += 1;
|
|
115
|
+
out.events_by_name[parsed.event] = (out.events_by_name[parsed.event] ?? 0) + 1;
|
|
116
|
+
if (parsed.ts) {
|
|
117
|
+
if (!out.first_event || parsed.ts < out.first_event)
|
|
118
|
+
out.first_event = parsed.ts;
|
|
119
|
+
if (!out.last_event || parsed.ts > out.last_event)
|
|
120
|
+
out.last_event = parsed.ts;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=skill-usage-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-usage-log.js","sourceRoot":"","sources":["../../src/core/skill-usage-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface StatsResult {
|
|
3
|
+
totalEntities: number;
|
|
4
|
+
totalObservations: number;
|
|
5
|
+
totalRelations: number;
|
|
6
|
+
totalTags: number;
|
|
7
|
+
typeDistribution: unknown[];
|
|
8
|
+
tagDistribution: unknown[];
|
|
9
|
+
statusDistribution: unknown[];
|
|
10
|
+
}
|
|
11
|
+
export declare function computeStats(db: Database.Database): StatsResult;
|
|
12
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,kBAAkB,EAAE,OAAO,EAAE,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAyB/D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function computeStats(db) {
|
|
2
|
+
const entities = db.prepare('SELECT COUNT(*) as c FROM entities').get();
|
|
3
|
+
const observations = db.prepare('SELECT COUNT(*) as c FROM observations').get();
|
|
4
|
+
const relations = db.prepare('SELECT COUNT(*) as c FROM relations').get();
|
|
5
|
+
const tags = db.prepare('SELECT COUNT(DISTINCT tag) as c FROM tags').get();
|
|
6
|
+
const typeDistribution = db.prepare('SELECT type, COUNT(*) as count FROM entities GROUP BY type ORDER BY count DESC LIMIT 50').all();
|
|
7
|
+
const tagDistribution = db.prepare('SELECT tag, COUNT(*) as count FROM tags GROUP BY tag ORDER BY count DESC LIMIT 30').all();
|
|
8
|
+
const statusDistribution = db.prepare("SELECT status, COUNT(*) as count FROM entities GROUP BY status").all();
|
|
9
|
+
return {
|
|
10
|
+
totalEntities: entities.c,
|
|
11
|
+
totalObservations: observations.c,
|
|
12
|
+
totalRelations: relations.c,
|
|
13
|
+
totalTags: tags.c,
|
|
14
|
+
typeDistribution,
|
|
15
|
+
tagDistribution,
|
|
16
|
+
statusDistribution,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/core/stats.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAc,CAAC;IACpF,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAc,CAAC;IAC5F,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAc,CAAC;IACtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAAc,CAAC;IAEvF,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CACjC,yFAAyF,CAC1F,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,mFAAmF,CACpF,CAAC,GAAG,EAAE,CAAC;IACR,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CACnC,gEAAgE,CACjE,CAAC,GAAG,EAAE,CAAC;IAER,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,CAAC;QACzB,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACjC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC3B,SAAS,EAAE,IAAI,CAAC,CAAC;QACjB,gBAAgB;QAChB,eAAe;QACf,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export type Namespace = 'personal' | 'team' | 'global';
|
|
2
|
+
export type MergeStrategy = 'skip' | 'overwrite' | 'append';
|
|
3
|
+
export type LessonSeverity = 'critical' | 'major' | 'minor';
|
|
4
|
+
export type EntityStatus = 'active' | 'archived';
|
|
5
|
+
export type LLMProvider = 'anthropic' | 'openai' | 'ollama';
|
|
1
6
|
export interface Entity {
|
|
2
7
|
id: number;
|
|
3
8
|
name: string;
|
|
@@ -45,6 +50,8 @@ export interface RememberInput {
|
|
|
45
50
|
type: string;
|
|
46
51
|
}>;
|
|
47
52
|
namespace?: string;
|
|
53
|
+
trustOverride?: 'trusted' | 'untrusted';
|
|
54
|
+
provenanceOverride?: Record<string, unknown>;
|
|
48
55
|
}
|
|
49
56
|
export interface RecallInput {
|
|
50
57
|
query?: string;
|
|
@@ -113,7 +120,7 @@ export interface ExportResult {
|
|
|
113
120
|
export interface ImportInput {
|
|
114
121
|
data: ExportResult;
|
|
115
122
|
namespace?: string;
|
|
116
|
-
merge_strategy:
|
|
123
|
+
merge_strategy: MergeStrategy;
|
|
117
124
|
}
|
|
118
125
|
export interface ImportResult {
|
|
119
126
|
imported: number;
|
|
@@ -126,7 +133,7 @@ export interface LearnInput {
|
|
|
126
133
|
fix: string;
|
|
127
134
|
root_cause?: string;
|
|
128
135
|
prevention?: string;
|
|
129
|
-
severity?:
|
|
136
|
+
severity?: LessonSeverity;
|
|
130
137
|
}
|
|
131
138
|
export interface LearnResult {
|
|
132
139
|
learned: boolean;
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAID,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,aAAa,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAE3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,SAAS,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface ExternalCheck {
|
|
2
|
+
pass: boolean;
|
|
3
|
+
summary?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface VerifyAgentWorkInput {
|
|
6
|
+
agent_id: string;
|
|
7
|
+
workdir: string;
|
|
8
|
+
base?: string;
|
|
9
|
+
claim?: {
|
|
10
|
+
expected_files?: number;
|
|
11
|
+
};
|
|
12
|
+
report?: {
|
|
13
|
+
pass: boolean;
|
|
14
|
+
typecheck?: ExternalCheck;
|
|
15
|
+
tests?: ExternalCheck;
|
|
16
|
+
lint?: ExternalCheck;
|
|
17
|
+
build?: ExternalCheck;
|
|
18
|
+
summary?: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface RealityCheckResult {
|
|
22
|
+
files_changed: number;
|
|
23
|
+
expected_files: number | null;
|
|
24
|
+
match: boolean | null;
|
|
25
|
+
base: string | null;
|
|
26
|
+
pass: boolean;
|
|
27
|
+
summary: string;
|
|
28
|
+
}
|
|
29
|
+
export interface VerifyAgentWorkResult {
|
|
30
|
+
entity_name: string;
|
|
31
|
+
pass: boolean;
|
|
32
|
+
reality_check: RealityCheckResult;
|
|
33
|
+
external_report: VerifyAgentWorkInput['report'] | null;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function verifyAgentWork(input: VerifyAgentWorkInput): VerifyAgentWorkResult;
|
|
37
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/core/verifier.ts"],"names":[],"mappings":"AA2CA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,OAAO,CAAC;QACd,SAAS,CAAC,EAAE,aAAa,CAAC;QAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,aAAa,CAAC;QACrB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB;AA4KD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CA8DlF"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { execFileSync } from 'child_process';
|
|
2
|
+
import { randomBytes } from 'crypto';
|
|
3
|
+
import { realpathSync, statSync } from 'fs';
|
|
4
|
+
import { isAbsolute } from 'path';
|
|
5
|
+
import { readConfig } from './config.js';
|
|
6
|
+
import { remember } from './operations.js';
|
|
7
|
+
import { logSkillEvent } from './skill-usage-log.js';
|
|
8
|
+
function isAgenticOrchestrationEnabled() {
|
|
9
|
+
const envVal = process.env.MEMESH_ENABLE_AGENTIC_ORCHESTRATION;
|
|
10
|
+
if (envVal !== undefined)
|
|
11
|
+
return envVal === '1';
|
|
12
|
+
try {
|
|
13
|
+
const cfg = readConfig();
|
|
14
|
+
return cfg.enableAgenticOrchestration === true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function validateWorkdir(workdir) {
|
|
21
|
+
if (!isAbsolute(workdir)) {
|
|
22
|
+
throw new Error(`workdir must be an absolute path, got "${workdir}"`);
|
|
23
|
+
}
|
|
24
|
+
let canonical;
|
|
25
|
+
try {
|
|
26
|
+
canonical = realpathSync(workdir);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
throw new Error(`workdir does not exist or is not accessible: "${workdir}" (${err?.message ?? err})`);
|
|
30
|
+
}
|
|
31
|
+
let stat;
|
|
32
|
+
try {
|
|
33
|
+
stat = statSync(canonical);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
throw new Error(`workdir not stat-able: ${err?.message ?? err}`);
|
|
37
|
+
}
|
|
38
|
+
if (!stat.isDirectory()) {
|
|
39
|
+
throw new Error(`workdir is not a directory: "${canonical}"`);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const inside = execFileSync('git', ['-C', canonical, 'rev-parse', '--is-inside-work-tree'], {
|
|
43
|
+
encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'],
|
|
44
|
+
}).trim();
|
|
45
|
+
if (inside !== 'true') {
|
|
46
|
+
throw new Error('not inside work tree');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new Error(`workdir is not a git working tree: "${canonical}"`);
|
|
51
|
+
}
|
|
52
|
+
return canonical;
|
|
53
|
+
}
|
|
54
|
+
function resolveBase(workdir, explicit) {
|
|
55
|
+
if (explicit)
|
|
56
|
+
return explicit;
|
|
57
|
+
const candidates = ['origin/main', 'main', 'origin/develop', 'develop'];
|
|
58
|
+
for (const ref of candidates) {
|
|
59
|
+
try {
|
|
60
|
+
const sha = execFileSync('git', ['-C', workdir, 'merge-base', 'HEAD', ref], {
|
|
61
|
+
encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'],
|
|
62
|
+
}).trim();
|
|
63
|
+
if (sha)
|
|
64
|
+
return sha;
|
|
65
|
+
}
|
|
66
|
+
catch { }
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return execFileSync('git', ['-C', workdir, 'rev-parse', 'HEAD~1'], {
|
|
70
|
+
encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'],
|
|
71
|
+
}).trim();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function realityCheck(workdir, base, expectedFiles) {
|
|
78
|
+
if (!base) {
|
|
79
|
+
return {
|
|
80
|
+
files_changed: 0,
|
|
81
|
+
expected_files: expectedFiles ?? null,
|
|
82
|
+
match: null,
|
|
83
|
+
base: null,
|
|
84
|
+
pass: false,
|
|
85
|
+
summary: 'no git base discoverable; cannot reality-check',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
let stat = '';
|
|
89
|
+
try {
|
|
90
|
+
stat = execFileSync('git', ['-C', workdir, 'diff', '--stat', `${base}..HEAD`], {
|
|
91
|
+
encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'pipe'],
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
return {
|
|
96
|
+
files_changed: 0,
|
|
97
|
+
expected_files: expectedFiles ?? null,
|
|
98
|
+
match: null,
|
|
99
|
+
base,
|
|
100
|
+
pass: false,
|
|
101
|
+
summary: `git diff failed: ${err?.message ?? 'unknown'}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const fileLines = stat
|
|
105
|
+
.split('\n')
|
|
106
|
+
.filter((l) => l.includes('|') && !l.includes('files changed'));
|
|
107
|
+
const filesChanged = fileLines.length;
|
|
108
|
+
if (expectedFiles == null) {
|
|
109
|
+
return {
|
|
110
|
+
files_changed: filesChanged,
|
|
111
|
+
expected_files: null,
|
|
112
|
+
match: null,
|
|
113
|
+
base,
|
|
114
|
+
pass: true,
|
|
115
|
+
summary: `${filesChanged} files changed (no claim to check against)`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const match = filesChanged === expectedFiles;
|
|
119
|
+
return {
|
|
120
|
+
files_changed: filesChanged,
|
|
121
|
+
expected_files: expectedFiles,
|
|
122
|
+
match,
|
|
123
|
+
base,
|
|
124
|
+
pass: match,
|
|
125
|
+
summary: match
|
|
126
|
+
? `reality OK: ${filesChanged}/${expectedFiles} files`
|
|
127
|
+
: `reality MISMATCH: agent claimed ${expectedFiles}, actual ${filesChanged}`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function buildObservations(input, rc, pass, canonicalWorkdir) {
|
|
131
|
+
const obs = [];
|
|
132
|
+
obs.push(`Agent ${input.agent_id} verification: ${pass ? 'PASS' : 'FAIL'}`);
|
|
133
|
+
obs.push(`Workdir: ${canonicalWorkdir}`);
|
|
134
|
+
if (canonicalWorkdir !== input.workdir) {
|
|
135
|
+
obs.push(`Workdir input (pre-realpath): ${input.workdir}`);
|
|
136
|
+
}
|
|
137
|
+
if (rc.base)
|
|
138
|
+
obs.push(`Base: ${rc.base}`);
|
|
139
|
+
obs.push(`Reality check: ${rc.summary}`);
|
|
140
|
+
const r = input.report;
|
|
141
|
+
if (r) {
|
|
142
|
+
if (r.typecheck)
|
|
143
|
+
obs.push(`Typecheck: ${r.typecheck.pass ? 'PASS' : 'FAIL'}${r.typecheck.summary ? ' — ' + r.typecheck.summary : ''}`);
|
|
144
|
+
if (r.tests)
|
|
145
|
+
obs.push(`Tests: ${r.tests.pass ? 'PASS' : 'FAIL'}${r.tests.summary ? ' — ' + r.tests.summary : ''}`);
|
|
146
|
+
if (r.lint)
|
|
147
|
+
obs.push(`Lint: ${r.lint.pass ? 'PASS' : 'FAIL'}${r.lint.summary ? ' — ' + r.lint.summary : ''}`);
|
|
148
|
+
if (r.build)
|
|
149
|
+
obs.push(`Build: ${r.build.pass ? 'PASS' : 'FAIL'}${r.build.summary ? ' — ' + r.build.summary : ''}`);
|
|
150
|
+
if (r.summary)
|
|
151
|
+
obs.push(`Hook summary: ${r.summary}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
obs.push('External report: not provided (reality-check only)');
|
|
155
|
+
}
|
|
156
|
+
return obs;
|
|
157
|
+
}
|
|
158
|
+
export function verifyAgentWork(input) {
|
|
159
|
+
const canonicalWorkdir = validateWorkdir(input.workdir);
|
|
160
|
+
const base = resolveBase(canonicalWorkdir, input.base);
|
|
161
|
+
const rc = realityCheck(canonicalWorkdir, base, input.claim?.expected_files);
|
|
162
|
+
const reportPass = input.report?.pass ?? true;
|
|
163
|
+
const pass = rc.pass && reportPass;
|
|
164
|
+
const timestamp = new Date().toISOString();
|
|
165
|
+
const safeAgentId = input.agent_id.replace(/[^a-zA-Z0-9_-]/g, '-');
|
|
166
|
+
const suffix = randomBytes(3).toString('hex');
|
|
167
|
+
const entityName = `verification:${safeAgentId}:${timestamp.replace(/[:.]/g, '-')}:${suffix}`;
|
|
168
|
+
const tags = [
|
|
169
|
+
'verification',
|
|
170
|
+
`agent:${safeAgentId}`,
|
|
171
|
+
pass ? 'verification:pass' : 'verification:fail',
|
|
172
|
+
];
|
|
173
|
+
remember({
|
|
174
|
+
name: entityName,
|
|
175
|
+
type: 'verification_record',
|
|
176
|
+
observations: buildObservations(input, rc, pass, canonicalWorkdir),
|
|
177
|
+
tags,
|
|
178
|
+
});
|
|
179
|
+
if (isAgenticOrchestrationEnabled()) {
|
|
180
|
+
logSkillEvent('verify_agent_work_invoked', {
|
|
181
|
+
agent_id_hashed: safeAgentId.slice(0, 8),
|
|
182
|
+
pass,
|
|
183
|
+
files_changed: rc.files_changed,
|
|
184
|
+
has_external_report: Boolean(input.report),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
entity_name: entityName,
|
|
189
|
+
pass,
|
|
190
|
+
reality_check: rc,
|
|
191
|
+
external_report: input.report ?? null,
|
|
192
|
+
timestamp,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/core/verifier.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAoEtC,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAoEtC,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CA8E/D;AAsDD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAG/C"}
|
package/dist/db.js
CHANGED
|
@@ -69,11 +69,25 @@ export function openDatabase(dbPath) {
|
|
|
69
69
|
?? path.join(os.homedir(), '.memesh', 'knowledge-graph.db');
|
|
70
70
|
const dir = path.dirname(resolvedPath);
|
|
71
71
|
fs.mkdirSync(dir, { recursive: true });
|
|
72
|
+
try {
|
|
73
|
+
fs.chmodSync(dir, 0o700);
|
|
74
|
+
}
|
|
75
|
+
catch { }
|
|
72
76
|
db = new Database(resolvedPath);
|
|
73
77
|
db.pragma('journal_mode = WAL');
|
|
74
78
|
db.pragma('foreign_keys = ON');
|
|
75
79
|
db.exec(SCHEMA_SQL);
|
|
76
80
|
db.exec(FTS_SQL);
|
|
81
|
+
try {
|
|
82
|
+
process.umask(0o077);
|
|
83
|
+
}
|
|
84
|
+
catch { }
|
|
85
|
+
for (const suffix of ['', '-wal', '-shm']) {
|
|
86
|
+
try {
|
|
87
|
+
fs.chmodSync(`${resolvedPath}${suffix}`, 0o600);
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
}
|
|
77
91
|
const columns = db.prepare("PRAGMA table_info(entities)").all();
|
|
78
92
|
if (!columns.some((c) => c.name === 'status')) {
|
|
79
93
|
db.exec("ALTER TABLE entities ADD COLUMN status TEXT NOT NULL DEFAULT 'active'");
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDlB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;CAKf,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,YAAY,GAAG,MAAM;WACtB,OAAO,CAAC,GAAG,CAAC,cAAc;WAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAE9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAIrG,qBAAa,cAAc;IACb,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAChG,IAAI;IAcP,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACtF,MAAM;IA6DT,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAcxD,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,GAAG,GACb,IAAI;IA2BP,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwCtC,gBAAgB,CACd,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACrE,MAAM,EAAE;IA4GX,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE;IAmB5C,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE;IAgHtD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAQtC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAI9C,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAmBnF,OAAO,CAAC,eAAe;IAgCvB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoBnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE;IAgC1F,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAA;KAAE;IA8BtD,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,UAAU;CAcnB"}
|
package/dist/knowledge-graph.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { findConflicts, trackAccess } from './storage/conflicts.js';
|
|
2
|
+
import { insertFtsRow, removeFromFts } from './storage/fts-index.js';
|
|
1
3
|
export class KnowledgeGraph {
|
|
2
4
|
db;
|
|
3
5
|
constructor(db) {
|
|
@@ -309,35 +311,10 @@ export class KnowledgeGraph {
|
|
|
309
311
|
return results;
|
|
310
312
|
}
|
|
311
313
|
trackAccess(entityIds) {
|
|
312
|
-
|
|
313
|
-
return;
|
|
314
|
-
const now = new Date().toISOString();
|
|
315
|
-
const stmt = this.db.prepare('UPDATE entities SET access_count = access_count + 1, last_accessed_at = ? WHERE id = ?');
|
|
316
|
-
const txn = this.db.transaction(() => {
|
|
317
|
-
for (const id of entityIds) {
|
|
318
|
-
stmt.run(now, id);
|
|
319
|
-
}
|
|
320
|
-
});
|
|
321
|
-
txn();
|
|
314
|
+
trackAccess(this.db, entityIds);
|
|
322
315
|
}
|
|
323
316
|
findConflicts(entityNames) {
|
|
324
|
-
|
|
325
|
-
return [];
|
|
326
|
-
const conflicts = [];
|
|
327
|
-
const placeholders = entityNames.map(() => '?').join(',');
|
|
328
|
-
const rows = this.db.prepare(`
|
|
329
|
-
SELECT e_from.name AS from_name, e_to.name AS to_name
|
|
330
|
-
FROM relations r
|
|
331
|
-
JOIN entities e_from ON r.from_entity_id = e_from.id
|
|
332
|
-
JOIN entities e_to ON r.to_entity_id = e_to.id
|
|
333
|
-
WHERE r.relation_type = 'contradicts'
|
|
334
|
-
AND e_from.name IN (${placeholders})
|
|
335
|
-
AND e_to.name IN (${placeholders})
|
|
336
|
-
`).all(...entityNames, ...entityNames);
|
|
337
|
-
for (const row of rows) {
|
|
338
|
-
conflicts.push(`"${row.from_name}" contradicts "${row.to_name}"`);
|
|
339
|
-
}
|
|
340
|
-
return conflicts;
|
|
317
|
+
return findConflicts(this.db, entityNames);
|
|
341
318
|
}
|
|
342
319
|
listRecent(limit, includeArchived, namespace) {
|
|
343
320
|
const statusFilter = includeArchived ? '' : "AND status = 'active'";
|
|
@@ -406,13 +383,7 @@ export class KnowledgeGraph {
|
|
|
406
383
|
.prepare('SELECT content FROM observations WHERE entity_id = ?')
|
|
407
384
|
.all(row.id);
|
|
408
385
|
const obsText = allObs.map((o) => o.content).join(' ');
|
|
409
|
-
|
|
410
|
-
this.db
|
|
411
|
-
.prepare("INSERT INTO entities_fts (entities_fts, rowid, name, observations) VALUES('delete', ?, ?, ?)")
|
|
412
|
-
.run(row.id, name, obsText);
|
|
413
|
-
}
|
|
414
|
-
catch {
|
|
415
|
-
}
|
|
386
|
+
removeFromFts(this.db, row.id, name, obsText);
|
|
416
387
|
try {
|
|
417
388
|
this.db
|
|
418
389
|
.prepare('DELETE FROM entities_vec WHERE rowid = ?')
|
|
@@ -457,9 +428,7 @@ export class KnowledgeGraph {
|
|
|
457
428
|
.prepare('SELECT content FROM observations WHERE entity_id = ?')
|
|
458
429
|
.all(row.id);
|
|
459
430
|
const obsText = allObs.map((o) => o.content).join(' ');
|
|
460
|
-
this.db
|
|
461
|
-
.prepare("INSERT INTO entities_fts (entities_fts, rowid, name, observations) VALUES('delete', ?, ?, ?)")
|
|
462
|
-
.run(row.id, name, obsText);
|
|
431
|
+
removeFromFts(this.db, row.id, name, obsText);
|
|
463
432
|
this.db.prepare('DELETE FROM entities WHERE id = ?').run(row.id);
|
|
464
433
|
return { deleted: true };
|
|
465
434
|
}
|
|
@@ -476,17 +445,13 @@ export class KnowledgeGraph {
|
|
|
476
445
|
}
|
|
477
446
|
rebuildFts(entityId, entityName, previousObsText) {
|
|
478
447
|
if (previousObsText !== undefined) {
|
|
479
|
-
this.db
|
|
480
|
-
.prepare("INSERT INTO entities_fts (entities_fts, rowid, name, observations) VALUES('delete', ?, ?, ?)")
|
|
481
|
-
.run(entityId, entityName, previousObsText);
|
|
448
|
+
removeFromFts(this.db, entityId, entityName, previousObsText);
|
|
482
449
|
}
|
|
483
450
|
const allObs = this.db
|
|
484
451
|
.prepare('SELECT content FROM observations WHERE entity_id = ?')
|
|
485
452
|
.all(entityId);
|
|
486
453
|
const obsText = allObs.map((o) => o.content).join(' ');
|
|
487
|
-
this.db
|
|
488
|
-
.prepare('INSERT INTO entities_fts (rowid, name, observations) VALUES (?, ?, ?)')
|
|
489
|
-
.run(entityId, entityName, obsText);
|
|
454
|
+
insertFtsRow(this.db, entityId, entityName, obsText);
|
|
490
455
|
}
|
|
491
456
|
}
|
|
492
457
|
//# sourceMappingURL=knowledge-graph.js.map
|