zenn-rag 0.1.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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +68 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/index.d.ts +6 -0
  8. package/dist/commands/index.d.ts.map +1 -0
  9. package/dist/commands/index.js +11 -0
  10. package/dist/commands/index.js.map +1 -0
  11. package/dist/commands/mcp.d.ts +2 -0
  12. package/dist/commands/mcp.d.ts.map +1 -0
  13. package/dist/commands/mcp.js +245 -0
  14. package/dist/commands/mcp.js.map +1 -0
  15. package/dist/commands/search.d.ts +10 -0
  16. package/dist/commands/search.d.ts.map +1 -0
  17. package/dist/commands/search.js +37 -0
  18. package/dist/commands/search.js.map +1 -0
  19. package/dist/commands/status.d.ts +2 -0
  20. package/dist/commands/status.d.ts.map +1 -0
  21. package/dist/commands/status.js +111 -0
  22. package/dist/commands/status.js.map +1 -0
  23. package/dist/config.d.ts +28 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +88 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/embedder.d.ts +17 -0
  28. package/dist/embedder.d.ts.map +1 -0
  29. package/dist/embedder.js +31 -0
  30. package/dist/embedder.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +12 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/logger.d.ts +31 -0
  36. package/dist/logger.d.ts.map +1 -0
  37. package/dist/logger.js +56 -0
  38. package/dist/logger.js.map +1 -0
  39. package/dist/parser.d.ts +56 -0
  40. package/dist/parser.d.ts.map +1 -0
  41. package/dist/parser.js +214 -0
  42. package/dist/parser.js.map +1 -0
  43. package/dist/providers/base.d.ts +2 -0
  44. package/dist/providers/base.d.ts.map +1 -0
  45. package/dist/providers/base.js +4 -0
  46. package/dist/providers/base.js.map +1 -0
  47. package/dist/providers/factory.d.ts +4 -0
  48. package/dist/providers/factory.d.ts.map +1 -0
  49. package/dist/providers/factory.js +27 -0
  50. package/dist/providers/factory.js.map +1 -0
  51. package/dist/providers/gemini.d.ts +20 -0
  52. package/dist/providers/gemini.d.ts.map +1 -0
  53. package/dist/providers/gemini.js +79 -0
  54. package/dist/providers/gemini.js.map +1 -0
  55. package/dist/providers/ollama.d.ts +14 -0
  56. package/dist/providers/ollama.d.ts.map +1 -0
  57. package/dist/providers/ollama.js +38 -0
  58. package/dist/providers/ollama.js.map +1 -0
  59. package/dist/providers/openai.d.ts +18 -0
  60. package/dist/providers/openai.d.ts.map +1 -0
  61. package/dist/providers/openai.js +65 -0
  62. package/dist/providers/openai.js.map +1 -0
  63. package/dist/providers/types.d.ts +7 -0
  64. package/dist/providers/types.d.ts.map +1 -0
  65. package/dist/providers/types.js +2 -0
  66. package/dist/providers/types.js.map +1 -0
  67. package/dist/services/sync-service.d.ts +28 -0
  68. package/dist/services/sync-service.d.ts.map +1 -0
  69. package/dist/services/sync-service.js +310 -0
  70. package/dist/services/sync-service.js.map +1 -0
  71. package/dist/store.d.ts +35 -0
  72. package/dist/store.d.ts.map +1 -0
  73. package/dist/store.js +180 -0
  74. package/dist/store.js.map +1 -0
  75. package/dist/types.d.ts +49 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +2 -0
  78. package/dist/types.js.map +1 -0
  79. package/package.json +61 -0
@@ -0,0 +1,37 @@
1
+ import { getEmbedding } from "../embedder.js";
2
+ import { ArticleVectorStore } from "../store.js";
3
+ export async function searchArticles(query, options = {}) {
4
+ const queryVector = await getEmbedding(query);
5
+ const store = new ArticleVectorStore();
6
+ return store.search(queryVector, options);
7
+ }
8
+ export async function searchCli(query, options = {}) {
9
+ const limit = options.limit || 5;
10
+ const topic = options.topic;
11
+ console.log(`\n🔍 検索クエリ: "${query}"${topic ? ` (トピック: ${topic})` : ""}`);
12
+ console.log("ベクトル生成中...");
13
+ const results = await searchArticles(query, { limit, topic });
14
+ if (results.length === 0) {
15
+ console.log("\n該当する記事が見つかりませんでした。まだインデックスを作成していない場合は `zenn-rag index` を実行してください。");
16
+ return;
17
+ }
18
+ console.log(`\n検索結果 (${results.length} 件):\n${"=".repeat(60)}`);
19
+ results.forEach((res, idx) => {
20
+ const scorePct = (res.score * 100).toFixed(1);
21
+ console.log(`\n[${idx + 1}] スコア: ${scorePct}% | ${res.title}`);
22
+ console.log(` 見出し: ${res.heading}`);
23
+ console.log(` URL: ${res.url}`);
24
+ if (res.topics.length > 0) {
25
+ console.log(` タグ: ${res.topics.join(", ")}`);
26
+ }
27
+ console.log(` 抜粋:`);
28
+ const preview = res.text
29
+ .split("\n")
30
+ .slice(0, 4)
31
+ .map((line) => ` ${line}`)
32
+ .join("\n");
33
+ console.log(preview);
34
+ });
35
+ console.log(`\n${"=".repeat(60)}\n`);
36
+ }
37
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,OAAO,GAAuC,EAAE;IAEhD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAa,EACb,OAAO,GAAuC,EAAE;IAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,OAAO,CAAC,GAAG,CACT,gBAAgB,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5D,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAE9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,UAAU,QAAQ,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI;aACrB,KAAK,CAAC,IAAI,CAAC;aACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function showStatus(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAcA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAyHhD"}
@@ -0,0 +1,111 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { getActiveModel, getContext } from "../config.js";
4
+ import { ArticleVectorStore } from "../store.js";
5
+ function renderProgressBar(current, total, width = 30) {
6
+ if (total === 0)
7
+ return `[${"-".repeat(width)}] 0.0%`;
8
+ const percent = Math.min(100, Math.max(0, (current / total) * 100));
9
+ const filled = Math.round((width * percent) / 100);
10
+ const empty = width - filled;
11
+ return `[${"█".repeat(filled)}${"░".repeat(empty)}] ${percent.toFixed(1)}%`;
12
+ }
13
+ export async function showStatus() {
14
+ const ctx = getContext();
15
+ const active = getActiveModel();
16
+ console.log("=== Zenn RAG インデックス状況 ===");
17
+ console.log(`対象フォルダ: ${ctx.rootDir}`);
18
+ console.log(`現在の設定: ${active.provider} (${active.model})\n`);
19
+ let articleFiles = [];
20
+ try {
21
+ const entries = await fs.readdir(ctx.articlesDir);
22
+ articleFiles = entries.filter((f) => f.endsWith(".md"));
23
+ }
24
+ catch {
25
+ // articlesDir未作成
26
+ }
27
+ let bookFiles = [];
28
+ try {
29
+ const bookDirs = await fs.readdir(ctx.booksDir, { withFileTypes: true });
30
+ for (const d of bookDirs) {
31
+ if (d.isDirectory()) {
32
+ const chFiles = await fs.readdir(path.join(ctx.booksDir, d.name));
33
+ for (const ch of chFiles) {
34
+ if (ch.endsWith(".md")) {
35
+ bookFiles.push(`${d.name}/${ch}`);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ catch {
42
+ // booksDir未作成
43
+ }
44
+ const totalFiles = articleFiles.length + bookFiles.length;
45
+ if (totalFiles === 0) {
46
+ console.error("記事または本のディレクトリが見つかりません。");
47
+ return;
48
+ }
49
+ let manifest = { version: 1, entries: {} };
50
+ try {
51
+ const raw = await fs.readFile(ctx.manifestPath, "utf-8");
52
+ manifest = JSON.parse(raw);
53
+ }
54
+ catch {
55
+ // まだ未作成
56
+ }
57
+ const indexedTargets = Object.keys(manifest.entries);
58
+ const indexedCount = indexedTargets.length;
59
+ let indexedChunks = 0;
60
+ for (const entry of Object.values(manifest.entries)) {
61
+ indexedChunks += entry.chunkIds?.length || 0;
62
+ }
63
+ const avgChunksPerItem = indexedCount > 0 ? indexedChunks / indexedCount : 5;
64
+ const estimatedTotalChunks = indexedCount === totalFiles
65
+ ? indexedChunks
66
+ : Math.max(indexedChunks, Math.round(avgChunksPerItem * totalFiles));
67
+ console.log(`■ コンテンツの進捗:`);
68
+ console.log(` ${renderProgressBar(indexedCount, totalFiles)}`);
69
+ console.log(` 完了: ${indexedCount} / ${totalFiles} ファイル (記事: ${articleFiles.length}, 本チャプター: ${bookFiles.length})\n`);
70
+ console.log(`■ チャンクの進捗:`);
71
+ console.log(` ${renderProgressBar(indexedChunks, estimatedTotalChunks)}`);
72
+ console.log(` 完了: ${indexedChunks} / ${indexedCount === totalFiles
73
+ ? `${indexedChunks}`
74
+ : `約 ${estimatedTotalChunks}`} チャンク\n`);
75
+ if (indexedCount > 0) {
76
+ const recent = Object.entries(manifest.entries)
77
+ .sort((a, b) => new Date(b[1].lastIndexed).getTime() -
78
+ new Date(a[1].lastIndexed).getTime())
79
+ .slice(0, 3);
80
+ console.log(`■ 直近にインデックスされた記事:`);
81
+ for (const [slug, entry] of recent) {
82
+ const dateStr = new Date(entry.lastIndexed).toLocaleTimeString();
83
+ console.log(` - [${dateStr}] ${slug} (${entry.chunkIds.length} チャンク)`);
84
+ }
85
+ console.log();
86
+ }
87
+ try {
88
+ const store = new ArticleVectorStore();
89
+ const topics = await store.getAllTopics();
90
+ const topicEntries = Object.entries(topics).sort((a, b) => b[1] - a[1]);
91
+ if (topicEntries.length > 0) {
92
+ console.log(`■ 登録済みトピック (上位10件):`);
93
+ const top10 = topicEntries.slice(0, 10);
94
+ for (const [topic, count] of top10) {
95
+ console.log(` - ${topic}: ${count} 記事`);
96
+ }
97
+ console.log(` (他 全 ${topicEntries.length} トピック)`);
98
+ }
99
+ }
100
+ catch {
101
+ // スキップ
102
+ }
103
+ console.log(`\n${"=".repeat(45)}`);
104
+ if (indexedCount < totalFiles) {
105
+ console.log("💡 インデックスが未完了です。`zenn-rag index` で同期できます。");
106
+ }
107
+ else {
108
+ console.log("🎉 全コンテンツのインデックス同期が完了しています!");
109
+ }
110
+ }
111
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type EmbeddingProvider = "gemini" | "openai" | "ollama";
2
+ export interface RagContext {
3
+ rootDir: string;
4
+ articlesDir: string;
5
+ booksDir: string;
6
+ vectorDbDir: string;
7
+ manifestPath: string;
8
+ provider: EmbeddingProvider;
9
+ geminiApiKey: string;
10
+ geminiModel: string;
11
+ openaiApiKey: string;
12
+ openaiModel: string;
13
+ openaiBaseUrl?: string;
14
+ ollamaBaseUrl: string;
15
+ ollamaModel: string;
16
+ zennUsername: string;
17
+ }
18
+ export declare function detectProvider(): EmbeddingProvider;
19
+ export declare function initContext(targetDir?: string): RagContext;
20
+ export declare function getContext(): RagContext;
21
+ export declare function resetContext(): void;
22
+ export declare function getActiveModel(): {
23
+ provider: EmbeddingProvider;
24
+ model: string;
25
+ };
26
+ export declare function getArticleUrl(slug: string): string;
27
+ export declare function getBookChapterUrl(bookSlug: string, chapterSlug: string): string;
28
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,cAAc,IAAI,iBAAiB,CAgBlD;AAED,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAmD1D;AAED,wBAAgB,UAAU,IAAI,UAAU,CAKvC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,cAAc,IAAI;IAChC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf,CAWA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAIR"}
package/dist/config.js ADDED
@@ -0,0 +1,88 @@
1
+ import path from "node:path";
2
+ import dotenv from "dotenv";
3
+ let currentContext = null;
4
+ export function detectProvider() {
5
+ const explicit = process.env.EMBEDDING_PROVIDER?.toLowerCase();
6
+ if (explicit === "gemini" || explicit === "openai" || explicit === "ollama") {
7
+ return explicit;
8
+ }
9
+ if (process.env.OPENAI_BASE_URL ||
10
+ (process.env.OPENAI_API_KEY && !process.env.GEMINI_API_KEY)) {
11
+ return "openai";
12
+ }
13
+ if (process.env.OLLAMA_BASE_URL) {
14
+ return "ollama";
15
+ }
16
+ return "gemini";
17
+ }
18
+ export function initContext(targetDir) {
19
+ const rootDir = path.resolve(process.cwd(), targetDir || ".");
20
+ const envPath = path.join(rootDir, ".env");
21
+ // 対象プロジェクトの .env を優先ロード(quiet: true でstdout汚染を防止)
22
+ dotenv.config({ path: envPath, quiet: true });
23
+ const provider = detectProvider();
24
+ const vectorDbRel = process.env.VECTOR_DB_DIR || ".vectordb";
25
+ const vectorDbDir = path.resolve(rootDir, vectorDbRel);
26
+ const commonBaseUrl = process.env.BASE_URL || process.env.EMBEDDING_BASE_URL;
27
+ const commonModel = process.env.EMBEDDING_MODEL;
28
+ const commonApiKey = process.env.API_KEY || process.env.EMBEDDING_API_KEY;
29
+ currentContext = {
30
+ rootDir,
31
+ articlesDir: path.resolve(rootDir, "articles"),
32
+ booksDir: path.resolve(rootDir, "books"),
33
+ vectorDbDir,
34
+ manifestPath: path.resolve(vectorDbDir, "manifest.json"),
35
+ provider,
36
+ // Google Gemini
37
+ geminiApiKey: process.env.GEMINI_API_KEY || commonApiKey || "",
38
+ geminiModel: process.env.GEMINI_EMBEDDING_MODEL ||
39
+ commonModel ||
40
+ "gemini-embedding-001",
41
+ // OpenAI / OpenAI-compatible (LM Studio等)
42
+ openaiApiKey: process.env.OPENAI_API_KEY ||
43
+ commonApiKey ||
44
+ (process.env.OPENAI_BASE_URL || commonBaseUrl ? "lm-studio" : ""),
45
+ openaiModel: process.env.OPENAI_EMBEDDING_MODEL ||
46
+ commonModel ||
47
+ "text-embedding-3-small",
48
+ openaiBaseUrl: process.env.OPENAI_BASE_URL || commonBaseUrl || undefined,
49
+ // Ollama
50
+ ollamaBaseUrl: process.env.OLLAMA_BASE_URL || commonBaseUrl || "http://localhost:11434",
51
+ ollamaModel: process.env.OLLAMA_EMBEDDING_MODEL || commonModel || "bge-m3",
52
+ // Common
53
+ zennUsername: process.env.ZENN_USERNAME || "",
54
+ };
55
+ return currentContext;
56
+ }
57
+ export function getContext() {
58
+ if (!currentContext) {
59
+ return initContext();
60
+ }
61
+ return currentContext;
62
+ }
63
+ export function resetContext() {
64
+ currentContext = null;
65
+ }
66
+ export function getActiveModel() {
67
+ const ctx = getContext();
68
+ switch (ctx.provider) {
69
+ case "openai":
70
+ return { provider: "openai", model: ctx.openaiModel };
71
+ case "ollama":
72
+ return { provider: "ollama", model: ctx.ollamaModel };
73
+ case "gemini":
74
+ default:
75
+ return { provider: "gemini", model: ctx.geminiModel };
76
+ }
77
+ }
78
+ export function getArticleUrl(slug) {
79
+ const ctx = getContext();
80
+ const username = ctx.zennUsername ? `${ctx.zennUsername}/` : "";
81
+ return `https://zenn.dev/${username}articles/${slug}`;
82
+ }
83
+ export function getBookChapterUrl(bookSlug, chapterSlug) {
84
+ const ctx = getContext();
85
+ const username = ctx.zennUsername ? `${ctx.zennUsername}/` : "";
86
+ return `https://zenn.dev/${username}books/${bookSlug}/viewer/${chapterSlug}`;
87
+ }
88
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IEmbeddingProvider } from "./providers/types.js";
2
+ export * from "./providers/types.js";
3
+ export * from "./providers/gemini.js";
4
+ export * from "./providers/openai.js";
5
+ export * from "./providers/ollama.js";
6
+ export * from "./providers/factory.js";
7
+ export declare function getDefaultEmbeddingProvider(): IEmbeddingProvider;
8
+ export declare function resetDefaultEmbeddingProvider(): void;
9
+ /**
10
+ * テキストのEmbeddingベクトルを生成する(後方互換ラッパー)
11
+ */
12
+ export declare function getEmbedding(text: string): Promise<number[]>;
13
+ /**
14
+ * 複数テキストのEmbeddingベクトルを一括生成する(後方互換ラッパー)
15
+ */
16
+ export declare function getEmbeddings(texts: string[], onProgress?: (completed: number, total: number) => void): Promise<number[][]>;
17
+ //# sourceMappingURL=embedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAIvC,wBAAgB,2BAA2B,IAAI,kBAAkB,CAKhE;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGlE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACtD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAGrB"}
@@ -0,0 +1,31 @@
1
+ import { createEmbeddingProvider } from "./providers/factory.js";
2
+ export * from "./providers/types.js";
3
+ export * from "./providers/gemini.js";
4
+ export * from "./providers/openai.js";
5
+ export * from "./providers/ollama.js";
6
+ export * from "./providers/factory.js";
7
+ let defaultProvider = null;
8
+ export function getDefaultEmbeddingProvider() {
9
+ if (!defaultProvider) {
10
+ defaultProvider = createEmbeddingProvider();
11
+ }
12
+ return defaultProvider;
13
+ }
14
+ export function resetDefaultEmbeddingProvider() {
15
+ defaultProvider = null;
16
+ }
17
+ /**
18
+ * テキストのEmbeddingベクトルを生成する(後方互換ラッパー)
19
+ */
20
+ export async function getEmbedding(text) {
21
+ const provider = getDefaultEmbeddingProvider();
22
+ return provider.getEmbedding(text);
23
+ }
24
+ /**
25
+ * 複数テキストのEmbeddingベクトルを一括生成する(後方互換ラッパー)
26
+ */
27
+ export async function getEmbeddings(texts, onProgress) {
28
+ const provider = getDefaultEmbeddingProvider();
29
+ return provider.getEmbeddings(texts, onProgress);
30
+ }
31
+ //# sourceMappingURL=embedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,IAAI,eAAe,GAA8B,IAAI,CAAC;AAEtD,MAAM,UAAU,2BAA2B;IACzC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,uBAAuB,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,UAAuD;IAEvD,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC/C,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from "./types.js";
2
+ export * from "./config.js";
3
+ export * from "./parser.js";
4
+ export * from "./embedder.js";
5
+ export * from "./store.js";
6
+ export * from "./logger.js";
7
+ export * from "./services/sync-service.js";
8
+ export { syncIndex } from "./commands/index.js";
9
+ export { searchArticles, searchCli } from "./commands/search.js";
10
+ export { showStatus } from "./commands/status.js";
11
+ export { runMcpServer } from "./commands/mcp.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export * from "./types.js";
2
+ export * from "./config.js";
3
+ export * from "./parser.js";
4
+ export * from "./embedder.js";
5
+ export * from "./store.js";
6
+ export * from "./logger.js";
7
+ export * from "./services/sync-service.js";
8
+ export { syncIndex } from "./commands/index.js";
9
+ export { searchArticles, searchCli } from "./commands/search.js";
10
+ export { showStatus } from "./commands/status.js";
11
+ export { runMcpServer } from "./commands/mcp.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface Logger {
2
+ info(message: string): void;
3
+ warn(message: string): void;
4
+ error(message: string, error?: unknown): void;
5
+ write(message: string): void;
6
+ }
7
+ export declare class ConsoleLogger implements Logger {
8
+ info(message: string): void;
9
+ warn(message: string): void;
10
+ error(message: string, error?: unknown): void;
11
+ write(message: string): void;
12
+ }
13
+ /**
14
+ * MCPサーバー実行時用ロガー
15
+ * 標準出力(stdout)は JSON-RPC 通信専用のため、ログはすべて stderr に出力する
16
+ */
17
+ export declare class McpLogger implements Logger {
18
+ info(message: string): void;
19
+ warn(message: string): void;
20
+ error(message: string, error?: unknown): void;
21
+ write(message: string): void;
22
+ }
23
+ export declare class SilentLogger implements Logger {
24
+ info(): void;
25
+ warn(): void;
26
+ error(): void;
27
+ write(): void;
28
+ }
29
+ export declare function getLogger(): Logger;
30
+ export declare function setLogger(logger: Logger): void;
31
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,aAAc,YAAW,MAAM;IAC1C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAM5C;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3B;CACF;AAED;;;GAGG;AACH,qBAAa,SAAU,YAAW,MAAM;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAM5C;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3B;CACF;AAED,qBAAa,YAAa,YAAW,MAAM;IACzC,IAAI,IAAI,IAAI,CAAG;IACf,IAAI,IAAI,IAAI,CAAG;IACf,KAAK,IAAI,IAAI,CAAG;IAChB,KAAK,IAAI,IAAI,CAAG;CACjB;AAID,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C"}
package/dist/logger.js ADDED
@@ -0,0 +1,56 @@
1
+ export class ConsoleLogger {
2
+ info(message) {
3
+ console.log(message);
4
+ }
5
+ warn(message) {
6
+ console.warn(message);
7
+ }
8
+ error(message, error) {
9
+ if (error !== undefined) {
10
+ console.error(message, error);
11
+ }
12
+ else {
13
+ console.error(message);
14
+ }
15
+ }
16
+ write(message) {
17
+ process.stdout.write(message);
18
+ }
19
+ }
20
+ /**
21
+ * MCPサーバー実行時用ロガー
22
+ * 標準出力(stdout)は JSON-RPC 通信専用のため、ログはすべて stderr に出力する
23
+ */
24
+ export class McpLogger {
25
+ info(message) {
26
+ console.error(`[INFO] ${message}`);
27
+ }
28
+ warn(message) {
29
+ console.error(`[WARN] ${message}`);
30
+ }
31
+ error(message, error) {
32
+ if (error !== undefined) {
33
+ console.error(`[ERROR] ${message}`, error);
34
+ }
35
+ else {
36
+ console.error(`[ERROR] ${message}`);
37
+ }
38
+ }
39
+ write(message) {
40
+ process.stderr.write(message);
41
+ }
42
+ }
43
+ export class SilentLogger {
44
+ info() { }
45
+ warn() { }
46
+ error() { }
47
+ write() { }
48
+ }
49
+ let currentLogger = new ConsoleLogger();
50
+ export function getLogger() {
51
+ return currentLogger;
52
+ }
53
+ export function setLogger(logger) {
54
+ currentLogger = logger;
55
+ }
56
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,aAAa;IACxB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAe;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,SAAS;IACpB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAe;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB,IAAI,KAAU,CAAC;IACf,IAAI,KAAU,CAAC;IACf,KAAK,KAAU,CAAC;IAChB,KAAK,KAAU,CAAC;CACjB;AAED,IAAI,aAAa,GAAW,IAAI,aAAa,EAAE,CAAC;AAEhD,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { ArticleChunk, ArticleFrontmatter } from "./types.js";
2
+ export declare function computeHash(content: string): string;
3
+ /**
4
+ * Markdownを見出し単位でセクションに分割する
5
+ */
6
+ export declare function splitMarkdownIntoSections(markdown: string): {
7
+ heading: string;
8
+ text: string;
9
+ }[];
10
+ /**
11
+ * コードブロック(``` または ~~~)を保護しながら段落に分割する
12
+ */
13
+ export declare function extractParagraphs(text: string): string[];
14
+ export declare function splitSectionIfLong(text: string, maxChars?: number): string[];
15
+ export interface ParseArticleOptions {
16
+ articleUrl?: string;
17
+ }
18
+ /**
19
+ * Markdown文字列をパースしてArticleChunk配列に変換する純粋関数
20
+ */
21
+ export declare function parseArticle(rawContent: string, slug: string, options?: ParseArticleOptions): {
22
+ slug: string;
23
+ frontmatter: ArticleFrontmatter;
24
+ chunks: ArticleChunk[];
25
+ fileHash: string;
26
+ };
27
+ /**
28
+ * 1つの記事Markdownファイルを読み込んでパースし、複数のArticleChunkに変換する
29
+ */
30
+ export declare function parseArticleFile(filePath: string, options?: ParseArticleOptions): Promise<{
31
+ slug: string;
32
+ frontmatter: ArticleFrontmatter;
33
+ chunks: ArticleChunk[];
34
+ fileHash: string;
35
+ }>;
36
+ /**
37
+ * Zennの本(Books)の1チャプターをパースしてArticleChunk配列に変換する純粋関数
38
+ */
39
+ export declare function parseBookChapter(rawContent: string, bookSlug: string, chapterSlug: string, options?: ParseArticleOptions): {
40
+ slug: string;
41
+ frontmatter: ArticleFrontmatter;
42
+ chunks: ArticleChunk[];
43
+ fileHash: string;
44
+ bookSlug: string;
45
+ };
46
+ /**
47
+ * 本のチャプターファイルを読み込んでパースする
48
+ */
49
+ export declare function parseBookChapterFile(filePath: string, bookSlug: string, options?: ParseArticleOptions): Promise<{
50
+ slug: string;
51
+ frontmatter: ArticleFrontmatter;
52
+ chunks: ArticleChunk[];
53
+ fileHash: string;
54
+ bookSlug: string;
55
+ }>;
56
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEnE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAyCrC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqCxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,MAAM,EAAE,CAuB1E;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CA6CA;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAID;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAiDA;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAID"}