@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.
- package/CHANGELOG.md +1153 -0
- package/README.md +422 -226
- package/assets/doxbrix-preview.css +77 -15
- package/contracts/agent-events-v1.schema.json +1 -0
- package/contracts/coverage-v1.schema.json +59 -0
- package/contracts/drift-v1.schema.json +1 -0
- package/contracts/evaluation-v1.schema.json +62 -0
- package/contracts/quality-codes-v1.json +1 -0
- package/contracts/quality-report-v1.schema.json +1 -0
- package/contracts/validation-v1.schema.json +1 -0
- package/dist/agent-failure.d.ts +36 -0
- package/dist/agent-failure.js +98 -0
- package/dist/agent-isolation.d.ts +17 -0
- package/dist/agent-isolation.js +94 -0
- package/dist/agent-log.d.ts +197 -0
- package/dist/agent-log.js +1094 -0
- package/dist/agent-process.d.ts +63 -0
- package/dist/agent-process.js +128 -0
- package/dist/agent-reply.d.ts +47 -0
- package/dist/agent-reply.js +315 -0
- package/dist/agents.d.ts +40 -4
- package/dist/agents.js +115 -11
- package/dist/api-coverage.d.ts +11 -0
- package/dist/api-coverage.js +72 -0
- package/dist/application-probe.d.ts +28 -0
- package/dist/application-probe.js +93 -0
- package/dist/application-url.d.ts +14 -0
- package/dist/application-url.js +26 -0
- package/dist/args.js +15 -0
- package/dist/artifact-deploy.d.ts +9 -0
- package/dist/artifact-deploy.js +28 -8
- package/dist/assets.d.ts +72 -0
- package/dist/assets.js +382 -0
- package/dist/auth.d.ts +10 -0
- package/dist/auth.js +38 -9
- package/dist/author.d.ts +206 -4
- package/dist/author.js +1650 -52
- package/dist/authoring-batches.d.ts +190 -0
- package/dist/authoring-batches.js +489 -0
- package/dist/authoring-postpass.d.ts +79 -0
- package/dist/authoring-postpass.js +1289 -0
- package/dist/authoring-progress.d.ts +95 -0
- package/dist/authoring-progress.js +269 -0
- package/dist/autosync.d.ts +56 -0
- package/dist/autosync.js +442 -0
- package/dist/batch-artifacts.d.ts +81 -0
- package/dist/batch-artifacts.js +412 -0
- package/dist/batch-limits.d.ts +37 -0
- package/dist/batch-limits.js +80 -0
- package/dist/branding.d.ts +41 -0
- package/dist/branding.js +229 -0
- package/dist/bundle-upload.d.ts +26 -0
- package/dist/bundle-upload.js +99 -0
- package/dist/capture-auth.d.ts +95 -0
- package/dist/capture-auth.js +204 -0
- package/dist/capture.d.ts +48 -0
- package/dist/capture.js +20 -1
- package/dist/cli.js +839 -32
- package/dist/content-links.d.ts +10 -0
- package/dist/content-links.js +49 -0
- package/dist/contract-validation.d.ts +4 -0
- package/dist/contract-validation.js +25 -0
- package/dist/coverage-actions.d.ts +8 -0
- package/dist/coverage-actions.js +71 -0
- package/dist/coverage-resolutions.d.ts +16 -0
- package/dist/coverage-resolutions.js +58 -0
- package/dist/db.d.ts +37 -0
- package/dist/db.js +288 -0
- package/dist/demo.d.ts +12 -0
- package/dist/demo.js +122 -0
- package/dist/deploy-credentials.d.ts +7 -0
- package/dist/deploy-credentials.js +76 -0
- package/dist/deploy-targets/github-pages.d.ts +3 -0
- package/dist/deploy-targets/github-pages.js +100 -0
- package/dist/deploy-targets/index.d.ts +8 -0
- package/dist/deploy-targets/index.js +78 -0
- package/dist/deploy-targets/netlify.d.ts +3 -0
- package/dist/deploy-targets/netlify.js +49 -0
- package/dist/deploy-targets/types.d.ts +32 -0
- package/dist/deploy-targets/types.js +2 -0
- package/dist/deploy-targets/vercel.d.ts +3 -0
- package/dist/deploy-targets/vercel.js +95 -0
- package/dist/deploy.d.ts +9 -0
- package/dist/deploy.js +87 -13
- package/dist/deterministic-capture.d.ts +90 -0
- package/dist/deterministic-capture.js +435 -0
- package/dist/direct-edit.d.ts +40 -0
- package/dist/direct-edit.js +159 -0
- package/dist/docs-crawl.d.ts +86 -0
- package/dist/docs-crawl.js +536 -0
- package/dist/docs-site.d.ts +49 -0
- package/dist/docs-site.js +233 -0
- package/dist/doctor.js +8 -0
- package/dist/documentation-collections.d.ts +23 -0
- package/dist/documentation-collections.js +191 -0
- package/dist/documentation-plan.d.ts +253 -0
- package/dist/documentation-plan.js +2563 -0
- package/dist/doxbrix-build.d.ts +19 -0
- package/dist/doxbrix-build.js +167 -0
- package/dist/doxbrix-markdown.d.ts +9 -0
- package/dist/doxbrix-markdown.js +115 -14
- package/dist/drift.d.ts +10 -0
- package/dist/drift.js +164 -0
- package/dist/evaluation.d.ts +46 -0
- package/dist/evaluation.js +113 -0
- package/dist/evidence-pack.d.ts +47 -0
- package/dist/evidence-pack.js +358 -0
- package/dist/evidence.d.ts +25 -0
- package/dist/evidence.js +175 -0
- package/dist/fs.d.ts +8 -2
- package/dist/fs.js +41 -11
- package/dist/generator-api.d.ts +89 -0
- package/dist/generator-preflight.d.ts +27 -0
- package/dist/generator-preflight.js +105 -0
- package/dist/generator-runtime.d.ts +7 -0
- package/dist/generator-runtime.js +17 -1
- package/dist/generators.d.ts +24 -2
- package/dist/generators.js +54 -1
- package/dist/git-delivery.d.ts +17 -0
- package/dist/git-delivery.js +123 -0
- package/dist/globs.d.ts +16 -0
- package/dist/globs.js +65 -0
- package/dist/glossary.d.ts +26 -0
- package/dist/glossary.js +179 -0
- package/dist/history.d.ts +106 -0
- package/dist/history.js +600 -0
- package/dist/html-markdown.d.ts +46 -0
- package/dist/html-markdown.js +423 -0
- package/dist/interactive.js +16 -15
- package/dist/job-events.d.ts +74 -0
- package/dist/job-events.js +377 -0
- package/dist/keep-awake.d.ts +50 -0
- package/dist/keep-awake.js +123 -0
- package/dist/local-source-snapshot.d.ts +20 -0
- package/dist/local-source-snapshot.js +61 -0
- package/dist/mintlify-detect.d.ts +3 -0
- package/dist/mintlify-detect.js +18 -0
- package/dist/mintlify-import.d.ts +75 -0
- package/dist/mintlify-import.js +190 -0
- package/dist/navigation.d.ts +98 -0
- package/dist/navigation.js +310 -0
- package/dist/openapi.d.ts +60 -0
- package/dist/openapi.js +439 -0
- package/dist/page-editor-bridge.d.ts +3 -0
- package/dist/page-editor-bridge.js +109 -0
- package/dist/page-editor-preview.d.ts +10 -0
- package/dist/page-editor-preview.js +55 -0
- package/dist/page-extension.d.ts +9 -0
- package/dist/page-extension.js +15 -0
- package/dist/page-metadata.d.ts +28 -0
- package/dist/page-metadata.js +166 -0
- package/dist/page-operations.d.ts +34 -0
- package/dist/page-operations.js +215 -0
- package/dist/page-routes.d.ts +4 -0
- package/dist/page-routes.js +61 -0
- package/dist/pages.d.ts +20 -0
- package/dist/pages.js +184 -0
- package/dist/plan-generator.d.ts +3 -0
- package/dist/plan-generator.js +21 -0
- package/dist/plan-navigation.d.ts +11 -0
- package/dist/plan-navigation.js +30 -0
- package/dist/planning-captures.d.ts +20 -0
- package/dist/planning-captures.js +143 -0
- package/dist/planning-research.d.ts +135 -0
- package/dist/planning-research.js +472 -0
- package/dist/planning-triage.d.ts +23 -0
- package/dist/planning-triage.js +131 -0
- package/dist/preview.d.ts +24 -0
- package/dist/preview.js +280 -29
- package/dist/project-detect.d.ts +36 -0
- package/dist/project-detect.js +251 -0
- package/dist/project-import.d.ts +54 -0
- package/dist/project-import.js +157 -0
- package/dist/project-lock.d.ts +6 -0
- package/dist/project-lock.js +96 -0
- package/dist/project-registry.d.ts +25 -0
- package/dist/project-registry.js +79 -0
- package/dist/project.d.ts +35 -3
- package/dist/project.js +388 -38
- package/dist/prompts.d.ts +9 -0
- package/dist/prompts.js +33 -4
- package/dist/proposal-replay.d.ts +32 -0
- package/dist/proposal-replay.js +99 -0
- package/dist/quality-claims.d.ts +8 -0
- package/dist/quality-claims.js +168 -0
- package/dist/quality-config.d.ts +5 -0
- package/dist/quality-config.js +84 -0
- package/dist/quality-contract.d.ts +37 -0
- package/dist/quality-contract.js +46 -0
- package/dist/quality-examples.d.ts +4 -0
- package/dist/quality-examples.js +233 -0
- package/dist/quality-gates.d.ts +16 -0
- package/dist/quality-gates.js +192 -0
- package/dist/quality-links.d.ts +7 -0
- package/dist/quality-links.js +149 -0
- package/dist/quality-lint.d.ts +6 -0
- package/dist/quality-lint.js +124 -0
- package/dist/quality-rendered.d.ts +11 -0
- package/dist/quality-rendered.js +222 -0
- package/dist/quality-schema.d.ts +3 -0
- package/dist/quality-schema.js +71 -0
- package/dist/release-notes.d.ts +44 -0
- package/dist/release-notes.js +183 -0
- package/dist/remote-monitor.d.ts +16 -0
- package/dist/remote-monitor.js +74 -0
- package/dist/remote-source.d.ts +34 -0
- package/dist/remote-source.js +426 -0
- package/dist/review-diff.d.ts +82 -0
- package/dist/review-diff.js +400 -0
- package/dist/review-learning.d.ts +11 -0
- package/dist/review-learning.js +60 -0
- package/dist/review-render.d.ts +38 -0
- package/dist/review-render.js +224 -0
- package/dist/review-report.d.ts +9 -0
- package/dist/review-report.js +89 -0
- package/dist/review-ui.d.ts +14 -0
- package/dist/review-ui.js +1248 -0
- package/dist/schedule.d.ts +78 -0
- package/dist/schedule.js +480 -0
- package/dist/screen-capture-provider.d.ts +52 -0
- package/dist/screen-capture-provider.js +218 -0
- package/dist/screenshot-workflow.d.ts +167 -0
- package/dist/screenshot-workflow.js +1237 -0
- package/dist/settings.d.ts +1 -1
- package/dist/settings.js +95 -7
- package/dist/site-export.d.ts +18 -0
- package/dist/site-export.js +87 -0
- package/dist/source-connectors.d.ts +33 -0
- package/dist/source-connectors.js +268 -0
- package/dist/source-discovery.d.ts +132 -0
- package/dist/source-discovery.js +823 -0
- package/dist/source-intelligence.d.ts +9 -0
- package/dist/source-intelligence.js +306 -0
- package/dist/sync-review.d.ts +28 -0
- package/dist/sync-review.js +264 -0
- package/dist/sync-runs.d.ts +192 -0
- package/dist/sync-runs.js +2244 -0
- package/dist/sync.d.ts +35 -0
- package/dist/sync.js +298 -32
- package/dist/text-diff.d.ts +9 -0
- package/dist/text-diff.js +59 -0
- package/dist/types.d.ts +946 -1
- package/dist/ui/assets/doxloop-logo-light-De7Nx7j7.png +0 -0
- package/dist/ui/assets/index-BHBYU2aG.css +1 -0
- package/dist/ui/assets/index-Cq3RPQiC.js +33 -0
- package/dist/ui/index.html +18 -0
- package/dist/ui-server.d.ts +83 -0
- package/dist/ui-server.js +3532 -0
- package/dist/usage-budget.d.ts +28 -0
- package/dist/usage-budget.js +90 -0
- package/dist/validation.d.ts +25 -1
- package/dist/validation.js +312 -26
- package/dist/workspace-tools.d.ts +54 -0
- package/dist/workspace-tools.js +123 -0
- package/docs/agent-compatibility.md +50 -28
- package/docs/ci-and-automation.md +105 -66
- package/docs/doxbrix-http-api.md +8 -1
- package/docs/existing-documentation.md +80 -0
- package/docs/generation-performance.md +108 -0
- package/docs/generator-authoring.md +68 -5
- package/docs/generator-selection.md +50 -13
- package/docs/mintlify-import.md +71 -0
- package/docs/openapi-security.md +25 -0
- package/docs/project-format.md +331 -36
- package/docs/release-quality.md +158 -0
- package/docs/releasing.md +72 -0
- package/docs/review-workflows.md +51 -0
- package/docs/security-model.md +102 -39
- package/docs/troubleshooting.md +226 -93
- package/package.json +46 -15
- package/scripts/test-auto-screenshot.mjs +172 -0
- package/skills/doxloop-authoring/SKILL.md +242 -361
- package/skills/doxloop-authoring/references/existing-documentation.md +94 -0
- package/skills/doxloop-authoring/references/navigation-architecture.md +18 -7
- package/skills/doxloop-authoring/references/page-depth.md +169 -0
- package/skills/doxloop-authoring/references/project-format.md +106 -7
- package/skills/doxloop-authoring/references/quality.md +10 -0
- package/skills/doxloop-authoring/references/screenshot-manifest.md +113 -0
- package/skills/doxloop-authoring/references/screenshots.md +149 -235
- package/skills/doxloop-authoring/references/workflows.md +76 -0
- package/skills/doxloop-doxbrix/SKILL.md +38 -22
- package/skills/doxloop-doxbrix/references/api-endpoints.md +15 -14
- package/skills/doxloop-doxbrix/references/components.md +30 -3
- package/skills/doxloop-doxbrix/references/manifest.md +3 -2
- package/vendor/doxbrix-import/LICENSE +202 -0
- package/vendor/doxbrix-import/README.md +17 -0
- package/vendor/doxbrix-import/UPSTREAM.json +47 -0
- package/vendor/doxbrix-import/dist/docs/frontmatter.d.ts +13 -0
- package/vendor/doxbrix-import/dist/docs/frontmatter.js +83 -0
- package/vendor/doxbrix-import/dist/docs/import.d.ts +21 -0
- package/vendor/doxbrix-import/dist/docs/import.js +147 -0
- package/vendor/doxbrix-import/dist/docs/manifest.d.ts +163 -0
- package/vendor/doxbrix-import/dist/docs/manifest.js +64 -0
- package/vendor/doxbrix-import/dist/docs/project.d.ts +25 -0
- package/vendor/doxbrix-import/dist/docs/project.js +77 -0
- package/vendor/doxbrix-import/dist/docs/starter.d.ts +4 -0
- package/vendor/doxbrix-import/dist/docs/starter.js +11 -0
- package/vendor/doxbrix-import/dist/importer.d.ts +227 -0
- package/vendor/doxbrix-import/dist/importer.js +1567 -0
- package/vendor/doxbrix-import/dist/mintlify-openapi.d.ts +37 -0
- package/vendor/doxbrix-import/dist/mintlify-openapi.js +305 -0
- package/vendor/doxbrix-import/dist/safe-path.d.ts +9 -0
- package/vendor/doxbrix-import/dist/safe-path.js +47 -0
- package/dist/agents.d.ts.map +0 -1
- package/dist/agents.js.map +0 -1
- package/dist/args.d.ts.map +0 -1
- package/dist/args.js.map +0 -1
- package/dist/artifact-deploy.d.ts.map +0 -1
- package/dist/artifact-deploy.js.map +0 -1
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/author.d.ts.map +0 -1
- package/dist/author.js.map +0 -1
- package/dist/capture.d.ts.map +0 -1
- package/dist/capture.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/deploy.d.ts.map +0 -1
- package/dist/deploy.js.map +0 -1
- package/dist/deployment-visibility.d.ts.map +0 -1
- package/dist/deployment-visibility.js.map +0 -1
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/doxbrix-markdown.d.ts.map +0 -1
- package/dist/doxbrix-markdown.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/fs.d.ts.map +0 -1
- package/dist/fs.js.map +0 -1
- package/dist/generator-api.d.ts.map +0 -1
- package/dist/generator-api.js.map +0 -1
- package/dist/generator-manager.d.ts.map +0 -1
- package/dist/generator-manager.js.map +0 -1
- package/dist/generator-runtime.d.ts.map +0 -1
- package/dist/generator-runtime.js.map +0 -1
- package/dist/generators.d.ts.map +0 -1
- package/dist/generators.js.map +0 -1
- package/dist/interactive.d.ts.map +0 -1
- package/dist/interactive.js.map +0 -1
- package/dist/preview.d.ts.map +0 -1
- package/dist/preview.js.map +0 -1
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/project.d.ts.map +0 -1
- package/dist/project.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js.map +0 -1
- package/dist/settings.d.ts.map +0 -1
- package/dist/settings.js.map +0 -1
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- 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: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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(--
|
|
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:
|
|
6688
|
-
line-height: 1.
|
|
6689
|
-
letter-spacing: -0.
|
|
6690
|
-
font-weight:
|
|
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-
|
|
6695
|
-
font-size:
|
|
6696
|
-
line-height: 1.
|
|
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-
|
|
6714
|
-
.dp-root--published[data-shell-theme='atlas'] :where(.dp-p, .dp-wysiwyg-content) { color: var(--dp-
|
|
6715
|
-
.dp-root--published[data-shell-theme='atlas'] :where(.dp-h2, .dp-wysiwyg-content h2) { color: var(--dp-page-text); font-size:
|
|
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
|