pi-para 0.5.2 → 0.6.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 (195) hide show
  1. package/ARCHITECTURE.md +160 -0
  2. package/CHANGELOG.md +51 -0
  3. package/CONFIGURATION.md +243 -0
  4. package/README.md +140 -237
  5. package/SETUP.md +196 -112
  6. package/STRUCTURE.md +140 -0
  7. package/package.json +86 -18
  8. package/scripts/build-assets.mjs +29 -0
  9. package/scripts/install.ps1 +55 -0
  10. package/scripts/install.sh +63 -0
  11. package/scripts/smoke-install.mjs +63 -0
  12. package/skills/para/SKILL.md +1 -1
  13. package/skills/setup/SKILL.md +1 -1
  14. package/src/atomic-write.ts +17 -0
  15. package/src/capture.ts +4 -4
  16. package/src/cli-legacy.ts +43 -0
  17. package/src/cli.ts +133 -28
  18. package/src/commands.ts +203 -243
  19. package/src/config.ts +355 -0
  20. package/src/context.ts +29 -14
  21. package/src/credentials.ts +100 -0
  22. package/src/daemon.ts +1 -1
  23. package/src/doctor.ts +209 -0
  24. package/src/gepa/index.ts +1 -1
  25. package/src/index.ts +119 -40
  26. package/src/maintainer.ts +4 -4
  27. package/src/model-resolver.ts +96 -0
  28. package/src/paths.ts +48 -0
  29. package/src/processor.ts +4 -4
  30. package/src/qmd-providers.ts +63 -0
  31. package/src/query.ts +15 -1
  32. package/src/repair.ts +49 -0
  33. package/src/scheduler/controls.ts +125 -0
  34. package/src/scheduler/index.ts +210 -0
  35. package/src/scheduler/leases.ts +98 -0
  36. package/src/scheduler/session-capture.ts +146 -0
  37. package/src/scheduler/state.ts +304 -0
  38. package/src/session-tools.ts +1 -1
  39. package/src/settings.ts +126 -0
  40. package/src/setup.ts +116 -0
  41. package/src/status.ts +115 -0
  42. package/src/store.ts +116 -31
  43. package/src/summarize.ts +72 -16
  44. package/src/templates/prompts.ts +1 -1
  45. package/src/tools.ts +280 -90
  46. package/src/wiki-tool-guidance.ts +84 -0
  47. package/src/wiki.ts +98 -26
  48. package/dist/capture.d.ts +0 -34
  49. package/dist/capture.d.ts.map +0 -1
  50. package/dist/capture.js +0 -461
  51. package/dist/capture.js.map +0 -1
  52. package/dist/cli.d.ts +0 -15
  53. package/dist/cli.d.ts.map +0 -1
  54. package/dist/cli.js +0 -405
  55. package/dist/cli.js.map +0 -1
  56. package/dist/commands.d.ts +0 -15
  57. package/dist/commands.d.ts.map +0 -1
  58. package/dist/commands.js +0 -786
  59. package/dist/commands.js.map +0 -1
  60. package/dist/context.d.ts +0 -61
  61. package/dist/context.d.ts.map +0 -1
  62. package/dist/context.js +0 -289
  63. package/dist/context.js.map +0 -1
  64. package/dist/daemon.d.ts +0 -49
  65. package/dist/daemon.d.ts.map +0 -1
  66. package/dist/daemon.js +0 -226
  67. package/dist/daemon.js.map +0 -1
  68. package/dist/frontmatter.d.ts +0 -59
  69. package/dist/frontmatter.d.ts.map +0 -1
  70. package/dist/frontmatter.js +0 -170
  71. package/dist/frontmatter.js.map +0 -1
  72. package/dist/gepa/dataset.d.ts +0 -36
  73. package/dist/gepa/dataset.d.ts.map +0 -1
  74. package/dist/gepa/dataset.js +0 -148
  75. package/dist/gepa/dataset.js.map +0 -1
  76. package/dist/gepa/evaluator.d.ts +0 -51
  77. package/dist/gepa/evaluator.d.ts.map +0 -1
  78. package/dist/gepa/evaluator.js +0 -317
  79. package/dist/gepa/evaluator.js.map +0 -1
  80. package/dist/gepa/index.d.ts +0 -66
  81. package/dist/gepa/index.d.ts.map +0 -1
  82. package/dist/gepa/index.js +0 -240
  83. package/dist/gepa/index.js.map +0 -1
  84. package/dist/gepa/llm.d.ts +0 -35
  85. package/dist/gepa/llm.d.ts.map +0 -1
  86. package/dist/gepa/llm.js +0 -268
  87. package/dist/gepa/llm.js.map +0 -1
  88. package/dist/gepa/optimized/capture-prompt.txt +0 -65
  89. package/dist/gepa/optimizer.d.ts +0 -29
  90. package/dist/gepa/optimizer.d.ts.map +0 -1
  91. package/dist/gepa/optimizer.js +0 -249
  92. package/dist/gepa/optimizer.js.map +0 -1
  93. package/dist/gepa/targets.d.ts +0 -39
  94. package/dist/gepa/targets.d.ts.map +0 -1
  95. package/dist/gepa/targets.js +0 -326
  96. package/dist/gepa/targets.js.map +0 -1
  97. package/dist/gepa/types.d.ts +0 -168
  98. package/dist/gepa/types.d.ts.map +0 -1
  99. package/dist/gepa/types.js +0 -124
  100. package/dist/gepa/types.js.map +0 -1
  101. package/dist/index.d.ts +0 -21
  102. package/dist/index.d.ts.map +0 -1
  103. package/dist/index.js +0 -294
  104. package/dist/index.js.map +0 -1
  105. package/dist/ingest.d.ts +0 -88
  106. package/dist/ingest.d.ts.map +0 -1
  107. package/dist/ingest.js +0 -105
  108. package/dist/ingest.js.map +0 -1
  109. package/dist/link-discovery.d.ts +0 -40
  110. package/dist/link-discovery.d.ts.map +0 -1
  111. package/dist/link-discovery.js +0 -122
  112. package/dist/link-discovery.js.map +0 -1
  113. package/dist/link-utils.d.ts +0 -30
  114. package/dist/link-utils.d.ts.map +0 -1
  115. package/dist/link-utils.js +0 -145
  116. package/dist/link-utils.js.map +0 -1
  117. package/dist/lint.d.ts +0 -39
  118. package/dist/lint.d.ts.map +0 -1
  119. package/dist/lint.js +0 -827
  120. package/dist/lint.js.map +0 -1
  121. package/dist/maintainer.d.ts +0 -24
  122. package/dist/maintainer.d.ts.map +0 -1
  123. package/dist/maintainer.js +0 -358
  124. package/dist/maintainer.js.map +0 -1
  125. package/dist/processor.d.ts +0 -14
  126. package/dist/processor.d.ts.map +0 -1
  127. package/dist/processor.js +0 -361
  128. package/dist/processor.js.map +0 -1
  129. package/dist/query.d.ts +0 -69
  130. package/dist/query.d.ts.map +0 -1
  131. package/dist/query.js +0 -107
  132. package/dist/query.js.map +0 -1
  133. package/dist/raw.d.ts +0 -57
  134. package/dist/raw.d.ts.map +0 -1
  135. package/dist/raw.js +0 -219
  136. package/dist/raw.js.map +0 -1
  137. package/dist/redact.d.ts +0 -21
  138. package/dist/redact.d.ts.map +0 -1
  139. package/dist/redact.js +0 -143
  140. package/dist/redact.js.map +0 -1
  141. package/dist/scope.d.ts +0 -54
  142. package/dist/scope.d.ts.map +0 -1
  143. package/dist/scope.js +0 -161
  144. package/dist/scope.js.map +0 -1
  145. package/dist/scripts/bulk-link-fix.d.ts +0 -9
  146. package/dist/scripts/bulk-link-fix.d.ts.map +0 -1
  147. package/dist/scripts/bulk-link-fix.js +0 -106
  148. package/dist/scripts/bulk-link-fix.js.map +0 -1
  149. package/dist/session-tools.d.ts +0 -33
  150. package/dist/session-tools.d.ts.map +0 -1
  151. package/dist/session-tools.js +0 -211
  152. package/dist/session-tools.js.map +0 -1
  153. package/dist/state.d.ts +0 -54
  154. package/dist/state.d.ts.map +0 -1
  155. package/dist/state.js +0 -176
  156. package/dist/state.js.map +0 -1
  157. package/dist/store.d.ts +0 -56
  158. package/dist/store.d.ts.map +0 -1
  159. package/dist/store.js +0 -227
  160. package/dist/store.js.map +0 -1
  161. package/dist/summarize.d.ts +0 -56
  162. package/dist/summarize.d.ts.map +0 -1
  163. package/dist/summarize.js +0 -231
  164. package/dist/summarize.js.map +0 -1
  165. package/dist/tag-registry.d.ts +0 -56
  166. package/dist/tag-registry.d.ts.map +0 -1
  167. package/dist/tag-registry.js +0 -146
  168. package/dist/tag-registry.js.map +0 -1
  169. package/dist/templates/prompts.d.ts +0 -63
  170. package/dist/templates/prompts.d.ts.map +0 -1
  171. package/dist/templates/prompts.js +0 -260
  172. package/dist/templates/prompts.js.map +0 -1
  173. package/dist/tools.d.ts +0 -26
  174. package/dist/tools.d.ts.map +0 -1
  175. package/dist/tools.js +0 -1033
  176. package/dist/tools.js.map +0 -1
  177. package/dist/watcher.d.ts +0 -25
  178. package/dist/watcher.d.ts.map +0 -1
  179. package/dist/watcher.js +0 -84
  180. package/dist/watcher.js.map +0 -1
  181. package/dist/webui/client/dist/index.html +0 -1885
  182. package/dist/webui/server.d.ts +0 -31
  183. package/dist/webui/server.d.ts.map +0 -1
  184. package/dist/webui/server.js +0 -566
  185. package/dist/webui/server.js.map +0 -1
  186. package/dist/wiki.d.ts +0 -103
  187. package/dist/wiki.d.ts.map +0 -1
  188. package/dist/wiki.js +0 -428
  189. package/dist/wiki.js.map +0 -1
  190. package/scripts/gepa/__pycache__/dataset.cpython-313.pyc +0 -0
  191. package/scripts/gepa/__pycache__/lm_providers.cpython-313.pyc +0 -0
  192. package/scripts/gepa/__pycache__/metric.cpython-313.pyc +0 -0
  193. package/scripts/gepa/__pycache__/program.cpython-313.pyc +0 -0
  194. package/scripts/gepa/__pycache__/wiki_reader.cpython-313.pyc +0 -0
  195. package/scripts/gepa/uv.lock +0 -2241
package/dist/wiki.d.ts DELETED
@@ -1,103 +0,0 @@
1
- /**
2
- * Wiki filesystem operations — manages ~/.pi/wiki/ directory structure.
3
- *
4
- * Handles CRUD for wiki pages (markdown + YAML frontmatter), index/log
5
- * maintenance, page moves between PARA categories, and wiki initialization.
6
- */
7
- import type { StateDB } from "./state.js";
8
- export type ParaCategory = "projects" | "areas" | "resources" | "archives";
9
- export interface PageFrontmatter {
10
- title: string;
11
- para: ParaCategory;
12
- scope: string[];
13
- tags: string[];
14
- sources: string[];
15
- created: string;
16
- updated: string;
17
- links: string[];
18
- schemaVersion: number;
19
- }
20
- export interface WikiPage {
21
- category: ParaCategory;
22
- slug: string;
23
- frontmatter: PageFrontmatter;
24
- body: string;
25
- }
26
- export interface PageRef {
27
- category: ParaCategory;
28
- slug: string;
29
- title: string;
30
- path: string;
31
- }
32
- export interface LogEntry {
33
- date: string;
34
- operation: "ingest" | "query" | "lint" | "capture" | "move" | "archive";
35
- summary: string;
36
- pages: string[];
37
- }
38
- export declare const PARA_CATEGORIES: readonly ParaCategory[];
39
- /**
40
- * Initialize a wiki directory. Creates the PARA category directories,
41
- * raw source directories, and seeds schema.md, index.md, log.md, and
42
- * sessions.md if they do not already exist. Idempotent.
43
- */
44
- export declare function initWiki(wikiDir: string): Promise<void>;
45
- /**
46
- * Read a wiki page by category and slug. Returns null if the page does
47
- * not exist. Parses YAML frontmatter via frontmatter.ts.
48
- */
49
- export declare function readPage(wikiDir: string, category: ParaCategory, slug: string): Promise<WikiPage | null>;
50
- /**
51
- * Write a wiki page. Creates the category directory if needed. Serializes
52
- * frontmatter and body via frontmatter.ts.
53
- *
54
- * If stateDb is provided, also updates the page summary cache.
55
- */
56
- export declare function writePage(wikiDir: string, page: WikiPage, stateDb?: StateDB): Promise<void>;
57
- /**
58
- * Delete a wiki page. No-op if the page does not exist.
59
- */
60
- export declare function deletePage(wikiDir: string, category: ParaCategory, slug: string): Promise<void>;
61
- /**
62
- * Move a page between PARA categories. Updates the page's `para` and
63
- * `updated` frontmatter fields. The slug is preserved.
64
- */
65
- export declare function movePage(wikiDir: string, from: PageRef, toCategory: ParaCategory): Promise<void>;
66
- /**
67
- * List pages across one or all PARA categories. Returns PageRef objects
68
- * sorted by category then slug.
69
- */
70
- export declare function listPages(wikiDir: string, category?: ParaCategory): Promise<PageRef[]>;
71
- /**
72
- * Read the wiki index (index.md).
73
- */
74
- export declare function readIndex(wikiDir: string): Promise<string>;
75
- /**
76
- * Write the wiki index (index.md).
77
- */
78
- export declare function writeIndex(wikiDir: string, content: string): Promise<void>;
79
- /**
80
- * Append an entry to the activity log (log.md).
81
- */
82
- export declare function appendLog(wikiDir: string, entry: LogEntry): Promise<void>;
83
- /**
84
- * Read the wiki schema (schema.md).
85
- */
86
- export declare function readSchema(wikiDir: string): Promise<string>;
87
- /**
88
- * Rebuild index.md deterministically from all pages on disk.
89
- *
90
- * Reads all pages, groups by PARA category, sorts alphabetically within
91
- * each category, and writes a standardized index.md with one-line summaries.
92
- */
93
- export declare function rebuildIndex(wikiDir: string): Promise<void>;
94
- /**
95
- * Auto-commit all wiki changes with a descriptive message.
96
- *
97
- * Silently no-ops if:
98
- * - git is not installed
99
- * - wiki dir is not a git repo
100
- * - there are no changes to commit
101
- */
102
- export declare function gitCommit(wikiDir: string, message: string): Promise<boolean>;
103
- //# sourceMappingURL=wiki.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,eAAe,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAKlD,CAAC;AAkIF;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAc1B;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,YAAY,GACvB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAsCpB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjE;AAkBD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDjE;AAoCD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
package/dist/wiki.js DELETED
@@ -1,428 +0,0 @@
1
- /**
2
- * Wiki filesystem operations — manages ~/.pi/wiki/ directory structure.
3
- *
4
- * Handles CRUD for wiki pages (markdown + YAML frontmatter), index/log
5
- * maintenance, page moves between PARA categories, and wiki initialization.
6
- */
7
- import { readFile, writeFile, mkdir, unlink, readdir, access, } from "node:fs/promises";
8
- import { join } from "node:path";
9
- import { execFile } from "node:child_process";
10
- import { parseFrontmatter, serializeFrontmatter, } from "./frontmatter.js";
11
- // -- Constants ---------------------------------------------------------------
12
- export const PARA_CATEGORIES = [
13
- "projects",
14
- "areas",
15
- "resources",
16
- "archives",
17
- ];
18
- const DEFAULT_SCHEMA = `# Wiki Schema
19
-
20
- ## Page Format
21
-
22
- Every wiki page is a markdown file with YAML frontmatter:
23
-
24
- \`\`\`yaml
25
- ---
26
- title: Page Title
27
- para: projects | areas | resources | archives
28
- scope:
29
- - project-name
30
- - global
31
- tags:
32
- - topic-tag
33
- sources:
34
- - https://example.com
35
- - session:~/.pi/agent/sessions/.../file.jsonl
36
- created: "2026-01-01"
37
- updated: "2026-01-01"
38
- links:
39
- - other-page-slug
40
- ---
41
- \`\`\`
42
-
43
- ## PARA Categories
44
-
45
- - **projects/**: Active, goal-defined work with an end date. Default scope: current project name.
46
- - **areas/**: Ongoing responsibilities with no end date. Default scope: \`["global"]\`.
47
- - **resources/**: Reference material, how-tos, patterns. Scope assigned by content analysis.
48
- - **archives/**: Completed, deprecated, or inactive items. Moved from other categories.
49
-
50
- ## Naming Conventions
51
-
52
- - Slugs: lowercase, hyphens, no special characters (e.g., \`ssl-cert-gotchas\`)
53
- - One concept per page
54
- - Use [[wikilinks]] for cross-references: \`[[slug]]\`
55
-
56
- ## Wiki Summary Format
57
-
58
- \`\`\`markdown
59
- ## Topic
60
- [What this page covers]
61
-
62
- ## Key Facts
63
- - [Established knowledge points]
64
-
65
- ## Insights
66
- - [Non-obvious findings, patterns, implications]
67
-
68
- ## Connections
69
- - [[related-page]] — how this relates
70
-
71
- ## Open Questions
72
- - [Gaps in knowledge, unresolved contradictions]
73
-
74
- ## Sources
75
- - [Source URLs, file paths, session references]
76
- \`\`\`
77
-
78
- ## Index Format
79
-
80
- \`index.md\` is organized by PARA category with one-line summaries per page.
81
-
82
- ## Log Format
83
-
84
- \`log.md\` uses the heading format: \`## [YYYY-MM-DD] operation | summary\`
85
-
86
- ## Tone
87
-
88
- Technical, concise, factual. No fluff.
89
-
90
- ## Updates vs. New Pages
91
-
92
- - Update an existing page when new information relates to the same concept
93
- - Create a new page when the concept is distinct enough to stand alone
94
- - When in doubt, create a new page and add [[wikilinks]]
95
-
96
- ## Archiving
97
-
98
- Move projects to archives when:
99
- - The project goal is completed
100
- - No log entries in 90+ days
101
- - Explicitly requested by user
102
- `;
103
- const DEFAULT_INDEX = `# Wiki Index
104
-
105
- ## Projects
106
-
107
- _No active projects yet._
108
-
109
- ## Areas
110
-
111
- _No areas defined yet._
112
-
113
- ## Resources
114
-
115
- _No resources yet._
116
-
117
- ## Archives
118
-
119
- _No archived items._
120
- `;
121
- const DEFAULT_LOG = "# Activity Log\n";
122
- const DEFAULT_SESSIONS = "# Session Digests\n";
123
- // -- Helpers -----------------------------------------------------------------
124
- async function fileExists(path) {
125
- try {
126
- await access(path);
127
- return true;
128
- }
129
- catch {
130
- return false;
131
- }
132
- }
133
- async function seedFile(path, content) {
134
- if (!(await fileExists(path))) {
135
- await writeFile(path, content, "utf-8");
136
- }
137
- }
138
- // -- Functions ---------------------------------------------------------------
139
- /**
140
- * Initialize a wiki directory. Creates the PARA category directories,
141
- * raw source directories, and seeds schema.md, index.md, log.md, and
142
- * sessions.md if they do not already exist. Idempotent.
143
- */
144
- export async function initWiki(wikiDir) {
145
- // Create PARA category directories
146
- for (const cat of PARA_CATEGORIES) {
147
- await mkdir(join(wikiDir, cat), { recursive: true });
148
- }
149
- // Create raw source directories
150
- for (const sub of ["articles", "docs", "notes"]) {
151
- await mkdir(join(wikiDir, "raw", sub), { recursive: true });
152
- }
153
- // Seed default files (only if missing)
154
- await seedFile(join(wikiDir, "schema.md"), DEFAULT_SCHEMA);
155
- await seedFile(join(wikiDir, "index.md"), DEFAULT_INDEX);
156
- await seedFile(join(wikiDir, "log.md"), DEFAULT_LOG);
157
- await seedFile(join(wikiDir, "sessions.md"), DEFAULT_SESSIONS);
158
- }
159
- /**
160
- * Read a wiki page by category and slug. Returns null if the page does
161
- * not exist. Parses YAML frontmatter via frontmatter.ts.
162
- */
163
- export async function readPage(wikiDir, category, slug) {
164
- const filePath = join(wikiDir, category, `${slug}.md`);
165
- let content;
166
- try {
167
- content = await readFile(filePath, "utf-8");
168
- }
169
- catch (err) {
170
- if (err.code === "ENOENT") {
171
- return null;
172
- }
173
- throw err;
174
- }
175
- const { frontmatter, body } = parseFrontmatter(content);
176
- return { category, slug, frontmatter, body };
177
- }
178
- /**
179
- * Write a wiki page. Creates the category directory if needed. Serializes
180
- * frontmatter and body via frontmatter.ts.
181
- *
182
- * If stateDb is provided, also updates the page summary cache.
183
- */
184
- export async function writePage(wikiDir, page, stateDb) {
185
- const dirPath = join(wikiDir, page.category);
186
- await mkdir(dirPath, { recursive: true });
187
- const filePath = join(dirPath, `${page.slug}.md`);
188
- const content = serializeFrontmatter(page.frontmatter, page.body);
189
- await writeFile(filePath, content, "utf-8");
190
- // Update page summary cache if state DB is available
191
- if (stateDb) {
192
- const firstPara = extractFirstParagraphFromBody(page.body);
193
- stateDb.upsertPageSummary(page.slug, page.category, page.frontmatter.scope, page.frontmatter.tags, firstPara, page.frontmatter.updated);
194
- }
195
- }
196
- /**
197
- * Delete a wiki page. No-op if the page does not exist.
198
- */
199
- export async function deletePage(wikiDir, category, slug) {
200
- const filePath = join(wikiDir, category, `${slug}.md`);
201
- try {
202
- await unlink(filePath);
203
- }
204
- catch (err) {
205
- if (err.code === "ENOENT") {
206
- return;
207
- }
208
- throw err;
209
- }
210
- }
211
- /**
212
- * Move a page between PARA categories. Updates the page's `para` and
213
- * `updated` frontmatter fields. The slug is preserved.
214
- */
215
- export async function movePage(wikiDir, from, toCategory) {
216
- const srcPath = join(wikiDir, from.category, `${from.slug}.md`);
217
- const destDir = join(wikiDir, toCategory);
218
- const destPath = join(destDir, `${from.slug}.md`);
219
- // Read source
220
- const content = await readFile(srcPath, "utf-8");
221
- const { frontmatter, body } = parseFrontmatter(content);
222
- // Update frontmatter
223
- frontmatter.para = toCategory;
224
- frontmatter.updated = new Date().toISOString();
225
- // Write to new location, then remove old file
226
- await mkdir(destDir, { recursive: true });
227
- await writeFile(destPath, serializeFrontmatter(frontmatter, body), "utf-8");
228
- await unlink(srcPath);
229
- }
230
- /**
231
- * List pages across one or all PARA categories. Returns PageRef objects
232
- * sorted by category then slug.
233
- */
234
- export async function listPages(wikiDir, category) {
235
- const categories = category ? [category] : PARA_CATEGORIES;
236
- const refs = [];
237
- for (const cat of categories) {
238
- const dirPath = join(wikiDir, cat);
239
- let entries;
240
- try {
241
- entries = await readdir(dirPath);
242
- }
243
- catch {
244
- continue; // directory doesn't exist yet
245
- }
246
- for (const entry of entries) {
247
- if (!entry.endsWith(".md"))
248
- continue;
249
- const slug = entry.slice(0, -3);
250
- const filePath = join(dirPath, entry);
251
- const content = await readFile(filePath, "utf-8");
252
- const { frontmatter } = parseFrontmatter(content);
253
- refs.push({
254
- category: cat,
255
- slug,
256
- title: frontmatter.title,
257
- path: `${cat}/${entry}`,
258
- });
259
- }
260
- }
261
- // Sort by category order, then slug alphabetically
262
- refs.sort((a, b) => {
263
- const catCmp = PARA_CATEGORIES.indexOf(a.category) -
264
- PARA_CATEGORIES.indexOf(b.category);
265
- if (catCmp !== 0)
266
- return catCmp;
267
- return a.slug.localeCompare(b.slug);
268
- });
269
- return refs;
270
- }
271
- /**
272
- * Read the wiki index (index.md).
273
- */
274
- export async function readIndex(wikiDir) {
275
- return readFile(join(wikiDir, "index.md"), "utf-8");
276
- }
277
- /**
278
- * Write the wiki index (index.md).
279
- */
280
- export async function writeIndex(wikiDir, content) {
281
- await writeFile(join(wikiDir, "index.md"), content, "utf-8");
282
- }
283
- /**
284
- * Append an entry to the activity log (log.md).
285
- */
286
- export async function appendLog(wikiDir, entry) {
287
- const logPath = join(wikiDir, "log.md");
288
- const existing = await readFile(logPath, "utf-8");
289
- const pages = entry.pages.length > 0 ? entry.pages.join(", ") : "none";
290
- const line = `\n## [${entry.date}] ${entry.operation} | ${entry.summary}\nPages: ${pages}\n`;
291
- await writeFile(logPath, existing + line, "utf-8");
292
- }
293
- /**
294
- * Read the wiki schema (schema.md).
295
- */
296
- export async function readSchema(wikiDir) {
297
- return readFile(join(wikiDir, "schema.md"), "utf-8");
298
- }
299
- // -- Git auto-commit ---------------------------------------------------------
300
- /**
301
- * Run a git command in the wiki directory. Returns stdout or null on failure.
302
- */
303
- function git(wikiDir, args) {
304
- return new Promise((resolve) => {
305
- execFile("git", args, { cwd: wikiDir, timeout: 10_000 }, (err, stdout) => {
306
- if (err)
307
- resolve(null);
308
- else
309
- resolve(stdout.trim());
310
- });
311
- });
312
- }
313
- // -- Index rebuild -----------------------------------------------------------
314
- /**
315
- * Rebuild index.md deterministically from all pages on disk.
316
- *
317
- * Reads all pages, groups by PARA category, sorts alphabetically within
318
- * each category, and writes a standardized index.md with one-line summaries.
319
- */
320
- export async function rebuildIndex(wikiDir) {
321
- const allRefs = await listPages(wikiDir);
322
- const sections = {
323
- projects: [],
324
- areas: [],
325
- resources: [],
326
- archives: [],
327
- };
328
- for (const ref of allRefs) {
329
- const page = await readPage(wikiDir, ref.category, ref.slug);
330
- const title = page?.frontmatter.title ?? ref.title;
331
- const summary = page ? extractFirstParagraphFromBody(page.body) : "";
332
- const desc = summary && summary !== "(no summary)"
333
- ? ": " + (summary.length > 120 ? summary.slice(0, 117) + "..." : summary)
334
- : "";
335
- sections[ref.category].push(`- [[${ref.slug}]] \u2014 ${title}${desc}`);
336
- }
337
- const categoryLabels = {
338
- projects: "Projects",
339
- areas: "Areas",
340
- resources: "Resources",
341
- archives: "Archives",
342
- };
343
- const lines = ["# Wiki Index", ""];
344
- for (const cat of PARA_CATEGORIES) {
345
- lines.push(`## ${categoryLabels[cat]}`, "");
346
- if (sections[cat].length > 0) {
347
- lines.push(...sections[cat]);
348
- }
349
- else {
350
- const emptyMsg = {
351
- projects: "_No active projects yet._",
352
- areas: "_No areas defined yet._",
353
- resources: "_No resources yet._",
354
- archives: "_No archived items._",
355
- };
356
- lines.push(emptyMsg[cat]);
357
- }
358
- lines.push("");
359
- }
360
- // Remove trailing empty line to avoid double newlines
361
- while (lines.length > 0 && lines[lines.length - 1] === "") {
362
- lines.pop();
363
- }
364
- lines.push(""); // single trailing newline
365
- await writeIndex(wikiDir, lines.join("\n"));
366
- }
367
- /**
368
- * Extract the first non-empty paragraph from a markdown body.
369
- * Skips headings and blank lines. Returns a single line.
370
- */
371
- function extractFirstParagraphFromBody(body) {
372
- const lines = body.split("\n");
373
- const paragraphLines = [];
374
- let inParagraph = false;
375
- for (const line of lines) {
376
- const trimmed = line.trim();
377
- // Skip headings and empty lines before paragraph starts
378
- if (!inParagraph) {
379
- if (trimmed === "" || trimmed.startsWith("#"))
380
- continue;
381
- inParagraph = true;
382
- }
383
- // End paragraph on blank line or heading
384
- if (inParagraph && (trimmed === "" || trimmed.startsWith("#"))) {
385
- break;
386
- }
387
- paragraphLines.push(trimmed);
388
- }
389
- const result = paragraphLines.join(" ");
390
- // Truncate long paragraphs
391
- if (result.length > 200) {
392
- return result.slice(0, 197) + "...";
393
- }
394
- return result || "(no summary)";
395
- }
396
- /**
397
- * Auto-commit all wiki changes with a descriptive message.
398
- *
399
- * Silently no-ops if:
400
- * - git is not installed
401
- * - wiki dir is not a git repo
402
- * - there are no changes to commit
403
- */
404
- export async function gitCommit(wikiDir, message) {
405
- try {
406
- // Check if it's a git repo
407
- const isRepo = await git(wikiDir, ["rev-parse", "--git-dir"]);
408
- if (!isRepo) {
409
- // Auto-init if not a repo yet
410
- const initResult = await git(wikiDir, ["init"]);
411
- if (!initResult)
412
- return false;
413
- }
414
- // Stage all changes
415
- await git(wikiDir, ["add", "-A"]);
416
- // Check if there's anything to commit
417
- const status = await git(wikiDir, ["status", "--porcelain"]);
418
- if (!status)
419
- return false; // nothing to commit
420
- // Commit
421
- const result = await git(wikiDir, ["commit", "-m", message, "--no-gpg-sign"]);
422
- return result !== null;
423
- }
424
- catch {
425
- return false;
426
- }
427
- }
428
- //# sourceMappingURL=wiki.js.map
package/dist/wiki.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}