@wiki0/cli 0.0.5 → 0.1.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.
- package/README.md +26 -23
- package/dist/actions.d.ts +0 -7
- package/dist/actions.js +0 -26
- package/dist/actions.js.map +1 -1
- package/dist/commands.js +139 -468
- package/dist/commands.js.map +1 -1
- package/dist/ui.d.ts +12 -0
- package/dist/ui.js +25 -0
- package/dist/ui.js.map +1 -0
- package/dist/viewer.d.ts +1 -0
- package/dist/viewer.js +186 -0
- package/dist/viewer.js.map +1 -0
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @wiki0/cli
|
|
2
2
|
|
|
3
|
-
Command line interface for wiki0
|
|
3
|
+
Command line interface for wiki0: search a project's docs and get the
|
|
4
|
+
right section with a `path:start-end` citation.
|
|
4
5
|
|
|
5
6
|
## Install
|
|
6
7
|
|
|
@@ -8,32 +9,34 @@ Command line interface for wiki0 local-first Markdown wiki memory.
|
|
|
8
9
|
pnpm add -g @wiki0/cli
|
|
9
10
|
```
|
|
10
11
|
|
|
11
|
-
The package exposes the `wiki0` binary.
|
|
12
|
-
|
|
13
12
|
## Commands
|
|
14
13
|
|
|
15
14
|
```sh
|
|
16
|
-
wiki0
|
|
17
|
-
wiki0
|
|
18
|
-
wiki0
|
|
19
|
-
wiki0
|
|
20
|
-
wiki0
|
|
21
|
-
wiki0
|
|
22
|
-
wiki0
|
|
23
|
-
wiki0
|
|
24
|
-
wiki0
|
|
25
|
-
wiki0
|
|
26
|
-
wiki0 lint --root ./my-wiki
|
|
27
|
-
wiki0 graph --root ./my-wiki
|
|
28
|
-
wiki0 facts add "Markdown is source of truth" --category decision --confidence high --source decisions/storage.md:12 --root ./my-wiki
|
|
29
|
-
wiki0 facts list --root ./my-wiki
|
|
30
|
-
wiki0 topics --root ./my-wiki
|
|
31
|
-
wiki0 events --root ./my-wiki
|
|
32
|
-
wiki0 review --root ./my-wiki
|
|
15
|
+
wiki0 index # index the project docs
|
|
16
|
+
wiki0 status # index path and staleness
|
|
17
|
+
wiki0 search "query" [--limit 5] # one cited section per document
|
|
18
|
+
wiki0 show <target> [--tokens 2000] [--neighbours 1]
|
|
19
|
+
wiki0 context "query" # top sections as cited Markdown
|
|
20
|
+
wiki0 lint # broken links and anchors
|
|
21
|
+
wiki0 graph # documents and links
|
|
22
|
+
wiki0 documents # outline and link counts per document
|
|
23
|
+
wiki0 backlinks <path-or-title>
|
|
24
|
+
wiki0 ui [--no-open] [--stop] # browse the docs in a local web app
|
|
33
25
|
```
|
|
34
26
|
|
|
27
|
+
`show` targets: `path:12`, `path:12-40`, `path#heading`, `path` or a
|
|
28
|
+
document title. When the text is longer than the token budget, the
|
|
29
|
+
output ends with the range to read next.
|
|
30
|
+
|
|
31
|
+
To show a user this project's docs, an agent runs `npx @wiki0/cli ui`:
|
|
32
|
+
it prints the URL and returns, and a second run reuses the open
|
|
33
|
+
server. Flags: [`@wiki0/ui`](../ui/README.md).
|
|
34
|
+
|
|
35
|
+
Every command takes `--root`; by default the project root is the
|
|
36
|
+
nearest folder with `.git` or `wiki0.toml`. `lint` exits with code 1
|
|
37
|
+
when it finds errors.
|
|
38
|
+
|
|
35
39
|
## Output
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
`--json` for structured output.
|
|
41
|
+
`show` and `context` print Markdown (`--json` for structured output).
|
|
42
|
+
`ui` prints the URL. The other commands print JSON.
|
package/dist/actions.d.ts
CHANGED
|
@@ -1,8 +1 @@
|
|
|
1
|
-
import { type WikiFrontmatter } from '@wiki0/core';
|
|
2
|
-
export declare function init_workspace(root: string): string;
|
|
3
|
-
export declare function read_markdown_input(options: {
|
|
4
|
-
file?: string;
|
|
5
|
-
body?: string;
|
|
6
|
-
}): string;
|
|
7
|
-
export declare function parse_frontmatter_json(data: string): WikiFrontmatter;
|
|
8
1
|
export declare function print_json(value: unknown): void;
|
package/dist/actions.js
CHANGED
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
import { schema_sql } from '@wiki0/core';
|
|
2
|
-
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
export function init_workspace(root) {
|
|
5
|
-
for (const dir of [
|
|
6
|
-
'wiki/inbox',
|
|
7
|
-
'wiki/decisions',
|
|
8
|
-
'wiki/people',
|
|
9
|
-
'wiki/projects',
|
|
10
|
-
'wiki/topics',
|
|
11
|
-
'.wiki0',
|
|
12
|
-
]) {
|
|
13
|
-
mkdirSync(join(root, dir), { recursive: true });
|
|
14
|
-
}
|
|
15
|
-
writeFileSync(join(root, 'wiki/index.md'), '# Wiki0\n\nStart here. Link pages with `[[topics/example]]`.\n', { flag: 'wx' });
|
|
16
|
-
writeFileSync(join(root, '.wiki0/schema.sql'), schema_sql);
|
|
17
|
-
return `Created wiki0 workspace at ${root}`;
|
|
18
|
-
}
|
|
19
|
-
export function read_markdown_input(options) {
|
|
20
|
-
return options.file
|
|
21
|
-
? readFileSync(options.file, 'utf-8')
|
|
22
|
-
: (options.body ?? '');
|
|
23
|
-
}
|
|
24
|
-
export function parse_frontmatter_json(data) {
|
|
25
|
-
return JSON.parse(data);
|
|
26
|
-
}
|
|
27
1
|
export function print_json(value) {
|
|
28
2
|
console.log(JSON.stringify(value, null, 2));
|
|
29
3
|
}
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/commands.js
CHANGED
|
@@ -1,544 +1,215 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { backlinks_for_page, get_wiki_context, graph_wiki, index_status, index_wiki, lint_wiki, list_documents, search, show, } from '@wiki0/core';
|
|
2
2
|
import { defineCommand } from 'citty';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
return value
|
|
21
|
-
.split(',')
|
|
22
|
-
.map((source) => source.trim())
|
|
23
|
-
.filter(Boolean);
|
|
24
|
-
}
|
|
25
|
-
function parse_optional_sources(value) {
|
|
26
|
-
return parse_sources(value);
|
|
27
|
-
}
|
|
28
|
-
function resolve_cli_source(root, source) {
|
|
29
|
-
return isAbsolute(source) ? source : resolve(root, source);
|
|
30
|
-
}
|
|
31
|
-
function parse_fact_confidence(value) {
|
|
32
|
-
const confidence = typeof value === 'string' ? value : 'unknown';
|
|
33
|
-
if (confidence === 'unknown' ||
|
|
34
|
-
confidence === 'low' ||
|
|
35
|
-
confidence === 'medium' ||
|
|
36
|
-
confidence === 'high' ||
|
|
37
|
-
confidence === 'verified') {
|
|
38
|
-
return confidence;
|
|
39
|
-
}
|
|
40
|
-
throw new Error(`Invalid fact confidence: ${confidence}`);
|
|
41
|
-
}
|
|
3
|
+
import { print_json } from './actions.js';
|
|
4
|
+
import { run_ui } from './ui.js';
|
|
5
|
+
const root_arg = {
|
|
6
|
+
root: {
|
|
7
|
+
type: 'string',
|
|
8
|
+
description: 'Project root (default: nearest folder with .git)',
|
|
9
|
+
default: '.',
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
const json_arg = {
|
|
13
|
+
json: {
|
|
14
|
+
type: 'boolean',
|
|
15
|
+
description: 'Output JSON instead of Markdown',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
42
18
|
export const main = defineCommand({
|
|
43
19
|
meta: {
|
|
44
20
|
name: 'wiki0',
|
|
45
|
-
description: '
|
|
21
|
+
description: 'Search a project’s docs and get the right section with a path:line citation',
|
|
46
22
|
},
|
|
47
23
|
subCommands: {
|
|
48
|
-
|
|
49
|
-
meta: { description: '
|
|
50
|
-
args: {
|
|
51
|
-
path: {
|
|
52
|
-
type: 'positional',
|
|
53
|
-
description: 'Wiki root path',
|
|
54
|
-
default: '.',
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
run({ args }) {
|
|
58
|
-
console.log(init_workspace(String(args.path ?? '.')));
|
|
59
|
-
},
|
|
60
|
-
}),
|
|
61
|
-
page: defineCommand({
|
|
62
|
-
meta: {
|
|
63
|
-
description: 'Create, read, append, and tag wiki pages',
|
|
64
|
-
},
|
|
65
|
-
subCommands: {
|
|
66
|
-
create: defineCommand({
|
|
67
|
-
meta: { description: 'Create a wiki page' },
|
|
68
|
-
args: {
|
|
69
|
-
title: {
|
|
70
|
-
type: 'positional',
|
|
71
|
-
required: true,
|
|
72
|
-
description: 'Page title or path',
|
|
73
|
-
},
|
|
74
|
-
body: { type: 'string', description: 'Markdown body' },
|
|
75
|
-
file: {
|
|
76
|
-
type: 'string',
|
|
77
|
-
description: 'Read Markdown body from a file',
|
|
78
|
-
},
|
|
79
|
-
root: {
|
|
80
|
-
type: 'string',
|
|
81
|
-
description: 'Wiki root path',
|
|
82
|
-
default: '.',
|
|
83
|
-
},
|
|
84
|
-
overwrite: {
|
|
85
|
-
type: 'boolean',
|
|
86
|
-
description: 'Overwrite an existing page',
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
run({ args }) {
|
|
90
|
-
const page = create_page(String(args.title), read_markdown_input(args), {
|
|
91
|
-
root: String(args.root ?? '.'),
|
|
92
|
-
overwrite: Boolean(args.overwrite),
|
|
93
|
-
});
|
|
94
|
-
print_json(page);
|
|
95
|
-
},
|
|
96
|
-
}),
|
|
97
|
-
read: defineCommand({
|
|
98
|
-
meta: { description: 'Read a wiki page' },
|
|
99
|
-
args: {
|
|
100
|
-
title: {
|
|
101
|
-
type: 'positional',
|
|
102
|
-
required: true,
|
|
103
|
-
description: 'Page title or path',
|
|
104
|
-
},
|
|
105
|
-
root: {
|
|
106
|
-
type: 'string',
|
|
107
|
-
description: 'Wiki root path',
|
|
108
|
-
default: '.',
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
run({ args }) {
|
|
112
|
-
print_json(read_page(String(args.title), String(args.root ?? '.')));
|
|
113
|
-
},
|
|
114
|
-
}),
|
|
115
|
-
frontmatter: defineCommand({
|
|
116
|
-
meta: {
|
|
117
|
-
description: 'Set YAML frontmatter on a wiki page',
|
|
118
|
-
},
|
|
119
|
-
args: {
|
|
120
|
-
title: {
|
|
121
|
-
type: 'positional',
|
|
122
|
-
required: true,
|
|
123
|
-
description: 'Page title or path',
|
|
124
|
-
},
|
|
125
|
-
data: {
|
|
126
|
-
type: 'string',
|
|
127
|
-
required: true,
|
|
128
|
-
description: 'Frontmatter as a JSON object',
|
|
129
|
-
},
|
|
130
|
-
root: {
|
|
131
|
-
type: 'string',
|
|
132
|
-
description: 'Wiki root path',
|
|
133
|
-
default: '.',
|
|
134
|
-
},
|
|
135
|
-
merge: {
|
|
136
|
-
type: 'boolean',
|
|
137
|
-
description: 'Merge with existing frontmatter',
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
run({ args }) {
|
|
141
|
-
const page = set_page_frontmatter(String(args.title), parse_frontmatter_json(args.data), {
|
|
142
|
-
root: String(args.root ?? '.'),
|
|
143
|
-
merge: Boolean(args.merge),
|
|
144
|
-
});
|
|
145
|
-
print_json(page);
|
|
146
|
-
},
|
|
147
|
-
}),
|
|
148
|
-
append: defineCommand({
|
|
149
|
-
meta: { description: 'Append Markdown to a wiki page' },
|
|
150
|
-
args: {
|
|
151
|
-
title: {
|
|
152
|
-
type: 'positional',
|
|
153
|
-
required: true,
|
|
154
|
-
description: 'Page title or path',
|
|
155
|
-
},
|
|
156
|
-
body: {
|
|
157
|
-
type: 'string',
|
|
158
|
-
description: 'Markdown body to append',
|
|
159
|
-
},
|
|
160
|
-
file: {
|
|
161
|
-
type: 'string',
|
|
162
|
-
description: 'Read Markdown body from a file',
|
|
163
|
-
},
|
|
164
|
-
root: {
|
|
165
|
-
type: 'string',
|
|
166
|
-
description: 'Wiki root path',
|
|
167
|
-
default: '.',
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
run({ args }) {
|
|
171
|
-
const page = append_page(String(args.title), read_markdown_input(args), String(args.root ?? '.'));
|
|
172
|
-
print_json(page);
|
|
173
|
-
},
|
|
174
|
-
}),
|
|
175
|
-
},
|
|
176
|
-
}),
|
|
177
|
-
extract: defineCommand({
|
|
178
|
-
meta: {
|
|
179
|
-
description: 'Extract normalized text and metadata from a source document',
|
|
180
|
-
},
|
|
181
|
-
args: {
|
|
182
|
-
source: {
|
|
183
|
-
type: 'positional',
|
|
184
|
-
required: true,
|
|
185
|
-
description: 'Source document path',
|
|
186
|
-
},
|
|
187
|
-
root: {
|
|
188
|
-
type: 'string',
|
|
189
|
-
description: 'Wiki root path for relative sources',
|
|
190
|
-
default: '.',
|
|
191
|
-
},
|
|
192
|
-
},
|
|
24
|
+
index: defineCommand({
|
|
25
|
+
meta: { description: 'Index the project docs' },
|
|
26
|
+
args: { ...root_arg },
|
|
193
27
|
async run({ args }) {
|
|
194
|
-
print_json(await
|
|
28
|
+
print_json(await index_wiki(String(args.root)));
|
|
195
29
|
},
|
|
196
30
|
}),
|
|
197
|
-
|
|
31
|
+
status: defineCommand({
|
|
198
32
|
meta: {
|
|
199
|
-
description: '
|
|
33
|
+
description: 'Show where the index is and whether it is stale',
|
|
200
34
|
},
|
|
201
|
-
args: {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
required: true,
|
|
205
|
-
description: 'Comma-separated source paths or directories',
|
|
206
|
-
},
|
|
207
|
-
root: {
|
|
208
|
-
type: 'string',
|
|
209
|
-
description: 'Wiki root path',
|
|
210
|
-
default: '.',
|
|
211
|
-
},
|
|
212
|
-
overwrite: {
|
|
213
|
-
type: 'boolean',
|
|
214
|
-
description: 'Overwrite existing synced source pages',
|
|
215
|
-
},
|
|
216
|
-
include: {
|
|
217
|
-
type: 'string',
|
|
218
|
-
description: 'Comma-separated glob patterns to include during recursive sync',
|
|
219
|
-
},
|
|
220
|
-
ignore: {
|
|
221
|
-
type: 'string',
|
|
222
|
-
description: 'Comma-separated glob patterns to ignore during recursive sync',
|
|
223
|
-
},
|
|
224
|
-
noFacts: {
|
|
225
|
-
type: 'boolean',
|
|
226
|
-
description: 'Skip deriving SQLite facts from source text',
|
|
227
|
-
},
|
|
228
|
-
proposePages: {
|
|
229
|
-
type: 'boolean',
|
|
230
|
-
description: 'Generate proposed concept/workflow pages from source text',
|
|
231
|
-
},
|
|
232
|
-
noIndex: {
|
|
233
|
-
type: 'boolean',
|
|
234
|
-
description: 'Skip rebuilding the SQLite index after sync',
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
async run({ args }) {
|
|
238
|
-
print_json(await sync_documents({
|
|
239
|
-
root: String(args.root ?? '.'),
|
|
240
|
-
sources: parse_sources(args.sources) ?? [],
|
|
241
|
-
overwrite: Boolean(args.overwrite),
|
|
242
|
-
index: !args.noIndex,
|
|
243
|
-
include: parse_optional_sources(args.include),
|
|
244
|
-
ignore: parse_optional_sources(args.ignore),
|
|
245
|
-
derive_facts: !args.noFacts,
|
|
246
|
-
propose_pages: Boolean(args.proposePages),
|
|
247
|
-
}));
|
|
35
|
+
args: { ...root_arg },
|
|
36
|
+
run({ args }) {
|
|
37
|
+
print_json(index_status(String(args.root)));
|
|
248
38
|
},
|
|
249
39
|
}),
|
|
250
|
-
|
|
40
|
+
search: defineCommand({
|
|
251
41
|
meta: {
|
|
252
|
-
description: '
|
|
42
|
+
description: 'Search the docs; one cited section per document, most authoritative first',
|
|
253
43
|
},
|
|
254
44
|
args: {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
default: 'general',
|
|
259
|
-
},
|
|
260
|
-
scope: {
|
|
45
|
+
query: { type: 'positional', required: true },
|
|
46
|
+
...root_arg,
|
|
47
|
+
limit: {
|
|
261
48
|
type: 'string',
|
|
262
|
-
description: '
|
|
49
|
+
description: 'Maximum number of documents',
|
|
50
|
+
default: '5',
|
|
263
51
|
},
|
|
264
|
-
|
|
265
|
-
type: '
|
|
266
|
-
description: '
|
|
52
|
+
includeSuperseded: {
|
|
53
|
+
type: 'boolean',
|
|
54
|
+
description: 'Keep superseded documents in results',
|
|
55
|
+
default: true,
|
|
267
56
|
},
|
|
268
57
|
},
|
|
269
58
|
run({ args }) {
|
|
270
|
-
print_json(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
sources: parse_sources(args.sources),
|
|
59
|
+
print_json(search(String(args.query), String(args.root), {
|
|
60
|
+
limit: Number(args.limit),
|
|
61
|
+
include_superseded: args.includeSuperseded !== false,
|
|
274
62
|
}));
|
|
275
63
|
},
|
|
276
64
|
}),
|
|
277
|
-
|
|
278
|
-
meta: {
|
|
279
|
-
|
|
280
|
-
add: defineCommand({
|
|
281
|
-
meta: { description: 'Add a structured wiki fact' },
|
|
282
|
-
args: {
|
|
283
|
-
summary: { type: 'positional', required: true },
|
|
284
|
-
category: {
|
|
285
|
-
type: 'string',
|
|
286
|
-
description: 'Fact category',
|
|
287
|
-
default: 'note',
|
|
288
|
-
},
|
|
289
|
-
body: { type: 'string', description: 'Fact details' },
|
|
290
|
-
confidence: {
|
|
291
|
-
type: 'string',
|
|
292
|
-
description: 'unknown, low, medium, high, or verified',
|
|
293
|
-
default: 'unknown',
|
|
294
|
-
},
|
|
295
|
-
page: {
|
|
296
|
-
type: 'string',
|
|
297
|
-
description: 'Related page title or path',
|
|
298
|
-
},
|
|
299
|
-
source: {
|
|
300
|
-
type: 'string',
|
|
301
|
-
description: 'Source page or page:line target for provenance',
|
|
302
|
-
},
|
|
303
|
-
sourceQuote: {
|
|
304
|
-
type: 'string',
|
|
305
|
-
description: 'Exact source quote for provenance',
|
|
306
|
-
},
|
|
307
|
-
root: {
|
|
308
|
-
type: 'string',
|
|
309
|
-
description: 'Wiki root path',
|
|
310
|
-
default: '.',
|
|
311
|
-
},
|
|
312
|
-
},
|
|
313
|
-
run({ args }) {
|
|
314
|
-
print_json(add_fact({
|
|
315
|
-
root: String(args.root ?? '.'),
|
|
316
|
-
page: args.page ? String(args.page) : undefined,
|
|
317
|
-
category: String(args.category ?? 'note'),
|
|
318
|
-
summary: String(args.summary),
|
|
319
|
-
body: args.body ? String(args.body) : undefined,
|
|
320
|
-
confidence: parse_fact_confidence(args.confidence),
|
|
321
|
-
source: args.source ? String(args.source) : undefined,
|
|
322
|
-
source_quote: args.sourceQuote
|
|
323
|
-
? String(args.sourceQuote)
|
|
324
|
-
: undefined,
|
|
325
|
-
}));
|
|
326
|
-
},
|
|
327
|
-
}),
|
|
328
|
-
list: defineCommand({
|
|
329
|
-
meta: { description: 'List structured wiki facts' },
|
|
330
|
-
args: {
|
|
331
|
-
category: {
|
|
332
|
-
type: 'string',
|
|
333
|
-
description: 'Filter by category',
|
|
334
|
-
},
|
|
335
|
-
root: {
|
|
336
|
-
type: 'string',
|
|
337
|
-
description: 'Wiki root path',
|
|
338
|
-
default: '.',
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
run({ args }) {
|
|
342
|
-
print_json(list_facts(String(args.root ?? '.'), args.category ? String(args.category) : undefined));
|
|
343
|
-
},
|
|
344
|
-
}),
|
|
65
|
+
show: defineCommand({
|
|
66
|
+
meta: {
|
|
67
|
+
description: 'Show a cited section: path:line, path:start-end, path#heading, path or title',
|
|
345
68
|
},
|
|
346
|
-
}),
|
|
347
|
-
events: defineCommand({
|
|
348
|
-
meta: { description: 'List recent wiki operation log events' },
|
|
349
69
|
args: {
|
|
350
|
-
|
|
70
|
+
target: { type: 'positional', required: true },
|
|
71
|
+
...root_arg,
|
|
72
|
+
tokens: {
|
|
351
73
|
type: 'string',
|
|
352
|
-
description: '
|
|
353
|
-
default: '
|
|
74
|
+
description: 'Token budget for the returned text',
|
|
75
|
+
default: '2000',
|
|
354
76
|
},
|
|
355
|
-
|
|
77
|
+
neighbours: {
|
|
356
78
|
type: 'string',
|
|
357
|
-
description: '
|
|
358
|
-
default: '
|
|
79
|
+
description: 'Also include this many sections either side',
|
|
80
|
+
default: '0',
|
|
359
81
|
},
|
|
82
|
+
...json_arg,
|
|
360
83
|
},
|
|
361
84
|
run({ args }) {
|
|
362
|
-
|
|
85
|
+
const result = show(String(args.target), String(args.root), {
|
|
86
|
+
token_budget: Number(args.tokens),
|
|
87
|
+
neighbours: Number(args.neighbours),
|
|
88
|
+
});
|
|
89
|
+
if (args.json) {
|
|
90
|
+
print_json(result);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (!result) {
|
|
94
|
+
console.log('No indexed section found.');
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
console.log(`Source: ${result.citation}`);
|
|
99
|
+
for (const warning of result.warnings) {
|
|
100
|
+
console.log(`Warning: ${warning}`);
|
|
101
|
+
}
|
|
102
|
+
if (result.superseded_by) {
|
|
103
|
+
console.log(`Superseded by: ${result.superseded_by}`);
|
|
104
|
+
}
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log(result.markdown);
|
|
107
|
+
if (result.next) {
|
|
108
|
+
console.log(`\nMore: wiki0 show ${result.next}`);
|
|
109
|
+
}
|
|
363
110
|
},
|
|
364
111
|
}),
|
|
365
|
-
|
|
112
|
+
context: defineCommand({
|
|
366
113
|
meta: {
|
|
367
|
-
description: '
|
|
114
|
+
description: 'Search and return the top sections as cited Markdown',
|
|
368
115
|
},
|
|
369
116
|
args: {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
description: 'Wiki root path',
|
|
373
|
-
default: '.',
|
|
374
|
-
},
|
|
117
|
+
query: { type: 'positional', required: true },
|
|
118
|
+
...root_arg,
|
|
375
119
|
limit: {
|
|
376
120
|
type: 'string',
|
|
377
|
-
description: 'Maximum number of
|
|
378
|
-
default: '
|
|
121
|
+
description: 'Maximum number of sections',
|
|
122
|
+
default: '3',
|
|
379
123
|
},
|
|
124
|
+
...json_arg,
|
|
380
125
|
},
|
|
381
126
|
run({ args }) {
|
|
382
|
-
|
|
127
|
+
const result = get_wiki_context(String(args.query), String(args.root), Number(args.limit));
|
|
128
|
+
console.log(args.json
|
|
129
|
+
? JSON.stringify(result, null, 2)
|
|
130
|
+
: result.markdown);
|
|
383
131
|
},
|
|
384
132
|
}),
|
|
385
|
-
|
|
386
|
-
meta: {
|
|
387
|
-
|
|
388
|
-
root: {
|
|
389
|
-
type: 'string',
|
|
390
|
-
description: 'Wiki root path',
|
|
391
|
-
default: '.',
|
|
392
|
-
},
|
|
133
|
+
lint: defineCommand({
|
|
134
|
+
meta: {
|
|
135
|
+
description: 'Report broken links, missing headings and other link problems',
|
|
393
136
|
},
|
|
137
|
+
args: { ...root_arg },
|
|
394
138
|
run({ args }) {
|
|
395
|
-
|
|
139
|
+
const result = lint_wiki(String(args.root));
|
|
140
|
+
print_json(result);
|
|
141
|
+
if (!result.ok)
|
|
142
|
+
process.exitCode = 1;
|
|
396
143
|
},
|
|
397
144
|
}),
|
|
398
|
-
|
|
399
|
-
meta: { description: '
|
|
400
|
-
args: {
|
|
401
|
-
root: {
|
|
402
|
-
type: 'string',
|
|
403
|
-
description: 'Wiki root path',
|
|
404
|
-
default: '.',
|
|
405
|
-
},
|
|
406
|
-
},
|
|
145
|
+
graph: defineCommand({
|
|
146
|
+
meta: { description: 'Output the document link graph' },
|
|
147
|
+
args: { ...root_arg },
|
|
407
148
|
run({ args }) {
|
|
408
|
-
print_json(
|
|
149
|
+
print_json(graph_wiki(String(args.root)));
|
|
409
150
|
},
|
|
410
151
|
}),
|
|
411
|
-
|
|
412
|
-
meta: {
|
|
413
|
-
|
|
414
|
-
query: { type: 'positional', required: true },
|
|
415
|
-
root: {
|
|
416
|
-
type: 'string',
|
|
417
|
-
description: 'Wiki root path',
|
|
418
|
-
default: '.',
|
|
419
|
-
},
|
|
420
|
-
limit: {
|
|
421
|
-
type: 'string',
|
|
422
|
-
description: 'Maximum number of results',
|
|
423
|
-
default: '10',
|
|
424
|
-
},
|
|
152
|
+
documents: defineCommand({
|
|
153
|
+
meta: {
|
|
154
|
+
description: 'List indexed documents with outlines and link counts',
|
|
425
155
|
},
|
|
156
|
+
args: { ...root_arg },
|
|
426
157
|
run({ args }) {
|
|
427
|
-
print_json(
|
|
158
|
+
print_json(list_documents(String(args.root)));
|
|
428
159
|
},
|
|
429
160
|
}),
|
|
430
|
-
|
|
431
|
-
meta: {
|
|
432
|
-
description: 'Show the indexed wiki chunk for a page or page:line target',
|
|
433
|
-
},
|
|
161
|
+
backlinks: defineCommand({
|
|
162
|
+
meta: { description: 'List documents that link to a document' },
|
|
434
163
|
args: {
|
|
435
|
-
target: {
|
|
436
|
-
|
|
437
|
-
required: true,
|
|
438
|
-
description: 'Page path/title, optionally with :line',
|
|
439
|
-
},
|
|
440
|
-
root: {
|
|
441
|
-
type: 'string',
|
|
442
|
-
description: 'Wiki root path',
|
|
443
|
-
default: '.',
|
|
444
|
-
},
|
|
445
|
-
json: {
|
|
446
|
-
type: 'boolean',
|
|
447
|
-
description: 'Output structured JSON instead of Markdown',
|
|
448
|
-
},
|
|
164
|
+
target: { type: 'positional', required: true },
|
|
165
|
+
...root_arg,
|
|
449
166
|
},
|
|
450
167
|
run({ args }) {
|
|
451
|
-
|
|
452
|
-
if (args.json)
|
|
453
|
-
print_json(result);
|
|
454
|
-
else
|
|
455
|
-
console.log(result?.body ?? 'No indexed chunk found.');
|
|
168
|
+
print_json(backlinks_for_page(String(args.target), String(args.root)));
|
|
456
169
|
},
|
|
457
170
|
}),
|
|
458
|
-
|
|
171
|
+
ui: defineCommand({
|
|
459
172
|
meta: {
|
|
460
|
-
description: '
|
|
173
|
+
description: 'Open the project docs in the browser; prints the URL and reuses a running server',
|
|
461
174
|
},
|
|
462
175
|
args: {
|
|
463
|
-
|
|
464
|
-
|
|
176
|
+
...root_arg,
|
|
177
|
+
host: {
|
|
465
178
|
type: 'string',
|
|
466
|
-
description: '
|
|
467
|
-
default: '.',
|
|
179
|
+
description: 'Host to bind (default: 127.0.0.1)',
|
|
468
180
|
},
|
|
469
|
-
|
|
181
|
+
port: {
|
|
470
182
|
type: 'string',
|
|
471
|
-
description: '
|
|
472
|
-
default: '5',
|
|
183
|
+
description: 'Port (default: 4100 or WIKI0_UI_PORT; a busy port falls back)',
|
|
473
184
|
},
|
|
474
|
-
|
|
185
|
+
open: {
|
|
475
186
|
type: 'boolean',
|
|
476
|
-
description: '
|
|
477
|
-
|
|
478
|
-
},
|
|
479
|
-
run({ args }) {
|
|
480
|
-
const result = get_wiki_context(String(args.query), String(args.root ?? '.'), Number(args.limit ?? 5));
|
|
481
|
-
console.log(args.json
|
|
482
|
-
? JSON.stringify(result, null, 2)
|
|
483
|
-
: result.markdown);
|
|
484
|
-
},
|
|
485
|
-
}),
|
|
486
|
-
graph: defineCommand({
|
|
487
|
-
meta: { description: 'Output indexed wiki graph data' },
|
|
488
|
-
args: {
|
|
489
|
-
root: {
|
|
490
|
-
type: 'string',
|
|
491
|
-
description: 'Wiki root path',
|
|
492
|
-
default: '.',
|
|
187
|
+
description: 'Open a browser (--no-open to only print the URL)',
|
|
188
|
+
default: true,
|
|
493
189
|
},
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
},
|
|
498
|
-
}),
|
|
499
|
-
lint: defineCommand({
|
|
500
|
-
meta: { description: 'Lint wiki links and duplicate names' },
|
|
501
|
-
args: {
|
|
502
|
-
root: {
|
|
503
|
-
type: 'string',
|
|
504
|
-
description: 'Wiki root path',
|
|
505
|
-
default: '.',
|
|
190
|
+
detach: {
|
|
191
|
+
type: 'boolean',
|
|
192
|
+
description: 'Run in the background and return (default when not in a terminal)',
|
|
506
193
|
},
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
print_json(result);
|
|
511
|
-
if (!result.ok)
|
|
512
|
-
process.exitCode = 1;
|
|
513
|
-
},
|
|
514
|
-
}),
|
|
515
|
-
backlinks: defineCommand({
|
|
516
|
-
meta: { description: 'List resolved backlinks for a page' },
|
|
517
|
-
args: {
|
|
518
|
-
title: { type: 'positional', required: true },
|
|
519
|
-
root: {
|
|
520
|
-
type: 'string',
|
|
521
|
-
description: 'Wiki root path',
|
|
522
|
-
default: '.',
|
|
194
|
+
foreground: {
|
|
195
|
+
type: 'boolean',
|
|
196
|
+
description: 'Stay in the foreground until Ctrl-C',
|
|
523
197
|
},
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
},
|
|
528
|
-
}),
|
|
529
|
-
review: defineCommand({
|
|
530
|
-
meta: {
|
|
531
|
-
description: 'List pages marked for review',
|
|
532
|
-
},
|
|
533
|
-
args: {
|
|
534
|
-
root: {
|
|
535
|
-
type: 'string',
|
|
536
|
-
description: 'Wiki root path',
|
|
537
|
-
default: '.',
|
|
198
|
+
stop: {
|
|
199
|
+
type: 'boolean',
|
|
200
|
+
description: 'Stop the server for this project',
|
|
538
201
|
},
|
|
539
202
|
},
|
|
540
|
-
run({ args }) {
|
|
541
|
-
|
|
203
|
+
async run({ args }) {
|
|
204
|
+
await run_ui({
|
|
205
|
+
root: String(args.root),
|
|
206
|
+
host: args.host,
|
|
207
|
+
port: args.port,
|
|
208
|
+
open: args.open,
|
|
209
|
+
detach: args.detach,
|
|
210
|
+
foreground: args.foreground,
|
|
211
|
+
stop: args.stop,
|
|
212
|
+
});
|
|
542
213
|
},
|
|
543
214
|
}),
|
|
544
215
|
},
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LaunchOptions } from '@wiki0/ui';
|
|
2
|
+
export type UiArgs = {
|
|
3
|
+
root: string;
|
|
4
|
+
host?: string;
|
|
5
|
+
port?: string;
|
|
6
|
+
open?: boolean;
|
|
7
|
+
detach?: boolean;
|
|
8
|
+
foreground?: boolean;
|
|
9
|
+
stop?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function ui_launch_options(args: UiArgs, parse_port: (value: string | undefined) => number | undefined, env?: NodeJS.ProcessEnv): LaunchOptions;
|
|
12
|
+
export declare function run_ui(args: UiArgs): Promise<void>;
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Maps `wiki0 ui` flags to launch options. Detach is left unset
|
|
2
|
+
// unless asked for, so @wiki0/ui can detach when stdout is not a
|
|
3
|
+
// terminal, as when an agent runs the command.
|
|
4
|
+
export function ui_launch_options(args, parse_port, env = process.env) {
|
|
5
|
+
return {
|
|
6
|
+
root: args.root,
|
|
7
|
+
host: args.host || undefined,
|
|
8
|
+
port: parse_port(args.port || env.WIKI0_UI_PORT),
|
|
9
|
+
open: args.open !== false,
|
|
10
|
+
detach: args.foreground ? false : args.detach ? true : undefined,
|
|
11
|
+
stop: args.stop === true,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export async function run_ui(args) {
|
|
15
|
+
// Loaded on use, so other commands don't pay for the server.
|
|
16
|
+
const { launch_ui, parse_port } = await import('@wiki0/ui');
|
|
17
|
+
try {
|
|
18
|
+
await launch_ui(ui_launch_options(args, parse_port));
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error(error instanceof Error ? error.message : error);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAYA,gEAAgE;AAChE,iEAAiE;AACjE,+CAA+C;AAC/C,MAAM,UAAU,iBAAiB,CAChC,IAAY,EACZ,UAA6D,EAC7D,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,OAAO;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;QAC5B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC;QAChD,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;QACzB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAChE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;KACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY;IACxC,6DAA6D;IAC7D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC;QACJ,MAAM,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
|
package/dist/viewer.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function serve_viewer(root: string, host: string, port: number, open: boolean): void;
|
package/dist/viewer.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { backlinks_for_page, graph_wiki, index_status, index_wiki, read_page, review_wiki, search_wiki, } from '@wiki0/core';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { createServer } from 'node:http';
|
|
4
|
+
function send_json(response, status_code, data) {
|
|
5
|
+
response.writeHead(status_code, {
|
|
6
|
+
'content-type': 'application/json; charset=utf-8',
|
|
7
|
+
'cache-control': 'no-store',
|
|
8
|
+
});
|
|
9
|
+
response.end(JSON.stringify(data));
|
|
10
|
+
}
|
|
11
|
+
function send_html(response, html) {
|
|
12
|
+
response.writeHead(200, {
|
|
13
|
+
'content-type': 'text/html; charset=utf-8',
|
|
14
|
+
'cache-control': 'no-store',
|
|
15
|
+
});
|
|
16
|
+
response.end(html);
|
|
17
|
+
}
|
|
18
|
+
function open_url(url) {
|
|
19
|
+
const command = process.platform === 'darwin'
|
|
20
|
+
? 'open'
|
|
21
|
+
: process.platform === 'win32'
|
|
22
|
+
? 'cmd'
|
|
23
|
+
: 'xdg-open';
|
|
24
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', url] : [url];
|
|
25
|
+
const child = spawn(command, args, { detached: true, stdio: 'ignore' });
|
|
26
|
+
child.unref();
|
|
27
|
+
}
|
|
28
|
+
function read_view_state(root, url) {
|
|
29
|
+
const status = index_status(root);
|
|
30
|
+
if (status.stale)
|
|
31
|
+
index_wiki(root);
|
|
32
|
+
const graph = graph_wiki(root);
|
|
33
|
+
const review = review_wiki(root);
|
|
34
|
+
const query = url.searchParams.get('q')?.trim() ?? '';
|
|
35
|
+
const search = query ? search_wiki(query, root, 8) : [];
|
|
36
|
+
const selected_path = url.searchParams.get('page') ?? graph.nodes[0]?.path ?? null;
|
|
37
|
+
let selected_page = null;
|
|
38
|
+
let backlinks = [];
|
|
39
|
+
if (selected_path) {
|
|
40
|
+
try {
|
|
41
|
+
const selected_title = selected_path.replace(/\.md$/u, '');
|
|
42
|
+
selected_page = read_page(selected_title, root);
|
|
43
|
+
backlinks = backlinks_for_page(selected_title, root);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
selected_page = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
root,
|
|
51
|
+
status: status.stale ? index_status(root) : status,
|
|
52
|
+
graph,
|
|
53
|
+
review,
|
|
54
|
+
query,
|
|
55
|
+
search,
|
|
56
|
+
selected_path,
|
|
57
|
+
selected_page,
|
|
58
|
+
backlinks,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function viewer_html() {
|
|
62
|
+
return `<!doctype html>
|
|
63
|
+
<html lang="en">
|
|
64
|
+
<head>
|
|
65
|
+
<meta charset="utf-8" />
|
|
66
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
67
|
+
<title>wiki0 viewer</title>
|
|
68
|
+
<style>
|
|
69
|
+
:root{color-scheme:light dark;font-family:Inter,ui-sans-serif,system-ui,sans-serif;background:#0f172a;color:#e2e8f0}body{margin:0}main{padding:24px;display:grid;gap:16px}header{display:flex;justify-content:space-between;gap:16px;align-items:end;flex-wrap:wrap}.muted{color:#94a3b8}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.card{background:#111827;border:1px solid #334155;border-radius:14px;padding:16px;box-shadow:0 12px 40px #02061740}.value{font-size:28px;font-weight:700}input,button{border-radius:10px;border:1px solid #475569;background:#020617;color:#e2e8f0;padding:10px 12px}button{cursor:pointer}button:hover{border-color:#93c5fd}.layout{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px}.graph{min-height:520px;overflow:hidden}.side{display:grid;gap:16px;align-content:start}.page-list{display:grid;gap:6px;max-height:220px;overflow:auto}.page-list button{text-align:left}.selected{border-color:#38bdf8;background:#082f49}svg{width:100%;height:520px}.node{fill:#38bdf8;cursor:pointer}.node.selected{fill:#f59e0b}.edge{stroke:#64748b;stroke-width:1.4}.edge.unresolved{stroke:#f97316;stroke-dasharray:4 4}.label{fill:#cbd5e1;font-size:12px;pointer-events:none}pre{white-space:pre-wrap;max-height:420px;overflow:auto}.result{border-top:1px solid #334155;padding:10px 0}@media(max-width:900px){.layout{grid-template-columns:1fr}}
|
|
70
|
+
</style>
|
|
71
|
+
</head>
|
|
72
|
+
<body>
|
|
73
|
+
<main>
|
|
74
|
+
<header><div><h1>wiki0 viewer</h1><p id="root" class="muted"></p></div><form id="search"><input id="q" name="q" placeholder="Search wiki" /><button>Search</button></form></header>
|
|
75
|
+
<section class="cards"><div class="card"><div class="muted">Pages</div><div id="pages" class="value">0</div></div><div class="card"><div class="muted">Edges</div><div id="edges" class="value">0</div></div><div class="card"><div class="muted">Unresolved</div><div id="unresolved" class="value">0</div></div><div class="card"><div class="muted">Review</div><div id="review" class="value">0</div></div></section>
|
|
76
|
+
<section class="layout"><div class="card graph"><svg id="graph" role="img" aria-label="Wiki graph"></svg></div><aside class="side"><div class="card"><h2>Pages</h2><div id="page-list" class="page-list"></div></div><div class="card"><h2 id="page-title">Select a page</h2><p id="page-path" class="muted"></p><pre id="page-content"></pre><div id="backlinks"></div></div></aside></section>
|
|
77
|
+
<section id="search-results" class="card" hidden><h2>Search results</h2><div id="results"></div></section>
|
|
78
|
+
</main>
|
|
79
|
+
<script>
|
|
80
|
+
const state = { data: null };
|
|
81
|
+
const esc = (value) => String(value ?? '').replace(/[&<>"']/g, (char) => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[char]));
|
|
82
|
+
async function load_state() {
|
|
83
|
+
const params = new URLSearchParams(location.search);
|
|
84
|
+
const response = await fetch('/api/state?' + params.toString());
|
|
85
|
+
state.data = await response.json();
|
|
86
|
+
render_state(state.data);
|
|
87
|
+
}
|
|
88
|
+
function select_page(path) {
|
|
89
|
+
const params = new URLSearchParams(location.search);
|
|
90
|
+
params.set('page', path);
|
|
91
|
+
history.pushState(null, '', '?' + params.toString());
|
|
92
|
+
load_state();
|
|
93
|
+
}
|
|
94
|
+
function render_state(data) {
|
|
95
|
+
document.getElementById('root').textContent = data.root;
|
|
96
|
+
document.getElementById('q').value = data.query;
|
|
97
|
+
document.getElementById('pages').textContent = data.graph.nodes.length;
|
|
98
|
+
document.getElementById('edges').textContent = data.graph.edges.length;
|
|
99
|
+
document.getElementById('unresolved').textContent = data.graph.edges.filter((edge) => edge.status === 'unresolved').length;
|
|
100
|
+
document.getElementById('review').textContent = data.review.length;
|
|
101
|
+
document.getElementById('page-list').innerHTML = data.graph.nodes.map((node) => '<button class="' + (node.path === data.selected_path ? 'selected' : '') + '" type="button" onclick="select_page(' + JSON.stringify(node.path).replace(/"/g, '"') + ')">' + esc(node.title) + '</button>').join('');
|
|
102
|
+
render_graph(data);
|
|
103
|
+
render_page(data);
|
|
104
|
+
render_search(data);
|
|
105
|
+
}
|
|
106
|
+
function render_graph(data) {
|
|
107
|
+
const svg = document.getElementById('graph');
|
|
108
|
+
const nodes = data.graph.nodes;
|
|
109
|
+
const width = svg.clientWidth || 800;
|
|
110
|
+
const height = svg.clientHeight || 520;
|
|
111
|
+
const radius = Math.max(130, Math.min(width, height) / 2 - 70);
|
|
112
|
+
const center_x = width / 2;
|
|
113
|
+
const center_y = height / 2;
|
|
114
|
+
const positions = new Map(nodes.map((node, index) => {
|
|
115
|
+
const angle = (Math.PI * 2 * index) / Math.max(nodes.length, 1) - Math.PI / 2;
|
|
116
|
+
return [node.path, { x: center_x + Math.cos(angle) * radius, y: center_y + Math.sin(angle) * radius }];
|
|
117
|
+
}));
|
|
118
|
+
const edge_markup = data.graph.edges.map((edge) => {
|
|
119
|
+
const from = positions.get(edge.from);
|
|
120
|
+
const to = positions.get(edge.to);
|
|
121
|
+
if (!from || !to) return '';
|
|
122
|
+
return '<line class="edge ' + edge.status + '" x1="' + from.x + '" y1="' + from.y + '" x2="' + to.x + '" y2="' + to.y + '"></line>';
|
|
123
|
+
}).join('');
|
|
124
|
+
const node_markup = nodes.map((node) => {
|
|
125
|
+
const point = positions.get(node.path);
|
|
126
|
+
const selected = node.path === data.selected_path ? ' selected' : '';
|
|
127
|
+
return '<g onclick="select_page(' + JSON.stringify(node.path).replace(/"/g, '"') + ')"><circle class="node' + selected + '" cx="' + point.x + '" cy="' + point.y + '" r="8"></circle><text class="label" x="' + (point.x + 12) + '" y="' + (point.y + 4) + '">' + esc(node.title) + '</text></g>';
|
|
128
|
+
}).join('');
|
|
129
|
+
svg.innerHTML = edge_markup + node_markup;
|
|
130
|
+
}
|
|
131
|
+
function render_page(data) {
|
|
132
|
+
const page = data.selected_page;
|
|
133
|
+
document.getElementById('page-title').textContent = page ? page.title : 'Select a page';
|
|
134
|
+
document.getElementById('page-path').textContent = page ? page.path : '';
|
|
135
|
+
document.getElementById('page-content').textContent = page ? page.content : '';
|
|
136
|
+
document.getElementById('backlinks').innerHTML = '<h3>Backlinks</h3>' + (data.backlinks.length ? data.backlinks.map((link) => '<button type="button" onclick="select_page(' + JSON.stringify(link.path).replace(/"/g, '"') + ')">' + esc(link.title) + '</button>').join(' ') : '<p class="muted">No backlinks.</p>');
|
|
137
|
+
}
|
|
138
|
+
function render_search(data) {
|
|
139
|
+
const section = document.getElementById('search-results');
|
|
140
|
+
section.hidden = !data.query;
|
|
141
|
+
document.getElementById('results').innerHTML = data.search.length ? data.search.map((result) => '<article class="result"><strong>' + esc(result.title) + '</strong><p class="muted">' + esc(result.path) + '</p><p>' + esc(result.snippet) + '</p></article>').join('') : '<p class="muted">No results.</p>';
|
|
142
|
+
}
|
|
143
|
+
document.getElementById('search').addEventListener('submit', (event) => {
|
|
144
|
+
event.preventDefault();
|
|
145
|
+
const params = new URLSearchParams(location.search);
|
|
146
|
+
const q = document.getElementById('q').value.trim();
|
|
147
|
+
if (q) params.set('q', q); else params.delete('q');
|
|
148
|
+
history.pushState(null, '', '?' + params.toString());
|
|
149
|
+
load_state();
|
|
150
|
+
});
|
|
151
|
+
addEventListener('popstate', load_state);
|
|
152
|
+
addEventListener('resize', () => state.data && render_graph(state.data));
|
|
153
|
+
load_state();
|
|
154
|
+
</script>
|
|
155
|
+
</body>
|
|
156
|
+
</html>`;
|
|
157
|
+
}
|
|
158
|
+
export function serve_viewer(root, host, port, open) {
|
|
159
|
+
const server = createServer((request, response) => {
|
|
160
|
+
const url = new URL(request.url ?? '/', `http://${host}:${port}`);
|
|
161
|
+
try {
|
|
162
|
+
if (url.pathname === '/api/state') {
|
|
163
|
+
send_json(response, 200, read_view_state(root, url));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (url.pathname === '/') {
|
|
167
|
+
send_html(response, viewer_html());
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
send_json(response, 404, { error: 'Not found' });
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
send_json(response, 500, {
|
|
174
|
+
error: error instanceof Error ? error.message : String(error),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
server.listen(port, host, () => {
|
|
179
|
+
const address = `http://${host}:${port}`;
|
|
180
|
+
console.log(`Serving wiki0 viewer for ${root}`);
|
|
181
|
+
console.log(address);
|
|
182
|
+
if (open)
|
|
183
|
+
open_url(address);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=viewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wiki0/cli",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "wiki0 command line interface",
|
|
5
5
|
"homepage": "https://github.com/spences10/wiki0/tree/main/packages/cli#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,14 +30,15 @@
|
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"
|
|
34
|
-
"@wiki0/
|
|
33
|
+
"@wiki0/core": "0.1.0",
|
|
34
|
+
"@wiki0/ui": "0.1.0",
|
|
35
|
+
"citty": "^0.2.2"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@types/node": "^
|
|
38
|
-
"typescript": "^
|
|
39
|
-
"vite-plus": "
|
|
40
|
-
"vitest": "
|
|
38
|
+
"@types/node": "^24.0.0",
|
|
39
|
+
"typescript": "^7.0.2",
|
|
40
|
+
"vite-plus": "1.1.0",
|
|
41
|
+
"vitest": "5.0.3"
|
|
41
42
|
},
|
|
42
43
|
"engines": {
|
|
43
44
|
"node": ">=24.15.0"
|
|
@@ -45,6 +46,6 @@
|
|
|
45
46
|
"scripts": {
|
|
46
47
|
"build:self": "vp exec tsc -p tsconfig.build.json && chmod +x dist/index.js",
|
|
47
48
|
"check:self": "vp exec tsc --noEmit -p tsconfig.json",
|
|
48
|
-
"test:self": "
|
|
49
|
+
"test:self": "vp test"
|
|
49
50
|
}
|
|
50
51
|
}
|