@wastedcode/memex 0.1.0 → 0.1.1

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,4 +1,4 @@
1
- import { mkdirSync, writeFileSync, rmSync, readFileSync, existsSync } from 'node:fs';
1
+ import { mkdirSync, writeFileSync, rmSync, readFileSync, existsSync, readdirSync } from 'node:fs';
2
2
  import { join, basename } from 'node:path';
3
3
  import { WIKIS_DIR } from '../lib/constants.js';
4
4
  const DEFAULT_CLAUDE_MD = `# Wiki Agent — Conventions
@@ -125,6 +125,54 @@ export class WikiScaffold {
125
125
  .map(l => l.trim())
126
126
  .filter(l => l && !l.startsWith('#'));
127
127
  }
128
+ /**
129
+ * List files in a wiki's wiki/ directory.
130
+ * Returns an array of { path, type } entries relative to wiki/.
131
+ * If prefix is given, only lists entries under that subdirectory.
132
+ */
133
+ listWikiFiles(wikiId, prefix = '') {
134
+ const wikiContentDir = join(this.wikiDir(wikiId), 'wiki');
135
+ const target = prefix ? join(wikiContentDir, prefix) : wikiContentDir;
136
+ // Prevent directory traversal
137
+ if (!target.startsWith(wikiContentDir)) {
138
+ throw new Error('Invalid path');
139
+ }
140
+ if (!existsSync(target))
141
+ return [];
142
+ const entries = readdirSync(target, { withFileTypes: true });
143
+ const results = [];
144
+ for (const entry of entries) {
145
+ if (entry.name.startsWith('.'))
146
+ continue;
147
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
148
+ results.push({
149
+ path: relPath,
150
+ type: entry.isDirectory() ? 'directory' : 'file',
151
+ });
152
+ }
153
+ return results.sort((a, b) => {
154
+ // Directories first, then alphabetical
155
+ if (a.type !== b.type)
156
+ return a.type === 'directory' ? -1 : 1;
157
+ return a.path.localeCompare(b.path);
158
+ });
159
+ }
160
+ /**
161
+ * Read a file from a wiki's wiki/ directory.
162
+ * Returns the file content as a UTF-8 string.
163
+ */
164
+ readWikiFile(wikiId, filePath) {
165
+ const wikiContentDir = join(this.wikiDir(wikiId), 'wiki');
166
+ const target = join(wikiContentDir, filePath);
167
+ // Prevent directory traversal
168
+ if (!target.startsWith(wikiContentDir)) {
169
+ throw new Error('Invalid path');
170
+ }
171
+ if (!existsSync(target)) {
172
+ throw new Error(`File not found: ${filePath}`);
173
+ }
174
+ return readFileSync(target, 'utf-8');
175
+ }
128
176
  /**
129
177
  * Check if a wiki directory exists on disk.
130
178
  */
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/daemon/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/daemon/scaffold.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,7 @@ export class DaemonServer {
80
80
  wait,
81
81
  res, // pass response for streaming login output
82
82
  callerUid,
83
+ query: urlObj.searchParams,
83
84
  });
84
85
  // If the route already handled the response (e.g., streaming), skip
85
86
  if (res.writableEnded)
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
@@ -26,5 +26,5 @@ export const ALLOWED_TOOLS_WHITELIST = new Set([
26
26
  'NotebookEdit', 'WebFetch', 'WebSearch',
27
27
  ]);
28
28
  // ── Validation ───────────────────────────────────────────────────────────────
29
- export const WIKI_ID_PATTERN = /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/;
29
+ export const WIKI_ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]{1,62}[a-zA-Z0-9]$/;
30
30
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC;AAC1E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;AACpE,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,OAAO,aAAa,CAAC;AACvF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,QAAQ,WAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,QAAQ,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC;AAEtC,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,gFAAgF;AAEhF,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACjD,KAAK,EAAG,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACjD,IAAI,EAAI,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;CACnD,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,gFAAgF;AAEhF,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5E,0GAA0G;AAC1G,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACvC,cAAc,EAAE,UAAU,EAAE,WAAW;CACxC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,mCAAmC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC;AAC1E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;AACpE,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,OAAO,aAAa,CAAC;AACvF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,QAAQ,WAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,QAAQ,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC;AAEtC,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,gFAAgF;AAEhF,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACjD,KAAK,EAAG,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACjD,IAAI,EAAI,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;CACnD,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,gFAAgF;AAEhF,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5E,0GAA0G;AAC1G,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACvC,cAAc,EAAE,UAAU,EAAE,WAAW;CACxC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,6CAA6C,CAAC"}
@@ -27,9 +27,16 @@ Integrate these into the wiki:
27
27
  d. Maintain bidirectional links — if you link A→B, update B→A too.
28
28
  e. Update _index.md with current summaries for all affected pages.
29
29
  6. Append a dated ingest entry to _log.md summarizing what was ingested and what pages were affected.
30
+ 7. **Reflect on the schema.** Before finishing, re-read _schema.md and ask yourself:
31
+ - Have I established patterns that aren't documented? (e.g. bug lifecycle stages, severity conventions, required fields for a category)
32
+ - Are there recurring structures across pages in the same category? (e.g. all bugs have Status/Reporter/Impact — codify that)
33
+ - Has my filing behavior drifted from what the schema says? Update the schema to match reality.
34
+ - Are there cross-category patterns worth noting? (e.g. "bugs should always link to their owning product")
35
+ - Would a future version of me, seeing this schema for the first time, make the same decisions I just made?
36
+ The schema is your institutional memory. If you learned something from this ingest — a new convention, a refinement, a pattern — write it down. Vocabulary, heuristics, page templates, lifecycle stages, things to ignore. The schema should get richer with every ingest, not just when new categories appear.
30
37
 
31
38
  Rules:
32
- - NEVER modify files in raw/ — they are immutable sources
39
+ - NEVER modify files in raw/ — they are immutable sources (this is enforced by the filesystem)
33
40
  - Prefer updating existing pages over creating duplicates
34
41
  - If a source contradicts existing wiki content, UPDATE the existing page — resolve or flag the contradiction
35
42
  - Keep pages focused — one topic per page
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/lib/prompts/ingest.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;SACtB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;EAGP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BR,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/lib/prompts/ingest.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;SACtB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;EAGP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCR,CAAC;AACH,CAAC"}
@@ -34,13 +34,21 @@ IMPORTANT: You are operating in a sandboxed wiki directory. Only read and write
34
34
  - \`_schema.md\` — Filing conventions, categories, domain vocabulary, filing heuristics. YOUR institutional memory.
35
35
  - \`_index.md\` — One-line summary of every wiki page, organized by category. The table of contents.
36
36
  - \`_log.md\` — Chronological activity log. You maintain this.
37
- - \`raw/\` — Immutable source documents. NEVER modify or delete these files.
37
+ - \`raw/\` — Immutable source archive. Read-only (enforced by filesystem). Read from here, never write.
38
38
  - Everything else — Wiki pages organized by entity and topic.
39
39
 
40
40
  ## Your responsibilities
41
41
 
42
- ### 1. Schema (_schema.md)
43
- You own the schema. Update it when you establish or refine conventions new categories, naming patterns, domain vocabulary, filing heuristics, things to ignore.
42
+ ### 1. Schema (_schema.md) — YOUR institutional memory
43
+ You own the schema. It is not a static config file — it is a living document that evolves with every ingest. The schema captures what you've learned about how THIS knowledge base works: what categories exist, how pages in each category are structured, what naming and filing patterns have emerged, what domain vocabulary matters.
44
+
45
+ Update the schema when you:
46
+ - Establish or refine category conventions (new categories, what belongs where)
47
+ - Notice structural patterns (e.g. "bugs have Status/Reporter/Impact fields", "people pages track contributions chronologically")
48
+ - Learn domain vocabulary or terminology
49
+ - Develop filing heuristics (e.g. "bug reports should always link to their owning product")
50
+ - Discover things to ignore or de-prioritize
51
+ - Notice lifecycle patterns (e.g. open → resolved, proposed → accepted)
44
52
 
45
53
  On the FIRST call for a new knowledge base (no _schema.md exists), CREATE it with the conventions you establish. Suggested starting categories (adapt to what fits):
46
54
  - customers/ — profiles and feedback per person or company
@@ -49,6 +57,8 @@ On the FIRST call for a new knowledge base (no _schema.md exists), CREATE it wit
49
57
  - research/ — deep dives and analyses
50
58
  - reference/ — factual reference material
51
59
 
60
+ The schema should get richer with experience. After 10 ingests it should contain conventions a generic prompt wouldn't know. A future session reading only the schema should understand how this knowledge base thinks.
61
+
52
62
  ### 2. Index (_index.md)
53
63
  ALWAYS keep _index.md current. Every wiki page gets a one-line summary: what it contains, how many connections, what matters most. Organize by category. A reader should understand the shape of the entire knowledge base by reading only the index.
54
64
 
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../src/lib/prompts/wiki.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,6BAA6B;AAC7B,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA2FmB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../src/lib/prompts/wiki.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,6BAA6B;AAC7B,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAqGmB,CAAC;AAC7B,CAAC"}
@@ -314,7 +314,7 @@ var init_constants = __esm({
314
314
  "WebFetch",
315
315
  "WebSearch"
316
316
  ]);
317
- WIKI_ID_PATTERN = /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/;
317
+ WIKI_ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]{1,62}[a-zA-Z0-9]$/;
318
318
  }
319
319
  });
320
320
 
@@ -370,9 +370,14 @@ var init_namespace = __esm({
370
370
  */
371
371
  wrapCommand(wikiId, innerCommand) {
372
372
  const wikiDir = join(this.wikisDir, wikiId);
373
+ const rawDir = join(wikiDir, "wiki", "raw");
374
+ const rawMount = `${WORKSPACE_MOUNT}/wiki/raw`;
373
375
  const script = [
374
376
  `mount --bind ${shellEscape(wikiDir)} ${shellEscape(WORKSPACE_MOUNT)}`,
375
377
  `mount -o remount,nosuid,nodev ${shellEscape(WORKSPACE_MOUNT)}`,
378
+ // raw/ is the immutable source archive — Claude can read but never write
379
+ `mount --bind ${shellEscape(rawDir)} ${shellEscape(rawMount)}`,
380
+ `mount -o remount,bind,ro ${shellEscape(rawMount)}`,
376
381
  `cd ${shellEscape(WORKSPACE_MOUNT)}`,
377
382
  `exec ${innerCommand.map(shellEscape).join(" ")}`
378
383
  ].join(" && ");
@@ -386,7 +391,7 @@ var init_namespace = __esm({
386
391
  });
387
392
 
388
393
  // src/daemon/scaffold.ts
389
- import { mkdirSync as mkdirSync2, writeFileSync, rmSync, readFileSync, existsSync as existsSync2 } from "node:fs";
394
+ import { mkdirSync as mkdirSync2, writeFileSync, rmSync, readFileSync, existsSync as existsSync2, readdirSync } from "node:fs";
390
395
  import { join as join2, basename } from "node:path";
391
396
  function sanitizeFilename(name) {
392
397
  return name.replace(/[^a-zA-Z0-9._-]/g, "_");
@@ -508,6 +513,48 @@ Chronological record of knowledge base activity.
508
513
  if (!existsSync2(p)) return [];
509
514
  return readFileSync(p, "utf-8").split("\n").map((l) => l.trim()).filter((l) => l && !l.startsWith("#"));
510
515
  }
516
+ /**
517
+ * List files in a wiki's wiki/ directory.
518
+ * Returns an array of { path, type } entries relative to wiki/.
519
+ * If prefix is given, only lists entries under that subdirectory.
520
+ */
521
+ listWikiFiles(wikiId, prefix = "") {
522
+ const wikiContentDir = join2(this.wikiDir(wikiId), "wiki");
523
+ const target = prefix ? join2(wikiContentDir, prefix) : wikiContentDir;
524
+ if (!target.startsWith(wikiContentDir)) {
525
+ throw new Error("Invalid path");
526
+ }
527
+ if (!existsSync2(target)) return [];
528
+ const entries = readdirSync(target, { withFileTypes: true });
529
+ const results = [];
530
+ for (const entry of entries) {
531
+ if (entry.name.startsWith(".")) continue;
532
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
533
+ results.push({
534
+ path: relPath,
535
+ type: entry.isDirectory() ? "directory" : "file"
536
+ });
537
+ }
538
+ return results.sort((a, b) => {
539
+ if (a.type !== b.type) return a.type === "directory" ? -1 : 1;
540
+ return a.path.localeCompare(b.path);
541
+ });
542
+ }
543
+ /**
544
+ * Read a file from a wiki's wiki/ directory.
545
+ * Returns the file content as a UTF-8 string.
546
+ */
547
+ readWikiFile(wikiId, filePath) {
548
+ const wikiContentDir = join2(this.wikiDir(wikiId), "wiki");
549
+ const target = join2(wikiContentDir, filePath);
550
+ if (!target.startsWith(wikiContentDir)) {
551
+ throw new Error("Invalid path");
552
+ }
553
+ if (!existsSync2(target)) {
554
+ throw new Error(`File not found: ${filePath}`);
555
+ }
556
+ return readFileSync(target, "utf-8");
557
+ }
511
558
  /**
512
559
  * Check if a wiki directory exists on disk.
513
560
  */
@@ -627,9 +674,16 @@ Integrate these into the wiki:
627
674
  d. Maintain bidirectional links \u2014 if you link A\u2192B, update B\u2192A too.
628
675
  e. Update _index.md with current summaries for all affected pages.
629
676
  6. Append a dated ingest entry to _log.md summarizing what was ingested and what pages were affected.
677
+ 7. **Reflect on the schema.** Before finishing, re-read _schema.md and ask yourself:
678
+ - Have I established patterns that aren't documented? (e.g. bug lifecycle stages, severity conventions, required fields for a category)
679
+ - Are there recurring structures across pages in the same category? (e.g. all bugs have Status/Reporter/Impact \u2014 codify that)
680
+ - Has my filing behavior drifted from what the schema says? Update the schema to match reality.
681
+ - Are there cross-category patterns worth noting? (e.g. "bugs should always link to their owning product")
682
+ - Would a future version of me, seeing this schema for the first time, make the same decisions I just made?
683
+ The schema is your institutional memory. If you learned something from this ingest \u2014 a new convention, a refinement, a pattern \u2014 write it down. Vocabulary, heuristics, page templates, lifecycle stages, things to ignore. The schema should get richer with every ingest, not just when new categories appear.
630
684
 
631
685
  Rules:
632
- - NEVER modify files in raw/ \u2014 they are immutable sources
686
+ - NEVER modify files in raw/ \u2014 they are immutable sources (this is enforced by the filesystem)
633
687
  - Prefer updating existing pages over creating duplicates
634
688
  - If a source contradicts existing wiki content, UPDATE the existing page \u2014 resolve or flag the contradiction
635
689
  - Keep pages focused \u2014 one topic per page
@@ -771,13 +825,21 @@ IMPORTANT: You are operating in a sandboxed wiki directory. Only read and write
771
825
  - \`_schema.md\` \u2014 Filing conventions, categories, domain vocabulary, filing heuristics. YOUR institutional memory.
772
826
  - \`_index.md\` \u2014 One-line summary of every wiki page, organized by category. The table of contents.
773
827
  - \`_log.md\` \u2014 Chronological activity log. You maintain this.
774
- - \`raw/\` \u2014 Immutable source documents. NEVER modify or delete these files.
828
+ - \`raw/\` \u2014 Immutable source archive. Read-only (enforced by filesystem). Read from here, never write.
775
829
  - Everything else \u2014 Wiki pages organized by entity and topic.
776
830
 
777
831
  ## Your responsibilities
778
832
 
779
- ### 1. Schema (_schema.md)
780
- You own the schema. Update it when you establish or refine conventions \u2014 new categories, naming patterns, domain vocabulary, filing heuristics, things to ignore.
833
+ ### 1. Schema (_schema.md) \u2014 YOUR institutional memory
834
+ You own the schema. It is not a static config file \u2014 it is a living document that evolves with every ingest. The schema captures what you've learned about how THIS knowledge base works: what categories exist, how pages in each category are structured, what naming and filing patterns have emerged, what domain vocabulary matters.
835
+
836
+ Update the schema when you:
837
+ - Establish or refine category conventions (new categories, what belongs where)
838
+ - Notice structural patterns (e.g. "bugs have Status/Reporter/Impact fields", "people pages track contributions chronologically")
839
+ - Learn domain vocabulary or terminology
840
+ - Develop filing heuristics (e.g. "bug reports should always link to their owning product")
841
+ - Discover things to ignore or de-prioritize
842
+ - Notice lifecycle patterns (e.g. open \u2192 resolved, proposed \u2192 accepted)
781
843
 
782
844
  On the FIRST call for a new knowledge base (no _schema.md exists), CREATE it with the conventions you establish. Suggested starting categories (adapt to what fits):
783
845
  - customers/ \u2014 profiles and feedback per person or company
@@ -786,6 +848,8 @@ On the FIRST call for a new knowledge base (no _schema.md exists), CREATE it wit
786
848
  - research/ \u2014 deep dives and analyses
787
849
  - reference/ \u2014 factual reference material
788
850
 
851
+ The schema should get richer with experience. After 10 ingests it should contain conventions a generic prompt wouldn't know. A future session reading only the schema should understand how this knowledge base thinks.
852
+
789
853
  ### 2. Index (_index.md)
790
854
  ALWAYS keep _index.md current. Every wiki page gets a one-line summary: what it contains, how many connections, what matters most. Organize by category. A reader should understand the shape of the entire knowledge base by reading only the index.
791
855
 
@@ -1187,7 +1251,9 @@ var init_routes = __esm({
1187
1251
  { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/jobs\/(?<jobId>\d+)$/, handler: this.getJob.bind(this) },
1188
1252
  { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/jobs$/, handler: this.listJobs.bind(this) },
1189
1253
  { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/logs$/, handler: this.getAuditLog.bind(this) },
1190
- { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/ingest-file$/, handler: this.receiveFile.bind(this) }
1254
+ { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/ingest-file$/, handler: this.receiveFile.bind(this) },
1255
+ { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/files$/, handler: this.listFiles.bind(this) },
1256
+ { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/files\/(?<path>.+)$/, handler: this.readFile.bind(this) }
1191
1257
  ];
1192
1258
  }
1193
1259
  db;
@@ -1213,7 +1279,7 @@ var init_routes = __esm({
1213
1279
  const name = b.name;
1214
1280
  if (!id || !WIKI_ID_PATTERN.test(id)) {
1215
1281
  throw new ValidationError(
1216
- `Invalid wiki ID '${id}'. Must be 3-64 chars, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.`
1282
+ `Invalid wiki ID '${id}'. Must be 3-64 chars, alphanumeric with hyphens and underscores, cannot start or end with a hyphen or underscore.`
1217
1283
  );
1218
1284
  }
1219
1285
  if (this.db.getWiki(id)) {
@@ -1372,6 +1438,21 @@ var init_routes = __esm({
1372
1438
  const stored = this.scaffold.writeRawFile(wikiId, filename, buffer);
1373
1439
  return { status: 201, body: { ok: true, data: { filename: stored } } };
1374
1440
  }
1441
+ // ── File browsing ────────────────────────────────────────────────────
1442
+ async listFiles(params, body, ctx) {
1443
+ const wikiId = params["id"];
1444
+ this.requireWiki(wikiId, ctx.callerUid);
1445
+ const prefix = ctx.query?.get("prefix") ?? "";
1446
+ const files = this.scaffold.listWikiFiles(wikiId, prefix);
1447
+ return { status: 200, body: { ok: true, data: files } };
1448
+ }
1449
+ async readFile(params, body, ctx) {
1450
+ const wikiId = params["id"];
1451
+ this.requireWiki(wikiId, ctx.callerUid);
1452
+ const filePath = params["path"];
1453
+ const content = this.scaffold.readWikiFile(wikiId, filePath);
1454
+ return { status: 200, body: { ok: true, data: { path: filePath, content } } };
1455
+ }
1375
1456
  // ── Helpers ──────────────────────────────────────────────────────────────
1376
1457
  requireWiki(wikiId, callerUid) {
1377
1458
  const wiki = this.db.getWiki(wikiId);
@@ -1533,7 +1614,8 @@ var init_server = __esm({
1533
1614
  wait,
1534
1615
  res,
1535
1616
  // pass response for streaming login output
1536
- callerUid
1617
+ callerUid,
1618
+ query: urlObj.searchParams
1537
1619
  });
1538
1620
  if (res.writableEnded) return;
1539
1621
  sendJson(res, result.status, result.body);
@@ -1778,6 +1860,13 @@ var MemexClient = class {
1778
1860
  listJobs(wikiId) {
1779
1861
  return this.request("GET", `/wikis/${wikiId}/jobs`);
1780
1862
  }
1863
+ listFiles(wikiId, prefix) {
1864
+ const path = `/wikis/${wikiId}/files` + (prefix ? `?prefix=${encodeURIComponent(prefix)}` : "");
1865
+ return this.request("GET", path);
1866
+ }
1867
+ readFile(wikiId, filePath) {
1868
+ return this.request("GET", `/wikis/${wikiId}/files/${filePath}`);
1869
+ }
1781
1870
  getAuditLog(wikiId, limit) {
1782
1871
  const path = `/wikis/${wikiId}/logs` + (limit ? `?limit=${limit}` : "");
1783
1872
  return this.request("GET", path);