@x12i/docify 1.0.1 → 1.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/bin/docify.js CHANGED
File without changes
package/dist/cli.js CHANGED
@@ -1,56 +1,453 @@
1
1
  #!/usr/bin/env node
2
- import { docify } from "./index.js";
3
- const [cmd, id, audience] = process.argv.slice(2);
2
+ /**
3
+ * Docify framework CLI — authoring, validation, build helpers, and publish.
4
+ * Knowledge-package shortcuts remain available when a dogfood/product SDK is linked.
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { dirname, join, resolve } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { loadCatalog, loadDocifyConfig, loadKnowledgeLibrary, loadSequences, loadUseCases, validateDocifyLibrary, } from "@x12i/docify-core";
10
+ const args = process.argv.slice(2);
11
+ const cmd = args[0];
4
12
  function usage() {
5
13
  console.error(`Usage:
6
- docify use-case <id> Print assembled use-case markdown
7
- docify book <id> <audience> Print book markdown
8
- docify list-use-cases List use case ids
9
- docify list-books List book ids
14
+ docify init [dir] Scaffold a product docs library
15
+ docify scaffold <type> [id] concept|guide|scenario|decision|diagram|flow|visual|tutorial
16
+ docify validate [contentRoot] Validate schemas, links, diagrams, understanding fields
17
+ docify validate tutorials [root] Validate tutorial definitions
18
+ docify build [contentRoot] Hint: use product scripts/build-bundle.mjs (thin orchestrator)
19
+ docify serve [webDir] Hint: docify-web serve <dir>
20
+ docify pack [contentRoot] Hint: build then publish @x12i/<product>-docs
21
+ docify publish connect|--config Cloudflare Pages connect/setup/deploy/status/rollback
22
+ docify publish setup
23
+ docify publish [--preview]
24
+ docify publish status|deployments
25
+ docify publish rollback <id>
26
+
27
+ Knowledge SDK (when installed as product docs package):
28
+ docify use-case <id>
29
+ docify book <id> <audience>
30
+ docify list-use-cases | list-books
10
31
  `);
11
32
  }
12
- if (!cmd || cmd === "help" || cmd === "--help") {
13
- usage();
14
- process.exit(cmd ? 0 : 1);
33
+ function findConfig(start = process.cwd()) {
34
+ let dir = start;
35
+ for (;;) {
36
+ const p = join(dir, "docify.config.json");
37
+ if (existsSync(p))
38
+ return p;
39
+ const parent = dirname(dir);
40
+ if (parent === dir)
41
+ return null;
42
+ dir = parent;
43
+ }
15
44
  }
16
- if (cmd === "list-use-cases") {
17
- for (const uc of docify.listUseCases()) {
18
- console.log(`${uc.id}\t${uc.title}`);
45
+ function contentRootFromArgs(fallback = process.cwd()) {
46
+ const i = args.findIndex((a) => a === "--root" || a === "--content");
47
+ if (i >= 0 && args[i + 1])
48
+ return resolve(args[i + 1]);
49
+ const positional = args[1] && !args[1].startsWith("-") ? args[1] : null;
50
+ if (positional && cmd !== "scaffold" && cmd !== "publish")
51
+ return resolve(positional);
52
+ const cfgPath = findConfig();
53
+ if (cfgPath) {
54
+ const cfg = loadDocifyConfig(cfgPath);
55
+ return resolve(dirname(cfgPath), cfg.content.root);
19
56
  }
20
- process.exit(0);
57
+ return resolve(fallback);
21
58
  }
22
- if (cmd === "list-books") {
23
- for (const b of docify.listBooks()) {
24
- console.log(`${b.id}\t${b.title}\t${b.audiences.join(",")}`);
59
+ const TEMPLATES = {
60
+ concept: (id) => `---
61
+ id: ${id}
62
+ type: concept
63
+ title: ${id.replace(/-/g, " ")}
64
+ summary: One-sentence direct answer.
65
+ problem: What goes wrong without this concept.
66
+ why: Why the product uses this design.
67
+ mentalModel: Smallest correct mental model.
68
+ audiences: [developers, builders]
69
+ prerequisites: []
70
+ related: []
71
+ next: []
72
+ ---
73
+
74
+ # ${id.replace(/-/g, " ")}
75
+
76
+ ## Answer
77
+
78
+ Direct definition.
79
+
80
+ ## Problem
81
+
82
+ ## Why
83
+
84
+ ## Mental model
85
+
86
+ ## Example
87
+
88
+ ## How it works
89
+
90
+ ## Next
91
+ `,
92
+ guide: (id) => `---
93
+ id: ${id}
94
+ type: guide
95
+ title: ${id.replace(/-/g, " ")}
96
+ summary: Bounded outcome this guide achieves.
97
+ why: Why this is the supported procedure.
98
+ audiences: [developers]
99
+ confirmationRequired: false
100
+ invariants: []
101
+ prerequisites: []
102
+ related: []
103
+ ---
104
+
105
+ # ${id.replace(/-/g, " ")}
106
+
107
+ ## Use this when
108
+
109
+ ## Do not use this when
110
+
111
+ ## Steps
112
+
113
+ 1. …
114
+
115
+ ## Verification
116
+
117
+ ## Recovery
118
+ `,
119
+ scenario: (id) => `---
120
+ id: ${id}
121
+ type: scenario
122
+ title: ${id.replace(/-/g, " ")}
123
+ summary: Stateful decision path.
124
+ situation: Observable current state.
125
+ decisionQuestion: Which path applies?
126
+ audiences: [operators]
127
+ invariants: []
128
+ paths:
129
+ - id: path-a
130
+ label: Path A
131
+ when: Condition A
132
+ guideIds: []
133
+ ---
134
+
135
+ # ${id.replace(/-/g, " ")}
136
+
137
+ ## Signals
138
+
139
+ ## Paths
140
+
141
+ ## Escalation
142
+ `,
143
+ decision: (id) => `---
144
+ id: ${id}
145
+ type: decision
146
+ title: ${id.replace(/-/g, " ")}
147
+ summary: Decision question answered here.
148
+ recommendedDefault: Option A
149
+ audiences: [developers]
150
+ options:
151
+ - id: a
152
+ label: Option A
153
+ summary: …
154
+ recommended: true
155
+ - id: b
156
+ label: Option B
157
+ summary: …
158
+ ---
159
+
160
+ # ${id.replace(/-/g, " ")}
161
+ `,
162
+ diagram: (id) => JSON.stringify({
163
+ id,
164
+ type: "flow",
165
+ title: id.replace(/-/g, " "),
166
+ summary: "What this diagram shows.",
167
+ why: "Why this model matters.",
168
+ direction: "left-to-right",
169
+ howToRead: "Follow the arrows from start to end.",
170
+ textAlternative: "Describe the full flow in plain language.",
171
+ keyTakeaways: ["Takeaway one"],
172
+ nodes: [
173
+ { id: "start", label: "Start", description: "Beginning" },
174
+ { id: "end", label: "End", description: "Outcome" },
175
+ ],
176
+ edges: [
177
+ {
178
+ from: "start",
179
+ to: "end",
180
+ label: "next",
181
+ description: "Progresses to outcome",
182
+ },
183
+ ],
184
+ }, null, 2) + "\n",
185
+ flow: (id) => TEMPLATES.diagram(id),
186
+ visual: (id) => JSON.stringify({
187
+ id,
188
+ src: `images/${id}.png`,
189
+ alt: "Describe the visible UI state",
190
+ caption: "One-line caption",
191
+ whatToNotice: ["Notice A", "Notice B"],
192
+ whyItMatters: "Why this screenshot is evidence in the story",
193
+ conceptIds: [],
194
+ }, null, 2) + "\n",
195
+ tutorial: (id) => `---
196
+ id: ${id}
197
+ type: tutorial
198
+ title: ${id.replace(/-/g, " ")}
199
+ summary: What the learner can do afterward.
200
+ audiences: [developers]
201
+ runnable: false
202
+ prerequisites: []
203
+ ---
204
+
205
+ # ${id.replace(/-/g, " ")}
206
+
207
+ ## Setup
208
+
209
+ ## Steps
210
+
211
+ ## Verification
212
+
213
+ ## Reset
214
+ `,
215
+ };
216
+ async function runPublish() {
217
+ const sub = args[1];
218
+ const configFlag = args.indexOf("--config");
219
+ const configPath = configFlag >= 0 && args[configFlag + 1]
220
+ ? resolve(args[configFlag + 1])
221
+ : findConfig();
222
+ if (!configPath) {
223
+ console.error("No docify.config.json found (use --config path)");
224
+ process.exit(1);
225
+ }
226
+ const config = JSON.parse(readFileSync(configPath, "utf8"));
227
+ const { createDocifyPublisher } = await import("@x12i/docify-export");
228
+ const publisher = createDocifyPublisher(config);
229
+ if (sub === "connect") {
230
+ console.log(JSON.stringify(await publisher.connect(), null, 2));
231
+ return;
232
+ }
233
+ if (sub === "setup") {
234
+ console.log(JSON.stringify(await publisher.setup(), null, 2));
235
+ return;
25
236
  }
237
+ if (sub === "status") {
238
+ console.log(JSON.stringify(await publisher.getStatus(), null, 2));
239
+ return;
240
+ }
241
+ if (sub === "deployments") {
242
+ console.log(JSON.stringify(await publisher.listDeployments(), null, 2));
243
+ return;
244
+ }
245
+ if (sub === "rollback") {
246
+ const id = args[2];
247
+ if (!id) {
248
+ console.error("docify publish rollback <deployment-id>");
249
+ process.exit(1);
250
+ }
251
+ console.log(JSON.stringify(await publisher.rollbackDeployment(id), null, 2));
252
+ return;
253
+ }
254
+ const preview = args.includes("--preview");
255
+ const branchIdx = args.indexOf("--branch");
256
+ const branch = branchIdx >= 0 ? args[branchIdx + 1] : undefined;
257
+ console.log(JSON.stringify(await publisher.publish({ preview, branch }), null, 2));
258
+ }
259
+ if (!cmd || cmd === "help" || cmd === "--help") {
260
+ usage();
261
+ process.exit(cmd ? 0 : 1);
262
+ }
263
+ if (cmd === "init") {
264
+ const dir = resolve(args[1] || "docs");
265
+ mkdirSync(join(dir, "site-pages"), { recursive: true });
266
+ mkdirSync(join(dir, "data"), { recursive: true });
267
+ mkdirSync(join(dir, "concepts"), { recursive: true });
268
+ mkdirSync(join(dir, "guides"), { recursive: true });
269
+ mkdirSync(join(dir, "scenarios"), { recursive: true });
270
+ mkdirSync(join(dir, "diagrams"), { recursive: true });
271
+ writeFileSync(join(dir, "data", "site.json"), JSON.stringify({
272
+ product: "Product",
273
+ brand: "Product · docs",
274
+ brandAccent: "docs",
275
+ siteUrl: "https://docs.example.com",
276
+ knowledgePackage: "@scope/product-docs",
277
+ }, null, 2) + "\n");
278
+ writeFileSync(join(dir, "data", "catalog.json"), JSON.stringify({
279
+ roles: [
280
+ {
281
+ id: "developers",
282
+ label: "Developers",
283
+ tagline: "Build with the product",
284
+ description: "Engineers integrating the product.",
285
+ },
286
+ ],
287
+ families: [
288
+ {
289
+ id: "core",
290
+ name: "Core",
291
+ tagline: "Start here",
292
+ description: "Foundational books",
293
+ color: "#0f62fe",
294
+ },
295
+ ],
296
+ books: [],
297
+ }, null, 2) + "\n");
298
+ writeFileSync(join(dir, "data", "use-cases.json"), JSON.stringify({ useCases: [] }, null, 2) + "\n");
299
+ writeFileSync(join(dir, "README.md"), `# Docs library\n\nAuthor explicitly. Build with Docify. Do not ask Docify to discover product code.\n`);
300
+ console.log(`Initialized docs library at ${dir}`);
26
301
  process.exit(0);
27
302
  }
28
- if (cmd === "use-case") {
29
- if (!id) {
30
- usage();
303
+ if (cmd === "scaffold") {
304
+ const type = args[1];
305
+ const id = args[2] || "new-item";
306
+ if (!type || !TEMPLATES[type]) {
307
+ console.error("scaffold type required: concept|guide|scenario|decision|diagram|flow|visual|tutorial");
31
308
  process.exit(1);
32
309
  }
33
- const md = docify.getUseCaseMarkdown(id);
34
- if (!md) {
35
- console.error(`Unknown use case: ${id}`);
36
- process.exit(1);
310
+ const root = contentRootFromArgs();
311
+ const tpl = TEMPLATES[type](id);
312
+ let dest;
313
+ if (type === "diagram" || type === "flow") {
314
+ mkdirSync(join(root, "diagrams"), { recursive: true });
315
+ const diagramsPath = join(root, "diagrams", "diagrams.json");
316
+ const existing = existsSync(diagramsPath)
317
+ ? JSON.parse(readFileSync(diagramsPath, "utf8"))
318
+ : { diagrams: [] };
319
+ existing.diagrams = existing.diagrams || [];
320
+ existing.diagrams.push(JSON.parse(tpl));
321
+ writeFileSync(diagramsPath, JSON.stringify(existing, null, 2) + "\n");
322
+ console.log(`Appended diagram ${id} to ${diagramsPath}`);
323
+ process.exit(0);
37
324
  }
38
- process.stdout.write(md);
325
+ if (type === "visual") {
326
+ dest = join(root, "visuals", "visuals.json");
327
+ mkdirSync(dirname(dest), { recursive: true });
328
+ const existing = existsSync(dest)
329
+ ? JSON.parse(readFileSync(dest, "utf8"))
330
+ : { visuals: [] };
331
+ existing.visuals = existing.visuals || [];
332
+ existing.visuals.push(JSON.parse(tpl));
333
+ writeFileSync(dest, JSON.stringify(existing, null, 2) + "\n");
334
+ console.log(`Appended visual ${id} to ${dest}`);
335
+ process.exit(0);
336
+ }
337
+ const dirMap = {
338
+ concept: "concepts",
339
+ guide: "guides",
340
+ scenario: "scenarios",
341
+ decision: "decisions",
342
+ tutorial: "tutorials",
343
+ };
344
+ dest = join(root, dirMap[type], `${id}.md`);
345
+ mkdirSync(dirname(dest), { recursive: true });
346
+ writeFileSync(dest, tpl);
347
+ console.log(`Wrote ${dest}`);
39
348
  process.exit(0);
40
349
  }
41
- if (cmd === "book") {
42
- if (!id || !audience) {
43
- usage();
44
- process.exit(1);
350
+ if (cmd === "validate") {
351
+ const tutorialsOnly = args[1] === "tutorials";
352
+ const root = tutorialsOnly
353
+ ? contentRootFromArgs(args[2] ? resolve(args[2]) : process.cwd())
354
+ : contentRootFromArgs();
355
+ const catalog = loadCatalog(join(root, "data", "catalog.json"));
356
+ const useCases = loadUseCases(join(root, "data", "use-cases.json"));
357
+ const seqPath = join(root, "data", "sequences.json");
358
+ const sequences = existsSync(seqPath) ? loadSequences(seqPath) : undefined;
359
+ const knowledge = loadKnowledgeLibrary(root);
360
+ const result = validateDocifyLibrary({
361
+ catalog,
362
+ useCases,
363
+ sequences,
364
+ knowledge,
365
+ contentRoot: root,
366
+ strictUnderstanding: true,
367
+ });
368
+ if (tutorialsOnly) {
369
+ for (const t of knowledge.tutorials) {
370
+ if (t.runnable && !t.verifyCommand) {
371
+ result.warnings.push({
372
+ level: "warning",
373
+ code: "tutorial-verify",
374
+ message: `Runnable tutorial ${t.id} missing verifyCommand`,
375
+ });
376
+ }
377
+ }
45
378
  }
46
- const md = docify.getBookMarkdown(id, audience);
47
- if (!md) {
48
- console.error(`Unknown book/audience: ${id} ${audience}`);
379
+ for (const w of result.warnings)
380
+ console.warn(`WARN ${w.code}: ${w.message}`);
381
+ for (const e of result.errors)
382
+ console.error(`ERR ${e.code}: ${e.message}`);
383
+ if (!result.ok)
49
384
  process.exit(1);
50
- }
51
- process.stdout.write(md);
385
+ console.log(`OK — validated ${root}`);
386
+ process.exit(0);
387
+ }
388
+ if (cmd === "publish") {
389
+ await runPublish();
52
390
  process.exit(0);
53
391
  }
392
+ if (cmd === "build") {
393
+ const root = contentRootFromArgs();
394
+ const { buildDocifyLibrary } = await import("@x12i/docify-export");
395
+ const outDir = join(root, "dist", "bundle");
396
+ await buildDocifyLibrary({
397
+ contentRoot: root,
398
+ outDir,
399
+ tryPdf: false,
400
+ });
401
+ console.log(`Built ${outDir}`);
402
+ process.exit(0);
403
+ }
404
+ if (cmd === "serve" || cmd === "pack" || cmd === "export") {
405
+ console.log(`${cmd}: use product scripts (docs.mjs / publish-docs.mjs) or docify-web serve <dist/web>. Framework APIs live in @x12i/docify-* packages.`);
406
+ process.exit(0);
407
+ }
408
+ // Optional knowledge SDK passthrough
409
+ try {
410
+ const here = dirname(fileURLToPath(import.meta.url));
411
+ const dogfood = join(here, "index.js");
412
+ if (existsSync(dogfood) && ["use-case", "book", "list-use-cases", "list-books"].includes(cmd)) {
413
+ const { docify } = await import("./index.js");
414
+ if (cmd === "list-use-cases") {
415
+ for (const uc of docify.listUseCases())
416
+ console.log(`${uc.id}\t${uc.title}`);
417
+ process.exit(0);
418
+ }
419
+ if (cmd === "list-books") {
420
+ for (const b of docify.listBooks()) {
421
+ console.log(`${b.id}\t${b.title}\t${b.audiences.join(",")}`);
422
+ }
423
+ process.exit(0);
424
+ }
425
+ if (cmd === "use-case") {
426
+ const id = args[1];
427
+ const md = docify.getUseCaseMarkdown(id);
428
+ if (!md) {
429
+ console.error(`Unknown use case: ${id}`);
430
+ process.exit(1);
431
+ }
432
+ process.stdout.write(md);
433
+ process.exit(0);
434
+ }
435
+ if (cmd === "book") {
436
+ const id = args[1];
437
+ const audience = args[2];
438
+ const md = docify.getBookMarkdown(id, audience);
439
+ if (!md) {
440
+ console.error(`Unknown book/audience: ${id} ${audience}`);
441
+ process.exit(1);
442
+ }
443
+ process.stdout.write(md);
444
+ process.exit(0);
445
+ }
446
+ }
447
+ }
448
+ catch {
449
+ // ignore
450
+ }
54
451
  usage();
55
452
  process.exit(1);
56
453
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAElD,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CAAC;;;;;CAKf,CAAC,CAAC;AACH,CAAC;AAED,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;IAC/C,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,QAAqC,CAAC,CAAC;IAC7E,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,EAAE,CAAC;AACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}