@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,499 @@
1
+ import { access, mkdir, readFile, readdir, realpath, stat, writeFile, } from 'node:fs/promises';
2
+ import { basename, dirname, isAbsolute, join, normalize, relative, resolve, sep, } from 'node:path';
3
+ import matter from 'gray-matter';
4
+ import { DoxloopError } from './errors.js';
5
+ import { listFiles, pathExists, readJson, resolveContainedDirectory, } from './fs.js';
6
+ import { generatorCatalogEntry, generatorPackageName, loadGeneratorAdapter, } from './generators.js';
7
+ import { PACKAGE_NAME, VERSION } from './version.js';
8
+ export const PROJECT_FILE = join('.doxloop', 'project.json');
9
+ export function defaultDocumentationBrief() {
10
+ return {
11
+ locale: 'en-US',
12
+ tone: ['clear', 'direct', 'professional'],
13
+ standardsProfile: 'doxloop-v1',
14
+ styleGuide: 'doxloop',
15
+ terminology: {},
16
+ exclusions: [],
17
+ accessibilityTarget: 'WCAG 2.2 AA',
18
+ };
19
+ }
20
+ export async function findProjectRoot(start) {
21
+ let current = resolve(start);
22
+ while (true) {
23
+ if (await pathExists(join(current, PROJECT_FILE)))
24
+ return current;
25
+ const parent = dirname(current);
26
+ if (parent === current)
27
+ break;
28
+ current = parent;
29
+ }
30
+ throw new DoxloopError('No Doxloop project found. Run `doxloop init <directory>` first.', 2);
31
+ }
32
+ export async function loadProject(root) {
33
+ const project = await readJson(join(root, PROJECT_FILE));
34
+ const selectedGenerator = project.generator ?? 'doxbrix';
35
+ const expectedGeneratorPackage = generatorPackageName(selectedGenerator);
36
+ if (project.schemaVersion !== 1 ||
37
+ typeof project.title !== 'string' ||
38
+ typeof project.contentDir !== 'string' ||
39
+ !isSafeRelativeDirectory(project.contentDir) ||
40
+ !Array.isArray(project.sources) ||
41
+ (project.designReferences !== undefined &&
42
+ !isDesignReferences(project.designReferences)) ||
43
+ (project.application !== undefined &&
44
+ !isApplicationConfig(project.application, project.sources)) ||
45
+ (project.generator !== undefined &&
46
+ generatorCatalogEntry(project.generator) === undefined) ||
47
+ (project.generatorPackage !== undefined &&
48
+ (typeof project.generatorPackage !== 'string' ||
49
+ project.generatorPackage.trim() === '' ||
50
+ project.generatorPackage !== expectedGeneratorPackage)) ||
51
+ !isSourceBindings(project.sources) ||
52
+ (project.documentation !== undefined &&
53
+ !isDocumentationBrief(project.documentation))) {
54
+ throw new DoxloopError(`${PROJECT_FILE} has an unsupported format.`);
55
+ }
56
+ const generator = selectedGenerator;
57
+ return {
58
+ schemaVersion: 1,
59
+ title: project.title,
60
+ contentDir: project.contentDir,
61
+ generator,
62
+ ...(project.generatorPackage
63
+ ? { generatorPackage: project.generatorPackage }
64
+ : {}),
65
+ sources: project.sources,
66
+ designReferences: project.designReferences ?? [],
67
+ ...(project.application ? { application: project.application } : {}),
68
+ documentation: project.documentation ?? defaultDocumentationBrief(),
69
+ };
70
+ }
71
+ export async function siteConfigPath(root, project) {
72
+ const loaded = project ?? (await loadProject(root));
73
+ const contentRoot = await resolveContainedDirectory(root, loaded.contentDir, 'Documentation content directory');
74
+ const insideContent = join(contentRoot, 'docs.json');
75
+ if (await pathExists(insideContent))
76
+ return insideContent;
77
+ return join(root, 'docs.json');
78
+ }
79
+ export async function loadSiteConfig(root, project) {
80
+ const loaded = project ?? (await loadProject(root));
81
+ const path = await siteConfigPath(root, loaded);
82
+ const config = await readJson(path);
83
+ if (isDoxbrixSiteConfig(config))
84
+ return config;
85
+ if (isLegacySiteConfig(config))
86
+ return convertLegacySiteConfig(config);
87
+ throw new DoxloopError(`${relativePath(root, path)} must contain a Doxbrix version and spaces array.`);
88
+ }
89
+ export function doxbrixPageIds(config) {
90
+ const output = [];
91
+ const walk = (nodes) => {
92
+ for (const node of nodes) {
93
+ if (node.type === 'page')
94
+ output.push(node.file);
95
+ else if (node.type === 'group')
96
+ walk(node.items);
97
+ }
98
+ };
99
+ for (const space of config.spaces)
100
+ walk(space.nav);
101
+ return output;
102
+ }
103
+ export function parseSource(raw) {
104
+ const equals = raw.indexOf('=');
105
+ if (equals < 1 || equals === raw.length - 1) {
106
+ throw new DoxloopError(`Invalid source "${raw}". Use a name and local path, for example product=../product.`, 2);
107
+ }
108
+ const name = raw.slice(0, equals).trim();
109
+ const path = raw.slice(equals + 1).trim();
110
+ if (!/^[a-z][a-z0-9-]*$/.test(name)) {
111
+ throw new DoxloopError(`Invalid source name "${name}".`, 2);
112
+ }
113
+ return { name, path };
114
+ }
115
+ export async function resolveSeparateProjectLayout(options) {
116
+ const sourceRoot = resolve(options.cwd, options.source);
117
+ const projectRoot = resolve(options.cwd, options.output);
118
+ await assertSourceDirectory(sourceRoot);
119
+ await assertSeparateDirectories(sourceRoot, projectRoot);
120
+ if (await pathExists(projectRoot)) {
121
+ const projectStats = await stat(projectRoot);
122
+ if (!projectStats.isDirectory()) {
123
+ throw new DoxloopError(`The documentation output is not a directory: ${projectRoot}`, 2);
124
+ }
125
+ if ((await readdir(projectRoot)).length > 0) {
126
+ throw new DoxloopError(`The documentation output is not empty: ${projectRoot}\nChoose a new directory, or run \`doxloop create\` inside an existing Doxloop project.`, 2);
127
+ }
128
+ }
129
+ return {
130
+ sourceRoot,
131
+ projectRoot,
132
+ sourceBinding: {
133
+ name: 'product',
134
+ path: relative(projectRoot, sourceRoot).split('\\').join('/'),
135
+ },
136
+ };
137
+ }
138
+ export async function validateProjectSourceBoundaries(projectRoot, sources) {
139
+ for (const source of sources) {
140
+ const sourceRoot = resolve(projectRoot, source.path);
141
+ await assertSourceDirectory(sourceRoot);
142
+ await assertSeparateDirectories(sourceRoot, projectRoot);
143
+ }
144
+ }
145
+ async function assertSourceDirectory(sourceRoot) {
146
+ let sourceStats;
147
+ try {
148
+ sourceStats = await stat(sourceRoot);
149
+ }
150
+ catch {
151
+ throw new DoxloopError(`The product source does not exist: ${sourceRoot}\nChoose an existing product directory and try again.`, 2);
152
+ }
153
+ if (!sourceStats.isDirectory()) {
154
+ throw new DoxloopError(`The product source is not a directory: ${sourceRoot}`, 2);
155
+ }
156
+ }
157
+ async function assertSeparateDirectories(sourceRoot, projectRoot) {
158
+ const canonicalSource = await realpath(sourceRoot);
159
+ const canonicalProject = await canonicalizeProspectivePath(projectRoot);
160
+ if (isSameOrInside(canonicalSource, canonicalProject) ||
161
+ isSameOrInside(canonicalProject, canonicalSource)) {
162
+ throw new DoxloopError(`The product source and documentation project must be separate directories.\n\nProduct source:\n ${sourceRoot}\n\nDocumentation project:\n ${projectRoot}\n\nCreate them as sibling projects so product code is never written to or included in documentation deployment.`, 2);
163
+ }
164
+ }
165
+ async function canonicalizeProspectivePath(path) {
166
+ let existing = resolve(path);
167
+ const suffix = [];
168
+ while (!(await pathExists(existing))) {
169
+ const parent = dirname(existing);
170
+ if (parent === existing)
171
+ return resolve(path);
172
+ suffix.unshift(basename(existing));
173
+ existing = parent;
174
+ }
175
+ return resolve(await realpath(existing), ...suffix);
176
+ }
177
+ function isSameOrInside(parent, candidate) {
178
+ return candidate === parent || candidate.startsWith(`${parent}${sep}`);
179
+ }
180
+ export function parseDesignReference(raw) {
181
+ let url;
182
+ try {
183
+ url = new URL(raw.trim());
184
+ }
185
+ catch {
186
+ throw new DoxloopError(`Invalid design reference "${raw}". Use an absolute HTTP or HTTPS URL.`, 2);
187
+ }
188
+ if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password) {
189
+ throw new DoxloopError(`Invalid design reference "${raw}". Use an HTTP or HTTPS URL without embedded credentials.`, 2);
190
+ }
191
+ url.hash = '';
192
+ return { url: url.toString() };
193
+ }
194
+ export async function addDesignReferences(root, references) {
195
+ if (references.length === 0)
196
+ return;
197
+ const path = join(root, PROJECT_FILE);
198
+ const raw = await readJson(path);
199
+ const project = await loadProject(root);
200
+ const urls = new Set(project.designReferences.map((reference) => reference.url));
201
+ for (const reference of references)
202
+ urls.add(reference.url);
203
+ await writeJson(path, {
204
+ ...raw,
205
+ designReferences: [...urls].map((url) => ({ url })),
206
+ });
207
+ }
208
+ export async function scaffoldProject(options) {
209
+ const root = resolve(options.directory);
210
+ if (await pathExists(join(root, PROJECT_FILE))) {
211
+ throw new DoxloopError(`A Doxloop project already exists at ${root}.`);
212
+ }
213
+ const title = options.title?.trim() || titleFromDirectory(root);
214
+ const generator = options.generator ?? 'doxbrix';
215
+ const configuredPackage = generatorPackageName(generator);
216
+ const adapter = generator === 'doxbrix'
217
+ ? undefined
218
+ : await loadGeneratorAdapter(root, generator, configuredPackage);
219
+ const contentDir = adapter?.project.defaultContentDir ?? 'docs';
220
+ await mkdir(join(root, '.doxloop'), { recursive: true });
221
+ await mkdir(join(root, contentDir), { recursive: true });
222
+ const project = {
223
+ schemaVersion: 1,
224
+ title,
225
+ contentDir,
226
+ generator,
227
+ ...(configuredPackage ? { generatorPackage: configuredPackage } : {}),
228
+ sources: options.sources,
229
+ designReferences: options.designReferences ?? [],
230
+ documentation: defaultDocumentationBrief(),
231
+ };
232
+ await writeJson(join(root, PROJECT_FILE), project);
233
+ if (adapter) {
234
+ await adapter.scaffold({
235
+ root,
236
+ title,
237
+ contentDir,
238
+ corePackage: { name: PACKAGE_NAME, version: VERSION },
239
+ generatorPackage: {
240
+ name: adapter.packageName,
241
+ version: adapter.packageVersion,
242
+ },
243
+ });
244
+ }
245
+ else {
246
+ await scaffoldDoxbrix(root, title);
247
+ }
248
+ await mergeGitignore(root, [
249
+ '.doxloop/cache/',
250
+ '.doxloop/last-run.json',
251
+ ...(adapter?.project.gitignore ?? []),
252
+ ]);
253
+ return root;
254
+ }
255
+ export async function loadPages(root, project) {
256
+ const contentRoot = await resolveContainedDirectory(root, project.contentDir, 'Documentation content directory');
257
+ await access(contentRoot);
258
+ const extensions = project.generator === 'doxbrix'
259
+ ? ['.md', '.mdx']
260
+ : (await loadGeneratorAdapter(root, project)).project.pageExtensions;
261
+ return listFiles(contentRoot, new Set(extensions));
262
+ }
263
+ function isSafeRelativeDirectory(value) {
264
+ if (value.trim() === '' || isAbsolute(value))
265
+ return false;
266
+ const normalized = normalize(value);
267
+ return (normalized !== '.' &&
268
+ normalized !== '..' &&
269
+ !normalized.startsWith(`..${sep}`));
270
+ }
271
+ export async function readPage(path) {
272
+ const parsed = matter(await readFile(path, 'utf8'));
273
+ const title = typeof parsed.data.title === 'string' ? parsed.data.title.trim() : '';
274
+ const description = typeof parsed.data.description === 'string' ? parsed.data.description.trim() : undefined;
275
+ return description === undefined
276
+ ? { title, body: parsed.content }
277
+ : { title, description, body: parsed.content };
278
+ }
279
+ export function pageId(contentRoot, path) {
280
+ return relativePath(contentRoot, path).replace(/\.[^.\/]+$/i, '');
281
+ }
282
+ export function relativePath(root, path) {
283
+ return path.slice(resolve(root).length + 1).split('\\').join('/');
284
+ }
285
+ async function writeJson(path, value) {
286
+ await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
287
+ }
288
+ async function mergeGitignore(root, entries) {
289
+ const path = join(root, '.gitignore');
290
+ const existing = (await pathExists(path)) ? await readFile(path, 'utf8') : '';
291
+ const lines = existing.split(/\r?\n/).filter(Boolean);
292
+ const seen = new Set(lines);
293
+ for (const entry of entries) {
294
+ if (!seen.has(entry)) {
295
+ lines.push(entry);
296
+ seen.add(entry);
297
+ }
298
+ }
299
+ await writeFile(path, `${lines.join('\n')}\n`, 'utf8');
300
+ }
301
+ function titleFromDirectory(directory) {
302
+ return basename(directory)
303
+ .split(/[-_]+/)
304
+ .filter(Boolean)
305
+ .map((word) => `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}`)
306
+ .join(' ');
307
+ }
308
+ async function scaffoldDoxbrix(root, title) {
309
+ const site = {
310
+ version: 1,
311
+ name: title,
312
+ description: `Documentation for ${title}.`,
313
+ spaces: [
314
+ {
315
+ name: 'Documentation',
316
+ slug: 'docs',
317
+ icon: 'book',
318
+ nav: [
319
+ {
320
+ type: 'group',
321
+ label: 'Get started',
322
+ icon: 'rocket',
323
+ items: [
324
+ {
325
+ type: 'page',
326
+ file: 'index',
327
+ title: 'Overview',
328
+ icon: 'compass',
329
+ },
330
+ {
331
+ type: 'page',
332
+ file: 'quickstart',
333
+ title: 'Quickstart',
334
+ icon: 'bolt',
335
+ },
336
+ ],
337
+ },
338
+ ],
339
+ },
340
+ ],
341
+ theme: {
342
+ primaryColor: '#6366f1',
343
+ mode: 'system',
344
+ font: 'Inter',
345
+ headingFont: 'Inter',
346
+ codeFont: 'ui-monospace',
347
+ },
348
+ };
349
+ await writeJson(join(root, 'docs', 'docs.json'), site);
350
+ await writeFile(join(root, 'docs', 'index.mdx'), `---\ntitle: ${JSON.stringify(title)}\ndescription: "Understand what ${title} helps you accomplish and choose your first workflow."\nicon: compass\n---\n\n# ${title}\n\n<!-- doxloop:starter-page -->\n\n<Info>The authoring agent will replace this starter with an evidence-backed product overview.</Info>\n\n<CardGroup cols="2">\n<Card title="Quickstart" icon="🚀" href="/quickstart">Reach your first successful result.</Card>\n<Card title="Explore the product" icon="🧭">Discover the workflows supported by the configured source.</Card>\n</CardGroup>\n`, { encoding: 'utf8', flag: 'wx' });
351
+ await writeFile(join(root, 'docs', 'quickstart.mdx'), `---\ntitle: "Quickstart"\ndescription: "Reach your first successful result with verified product instructions."\nicon: bolt\n---\n\n# Quickstart\n\n<!-- doxloop:starter-page -->\n\n<Steps>\n<Step title="Confirm the prerequisites">Use the authoring agent to identify supported requirements from source.</Step>\n<Step title="Complete the first workflow">Replace this starter with commands or code verified against the product.</Step>\n<Step title="Verify success">Show the observable result a reader should expect.</Step>\n</Steps>\n`, { encoding: 'utf8', flag: 'wx' });
352
+ }
353
+ function isDoxbrixSiteConfig(value) {
354
+ if (!value || typeof value !== 'object')
355
+ return false;
356
+ const candidate = value;
357
+ return candidate.version === 1 && Array.isArray(candidate.spaces);
358
+ }
359
+ function isLegacySiteConfig(value) {
360
+ if (!value || typeof value !== 'object')
361
+ return false;
362
+ const candidate = value;
363
+ return typeof candidate.title === 'string' && Array.isArray(candidate.navigation);
364
+ }
365
+ function convertLegacySiteConfig(config) {
366
+ return {
367
+ version: 1,
368
+ name: config.title,
369
+ ...(config.description ? { description: config.description } : {}),
370
+ spaces: [
371
+ {
372
+ name: 'Documentation',
373
+ slug: 'docs',
374
+ nav: config.navigation.map((group) => ({
375
+ type: 'group',
376
+ label: group.label,
377
+ items: group.pages.map((file) => ({ type: 'page', file })),
378
+ })),
379
+ },
380
+ ],
381
+ };
382
+ }
383
+ function isSourceBindings(value) {
384
+ return (Array.isArray(value) &&
385
+ value.every((source) => source !== null &&
386
+ typeof source === 'object' &&
387
+ typeof source.name === 'string' &&
388
+ typeof source.path === 'string'));
389
+ }
390
+ function isDesignReferences(value) {
391
+ return (Array.isArray(value) &&
392
+ value.every((reference) => reference !== null &&
393
+ typeof reference === 'object' &&
394
+ typeof reference.url === 'string' &&
395
+ isAllowedDesignReferenceUrl(reference.url ?? '')));
396
+ }
397
+ function isAllowedDesignReferenceUrl(raw) {
398
+ try {
399
+ const url = new URL(raw);
400
+ return (['http:', 'https:'].includes(url.protocol) &&
401
+ url.username === '' &&
402
+ url.password === '');
403
+ }
404
+ catch {
405
+ return false;
406
+ }
407
+ }
408
+ function isApplicationConfig(value, sources) {
409
+ if (!value || typeof value !== 'object' || Array.isArray(value))
410
+ return false;
411
+ const application = value;
412
+ if (!isApplicationBaseUrl(application.baseUrl))
413
+ return false;
414
+ if (application.source !== undefined &&
415
+ (typeof application.source !== 'string' ||
416
+ !sources.some((source) => source.name === application.source))) {
417
+ return false;
418
+ }
419
+ if (application.startCommand !== undefined &&
420
+ (typeof application.startCommand !== 'string' ||
421
+ application.startCommand.trim() === '')) {
422
+ return false;
423
+ }
424
+ if (application.startCommand !== undefined && application.source === undefined) {
425
+ return false;
426
+ }
427
+ if (application.readyPath !== undefined &&
428
+ (typeof application.readyPath !== 'string' ||
429
+ !application.readyPath.startsWith('/') ||
430
+ application.readyPath.startsWith('//'))) {
431
+ return false;
432
+ }
433
+ const screenshots = application.screenshots;
434
+ if (screenshots === undefined)
435
+ return true;
436
+ if (!screenshots || typeof screenshots !== 'object' || Array.isArray(screenshots)) {
437
+ return false;
438
+ }
439
+ if (!['requested', 'auto', 'off'].includes(screenshots.policy))
440
+ return false;
441
+ if (screenshots.highlight !== undefined && typeof screenshots.highlight !== 'boolean') {
442
+ return false;
443
+ }
444
+ if (screenshots.viewport === undefined)
445
+ return true;
446
+ return (Number.isInteger(screenshots.viewport.width) &&
447
+ screenshots.viewport.width >= 320 &&
448
+ screenshots.viewport.width <= 3840 &&
449
+ Number.isInteger(screenshots.viewport.height) &&
450
+ screenshots.viewport.height >= 320 &&
451
+ screenshots.viewport.height <= 2160);
452
+ }
453
+ function isApplicationBaseUrl(value) {
454
+ if (typeof value !== 'string')
455
+ return false;
456
+ try {
457
+ const url = new URL(value);
458
+ return (['http:', 'https:'].includes(url.protocol) &&
459
+ url.username === '' &&
460
+ url.password === '' &&
461
+ url.search === '' &&
462
+ url.hash === '');
463
+ }
464
+ catch {
465
+ return false;
466
+ }
467
+ }
468
+ function isDocumentationBrief(value) {
469
+ if (!value || typeof value !== 'object' || Array.isArray(value))
470
+ return false;
471
+ const brief = value;
472
+ const optionalText = (candidate) => candidate === undefined ||
473
+ (typeof candidate === 'string' && candidate.trim() !== '');
474
+ const textList = (candidate) => Array.isArray(candidate) &&
475
+ candidate.every((item) => typeof item === 'string' && item.trim() !== '');
476
+ const terminology = brief.terminology !== null &&
477
+ typeof brief.terminology === 'object' &&
478
+ !Array.isArray(brief.terminology) &&
479
+ Object.entries(brief.terminology).every(([term, preferred]) => term.trim() !== '' &&
480
+ typeof preferred === 'string' &&
481
+ preferred.trim() !== '');
482
+ return (optionalText(brief.primaryAudience) &&
483
+ (brief.experienceLevel === undefined ||
484
+ ['beginner', 'intermediate', 'advanced', 'mixed'].includes(brief.experienceLevel)) &&
485
+ (brief.priorityOutcomes === undefined ||
486
+ textList(brief.priorityOutcomes)) &&
487
+ typeof brief.locale === 'string' &&
488
+ brief.locale.trim() !== '' &&
489
+ textList(brief.tone) &&
490
+ typeof brief.styleGuide === 'string' &&
491
+ brief.styleGuide.trim() !== '' &&
492
+ typeof brief.standardsProfile === 'string' &&
493
+ brief.standardsProfile.trim() !== '' &&
494
+ terminology &&
495
+ textList(brief.exclusions) &&
496
+ typeof brief.accessibilityTarget === 'string' &&
497
+ brief.accessibilityTarget.trim() !== '');
498
+ }
499
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { SourceBinding, SourceChange, SyncState } from './types.js';
2
+ export declare const SYNC_STATE_FILE: string;
3
+ export declare function readSyncState(root: string): Promise<SyncState>;
4
+ export declare function recordSyncState(root: string, sources: SourceBinding[]): Promise<SyncState>;
5
+ export declare function collectSourceChanges(root: string, sources: SourceBinding[]): Promise<SourceChange[]>;
6
+ export declare function formatSourceChanges(changes: SourceChange[]): string;
7
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAExE,eAAO,MAAM,eAAe,QAAsC,CAAA;AAMlE,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAQpE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,SAAS,CAAC,CAmBpB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAkCnE"}