@open-agent-toolkit/cli 0.1.33 → 0.1.35
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/docs/cli-utilities/config-and-local-state.md +20 -0
- package/assets/docs/cli-utilities/configuration.md +17 -6
- package/assets/docs/cli-utilities/index.md +5 -0
- package/assets/docs/cli-utilities/tool-packs.md +1 -1
- package/assets/docs/cli-utilities/workflow-gates.md +163 -0
- package/assets/docs/contributing/design-principles.md +1 -1
- package/assets/docs/contributing/skills.md +25 -0
- package/assets/docs/reference/cli-reference.md +3 -0
- package/assets/docs/reference/file-locations.md +1 -0
- package/assets/docs/reference/oat-directory-structure.md +3 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +23 -1
- package/assets/skills/oat-project-plan/SKILL.md +23 -1
- package/dist/app/create-program.d.ts.map +1 -1
- package/dist/app/create-program.js +3 -6
- package/dist/app/help-config.d.ts +12 -0
- package/dist/app/help-config.d.ts.map +1 -0
- package/dist/app/help-config.js +15 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +2 -1
- package/dist/commands/gate/index.d.ts +35 -0
- package/dist/commands/gate/index.d.ts.map +1 -0
- package/dist/commands/gate/index.js +500 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +2 -1
- package/dist/commands/init/tools/brainstorm/index.d.ts.map +1 -1
- package/dist/commands/init/tools/brainstorm/index.js +2 -1
- package/dist/commands/init/tools/core/index.d.ts.map +1 -1
- package/dist/commands/init/tools/core/index.js +18 -0
- package/dist/commands/init/tools/docs/index.d.ts.map +1 -1
- package/dist/commands/init/tools/docs/index.js +2 -1
- package/dist/commands/init/tools/ideas/index.d.ts.map +1 -1
- package/dist/commands/init/tools/ideas/index.js +2 -1
- package/dist/commands/init/tools/project-management/index.d.ts.map +1 -1
- package/dist/commands/init/tools/project-management/index.js +19 -0
- package/dist/commands/init/tools/research/index.d.ts.map +1 -1
- package/dist/commands/init/tools/research/index.js +2 -1
- package/dist/commands/init/tools/utility/index.d.ts.map +1 -1
- package/dist/commands/init/tools/utility/index.js +2 -1
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +2 -1
- package/dist/commands/internal/validate-oat-skills.d.ts +3 -0
- package/dist/commands/internal/validate-oat-skills.d.ts.map +1 -1
- package/dist/commands/internal/validate-oat-skills.js +44 -2
- package/dist/commands/project/split/evaluate-signals.d.ts.map +1 -1
- package/dist/commands/project/split/evaluate-signals.js +11 -1
- package/dist/commands/project/split/run.d.ts.map +1 -1
- package/dist/commands/project/split/run.js +14 -0
- package/dist/commands/project/split/validate-plan.d.ts.map +1 -1
- package/dist/commands/project/split/validate-plan.js +30 -6
- package/dist/commands/project/validate-plan/index.d.ts +6 -1
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +36 -9
- package/dist/commands/providers/inspect/inspect.d.ts.map +1 -1
- package/dist/commands/providers/inspect/inspect.js +2 -1
- package/dist/commands/providers/list/list.d.ts.map +1 -1
- package/dist/commands/providers/list/list.js +2 -1
- package/dist/commands/providers/set/index.d.ts.map +1 -1
- package/dist/commands/providers/set/index.js +6 -2
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +2 -1
- package/dist/commands/remove/skills/remove-skills.d.ts.map +1 -1
- package/dist/commands/remove/skills/remove-skills.js +2 -1
- package/dist/commands/repo/pr-comments/triage-collection/triage-comments.d.ts +1 -0
- package/dist/commands/repo/pr-comments/triage-collection/triage-comments.d.ts.map +1 -1
- package/dist/commands/repo/pr-comments/triage-collection/triage-comments.js +25 -13
- package/dist/commands/shared/scope-option.d.ts +21 -0
- package/dist/commands/shared/scope-option.d.ts.map +1 -0
- package/dist/commands/shared/scope-option.js +24 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +2 -1
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +2 -1
- package/dist/commands/tools/info/index.d.ts.map +1 -1
- package/dist/commands/tools/info/index.js +2 -1
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +2 -0
- package/dist/commands/tools/list/index.d.ts.map +1 -1
- package/dist/commands/tools/list/index.js +2 -1
- package/dist/commands/tools/outdated/index.d.ts.map +1 -1
- package/dist/commands/tools/outdated/index.js +2 -1
- package/dist/commands/tools/remove/index.d.ts.map +1 -1
- package/dist/commands/tools/remove/index.js +2 -1
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +6 -2
- package/dist/config/oat-config.d.ts +22 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +136 -0
- package/dist/config/resolve.d.ts +3 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +103 -1
- package/dist/validation/skills.d.ts +2 -0
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +39 -0
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
|
+
import { withScopeOption } from '../../../shared/scope-option.js';
|
|
2
3
|
import { confirmAction, } from '../../../shared/shared.prompts.js';
|
|
3
4
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
5
|
import { canonicalPathsForPack, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
@@ -87,7 +88,7 @@ export function createInitToolsIdeasCommand(overrides = {}) {
|
|
|
87
88
|
...DEFAULT_DEPENDENCIES,
|
|
88
89
|
...overrides,
|
|
89
90
|
};
|
|
90
|
-
return new Command('ideas')
|
|
91
|
+
return withScopeOption(new Command('ideas'))
|
|
91
92
|
.description('Install OAT ideas skills, templates, and idea workflow files')
|
|
92
93
|
.option('--force', 'Overwrite existing files where applicable')
|
|
93
94
|
.action(async (options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/project-management/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AAMtC,UAAU,sCAAsC;IAC9C,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB,EAAE,CACxB,OAAO,EAAE,+BAA+B,KACrC,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC9C;AASD,wBAAgB,uCAAuC,CACrD,SAAS,GAAE,OAAO,CAAC,sCAAsC,CAAM,GAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/project-management/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AAMtC,UAAU,sCAAsC;IAC9C,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB,EAAE,CACxB,OAAO,EAAE,+BAA+B,KACrC,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC9C;AASD,wBAAgB,uCAAuC,CACrD,SAAS,GAAE,OAAO,CAAC,sCAAsC,CAAM,GAC9D,OAAO,CAyFT"}
|
|
@@ -20,6 +20,25 @@ export function createInitToolsProjectManagementCommand(overrides = {}) {
|
|
|
20
20
|
.description('Install OAT project-management skills and templates')
|
|
21
21
|
.option('--force', 'Overwrite existing files where applicable')
|
|
22
22
|
.action(async (options, command) => {
|
|
23
|
+
// project-management always installs at project scope. If the caller
|
|
24
|
+
// explicitly passed a conflicting --scope on an ancestor (init or tools
|
|
25
|
+
// install), reject it rather than silently ignoring it. A matching
|
|
26
|
+
// --scope project, or no explicit --scope, proceeds unchanged.
|
|
27
|
+
if (command.getOptionValueSourceWithGlobals('scope') === 'cli') {
|
|
28
|
+
const opts = command.optsWithGlobals();
|
|
29
|
+
if (opts.scope !== 'project') {
|
|
30
|
+
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
31
|
+
const msg = 'the project-management pack always installs at project scope; remove --scope or pass --scope project';
|
|
32
|
+
if (context.json) {
|
|
33
|
+
context.logger.json({ status: 'error', message: msg });
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
context.logger.error(msg);
|
|
37
|
+
}
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
23
42
|
let didInstall = false;
|
|
24
43
|
try {
|
|
25
44
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/research/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/research/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AASzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAG3B,MAAM,oBAAoB,CAAC;AAM5B,KAAK,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AAExC,UAAU,6BAA6B;IACrC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,gBAAgB,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9E,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,eAAe,EAAE,CACf,OAAO,EAAE,sBAAsB,KAC5B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACpC,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC/B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AA0ID,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACrD,OAAO,CAeT"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
|
+
import { withScopeOption } from '../../../shared/scope-option.js';
|
|
2
3
|
import { confirmAction, selectManyWithAbort, } from '../../../shared/shared.prompts.js';
|
|
3
4
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
5
|
import { canonicalAgentPaths, canonicalSkillPaths, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
@@ -105,7 +106,7 @@ export function createInitToolsResearchCommand(overrides = {}) {
|
|
|
105
106
|
...DEFAULT_DEPENDENCIES,
|
|
106
107
|
...overrides,
|
|
107
108
|
};
|
|
108
|
-
return new Command('research')
|
|
109
|
+
return withScopeOption(new Command('research'))
|
|
109
110
|
.description('Install OAT research skills')
|
|
110
111
|
.option('--force', 'Overwrite existing files where applicable')
|
|
111
112
|
.action(async (options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/utility/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/utility/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAM3B,KAAK,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvC,UAAU,4BAA4B;IACpC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,gBAAgB,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,cAAc,EAAE,CACd,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC/B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAoID,wBAAgB,6BAA6B,CAC3C,SAAS,GAAE,OAAO,CAAC,4BAA4B,CAAM,GACpD,OAAO,CAeT"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
|
+
import { withScopeOption } from '../../../shared/scope-option.js';
|
|
2
3
|
import { confirmAction, selectManyWithAbort, } from '../../../shared/shared.prompts.js';
|
|
3
4
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
5
|
import { canonicalSkillPaths, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
@@ -101,7 +102,7 @@ export function createInitToolsUtilityCommand(overrides = {}) {
|
|
|
101
102
|
...DEFAULT_DEPENDENCIES,
|
|
102
103
|
...overrides,
|
|
103
104
|
};
|
|
104
|
-
return new Command('utility')
|
|
105
|
+
return withScopeOption(new Command('utility'))
|
|
105
106
|
.description('Install OAT utility skills')
|
|
106
107
|
.option('--force', 'Overwrite existing files where applicable')
|
|
107
108
|
.action(async (options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAC;AAM7B,UAAU,8BAA8B;IACtC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,CAChB,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAkGD,wBAAgB,+BAA+B,CAC7C,SAAS,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACtD,OAAO,CAsBT"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
|
+
import { withScopeOption } from '../../../shared/scope-option.js';
|
|
2
3
|
import { confirmAction, } from '../../../shared/shared.prompts.js';
|
|
3
4
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
5
|
import { canonicalPathsForPack, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
@@ -77,7 +78,7 @@ export function createInitToolsWorkflowsCommand(overrides = {}) {
|
|
|
77
78
|
...DEFAULT_DEPENDENCIES,
|
|
78
79
|
...overrides,
|
|
79
80
|
};
|
|
80
|
-
return new Command('workflows')
|
|
81
|
+
return withScopeOption(new Command('workflows'))
|
|
81
82
|
.description('Install OAT workflows skills, agents, templates, and scripts')
|
|
82
83
|
.option('--force', 'Overwrite existing files where applicable')
|
|
83
84
|
.action(async (options, command) => {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
|
|
2
|
+
import { type ResolvedConfig } from '../../config/resolve.js';
|
|
2
3
|
import { type ValidateOatSkillsOptions, type ValidateOatSkillsResult } from '../../validation/index.js';
|
|
3
4
|
import { Command } from 'commander';
|
|
4
5
|
interface ValidateOatSkillsDependencies {
|
|
5
6
|
buildCommandContext: (options: GlobalOptions) => CommandContext;
|
|
6
7
|
validateOatSkills: (repoRoot: string, options?: ValidateOatSkillsOptions) => Promise<ValidateOatSkillsResult>;
|
|
8
|
+
resolveEffectiveConfig: (repoRoot: string, userConfigDir: string, env?: NodeJS.ProcessEnv) => Promise<ResolvedConfig>;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
7
10
|
}
|
|
8
11
|
export declare function createValidateOatSkillsCommand(overrides?: Partial<ValidateOatSkillsDependencies>): Command;
|
|
9
12
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-oat-skills.d.ts","sourceRoot":"","sources":["../../../src/commands/internal/validate-oat-skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-oat-skills.d.ts","sourceRoot":"","sources":["../../../src/commands/internal/validate-oat-skills.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,UAAU,6BAA6B;IACrC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,wBAAwB,KAC/B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KACpB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AA+HD,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACrD,OAAO,CAkBT"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
1
2
|
import { buildCommandContext, } from '../../app/command-context.js';
|
|
2
3
|
import { readGlobalOptions } from '../shared/shared.utils.js';
|
|
4
|
+
import { resolveEffectiveConfig as defaultResolveEffectiveConfig, } from '../../config/resolve.js';
|
|
3
5
|
import { validateOatSkills as defaultValidateOatSkills, } from '../../validation/index.js';
|
|
4
6
|
import { Command } from 'commander';
|
|
5
7
|
const DEFAULT_DEPENDENCIES = {
|
|
6
8
|
buildCommandContext,
|
|
7
9
|
validateOatSkills: defaultValidateOatSkills,
|
|
10
|
+
resolveEffectiveConfig: defaultResolveEffectiveConfig,
|
|
8
11
|
};
|
|
12
|
+
function collectConfiguredGateSkillNames(effective) {
|
|
13
|
+
const names = new Set();
|
|
14
|
+
for (const layer of [effective.shared, effective.local, effective.user]) {
|
|
15
|
+
const skills = layer.workflow?.gates?.skills;
|
|
16
|
+
if (!skills) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
for (const skillName of Object.keys(skills)) {
|
|
20
|
+
names.add(skillName);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return [...names].sort();
|
|
24
|
+
}
|
|
25
|
+
function isBlockingFinding(finding) {
|
|
26
|
+
return finding.severity !== 'warning';
|
|
27
|
+
}
|
|
9
28
|
function reportFindings(context, result) {
|
|
10
29
|
if (context.json) {
|
|
11
30
|
context.logger.json({
|
|
@@ -21,14 +40,37 @@ function reportFindings(context, result) {
|
|
|
21
40
|
}
|
|
22
41
|
context.logger.error('\nFix the issues above, then re-run: pnpm oat:validate-skills');
|
|
23
42
|
}
|
|
43
|
+
function reportWarnings(context, result) {
|
|
44
|
+
if (context.json) {
|
|
45
|
+
context.logger.json({
|
|
46
|
+
status: 'ok',
|
|
47
|
+
validatedSkillCount: result.validatedSkillCount,
|
|
48
|
+
findings: result.findings,
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
context.logger.warn('OAT skill validation warnings:\n');
|
|
53
|
+
for (const finding of result.findings) {
|
|
54
|
+
context.logger.warn(`- ${finding.file}: ${finding.message}`);
|
|
55
|
+
}
|
|
56
|
+
context.logger.info(`OK: validated ${result.validatedSkillCount} oat-* skills`);
|
|
57
|
+
}
|
|
24
58
|
async function runValidateOatSkills(context, options, dependencies) {
|
|
25
59
|
try {
|
|
26
|
-
const
|
|
27
|
-
|
|
60
|
+
const effectiveConfig = await dependencies.resolveEffectiveConfig(context.cwd, join(context.home, '.oat'), dependencies.env ?? process.env);
|
|
61
|
+
const gateSkillNames = collectConfiguredGateSkillNames(effectiveConfig);
|
|
62
|
+
const validationOptions = gateSkillNames.length > 0 ? { ...options, gateSkillNames } : options;
|
|
63
|
+
const result = await dependencies.validateOatSkills(context.cwd, validationOptions);
|
|
64
|
+
if (result.findings.some(isBlockingFinding)) {
|
|
28
65
|
reportFindings(context, result);
|
|
29
66
|
process.exitCode = 1;
|
|
30
67
|
return;
|
|
31
68
|
}
|
|
69
|
+
if (result.findings.length > 0) {
|
|
70
|
+
reportWarnings(context, result);
|
|
71
|
+
process.exitCode = 0;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
32
74
|
if (context.json) {
|
|
33
75
|
context.logger.json({
|
|
34
76
|
status: 'ok',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-signals.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/evaluate-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;CACjE;AAqBD,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"evaluate-signals.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/evaluate-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;CACjE;AAqBD,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAoCT"}
|
|
@@ -35,7 +35,17 @@ export function createEvaluateSignalsCommand(overrides = {}) {
|
|
|
35
35
|
.action((options, command) => {
|
|
36
36
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
37
37
|
try {
|
|
38
|
-
|
|
38
|
+
const result = evaluateSignals({
|
|
39
|
+
fired: parseFiredSignals(options.fired),
|
|
40
|
+
});
|
|
41
|
+
if (context.json) {
|
|
42
|
+
context.logger.json(result);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const status = result.triggered ? 'triggered' : 'below threshold';
|
|
46
|
+
context.logger.info(`Signal evaluation: ${status} (confidence: ${result.confidence})`);
|
|
47
|
+
context.logger.info(`Fired signals: ${result.fired.length > 0 ? result.fired.join(', ') : 'none'}`);
|
|
48
|
+
}
|
|
39
49
|
process.exitCode = 0;
|
|
40
50
|
}
|
|
41
51
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,UAAU,oBAAoB;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,gBAAgB,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAsLD,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,UAAU,oBAAoB;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,gBAAgB,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAsLD,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,OAAO,CAgKT"}
|
|
@@ -190,6 +190,13 @@ export function createProjectSplitRunCommand(overrides = {}) {
|
|
|
190
190
|
});
|
|
191
191
|
await dependencies.refreshDashboard({ repoRoot });
|
|
192
192
|
context.logger.info('Split completed.');
|
|
193
|
+
if (context.json) {
|
|
194
|
+
context.logger.json({
|
|
195
|
+
status: 'ok',
|
|
196
|
+
parentSlug: document.plan.parentSlug,
|
|
197
|
+
children: document.plan.children.map((child) => child.slug),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
193
200
|
process.exitCode = 0;
|
|
194
201
|
return;
|
|
195
202
|
}
|
|
@@ -216,6 +223,13 @@ export function createProjectSplitRunCommand(overrides = {}) {
|
|
|
216
223
|
}
|
|
217
224
|
await dependencies.refreshDashboard({ repoRoot });
|
|
218
225
|
context.logger.info('Split completed.');
|
|
226
|
+
if (context.json) {
|
|
227
|
+
context.logger.json({
|
|
228
|
+
status: 'ok',
|
|
229
|
+
parentSlug: document.plan.parentSlug,
|
|
230
|
+
children: document.plan.children.map((child) => child.slug),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
219
233
|
process.exitCode = 0;
|
|
220
234
|
}
|
|
221
235
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-plan.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/validate-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,QAAQ,IAAI,eAAe,EAC5B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,OAAO,eAAe,CAAC;IACjC,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAgCD,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"validate-plan.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/split/validate-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,QAAQ,IAAI,eAAe,EAC5B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,EAAE,OAAO,eAAe,CAAC;IACjC,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAgCD,wBAAgB,8BAA8B,CAC5C,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,OAAO,CA8DT"}
|
|
@@ -41,21 +41,45 @@ export function createValidateSplitPlanCommand(overrides = {}) {
|
|
|
41
41
|
const parsed = JSON.parse(raw);
|
|
42
42
|
const shape = validateSplitPlanDocumentShape(parsed);
|
|
43
43
|
if (!shape.ok) {
|
|
44
|
-
context.
|
|
44
|
+
if (context.json) {
|
|
45
|
+
context.logger.json({ ok: false, errors: shape.errors });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
context.logger.error('Split plan document shape validation failed:');
|
|
49
|
+
for (const err of shape.errors) {
|
|
50
|
+
context.logger.error(` - [${err.code}] ${err.message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
process.exitCode = 1;
|
|
46
54
|
return;
|
|
47
55
|
}
|
|
48
56
|
const existingSlugs = await readExistingProjectSlugs(context, dependencies);
|
|
49
57
|
const result = validateChildPlan(shape.document.plan, existingSlugs);
|
|
50
|
-
context.
|
|
58
|
+
if (context.json) {
|
|
59
|
+
context.logger.json(result);
|
|
60
|
+
}
|
|
61
|
+
else if (result.ok) {
|
|
62
|
+
context.logger.success('Split plan validation passed.');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
context.logger.error('Split plan validation failed:');
|
|
66
|
+
for (const err of result.errors) {
|
|
67
|
+
context.logger.error(` - [${err.code}] ${err.message}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
51
70
|
process.exitCode = result.ok ? 0 : 1;
|
|
52
71
|
}
|
|
53
72
|
catch (error) {
|
|
54
73
|
const message = error instanceof Error ? error.message : String(error);
|
|
55
|
-
context.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
74
|
+
if (context.json) {
|
|
75
|
+
context.logger.json({
|
|
76
|
+
ok: false,
|
|
77
|
+
errors: [{ code: 'read-or-parse-failed', message }],
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
context.logger.error(`Failed to read or parse plan file: ${message}`);
|
|
82
|
+
}
|
|
59
83
|
process.exitCode = 1;
|
|
60
84
|
}
|
|
61
85
|
});
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
|
|
1
2
|
import { Command } from 'commander';
|
|
2
|
-
|
|
3
|
+
interface ValidatePlanCommandDependencies {
|
|
4
|
+
buildCommandContext: (options: GlobalOptions) => CommandContext;
|
|
5
|
+
}
|
|
6
|
+
export declare function createProjectValidatePlanCommand(overrides?: Partial<ValidatePlanCommandDependencies>): Command;
|
|
7
|
+
export {};
|
|
3
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,UAAU,+BAA+B;IACvC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;CACjE;AAMD,wBAAgB,gCAAgC,CAC9C,SAAS,GAAE,OAAO,CAAC,+BAA+B,CAAM,GACvD,OAAO,CAuET"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { buildCommandContext } from '../../../app/command-context.js';
|
|
3
|
+
import { buildCommandContext, } from '../../../app/command-context.js';
|
|
4
4
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
5
5
|
import { Command } from 'commander';
|
|
6
6
|
import { extractPhaseIdsFromPlan, parseFrontmatterFromContent, validateParallelGroups, } from './validate-plan.js';
|
|
7
|
-
|
|
7
|
+
const DEFAULT_DEPENDENCIES = {
|
|
8
|
+
buildCommandContext,
|
|
9
|
+
};
|
|
10
|
+
export function createProjectValidatePlanCommand(overrides = {}) {
|
|
11
|
+
const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
|
|
8
12
|
return new Command('validate-plan')
|
|
9
13
|
.description('Validate plan.md parallelism metadata against the plan phase list')
|
|
10
14
|
.option('--project-path <path>', 'project directory containing plan.md', process.cwd())
|
|
11
15
|
.action((options, command) => {
|
|
12
|
-
const context = buildCommandContext(readGlobalOptions(command));
|
|
16
|
+
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
13
17
|
const planPath = join(options.projectPath, 'plan.md');
|
|
14
18
|
let content;
|
|
15
19
|
try {
|
|
@@ -17,13 +21,26 @@ export function createProjectValidatePlanCommand() {
|
|
|
17
21
|
}
|
|
18
22
|
catch (err) {
|
|
19
23
|
const message = err instanceof Error ? err.message : String(err);
|
|
20
|
-
context.
|
|
24
|
+
if (context.json) {
|
|
25
|
+
context.logger.json({ valid: false, errors: [message] });
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
context.logger.error(`Failed to read plan.md: ${message}`);
|
|
29
|
+
}
|
|
21
30
|
process.exitCode = 2;
|
|
22
31
|
return;
|
|
23
32
|
}
|
|
24
33
|
const frontmatterResult = parseFrontmatterFromContent(content);
|
|
25
34
|
if (frontmatterResult.kind === 'invalid') {
|
|
26
|
-
context.
|
|
35
|
+
if (context.json) {
|
|
36
|
+
context.logger.json({
|
|
37
|
+
valid: false,
|
|
38
|
+
errors: [frontmatterResult.message],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
context.logger.error(frontmatterResult.message);
|
|
43
|
+
}
|
|
27
44
|
process.exitCode = 1;
|
|
28
45
|
return;
|
|
29
46
|
}
|
|
@@ -31,13 +48,23 @@ export function createProjectValidatePlanCommand() {
|
|
|
31
48
|
const phaseIds = extractPhaseIdsFromPlan(content);
|
|
32
49
|
const result = validateParallelGroups(groups, phaseIds);
|
|
33
50
|
if (result.valid) {
|
|
34
|
-
context.
|
|
51
|
+
if (context.json) {
|
|
52
|
+
context.logger.json({ valid: true });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
context.logger.success('Plan validation passed.');
|
|
56
|
+
}
|
|
35
57
|
process.exitCode = 0;
|
|
36
58
|
return;
|
|
37
59
|
}
|
|
38
|
-
context.
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
if (context.json) {
|
|
61
|
+
context.logger.json({ valid: false, errors: result.errors });
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
context.logger.error('Plan validation failed:');
|
|
65
|
+
for (const err of result.errors) {
|
|
66
|
+
context.logger.error(` - ${err}`);
|
|
67
|
+
}
|
|
41
68
|
}
|
|
42
69
|
process.exitCode = 1;
|
|
43
70
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/inspect/inspect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,4BAA4B,EAC7B,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/inspect/inspect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,4BAA4B,EAC7B,MAAM,qCAAqC,CAAC;AAoB7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuLpC,wBAAgB,6BAA6B,CAC3C,SAAS,GAAE,OAAO,CAAC,4BAA4B,CAAM,GACpD,OAAO,CAiBT"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
3
|
+
import { withScopeOption } from '../../shared/scope-option.js';
|
|
3
4
|
import { readGlobalOptions, resolveConcreteScopes, } from '../../shared/shared.utils.js';
|
|
4
5
|
import { detectDrift } from '../../../drift/index.js';
|
|
5
6
|
import { normalizeToPosixPath, resolveProjectRoot, resolveScopeRoot, } from '../../../fs/paths.js';
|
|
@@ -149,7 +150,7 @@ export function createProvidersInspectCommand(overrides = {}) {
|
|
|
149
150
|
...createDependencies(),
|
|
150
151
|
...overrides,
|
|
151
152
|
};
|
|
152
|
-
return new Command('inspect')
|
|
153
|
+
return withScopeOption(new Command('inspect'))
|
|
153
154
|
.description('Inspect provider details and mapping state')
|
|
154
155
|
.argument('<provider>', 'Provider name')
|
|
155
156
|
.action(async (providerName, _options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/list/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/list/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,qCAAqC,CAAC;AAoB7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwMpC,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAcT"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
3
|
+
import { withScopeOption } from '../../shared/scope-option.js';
|
|
3
4
|
import { readGlobalOptions, resolveConcreteScopes, } from '../../shared/shared.utils.js';
|
|
4
5
|
import { detectDrift } from '../../../drift/index.js';
|
|
5
6
|
import { normalizeToPosixPath, resolveProjectRoot, resolveScopeRoot, } from '../../../fs/paths.js';
|
|
@@ -166,7 +167,7 @@ export function createProvidersListCommand(overrides = {}) {
|
|
|
166
167
|
...createDependencies(),
|
|
167
168
|
...overrides,
|
|
168
169
|
};
|
|
169
|
-
return new Command('list')
|
|
170
|
+
return withScopeOption(new Command('list'))
|
|
170
171
|
.description('List provider adapters and sync summary')
|
|
171
172
|
.action(async (_options, command) => {
|
|
172
173
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/set/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/providers/set/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAepF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+JpC,wBAAgB,yBAAyB,CACvC,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,OAAO,CAmBT"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
3
|
+
import { withScopeOption } from '../../shared/scope-option.js';
|
|
3
4
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
4
5
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../../config/index.js';
|
|
5
6
|
import { resolveProjectRoot } from '../../../fs/paths.js';
|
|
@@ -9,7 +10,7 @@ import { copilotAdapter } from '../../../providers/copilot/index.js';
|
|
|
9
10
|
import { cursorAdapter } from '../../../providers/cursor/index.js';
|
|
10
11
|
import { geminiAdapter } from '../../../providers/gemini/index.js';
|
|
11
12
|
import { Command } from 'commander';
|
|
12
|
-
const PROJECT_SCOPE_ONLY_MESSAGE = 'oat providers set
|
|
13
|
+
const PROJECT_SCOPE_ONLY_MESSAGE = 'oat providers set only supports project scope. Remove --scope or pass --scope project.';
|
|
13
14
|
function parseCsvList(raw) {
|
|
14
15
|
if (!raw) {
|
|
15
16
|
return [];
|
|
@@ -127,7 +128,10 @@ export function createProvidersSetCommand(overrides = {}) {
|
|
|
127
128
|
...createDependencies(),
|
|
128
129
|
...overrides,
|
|
129
130
|
};
|
|
130
|
-
|
|
131
|
+
// Default to 'project' scope: providers set only supports project scope, so
|
|
132
|
+
// a bare `oat providers set --enabled X` should succeed without requiring
|
|
133
|
+
// an explicit --scope project flag.
|
|
134
|
+
return withScopeOption(new Command('set'), 'project')
|
|
131
135
|
.description('Enable or disable project providers in sync config')
|
|
132
136
|
.option('--enabled <providers>', 'Comma-separated providers to enable')
|
|
133
137
|
.option('--disabled <providers>', 'Comma-separated providers to disable')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skill/remove-skill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skill/remove-skill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,KAAK,yBAAyB,EAG9B,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC1C,cAAc,CAAC;IACpB,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,KACf,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACxC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;IAC3E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,oCAAoC,IAAI,uBAAuB,CAgC9E;AAgKD,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,uBAAuB,GACpC,OAAO,CAAC,OAAO,CAAC,CAsDlB;AAED,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CAwCT"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { rm } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
4
|
+
import { withScopeOption } from '../../shared/scope-option.js';
|
|
4
5
|
import { readGlobalOptions, resolveConcreteScopes, } from '../../shared/shared.utils.js';
|
|
5
6
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, } from '../../../config/sync-config.js';
|
|
6
7
|
import { dirExists, fileExists } from '../../../fs/io.js';
|
|
@@ -207,7 +208,7 @@ export function createRemoveSkillCommand(overrides = {}) {
|
|
|
207
208
|
...createDefaultRemoveSkillDependencies(),
|
|
208
209
|
...overrides,
|
|
209
210
|
};
|
|
210
|
-
return new Command('skill')
|
|
211
|
+
return withScopeOption(new Command('skill'))
|
|
211
212
|
.description('Remove a single installed skill by name')
|
|
212
213
|
.argument('<name>', 'Skill name (e.g., oat-idea-scratchpad)')
|
|
213
214
|
.option('--dry-run', 'Preview removal without applying')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skills.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skills/remove-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"remove-skills.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skills/remove-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAiB/B,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC1C,cAAc,CAAC;IACpB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,cAAc,EAAE,CACd,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,uBAAuB,KAClC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,uBAAuB,EAAE,uBAAuB,CAAC;CAClD;AAqBD,wBAAgB,yBAAyB,CACvC,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,OAAO,CAsFT"}
|
|
@@ -4,6 +4,7 @@ import { IDEA_SKILLS } from '../../init/tools/ideas/install-ideas.js';
|
|
|
4
4
|
import { RESEARCH_SKILLS } from '../../init/tools/research/install-research.js';
|
|
5
5
|
import { UTILITY_SKILLS } from '../../init/tools/utility/install-utility.js';
|
|
6
6
|
import { WORKFLOW_SKILLS } from '../../init/tools/workflows/install-workflows.js';
|
|
7
|
+
import { withScopeOption } from '../../shared/scope-option.js';
|
|
7
8
|
import { confirmAction, } from '../../shared/shared.prompts.js';
|
|
8
9
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
9
10
|
import { Command } from 'commander';
|
|
@@ -35,7 +36,7 @@ export function createRemoveSkillsCommand(overrides = {}) {
|
|
|
35
36
|
...createDependencies(),
|
|
36
37
|
...overrides,
|
|
37
38
|
};
|
|
38
|
-
return new Command('skills')
|
|
39
|
+
return withScopeOption(new Command('skills'))
|
|
39
40
|
.description('Remove installed skills by pack')
|
|
40
41
|
.requiredOption('--pack <pack>', 'Skill pack to remove (ideas|docs|workflows|utility|research)')
|
|
41
42
|
.option('--dry-run', 'Preview removal without applying')
|
|
@@ -7,6 +7,7 @@ export interface TriageOptions {
|
|
|
7
7
|
}
|
|
8
8
|
export interface TriageDependencies {
|
|
9
9
|
readJsonFile: (path: string) => Promise<CollectionChunk>;
|
|
10
|
+
fileExists: (path: string) => Promise<boolean>;
|
|
10
11
|
}
|
|
11
12
|
export declare const defaultTriageDependencies: TriageDependencies;
|
|
12
13
|
export declare function runTriageComments(context: CommandContext, options: TriageOptions, deps?: TriageDependencies): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage-comments.d.ts","sourceRoot":"","sources":["../../../../../src/commands/repo/pr-comments/triage-collection/triage-comments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"triage-comments.d.ts","sourceRoot":"","sources":["../../../../../src/commands/repo/pr-comments/triage-collection/triage-comments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,yBAAyB,EAAE,kBAMvC,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,kBAA8C,GACnD,OAAO,CAAC,IAAI,CAAC,CAgFf"}
|