@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.
- package/CHANGELOG.md +34 -0
- package/LICENSE +93 -0
- package/README.md +576 -0
- package/SECURITY.md +15 -0
- package/assets/brand/README.md +8 -0
- package/assets/brand/doxloop-favicon.png +0 -0
- package/assets/brand/doxloop-logo-dark.png +0 -0
- package/assets/brand/doxloop-logo-light.png +0 -0
- package/assets/doxbrix-preview.css +6672 -0
- package/dist/agents.d.ts +26 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +258 -0
- package/dist/agents.js.map +1 -0
- package/dist/args.d.ts +8 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +95 -0
- package/dist/args.js.map +1 -0
- package/dist/artifact-deploy.d.ts +8 -0
- package/dist/artifact-deploy.d.ts.map +1 -0
- package/dist/artifact-deploy.js +240 -0
- package/dist/artifact-deploy.js.map +1 -0
- package/dist/auth.d.ts +17 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +245 -0
- package/dist/auth.js.map +1 -0
- package/dist/author.d.ts +30 -0
- package/dist/author.d.ts.map +1 -0
- package/dist/author.js +195 -0
- package/dist/author.js.map +1 -0
- package/dist/capture.d.ts +10 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +299 -0
- package/dist/capture.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +558 -0
- package/dist/cli.js.map +1 -0
- package/dist/deploy.d.ts +22 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +136 -0
- package/dist/deploy.js.map +1 -0
- package/dist/doctor.d.ts +18 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +222 -0
- package/dist/doctor.js.map +1 -0
- package/dist/doxbrix-markdown.d.ts +20 -0
- package/dist/doxbrix-markdown.d.ts.map +1 -0
- package/dist/doxbrix-markdown.js +873 -0
- package/dist/doxbrix-markdown.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/fs.d.ts +6 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +77 -0
- package/dist/fs.js.map +1 -0
- package/dist/generator-api.d.ts +69 -0
- package/dist/generator-api.d.ts.map +1 -0
- package/dist/generator-api.js +6 -0
- package/dist/generator-api.js.map +1 -0
- package/dist/generator-manager.d.ts +13 -0
- package/dist/generator-manager.d.ts.map +1 -0
- package/dist/generator-manager.js +155 -0
- package/dist/generator-manager.js.map +1 -0
- package/dist/generator-runtime.d.ts +24 -0
- package/dist/generator-runtime.d.ts.map +1 -0
- package/dist/generator-runtime.js +265 -0
- package/dist/generator-runtime.js.map +1 -0
- package/dist/generators.d.ts +21 -0
- package/dist/generators.d.ts.map +1 -0
- package/dist/generators.js +202 -0
- package/dist/generators.js.map +1 -0
- package/dist/preview.d.ts +21 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +691 -0
- package/dist/preview.js.map +1 -0
- package/dist/progress.d.ts +19 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +70 -0
- package/dist/progress.js.map +1 -0
- package/dist/project.d.ts +37 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +499 -0
- package/dist/project.js.map +1 -0
- package/dist/sync.d.ts +7 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +221 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +141 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +4 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +478 -0
- package/dist/validation.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/docs/agent-compatibility.md +41 -0
- package/docs/ci-and-automation.md +56 -0
- package/docs/doxbrix-http-api.md +182 -0
- package/docs/generator-authoring.md +59 -0
- package/docs/generator-selection.md +25 -0
- package/docs/project-format.md +97 -0
- package/docs/security-model.md +90 -0
- package/docs/troubleshooting.md +103 -0
- package/package.json +87 -0
- package/skills/doxloop-authoring/SKILL.md +381 -0
- package/skills/doxloop-authoring/agents/openai.yaml +4 -0
- package/skills/doxloop-authoring/assets/screenshot-highlight.js +83 -0
- package/skills/doxloop-authoring/references/accessibility.md +54 -0
- package/skills/doxloop-authoring/references/audience-flavors.md +93 -0
- package/skills/doxloop-authoring/references/branding.md +50 -0
- package/skills/doxloop-authoring/references/documentation-types.md +236 -0
- package/skills/doxloop-authoring/references/domain-ai-ml.md +67 -0
- package/skills/doxloop-authoring/references/domain-api-platform.md +68 -0
- package/skills/doxloop-authoring/references/domain-cli-tool.md +65 -0
- package/skills/doxloop-authoring/references/domain-data-platform.md +65 -0
- package/skills/doxloop-authoring/references/domain-developer-library.md +63 -0
- package/skills/doxloop-authoring/references/domain-ecommerce.md +63 -0
- package/skills/doxloop-authoring/references/domain-infrastructure-devops.md +67 -0
- package/skills/doxloop-authoring/references/domain-payments-fintech.md +69 -0
- package/skills/doxloop-authoring/references/domain-saas.md +71 -0
- package/skills/doxloop-authoring/references/domain-security-identity.md +65 -0
- package/skills/doxloop-authoring/references/editorial-style.md +105 -0
- package/skills/doxloop-authoring/references/examples-and-evidence.md +71 -0
- package/skills/doxloop-authoring/references/navigation-architecture.md +152 -0
- package/skills/doxloop-authoring/references/project-format.md +119 -0
- package/skills/doxloop-authoring/references/quality.md +122 -0
- package/skills/doxloop-authoring/references/reference-sites.md +207 -0
- package/skills/doxloop-authoring/references/screenshots.md +251 -0
- package/skills/doxloop-authoring/references/template-routing.md +94 -0
- package/skills/doxloop-authoring/references/type-administrator-guide.md +59 -0
- package/skills/doxloop-authoring/references/type-api-reference.md +66 -0
- package/skills/doxloop-authoring/references/type-architecture-concepts.md +61 -0
- package/skills/doxloop-authoring/references/type-cli-manual.md +61 -0
- package/skills/doxloop-authoring/references/type-deployment-operations.md +64 -0
- package/skills/doxloop-authoring/references/type-developer-portal.md +69 -0
- package/skills/doxloop-authoring/references/type-getting-started.md +59 -0
- package/skills/doxloop-authoring/references/type-integration-guide.md +59 -0
- package/skills/doxloop-authoring/references/type-migration-release.md +66 -0
- package/skills/doxloop-authoring/references/type-sdk-guide.md +63 -0
- package/skills/doxloop-authoring/references/type-troubleshooting-kb.md +63 -0
- package/skills/doxloop-authoring/references/type-user-guide.md +59 -0
- package/skills/doxloop-doxbrix/SKILL.md +83 -0
- package/skills/doxloop-doxbrix/agents/openai.yaml +4 -0
- package/skills/doxloop-doxbrix/references/api-endpoints.md +128 -0
- package/skills/doxloop-doxbrix/references/components.md +137 -0
- package/skills/doxloop-doxbrix/references/manifest.md +117 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { assertAllowedFlags, booleanFlag, flag, flags, numberFlag, parseArgs, } from './args.js';
|
|
4
|
+
import { chooseAgent, installSkill, parseAgent, skillStatus } from './agents.js';
|
|
5
|
+
import { login, logout, whoami } from './auth.js';
|
|
6
|
+
import { parseReasoning, resolveScreenshotIntent, runAuthor, } from './author.js';
|
|
7
|
+
import { capture } from './capture.js';
|
|
8
|
+
import { deploy } from './deploy.js';
|
|
9
|
+
import { formatDoctorReport, runDoctor } from './doctor.js';
|
|
10
|
+
import { DoxloopError, UsageError } from './errors.js';
|
|
11
|
+
import { addGenerator, diagnoseGenerator, formatGeneratorInfo, formatGeneratorList, removeGenerator, } from './generator-manager.js';
|
|
12
|
+
import { GENERATOR_CATALOG, parseGenerator } from './generators.js';
|
|
13
|
+
import { addDesignReferences, findProjectRoot, loadProject, parseDesignReference, parseSource, resolveSeparateProjectLayout, scaffoldProject, validateProjectSourceBoundaries, } from './project.js';
|
|
14
|
+
import { startPreview } from './preview.js';
|
|
15
|
+
import { formatValidation, validateProject } from './validation.js';
|
|
16
|
+
import { VERSION } from './version.js';
|
|
17
|
+
async function main() {
|
|
18
|
+
const args = parseArgs(process.argv.slice(2));
|
|
19
|
+
validateCommandArguments(args);
|
|
20
|
+
if (booleanFlag(args, 'version', 'v')) {
|
|
21
|
+
process.stdout.write(`${VERSION}\n`);
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (args.command === undefined || booleanFlag(args, 'help', 'h')) {
|
|
25
|
+
process.stdout.write(help(args.command));
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
const cwd = resolve(flag(args, 'cwd') ?? process.cwd());
|
|
29
|
+
switch (args.command) {
|
|
30
|
+
case 'init':
|
|
31
|
+
return initCommand(args, cwd);
|
|
32
|
+
case 'agent':
|
|
33
|
+
return agentCommand(args, cwd);
|
|
34
|
+
case 'generator':
|
|
35
|
+
return generatorCommand(args, cwd);
|
|
36
|
+
case 'doctor': {
|
|
37
|
+
const source = flag(args, 'source');
|
|
38
|
+
const output = flag(args, 'output');
|
|
39
|
+
const selectedAgent = parseAgent(flag(args, 'agent'));
|
|
40
|
+
const report = await runDoctor({
|
|
41
|
+
cwd,
|
|
42
|
+
...(source ? { source } : {}),
|
|
43
|
+
...(output ? { output } : {}),
|
|
44
|
+
...(selectedAgent ? { agent: selectedAgent } : {}),
|
|
45
|
+
});
|
|
46
|
+
process.stdout.write(`${formatDoctorReport(report)}\n`);
|
|
47
|
+
return report.ready ? 0 : 1;
|
|
48
|
+
}
|
|
49
|
+
case 'create':
|
|
50
|
+
if (flag(args, 'source') !== undefined || flag(args, 'output') !== undefined) {
|
|
51
|
+
return createProjectCommand(args, cwd);
|
|
52
|
+
}
|
|
53
|
+
return authorCommand(args, cwd, 'create');
|
|
54
|
+
case 'update':
|
|
55
|
+
return authorCommand(args, cwd, 'update');
|
|
56
|
+
case 'review': {
|
|
57
|
+
return authorCommand(args, cwd, 'review');
|
|
58
|
+
}
|
|
59
|
+
case 'capture': {
|
|
60
|
+
const root = await findProjectRoot(cwd);
|
|
61
|
+
await capture({ root, urls: args.positionals });
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
case 'test': {
|
|
65
|
+
const root = await findProjectRoot(cwd);
|
|
66
|
+
const result = await validateProject(root);
|
|
67
|
+
const format = outputFormat(flag(args, 'format'));
|
|
68
|
+
process.stdout.write(format === 'json'
|
|
69
|
+
? `${JSON.stringify(result, null, 2)}\n`
|
|
70
|
+
: `${formatValidation(result)}\n`);
|
|
71
|
+
return result.errors > 0 ? 1 : 0;
|
|
72
|
+
}
|
|
73
|
+
case 'status':
|
|
74
|
+
return statusCommand(cwd, outputFormat(flag(args, 'format')));
|
|
75
|
+
case 'preview': {
|
|
76
|
+
const root = await findProjectRoot(cwd);
|
|
77
|
+
await startPreview({
|
|
78
|
+
root,
|
|
79
|
+
host: flag(args, 'host') ?? '127.0.0.1',
|
|
80
|
+
port: numberFlag(args, 'port', 4321),
|
|
81
|
+
open: booleanFlag(args, 'open'),
|
|
82
|
+
});
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
case 'login':
|
|
86
|
+
{
|
|
87
|
+
const apiOverride = flag(args, 'api-url');
|
|
88
|
+
const token = flag(args, 'token');
|
|
89
|
+
await login({
|
|
90
|
+
...(apiOverride ? { apiUrl: apiOverride } : {}),
|
|
91
|
+
...(token ? { token } : {}),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return 0;
|
|
95
|
+
case 'logout':
|
|
96
|
+
await logout();
|
|
97
|
+
process.stdout.write('Signed out of Doxbrix.\n');
|
|
98
|
+
return 0;
|
|
99
|
+
case 'whoami':
|
|
100
|
+
await whoami(flag(args, 'api-url'));
|
|
101
|
+
return 0;
|
|
102
|
+
case 'deploy': {
|
|
103
|
+
const root = await findProjectRoot(cwd);
|
|
104
|
+
const name = flag(args, 'name');
|
|
105
|
+
const slug = flag(args, 'slug');
|
|
106
|
+
const apiOverride = flag(args, 'api-url');
|
|
107
|
+
await deploy({
|
|
108
|
+
root,
|
|
109
|
+
...(name ? { name } : {}),
|
|
110
|
+
...(slug ? { slug } : {}),
|
|
111
|
+
dryRun: booleanFlag(args, 'dry-run'),
|
|
112
|
+
...(apiOverride ? { apiUrl: apiOverride } : {}),
|
|
113
|
+
});
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
throw new UsageError(`Unknown command "${args.command}". Run \`doxloop --help\` for available commands.`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function initCommand(args, cwd) {
|
|
121
|
+
const directory = args.positionals[0];
|
|
122
|
+
if (!directory)
|
|
123
|
+
throw new UsageError('Usage: doxloop init <directory> [--source name=path]');
|
|
124
|
+
if (args.positionals.length > 1) {
|
|
125
|
+
throw new UsageError('The init command accepts one destination directory.');
|
|
126
|
+
}
|
|
127
|
+
const sources = flags(args, 'source').map(parseSource);
|
|
128
|
+
const designReferences = flags(args, 'reference').map(parseDesignReference);
|
|
129
|
+
const title = flag(args, 'title');
|
|
130
|
+
const generator = parseGenerator(flag(args, 'generator'));
|
|
131
|
+
const projectRoot = resolve(cwd, directory);
|
|
132
|
+
await validateProjectSourceBoundaries(projectRoot, sources);
|
|
133
|
+
const root = await scaffoldProject({
|
|
134
|
+
directory: projectRoot,
|
|
135
|
+
...(title ? { title } : {}),
|
|
136
|
+
sources,
|
|
137
|
+
designReferences,
|
|
138
|
+
...(generator ? { generator } : {}),
|
|
139
|
+
});
|
|
140
|
+
const installs = await installSkill({ root });
|
|
141
|
+
process.stdout.write(`Created Doxloop project at ${root}\n`);
|
|
142
|
+
for (const install of installs) {
|
|
143
|
+
process.stdout.write(`${install.action}: ${install.path}\n`);
|
|
144
|
+
}
|
|
145
|
+
process.stdout.write(`\nNext:\n cd ${directory}\n doxloop create\n doxloop preview --open\n doxloop test\n`);
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
async function createProjectCommand(args, cwd) {
|
|
149
|
+
const source = flag(args, 'source');
|
|
150
|
+
const output = flag(args, 'output');
|
|
151
|
+
if (!source || !output) {
|
|
152
|
+
throw new UsageError('Creating a new documentation project requires both `--source <product-directory>` and `--output <documentation-directory>`.');
|
|
153
|
+
}
|
|
154
|
+
if (flags(args, 'source').length > 1 || flags(args, 'output').length > 1) {
|
|
155
|
+
throw new UsageError('The first-run create command accepts one source and one output directory.');
|
|
156
|
+
}
|
|
157
|
+
const layout = await resolveSeparateProjectLayout({ cwd, source, output });
|
|
158
|
+
const requestedAgent = parseAgent(flag(args, 'agent'));
|
|
159
|
+
const print = booleanFlag(args, 'print');
|
|
160
|
+
const selectedAgent = print ? requestedAgent : (await chooseAgent(requestedAgent)).name;
|
|
161
|
+
const designReferences = flags(args, 'reference').map(parseDesignReference);
|
|
162
|
+
const model = flag(args, 'model');
|
|
163
|
+
const reasoning = parseReasoning(flag(args, 'reasoning'));
|
|
164
|
+
const screenshots = screenshotIntent(args);
|
|
165
|
+
if (reasoning && selectedAgent && selectedAgent !== 'codex') {
|
|
166
|
+
throw new DoxloopError(`--reasoning is only supported with Codex. Configure the reasoning behavior of ${selectedAgent} in its own settings.`, 2);
|
|
167
|
+
}
|
|
168
|
+
process.stdout.write(`Welcome to Doxloop\n\nProduct source:\n ${layout.sourceRoot}\n Read-only — product files will not be changed or deployed.\n\nDocumentation project:\n ${layout.projectRoot}\n Only this project can be previewed or deployed.\n\n`);
|
|
169
|
+
const root = await scaffoldProject({
|
|
170
|
+
directory: layout.projectRoot,
|
|
171
|
+
sources: [layout.sourceBinding],
|
|
172
|
+
designReferences,
|
|
173
|
+
});
|
|
174
|
+
if (print) {
|
|
175
|
+
await installSkill({
|
|
176
|
+
root,
|
|
177
|
+
...(selectedAgent ? { agent: selectedAgent } : {}),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const result = await runAuthor({
|
|
181
|
+
root,
|
|
182
|
+
mode: 'create',
|
|
183
|
+
...(selectedAgent ? { agent: selectedAgent } : {}),
|
|
184
|
+
...(model ? { model } : {}),
|
|
185
|
+
...(reasoning ? { reasoning } : {}),
|
|
186
|
+
screenshots,
|
|
187
|
+
print,
|
|
188
|
+
...(args.positionals.length > 0
|
|
189
|
+
? { request: args.positionals.join(' ') }
|
|
190
|
+
: {}),
|
|
191
|
+
});
|
|
192
|
+
if (result === 0 && !print) {
|
|
193
|
+
const validation = await validateProject(root);
|
|
194
|
+
process.stdout.write(`\nDocumentation created successfully.\n\nPages created: ${validation.pages.length}\nDocumentation project: ${root}\nProduct source files included in deployment: 0\n\nPreview the documentation:\n cd ${root}\n doxloop preview --open\n\nWhen the product changes:\n cd ${root}\n doxloop update\n`);
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
async function authorCommand(args, cwd, mode) {
|
|
199
|
+
const root = await findProjectRoot(cwd);
|
|
200
|
+
if (mode !== 'review') {
|
|
201
|
+
const project = await loadProject(root);
|
|
202
|
+
await validateProjectSourceBoundaries(root, project.sources);
|
|
203
|
+
}
|
|
204
|
+
const selectedAgent = parseAgent(flag(args, 'agent'));
|
|
205
|
+
const request = args.positionals.join(' ') || undefined;
|
|
206
|
+
const designReferences = flags(args, 'reference').map(parseDesignReference);
|
|
207
|
+
if (mode !== 'review')
|
|
208
|
+
await addDesignReferences(root, designReferences);
|
|
209
|
+
const model = flag(args, 'model');
|
|
210
|
+
const reasoning = parseReasoning(flag(args, 'reasoning'));
|
|
211
|
+
const screenshots = screenshotIntent(args);
|
|
212
|
+
return runAuthor({
|
|
213
|
+
root,
|
|
214
|
+
mode,
|
|
215
|
+
...(selectedAgent ? { agent: selectedAgent } : {}),
|
|
216
|
+
...(model ? { model } : {}),
|
|
217
|
+
...(reasoning ? { reasoning } : {}),
|
|
218
|
+
screenshots,
|
|
219
|
+
print: booleanFlag(args, 'print'),
|
|
220
|
+
...(request || (mode === 'review' && designReferences.length > 0)
|
|
221
|
+
? {
|
|
222
|
+
request: [
|
|
223
|
+
request,
|
|
224
|
+
...(mode === 'review'
|
|
225
|
+
? designReferences.map((reference) => `Use ${reference.url} as an external documentation design reference for this read-only review.`)
|
|
226
|
+
: []),
|
|
227
|
+
]
|
|
228
|
+
.filter(Boolean)
|
|
229
|
+
.join('\n'),
|
|
230
|
+
}
|
|
231
|
+
: {}),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
async function agentCommand(args, cwd) {
|
|
235
|
+
const action = args.positionals[0];
|
|
236
|
+
if (!action || !['setup', 'status', 'update'].includes(action)) {
|
|
237
|
+
throw new UsageError('Usage: doxloop agent <setup|status|update> [--agent <name>]');
|
|
238
|
+
}
|
|
239
|
+
const root = await findProjectRoot(cwd);
|
|
240
|
+
if (action === 'status') {
|
|
241
|
+
for (const item of await skillStatus(root)) {
|
|
242
|
+
process.stdout.write(`${item.status.padEnd(8)} ${item.path}\n`);
|
|
243
|
+
}
|
|
244
|
+
return 0;
|
|
245
|
+
}
|
|
246
|
+
const selected = parseAgent(flag(args, 'agent'));
|
|
247
|
+
const results = await installSkill({
|
|
248
|
+
root,
|
|
249
|
+
...(selected ? { agent: selected } : {}),
|
|
250
|
+
replace: action === 'update',
|
|
251
|
+
});
|
|
252
|
+
for (const item of results)
|
|
253
|
+
process.stdout.write(`${item.action}: ${item.path}\n`);
|
|
254
|
+
return 0;
|
|
255
|
+
}
|
|
256
|
+
async function generatorCommand(args, cwd) {
|
|
257
|
+
const action = args.positionals[0];
|
|
258
|
+
if (!action || !['list', 'add', 'remove', 'info', 'doctor'].includes(action)) {
|
|
259
|
+
throw new UsageError('Usage: doxloop generator <list|add|remove|info|doctor> [generator]');
|
|
260
|
+
}
|
|
261
|
+
if (action === 'list') {
|
|
262
|
+
process.stdout.write(`${await formatGeneratorList(cwd)}\n`);
|
|
263
|
+
return 0;
|
|
264
|
+
}
|
|
265
|
+
if (action === 'doctor') {
|
|
266
|
+
process.stdout.write(`${await diagnoseGenerator(cwd)}\n`);
|
|
267
|
+
return 0;
|
|
268
|
+
}
|
|
269
|
+
const generator = args.positionals[1];
|
|
270
|
+
if (!generator) {
|
|
271
|
+
throw new UsageError(`Usage: doxloop generator ${action} <generator>`);
|
|
272
|
+
}
|
|
273
|
+
if (args.positionals.length > 2) {
|
|
274
|
+
throw new UsageError(`The generator ${action} command accepts one generator name.`);
|
|
275
|
+
}
|
|
276
|
+
if (action === 'add') {
|
|
277
|
+
await addGenerator(cwd, generator);
|
|
278
|
+
return 0;
|
|
279
|
+
}
|
|
280
|
+
if (action === 'remove') {
|
|
281
|
+
await removeGenerator(cwd, generator);
|
|
282
|
+
return 0;
|
|
283
|
+
}
|
|
284
|
+
process.stdout.write(`${await formatGeneratorInfo(cwd, generator)}\n`);
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
async function statusCommand(cwd, format) {
|
|
288
|
+
const root = await findProjectRoot(cwd);
|
|
289
|
+
const project = await loadProject(root);
|
|
290
|
+
const result = await validateProject(root);
|
|
291
|
+
if (format === 'json') {
|
|
292
|
+
process.stdout.write(`${JSON.stringify({
|
|
293
|
+
title: project.title,
|
|
294
|
+
root,
|
|
295
|
+
generator: project.generator,
|
|
296
|
+
pages: result.pages.length,
|
|
297
|
+
sources: project.sources,
|
|
298
|
+
designReferences: project.designReferences,
|
|
299
|
+
...(project.application ? { application: project.application } : {}),
|
|
300
|
+
errors: result.errors,
|
|
301
|
+
warnings: result.warnings,
|
|
302
|
+
}, null, 2)}\n`);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
process.stdout.write(`${project.title}\nRoot: ${root}\nGenerator: ${project.generator}\nPages: ${result.pages.length}\nSources: ${project.sources.length}\nDesign references: ${project.designReferences.length}\nApplication screenshots: ${project.application ? `${project.application.screenshots?.policy ?? 'requested'} (${project.application.baseUrl})` : 'not configured'}\nErrors: ${result.errors}\nWarnings: ${result.warnings}\n`);
|
|
306
|
+
for (const source of project.sources) {
|
|
307
|
+
process.stdout.write(`source ${source.name}: ${source.path}\n`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return result.errors > 0 ? 1 : 0;
|
|
311
|
+
}
|
|
312
|
+
function validateCommandArguments(args) {
|
|
313
|
+
const allowed = {
|
|
314
|
+
init: ['title', 'source', 'reference', 'generator'],
|
|
315
|
+
agent: ['agent'],
|
|
316
|
+
generator: [],
|
|
317
|
+
doctor: ['source', 'output', 'agent'],
|
|
318
|
+
create: ['agent', 'model', 'reasoning', 'reference', 'print', 'screenshots', 'no-screenshots', 'source', 'output'],
|
|
319
|
+
update: ['agent', 'model', 'reasoning', 'reference', 'print', 'screenshots', 'no-screenshots'],
|
|
320
|
+
review: ['agent', 'model', 'reasoning', 'reference', 'print'],
|
|
321
|
+
capture: [],
|
|
322
|
+
test: ['format'],
|
|
323
|
+
status: ['format'],
|
|
324
|
+
preview: ['host', 'port', 'open'],
|
|
325
|
+
login: ['api-url', 'token'],
|
|
326
|
+
logout: [],
|
|
327
|
+
whoami: ['api-url'],
|
|
328
|
+
deploy: ['dry-run', 'name', 'slug', 'api-url'],
|
|
329
|
+
};
|
|
330
|
+
if (args.command === undefined) {
|
|
331
|
+
assertAllowedFlags(args, new Set());
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const commandFlags = allowed[args.command];
|
|
335
|
+
if (commandFlags === undefined)
|
|
336
|
+
return;
|
|
337
|
+
assertAllowedFlags(args, new Set(commandFlags));
|
|
338
|
+
if (!['init', 'agent', 'generator', 'create', 'update', 'review', 'capture'].includes(args.command) &&
|
|
339
|
+
args.positionals.length > 0) {
|
|
340
|
+
throw new UsageError(`The ${args.command} command does not accept arguments.`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function screenshotIntent(args) {
|
|
344
|
+
if (args.command === 'review')
|
|
345
|
+
return 'disabled';
|
|
346
|
+
return resolveScreenshotIntent(booleanFlag(args, 'screenshots'), booleanFlag(args, 'no-screenshots'));
|
|
347
|
+
}
|
|
348
|
+
function outputFormat(value) {
|
|
349
|
+
if (value === undefined || value === 'text')
|
|
350
|
+
return 'text';
|
|
351
|
+
if (value === 'json')
|
|
352
|
+
return 'json';
|
|
353
|
+
throw new UsageError('--format must be text or json');
|
|
354
|
+
}
|
|
355
|
+
function help(command) {
|
|
356
|
+
if (command === 'init') {
|
|
357
|
+
return `Usage: doxloop init <directory> [options]
|
|
358
|
+
|
|
359
|
+
Create a local documentation project and install the authoring and format skills.
|
|
360
|
+
|
|
361
|
+
Options:
|
|
362
|
+
--title <title> Documentation site title
|
|
363
|
+
--source <name=path> Add a local product source; may be repeated
|
|
364
|
+
--reference <url> Add a documentation design reference; may be repeated
|
|
365
|
+
--generator <name> Generator: ${GENERATOR_CATALOG.map((entry) => entry.id).join(', ')}
|
|
366
|
+
--cwd <directory> Resolve paths from this directory
|
|
367
|
+
`;
|
|
368
|
+
}
|
|
369
|
+
if (command === 'agent') {
|
|
370
|
+
return `Usage: doxloop agent <setup|status|update> [options]
|
|
371
|
+
|
|
372
|
+
Install or inspect the project-local Doxloop authoring and format skills.
|
|
373
|
+
|
|
374
|
+
Options:
|
|
375
|
+
--agent <name> codex, claude, or gemini
|
|
376
|
+
--cwd <directory> Run from this project directory
|
|
377
|
+
`;
|
|
378
|
+
}
|
|
379
|
+
if (command === 'generator') {
|
|
380
|
+
return `Usage: doxloop generator <action> [generator]
|
|
381
|
+
|
|
382
|
+
Install and inspect generator packages.
|
|
383
|
+
|
|
384
|
+
Actions:
|
|
385
|
+
list List official generators and installation state
|
|
386
|
+
add <generator> Install a generator package in the current project
|
|
387
|
+
remove <generator> Remove an unused generator package
|
|
388
|
+
info <generator> Show package, skill, build, and output information
|
|
389
|
+
doctor Verify the current project's selected generator
|
|
390
|
+
|
|
391
|
+
Options:
|
|
392
|
+
--cwd <directory> Run from this directory
|
|
393
|
+
`;
|
|
394
|
+
}
|
|
395
|
+
if (command === 'doctor') {
|
|
396
|
+
return `Usage: doxloop doctor [options]
|
|
397
|
+
|
|
398
|
+
Check whether Doxloop is ready to create, update, and preview documentation.
|
|
399
|
+
|
|
400
|
+
Run inside an existing documentation project, or check a new project layout:
|
|
401
|
+
doxloop doctor --source ./my-product --output ./my-docs
|
|
402
|
+
|
|
403
|
+
Options:
|
|
404
|
+
--source <directory> Read-only product source for a new project check
|
|
405
|
+
--output <directory> Separate documentation output for a new project check
|
|
406
|
+
--agent <name> Check codex, claude, or gemini
|
|
407
|
+
--cwd <directory> Run from this directory
|
|
408
|
+
`;
|
|
409
|
+
}
|
|
410
|
+
if (command === 'create' || command === 'update' || command === 'review') {
|
|
411
|
+
const screenshotOptions = command === 'review'
|
|
412
|
+
? ''
|
|
413
|
+
: ` --screenshots Capture and embed application guide screenshots
|
|
414
|
+
--no-screenshots Do not capture application screenshots
|
|
415
|
+
`;
|
|
416
|
+
const createUsage = command === 'create'
|
|
417
|
+
? `\nCreate a separate documentation project from an existing product:\n doxloop create --source <product-directory> --output <documentation-directory> [request]\n`
|
|
418
|
+
: '';
|
|
419
|
+
const createOptions = command === 'create'
|
|
420
|
+
? ` --source <directory> Read-only product source for a new documentation project\n --output <directory> New, separate documentation project directory\n`
|
|
421
|
+
: '';
|
|
422
|
+
return `Usage: doxloop ${command} [request] [options]
|
|
423
|
+
${createUsage}
|
|
424
|
+
|
|
425
|
+
Start an authoring agent with the project-local skill.
|
|
426
|
+
|
|
427
|
+
Options:
|
|
428
|
+
${createOptions} --agent <name> codex, claude, or gemini
|
|
429
|
+
--model <name> Model passed to the selected agent CLI
|
|
430
|
+
--reasoning <level> Codex reasoning effort: minimal, low, medium, high, or xhigh
|
|
431
|
+
--reference <url> Use a documentation design reference; may be repeated
|
|
432
|
+
${screenshotOptions} --print Print the prepared prompt instead of starting an agent
|
|
433
|
+
--cwd <directory> Run from this project directory
|
|
434
|
+
`;
|
|
435
|
+
}
|
|
436
|
+
if (command === 'capture') {
|
|
437
|
+
return `Usage: doxloop capture [url ...]
|
|
438
|
+
|
|
439
|
+
Render configured design-reference pages with a managed headless browser and
|
|
440
|
+
write full-page screenshots plus measured styles to .doxloop/cache/reference/.
|
|
441
|
+
Installs Playwright and Chromium on first use. URLs must be pages on a
|
|
442
|
+
configured design-reference origin; with no URLs, the configured reference
|
|
443
|
+
pages are captured.
|
|
444
|
+
|
|
445
|
+
Options:
|
|
446
|
+
--cwd <directory> Run from this project directory
|
|
447
|
+
`;
|
|
448
|
+
}
|
|
449
|
+
if (command === 'preview') {
|
|
450
|
+
return `Usage: doxloop preview [options]
|
|
451
|
+
|
|
452
|
+
Run the local documentation preview with live reload.
|
|
453
|
+
|
|
454
|
+
Options:
|
|
455
|
+
--host <host> Listening host (default: 127.0.0.1)
|
|
456
|
+
--port <port> Listening port (default: 4321)
|
|
457
|
+
--open Open the preview in a browser
|
|
458
|
+
--cwd <directory> Run from this project directory
|
|
459
|
+
`;
|
|
460
|
+
}
|
|
461
|
+
if (command === 'test' || command === 'status') {
|
|
462
|
+
return `Usage: doxloop ${command} [options]
|
|
463
|
+
|
|
464
|
+
${command === 'test' ? 'Validate documentation structure and content.' : 'Summarize the project and its validation state.'}
|
|
465
|
+
|
|
466
|
+
Options:
|
|
467
|
+
--format <text|json> Output format (default: text)
|
|
468
|
+
--cwd <directory> Run from this project directory
|
|
469
|
+
`;
|
|
470
|
+
}
|
|
471
|
+
if (command === 'login') {
|
|
472
|
+
return `Usage: doxloop login [options]
|
|
473
|
+
|
|
474
|
+
Sign in with the Doxbrix device flow or verify a supplied personal access token.
|
|
475
|
+
|
|
476
|
+
Options:
|
|
477
|
+
--token <token> Token to verify and store; prefer the device flow or an environment variable
|
|
478
|
+
--api-url <url> HTTPS API base URL; HTTP is allowed only for localhost
|
|
479
|
+
`;
|
|
480
|
+
}
|
|
481
|
+
if (command === 'logout') {
|
|
482
|
+
return `Usage: doxloop logout
|
|
483
|
+
|
|
484
|
+
Remove the locally stored Doxbrix token.
|
|
485
|
+
`;
|
|
486
|
+
}
|
|
487
|
+
if (command === 'whoami') {
|
|
488
|
+
return `Usage: doxloop whoami [options]
|
|
489
|
+
|
|
490
|
+
Show the Doxbrix account for the active token.
|
|
491
|
+
|
|
492
|
+
Options:
|
|
493
|
+
--api-url <url> HTTPS API base URL; HTTP is allowed only for localhost
|
|
494
|
+
`;
|
|
495
|
+
}
|
|
496
|
+
if (command === 'deploy') {
|
|
497
|
+
return `Usage: doxloop deploy [options]
|
|
498
|
+
|
|
499
|
+
Validate and publish documentation through the public Doxbrix HTTP API.
|
|
500
|
+
|
|
501
|
+
Options:
|
|
502
|
+
--dry-run Validate and summarize without uploading
|
|
503
|
+
--name <name> Hosted project name
|
|
504
|
+
--slug <slug> Hosted project slug
|
|
505
|
+
--api-url <url> Override the Doxbrix API base URL
|
|
506
|
+
--cwd <directory> Run from this project directory
|
|
507
|
+
`;
|
|
508
|
+
}
|
|
509
|
+
return `Doxloop ${VERSION}
|
|
510
|
+
|
|
511
|
+
Local-first documentation authoring with Codex, Claude Code, or Gemini.
|
|
512
|
+
|
|
513
|
+
Usage:
|
|
514
|
+
doxloop <command> [options]
|
|
515
|
+
|
|
516
|
+
Author:
|
|
517
|
+
init Create a documentation project
|
|
518
|
+
create Ask an agent to create documentation
|
|
519
|
+
update Maintain docs after product changes
|
|
520
|
+
review Ask an agent for a read-only review
|
|
521
|
+
agent Set up project-local agent skills
|
|
522
|
+
generator Install and inspect generator packages
|
|
523
|
+
capture Capture rendered design-reference evidence
|
|
524
|
+
|
|
525
|
+
Verify:
|
|
526
|
+
doctor Check runtime, source, agent, generator, skills, and documentation
|
|
527
|
+
status Summarize the documentation project
|
|
528
|
+
test Validate pages, navigation, links, and code fences
|
|
529
|
+
preview Run a beautiful local preview
|
|
530
|
+
|
|
531
|
+
Publish:
|
|
532
|
+
login Sign in to Doxbrix
|
|
533
|
+
logout Remove the local token
|
|
534
|
+
whoami Show the current Doxbrix account
|
|
535
|
+
deploy Publish through the public Doxbrix HTTP API
|
|
536
|
+
|
|
537
|
+
Global options:
|
|
538
|
+
--cwd <directory> Run as if started in this directory
|
|
539
|
+
-h, --help Show help
|
|
540
|
+
-v, --version Show version
|
|
541
|
+
|
|
542
|
+
Run \`doxloop <command> --help\` for command details.
|
|
543
|
+
`;
|
|
544
|
+
}
|
|
545
|
+
main()
|
|
546
|
+
.then((code) => {
|
|
547
|
+
process.exitCode = code;
|
|
548
|
+
})
|
|
549
|
+
.catch((error) => {
|
|
550
|
+
if (error instanceof DoxloopError) {
|
|
551
|
+
process.stderr.write(`doxloop: ${error.message}\n`);
|
|
552
|
+
process.exitCode = error.exitCode;
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
process.stderr.write(`doxloop: ${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
|
|
556
|
+
process.exitCode = 1;
|
|
557
|
+
});
|
|
558
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/deploy.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface DeploymentBundle {
|
|
2
|
+
manifest: unknown;
|
|
3
|
+
basePath: string;
|
|
4
|
+
pages: Array<{
|
|
5
|
+
path: string;
|
|
6
|
+
markdown: string;
|
|
7
|
+
}>;
|
|
8
|
+
media: Array<{
|
|
9
|
+
path: string;
|
|
10
|
+
base64: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export declare function deploy(options: {
|
|
14
|
+
root: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
slug?: string;
|
|
17
|
+
dryRun?: boolean;
|
|
18
|
+
apiUrl?: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
export declare function buildDeploymentBundle(root: string, contentDir: string): Promise<DeploymentBundle>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AA0CA,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAChD,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC/C;AAgBD,wBAAsB,MAAM,CAAC,OAAO,EAAE;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFhB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
|