@open-agent-toolkit/cli 0.1.34 → 0.1.36
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-reviewer.md +22 -2
- package/assets/docs/cli-utilities/config-and-local-state.md +11 -5
- package/assets/docs/cli-utilities/tool-packs.md +1 -1
- package/assets/docs/cli-utilities/workflow-gates.md +103 -19
- package/assets/docs/contributing/design-principles.md +1 -1
- package/assets/docs/reference/cli-reference.md +4 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +7 -3
- package/assets/skills/oat-project-import-plan/SKILL.md +53 -9
- package/assets/skills/oat-project-plan/SKILL.md +7 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +37 -9
- package/assets/skills/oat-project-review-provide/SKILL.md +12 -4
- package/assets/skills/oat-project-review-receive/SKILL.md +3 -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.map +1 -1
- package/dist/commands/gate/index.js +352 -16
- package/dist/commands/gate/review-verdict.d.ts +15 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -0
- package/dist/commands/gate/review-verdict.js +180 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -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/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.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { getFrontmatterBlock } from '../shared/frontmatter.js';
|
|
3
|
+
import YAML from 'yaml';
|
|
4
|
+
const SEVERITIES = [
|
|
5
|
+
'critical',
|
|
6
|
+
'important',
|
|
7
|
+
'medium',
|
|
8
|
+
'minor',
|
|
9
|
+
];
|
|
10
|
+
const FRONTMATTER_COUNT_KEYS = {
|
|
11
|
+
critical: ['oat_review_critical_count', 'critical'],
|
|
12
|
+
important: ['oat_review_important_count', 'important'],
|
|
13
|
+
medium: ['oat_review_medium_count', 'medium'],
|
|
14
|
+
minor: ['oat_review_minor_count', 'minor'],
|
|
15
|
+
};
|
|
16
|
+
function normalizeReviewType(value) {
|
|
17
|
+
return value === 'code' || value === 'artifact' ? value : 'unknown';
|
|
18
|
+
}
|
|
19
|
+
function stringOrNull(value) {
|
|
20
|
+
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
21
|
+
}
|
|
22
|
+
function parseCountValue(value) {
|
|
23
|
+
const numberValue = typeof value === 'number'
|
|
24
|
+
? value
|
|
25
|
+
: typeof value === 'string'
|
|
26
|
+
? Number(value.trim())
|
|
27
|
+
: Number.NaN;
|
|
28
|
+
if (!Number.isInteger(numberValue) || numberValue < 0) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return numberValue;
|
|
32
|
+
}
|
|
33
|
+
function readFrontmatterCounts(frontmatter) {
|
|
34
|
+
const nestedCounts = typeof frontmatter['oat_review_counts'] === 'object' &&
|
|
35
|
+
frontmatter['oat_review_counts'] !== null &&
|
|
36
|
+
!Array.isArray(frontmatter['oat_review_counts'])
|
|
37
|
+
? frontmatter['oat_review_counts']
|
|
38
|
+
: null;
|
|
39
|
+
const counts = {
|
|
40
|
+
critical: 0,
|
|
41
|
+
important: 0,
|
|
42
|
+
medium: 0,
|
|
43
|
+
minor: 0,
|
|
44
|
+
};
|
|
45
|
+
for (const severity of SEVERITIES) {
|
|
46
|
+
const candidateValues = [
|
|
47
|
+
...FRONTMATTER_COUNT_KEYS[severity].map((key) => frontmatter[key]),
|
|
48
|
+
...(nestedCounts
|
|
49
|
+
? FRONTMATTER_COUNT_KEYS[severity].map((key) => nestedCounts[key])
|
|
50
|
+
: []),
|
|
51
|
+
].filter((value) => value !== undefined && value !== null);
|
|
52
|
+
if (candidateValues.length === 0) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const parsedCount = candidateValues.reduce((parsed, value) => {
|
|
56
|
+
if (parsed !== null) {
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
return parseCountValue(value);
|
|
60
|
+
}, null);
|
|
61
|
+
if (parsedCount === null) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
counts[severity] = parsedCount;
|
|
65
|
+
}
|
|
66
|
+
return counts;
|
|
67
|
+
}
|
|
68
|
+
function sectionContentIsEmpty(content) {
|
|
69
|
+
const cleaned = content
|
|
70
|
+
.split('\n')
|
|
71
|
+
.map((line) => line.trim())
|
|
72
|
+
.filter((line) => line.length > 0 && !/^<!--.*-->$/.test(line))
|
|
73
|
+
.join('\n')
|
|
74
|
+
.trim();
|
|
75
|
+
return cleaned.length === 0 || /^none\.?$/i.test(cleaned);
|
|
76
|
+
}
|
|
77
|
+
function countFindingsInSection(content) {
|
|
78
|
+
if (sectionContentIsEmpty(content)) {
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
return content
|
|
82
|
+
.split('\n')
|
|
83
|
+
.filter((line) => /^([-*+]\s+\S|\d+\.\s+\S)/.test(line)).length;
|
|
84
|
+
}
|
|
85
|
+
function normalizeHeading(value) {
|
|
86
|
+
const normalized = value.trim().toLowerCase();
|
|
87
|
+
if (SEVERITIES.includes(normalized)) {
|
|
88
|
+
return normalized;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
function parseFindingsSummaryCounts(content) {
|
|
93
|
+
const match = content.match(/^Findings:\s*(\d+)\s+critical,\s*(\d+)\s+important,\s*(\d+)\s+medium,\s*(\d+)\s+minor\s*$/im);
|
|
94
|
+
if (!match) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
critical: Number.parseInt(match[1] ?? '0', 10),
|
|
99
|
+
important: Number.parseInt(match[2] ?? '0', 10),
|
|
100
|
+
medium: Number.parseInt(match[3] ?? '0', 10),
|
|
101
|
+
minor: Number.parseInt(match[4] ?? '0', 10),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function parseFindingsSectionCounts(content, artifactPath) {
|
|
105
|
+
const headingMatches = [...content.matchAll(/^#{3,6}\s+(.+?)\s*#*\s*$/gm)];
|
|
106
|
+
const severityHeadings = headingMatches
|
|
107
|
+
.map((match) => ({
|
|
108
|
+
severity: normalizeHeading(match[1] ?? ''),
|
|
109
|
+
index: match.index ?? 0,
|
|
110
|
+
headingLength: match[0].length,
|
|
111
|
+
}))
|
|
112
|
+
.filter((heading) => heading.severity !== null);
|
|
113
|
+
if (severityHeadings.length === 0) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const seenSeverities = new Set(severityHeadings.map((heading) => heading.severity));
|
|
117
|
+
const missingSeverities = SEVERITIES.filter((severity) => !seenSeverities.has(severity));
|
|
118
|
+
if (missingSeverities.length > 0) {
|
|
119
|
+
throw new Error(`Review artifact at ${artifactPath} has an incomplete Findings section; expected headings for Critical, Important, Medium, and Minor. Missing: ${missingSeverities.join(', ')}.`);
|
|
120
|
+
}
|
|
121
|
+
const counts = {
|
|
122
|
+
critical: 0,
|
|
123
|
+
important: 0,
|
|
124
|
+
medium: 0,
|
|
125
|
+
minor: 0,
|
|
126
|
+
};
|
|
127
|
+
for (const [offset, heading] of severityHeadings.entries()) {
|
|
128
|
+
const nextHeading = severityHeadings[offset + 1];
|
|
129
|
+
const sectionStart = heading.index + heading.headingLength;
|
|
130
|
+
const sectionEnd = nextHeading?.index ?? content.length;
|
|
131
|
+
counts[heading.severity] = countFindingsInSection(content.slice(sectionStart, sectionEnd));
|
|
132
|
+
}
|
|
133
|
+
return counts;
|
|
134
|
+
}
|
|
135
|
+
function parseFrontmatterObject(frontmatter, artifactPath) {
|
|
136
|
+
try {
|
|
137
|
+
const parsed = YAML.parse(frontmatter);
|
|
138
|
+
if (typeof parsed === 'object' &&
|
|
139
|
+
parsed !== null &&
|
|
140
|
+
!Array.isArray(parsed)) {
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
throw new Error('frontmatter must be a YAML object');
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
147
|
+
throw new Error(`Unable to parse review artifact frontmatter at ${artifactPath}: ${detail}`, { cause: error });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function hasBlockingFindings(counts) {
|
|
151
|
+
return counts.critical > 0 || counts.important > 0;
|
|
152
|
+
}
|
|
153
|
+
export async function parseReviewGateVerdict(artifactPath) {
|
|
154
|
+
let content;
|
|
155
|
+
try {
|
|
156
|
+
content = await readFile(artifactPath, 'utf8');
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
160
|
+
throw new Error(`Unable to read review artifact at ${artifactPath}: ${detail}`, { cause: error });
|
|
161
|
+
}
|
|
162
|
+
const frontmatterBlock = getFrontmatterBlock(content);
|
|
163
|
+
const frontmatter = frontmatterBlock
|
|
164
|
+
? parseFrontmatterObject(frontmatterBlock, artifactPath)
|
|
165
|
+
: {};
|
|
166
|
+
const counts = readFrontmatterCounts(frontmatter) ??
|
|
167
|
+
parseFindingsSummaryCounts(content) ??
|
|
168
|
+
parseFindingsSectionCounts(content, artifactPath);
|
|
169
|
+
if (!counts) {
|
|
170
|
+
throw new Error(`Review artifact at ${artifactPath} does not contain recognizable review findings or explicit verdict counts.`);
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
artifactPath,
|
|
174
|
+
reviewType: normalizeReviewType(frontmatter['oat_review_type']),
|
|
175
|
+
scope: stringOrNull(frontmatter['oat_review_scope']),
|
|
176
|
+
invocation: stringOrNull(frontmatter['oat_review_invocation']),
|
|
177
|
+
counts,
|
|
178
|
+
blocking: hasBlockingFindings(counts),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0BvD"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { applyHelpConfiguration } from '../app/help-config.js';
|
|
1
2
|
import { createBacklogCommand } from './backlog/index.js';
|
|
2
3
|
import { createCleanupCommand } from './cleanup/index.js';
|
|
3
4
|
import { createConfigCommand } from './config/index.js';
|
|
@@ -43,4 +44,7 @@ export function registerCommands(program) {
|
|
|
43
44
|
program.addCommand(createStateCommand());
|
|
44
45
|
program.addCommand(createToolsCommand());
|
|
45
46
|
program.addCommand(createInternalCommand());
|
|
47
|
+
// Commander's .addCommand() does not inherit help config from the parent.
|
|
48
|
+
// Apply showGlobalOptions recursively after all commands are registered.
|
|
49
|
+
applyHelpConfiguration(program);
|
|
46
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { addLocalPaths } from '../local/manage.js';
|
|
|
8
8
|
import { adoptStrayToCanonical, isAdoptionConflictError, } from '../shared/adopt-stray.js';
|
|
9
9
|
import { detectCodexRoleStrays, regenerateCodexAfterAdoption, } from '../shared/codex-strays.js';
|
|
10
10
|
import { PROVIDER_CONFIG_REMEDIATION } from '../shared/messages.js';
|
|
11
|
+
import { withScopeOption } from '../shared/scope-option.js';
|
|
11
12
|
import { confirmAction, inputWithDefault, selectManyWithAbort, selectWithAbort, } from '../shared/shared.prompts.js';
|
|
12
13
|
import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.utils.js';
|
|
13
14
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../config/index.js';
|
|
@@ -565,7 +566,7 @@ export function createInitCommand(overrides = {}) {
|
|
|
565
566
|
...createDependencies(),
|
|
566
567
|
...overrides,
|
|
567
568
|
};
|
|
568
|
-
return new Command('init')
|
|
569
|
+
return withScopeOption(new Command('init'))
|
|
569
570
|
.description('Initialize canonical directories, manifest, and tool packs')
|
|
570
571
|
.option('--hook', 'Install optional pre-commit hook')
|
|
571
572
|
.option('--no-hook', 'Skip optional pre-commit hook install')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/brainstorm/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/brainstorm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAM9B,KAAK,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvC,UAAU,+BAA+B;IACvC,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,iBAAiB,EAAE,CACjB,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,SAAS,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AA+KD,wBAAgB,gCAAgC,CAC9C,SAAS,GAAE,OAAO,CAAC,+BAA+B,CAAM,GACvD,OAAO,CA2BT"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
2
|
import { resolvePackDefaultScope } from '../../../init/tools/shared/skill-manifest.js';
|
|
3
|
+
import { withScopeOption } from '../../../shared/scope-option.js';
|
|
3
4
|
import { confirmAction, } from '../../../shared/shared.prompts.js';
|
|
4
5
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
5
6
|
import { canonicalPathsForPack, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
@@ -132,7 +133,7 @@ export function createInitToolsBrainstormCommand(overrides = {}) {
|
|
|
132
133
|
...DEFAULT_DEPENDENCIES,
|
|
133
134
|
...overrides,
|
|
134
135
|
};
|
|
135
|
-
return new Command('brainstorm')
|
|
136
|
+
return withScopeOption(new Command('brainstorm'))
|
|
136
137
|
.description('Install OAT brainstorm skill (always-on entry point with visual companion)')
|
|
137
138
|
.option('--force', 'Overwrite existing files where applicable')
|
|
138
139
|
.action(async (options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/core/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,EACL,WAAW,EAEX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAMxB,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,gBAAgB,EAAE,CAChB,KAAK,EAAE,SAAS,GAAG,MAAM,EACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,KACT,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC1E;AAqED,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/core/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,EACL,WAAW,EAEX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAMxB,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,gBAAgB,EAAE,CAChB,KAAK,EAAE,SAAS,GAAG,MAAM,EACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,KACT,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC1E;AAqED,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsCT"}
|
|
@@ -65,6 +65,24 @@ export function createInitToolsCoreCommand(overrides = {}) {
|
|
|
65
65
|
.option('--force', 'Overwrite existing files where applicable')
|
|
66
66
|
.action(async (options, command) => {
|
|
67
67
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
68
|
+
// Core always installs at user scope. If the caller explicitly passed a
|
|
69
|
+
// conflicting --scope on an ancestor (init or tools install), reject it
|
|
70
|
+
// rather than silently ignoring it. A matching --scope user, or no
|
|
71
|
+
// explicit --scope, proceeds unchanged.
|
|
72
|
+
if (command.getOptionValueSourceWithGlobals('scope') === 'cli') {
|
|
73
|
+
const opts = command.optsWithGlobals();
|
|
74
|
+
if (opts.scope !== 'user') {
|
|
75
|
+
const msg = 'the core pack always installs at user scope; remove --scope or pass --scope user';
|
|
76
|
+
if (context.json) {
|
|
77
|
+
context.logger.json({ status: 'error', message: msg });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
context.logger.error(msg);
|
|
81
|
+
}
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
68
86
|
const didInstall = await runInitToolsCore(context, options, dependencies);
|
|
69
87
|
if (didInstall) {
|
|
70
88
|
setInstalledCanonicalPaths(command, canonicalPathsForPack('core'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/docs/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/docs/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,EAGL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAMxB,KAAK,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpC,UAAU,yBAAyB;IACjC,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,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1E,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzE,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;AAuID,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,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';
|
|
@@ -102,7 +103,7 @@ export function createInitToolsDocsCommand(overrides = {}) {
|
|
|
102
103
|
...DEFAULT_DEPENDENCIES,
|
|
103
104
|
...overrides,
|
|
104
105
|
};
|
|
105
|
-
return new Command('docs')
|
|
106
|
+
return withScopeOption(new Command('docs'))
|
|
106
107
|
.description('Install OAT docs workflow skills')
|
|
107
108
|
.option('--force', 'Overwrite existing files where applicable')
|
|
108
109
|
.action(async (options, command) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/ideas/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/ideas/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,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAMzB,KAAK,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvC,UAAU,0BAA0B;IAClC,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,YAAY,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5E,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAuGD,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,OAAO,CAAC,0BAA0B,CAAM,GAClD,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';
|
|
@@ -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 +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"}
|