codealmanac 0.1.6 → 0.1.8

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 (43) hide show
  1. package/dist/chunk-3C5SY5SE.js +1239 -0
  2. package/dist/chunk-3C5SY5SE.js.map +1 -0
  3. package/dist/chunk-3LC55TG6.js +566 -0
  4. package/dist/chunk-3LC55TG6.js.map +1 -0
  5. package/dist/chunk-4CODZRHH.js +19 -0
  6. package/dist/chunk-4CODZRHH.js.map +1 -0
  7. package/dist/chunk-73A5TGBC.js +441 -0
  8. package/dist/chunk-73A5TGBC.js.map +1 -0
  9. package/dist/chunk-7JUX4ADQ.js +38 -0
  10. package/dist/chunk-7JUX4ADQ.js.map +1 -0
  11. package/dist/chunk-AXFPUHBN.js +227 -0
  12. package/dist/chunk-AXFPUHBN.js.map +1 -0
  13. package/dist/chunk-BJVZLP6O.js +145 -0
  14. package/dist/chunk-BJVZLP6O.js.map +1 -0
  15. package/dist/chunk-FM3VRDK7.js +20 -0
  16. package/dist/chunk-FM3VRDK7.js.map +1 -0
  17. package/dist/chunk-P3LDTCLB.js +34 -0
  18. package/dist/chunk-P3LDTCLB.js.map +1 -0
  19. package/dist/chunk-QHQ6YH7U.js +81 -0
  20. package/dist/chunk-QHQ6YH7U.js.map +1 -0
  21. package/dist/chunk-Z4MWLVS2.js +355 -0
  22. package/dist/chunk-Z4MWLVS2.js.map +1 -0
  23. package/dist/chunk-Z6MBJ3D2.js +203 -0
  24. package/dist/chunk-Z6MBJ3D2.js.map +1 -0
  25. package/dist/cli-HIXXCUSQ.js +393 -0
  26. package/dist/cli-HIXXCUSQ.js.map +1 -0
  27. package/dist/codealmanac.js +32 -5
  28. package/dist/codealmanac.js.map +1 -1
  29. package/dist/doctor-IS6N7V63.js +15 -0
  30. package/dist/doctor-IS6N7V63.js.map +1 -0
  31. package/dist/hook-CRJMWSSO.js +12 -0
  32. package/dist/hook-CRJMWSSO.js.map +1 -0
  33. package/dist/register-commands-JAPO3AUB.js +2647 -0
  34. package/dist/register-commands-JAPO3AUB.js.map +1 -0
  35. package/dist/uninstall-HE2Z2LN2.js +12 -0
  36. package/dist/uninstall-HE2Z2LN2.js.map +1 -0
  37. package/dist/update-IL243I4E.js +10 -0
  38. package/dist/update-IL243I4E.js.map +1 -0
  39. package/dist/wiki-EHZ7LG7R.js +238 -0
  40. package/dist/wiki-EHZ7LG7R.js.map +1 -0
  41. package/package.json +2 -2
  42. package/dist/cli-GTEC5PC7.js +0 -6237
  43. package/dist/cli-GTEC5PC7.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runUpdate
4
+ } from "./chunk-Z6MBJ3D2.js";
5
+ import "./chunk-AXFPUHBN.js";
6
+ import "./chunk-7JUX4ADQ.js";
7
+ export {
8
+ runUpdate
9
+ };
10
+ //# sourceMappingURL=update-IL243I4E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,238 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureFreshIndex,
4
+ findEntry,
5
+ openIndex,
6
+ runHealth
7
+ } from "./chunk-3C5SY5SE.js";
8
+ import {
9
+ formatDuration
10
+ } from "./chunk-4CODZRHH.js";
11
+ import "./chunk-FM3VRDK7.js";
12
+ import {
13
+ findNearestAlmanacDir
14
+ } from "./chunk-7JUX4ADQ.js";
15
+
16
+ // src/commands/doctor-checks/wiki.ts
17
+ import { existsSync, readdirSync, statSync } from "fs";
18
+ import path from "path";
19
+ async function gatherWikiChecks(options) {
20
+ const checks = [];
21
+ const repoRoot = findNearestAlmanacDir(options.cwd);
22
+ if (repoRoot === null) {
23
+ checks.push({
24
+ status: "info",
25
+ key: "wiki.none",
26
+ message: "No wiki in current directory",
27
+ fix: "run: almanac bootstrap (to create one in this repo)"
28
+ });
29
+ return checks;
30
+ }
31
+ checks.push({
32
+ status: "info",
33
+ key: "wiki.repo",
34
+ message: `repo: ${repoRoot}`
35
+ });
36
+ try {
37
+ await ensureFreshIndex({ repoRoot });
38
+ } catch {
39
+ }
40
+ checks.push(await describeRegistry(repoRoot));
41
+ const almanacDir = path.join(repoRoot, ".almanac");
42
+ const dbPath = path.join(almanacDir, "index.db");
43
+ checks.push(...describeCounts(dbPath));
44
+ checks.push(describeIndexFreshness(dbPath));
45
+ checks.push(describeLastCapture(almanacDir, options.now));
46
+ checks.push(await describeHealth(repoRoot, options));
47
+ return checks;
48
+ }
49
+ async function describeRegistry(repoRoot) {
50
+ try {
51
+ const entry = await findEntry({ path: repoRoot });
52
+ if (entry !== null) {
53
+ return {
54
+ status: "ok",
55
+ key: "wiki.registered",
56
+ message: `registered as '${entry.name}'`
57
+ };
58
+ }
59
+ return {
60
+ status: "info",
61
+ key: "wiki.registered",
62
+ message: "not yet registered (will register on first command)"
63
+ };
64
+ } catch (err) {
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ return {
67
+ status: "problem",
68
+ key: "wiki.registered",
69
+ message: `could not read registry: ${msg}`,
70
+ fix: "inspect ~/.almanac/registry.json; remove or fix the malformed entry"
71
+ };
72
+ }
73
+ }
74
+ function describeCounts(dbPath) {
75
+ const checks = [];
76
+ let pageCount = null;
77
+ let topicCount = null;
78
+ if (existsSync(dbPath)) {
79
+ try {
80
+ const db = openIndex(dbPath);
81
+ try {
82
+ pageCount = countRows(db, "pages");
83
+ topicCount = countRows(db, "topics");
84
+ } finally {
85
+ db.close();
86
+ }
87
+ } catch {
88
+ pageCount = null;
89
+ }
90
+ }
91
+ if (pageCount !== null) {
92
+ checks.push({
93
+ status: "info",
94
+ key: "wiki.pages",
95
+ message: `pages: ${pageCount}`
96
+ });
97
+ }
98
+ if (topicCount !== null) {
99
+ checks.push({
100
+ status: "info",
101
+ key: "wiki.topics",
102
+ message: `topics: ${topicCount}`
103
+ });
104
+ }
105
+ return checks;
106
+ }
107
+ function countRows(db, table) {
108
+ const row = db.prepare(`SELECT COUNT(*) AS n FROM ${table}`).get();
109
+ return row?.n ?? 0;
110
+ }
111
+ function describeIndexFreshness(dbPath) {
112
+ if (!existsSync(dbPath)) {
113
+ return {
114
+ status: "info",
115
+ key: "wiki.index",
116
+ message: "index: not built yet (run any query command)"
117
+ };
118
+ }
119
+ try {
120
+ const dbMtime = statSync(dbPath).mtimeMs;
121
+ const age = Date.now() - dbMtime;
122
+ return {
123
+ status: "info",
124
+ key: "wiki.index",
125
+ message: `index: rebuilt ${formatDuration(age)} ago`
126
+ };
127
+ } catch {
128
+ return {
129
+ status: "info",
130
+ key: "wiki.index",
131
+ message: "index: present"
132
+ };
133
+ }
134
+ }
135
+ function describeLastCapture(almanacDir, nowFn) {
136
+ if (!existsSync(almanacDir)) {
137
+ return {
138
+ status: "info",
139
+ key: "wiki.capture",
140
+ message: "last capture: never"
141
+ };
142
+ }
143
+ let entries;
144
+ try {
145
+ entries = readdirSync(almanacDir);
146
+ } catch {
147
+ return {
148
+ status: "info",
149
+ key: "wiki.capture",
150
+ message: "last capture: unknown"
151
+ };
152
+ }
153
+ const captures = entries.filter(
154
+ (e) => e.startsWith(".capture-") && (e.endsWith(".log") || e.endsWith(".jsonl"))
155
+ ).map((e) => {
156
+ try {
157
+ return {
158
+ name: e,
159
+ mtime: statSync(path.join(almanacDir, e)).mtimeMs
160
+ };
161
+ } catch {
162
+ return null;
163
+ }
164
+ }).filter((e) => e !== null);
165
+ if (captures.length === 0) {
166
+ return {
167
+ status: "info",
168
+ key: "wiki.capture",
169
+ message: "last capture: never"
170
+ };
171
+ }
172
+ captures.sort((a, b) => b.mtime - a.mtime);
173
+ const latest = captures[0];
174
+ const now = (nowFn?.() ?? /* @__PURE__ */ new Date()).getTime();
175
+ const age = now - latest.mtime;
176
+ return {
177
+ status: "info",
178
+ key: "wiki.capture",
179
+ message: `last capture: ${formatDuration(age)} ago (${latest.name})`
180
+ };
181
+ }
182
+ async function describeHealth(repoRoot, options) {
183
+ const healthFn = options.runHealthFn ?? runHealth;
184
+ try {
185
+ const healthRes = await healthFn({
186
+ cwd: repoRoot,
187
+ json: true
188
+ });
189
+ const problems = countHealthProblems(healthRes.stdout);
190
+ if (problems === 0) {
191
+ return {
192
+ status: "ok",
193
+ key: "wiki.health",
194
+ message: "almanac health reports 0 problems"
195
+ };
196
+ }
197
+ return {
198
+ status: "problem",
199
+ key: "wiki.health",
200
+ message: `almanac health reports ${problems} problem${problems === 1 ? "" : "s"}`,
201
+ fix: "run: almanac health"
202
+ };
203
+ } catch (err) {
204
+ const msg = err instanceof Error ? err.message : String(err);
205
+ return {
206
+ status: "info",
207
+ key: "wiki.health",
208
+ message: `could not run almanac health: ${msg}`
209
+ };
210
+ }
211
+ }
212
+ var HEALTH_PROBLEM_KEYS = [
213
+ "orphans",
214
+ "stale",
215
+ "dead_refs",
216
+ "broken_links",
217
+ "broken_xwiki",
218
+ "empty_topics",
219
+ "empty_pages",
220
+ "slug_collisions"
221
+ ];
222
+ function countHealthProblems(jsonStdout) {
223
+ try {
224
+ const report = JSON.parse(jsonStdout);
225
+ let total = 0;
226
+ for (const key of HEALTH_PROBLEM_KEYS) {
227
+ const arr = report[key];
228
+ if (Array.isArray(arr)) total += arr.length;
229
+ }
230
+ return total;
231
+ } catch {
232
+ return 0;
233
+ }
234
+ }
235
+ export {
236
+ gatherWikiChecks
237
+ };
238
+ //# sourceMappingURL=wiki-EHZ7LG7R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/doctor-checks/wiki.ts"],"sourcesContent":["import { existsSync, readdirSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport type Database from \"better-sqlite3\";\n\nimport { ensureFreshIndex } from \"../../indexer/index.js\";\nimport { openIndex } from \"../../indexer/schema.js\";\nimport { findNearestAlmanacDir } from \"../../paths.js\";\nimport { findEntry } from \"../../registry/index.js\";\nimport { runHealth, type HealthReport } from \"../health.js\";\nimport { formatDuration } from \"./duration.js\";\nimport type { Check, DoctorOptions } from \"./types.js\";\n\nexport async function gatherWikiChecks(options: DoctorOptions): Promise<Check[]> {\n const checks: Check[] = [];\n const repoRoot = findNearestAlmanacDir(options.cwd);\n\n if (repoRoot === null) {\n checks.push({\n status: \"info\",\n key: \"wiki.none\",\n message: \"No wiki in current directory\",\n fix: \"run: almanac bootstrap (to create one in this repo)\",\n });\n return checks;\n }\n\n checks.push({\n status: \"info\",\n key: \"wiki.repo\",\n message: `repo: ${repoRoot}`,\n });\n\n try {\n await ensureFreshIndex({ repoRoot });\n } catch {\n // non-fatal: counts below and the health probe report any real issue.\n }\n\n checks.push(await describeRegistry(repoRoot));\n\n const almanacDir = path.join(repoRoot, \".almanac\");\n const dbPath = path.join(almanacDir, \"index.db\");\n checks.push(...describeCounts(dbPath));\n checks.push(describeIndexFreshness(dbPath));\n checks.push(describeLastCapture(almanacDir, options.now));\n checks.push(await describeHealth(repoRoot, options));\n\n return checks;\n}\n\nasync function describeRegistry(repoRoot: string): Promise<Check> {\n try {\n const entry = await findEntry({ path: repoRoot });\n if (entry !== null) {\n return {\n status: \"ok\",\n key: \"wiki.registered\",\n message: `registered as '${entry.name}'`,\n };\n }\n return {\n status: \"info\",\n key: \"wiki.registered\",\n message: \"not yet registered (will register on first command)\",\n };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n status: \"problem\",\n key: \"wiki.registered\",\n message: `could not read registry: ${msg}`,\n fix: \"inspect ~/.almanac/registry.json; remove or fix the malformed entry\",\n };\n }\n}\n\nfunction describeCounts(dbPath: string): Check[] {\n const checks: Check[] = [];\n let pageCount: number | null = null;\n let topicCount: number | null = null;\n\n if (existsSync(dbPath)) {\n try {\n const db = openIndex(dbPath);\n try {\n pageCount = countRows(db, \"pages\");\n topicCount = countRows(db, \"topics\");\n } finally {\n db.close();\n }\n } catch {\n pageCount = null;\n }\n }\n\n if (pageCount !== null) {\n checks.push({\n status: \"info\",\n key: \"wiki.pages\",\n message: `pages: ${pageCount}`,\n });\n }\n if (topicCount !== null) {\n checks.push({\n status: \"info\",\n key: \"wiki.topics\",\n message: `topics: ${topicCount}`,\n });\n }\n\n return checks;\n}\n\nfunction countRows(db: Database.Database, table: string): number {\n const row = db\n .prepare<[], { n: number }>(`SELECT COUNT(*) AS n FROM ${table}`)\n .get();\n return row?.n ?? 0;\n}\n\nfunction describeIndexFreshness(dbPath: string): Check {\n if (!existsSync(dbPath)) {\n return {\n status: \"info\",\n key: \"wiki.index\",\n message: \"index: not built yet (run any query command)\",\n };\n }\n try {\n const dbMtime = statSync(dbPath).mtimeMs;\n const age = Date.now() - dbMtime;\n return {\n status: \"info\",\n key: \"wiki.index\",\n message: `index: rebuilt ${formatDuration(age)} ago`,\n };\n } catch {\n return {\n status: \"info\",\n key: \"wiki.index\",\n message: \"index: present\",\n };\n }\n}\n\nfunction describeLastCapture(\n almanacDir: string,\n nowFn?: () => Date,\n): Check {\n if (!existsSync(almanacDir)) {\n return {\n status: \"info\",\n key: \"wiki.capture\",\n message: \"last capture: never\",\n };\n }\n let entries: string[];\n try {\n entries = readdirSync(almanacDir);\n } catch {\n return {\n status: \"info\",\n key: \"wiki.capture\",\n message: \"last capture: unknown\",\n };\n }\n const captures = entries\n .filter(\n (e) =>\n e.startsWith(\".capture-\") &&\n (e.endsWith(\".log\") || e.endsWith(\".jsonl\")),\n )\n .map((e) => {\n try {\n return {\n name: e,\n mtime: statSync(path.join(almanacDir, e)).mtimeMs,\n };\n } catch {\n return null;\n }\n })\n .filter((e): e is { name: string; mtime: number } => e !== null);\n if (captures.length === 0) {\n return {\n status: \"info\",\n key: \"wiki.capture\",\n message: \"last capture: never\",\n };\n }\n captures.sort((a, b) => b.mtime - a.mtime);\n const latest = captures[0]!;\n const now = (nowFn?.() ?? new Date()).getTime();\n const age = now - latest.mtime;\n return {\n status: \"info\",\n key: \"wiki.capture\",\n message: `last capture: ${formatDuration(age)} ago (${latest.name})`,\n };\n}\n\nasync function describeHealth(\n repoRoot: string,\n options: DoctorOptions,\n): Promise<Check> {\n const healthFn = options.runHealthFn ?? runHealth;\n try {\n const healthRes = await healthFn({\n cwd: repoRoot,\n json: true,\n });\n const problems = countHealthProblems(healthRes.stdout);\n if (problems === 0) {\n return {\n status: \"ok\",\n key: \"wiki.health\",\n message: \"almanac health reports 0 problems\",\n };\n }\n return {\n status: \"problem\",\n key: \"wiki.health\",\n message: `almanac health reports ${problems} problem${problems === 1 ? \"\" : \"s\"}`,\n fix: \"run: almanac health\",\n };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n status: \"info\",\n key: \"wiki.health\",\n message: `could not run almanac health: ${msg}`,\n };\n }\n}\n\nconst HEALTH_PROBLEM_KEYS: (keyof HealthReport)[] = [\n \"orphans\",\n \"stale\",\n \"dead_refs\",\n \"broken_links\",\n \"broken_xwiki\",\n \"empty_topics\",\n \"empty_pages\",\n \"slug_collisions\",\n];\n\nfunction countHealthProblems(jsonStdout: string): number {\n try {\n const report = JSON.parse(jsonStdout) as Partial<HealthReport>;\n let total = 0;\n for (const key of HEALTH_PROBLEM_KEYS) {\n const arr = report[key];\n if (Array.isArray(arr)) total += arr.length;\n }\n return total;\n } catch {\n return 0;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codealmanac",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "A living wiki for codebases, maintained by AI agents. Documents what the code can't say: decisions, flows, invariants, incidents, gotchas.",
5
5
  "keywords": [
6
6
  "wiki",
@@ -45,7 +45,7 @@
45
45
  "prepublishOnly": "npm run build"
46
46
  },
47
47
  "dependencies": {
48
- "@anthropic-ai/claude-agent-sdk": "^0.2.110",
48
+ "@anthropic-ai/claude-agent-sdk": "^0.2.129",
49
49
  "better-sqlite3": "^12.9.0",
50
50
  "commander": "^12.1.0",
51
51
  "fast-glob": "^3.3.3",