@doxbrix/doxloop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +93 -0
  3. package/README.md +576 -0
  4. package/SECURITY.md +15 -0
  5. package/assets/brand/README.md +8 -0
  6. package/assets/brand/doxloop-favicon.png +0 -0
  7. package/assets/brand/doxloop-logo-dark.png +0 -0
  8. package/assets/brand/doxloop-logo-light.png +0 -0
  9. package/assets/doxbrix-preview.css +6672 -0
  10. package/dist/agents.d.ts +26 -0
  11. package/dist/agents.d.ts.map +1 -0
  12. package/dist/agents.js +258 -0
  13. package/dist/agents.js.map +1 -0
  14. package/dist/args.d.ts +8 -0
  15. package/dist/args.d.ts.map +1 -0
  16. package/dist/args.js +95 -0
  17. package/dist/args.js.map +1 -0
  18. package/dist/artifact-deploy.d.ts +8 -0
  19. package/dist/artifact-deploy.d.ts.map +1 -0
  20. package/dist/artifact-deploy.js +240 -0
  21. package/dist/artifact-deploy.js.map +1 -0
  22. package/dist/auth.d.ts +17 -0
  23. package/dist/auth.d.ts.map +1 -0
  24. package/dist/auth.js +245 -0
  25. package/dist/auth.js.map +1 -0
  26. package/dist/author.d.ts +30 -0
  27. package/dist/author.d.ts.map +1 -0
  28. package/dist/author.js +195 -0
  29. package/dist/author.js.map +1 -0
  30. package/dist/capture.d.ts +10 -0
  31. package/dist/capture.d.ts.map +1 -0
  32. package/dist/capture.js +299 -0
  33. package/dist/capture.js.map +1 -0
  34. package/dist/cli.d.ts +3 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +558 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/deploy.d.ts +22 -0
  39. package/dist/deploy.d.ts.map +1 -0
  40. package/dist/deploy.js +136 -0
  41. package/dist/deploy.js.map +1 -0
  42. package/dist/doctor.d.ts +18 -0
  43. package/dist/doctor.d.ts.map +1 -0
  44. package/dist/doctor.js +222 -0
  45. package/dist/doctor.js.map +1 -0
  46. package/dist/doxbrix-markdown.d.ts +20 -0
  47. package/dist/doxbrix-markdown.d.ts.map +1 -0
  48. package/dist/doxbrix-markdown.js +873 -0
  49. package/dist/doxbrix-markdown.js.map +1 -0
  50. package/dist/errors.d.ts +8 -0
  51. package/dist/errors.d.ts.map +1 -0
  52. package/dist/errors.js +15 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/fs.d.ts +6 -0
  55. package/dist/fs.d.ts.map +1 -0
  56. package/dist/fs.js +77 -0
  57. package/dist/fs.js.map +1 -0
  58. package/dist/generator-api.d.ts +69 -0
  59. package/dist/generator-api.d.ts.map +1 -0
  60. package/dist/generator-api.js +6 -0
  61. package/dist/generator-api.js.map +1 -0
  62. package/dist/generator-manager.d.ts +13 -0
  63. package/dist/generator-manager.d.ts.map +1 -0
  64. package/dist/generator-manager.js +155 -0
  65. package/dist/generator-manager.js.map +1 -0
  66. package/dist/generator-runtime.d.ts +24 -0
  67. package/dist/generator-runtime.d.ts.map +1 -0
  68. package/dist/generator-runtime.js +265 -0
  69. package/dist/generator-runtime.js.map +1 -0
  70. package/dist/generators.d.ts +21 -0
  71. package/dist/generators.d.ts.map +1 -0
  72. package/dist/generators.js +202 -0
  73. package/dist/generators.js.map +1 -0
  74. package/dist/preview.d.ts +21 -0
  75. package/dist/preview.d.ts.map +1 -0
  76. package/dist/preview.js +691 -0
  77. package/dist/preview.js.map +1 -0
  78. package/dist/progress.d.ts +19 -0
  79. package/dist/progress.d.ts.map +1 -0
  80. package/dist/progress.js +70 -0
  81. package/dist/progress.js.map +1 -0
  82. package/dist/project.d.ts +37 -0
  83. package/dist/project.d.ts.map +1 -0
  84. package/dist/project.js +499 -0
  85. package/dist/project.js.map +1 -0
  86. package/dist/sync.d.ts +7 -0
  87. package/dist/sync.d.ts.map +1 -0
  88. package/dist/sync.js +221 -0
  89. package/dist/sync.js.map +1 -0
  90. package/dist/types.d.ts +141 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/validation.d.ts +4 -0
  95. package/dist/validation.d.ts.map +1 -0
  96. package/dist/validation.js +478 -0
  97. package/dist/validation.js.map +1 -0
  98. package/dist/version.d.ts +3 -0
  99. package/dist/version.d.ts.map +1 -0
  100. package/dist/version.js +5 -0
  101. package/dist/version.js.map +1 -0
  102. package/docs/agent-compatibility.md +41 -0
  103. package/docs/ci-and-automation.md +56 -0
  104. package/docs/doxbrix-http-api.md +182 -0
  105. package/docs/generator-authoring.md +59 -0
  106. package/docs/generator-selection.md +25 -0
  107. package/docs/project-format.md +97 -0
  108. package/docs/security-model.md +90 -0
  109. package/docs/troubleshooting.md +103 -0
  110. package/package.json +87 -0
  111. package/skills/doxloop-authoring/SKILL.md +381 -0
  112. package/skills/doxloop-authoring/agents/openai.yaml +4 -0
  113. package/skills/doxloop-authoring/assets/screenshot-highlight.js +83 -0
  114. package/skills/doxloop-authoring/references/accessibility.md +54 -0
  115. package/skills/doxloop-authoring/references/audience-flavors.md +93 -0
  116. package/skills/doxloop-authoring/references/branding.md +50 -0
  117. package/skills/doxloop-authoring/references/documentation-types.md +236 -0
  118. package/skills/doxloop-authoring/references/domain-ai-ml.md +67 -0
  119. package/skills/doxloop-authoring/references/domain-api-platform.md +68 -0
  120. package/skills/doxloop-authoring/references/domain-cli-tool.md +65 -0
  121. package/skills/doxloop-authoring/references/domain-data-platform.md +65 -0
  122. package/skills/doxloop-authoring/references/domain-developer-library.md +63 -0
  123. package/skills/doxloop-authoring/references/domain-ecommerce.md +63 -0
  124. package/skills/doxloop-authoring/references/domain-infrastructure-devops.md +67 -0
  125. package/skills/doxloop-authoring/references/domain-payments-fintech.md +69 -0
  126. package/skills/doxloop-authoring/references/domain-saas.md +71 -0
  127. package/skills/doxloop-authoring/references/domain-security-identity.md +65 -0
  128. package/skills/doxloop-authoring/references/editorial-style.md +105 -0
  129. package/skills/doxloop-authoring/references/examples-and-evidence.md +71 -0
  130. package/skills/doxloop-authoring/references/navigation-architecture.md +152 -0
  131. package/skills/doxloop-authoring/references/project-format.md +119 -0
  132. package/skills/doxloop-authoring/references/quality.md +122 -0
  133. package/skills/doxloop-authoring/references/reference-sites.md +207 -0
  134. package/skills/doxloop-authoring/references/screenshots.md +251 -0
  135. package/skills/doxloop-authoring/references/template-routing.md +94 -0
  136. package/skills/doxloop-authoring/references/type-administrator-guide.md +59 -0
  137. package/skills/doxloop-authoring/references/type-api-reference.md +66 -0
  138. package/skills/doxloop-authoring/references/type-architecture-concepts.md +61 -0
  139. package/skills/doxloop-authoring/references/type-cli-manual.md +61 -0
  140. package/skills/doxloop-authoring/references/type-deployment-operations.md +64 -0
  141. package/skills/doxloop-authoring/references/type-developer-portal.md +69 -0
  142. package/skills/doxloop-authoring/references/type-getting-started.md +59 -0
  143. package/skills/doxloop-authoring/references/type-integration-guide.md +59 -0
  144. package/skills/doxloop-authoring/references/type-migration-release.md +66 -0
  145. package/skills/doxloop-authoring/references/type-sdk-guide.md +63 -0
  146. package/skills/doxloop-authoring/references/type-troubleshooting-kb.md +63 -0
  147. package/skills/doxloop-authoring/references/type-user-guide.md +59 -0
  148. package/skills/doxloop-doxbrix/SKILL.md +83 -0
  149. package/skills/doxloop-doxbrix/agents/openai.yaml +4 -0
  150. package/skills/doxloop-doxbrix/references/api-endpoints.md +128 -0
  151. package/skills/doxloop-doxbrix/references/components.md +137 -0
  152. package/skills/doxloop-doxbrix/references/manifest.md +117 -0
@@ -0,0 +1,182 @@
1
+ # Doxbrix HTTP API used by Doxloop
2
+
3
+ This document is the integration boundary between the public Doxloop CLI and
4
+ the Doxbrix platform. Doxloop calls these endpoints directly and does not
5
+ depend on server source code or a server-side SDK.
6
+
7
+ The default base URL is `https://app.doxbrix.com`. It can be replaced with
8
+ `DOXLOOP_API_URL` or `--api-url`. All requests and responses use JSON.
9
+ Authenticated requests send `Authorization: Bearer dxb_…` with a Doxbrix
10
+ Personal Access Token. Redirects are refused so bearer credentials are never
11
+ forwarded to another destination. Alternate API URLs must use HTTPS; HTTP is
12
+ accepted only for loopback development.
13
+
14
+ ## Device authorization
15
+
16
+ Start authorization:
17
+
18
+ ```http
19
+ POST /api/v1/auth/device/start
20
+ Content-Type: application/json
21
+
22
+ {"name":"doxloop @ hostname","scopes":["docs:read","docs:write","project:read","project:admin"]}
23
+ ```
24
+
25
+ Successful response:
26
+
27
+ ```json
28
+ {
29
+ "deviceCode": "opaque-device-code",
30
+ "userCode": "ABCD-EFGH",
31
+ "verificationUri": "https://app.doxbrix.com/activate",
32
+ "expiresIn": 600,
33
+ "interval": 5
34
+ }
35
+ ```
36
+
37
+ Poll for completion:
38
+
39
+ ```http
40
+ POST /api/v1/auth/device/poll
41
+ Content-Type: application/json
42
+
43
+ {"deviceCode":"opaque-device-code"}
44
+ ```
45
+
46
+ The response is one of:
47
+
48
+ ```json
49
+ {"status":"pending"}
50
+ {"status":"approved","token":"dxb_opaque-access-token"}
51
+ {"status":"expired"}
52
+ ```
53
+
54
+ Tokens can also be created manually in the Doxbrix web app and passed with
55
+ `doxloop login --token dxb_…` or the `DOXLOOP_TOKEN`/`DOXBRIX_TOKEN`
56
+ environment variables. Doxloop verifies a token against `/api/v1/me` before
57
+ storing it. Prefer the device flow or environment variables so a token does not
58
+ remain in shell history.
59
+
60
+ ## Current account
61
+
62
+ ```http
63
+ GET /api/v1/me
64
+ Authorization: Bearer dxb_…
65
+ ```
66
+
67
+ Response:
68
+
69
+ ```json
70
+ {"id":"account-id","email":"user@example.com","name":"Example User"}
71
+ ```
72
+
73
+ `name` may be `null`.
74
+
75
+ ## Projects
76
+
77
+ Fetch a project by id or slug (`404` when it does not exist):
78
+
79
+ ```http
80
+ GET /api/v1/projects/{idOrSlug}
81
+ Authorization: Bearer dxb_…
82
+ ```
83
+
84
+ ```json
85
+ {"project":{"id":"project-id","name":"Example documentation","slug":"example-documentation"}}
86
+ ```
87
+
88
+ Create a project:
89
+
90
+ ```http
91
+ POST /api/v1/projects
92
+ Authorization: Bearer dxb_…
93
+ Content-Type: application/json
94
+
95
+ {"name":"Example documentation","slug":"example-documentation","seedTemplate":false}
96
+ ```
97
+
98
+ The response uses the same `{"project":{…}}` envelope. API-created projects
99
+ default to `seedTemplate: false` so the following bundle is their only
100
+ documentation structure. Pass `true` only when the Doxbrix web starter spaces
101
+ and pages are wanted.
102
+
103
+ ## Push a documentation bundle
104
+
105
+ ```http
106
+ POST /api/v1/projects/{idOrSlug}/bundle
107
+ Authorization: Bearer dxb_…
108
+ Content-Type: application/json
109
+ ```
110
+
111
+ The request body is:
112
+
113
+ ```json
114
+ {
115
+ "manifest": { "version": 1, "spaces": [] },
116
+ "basePath": "docs",
117
+ "pages": [
118
+ {"path": "index.mdx", "markdown": "---\ntitle: Welcome\n---\n\n# Welcome"}
119
+ ],
120
+ "media": [
121
+ {"path": "assets/logo.svg", "base64": "…"}
122
+ ],
123
+ "publish": true
124
+ }
125
+ ```
126
+
127
+ `manifest` is the parsed `docs.json` object. Page and media paths are relative
128
+ to the documentation directory. Media content is base64-encoded. The server
129
+ converts markdown to blocks and materializes spaces, navigation, and pages.
130
+ Only the manifest and files under the configured documentation directory may
131
+ be represented in the payload; configured product-source directories must
132
+ never be included.
133
+
134
+ This endpoint is the native Doxbrix generator boundary. Do not send external
135
+ generator output to it; use the artifact deployment API below.
136
+
137
+ Successful response:
138
+
139
+ ```json
140
+ {
141
+ "result": {
142
+ "spaces": 1,
143
+ "pagesCreated": 2,
144
+ "pagesUpdated": 0,
145
+ "navItems": 3,
146
+ "warnings": []
147
+ },
148
+ "dryRun": false
149
+ }
150
+ ```
151
+
152
+ ## Deploy a locally-built static artifact
153
+
154
+ Create the project with its producing generator:
155
+
156
+ ```json
157
+ {
158
+ "name": "Example documentation",
159
+ "slug": "example-documentation",
160
+ "connectedArtifact": { "generator": "docusaurus" }
161
+ }
162
+ ```
163
+
164
+ Reserve an upload by sending the ZIP byte length and lowercase/uppercase SHA-256
165
+ hex digest to `POST /api/v1/projects/{idOrSlug}/deployments`. PUT the exact ZIP
166
+ bytes to the returned `deployment.upload.url` with every returned header, then
167
+ call `POST /api/v1/projects/{idOrSlug}/deployments/{buildId}/complete`.
168
+ Doxbrix rejects missing, expired, size-mismatched, or checksum-mismatched objects.
169
+
170
+ Poll `GET /api/v1/projects/{idOrSlug}/deployments/{buildId}` until `status` is
171
+ `ready` or `failed`. A ready response includes `hostedUrl`, file/page counts, and
172
+ the generator retained for finalization.
173
+
174
+ ## Errors
175
+
176
+ Error responses use:
177
+
178
+ ```json
179
+ {"error":{"code":"machine-readable-code","message":"Human-readable message"}}
180
+ ```
181
+
182
+ Doxloop also accepts `{"error":"message"}` and `{"message":"message"}` shapes.
@@ -0,0 +1,59 @@
1
+ # Author a generator package
2
+
3
+ A generator package connects Doxloop's shared authoring workflow to one native
4
+ documentation framework.
5
+
6
+ ## Package contract
7
+
8
+ Export a default adapter created with `defineGenerator` from
9
+ `@doxbrix/doxloop/generator-api`. The adapter declares:
10
+
11
+ - generator API version and stable ID;
12
+ - package identity and version;
13
+ - authoring skill name and directory;
14
+ - content root, page extensions, ignored output, and content format;
15
+ - native build command and output directory;
16
+ - scaffold, preview, and validation implementations;
17
+ - an optional local-asset resolver for root-relative public assets outside the
18
+ content directory; and
19
+ - an optional page reader for non-Markdown formats.
20
+
21
+ Package metadata should include:
22
+
23
+ ```json
24
+ {
25
+ "doxloop": {
26
+ "type": "generator",
27
+ "apiVersion": 1,
28
+ "id": "example",
29
+ "skill": "./skills/doxloop-example"
30
+ }
31
+ }
32
+ ```
33
+
34
+ ## Responsibilities
35
+
36
+ Scaffolding creates a minimal native project with explicit starter markers that
37
+ must fail release validation until authoring replaces them. Preview runs the
38
+ native development workflow without editing generated output. Validation checks
39
+ native navigation, configuration, metadata, routes, and conventions; shared
40
+ validation checks professional content, local links, placeholders, and secrets.
41
+
42
+ The format skill must use `$doxloop-authoring`, route all reader pages through
43
+ native navigation, document native components and theme mapping, identify
44
+ generated directories, and require both `doxloop test` and the strict native
45
+ build. It must also document how committed application guide screenshots reach
46
+ the built site: the native source directory, public or base-aware URL, caption
47
+ or figure syntax, and any required build-copy step. Guide screenshots must not
48
+ use `.doxloop/cache/reference/`, which is reserved for ignored external
49
+ design-reference evidence.
50
+
51
+ ## Compatibility and testing
52
+
53
+ Increment `GENERATOR_API_VERSION` only for breaking adapter changes. Generator
54
+ packages declare a compatible core peer dependency and are published after the
55
+ matching core version.
56
+
57
+ Tests should scaffold, load, validate, install the format skill, build, and
58
+ exercise preview failure behavior. Skill validation checks frontmatter,
59
+ metadata, local reference links, shared-skill delegation, and generator routing.
@@ -0,0 +1,25 @@
1
+ # Select a documentation generator
2
+
3
+ Choose the generator when initializing a project. Doxbrix is built in; external
4
+ generators require their package in the new project.
5
+
6
+ Use Doxbrix for native Doxbrix publishing and interactive API endpoint blocks.
7
+ Choose another generator when an existing toolchain, extension ecosystem, or
8
+ static-hosting requirement is more important.
9
+
10
+ `doxloop generator add <name>` installs support; it does not rewrite the project
11
+ or convert existing content. Doxloop currently has no automatic generator
12
+ migration because navigation, frontmatter, components, themes, and route rules
13
+ are not mechanically equivalent.
14
+
15
+ To migrate:
16
+
17
+ 1. Create a new project with the target generator.
18
+ 2. Copy the confirmed documentation brief and source bindings.
19
+ 3. Ask `doxloop create` to preserve the agreed coverage while translating
20
+ content into the target generator's native format.
21
+ 4. Compare routes, navigation, metadata, components, and theme behavior.
22
+ 5. Run `doxloop test` and the target generator's strict build.
23
+ 6. Redirect changed public URLs before replacing the existing site.
24
+
25
+ Keep the original project until the new site passes validation and route review.
@@ -0,0 +1,97 @@
1
+ # Doxloop project format
2
+
3
+ Doxloop stores project configuration under `.doxloop/`. Commit the configuration
4
+ and synchronization state when a team should share the same authoring decisions.
5
+
6
+ Create a new documentation project beside, never inside, the product source:
7
+
8
+ ```bash
9
+ doxloop create --source ./my-product --output ./my-docs
10
+ ```
11
+
12
+ ## `project.json`
13
+
14
+ ```json
15
+ {
16
+ "schemaVersion": 1,
17
+ "title": "Example documentation",
18
+ "contentDir": "docs",
19
+ "generator": "doxbrix",
20
+ "sources": [{ "name": "product", "path": "../product" }],
21
+ "designReferences": [{ "url": "https://docs.example.com/" }],
22
+ "application": {
23
+ "baseUrl": "http://localhost:3000/",
24
+ "source": "product",
25
+ "startCommand": "npm run dev",
26
+ "readyPath": "/health",
27
+ "screenshots": {
28
+ "policy": "requested",
29
+ "viewport": { "width": 1440, "height": 900 },
30
+ "highlight": true
31
+ }
32
+ },
33
+ "documentation": {
34
+ "primaryAudience": "Application developers",
35
+ "experienceLevel": "intermediate",
36
+ "priorityOutcomes": ["Install the SDK", "Send the first request"],
37
+ "locale": "en-US",
38
+ "tone": ["clear", "direct", "professional"],
39
+ "standardsProfile": "doxloop-v1",
40
+ "styleGuide": "doxloop",
41
+ "terminology": {},
42
+ "exclusions": [],
43
+ "accessibilityTarget": "WCAG 2.2 AA"
44
+ }
45
+ }
46
+ ```
47
+
48
+ - `contentDir` must be a non-symlinked relative directory inside the project.
49
+ - `sources` is the optional read-only evidence allowlist used by the authoring
50
+ workflow. It may be empty when no local product source is available. Configured
51
+ source paths must be outside the documentation project; sibling product and
52
+ documentation directories are the recommended layout.
53
+ - `generatorPackage` is required for an external generator and must match the
54
+ official package selected by `generator`.
55
+ - `designReferences` accept absolute HTTP or HTTPS URLs without credentials.
56
+ - `application` is optional and describes a safe local or test application
57
+ surface for guide screenshots. `source` names a configured source and is
58
+ required when `startCommand` is present. Screenshot policy is `requested`,
59
+ `auto`, or `off`; projects without this object keep the existing behavior.
60
+ - `documentation` persists confirmed reader, scope, terminology, editorial, and
61
+ accessibility decisions.
62
+
63
+ Schema version 1 treats a missing legacy `generator` as `doxbrix` and supplies
64
+ the default documentation brief when it is absent. Unsupported structures fail
65
+ closed rather than being silently migrated.
66
+
67
+ ## `sync-state.json`
68
+
69
+ Each Git source records the commit, timestamp, and a fingerprint of tracked and
70
+ untracked non-ignored, non-credential source content used by the last successful
71
+ authoring run. The fingerprint prevents an unchanged dirty working tree from
72
+ being reported again after its content is committed.
73
+
74
+ Doxloop updates synchronization state only when create or update exits
75
+ successfully, documentation validation passes, and create has saved a primary
76
+ audience and priority outcomes.
77
+
78
+ ## `last-run.json`
79
+
80
+ After a successful create or update, Doxloop records the mode, selected agent,
81
+ completion time, validation summary, and synchronized source count. This is an
82
+ ignored operational receipt, not an evidence map or a substitute for version
83
+ control.
84
+
85
+ ## Reference-design evidence
86
+
87
+ `.doxloop/reference-design.json` is authored by the design-reference workflow.
88
+ Screenshots and raw measurements remain under `.doxloop/cache/` and should not
89
+ be committed.
90
+
91
+ Application guide screenshots are different: they are reader-facing assets,
92
+ are placed in the selected generator's native asset directory, and should be
93
+ committed with the guide. `doxloop create --screenshots` and
94
+ `doxloop update --screenshots` require them explicitly; a request that clearly asks for
95
+ screenshots also enables the authoring workflow. Contextual focus rings and
96
+ numbered markers are baked into the image so they render consistently across
97
+ generators.
@@ -0,0 +1,90 @@
1
+ # Security model
2
+
3
+ Doxloop separates local authoring from explicit publishing. This document
4
+ describes which guarantees the CLI enforces and which behavior depends on the
5
+ selected coding agent and host environment.
6
+
7
+ ## Trust boundaries
8
+
9
+ - `.doxloop/project.json`, installed generator packages, configured product
10
+ sources, and public design references are user-selected inputs.
11
+ - Source text, comments, tests, generated files, command output, and reference
12
+ pages are evidence, not instructions. The authoring prompt tells agents to
13
+ ignore embedded requests that change scope, reveal secrets, weaken safeguards,
14
+ contact unrelated services, or publish.
15
+ - Coding agents retain the filesystem permissions granted by their host. The
16
+ configured `sources` list is an authoring-policy boundary, not an operating
17
+ system sandbox.
18
+ - Product sources are read-only evidence. The create and update workflows tell
19
+ the agent to write only inside the separate documentation project.
20
+ - `doxloop review` launches supported agents in read-only or plan mode.
21
+ Create and update require write access to the documentation project.
22
+
23
+ ## Local files
24
+
25
+ The documentation `contentDir` must be a relative directory inside the project.
26
+ Doxloop rejects project-root, escaping, absolute, and symlinked content
27
+ directories. Deployment rejects a content directory that differs from
28
+ `.doxloop/project.json` and refuses symlinks anywhere in documentation content.
29
+
30
+ The first-run create flow rejects a documentation project that is the same as,
31
+ inside, or contains a configured product source. It also rejects configured
32
+ sources that are missing and non-empty output directories before writing project
33
+ files.
34
+
35
+ Do not place credentials, private keys, environment files, internal data, or
36
+ product source under the documentation content directory.
37
+
38
+ ## Network access
39
+
40
+ Authoring and validation do not publish. A coding agent may still have network
41
+ access according to its own configuration.
42
+
43
+ Design capture:
44
+
45
+ - accepts only configured HTTP or HTTPS reference origins;
46
+ - captures at most three requested pages per origin;
47
+ - blocks navigation away from the configured origin;
48
+ - blocks loopback, private, link-local, multicast, and other non-public network
49
+ destinations; and
50
+ - stores screenshots and measurements under the Git-ignored
51
+ `.doxloop/cache/reference/`.
52
+
53
+ For a trusted local documentation reference, set
54
+ `DOXLOOP_ALLOW_PRIVATE_REFERENCES=1` for that capture invocation.
55
+
56
+ Application guide screenshots are separate authoring actions. They run only
57
+ when requested, forced with `--screenshots`, or enabled by the optional
58
+ `application.screenshots.policy`. The authoring workflow limits navigation to
59
+ the configured application surface and requires non-production fixtures or test
60
+ accounts, but the selected coding agent and its browser retain the permissions
61
+ granted by their host. Do not configure a production application, store
62
+ credentials in `.doxloop/project.json`, or expose customer data for capture.
63
+ Use `--no-screenshots` when the authoring environment should not operate an
64
+ application.
65
+
66
+ Doxbrix API requests require HTTPS. HTTP is accepted only for loopback
67
+ development. Authenticated and device-flow requests refuse redirects.
68
+
69
+ ## Credentials and publishing
70
+
71
+ Prefer `doxloop login` and the device flow. Environment variables avoid placing
72
+ tokens in shell history; `--token` is intended for controlled automation.
73
+ Stored credentials use user-only file permissions on operating systems that
74
+ support them.
75
+
76
+ Only `doxloop deploy` publishes. Native projects send a contained documentation
77
+ bundle to the Doxbrix API. External generators are built on the user's machine;
78
+ Doxloop removes its Doxbrix tokens from the child build environment, scans only
79
+ the declared static output, rejects symbolic links/private keys/likely secret
80
+ files, omits source maps, and enforces file and expansion limits before packaging.
81
+
82
+ The archive is uploaded directly to one short-lived, single-object S3 URL whose
83
+ SHA-256 checksum is signed. Doxbrix verifies the object size and checksum before
84
+ queueing its trusted indexing/infusion pipeline. Generator code never runs in the
85
+ Doxbrix web or finalizer process for this deployment path.
86
+
87
+ ## Reporting vulnerabilities
88
+
89
+ Follow [the repository security policy](../SECURITY.md). Never put credentials,
90
+ private product source, or unpublished vulnerability details in a public issue.
@@ -0,0 +1,103 @@
1
+ # Troubleshoot Doxloop
2
+
3
+ ## Check the complete setup
4
+
5
+ Inside an existing documentation project, run:
6
+
7
+ ```bash
8
+ doxloop doctor
9
+ ```
10
+
11
+ Before creating a new project, check the proposed sibling directories:
12
+
13
+ ```bash
14
+ doxloop doctor --source ./my-product --output ./my-docs
15
+ ```
16
+
17
+ Doctor checks the Node.js version, product-source boundary, selected agent and
18
+ authentication, project skills, generator readiness, and documentation
19
+ validation, plus the default preview port. It exits with code 1 when a required
20
+ check fails.
21
+
22
+ ## No supported agent is available
23
+
24
+ Install Codex, Claude Code, or Gemini CLI and confirm its executable is on
25
+ `PATH`. Alternatively:
26
+
27
+ ```bash
28
+ doxloop create --print
29
+ ```
30
+
31
+ Paste the prompt into an agent session opened at the project root.
32
+
33
+ ## An installed skill is modified
34
+
35
+ Doxloop does not overwrite local skill changes automatically.
36
+
37
+ ```bash
38
+ doxloop agent status
39
+ doxloop agent update
40
+ ```
41
+
42
+ Review the diff before replacing intentional customizations.
43
+
44
+ ## An external generator cannot load
45
+
46
+ Install both core and the selected generator package in the documentation
47
+ project. Then run:
48
+
49
+ ```bash
50
+ doxloop generator doctor
51
+ ```
52
+
53
+ Native generators may also require Python, Ruby, Hugo, or Node dependencies.
54
+ The doctor output reports the expected build command.
55
+
56
+ ## Create exits but synchronization is not recorded
57
+
58
+ Doxloop withholds the baseline when validation fails or the create brief lacks
59
+ `primaryAudience` or `priorityOutcomes`. Run `doxloop test`, resolve every
60
+ error, and rerun create or update.
61
+
62
+ ## Capture blocks a URL
63
+
64
+ Capture rejects unconfigured origins, cross-origin navigation, and private
65
+ network destinations. Add the intended public origin with `--reference`. For a
66
+ trusted local reference only:
67
+
68
+ ```bash
69
+ DOXLOOP_ALLOW_PRIVATE_REFERENCES=1 doxloop capture http://localhost:3000/
70
+ ```
71
+
72
+ ## Guide screenshots are missing
73
+
74
+ Application guide screenshots are created during `doxloop create` or
75
+ `doxloop update`, not by design-reference capture. Ask for screenshots in the
76
+ request or pass `--screenshots`. Configure `application.baseUrl` and, when
77
+ Doxloop should start the application, a configured source name plus
78
+ `startCommand` in `.doxloop/project.json`.
79
+
80
+ If the selected agent has no browser capability, the application is unreachable,
81
+ or authentication and safe test data are unavailable, Doxloop keeps the text
82
+ guide complete and omits broken image links. Establish a non-production browser
83
+ session or local fixture and rerun the affected update. Never provide production
84
+ credentials or customer data for screenshot capture.
85
+
86
+ ## API requests fail
87
+
88
+ Confirm the API URL uses HTTPS, the token starts with `dxb_`, and the endpoint
89
+ does not redirect. HTTP is accepted only for loopback development. Prefer
90
+ `doxloop login` to refresh credentials.
91
+
92
+ ## Preview port is occupied
93
+
94
+ Choose another port:
95
+
96
+ ```bash
97
+ doxloop preview --port 4400 --open
98
+ ```
99
+
100
+ ## Validation and native builds disagree
101
+
102
+ `doxloop test` performs fast project and content checks; the native build is the
103
+ final generator parser. Run both and treat either failure as blocking.
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@doxbrix/doxloop",
3
+ "version": "0.1.0",
4
+ "description": "A local-first documentation agent CLI for Codex, Claude Code, and Gemini.",
5
+ "type": "module",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/doxbrix/doxloop.git"
10
+ },
11
+ "homepage": "https://github.com/doxbrix/doxloop#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/doxbrix/doxloop/issues"
14
+ },
15
+ "bin": {
16
+ "doxloop": "dist/cli.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "assets",
21
+ "docs",
22
+ "skills/doxloop-authoring",
23
+ "skills/doxloop-doxbrix",
24
+ "README.md",
25
+ "CHANGELOG.md",
26
+ "SECURITY.md",
27
+ "LICENSE"
28
+ ],
29
+ "exports": {
30
+ "./generator-api": {
31
+ "types": "./dist/generator-api.d.ts",
32
+ "import": "./dist/generator-api.js"
33
+ },
34
+ "./generator-runtime": {
35
+ "types": "./dist/generator-runtime.d.ts",
36
+ "import": "./dist/generator-runtime.js"
37
+ }
38
+ },
39
+ "publishConfig": {
40
+ "registry": "https://registry.npmjs.org",
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "chokidar": "^4.0.3",
45
+ "fflate": "^0.8.2",
46
+ "gray-matter": "^4.0.3",
47
+ "highlight.js": "^11.11.1"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.15.3",
51
+ "tsx": "^4.19.4",
52
+ "typescript": "^5.8.3",
53
+ "vitest": "^3.1.2",
54
+ "@doxbrix/doxloop-generator-docusaurus": "0.1.0",
55
+ "@doxbrix/doxloop-generator-hugo": "0.1.0",
56
+ "@doxbrix/doxloop-generator-jekyll": "0.1.0",
57
+ "@doxbrix/doxloop-generator-markdoc": "0.1.0",
58
+ "@doxbrix/doxloop-generator-mkdocs": "0.1.0",
59
+ "@doxbrix/doxloop-generator-nextra": "0.1.0",
60
+ "@doxbrix/doxloop-generator-starlight": "0.1.0",
61
+ "@doxbrix/doxloop-generator-sphinx": "0.1.0",
62
+ "@doxbrix/doxloop-generator-vitepress": "0.1.0",
63
+ "@doxbrix/doxloop-generator-static": "0.1.0"
64
+ },
65
+ "engines": {
66
+ "node": ">=20.12.0"
67
+ },
68
+ "main": "index.js",
69
+ "directories": {
70
+ "doc": "docs"
71
+ },
72
+ "keywords": [],
73
+ "author": "",
74
+ "scripts": {
75
+ "build": "pnpm run build:core && pnpm run build:generators",
76
+ "build:core": "rm -rf dist && tsc -p tsconfig.json && node scripts/prepare-dist.mjs",
77
+ "build:generators": "pnpm --filter './packages/*' run build",
78
+ "dev": "tsx src/cli.ts",
79
+ "typecheck": "tsc --noEmit && pnpm --filter './packages/*' run typecheck",
80
+ "pretest": "pnpm run build",
81
+ "test": "vitest run",
82
+ "eval:agents": "pnpm run build && node scripts/run-authoring-evals.mjs",
83
+ "check": "pnpm run typecheck && pnpm run test && pnpm run validate:skill && pnpm run check:boundary",
84
+ "validate:skill": "node scripts/validate-skills.mjs",
85
+ "check:boundary": "node scripts/check-boundary.mjs"
86
+ }
87
+ }