create-thally-docs 0.10.23 → 0.10.26

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 CHANGED
@@ -1,10 +1,9 @@
1
1
  # create-thally-docs
2
2
 
3
- Scaffold the first customer-facing knowledge surface in a
4
- [Thally](https://github.com/thallylabs/thally) product-knowledge pipeline. The
5
- result is an open documentation site that serves every page to humans as
6
- polished HTML and to agents as structured JSON, JSON-LD, and Markdown from the
7
- same URL.
3
+ Scaffold an open-source [Thally](https://github.com/thallylabs/thally) docs
4
+ site for people, search engines, and AI tools. The result keeps your source in
5
+ Git and publishes each page as HTML, Markdown, structured JSON, JSON-LD, and
6
+ agent discovery files.
8
7
 
9
8
  ## Quick start
10
9
 
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readStarterReleaseManifest
4
- } from "./chunk-DMPW77OB.js";
4
+ } from "./chunk-AC3VR55N.js";
5
5
  import {
6
6
  STABLE_SCAFFOLD_RELEASE
7
- } from "./chunk-AJAB2TTJ.js";
7
+ } from "./chunk-3B6CW5VF.js";
8
8
 
9
9
  // src/download.ts
10
10
  import { Readable, Transform, pipeline } from "stream";
@@ -3,19 +3,19 @@
3
3
  // src/stable-scaffold-release.json
4
4
  var stable_scaffold_release_default = {
5
5
  schemaVersion: 1,
6
- id: "2026-09-02.35ae4423.8aec7e21",
6
+ id: "2026-09-05.b8a69237.2c73d8c3",
7
7
  source: {
8
8
  repository: "thallylabs/starter",
9
- commitSha: "35ae442319dac8db8b8fd07aa8edb092f571a5c2",
10
- treeSha: "d32386bb2de59c0ce40880d0cc9cdadf3ccd8687",
11
- archiveUrl: "https://codeload.github.com/thallylabs/starter/tar.gz/35ae442319dac8db8b8fd07aa8edb092f571a5c2",
9
+ commitSha: "b8a6923724e7dd7d16e75b50531e097a47e77682",
10
+ treeSha: "4e0426e44b4216e02e3c7dd50a543a7d1b94e959",
11
+ archiveUrl: "https://codeload.github.com/thallylabs/starter/tar.gz/b8a6923724e7dd7d16e75b50531e097a47e77682",
12
12
  manifestPath: "starter-release.json",
13
- manifestSha256: "f84917a7558af9058d1b97c8f6c443c5a9f86c4bcf54edc01ba62abce6a4e5d6"
13
+ manifestSha256: "e1e7962089419a0de68d513c7153555cf388338b25261ed978332abd581b8589"
14
14
  },
15
15
  runtime: {
16
16
  repository: "thallylabs/thally",
17
- commitSha: "8aec7e211bc5428b48fac34b8f80dc0168ec4d19",
18
- treeSha: "3587a31f3b6faf9f38635ff04c15f1c06721159c",
17
+ commitSha: "2c73d8c312b290598a4335ef77c9e04d8cbe1b4b",
18
+ treeSha: "930c8a4974300649852769e4fcdab2798c4b3b79",
19
19
  contentSource: "assets",
20
20
  identityContractVersion: 1
21
21
  },
@@ -24,6 +24,66 @@ var stable_scaffold_release_default = {
24
24
 
25
25
  // src/previous-scaffold-releases.json
26
26
  var previous_scaffold_releases_default = [
27
+ {
28
+ schemaVersion: 1,
29
+ id: "2026-09-02.814f1f54.cef2fe3b",
30
+ source: {
31
+ repository: "thallylabs/starter",
32
+ commitSha: "814f1f54f5a53a129c552941124d81307dc8b048",
33
+ treeSha: "03f37cd5e7c504f92b517f8b4194f4b9294ed4bf",
34
+ archiveUrl: "https://codeload.github.com/thallylabs/starter/tar.gz/814f1f54f5a53a129c552941124d81307dc8b048",
35
+ manifestPath: "starter-release.json",
36
+ manifestSha256: "46804f563d00e02783c0aa963e5c3dcf932ae11134e2c8f2843faff4fb4e1047"
37
+ },
38
+ runtime: {
39
+ repository: "thallylabs/thally",
40
+ commitSha: "cef2fe3b11895cf6ce60d17177ac97200f975507",
41
+ treeSha: "0edafb000e3fb477f0f2eac93e262b4c07127851",
42
+ contentSource: "assets",
43
+ identityContractVersion: 1
44
+ },
45
+ starterVersion: 2
46
+ },
47
+ {
48
+ schemaVersion: 1,
49
+ id: "2026-09-02.e29a6539.b84cbc74",
50
+ source: {
51
+ repository: "thallylabs/starter",
52
+ commitSha: "e29a653933aea5c38a24e773e2f174f1e7893930",
53
+ treeSha: "0b4bc19b79deb3f43a5a2f47de8954f74b0ebdf5",
54
+ archiveUrl: "https://codeload.github.com/thallylabs/starter/tar.gz/e29a653933aea5c38a24e773e2f174f1e7893930",
55
+ manifestPath: "starter-release.json",
56
+ manifestSha256: "ccb4f7e8bf1c4e7b9ba5c5918b627289216e50de7c7500ad34225d1b9e906abd"
57
+ },
58
+ runtime: {
59
+ repository: "thallylabs/thally",
60
+ commitSha: "b84cbc74161e2103adf7e8abd79b79e09cb34106",
61
+ treeSha: "30f1d213cb5e4a4b8c61145277be129d6ff07063",
62
+ contentSource: "assets",
63
+ identityContractVersion: 1
64
+ },
65
+ starterVersion: 2
66
+ },
67
+ {
68
+ schemaVersion: 1,
69
+ id: "2026-09-02.35ae4423.8aec7e21",
70
+ source: {
71
+ repository: "thallylabs/starter",
72
+ commitSha: "35ae442319dac8db8b8fd07aa8edb092f571a5c2",
73
+ treeSha: "d32386bb2de59c0ce40880d0cc9cdadf3ccd8687",
74
+ archiveUrl: "https://codeload.github.com/thallylabs/starter/tar.gz/35ae442319dac8db8b8fd07aa8edb092f571a5c2",
75
+ manifestPath: "starter-release.json",
76
+ manifestSha256: "f84917a7558af9058d1b97c8f6c443c5a9f86c4bcf54edc01ba62abce6a4e5d6"
77
+ },
78
+ runtime: {
79
+ repository: "thallylabs/thally",
80
+ commitSha: "8aec7e211bc5428b48fac34b8f80dc0168ec4d19",
81
+ treeSha: "3587a31f3b6faf9f38635ff04c15f1c06721159c",
82
+ contentSource: "assets",
83
+ identityContractVersion: 1
84
+ },
85
+ starterVersion: 2
86
+ },
27
87
  {
28
88
  schemaVersion: 1,
29
89
  id: "2026-09-02.6754e995.53facc72",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  STABLE_SCAFFOLD_RELEASE
4
- } from "./chunk-AJAB2TTJ.js";
4
+ } from "./chunk-3B6CW5VF.js";
5
5
 
6
6
  // src/starter-sync.ts
7
7
  import { createHash } from "crypto";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-ORUAMPNF.js";
6
6
  import {
7
7
  downloadStarter
8
- } from "./chunk-FCGVK2SJ.js";
8
+ } from "./chunk-2RWSXKSV.js";
9
9
 
10
10
  // src/scaffold.ts
11
11
  import { existsSync, mkdirSync, readdirSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  initGit,
4
4
  installDeps,
5
5
  scaffold
6
- } from "./chunk-JW72Y2YF.js";
6
+ } from "./chunk-BBRZGMM6.js";
7
7
 
8
8
  // src/migrate/index.ts
9
9
  import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "fs";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  migrateDocs
4
- } from "./chunk-JWTHIV4D.js";
4
+ } from "./chunk-V5M5JVUF.js";
5
5
  import {
6
6
  logo,
7
7
  readDocsJson,
@@ -9,11 +9,11 @@ import {
9
9
  slugify,
10
10
  success,
11
11
  writeDocsJson
12
- } from "./chunk-JW72Y2YF.js";
12
+ } from "./chunk-BBRZGMM6.js";
13
13
  import "./chunk-ORUAMPNF.js";
14
- import "./chunk-FCGVK2SJ.js";
15
- import "./chunk-DMPW77OB.js";
16
- import "./chunk-AJAB2TTJ.js";
14
+ import "./chunk-2RWSXKSV.js";
15
+ import "./chunk-AC3VR55N.js";
16
+ import "./chunk-3B6CW5VF.js";
17
17
 
18
18
  // src/index.ts
19
19
  import { existsSync as existsSync3, readdirSync as readdirSync2 } from "fs";
@@ -204,19 +204,30 @@ import { join, extname, relative } from "path";
204
204
  import { execFileSync } from "child_process";
205
205
 
206
206
  // src/frontmatter.ts
207
- import matter from "gray-matter";
208
- var FRONTMATTER_OPTIONS = {
209
- engines: {
210
- javascript: () => ({}),
211
- js: () => ({})
212
- }
213
- };
207
+ import { parse as parseYaml } from "yaml";
214
208
  function parseFrontmatter(raw) {
215
- return matter(raw, FRONTMATTER_OPTIONS);
209
+ const source = raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw;
210
+ const opening = /^---([^\r\n]*)\r?\n/.exec(source);
211
+ if (!opening || opening[1].startsWith("-")) return { content: source, data: {} };
212
+ const language = opening[1].trim().toLowerCase();
213
+ const remainder = source.slice(opening[0].length);
214
+ const closing = /^---[ \t]*\r?$/m.exec(remainder);
215
+ const matter = closing ? remainder.slice(0, closing.index) : remainder;
216
+ let content = closing ? remainder.slice(closing.index + closing[0].length) : "";
217
+ if (content.startsWith("\r\n")) content = content.slice(2);
218
+ else if (content.startsWith("\n")) content = content.slice(1);
219
+ if (matter.trim() === "" || !["", "yaml", "yml"].includes(language)) {
220
+ return { content, data: {} };
221
+ }
222
+ const parsed = parseYaml(matter);
223
+ return {
224
+ content,
225
+ data: parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {}
226
+ };
216
227
  }
217
228
 
218
229
  // src/check.ts
219
- import { parse as parseYaml } from "yaml";
230
+ import { parse as parseYaml2 } from "yaml";
220
231
  function gitLocal(projectDir, args2) {
221
232
  try {
222
233
  const out = execFileSync("git", args2, { cwd: projectDir, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
@@ -297,8 +308,16 @@ function scanMdx(dir, results) {
297
308
  }
298
309
  function addOrphanToNav(projectDir, pageId) {
299
310
  const config = readDocsJson(projectDir);
300
- const tab = config.tabs.find((t) => !t.href && !t.api && t.groups && t.groups.length > 0);
301
- if (!tab?.groups) return;
311
+ const tab = config.tabs.find((candidate) => !candidate.href && !candidate.api && (candidate.pages?.length || candidate.groups?.length));
312
+ if (!tab) return;
313
+ if (tab.pages) {
314
+ if (!tab.pages.includes(pageId)) {
315
+ tab.pages.push(pageId);
316
+ writeDocsJson(projectDir, config);
317
+ }
318
+ return;
319
+ }
320
+ if (!tab.groups) return;
302
321
  const lastGroup = tab.groups[tab.groups.length - 1];
303
322
  const existing = lastGroup.pages.filter((p) => typeof p === "string");
304
323
  if (!existing.includes(pageId)) {
@@ -358,7 +377,7 @@ function validateOpenApi(projectDir, source, issues) {
358
377
  let spec;
359
378
  try {
360
379
  const raw = readFileSync(specPath, "utf8");
361
- spec = source.endsWith(".json") ? JSON.parse(raw) : parseYaml(raw);
380
+ spec = source.endsWith(".json") ? JSON.parse(raw) : parseYaml2(raw);
362
381
  } catch (err) {
363
382
  issues.push({ severity: "error", message: `OpenAPI spec is not valid ${source.endsWith(".json") ? "JSON" : "YAML"}: ${err.message}`, file: source });
364
383
  return;
@@ -414,16 +433,18 @@ async function runCheck(projectDir, options) {
414
433
  const navPageIds = /* @__PURE__ */ new Set();
415
434
  const duplicates = /* @__PURE__ */ new Set();
416
435
  for (const tab of config.tabs) {
417
- if (tab.href && (!tab.groups || tab.groups.length === 0)) {
436
+ const hasNavigationNodes = Boolean(tab.pages?.length || tab.groups?.length);
437
+ if (tab.href && !hasNavigationNodes) {
418
438
  if (tab.href.startsWith("/")) navPageIds.add(tab.href.slice(1) || "introduction");
419
439
  continue;
420
440
  }
421
- if (tab.api && tab.api.navigation !== false) continue;
422
- if (!tab.groups || tab.groups.length === 0) {
441
+ if (tab.api && tab.api.navigation !== false && !hasNavigationNodes) continue;
442
+ if (!hasNavigationNodes) {
423
443
  issues.push({ severity: "error", message: `Tab "${tab.tab}" has no groups and no href \u2014 it will render empty` });
424
444
  continue;
425
445
  }
426
- collectNavPageIds(tab.groups.map((g) => g), navPageIds, duplicates);
446
+ collectNavPageIds(tab.pages ?? [], navPageIds, duplicates);
447
+ collectNavPageIds(tab.groups ?? [], navPageIds, duplicates);
427
448
  }
428
449
  for (const dup of duplicates) {
429
450
  issues.push({ severity: "warning", message: `[duplicate] "${dup}" appears more than once in docs.json` });
@@ -583,11 +604,11 @@ function getAllPageIds(config) {
583
604
  const skippedApiTabs = [];
584
605
  const hrefOnlyPages = [];
585
606
  for (const tab of config.tabs) {
586
- if (tab.api) {
607
+ if (tab.api && !tab.pages && !tab.groups) {
587
608
  skippedApiTabs.push(tab.tab);
588
609
  continue;
589
610
  }
590
- if (!tab.groups && tab.href) {
611
+ if (!tab.pages && !tab.groups && tab.href) {
591
612
  const pageId = tab.href.replace(/^\//, "");
592
613
  if (pageId && !seen.has(pageId)) {
593
614
  seen.add(pageId);
@@ -596,13 +617,10 @@ function getAllPageIds(config) {
596
617
  }
597
618
  continue;
598
619
  }
599
- if (!tab.groups) continue;
600
- for (const group of tab.groups) {
601
- for (const id of collectPageIds(group.pages)) {
602
- if (!seen.has(id)) {
603
- seen.add(id);
604
- ids.push(id);
605
- }
620
+ for (const id of collectPageIds([...tab.pages ?? [], ...tab.groups ?? []])) {
621
+ if (!seen.has(id)) {
622
+ seen.add(id);
623
+ ids.push(id);
606
624
  }
607
625
  }
608
626
  }
@@ -798,6 +816,91 @@ var valueFlags = /* @__PURE__ */ new Set([
798
816
  "--pages",
799
817
  "--platform"
800
818
  ]);
819
+ var commandFlags = {
820
+ scaffold: /* @__PURE__ */ new Set(["--help", "-h", "--yes", "-y", "--install", "--no-install"]),
821
+ migrate: /* @__PURE__ */ new Set([
822
+ "--help",
823
+ "-h",
824
+ "--api-key",
825
+ "--branch",
826
+ "--docs-dir",
827
+ "--into",
828
+ "--max-pages",
829
+ "--platform",
830
+ "--yes",
831
+ "-y"
832
+ ]),
833
+ check: /* @__PURE__ */ new Set(["--help", "-h", "--fix", "--ci", "--external", "--drift"]),
834
+ translate: /* @__PURE__ */ new Set([
835
+ "--help",
836
+ "-h",
837
+ "--api-key",
838
+ "--force",
839
+ "--locale",
840
+ "--model",
841
+ "--pages",
842
+ "--yes",
843
+ "-y"
844
+ ])
845
+ };
846
+ var mainHelp = `
847
+ Usage:
848
+ create-thally-docs [project-dir] [options]
849
+ create-thally-docs <command> [arguments] [options]
850
+
851
+ Commands:
852
+ migrate <source> [output-dir] Import an existing documentation project
853
+ check [project-dir] Validate content and navigation
854
+ translate [project-dir] Translate documentation into another locale
855
+
856
+ Scaffold options:
857
+ -y, --yes Accept defaults and skip interactive prompts
858
+ --install Install project dependencies after scaffolding
859
+ --no-install Skip dependency installation without prompting
860
+ -h, --help Show this help
861
+
862
+ Run create-thally-docs <command> --help for command-specific options.
863
+ `;
864
+ var commandHelp = {
865
+ migrate: `
866
+ Usage:
867
+ create-thally-docs migrate <github-or-docs-url> [output-dir] [options]
868
+
869
+ Options:
870
+ --into <dir> Migrate into an existing Thally project
871
+ --branch <name> Override the detected Git branch
872
+ --docs-dir <path> Override the detected documentation directory
873
+ --max-pages <count> Limit a public URL crawl to 1-1000 pages
874
+ --platform <name> Use mintlify, docusaurus, or auto
875
+ --api-key <key> Anthropic API key for non-Markdown conversion
876
+ -y, --yes Skip interactive prompts
877
+ -h, --help Show this help
878
+ `,
879
+ check: `
880
+ Usage:
881
+ create-thally-docs check [project-dir] [options]
882
+
883
+ Options:
884
+ --fix Add orphan pages to navigation when possible
885
+ --ci Use CI-oriented validation behavior
886
+ --external Check external links
887
+ --drift Check documentation provenance and freshness
888
+ -h, --help Show this help
889
+ `,
890
+ translate: `
891
+ Usage:
892
+ create-thally-docs translate [project-dir] --locale <code> [options]
893
+
894
+ Options:
895
+ --locale <code> Target locale code (required)
896
+ --pages <ids> Translate only the comma-separated page IDs
897
+ --force Overwrite existing translations
898
+ --api-key <key> Anthropic API key (defaults to ANTHROPIC_API_KEY)
899
+ --model <id> Claude model to use
900
+ -y, --yes Skip the confirmation prompt
901
+ -h, --help Show this help
902
+ `
903
+ };
801
904
  var positional = [];
802
905
  for (let i = 0; i < args.length; i++) {
803
906
  if (args[i].startsWith("-")) {
@@ -815,6 +918,21 @@ function getFlagValue(flag) {
815
918
  }
816
919
  return void 0;
817
920
  }
921
+ function resolveCommand(subcommand) {
922
+ if (subcommand === "migrate" || subcommand === "check" || subcommand === "translate") {
923
+ return subcommand;
924
+ }
925
+ return "scaffold";
926
+ }
927
+ function printHelp(command) {
928
+ console.log(command === "scaffold" ? mainHelp : commandHelp[command]);
929
+ }
930
+ function validateFlags(command) {
931
+ const unknownFlag = flags.find((flag) => !commandFlags[command].has(flag));
932
+ if (!unknownFlag) return;
933
+ const helpCommand = command === "scaffold" ? "" : ` ${command}`;
934
+ throw new Error(`Unknown option "${unknownFlag}". Run create-thally-docs${helpCommand} --help for usage.`);
935
+ }
818
936
  async function runMigrateCommand() {
819
937
  let sourceUrl = positional[1];
820
938
  if (!sourceUrl) {
@@ -938,6 +1056,12 @@ async function runTranslateSubcommand() {
938
1056
  }
939
1057
  async function main() {
940
1058
  const subcommand = positional[0];
1059
+ const command = resolveCommand(subcommand);
1060
+ if (flags.includes("--help") || flags.includes("-h")) {
1061
+ printHelp(command);
1062
+ return;
1063
+ }
1064
+ validateFlags(command);
941
1065
  if (subcommand === "migrate") {
942
1066
  await runMigrateCommand();
943
1067
  } else if (subcommand === "check") {
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  migrateDocs
4
- } from "../chunk-JWTHIV4D.js";
5
- import "../chunk-JW72Y2YF.js";
4
+ } from "../chunk-V5M5JVUF.js";
5
+ import "../chunk-BBRZGMM6.js";
6
6
  import "../chunk-ORUAMPNF.js";
7
- import "../chunk-FCGVK2SJ.js";
8
- import "../chunk-DMPW77OB.js";
9
- import "../chunk-AJAB2TTJ.js";
7
+ import "../chunk-2RWSXKSV.js";
8
+ import "../chunk-AC3VR55N.js";
9
+ import "../chunk-3B6CW5VF.js";
10
10
  export {
11
11
  migrateDocs
12
12
  };
package/dist/release.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  STABLE_SCAFFOLD_RELEASE,
4
4
  SUPPORTED_SCAFFOLD_RELEASES,
5
5
  isStableScaffoldRelease
6
- } from "./chunk-AJAB2TTJ.js";
6
+ } from "./chunk-3B6CW5VF.js";
7
7
  export {
8
8
  STABLE_SCAFFOLD_RELEASE,
9
9
  SUPPORTED_SCAFFOLD_RELEASES,
package/dist/scaffold.js CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  scaffold
4
- } from "./chunk-JW72Y2YF.js";
4
+ } from "./chunk-BBRZGMM6.js";
5
5
  import "./chunk-ORUAMPNF.js";
6
6
  import {
7
7
  STARTER_ARCHIVE_ROOT,
8
8
  STARTER_COMMIT_SHA,
9
9
  STARTER_REPOSITORY,
10
10
  validateStarterArchiveEntry
11
- } from "./chunk-FCGVK2SJ.js";
12
- import "./chunk-DMPW77OB.js";
11
+ } from "./chunk-2RWSXKSV.js";
12
+ import "./chunk-AC3VR55N.js";
13
13
  import {
14
14
  STABLE_SCAFFOLD_RELEASE
15
- } from "./chunk-AJAB2TTJ.js";
15
+ } from "./chunk-3B6CW5VF.js";
16
16
  export {
17
17
  STABLE_SCAFFOLD_RELEASE,
18
18
  STARTER_ARCHIVE_ROOT,
@@ -8,8 +8,8 @@ import {
8
8
  planStarterRuntimeSync,
9
9
  readStarterReleaseManifest,
10
10
  starterManifestSha256
11
- } from "./chunk-DMPW77OB.js";
12
- import "./chunk-AJAB2TTJ.js";
11
+ } from "./chunk-AC3VR55N.js";
12
+ import "./chunk-3B6CW5VF.js";
13
13
  export {
14
14
  applyStarterRuntimeSyncPlan,
15
15
  classifyStarterPath,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  downloadStarter
4
- } from "./chunk-FCGVK2SJ.js";
4
+ } from "./chunk-2RWSXKSV.js";
5
5
  import {
6
6
  applyStarterRuntimeSyncPlan,
7
7
  mergeStarterOwnershipContracts,
@@ -9,11 +9,11 @@ import {
9
9
  planStarterRuntimeSync,
10
10
  readStarterReleaseManifest,
11
11
  starterManifestSha256
12
- } from "./chunk-DMPW77OB.js";
12
+ } from "./chunk-AC3VR55N.js";
13
13
  import {
14
14
  STABLE_SCAFFOLD_RELEASE,
15
15
  SUPPORTED_SCAFFOLD_RELEASES
16
- } from "./chunk-AJAB2TTJ.js";
16
+ } from "./chunk-3B6CW5VF.js";
17
17
 
18
18
  // src/starter-update.ts
19
19
  import {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-thally-docs",
3
- "version": "0.10.23",
4
- "description": "Scaffold the first documentation surface in a Thally product-knowledge pipeline.",
3
+ "version": "0.10.26",
4
+ "description": "Scaffold an open-source Thally docs site for people, search engines, and AI tools.",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=18"
@@ -44,8 +44,7 @@
44
44
  "dependencies": {
45
45
  "@anthropic-ai/sdk": "^0.36.0",
46
46
  "@inquirer/prompts": "^7.0.0",
47
- "@thallylabs/migrate": "0.2.2",
48
- "gray-matter": "^4.0.3",
47
+ "@thallylabs/migrate": "0.2.4",
49
48
  "p-limit": "^6.1.0",
50
49
  "tar": "^7.5.22",
51
50
  "yaml": "^2.6.0"
@@ -64,7 +63,7 @@
64
63
  "mdx",
65
64
  "nextjs",
66
65
  "ai",
67
- "agent-native",
66
+ "product-knowledge",
68
67
  "mcp",
69
68
  "create"
70
69
  ],