@open-agent-toolkit/cli 0.0.43 → 0.0.51
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/assets/agents/oat-phase-implementer.md +230 -0
- package/assets/agents/oat-reviewer.md +3 -3
- package/assets/docs/cli-utilities/configuration.md +15 -3
- package/assets/docs/reference/cli-reference.md +17 -14
- package/assets/docs/reference/oat-directory-structure.md +17 -17
- package/assets/docs/workflows/projects/artifacts.md +34 -0
- package/assets/docs/workflows/projects/implementation-execution.md +161 -0
- package/assets/docs/workflows/projects/lifecycle.md +22 -29
- package/assets/docs/workflows/projects/reviews.md +4 -2
- package/assets/docs/workflows/skills/index.md +0 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-doctor/SKILL.md +3 -3
- package/assets/skills/oat-project-implement/SKILL.md +363 -126
- package/assets/skills/oat-project-import-plan/SKILL.md +2 -3
- package/assets/skills/oat-project-next/SKILL.md +11 -12
- package/assets/skills/oat-project-plan/SKILL.md +23 -5
- package/assets/skills/oat-project-plan-writing/SKILL.md +2 -2
- package/assets/skills/oat-project-progress/SKILL.md +29 -35
- package/assets/skills/oat-project-quick-start/SKILL.md +13 -3
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +2 -2
- package/assets/templates/implementation.md +8 -3
- package/assets/templates/plan.md +24 -3
- package/assets/templates/state.md +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +17 -4
- package/dist/commands/init/tools/index.js +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +1 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +3 -1
- package/dist/commands/project/set-mode/index.d.ts +0 -6
- package/dist/commands/project/set-mode/index.d.ts.map +1 -1
- package/dist/commands/project/set-mode/index.js +16 -96
- package/dist/commands/project/validate-plan/index.d.ts +3 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/index.js +44 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts +20 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/validate-plan.js +77 -0
- package/dist/commands/tools/update/index.d.ts +4 -0
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +17 -1
- package/dist/commands/tools/update/update-tools.d.ts +1 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +80 -1
- package/dist/config/oat-config.d.ts +1 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +3 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +9 -0
- package/package.json +2 -2
- package/assets/skills/oat-project-subagent-implement/SKILL.md +0 -549
- package/assets/skills/oat-project-subagent-implement/examples/pattern-hill-checkpoint.md +0 -110
- package/assets/skills/oat-project-subagent-implement/examples/pattern-parallel-phases.md +0 -118
- package/assets/skills/oat-project-subagent-implement/scripts/dispatch.sh +0 -133
- package/assets/skills/oat-project-subagent-implement/scripts/reconcile.sh +0 -182
- package/assets/skills/oat-project-subagent-implement/scripts/review-gate.sh +0 -187
- package/assets/skills/oat-project-subagent-implement/tests/fixtures/sample-plan.md +0 -234
- package/assets/skills/oat-project-subagent-implement/tests/test-dry-run.sh +0 -126
- package/assets/skills/oat-project-subagent-implement/tests/test-hill-checkpoint.sh +0 -127
- package/assets/skills/oat-project-subagent-implement/tests/test-reconcile.sh +0 -254
- package/assets/skills/oat-project-subagent-implement/tests/test-review-gate.sh +0 -220
|
@@ -1,104 +1,24 @@
|
|
|
1
|
-
import { readFile as defaultReadFile, writeFile as defaultWriteFile, } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
1
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
4
|
-
import { getFrontmatterBlock, getFrontmatterField, } from '../../shared/frontmatter.js';
|
|
5
|
-
import { replaceFrontmatter, upsertFrontmatterField, } from '../../shared/frontmatter-write.js';
|
|
6
2
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
7
|
-
import { readOatLocalConfig } from '../../../config/oat-config.js';
|
|
8
|
-
import { resolveProjectRoot } from '../../../fs/paths.js';
|
|
9
3
|
import { Command } from 'commander';
|
|
10
|
-
const ORCHESTRATION_DEFAULTS = [
|
|
11
|
-
{ field: 'oat_orchestration_merge_strategy', value: 'merge' },
|
|
12
|
-
{ field: 'oat_orchestration_retry_limit', value: '2' },
|
|
13
|
-
{ field: 'oat_orchestration_baseline_policy', value: 'strict' },
|
|
14
|
-
{ field: 'oat_orchestration_unit_granularity', value: 'phase' },
|
|
15
|
-
];
|
|
16
4
|
const DEFAULT_DEPENDENCIES = {
|
|
17
5
|
buildCommandContext,
|
|
18
|
-
resolveProjectRoot,
|
|
19
|
-
readFile: defaultReadFile,
|
|
20
|
-
writeFile: defaultWriteFile,
|
|
21
|
-
now: () => new Date(),
|
|
22
6
|
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const localConfig = await readOatLocalConfig(repoRoot);
|
|
33
|
-
const activeProject = localConfig.activeProject?.trim();
|
|
34
|
-
if (!activeProject) {
|
|
35
|
-
throw new Error('No active project found (.oat/config.local.json has no activeProject).');
|
|
36
|
-
}
|
|
37
|
-
const activeProjectPath = join(repoRoot, activeProject);
|
|
38
|
-
const statePath = join(activeProjectPath, 'state.md');
|
|
39
|
-
let stateContent;
|
|
40
|
-
try {
|
|
41
|
-
stateContent = await dependencies.readFile(statePath, 'utf8');
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
throw new Error(`Active project state.md not found: ${statePath}`);
|
|
45
|
-
}
|
|
46
|
-
const frontmatterBlock = getFrontmatterBlock(stateContent);
|
|
47
|
-
if (!frontmatterBlock) {
|
|
48
|
-
throw new Error(`state.md is missing frontmatter: ${statePath}`);
|
|
49
|
-
}
|
|
50
|
-
const previousMode = getFrontmatterField(frontmatterBlock, 'oat_execution_mode');
|
|
51
|
-
let currentBlock = frontmatterBlock;
|
|
52
|
-
const modeUpdate = upsertFrontmatterField(currentBlock, 'oat_execution_mode', modeArg, true);
|
|
53
|
-
currentBlock = modeUpdate.nextBlock;
|
|
54
|
-
const defaultsAdded = [];
|
|
55
|
-
if (modeArg === 'subagent-driven') {
|
|
56
|
-
for (const entry of ORCHESTRATION_DEFAULTS) {
|
|
57
|
-
const update = upsertFrontmatterField(currentBlock, entry.field, entry.value, false);
|
|
58
|
-
currentBlock = update.nextBlock;
|
|
59
|
-
if (update.added) {
|
|
60
|
-
defaultsAdded.push(entry.field);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
currentBlock = upsertFrontmatterField(currentBlock, 'oat_project_state_updated', dependencies.now().toISOString(), true).nextBlock;
|
|
65
|
-
const updatedState = replaceFrontmatter(stateContent, currentBlock);
|
|
66
|
-
await dependencies.writeFile(statePath, updatedState, 'utf8');
|
|
67
|
-
if (context.json) {
|
|
68
|
-
context.logger.json({
|
|
69
|
-
status: 'ok',
|
|
70
|
-
mode: modeArg,
|
|
71
|
-
previousMode: previousMode || null,
|
|
72
|
-
statePath,
|
|
73
|
-
projectPath: activeProjectPath,
|
|
74
|
-
defaultsAdded,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
context.logger.info(`Set execution mode to ${modeArg}`);
|
|
79
|
-
context.logger.info(`Project: ${activeProjectPath}`);
|
|
80
|
-
context.logger.info(`State: ${statePath}`);
|
|
81
|
-
if (modeArg === 'subagent-driven') {
|
|
82
|
-
if (defaultsAdded.length > 0) {
|
|
83
|
-
context.logger.info(`Added orchestration defaults: ${defaultsAdded.join(', ')}`);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
context.logger.info('Orchestration defaults already present; no defaults added.');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
7
|
+
const DEPRECATION_MESSAGE = 'Execution mode is no longer user-selectable; oat-project-implement is the single execution skill. No changes were made. This command will be removed in a future release.';
|
|
8
|
+
async function runSetMode(_modeArg, context) {
|
|
9
|
+
if (context.json) {
|
|
10
|
+
context.logger.json({
|
|
11
|
+
status: 'deprecated',
|
|
12
|
+
command: 'oat project set-mode',
|
|
13
|
+
message: DEPRECATION_MESSAGE,
|
|
14
|
+
noop: true,
|
|
15
|
+
});
|
|
90
16
|
process.exitCode = 0;
|
|
17
|
+
return;
|
|
91
18
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
context.logger.json({ status: 'error', message });
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
context.logger.error(message);
|
|
99
|
-
}
|
|
100
|
-
process.exitCode = 1;
|
|
101
|
-
}
|
|
19
|
+
context.logger.warn("[deprecated] 'oat project set-mode' is a no-op.\n" +
|
|
20
|
+
`${DEPRECATION_MESSAGE}`);
|
|
21
|
+
process.exitCode = 0;
|
|
102
22
|
}
|
|
103
23
|
export function createProjectSetModeCommand(overrides = {}) {
|
|
104
24
|
const dependencies = {
|
|
@@ -106,10 +26,10 @@ export function createProjectSetModeCommand(overrides = {}) {
|
|
|
106
26
|
...overrides,
|
|
107
27
|
};
|
|
108
28
|
return new Command('set-mode')
|
|
109
|
-
.description('
|
|
110
|
-
.argument('<mode>', 'Execution mode
|
|
29
|
+
.description('[deprecated] No-op. Execution mode is no longer selectable.')
|
|
30
|
+
.argument('<mode>', 'Ignored. Execution mode is no longer selectable.')
|
|
111
31
|
.action(async (mode, _options, command) => {
|
|
112
32
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
113
|
-
await runSetMode(mode, context
|
|
33
|
+
await runSetMode(mode, context);
|
|
114
34
|
});
|
|
115
35
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,gCAAgC,IAAI,OAAO,CAgD1D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { buildCommandContext } from '../../../app/command-context.js';
|
|
4
|
+
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { extractPhaseIdsFromPlan, parseFrontmatterFromContent, validateParallelGroups, } from './validate-plan.js';
|
|
7
|
+
export function createProjectValidatePlanCommand() {
|
|
8
|
+
return new Command('validate-plan')
|
|
9
|
+
.description('Validate plan.md parallelism metadata against the plan phase list')
|
|
10
|
+
.option('--project-path <path>', 'project directory containing plan.md', process.cwd())
|
|
11
|
+
.action((options, command) => {
|
|
12
|
+
const context = buildCommandContext(readGlobalOptions(command));
|
|
13
|
+
const planPath = join(options.projectPath, 'plan.md');
|
|
14
|
+
let content;
|
|
15
|
+
try {
|
|
16
|
+
content = readFileSync(planPath, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
20
|
+
context.logger.error(`Failed to read plan.md: ${message}`);
|
|
21
|
+
process.exitCode = 2;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const frontmatterResult = parseFrontmatterFromContent(content);
|
|
25
|
+
if (frontmatterResult.kind === 'invalid') {
|
|
26
|
+
context.logger.error(frontmatterResult.message);
|
|
27
|
+
process.exitCode = 1;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const groups = frontmatterResult.data['oat_plan_parallel_groups'];
|
|
31
|
+
const phaseIds = extractPhaseIdsFromPlan(content);
|
|
32
|
+
const result = validateParallelGroups(groups, phaseIds);
|
|
33
|
+
if (result.valid) {
|
|
34
|
+
context.logger.success('Plan validation passed.');
|
|
35
|
+
process.exitCode = 0;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
context.logger.error('Plan validation failed:');
|
|
39
|
+
for (const err of result.errors) {
|
|
40
|
+
context.logger.error(` - ${err}`);
|
|
41
|
+
}
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type FrontmatterResult = {
|
|
2
|
+
kind: 'ok';
|
|
3
|
+
data: Record<string, unknown>;
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'no-frontmatter';
|
|
6
|
+
data: Record<string, unknown>;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'invalid';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseFrontmatterFromContent(content: string): FrontmatterResult;
|
|
12
|
+
export type ValidationResult = {
|
|
13
|
+
valid: true;
|
|
14
|
+
} | {
|
|
15
|
+
valid: false;
|
|
16
|
+
errors: string[];
|
|
17
|
+
};
|
|
18
|
+
export declare function validateParallelGroups(groups: unknown, phaseIds: readonly string[]): ValidationResult;
|
|
19
|
+
export declare function extractPhaseIdsFromPlan(planContent: string): string[];
|
|
20
|
+
//# sourceMappingURL=validate-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-plan.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/validate-plan.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,iBAAiB,CAyBnB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,gBAAgB,CAgDlB;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import YAML from 'yaml';
|
|
2
|
+
const FRONTMATTER_PATTERN = /^---\s*\n([\s\S]*?)\n---\s*(?:\n|$)/;
|
|
3
|
+
export function parseFrontmatterFromContent(content) {
|
|
4
|
+
const match = content.match(FRONTMATTER_PATTERN);
|
|
5
|
+
if (!match?.[1]) {
|
|
6
|
+
return { kind: 'no-frontmatter', data: {} };
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const parsed = YAML.parse(match[1]);
|
|
10
|
+
if (parsed !== null &&
|
|
11
|
+
typeof parsed === 'object' &&
|
|
12
|
+
!Array.isArray(parsed)) {
|
|
13
|
+
return { kind: 'ok', data: parsed };
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
kind: 'invalid',
|
|
17
|
+
message: 'Frontmatter did not parse as an object',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
22
|
+
return {
|
|
23
|
+
kind: 'invalid',
|
|
24
|
+
message: `Malformed YAML in frontmatter: ${message}`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function validateParallelGroups(groups, phaseIds) {
|
|
29
|
+
// Missing or empty → valid (sequential execution, no parallelism declared)
|
|
30
|
+
if (groups === undefined || groups === null) {
|
|
31
|
+
return { valid: true };
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(groups) && groups.length === 0) {
|
|
34
|
+
return { valid: true };
|
|
35
|
+
}
|
|
36
|
+
const errors = [];
|
|
37
|
+
if (!Array.isArray(groups)) {
|
|
38
|
+
return {
|
|
39
|
+
valid: false,
|
|
40
|
+
errors: [
|
|
41
|
+
'oat_plan_parallel_groups must be an array of arrays of phase IDs',
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
for (const [i, group] of groups.entries()) {
|
|
47
|
+
if (!Array.isArray(group)) {
|
|
48
|
+
errors.push(`group[${i}] must be an array of phase IDs`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (group.length < 2) {
|
|
52
|
+
errors.push(`group[${i}] must contain at least 2 phase IDs (singleton groups are not allowed)`);
|
|
53
|
+
}
|
|
54
|
+
for (const phaseId of group) {
|
|
55
|
+
if (typeof phaseId !== 'string') {
|
|
56
|
+
errors.push(`group[${i}] contains a non-string value`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!phaseIds.includes(phaseId)) {
|
|
60
|
+
errors.push(`group[${i}] references unknown phase: ${phaseId}`);
|
|
61
|
+
}
|
|
62
|
+
if (seen.has(phaseId)) {
|
|
63
|
+
errors.push(`phase ${phaseId} appears in multiple groups`);
|
|
64
|
+
}
|
|
65
|
+
seen.add(phaseId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return errors.length > 0 ? { valid: false, errors } : { valid: true };
|
|
69
|
+
}
|
|
70
|
+
export function extractPhaseIdsFromPlan(planContent) {
|
|
71
|
+
const matches = planContent.match(/### Task (p\d+)-t\d+/g) ?? [];
|
|
72
|
+
const ids = matches.map((m) => {
|
|
73
|
+
const parts = m.split(' ');
|
|
74
|
+
return parts[2].split('-')[0];
|
|
75
|
+
});
|
|
76
|
+
return Array.from(new Set(ids)).sort();
|
|
77
|
+
}
|
|
@@ -2,6 +2,10 @@ import { type AutoSyncDependencies } from '../../tools/shared/auto-sync.js';
|
|
|
2
2
|
import type { ToolInfo } from '../../tools/shared/types.js';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import { type UpdateTarget, type UpdateResult, type UpdateToolsDependencies } from './update-tools.js';
|
|
5
|
+
export declare function buildSyncSubprocessArgs(entrypoint: string, execArgv: string[], options: {
|
|
6
|
+
cwd: string;
|
|
7
|
+
scope: 'project' | 'user';
|
|
8
|
+
}): string[];
|
|
5
9
|
export declare function createToolsUpdateCommand(dependencies?: UpdateToolsDependencies, syncDependencies?: AutoSyncDependencies): Command;
|
|
6
10
|
export declare function shouldRefreshCoreDocs(target: UpdateTarget, result: UpdateResult): boolean;
|
|
7
11
|
export declare function formatUpdatedToolMessage(tool: ToolInfo, dryRun: boolean): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AAcxB,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GAClD,MAAM,EAAE,CAUV;AA+BD,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA6C,EAC3D,gBAAgB,GAAE,oBAA8C,GAC/D,OAAO,CAsIT;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,GACnB,OAAO,CAOT;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GACd,MAAM,CAMR"}
|
|
@@ -7,6 +7,7 @@ import { autoSync, } from '../../tools/shared/auto-sync.js';
|
|
|
7
7
|
import { scanTools } from '../../tools/shared/scan-tools.js';
|
|
8
8
|
import { readOatConfig, writeOatConfig } from '../../../config/oat-config.js';
|
|
9
9
|
import { resolveAssetsRoot } from '../../../fs/assets.js';
|
|
10
|
+
import { fileExists } from '../../../fs/io.js';
|
|
10
11
|
import { resolveProjectRoot, resolveScopeRoot } from '../../../fs/paths.js';
|
|
11
12
|
import { Command } from 'commander';
|
|
12
13
|
import { updateTools, } from './update-tools.js';
|
|
@@ -20,11 +21,26 @@ const defaultDependencies = {
|
|
|
20
21
|
resolveAssetsRoot,
|
|
21
22
|
copyDirWithStatus,
|
|
22
23
|
copyFileWithStatus,
|
|
24
|
+
fileExists,
|
|
23
25
|
};
|
|
26
|
+
export function buildSyncSubprocessArgs(entrypoint, execArgv, options) {
|
|
27
|
+
return [
|
|
28
|
+
...execArgv,
|
|
29
|
+
entrypoint,
|
|
30
|
+
'--cwd',
|
|
31
|
+
options.cwd,
|
|
32
|
+
'--scope',
|
|
33
|
+
options.scope,
|
|
34
|
+
'sync',
|
|
35
|
+
];
|
|
36
|
+
}
|
|
24
37
|
const defaultSyncDependencies = {
|
|
25
38
|
runSync: async ({ scope, cwd }) => {
|
|
26
39
|
await new Promise((resolve, reject) => {
|
|
27
|
-
execFile(process.execPath,
|
|
40
|
+
execFile(process.execPath, buildSyncSubprocessArgs(process.argv[1], process.execArgv, {
|
|
41
|
+
cwd,
|
|
42
|
+
scope,
|
|
43
|
+
}), { cwd: process.cwd() }, (error) => {
|
|
28
44
|
if (error)
|
|
29
45
|
reject(error);
|
|
30
46
|
else
|
|
@@ -24,6 +24,7 @@ export interface UpdateToolsDependencies {
|
|
|
24
24
|
resolveAssetsRoot: () => Promise<string>;
|
|
25
25
|
copyDirWithStatus: (source: string, destination: string, force: boolean) => Promise<CopyStatus>;
|
|
26
26
|
copyFileWithStatus: (source: string, destination: string, force: boolean) => Promise<CopyStatus>;
|
|
27
|
+
fileExists: (path: string) => Promise<boolean>;
|
|
27
28
|
}
|
|
28
29
|
export declare function updateTools(target: UpdateTarget, scopes: ConcreteScope[], cwd: string, home: string, dryRun: boolean, dependencies: UpdateToolsDependencies): Promise<UpdateResult>;
|
|
29
30
|
//# sourceMappingURL=update-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-tools.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/update-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"update-tools.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/update/update-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAiB3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,iBAAiB,EAAE,CACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,kBAAkB,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AA8ED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,aAAa,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,uBAAuB,GACpC,OAAO,CAAC,YAAY,CAAC,CA0GvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { CORE_SKILLS, DOCS_SKILLS, IDEA_SKILLS, PROJECT_MANAGEMENT_SKILLS, RESEARCH_AGENTS, RESEARCH_SKILLS, UTILITY_SKILLS, WORKFLOW_AGENTS, WORKFLOW_SKILLS, } from '../../init/tools/shared/skill-manifest.js';
|
|
2
|
+
import { CORE_SKILLS, DOCS_SKILLS, DOCS_SCRIPTS, IDEA_SKILLS, PROJECT_MANAGEMENT_SKILLS, PROJECT_MANAGEMENT_SCRIPTS, PROJECT_MANAGEMENT_TEMPLATES, RESEARCH_AGENTS, RESEARCH_SKILLS, UTILITY_SKILLS, WORKFLOW_AGENTS, WORKFLOW_SKILLS, WORKFLOW_SCRIPTS, WORKFLOW_TEMPLATES, } from '../../init/tools/shared/skill-manifest.js';
|
|
3
3
|
const BUNDLED_PACK_MEMBERS = {
|
|
4
4
|
core: CORE_SKILLS.map((name) => ({ name, type: 'skill' })),
|
|
5
5
|
ideas: IDEA_SKILLS.map((name) => ({ name, type: 'skill' })),
|
|
@@ -24,6 +24,36 @@ const BUNDLED_PACK_MEMBERS = {
|
|
|
24
24
|
})),
|
|
25
25
|
],
|
|
26
26
|
};
|
|
27
|
+
const BUNDLED_PACK_ASSETS = {
|
|
28
|
+
core: {
|
|
29
|
+
templates: [],
|
|
30
|
+
scripts: [],
|
|
31
|
+
},
|
|
32
|
+
ideas: {
|
|
33
|
+
templates: [],
|
|
34
|
+
scripts: [],
|
|
35
|
+
},
|
|
36
|
+
docs: {
|
|
37
|
+
templates: [],
|
|
38
|
+
scripts: DOCS_SCRIPTS,
|
|
39
|
+
},
|
|
40
|
+
workflows: {
|
|
41
|
+
templates: WORKFLOW_TEMPLATES,
|
|
42
|
+
scripts: WORKFLOW_SCRIPTS,
|
|
43
|
+
},
|
|
44
|
+
utility: {
|
|
45
|
+
templates: [],
|
|
46
|
+
scripts: [],
|
|
47
|
+
},
|
|
48
|
+
'project-management': {
|
|
49
|
+
templates: PROJECT_MANAGEMENT_TEMPLATES,
|
|
50
|
+
scripts: PROJECT_MANAGEMENT_SCRIPTS,
|
|
51
|
+
},
|
|
52
|
+
research: {
|
|
53
|
+
templates: [],
|
|
54
|
+
scripts: [],
|
|
55
|
+
},
|
|
56
|
+
};
|
|
27
57
|
export async function updateTools(target, scopes, cwd, home, dryRun, dependencies) {
|
|
28
58
|
const assetsRoot = await dependencies.resolveAssetsRoot();
|
|
29
59
|
const result = {
|
|
@@ -86,6 +116,22 @@ export async function updateTools(target, scopes, cwd, home, dryRun, dependencie
|
|
|
86
116
|
}
|
|
87
117
|
result.updated.push(tool);
|
|
88
118
|
}
|
|
119
|
+
for (const assetTarget of resolvePackAssetTargets(target, allTools)) {
|
|
120
|
+
const assets = BUNDLED_PACK_ASSETS[assetTarget.pack];
|
|
121
|
+
for (const template of assets.templates) {
|
|
122
|
+
const source = join(assetsRoot, 'templates', template);
|
|
123
|
+
const destination = join(assetTarget.scopeRoot, '.oat', 'templates', template);
|
|
124
|
+
await dependencies.copyFileWithStatus(source, destination, true);
|
|
125
|
+
}
|
|
126
|
+
for (const script of assets.scripts) {
|
|
127
|
+
const source = join(assetsRoot, 'scripts', script);
|
|
128
|
+
if (!(await dependencies.fileExists(source))) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const destination = join(assetTarget.scopeRoot, '.oat', 'scripts', script);
|
|
132
|
+
await dependencies.copyFileWithStatus(source, destination, true);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
89
135
|
return result;
|
|
90
136
|
}
|
|
91
137
|
function expandInstalledPackEntries(target, installedEntries) {
|
|
@@ -133,6 +179,39 @@ function expandInstalledPackEntries(target, installedEntries) {
|
|
|
133
179
|
function getBundledPackMembers(pack, scope) {
|
|
134
180
|
return BUNDLED_PACK_MEMBERS[pack].filter((member) => scope === 'project' || member.type === 'skill');
|
|
135
181
|
}
|
|
182
|
+
function resolvePackAssetTargets(target, installedEntries) {
|
|
183
|
+
if (target.kind === 'name') {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
const entriesByScope = new Map();
|
|
187
|
+
for (const entry of installedEntries) {
|
|
188
|
+
const scopeEntries = entriesByScope.get(entry.tool.scope) ?? [];
|
|
189
|
+
scopeEntries.push(entry);
|
|
190
|
+
entriesByScope.set(entry.tool.scope, scopeEntries);
|
|
191
|
+
}
|
|
192
|
+
const targets = [];
|
|
193
|
+
for (const scopeEntries of entriesByScope.values()) {
|
|
194
|
+
const scopeRoot = scopeEntries[0]?.scopeRoot;
|
|
195
|
+
if (!scopeRoot)
|
|
196
|
+
continue;
|
|
197
|
+
const installedPacks = new Set(scopeEntries
|
|
198
|
+
.map((entry) => entry.tool.pack)
|
|
199
|
+
.filter((pack) => pack !== 'custom'));
|
|
200
|
+
const packsToExpand = target.kind === 'pack'
|
|
201
|
+
? installedPacks.has(target.pack)
|
|
202
|
+
? [target.pack]
|
|
203
|
+
: []
|
|
204
|
+
: [...installedPacks];
|
|
205
|
+
for (const pack of packsToExpand) {
|
|
206
|
+
const assets = BUNDLED_PACK_ASSETS[pack];
|
|
207
|
+
if (assets.templates.length === 0 && assets.scripts.length === 0) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
targets.push({ pack, scopeRoot });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return targets;
|
|
214
|
+
}
|
|
136
215
|
function buildEntryKey(tool) {
|
|
137
216
|
return [tool.scope, tool.type, tool.name].join(':');
|
|
138
217
|
}
|
|
@@ -23,6 +23,7 @@ export interface OatWorkflowConfig {
|
|
|
23
23
|
createPrOnComplete?: boolean;
|
|
24
24
|
postImplementSequence?: WorkflowPostImplementSequence;
|
|
25
25
|
reviewExecutionModel?: WorkflowReviewExecutionModel;
|
|
26
|
+
autoReviewAtHillCheckpoints?: boolean;
|
|
26
27
|
autoNarrowReReviewScope?: boolean;
|
|
27
28
|
}
|
|
28
29
|
export type OatToolsConfig = Partial<Record<'core' | 'ideas' | 'docs' | 'workflows' | 'utility' | 'project-management' | 'research', boolean>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,6BAA6B,GACrC,MAAM,GACN,SAAS,GACT,IAAI,GACJ,SAAS,CAAC;AACd,MAAM,MAAM,4BAA4B,GACpC,UAAU,GACV,QAAQ,GACR,eAAe,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CAAC,EAAE,6BAA6B,CAAC;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,6BAA6B,CAAC;IACtD,oBAAoB,CAAC,EAAE,4BAA4B,CAAC;IACpD,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,9 @@ function normalizeWorkflowConfig(parsed) {
|
|
|
36
36
|
next.reviewExecutionModel =
|
|
37
37
|
parsed.reviewExecutionModel;
|
|
38
38
|
}
|
|
39
|
+
if (typeof parsed.autoReviewAtHillCheckpoints === 'boolean') {
|
|
40
|
+
next.autoReviewAtHillCheckpoints = parsed.autoReviewAtHillCheckpoints;
|
|
41
|
+
}
|
|
39
42
|
if (typeof parsed.autoNarrowReReviewScope === 'boolean') {
|
|
40
43
|
next.autoNarrowReReviewScope = parsed.autoNarrowReReviewScope;
|
|
41
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AAgED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,CAAC,kCAAkC,CAAM,GAC1D,OAAO,CAAC,cAAc,CAAC,CAgFzB"}
|
package/dist/config/resolve.js
CHANGED
|
@@ -47,6 +47,7 @@ const DEFAULT_WORKFLOW_CONFIG = {
|
|
|
47
47
|
createPrOnComplete: null,
|
|
48
48
|
postImplementSequence: null,
|
|
49
49
|
reviewExecutionModel: null,
|
|
50
|
+
autoReviewAtHillCheckpoints: null,
|
|
50
51
|
autoNarrowReReviewScope: null,
|
|
51
52
|
},
|
|
52
53
|
};
|
|
@@ -108,6 +109,14 @@ export async function resolveEffectiveConfig(repoRoot, userConfigDir, env = proc
|
|
|
108
109
|
};
|
|
109
110
|
}
|
|
110
111
|
}
|
|
112
|
+
const hillAutoReview = resolved['workflow.autoReviewAtHillCheckpoints'];
|
|
113
|
+
if (hillAutoReview?.source === 'default' &&
|
|
114
|
+
shared.autoReviewAtCheckpoints !== undefined) {
|
|
115
|
+
resolved['workflow.autoReviewAtHillCheckpoints'] = {
|
|
116
|
+
value: shared.autoReviewAtCheckpoints,
|
|
117
|
+
source: 'shared',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
111
120
|
return {
|
|
112
121
|
shared,
|
|
113
122
|
local,
|
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.51",
|
|
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",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"ora": "^9.0.0",
|
|
34
34
|
"yaml": "2.8.2",
|
|
35
35
|
"zod": "^3.25.76",
|
|
36
|
-
"@open-agent-toolkit/control-plane": "0.0.
|
|
36
|
+
"@open-agent-toolkit/control-plane": "0.0.51"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.10.0",
|