@open-agent-toolkit/cli 0.0.10 → 0.0.18

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -20
  3. package/assets/docs/{guide/getting-started.md → cli-utilities/bootstrap.md} +8 -2
  4. package/assets/docs/cli-utilities/config-and-local-state.md +84 -0
  5. package/assets/docs/{guide → cli-utilities}/configuration.md +2 -2
  6. package/assets/docs/cli-utilities/index.md +41 -0
  7. package/assets/docs/cli-utilities/overview.md +33 -0
  8. package/assets/docs/{guide → cli-utilities}/tool-packs.md +9 -3
  9. package/assets/docs/contributing/code.md +4 -2
  10. package/assets/docs/contributing/design-principles.md +3 -3
  11. package/assets/docs/contributing/documentation.md +12 -4
  12. package/assets/docs/{guide/documentation/quickstart.md → docs-tooling/add-docs-to-a-repo.md} +1 -1
  13. package/assets/docs/{guide/documentation → docs-tooling}/commands.md +8 -1
  14. package/assets/docs/docs-tooling/index.md +40 -0
  15. package/assets/docs/docs-tooling/overview.md +31 -0
  16. package/assets/docs/{guide/documentation → docs-tooling}/workflows.md +3 -3
  17. package/assets/docs/guide/concepts.md +9 -9
  18. package/assets/docs/guide/index.md +14 -11
  19. package/assets/docs/index.md +34 -18
  20. package/assets/docs/{guide/provider-sync → provider-sync}/commands.md +10 -4
  21. package/assets/docs/{guide/provider-sync → provider-sync}/config.md +1 -1
  22. package/assets/docs/provider-sync/index.md +43 -0
  23. package/assets/docs/{guide/provider-sync → provider-sync}/manifest-and-drift.md +8 -0
  24. package/assets/docs/provider-sync/overview.md +38 -0
  25. package/assets/docs/{guide/provider-sync → provider-sync}/scope-and-surface.md +3 -3
  26. package/assets/docs/quickstart.md +43 -126
  27. package/assets/docs/reference/cli-reference.md +35 -0
  28. package/assets/docs/reference/docs-index-contract.md +1 -2
  29. package/assets/docs/reference/index.md +5 -4
  30. package/assets/docs/workflows/index.md +40 -0
  31. package/assets/docs/workflows/overview.md +38 -0
  32. package/assets/docs/workflows/projects/index.md +37 -0
  33. package/assets/docs/{guide/workflow → workflows/projects}/lifecycle.md +6 -0
  34. package/assets/docs/{guide/workflow → workflows/projects}/repo-analysis.md +6 -0
  35. package/assets/docs/{guide/workflow → workflows/projects}/state-machine.md +8 -0
  36. package/assets/docs/{guide → workflows}/skills/index.md +2 -2
  37. package/assets/public-package-versions.json +4 -4
  38. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +0 -0
  39. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-providers.sh +0 -0
  40. package/assets/skills/oat-project-complete/SKILL.md +21 -27
  41. package/assets/skills/oat-project-document/SKILL.md +2 -2
  42. package/assets/skills/oat-project-import-plan/scripts/find-recent-provider-plans.sh +0 -0
  43. package/assets/skills/oat-project-subagent-implement/scripts/dispatch.sh +0 -0
  44. package/assets/skills/oat-project-subagent-implement/scripts/reconcile.sh +0 -0
  45. package/assets/skills/oat-project-subagent-implement/scripts/review-gate.sh +0 -0
  46. package/assets/skills/oat-project-subagent-implement/tests/test-dry-run.sh +0 -0
  47. package/assets/skills/oat-project-subagent-implement/tests/test-reconcile.sh +0 -0
  48. package/assets/skills/oat-project-subagent-implement/tests/test-review-gate.sh +0 -0
  49. package/assets/skills/oat-repo-maintainability-review/scripts/resolve-analysis-output.sh +0 -0
  50. package/assets/skills/oat-review-provide/scripts/resolve-review-output.sh +0 -0
  51. package/assets/skills/oat-worktree-bootstrap-auto/scripts/bootstrap.sh +0 -0
  52. package/dist/app/create-program.js +1 -1
  53. package/dist/commands/docs/index-generate/index.d.ts +1 -0
  54. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  55. package/dist/commands/docs/index-generate/index.js +6 -3
  56. package/dist/commands/docs/init/index.d.ts +3 -0
  57. package/dist/commands/docs/init/index.d.ts.map +1 -1
  58. package/dist/commands/docs/init/index.js +52 -3
  59. package/dist/commands/docs/init/resolve-options.d.ts +1 -1
  60. package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
  61. package/dist/commands/docs/init/resolve-options.js +1 -0
  62. package/dist/commands/docs/init/scaffold.d.ts +1 -0
  63. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  64. package/dist/commands/docs/init/scaffold.js +26 -8
  65. package/dist/commands/internal/index.d.ts.map +1 -1
  66. package/dist/commands/internal/index.js +3 -1
  67. package/dist/commands/internal/validate-oat-skills.d.ts +2 -2
  68. package/dist/commands/internal/validate-oat-skills.d.ts.map +1 -1
  69. package/dist/commands/internal/validate-oat-skills.js +5 -4
  70. package/dist/commands/internal/validate-skill-version-bumps.d.ts +10 -0
  71. package/dist/commands/internal/validate-skill-version-bumps.d.ts.map +1 -0
  72. package/dist/commands/internal/validate-skill-version-bumps.js +74 -0
  73. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  74. package/dist/commands/project/archive/archive-utils.js +34 -2
  75. package/dist/manifest/manager.js +1 -1
  76. package/dist/validation/index.d.ts +2 -2
  77. package/dist/validation/index.d.ts.map +1 -1
  78. package/dist/validation/index.js +1 -1
  79. package/dist/validation/skills.d.ts +25 -1
  80. package/dist/validation/skills.d.ts.map +1 -1
  81. package/dist/validation/skills.js +95 -1
  82. package/package.json +17 -17
  83. package/assets/docs/guide/cli-reference.md +0 -211
  84. package/assets/docs/guide/documentation/index.md +0 -27
  85. package/assets/docs/guide/provider-sync/index.md +0 -65
  86. package/assets/docs/guide/workflow/index.md +0 -34
  87. /package/assets/docs/{guide/provider-sync → provider-sync}/providers.md +0 -0
  88. /package/assets/docs/{guide → workflows}/ideas/index.md +0 -0
  89. /package/assets/docs/{guide → workflows}/ideas/lifecycle.md +0 -0
  90. /package/assets/docs/{guide/workflow → workflows/projects}/artifacts.md +0 -0
  91. /package/assets/docs/{guide/workflow → workflows/projects}/hill-checkpoints.md +0 -0
  92. /package/assets/docs/{guide/workflow → workflows/projects}/pr-flow.md +0 -0
  93. /package/assets/docs/{guide/workflow → workflows/projects}/reviews.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACX,MAAM,QAAQ,CAAC;AAIhB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,iCAAiC;IACzC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,sCAAuC,SAAQ,iCAAiC;IACxF,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACrD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,kCAAkC,6BAA6B,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AA8BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAmBD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CA4BA;AAED,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,CAIR;AAqJD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,EAC1C,YAAY,GAAE,sCAA2C,GACxD,OAAO,CAAC,gCAAgC,CAAC,CAoG3C;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,EACrC,YAAY,GAAE,iCAAsC,GACnD,OAAO,CAAC,2BAA2B,CAAC,CA0CtC"}
@@ -87,7 +87,38 @@ function resolveGitPath(repoRoot, gitPath) {
87
87
  ? normalizedPath
88
88
  : join(repoRoot, normalizedPath);
89
89
  }
90
- async function resolveArchiveRepoRoot(repoRoot, dependencies) {
90
+ function isExitCode(error, code) {
91
+ return (typeof error === 'object' &&
92
+ error !== null &&
93
+ 'code' in error &&
94
+ Number(error.code) === code);
95
+ }
96
+ async function isGitignoredArchivePath(repoRoot, archiveProjectPath, dependencies) {
97
+ const execFile = dependencies.gitExecFile ?? execFileAsync;
98
+ try {
99
+ await execFile('git', ['check-ignore', '--quiet', '--no-index', archiveProjectPath], {
100
+ cwd: repoRoot,
101
+ env: dependencies.env ?? process.env,
102
+ });
103
+ return true;
104
+ }
105
+ catch (error) {
106
+ if (isExitCode(error, 1)) {
107
+ return false;
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ async function resolveArchiveRepoRoot(repoRoot, archiveProjectPath, dependencies) {
113
+ try {
114
+ const archivePathIsGitignored = await isGitignoredArchivePath(repoRoot, archiveProjectPath, dependencies);
115
+ if (!archivePathIsGitignored) {
116
+ return repoRoot;
117
+ }
118
+ }
119
+ catch {
120
+ return repoRoot;
121
+ }
91
122
  const execFile = dependencies.gitExecFile ?? execFileAsync;
92
123
  try {
93
124
  const [{ stdout: commonDir }, { stdout: gitDir }] = await Promise.all([
@@ -148,7 +179,8 @@ export async function archiveProjectOnCompletion(options, dependencies = {}) {
148
179
  const execFile = dependencies.execFile ?? execFileAsync;
149
180
  const timestamp = dependencies.timestamp?.() ?? new Date().toISOString();
150
181
  const snapshotName = buildArchiveSnapshotName(options.projectName, timestamp);
151
- const archiveRepoRoot = await resolveArchiveRepoRoot(options.repoRoot, dependencies);
182
+ const archiveProjectPath = resolveLocalArchiveProjectPath(options.projectsRoot, options.projectName);
183
+ const archiveRepoRoot = await resolveArchiveRepoRoot(options.repoRoot, archiveProjectPath, dependencies);
152
184
  const archiveBasePath = resolveCompletionArchivePath(archiveRepoRoot, options.projectsRoot, options.projectName);
153
185
  const archivePath = await resolveUniqueArchivePath(archiveBasePath, dependencies);
154
186
  await makeDir(dirname(archivePath));
@@ -3,7 +3,7 @@ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
3
3
  import { dirname } from 'node:path';
4
4
  import { CliError } from '../errors/index.js';
5
5
  import { ManifestSchema, } from './manifest.types.js';
6
- const OAT_VERSION = '0.0.7';
6
+ const OAT_VERSION = '0.0.18';
7
7
  function formatIssuePath(path) {
8
8
  if (path.length === 0) {
9
9
  return '(root)';
@@ -1,3 +1,3 @@
1
- export type { ValidateOatSkillsResult, ValidationFinding } from './skills.js';
2
- export { validateOatSkills } from './skills.js';
1
+ export type { ValidateChangedSkillVersionBumpsOptions, ValidateChangedSkillVersionBumpsResult, ValidateOatSkillsOptions, ValidateOatSkillsResult, ValidationFinding, } from './skills.js';
2
+ export { validateChangedSkillVersionBumps, validateOatSkills } from './skills.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uCAAuC,EACvC,sCAAsC,EACtC,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- export { validateOatSkills } from './skills.js';
1
+ export { validateChangedSkillVersionBumps, validateOatSkills } from './skills.js';
@@ -6,5 +6,29 @@ export interface ValidateOatSkillsResult {
6
6
  validatedSkillCount: number;
7
7
  findings: ValidationFinding[];
8
8
  }
9
- export declare function validateOatSkills(repoRoot: string): Promise<ValidateOatSkillsResult>;
9
+ export interface ValidateChangedSkillVersionBumpsOptions {
10
+ baseRef: string;
11
+ }
12
+ export interface ValidateChangedSkillVersionBumpsResult {
13
+ validatedSkillCount: number;
14
+ findings: ValidationFinding[];
15
+ }
16
+ export interface ValidateOatSkillsOptions {
17
+ baseRef?: string;
18
+ }
19
+ export type ExecFileResult = {
20
+ stdout: string;
21
+ stderr: string;
22
+ };
23
+ export type ExecFileLike = (file: string, args: string[], options?: {
24
+ cwd?: string;
25
+ env?: NodeJS.ProcessEnv;
26
+ }) => Promise<ExecFileResult>;
27
+ interface ValidateOatSkillsDependencies {
28
+ gitExecFile?: ExecFileLike;
29
+ env?: NodeJS.ProcessEnv;
30
+ }
31
+ export declare function validateChangedSkillVersionBumps(repoRoot: string, options: ValidateChangedSkillVersionBumpsOptions, dependencies?: ValidateOatSkillsDependencies): Promise<ValidateChangedSkillVersionBumpsResult>;
32
+ export declare function validateOatSkills(repoRoot: string, options?: ValidateOatSkillsOptions, dependencies?: ValidateOatSkillsDependencies): Promise<ValidateOatSkillsResult>;
33
+ export {};
10
34
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/validation/skills.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AA0GD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC,CA8GlC"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/validation/skills.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,UAAU,6BAA6B;IACrC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAgOD,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uCAAuC,EAChD,YAAY,GAAE,6BAAkC,GAC/C,OAAO,CAAC,sCAAsC,CAAC,CAoBjD;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,wBAA6B,EACtC,YAAY,GAAE,6BAAkC,GAC/C,OAAO,CAAC,uBAAuB,CAAC,CA6HlC"}
@@ -1,6 +1,9 @@
1
+ import { execFile as execFileCallback } from 'node:child_process';
1
2
  import { readdir, readFile, stat } from 'node:fs/promises';
2
3
  import { join } from 'node:path';
4
+ import { promisify } from 'node:util';
3
5
  import { getFrontmatterBlock } from '../commands/shared/frontmatter.js';
6
+ const execFileAsync = promisify(execFileCallback);
4
7
  async function isDirectory(path) {
5
8
  try {
6
9
  const s = await stat(path);
@@ -22,6 +25,17 @@ function getFrontmatterScalar(frontmatter, key) {
22
25
  function isValidSemver(value) {
23
26
  return /^\d+\.\d+\.\d+$/.test(value);
24
27
  }
28
+ function compareSemver(left, right) {
29
+ const leftParts = left.split('.').map(Number);
30
+ const rightParts = right.split('.').map(Number);
31
+ for (let index = 0; index < 3; index += 1) {
32
+ const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
33
+ if (diff !== 0) {
34
+ return diff;
35
+ }
36
+ }
37
+ return 0;
38
+ }
25
39
  function hasProgressIndicatorsSection(content) {
26
40
  return /^## Progress Indicators \(User-Facing\)\s*$/m.test(content);
27
41
  }
@@ -64,7 +78,83 @@ function validateQuickStartSemantics(skillPath, content, findings) {
64
78
  });
65
79
  }
66
80
  }
67
- export async function validateOatSkills(repoRoot) {
81
+ async function listChangedSkillFiles(repoRoot, baseRef, dependencies) {
82
+ const execFile = dependencies.gitExecFile ?? execFileAsync;
83
+ const { stdout } = await execFile('git', [
84
+ 'diff',
85
+ '--name-only',
86
+ '--diff-filter=ACMR',
87
+ `${baseRef}...HEAD`,
88
+ '--',
89
+ '.agents/skills/*/SKILL.md',
90
+ ], {
91
+ cwd: repoRoot,
92
+ env: dependencies.env ?? process.env,
93
+ });
94
+ return stdout
95
+ .split('\n')
96
+ .map((line) => line.trim())
97
+ .filter((line) => line.length > 0);
98
+ }
99
+ async function readFileAtGitRef(repoRoot, ref, filePath, dependencies) {
100
+ const execFile = dependencies.gitExecFile ?? execFileAsync;
101
+ try {
102
+ const { stdout } = await execFile('git', ['show', `${ref}:${filePath}`], {
103
+ cwd: repoRoot,
104
+ env: dependencies.env ?? process.env,
105
+ });
106
+ return stdout;
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ async function collectChangedSkillVersionBumpFindings(repoRoot, baseRef, changedSkillFiles, findings, dependencies) {
113
+ for (const relativeSkillPath of changedSkillFiles) {
114
+ const skillPath = join(repoRoot, relativeSkillPath);
115
+ const currentContent = await readFile(skillPath, 'utf8');
116
+ const baseContent = await readFileAtGitRef(repoRoot, baseRef, relativeSkillPath, dependencies);
117
+ if (baseContent === null || baseContent === currentContent) {
118
+ continue;
119
+ }
120
+ const currentFrontmatter = getFrontmatterBlock(currentContent);
121
+ const baseFrontmatter = getFrontmatterBlock(baseContent);
122
+ const currentVersion = currentFrontmatter
123
+ ? getFrontmatterScalar(currentFrontmatter, 'version')
124
+ : null;
125
+ const baseVersion = baseFrontmatter
126
+ ? getFrontmatterScalar(baseFrontmatter, 'version')
127
+ : null;
128
+ if (!currentVersion || !baseVersion) {
129
+ continue;
130
+ }
131
+ if (currentVersion === baseVersion) {
132
+ findings.push({
133
+ file: skillPath,
134
+ message: `Changed canonical skill must bump frontmatter version relative to ${baseRef} (still ${currentVersion})`,
135
+ });
136
+ continue;
137
+ }
138
+ if (isValidSemver(currentVersion) &&
139
+ isValidSemver(baseVersion) &&
140
+ compareSemver(currentVersion, baseVersion) <= 0) {
141
+ findings.push({
142
+ file: skillPath,
143
+ message: `Changed canonical skill version must increase relative to ${baseRef} (base ${baseVersion}, current ${currentVersion})`,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ export async function validateChangedSkillVersionBumps(repoRoot, options, dependencies = {}) {
149
+ const findings = [];
150
+ const changedSkillFiles = await listChangedSkillFiles(repoRoot, options.baseRef, dependencies);
151
+ await collectChangedSkillVersionBumpFindings(repoRoot, options.baseRef, changedSkillFiles, findings, dependencies);
152
+ return {
153
+ validatedSkillCount: changedSkillFiles.length,
154
+ findings,
155
+ };
156
+ }
157
+ export async function validateOatSkills(repoRoot, options = {}, dependencies = {}) {
68
158
  const skillsRoot = join(repoRoot, '.agents', 'skills');
69
159
  const findings = [];
70
160
  if (!(await isDirectory(skillsRoot))) {
@@ -162,5 +252,9 @@ export async function validateOatSkills(repoRoot) {
162
252
  validateQuickStartSemantics(skillPath, content, findings);
163
253
  }
164
254
  }
255
+ if (options.baseRef) {
256
+ const changedSkillFiles = await listChangedSkillFiles(repoRoot, options.baseRef, dependencies);
257
+ await collectChangedSkillVersionBumpFindings(repoRoot, options.baseRef, changedSkillFiles, findings, dependencies);
258
+ }
165
259
  return { validatedSkillCount: oatSkillDirs.length, findings };
166
260
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.0.10",
3
+ "version": "0.0.18",
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",
@@ -25,21 +25,6 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "scripts": {
29
- "build": "bash scripts/bundle-assets.sh && tsc && tsc-alias",
30
- "clean": "rm -rf dist",
31
- "dev": "tsx watch src/index.ts",
32
- "check": "oxlint . && oxfmt --check .",
33
- "check:fix": "oxlint --fix . && oxfmt .",
34
- "format": "oxfmt --check .",
35
- "format:fix": "oxfmt .",
36
- "lint": "oxlint .",
37
- "lint:fix": "oxlint --fix .",
38
- "test": "vitest run",
39
- "test:watch": "vitest",
40
- "test:coverage": "vitest run --coverage",
41
- "type-check": "tsc --noEmit"
42
- },
43
28
  "dependencies": {
44
29
  "@iarna/toml": "2.2.5",
45
30
  "@inquirer/prompts": "^8.2.0",
@@ -58,5 +43,20 @@
58
43
  },
59
44
  "engines": {
60
45
  "node": ">=22.17.0"
46
+ },
47
+ "scripts": {
48
+ "build": "bash scripts/bundle-assets.sh && tsc && tsc-alias",
49
+ "clean": "rm -rf dist",
50
+ "dev": "tsx watch src/index.ts",
51
+ "check": "oxlint . && oxfmt --check .",
52
+ "check:fix": "oxlint --fix . && oxfmt .",
53
+ "format": "oxfmt --check .",
54
+ "format:fix": "oxfmt .",
55
+ "lint": "oxlint .",
56
+ "lint:fix": "oxlint --fix .",
57
+ "test": "vitest run",
58
+ "test:watch": "vitest",
59
+ "test:coverage": "vitest run --coverage",
60
+ "type-check": "tsc --noEmit"
61
61
  }
62
- }
62
+ }
@@ -1,211 +0,0 @@
1
- ---
2
- title: CLI Reference
3
- description: 'Scannable reference for the current OAT CLI surface, with links to the deeper guide pages for each command family.'
4
- ---
5
-
6
- # CLI Reference
7
-
8
- Use this page when you need a quick map of the OAT CLI rather than the full command-by-command docs. It is intentionally shallow: each section points to the guide page that owns the detailed behavior.
9
-
10
- The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oat tools`, docs commands, and repo-analysis commands without adopting the full project workflow.
11
-
12
- ## Contents
13
-
14
- - [Getting Started](getting-started.md) - Bootstrap a repo with `oat init`, guided setup, and initial provider adoption.
15
- - [Tool Packs](tool-packs.md) - Install, update, inspect, and remove bundled OAT skills and agents.
16
- - [Documentation Commands](documentation/commands.md) - Docs app scaffolding, migration, index generation, and nav sync.
17
- - [Provider Sync](provider-sync/index.md) - Sync behavior, provider capabilities, config, and drift management.
18
- - [Workflow & Projects](workflow/index.md) - Project lifecycle, artifacts, reviews, PR flow, and state-machine docs.
19
- - [Repository Analysis](workflow/repo-analysis.md) - Detailed `oat repo pr-comments ...` behavior.
20
-
21
- ## Command Groups
22
-
23
- | Command group | What it covers | Go deeper |
24
- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------- | --------------------------------------------------- |
25
- | `oat init` | Bootstrap canonical OAT directories, sync config, optional hooks, and guided setup. | [Getting Started](getting-started.md) |
26
- | `oat tools ...` | Install, inspect, update, and remove bundled OAT tool packs and assets. | [Tool Packs](tool-packs.md) |
27
- | `oat backlog ...` | Generate backlog IDs and rebuild the managed file-backed backlog index. | See sections below |
28
- | `oat config ...` | Inspect resolved config values, update supported keys, and discover config ownership. | See sections below |
29
- | `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints. | [Documentation Commands](documentation/commands.md) |
30
- | `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior. | [Provider Sync](provider-sync/index.md) |
31
- | `oat project ...` / `oat cleanup ...` | Project scaffolding, execution mode, and project/artifact cleanup commands. | [Workflow & Projects](workflow/index.md) |
32
- | `oat repo ...` | Repository-level analysis workflows, currently centered on PR comments. | [Repository Analysis](workflow/repo-analysis.md) |
33
- | `oat state ...` / `oat index ...` / `oat internal ...` | Repo dashboard refresh, repo indexing, and internal validation helpers. | See sections below |
34
-
35
- ## Bootstrap and Setup
36
-
37
- ### `oat init`
38
-
39
- Use `oat init` to establish the canonical OAT directory layout, sync config, provider manifest state, and optional setup hooks.
40
-
41
- Key behavior:
42
-
43
- - initializes project- or user-scope OAT directories idempotently
44
- - can detect and adopt provider strays during setup
45
- - supports guided setup for tool packs, local paths, and provider sync
46
- - prepares the repo for later `oat status`, `oat sync`, `oat doctor`, and workflow usage
47
-
48
- See [Getting Started](getting-started.md) for the full setup flow.
49
-
50
- ## Tool Management and Local State
51
-
52
- ### `oat tools ...`
53
-
54
- Use the `oat tools` group to manage bundled OAT assets:
55
-
56
- - `oat tools list` - list installed tools, versions, pack membership, and update state
57
- - `oat tools info <name>` - inspect one installed skill or agent
58
- - `oat tools outdated` - show only assets with available updates
59
- - `oat tools install` - install bundled packs such as `core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, or `research`
60
- - `oat tools update` - update a named tool, a whole pack, or everything
61
- - `oat tools remove` - remove installed assets
62
-
63
- Mutation commands auto-run provider sync unless you pass `--no-sync`.
64
-
65
- See [Tool Packs](tool-packs.md) for the pack lifecycle and compatibility notes.
66
-
67
- ### `oat backlog ...`
68
-
69
- Use the `oat backlog` group when you want direct CLI support for the file-backed backlog under `.oat/repo/reference/backlog/`.
70
-
71
- - `oat backlog init` - scaffold `.oat/repo/reference/backlog/` with starter files and directories for a fresh repo
72
- - `oat backlog generate-id <filename>` - generate a unique backlog ID from a filename seed
73
- - `oat backlog generate-id <filename> --created-at <timestamp>` - generate a reproducible ID for a known creation timestamp
74
- - `oat backlog regenerate-index` - rebuild the managed backlog index table from item frontmatter
75
-
76
- Run `oat backlog init` first when the local backlog scaffold does not exist yet in a fresh repo. This command group is primarily used by the `oat-pjm-*` project-management skills, but it is also available directly when you need to inspect or repair backlog metadata by hand.
77
-
78
- ### `oat local ...`
79
-
80
- `oat local` manages local-only, gitignored paths that still need to follow you between the main repo and worktrees.
81
-
82
- Common examples:
83
-
84
- - `.oat/ideas/`
85
- - `.oat/**/reviews/archived/`
86
-
87
- Available commands:
88
-
89
- - `oat local status` - show whether configured local paths exist and are gitignored
90
- - `oat local apply` - write the managed `.gitignore` section for configured paths
91
- - `oat local sync` - copy local paths between the main repo and a worktree
92
- - `oat local add` / `oat local remove` - maintain the `localPaths` config entries
93
-
94
- Use this when you want archived review history or idea scratchpads to persist locally without being committed.
95
-
96
- ### `oat config ...`
97
-
98
- Use `oat config` for repo runtime config inspection and supported key mutation.
99
-
100
- - `oat config get <key>` - read one resolved config value
101
- - `oat config set <key> <value>` - update a supported shared or repo-local key
102
- - `oat config list` - show the resolved command-surface values with source information
103
- - `oat config describe` - list supported config surfaces and keys across shared repo, repo-local, user, and sync/provider config
104
- - `oat config describe <key>` - show file location, scope, default, mutability, and owning command for one key
105
-
106
- Archive lifecycle settings live here as shared repo config:
107
-
108
- - `archive.s3Uri`
109
- - `archive.s3SyncOnComplete`
110
- - `archive.summaryExportPath`
111
-
112
- When archive settings are configured, completion uploads dated archive snapshots to S3 and exports dated summary snapshots into the configured summary reference directory.
113
-
114
- Use the reference pages for file ownership and schema details:
115
-
116
- - [File Locations](../reference/file-locations.md)
117
- - [`.oat` Directory Structure](../reference/oat-directory-structure.md)
118
-
119
- ## Instruction Integrity
120
-
121
- ### `oat instructions`
122
-
123
- These commands validate and repair pointer integrity between `AGENTS.md` and sibling `CLAUDE.md` files.
124
-
125
- - `oat instructions validate` - read-only integrity check
126
- - `oat instructions sync` - preview or apply pointer repairs
127
-
128
- Use this command group when instruction files drift after manual edits or generated updates.
129
-
130
- ## Docs Commands
131
-
132
- ### `oat docs ...`
133
-
134
- The docs command group covers:
135
-
136
- - `oat docs init` - scaffold a docs app for Fumadocs or MkDocs
137
- - `oat docs migrate` - convert MkDocs markdown patterns to Fumadocs-friendly markdown
138
- - `oat docs generate-index` - regenerate the generated app-root docs index
139
- - `oat docs nav sync` - rebuild MkDocs navigation from `index.md` `## Contents`
140
- - `oat docs analyze` / `oat docs apply` - CLI entrypoints for the docs workflow skills
141
-
142
- See [Documentation Commands](documentation/commands.md) for framework-specific behavior and flags.
143
-
144
- ## Provider Sync Commands
145
-
146
- ### `oat status`, `oat sync`, and `oat providers ...`
147
-
148
- These commands manage the relationship between canonical OAT assets and provider-specific views.
149
-
150
- - `oat status` - inspect sync and drift state
151
- - `oat sync` - write provider views from canonical assets
152
- - `oat providers list` / `inspect` / `set` - inspect providers and control enablement
153
-
154
- Use [Provider Sync](provider-sync/index.md) for the full model, including scope, manifest, config, and safety behavior.
155
-
156
- ## Workflow and Project Commands
157
-
158
- ### `oat project ...`
159
-
160
- Project commands are the CLI entrypoint into the OAT lifecycle.
161
-
162
- - `oat project new <name>` - create a new project in spec-driven, quick, or import mode
163
- - `oat project open <name>` - activate an existing project
164
- - `oat project set-mode <mode>` - switch implementation between `single-thread` and `subagent-driven`
165
- - `oat project archive sync` - sync the latest dated remote snapshot for each archived project from the configured S3 archive into `.oat/projects/archived/`
166
- - `oat project archive sync <project-name>` - sync the latest dated remote snapshot for one archived project into `.oat/projects/archived/<project-name>/`
167
-
168
- ### `oat cleanup ...`
169
-
170
- Cleanup commands handle lifecycle drift and stale artifacts:
171
-
172
- - `oat cleanup project` - reconcile project pointers and lifecycle state
173
- - `oat cleanup artifacts` - prune duplicate or stale review/reference artifacts
174
-
175
- Use [Workflow & Projects](workflow/index.md) for the full lifecycle map and related docs on artifacts, reviews, PR flow, and state transitions.
176
-
177
- ## Repository Analysis
178
-
179
- ### `oat repo ...`
180
-
181
- The `oat repo` command group is for repository-wide analysis work rather than single-project execution.
182
-
183
- - `oat repo pr-comments collect` - collect merged PR review comments into monthly artifacts
184
- - `oat repo pr-comments triage-collection` - interactively keep or discard collected comments
185
-
186
- See [Repository Analysis](workflow/repo-analysis.md) for the detailed collection, filtering, and triage workflow.
187
-
188
- ## Repo State and Internal Commands
189
-
190
- ### Repo state helpers
191
-
192
- - `oat state refresh` - rebuild the `.oat/state.md` dashboard for the repo
193
- - `oat index init` - generate a lightweight `project-index.md` for orientation
194
-
195
- ### Internal helpers
196
-
197
- - `oat internal validate-oat-skills` - validate `oat-*` skill contracts and metadata
198
- - `oat doctor` - run environment and setup diagnostics, including installed-vs-bundled skill version checks
199
-
200
- `oat doctor` is the quickest way to confirm that your runtime, directory structure, and installed OAT assets are healthy before deeper debugging. The `/oat-doctor` skill (installed via the core pack) provides richer diagnostics with check and summary modes, including config explanations sourced from bundled documentation.
201
-
202
- ## Global Options
203
-
204
- Most command groups support these global flags:
205
-
206
- | Option | Description |
207
- | ----------------- | ------------------------------------------------------------- |
208
- | `--json` | Emit a single JSON document instead of human-readable output. |
209
- | `--verbose` | Enable debug-style logging. |
210
- | `--scope <scope>` | Limit work to `project`, `user`, or `all`. |
211
- | `--cwd <path>` | Override the working directory for the command. |
@@ -1,27 +0,0 @@
1
- ---
2
- title: Documentation
3
- description: 'Guide to OAT documentation app setup, docs commands, and docs analysis/apply workflows.'
4
- ---
5
-
6
- # Documentation
7
-
8
- Use this section when you are setting up, maintaining, or restructuring a docs surface with OAT.
9
-
10
- OAT supports both Fumadocs and MkDocs. In either case, the core contract is the same: each directory gets an `index.md`, and each index owns a `## Contents` section that supports local discovery and generated navigation.
11
-
12
- ## Contents
13
-
14
- - [Quickstart](quickstart.md) - Bootstrap a docs app and adopt the docs workflow in a repo.
15
- - [Commands](commands.md) - Docs CLI surface for init, migration, index generation, and nav sync.
16
- - [Workflows](workflows.md) - How the docs CLI helpers pair with `oat-docs-analyze` and `oat-docs-apply`.
17
-
18
- ## Choose an Entry Point
19
-
20
- - Start with [Quickstart](quickstart.md) when you are adding a docs app to a repo.
21
- - Use [Commands](commands.md) when you already have a docs app and need the exact CLI surface.
22
- - Use [Workflows](workflows.md) when you want a controlled analyze/apply loop for docs changes instead of manual edits.
23
-
24
- ## Related Reference
25
-
26
- - [Docs Index Contract](../../reference/docs-index-contract.md) - Rules for `index.md` and `## Contents`.
27
- - [CLI Reference](../cli-reference.md) - Shallow map of the full OAT CLI surface.
@@ -1,65 +0,0 @@
1
- ---
2
- title: Provider Sync
3
- description: 'User guide for adopting OAT across provider surfaces, managing drift, and syncing canonical assets into provider views.'
4
- ---
5
-
6
- # Provider Sync
7
-
8
- Use this section when you want OAT to project a canonical rules-and-skills layout into provider-specific surfaces such as Claude, Cursor, Copilot, Gemini, or Codex.
9
-
10
- Provider sync is a standalone path. You can adopt it without using tracked OAT projects, and then layer workflow artifacts on top later if you need them.
11
-
12
- ## Contents
13
-
14
- - [Scope and Surface](scope-and-surface.md) - Canonical assets, provider views, scopes, and the sync surface area.
15
- - [Commands](commands.md) - `oat status`, `oat sync`, and `oat providers ...` behavior.
16
- - [Providers](providers.md) - Provider-specific mappings, capabilities, and path conventions.
17
- - [Manifest and Drift](manifest-and-drift.md) - How OAT tracks synced state, stray files, and adoption decisions.
18
- - [Config](config.md) - Provider config model, enablement, and scope semantics.
19
-
20
- ## What This Section Covers
21
-
22
- - canonical assets in `.agents/skills`, `.agents/agents`, and `.agents/rules`
23
- - derived provider views that should be treated as synced outputs unless explicitly adopted
24
- - drift detection, stray discovery, and adoption decisions when provider files change
25
- - command behavior for inspecting sync state, configuring providers, and writing synced output
26
-
27
- ## Sync Flow
28
-
29
- ```mermaid
30
- flowchart LR
31
- CANON["Canonical assets\n.agents/ + .oat/"] --> STATUS["oat status"]
32
- STATUS --> SYNC["oat sync"]
33
- SYNC --> PROVIDERS["Provider views"]
34
- PROVIDERS --> DRIFT{"Drift or strays?"}
35
- DRIFT -->|No| OK["In sync"]
36
- DRIFT -->|Yes| ADOPT["Adopt or reconcile"]
37
- ADOPT --> CANON
38
- ```
39
-
40
- ## Typical Flow
41
-
42
- 1. Run `oat init` to create canonical OAT directories and base config.
43
- 2. Inspect current state with `oat status`.
44
- 3. Enable or adjust providers with `oat providers ...` as needed.
45
- 4. Run `oat sync` to materialize provider views from canonical assets.
46
- 5. Re-run `oat status` after edits to confirm drift, adoption, or sync needs.
47
-
48
- ## Canonical Rules and Adoption
49
-
50
- Recent OAT changes moved more behavior into canonical rules plus explicit adoption flows. In practice that means:
51
-
52
- - treat `.agents/` and `.oat/` content as the source of truth
53
- - use sync and adoption workflows to pull provider-side edits back into canonical form
54
- - avoid maintaining long-lived, hand-edited provider copies when the canonical source can own the change
55
-
56
- ## Related Contributor Docs
57
-
58
- - [Hooks and Safety](../../contributing/hooks-and-safety.md) - Operational safety guidance for hooks, mutation commands, and synced changes.
59
- - [Writing Skills](../../contributing/skills.md) - Contributor guidance when sync behavior depends on skill authoring changes.
60
-
61
- ## If You Are Trying To...
62
-
63
- - operate sync, drift, or provider configuration as a user, stay in this section
64
- - change hook behavior or understand mutation safety, jump to [Hooks and Safety](../../contributing/hooks-and-safety.md)
65
- - update canonical skills that later sync into provider views, jump to [Writing Skills](../../contributing/skills.md)
@@ -1,34 +0,0 @@
1
- ---
2
- title: Workflow & Projects
3
- description: 'Guide to OAT lifecycle execution, project artifacts, reviews, PR flow, and repo-analysis helpers.'
4
- ---
5
-
6
- # Workflow & Projects
7
-
8
- Use this section when you want tracked, resumable work on top of the base CLI and provider-sync layers.
9
-
10
- OAT workflow is optional. The CLI remains useful on its own, but projects add explicit artifacts, stable task IDs, review loops, and resumable implementation state for longer-running work.
11
-
12
- ## Contents
13
-
14
- - [Lifecycle](lifecycle.md) - End-to-end flow from discovery through implementation and completion.
15
- - [HiLL Checkpoints](hill-checkpoints.md) - Human-in-the-Loop Lifecycle configuration and approval behavior.
16
- - [Artifacts](artifacts.md) - What lives in `state.md`, `discovery.md`, `plan.md`, `implementation.md`, and related files.
17
- - [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
18
- - [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
19
- - [PR Flow](pr-flow.md) - Progress and final PR generation expectations.
20
- - [Repository Analysis](repo-analysis.md) - Repo-wide PR comment collection and triage workflows.
21
-
22
- ## Choose the Right Workflow Layer
23
-
24
- - Use the CLI only when you want direct commands without tracked artifacts.
25
- - Use quick mode when the work is bounded and requirements are already clear.
26
- - Use spec-driven mode when requirements or design decisions need explicit baseline artifacts.
27
- - Use import mode when a plan already exists outside OAT and you want tracked execution.
28
-
29
- ## Core Project Concepts
30
-
31
- - `state.md` tracks the current phase, task pointer, blockers, and review readiness.
32
- - `plan.md` owns the stable task sequence and HiLL checkpoint configuration.
33
- - `implementation.md` records outcomes, verification, and resume notes as work progresses.
34
- - reviews and PR artifacts provide the quality gate between implementation and merge.
File without changes