@wiki0/core 0.0.1 → 0.0.3

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/dist/pages.js CHANGED
@@ -14,20 +14,12 @@ export function create_page(title, body, options = {}) {
14
14
  return read_page(title, options.root);
15
15
  }
16
16
  export function read_page(title, root = '.') {
17
- const file_path = page_file_path(title, root);
18
- const body = readFileSync(file_path, 'utf-8');
19
- const parsed_markdown = parse_markdown(body);
20
- return {
21
- path: page_relative_path(title),
22
- title: page_title_from_markdown(body, display_page_title(title)),
23
- body,
24
- content: parsed_markdown.content,
25
- frontmatter: parsed_markdown.frontmatter,
26
- links: parse_wikilinks(body),
27
- };
17
+ const page_path = resolve_page_path(title, root);
18
+ return read_page_by_path(page_path, root);
28
19
  }
29
20
  export function set_page_frontmatter(title, frontmatter, options = {}) {
30
- const file_path = page_file_path(title, options.root);
21
+ const page_path = resolve_page_path(title, options.root);
22
+ const file_path = join(resolve_wiki_root(options.root), 'wiki', page_path);
31
23
  const body = readFileSync(file_path, 'utf-8');
32
24
  const parsed_markdown = parse_markdown(body);
33
25
  const next_frontmatter = options.merge
@@ -35,15 +27,37 @@ export function set_page_frontmatter(title, frontmatter, options = {}) {
35
27
  : frontmatter;
36
28
  const next_body = `${serialize_frontmatter(next_frontmatter)}${parsed_markdown.content}`;
37
29
  writeFileSync(file_path, next_body.endsWith('\n') ? next_body : `${next_body}\n`);
38
- return read_page(title, options.root);
30
+ return read_page_by_path(page_path, options.root);
39
31
  }
40
32
  export function append_page(title, body, root = '.') {
41
- const file_path = page_file_path(title, root);
33
+ const page_path = resolve_page_path(title, root);
34
+ const file_path = join(resolve_wiki_root(root), 'wiki', page_path);
42
35
  const append_body = body.startsWith('\n') ? body : `\n${body}`;
43
36
  writeFileSync(file_path, append_body.endsWith('\n') ? append_body : `${append_body}\n`, {
44
37
  flag: 'a',
45
38
  });
46
- return read_page(title, root);
39
+ return read_page_by_path(page_path, root);
40
+ }
41
+ export function resolve_page_path(title, root = '.') {
42
+ const wiki_root = resolve_wiki_root(root);
43
+ const direct_path = page_relative_path(title);
44
+ if (existsSync(join(wiki_root, 'wiki', direct_path))) {
45
+ return direct_path;
46
+ }
47
+ const normalized_title = title.trim().toLowerCase();
48
+ for (const page_path of list_markdown_page_paths(wiki_root)) {
49
+ const page = read_page_by_path(page_path, wiki_root);
50
+ const aliases = page.frontmatter.aliases;
51
+ const alias_list = Array.isArray(aliases)
52
+ ? aliases.filter((alias) => typeof alias === 'string')
53
+ : typeof aliases === 'string'
54
+ ? [aliases]
55
+ : [];
56
+ const candidates = [page.title, ...alias_list].map((candidate) => candidate.toLowerCase());
57
+ if (candidates.includes(normalized_title))
58
+ return page_path;
59
+ }
60
+ return direct_path;
47
61
  }
48
62
  export function list_markdown_page_paths(root = '.') {
49
63
  const wiki_root = resolve_wiki_root(root);
package/dist/pages.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
package/dist/review.js CHANGED
@@ -19,7 +19,9 @@ export function review_wiki(root = '.') {
19
19
  const status = page.frontmatter.status;
20
20
  const tags = page.frontmatter.tags;
21
21
  const status_text = typeof status === 'string' ? status : null;
22
- const tag_list = Array.isArray(tags) ? tags : [];
22
+ const tag_list = Array.isArray(tags)
23
+ ? tags.filter((tag) => typeof tag === 'string')
24
+ : [];
23
25
  const matching_tag = tag_list.find((tag) => review_tags.has(tag));
24
26
  if (status_text && review_statuses.has(status_text)) {
25
27
  results.push({
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AAGpB,MAAM,UAAU,WAAW,CAAC,IAAI,GAAG,GAAG;IACrC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;QAC/B,OAAO;QACP,UAAU;QACV,QAAQ;QACR,OAAO;QACP,YAAY;KACZ,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC3B,QAAQ;QACR,cAAc;QACd,YAAY;QACZ,OAAO;KACP,CAAC,CAAC;IACH,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,SAAS,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,MAAM,WAAW,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAElE,IAAI,WAAW,IAAI,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU,WAAW,EAAE;aAC/B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO,YAAY,EAAE;aAC7B,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACnC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AAGpB,MAAM,UAAU,WAAW,CAAC,IAAI,GAAG,GAAG;IACrC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;QAC/B,OAAO;QACP,UAAU;QACV,QAAQ;QACR,OAAO;QACP,YAAY;KACZ,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC3B,QAAQ;QACR,cAAc;QACd,YAAY;QACZ,OAAO;KACP,CAAC,CAAC;IACH,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,SAAS,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,MAAM,WAAW,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACN,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAElE,IAAI,WAAW,IAAI,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU,WAAW,EAAE;aAC/B,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO,YAAY,EAAE;aAC7B,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACnC,CAAC;AACH,CAAC"}
package/dist/schema.sql CHANGED
@@ -34,4 +34,10 @@ CREATE TABLE IF NOT EXISTS facts (
34
34
  created_at TEXT DEFAULT (datetime('now'))
35
35
  );
36
36
 
37
+ CREATE TABLE IF NOT EXISTS wiki_meta (
38
+ key TEXT PRIMARY KEY,
39
+ value TEXT NOT NULL,
40
+ updated_at TEXT DEFAULT (datetime('now'))
41
+ );
42
+
37
43
  CREATE VIRTUAL TABLE IF NOT EXISTS fts_pages USING fts5(path, title, body);
package/dist/search.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type { BacklinkResult, ContextResult, SearchResult } from './types.js';
2
2
  export declare function search_wiki(query: string, root?: string, limit?: number): SearchResult[];
3
+ export declare function plain_text_fts_query(query: string): string;
4
+ export declare function relaxed_plain_text_fts_query(query: string): string;
3
5
  export declare function get_wiki_context(query: string, root?: string, limit?: number): ContextResult;
4
6
  export declare function format_context_markdown(query: string, results: SearchResult[]): string;
5
7
  export declare function backlinks_for_page(title: string, root?: string): BacklinkResult[];
package/dist/search.js CHANGED
@@ -1,18 +1,88 @@
1
1
  import { open_wiki_database } from './database.js';
2
- import { wikilink_target_path } from './paths.js';
2
+ import { resolve_page_path } from './pages.js';
3
3
  export function search_wiki(query, root = '.', limit = 10) {
4
4
  const db = open_wiki_database(root);
5
- const rows = db
6
- .prepare(`SELECT path, title,
7
- snippet(fts_pages, 2, '[', ']', '…', 12) AS snippet,
8
- bm25(fts_pages) AS rank
9
- FROM fts_pages
10
- WHERE fts_pages MATCH ?
11
- ORDER BY rank
12
- LIMIT ?`)
13
- .all(query, limit);
14
- db.close();
15
- return rows;
5
+ const statement = db.prepare(`SELECT path, title,
6
+ snippet(fts_pages, 2, '[', ']', '…', 12) AS snippet,
7
+ bm25(fts_pages) AS rank
8
+ FROM fts_pages
9
+ WHERE fts_pages MATCH ?
10
+ ORDER BY rank
11
+ LIMIT ?`);
12
+ const fts_query = plain_text_fts_query(query);
13
+ if (!fts_query) {
14
+ db.close();
15
+ return [];
16
+ }
17
+ try {
18
+ const rows = statement.all(fts_query, limit);
19
+ if (rows.length > 0)
20
+ return rows;
21
+ const relaxed_query = relaxed_plain_text_fts_query(query);
22
+ if (!relaxed_query || relaxed_query === fts_query)
23
+ return rows;
24
+ return statement.all(relaxed_query, limit);
25
+ }
26
+ catch (error) {
27
+ throw new Error(`Invalid wiki search query: ${query}`, {
28
+ cause: error,
29
+ });
30
+ }
31
+ finally {
32
+ db.close();
33
+ }
34
+ }
35
+ const stop_words = new Set([
36
+ 'a',
37
+ 'an',
38
+ 'and',
39
+ 'are',
40
+ 'as',
41
+ 'at',
42
+ 'be',
43
+ 'by',
44
+ 'did',
45
+ 'do',
46
+ 'does',
47
+ 'for',
48
+ 'from',
49
+ 'how',
50
+ 'in',
51
+ 'is',
52
+ 'it',
53
+ 'of',
54
+ 'on',
55
+ 'or',
56
+ 'that',
57
+ 'the',
58
+ 'this',
59
+ 'to',
60
+ 'was',
61
+ 'we',
62
+ 'what',
63
+ 'when',
64
+ 'where',
65
+ 'who',
66
+ 'why',
67
+ 'with',
68
+ ]);
69
+ export function plain_text_fts_query(query) {
70
+ return plain_text_terms(query).map(quote_fts_term).join(' ');
71
+ }
72
+ export function relaxed_plain_text_fts_query(query) {
73
+ return plain_text_terms(query)
74
+ .filter((term) => !stop_words.has(term.toLowerCase()))
75
+ .map(quote_fts_term)
76
+ .join(' OR ');
77
+ }
78
+ function plain_text_terms(query) {
79
+ return query
80
+ .split(/\s+/u)
81
+ .map((term) => term.replace(/^\W+|\W+$/gu, ''))
82
+ .filter((term) => term.length > 0);
83
+ }
84
+ function quote_fts_term(term) {
85
+ return `"${term.replace(/"/gu, '""')}"`;
16
86
  }
17
87
  export function get_wiki_context(query, root = '.', limit = 5) {
18
88
  const results = search_wiki(query, root, limit);
@@ -35,7 +105,7 @@ export function format_context_markdown(query, results) {
35
105
  }
36
106
  export function backlinks_for_page(title, root = '.') {
37
107
  const db = open_wiki_database(root);
38
- const page_path = wikilink_target_path(title);
108
+ const page_path = resolve_page_path(title, root);
39
109
  const rows = db
40
110
  .prepare(`SELECT pages.path, pages.title, page_links.raw_text AS rawText,
41
111
  page_links.alias, page_links.embed
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,MAAM,UAAU,WAAW,CAC1B,KAAa,EACb,IAAI,GAAG,GAAG,EACV,KAAK,GAAG,EAAE;IAEV,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,EAAE;SACb,OAAO,CACP;;;;;;WAMQ,CACR;SACA,GAAG,CAAC,KAAK,EAAE,KAAK,CAAmB,CAAC;IACtC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,KAAa,EACb,IAAI,GAAG,GAAG,EACV,KAAK,GAAG,CAAC;IAET,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO;QACN,KAAK;QACL,OAAO;QACP,QAAQ,EAAE,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC;KACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,KAAa,EACb,OAAuB;IAEvB,MAAM,KAAK,GAAG,CAAC,oBAAoB,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CACT,MAAM,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,EAClC,kBAAkB,MAAM,CAAC,IAAI,IAAI,EACjC,EAAE,EACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAC3C,EAAE,CACF,CAAC;IACH,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,KAAa,EACb,IAAI,GAAG,GAAG;IAEV,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,EAAE;SACb,OAAO,CACP;;;;;uBAKoB,CACpB;SACA,GAAG,CAAC,SAAS,CAAqB,CAAC;IACrC,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -9,7 +9,9 @@ export type WikiLink = {
9
9
  alias?: string;
10
10
  embed: boolean;
11
11
  };
12
- export type FrontmatterValue = string | number | boolean | string[];
12
+ export type FrontmatterValue = string | number | boolean | null | FrontmatterValue[] | {
13
+ [key: string]: FrontmatterValue;
14
+ };
13
15
  export type WikiFrontmatter = Record<string, FrontmatterValue>;
14
16
  export type ParsedMarkdown = {
15
17
  frontmatter: WikiFrontmatter;
@@ -36,6 +38,20 @@ export type IndexResult = {
36
38
  dbPath: string;
37
39
  pageCount: number;
38
40
  linkCount: number;
41
+ indexedAt: string;
42
+ schemaVersion: number;
43
+ };
44
+ export type IndexStatus = {
45
+ root: string;
46
+ dbPath: string;
47
+ exists: boolean;
48
+ indexedAt: string | null;
49
+ schemaVersion: number | null;
50
+ currentSchemaVersion: number;
51
+ pageCount: number;
52
+ indexedPageCount: number;
53
+ stale: boolean;
54
+ reasons: string[];
39
55
  };
40
56
  export type SearchResult = {
41
57
  path: string;
@@ -55,6 +71,42 @@ export type BacklinkResult = {
55
71
  alias: string | null;
56
72
  embed: boolean;
57
73
  };
74
+ export type GraphNode = {
75
+ path: string;
76
+ title: string;
77
+ };
78
+ export type GraphEdge = {
79
+ from: string;
80
+ to: string;
81
+ target: string;
82
+ rawText: string;
83
+ alias: string | null;
84
+ embed: boolean;
85
+ status: 'resolved' | 'unresolved';
86
+ };
87
+ export type GraphResult = {
88
+ root: string;
89
+ nodes: GraphNode[];
90
+ edges: GraphEdge[];
91
+ };
92
+ export type FactConfidence = 'unknown' | 'low' | 'medium' | 'high' | 'verified';
93
+ export type Fact = {
94
+ id: number;
95
+ pagePath: string | null;
96
+ category: string;
97
+ summary: string;
98
+ body: string | null;
99
+ confidence: FactConfidence;
100
+ createdAt: string;
101
+ };
102
+ export type FactWriteOptions = {
103
+ root?: string;
104
+ page?: string;
105
+ category: string;
106
+ summary: string;
107
+ body?: string;
108
+ confidence?: FactConfidence;
109
+ };
58
110
  export type ReviewResult = {
59
111
  path: string;
60
112
  title: string;
@@ -62,3 +114,45 @@ export type ReviewResult = {
62
114
  tags: string[];
63
115
  reason: string;
64
116
  };
117
+ export type LintIssue = {
118
+ code: string;
119
+ severity: 'error' | 'warning';
120
+ path: string;
121
+ message: string;
122
+ target?: string;
123
+ };
124
+ export type LintResult = {
125
+ root: string;
126
+ ok: boolean;
127
+ issueCount: number;
128
+ issues: LintIssue[];
129
+ };
130
+ export type WikiSourceType = 'general' | 'codebase' | 'docs' | 'research' | 'notes';
131
+ export type WikiPlanOptions = {
132
+ sourceType?: WikiSourceType;
133
+ scope?: string;
134
+ };
135
+ export type WikiBootstrapOptions = WikiPlanOptions & {
136
+ root?: string;
137
+ overwrite?: boolean;
138
+ };
139
+ export type WikiPlanPage = {
140
+ title: string;
141
+ path: string;
142
+ purpose: string;
143
+ tags: string[];
144
+ };
145
+ export type WikiPlanResult = {
146
+ sourceType: WikiSourceType;
147
+ scope: string;
148
+ workflow: string;
149
+ pages: WikiPlanPage[];
150
+ nextSteps: string[];
151
+ };
152
+ export type WikiBootstrapResult = {
153
+ root: string;
154
+ plan: WikiPlanResult;
155
+ created: string[];
156
+ skipped: string[];
157
+ indexed: IndexResult;
158
+ };
@@ -0,0 +1,4 @@
1
+ import type { WikiBootstrapOptions, WikiBootstrapResult, WikiPlanOptions, WikiPlanResult } from './types.js';
2
+ export declare const wiki_building_workflow_markdown = "# Wiki building workflow\n\nUse this workflow when a user asks to build, bootstrap, generate, or improve a wiki from source material. A codebase is one source type; the same workflow applies to docs, notes, research, transcripts, or any mixed knowledge corpus.\n\n## Steps\n\n1. Clarify the source scope only if it is ambiguous.\n2. Inspect source material before writing pages.\n3. Propose a small page plan with names, purposes, and review flags.\n4. Create an index page that explains the corpus and links to major sections.\n5. Create focused pages for concepts, workflows, decisions, sources, and open questions.\n6. Use [[WikiLinks]] to connect related pages instead of duplicating context.\n7. Use frontmatter for title, aliases, tags, status, and review markers.\n8. Add structured facts for durable claims, decisions, or constraints.\n9. Run index_wiki after page creation.\n10. Run lint_wiki and fix unresolved links or duplicate names.\n11. Run review_wiki and surface pages that still need human review.\n\n## Quality bar\n\n- Prefer many focused pages over one giant dump.\n- Mark uncertain pages with needs-review instead of inventing confidence.\n- Preserve citations or source paths when facts come from external material.\n- Make the wiki navigable for humans and retrievable for agents.\n";
3
+ export declare function plan_wiki(options?: WikiPlanOptions): WikiPlanResult;
4
+ export declare function bootstrap_wiki(options?: WikiBootstrapOptions): WikiBootstrapResult;
@@ -0,0 +1,203 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { index_wiki } from './indexer.js';
4
+ import { serialize_frontmatter } from './markdown.js';
5
+ import { create_page } from './pages.js';
6
+ import { page_file_path, resolve_wiki_root } from './paths.js';
7
+ export const wiki_building_workflow_markdown = `# Wiki building workflow
8
+
9
+ Use this workflow when a user asks to build, bootstrap, generate, or improve a wiki from source material. A codebase is one source type; the same workflow applies to docs, notes, research, transcripts, or any mixed knowledge corpus.
10
+
11
+ ## Steps
12
+
13
+ 1. Clarify the source scope only if it is ambiguous.
14
+ 2. Inspect source material before writing pages.
15
+ 3. Propose a small page plan with names, purposes, and review flags.
16
+ 4. Create an index page that explains the corpus and links to major sections.
17
+ 5. Create focused pages for concepts, workflows, decisions, sources, and open questions.
18
+ 6. Use [[WikiLinks]] to connect related pages instead of duplicating context.
19
+ 7. Use frontmatter for title, aliases, tags, status, and review markers.
20
+ 8. Add structured facts for durable claims, decisions, or constraints.
21
+ 9. Run index_wiki after page creation.
22
+ 10. Run lint_wiki and fix unresolved links or duplicate names.
23
+ 11. Run review_wiki and surface pages that still need human review.
24
+
25
+ ## Quality bar
26
+
27
+ - Prefer many focused pages over one giant dump.
28
+ - Mark uncertain pages with needs-review instead of inventing confidence.
29
+ - Preserve citations or source paths when facts come from external material.
30
+ - Make the wiki navigable for humans and retrievable for agents.
31
+ `;
32
+ const common_pages = [
33
+ {
34
+ title: 'Index',
35
+ path: 'index',
36
+ purpose: 'Entry point that summarizes the wiki and links to major sections.',
37
+ tags: ['index'],
38
+ },
39
+ {
40
+ title: 'Sources',
41
+ path: 'sources/index',
42
+ purpose: 'Inventory of source material used to build the wiki.',
43
+ tags: ['sources'],
44
+ },
45
+ {
46
+ title: 'Concepts',
47
+ path: 'concepts/index',
48
+ purpose: 'Stable concepts, glossary entries, and domain vocabulary.',
49
+ tags: ['concepts'],
50
+ },
51
+ {
52
+ title: 'Workflows',
53
+ path: 'workflows/index',
54
+ purpose: 'Repeatable processes, how-tos, and operational playbooks.',
55
+ tags: ['workflow'],
56
+ },
57
+ {
58
+ title: 'Open questions',
59
+ path: 'questions/open-questions',
60
+ purpose: 'Unknowns, contradictions, and items requiring human review.',
61
+ tags: ['needs-review', 'questions'],
62
+ },
63
+ ];
64
+ const source_pages = {
65
+ general: [],
66
+ codebase: [
67
+ {
68
+ title: 'Architecture overview',
69
+ path: 'architecture/overview',
70
+ purpose: 'System shape, package boundaries, runtime flow, and key tradeoffs.',
71
+ tags: ['architecture', 'needs-review'],
72
+ },
73
+ {
74
+ title: 'Packages and modules',
75
+ path: 'packages/index',
76
+ purpose: 'Map packages, modules, entry points, and ownership boundaries.',
77
+ tags: ['package', 'codebase'],
78
+ },
79
+ ],
80
+ docs: [
81
+ {
82
+ title: 'Documentation map',
83
+ path: 'docs/documentation-map',
84
+ purpose: 'Organize existing documentation by audience, topic, and freshness.',
85
+ tags: ['documentation', 'needs-review'],
86
+ },
87
+ ],
88
+ research: [
89
+ {
90
+ title: 'Research findings',
91
+ path: 'research/findings',
92
+ purpose: 'Summarize sourced claims, evidence, and confidence levels.',
93
+ tags: ['research', 'needs-review'],
94
+ },
95
+ ],
96
+ notes: [
97
+ {
98
+ title: 'Note clusters',
99
+ path: 'notes/clusters',
100
+ purpose: 'Group raw notes into themes and candidate durable pages.',
101
+ tags: ['notes', 'needs-review'],
102
+ },
103
+ ],
104
+ };
105
+ export function plan_wiki(options = {}) {
106
+ const source_type = options.sourceType ?? 'general';
107
+ const scope = options.scope ?? 'user-provided source material';
108
+ const pages = [...common_pages, ...source_pages[source_type]];
109
+ return {
110
+ sourceType: source_type,
111
+ scope,
112
+ workflow: wiki_building_workflow_markdown,
113
+ pages,
114
+ nextSteps: [
115
+ 'Inspect the source material and adjust this plan before writing pages.',
116
+ 'Create or update the index page first so later pages have a navigation target.',
117
+ 'Create focused pages with frontmatter and wikilinks.',
118
+ 'Run index_wiki, lint_wiki, and review_wiki before handing off.',
119
+ ],
120
+ };
121
+ }
122
+ export function bootstrap_wiki(options = {}) {
123
+ const root = resolve_wiki_root(options.root);
124
+ const plan = plan_wiki(options);
125
+ const created = [];
126
+ const skipped = [];
127
+ const detected_sources = detect_source_inventory(root, plan.sourceType);
128
+ for (const page of plan.pages) {
129
+ if (!options.overwrite &&
130
+ existsSync(page_file_path(page.path, root))) {
131
+ skipped.push(page.path);
132
+ continue;
133
+ }
134
+ create_page(page.path, page_template(page, plan, detected_sources), {
135
+ root,
136
+ overwrite: options.overwrite,
137
+ });
138
+ created.push(page.path);
139
+ }
140
+ return {
141
+ root,
142
+ plan,
143
+ created,
144
+ skipped,
145
+ indexed: index_wiki(root),
146
+ };
147
+ }
148
+ function page_template(page, plan, detected_sources) {
149
+ if (page.path === 'index')
150
+ return index_template(page, plan);
151
+ const frontmatter = serialize_frontmatter({
152
+ title: page.title,
153
+ tags: page.tags,
154
+ });
155
+ if (page.path === 'sources/index') {
156
+ return `${frontmatter}# ${page.title}\n\n${page.purpose}\n\n## Source scope\n\n${plan.scope}\n\n## Detected sources\n\n${format_source_inventory(detected_sources)}\n\n## Ingestion notes\n\n- Record source paths, URLs, owners, and freshness before extracting durable facts.\n`;
157
+ }
158
+ if (page.path === 'questions/open-questions') {
159
+ return `${frontmatter}# ${page.title}\n\n${page.purpose}\n\n## Source scope\n\n${plan.scope}\n\n## Questions\n\n- What source material has not been inspected yet?\n- Which claims need citations or owner confirmation?\n- Which pages should move from needs-review to verified?\n`;
160
+ }
161
+ return `${frontmatter}# ${page.title}\n\n${page.purpose}\n\n## Source scope\n\n${plan.scope}\n\n## Evidence\n\n- Add source-backed details here with citations or file paths.\n\n## Candidate facts\n\n- Add durable claims here before promoting them with add_fact.\n`;
162
+ }
163
+ function index_template(page, plan) {
164
+ const frontmatter = serialize_frontmatter({
165
+ title: page.title,
166
+ tags: page.tags,
167
+ });
168
+ const links = plan.pages
169
+ .filter((planned_page) => planned_page.path !== page.path)
170
+ .map((planned_page) => `- [[${planned_page.path}|${planned_page.title}]] — ${planned_page.purpose}`)
171
+ .join('\n');
172
+ return `${frontmatter}# ${page.title}\n\nWiki for ${plan.scope}.\n\n## Start here\n\n${links}\n\n## Workflow\n\nUse [[workflows/index|Workflows]] to capture repeatable processes, [[sources/index|Sources]] to track inspected material, and [[questions/open-questions|Open questions]] for uncertain claims.\n`;
173
+ }
174
+ function detect_source_inventory(root, source_type) {
175
+ const candidates = ['README.md', 'package.json', 'docs'];
176
+ if (source_type === 'codebase')
177
+ candidates.push('packages');
178
+ const sources = [];
179
+ for (const candidate of candidates) {
180
+ const candidate_path = join(root, candidate);
181
+ if (!existsSync(candidate_path))
182
+ continue;
183
+ if (candidate === 'packages') {
184
+ for (const entry of readdirSync(candidate_path, {
185
+ withFileTypes: true,
186
+ })) {
187
+ if (entry.isDirectory()) {
188
+ sources.push(`packages/${entry.name}/package.json`);
189
+ }
190
+ }
191
+ continue;
192
+ }
193
+ sources.push(candidate);
194
+ }
195
+ return sources;
196
+ }
197
+ function format_source_inventory(sources) {
198
+ if (sources.length === 0) {
199
+ return '- No local sources detected automatically; add source paths or URLs here.';
200
+ }
201
+ return sources.map((source) => `- \`${source}\``).join('\n');
202
+ }
203
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wiki0/core",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Core wiki0 Markdown wiki indexing and retrieval primitives",
5
5
  "homepage": "https://github.com/spences10/wiki0/tree/main/packages/core#readme",
6
6
  "license": "MIT",
@@ -27,10 +27,9 @@
27
27
  "access": "public"
28
28
  },
29
29
  "dependencies": {
30
- "better-sqlite3": "^12.5.0"
30
+ "yaml": "^2.9.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/better-sqlite3": "^7.6.13",
34
33
  "@types/node": "^25.8.0",
35
34
  "typescript": "^6.0.3",
36
35
  "vite-plus": "^0.1.22",