@knowledgine/core 0.1.0 → 0.2.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/dist/config/config-loader.d.ts +22 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +73 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/embedding/model-downloader.d.ts +34 -0
- package/dist/embedding/model-downloader.d.ts.map +1 -0
- package/dist/embedding/model-downloader.js +168 -0
- package/dist/embedding/model-downloader.js.map +1 -0
- package/dist/embedding/onnx-embedding-provider.js +2 -2
- package/dist/embedding/onnx-embedding-provider.js.map +1 -1
- package/dist/feedback/feedback-learner.d.ts +29 -0
- package/dist/feedback/feedback-learner.d.ts.map +1 -0
- package/dist/feedback/feedback-learner.js +88 -0
- package/dist/feedback/feedback-learner.js.map +1 -0
- package/dist/feedback/feedback-repository.d.ts +41 -0
- package/dist/feedback/feedback-repository.d.ts.map +1 -0
- package/dist/feedback/feedback-repository.js +90 -0
- package/dist/feedback/feedback-repository.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +3 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/graph/entity-extractor.d.ts +8 -2
- package/dist/graph/entity-extractor.d.ts.map +1 -1
- package/dist/graph/entity-extractor.js +94 -12
- package/dist/graph/entity-extractor.js.map +1 -1
- package/dist/graph/graph-repository.d.ts +9 -0
- package/dist/graph/graph-repository.d.ts.map +1 -1
- package/dist/graph/graph-repository.js +49 -14
- package/dist/graph/graph-repository.js.map +1 -1
- package/dist/index.d.ts +20 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -4
- package/dist/index.js.map +1 -1
- package/dist/provenance/provenance-repository.d.ts +47 -0
- package/dist/provenance/provenance-repository.d.ts.map +1 -0
- package/dist/provenance/provenance-repository.js +121 -0
- package/dist/provenance/provenance-repository.js.map +1 -0
- package/dist/search/hybrid-searcher.js +2 -2
- package/dist/search/hybrid-searcher.js.map +1 -1
- package/dist/search/knowledge-searcher.d.ts.map +1 -1
- package/dist/search/knowledge-searcher.js +9 -1
- package/dist/search/knowledge-searcher.js.map +1 -1
- package/dist/search/semantic-searcher.d.ts.map +1 -1
- package/dist/search/semantic-searcher.js +3 -2
- package/dist/search/semantic-searcher.js.map +1 -1
- package/dist/services/knowledge-service.d.ts +128 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +170 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/storage/database.d.ts +5 -0
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +34 -4
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/knowledge-repository.d.ts +17 -0
- package/dist/storage/knowledge-repository.d.ts.map +1 -1
- package/dist/storage/knowledge-repository.js +47 -7
- package/dist/storage/knowledge-repository.js.map +1 -1
- package/dist/storage/migrations/005a_events_layer.d.ts +3 -0
- package/dist/storage/migrations/005a_events_layer.d.ts.map +1 -0
- package/dist/storage/migrations/005a_events_layer.js +55 -0
- package/dist/storage/migrations/005a_events_layer.js.map +1 -0
- package/dist/storage/migrations/005b_bitemporal.d.ts +3 -0
- package/dist/storage/migrations/005b_bitemporal.d.ts.map +1 -0
- package/dist/storage/migrations/005b_bitemporal.js +53 -0
- package/dist/storage/migrations/005b_bitemporal.js.map +1 -0
- package/dist/storage/migrations/005c_provenance.d.ts +3 -0
- package/dist/storage/migrations/005c_provenance.d.ts.map +1 -0
- package/dist/storage/migrations/005c_provenance.js +56 -0
- package/dist/storage/migrations/005c_provenance.js.map +1 -0
- package/dist/storage/migrations/006_extraction_feedback.d.ts +3 -0
- package/dist/storage/migrations/006_extraction_feedback.d.ts.map +1 -0
- package/dist/storage/migrations/006_extraction_feedback.js +30 -0
- package/dist/storage/migrations/006_extraction_feedback.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
export interface ProvenanceRecord {
|
|
3
|
+
id: number;
|
|
4
|
+
entityUri: string;
|
|
5
|
+
activityType: "ingest" | "extract" | "link" | "embed";
|
|
6
|
+
agent: string;
|
|
7
|
+
inputUris: string[];
|
|
8
|
+
outputUris: string[];
|
|
9
|
+
startedAt: string;
|
|
10
|
+
endedAt?: string;
|
|
11
|
+
metadata?: Record<string, unknown>;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface FileTimelineEntry {
|
|
15
|
+
id: number;
|
|
16
|
+
filePath: string;
|
|
17
|
+
eventType: "created" | "modified" | "deleted" | "renamed";
|
|
18
|
+
eventId?: number;
|
|
19
|
+
occurredAt: string;
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export interface Snapshot {
|
|
23
|
+
id: number;
|
|
24
|
+
snapshotAt: string;
|
|
25
|
+
noteCount: number;
|
|
26
|
+
eventCount: number;
|
|
27
|
+
entityCount: number;
|
|
28
|
+
metadata?: Record<string, unknown>;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}
|
|
31
|
+
export declare class ProvenanceRepository {
|
|
32
|
+
private db;
|
|
33
|
+
constructor(db: Database.Database);
|
|
34
|
+
record(entry: Omit<ProvenanceRecord, "id" | "createdAt">): number;
|
|
35
|
+
getByEntityUri(uri: string): ProvenanceRecord[];
|
|
36
|
+
getByAgent(agent: string, limit?: number): ProvenanceRecord[];
|
|
37
|
+
getByActivity(type: ProvenanceRecord["activityType"], limit?: number): ProvenanceRecord[];
|
|
38
|
+
recordFileEvent(filePath: string, eventType: FileTimelineEntry["eventType"], eventId?: number, occurredAt?: string): number;
|
|
39
|
+
getFileTimeline(filePath: string): FileTimelineEntry[];
|
|
40
|
+
createSnapshot(snapshotAt: string, stats: {
|
|
41
|
+
noteCount: number;
|
|
42
|
+
eventCount: number;
|
|
43
|
+
entityCount: number;
|
|
44
|
+
}): number;
|
|
45
|
+
getSnapshots(limit?: number): Snapshot[];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=provenance-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-repository.d.ts","sourceRoot":"","sources":["../../src/provenance/provenance-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AA8ED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIzC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,MAAM;IAsBjE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAO/C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,gBAAgB,EAAE;IAO1D,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,KAAK,SAAM,GAAG,gBAAgB,EAAE;IAStF,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,EACzC,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM;IAaT,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAStD,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GACpE,MAAM;IAaT,YAAY,CAAC,KAAK,SAAM,GAAG,QAAQ,EAAE;CAMtC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { DatabaseError } from "../errors.js";
|
|
2
|
+
function rowToProvenance(row) {
|
|
3
|
+
return {
|
|
4
|
+
id: row.id,
|
|
5
|
+
entityUri: row.entity_uri,
|
|
6
|
+
activityType: row.activity_type,
|
|
7
|
+
agent: row.agent,
|
|
8
|
+
inputUris: JSON.parse(row.input_uris),
|
|
9
|
+
outputUris: JSON.parse(row.output_uris),
|
|
10
|
+
startedAt: row.started_at,
|
|
11
|
+
endedAt: row.ended_at ?? undefined,
|
|
12
|
+
metadata: row.metadata_json
|
|
13
|
+
? JSON.parse(row.metadata_json)
|
|
14
|
+
: undefined,
|
|
15
|
+
createdAt: row.created_at,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function rowToFileTimeline(row) {
|
|
19
|
+
return {
|
|
20
|
+
id: row.id,
|
|
21
|
+
filePath: row.file_path,
|
|
22
|
+
eventType: row.event_type,
|
|
23
|
+
eventId: row.event_id ?? undefined,
|
|
24
|
+
occurredAt: row.occurred_at,
|
|
25
|
+
metadata: row.metadata_json
|
|
26
|
+
? JSON.parse(row.metadata_json)
|
|
27
|
+
: undefined,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function rowToSnapshot(row) {
|
|
31
|
+
return {
|
|
32
|
+
id: row.id,
|
|
33
|
+
snapshotAt: row.snapshot_at,
|
|
34
|
+
noteCount: row.note_count,
|
|
35
|
+
eventCount: row.event_count,
|
|
36
|
+
entityCount: row.entity_count,
|
|
37
|
+
metadata: row.metadata_json
|
|
38
|
+
? JSON.parse(row.metadata_json)
|
|
39
|
+
: undefined,
|
|
40
|
+
createdAt: row.created_at,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export class ProvenanceRepository {
|
|
44
|
+
db;
|
|
45
|
+
constructor(db) {
|
|
46
|
+
this.db = db;
|
|
47
|
+
}
|
|
48
|
+
// ── 来歴記録 ────────────────────────────────────────────────────
|
|
49
|
+
record(entry) {
|
|
50
|
+
try {
|
|
51
|
+
const stmt = this.db.prepare(`
|
|
52
|
+
INSERT INTO provenance (entity_uri, activity_type, agent, input_uris, output_uris, started_at, ended_at, metadata_json)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
54
|
+
`);
|
|
55
|
+
const info = stmt.run(entry.entityUri, entry.activityType, entry.agent, JSON.stringify(entry.inputUris ?? []), JSON.stringify(entry.outputUris ?? []), entry.startedAt, entry.endedAt ?? null, entry.metadata ? JSON.stringify(entry.metadata) : null);
|
|
56
|
+
return Number(info.lastInsertRowid);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new DatabaseError("provenance.record", error, { entityUri: entry.entityUri });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getByEntityUri(uri) {
|
|
63
|
+
const rows = this.db
|
|
64
|
+
.prepare("SELECT * FROM provenance WHERE entity_uri = ? ORDER BY started_at DESC")
|
|
65
|
+
.all(uri);
|
|
66
|
+
return rows.map(rowToProvenance);
|
|
67
|
+
}
|
|
68
|
+
getByAgent(agent, limit = 100) {
|
|
69
|
+
const rows = this.db
|
|
70
|
+
.prepare("SELECT * FROM provenance WHERE agent = ? ORDER BY started_at DESC LIMIT ?")
|
|
71
|
+
.all(agent, limit);
|
|
72
|
+
return rows.map(rowToProvenance);
|
|
73
|
+
}
|
|
74
|
+
getByActivity(type, limit = 100) {
|
|
75
|
+
const rows = this.db
|
|
76
|
+
.prepare("SELECT * FROM provenance WHERE activity_type = ? ORDER BY started_at DESC LIMIT ?")
|
|
77
|
+
.all(type, limit);
|
|
78
|
+
return rows.map(rowToProvenance);
|
|
79
|
+
}
|
|
80
|
+
// ── ファイルタイムライン ──────────────────────────────────────────
|
|
81
|
+
recordFileEvent(filePath, eventType, eventId, occurredAt) {
|
|
82
|
+
try {
|
|
83
|
+
const stmt = this.db.prepare(`
|
|
84
|
+
INSERT INTO file_timeline (file_path, event_type, event_id, occurred_at)
|
|
85
|
+
VALUES (?, ?, ?, COALESCE(?, datetime('now')))
|
|
86
|
+
`);
|
|
87
|
+
const info = stmt.run(filePath, eventType, eventId ?? null, occurredAt ?? null);
|
|
88
|
+
return Number(info.lastInsertRowid);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new DatabaseError("provenance.recordFileEvent", error, { filePath });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getFileTimeline(filePath) {
|
|
95
|
+
const rows = this.db
|
|
96
|
+
.prepare("SELECT * FROM file_timeline WHERE file_path = ? ORDER BY occurred_at ASC")
|
|
97
|
+
.all(filePath);
|
|
98
|
+
return rows.map(rowToFileTimeline);
|
|
99
|
+
}
|
|
100
|
+
// ── スナップショット ─────────────────────────────────────────────
|
|
101
|
+
createSnapshot(snapshotAt, stats) {
|
|
102
|
+
try {
|
|
103
|
+
const stmt = this.db.prepare(`
|
|
104
|
+
INSERT INTO snapshots (snapshot_at, note_count, event_count, entity_count)
|
|
105
|
+
VALUES (?, ?, ?, ?)
|
|
106
|
+
`);
|
|
107
|
+
const info = stmt.run(snapshotAt, stats.noteCount, stats.eventCount, stats.entityCount);
|
|
108
|
+
return Number(info.lastInsertRowid);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
throw new DatabaseError("provenance.createSnapshot", error, { snapshotAt });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
getSnapshots(limit = 100) {
|
|
115
|
+
const rows = this.db
|
|
116
|
+
.prepare("SELECT * FROM snapshots ORDER BY snapshot_at DESC LIMIT ?")
|
|
117
|
+
.all(limit);
|
|
118
|
+
return rows.map(rowToSnapshot);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=provenance-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-repository.js","sourceRoot":"","sources":["../../src/provenance/provenance-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,10 +31,10 @@ export class HybridSearcher {
|
|
|
31
31
|
ftsMap.set(note.id, 1 - normalized);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
// ベクトルスコアマップ (
|
|
34
|
+
// ベクトルスコアマップ (distance → 0-1 score)
|
|
35
35
|
const vecMap = new Map();
|
|
36
36
|
for (const { note_id, distance } of vecResults) {
|
|
37
|
-
vecMap.set(note_id, 1
|
|
37
|
+
vecMap.set(note_id, 1 / (1 + distance));
|
|
38
38
|
}
|
|
39
39
|
// 全ノートIDを統合
|
|
40
40
|
const allIds = new Set([...ftsMap.keys(), ...vecMap.keys()]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-searcher.js","sourceRoot":"","sources":["../../src/search/hybrid-searcher.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,cAAc;IAKf;IACA;IACA;IANV;;OAEG;IACH,YACU,UAA+B,EAC/B,iBAAoC,EACpC,QAAgB,GAAG;QAFnB,eAAU,GAAV,UAAU,CAAqB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,UAAK,GAAL,KAAK,CAAc;IAC1B,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QAC5C,cAAc;QACd,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,iBAAiB;iBACnB,KAAK,CAAC,KAAK,CAAC;iBACZ,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;SACjE,CAAC,CAAC;QAEH,sCAAsC;QACtC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;YAEhC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;gBACrC,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxE,kCAAkC;gBAClC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"hybrid-searcher.js","sourceRoot":"","sources":["../../src/search/hybrid-searcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-searcher.d.ts","sourceRoot":"","sources":["../../src/search/knowledge-searcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAI5E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAG9B,UAAU,EAAE,mBAAmB,EACvC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,WAAW,GAAE,MAAY;IAQrB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-searcher.d.ts","sourceRoot":"","sources":["../../src/search/knowledge-searcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAI5E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAG9B,UAAU,EAAE,mBAAmB,EACvC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,WAAW,GAAE,MAAY;IAQrB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmDvD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI7D,YAAY,CAAC,IAAI,SAAI,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAYjE,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB;CAWF"}
|
|
@@ -22,6 +22,10 @@ export class KnowledgeSearcher {
|
|
|
22
22
|
if (mode === "hybrid" && this.hybridSearcher) {
|
|
23
23
|
return this.hybridSearcher.search(query, limit);
|
|
24
24
|
}
|
|
25
|
+
// Fall back to keyword search when semantic/hybrid requested but provider unavailable
|
|
26
|
+
const fellBack = mode !== "keyword" &&
|
|
27
|
+
((mode === "semantic" && !this.semanticSearcher) ||
|
|
28
|
+
(mode === "hybrid" && !this.hybridSearcher));
|
|
25
29
|
// keyword mode (デフォルト) — FTS5
|
|
26
30
|
const rows = this.repository.searchNotesWithRank(query, limit);
|
|
27
31
|
if (rows.length === 0) {
|
|
@@ -35,10 +39,14 @@ export class KnowledgeSearcher {
|
|
|
35
39
|
return rows.map(({ note, rank }) => {
|
|
36
40
|
const normalized = range > 0 ? (Math.abs(rank) - minRank) / range : 1.0;
|
|
37
41
|
const score = 1 - normalized;
|
|
42
|
+
const reasons = [`キーワード一致: "${query}"`];
|
|
43
|
+
if (fellBack) {
|
|
44
|
+
reasons.push(`Warning: ${mode} search is not available. Showing keyword results instead. Run 'knowledgine upgrade --semantic' to enable.`);
|
|
45
|
+
}
|
|
38
46
|
return {
|
|
39
47
|
note,
|
|
40
48
|
score,
|
|
41
|
-
matchReason:
|
|
49
|
+
matchReason: reasons,
|
|
42
50
|
};
|
|
43
51
|
});
|
|
44
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-searcher.js","sourceRoot":"","sources":["../../src/search/knowledge-searcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiBtD,MAAM,OAAO,iBAAiB;IAKlB;IAJF,gBAAgB,CAAoB;IACpC,cAAc,CAAkB;IAExC,YACU,UAA+B,EACvC,iBAAqC,EACrC,cAAsB,GAAG;QAFjB,eAAU,GAAV,UAAU,CAAqB;QAIvC,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;QAExD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,8BAA8B;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;QAEhC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YACjC,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACxE,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC;YAC7B,OAAO;gBACL,IAAI;gBACJ,KAAK;gBACL,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"knowledge-searcher.js","sourceRoot":"","sources":["../../src/search/knowledge-searcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-searcher.d.ts","sourceRoot":"","sources":["../../src/search/semantic-searcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,iBAAiB;gBADjB,UAAU,EAAE,mBAAmB,EAC/B,iBAAiB,EAAE,iBAAiB;IAGxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-searcher.d.ts","sourceRoot":"","sources":["../../src/search/semantic-searcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,iBAAiB;gBADjB,UAAU,EAAE,mBAAmB,EAC/B,iBAAiB,EAAE,iBAAiB;IAGxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CA0BjF"}
|
|
@@ -16,8 +16,9 @@ export class SemanticSearcher {
|
|
|
16
16
|
const note = this.repository.getNoteById(note_id);
|
|
17
17
|
if (!note)
|
|
18
18
|
continue;
|
|
19
|
-
//
|
|
20
|
-
|
|
19
|
+
// sqlite-vec distance (0=identical, higher=less similar)
|
|
20
|
+
// Normalize to 0-1 score where 1=most similar
|
|
21
|
+
const score = Math.max(0, 1 / (1 + distance));
|
|
21
22
|
results.push({
|
|
22
23
|
note,
|
|
23
24
|
score,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-searcher.js","sourceRoot":"","sources":["../../src/search/semantic-searcher.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,gBAAgB;IAEjB;IACA;IAFV,YACU,UAA+B,EAC/B,iBAAoC;QADpC,eAAU,GAAV,UAAU,CAAqB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC3C,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QAC5C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAEzE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,
|
|
1
|
+
{"version":3,"file":"semantic-searcher.js","sourceRoot":"","sources":["../../src/search/semantic-searcher.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,gBAAgB;IAEjB;IACA;IAFV,YACU,UAA+B,EAC/B,iBAAoC;QADpC,eAAU,GAAV,UAAU,CAAqB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC3C,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE;QAC5C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAEzE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,yDAAyD;YACzD,8CAA8C;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAE9C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,KAAK;gBACL,WAAW,EAAE,CAAC,eAAe,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { KnowledgeRepository } from "../storage/knowledge-repository.js";
|
|
2
|
+
import type { GraphRepository } from "../graph/graph-repository.js";
|
|
3
|
+
import type { FeedbackRepository, FeedbackRecord } from "../feedback/feedback-repository.js";
|
|
4
|
+
import type { FeedbackErrorType } from "../types.js";
|
|
5
|
+
import type { EmbeddingProvider } from "../embedding/embedding-provider.js";
|
|
6
|
+
export interface KnowledgeServiceOptions {
|
|
7
|
+
repository: KnowledgeRepository;
|
|
8
|
+
rootPath?: string;
|
|
9
|
+
embeddingProvider?: EmbeddingProvider;
|
|
10
|
+
graphRepository?: GraphRepository;
|
|
11
|
+
feedbackRepository?: FeedbackRepository;
|
|
12
|
+
}
|
|
13
|
+
export interface SearchKnowledgeResult {
|
|
14
|
+
query: string;
|
|
15
|
+
mode: "keyword" | "semantic" | "hybrid";
|
|
16
|
+
totalResults: number;
|
|
17
|
+
results: Array<{
|
|
18
|
+
noteId: number;
|
|
19
|
+
filePath: string;
|
|
20
|
+
title: string;
|
|
21
|
+
score: number;
|
|
22
|
+
matchReason: string[];
|
|
23
|
+
createdAt: string;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface FindRelatedResult {
|
|
27
|
+
noteId: number;
|
|
28
|
+
relatedNotes: Array<{
|
|
29
|
+
noteId: number;
|
|
30
|
+
filePath: string;
|
|
31
|
+
title: string;
|
|
32
|
+
score: number;
|
|
33
|
+
reasons: string[];
|
|
34
|
+
}>;
|
|
35
|
+
problemSolutionPairs: Array<{
|
|
36
|
+
id: number;
|
|
37
|
+
problemNoteId: number;
|
|
38
|
+
solutionNoteId: number;
|
|
39
|
+
problemPattern: string;
|
|
40
|
+
solutionPattern: string;
|
|
41
|
+
confidence: number;
|
|
42
|
+
}>;
|
|
43
|
+
graphRelations: Array<{
|
|
44
|
+
entityId: number;
|
|
45
|
+
name: string;
|
|
46
|
+
entityType: string;
|
|
47
|
+
relatedEntities: Array<{
|
|
48
|
+
id: number;
|
|
49
|
+
name: string;
|
|
50
|
+
entityType: string;
|
|
51
|
+
hops: number;
|
|
52
|
+
}>;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
export interface StatsResult {
|
|
56
|
+
totalNotes: number;
|
|
57
|
+
totalPatterns: number;
|
|
58
|
+
totalLinks: number;
|
|
59
|
+
totalPairs: number;
|
|
60
|
+
patternsByType: Record<string, number>;
|
|
61
|
+
embeddingStatus: {
|
|
62
|
+
available: boolean;
|
|
63
|
+
notesWithoutEmbeddings: number | null;
|
|
64
|
+
};
|
|
65
|
+
graphStats: {
|
|
66
|
+
totalEntities: number;
|
|
67
|
+
totalRelations: number;
|
|
68
|
+
totalObservations: number;
|
|
69
|
+
entitiesByType: Record<string, number>;
|
|
70
|
+
relationsByType: Record<string, number>;
|
|
71
|
+
} | null;
|
|
72
|
+
}
|
|
73
|
+
export interface SearchEntitiesResult {
|
|
74
|
+
query: string;
|
|
75
|
+
totalResults: number;
|
|
76
|
+
entities: Array<{
|
|
77
|
+
id: number;
|
|
78
|
+
name: string;
|
|
79
|
+
entityType: string;
|
|
80
|
+
description?: string;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
}>;
|
|
83
|
+
}
|
|
84
|
+
export interface ReportErrorResult {
|
|
85
|
+
message: string;
|
|
86
|
+
feedback: FeedbackRecord;
|
|
87
|
+
}
|
|
88
|
+
export interface SearchInput {
|
|
89
|
+
query: string;
|
|
90
|
+
limit?: number;
|
|
91
|
+
mode?: "keyword" | "semantic" | "hybrid";
|
|
92
|
+
}
|
|
93
|
+
export interface FindRelatedInput {
|
|
94
|
+
noteId?: number;
|
|
95
|
+
filePath?: string;
|
|
96
|
+
limit?: number;
|
|
97
|
+
maxHops?: number;
|
|
98
|
+
}
|
|
99
|
+
export interface SearchEntitiesInput {
|
|
100
|
+
query: string;
|
|
101
|
+
limit?: number;
|
|
102
|
+
}
|
|
103
|
+
export interface GetEntityGraphInput {
|
|
104
|
+
entityId?: number;
|
|
105
|
+
entityName?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ReportErrorInput {
|
|
108
|
+
entityName: string;
|
|
109
|
+
errorType: FeedbackErrorType;
|
|
110
|
+
entityType?: string;
|
|
111
|
+
correctType?: string;
|
|
112
|
+
noteId?: number;
|
|
113
|
+
details?: string;
|
|
114
|
+
}
|
|
115
|
+
export declare class KnowledgeService {
|
|
116
|
+
private options;
|
|
117
|
+
private searcher;
|
|
118
|
+
private linkGenerator;
|
|
119
|
+
constructor(options: KnowledgeServiceOptions);
|
|
120
|
+
search(input: SearchInput): Promise<SearchKnowledgeResult>;
|
|
121
|
+
findRelated(input: FindRelatedInput): Promise<FindRelatedResult>;
|
|
122
|
+
getStats(): StatsResult;
|
|
123
|
+
searchEntities(input: SearchEntitiesInput): SearchEntitiesResult;
|
|
124
|
+
getEntityGraph(input: GetEntityGraphInput): import("../types.js").EntityWithGraph | undefined;
|
|
125
|
+
reportExtractionError(input: ReportErrorInput): ReportErrorResult;
|
|
126
|
+
private validateFilePath;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=knowledge-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-service.d.ts","sourceRoot":"","sources":["../../src/services/knowledge-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { realpathSync } from "fs";
|
|
2
|
+
import { relative, isAbsolute } from "path";
|
|
3
|
+
import { KnowledgeSearcher } from "../search/knowledge-searcher.js";
|
|
4
|
+
import { LocalLinkGenerator } from "../search/link-generator.js";
|
|
5
|
+
export class KnowledgeService {
|
|
6
|
+
options;
|
|
7
|
+
searcher;
|
|
8
|
+
linkGenerator;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
this.searcher = new KnowledgeSearcher(options.repository, options.embeddingProvider);
|
|
12
|
+
this.linkGenerator = new LocalLinkGenerator(options.repository, options.graphRepository);
|
|
13
|
+
}
|
|
14
|
+
async search(input) {
|
|
15
|
+
const { query, limit = 20, mode = "keyword" } = input;
|
|
16
|
+
const results = await this.searcher.search({ query, limit, mode });
|
|
17
|
+
return {
|
|
18
|
+
query,
|
|
19
|
+
mode,
|
|
20
|
+
totalResults: results.length,
|
|
21
|
+
results: results.map((r) => ({
|
|
22
|
+
noteId: r.note.id,
|
|
23
|
+
filePath: r.note.file_path,
|
|
24
|
+
title: r.note.title,
|
|
25
|
+
score: r.score,
|
|
26
|
+
matchReason: r.matchReason,
|
|
27
|
+
createdAt: r.note.created_at,
|
|
28
|
+
})),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async findRelated(input) {
|
|
32
|
+
const { limit = 5, maxHops = 1 } = input;
|
|
33
|
+
let resolvedNoteId = input.noteId;
|
|
34
|
+
if (!resolvedNoteId && input.filePath) {
|
|
35
|
+
let normalizedPath = input.filePath;
|
|
36
|
+
if (this.options.rootPath && isAbsolute(normalizedPath)) {
|
|
37
|
+
normalizedPath = relative(this.options.rootPath, normalizedPath);
|
|
38
|
+
}
|
|
39
|
+
// パストラバーサル保護
|
|
40
|
+
if (normalizedPath.startsWith("..") || isAbsolute(normalizedPath)) {
|
|
41
|
+
throw new Error("Invalid file path: outside of root directory");
|
|
42
|
+
}
|
|
43
|
+
const note = this.options.repository.getNoteByPath(normalizedPath);
|
|
44
|
+
if (!note) {
|
|
45
|
+
throw new Error(`Note not found for path: ${input.filePath}`);
|
|
46
|
+
}
|
|
47
|
+
resolvedNoteId = note.id;
|
|
48
|
+
}
|
|
49
|
+
if (!resolvedNoteId) {
|
|
50
|
+
throw new Error("Either noteId or filePath is required");
|
|
51
|
+
}
|
|
52
|
+
const relatedNotes = this.linkGenerator.findRelatedNotes(resolvedNoteId, limit);
|
|
53
|
+
const problemSolutionPairs = this.options.repository.getProblemSolutionPairsByNoteId(resolvedNoteId);
|
|
54
|
+
let graphRelations = [];
|
|
55
|
+
if (this.options.graphRepository) {
|
|
56
|
+
const linkedEntities = this.options.graphRepository.getLinkedEntities(resolvedNoteId);
|
|
57
|
+
graphRelations = linkedEntities.map((entity) => ({
|
|
58
|
+
entityId: entity.id,
|
|
59
|
+
name: entity.name,
|
|
60
|
+
entityType: entity.entityType,
|
|
61
|
+
relatedEntities: this.options
|
|
62
|
+
.graphRepository.findRelatedEntities(entity.id, maxHops)
|
|
63
|
+
.map((e) => ({
|
|
64
|
+
id: e.id,
|
|
65
|
+
name: e.name,
|
|
66
|
+
entityType: e.entityType,
|
|
67
|
+
hops: e.hops,
|
|
68
|
+
})),
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
noteId: resolvedNoteId,
|
|
73
|
+
relatedNotes: relatedNotes.map((n) => ({
|
|
74
|
+
noteId: n.id,
|
|
75
|
+
filePath: n.filePath,
|
|
76
|
+
title: n.title,
|
|
77
|
+
score: n.similarity,
|
|
78
|
+
reasons: [n.reason],
|
|
79
|
+
})),
|
|
80
|
+
problemSolutionPairs: problemSolutionPairs.map((p) => ({
|
|
81
|
+
id: p.id ?? 0,
|
|
82
|
+
problemNoteId: p.problemNoteId,
|
|
83
|
+
solutionNoteId: p.solutionNoteId,
|
|
84
|
+
problemPattern: p.problemPattern,
|
|
85
|
+
solutionPattern: p.solutionPattern,
|
|
86
|
+
confidence: p.confidence,
|
|
87
|
+
})),
|
|
88
|
+
graphRelations,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
getStats() {
|
|
92
|
+
const stats = this.options.repository.getStats();
|
|
93
|
+
const notesWithoutEmbeddings = this.options.embeddingProvider
|
|
94
|
+
? this.options.repository.getNotesWithoutEmbeddings().length
|
|
95
|
+
: null;
|
|
96
|
+
const graphStats = this.options.graphRepository
|
|
97
|
+
? this.options.graphRepository.getGraphStats()
|
|
98
|
+
: null;
|
|
99
|
+
return {
|
|
100
|
+
...stats,
|
|
101
|
+
embeddingStatus: {
|
|
102
|
+
available: this.options.embeddingProvider != null,
|
|
103
|
+
notesWithoutEmbeddings,
|
|
104
|
+
},
|
|
105
|
+
graphStats,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
searchEntities(input) {
|
|
109
|
+
if (!this.options.graphRepository) {
|
|
110
|
+
return { query: input.query, totalResults: 0, entities: [] };
|
|
111
|
+
}
|
|
112
|
+
const entities = this.options.graphRepository.searchEntities(input.query, input.limit ?? 20);
|
|
113
|
+
return {
|
|
114
|
+
query: input.query,
|
|
115
|
+
totalResults: entities.length,
|
|
116
|
+
entities: entities.map((e) => ({
|
|
117
|
+
id: e.id,
|
|
118
|
+
name: e.name,
|
|
119
|
+
entityType: e.entityType,
|
|
120
|
+
description: e.description,
|
|
121
|
+
createdAt: e.createdAt,
|
|
122
|
+
})),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
getEntityGraph(input) {
|
|
126
|
+
if (!this.options.graphRepository) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
let entityId = input.entityId;
|
|
130
|
+
if (!entityId && input.entityName) {
|
|
131
|
+
const entity = this.options.graphRepository.getEntityByName(input.entityName);
|
|
132
|
+
if (!entity) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
entityId = entity.id;
|
|
136
|
+
}
|
|
137
|
+
if (!entityId) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
return this.options.graphRepository.getEntityWithGraph(entityId);
|
|
141
|
+
}
|
|
142
|
+
reportExtractionError(input) {
|
|
143
|
+
if (!this.options.feedbackRepository) {
|
|
144
|
+
throw new Error("Feedback system is not available.");
|
|
145
|
+
}
|
|
146
|
+
const record = this.options.feedbackRepository.create({
|
|
147
|
+
entityName: input.entityName,
|
|
148
|
+
errorType: input.errorType,
|
|
149
|
+
entityType: input.entityType,
|
|
150
|
+
correctType: input.correctType,
|
|
151
|
+
noteId: input.noteId,
|
|
152
|
+
details: input.details,
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
message: "Feedback recorded successfully",
|
|
156
|
+
feedback: record,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
validateFilePath(inputPath) {
|
|
160
|
+
if (!this.options.rootPath)
|
|
161
|
+
throw new Error("rootPath is required for file path resolution");
|
|
162
|
+
const resolved = realpathSync(inputPath);
|
|
163
|
+
const rootResolved = realpathSync(this.options.rootPath);
|
|
164
|
+
if (!resolved.startsWith(rootResolved + "/") && resolved !== rootResolved) {
|
|
165
|
+
throw new Error("Invalid file path: outside of root directory");
|
|
166
|
+
}
|
|
167
|
+
return relative(rootResolved, resolved);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=knowledge-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-service.js","sourceRoot":"","sources":["../../src/services/knowledge-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,9 @@ export interface CreateDatabaseOptions {
|
|
|
3
3
|
enableVec?: boolean;
|
|
4
4
|
}
|
|
5
5
|
export declare function createDatabase(dbPath: string, options?: CreateDatabaseOptions): Database.Database;
|
|
6
|
+
/**
|
|
7
|
+
* Asynchronously load the sqlite-vec extension into a database.
|
|
8
|
+
* Returns true if loaded successfully, false otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadSqliteVecExtension(db: Database.Database): Promise<boolean>;
|
|
6
11
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,QAAQ,CAAC,QAAQ,CAwCnB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CASpF"}
|