@thjodann/wk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +197 -0
  3. package/dist/cli/commands/article.d.ts +2 -0
  4. package/dist/cli/commands/article.js +47 -0
  5. package/dist/cli/commands/article.js.map +1 -0
  6. package/dist/cli/commands/closeout.d.ts +2 -0
  7. package/dist/cli/commands/closeout.js +37 -0
  8. package/dist/cli/commands/closeout.js.map +1 -0
  9. package/dist/cli/commands/compile.d.ts +2 -0
  10. package/dist/cli/commands/compile.js +50 -0
  11. package/dist/cli/commands/compile.js.map +1 -0
  12. package/dist/cli/commands/concept.d.ts +2 -0
  13. package/dist/cli/commands/concept.js +36 -0
  14. package/dist/cli/commands/concept.js.map +1 -0
  15. package/dist/cli/commands/decision.d.ts +2 -0
  16. package/dist/cli/commands/decision.js +38 -0
  17. package/dist/cli/commands/decision.js.map +1 -0
  18. package/dist/cli/commands/event.d.ts +2 -0
  19. package/dist/cli/commands/event.js +32 -0
  20. package/dist/cli/commands/event.js.map +1 -0
  21. package/dist/cli/commands/init.d.ts +2 -0
  22. package/dist/cli/commands/init.js +52 -0
  23. package/dist/cli/commands/init.js.map +1 -0
  24. package/dist/cli/commands/installAgent.d.ts +2 -0
  25. package/dist/cli/commands/installAgent.js +130 -0
  26. package/dist/cli/commands/installAgent.js.map +1 -0
  27. package/dist/cli/commands/link.d.ts +2 -0
  28. package/dist/cli/commands/link.js +36 -0
  29. package/dist/cli/commands/link.js.map +1 -0
  30. package/dist/cli/commands/note.d.ts +2 -0
  31. package/dist/cli/commands/note.js +34 -0
  32. package/dist/cli/commands/note.js.map +1 -0
  33. package/dist/cli/commands/pages.d.ts +2 -0
  34. package/dist/cli/commands/pages.js +46 -0
  35. package/dist/cli/commands/pages.js.map +1 -0
  36. package/dist/cli/commands/record.d.ts +2 -0
  37. package/dist/cli/commands/record.js +101 -0
  38. package/dist/cli/commands/record.js.map +1 -0
  39. package/dist/cli/commands/render.d.ts +2 -0
  40. package/dist/cli/commands/render.js +33 -0
  41. package/dist/cli/commands/render.js.map +1 -0
  42. package/dist/cli/commands/search.d.ts +2 -0
  43. package/dist/cli/commands/search.js +125 -0
  44. package/dist/cli/commands/search.js.map +1 -0
  45. package/dist/cli/commands/setup.d.ts +2 -0
  46. package/dist/cli/commands/setup.js +53 -0
  47. package/dist/cli/commands/setup.js.map +1 -0
  48. package/dist/cli/commands/site.d.ts +2 -0
  49. package/dist/cli/commands/site.js +47 -0
  50. package/dist/cli/commands/site.js.map +1 -0
  51. package/dist/cli/commands/spin.d.ts +2 -0
  52. package/dist/cli/commands/spin.js +43 -0
  53. package/dist/cli/commands/spin.js.map +1 -0
  54. package/dist/cli/commands/status.d.ts +2 -0
  55. package/dist/cli/commands/status.js +63 -0
  56. package/dist/cli/commands/status.js.map +1 -0
  57. package/dist/cli/commands/symbol.d.ts +2 -0
  58. package/dist/cli/commands/symbol.js +37 -0
  59. package/dist/cli/commands/symbol.js.map +1 -0
  60. package/dist/cli/commands/theme.d.ts +2 -0
  61. package/dist/cli/commands/theme.js +52 -0
  62. package/dist/cli/commands/theme.js.map +1 -0
  63. package/dist/cli/commands/validate.d.ts +2 -0
  64. package/dist/cli/commands/validate.js +44 -0
  65. package/dist/cli/commands/validate.js.map +1 -0
  66. package/dist/cli/helpers.d.ts +30 -0
  67. package/dist/cli/helpers.js +131 -0
  68. package/dist/cli/helpers.js.map +1 -0
  69. package/dist/core/articles.d.ts +5 -0
  70. package/dist/core/articles.js +25 -0
  71. package/dist/core/articles.js.map +1 -0
  72. package/dist/core/automation.d.ts +96 -0
  73. package/dist/core/automation.js +384 -0
  74. package/dist/core/automation.js.map +1 -0
  75. package/dist/core/beads.d.ts +43 -0
  76. package/dist/core/beads.js +358 -0
  77. package/dist/core/beads.js.map +1 -0
  78. package/dist/core/compiler.d.ts +45 -0
  79. package/dist/core/compiler.js +399 -0
  80. package/dist/core/compiler.js.map +1 -0
  81. package/dist/core/config.d.ts +59 -0
  82. package/dist/core/config.js +187 -0
  83. package/dist/core/config.js.map +1 -0
  84. package/dist/core/git.d.ts +21 -0
  85. package/dist/core/git.js +109 -0
  86. package/dist/core/git.js.map +1 -0
  87. package/dist/core/ids.d.ts +2 -0
  88. package/dist/core/ids.js +8 -0
  89. package/dist/core/ids.js.map +1 -0
  90. package/dist/core/pages.d.ts +34 -0
  91. package/dist/core/pages.js +233 -0
  92. package/dist/core/pages.js.map +1 -0
  93. package/dist/core/paths.d.ts +15 -0
  94. package/dist/core/paths.js +67 -0
  95. package/dist/core/paths.js.map +1 -0
  96. package/dist/core/profiles.d.ts +30 -0
  97. package/dist/core/profiles.js +243 -0
  98. package/dist/core/profiles.js.map +1 -0
  99. package/dist/core/renderer.d.ts +8 -0
  100. package/dist/core/renderer.js +106 -0
  101. package/dist/core/renderer.js.map +1 -0
  102. package/dist/core/schemas.d.ts +1039 -0
  103. package/dist/core/schemas.js +108 -0
  104. package/dist/core/schemas.js.map +1 -0
  105. package/dist/core/site.d.ts +20 -0
  106. package/dist/core/site.js +2684 -0
  107. package/dist/core/site.js.map +1 -0
  108. package/dist/core/spin.d.ts +42 -0
  109. package/dist/core/spin.js +265 -0
  110. package/dist/core/spin.js.map +1 -0
  111. package/dist/core/store.d.ts +29 -0
  112. package/dist/core/store.js +146 -0
  113. package/dist/core/store.js.map +1 -0
  114. package/dist/core/theme.d.ts +35 -0
  115. package/dist/core/theme.js +1086 -0
  116. package/dist/core/theme.js.map +1 -0
  117. package/dist/core/validator.d.ts +8 -0
  118. package/dist/core/validator.js +154 -0
  119. package/dist/core/validator.js.map +1 -0
  120. package/dist/index.d.ts +3 -0
  121. package/dist/index.js +61 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/templates/articlesPage.d.ts +3 -0
  124. package/dist/templates/articlesPage.js +46 -0
  125. package/dist/templates/articlesPage.js.map +1 -0
  126. package/dist/templates/conceptsPage.d.ts +2 -0
  127. package/dist/templates/conceptsPage.js +24 -0
  128. package/dist/templates/conceptsPage.js.map +1 -0
  129. package/dist/templates/decisionsPage.d.ts +2 -0
  130. package/dist/templates/decisionsPage.js +27 -0
  131. package/dist/templates/decisionsPage.js.map +1 -0
  132. package/dist/templates/devlogPage.d.ts +2 -0
  133. package/dist/templates/devlogPage.js +22 -0
  134. package/dist/templates/devlogPage.js.map +1 -0
  135. package/dist/templates/indexPage.d.ts +6 -0
  136. package/dist/templates/indexPage.js +33 -0
  137. package/dist/templates/indexPage.js.map +1 -0
  138. package/dist/templates/linksPage.d.ts +2 -0
  139. package/dist/templates/linksPage.js +26 -0
  140. package/dist/templates/linksPage.js.map +1 -0
  141. package/dist/templates/notesPage.d.ts +2 -0
  142. package/dist/templates/notesPage.js +26 -0
  143. package/dist/templates/notesPage.js.map +1 -0
  144. package/dist/templates/symbolsPage.d.ts +2 -0
  145. package/dist/templates/symbolsPage.js +25 -0
  146. package/dist/templates/symbolsPage.js.map +1 -0
  147. package/docs/concepts.md +249 -0
  148. package/docs/reference.md +356 -0
  149. package/docs/setup.md +331 -0
  150. package/docs/workflows.md +154 -0
  151. package/package.json +61 -0
  152. package/skills/wk/SKILL.md +251 -0
  153. package/skills/wk/agents/openai.yaml +4 -0
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compileRoles = void 0;
7
+ exports.createCompileDraft = createCompileDraft;
8
+ exports.applyCompileDraft = applyCompileDraft;
9
+ exports.readCompileDraftManifest = readCompileDraftManifest;
10
+ exports.routeRecordsForRole = routeRecordsForRole;
11
+ exports.validateHumanWiki = validateHumanWiki;
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const crypto_1 = require("crypto");
15
+ const store_1 = require("./store");
16
+ const schemas_1 = require("./schemas");
17
+ const paths_1 = require("./paths");
18
+ exports.compileRoles = ["ux", "dx"];
19
+ const uxTags = new Set(["ux", "user", "product", "flow", "design", "support"]);
20
+ const dxTags = new Set(["dx", "developer", "architecture", "cli", "core", "workflow", "symbol", "testing", "package"]);
21
+ const rolePages = {
22
+ ux: [
23
+ {
24
+ role: "ux",
25
+ id: "index",
26
+ title: "UX Wiki",
27
+ description: "Orient product users, stakeholders, and design-minded readers."
28
+ },
29
+ {
30
+ role: "ux",
31
+ id: "product-overview",
32
+ title: "Product Overview",
33
+ description: "Explain what the product is, who it serves, and what problem it solves."
34
+ },
35
+ {
36
+ role: "ux",
37
+ id: "user-experience",
38
+ title: "User Experience",
39
+ description: "Describe the product loop, user-facing behavior, and experience principles."
40
+ },
41
+ {
42
+ role: "ux",
43
+ id: "decisions",
44
+ title: "UX Decisions",
45
+ description: "Summarize product and experience decisions that shape the user experience."
46
+ }
47
+ ],
48
+ dx: [
49
+ {
50
+ role: "dx",
51
+ id: "index",
52
+ title: "DX Wiki",
53
+ description: "Orient developers, coding agents, and maintainers."
54
+ },
55
+ {
56
+ role: "dx",
57
+ id: "developer-overview",
58
+ title: "Developer Overview",
59
+ description: "Explain the implementation model and the daily development loop."
60
+ },
61
+ {
62
+ role: "dx",
63
+ id: "architecture",
64
+ title: "Architecture",
65
+ description: "Describe storage, revision, validation, rendering, search, and compile architecture."
66
+ },
67
+ {
68
+ role: "dx",
69
+ id: "workflows",
70
+ title: "Developer Workflows",
71
+ description: "Document the commands and workflows developers and agents should use."
72
+ },
73
+ {
74
+ role: "dx",
75
+ id: "symbols",
76
+ title: "Symbols",
77
+ description: "Summarize important code symbols and where developers should look first."
78
+ },
79
+ {
80
+ role: "dx",
81
+ id: "decisions",
82
+ title: "DX Decisions",
83
+ description: "Summarize technical and workflow decisions that shape developer experience."
84
+ }
85
+ ]
86
+ };
87
+ function createCompileDraft(root, roleOption = "all") {
88
+ const roles = normalizeCompileRoles(roleOption);
89
+ const records = (0, store_1.readAllRecords)(root);
90
+ const draftId = `compile_${(0, crypto_1.randomUUID)()}`;
91
+ const createdAt = new Date().toISOString();
92
+ const draftRoot = compileDraftPath(root, draftId);
93
+ fs_1.default.mkdirSync(draftRoot, { recursive: true });
94
+ const pages = buildCompilePages(records, roles, draftId, createdAt);
95
+ const manifest = {
96
+ type: "compile-draft",
97
+ id: draftId,
98
+ status: "draft",
99
+ roles,
100
+ created_at: createdAt,
101
+ output_root: "wiki/human",
102
+ pages
103
+ };
104
+ for (const page of pages) {
105
+ const draftFile = path_1.default.join(draftRoot, page.draft_path);
106
+ fs_1.default.mkdirSync(path_1.default.dirname(draftFile), { recursive: true });
107
+ fs_1.default.writeFileSync(draftFile, draftMarkdown(manifest, page), "utf8");
108
+ }
109
+ const manifestPath = path_1.default.join(draftRoot, "manifest.json");
110
+ fs_1.default.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
111
+ return {
112
+ draft_id: draftId,
113
+ draft_path: draftRoot,
114
+ manifest_path: manifestPath,
115
+ roles,
116
+ pages
117
+ };
118
+ }
119
+ function applyCompileDraft(root, draftId) {
120
+ const manifest = readCompileDraftManifest(root, draftId);
121
+ const activeRecordIds = activeRecordIdSet((0, store_1.readAllRecords)(root));
122
+ const appliedAt = new Date().toISOString();
123
+ const renderedFiles = [];
124
+ for (const page of manifest.pages) {
125
+ validatePageProvenance(root, page, activeRecordIds);
126
+ const draftFile = path_1.default.join(compileDraftPath(root, draftId), page.draft_path);
127
+ if (!fs_1.default.existsSync(draftFile)) {
128
+ throw new Error(`Draft page is missing: ${page.draft_path}`);
129
+ }
130
+ const content = fs_1.default.readFileSync(draftFile, "utf8");
131
+ const outputFile = path_1.default.join(root, page.output_path);
132
+ fs_1.default.mkdirSync(path_1.default.dirname(outputFile), { recursive: true });
133
+ fs_1.default.writeFileSync(outputFile, finalHumanPage(content, manifest, page, appliedAt), "utf8");
134
+ renderedFiles.push((0, paths_1.toPosixPath)(page.output_path));
135
+ }
136
+ return {
137
+ ok: true,
138
+ draft_id: draftId,
139
+ applied_at: appliedAt,
140
+ rendered_files: renderedFiles
141
+ };
142
+ }
143
+ function readCompileDraftManifest(root, draftId) {
144
+ if (!/^compile_[0-9a-f-]+$/i.test(draftId)) {
145
+ throw new Error(`Invalid compile draft id: ${draftId}`);
146
+ }
147
+ const manifestPath = path_1.default.join(compileDraftPath(root, draftId), "manifest.json");
148
+ if (!fs_1.default.existsSync(manifestPath)) {
149
+ throw new Error(`Compile draft manifest not found: ${draftId}`);
150
+ }
151
+ const parsed = JSON.parse(fs_1.default.readFileSync(manifestPath, "utf8"));
152
+ if (parsed.type !== "compile-draft" || parsed.id !== draftId || !Array.isArray(parsed.pages)) {
153
+ throw new Error(`Invalid compile draft manifest: ${draftId}`);
154
+ }
155
+ return parsed;
156
+ }
157
+ function routeRecordsForRole(records, role) {
158
+ return flattenRecords(records).filter((record) => {
159
+ const tags = recordTags(record);
160
+ const taggedUx = tags.some((tag) => uxTags.has(tag));
161
+ const taggedDx = tags.some((tag) => dxTags.has(tag));
162
+ const inherentDx = record.type === "symbol";
163
+ const inherentShared = record.type === "link";
164
+ const shared = inherentShared || ((!taggedUx && !taggedDx && !inherentDx) && isSharedContext(record));
165
+ if (role === "ux") {
166
+ return taggedUx || shared;
167
+ }
168
+ return taggedDx || inherentDx || shared;
169
+ });
170
+ }
171
+ function validateHumanWiki(root) {
172
+ const errors = [];
173
+ const humanRoot = path_1.default.join((0, paths_1.wikiPath)(root), "human");
174
+ if (!fs_1.default.existsSync(humanRoot)) {
175
+ return errors;
176
+ }
177
+ for (const file of listMarkdownFiles(humanRoot)) {
178
+ const content = fs_1.default.readFileSync(file, "utf8");
179
+ const relative = (0, paths_1.relativeReportPath)(root, file);
180
+ if (!content.startsWith("<!-- Generated by Wikiwiki human compile")) {
181
+ errors.push(`${relative} is missing the human compile generated notice.`);
182
+ }
183
+ if (!content.includes("## Sources")) {
184
+ errors.push(`${relative} is missing compact provenance sources.`);
185
+ }
186
+ if (!content.includes("Draft: `compile_")) {
187
+ errors.push(`${relative} is missing compile draft provenance.`);
188
+ }
189
+ }
190
+ return errors;
191
+ }
192
+ function normalizeCompileRoles(roleOption) {
193
+ if (roleOption === "all") {
194
+ return ["ux", "dx"];
195
+ }
196
+ if (exports.compileRoles.includes(roleOption)) {
197
+ return [roleOption];
198
+ }
199
+ throw new Error("Unknown compile role. Expected one of: all, ux, dx.");
200
+ }
201
+ function buildCompilePages(records, roles, draftId, createdAt) {
202
+ const pages = [];
203
+ pages.push(buildPage(records, roles, homeBlueprint(roles), draftId, createdAt));
204
+ for (const role of roles) {
205
+ for (const blueprint of rolePages[role]) {
206
+ pages.push(buildPage(records, [role], blueprint, draftId, createdAt));
207
+ }
208
+ }
209
+ return pages;
210
+ }
211
+ function buildPage(records, roles, blueprint, draftId, createdAt) {
212
+ const selectedRecords = recordsForPage(records, roles, blueprint);
213
+ const sourceRecordIds = unique(selectedRecords.map((record) => record.id));
214
+ const sourceFiles = unique(selectedRecords.flatMap(relatedFiles).map(paths_1.toPosixPath));
215
+ const draftPath = blueprint.role === "home"
216
+ ? "index.md"
217
+ : path_1.default.posix.join(blueprint.role, `${blueprint.id}.md`);
218
+ const outputPath = blueprint.role === "home"
219
+ ? "wiki/human/index.md"
220
+ : path_1.default.posix.join("wiki/human", blueprint.role, `${blueprint.id}.md`);
221
+ return {
222
+ ...blueprint,
223
+ draft_path: draftPath,
224
+ output_path: outputPath,
225
+ prompt: pagePrompt(blueprint, roles, selectedRecords, draftId, createdAt),
226
+ source_record_ids: sourceRecordIds,
227
+ source_files: sourceFiles
228
+ };
229
+ }
230
+ function recordsForPage(records, roles, blueprint) {
231
+ const routed = uniqueRecords(roles.flatMap((role) => routeRecordsForRole(records, role)));
232
+ const filtered = routed.filter((record) => pageMatchesRecord(blueprint, record));
233
+ return filtered.length > 0 ? filtered : routed;
234
+ }
235
+ function pageMatchesRecord(blueprint, record) {
236
+ if (blueprint.role === "home" || blueprint.id === "index") {
237
+ return true;
238
+ }
239
+ if (blueprint.id === "decisions") {
240
+ return record.type === "decision" || record.type === "concept" || record.type === "note";
241
+ }
242
+ if (blueprint.id === "symbols") {
243
+ return record.type === "symbol" || recordTags(record).some((tag) => ["core", "cli", "architecture"].includes(tag));
244
+ }
245
+ if (blueprint.id === "architecture") {
246
+ return record.type === "concept" || record.type === "decision" || record.type === "symbol";
247
+ }
248
+ if (blueprint.id === "workflows") {
249
+ return recordTags(record).some((tag) => ["workflow", "cli", "testing", "package", "v1", "agent-workflow"].includes(tag)) || record.type === "event";
250
+ }
251
+ if (blueprint.id === "user-experience") {
252
+ return recordTags(record).some((tag) => ["ux", "user", "product", "flow", "design", "readme", "product-direction"].includes(tag)) || record.type === "decision";
253
+ }
254
+ if (blueprint.id === "product-overview") {
255
+ return recordTags(record).some((tag) => ["product", "readme", "product-direction", "v1"].includes(tag)) || record.type === "concept" || record.type === "note";
256
+ }
257
+ if (blueprint.id === "developer-overview") {
258
+ return recordTags(record).some((tag) => ["dx", "developer", "cli", "core", "architecture", "v1"].includes(tag)) || record.type === "concept";
259
+ }
260
+ return true;
261
+ }
262
+ function pagePrompt(blueprint, roles, records, draftId, createdAt) {
263
+ const roleText = blueprint.role === "home" ? roles.join(" and ") : blueprint.role.toUpperCase();
264
+ const recordsText = records.map((record) => `- ${record.type} ${record.id}: ${recordTitle(record)}`).join("\n");
265
+ return [
266
+ `Write the ${blueprint.title} page for the ${roleText} human wiki.`,
267
+ blueprint.description,
268
+ "Use polished human-readable prose, but do not invent facts beyond the source records.",
269
+ "Keep the Sources section compact and visible.",
270
+ `Draft id: ${draftId}`,
271
+ `Created: ${createdAt}`,
272
+ "Source records:",
273
+ recordsText || "- No source records selected."
274
+ ].join("\n");
275
+ }
276
+ function draftMarkdown(manifest, page) {
277
+ const fileLines = page.source_files.map((file) => `- \`${file}\``).join("\n") || "- None";
278
+ const recordLines = page.source_record_ids.map((id) => `- \`${id}\``).join("\n") || "- None";
279
+ return `<!-- Wikiwiki compile draft. Agent-authored prose belongs here; apply with \`wk compile apply ${manifest.id}\`. -->
280
+
281
+ # ${page.title}
282
+
283
+ ${page.description}
284
+
285
+ ## Composition Prompt
286
+
287
+ \`\`\`text
288
+ ${page.prompt}
289
+ \`\`\`
290
+
291
+ ## Draft
292
+
293
+ TODO: Replace this section with polished, role-specific prose for the ${page.role} wiki.
294
+
295
+ ## Sources
296
+
297
+ Draft: \`${manifest.id}\` | Compiled: \`PENDING\`
298
+
299
+ Records:
300
+ ${recordLines}
301
+
302
+ Files:
303
+ ${fileLines}
304
+ `;
305
+ }
306
+ function finalHumanPage(content, manifest, page, appliedAt) {
307
+ const withoutDraftNotice = content.replace(/^<!-- Wikiwiki compile draft\..*?-->\n\n/s, "");
308
+ const withoutPrompt = withoutDraftNotice
309
+ .replace(/\n## Composition Prompt\n\n```text\n[\s\S]*?\n```\n\n/, "\n")
310
+ .replace(/\n## Draft\n\n/, "\n");
311
+ const withTimestamp = withoutPrompt.replace("Compiled: `PENDING`", `Compiled: \`${appliedAt}\``);
312
+ const notice = `<!-- Generated by Wikiwiki human compile from .wikiwiki/drafts/compile/${manifest.id}. Edit the draft or source records, then run \`wk compile apply ${manifest.id}\`. -->`;
313
+ return `${notice}\n\n${withTimestamp.trimEnd()}\n`;
314
+ }
315
+ function validatePageProvenance(root, page, activeRecordIds) {
316
+ for (const id of page.source_record_ids) {
317
+ if (!activeRecordIds.has(id)) {
318
+ throw new Error(`Page ${page.output_path} references inactive record: ${id}`);
319
+ }
320
+ }
321
+ for (const file of page.source_files) {
322
+ if (!fs_1.default.existsSync(path_1.default.resolve(root, file))) {
323
+ throw new Error(`Page ${page.output_path} references missing source file: ${file}`);
324
+ }
325
+ }
326
+ }
327
+ function activeRecordIdSet(records) {
328
+ return new Set(flattenRecords(records).map((record) => record.id));
329
+ }
330
+ function flattenRecords(records) {
331
+ return schemas_1.recordTypes.flatMap((type) => records[type]);
332
+ }
333
+ function recordTags(record) {
334
+ if ("tags" in record && Array.isArray(record.tags)) {
335
+ return record.tags.map((tag) => tag.toLowerCase());
336
+ }
337
+ return [];
338
+ }
339
+ function relatedFiles(record) {
340
+ if ("files" in record && Array.isArray(record.files)) {
341
+ return record.files.map(paths_1.toPosixPath);
342
+ }
343
+ if ("file" in record && typeof record.file === "string") {
344
+ return [(0, paths_1.toPosixPath)(record.file)];
345
+ }
346
+ return [];
347
+ }
348
+ function isSharedContext(record) {
349
+ return record.authority === "user" || record.confidence === "high";
350
+ }
351
+ function recordTitle(record) {
352
+ if ("name" in record && typeof record.name === "string") {
353
+ return record.name;
354
+ }
355
+ if ("title" in record && typeof record.title === "string") {
356
+ return record.title;
357
+ }
358
+ if ("summary" in record && typeof record.summary === "string") {
359
+ return record.summary;
360
+ }
361
+ if ("body" in record && typeof record.body === "string") {
362
+ return record.body.slice(0, 80);
363
+ }
364
+ if ("relationship" in record && typeof record.relationship === "string") {
365
+ return `${record.from} ${record.relationship} ${record.to}`;
366
+ }
367
+ return record.id;
368
+ }
369
+ function homeBlueprint(roles) {
370
+ return {
371
+ role: "home",
372
+ id: "index",
373
+ title: "Human Wiki",
374
+ description: `Choose a role-oriented wiki: ${roles.map((role) => role.toUpperCase()).join(" or ")}.`
375
+ };
376
+ }
377
+ function compileDraftPath(root, draftId) {
378
+ return path_1.default.join((0, paths_1.wikiwikiPath)(root), "drafts", "compile", draftId);
379
+ }
380
+ function unique(values) {
381
+ return [...new Set(values.filter(Boolean))].sort();
382
+ }
383
+ function uniqueRecords(records) {
384
+ const byId = new Map();
385
+ for (const record of records) {
386
+ byId.set(record.id, record);
387
+ }
388
+ return [...byId.values()];
389
+ }
390
+ function listMarkdownFiles(root) {
391
+ return fs_1.default.readdirSync(root, { withFileTypes: true }).flatMap((entry) => {
392
+ const fullPath = path_1.default.join(root, entry.name);
393
+ if (entry.isDirectory()) {
394
+ return listMarkdownFiles(fullPath);
395
+ }
396
+ return entry.isFile() && entry.name.endsWith(".md") ? [fullPath] : [];
397
+ });
398
+ }
399
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { type BeadsIntegrationConfig } from "./beads";
2
+ import { type SiteAudience, type WikiProfile } from "./profiles";
3
+ export type WikiwikiConfig = {
4
+ source_base_url?: string;
5
+ wiki_profile?: WikiProfile;
6
+ site_audience?: SiteAudience;
7
+ integrations?: {
8
+ beads?: BeadsIntegrationConfig;
9
+ };
10
+ };
11
+ export declare const wikiwikiColorSchemes: readonly ["auto", "light", "dark"];
12
+ export type WikiwikiColorScheme = (typeof wikiwikiColorSchemes)[number];
13
+ export type WikiwikiThemePalette = {
14
+ accent?: string;
15
+ accent_strong?: string;
16
+ secondary?: string;
17
+ bg?: string;
18
+ panel?: string;
19
+ panel_soft?: string;
20
+ text?: string;
21
+ muted?: string;
22
+ border?: string;
23
+ code_bg?: string;
24
+ shadow?: string;
25
+ shadow_strong?: string;
26
+ radius?: string;
27
+ font_family?: string;
28
+ sidebar_bg?: string;
29
+ hero_gradient?: string;
30
+ card_gradient?: string;
31
+ brand_gradient?: string;
32
+ brand_mark_text?: string;
33
+ badge_bg?: string;
34
+ badge_text?: string;
35
+ tag_bg?: string;
36
+ tag_text?: string;
37
+ success_bg?: string;
38
+ success_text?: string;
39
+ warning_bg?: string;
40
+ warning_text?: string;
41
+ focus_ring?: string;
42
+ gloss?: string;
43
+ };
44
+ export type WikiwikiSiteTheme = WikiwikiThemePalette & {
45
+ project_name?: string;
46
+ project_description?: string;
47
+ default_color_scheme?: WikiwikiColorScheme;
48
+ modes?: {
49
+ light?: WikiwikiThemePalette;
50
+ dark?: WikiwikiThemePalette;
51
+ };
52
+ };
53
+ export declare function configPath(root: string): string;
54
+ export declare function siteThemePath(root: string): string;
55
+ export declare function readWikiwikiConfig(root: string): WikiwikiConfig;
56
+ export declare function writeWikiwikiConfig(root: string, config: WikiwikiConfig): void;
57
+ export declare function readWikiwikiSiteTheme(root: string): WikiwikiSiteTheme;
58
+ export declare function normalizeSourceBaseUrl(value: string | undefined): string | undefined;
59
+ export declare const siteThemePaletteKeys: readonly ["accent", "accent_strong", "secondary", "bg", "panel", "panel_soft", "text", "muted", "border", "code_bg", "shadow", "shadow_strong", "radius", "font_family", "sidebar_bg", "hero_gradient", "card_gradient", "brand_gradient", "brand_mark_text", "badge_bg", "badge_text", "tag_bg", "tag_text", "success_bg", "success_text", "warning_bg", "warning_text", "focus_ring", "gloss"];
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.siteThemePaletteKeys = exports.wikiwikiColorSchemes = void 0;
7
+ exports.configPath = configPath;
8
+ exports.siteThemePath = siteThemePath;
9
+ exports.readWikiwikiConfig = readWikiwikiConfig;
10
+ exports.writeWikiwikiConfig = writeWikiwikiConfig;
11
+ exports.readWikiwikiSiteTheme = readWikiwikiSiteTheme;
12
+ exports.normalizeSourceBaseUrl = normalizeSourceBaseUrl;
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const profiles_1 = require("./profiles");
16
+ const paths_1 = require("./paths");
17
+ exports.wikiwikiColorSchemes = ["auto", "light", "dark"];
18
+ function configPath(root) {
19
+ return path_1.default.join((0, paths_1.wikiwikiPath)(root), "config.json");
20
+ }
21
+ function siteThemePath(root) {
22
+ return path_1.default.join((0, paths_1.wikiwikiPath)(root), "site-theme.json");
23
+ }
24
+ function readWikiwikiConfig(root) {
25
+ const file = configPath(root);
26
+ if (!fs_1.default.existsSync(file)) {
27
+ return {};
28
+ }
29
+ const parsed = JSON.parse(fs_1.default.readFileSync(file, "utf8"));
30
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
31
+ throw new Error(".wikiwiki/config.json must contain a JSON object.");
32
+ }
33
+ const config = parsed;
34
+ const sourceBaseUrl = config.source_base_url;
35
+ if (sourceBaseUrl !== undefined && typeof sourceBaseUrl !== "string") {
36
+ throw new Error(".wikiwiki/config.json source_base_url must be a string.");
37
+ }
38
+ const wikiProfile = config.wiki_profile;
39
+ if (wikiProfile !== undefined && typeof wikiProfile !== "string") {
40
+ throw new Error(".wikiwiki/config.json wiki_profile must be a string.");
41
+ }
42
+ const siteAudience = config.site_audience;
43
+ if (siteAudience !== undefined && typeof siteAudience !== "string") {
44
+ throw new Error(".wikiwiki/config.json site_audience must be a string.");
45
+ }
46
+ const integrations = parseIntegrationsConfig(config.integrations);
47
+ return {
48
+ source_base_url: sourceBaseUrl,
49
+ wiki_profile: (0, profiles_1.parseWikiProfile)(wikiProfile, "mixed"),
50
+ site_audience: (0, profiles_1.parseSiteAudience)(siteAudience, "all"),
51
+ ...(integrations ? { integrations } : {})
52
+ };
53
+ }
54
+ function writeWikiwikiConfig(root, config) {
55
+ const file = configPath(root);
56
+ fs_1.default.mkdirSync(path_1.default.dirname(file), { recursive: true });
57
+ fs_1.default.writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`, "utf8");
58
+ }
59
+ function readWikiwikiSiteTheme(root) {
60
+ const file = siteThemePath(root);
61
+ if (!fs_1.default.existsSync(file)) {
62
+ return {};
63
+ }
64
+ const parsed = JSON.parse(fs_1.default.readFileSync(file, "utf8"));
65
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
66
+ throw new Error(".wikiwiki/site-theme.json must contain a JSON object.");
67
+ }
68
+ const theme = parsed;
69
+ const result = readThemePalette(theme, ".wikiwiki/site-theme.json");
70
+ for (const key of siteThemeIdentityKeys) {
71
+ const value = theme[key];
72
+ if (value !== undefined) {
73
+ if (typeof value !== "string") {
74
+ throw new Error(`.wikiwiki/site-theme.json ${key} must be a string.`);
75
+ }
76
+ result[key] = value;
77
+ }
78
+ }
79
+ const defaultColorScheme = theme.default_color_scheme;
80
+ if (defaultColorScheme !== undefined) {
81
+ if (typeof defaultColorScheme !== "string" || !exports.wikiwikiColorSchemes.includes(defaultColorScheme)) {
82
+ throw new Error(`.wikiwiki/site-theme.json default_color_scheme must be one of: ${exports.wikiwikiColorSchemes.join(", ")}.`);
83
+ }
84
+ result.default_color_scheme = defaultColorScheme;
85
+ }
86
+ if (theme.modes !== undefined) {
87
+ if (!theme.modes || typeof theme.modes !== "object" || Array.isArray(theme.modes)) {
88
+ throw new Error(".wikiwiki/site-theme.json modes must be an object.");
89
+ }
90
+ const modes = theme.modes;
91
+ const resultModes = {};
92
+ for (const mode of ["light", "dark"]) {
93
+ const value = modes[mode];
94
+ if (value === undefined) {
95
+ continue;
96
+ }
97
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
98
+ throw new Error(`.wikiwiki/site-theme.json modes.${mode} must be an object.`);
99
+ }
100
+ resultModes[mode] = readThemePalette(value, `.wikiwiki/site-theme.json modes.${mode}`);
101
+ }
102
+ if (Object.keys(resultModes).length > 0) {
103
+ result.modes = resultModes;
104
+ }
105
+ }
106
+ return result;
107
+ }
108
+ function normalizeSourceBaseUrl(value) {
109
+ const trimmed = value?.trim();
110
+ if (!trimmed) {
111
+ return undefined;
112
+ }
113
+ return trimmed.endsWith("/") ? trimmed : `${trimmed}/`;
114
+ }
115
+ function parseIntegrationsConfig(value) {
116
+ if (value === undefined) {
117
+ return undefined;
118
+ }
119
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
120
+ throw new Error(".wikiwiki/config.json integrations must be an object.");
121
+ }
122
+ const integrations = value;
123
+ const result = {};
124
+ const beads = integrations.beads;
125
+ if (beads !== undefined) {
126
+ if (!beads || typeof beads !== "object" || Array.isArray(beads)) {
127
+ throw new Error(".wikiwiki/config.json integrations.beads must be an object.");
128
+ }
129
+ const beadsConfig = beads;
130
+ if (beadsConfig.enabled !== undefined && typeof beadsConfig.enabled !== "boolean") {
131
+ throw new Error(".wikiwiki/config.json integrations.beads.enabled must be a boolean.");
132
+ }
133
+ result.beads = {
134
+ ...(beadsConfig.enabled !== undefined ? { enabled: beadsConfig.enabled } : {})
135
+ };
136
+ }
137
+ return Object.keys(result).length > 0 ? result : undefined;
138
+ }
139
+ const siteThemeIdentityKeys = [
140
+ "project_name",
141
+ "project_description"
142
+ ];
143
+ exports.siteThemePaletteKeys = [
144
+ "accent",
145
+ "accent_strong",
146
+ "secondary",
147
+ "bg",
148
+ "panel",
149
+ "panel_soft",
150
+ "text",
151
+ "muted",
152
+ "border",
153
+ "code_bg",
154
+ "shadow",
155
+ "shadow_strong",
156
+ "radius",
157
+ "font_family",
158
+ "sidebar_bg",
159
+ "hero_gradient",
160
+ "card_gradient",
161
+ "brand_gradient",
162
+ "brand_mark_text",
163
+ "badge_bg",
164
+ "badge_text",
165
+ "tag_bg",
166
+ "tag_text",
167
+ "success_bg",
168
+ "success_text",
169
+ "warning_bg",
170
+ "warning_text",
171
+ "focus_ring",
172
+ "gloss"
173
+ ];
174
+ function readThemePalette(theme, context) {
175
+ const result = {};
176
+ for (const key of exports.siteThemePaletteKeys) {
177
+ const value = theme[key];
178
+ if (value !== undefined) {
179
+ if (typeof value !== "string") {
180
+ throw new Error(`${context} ${key} must be a string.`);
181
+ }
182
+ result[key] = value;
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+ //# sourceMappingURL=config.js.map