pi-para 0.5.2
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.
- package/CHANGELOG.md +214 -0
- package/README.md +305 -0
- package/SETUP.md +171 -0
- package/dist/capture.d.ts +34 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +461 -0
- package/dist/capture.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +405 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +15 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +786 -0
- package/dist/commands.js.map +1 -0
- package/dist/context.d.ts +61 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +289 -0
- package/dist/context.js.map +1 -0
- package/dist/daemon.d.ts +49 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +226 -0
- package/dist/daemon.js.map +1 -0
- package/dist/frontmatter.d.ts +59 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +170 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gepa/dataset.d.ts +36 -0
- package/dist/gepa/dataset.d.ts.map +1 -0
- package/dist/gepa/dataset.js +148 -0
- package/dist/gepa/dataset.js.map +1 -0
- package/dist/gepa/evaluator.d.ts +51 -0
- package/dist/gepa/evaluator.d.ts.map +1 -0
- package/dist/gepa/evaluator.js +317 -0
- package/dist/gepa/evaluator.js.map +1 -0
- package/dist/gepa/index.d.ts +66 -0
- package/dist/gepa/index.d.ts.map +1 -0
- package/dist/gepa/index.js +240 -0
- package/dist/gepa/index.js.map +1 -0
- package/dist/gepa/llm.d.ts +35 -0
- package/dist/gepa/llm.d.ts.map +1 -0
- package/dist/gepa/llm.js +268 -0
- package/dist/gepa/llm.js.map +1 -0
- package/dist/gepa/optimized/capture-prompt.txt +65 -0
- package/dist/gepa/optimizer.d.ts +29 -0
- package/dist/gepa/optimizer.d.ts.map +1 -0
- package/dist/gepa/optimizer.js +249 -0
- package/dist/gepa/optimizer.js.map +1 -0
- package/dist/gepa/targets.d.ts +39 -0
- package/dist/gepa/targets.d.ts.map +1 -0
- package/dist/gepa/targets.js +326 -0
- package/dist/gepa/targets.js.map +1 -0
- package/dist/gepa/types.d.ts +168 -0
- package/dist/gepa/types.d.ts.map +1 -0
- package/dist/gepa/types.js +124 -0
- package/dist/gepa/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +294 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +88 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +105 -0
- package/dist/ingest.js.map +1 -0
- package/dist/link-discovery.d.ts +40 -0
- package/dist/link-discovery.d.ts.map +1 -0
- package/dist/link-discovery.js +122 -0
- package/dist/link-discovery.js.map +1 -0
- package/dist/link-utils.d.ts +30 -0
- package/dist/link-utils.d.ts.map +1 -0
- package/dist/link-utils.js +145 -0
- package/dist/link-utils.js.map +1 -0
- package/dist/lint.d.ts +39 -0
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +827 -0
- package/dist/lint.js.map +1 -0
- package/dist/maintainer.d.ts +24 -0
- package/dist/maintainer.d.ts.map +1 -0
- package/dist/maintainer.js +358 -0
- package/dist/maintainer.js.map +1 -0
- package/dist/processor.d.ts +14 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +361 -0
- package/dist/processor.js.map +1 -0
- package/dist/query.d.ts +69 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +107 -0
- package/dist/query.js.map +1 -0
- package/dist/raw.d.ts +57 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +219 -0
- package/dist/raw.js.map +1 -0
- package/dist/redact.d.ts +21 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +143 -0
- package/dist/redact.js.map +1 -0
- package/dist/scope.d.ts +54 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +161 -0
- package/dist/scope.js.map +1 -0
- package/dist/scripts/bulk-link-fix.d.ts +9 -0
- package/dist/scripts/bulk-link-fix.d.ts.map +1 -0
- package/dist/scripts/bulk-link-fix.js +106 -0
- package/dist/scripts/bulk-link-fix.js.map +1 -0
- package/dist/session-tools.d.ts +33 -0
- package/dist/session-tools.d.ts.map +1 -0
- package/dist/session-tools.js +211 -0
- package/dist/session-tools.js.map +1 -0
- package/dist/state.d.ts +54 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +176 -0
- package/dist/state.js.map +1 -0
- package/dist/store.d.ts +56 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +227 -0
- package/dist/store.js.map +1 -0
- package/dist/summarize.d.ts +56 -0
- package/dist/summarize.d.ts.map +1 -0
- package/dist/summarize.js +231 -0
- package/dist/summarize.js.map +1 -0
- package/dist/tag-registry.d.ts +56 -0
- package/dist/tag-registry.d.ts.map +1 -0
- package/dist/tag-registry.js +146 -0
- package/dist/tag-registry.js.map +1 -0
- package/dist/templates/prompts.d.ts +63 -0
- package/dist/templates/prompts.d.ts.map +1 -0
- package/dist/templates/prompts.js +260 -0
- package/dist/templates/prompts.js.map +1 -0
- package/dist/tools.d.ts +26 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1033 -0
- package/dist/tools.js.map +1 -0
- package/dist/watcher.d.ts +25 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +84 -0
- package/dist/watcher.js.map +1 -0
- package/dist/webui/client/dist/index.html +1885 -0
- package/dist/webui/server.d.ts +31 -0
- package/dist/webui/server.d.ts.map +1 -0
- package/dist/webui/server.js +566 -0
- package/dist/webui/server.js.map +1 -0
- package/dist/wiki.d.ts +103 -0
- package/dist/wiki.d.ts.map +1 -0
- package/dist/wiki.js +428 -0
- package/dist/wiki.js.map +1 -0
- package/package.json +142 -0
- package/scripts/gepa/__pycache__/dataset.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/lm_providers.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/metric.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/program.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/wiki_reader.cpython-313.pyc +0 -0
- package/scripts/gepa/dataset.py +192 -0
- package/scripts/gepa/lm_providers.py +472 -0
- package/scripts/gepa/metric.py +279 -0
- package/scripts/gepa/optimize.py +367 -0
- package/scripts/gepa/program.py +99 -0
- package/scripts/gepa/pyproject.toml +19 -0
- package/scripts/gepa/run-all.sh +53 -0
- package/scripts/gepa/uv.lock +2241 -0
- package/scripts/gepa/wiki_reader.py +113 -0
- package/skills/para/SKILL.md +77 -0
- package/skills/setup/SKILL.md +20 -0
- package/src/capture.ts +563 -0
- package/src/cli.ts +416 -0
- package/src/commands.ts +878 -0
- package/src/context.ts +390 -0
- package/src/daemon.ts +288 -0
- package/src/frontmatter.ts +219 -0
- package/src/gepa/index.ts +287 -0
- package/src/gepa/optimized/capture-prompt.txt +65 -0
- package/src/index.ts +384 -0
- package/src/ingest.ts +177 -0
- package/src/link-discovery.ts +170 -0
- package/src/link-utils.ts +169 -0
- package/src/lint.ts +1018 -0
- package/src/maintainer.ts +404 -0
- package/src/processor.ts +415 -0
- package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
- package/src/python/minimax_lm.py +198 -0
- package/src/python/rlm_capture.py +215 -0
- package/src/query.ts +148 -0
- package/src/raw.ts +276 -0
- package/src/redact.ts +159 -0
- package/src/scope.ts +214 -0
- package/src/scripts/bulk-link-fix.ts +126 -0
- package/src/session-tools.ts +260 -0
- package/src/state.ts +271 -0
- package/src/store.ts +288 -0
- package/src/summarize.ts +273 -0
- package/src/tag-registry.ts +157 -0
- package/src/templates/index.md +17 -0
- package/src/templates/prompts.ts +274 -0
- package/src/templates/schema.md +116 -0
- package/src/tools.ts +1293 -0
- package/src/watcher.ts +101 -0
- package/src/webui/client/dist/index.html +1885 -0
- package/src/webui/server.ts +765 -0
- package/src/wiki.ts +550 -0
package/dist/wiki.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}
|
package/dist/wiki.js
ADDED
|
@@ -0,0 +1,428 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../src/wiki.ts"],"names":[],"mappings":"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"}
|