@knowledgine/core 0.2.1 → 0.3.0
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 +13 -0
- package/dist/config/config-loader.d.ts.map +1 -1
- package/dist/config/config-loader.js +19 -11
- package/dist/config/config-loader.js.map +1 -1
- package/dist/extraction/causal-link-detector.d.ts +16 -0
- package/dist/extraction/causal-link-detector.d.ts.map +1 -0
- package/dist/extraction/causal-link-detector.js +142 -0
- package/dist/extraction/causal-link-detector.js.map +1 -0
- package/dist/extraction/incremental-extractor.d.ts +21 -0
- package/dist/extraction/incremental-extractor.d.ts.map +1 -0
- package/dist/extraction/incremental-extractor.js +113 -0
- package/dist/extraction/incremental-extractor.js.map +1 -0
- package/dist/extraction/psp-detector.d.ts +3 -3
- package/dist/extraction/psp-detector.d.ts.map +1 -1
- package/dist/extraction/psp-detector.js +51 -3
- package/dist/extraction/psp-detector.js.map +1 -1
- package/dist/graph/entity-extractor.d.ts +1 -0
- package/dist/graph/entity-extractor.d.ts.map +1 -1
- package/dist/graph/entity-extractor.js +24 -0
- package/dist/graph/entity-extractor.js.map +1 -1
- package/dist/graph/graph-repository.d.ts +5 -5
- package/dist/graph/graph-repository.d.ts.map +1 -1
- package/dist/graph/graph-repository.js +12 -12
- package/dist/graph/graph-repository.js.map +1 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/errors.d.ts +8 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +11 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +5 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/ollama-provider.d.ts +13 -0
- package/dist/llm/ollama-provider.d.ts.map +1 -0
- package/dist/llm/ollama-provider.js +130 -0
- package/dist/llm/ollama-provider.js.map +1 -0
- package/dist/llm/openai-provider.d.ts +15 -0
- package/dist/llm/openai-provider.d.ts.map +1 -0
- package/dist/llm/openai-provider.js +143 -0
- package/dist/llm/openai-provider.js.map +1 -0
- package/dist/llm/provider-factory.d.ts +3 -0
- package/dist/llm/provider-factory.d.ts.map +1 -0
- package/dist/llm/provider-factory.js +25 -0
- package/dist/llm/provider-factory.js.map +1 -0
- package/dist/llm/types.d.ts +50 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/provenance/provenance-repository.d.ts +23 -22
- package/dist/provenance/provenance-repository.d.ts.map +1 -1
- package/dist/provenance/provenance-repository.js +82 -44
- package/dist/provenance/provenance-repository.js.map +1 -1
- package/dist/search/knowledge-searcher.d.ts +10 -1
- package/dist/search/knowledge-searcher.d.ts.map +1 -1
- package/dist/search/knowledge-searcher.js +78 -31
- package/dist/search/knowledge-searcher.js.map +1 -1
- package/dist/search/reasoning-reranker.d.ts +59 -0
- package/dist/search/reasoning-reranker.d.ts.map +1 -0
- package/dist/search/reasoning-reranker.js +334 -0
- package/dist/search/reasoning-reranker.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +4 -0
- package/dist/services/knowledge-service.d.ts.map +1 -1
- package/dist/services/knowledge-service.js +6 -1
- package/dist/services/knowledge-service.js.map +1 -1
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +46 -6
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/knowledge-repository.d.ts +49 -1
- package/dist/storage/knowledge-repository.d.ts.map +1 -1
- package/dist/storage/knowledge-repository.js +93 -7
- package/dist/storage/knowledge-repository.js.map +1 -1
- package/dist/storage/migrations/007_spec_alignment.d.ts +3 -0
- package/dist/storage/migrations/007_spec_alignment.d.ts.map +1 -0
- package/dist/storage/migrations/007_spec_alignment.js +116 -0
- package/dist/storage/migrations/007_spec_alignment.js.map +1 -0
- package/dist/storage/migrations/008_knowledge_versioning.d.ts +15 -0
- package/dist/storage/migrations/008_knowledge_versioning.d.ts.map +1 -0
- package/dist/storage/migrations/008_knowledge_versioning.js +69 -0
- package/dist/storage/migrations/008_knowledge_versioning.js.map +1 -0
- package/dist/storage/migrations/009_extraction_metadata.d.ts +12 -0
- package/dist/storage/migrations/009_extraction_metadata.d.ts.map +1 -0
- package/dist/storage/migrations/009_extraction_metadata.js +39 -0
- package/dist/storage/migrations/009_extraction_metadata.js.map +1 -0
- package/dist/storage/migrator.d.ts +3 -1
- package/dist/storage/migrator.d.ts.map +1 -1
- package/dist/storage/migrator.js +2 -1
- package/dist/storage/migrator.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,19 @@ import type { KnowledgineConfig } from "../config.js";
|
|
|
2
2
|
export interface RcConfig {
|
|
3
3
|
semantic?: boolean;
|
|
4
4
|
defaultPath?: string;
|
|
5
|
+
plugins?: {
|
|
6
|
+
enabled?: string[];
|
|
7
|
+
[pluginId: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
search?: {
|
|
10
|
+
defaultMode?: "keyword" | "semantic" | "hybrid";
|
|
11
|
+
defaultLimit?: number;
|
|
12
|
+
};
|
|
13
|
+
serve?: {
|
|
14
|
+
defaultPort?: number;
|
|
15
|
+
host?: string;
|
|
16
|
+
};
|
|
17
|
+
llm?: import("../llm/types.js").LLMConfig;
|
|
5
18
|
[key: string]: unknown;
|
|
6
19
|
}
|
|
7
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAgB9D;
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC9D,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpF,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,GAAG,CAAC,EAAE,OAAO,iBAAiB,EAAE,SAAS,CAAC;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAgB9D;AA2BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAW3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAYrE"}
|
|
@@ -20,19 +20,27 @@ export function loadConfig(rootPath) {
|
|
|
20
20
|
},
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
function loadRcFile(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
function loadRcFile(startDir) {
|
|
24
|
+
let dir = startDir;
|
|
25
|
+
for (let i = 0; i < 5; i++) {
|
|
26
|
+
const jsonPath = resolve(dir, ".knowledginerc.json");
|
|
27
|
+
const ymlPath = resolve(dir, ".knowledginerc.yml");
|
|
28
|
+
try {
|
|
29
|
+
if (existsSync(jsonPath)) {
|
|
30
|
+
return JSON.parse(readFileSync(jsonPath, "utf-8"));
|
|
31
|
+
}
|
|
32
|
+
if (existsSync(ymlPath)) {
|
|
33
|
+
return parseYaml(readFileSync(ymlPath, "utf-8"));
|
|
34
|
+
}
|
|
29
35
|
}
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error(`Warning: Failed to parse config file: ${error instanceof Error ? error.message : String(error)}`);
|
|
38
|
+
return null;
|
|
32
39
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
const parent = resolve(dir, "..");
|
|
41
|
+
if (parent === dir)
|
|
42
|
+
break; // ルートに到達
|
|
43
|
+
dir = parent;
|
|
36
44
|
}
|
|
37
45
|
return null;
|
|
38
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { KnowledgeRepository } from "../storage/knowledge-repository.js";
|
|
2
|
+
export interface CausalLinkSummary {
|
|
3
|
+
causedLinks: number;
|
|
4
|
+
includedInLinks: number;
|
|
5
|
+
triggeredLinks: number;
|
|
6
|
+
errors: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class CausalLinkDetector {
|
|
9
|
+
private repository;
|
|
10
|
+
constructor(repository: KnowledgeRepository);
|
|
11
|
+
detectAll(): CausalLinkSummary;
|
|
12
|
+
detectSessionToCommitLinks(): number;
|
|
13
|
+
detectCommitToPRLinks(): number;
|
|
14
|
+
detectReviewToFixCommitLinks(): number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=causal-link-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causal-link-detector.d.ts","sourceRoot":"","sources":["../../src/extraction/causal-link-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,oCAAoC,CAAC;AAE7F,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAoCD,qBAAa,kBAAkB;IACjB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,mBAAmB;IAEnD,SAAS,IAAI,iBAAiB;IA2B9B,0BAA0B,IAAI,MAAM;IAgCpC,qBAAqB,IAAI,MAAM;IAuB/B,4BAA4B,IAAI,MAAM;CA+BvC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
const SESSION_TO_COMMIT_THRESHOLD_SECONDS = 1800; // strictly less than
|
|
2
|
+
const REVIEW_TO_COMMIT_THRESHOLD_SECONDS = 24 * 60 * 60; // 24 hours
|
|
3
|
+
function parseFrontmatter(note) {
|
|
4
|
+
if (!note.frontmatter_json)
|
|
5
|
+
return {};
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(note.frontmatter_json);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function getTimestampSeconds(isoString) {
|
|
14
|
+
if (!isoString)
|
|
15
|
+
return null;
|
|
16
|
+
const ms = Date.parse(isoString);
|
|
17
|
+
if (isNaN(ms))
|
|
18
|
+
return null;
|
|
19
|
+
return ms / 1000;
|
|
20
|
+
}
|
|
21
|
+
function extractCommitShaFromUri(uri) {
|
|
22
|
+
// git://commit/<sha> パターンから SHA を抽出
|
|
23
|
+
const match = /git:\/\/commit\/([0-9a-f]+)/i.exec(uri);
|
|
24
|
+
return match ? match[1] : null;
|
|
25
|
+
}
|
|
26
|
+
function isPrNote(note) {
|
|
27
|
+
// github://repos/... の形式で "reviews" を含まないもの
|
|
28
|
+
return note.file_path.startsWith("github://") && !note.file_path.includes("/reviews/");
|
|
29
|
+
}
|
|
30
|
+
function isReviewNote(note) {
|
|
31
|
+
return note.file_path.includes("/reviews/");
|
|
32
|
+
}
|
|
33
|
+
export class CausalLinkDetector {
|
|
34
|
+
repository;
|
|
35
|
+
constructor(repository) {
|
|
36
|
+
this.repository = repository;
|
|
37
|
+
}
|
|
38
|
+
detectAll() {
|
|
39
|
+
let errors = 0;
|
|
40
|
+
let causedLinks = 0;
|
|
41
|
+
let includedInLinks = 0;
|
|
42
|
+
let triggeredLinks = 0;
|
|
43
|
+
try {
|
|
44
|
+
causedLinks = this.detectSessionToCommitLinks();
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
errors++;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
includedInLinks = this.detectCommitToPRLinks();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
errors++;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
triggeredLinks = this.detectReviewToFixCommitLinks();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
errors++;
|
|
60
|
+
}
|
|
61
|
+
return { causedLinks, includedInLinks, triggeredLinks, errors };
|
|
62
|
+
}
|
|
63
|
+
detectSessionToCommitLinks() {
|
|
64
|
+
const sessions = this.repository.getNotesBySourceUriPrefix("claude-session://");
|
|
65
|
+
const commits = this.repository.getNotesBySourceUriPrefix("git://commit/");
|
|
66
|
+
let linked = 0;
|
|
67
|
+
for (const session of sessions) {
|
|
68
|
+
const sessionFm = parseFrontmatter(session);
|
|
69
|
+
const sessionBranch = typeof sessionFm["gitBranch"] === "string" ? sessionFm["gitBranch"] : null;
|
|
70
|
+
const sessionTs = getTimestampSeconds(session.created_at);
|
|
71
|
+
if (sessionTs === null || !sessionBranch)
|
|
72
|
+
continue;
|
|
73
|
+
for (const commit of commits) {
|
|
74
|
+
const commitFm = parseFrontmatter(commit);
|
|
75
|
+
const commitBranch = typeof commitFm["branch"] === "string" ? commitFm["branch"] : null;
|
|
76
|
+
const commitTs = getTimestampSeconds(commit.created_at);
|
|
77
|
+
if (commitTs === null || !commitBranch)
|
|
78
|
+
continue;
|
|
79
|
+
if (sessionBranch !== commitBranch)
|
|
80
|
+
continue;
|
|
81
|
+
const diffSeconds = commitTs - sessionTs;
|
|
82
|
+
if (diffSeconds < 0 || diffSeconds >= SESSION_TO_COMMIT_THRESHOLD_SECONDS)
|
|
83
|
+
continue;
|
|
84
|
+
const saved = this.repository.saveNoteLinkIfNotExists(session.id, commit.id, "caused");
|
|
85
|
+
if (saved)
|
|
86
|
+
linked++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return linked;
|
|
90
|
+
}
|
|
91
|
+
detectCommitToPRLinks() {
|
|
92
|
+
const commits = this.repository.getNotesBySourceUriPrefix("git://commit/");
|
|
93
|
+
const allGithub = this.repository.getNotesBySourceUriPrefix("github://");
|
|
94
|
+
const prs = allGithub.filter(isPrNote);
|
|
95
|
+
let linked = 0;
|
|
96
|
+
for (const commit of commits) {
|
|
97
|
+
const sha = extractCommitShaFromUri(commit.file_path);
|
|
98
|
+
if (!sha || sha.length < 7)
|
|
99
|
+
continue;
|
|
100
|
+
// 7文字以上のプレフィックスでマッチ
|
|
101
|
+
for (const pr of prs) {
|
|
102
|
+
const shortSha = sha.slice(0, 7);
|
|
103
|
+
if (!pr.content.includes(shortSha) && !pr.content.includes(sha))
|
|
104
|
+
continue;
|
|
105
|
+
const saved = this.repository.saveNoteLinkIfNotExists(commit.id, pr.id, "included_in");
|
|
106
|
+
if (saved)
|
|
107
|
+
linked++;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return linked;
|
|
111
|
+
}
|
|
112
|
+
detectReviewToFixCommitLinks() {
|
|
113
|
+
const allGithub = this.repository.getNotesBySourceUriPrefix("github://");
|
|
114
|
+
const reviews = allGithub.filter(isReviewNote);
|
|
115
|
+
const commits = this.repository.getNotesBySourceUriPrefix("git://commit/");
|
|
116
|
+
let linked = 0;
|
|
117
|
+
for (const review of reviews) {
|
|
118
|
+
const reviewFm = parseFrontmatter(review);
|
|
119
|
+
const reviewBranch = typeof reviewFm["branch"] === "string" ? reviewFm["branch"] : null;
|
|
120
|
+
const reviewTs = getTimestampSeconds(review.created_at);
|
|
121
|
+
if (reviewTs === null || !reviewBranch)
|
|
122
|
+
continue;
|
|
123
|
+
for (const commit of commits) {
|
|
124
|
+
const commitFm = parseFrontmatter(commit);
|
|
125
|
+
const commitBranch = typeof commitFm["branch"] === "string" ? commitFm["branch"] : null;
|
|
126
|
+
const commitTs = getTimestampSeconds(commit.created_at);
|
|
127
|
+
if (commitTs === null || !commitBranch)
|
|
128
|
+
continue;
|
|
129
|
+
if (reviewBranch !== commitBranch)
|
|
130
|
+
continue;
|
|
131
|
+
const diffSeconds = commitTs - reviewTs;
|
|
132
|
+
if (diffSeconds < 0 || diffSeconds > REVIEW_TO_COMMIT_THRESHOLD_SECONDS)
|
|
133
|
+
continue;
|
|
134
|
+
const saved = this.repository.saveNoteLinkIfNotExists(review.id, commit.id, "triggered");
|
|
135
|
+
if (saved)
|
|
136
|
+
linked++;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return linked;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=causal-link-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causal-link-detector.js","sourceRoot":"","sources":["../../src/extraction/causal-link-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { KnowledgeRepository } from "../storage/knowledge-repository.js";
|
|
2
|
+
import type { GraphRepository } from "../graph/graph-repository.js";
|
|
3
|
+
export interface ExtractionSummary {
|
|
4
|
+
processedNotes: number;
|
|
5
|
+
totalEntities: number;
|
|
6
|
+
totalRelations: number;
|
|
7
|
+
totalPatterns: number;
|
|
8
|
+
errors: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 指定した noteIds に対してパターン抽出・エンティティ抽出・関係推論を実行する。
|
|
12
|
+
* 各 ingest ソース (GitHub, git-history, capture, MCP 等) 完了後に呼び出すことで
|
|
13
|
+
* 増分的な抽出を実現する。
|
|
14
|
+
*/
|
|
15
|
+
export declare class IncrementalExtractor {
|
|
16
|
+
private repository;
|
|
17
|
+
private graphRepository;
|
|
18
|
+
constructor(repository: KnowledgeRepository, graphRepository: GraphRepository);
|
|
19
|
+
process(noteIds: number[], onProgress?: (current: number, total: number) => void): Promise<ExtractionSummary>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=incremental-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-extractor.d.ts","sourceRoot":"","sources":["../../src/extraction/incremental-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAOpE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAoBD;;;;GAIG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,eAAe;gBADf,UAAU,EAAE,mBAAmB,EAC/B,eAAe,EAAE,eAAe;IAGpC,OAAO,CACX,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,iBAAiB,CAAC;CA2F9B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { PatternExtractor } from "./pattern-extractor.js";
|
|
2
|
+
import { EntityExtractor } from "../graph/entity-extractor.js";
|
|
3
|
+
import { RelationInferrer } from "../graph/relation-inferrer.js";
|
|
4
|
+
const CHUNK_SIZE = 999; // SQLite IN句の変数制限対策
|
|
5
|
+
/**
|
|
6
|
+
* パターンを (type, lineNumber, content) キーで重複排除する
|
|
7
|
+
*/
|
|
8
|
+
function deduplicatePatterns(patterns) {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
const result = [];
|
|
11
|
+
for (const p of patterns) {
|
|
12
|
+
const key = JSON.stringify([p.type, p.lineNumber ?? null, p.content]);
|
|
13
|
+
if (!seen.has(key)) {
|
|
14
|
+
seen.add(key);
|
|
15
|
+
result.push(p);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 指定した noteIds に対してパターン抽出・エンティティ抽出・関係推論を実行する。
|
|
22
|
+
* 各 ingest ソース (GitHub, git-history, capture, MCP 等) 完了後に呼び出すことで
|
|
23
|
+
* 増分的な抽出を実現する。
|
|
24
|
+
*/
|
|
25
|
+
export class IncrementalExtractor {
|
|
26
|
+
repository;
|
|
27
|
+
graphRepository;
|
|
28
|
+
constructor(repository, graphRepository) {
|
|
29
|
+
this.repository = repository;
|
|
30
|
+
this.graphRepository = graphRepository;
|
|
31
|
+
}
|
|
32
|
+
async process(noteIds, onProgress) {
|
|
33
|
+
// 1. 重複排除
|
|
34
|
+
const uniqueIds = [...new Set(noteIds)];
|
|
35
|
+
const total = uniqueIds.length;
|
|
36
|
+
if (total === 0) {
|
|
37
|
+
return {
|
|
38
|
+
processedNotes: 0,
|
|
39
|
+
totalEntities: 0,
|
|
40
|
+
totalRelations: 0,
|
|
41
|
+
totalPatterns: 0,
|
|
42
|
+
errors: 0,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const patternExtractor = new PatternExtractor();
|
|
46
|
+
const entityExtractor = new EntityExtractor();
|
|
47
|
+
const inferrer = new RelationInferrer();
|
|
48
|
+
let processedNotes = 0;
|
|
49
|
+
let totalEntities = 0;
|
|
50
|
+
let totalRelations = 0;
|
|
51
|
+
let totalPatterns = 0;
|
|
52
|
+
let errors = 0;
|
|
53
|
+
// 2. チャンク分割(SQLite IN句の変数制限対策)
|
|
54
|
+
for (let chunkStart = 0; chunkStart < total; chunkStart += CHUNK_SIZE) {
|
|
55
|
+
const chunk = uniqueIds.slice(chunkStart, chunkStart + CHUNK_SIZE);
|
|
56
|
+
for (const noteId of chunk) {
|
|
57
|
+
try {
|
|
58
|
+
const note = this.repository.getNoteById(noteId);
|
|
59
|
+
if (!note) {
|
|
60
|
+
errors++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const frontmatter = note.frontmatter_json ? JSON.parse(note.frontmatter_json) : {};
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
// パターン抽出
|
|
66
|
+
const dailyPatterns = patternExtractor.extractDailyPatterns(note.content);
|
|
67
|
+
const ticketPatterns = patternExtractor.extractTicketPatterns(note.content);
|
|
68
|
+
const allPatterns = deduplicatePatterns([...dailyPatterns, ...ticketPatterns]);
|
|
69
|
+
this.repository.savePatterns(note.id, allPatterns);
|
|
70
|
+
totalPatterns += allPatterns.length;
|
|
71
|
+
// エンティティ抽出
|
|
72
|
+
const extractedEntities = entityExtractor.extract(note.content, frontmatter);
|
|
73
|
+
const entityList = [];
|
|
74
|
+
for (const entity of extractedEntities) {
|
|
75
|
+
const entityId = this.graphRepository.upsertEntity({
|
|
76
|
+
name: entity.name,
|
|
77
|
+
entityType: entity.entityType,
|
|
78
|
+
createdAt: now,
|
|
79
|
+
});
|
|
80
|
+
this.graphRepository.linkEntityToNote(entityId, note.id);
|
|
81
|
+
entityList.push({ name: entity.name, entityType: entity.entityType });
|
|
82
|
+
}
|
|
83
|
+
totalEntities += extractedEntities.length;
|
|
84
|
+
// 関係推論
|
|
85
|
+
const inferredRelations = inferrer.infer(entityList, frontmatter);
|
|
86
|
+
for (const rel of inferredRelations) {
|
|
87
|
+
const fromEntity = this.graphRepository.getEntityByName(rel.fromName, rel.fromType);
|
|
88
|
+
const toEntity = this.graphRepository.getEntityByName(rel.toName, rel.toType);
|
|
89
|
+
if (fromEntity?.id && toEntity?.id) {
|
|
90
|
+
this.graphRepository.upsertRelation({
|
|
91
|
+
fromEntityId: fromEntity.id,
|
|
92
|
+
toEntityId: toEntity.id,
|
|
93
|
+
relationType: rel.relationType,
|
|
94
|
+
strength: rel.strength,
|
|
95
|
+
createdAt: now,
|
|
96
|
+
});
|
|
97
|
+
totalRelations++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// extracted_at を更新
|
|
101
|
+
this.repository.updateExtractedAt(note.id);
|
|
102
|
+
processedNotes++;
|
|
103
|
+
onProgress?.(processedNotes, total);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
errors++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { processedNotes, totalEntities, totalRelations, totalPatterns, errors };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=incremental-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-extractor.js","sourceRoot":"","sources":["../../src/extraction/incremental-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,13 +17,13 @@ export declare class ProblemSolutionDetector {
|
|
|
17
17
|
category: string;
|
|
18
18
|
confidence: number;
|
|
19
19
|
}>): DetectedPair[];
|
|
20
|
-
detectPairsAcrossNotes(
|
|
20
|
+
detectPairsAcrossNotes(problemNote: {
|
|
21
21
|
id: number;
|
|
22
22
|
patterns: ExtractedPattern[];
|
|
23
|
-
},
|
|
23
|
+
}, solutionNote: {
|
|
24
24
|
id: number;
|
|
25
25
|
patterns: ExtractedPattern[];
|
|
26
26
|
createdAt: string;
|
|
27
|
-
},
|
|
27
|
+
}, problemNoteCreatedAt: string): DetectedPair[];
|
|
28
28
|
}
|
|
29
29
|
//# sourceMappingURL=psp-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psp-detector.d.ts","sourceRoot":"","sources":["../../src/extraction/psp-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"psp-detector.d.ts","sourceRoot":"","sources":["../../src/extraction/psp-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA0BpD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAuB;IAClC,iBAAiB,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EACtE,eAAe,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,GAClF,YAAY,EAAE;IA+CjB,sBAAsB,CACpB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;KAAE,EACzD,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAC7E,oBAAoB,EAAE,MAAM,GAC3B,YAAY,EAAE;CAuClB"}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 2つのテキスト間のキーワード重複率(Jaccard係数ベース)を計算する
|
|
3
|
+
*/
|
|
4
|
+
function keywordOverlap(a, b) {
|
|
5
|
+
const tokenize = (text) => new Set(text
|
|
6
|
+
.toLowerCase()
|
|
7
|
+
.split(/\W+/)
|
|
8
|
+
.filter((t) => t.length > 2));
|
|
9
|
+
const setA = tokenize(a);
|
|
10
|
+
const setB = tokenize(b);
|
|
11
|
+
if (setA.size === 0 || setB.size === 0)
|
|
12
|
+
return 0;
|
|
13
|
+
let intersection = 0;
|
|
14
|
+
for (const token of setA) {
|
|
15
|
+
if (setB.has(token))
|
|
16
|
+
intersection++;
|
|
17
|
+
}
|
|
18
|
+
const union = setA.size + setB.size - intersection;
|
|
19
|
+
return union === 0 ? 0 : intersection / union;
|
|
20
|
+
}
|
|
1
21
|
export class ProblemSolutionDetector {
|
|
2
22
|
detectPairsInNote(noteId, patterns, classifications) {
|
|
3
23
|
const pairs = [];
|
|
@@ -41,9 +61,37 @@ export class ProblemSolutionDetector {
|
|
|
41
61
|
}
|
|
42
62
|
return pairs;
|
|
43
63
|
}
|
|
44
|
-
detectPairsAcrossNotes(
|
|
45
|
-
|
|
46
|
-
|
|
64
|
+
detectPairsAcrossNotes(problemNote, solutionNote, problemNoteCreatedAt) {
|
|
65
|
+
const MS_PER_DAY = 1000 * 60 * 60 * 24;
|
|
66
|
+
const MAX_TIME_DIFF_DAYS = 30;
|
|
67
|
+
const MIN_KEYWORD_OVERLAP = 0.3;
|
|
68
|
+
const timeDiff = (new Date(solutionNote.createdAt).getTime() - new Date(problemNoteCreatedAt).getTime()) /
|
|
69
|
+
MS_PER_DAY;
|
|
70
|
+
// solution must come after problem and within time window
|
|
71
|
+
if (timeDiff < 0 || timeDiff > MAX_TIME_DIFF_DAYS)
|
|
72
|
+
return [];
|
|
73
|
+
const problems = problemNote.patterns.filter((p) => p.type === "problem");
|
|
74
|
+
const solutions = solutionNote.patterns.filter((p) => p.type === "solution");
|
|
75
|
+
if (problems.length === 0 || solutions.length === 0)
|
|
76
|
+
return [];
|
|
77
|
+
const pairs = [];
|
|
78
|
+
for (const problem of problems) {
|
|
79
|
+
for (const solution of solutions) {
|
|
80
|
+
const overlap = keywordOverlap(problem.content, solution.content);
|
|
81
|
+
if (overlap < MIN_KEYWORD_OVERLAP)
|
|
82
|
+
continue;
|
|
83
|
+
const confidence = overlap;
|
|
84
|
+
pairs.push({
|
|
85
|
+
problemNoteId: problemNote.id,
|
|
86
|
+
solutionNoteId: solutionNote.id,
|
|
87
|
+
problemPattern: problem.content,
|
|
88
|
+
solutionPattern: solution.content,
|
|
89
|
+
timeDiff,
|
|
90
|
+
confidence,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return pairs;
|
|
47
95
|
}
|
|
48
96
|
}
|
|
49
97
|
//# sourceMappingURL=psp-detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psp-detector.js","sourceRoot":"","sources":["../../src/extraction/psp-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"psp-detector.js","sourceRoot":"","sources":["../../src/extraction/psp-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-extractor.d.ts","sourceRoot":"","sources":["../../src/graph/entity-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;CAC1F;
|
|
1
|
+
{"version":3,"file":"entity-extractor.d.ts","sourceRoot":"","sources":["../../src/graph/entity-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;CAC1F;AA2ED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAkB;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAUlC;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAalC;gBAES,KAAK,CAAC,EAAE,eAAe;IAInC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,eAAe,EAAE;IA2BtF,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,4BAA4B;IAsCpC,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { CodeBlockDetector } from "../utils/code-block-detector.js";
|
|
2
|
+
const SOURCE_PRIORITY = {
|
|
3
|
+
frontmatter: 1, // YAML frontmatterに明記 → 最も信頼性高
|
|
4
|
+
whitelist: 2, // ユーザー定義のホワイトリスト
|
|
5
|
+
import: 3, // import文 → 技術エンティティとして確実
|
|
6
|
+
tag: 4, // Markdownタグ
|
|
7
|
+
code: 5, // コードブロック内
|
|
8
|
+
link: 6, // リンクテキスト
|
|
9
|
+
mention: 7, // 本文中のメンション → 最も曖昧
|
|
10
|
+
};
|
|
2
11
|
/**
|
|
3
12
|
* useState, useEffect などのReact hooks・ノイズキーワードのストップリスト
|
|
4
13
|
*/
|
|
@@ -109,6 +118,7 @@ export class EntityExtractor {
|
|
|
109
118
|
results.push(...this.extractMentions(cleanContent));
|
|
110
119
|
results.push(...this.extractOrgRepos(cleanContent));
|
|
111
120
|
let deduped = this.deduplicate(results);
|
|
121
|
+
deduped = this.resolveEntityTypes(deduped);
|
|
112
122
|
if (this.rules) {
|
|
113
123
|
deduped = this.applyRules(deduped);
|
|
114
124
|
}
|
|
@@ -271,6 +281,20 @@ export class EntityExtractor {
|
|
|
271
281
|
isStopWord(word) {
|
|
272
282
|
return STOP_LIST.has(word.toLowerCase());
|
|
273
283
|
}
|
|
284
|
+
resolveEntityTypes(entities) {
|
|
285
|
+
const byName = new Map();
|
|
286
|
+
for (const e of entities) {
|
|
287
|
+
const key = e.name.toLowerCase();
|
|
288
|
+
const group = byName.get(key) ?? [];
|
|
289
|
+
group.push(e);
|
|
290
|
+
byName.set(key, group);
|
|
291
|
+
}
|
|
292
|
+
return Array.from(byName.values()).map((group) => {
|
|
293
|
+
if (group.length === 1)
|
|
294
|
+
return group[0];
|
|
295
|
+
return group.sort((a, b) => SOURCE_PRIORITY[a.sourceType] - SOURCE_PRIORITY[b.sourceType])[0];
|
|
296
|
+
});
|
|
297
|
+
}
|
|
274
298
|
deduplicate(entities) {
|
|
275
299
|
const seen = new Map();
|
|
276
300
|
for (const e of entities) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../src/graph/entity-extractor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../src/graph/entity-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,14 +59,14 @@ export declare class GraphRepository {
|
|
|
59
59
|
entitiesByType: Record<string, number>;
|
|
60
60
|
relationsByType: Record<string, number>;
|
|
61
61
|
};
|
|
62
|
-
invalidateRelation(id: number,
|
|
63
|
-
invalidateObservation(id: number,
|
|
62
|
+
invalidateRelation(id: number, invalidAt?: string): boolean;
|
|
63
|
+
invalidateObservation(id: number, invalidAt?: string): boolean;
|
|
64
64
|
getRelationHistory(fromEntityId: number, toEntityId: number): Array<Relation & {
|
|
65
65
|
id: number;
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
validAt: string | null;
|
|
67
|
+
invalidAt: string | null;
|
|
68
68
|
recordedAt: string | null;
|
|
69
|
-
|
|
69
|
+
supersededBy: string | null;
|
|
70
70
|
}>;
|
|
71
71
|
}
|
|
72
72
|
//# sourceMappingURL=graph-repository.d.ts.map
|