@doxbrix/doxloop 0.1.4 → 0.2.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 (357) hide show
  1. package/CHANGELOG.md +1153 -0
  2. package/README.md +422 -226
  3. package/assets/doxbrix-preview.css +77 -15
  4. package/contracts/agent-events-v1.schema.json +1 -0
  5. package/contracts/coverage-v1.schema.json +59 -0
  6. package/contracts/drift-v1.schema.json +1 -0
  7. package/contracts/evaluation-v1.schema.json +62 -0
  8. package/contracts/quality-codes-v1.json +1 -0
  9. package/contracts/quality-report-v1.schema.json +1 -0
  10. package/contracts/validation-v1.schema.json +1 -0
  11. package/dist/agent-failure.d.ts +36 -0
  12. package/dist/agent-failure.js +98 -0
  13. package/dist/agent-isolation.d.ts +17 -0
  14. package/dist/agent-isolation.js +94 -0
  15. package/dist/agent-log.d.ts +197 -0
  16. package/dist/agent-log.js +1094 -0
  17. package/dist/agent-process.d.ts +63 -0
  18. package/dist/agent-process.js +128 -0
  19. package/dist/agent-reply.d.ts +47 -0
  20. package/dist/agent-reply.js +315 -0
  21. package/dist/agents.d.ts +40 -4
  22. package/dist/agents.js +115 -11
  23. package/dist/api-coverage.d.ts +11 -0
  24. package/dist/api-coverage.js +72 -0
  25. package/dist/application-probe.d.ts +28 -0
  26. package/dist/application-probe.js +93 -0
  27. package/dist/application-url.d.ts +14 -0
  28. package/dist/application-url.js +26 -0
  29. package/dist/args.js +15 -0
  30. package/dist/artifact-deploy.d.ts +9 -0
  31. package/dist/artifact-deploy.js +28 -8
  32. package/dist/assets.d.ts +72 -0
  33. package/dist/assets.js +382 -0
  34. package/dist/auth.d.ts +10 -0
  35. package/dist/auth.js +38 -9
  36. package/dist/author.d.ts +206 -4
  37. package/dist/author.js +1650 -52
  38. package/dist/authoring-batches.d.ts +190 -0
  39. package/dist/authoring-batches.js +489 -0
  40. package/dist/authoring-postpass.d.ts +79 -0
  41. package/dist/authoring-postpass.js +1289 -0
  42. package/dist/authoring-progress.d.ts +95 -0
  43. package/dist/authoring-progress.js +269 -0
  44. package/dist/autosync.d.ts +56 -0
  45. package/dist/autosync.js +442 -0
  46. package/dist/batch-artifacts.d.ts +81 -0
  47. package/dist/batch-artifacts.js +412 -0
  48. package/dist/batch-limits.d.ts +37 -0
  49. package/dist/batch-limits.js +80 -0
  50. package/dist/branding.d.ts +41 -0
  51. package/dist/branding.js +229 -0
  52. package/dist/bundle-upload.d.ts +26 -0
  53. package/dist/bundle-upload.js +99 -0
  54. package/dist/capture-auth.d.ts +95 -0
  55. package/dist/capture-auth.js +204 -0
  56. package/dist/capture.d.ts +48 -0
  57. package/dist/capture.js +20 -1
  58. package/dist/cli.js +839 -32
  59. package/dist/content-links.d.ts +10 -0
  60. package/dist/content-links.js +49 -0
  61. package/dist/contract-validation.d.ts +4 -0
  62. package/dist/contract-validation.js +25 -0
  63. package/dist/coverage-actions.d.ts +8 -0
  64. package/dist/coverage-actions.js +71 -0
  65. package/dist/coverage-resolutions.d.ts +16 -0
  66. package/dist/coverage-resolutions.js +58 -0
  67. package/dist/db.d.ts +37 -0
  68. package/dist/db.js +288 -0
  69. package/dist/demo.d.ts +12 -0
  70. package/dist/demo.js +122 -0
  71. package/dist/deploy-credentials.d.ts +7 -0
  72. package/dist/deploy-credentials.js +76 -0
  73. package/dist/deploy-targets/github-pages.d.ts +3 -0
  74. package/dist/deploy-targets/github-pages.js +100 -0
  75. package/dist/deploy-targets/index.d.ts +8 -0
  76. package/dist/deploy-targets/index.js +78 -0
  77. package/dist/deploy-targets/netlify.d.ts +3 -0
  78. package/dist/deploy-targets/netlify.js +49 -0
  79. package/dist/deploy-targets/types.d.ts +32 -0
  80. package/dist/deploy-targets/types.js +2 -0
  81. package/dist/deploy-targets/vercel.d.ts +3 -0
  82. package/dist/deploy-targets/vercel.js +95 -0
  83. package/dist/deploy.d.ts +9 -0
  84. package/dist/deploy.js +87 -13
  85. package/dist/deterministic-capture.d.ts +90 -0
  86. package/dist/deterministic-capture.js +435 -0
  87. package/dist/direct-edit.d.ts +40 -0
  88. package/dist/direct-edit.js +159 -0
  89. package/dist/docs-crawl.d.ts +86 -0
  90. package/dist/docs-crawl.js +536 -0
  91. package/dist/docs-site.d.ts +49 -0
  92. package/dist/docs-site.js +233 -0
  93. package/dist/doctor.js +8 -0
  94. package/dist/documentation-collections.d.ts +23 -0
  95. package/dist/documentation-collections.js +191 -0
  96. package/dist/documentation-plan.d.ts +253 -0
  97. package/dist/documentation-plan.js +2563 -0
  98. package/dist/doxbrix-build.d.ts +19 -0
  99. package/dist/doxbrix-build.js +167 -0
  100. package/dist/doxbrix-markdown.d.ts +9 -0
  101. package/dist/doxbrix-markdown.js +115 -14
  102. package/dist/drift.d.ts +10 -0
  103. package/dist/drift.js +164 -0
  104. package/dist/evaluation.d.ts +46 -0
  105. package/dist/evaluation.js +113 -0
  106. package/dist/evidence-pack.d.ts +47 -0
  107. package/dist/evidence-pack.js +358 -0
  108. package/dist/evidence.d.ts +25 -0
  109. package/dist/evidence.js +175 -0
  110. package/dist/fs.d.ts +8 -2
  111. package/dist/fs.js +41 -11
  112. package/dist/generator-api.d.ts +89 -0
  113. package/dist/generator-preflight.d.ts +27 -0
  114. package/dist/generator-preflight.js +105 -0
  115. package/dist/generator-runtime.d.ts +7 -0
  116. package/dist/generator-runtime.js +17 -1
  117. package/dist/generators.d.ts +24 -2
  118. package/dist/generators.js +54 -1
  119. package/dist/git-delivery.d.ts +17 -0
  120. package/dist/git-delivery.js +123 -0
  121. package/dist/globs.d.ts +16 -0
  122. package/dist/globs.js +65 -0
  123. package/dist/glossary.d.ts +26 -0
  124. package/dist/glossary.js +179 -0
  125. package/dist/history.d.ts +106 -0
  126. package/dist/history.js +600 -0
  127. package/dist/html-markdown.d.ts +46 -0
  128. package/dist/html-markdown.js +423 -0
  129. package/dist/interactive.js +16 -15
  130. package/dist/job-events.d.ts +74 -0
  131. package/dist/job-events.js +377 -0
  132. package/dist/keep-awake.d.ts +50 -0
  133. package/dist/keep-awake.js +123 -0
  134. package/dist/local-source-snapshot.d.ts +20 -0
  135. package/dist/local-source-snapshot.js +61 -0
  136. package/dist/mintlify-detect.d.ts +3 -0
  137. package/dist/mintlify-detect.js +18 -0
  138. package/dist/mintlify-import.d.ts +75 -0
  139. package/dist/mintlify-import.js +190 -0
  140. package/dist/navigation.d.ts +98 -0
  141. package/dist/navigation.js +310 -0
  142. package/dist/openapi.d.ts +60 -0
  143. package/dist/openapi.js +439 -0
  144. package/dist/page-editor-bridge.d.ts +3 -0
  145. package/dist/page-editor-bridge.js +109 -0
  146. package/dist/page-editor-preview.d.ts +10 -0
  147. package/dist/page-editor-preview.js +55 -0
  148. package/dist/page-extension.d.ts +9 -0
  149. package/dist/page-extension.js +15 -0
  150. package/dist/page-metadata.d.ts +28 -0
  151. package/dist/page-metadata.js +166 -0
  152. package/dist/page-operations.d.ts +34 -0
  153. package/dist/page-operations.js +215 -0
  154. package/dist/page-routes.d.ts +4 -0
  155. package/dist/page-routes.js +61 -0
  156. package/dist/pages.d.ts +20 -0
  157. package/dist/pages.js +184 -0
  158. package/dist/plan-generator.d.ts +3 -0
  159. package/dist/plan-generator.js +21 -0
  160. package/dist/plan-navigation.d.ts +11 -0
  161. package/dist/plan-navigation.js +30 -0
  162. package/dist/planning-captures.d.ts +20 -0
  163. package/dist/planning-captures.js +143 -0
  164. package/dist/planning-research.d.ts +135 -0
  165. package/dist/planning-research.js +472 -0
  166. package/dist/planning-triage.d.ts +23 -0
  167. package/dist/planning-triage.js +131 -0
  168. package/dist/preview.d.ts +24 -0
  169. package/dist/preview.js +280 -29
  170. package/dist/project-detect.d.ts +36 -0
  171. package/dist/project-detect.js +251 -0
  172. package/dist/project-import.d.ts +54 -0
  173. package/dist/project-import.js +157 -0
  174. package/dist/project-lock.d.ts +6 -0
  175. package/dist/project-lock.js +96 -0
  176. package/dist/project-registry.d.ts +25 -0
  177. package/dist/project-registry.js +79 -0
  178. package/dist/project.d.ts +35 -3
  179. package/dist/project.js +388 -38
  180. package/dist/prompts.d.ts +9 -0
  181. package/dist/prompts.js +33 -4
  182. package/dist/proposal-replay.d.ts +32 -0
  183. package/dist/proposal-replay.js +99 -0
  184. package/dist/quality-claims.d.ts +8 -0
  185. package/dist/quality-claims.js +168 -0
  186. package/dist/quality-config.d.ts +5 -0
  187. package/dist/quality-config.js +84 -0
  188. package/dist/quality-contract.d.ts +37 -0
  189. package/dist/quality-contract.js +46 -0
  190. package/dist/quality-examples.d.ts +4 -0
  191. package/dist/quality-examples.js +233 -0
  192. package/dist/quality-gates.d.ts +16 -0
  193. package/dist/quality-gates.js +192 -0
  194. package/dist/quality-links.d.ts +7 -0
  195. package/dist/quality-links.js +149 -0
  196. package/dist/quality-lint.d.ts +6 -0
  197. package/dist/quality-lint.js +124 -0
  198. package/dist/quality-rendered.d.ts +11 -0
  199. package/dist/quality-rendered.js +222 -0
  200. package/dist/quality-schema.d.ts +3 -0
  201. package/dist/quality-schema.js +71 -0
  202. package/dist/release-notes.d.ts +44 -0
  203. package/dist/release-notes.js +183 -0
  204. package/dist/remote-monitor.d.ts +16 -0
  205. package/dist/remote-monitor.js +74 -0
  206. package/dist/remote-source.d.ts +34 -0
  207. package/dist/remote-source.js +426 -0
  208. package/dist/review-diff.d.ts +82 -0
  209. package/dist/review-diff.js +400 -0
  210. package/dist/review-learning.d.ts +11 -0
  211. package/dist/review-learning.js +60 -0
  212. package/dist/review-render.d.ts +38 -0
  213. package/dist/review-render.js +224 -0
  214. package/dist/review-report.d.ts +9 -0
  215. package/dist/review-report.js +89 -0
  216. package/dist/review-ui.d.ts +14 -0
  217. package/dist/review-ui.js +1248 -0
  218. package/dist/schedule.d.ts +78 -0
  219. package/dist/schedule.js +480 -0
  220. package/dist/screen-capture-provider.d.ts +52 -0
  221. package/dist/screen-capture-provider.js +218 -0
  222. package/dist/screenshot-workflow.d.ts +167 -0
  223. package/dist/screenshot-workflow.js +1237 -0
  224. package/dist/settings.d.ts +1 -1
  225. package/dist/settings.js +95 -7
  226. package/dist/site-export.d.ts +18 -0
  227. package/dist/site-export.js +87 -0
  228. package/dist/source-connectors.d.ts +33 -0
  229. package/dist/source-connectors.js +268 -0
  230. package/dist/source-discovery.d.ts +132 -0
  231. package/dist/source-discovery.js +823 -0
  232. package/dist/source-intelligence.d.ts +9 -0
  233. package/dist/source-intelligence.js +306 -0
  234. package/dist/sync-review.d.ts +28 -0
  235. package/dist/sync-review.js +264 -0
  236. package/dist/sync-runs.d.ts +192 -0
  237. package/dist/sync-runs.js +2244 -0
  238. package/dist/sync.d.ts +35 -0
  239. package/dist/sync.js +298 -32
  240. package/dist/text-diff.d.ts +9 -0
  241. package/dist/text-diff.js +59 -0
  242. package/dist/types.d.ts +946 -1
  243. package/dist/ui/assets/doxloop-logo-light-De7Nx7j7.png +0 -0
  244. package/dist/ui/assets/index-BHBYU2aG.css +1 -0
  245. package/dist/ui/assets/index-Cq3RPQiC.js +33 -0
  246. package/dist/ui/index.html +18 -0
  247. package/dist/ui-server.d.ts +83 -0
  248. package/dist/ui-server.js +3532 -0
  249. package/dist/usage-budget.d.ts +28 -0
  250. package/dist/usage-budget.js +90 -0
  251. package/dist/validation.d.ts +25 -1
  252. package/dist/validation.js +312 -26
  253. package/dist/workspace-tools.d.ts +54 -0
  254. package/dist/workspace-tools.js +123 -0
  255. package/docs/agent-compatibility.md +50 -28
  256. package/docs/ci-and-automation.md +105 -66
  257. package/docs/doxbrix-http-api.md +8 -1
  258. package/docs/existing-documentation.md +80 -0
  259. package/docs/generation-performance.md +108 -0
  260. package/docs/generator-authoring.md +68 -5
  261. package/docs/generator-selection.md +50 -13
  262. package/docs/mintlify-import.md +71 -0
  263. package/docs/openapi-security.md +25 -0
  264. package/docs/project-format.md +331 -36
  265. package/docs/release-quality.md +158 -0
  266. package/docs/releasing.md +72 -0
  267. package/docs/review-workflows.md +51 -0
  268. package/docs/security-model.md +102 -39
  269. package/docs/troubleshooting.md +226 -93
  270. package/package.json +46 -15
  271. package/scripts/test-auto-screenshot.mjs +172 -0
  272. package/skills/doxloop-authoring/SKILL.md +242 -361
  273. package/skills/doxloop-authoring/references/existing-documentation.md +94 -0
  274. package/skills/doxloop-authoring/references/navigation-architecture.md +18 -7
  275. package/skills/doxloop-authoring/references/page-depth.md +169 -0
  276. package/skills/doxloop-authoring/references/project-format.md +106 -7
  277. package/skills/doxloop-authoring/references/quality.md +10 -0
  278. package/skills/doxloop-authoring/references/screenshot-manifest.md +113 -0
  279. package/skills/doxloop-authoring/references/screenshots.md +149 -235
  280. package/skills/doxloop-authoring/references/workflows.md +76 -0
  281. package/skills/doxloop-doxbrix/SKILL.md +38 -22
  282. package/skills/doxloop-doxbrix/references/api-endpoints.md +15 -14
  283. package/skills/doxloop-doxbrix/references/components.md +30 -3
  284. package/skills/doxloop-doxbrix/references/manifest.md +3 -2
  285. package/vendor/doxbrix-import/LICENSE +202 -0
  286. package/vendor/doxbrix-import/README.md +17 -0
  287. package/vendor/doxbrix-import/UPSTREAM.json +47 -0
  288. package/vendor/doxbrix-import/dist/docs/frontmatter.d.ts +13 -0
  289. package/vendor/doxbrix-import/dist/docs/frontmatter.js +83 -0
  290. package/vendor/doxbrix-import/dist/docs/import.d.ts +21 -0
  291. package/vendor/doxbrix-import/dist/docs/import.js +147 -0
  292. package/vendor/doxbrix-import/dist/docs/manifest.d.ts +163 -0
  293. package/vendor/doxbrix-import/dist/docs/manifest.js +64 -0
  294. package/vendor/doxbrix-import/dist/docs/project.d.ts +25 -0
  295. package/vendor/doxbrix-import/dist/docs/project.js +77 -0
  296. package/vendor/doxbrix-import/dist/docs/starter.d.ts +4 -0
  297. package/vendor/doxbrix-import/dist/docs/starter.js +11 -0
  298. package/vendor/doxbrix-import/dist/importer.d.ts +227 -0
  299. package/vendor/doxbrix-import/dist/importer.js +1567 -0
  300. package/vendor/doxbrix-import/dist/mintlify-openapi.d.ts +37 -0
  301. package/vendor/doxbrix-import/dist/mintlify-openapi.js +305 -0
  302. package/vendor/doxbrix-import/dist/safe-path.d.ts +9 -0
  303. package/vendor/doxbrix-import/dist/safe-path.js +47 -0
  304. package/dist/agents.d.ts.map +0 -1
  305. package/dist/agents.js.map +0 -1
  306. package/dist/args.d.ts.map +0 -1
  307. package/dist/args.js.map +0 -1
  308. package/dist/artifact-deploy.d.ts.map +0 -1
  309. package/dist/artifact-deploy.js.map +0 -1
  310. package/dist/auth.d.ts.map +0 -1
  311. package/dist/auth.js.map +0 -1
  312. package/dist/author.d.ts.map +0 -1
  313. package/dist/author.js.map +0 -1
  314. package/dist/capture.d.ts.map +0 -1
  315. package/dist/capture.js.map +0 -1
  316. package/dist/cli.d.ts.map +0 -1
  317. package/dist/cli.js.map +0 -1
  318. package/dist/deploy.d.ts.map +0 -1
  319. package/dist/deploy.js.map +0 -1
  320. package/dist/deployment-visibility.d.ts.map +0 -1
  321. package/dist/deployment-visibility.js.map +0 -1
  322. package/dist/doctor.d.ts.map +0 -1
  323. package/dist/doctor.js.map +0 -1
  324. package/dist/doxbrix-markdown.d.ts.map +0 -1
  325. package/dist/doxbrix-markdown.js.map +0 -1
  326. package/dist/errors.d.ts.map +0 -1
  327. package/dist/errors.js.map +0 -1
  328. package/dist/fs.d.ts.map +0 -1
  329. package/dist/fs.js.map +0 -1
  330. package/dist/generator-api.d.ts.map +0 -1
  331. package/dist/generator-api.js.map +0 -1
  332. package/dist/generator-manager.d.ts.map +0 -1
  333. package/dist/generator-manager.js.map +0 -1
  334. package/dist/generator-runtime.d.ts.map +0 -1
  335. package/dist/generator-runtime.js.map +0 -1
  336. package/dist/generators.d.ts.map +0 -1
  337. package/dist/generators.js.map +0 -1
  338. package/dist/interactive.d.ts.map +0 -1
  339. package/dist/interactive.js.map +0 -1
  340. package/dist/preview.d.ts.map +0 -1
  341. package/dist/preview.js.map +0 -1
  342. package/dist/progress.d.ts.map +0 -1
  343. package/dist/progress.js.map +0 -1
  344. package/dist/project.d.ts.map +0 -1
  345. package/dist/project.js.map +0 -1
  346. package/dist/prompts.d.ts.map +0 -1
  347. package/dist/prompts.js.map +0 -1
  348. package/dist/settings.d.ts.map +0 -1
  349. package/dist/settings.js.map +0 -1
  350. package/dist/sync.d.ts.map +0 -1
  351. package/dist/sync.js.map +0 -1
  352. package/dist/types.d.ts.map +0 -1
  353. package/dist/types.js.map +0 -1
  354. package/dist/validation.d.ts.map +0 -1
  355. package/dist/validation.js.map +0 -1
  356. package/dist/version.d.ts.map +0 -1
  357. package/dist/version.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ # Generation performance and usage budgets
2
+
3
+ Planning saves useful browser screenshots while it explores the application.
4
+ The application research checkpoint records capture IDs, paths, visible states,
5
+ labels, alt text and review checks. The approved plan references those IDs in
6
+ `visuals.captureIds`, in the same order as `captureSequence`. A missing capture
7
+ uses an empty ID. New plans prefer meaningful saved images over fixed image
8
+ counts per page type. Explicit user requirements remain authoritative.
9
+
10
+ Generation copies selected, reviewed PNGs into the generator's asset directory.
11
+ Missing, corrupt, unreviewed or ambiguous captures remain pending. Missing states
12
+ run in short capture-only sessions before writing. Writers receive a compact
13
+ plan slice, relevant source excerpts, extracted English UI labels and saved
14
+ image descriptions. They choose and embed the images without browsing again.
15
+ Older plans without a capture catalogue use the separate capture stage.
16
+
17
+ Completed writing is checkpointed independently of capture and validation.
18
+ Resume retains written pages and verified captures; validation defects are sent
19
+ to targeted repairs. A crashed child can retry without cancelling the entire
20
+ run. An account-limit response stops further scheduling and retries immediately.
21
+
22
+ ## Limits
23
+
24
+ A plan shares one persistent usage ledger across planning, capture, writing,
25
+ repairs and resumed attempts: `.doxloop/plans/<id>/usage-budget.json`.
26
+ There is **no limit by default**: a run only stops when a cap is set
27
+ explicitly. Set `sync.budget.maxUsd` in the project, or the variables below,
28
+ to enforce one. The first reached limit stops active sessions and preserves
29
+ work.
30
+
31
+ Environment overrides, read when Doxloop starts a stage:
32
+
33
+ | Variable | Default | Meaning |
34
+ | --- | ---: | --- |
35
+ | `DOXLOOP_MAX_TOKENS` | unlimited | Total reported tokens for this plan, across attempts |
36
+ | `DOXLOOP_MAX_USD` | unlimited | Total reported dollars; overrides the project setting |
37
+ | `DOXLOOP_AUTHORING_PARALLEL` | 3 | Concurrent writer sessions (the first batch of a new site runs alone) |
38
+ | `DOXLOOP_AUTHORING_EFFORT` | plan's effort | Reasoning effort of the writer sessions (`low`…`max`) |
39
+ | `DOXLOOP_SUPPORT_EFFORT` | low | Reasoning effort of capture, fix, and retake sessions |
40
+ | `DOXLOOP_CAPTURE_GUIDES_PER_SESSION` | 3 | Guides per capture session (one sign-in each) |
41
+ | `DOXLOOP_AUTHORING_BATCH_PAGES` | 4 | Pages per writer session |
42
+ | `DOXLOOP_PLANNING_PARALLEL` | 2 | Concurrent research sessions (Gemini runs serially) |
43
+
44
+ Limits are enforced when agents report usage. An in-flight response may
45
+ overshoot; providers that report cost only on completion cannot be stopped
46
+ mid-response by cost alone. These counters are not the provider's five-hour
47
+ subscription allowance. Work done before this ledger existed is not backfilled.
48
+ A quota pause can resume after the provider reset. A Doxloop budget pause requires
49
+ explicitly raising its limit; resume does not reset the ledger.
50
+
51
+ New starter plans default to 5 pages and 15 captures. Standard and
52
+ comprehensive plans have no page cap: the evidence sets their size, up to the
53
+ 300-capture run maximum. A reviewer can still set a cap on the plan review's
54
+ batch-limits panel. Approved plans keep their existing scope. Reducing parallelism limits simultaneous spend, but does
55
+ not by itself reduce total tokens.
56
+
57
+ ## Comparing performance
58
+
59
+ Compare identical source snapshots, approved pages, capture states, model and
60
+ effort. Measure planning and authoring wall time separately, total reported
61
+ input/cache/output tokens, reported cost, missing-state browser calls, and final
62
+ validation outcome. Exclude idle time between attempts. Local fake-agent tests
63
+ verify reuse and recovery without consuming model allowance; a real-agent
64
+ comparison is needed before claiming a percentage saving.
65
+
66
+ Offline prompt comparison on the saved `vikunja7` first six-page batch:
67
+ the previous full-request construction was 40,000 bytes; the compact batch
68
+ construction was 10,208 bytes (74% smaller). This comparison holds page scope
69
+ constant and excludes tool results, source excerpts and model completions. It
70
+ is a prompt-size measurement, not a claim of 74% lower billed usage or latency.
71
+
72
+ ## Verifying a change without a run
73
+
74
+ `doxloop replay <run-directory>` copies a recorded run's workspace
75
+ (`.doxloop/runs/<run-id>`) and re-runs the end-of-generation pipeline over it:
76
+ capture status from the images on disk, the tolerant screenshot check, the
77
+ deterministic post-pass, starter cleanup, and the validation "Accept all"
78
+ performs. It prints every repair and the errors left, exits 1 when the accept
79
+ check would still fail, and never modifies the run folder. Keep the run
80
+ folders of runs that ended blocked: each is a regression fixture for the gate
81
+ that blocked it.
82
+
83
+
84
+ ## Planning research is scoped to the request
85
+
86
+ Planning research (product audit, application exploration, existing-site
87
+ audits) is the largest cost of an update run. Before any session starts,
88
+ Doxloop triages the update request:
89
+
90
+ | Request | Research | Planner |
91
+ |---|---|---|
92
+ | Navigation, icons, ordering, group names, branding, metadata | none | one session, given the current navigation and the icon names the generator can draw; returns preserved pages plus `workspaceInstructions` |
93
+ | Names existing pages (by file name or path) | product audit focused on those pages; application only when screenshots are required | one session from the focused brief |
94
+ | Product-wide, or adds pages on subjects not yet documented | full research, as a create run | one session from every brief |
95
+
96
+ Deterministic rules decide the clear cases. An ambiguous request gets one
97
+ short triage session that reads nothing and answers from the request and the
98
+ page list; if it fails, the full research runs. The decision is stored on the
99
+ plan (`research`) and shown as the first review advisory.
100
+
101
+ Briefs are keyed by source snapshot, capture intent, agent, model, and focus,
102
+ not by plan id, so a later plan on unchanged sources borrows the newest saved
103
+ product and existing-documentation briefs instead of auditing again. The
104
+ application brief is never borrowed: it names captures under its own plan.
105
+
106
+ Generation applies `workspaceInstructions` in one short session after the
107
+ pages are written, editing only the navigation configuration (or theme and
108
+ brand files) and never page content.
@@ -12,11 +12,37 @@ Export a default adapter created with `defineGenerator` from
12
12
  - package identity and version;
13
13
  - authoring skill name and directory;
14
14
  - content root, page extensions, ignored output, and content format;
15
+ - native navigation files used to translate a generator-neutral documentation
16
+ plan into the framework's own sidebar, menu, or index;
15
17
  - native build command and output directory;
16
18
  - scaffold, preview, and validation implementations;
17
19
  - an optional local-asset resolver for root-relative public assets outside the
18
- content directory; and
19
- - an optional page reader for non-Markdown formats.
20
+ content directory;
21
+ - an optional page reader for non-Markdown formats;
22
+ - an optional `writeNavigation` hook that adds, removes, or renames a page in
23
+ the generator's own navigation file (MkDocs edits `nav` in `mkdocs.yml`
24
+ through the YAML document model so comments and Python tags survive;
25
+ Markdoc rewrites `navigation.json`); and
26
+ - an optional `renderPage` hook that returns HTML for one page without the
27
+ native build, for previews (the static HTML adapter returns the page's
28
+ `<main>` landmark);
29
+ - optional `readNavigationTree` and `writeNavigationTree` hooks that expose
30
+ the whole navigation as a tree of page and group nodes, so the control
31
+ center's **Navigation** view can reorder, group, and relabel it (MkDocs maps
32
+ its `nav` list, including `Title: path` and `Section: [...]` entries, and
33
+ writes it back through the YAML document model);
34
+ - an optional `project.assets` location naming the directory uploads land in
35
+ and the public prefix pages use to reference them (the control center
36
+ otherwise uses the generator's conventional directory, such as `static/img`
37
+ for Docusaurus or `docs/assets` for MkDocs); and
38
+ - an optional `theme.configFile` naming the file the **Branding** panel should
39
+ point people at, since only the built-in Doxbrix theme is edited in place.
40
+
41
+ Adapters without `writeNavigation` are treated as file-system driven: Doxloop
42
+ does not edit their configuration. Adapters without the tree hooks are shown
43
+ read-only in the navigation editor with the name of their navigation file.
44
+ Adapters without `renderPage` fall back to the control center's generic
45
+ Markdown preview.
20
46
 
21
47
  Package metadata should include:
22
48
 
@@ -31,14 +57,38 @@ Package metadata should include:
31
57
  }
32
58
  ```
33
59
 
60
+ Adapters declare planning boundaries without implementing a second plan
61
+ schema:
62
+
63
+ ```ts
64
+ planning: {
65
+ navigationFiles: ['framework.config.js', 'sidebar.json'],
66
+ }
67
+ ```
68
+
69
+ `navigationFiles` are project-relative and identify files an approved plan may
70
+ require the authoring agent to update. Page grouping and ordering remain in the
71
+ core generator-neutral plan; the format skill translates them into native
72
+ syntax.
73
+
34
74
  ## Responsibilities
35
75
 
36
76
  Scaffolding creates a minimal native project with explicit starter markers that
37
- must fail release validation until authoring replaces them. Preview runs the
77
+ must fail release validation until authoring replaces them (`<!-- doxloop:starter-page -->`
78
+ in Markdown and HTML, `{/* doxloop:starter-page */}` in MDX, and the
79
+ `.. doxloop:starter-page` comment in reStructuredText). Preview runs the
38
80
  native development workflow without editing generated output. Validation checks
39
81
  native navigation, configuration, metadata, routes, and conventions; shared
40
82
  validation checks professional content, local links, placeholders, and secrets.
41
83
 
84
+ Navigation validation must understand the site as the framework builds it,
85
+ not only the two-page scaffold: nested indexes, section pages, autogenerated
86
+ groups, and multi-sidebar objects. When the configuration cannot be read
87
+ statically (a theme, a plugin, a function, an import), return a single
88
+ `navigationUnverifiedIssue` warning from `@doxbrix/doxloop/generator-runtime`
89
+ instead of `unnavigated-page` errors; `contentRelativePages` from the same
90
+ module gives content-relative page paths for comparison.
91
+
42
92
  The format skill must use `$doxloop-authoring`, route all reader pages through
43
93
  native navigation, document native components and theme mapping, identify
44
94
  generated directories, and require both `doxloop test` and the strict native
@@ -55,5 +105,18 @@ packages declare a compatible core peer dependency and are published after the
55
105
  matching core version.
56
106
 
57
107
  Tests should scaffold, load, validate, install the format skill, build, and
58
- exercise preview failure behavior. Skill validation checks frontmatter,
59
- metadata, local reference links, shared-skill delegation, and generator routing.
108
+ exercise preview failure behavior. `src/generator-navigation.test.ts` holds a
109
+ nested-navigation fixture per generator; add one for any adapter you change.
110
+ Skill validation checks frontmatter, metadata, local reference links (fenced
111
+ code is skipped), shared-skill delegation, and generator routing. Every
112
+ generator skill ships `references/authoring.md` covering callouts, tabs, code
113
+ blocks, images, and diagrams in that generator's syntax.
114
+
115
+ The GitHub Actions workflow in `.github/workflows/ci.yml` runs typecheck, unit
116
+ tests, and skill validation on every pull request, then scaffolds, previews,
117
+ and builds each generator through `scripts/ci-generator-smoke.mjs`, which is
118
+ also runnable locally:
119
+
120
+ ```bash
121
+ pnpm run build && node scripts/ci-generator-smoke.mjs mkdocs
122
+ ```
@@ -1,25 +1,62 @@
1
1
  # Select a documentation generator
2
2
 
3
- Choose the generator when initializing a project. Doxbrix is built in; external
4
- generators require their package in the new project.
3
+ Choose the generator in the setup wizard's **Tools** step, under
4
+ **Documentation generator**. Doxbrix is built in and recommended; choosing
5
+ another generator installs its adapter package into the new documentation
6
+ project before the workspace opens.
5
7
 
6
8
  Use Doxbrix for native Doxbrix publishing and interactive API endpoint blocks.
7
9
  Choose another generator when an existing toolchain, extension ecosystem, or
8
- static-hosting requirement is more important.
10
+ static-hosting requirement is more important. Native generators may also need
11
+ their own runtime, such as Python for MkDocs and Sphinx, Ruby for Jekyll, or
12
+ the Hugo binary.
9
13
 
10
- `doxloop generator add <name>` installs support; it does not rewrite the project
11
- or convert existing content. Doxloop currently has no automatic generator
12
- migration because navigation, frontmatter, components, themes, and route rules
13
- are not mechanically equivalent.
14
+ ## Support tiers and toolchain check
15
+
16
+ Every generator in the list carries a tier and the toolchain it needs. The
17
+ tier describes what Doxloop's adapter does for that generator today, not how
18
+ capable the framework is:
19
+
20
+ | Tier | Generators | What Doxloop provides |
21
+ | --- | --- | --- |
22
+ | Full | Doxbrix, Docusaurus, MkDocs Material | Navigation, callouts, tabs, and Mermaid diagrams validated and documented; scaffold, preview, and strict build exercised in CI |
23
+ | Supported | Sphinx, Hugo, VitePress, Starlight | Nested navigation validated wherever the configuration is readable (nested toctrees, section pages and menus, multi-sidebar objects, autogenerated groups); a `navigation-unverified` warning instead of false errors when a theme, plugin, or code builds it; authoring syntax documented |
24
+ | Basic | Nextra, Markdoc, Jekyll, Static HTML | Scaffold, preview, and build work; navigation checks cover the files the scaffold owns; authoring syntax documented |
25
+
26
+ When you pick a generator in the **Tools** step, Doxloop checks the toolchain
27
+ it needs on this machine: Node.js 22.13 or later with a package manager,
28
+ Python 3.9 or later with `venv`, the `hugo` binary, or Ruby with Bundler. A
29
+ missing tool does not stop the project from being created, since the adapter
30
+ package installs with npm, but preview and the strict build will not run until
31
+ it is installed. **Check again** re-runs the check after you install
32
+ something. **What each generator supports** under the fields lists every
33
+ generator with its tier and requirements.
34
+
35
+ Validation reports the warning `navigation-unverified` when a generator's
36
+ navigation is produced by something Doxloop cannot read statically: a Hugo
37
+ theme, a MkDocs navigation plugin, a Starlight plugin, a sidebar built by a
38
+ function or imported from another module, a Sphinx `autosummary` toctree, or
39
+ a Jekyll theme that derives navigation from front matter. The native strict
40
+ build, which every publish runs before it uploads, remains the authority in
41
+ those projects.
42
+
43
+ The active generator is shown under **Settings → Generator**. It is
44
+ deliberately read-only there: navigation, frontmatter, components, themes, and
45
+ route rules are not mechanically equivalent between generators, so Doxloop has
46
+ no in-place conversion.
14
47
 
15
48
  To migrate:
16
49
 
17
- 1. Create a new project with the target generator.
18
- 2. Copy the confirmed documentation brief and source bindings.
19
- 3. Ask `doxloop create` to preserve the agreed coverage while translating
20
- content into the target generator's native format.
21
- 4. Compare routes, navigation, metadata, components, and theme behavior.
22
- 5. Run `doxloop test` and the target generator's strict build.
50
+ 1. Open the control center from the folder where the new documentation project
51
+ should live and choose **New documentation project** with the target
52
+ generator.
53
+ 2. Connect the same sources and enter the same documentation brief.
54
+ 3. In the guidance step, ask the planner to preserve the agreed coverage while
55
+ translating content into the target generator's native format.
56
+ 4. Review the proposal, comparing routes, navigation, metadata, components,
57
+ and theme behaviour with the existing site.
58
+ 5. Use **Preview docs**, then publish: every publish runs the target
59
+ generator's strict build first and stops before uploading if it fails.
23
60
  6. Redirect changed public URLs before replacing the existing site.
24
61
 
25
62
  Keep the original project until the new site passes validation and route review.
@@ -0,0 +1,71 @@
1
+ # Import Mintlify documentation
2
+
3
+ Doxloop converts an existing Mintlify project into a new Doxbrix documentation
4
+ workspace. Docusaurus, MkDocs, and other supported generators continue to use
5
+ their native existing-site adoption flow.
6
+
7
+ ## Select and convert
8
+
9
+ 1. Start `doxloop ui`.
10
+ 2. In setup, choose **Use existing documentation folder**, then **Mintlify to
11
+ Doxbrix**. From an open workspace, use the project switcher → **Import
12
+ existing documentation…**.
13
+ 3. Choose **Local folder** and browse to the Mintlify project, or choose
14
+ **GitHub repository** and enter its URL or `owner/repository`.
15
+ 4. Leave the branch blank to use GitHub's default branch. Doxloop finds a single
16
+ nested Mintlify site automatically; specify a documentation subfolder when
17
+ the repository contains several sites. Private repositories use local Git
18
+ credentials, or an access token entered under **Private repository access**.
19
+ 5. Choose **Review conversion**. Check the page, asset, navigation-space, and
20
+ redirect counts and any unsupported constructs or unresolved API references.
21
+ 6. Choose a new output folder outside the original repository. The parent folder
22
+ must already exist. Existing destinations are never overwritten.
23
+ 7. Choose **Convert and open Doxbrix project**, then **Open documentation**.
24
+
25
+ The preview is a frozen conversion snapshot, including assets. Submitting it
26
+ does not rerun conversion against potentially changed source files. An
27
+ inspection expires after 30 minutes; inspect again if it expires.
28
+
29
+ ## Update and publish
30
+
31
+ Review the converted pages in **Pages** and use **Preview docs**. Direct editing,
32
+ scoped agent changes, review proposals, and undo use the same workflow as any
33
+ other Doxbrix project.
34
+
35
+ Connect product code or an API specification in **Sources** before asking
36
+ Doxloop to verify product claims or keep documentation synchronized. Conversion
37
+ does not establish factual correctness: every imported page starts unverified,
38
+ and the original Mintlify repository is recorded as migration provenance rather
39
+ than automatically configured as product evidence.
40
+
41
+ Use **Deploy → Doxbrix** to sign in, run a dry run, and publish. Import itself
42
+ needs neither an agent run nor a Doxbrix account.
43
+
44
+ ## Conversion fidelity and reports
45
+
46
+ Versioned projects show a sidebar version selector in the Doxbrix reader. Tabs
47
+ and navigation belong to the selected version, and the manifest's `default` or
48
+ `isDefault` entry controls the landing page. Shared pages retain the selected
49
+ version in preview and static exports. The navigation editor also separates
50
+ versions and preserves their metadata when saving changes.
51
+
52
+ The bundled Doxbrix SDK converter and CLI file helpers handle the native
53
+ manifest, navigation, branding, versions/locales, Markdown/MDX, supported
54
+ components, reusable snippets, images, fonts, media, and API specifications.
55
+ The same OpenAPI materializer used by the CLI expands navigation-generated
56
+ endpoint pages. Remote specifications use Doxloop's bounded public-URL fetcher.
57
+
58
+ Unsupported constructs and unresolved API sources appear before import and
59
+ require explicit acknowledgement. Review these pages before publishing; custom
60
+ components and source-platform behavior cannot always be represented exactly.
61
+ Custom source CSS and application code are not copied as executable tooling.
62
+
63
+ The project stores its source location or repository/branch/commit, conversion
64
+ counts, redirects, unsupported constructs, and warnings in
65
+ `.doxloop/mintlify-import.json`. Credentials are not stored there. Redirects are
66
+ also retained in the native manifest and Doxloop's redirect metadata.
67
+
68
+ The converter source and original regression tests are vendored without changes.
69
+ See `vendor/doxbrix-import/README.md` and its file-hash manifest for provenance
70
+ and refresh instructions. The conversion runtime ships inside the Doxloop
71
+ package and does not require a separate CLI installation.
@@ -0,0 +1,25 @@
1
+ # Remote OpenAPI safety policy
2
+
3
+ Doxloop treats remote OpenAPI URLs as untrusted input. Connection tests on the
4
+ **Sources** page, discovery and planning, coverage, and monitoring checks all
5
+ use the same versioned OpenAPI connector and enforce these controls:
6
+
7
+ - only HTTP and HTTPS URLs without embedded credentials are accepted;
8
+ - localhost, `.local` names, private, loopback, link-local, multicast, and
9
+ reserved IP ranges are rejected after DNS resolution on every redirect;
10
+ - redirects are handled manually and limited to three;
11
+ - requests time out after 15 seconds and response bodies are limited to 5 MB;
12
+ - JSON, YAML, plain-text, or octet-stream responses are accepted only when the
13
+ payload parses as a valid OpenAPI 3.x or Swagger 2.0 document; other content
14
+ types require a `.json`, `.yaml`, or `.yml` URL path;
15
+ - HTTP credentials are never persisted. Private specifications should use a
16
+ public, credential-free, or deliberately short-lived pre-signed URL, or be
17
+ uploaded as a file from the **Add source** dialog;
18
+ - ETag and Last-Modified validators are retained in the local, mode-0600 cache.
19
+ Cached specification bodies stay under `.doxloop/cache/` and are excluded
20
+ from proposals and deployments.
21
+
22
+ Structural snapshots hash operations, parameters, request bodies, responses,
23
+ security, examples, schemas, and security schemes. A remote change therefore
24
+ marks only evidence-mapped operations and schemas stale instead of treating the
25
+ entire specification as an opaque file.