@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.
- package/LICENSE +21 -0
- package/README.md +12 -20
- package/assets/docs/{guide/getting-started.md → cli-utilities/bootstrap.md} +8 -2
- package/assets/docs/cli-utilities/config-and-local-state.md +84 -0
- package/assets/docs/{guide → cli-utilities}/configuration.md +2 -2
- package/assets/docs/cli-utilities/index.md +41 -0
- package/assets/docs/cli-utilities/overview.md +33 -0
- package/assets/docs/{guide → cli-utilities}/tool-packs.md +9 -3
- package/assets/docs/contributing/code.md +4 -2
- package/assets/docs/contributing/design-principles.md +3 -3
- package/assets/docs/contributing/documentation.md +12 -4
- package/assets/docs/{guide/documentation/quickstart.md → docs-tooling/add-docs-to-a-repo.md} +1 -1
- package/assets/docs/{guide/documentation → docs-tooling}/commands.md +8 -1
- package/assets/docs/docs-tooling/index.md +40 -0
- package/assets/docs/docs-tooling/overview.md +31 -0
- package/assets/docs/{guide/documentation → docs-tooling}/workflows.md +3 -3
- package/assets/docs/guide/concepts.md +9 -9
- package/assets/docs/guide/index.md +14 -11
- package/assets/docs/index.md +34 -18
- package/assets/docs/{guide/provider-sync → provider-sync}/commands.md +10 -4
- package/assets/docs/{guide/provider-sync → provider-sync}/config.md +1 -1
- package/assets/docs/provider-sync/index.md +43 -0
- package/assets/docs/{guide/provider-sync → provider-sync}/manifest-and-drift.md +8 -0
- package/assets/docs/provider-sync/overview.md +38 -0
- package/assets/docs/{guide/provider-sync → provider-sync}/scope-and-surface.md +3 -3
- package/assets/docs/quickstart.md +43 -126
- package/assets/docs/reference/cli-reference.md +35 -0
- package/assets/docs/reference/docs-index-contract.md +1 -2
- package/assets/docs/reference/index.md +5 -4
- package/assets/docs/workflows/index.md +40 -0
- package/assets/docs/workflows/overview.md +38 -0
- package/assets/docs/workflows/projects/index.md +37 -0
- package/assets/docs/{guide/workflow → workflows/projects}/lifecycle.md +6 -0
- package/assets/docs/{guide/workflow → workflows/projects}/repo-analysis.md +6 -0
- package/assets/docs/{guide/workflow → workflows/projects}/state-machine.md +8 -0
- package/assets/docs/{guide → workflows}/skills/index.md +2 -2
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +0 -0
- package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-providers.sh +0 -0
- package/assets/skills/oat-project-complete/SKILL.md +21 -27
- package/assets/skills/oat-project-document/SKILL.md +2 -2
- package/assets/skills/oat-project-import-plan/scripts/find-recent-provider-plans.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/scripts/dispatch.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/scripts/reconcile.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/scripts/review-gate.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/tests/test-dry-run.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/tests/test-reconcile.sh +0 -0
- package/assets/skills/oat-project-subagent-implement/tests/test-review-gate.sh +0 -0
- package/assets/skills/oat-repo-maintainability-review/scripts/resolve-analysis-output.sh +0 -0
- package/assets/skills/oat-review-provide/scripts/resolve-review-output.sh +0 -0
- package/assets/skills/oat-worktree-bootstrap-auto/scripts/bootstrap.sh +0 -0
- package/dist/app/create-program.js +1 -1
- package/dist/commands/docs/index-generate/index.d.ts +1 -0
- package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
- package/dist/commands/docs/index-generate/index.js +6 -3
- package/dist/commands/docs/init/index.d.ts +3 -0
- package/dist/commands/docs/init/index.d.ts.map +1 -1
- package/dist/commands/docs/init/index.js +52 -3
- package/dist/commands/docs/init/resolve-options.d.ts +1 -1
- package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
- package/dist/commands/docs/init/resolve-options.js +1 -0
- package/dist/commands/docs/init/scaffold.d.ts +1 -0
- package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
- package/dist/commands/docs/init/scaffold.js +26 -8
- package/dist/commands/internal/index.d.ts.map +1 -1
- package/dist/commands/internal/index.js +3 -1
- package/dist/commands/internal/validate-oat-skills.d.ts +2 -2
- package/dist/commands/internal/validate-oat-skills.d.ts.map +1 -1
- package/dist/commands/internal/validate-oat-skills.js +5 -4
- package/dist/commands/internal/validate-skill-version-bumps.d.ts +10 -0
- package/dist/commands/internal/validate-skill-version-bumps.d.ts.map +1 -0
- package/dist/commands/internal/validate-skill-version-bumps.js +74 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +34 -2
- package/dist/manifest/manager.js +1 -1
- package/dist/validation/index.d.ts +2 -2
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/skills.d.ts +25 -1
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +95 -1
- package/package.json +17 -17
- package/assets/docs/guide/cli-reference.md +0 -211
- package/assets/docs/guide/documentation/index.md +0 -27
- package/assets/docs/guide/provider-sync/index.md +0 -65
- package/assets/docs/guide/workflow/index.md +0 -34
- /package/assets/docs/{guide/provider-sync → provider-sync}/providers.md +0 -0
- /package/assets/docs/{guide → workflows}/ideas/index.md +0 -0
- /package/assets/docs/{guide → workflows}/ideas/lifecycle.md +0 -0
- /package/assets/docs/{guide/workflow → workflows/projects}/artifacts.md +0 -0
- /package/assets/docs/{guide/workflow → workflows/projects}/hill-checkpoints.md +0 -0
- /package/assets/docs/{guide/workflow → workflows/projects}/pr-flow.md +0 -0
- /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
|
-
|
|
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
|
|
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));
|
package/dist/manifest/manager.js
CHANGED
|
@@ -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.
|
|
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,
|
|
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"}
|
package/dist/validation/index.js
CHANGED
|
@@ -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
|
|
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":"
|
|
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
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|