ralph-hero-knowledge-index 0.1.10 → 0.1.12

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-knowledge",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Knowledge graph for ralph-hero: semantic search, relationship traversal, and document indexing across thoughts/ documents. Optional companion to ralph-hero.",
5
5
  "author": {
6
6
  "name": "Chad Dubiel",
package/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "ralph-knowledge": {
4
4
  "command": "npx",
5
- "args": ["-y", "ralph-hero-knowledge-index@0.1.10"]
5
+ "args": ["-y", "ralph-hero-knowledge-index@0.1.12"]
6
6
  }
7
7
  }
8
8
  }
@@ -0,0 +1 @@
1
+ export declare function findMarkdownFiles(dir: string): string[];
@@ -0,0 +1,19 @@
1
+ import { readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ export function findMarkdownFiles(dir) {
4
+ const results = [];
5
+ function walk(d) {
6
+ for (const entry of readdirSync(d, { withFileTypes: true })) {
7
+ const fullPath = join(d, entry.name);
8
+ if (entry.isDirectory() && !entry.name.startsWith(".") && !entry.name.startsWith("_")) {
9
+ walk(fullPath);
10
+ }
11
+ else if (entry.isFile() && entry.name.endsWith(".md") && !entry.name.startsWith("_")) {
12
+ results.push(fullPath);
13
+ }
14
+ }
15
+ }
16
+ walk(dir);
17
+ return results;
18
+ }
19
+ //# sourceMappingURL=file-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.js","sourceRoot":"","sources":["../src/file-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,SAAS,IAAI,CAAC,CAAS;QACrB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtF,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ParsedDocument } from "./parser.js";
2
+ export declare function formatIssueNumber(num: number): string;
3
+ export declare function frontmatter(fields: Record<string, unknown>): string;
4
+ export declare function writeTypeIndex(outDir: string, type: string, heading: string, docs: ParsedDocument[]): void;
5
+ export declare function writeIssueHubs(outDir: string, allDocs: ParsedDocument[]): void;
6
+ export declare function writeMasterIndex(outDir: string, allDocs: ParsedDocument[], hasUncategorized?: boolean): void;
7
+ export declare function writeQueryReference(outDir: string): void;
8
+ export declare function generateIndexes(outDir: string, allDocs: ParsedDocument[]): void;
@@ -0,0 +1,247 @@
1
+ import { writeFileSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { stringify as yamlStringify } from "yaml";
4
+ export function formatIssueNumber(num) {
5
+ return num < 10000 ? `GH-${String(num).padStart(4, "0")}` : `GH-${num}`;
6
+ }
7
+ export function frontmatter(fields) {
8
+ return `---\n${yamlStringify(fields).trimEnd()}\n---\n`;
9
+ }
10
+ export function writeTypeIndex(outDir, type, heading, docs) {
11
+ const active = docs.filter((d) => d.status !== "superseded");
12
+ const superseded = docs.filter((d) => d.status === "superseded");
13
+ const sortByDate = (a, b) => (b.date ?? "").localeCompare(a.date ?? "");
14
+ active.sort(sortByDate);
15
+ superseded.sort(sortByDate);
16
+ const lines = [
17
+ frontmatter({ generated: true, updated: new Date().toISOString().slice(0, 10) }),
18
+ `# ${heading}\n`,
19
+ ];
20
+ if (active.length > 0) {
21
+ lines.push("## Active\n");
22
+ for (const doc of active) {
23
+ const issue = doc.githubIssue ? ` — #${doc.githubIssue}` : "";
24
+ lines.push(`- [[${doc.id}]]${issue} · ${doc.title}`);
25
+ }
26
+ lines.push("");
27
+ }
28
+ if (superseded.length > 0) {
29
+ lines.push("## Superseded\n");
30
+ for (const doc of superseded) {
31
+ const supersededByRel = doc.relationships.find((r) => r.type === "superseded_by");
32
+ const arrow = supersededByRel ? ` → [[${supersededByRel.targetId}]]` : "";
33
+ lines.push(`- ~~[[${doc.id}]]~~${arrow}`);
34
+ }
35
+ lines.push("");
36
+ }
37
+ writeFileSync(join(outDir, `_${type}.md`), lines.join("\n"));
38
+ }
39
+ const TYPE_HEADINGS = {
40
+ research: "Research",
41
+ plan: "Plans",
42
+ spec: "Specs",
43
+ idea: "Ideas",
44
+ review: "Reviews",
45
+ report: "Reports",
46
+ };
47
+ export function writeIssueHubs(outDir, allDocs) {
48
+ const byIssue = new Map();
49
+ for (const doc of allDocs) {
50
+ if (doc.githubIssue !== null) {
51
+ const list = byIssue.get(doc.githubIssue) ?? [];
52
+ list.push(doc);
53
+ byIssue.set(doc.githubIssue, list);
54
+ }
55
+ }
56
+ const issuesDir = join(outDir, "_issues");
57
+ mkdirSync(issuesDir, { recursive: true });
58
+ for (const [issueNum, docs] of byIssue) {
59
+ const fileName = `${formatIssueNumber(issueNum)}.md`;
60
+ const lines = [
61
+ frontmatter({ generated: true, github_issue: issueNum, updated: new Date().toISOString().slice(0, 10) }),
62
+ `# GH-${issueNum}\n`,
63
+ ];
64
+ const byType = new Map();
65
+ for (const doc of docs) {
66
+ const t = doc.type ?? "other";
67
+ const list = byType.get(t) ?? [];
68
+ list.push(doc);
69
+ byType.set(t, list);
70
+ }
71
+ for (const [type, heading] of Object.entries(TYPE_HEADINGS)) {
72
+ const typeDocs = byType.get(type);
73
+ if (typeDocs && typeDocs.length > 0) {
74
+ lines.push(`## ${heading}\n`);
75
+ for (const doc of typeDocs) {
76
+ lines.push(`- [[${doc.id}]] — ${doc.title}`);
77
+ }
78
+ lines.push("");
79
+ }
80
+ }
81
+ // Collect docs with null type ("other") or non-standard types (e.g., "meeting")
82
+ const otherDocs = [];
83
+ for (const [type, typeDocs] of byType) {
84
+ if (type !== "other" && TYPE_HEADINGS[type])
85
+ continue;
86
+ otherDocs.push(...typeDocs);
87
+ }
88
+ if (otherDocs.length > 0) {
89
+ lines.push("## Other\n");
90
+ for (const doc of otherDocs) {
91
+ lines.push(`- [[${doc.id}]] — ${doc.title}`);
92
+ }
93
+ lines.push("");
94
+ }
95
+ const allRels = docs.flatMap((d) => d.relationships);
96
+ if (allRels.length > 0) {
97
+ lines.push("## Relationships\n");
98
+ for (const rel of allRels) {
99
+ lines.push(`- ${rel.type}:: [[${rel.targetId}]]`);
100
+ }
101
+ lines.push("");
102
+ }
103
+ writeFileSync(join(issuesDir, fileName), lines.join("\n"));
104
+ }
105
+ }
106
+ const RECENT_LIMIT = 20;
107
+ export function writeMasterIndex(outDir, allDocs, hasUncategorized = false) {
108
+ const sorted = [...allDocs].sort((a, b) => (b.date ?? "").localeCompare(a.date ?? ""));
109
+ const recent = sorted.slice(0, RECENT_LIMIT);
110
+ const lines = [
111
+ frontmatter({ generated: true, updated: new Date().toISOString().slice(0, 10) }),
112
+ "# Knowledge Index\n",
113
+ "## Browse by Type\n",
114
+ "- [[_research]] — Research documents",
115
+ "- [[_plans]] — Implementation plans",
116
+ "- [[_specs]] — Specifications",
117
+ "- [[_ideas]] — Ideas and drafts",
118
+ "- [[_reviews]] — Code and plan reviews",
119
+ "- [[_reports]] — Status reports",
120
+ "- [[_queries]] — Dataview query snippets",
121
+ ];
122
+ if (hasUncategorized) {
123
+ lines.push("- [[_uncategorized]] — Uncategorized documents");
124
+ }
125
+ lines.push("");
126
+ if (recent.length > 0) {
127
+ lines.push("## Recent Documents\n");
128
+ for (const doc of recent) {
129
+ const type = doc.type ? `[${doc.type}]` : "";
130
+ const issue = doc.githubIssue ? ` #${doc.githubIssue}` : "";
131
+ lines.push(`- [[${doc.id}]] ${type}${issue} — ${doc.title}`);
132
+ }
133
+ lines.push("");
134
+ }
135
+ writeFileSync(join(outDir, "_index.md"), lines.join("\n"));
136
+ }
137
+ export function writeQueryReference(outDir) {
138
+ const content = `${frontmatter({ generated: true, updated: new Date().toISOString().slice(0, 10) })}
139
+ # Knowledge Queries
140
+
141
+ Pre-built Dataview queries. Copy any query block into a note to use it.
142
+ Requires the [Dataview](https://github.com/blacksmithgu/obsidian-dataview) community plugin.
143
+
144
+ ## All Research by Date
145
+
146
+ \`\`\`dataview
147
+ TABLE status, tags, github_issue as "Issue"
148
+ FROM "."
149
+ WHERE type = "research"
150
+ SORT date DESC
151
+ \`\`\`
152
+
153
+ ## Plans by Status
154
+
155
+ \`\`\`dataview
156
+ TABLE status, github_issue as "Issue", date
157
+ FROM "."
158
+ WHERE type = "plan"
159
+ SORT date DESC
160
+ \`\`\`
161
+
162
+ ## Documents by Tag
163
+
164
+ Replace \`"mcp-server"\` with your tag of interest:
165
+
166
+ \`\`\`dataview
167
+ TABLE type, status, date
168
+ FROM "."
169
+ WHERE contains(tags, "mcp-server")
170
+ SORT date DESC
171
+ \`\`\`
172
+
173
+ ## Documents by Issue Number
174
+
175
+ Replace \`564\` with your issue number:
176
+
177
+ \`\`\`dataview
178
+ TABLE type, status, date
179
+ FROM "."
180
+ WHERE github_issue = 564
181
+ SORT type ASC
182
+ \`\`\`
183
+
184
+ ## Draft Documents (Active Work)
185
+
186
+ \`\`\`dataview
187
+ TABLE type, github_issue as "Issue", date
188
+ FROM "."
189
+ WHERE status = "draft" AND !generated
190
+ SORT date DESC
191
+ \`\`\`
192
+
193
+ ## Superseded Documents
194
+
195
+ \`\`\`dataview
196
+ TABLE superseded_by, date
197
+ FROM "."
198
+ WHERE status = "superseded"
199
+ SORT date DESC
200
+ \`\`\`
201
+
202
+ ## Recently Modified
203
+
204
+ \`\`\`dataview
205
+ TABLE type, status, github_issue as "Issue"
206
+ FROM "."
207
+ WHERE !generated
208
+ SORT file.mtime DESC
209
+ LIMIT 20
210
+ \`\`\`
211
+
212
+ ## Issues with Research but No Plan
213
+
214
+ \`\`\`dataview
215
+ TABLE date, status
216
+ FROM "."
217
+ WHERE type = "research" AND github_issue
218
+ GROUP BY github_issue
219
+ FLATTEN github_issue as issue
220
+ WHERE !contains(rows.type, "plan")
221
+ \`\`\`
222
+ `;
223
+ writeFileSync(join(outDir, "_queries.md"), content);
224
+ }
225
+ const TYPE_INDEX_CONFIG = [
226
+ { type: "research", filename: "research", heading: "Research Documents" },
227
+ { type: "plan", filename: "plans", heading: "Implementation Plans" },
228
+ { type: "spec", filename: "specs", heading: "Specifications" },
229
+ { type: "idea", filename: "ideas", heading: "Ideas & Drafts" },
230
+ { type: "review", filename: "reviews", heading: "Reviews" },
231
+ { type: "report", filename: "reports", heading: "Reports" },
232
+ ];
233
+ export function generateIndexes(outDir, allDocs) {
234
+ for (const { type, filename, heading } of TYPE_INDEX_CONFIG) {
235
+ const typeDocs = allDocs.filter((d) => d.type === type);
236
+ writeTypeIndex(outDir, filename, heading, typeDocs);
237
+ }
238
+ // Documents with type: null go into an "uncategorized" index
239
+ const uncategorized = allDocs.filter((d) => d.type === null || !TYPE_INDEX_CONFIG.some((c) => c.type === d.type));
240
+ if (uncategorized.length > 0) {
241
+ writeTypeIndex(outDir, "uncategorized", "Uncategorized Documents", uncategorized);
242
+ }
243
+ writeMasterIndex(outDir, allDocs, uncategorized.length > 0);
244
+ writeIssueHubs(outDir, allDocs);
245
+ writeQueryReference(outDir);
246
+ }
247
+ //# sourceMappingURL=generate-indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-indexes.js","sourceRoot":"","sources":["../src/generate-indexes.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts CHANGED
@@ -15,4 +15,5 @@ export interface ParsedDocument {
15
15
  relationships: Relationship[];
16
16
  content: string;
17
17
  }
18
+ export declare function inferTypeFromPath(path: string): string | null;
18
19
  export declare function parseDocument(id: string, path: string, raw: string): ParsedDocument;
package/dist/parser.js CHANGED
@@ -3,6 +3,20 @@ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---/;
3
3
  const TITLE_RE = /^# (.+)$/m;
4
4
  const WIKILINK_REL_RE = /^- (builds_on|tensions):: \[\[(.+?)\]\]/gm;
5
5
  const SUPERSEDED_BY_RE = /\[\[(.+?)\]\]/;
6
+ const PATH_TYPE_MAP = [
7
+ { segment: "/research/", type: "research" },
8
+ { segment: "/plans/", type: "plan" },
9
+ { segment: "/ideas/", type: "idea" },
10
+ { segment: "/reviews/", type: "review" },
11
+ { segment: "/reports/", type: "report" },
12
+ ];
13
+ export function inferTypeFromPath(path) {
14
+ for (const { segment, type } of PATH_TYPE_MAP) {
15
+ if (path.includes(segment))
16
+ return type;
17
+ }
18
+ return null;
19
+ }
6
20
  export function parseDocument(id, path, raw) {
7
21
  const fmMatch = raw.match(FRONTMATTER_RE);
8
22
  const frontmatter = fmMatch ? parseYaml(fmMatch[1]) ?? {} : {};
@@ -30,7 +44,9 @@ export function parseDocument(id, path, raw) {
30
44
  return {
31
45
  id, path, title,
32
46
  date: frontmatter.date ? String(frontmatter.date) : null,
33
- type: frontmatter.type ?? null,
47
+ type: (typeof frontmatter.type === "string" && frontmatter.type.length > 0)
48
+ ? frontmatter.type
49
+ : inferTypeFromPath(path),
34
50
  status: frontmatter.status ?? null,
35
51
  githubIssue: typeof frontmatter.github_issue === "number"
36
52
  ? frontmatter.github_issue
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAqB1C,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC;AAC7B,MAAM,eAAe,GAAG,2CAA2C,CAAC;AACpE,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEzC,MAAM,aAAa,GAA6C;IAC9D,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;IAC3C,EAAE,OAAO,EAAE,SAAS,EAAK,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,OAAO,EAAE,SAAS,EAAK,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,OAAO,EAAE,WAAW,EAAG,IAAI,EAAE,QAAQ,EAAE;IACzC,EAAE,OAAO,EAAE,WAAW,EAAG,IAAI,EAAE,QAAQ,EAAE;CAC1C,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,IAAY,EAAE,GAAW;IACjE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD,MAAM,aAAa,GAAmB,EAAE,CAAC;IACzC,IAAI,KAA6B,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAA6B;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC;IAC/C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAa,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,OAAO;QACL,EAAE,EAAE,IAAI,EAAE,KAAK;QACf,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QACxD,IAAI,EAAE,CAAC,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACzE,CAAC,CAAC,WAAW,CAAC,IAAI;YAClB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,IAAI;QAClC,WAAW,EAAE,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ;YACvD,CAAC,CAAC,WAAW,CAAC,YAAY;YAC1B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAC5F,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ;oBAC7C,CAAC,CAAC,WAAW,CAAC,aAAa;oBAC3B,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI;KACnC,CAAC;AACJ,CAAC"}
package/dist/reindex.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export declare function findMarkdownFiles(dir: string): string[];
2
- export declare function reindex(dirs: string[], dbPath: string): Promise<void>;
1
+ export declare function reindex(dirs: string[], dbPath: string, generate?: boolean): Promise<void>;
3
2
  export declare function resolveDirs(): {
4
3
  dirs: string[];
5
4
  dbPath: string;
5
+ generate: boolean;
6
6
  };
package/dist/reindex.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readFileSync, readdirSync } from "node:fs";
1
+ import { readFileSync } from "node:fs";
2
2
  import { join, relative, resolve, basename } from "node:path";
3
3
  import { homedir } from "node:os";
4
4
  import { KnowledgeDB } from "./db.js";
@@ -6,23 +6,9 @@ import { FtsSearch } from "./search.js";
6
6
  import { VectorSearch } from "./vector-search.js";
7
7
  import { embed, prepareTextForEmbedding } from "./embedder.js";
8
8
  import { parseDocument } from "./parser.js";
9
- export function findMarkdownFiles(dir) {
10
- const results = [];
11
- function walk(d) {
12
- for (const entry of readdirSync(d, { withFileTypes: true })) {
13
- const fullPath = join(d, entry.name);
14
- if (entry.isDirectory() && !entry.name.startsWith(".")) {
15
- walk(fullPath);
16
- }
17
- else if (entry.isFile() && entry.name.endsWith(".md")) {
18
- results.push(fullPath);
19
- }
20
- }
21
- }
22
- walk(dir);
23
- return results;
24
- }
25
- export async function reindex(dirs, dbPath) {
9
+ import { findMarkdownFiles } from "./file-scanner.js";
10
+ import { generateIndexes } from "./generate-indexes.js";
11
+ export async function reindex(dirs, dbPath, generate = false) {
26
12
  console.log(`Indexing ${dirs.join(", ")} -> ${dbPath}`);
27
13
  const db = new KnowledgeDB(dbPath);
28
14
  const fts = new FtsSearch(db);
@@ -38,6 +24,7 @@ export async function reindex(dirs, dbPath) {
38
24
  files.push(...found);
39
25
  }
40
26
  console.log(`Found ${files.length} total markdown files`);
27
+ const parsedDocs = [];
41
28
  let indexed = 0;
42
29
  for (const filePath of files) {
43
30
  const raw = readFileSync(filePath, "utf-8");
@@ -48,6 +35,17 @@ export async function reindex(dirs, dbPath) {
48
35
  : filePath;
49
36
  const id = basename(filePath, ".md");
50
37
  const parsed = parseDocument(id, relPath, raw);
38
+ parsedDocs.push(parsed);
39
+ const missing = [];
40
+ if (!parsed.date)
41
+ missing.push("date");
42
+ if (!parsed.type)
43
+ missing.push("type");
44
+ if (!parsed.status)
45
+ missing.push("status");
46
+ if (missing.length > 0) {
47
+ console.warn(` Warning: ${id} missing frontmatter: ${missing.join(", ")}`);
48
+ }
51
49
  db.upsertDocument({
52
50
  id: parsed.id,
53
51
  path: parsed.path,
@@ -78,29 +76,41 @@ export async function reindex(dirs, dbPath) {
78
76
  }
79
77
  }
80
78
  fts.rebuildIndex();
81
- console.log(`Done. ${indexed} documents indexed.`);
82
- db.close();
79
+ try {
80
+ if (generate && dirs.length > 0) {
81
+ console.log("Generating index notes...");
82
+ generateIndexes(dirs[0], parsedDocs);
83
+ console.log("Index notes generated.");
84
+ }
85
+ }
86
+ finally {
87
+ console.log(`Done. ${indexed} documents indexed.`);
88
+ db.close();
89
+ }
83
90
  }
84
91
  const DEFAULT_DB_PATH = join(homedir(), ".ralph-hero", "knowledge.db");
85
92
  export function resolveDirs() {
86
93
  const cliArgs = process.argv.slice(2);
87
- const cliDb = cliArgs.find(a => a.endsWith(".db"));
88
- const cliDirs = cliArgs.filter(a => !a.endsWith(".db"));
94
+ const noGenerate = cliArgs.includes("--no-generate");
95
+ const positional = cliArgs.filter(a => !a.startsWith("--"));
96
+ const cliDb = positional.find(a => a.endsWith(".db"));
97
+ const cliDirs = positional.filter(a => !a.endsWith(".db"));
89
98
  if (cliDirs.length > 0) {
90
- return { dirs: cliDirs, dbPath: cliDb ?? DEFAULT_DB_PATH };
99
+ return { dirs: cliDirs, dbPath: cliDb ?? DEFAULT_DB_PATH, generate: !noGenerate };
91
100
  }
92
101
  const envDirs = process.env.RALPH_KNOWLEDGE_DIRS;
93
102
  if (envDirs) {
94
103
  return {
95
104
  dirs: envDirs.split(",").map(d => d.trim()).filter(Boolean),
96
105
  dbPath: cliDb ?? process.env.RALPH_KNOWLEDGE_DB ?? DEFAULT_DB_PATH,
106
+ generate: !noGenerate,
97
107
  };
98
108
  }
99
- return { dirs: ["../../thoughts"], dbPath: cliDb ?? DEFAULT_DB_PATH };
109
+ return { dirs: ["../../thoughts"], dbPath: cliDb ?? DEFAULT_DB_PATH, generate: !noGenerate };
100
110
  }
101
111
  const isMain = process.argv[1]?.endsWith("reindex.js");
102
112
  if (isMain) {
103
- const { dirs, dbPath } = resolveDirs();
104
- reindex(dirs, dbPath).catch(console.error);
113
+ const { dirs, dbPath, generate } = resolveDirs();
114
+ reindex(dirs, dbPath, generate).catch(console.error);
105
115
  }
106
116
  //# sourceMappingURL=reindex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reindex.js","sourceRoot":"","sources":["../src/reindex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reindex.js","sourceRoot":"","sources":["../src/reindex.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-hero-knowledge-index",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -132,3 +132,15 @@ Tools available:
132
132
  To reindex after adding new documents:
133
133
  /ralph-knowledge:setup
134
134
  ```
135
+
136
+ Then suggest:
137
+ ```
138
+ Want to browse your knowledge documents in Obsidian?
139
+ Run /ralph-knowledge:setup-obsidian to set up navigational indexes and vault config.
140
+ ```
141
+
142
+ Then suggest:
143
+ ```
144
+ Want to browse your knowledge documents in Obsidian?
145
+ Run /ralph-knowledge:setup-obsidian to set up navigational indexes and vault config.
146
+ ```