pi-para 0.8.4 → 0.8.6

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 (57) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/config.d.ts +2 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +1 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/context.d.ts +4 -0
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +22 -1
  9. package/dist/context.js.map +1 -1
  10. package/dist/lint.d.ts +6 -0
  11. package/dist/lint.d.ts.map +1 -1
  12. package/dist/lint.js +62 -0
  13. package/dist/lint.js.map +1 -1
  14. package/dist/questions.d.ts +99 -0
  15. package/dist/questions.d.ts.map +1 -0
  16. package/dist/questions.js +200 -0
  17. package/dist/questions.js.map +1 -0
  18. package/dist/templates/prompts.d.ts +3 -3
  19. package/dist/templates/prompts.d.ts.map +1 -1
  20. package/dist/templates/prompts.js +8 -2
  21. package/dist/templates/prompts.js.map +1 -1
  22. package/dist/tools/edit-read.d.ts +2 -0
  23. package/dist/tools/edit-read.d.ts.map +1 -1
  24. package/dist/tools/edit-read.js +17 -3
  25. package/dist/tools/edit-read.js.map +1 -1
  26. package/dist/tools/lint.d.ts +1 -0
  27. package/dist/tools/lint.d.ts.map +1 -1
  28. package/dist/tools/lint.js +2 -0
  29. package/dist/tools/lint.js.map +1 -1
  30. package/dist/tools/query.d.ts +2 -2
  31. package/dist/tools/query.d.ts.map +1 -1
  32. package/dist/tools/query.js +12 -1
  33. package/dist/tools/query.js.map +1 -1
  34. package/dist/tools/write.d.ts.map +1 -1
  35. package/dist/tools/write.js +8 -0
  36. package/dist/tools/write.js.map +1 -1
  37. package/dist/tools.d.ts +1 -0
  38. package/dist/tools.d.ts.map +1 -1
  39. package/dist/tools.js.map +1 -1
  40. package/dist/wiki.d.ts +10 -0
  41. package/dist/wiki.d.ts.map +1 -1
  42. package/dist/wiki.js +33 -1
  43. package/dist/wiki.js.map +1 -1
  44. package/package.json +6 -2
  45. package/skills/para/SKILL.md +9 -0
  46. package/src/config.ts +3 -0
  47. package/src/context.ts +27 -1
  48. package/src/lint.ts +77 -0
  49. package/src/questions.ts +287 -0
  50. package/src/templates/prompts.ts +8 -2
  51. package/src/templates/schema.md +4 -1
  52. package/src/tools/edit-read.ts +21 -3
  53. package/src/tools/lint.ts +3 -1
  54. package/src/tools/query.ts +14 -2
  55. package/src/tools/write.ts +8 -0
  56. package/src/tools.ts +1 -1
  57. package/src/wiki.ts +41 -1
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Open questions: the "## Open Questions" section of a page, as tracked items.
3
+ *
4
+ * A question is one bullet line. Written by an agent it carries the date it was asked and, when the host has one, the
5
+ * session that asked it:
6
+ *
7
+ * - [ ] (2026-10-18, #993) Does the picker need a "key no longer works" state?
8
+ *
9
+ * When it is answered, the line moves to "## Resolved Questions", ticked, with the date and session that answered it,
10
+ * and the answer after an arrow:
11
+ *
12
+ * - [x] (2026-10-19, #1204) Does the picker need a "key no longer works" state? → yes: machine health (#72)
13
+ *
14
+ * Older pages hold plain bullets (`- question`); they count as open, asked when the page was last updated. A ticked or
15
+ * struck-through line left in the open section counts as resolved.
16
+ *
17
+ * The rest of pi-para uses this to show a page's open questions when it is read or found, to list the wiki's open
18
+ * questions for a session's prompt, to point out questions a page just written may answer, and to flag stale ones.
19
+ */
20
+ import { matchesScope } from "./scope.js";
21
+ import { stat } from "node:fs/promises";
22
+ import { join } from "node:path";
23
+ import { listPages, readPage } from "./wiki.js";
24
+ export const OPEN_SECTION = "Open Questions";
25
+ export const RESOLVED_SECTION = "Resolved Questions";
26
+ const LINE = /^\s*[-*]\s+(?:\[( |x|X)\]\s+)?(?:\((\d{4}-\d{2}-\d{2})(?:,\s*(#?[\w.:/-]+))?\)\s+)?(.+?)\s*$/;
27
+ /** The lines of a `## <name>` section of a page's body, up to the next heading of level 1 or 2. */
28
+ export function sectionLines(body, name) {
29
+ const lines = body.split("\n");
30
+ const start = lines.findIndex((line) => line.trim().toLowerCase() === `## ${name.toLowerCase()}`);
31
+ if (start === -1) {
32
+ return [];
33
+ }
34
+ const rest = lines.slice(start + 1);
35
+ const end = rest.findIndex((line) => /^#{1,2}\s/.test(line));
36
+ return end === -1 ? rest : rest.slice(0, end);
37
+ }
38
+ /** The question lines of a section: its bullets, each read as a question. Placeholder bullets ("none") are left out. */
39
+ export function parseQuestions(body, name = OPEN_SECTION) {
40
+ return sectionLines(body, name).flatMap((line) => {
41
+ const match = LINE.exec(line);
42
+ if (match === null) {
43
+ return [];
44
+ }
45
+ const [, mark, date, session, words] = match;
46
+ const struck = /^~~.*~~$/.test(words.trim());
47
+ const text = words.replace(/^~~|~~$/g, "").trim();
48
+ if (/^(none|n\/a|-|—|\(none\)|nothing yet\.?)$/i.test(text) || /^\[.*gaps in knowledge.*\]$/i.test(text)) {
49
+ return [];
50
+ }
51
+ return [
52
+ {
53
+ line,
54
+ text,
55
+ ...(date === undefined ? {} : { date }),
56
+ ...(session === undefined ? {} : { session: session.startsWith("#") ? session : `#${session}` }),
57
+ done: (mark !== undefined && mark !== " ") || struck,
58
+ },
59
+ ];
60
+ });
61
+ }
62
+ /** A page's open questions: the section's lines that are not ticked. */
63
+ export function openQuestionsOf(body) {
64
+ return parseQuestions(body).filter((question) => !question.done);
65
+ }
66
+ /** A question line as an agent writes it: `- [ ] (date, #session) text`. */
67
+ export function questionLine(text, { date, session }) {
68
+ return `- [ ] (${date}${session === undefined ? "" : `, ${session.startsWith("#") ? session : `#${session}`}`}) ${text.trim()}`;
69
+ }
70
+ /** A resolved line: `- [x] (date, #session) text → answer`. */
71
+ export function resolvedLine(text, answer, { date, session }) {
72
+ return `- [x] (${date}${session === undefined ? "" : `, ${session.startsWith("#") ? session : `#${session}`}`}) ${text.trim()} → ${answer.trim()}`;
73
+ }
74
+ /** Whole days from `date` (YYYY-MM-DD or ISO) to `now`. */
75
+ export function daysSince(date, now = Date.now()) {
76
+ const at = Date.parse(date.length === 10 ? `${date}T00:00:00Z` : date);
77
+ return Number.isNaN(at) ? 0 : Math.max(0, Math.floor((now - at) / 86_400_000));
78
+ }
79
+ /** Each page's open questions as last read, by file, with the file's mtime and size: a page reads again only when it changed. */
80
+ const pageCache = new Map();
81
+ /** A page's open questions, from the cache while its file is unchanged. */
82
+ async function pageQuestions(wikiDir, category, slug) {
83
+ const file = join(wikiDir, category, `${slug}.md`);
84
+ let info;
85
+ try {
86
+ info = await stat(file);
87
+ }
88
+ catch {
89
+ pageCache.delete(file);
90
+ return [];
91
+ }
92
+ const cached = pageCache.get(file);
93
+ if (cached !== undefined && cached.mtimeMs === info.mtimeMs && cached.size === info.size) {
94
+ return cached.questions;
95
+ }
96
+ const page = await readPage(wikiDir, category, slug);
97
+ const updated = page === null ? "" : (page.frontmatter.updated || page.frontmatter.created || "").slice(0, 10);
98
+ const questions = page === null
99
+ ? []
100
+ : openQuestionsOf(page.body).map((question) => ({
101
+ ...question,
102
+ title: page.frontmatter.title,
103
+ scope: page.frontmatter.scope,
104
+ asked: question.date ?? updated,
105
+ }));
106
+ pageCache.set(file, { mtimeMs: info.mtimeMs, size: info.size, questions });
107
+ return questions;
108
+ }
109
+ /**
110
+ * Every open question in the wiki, oldest first. Archives are left out unless asked for: a finished project's
111
+ * questions are history. With `scope`, the ones on pages in that scope come first (`inScope`). Pages are read again
112
+ * only when their file changed.
113
+ */
114
+ export async function collectOpenQuestions(wikiDir, { scope, includeArchives = false } = {}) {
115
+ const refs = await listPages(wikiDir);
116
+ const found = [];
117
+ for (const ref of refs) {
118
+ if (ref.category === "archives" && !includeArchives) {
119
+ continue;
120
+ }
121
+ for (const question of await pageQuestions(wikiDir, ref.category, ref.slug)) {
122
+ found.push({
123
+ ...question,
124
+ page: `${ref.category}/${ref.slug}`,
125
+ inScope: scope === undefined ? true : matchesScope(question.scope, scope),
126
+ });
127
+ }
128
+ }
129
+ return found.sort((a, b) => Number(b.inScope) - Number(a.inScope) || a.asked.localeCompare(b.asked));
130
+ }
131
+ /** Open questions as short Markdown lines: `- «text» on [[slug]] (asked date, #session)`. */
132
+ export function formatOpenQuestions(questions, { max = 10, chars = 180 } = {}) {
133
+ const shown = questions.slice(0, max).map((question) => {
134
+ const text = question.text.length > chars ? `${question.text.slice(0, chars - 1)}…` : question.text;
135
+ const slug = question.page.split("/").pop();
136
+ return `- ${text} — on [[${slug}]] (${question.page}), asked ${question.asked}${question.session ? `, ${question.session}` : ""}`;
137
+ });
138
+ const more = questions.length - shown.length;
139
+ return [...shown, ...(more > 0 ? [`- …and ${more} more (wiki_lint lists them all)`] : [])].join("\n");
140
+ }
141
+ /** How to resolve one, in the words the tools and prompts use. */
142
+ export const RESOLVE_HOW = 'To resolve one, wiki_edit its page: remove its line from "## Open Questions" and add under "## Resolved Questions" `- [x] (YYYY-MM-DD, #session) <question> → <answer>` (today, and your session if you know it).';
143
+ // -- Questions a page just written may answer ---------------------------------
144
+ const STOP = new Set("a an and are as at be been but by can could did do does for from had has have how if in into is it its of on or should so than that the their then there these this those to was were what when where whether which who why will with would yet not no any all our we you your".split(" "));
145
+ /** The meaningful words of a text: lower case, without stop words or very short ones. */
146
+ function words(text) {
147
+ return new Set(text
148
+ .toLowerCase()
149
+ .replace(/[`*_[\]()<>"'“”‘’.,;:!?/\\|{}=+]/g, " ")
150
+ .split(/\s+/)
151
+ .filter((word) => word.length > 2 && !STOP.has(word)));
152
+ }
153
+ /** Of a question's meaningful words, how many the text has, and the share. */
154
+ function overlap(question, text) {
155
+ const own = [...words(question)];
156
+ const shared = own.filter((word) => text.has(word)).length;
157
+ return { shared, share: own.length === 0 ? 0 : shared / own.length };
158
+ }
159
+ /** A page's body without its open questions section: what it says, not what it asks. */
160
+ function withoutOpenSection(body) {
161
+ const lines = body.split("\n");
162
+ const start = lines.findIndex((line) => line.trim().toLowerCase() === `## ${OPEN_SECTION.toLowerCase()}`);
163
+ if (start === -1) {
164
+ return body;
165
+ }
166
+ const end = lines.findIndex((line, index) => index > start && /^#{1,2}\s/.test(line));
167
+ return [...lines.slice(0, start), ...(end === -1 ? [] : lines.slice(end))].join("\n");
168
+ }
169
+ /**
170
+ * Open questions anywhere in the wiki that `written` (pages just written, by `category/slug`, with their new body) may
171
+ * answer, best first: the new text, without its own open questions, has at least half of a question's meaningful
172
+ * words, and two or more of them. Questions on the written pages count too: a page that answers its own question should
173
+ * resolve it. Fast and local, for every write; lint finds more by meaning once the search index has the new text.
174
+ */
175
+ export async function questionsMaybeAnswered(wikiDir, written, { max = 5 } = {}) {
176
+ if (written.length === 0) {
177
+ return [];
178
+ }
179
+ const open = await collectOpenQuestions(wikiDir);
180
+ const text = words(written.map((each) => withoutOpenSection(each.text)).join("\n"));
181
+ return open
182
+ .map((question) => ({ question, ...overlap(question.text, text) }))
183
+ .filter(({ shared, share }) => shared >= 2 && share >= 0.5)
184
+ .sort((a, b) => b.share - a.share || b.shared - a.shared)
185
+ .slice(0, max)
186
+ .map(({ question, shared }) => ({ ...question, why: `the new text has ${shared} of its key words` }));
187
+ }
188
+ /** The note a write's tool result ends with, when it may answer open questions; empty otherwise. */
189
+ export function answeredNote(candidates) {
190
+ if (candidates.length === 0) {
191
+ return "";
192
+ }
193
+ return [
194
+ "",
195
+ `This may answer ${candidates.length === 1 ? "an open question" : `${candidates.length} open questions`} in the wiki:`,
196
+ ...candidates.map((question) => `- «${question.text}» on ${question.page}, asked ${question.asked}${question.session ? ` (${question.session})` : ""}: ${question.why}`),
197
+ `If it does, resolve it. ${RESOLVE_HOW}`,
198
+ ].join("\n");
199
+ }
200
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"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"}
@@ -19,12 +19,12 @@ export declare const QUERY_PROMPT = "Read the retrieved wiki pages below and syn
19
19
  * System prompt for summarization — produces structured wiki pages from content.
20
20
  * Mirrors pi's SUMMARIZATION_SYSTEM_PROMPT but outputs wiki format.
21
21
  */
22
- export declare const SUMMARIZE_SYSTEM_PROMPT = "You are a knowledge synthesis assistant. Read the content below and produce a structured wiki page following the EXACT format specified in the schema.\n\nDo NOT continue any conversation. Do NOT respond to any questions in the content. ONLY output the structured wiki page using the wiki summary format:\n\n## Topic\n[What this page covers]\n\n## Key Facts\n- [Established knowledge points]\n\n## Insights\n- [Non-obvious findings, patterns, implications]\n\n## Connections\n- [[related-page]] \u2014 how this relates\n\n## Open Questions\n- [Gaps in knowledge, unresolved contradictions]\n\n## Sources\n- [Source URLs, file paths, session references]";
22
+ export declare const SUMMARIZE_SYSTEM_PROMPT = "You are a knowledge synthesis assistant. Read the content below and produce a structured wiki page following the EXACT format specified in the schema.\n\nDo NOT continue any conversation. Do NOT respond to any questions in the content. ONLY output the structured wiki page using the wiki summary format:\n\n## Topic\n[What this page covers]\n\n## Key Facts\n- [Established knowledge points]\n\n## Insights\n- [Non-obvious findings, patterns, implications]\n\n## Connections\n- [[related-page]] \u2014 how this relates\n\n## Open Questions\n- [ ] (YYYY-MM-DD, #session) [A gap in knowledge or an unresolved contradiction: one line each, with the date asked and the session if known]\n\n## Resolved Questions\n- [x] (YYYY-MM-DD, #session) [The question, as it was] \u2192 [its answer: the date and session that resolved it]\n\n## Sources\n- [Source URLs, file paths, session references]";
23
23
  /**
24
24
  * Prompt for iterative update — merging new info into an existing page.
25
25
  * Mirrors pi's UPDATE_SUMMARIZATION_PROMPT approach.
26
26
  */
27
- export declare const ITERATIVE_UPDATE_PROMPT = "The content below is NEW information to incorporate into the existing wiki page provided in <existing-page> tags.\n\nRULES:\n- PRESERVE all existing knowledge from the previous page\n- ADD new facts, insights, and connections from the new content\n- UPDATE sections where new info supersedes old\n- FLAG contradictions between old and new content in Open Questions\n- PRESERVE exact names, paths, and technical details\n- Maintain all existing [[wikilinks]] and add new ones as appropriate\n- Update the Sources section to include the new source";
27
+ export declare const ITERATIVE_UPDATE_PROMPT = "The content below is NEW information to incorporate into the existing wiki page provided in <existing-page> tags.\n\nRULES:\n- PRESERVE all existing knowledge from the previous page\n- ADD new facts, insights, and connections from the new content\n- UPDATE sections where new info supersedes old\n- FLAG contradictions between old and new content in Open Questions\n- RESOLVE open questions the new content answers: move each from Open Questions to Resolved Questions as `- [x] (date, #session) question \u2192 answer`; keep the rest as they are\n- PRESERVE exact names, paths, and technical details\n- Maintain all existing [[wikilinks]] and add new ones as appropriate\n- Update the Sources section to include the new source";
28
28
  /**
29
29
  * Prompt for overview generation from multiple pages.
30
30
  */
@@ -37,7 +37,7 @@ export declare const LINT_PROMPT = "Review the lint results below and fix all au
37
37
  * System prompt for the standalone capture agent.
38
38
  * Used as WIKI_SYSTEM_PROMPT for the capture agent instance.
39
39
  */
40
- export declare const CAPTURE_SYSTEM_PROMPT = "You are a knowledge capture assistant. Your job is to extract persistent knowledge from coding sessions and write it to a PARA-structured wiki.\n\nCapture ANY of the following \u2014 even from short sessions:\n- Architecture decisions and rationale (\"we chose X because Y\")\n- Debugging solutions (root cause + fix)\n- Server/infrastructure details (IPs, paths, credentials locations, configs)\n- Build and deployment procedures (commands, steps, gotchas)\n- API keys, service endpoints, and where they are stored\n- Project conventions and coding patterns\n- Tool configurations and setup steps\n- Dependencies and version constraints\n- Environment-specific knowledge (dev vs prod differences)\n- Operational runbooks (how to restart, deploy, rollback)\n\nIndex is auto-rebuilt after every write \u2014 do not manage index.md manually. Do NOT pass indexContent to wiki_write.\n\nRules:\n- If the session was ONLY greetings or completely off-topic chitchat with zero project knowledge, respond with \"nothing to capture\"\n- Otherwise, always capture \u2014 even small facts are valuable (\"the deploy key is at /path/to/key\")\n- Classify each piece of knowledge by PARA category autonomously\n- When the user defines a specific goal with a completion condition, create a projects/ page. When identifying a repeating responsibility (monitoring, maintenance, quality), create an areas/ page.\n- Produce wiki pages in the standard wiki summary format (Topic, Key Facts, Insights, Connections, Open Questions, Sources)\n- Include the full session file path in the Sources section for traceability\n- ALWAYS search wiki_query BEFORE creating any page \u2014 update existing pages instead of creating duplicates\n- If wiki_query finds a page on the same topic (even with a different title/slug), update THAT page using its existing slug\n- The conversation may include compaction summaries from earlier in the session \u2014 treat these as authoritative records of prior work\n- Write directly via wiki_write \u2014 no user confirmation needed\n- NEVER include API keys, tokens, passwords, or secrets in wiki pages. Document WHERE they are stored, not the actual values.";
40
+ export declare const CAPTURE_SYSTEM_PROMPT = "You are a knowledge capture assistant. Your job is to extract persistent knowledge from coding sessions and write it to a PARA-structured wiki.\n\nCapture ANY of the following \u2014 even from short sessions:\n- Architecture decisions and rationale (\"we chose X because Y\")\n- Debugging solutions (root cause + fix)\n- Server/infrastructure details (IPs, paths, credentials locations, configs)\n- Build and deployment procedures (commands, steps, gotchas)\n- API keys, service endpoints, and where they are stored\n- Project conventions and coding patterns\n- Tool configurations and setup steps\n- Dependencies and version constraints\n- Environment-specific knowledge (dev vs prod differences)\n- Operational runbooks (how to restart, deploy, rollback)\n\nIndex is auto-rebuilt after every write \u2014 do not manage index.md manually. Do NOT pass indexContent to wiki_write.\n\nRules:\n- If the session was ONLY greetings or completely off-topic chitchat with zero project knowledge, respond with \"nothing to capture\"\n- Otherwise, always capture \u2014 even small facts are valuable (\"the deploy key is at /path/to/key\")\n- Classify each piece of knowledge by PARA category autonomously\n- When the user defines a specific goal with a completion condition, create a projects/ page. When identifying a repeating responsibility (monitoring, maintenance, quality), create an areas/ page.\n- Produce wiki pages in the standard wiki summary format (Topic, Key Facts, Insights, Connections, Open Questions, Sources)\n- Include the full session file path in the Sources section for traceability\n- ALWAYS search wiki_query BEFORE creating any page \u2014 update existing pages instead of creating duplicates\n- If wiki_query finds a page on the same topic (even with a different title/slug), update THAT page using its existing slug\n- The conversation may include compaction summaries from earlier in the session \u2014 treat these as authoritative records of prior work\n- Write directly via wiki_write \u2014 no user confirmation needed\n- NEVER include API keys, tokens, passwords, or secrets in wiki pages. Document WHERE they are stored, not the actual values.\n- Write each open question as one line: `- [ ] (YYYY-MM-DD, #session) question` (the date and the captured session), only for what is still unknown.\n- RESOLVE open questions the session answered, on any page (the message lists the wiki's open questions): wiki_edit the page, remove the line from \"## Open Questions\", and add under \"## Resolved Questions\" `- [x] (YYYY-MM-DD, #session) question \u2192 answer` with the captured session. Only when the session really answers it; leave the rest.";
41
41
  /**
42
42
  * Prompt template for auto-capture at session_shutdown.
43
43
  * The serialized conversation is appended after this prompt.
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4vDAuBsF,CAAC;AAItH;;;GAGG;AACH,eAAO,MAAM,aAAa,i+CAqBqE,CAAC;AAIhG;;GAEG;AACH,eAAO,MAAM,YAAY,4uCAa4D,CAAC;AAItF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gpBAoBY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,siBASmB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,uWAM+B,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,WAAW,ilBAW6B,CAAC;AAItD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,8nEA2B4F,CAAC;AAE/H;;;GAGG;AACH,eAAO,MAAM,cAAc,48BAgB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8DAA8D,CAAC"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4vDAuBsF,CAAC;AAItH;;;GAGG;AACH,eAAO,MAAM,aAAa,i+CAqBqE,CAAC;AAIhG;;GAEG;AACH,eAAO,MAAM,YAAY,4uCAa4D,CAAC;AAItF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,y3BAuBY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,2tBAUmB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,uWAM+B,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,WAAW,ilBAW6B,CAAC;AAItD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,inFA6BmT,CAAC;AAEtV;;;GAGG;AACH,eAAO,MAAM,cAAc,48BAgB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8DAA8D,CAAC"}
@@ -97,7 +97,10 @@ Do NOT continue any conversation. Do NOT respond to any questions in the content
97
97
  - [[related-page]] — how this relates
98
98
 
99
99
  ## Open Questions
100
- - [Gaps in knowledge, unresolved contradictions]
100
+ - [ ] (YYYY-MM-DD, #session) [A gap in knowledge or an unresolved contradiction: one line each, with the date asked and the session if known]
101
+
102
+ ## Resolved Questions
103
+ - [x] (YYYY-MM-DD, #session) [The question, as it was] → [its answer: the date and session that resolved it]
101
104
 
102
105
  ## Sources
103
106
  - [Source URLs, file paths, session references]`;
@@ -112,6 +115,7 @@ RULES:
112
115
  - ADD new facts, insights, and connections from the new content
113
116
  - UPDATE sections where new info supersedes old
114
117
  - FLAG contradictions between old and new content in Open Questions
118
+ - RESOLVE open questions the new content answers: move each from Open Questions to Resolved Questions as \`- [x] (date, #session) question → answer\`; keep the rest as they are
115
119
  - PRESERVE exact names, paths, and technical details
116
120
  - Maintain all existing [[wikilinks]] and add new ones as appropriate
117
121
  - Update the Sources section to include the new source`;
@@ -173,7 +177,9 @@ Rules:
173
177
  - If wiki_query finds a page on the same topic (even with a different title/slug), update THAT page using its existing slug
174
178
  - The conversation may include compaction summaries from earlier in the session — treat these as authoritative records of prior work
175
179
  - Write directly via wiki_write — no user confirmation needed
176
- - NEVER include API keys, tokens, passwords, or secrets in wiki pages. Document WHERE they are stored, not the actual values.`;
180
+ - NEVER include API keys, tokens, passwords, or secrets in wiki pages. Document WHERE they are stored, not the actual values.
181
+ - Write each open question as one line: \`- [ ] (YYYY-MM-DD, #session) question\` (the date and the captured session), only for what is still unknown.
182
+ - RESOLVE open questions the session answered, on any page (the message lists the wiki's open questions): wiki_edit the page, remove the line from "## Open Questions", and add under "## Resolved Questions" \`- [x] (YYYY-MM-DD, #session) question → answer\` with the captured session. Only when the session really answers it; leave the rest.`;
177
183
  /**
178
184
  * Prompt template for auto-capture at session_shutdown.
179
185
  * The serialized conversation is appended after this prompt.
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;qHAuBmF,CAAC;AAEtH,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;+FAqBkE,CAAC;AAEhG,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;qFAayD,CAAC;AAEtF,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;gDAoBS,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;uDASgB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;2DAM4B,CAAC;AAE5D,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;qDAW0B,CAAC;AAEtD,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;8HA2ByF,CAAC;AAE/H;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,2DAA2D,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;qHAuBmF,CAAC;AAEtH,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;+FAqBkE,CAAC;AAEhG,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;qFAayD,CAAC;AAEtF,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;gDAuBS,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;uDAUgB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;2DAM4B,CAAC;AAE5D,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;qDAW0B,CAAC;AAEtD,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qVA6BgT,CAAC;AAEtV;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,2DAA2D,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
2
  import type { QMDStore } from "qmd-engine";
3
3
  import type { WikiReadDetails, WikiWriteDetails } from "./schemas.js";
4
+ /** A read page's open questions, first, so whoever reads it sees what is still unknown and can resolve what it knows. */
5
+ export declare function openQuestionsNote(body: string): string;
4
6
  export declare function createEditExecute(wikiDir: string, store: QMDStore, markDirty: () => void): (params: {
5
7
  path: string;
6
8
  edits: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"edit-read.d.ts","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KACA,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA8F9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAE7C,QAAQ;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KACvB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAoE7C"}
1
+ {"version":3,"file":"edit-read.d.ts","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAItE,yHAAyH;AACzH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYtD;AAID,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KACA,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAgG9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAE7C,QAAQ;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KACvB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAoE7C"}
@@ -4,6 +4,19 @@ import { normalizeTags, normalizeScopes } from "../tag-registry.js";
4
4
  import { redactSecrets } from "../redact.js";
5
5
  import { appendLog, gitCommit, listPages, readIndex, readPage, writePage } from "../wiki.js";
6
6
  import { parsePagePath, scheduleWikiMaintenance } from "./shared.js";
7
+ import { answeredNote, openQuestionsOf, questionsMaybeAnswered, RESOLVE_HOW } from "../questions.js";
8
+ /** A read page's open questions, first, so whoever reads it sees what is still unknown and can resolve what it knows. */
9
+ export function openQuestionsNote(body) {
10
+ const open = openQuestionsOf(body);
11
+ if (open.length === 0) {
12
+ return "";
13
+ }
14
+ return [
15
+ "",
16
+ `Open questions on this page (${open.length}): resolve any you can answer. ${RESOLVE_HOW}`,
17
+ ...open.map((question) => `- ${question.text}${question.date ? ` (asked ${question.date}${question.session ? `, ${question.session}` : ""})` : ""}`),
18
+ ].join("\n");
19
+ }
7
20
  // -- Factory: wiki_read execute ----------------------------------------------
8
21
  export function createEditExecute(wikiDir, store, markDirty) {
9
22
  return async (params) => {
@@ -84,8 +97,9 @@ export function createEditExecute(wikiDir, store, markDirty) {
84
97
  markDirty();
85
98
  await gitCommit(wikiDir, params.logSummary ?? `wiki_edit: ${pagePath}`);
86
99
  scheduleWikiMaintenance(wikiDir, store, markDirty);
100
+ const maybe = answeredNote(await questionsMaybeAnswered(wikiDir, [{ page: pagePath, text: linkedBody }]));
87
101
  return {
88
- content: [{ type: "text", text: `Edited ${pagePath}. Scheduled background index/search refresh.` }],
102
+ content: [{ type: "text", text: `Edited ${pagePath}. Scheduled background index/search refresh.${maybe}` }],
89
103
  details: {
90
104
  pagesWritten: [pagePath],
91
105
  pagesSkipped: [],
@@ -123,7 +137,7 @@ export function createReadExecute(wikiDir) {
123
137
  .filter(Boolean)
124
138
  .join("\n");
125
139
  return {
126
- content: [{ type: "text", text: `${header}\n\n${page.body}` }],
140
+ content: [{ type: "text", text: `${header}${openQuestionsNote(page.body)}\n\n${page.body}` }],
127
141
  details: { found: true, path: `${parsed.category}/${parsed.slug}` },
128
142
  };
129
143
  }
@@ -147,7 +161,7 @@ export function createReadExecute(wikiDir) {
147
161
  .filter(Boolean)
148
162
  .join("\n");
149
163
  return {
150
- content: [{ type: "text", text: `${header}\n\n${page.body}` }],
164
+ content: [{ type: "text", text: `${header}${openQuestionsNote(page.body)}\n\n${page.body}` }],
151
165
  details: { found: true, path: `${ref.category}/${ref.slug}` },
152
166
  };
153
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edit-read.js","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit-read.js","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { WikiLintDetails } from "./schemas.js";
4
4
  export declare function createLintExecute(wikiDir: string, store: QMDStore, markDirty: () => void, getLintConfig?: () => {
5
5
  autoFix: boolean;
6
6
  staleDays: number;
7
+ questionDays?: number;
7
8
  }): (params: {
8
9
  autoFix?: boolean;
9
10
  }) => Promise<AgentToolResult<WikiLintDetails>>;
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,EACrB,aAAa,CAAC,EAAE,MAAM;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,IAG3D,QAAQ;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5B,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAuD7C"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,EACrB,aAAa,CAAC,EAAE,MAAM;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,IAGlF,QAAQ;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5B,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAyD7C"}
@@ -9,6 +9,8 @@ export function createLintExecute(wikiDir, store, markDirty, getLintConfig) {
9
9
  const report = await lintWiki(wikiDir, {
10
10
  autoFix: params.autoFix ?? configured?.autoFix ?? true,
11
11
  staleDays: configured?.staleDays ?? 90,
12
+ questionDays: configured?.questionDays ?? 7,
13
+ store,
12
14
  });
13
15
  if (report.fixed.length > 0) {
14
16
  scheduleWikiMaintenance(wikiDir, store, markDirty);
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
2
  import type { QMDStore } from "qmd-engine";
3
3
  import type { ProjectScope } from "../scope.js";
4
- import type { ParaCategory } from "../wiki.js";
4
+ import { type ParaCategory } from "../wiki.js";
5
5
  import type { WikiQueryDetails } from "./schemas.js";
6
- export declare function createQueryExecute(_wikiDir: string, store: QMDStore, getScope: () => ProjectScope, getGraphBoost?: () => boolean): (params: {
6
+ export declare function createQueryExecute(wikiDir: string, store: QMDStore, getScope: () => ProjectScope, getGraphBoost?: () => boolean): (params: {
7
7
  query: string;
8
8
  global?: boolean;
9
9
  category?: ParaCategory;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,IAG3B,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACnF,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA4C9C"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKrD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,IAG3B,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACnF,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAuD9C"}
@@ -1,7 +1,9 @@
1
+ import { readPage } from "../wiki.js";
1
2
  import { queryWiki as queryWikiLib, formatQueryResults } from "../query.js";
2
3
  import { QUERY_PROMPT } from "../templates/prompts.js";
4
+ import { openQuestionsOf, RESOLVE_HOW } from "../questions.js";
3
5
  // -- Factory: wiki_query execute ---------------------------------------------
4
- export function createQueryExecute(_wikiDir, store, getScope, getGraphBoost) {
6
+ export function createQueryExecute(wikiDir, store, getScope, getGraphBoost) {
5
7
  return async (params) => {
6
8
  const scope = getScope();
7
9
  const result = await queryWikiLib(store, {
@@ -26,6 +28,14 @@ export function createQueryExecute(_wikiDir, store, getScope, getGraphBoost) {
26
28
  };
27
29
  }
28
30
  const formatted = formatQueryResults(result.results);
31
+ // The found pages' open questions: what is still unknown about this topic, and may be answered now.
32
+ const open = [];
33
+ for (const found of result.results) {
34
+ const page = await readPage(wikiDir, found.page.category, found.page.slug);
35
+ for (const question of page === null ? [] : openQuestionsOf(page.body)) {
36
+ open.push(`- ${question.text} — on ${found.page.category}/${found.page.slug}${question.date ? `, asked ${question.date}${question.session ? ` (${question.session})` : ""}` : ""}`);
37
+ }
38
+ }
29
39
  const toolResultText = [
30
40
  QUERY_PROMPT,
31
41
  "",
@@ -33,6 +43,7 @@ export function createQueryExecute(_wikiDir, store, getScope, getGraphBoost) {
33
43
  `Scope: ${result.wasGlobal ? "global (all scopes)" : scope.name}`,
34
44
  `Results: ${result.results.length}`,
35
45
  "",
46
+ ...(open.length === 0 ? [] : [`## Open questions on these pages (${open.length})`, "If what you know or find answers one, resolve it. " + RESOLVE_HOW, ...open, ""]),
36
47
  formatted,
37
48
  ].join("\n");
38
49
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,KAAe,EACf,QAA4B,EAC5B,aAA6B;IAE7B,OAAO,KAAK,EACV,MAAoF,EACxC,EAAE;QAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,aAAa,EAAE,EAAE,IAAI,IAAI;SACtC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,MAAM,CAAC,KAAK,qDAAqD;qBACpG;iBACF;gBACD,OAAO,EAAE;oBACP,WAAW,EAAE,CAAC;oBACd,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;iBACpD;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG;YACrB,YAAY;YACZ,EAAE;YACF,WAAW,MAAM,CAAC,KAAK,GAAG;YAC1B,UAAU,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YACjE,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,EAAE;YACF,SAAS;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjD,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;gBAClC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;aACpD;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,OAAO,EAA0E,KAAK,YAAY,EAAiB,MAAM,YAAY,CAAC;AACtI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKrD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IACN,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KACA,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA0N9C"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,EAA0E,KAAK,YAAY,EAAiB,MAAM,YAAY,CAAC;AACtI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKrD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IACN,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KACA,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAiO9C"}
@@ -2,6 +2,7 @@ import { normalizeTags, normalizeScopes } from "../tag-registry.js";
2
2
  import { redactSecrets } from "../redact.js";
3
3
  import { autoLinkSlugs, syncFrontmatterLinks } from "../link-utils.js";
4
4
  import { validateFrontmatter } from "../frontmatter.js";
5
+ import { answeredNote, questionsMaybeAnswered } from "../questions.js";
5
6
  import { appendLog, gitCommit, listPageSlugs, readPage, rebuildIndex, writePage } from "../wiki.js";
6
7
  import { scheduleWikiMaintenance } from "./shared.js";
7
8
  // -- Factory: wiki_write execute ---------------------------------------------
@@ -9,6 +10,8 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
9
10
  return async (params) => {
10
11
  const pagesWritten = [];
11
12
  const pagesSkipped = [];
13
+ /** What was written, for the open questions it may answer. */
14
+ const writtenBodies = [];
12
15
  const now = new Date().toISOString();
13
16
  const scope = getScope();
14
17
  // Gather all existing slugs for auto-linking (slug-only readdir scan;
@@ -80,6 +83,7 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
80
83
  body: linkedBody,
81
84
  };
82
85
  await writePage(wikiDir, updatedPage);
86
+ writtenBodies.push({ page: pagePath, text: updatedPage.body });
83
87
  pagesWritten.push(pagePath + (errors.length > 0 ? ` (${errors.length} edit(s) failed)` : ""));
84
88
  }
85
89
  else if (pageSpec.mode === "append" && existing) {
@@ -100,6 +104,7 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
100
104
  },
101
105
  };
102
106
  await writePage(wikiDir, updatedPage);
107
+ writtenBodies.push({ page: pagePath, text: updatedPage.body });
103
108
  pagesWritten.push(pagePath);
104
109
  }
105
110
  else if (pageSpec.mode === "replace" && existing) {
@@ -123,6 +128,7 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
123
128
  body: linkedBody,
124
129
  };
125
130
  await writePage(wikiDir, updatedPage);
131
+ writtenBodies.push({ page: pagePath, text: updatedPage.body });
126
132
  pagesWritten.push(pagePath);
127
133
  }
128
134
  else {
@@ -147,6 +153,7 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
147
153
  body: linkedBody,
148
154
  };
149
155
  await writePage(wikiDir, newPage);
156
+ writtenBodies.push({ page: pagePath, text: newPage.body });
150
157
  pagesWritten.push(pagePath);
151
158
  }
152
159
  }
@@ -199,6 +206,7 @@ export function createWriteExecute(wikiDir, store, getScope, markDirty) {
199
206
  summary,
200
207
  indexUpdated ? "Updated index.md." : "",
201
208
  logAppended ? `Logged: ${params.logSummary}` : "",
209
+ answeredNote(await questionsMaybeAnswered(wikiDir, writtenBodies)).trim(),
202
210
  ]
203
211
  .filter(Boolean)
204
212
  .join("\n"),