@open-agent-toolkit/cli 0.3.28 → 0.3.29

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 (34) hide show
  1. package/README.md +2 -0
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +2 -0
  4. package/assets/docs/docs-tooling/commands.md +47 -2
  5. package/assets/public-package-versions.json +4 -4
  6. package/assets/skills/authoring-docs/SKILL.md +2 -2
  7. package/assets/skills/authoring-docs/references/information-architecture.md +5 -2
  8. package/assets/skills/authoring-docs/references/page-templates/alert-runbook.md +63 -0
  9. package/assets/skills/authoring-docs/references/page-templates/command-reference.md +55 -0
  10. package/assets/skills/authoring-docs/references/page-templates/decisions-pointer.md +44 -0
  11. package/assets/skills/authoring-docs/references/page-templates/engineering-feature.md +53 -0
  12. package/assets/skills/authoring-docs/references/page-templates/per-area-agents.md +42 -0
  13. package/assets/skills/authoring-docs/references/page-templates/product-feature.md +49 -0
  14. package/assets/skills/authoring-docs/references/page-templates/qa-validation.md +59 -0
  15. package/assets/skills/authoring-docs/references/page-templates/screen-spec.md +51 -0
  16. package/assets/skills/authoring-docs/references/page-templates/skill-command-guide.md +44 -0
  17. package/assets/skills/authoring-docs/references/page-templates/solution-record.md +43 -0
  18. package/assets/skills/authoring-docs/references/templates.md +22 -2
  19. package/assets/skills/oat-docs-bootstrap/SKILL.md +11 -5
  20. package/dist/commands/docs/init/content.d.ts +23 -0
  21. package/dist/commands/docs/init/content.d.ts.map +1 -0
  22. package/dist/commands/docs/init/content.js +361 -0
  23. package/dist/commands/docs/init/index.d.ts.map +1 -1
  24. package/dist/commands/docs/init/index.js +32 -1
  25. package/dist/commands/docs/init/markdown.d.ts.map +1 -1
  26. package/dist/commands/docs/init/markdown.js +21 -2
  27. package/dist/commands/docs/init/resolve-options.d.ts +4 -1
  28. package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
  29. package/dist/commands/docs/init/resolve-options.js +4 -0
  30. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  31. package/dist/commands/docs/init/scaffold.js +20 -1
  32. package/dist/release/public-package-contract.d.ts.map +1 -1
  33. package/dist/release/public-package-contract.js +10 -0
  34. package/package.json +3 -3
@@ -4,6 +4,7 @@ import { createExclusionMatcher } from '../../docs/index-generate/generator.js';
4
4
  import { dirExists, ensureDir } from '../../../fs/io.js';
5
5
  import { normalizeToPosixPath, validatePathWithinScope } from '../../../fs/paths.js';
6
6
  import { parse as parseYaml } from 'yaml';
7
+ import { mergeTemplateExclusion, planPresetContent } from './content.js';
7
8
  import { humanizeAppName, } from './resolve-options.js';
8
9
  /** Validate a dedicated Markdown root, including existing symlink ancestors. */
9
10
  export async function validateMarkdownTarget(repoRoot, targetDir) {
@@ -192,15 +193,27 @@ export async function planMarkdownDocs(options) {
192
193
  (await readdir(appRoot)).length > 0) {
193
194
  throw new Error(`Markdown docs target is not empty: ${targetDir}. Use --adopt to preserve existing docs, then run oat-docs-analyze for content gaps.`);
194
195
  }
196
+ if (options.iaPreset &&
197
+ (await dirExists(appRoot)) &&
198
+ (await readdir(appRoot)).length > 0)
199
+ throw new Error('Preset init requires an empty docs target. Preserve existing docs and use oat-docs-analyze with individually approved oat-docs-apply.');
200
+ const contentPlan = await planPresetContent({ ...options, markdown: true });
195
201
  const documentationConfig = {
196
202
  ...options.documentation,
197
203
  root: targetDir,
198
204
  tooling: 'markdown',
199
205
  index: `${targetDir}/index.md`,
206
+ ...(contentPlan
207
+ ? {
208
+ nonReaderPaths: mergeTemplateExclusion(options.documentation?.nonReaderPaths),
209
+ }
210
+ : {}),
200
211
  };
201
212
  const configChanged = options.documentation?.root !== targetDir ||
202
213
  options.documentation?.tooling !== 'markdown' ||
203
- options.documentation?.index !== `${targetDir}/index.md`;
214
+ options.documentation?.index !== `${targetDir}/index.md` ||
215
+ (contentPlan !== null &&
216
+ !options.documentation?.nonReaderPaths?.includes('contributing/templates/**'));
204
217
  const existing = new Map();
205
218
  for (const name of ['index.md', 'contributing.md'])
206
219
  existing.set(name, await readBaseline(options.repoRoot, join(appRoot, name)));
@@ -223,9 +236,14 @@ export async function planMarkdownDocs(options) {
223
236
  const template = await readFile(join(options.assetsRoot, 'templates', 'docs-markdown', name), 'utf8');
224
237
  files.push({
225
238
  name,
226
- content: renderMarkdownTemplate(template, options, contents),
239
+ content: (contentPlan?.files.find((file) => file.name === name)?.content ??
240
+ renderMarkdownTemplate(template, options, contents)) +
241
+ (contentPlan && name === 'contributing.md'
242
+ ? `\n${contentPlan.guidance}`
243
+ : ''),
227
244
  });
228
245
  }
246
+ files.push(...(contentPlan?.files.filter((file) => file.name !== 'index.md') ?? []));
229
247
  return {
230
248
  repoRoot: options.repoRoot,
231
249
  targetDir,
@@ -254,6 +272,7 @@ export async function applyMarkdownDocsPlan(plan) {
254
272
  for (const { name, content } of plan.files) {
255
273
  await validateMarkdownTarget(plan.repoRoot, plan.targetDir);
256
274
  const path = join(plan.appRoot, name);
275
+ await ensureDir(dirname(path));
257
276
  let handle;
258
277
  try {
259
278
  handle = await open(path, 'wx');
@@ -1,10 +1,11 @@
1
1
  import type { PromptContext, SelectChoice } from '../../shared/shared.prompts.js';
2
+ import { type PresetSelection } from './content.js';
2
3
  export type DocsRepoShape = 'monorepo' | 'single-package' | 'nested-standalone';
3
4
  export type DocsDetectedRepoShape = Exclude<DocsRepoShape, 'nested-standalone'>;
4
5
  export type DocsFramework = 'fumadocs' | 'mkdocs' | 'markdown';
5
6
  export type DocsLintMode = 'none' | 'markdownlint-cli2';
6
7
  export type DocsFormatMode = 'oxfmt' | 'none';
7
- export interface DocsInitResolvedOptions {
8
+ export interface DocsInitResolvedOptions extends PresetSelection {
8
9
  repoRoot: string;
9
10
  repoShape: DocsRepoShape;
10
11
  framework: DocsFramework;
@@ -23,6 +24,8 @@ export interface ResolveDocsInitOptionsInput {
23
24
  interactive: boolean;
24
25
  acceptDefaults: boolean;
25
26
  providedFramework?: DocsFramework;
27
+ providedIaPreset?: string;
28
+ providedPlannedPages?: string;
26
29
  providedAdopt?: boolean;
27
30
  providedAppName?: string;
28
31
  providedSiteName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-options.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/resolve-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-options.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/resolve-options.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { basename, isAbsolute, join, relative, resolve } from 'node:path';
2
2
  import { dirExists, fileExists } from '../../../fs/io.js';
3
+ import { resolvePresetSelection } from './content.js';
3
4
  const FRAMEWORK_CHOICES = [
4
5
  { label: 'Fumadocs (Next.js + MDX, static export)', value: 'fumadocs' },
5
6
  { label: 'MkDocs (Python, Material theme)', value: 'mkdocs' },
@@ -83,6 +84,7 @@ export function resolveEffectiveDocsShape(repoShape, framework, repoRoot, target
83
84
  return isRepoSubdirectory ? 'nested-standalone' : repoShape;
84
85
  }
85
86
  export async function resolveDocsInitOptions(input) {
87
+ const selection = resolvePresetSelection(input.providedIaPreset, input.providedPlannedPages);
86
88
  const ctx = { interactive: input.interactive };
87
89
  const framework = input.providedFramework ||
88
90
  (input.interactive && !input.acceptDefaults
@@ -109,6 +111,7 @@ export async function resolveDocsInitOptions(input) {
109
111
  if (!targetDir)
110
112
  return null;
111
113
  return {
114
+ ...selection,
112
115
  repoRoot: input.repoRoot,
113
116
  repoShape: input.repoShape,
114
117
  framework,
@@ -168,6 +171,7 @@ export async function resolveDocsInitOptions(input) {
168
171
  }
169
172
  const repoShape = resolveEffectiveDocsShape(input.repoShape, framework, input.repoRoot, targetDir);
170
173
  return {
174
+ ...selection,
171
175
  repoRoot: input.repoRoot,
172
176
  repoShape,
173
177
  framework,
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/scaffold.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAMjE,OAAO,KAAK,EAEV,aAAa,EACb,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAqG3B,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,MAAM,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACjE,0BAA0B,EAAE,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,KACZ,YAAY,CAAC,OAAO,CAAC,CAAC;CAC5B;AAUD,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAgDD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAaxB;AAmOD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,GAChB,sBAAsB,CAwBxB;AAyDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAAC,qBAAqB,CAAC,CA2EhC"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/scaffold.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAOjE,OAAO,KAAK,EAEV,aAAa,EACb,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAqG3B,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,MAAM,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACjE,0BAA0B,EAAE,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,KACZ,YAAY,CAAC,OAAO,CAAC,CAAC;CAC5B;AAUD,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAgDD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAaxB;AAmOD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,GAChB,sBAAsB,CAwBxB;AAyDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAAC,qBAAqB,CAAC,CA0GhC"}
@@ -2,6 +2,7 @@ import { readdir, readFile, realpath, writeFile } from 'node:fs/promises';
2
2
  import { basename, dirname, isAbsolute, join, relative, resolve, } from 'node:path';
3
3
  import { dirExists, ensureDir, fileExists } from '../../../fs/io.js';
4
4
  import { OAT_VERSION } from '../../../shared/oat-version.js';
5
+ import { planPresetContent } from './content.js';
5
6
  import { buildDocsCommands, shellQuote } from './docs-commands.js';
6
7
  import { applyMarkdownDocsPlan, planMarkdownDocs } from './markdown.js';
7
8
  import { getTemplateDir } from './resolve-options.js';
@@ -387,6 +388,7 @@ export async function scaffoldDocsApp(options, overrides = {}) {
387
388
  throw new Error(`Docs app templates not found under ${templateRoot}`);
388
389
  }
389
390
  await ensureTargetWritable(appRoot);
391
+ const contentPlan = await planPresetContent({ ...options, markdown: false });
390
392
  await ensureDir(appRoot);
391
393
  const packageManagerField = await buildPackageManagerField(options, appRoot, dependencies);
392
394
  const nodeRequirement = await detectNodeRequirement(options.repoRoot);
@@ -396,14 +398,31 @@ export async function scaffoldDocsApp(options, overrides = {}) {
396
398
  if (templateFile.destination === 'pnpm-workspace.yaml' &&
397
399
  !independentPnpmRoot)
398
400
  continue;
401
+ if (contentPlan &&
402
+ [join('docs', 'index.md'), join('docs', 'getting-started.md')].includes(templateFile.destination))
403
+ continue;
399
404
  const source = join(templateRoot, templateFile.source);
400
405
  const destination = join(appRoot, templateFile.destination);
401
406
  const template = await readFile(source, 'utf8');
402
- const rendered = renderTemplate(template, options, depContext, packageManagerField, nodeRequirement, templateFile.destination === 'package.json');
407
+ let rendered = renderTemplate(template, options, depContext, packageManagerField, nodeRequirement, templateFile.destination === 'package.json');
408
+ if (contentPlan && templateFile.destination === 'AGENTS.md') {
409
+ rendered = rendered.replace('This starter separates reader Getting Started from contributor setup.', 'This starter uses the selected reader tracks and entry principles listed below.');
410
+ rendered += `\n${contentPlan.guidance}`;
411
+ }
412
+ if (contentPlan &&
413
+ templateFile.destination ===
414
+ join('docs', 'contributing', 'docs-toolchain.md'))
415
+ rendered = rendered.replaceAll('[Getting Started](../getting-started.md)', '[the documentation home](../index.md)');
403
416
  await ensureDir(dirname(destination));
404
417
  await writeFile(destination, rendered, 'utf8');
405
418
  createdFiles.push(templateFile.destination);
406
419
  }
420
+ for (const file of contentPlan?.files ?? []) {
421
+ const destination = join(appRoot, 'docs', file.name);
422
+ await ensureDir(dirname(destination));
423
+ await writeFile(destination, file.content, 'utf8');
424
+ createdFiles.push(join('docs', file.name));
425
+ }
407
426
  return {
408
427
  appRoot,
409
428
  createdFiles,
@@ -1 +1 @@
1
- {"version":3,"file":"public-package-contract.d.ts","sourceRoot":"","sources":["../../src/release/public-package-contract.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,cAAc,GAAG,iBAAiB,CAAC;IACjD,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;IACrD,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAqMD,wBAAgB,yBAAyB,IAAI,qBAAqB,EAAE,CAenE;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAMV;AAED,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACjD,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAoBV;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,EAAE,CAmBV;AAED,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,qBAAqB,EAAE,SAAS,MAAM,EAAE,GACvC,MAAM,EAAE,CA0BV"}
1
+ {"version":3,"file":"public-package-contract.d.ts","sourceRoot":"","sources":["../../src/release/public-package-contract.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,cAAc,GAAG,iBAAiB,CAAC;IACjD,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;IACrD,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA+MD,wBAAgB,yBAAyB,IAAI,qBAAqB,EAAE,CAenE;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAMV;AAED,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACjD,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAoBV;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,EAAE,CAmBV;AAED,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,qBAAqB,EAAE,SAAS,MAAM,EAAE,GACvC,MAAM,EAAE,CA0BV"}
@@ -76,6 +76,16 @@ const PUBLIC_PACKAGE_CONTRACTS = [
76
76
  'assets/templates/pjm-agents.md',
77
77
  'assets/templates/reference-agents.md',
78
78
  'assets/skills/explainer-kit/scripts/lib/package-coverage.mjs',
79
+ 'assets/skills/authoring-docs/references/page-templates/product-feature.md',
80
+ 'assets/skills/authoring-docs/references/page-templates/engineering-feature.md',
81
+ 'assets/skills/authoring-docs/references/page-templates/qa-validation.md',
82
+ 'assets/skills/authoring-docs/references/page-templates/screen-spec.md',
83
+ 'assets/skills/authoring-docs/references/page-templates/alert-runbook.md',
84
+ 'assets/skills/authoring-docs/references/page-templates/solution-record.md',
85
+ 'assets/skills/authoring-docs/references/page-templates/command-reference.md',
86
+ 'assets/skills/authoring-docs/references/page-templates/skill-command-guide.md',
87
+ 'assets/skills/authoring-docs/references/page-templates/decisions-pointer.md',
88
+ 'assets/skills/authoring-docs/references/page-templates/per-area-agents.md',
79
89
  'assets/NOTICES.md',
80
90
  'README.md',
81
91
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.3.28",
3
+ "version": "0.3.29",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -42,8 +42,8 @@
42
42
  "unified": "11.0.5",
43
43
  "yaml": "2.8.2",
44
44
  "zod": "^3.25.76",
45
- "@open-agent-toolkit/control-plane": "0.3.28",
46
- "@open-agent-toolkit/docs-transforms": "0.3.28"
45
+ "@open-agent-toolkit/control-plane": "0.3.29",
46
+ "@open-agent-toolkit/docs-transforms": "0.3.29"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/jsdom": "28.0.3",