pi-para 0.6.6 → 0.7.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 (140) hide show
  1. package/ARCHITECTURE.md +4 -6
  2. package/CHANGELOG.md +22 -0
  3. package/CONFIGURATION.md +1 -16
  4. package/README.md +2 -13
  5. package/SETUP.md +1 -7
  6. package/STRUCTURE.md +7 -18
  7. package/dist/cli-legacy.d.ts +2 -1
  8. package/dist/cli-legacy.d.ts.map +1 -1
  9. package/dist/cli-legacy.js +13 -25
  10. package/dist/cli-legacy.js.map +1 -1
  11. package/dist/cli.d.ts +2 -24
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +29 -271
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands.d.ts.map +1 -1
  16. package/dist/commands.js +1 -28
  17. package/dist/commands.js.map +1 -1
  18. package/dist/config.d.ts +1 -5
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +0 -5
  21. package/dist/config.js.map +1 -1
  22. package/dist/context.d.ts.map +1 -1
  23. package/dist/context.js +2 -1
  24. package/dist/context.js.map +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +6 -64
  27. package/dist/index.js.map +1 -1
  28. package/dist/link-utils.d.ts +1 -1
  29. package/dist/link-utils.js +1 -1
  30. package/dist/scheduler/index.d.ts.map +1 -1
  31. package/dist/scheduler/index.js +9 -3
  32. package/dist/scheduler/index.js.map +1 -1
  33. package/dist/settings.d.ts +0 -3
  34. package/dist/settings.d.ts.map +1 -1
  35. package/dist/settings.js +0 -11
  36. package/dist/settings.js.map +1 -1
  37. package/dist/store.d.ts +11 -0
  38. package/dist/store.d.ts.map +1 -1
  39. package/dist/store.js +48 -16
  40. package/dist/store.js.map +1 -1
  41. package/dist/tools/edit-read.d.ts +18 -0
  42. package/dist/tools/edit-read.d.ts.map +1 -0
  43. package/dist/tools/edit-read.js +161 -0
  44. package/dist/tools/edit-read.js.map +1 -0
  45. package/dist/tools/ingest.d.ts +12 -0
  46. package/dist/tools/ingest.d.ts.map +1 -0
  47. package/dist/tools/ingest.js +48 -0
  48. package/dist/tools/ingest.js.map +1 -0
  49. package/dist/tools/lint.d.ts +10 -0
  50. package/dist/tools/lint.d.ts.map +1 -0
  51. package/dist/tools/lint.js +57 -0
  52. package/dist/tools/lint.js.map +1 -0
  53. package/dist/tools/migrate.d.ts +6 -0
  54. package/dist/tools/migrate.d.ts.map +1 -0
  55. package/dist/tools/migrate.js +36 -0
  56. package/dist/tools/migrate.js.map +1 -0
  57. package/dist/tools/move.d.ts +9 -0
  58. package/dist/tools/move.d.ts.map +1 -0
  59. package/dist/tools/move.js +61 -0
  60. package/dist/tools/move.js.map +1 -0
  61. package/dist/tools/query.d.ts +12 -0
  62. package/dist/tools/query.d.ts.map +1 -0
  63. package/dist/tools/query.js +47 -0
  64. package/dist/tools/query.js.map +1 -0
  65. package/dist/tools/schemas.d.ts +109 -0
  66. package/dist/tools/schemas.d.ts.map +1 -0
  67. package/dist/tools/schemas.js +80 -0
  68. package/dist/tools/schemas.js.map +1 -0
  69. package/dist/tools/shared.d.ts +14 -0
  70. package/dist/tools/shared.d.ts.map +1 -0
  71. package/dist/tools/shared.js +25 -0
  72. package/dist/tools/shared.js.map +1 -0
  73. package/dist/tools/summarize.d.ts +8 -0
  74. package/dist/tools/summarize.d.ts.map +1 -0
  75. package/dist/tools/summarize.js +82 -0
  76. package/dist/tools/summarize.js.map +1 -0
  77. package/dist/tools/write.d.ts +23 -0
  78. package/dist/tools/write.d.ts.map +1 -0
  79. package/dist/tools/write.js +215 -0
  80. package/dist/tools/write.js.map +1 -0
  81. package/dist/tools.d.ts +1 -8
  82. package/dist/tools.d.ts.map +1 -1
  83. package/dist/tools.js +13 -795
  84. package/dist/tools.js.map +1 -1
  85. package/dist/wiki-tool-guidance.js +2 -2
  86. package/dist/wiki-tool-guidance.js.map +1 -1
  87. package/package.json +2 -6
  88. package/src/cli-legacy.ts +14 -26
  89. package/src/cli.ts +29 -293
  90. package/src/commands.ts +0 -21
  91. package/src/config.ts +1 -6
  92. package/src/context.ts +2 -1
  93. package/src/index.ts +5 -66
  94. package/src/link-utils.ts +1 -1
  95. package/src/scheduler/index.ts +9 -3
  96. package/src/settings.ts +0 -14
  97. package/src/store.ts +52 -15
  98. package/src/tools/edit-read.ts +193 -0
  99. package/src/tools/ingest.ts +63 -0
  100. package/src/tools/lint.ts +74 -0
  101. package/src/tools/migrate.ts +44 -0
  102. package/src/tools/move.ts +79 -0
  103. package/src/tools/query.ts +63 -0
  104. package/src/tools/schemas.ts +157 -0
  105. package/src/tools/shared.ts +35 -0
  106. package/src/tools/summarize.ts +89 -0
  107. package/src/tools/write.ts +252 -0
  108. package/src/tools.ts +18 -1046
  109. package/src/wiki-tool-guidance.ts +2 -2
  110. package/dist/daemon.d.ts +0 -49
  111. package/dist/daemon.d.ts.map +0 -1
  112. package/dist/daemon.js +0 -226
  113. package/dist/daemon.js.map +0 -1
  114. package/dist/link-discovery.d.ts +0 -40
  115. package/dist/link-discovery.d.ts.map +0 -1
  116. package/dist/link-discovery.js +0 -122
  117. package/dist/link-discovery.js.map +0 -1
  118. package/dist/maintainer.d.ts +0 -24
  119. package/dist/maintainer.d.ts.map +0 -1
  120. package/dist/maintainer.js +0 -358
  121. package/dist/maintainer.js.map +0 -1
  122. package/dist/watcher.d.ts +0 -25
  123. package/dist/watcher.d.ts.map +0 -1
  124. package/dist/watcher.js +0 -84
  125. package/dist/watcher.js.map +0 -1
  126. package/dist/webui/client/dist/index.html +0 -1885
  127. package/dist/webui/server.d.ts +0 -31
  128. package/dist/webui/server.d.ts.map +0 -1
  129. package/dist/webui/server.js +0 -566
  130. package/dist/webui/server.js.map +0 -1
  131. package/scripts/build-assets.mjs +0 -17
  132. package/src/daemon.ts +0 -288
  133. package/src/link-discovery.ts +0 -170
  134. package/src/maintainer.ts +0 -404
  135. package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
  136. package/src/python/minimax_lm.py +0 -198
  137. package/src/python/rlm_capture.py +0 -215
  138. package/src/watcher.ts +0 -101
  139. package/src/webui/client/dist/index.html +0 -1885
  140. package/src/webui/server.ts +0 -765
@@ -1,358 +0,0 @@
1
- /**
2
- * Wiki maintenance agent - uses LLM to intelligently maintain the wiki.
3
- *
4
- * Replaces brittle code-based maintenance (link discovery, dedup detection,
5
- * tag canonicalization, category review) with an LLM agent that understands
6
- * content and can make smarter decisions.
7
- *
8
- * Deterministic operations (secret redaction, schema validation, index rebuild)
9
- * stay in code. This agent handles everything that needs intelligence.
10
- */
11
- import { Agent } from "@earendil-works/pi-agent-core";
12
- import { Type } from "typebox";
13
- import { StringEnum } from "@earendil-works/pi-ai";
14
- import { readPage, writePage, listPages, writeIndex, gitCommit, PARA_CATEGORIES, } from "./wiki.js";
15
- import { validateFrontmatter } from "./frontmatter.js";
16
- import { searchWiki, reindex } from "./store.js";
17
- import { extractWikilinks, syncFrontmatterLinks } from "./link-utils.js";
18
- import { normalizeTags, normalizeScopes } from "./tag-registry.js";
19
- import { redactSecrets } from "./redact.js";
20
- import { lintWiki } from "./lint.js";
21
- // -- Maintenance prompt ------------------------------------------------------
22
- const MAINTENANCE_SYSTEM_PROMPT = `You are a wiki maintenance agent. Your job is to keep a PARA knowledge base healthy, well-linked, and free of duplicates.
23
-
24
- You have tools to inspect and modify the wiki:
25
- - wiki_list: List all pages with their scope, tags, and link counts
26
- - wiki_read: Read a page's full content
27
- - wiki_query: Search for pages by keyword
28
- - wiki_write: Update a page (merge content, add links, fix category)
29
- - wiki_merge: Merge two pages into one (keeps the target, deletes the source)
30
- - wiki_lint: Run automated checks and get a report of issues
31
-
32
- Your maintenance tasks (in priority order):
33
-
34
- 1. DUPLICATE DETECTION & MERGING
35
- - Find pages covering the same topic with different slugs
36
- - Merge them: combine content into the older/more complete page, delete the duplicate
37
- - Examples: "pi-para daemon architecture" and "pi-para daemon" are duplicates
38
-
39
- 2. WIKILINK DISCOVERY
40
- - Find pages that discuss related topics but aren't linked
41
- - Add [[wikilinks]] in body text and ## Connections sections
42
- - Every page should link to at least 2 related pages
43
-
44
- 3. CATEGORY REVIEW
45
- - resources/ should have reference docs, architecture, how-tos, patterns
46
- - areas/ should have ongoing responsibilities only
47
- - projects/ should ONLY have actual goals with end dates (almost never used)
48
- - Move miscategorized pages
49
-
50
- 4. TAG CLEANUP
51
- - Remove redundant tags (tags that duplicate scope values)
52
- - Canonicalize similar tags (e.g. "capture" and "session-capture" → keep "session-capture")
53
- - Ensure tags are kebab-case
54
-
55
- 5. CONTENT QUALITY
56
- - Pages should have: Topic, Key Facts, Connections sections at minimum
57
- - Flag pages with very thin content for expansion
58
- - Flag pages with no ## Connections section
59
-
60
- 6. STALENESS REVIEW
61
- - Identify pages not updated in >30 days that make specific claims about code, file paths, configs, ports, or API endpoints
62
- - These are high-risk for being outdated - add a note in Open Questions: "⚠️ This page has not been updated since [date]. Claims about [specific thing] should be verified."
63
- - If you can determine from other pages or context that a claim is now wrong, fix it directly
64
- - Pages about architecture decisions or historical events are less likely to go stale than pages about configs or deployment
65
-
66
- 7. PROJECT LIFECYCLE REVIEW
67
- - Review projects/ pages — only archive a project if ALL of these are true:
68
- a) The End Condition section explicitly says the goal is met or done
69
- b) There are NO unchecked items ([ ]) remaining anywhere in the page
70
- c) The page has no Open Questions or pending tasks
71
- - Do NOT archive just because status checkboxes are ticked — there may be remaining work not captured in checkboxes
72
- - When archiving: use wiki_write to create the page in archives/ with '(Completed)' in the title, then wiki_merge to remove the projects/ copy
73
-
74
- 8. AREAS HEALTH METRICS
75
- - Review areas/ pages - update current health metrics based on recent lint results and maintenance findings
76
- - Areas represent ongoing responsibilities; keep them current with the latest status
77
-
78
- Rules:
79
- - Work systematically: list all pages first, then process in batches
80
- - For merges: preserve ALL information from both pages, combine into the better-structured one
81
- - For links: only add links between genuinely related pages, not random connections
82
- - Be conservative: when unsure, leave it alone
83
- - Never include secrets/API keys in page content
84
- - Scope must be a kebab-case project name, not a topic description
85
-
86
- When done, summarize what you changed.`;
87
- // -- Tools -------------------------------------------------------------------
88
- function createMaintenanceTools(wikiDir, store) {
89
- const WikiListParams = Type.Object({});
90
- const WikiReadParams = Type.Object({ path: Type.String({ description: "category/slug" }) });
91
- const WikiQueryParams = Type.Object({ query: Type.String() });
92
- const WikiWriteParams = Type.Object({
93
- category: StringEnum(["projects", "areas", "resources", "archives"]),
94
- slug: Type.String(),
95
- title: Type.String(),
96
- scope: Type.Array(Type.String()),
97
- tags: Type.Array(Type.String()),
98
- body: Type.String(),
99
- });
100
- const WikiMergeParams = Type.Object({
101
- keepCategory: StringEnum(["projects", "areas", "resources", "archives"]),
102
- keepSlug: Type.String({ description: "Slug of the page to keep (target)" }),
103
- deleteCategory: StringEnum(["projects", "areas", "resources", "archives"]),
104
- deleteSlug: Type.String({ description: "Slug of the page to delete (source)" }),
105
- mergedBody: Type.String({ description: "Combined body text for the kept page" }),
106
- });
107
- const WikiLintParams = Type.Object({});
108
- const wikiList = {
109
- name: "wiki_list",
110
- label: "Wiki List",
111
- description: "List all wiki pages with scope, tags, and outgoing link count.",
112
- parameters: WikiListParams,
113
- execute: async () => {
114
- const refs = await listPages(wikiDir);
115
- const lines = [];
116
- for (const ref of refs) {
117
- const page = await readPage(wikiDir, ref.category, ref.slug);
118
- if (!page)
119
- continue;
120
- const linkCount = extractWikilinks(page.body).length;
121
- lines.push(`${ref.category}/${ref.slug} | "${page.frontmatter.title}" | scope:[${page.frontmatter.scope.join(",")}] | tags:[${page.frontmatter.tags.join(",")}] | links:${linkCount}`);
122
- }
123
- return {
124
- content: [{ type: "text", text: `${lines.length} pages:\n${lines.join("\n")}` }],
125
- details: { count: lines.length },
126
- };
127
- },
128
- };
129
- const wikiRead = {
130
- name: "wiki_read",
131
- label: "Wiki Read",
132
- description: "Read a wiki page by path (category/slug).",
133
- parameters: WikiReadParams,
134
- execute: async (_id, params) => {
135
- const parts = params.path.split("/");
136
- if (parts.length !== 2) {
137
- return { content: [{ type: "text", text: `Invalid path: ${params.path}` }], details: {} };
138
- }
139
- const page = await readPage(wikiDir, parts[0], parts[1]);
140
- if (!page) {
141
- return { content: [{ type: "text", text: `Not found: ${params.path}` }], details: {} };
142
- }
143
- return {
144
- content: [{ type: "text", text: `# ${page.frontmatter.title}\nCategory: ${page.category}\nScope: ${page.frontmatter.scope.join(", ")}\nTags: ${page.frontmatter.tags.join(", ")}\nLinks: ${page.frontmatter.links.join(", ") || "none"}\n\n${page.body}` }],
145
- details: { title: page.frontmatter.title },
146
- };
147
- },
148
- };
149
- const wikiQuery = {
150
- name: "wiki_query",
151
- label: "Wiki Query",
152
- description: "Search wiki pages by keyword. Returns top matches with scores.",
153
- parameters: WikiQueryParams,
154
- execute: async (_id, params) => {
155
- const results = await searchWiki(store, params.query, { limit: 8 });
156
- if (results.length === 0) {
157
- return { content: [{ type: "text", text: "No results." }], details: { count: 0 } };
158
- }
159
- const text = results
160
- .map(r => `${r.page.path} | "${r.frontmatter.title}" | score:${r.score.toFixed(3)}`)
161
- .join("\n");
162
- return {
163
- content: [{ type: "text", text: `${results.length} results:\n${text}` }],
164
- details: { count: results.length },
165
- };
166
- },
167
- };
168
- const wikiWrite = {
169
- name: "wiki_write",
170
- label: "Wiki Write",
171
- description: "Create or update a wiki page. Always redacts secrets and normalizes tags/scope.",
172
- parameters: WikiWriteParams,
173
- execute: async (_id, params) => {
174
- const now = new Date().toISOString();
175
- const slug = params.slug.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
176
- const existing = await readPage(wikiDir, params.category, slug);
177
- const body = redactSecrets(params.body).text;
178
- const scope = normalizeScopes(params.scope);
179
- const tags = normalizeTags(params.tags, scope);
180
- const links = syncFrontmatterLinks(body);
181
- if (existing) {
182
- const updated = {
183
- ...existing,
184
- body,
185
- frontmatter: { ...existing.frontmatter, title: params.title, scope, tags, updated: now, links },
186
- };
187
- await writePage(wikiDir, updated);
188
- }
189
- else {
190
- const fm = validateFrontmatter({ title: params.title, para: params.category, scope, tags, sources: [], created: now, updated: now, links });
191
- await writePage(wikiDir, { category: params.category, slug, frontmatter: fm, body });
192
- }
193
- await reindex(store);
194
- return {
195
- content: [{ type: "text", text: `Wrote ${params.category}/${slug}` }],
196
- details: { path: `${params.category}/${slug}` },
197
- };
198
- },
199
- };
200
- const wikiMerge = {
201
- name: "wiki_merge",
202
- label: "Wiki Merge",
203
- description: "Merge two pages: update the target page with combined content, delete the source page.",
204
- parameters: WikiMergeParams,
205
- execute: async (_id, params) => {
206
- const keepPage = await readPage(wikiDir, params.keepCategory, params.keepSlug);
207
- const deletePage = await readPage(wikiDir, params.deleteCategory, params.deleteSlug);
208
- if (!keepPage)
209
- return { content: [{ type: "text", text: `Target not found: ${params.keepCategory}/${params.keepSlug}` }], details: {} };
210
- if (!deletePage)
211
- return { content: [{ type: "text", text: `Source not found: ${params.deleteCategory}/${params.deleteSlug}` }], details: {} };
212
- const now = new Date().toISOString();
213
- const body = redactSecrets(params.mergedBody).text;
214
- const mergedScope = normalizeScopes([...new Set([...keepPage.frontmatter.scope, ...deletePage.frontmatter.scope])]);
215
- const mergedTags = normalizeTags([...new Set([...keepPage.frontmatter.tags, ...deletePage.frontmatter.tags])], mergedScope);
216
- // Update target
217
- const updated = {
218
- ...keepPage,
219
- body,
220
- frontmatter: {
221
- ...keepPage.frontmatter,
222
- scope: mergedScope,
223
- tags: mergedTags,
224
- updated: now,
225
- links: syncFrontmatterLinks(body),
226
- },
227
- };
228
- await writePage(wikiDir, updated);
229
- // Delete source
230
- const { unlink } = await import("node:fs/promises");
231
- const { join } = await import("node:path");
232
- await unlink(join(wikiDir, params.deleteCategory, params.deleteSlug + ".md"));
233
- await reindex(store);
234
- return {
235
- content: [{ type: "text", text: `Merged ${params.deleteCategory}/${params.deleteSlug} into ${params.keepCategory}/${params.keepSlug}, deleted source.` }],
236
- details: { kept: `${params.keepCategory}/${params.keepSlug}`, deleted: `${params.deleteCategory}/${params.deleteSlug}` },
237
- };
238
- },
239
- };
240
- const wikiLint = {
241
- name: "wiki_lint",
242
- label: "Wiki Lint",
243
- description: "Run lint checks and return a report. Does NOT auto-fix - you decide what to fix.",
244
- parameters: WikiLintParams,
245
- execute: async () => {
246
- const report = await lintWiki(wikiDir, { autoFix: false });
247
- const lines = report.issues.map(i => `[${i.severity}] ${i.category}: ${i.page ?? ""} - ${i.message}`);
248
- return {
249
- content: [{ type: "text", text: `${report.issues.length} issues:\n${lines.join("\n")}\n\nStats: ${JSON.stringify(report.stats.byCategory)}` }],
250
- details: { issueCount: report.issues.length },
251
- };
252
- },
253
- };
254
- return [wikiList, wikiRead, wikiQuery, wikiWrite, wikiMerge, wikiLint];
255
- }
256
- // -- Rebuild index helper (shared with processor) ----------------------------
257
- async function rebuildIndex(wikiDir) {
258
- const allPages = await listPages(wikiDir);
259
- const sections = {
260
- projects: [], areas: [], resources: [], archives: [],
261
- };
262
- for (const ref of allPages) {
263
- const page = await readPage(wikiDir, ref.category, ref.slug);
264
- const title = page?.frontmatter.title ?? ref.title;
265
- const summary = page?.body.split("\n").find(l => l.trim() && !l.startsWith("#") && !l.startsWith("---"))?.trim() ?? "";
266
- const desc = summary.length > 120 ? summary.slice(0, 117) + "..." : summary;
267
- sections[ref.category].push(`- [[${ref.slug}]] - ${title}${desc ? ": " + desc : ""}`);
268
- }
269
- const indexLines = [
270
- "# Wiki Index", "",
271
- "## Projects", "", sections.projects.length > 0 ? sections.projects.join("\n") : "_No active projects._", "",
272
- "## Areas", "", sections.areas.length > 0 ? sections.areas.join("\n") : "_No areas._", "",
273
- "## Resources", "", sections.resources.length > 0 ? sections.resources.join("\n") : "_No resources._", "",
274
- "## Archives", "", sections.archives.length > 0 ? sections.archives.join("\n") : "_No archived items._",
275
- ];
276
- await writeIndex(wikiDir, indexLines.join("\n"));
277
- }
278
- // -- Main entry point --------------------------------------------------------
279
- /**
280
- * Run the maintenance agent. Called periodically by the daemon.
281
- */
282
- export async function runMaintenance(wikiDir, store, model, getApiKey) {
283
- const tools = createMaintenanceTools(wikiDir, store);
284
- const agent = new Agent({
285
- initialState: {
286
- systemPrompt: MAINTENANCE_SYSTEM_PROMPT,
287
- model,
288
- tools,
289
- messages: [],
290
- },
291
- getApiKey,
292
- });
293
- const prompt = `Run a maintenance pass on the wiki. Start by listing all pages, then:
294
- 1. Look for duplicate pages (same topic, different slugs) and merge them
295
- 2. Find pages with 0 outgoing links and add relevant [[wikilinks]]
296
- 3. Check for any category misuse or tag issues
297
- 4. Review pages not updated in >30 days for staleness - add Open Questions warnings for pages making specific claims about code/configs/ports that may have changed
298
- Be thorough but conservative. Summarize what you changed at the end.`;
299
- try {
300
- await agent.prompt(prompt);
301
- }
302
- catch (err) {
303
- return {
304
- pagesUpdated: 0,
305
- pagesMerged: 0,
306
- linksAdded: 0,
307
- issuesFixed: 0,
308
- summary: `Agent error: ${err instanceof Error ? err.message : String(err)}`,
309
- };
310
- }
311
- // Rebuild index after all changes
312
- await rebuildIndex(wikiDir);
313
- // Extract summary from agent's last message
314
- const messages = agent.state.messages;
315
- const lastAssistant = [...messages].reverse().find(m => m.role === "assistant");
316
- let summary = "Maintenance completed.";
317
- if (lastAssistant && "content" in lastAssistant) {
318
- const content = lastAssistant.content;
319
- if (typeof content === "string")
320
- summary = content;
321
- else if (Array.isArray(content)) {
322
- const textBlock = content.find((b) => b.type === "text" && typeof b.text === "string");
323
- if (textBlock)
324
- summary = textBlock.text;
325
- }
326
- }
327
- // Count changes from tool results
328
- let pagesUpdated = 0;
329
- let pagesMerged = 0;
330
- for (const msg of messages) {
331
- if (msg.role !== "toolResult")
332
- continue;
333
- const c = msg.content;
334
- if (!Array.isArray(c))
335
- continue;
336
- for (const block of c) {
337
- const b = block;
338
- if (b.type === "text" && typeof b.text === "string") {
339
- if (b.text.startsWith("Wrote "))
340
- pagesUpdated++;
341
- if (b.text.startsWith("Merged "))
342
- pagesMerged++;
343
- }
344
- }
345
- }
346
- // Git commit all maintenance changes
347
- if (pagesUpdated > 0 || pagesMerged > 0) {
348
- await gitCommit(wikiDir, `maintenance: ${pagesUpdated} updated, ${pagesMerged} merged`);
349
- }
350
- return {
351
- pagesUpdated,
352
- pagesMerged,
353
- linksAdded: 0, // Agent handles this via wiki_write
354
- issuesFixed: pagesUpdated + pagesMerged,
355
- summary,
356
- };
357
- }
358
- //# sourceMappingURL=maintainer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"maintainer.js","sourceRoot":"","sources":["../src/maintainer.ts"],"names":[],"mappings":"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"}
package/dist/watcher.d.ts DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * Watch the .completed-sessions registry for new entries.
3
- * Uses polling (simpler and more reliable than inotify for append-only files).
4
- */
5
- export interface CompletedSession {
6
- timestamp: string;
7
- sessionPath: string;
8
- }
9
- export declare class RegistryWatcher {
10
- private intervalMs;
11
- private registryPath;
12
- private lastSize;
13
- private pollInterval;
14
- private onNewEntries;
15
- constructor(wikiDir: string, onNewEntries: (entries: CompletedSession[]) => void, intervalMs?: number);
16
- /** Start watching for new entries. */
17
- start(): void;
18
- /** Stop watching. */
19
- stop(): void;
20
- /** Check for new entries since last poll. */
21
- private poll;
22
- /** Process all entries in the registry (for manual/initial scan). */
23
- getAllEntries(): CompletedSession[];
24
- }
25
- //# sourceMappingURL=watcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAe;IASxB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAAwC;gBAG1D,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAC3C,UAAU,GAAE,MAAa;IAWnC,sCAAsC;IACtC,KAAK,IAAI,IAAI;IAMb,qBAAqB;IACrB,IAAI,IAAI,IAAI;IAOZ,6CAA6C;IAC7C,OAAO,CAAC,IAAI;IAmCZ,qEAAqE;IACrE,aAAa,IAAI,gBAAgB,EAAE;CAepC"}
package/dist/watcher.js DELETED
@@ -1,84 +0,0 @@
1
- /**
2
- * Watch the .completed-sessions registry for new entries.
3
- * Uses polling (simpler and more reliable than inotify for append-only files).
4
- */
5
- import { readFileSync, existsSync, statSync } from "node:fs";
6
- import { join } from "node:path";
7
- export class RegistryWatcher {
8
- intervalMs;
9
- registryPath;
10
- lastSize = 0;
11
- pollInterval = null;
12
- onNewEntries;
13
- constructor(wikiDir, onNewEntries, intervalMs = 5000) {
14
- this.intervalMs = intervalMs;
15
- this.registryPath = join(wikiDir, ".completed-sessions");
16
- this.onNewEntries = onNewEntries;
17
- // Initialize with current file size
18
- if (existsSync(this.registryPath)) {
19
- this.lastSize = statSync(this.registryPath).size;
20
- }
21
- }
22
- /** Start watching for new entries. */
23
- start() {
24
- if (this.pollInterval)
25
- return;
26
- this.pollInterval = setInterval(() => this.poll(), this.intervalMs);
27
- console.log(`[daemon] Watching ${this.registryPath} (poll every ${this.intervalMs}ms)`);
28
- }
29
- /** Stop watching. */
30
- stop() {
31
- if (this.pollInterval) {
32
- clearInterval(this.pollInterval);
33
- this.pollInterval = null;
34
- }
35
- }
36
- /** Check for new entries since last poll. */
37
- poll() {
38
- if (!existsSync(this.registryPath))
39
- return;
40
- const currentSize = statSync(this.registryPath).size;
41
- if (currentSize <= this.lastSize)
42
- return;
43
- // Read only the new bytes
44
- const content = readFileSync(this.registryPath, "utf-8");
45
- const allLines = content.split("\n").filter((l) => l.trim());
46
- // Parse lines that are after our last known position
47
- // Simple approach: re-parse all lines, only emit ones we haven't seen
48
- const newEntries = [];
49
- let bytesProcessed = 0;
50
- for (const line of allLines) {
51
- bytesProcessed += line.length + 1; // +1 for newline
52
- if (bytesProcessed <= this.lastSize)
53
- continue;
54
- const parts = line.split("|", 2);
55
- if (parts.length === 2) {
56
- newEntries.push({
57
- timestamp: parts[0],
58
- sessionPath: parts[1],
59
- });
60
- }
61
- }
62
- this.lastSize = currentSize;
63
- if (newEntries.length > 0) {
64
- this.onNewEntries(newEntries);
65
- }
66
- }
67
- /** Process all entries in the registry (for manual/initial scan). */
68
- getAllEntries() {
69
- if (!existsSync(this.registryPath))
70
- return [];
71
- const content = readFileSync(this.registryPath, "utf-8");
72
- return content
73
- .split("\n")
74
- .filter((l) => l.trim())
75
- .map((line) => {
76
- const parts = line.split("|", 2);
77
- return parts.length === 2
78
- ? { timestamp: parts[0], sessionPath: parts[1] }
79
- : null;
80
- })
81
- .filter((e) => e !== null);
82
- }
83
- }
84
- //# sourceMappingURL=watcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}