@doxbrix/doxloop 0.1.5 → 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 +1145 -0
  2. package/README.md +422 -227
  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 +24 -5
  22. package/dist/agents.js +60 -9
  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 +3 -0
  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 +25 -0
  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 +49 -32
  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
@@ -3137,7 +3137,8 @@ body.dxb-tryit-open {
3137
3137
  --dp-primary-shadow-07: rgb(var(--dp-primary-rgb) / 0.07);
3138
3138
  --dp-primary-shadow-10: rgb(var(--dp-primary-rgb) / 0.10);
3139
3139
  --dp-page-text: #141428;
3140
- --dp-muted-text: #737891;
3140
+ --dp-muted-text: #60677d;
3141
+ --dp-body-text: #4b5563;
3141
3142
  --dp-line: #e5e7f0;
3142
3143
  --dp-surface-soft: #f8f7ff;
3143
3144
  background-color: var(--dxb-background-light, #fff);
@@ -3147,6 +3148,8 @@ body.dxb-tryit-open {
3147
3148
  color: var(--dp-page-text);
3148
3149
  font-size: 0.9375rem;
3149
3150
  line-height: 1.62;
3151
+ -webkit-font-smoothing: antialiased;
3152
+ -moz-osx-font-smoothing: grayscale;
3150
3153
  }
3151
3154
 
3152
3155
  .dp-root--published,
@@ -3242,7 +3245,7 @@ body.dxb-tryit-open {
3242
3245
  border: 1px solid #dfe3ee;
3243
3246
  border-radius: 8px;
3244
3247
  background: #fff;
3245
- color: #7b8197;
3248
+ color: #596174;
3246
3249
  box-shadow: 0 1px 4px rgba(20, 20, 40, 0.04);
3247
3250
  }
3248
3251
 
@@ -3255,7 +3258,7 @@ body.dxb-tryit-open {
3255
3258
  padding: 0 8px;
3256
3259
  border-radius: 6px;
3257
3260
  background: #f7f8fc;
3258
- color: #6f7488;
3261
+ color: #52596c;
3259
3262
  border-color: #dfe3ee;
3260
3263
  font-size: 0.75rem;
3261
3264
  }
@@ -5498,6 +5501,7 @@ body.dxb-tryit-open {
5498
5501
  color-scheme: dark;
5499
5502
  --dp-page-text: #eef1f7;
5500
5503
  --dp-muted-text: #9ba3b2;
5504
+ --dp-body-text: #c6ccd7;
5501
5505
  --dp-line: #2c313b;
5502
5506
  --dp-surface-soft: #1b1f27;
5503
5507
  --text-primary: #eef1f7;
@@ -6235,6 +6239,7 @@ body.dxb-preview-mobile > .dp-root--published {
6235
6239
  .dp-root--published[data-shell-theme='atlas'][data-color-theme='dark'] {
6236
6240
  --dp-page-text: #f4eff1;
6237
6241
  --dp-muted-text: #aaa4a7;
6242
+ --dp-body-text: #d4cfd1;
6238
6243
  --dp-line: #262123;
6239
6244
  --dp-surface-soft: #181415;
6240
6245
  --dp-primary: var(--dxb-primary-light, var(--project-primary));
@@ -6314,9 +6319,10 @@ body.dxb-preview-mobile > .dp-root--published {
6314
6319
  .dxb-atlas-search-cluster .dp-topnav-search kbd {
6315
6320
  border: 0;
6316
6321
  background: transparent;
6317
- color: #837d80;
6322
+ color: #141428;
6318
6323
  padding: 0;
6319
6324
  }
6325
+ .dp-root--published[data-shell-theme='atlas'][data-color-theme='dark'] .dxb-atlas-search-cluster .dp-topnav-search kbd { color: #d4cfd1; }
6320
6326
 
6321
6327
  .dxb-atlas-assistant,
6322
6328
  .dxb-atlas-header-link,
@@ -6647,7 +6653,15 @@ body.dxb-search-open { overflow: hidden; }
6647
6653
  color: var(--dp-muted-text);
6648
6654
  font-size: 14px;
6649
6655
  }
6656
+ .dp-root--published[data-shell-theme='atlas'] .dp-nav-item:hover {
6657
+ width: calc(100% + 12px);
6658
+ margin-left: -12px;
6659
+ padding-left: 12px;
6660
+ }
6650
6661
  .dp-root--published[data-shell-theme='atlas'] .dp-nav-item.active {
6662
+ width: calc(100% + 12px);
6663
+ margin-left: -12px;
6664
+ padding-left: 12px;
6651
6665
  background: rgb(var(--dp-primary-rgb) / .12);
6652
6666
  color: var(--project-primary);
6653
6667
  font-weight: 600;
@@ -6681,19 +6695,20 @@ body.dxb-search-open { overflow: hidden; }
6681
6695
  gap: 24px;
6682
6696
  }
6683
6697
  .dxb-atlas-title-copy { min-width: 0; }
6684
- .dxb-atlas-eyebrow { margin-bottom: 8px; color: var(--project-primary); font-size: 14px; font-weight: 600; }
6698
+ .dxb-atlas-eyebrow { margin-bottom: 8px; color: var(--dp-page-text); font-size: 14px; font-weight: 600; }
6699
+ .dp-root--published[data-shell-theme='atlas'] .dp-nav-item.active .dp-nav-item-label { color: var(--dp-page-text); font-weight: 600; }
6685
6700
  .dp-root--published[data-shell-theme='atlas'] .dp-page-title {
6686
6701
  color: var(--dp-page-text);
6687
- font-size: 40px;
6688
- line-height: 1.14;
6689
- letter-spacing: -0.03em;
6690
- font-weight: 700;
6702
+ font-size: 36px;
6703
+ line-height: 1.2;
6704
+ letter-spacing: -0.025em;
6705
+ font-weight: 600;
6691
6706
  }
6692
6707
  .dxb-atlas-description {
6693
6708
  margin: 8px 0 0;
6694
- color: var(--dp-muted-text);
6695
- font-size: 20px;
6696
- line-height: 1.45;
6709
+ color: var(--dp-body-text);
6710
+ font-size: 18px;
6711
+ line-height: 1.55;
6697
6712
  }
6698
6713
  .dxb-atlas-copy-page {
6699
6714
  display: inline-flex;
@@ -6710,9 +6725,9 @@ body.dxb-search-open { overflow: hidden; }
6710
6725
  font-size: 14px;
6711
6726
  white-space: nowrap;
6712
6727
  }
6713
- .dp-root--published[data-shell-theme='atlas'] .dp-blocks { margin-top: 32px; color: var(--dp-muted-text); }
6714
- .dp-root--published[data-shell-theme='atlas'] :where(.dp-p, .dp-wysiwyg-content) { color: var(--dp-muted-text); font-size: 16px; line-height: 1.72; }
6715
- .dp-root--published[data-shell-theme='atlas'] :where(.dp-h2, .dp-wysiwyg-content h2) { color: var(--dp-page-text); font-size: 26px; line-height: 1.3; margin-top: 42px; }
6728
+ .dp-root--published[data-shell-theme='atlas'] .dp-blocks { margin-top: 32px; color: var(--dp-body-text); }
6729
+ .dp-root--published[data-shell-theme='atlas'] :where(.dp-p, .dp-wysiwyg-content) { color: var(--dp-body-text); font-size: 16px; line-height: 1.75; letter-spacing: -0.0125rem; }
6730
+ .dp-root--published[data-shell-theme='atlas'] :where(.dp-h2, .dp-wysiwyg-content h2) { color: var(--dp-page-text); font-size: 24px; line-height: 1.33; margin-top: 42px; }
6716
6731
  .dp-root--published[data-shell-theme='atlas'] :where(.dp-h3, .dp-wysiwyg-content h3) { color: var(--dp-page-text); font-size: 20px; }
6717
6732
  .dp-root--published[data-shell-theme='atlas'] .df-inline-code {
6718
6733
  border-color: var(--dp-line);
@@ -6732,6 +6747,37 @@ body.dxb-search-open { overflow: hidden; }
6732
6747
  .dp-root--published[data-shell-theme='atlas'] .dp-toc-entry { color: var(--dp-muted-text); font-size: 14px; line-height: 1.45; padding-top: 5px; padding-bottom: 5px; }
6733
6748
  .dp-root--published[data-shell-theme='atlas'] .dp-toc-entry.active { color: var(--project-primary); }
6734
6749
 
6750
+ /* Focused page rendering used inside the Doxloop Pages workspace. The outer
6751
+ workspace already owns navigation and actions, so repeating the reader
6752
+ shell inside its iframe only reduces the space available to review content. */
6753
+ .dp-root--published.dp-root--embedded .dxb-atlas-header,
6754
+ .dp-root--published.dp-root--embedded .dp-leftnav,
6755
+ .dp-root--published.dp-root--embedded .dp-toc,
6756
+ .dp-root--published.dp-root--embedded .dxb-atlas-copy-page,
6757
+ .dp-root--published.dp-root--embedded .dxb-preview-search {
6758
+ display: none !important;
6759
+ }
6760
+
6761
+ .dp-root--published.dp-root--embedded[data-shell-theme='atlas'] .dp-body {
6762
+ width: 100%;
6763
+ min-height: 100vh;
6764
+ display: block;
6765
+ margin: 0;
6766
+ padding: 0;
6767
+ }
6768
+
6769
+ .dp-root--published.dp-root--embedded[data-shell-theme='atlas'] .dp-main {
6770
+ width: 100%;
6771
+ margin: 0;
6772
+ }
6773
+
6774
+ .dp-root--published.dp-root--embedded[data-shell-theme='atlas'] .dp-content-wrap {
6775
+ width: min(100%, 920px);
6776
+ max-width: none;
6777
+ margin: 0 auto;
6778
+ padding: 32px clamp(24px, 5vw, 56px) 64px;
6779
+ }
6780
+
6735
6781
  @media (max-width: 1180px) {
6736
6782
  .dxb-atlas-header-inner { grid-template-columns: 210px minmax(280px, 1fr) auto; }
6737
6783
  .dxb-atlas-header-link span { display: none; }
@@ -6868,3 +6914,19 @@ body.dxb-search-open { overflow: hidden; }
6868
6914
  color: var(--dp-page-text);
6869
6915
  font-weight: 600;
6870
6916
  }
6917
+
6918
+ /* Editing is controlled by the parent workspace in embedded previews. */
6919
+ .dp-root--embedded .dp-edit-page { display: none; }
6920
+ /* Doc-version selector follows the DocsAI CLI reader's sidebar layout. */
6921
+ [data-doc-version][hidden] { display: none !important; }
6922
+ .dp-version-switcher { margin: 16px 12px 0; flex-shrink: 0; }
6923
+ .dp-version-trigger { list-style: none; display: flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 10px; border: 1px solid color-mix(in srgb, currentColor 20%, transparent); border-radius: 8px; color: inherit; background: color-mix(in srgb, currentColor 4%, transparent); font-size: 13px; font-weight: 600; cursor: pointer; }
6924
+ .dp-version-trigger::-webkit-details-marker { display: none; }
6925
+ .dp-version-trigger:hover, .dp-version-trigger:focus-visible { border-color: var(--project-primary, #6366f1); }
6926
+ .dp-version-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
6927
+ .dp-version-tag { padding: 1px 7px; border-radius: 999px; background: color-mix(in srgb, var(--project-primary, #6366f1) 14%, transparent); color: var(--project-primary, #6366f1); font-size: 11px; font-weight: 600; }
6928
+ .dp-version-menu { margin-top: 4px; padding: 4px; border: 1px solid color-mix(in srgb, currentColor 20%, transparent); border-radius: 8px; }
6929
+ .dp-version-option { display: flex; align-items: center; gap: 8px; padding: 7px 9px; border-radius: 6px; color: inherit; font-size: 13px; text-decoration: none; }
6930
+ .dp-version-option:hover { background: color-mix(in srgb, currentColor 8%, transparent); }
6931
+ .dp-version-option.active { color: var(--project-primary, #6366f1); font-weight: 600; }
6932
+ .dp-version-option[aria-disabled] { opacity: .5; }
@@ -0,0 +1 @@
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://doxloop.dev/contracts/agent-events-v1.schema.json","title":"Doxloop agent workflow event v1","type":"object","required":["schemaVersion","type","at"],"properties":{"schemaVersion":{"const":1},"type":{"enum":["stage","outcome"]},"at":{"type":"string","format":"date-time"}},"oneOf":[{"description":"A workflow stage changed state.","required":["id","label","status"],"properties":{"schemaVersion":{"const":1},"type":{"const":"stage"},"id":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"status":{"enum":["pending","running","completed","failed"]},"progress":{"type":"object","required":["done"],"properties":{"done":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0}},"additionalProperties":false},"at":{"type":"string","format":"date-time"}},"additionalProperties":false},{"description":"What the job concluded, announced once it settles.","required":["kind","status","message"],"properties":{"schemaVersion":{"const":1},"type":{"const":"outcome"},"kind":{"const":"sync"},"status":{"enum":["current","stale","proposal","skipped","failed","unknown"]},"message":{"type":"string","minLength":1},"pages":{"type":"integer","minimum":0},"proposalId":{"type":"string","minLength":1},"at":{"type":"string","format":"date-time"}},"additionalProperties":false}]}
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://doxloop.dev/contracts/coverage-v1.schema.json",
4
+ "title": "Doxloop source intelligence v1",
5
+ "type": "object",
6
+ "required": ["generatedAt", "health", "coverage", "evidenceDiagnostics"],
7
+ "properties": {
8
+ "generatedAt": { "type": "string", "format": "date-time" },
9
+ "health": { "type": "array", "items": { "type": "object" } },
10
+ "coverage": {
11
+ "type": "object",
12
+ "required": ["metrics", "groups", "pages", "disclaimer"],
13
+ "properties": {
14
+ "metrics": { "type": "array", "items": { "$ref": "#/$defs/coverageItem" } },
15
+ "groups": { "type": "array", "items": { "$ref": "#/$defs/group" } },
16
+ "pages": { "type": "array", "items": { "type": "string" } },
17
+ "disclaimer": { "type": "string", "minLength": 1 }
18
+ },
19
+ "additionalProperties": false
20
+ },
21
+ "evidenceDiagnostics": { "type": "array", "items": { "type": "object" } }
22
+ },
23
+ "$defs": {
24
+ "coverageItem": {
25
+ "type": "object",
26
+ "required": ["id", "label", "documented", "total", "excluded", "percent", "status", "denominator", "items"],
27
+ "properties": {
28
+ "id": { "type": "string" }, "label": { "type": "string" },
29
+ "documented": { "type": "integer", "minimum": 0 }, "total": { "type": "integer", "minimum": 0 },
30
+ "excluded": { "type": "integer", "minimum": 0 }, "percent": { "type": "integer", "minimum": 0, "maximum": 100 },
31
+ "status": { "enum": ["measured", "unknown"] }, "denominator": { "type": "string" },
32
+ "items": { "type": "array", "items": { "$ref": "#/$defs/item" } }
33
+ },
34
+ "additionalProperties": false
35
+ },
36
+ "item": {
37
+ "type": "object",
38
+ "required": ["id", "surface", "label", "state"],
39
+ "properties": {
40
+ "id": { "type": "string" }, "surface": { "type": "string" }, "label": { "type": "string" },
41
+ "state": { "enum": ["documented", "uncovered", "excluded", "needs-human", "planned", "stale"] },
42
+ "source": { "type": "string" }, "path": { "type": "string" }, "kind": { "type": "string" },
43
+ "page": { "type": "string" }, "suggestedPage": { "type": "string" }, "reason": { "type": "string" }
44
+ },
45
+ "additionalProperties": false
46
+ },
47
+ "group": {
48
+ "type": "object",
49
+ "required": ["source", "documented", "total", "percent", "status"],
50
+ "properties": {
51
+ "source": { "type": "string" }, "scope": { "type": "object" },
52
+ "documented": { "type": "integer", "minimum": 0 }, "total": { "type": "integer", "minimum": 0 },
53
+ "percent": { "type": "integer", "minimum": 0, "maximum": 100 }, "status": { "enum": ["measured", "unknown"] }
54
+ },
55
+ "additionalProperties": false
56
+ }
57
+ },
58
+ "additionalProperties": false
59
+ }
@@ -0,0 +1 @@
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://doxloop.dev/contracts/drift-v1.schema.json","title":"Doxloop drift result v1","type":"object","required":["status","pages","trackedPages","notes"],"properties":{"status":{"enum":["current","stale","unknown"]},"pages":{"type":"array"},"trackedPages":{"type":"integer","minimum":0},"notes":{"type":"array","items":{"type":"string"}}}}
@@ -0,0 +1,62 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://doxloop.dev/contracts/evaluation-v1.schema.json",
4
+ "title": "Doxloop evaluation report v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "contractVersion", "generatedAt", "mode", "project", "score", "metrics", "reviewer"],
7
+ "properties": {
8
+ "schemaVersion": { "const": 1 },
9
+ "contractVersion": { "const": "1.0.0" },
10
+ "generatedAt": { "type": "string", "format": "date-time" },
11
+ "mode": { "enum": ["generation", "update"] },
12
+ "project": { "type": "string", "minLength": 1 },
13
+ "score": { "type": "number", "minimum": 0, "maximum": 100 },
14
+ "metrics": {
15
+ "type": "array",
16
+ "minItems": 1,
17
+ "items": {
18
+ "type": "object",
19
+ "required": ["id", "score", "weight", "detail"],
20
+ "properties": {
21
+ "id": { "type": "string", "minLength": 1 },
22
+ "score": { "type": "number", "minimum": 0, "maximum": 100 },
23
+ "weight": { "type": "number", "exclusiveMinimum": 0 },
24
+ "detail": { "type": "string" }
25
+ },
26
+ "additionalProperties": false
27
+ }
28
+ },
29
+ "durationMs": { "type": "number", "minimum": 0 },
30
+ "usage": {
31
+ "type": "object",
32
+ "properties": {
33
+ "inputTokens": { "type": "number", "minimum": 0 },
34
+ "outputTokens": { "type": "number", "minimum": 0 },
35
+ "costUsd": { "type": "number", "minimum": 0 }
36
+ },
37
+ "additionalProperties": false
38
+ },
39
+ "reviewer": {
40
+ "type": "object",
41
+ "required": ["accepted", "revised", "rejected"],
42
+ "properties": {
43
+ "accepted": { "type": "integer", "minimum": 0 },
44
+ "revised": { "type": "integer", "minimum": 0 },
45
+ "rejected": { "type": "integer", "minimum": 0 }
46
+ },
47
+ "additionalProperties": false
48
+ },
49
+ "regression": {
50
+ "type": "object",
51
+ "required": ["baselineScore", "delta", "threshold", "blocked"],
52
+ "properties": {
53
+ "baselineScore": { "type": "number", "minimum": 0, "maximum": 100 },
54
+ "delta": { "type": "number" },
55
+ "threshold": { "type": "number", "minimum": 0 },
56
+ "blocked": { "type": "boolean" }
57
+ },
58
+ "additionalProperties": false
59
+ }
60
+ },
61
+ "additionalProperties": false
62
+ }
@@ -0,0 +1 @@
1
+ {"contractVersion":"1.0.0","compatibility":"Codes are append-only within v1. Existing codes will not be renamed or removed without a major contract version.","prefixes":{"validation.":"Existing deterministic validation issue code.","quality.build.":"Generator strict build.","quality.link.":"External link status.","quality.example.":"Executable or source-verified example.","quality.schema.":"Connector-native schema lint.","quality.accessibility.":"Rendered accessibility automation or manual review.","quality.visual.":"Visual baseline status.","quality.lint.":"Documentation linting.","quality.claim.":"Claim-level evidence state.","quality.ratchet.":"Quality baseline and ratcheting state."}}
@@ -0,0 +1 @@
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://doxloop.dev/contracts/quality-report-v1.schema.json","title":"Doxloop quality report v1","type":"object","required":["schemaVersion","contractVersion","generatedAt","inputHash","project","generator","status","checks","counts","artifacts","options"],"properties":{"schemaVersion":{"const":1},"contractVersion":{"const":"1.0.0"},"generatedAt":{"type":"string","format":"date-time"},"inputHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"project":{"type":"string"},"generator":{"type":"string"},"status":{"enum":["pass","warning","fail"]},"checks":{"type":"array","items":{"type":"object","required":["code","category","status","message"],"properties":{"code":{"type":"string"},"category":{"enum":["validation","build","links","examples","schemas","accessibility","visual","lint","claims"]},"status":{"enum":["pass","warning","fail","skipped"]},"message":{"type":"string"},"file":{"type":"string"},"detail":{"type":"string"},"fixable":{"type":"boolean"}}}},"counts":{"type":"object","required":["passed","warnings","failed","skipped"],"properties":{"passed":{"type":"integer","minimum":0},"warnings":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0}}},"artifacts":{"type":"object"},"options":{"type":"object"}},"additionalProperties":false}
@@ -0,0 +1 @@
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://doxloop.dev/contracts/validation-v1.schema.json","title":"Doxloop validation result v1","type":"object","required":["issues","pages","errors","warnings"],"properties":{"issues":{"type":"array","items":{"type":"object","required":["severity","code","message"],"properties":{"severity":{"enum":["error","warning"]},"code":{"type":"string"},"message":{"type":"string"},"file":{"type":"string"}}}},"pages":{"type":"array","items":{"type":"string"}},"errors":{"type":"integer","minimum":0},"warnings":{"type":"integer","minimum":0}}}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Why an agent session ended, in words a reader can act on. A bare "exited
3
+ * with status 1" hid a signed-out Claude Code for a whole planning run: the
4
+ * agent's own error text names the cause, and a sign-in or account problem
5
+ * needs a different next step than a retry.
6
+ */
7
+ import { DoxloopError } from './errors.js';
8
+ import type { AgentName } from './types.js';
9
+ export type AgentFailureKind = 'sign-in' | 'account' | 'other';
10
+ export declare function agentDisplayName(agent: AgentName): string;
11
+ /** Sign-in trouble: expired OAuth, a missing login, a rejected key. */
12
+ export declare function isAgentSignInFailure(text: string | undefined): boolean;
13
+ /** Account trouble: out of credits, quota, or rate/usage limits. */
14
+ export declare function isAgentAccountFailure(text: string | undefined): boolean;
15
+ export declare function agentFailureKind(text: string | undefined): AgentFailureKind;
16
+ /**
17
+ * The most useful error text a session left: the formatter's stop reason
18
+ * (the agent's own result event) or else the last error-looking line on
19
+ * stderr. Prefixes such as "stopped with an error:" are removed.
20
+ */
21
+ export declare function agentFailureDetail(stopReason: string | undefined, stderr?: string): string | undefined;
22
+ /** One sentence that names the cause and the next step. */
23
+ export declare function describeAgentFailure(agent: AgentName, detail: string): {
24
+ kind: AgentFailureKind;
25
+ message: string;
26
+ };
27
+ /** A session failure that carries its cause, so callers can tell sign-in trouble from task failures. */
28
+ export declare class AgentSessionError extends DoxloopError {
29
+ readonly kind: AgentFailureKind;
30
+ readonly detail: string;
31
+ readonly agent: AgentName;
32
+ constructor(agent: AgentName, label: string, exitCode: number, detail: string);
33
+ }
34
+ /** The refusal shown before a run starts with a signed-out assistant. */
35
+ export declare function agentSignedOutMessage(agent: AgentName): string;
36
+ //# sourceMappingURL=agent-failure.d.ts.map
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Why an agent session ended, in words a reader can act on. A bare "exited
3
+ * with status 1" hid a signed-out Claude Code for a whole planning run: the
4
+ * agent's own error text names the cause, and a sign-in or account problem
5
+ * needs a different next step than a retry.
6
+ */
7
+ import { DoxloopError } from './errors.js';
8
+ const DISPLAY_NAMES = { claude: 'Claude Code', codex: 'Codex', gemini: 'Gemini' };
9
+ const SIGN_IN_COMMANDS = {
10
+ claude: 'Run `claude auth login`',
11
+ codex: 'Run `codex login`',
12
+ gemini: 'Run `gemini` once in a terminal and sign in (or set GEMINI_API_KEY)',
13
+ };
14
+ export function agentDisplayName(agent) {
15
+ return DISPLAY_NAMES[agent];
16
+ }
17
+ /** Sign-in trouble: expired OAuth, a missing login, a rejected key. */
18
+ export function isAgentSignInFailure(text) {
19
+ return /failed to authenticate|authenticat(?:e|ion) (?:failed|error|required)|oauth|not (?:logged|signed) in|log ?in required|please (?:log|sign) ?in|\/login\b|auth login|\b401\b|unauthori[sz]ed|invalid (?:api[ _-]?key|x-api-key|token|credentials)|api key (?:is )?(?:missing|invalid|not (?:set|found))|token (?:has )?expired|refresh token/i.test(text ?? '');
20
+ }
21
+ /** Account trouble: out of credits, quota, or rate/usage limits. */
22
+ export function isAgentAccountFailure(text) {
23
+ return /credit balance|insufficient[_ ](?:quota|credits?|funds)|out of credits|quota|usage limit|hit your (?:session|usage|weekly|daily) limit|rate[ _-]?limit|too many requests|\b429\b|billing/i.test(text ?? '');
24
+ }
25
+ export function agentFailureKind(text) {
26
+ if (isAgentSignInFailure(text))
27
+ return 'sign-in';
28
+ if (isAgentAccountFailure(text))
29
+ return 'account';
30
+ return 'other';
31
+ }
32
+ const ANSI = /\u001b\[[0-9;?]*[ -/]*[@-~]|\u001b\][^\u0007\u001b]*(?:\u0007|\u001b\\)/g;
33
+ /**
34
+ * The most useful error text a session left: the formatter's stop reason
35
+ * (the agent's own result event) or else the last error-looking line on
36
+ * stderr. Prefixes such as "stopped with an error:" are removed.
37
+ */
38
+ export function agentFailureDetail(stopReason, stderr = '') {
39
+ const fromStop = stopReason?.replace(/^stopped with an error:\s*/i, '').replace(/^stopped because its API request failed:\s*/i, '').trim();
40
+ if (fromStop)
41
+ return fromStop;
42
+ const lines = stderr.replace(ANSI, '').split(/\r?\n/).map((line) => line.trim()).filter(Boolean)
43
+ .filter((line) => !/^Reading additional input from stdin/i.test(line));
44
+ const errorLine = [...lines].reverse().find((line) => /error|fail|denied|unauthori|expired|not (?:logged|signed) in|quota|limit/i.test(line));
45
+ const picked = errorLine ?? lines.at(-1);
46
+ return picked ? compact(picked.replace(/^\S*\d{4}-\d{2}-\d{2}T\S+\s+(?:ERROR|WARN|INFO)\s+/, '')) : undefined;
47
+ }
48
+ /** The cause without the agent's own "Failed to authenticate:" wrapper. */
49
+ function signInCause(detail) {
50
+ return detail.replace(/^(?:API Error:\s*)?(?:Failed to authenticate|Authentication (?:failed|error))[:.]?\s*/i, '').replace(/\.$/, '') || detail;
51
+ }
52
+ /** One sentence that names the cause and the next step. */
53
+ export function describeAgentFailure(agent, detail) {
54
+ const name = agentDisplayName(agent);
55
+ const kind = agentFailureKind(detail);
56
+ if (kind === 'sign-in') {
57
+ return {
58
+ kind,
59
+ message: `${name} could not sign in (${compact(signInCause(detail))}). ${SIGN_IN_COMMANDS[agent]} or switch assistant, then retry.`,
60
+ };
61
+ }
62
+ if (kind === 'account') {
63
+ return {
64
+ kind,
65
+ message: `${name} stopped on an account limit (${compact(detail.replace(/\.$/, ''))}). Wait for the limit to reset or add credits, or switch assistant, then retry.`,
66
+ };
67
+ }
68
+ return { kind, message: compact(detail) };
69
+ }
70
+ /** A session failure that carries its cause, so callers can tell sign-in trouble from task failures. */
71
+ export class AgentSessionError extends DoxloopError {
72
+ kind;
73
+ detail;
74
+ agent;
75
+ constructor(agent, label, exitCode, detail) {
76
+ const described = describeAgentFailure(agent, detail);
77
+ super(described.kind === 'other'
78
+ ? `${agent} ${label} exited with status ${exitCode}: ${described.message}`
79
+ : described.message);
80
+ this.name = 'AgentSessionError';
81
+ this.kind = described.kind;
82
+ this.detail = detail;
83
+ this.agent = agent;
84
+ }
85
+ }
86
+ function compact(value, maximum = 240) {
87
+ const single = value.replace(/\s+/g, ' ').trim();
88
+ return single.length > maximum ? `${single.slice(0, maximum - 1)}…` : single;
89
+ }
90
+ /** The refusal shown before a run starts with a signed-out assistant. */
91
+ export function agentSignedOutMessage(agent) {
92
+ if (agent === 'claude')
93
+ return 'Claude Code is signed out. Open Terminal, run `claude auth login`, then try again — or switch to another assistant.';
94
+ if (agent === 'codex')
95
+ return 'Codex is signed out. Open Terminal, run `codex login`, then try again — or switch to another assistant.';
96
+ return 'Gemini is not signed in. Open Terminal, run `gemini` and complete the sign-in (or set GEMINI_API_KEY), then try again — or switch to another assistant.';
97
+ }
98
+ //# sourceMappingURL=agent-failure.js.map
@@ -0,0 +1,17 @@
1
+ export declare const CLAUDE_ISOLATION_ARGUMENTS: readonly ["--strict-mcp-config"];
2
+ /** Codex feature flags (see `codex features list`) that bring in the user's plugins and connectors. */
3
+ export declare const CODEX_DISABLED_FEATURES: readonly ["plugins", "apps"];
4
+ /** MCP server names declared in a Codex config.toml, as `[mcp_servers.<name>]` tables or inline entries. */
5
+ export declare function codexConfigMcpServerNames(toml: string): string[];
6
+ /**
7
+ * MCP servers the user configured for Codex: `$CODEX_HOME/config.toml`
8
+ * (default `~/.codex`) and the project's own `.codex/config.toml`. Unreadable
9
+ * files contribute nothing.
10
+ */
11
+ export declare function codexUserMcpServers(cwd: string, env?: NodeJS.ProcessEnv): Promise<string[]>;
12
+ /**
13
+ * Codex `exec` options that switch off the user's plugins, connectors, and
14
+ * MCP servers, keeping only `keep` (Doxloop's capture server).
15
+ */
16
+ export declare function codexIsolationArguments(userServers?: readonly string[], keep?: readonly string[]): string[];
17
+ //# sourceMappingURL=agent-isolation.d.ts.map
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Doxloop sessions run with Doxloop's own tools only. The user's personal
3
+ * agent setup (computer-use plugins, browser REPLs, chat connectors) is for
4
+ * their own work: a research session that reached for a global `cua_repl`
5
+ * plugin failed repeatedly instead of using the capture browser Doxloop gave
6
+ * it. The agent's sign-in, model defaults, and skills are left alone.
7
+ *
8
+ * Claude Code: `--strict-mcp-config` loads only the servers passed with
9
+ * `--mcp-config` (the capture browser, when the run has one).
10
+ * Codex: `--disable plugins` and `--disable apps` turn off plugin- and
11
+ * app-provided tools, and every MCP server in the user's (and the project's)
12
+ * config.toml is switched off with `-c mcp_servers.<name>.enabled=false`.
13
+ * A dedicated CODEX_HOME would lose the user's login, so it is not used.
14
+ */
15
+ import { readFile } from 'node:fs/promises';
16
+ import { homedir } from 'node:os';
17
+ import { join } from 'node:path';
18
+ export const CLAUDE_ISOLATION_ARGUMENTS = ['--strict-mcp-config'];
19
+ /** Codex feature flags (see `codex features list`) that bring in the user's plugins and connectors. */
20
+ export const CODEX_DISABLED_FEATURES = ['plugins', 'apps'];
21
+ /** MCP server names declared in a Codex config.toml, as `[mcp_servers.<name>]` tables or inline entries. */
22
+ export function codexConfigMcpServerNames(toml) {
23
+ const names = new Set();
24
+ let inServersTable = false;
25
+ for (const rawLine of toml.split(/\r?\n/)) {
26
+ const line = rawLine.replace(/\s+#.*$/, '').trim();
27
+ if (!line || line.startsWith('#'))
28
+ continue;
29
+ const table = /^\[\s*mcp_servers\s*\.\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_-]+))/.exec(line);
30
+ if (table) {
31
+ names.add(table[1] ?? table[2] ?? table[3]);
32
+ inServersTable = false;
33
+ continue;
34
+ }
35
+ if (line.startsWith('[')) {
36
+ inServersTable = /^\[\s*mcp_servers\s*\]$/.test(line);
37
+ continue;
38
+ }
39
+ const dotted = /^mcp_servers\s*\.\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_-]+))\s*[.=]/.exec(line);
40
+ if (dotted) {
41
+ names.add(dotted[1] ?? dotted[2] ?? dotted[3]);
42
+ continue;
43
+ }
44
+ if (inServersTable) {
45
+ const entry = /^(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_-]+))\s*[.=]/.exec(line);
46
+ if (entry)
47
+ names.add(entry[1] ?? entry[2] ?? entry[3]);
48
+ }
49
+ }
50
+ return [...names];
51
+ }
52
+ /**
53
+ * MCP servers the user configured for Codex: `$CODEX_HOME/config.toml`
54
+ * (default `~/.codex`) and the project's own `.codex/config.toml`. Unreadable
55
+ * files contribute nothing.
56
+ */
57
+ export async function codexUserMcpServers(cwd, env = process.env) {
58
+ const home = env.CODEX_HOME?.trim() || join(homedir(), '.codex');
59
+ const names = new Set();
60
+ for (const file of [join(home, 'config.toml'), join(cwd, '.codex', 'config.toml')]) {
61
+ try {
62
+ for (const name of codexConfigMcpServerNames(await readFile(file, 'utf8')))
63
+ names.add(name);
64
+ }
65
+ catch {
66
+ // No config there.
67
+ }
68
+ }
69
+ return [...names].sort();
70
+ }
71
+ /**
72
+ * Codex's `-c` dotted paths take bare keys only (a quoted key is read as a
73
+ * new server named with the quotes), so a name outside [A-Za-z0-9_-] cannot
74
+ * be switched off from the command line and is left as it is.
75
+ */
76
+ function overridableServerName(name) {
77
+ return /^[A-Za-z0-9_-]+$/.test(name);
78
+ }
79
+ /**
80
+ * Codex `exec` options that switch off the user's plugins, connectors, and
81
+ * MCP servers, keeping only `keep` (Doxloop's capture server).
82
+ */
83
+ export function codexIsolationArguments(userServers = [], keep = []) {
84
+ const args = [];
85
+ for (const feature of CODEX_DISABLED_FEATURES)
86
+ args.push('--disable', feature);
87
+ for (const name of userServers) {
88
+ if (keep.includes(name) || !overridableServerName(name))
89
+ continue;
90
+ args.push('-c', `mcp_servers.${name}.enabled=false`);
91
+ }
92
+ return args;
93
+ }
94
+ //# sourceMappingURL=agent-isolation.js.map