@open-agent-toolkit/cli 0.1.46 → 0.1.48
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 +202 -191
- package/assets/agents/oat-reviewer.md +11 -1
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/configuration.md +172 -113
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +41 -7
- package/assets/docs/provider-sync/scope-and-surface.md +2 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +235 -187
- package/assets/docs/workflows/projects/implementation-execution.md +283 -260
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +247 -133
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +157 -107
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +64 -39
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +21 -6
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +544 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +452 -16
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +1 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +19 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +139 -24
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -2
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +1 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +12 -5
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -1
- package/dist/providers/codex/codec/materialize.js +6 -5
- package/dist/providers/codex/codec/shared.d.ts +19 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +98 -5
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +142 -32
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +4 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import YAML, { isMap, isScalar } from 'yaml';
|
|
3
4
|
export const PROJECT_STATE_KINDS = ['implementation', 'coordination'];
|
|
4
5
|
export const PROJECT_STATE_PHASES = [
|
|
5
6
|
'discovery',
|
|
@@ -57,6 +58,28 @@ export function getFrontmatterField(frontmatter, field) {
|
|
|
57
58
|
return null;
|
|
58
59
|
return match[1].replace(/\s*#.*$/, '').trim();
|
|
59
60
|
}
|
|
61
|
+
export function parseFrontmatterScalarFields(frontmatter, fields) {
|
|
62
|
+
const document = YAML.parseDocument(frontmatter, { uniqueKeys: true });
|
|
63
|
+
const values = {};
|
|
64
|
+
if (isMap(document.contents)) {
|
|
65
|
+
for (const field of fields) {
|
|
66
|
+
const matches = document.contents.items.filter((pair) => isScalar(pair.key) && pair.key.value === field);
|
|
67
|
+
if (matches.length !== 1) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const valueNode = matches[0]?.value;
|
|
71
|
+
if (!isScalar(valueNode) ||
|
|
72
|
+
valueNode.anchor !== undefined ||
|
|
73
|
+
valueNode.tag !== undefined ||
|
|
74
|
+
typeof valueNode.value !== 'string' ||
|
|
75
|
+
!valueNode.value.trim()) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
values[field] = valueNode.value.trim();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { valid: document.errors.length === 0, values };
|
|
82
|
+
}
|
|
60
83
|
/**
|
|
61
84
|
* Parse an `oat_generated_at` value into a comparable epoch millisecond time.
|
|
62
85
|
*
|
|
@@ -18,6 +18,7 @@ interface StatusDependencies {
|
|
|
18
18
|
readUserConfig: (userConfigDir: string) => Promise<UserConfig>;
|
|
19
19
|
saveManifest: (manifestPath: string, manifest: Manifest) => Promise<void>;
|
|
20
20
|
scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
|
|
21
|
+
scanBundledManagedCodexAgents: () => Promise<CanonicalEntry[]>;
|
|
21
22
|
getAdapters: () => ProviderAdapter[];
|
|
22
23
|
getActiveAdapters: (adapters: ProviderAdapter[], scopeRoot: string) => Promise<ProviderAdapter[]>;
|
|
23
24
|
getSyncMappings: (adapter: ProviderAdapter, scope: Scope) => PathMapping[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.util
|
|
|
8
8
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, } from '../../config/index.js';
|
|
9
9
|
import { readUserConfig } from '../../config/oat-config.js';
|
|
10
10
|
import { detectDrift, detectStrays, filterKnownStrays, } from '../../drift/index.js';
|
|
11
|
-
import { HOOK_DRIFT_WARNING, HOOK_STRAY_INFO, scanCanonical, } from '../../engine/index.js';
|
|
11
|
+
import { HOOK_DRIFT_WARNING, HOOK_STRAY_INFO, scanBundledManagedCodexAgents, scanCanonical, } from '../../engine/index.js';
|
|
12
12
|
import { normalizeToPosixPath, resolveProjectRoot, resolveScopeRoot, } from '../../fs/paths.js';
|
|
13
13
|
import { loadManifest, saveManifest } from '../../manifest/manager.js';
|
|
14
14
|
import { claudeAdapter } from '../../providers/claude/index.js';
|
|
@@ -37,6 +37,7 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
37
37
|
readUserConfig,
|
|
38
38
|
saveManifest,
|
|
39
39
|
scanCanonical,
|
|
40
|
+
scanBundledManagedCodexAgents,
|
|
40
41
|
getAdapters() {
|
|
41
42
|
return [
|
|
42
43
|
claudeAdapter,
|
|
@@ -192,9 +193,14 @@ async function collectScopeReports(scope, context, dependencies) {
|
|
|
192
193
|
}
|
|
193
194
|
}
|
|
194
195
|
}
|
|
195
|
-
if (
|
|
196
|
-
|
|
197
|
-
|
|
196
|
+
if (activeAdapters.some((adapter) => adapter.name === 'codex')) {
|
|
197
|
+
const codexCanonicalEntries = scope === 'user'
|
|
198
|
+
? [
|
|
199
|
+
...canonicalEntries,
|
|
200
|
+
...(await dependencies.scanBundledManagedCodexAgents()),
|
|
201
|
+
]
|
|
202
|
+
: canonicalEntries;
|
|
203
|
+
const codexExtensionPlan = await dependencies.computeCodexProjectExtensionPlan(scopeRoot, codexCanonicalEntries, undefined, { userConfigDir: join(context.home, '.oat') });
|
|
198
204
|
for (const operation of codexExtensionPlan.operations) {
|
|
199
205
|
if (operation.action === 'skip') {
|
|
200
206
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,cAAc,CAAC;AA6TtB,wBAAgB,iBAAiB,CAC/B,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CA6BT"}
|
|
@@ -5,7 +5,7 @@ import { withScopeOption } from '../shared/scope-option.js';
|
|
|
5
5
|
import { selectManyWithAbort, } from '../shared/shared.prompts.js';
|
|
6
6
|
import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.utils.js';
|
|
7
7
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../config/index.js';
|
|
8
|
-
import { computeSyncPlan, executeSyncPlan, scanCanonical } from '../../engine/index.js';
|
|
8
|
+
import { computeSyncPlan, executeSyncPlan, scanBundledManagedCodexAgents, scanCanonical, } from '../../engine/index.js';
|
|
9
9
|
import { CliError } from '../../errors/index.js';
|
|
10
10
|
import { resolveProjectRoot, resolveScopeRoot } from '../../fs/paths.js';
|
|
11
11
|
import { loadManifest } from '../../manifest/index.js';
|
|
@@ -36,6 +36,7 @@ function defaultDependencies() {
|
|
|
36
36
|
},
|
|
37
37
|
saveSyncConfig,
|
|
38
38
|
scanCanonical,
|
|
39
|
+
scanBundledManagedCodexAgents,
|
|
39
40
|
getAdapters() {
|
|
40
41
|
return [
|
|
41
42
|
claudeAdapter,
|
|
@@ -168,8 +169,14 @@ async function computePlans(context, dependencies, allowedCanonicalPaths) {
|
|
|
168
169
|
let codexExtensionPlan;
|
|
169
170
|
let codexExtension;
|
|
170
171
|
const activeAdapterNames = resolved.activeAdapters.map((adapter) => adapter.name);
|
|
171
|
-
if (
|
|
172
|
-
|
|
172
|
+
if (activeAdapterNames.includes('codex')) {
|
|
173
|
+
const codexCanonical = scope === 'user'
|
|
174
|
+
? [
|
|
175
|
+
...canonical,
|
|
176
|
+
...(await dependencies.scanBundledManagedCodexAgents()),
|
|
177
|
+
]
|
|
178
|
+
: canonical;
|
|
179
|
+
codexExtensionPlan = await dependencies.computeCodexProjectExtensionPlan(scopeRoot, codexCanonical, allowedCanonicalPaths, { userConfigDir: join(context.home, '.oat') });
|
|
173
180
|
codexExtension = {
|
|
174
181
|
operations: dependencies.toCodexExtensionOperations(codexExtensionPlan),
|
|
175
182
|
managedRoles: codexExtensionPlan.managedRoles,
|
|
@@ -60,6 +60,7 @@ export interface SyncCommandDependencies {
|
|
|
60
60
|
loadSyncConfig: (configPath: string) => Promise<SyncConfig>;
|
|
61
61
|
saveSyncConfig: (configPath: string, config: SyncConfig) => Promise<SyncConfig>;
|
|
62
62
|
scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
|
|
63
|
+
scanBundledManagedCodexAgents: () => Promise<CanonicalEntry[]>;
|
|
63
64
|
getAdapters: () => ProviderAdapter[];
|
|
64
65
|
getConfigAwareAdapters: (adapters: ProviderAdapter[], scopeRoot: string, config: SyncConfig) => Promise<ConfigAwareAdaptersResult>;
|
|
65
66
|
selectProvidersWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.types.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.types.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export type WorkflowHillCheckpointDefault = 'every' | 'final';
|
|
|
20
20
|
export type WorkflowPostImplementSequence = 'wait' | 'summary' | 'pr' | 'docs-pr';
|
|
21
21
|
export type WorkflowReviewExecutionModel = 'subagent' | 'inline' | 'fresh-session';
|
|
22
22
|
export type WorkflowDesignMode = 'collaborative' | 'selective' | 'draft';
|
|
23
|
-
export type WorkflowCodexDispatchCeiling = 'low' | 'medium' | 'high' | 'xhigh';
|
|
23
|
+
export type WorkflowCodexDispatchCeiling = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
24
24
|
export type WorkflowClaudeDispatchCeiling = 'haiku' | 'sonnet' | 'opus' | 'fable';
|
|
25
25
|
export type WorkflowDispatchCeilingPreset = 'balanced' | 'maximum' | 'cost-conscious';
|
|
26
26
|
export type WorkflowDispatchPolicyMode = 'managed' | 'inherit';
|
|
@@ -37,7 +37,15 @@ export interface DispatchRouteTargetValidation {
|
|
|
37
37
|
}
|
|
38
38
|
export type WorkflowDispatchRouteEntry = string | WorkflowDispatchRouteTarget;
|
|
39
39
|
export type WorkflowDispatchRoute = WorkflowDispatchRouteEntry[];
|
|
40
|
-
export
|
|
40
|
+
export interface WorkflowDispatchFallbackRoute {
|
|
41
|
+
route: WorkflowDispatchRoute;
|
|
42
|
+
}
|
|
43
|
+
export type WorkflowDispatchCandidate = WorkflowDispatchRouteEntry | WorkflowDispatchFallbackRoute;
|
|
44
|
+
export interface WorkflowDispatchCandidateLadder {
|
|
45
|
+
candidates: WorkflowDispatchCandidate[];
|
|
46
|
+
}
|
|
47
|
+
export type WorkflowDispatchLegacyMatrixCell = string | WorkflowDispatchRoute;
|
|
48
|
+
export type WorkflowDispatchMatrixCell = WorkflowDispatchCandidateLadder | WorkflowDispatchLegacyMatrixCell;
|
|
41
49
|
export type WorkflowDispatchProviderValue = string | Partial<Record<WorkflowDispatchMatrixTier, WorkflowDispatchMatrixCell>>;
|
|
42
50
|
export type GateOnFailure = 'block' | 'prompt' | 'warn';
|
|
43
51
|
export type GateAvoid = 'same-family' | 'same-runtime' | 'none';
|
|
@@ -60,9 +68,14 @@ export interface GateConfig {
|
|
|
60
68
|
description?: string;
|
|
61
69
|
maxAttempts?: number;
|
|
62
70
|
}
|
|
71
|
+
export interface ExecTargetInvocation {
|
|
72
|
+
model?: string | 'provider-default';
|
|
73
|
+
reasoningEffort?: string | 'provider-default';
|
|
74
|
+
}
|
|
63
75
|
export interface ExecTarget {
|
|
64
76
|
runtime: string;
|
|
65
77
|
baseCommand: string[];
|
|
78
|
+
invocation?: ExecTargetInvocation;
|
|
66
79
|
models?: string[];
|
|
67
80
|
hostDetectionCommand?: string[];
|
|
68
81
|
availabilityCommand?: string[];
|
|
@@ -96,6 +109,9 @@ export declare const VALID_DISPATCH_MATRIX_TIERS: readonly WorkflowDispatchMatri
|
|
|
96
109
|
export declare const BUILTIN_EXEC_TARGETS: Readonly<Record<string, ExecTarget>>;
|
|
97
110
|
export declare function isCodexMaterializedRouteTarget(provider: string, target: WorkflowDispatchRouteTarget): boolean;
|
|
98
111
|
export declare function validateDispatchRouteTarget(provider: string, target: WorkflowDispatchRouteTarget): DispatchRouteTargetValidation;
|
|
112
|
+
export declare function isWorkflowDispatchFallbackRoute(value: unknown): value is WorkflowDispatchFallbackRoute;
|
|
113
|
+
export declare function isWorkflowDispatchCandidateLadder(value: unknown): value is WorkflowDispatchCandidateLadder;
|
|
114
|
+
export declare function toWorkflowDispatchCandidateLadder(cell: WorkflowDispatchMatrixCell): WorkflowDispatchCandidateLadder;
|
|
99
115
|
export type OatToolsConfig = Partial<Record<'core' | 'ideas' | 'docs' | 'workflows' | 'utility' | 'project-management' | 'research' | 'brainstorm', boolean>>;
|
|
100
116
|
export interface OatConfig {
|
|
101
117
|
version: number;
|
|
@@ -131,6 +147,7 @@ export interface ActiveProjectResolution {
|
|
|
131
147
|
path: string | null;
|
|
132
148
|
status: 'active' | 'missing' | 'unset';
|
|
133
149
|
}
|
|
150
|
+
export declare function normalizeProjectPath(repoRoot: string, pathValue: string | null | undefined): string | null;
|
|
134
151
|
export declare function resolveLocalPaths(config: OatConfig): string[];
|
|
135
152
|
export declare function readOatConfig(repoRoot: string): Promise<OatConfig>;
|
|
136
153
|
export declare function readOatLocalConfig(repoRoot: string): Promise<OatLocalConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"AASA,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;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;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;AACpB,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC;AACzE,MAAM,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { lstat, readFile } from 'node:fs/promises';
|
|
3
3
|
import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
4
|
import { atomicWriteJson, dirExists, fileExists } from '../fs/io.js';
|
|
5
|
-
import { normalizeToPosixPath } from '../fs/paths.js';
|
|
5
|
+
import { normalizeToPosixPath, validateRealPathWithinScope } from '../fs/paths.js';
|
|
6
6
|
import { parseJsonConfig } from './json.js';
|
|
7
7
|
const VALID_HILL_CHECKPOINT_DEFAULTS = ['every', 'final'];
|
|
8
8
|
const VALID_POST_IMPLEMENT_SEQUENCES = ['wait', 'summary', 'pr', 'docs-pr'];
|
|
@@ -16,7 +16,7 @@ const VALID_DESIGN_MODES = [
|
|
|
16
16
|
'selective',
|
|
17
17
|
'draft',
|
|
18
18
|
];
|
|
19
|
-
export const VALID_CODEX_DISPATCH_CEILINGS = ['low', 'medium', 'high', 'xhigh'];
|
|
19
|
+
export const VALID_CODEX_DISPATCH_CEILINGS = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
20
20
|
export const VALID_CLAUDE_DISPATCH_CEILINGS = ['haiku', 'sonnet', 'opus', 'fable'];
|
|
21
21
|
export const VALID_DISPATCH_CEILING_PRESETS = ['balanced', 'maximum', 'cost-conscious'];
|
|
22
22
|
export const VALID_DISPATCH_POLICY_MODES = ['managed', 'inherit'];
|
|
@@ -31,6 +31,10 @@ export const BUILTIN_EXEC_TARGETS = {
|
|
|
31
31
|
'codex-default': {
|
|
32
32
|
runtime: 'codex',
|
|
33
33
|
baseCommand: ['codex', 'exec'],
|
|
34
|
+
invocation: {
|
|
35
|
+
model: 'provider-default',
|
|
36
|
+
reasoningEffort: 'provider-default',
|
|
37
|
+
},
|
|
34
38
|
hostDetectionCommand: [
|
|
35
39
|
'sh',
|
|
36
40
|
'-c',
|
|
@@ -42,6 +46,10 @@ export const BUILTIN_EXEC_TARGETS = {
|
|
|
42
46
|
'claude-default': {
|
|
43
47
|
runtime: 'claude',
|
|
44
48
|
baseCommand: ['claude', '-p'],
|
|
49
|
+
invocation: {
|
|
50
|
+
model: 'provider-default',
|
|
51
|
+
reasoningEffort: 'provider-default',
|
|
52
|
+
},
|
|
45
53
|
hostDetectionCommand: ['sh', '-c', 'test -n "$CLAUDECODE"'],
|
|
46
54
|
availabilityCommand: ['claude', '--version'],
|
|
47
55
|
priority: 100,
|
|
@@ -49,6 +57,10 @@ export const BUILTIN_EXEC_TARGETS = {
|
|
|
49
57
|
'cursor-default': {
|
|
50
58
|
runtime: 'cursor',
|
|
51
59
|
baseCommand: ['cursor-agent', '-p'],
|
|
60
|
+
invocation: {
|
|
61
|
+
model: 'provider-default',
|
|
62
|
+
reasoningEffort: 'provider-default',
|
|
63
|
+
},
|
|
52
64
|
hostDetectionCommand: ['sh', '-c', 'test -n "$CURSOR_AGENT"'],
|
|
53
65
|
availabilityCommand: [
|
|
54
66
|
'sh',
|
|
@@ -73,6 +85,20 @@ export function validateDispatchRouteTarget(provider, target) {
|
|
|
73
85
|
}
|
|
74
86
|
return { valid: true };
|
|
75
87
|
}
|
|
88
|
+
export function isWorkflowDispatchFallbackRoute(value) {
|
|
89
|
+
return isRecord(value) && Array.isArray(value.route);
|
|
90
|
+
}
|
|
91
|
+
export function isWorkflowDispatchCandidateLadder(value) {
|
|
92
|
+
return isRecord(value) && Array.isArray(value.candidates);
|
|
93
|
+
}
|
|
94
|
+
export function toWorkflowDispatchCandidateLadder(cell) {
|
|
95
|
+
if (isWorkflowDispatchCandidateLadder(cell)) {
|
|
96
|
+
return cell;
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
candidates: [Array.isArray(cell) ? { route: cell } : cell],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
76
102
|
function normalizeMaxAttempts(value) {
|
|
77
103
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
78
104
|
return 2;
|
|
@@ -158,11 +184,7 @@ function normalizeDispatchRouteTarget(value) {
|
|
|
158
184
|
}
|
|
159
185
|
return Object.keys(target).length > 0 ? target : undefined;
|
|
160
186
|
}
|
|
161
|
-
function
|
|
162
|
-
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
163
|
-
if (bareValue !== undefined) {
|
|
164
|
-
return bareValue;
|
|
165
|
-
}
|
|
187
|
+
function normalizeDispatchRoute(providerKey, value) {
|
|
166
188
|
if (!Array.isArray(value) || value.length === 0) {
|
|
167
189
|
return undefined;
|
|
168
190
|
}
|
|
@@ -180,6 +202,39 @@ function normalizeDispatchMatrixCell(providerKey, value) {
|
|
|
180
202
|
}
|
|
181
203
|
return route.length > 0 ? route : undefined;
|
|
182
204
|
}
|
|
205
|
+
function normalizeDispatchCandidate(providerKey, value) {
|
|
206
|
+
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
207
|
+
if (bareValue !== undefined) {
|
|
208
|
+
return bareValue;
|
|
209
|
+
}
|
|
210
|
+
if (isRecord(value) && Object.hasOwn(value, 'route')) {
|
|
211
|
+
const route = normalizeDispatchRoute(providerKey, value.route);
|
|
212
|
+
return route ? { route } : undefined;
|
|
213
|
+
}
|
|
214
|
+
return normalizeDispatchRouteTarget(value);
|
|
215
|
+
}
|
|
216
|
+
function normalizeDispatchMatrixCell(providerKey, value) {
|
|
217
|
+
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
218
|
+
if (bareValue !== undefined) {
|
|
219
|
+
return { candidates: [bareValue] };
|
|
220
|
+
}
|
|
221
|
+
if (isWorkflowDispatchCandidateLadder(value)) {
|
|
222
|
+
const candidates = [];
|
|
223
|
+
for (const candidate of value.candidates) {
|
|
224
|
+
const normalized = normalizeDispatchCandidate(providerKey, candidate);
|
|
225
|
+
if (normalized !== undefined) {
|
|
226
|
+
candidates.push(normalized);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return candidates.length > 0 ? { candidates } : undefined;
|
|
230
|
+
}
|
|
231
|
+
const directTarget = normalizeDispatchRouteTarget(value);
|
|
232
|
+
if (directTarget !== undefined) {
|
|
233
|
+
return { candidates: [directTarget] };
|
|
234
|
+
}
|
|
235
|
+
const route = normalizeDispatchRoute(providerKey, value);
|
|
236
|
+
return route ? { candidates: [{ route }] } : undefined;
|
|
237
|
+
}
|
|
183
238
|
function normalizeDispatchProviderValue(providerKey, value) {
|
|
184
239
|
const bareValue = normalizeProviderBareValue(providerKey, value);
|
|
185
240
|
if (bareValue !== undefined) {
|
|
@@ -216,6 +271,16 @@ function normalizeExecTarget(value) {
|
|
|
216
271
|
if (baseCommand !== undefined) {
|
|
217
272
|
target.baseCommand = baseCommand;
|
|
218
273
|
}
|
|
274
|
+
if (isRecord(value.invocation)) {
|
|
275
|
+
const model = trimNonEmptyString(value.invocation.model);
|
|
276
|
+
const reasoningEffort = trimNonEmptyString(value.invocation.reasoningEffort);
|
|
277
|
+
if (model !== undefined || reasoningEffort !== undefined) {
|
|
278
|
+
target.invocation = {
|
|
279
|
+
...(model !== undefined ? { model } : {}),
|
|
280
|
+
...(reasoningEffort !== undefined ? { reasoningEffort } : {}),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
219
284
|
const models = normalizeStringList(value.models);
|
|
220
285
|
if (models !== undefined) {
|
|
221
286
|
target.models = models;
|
|
@@ -405,7 +470,7 @@ function normalizeKnownStrays(value) {
|
|
|
405
470
|
.filter((pathValue) => pathValue !== undefined);
|
|
406
471
|
return normalized.length > 0 ? [...new Set(normalized)].sort() : undefined;
|
|
407
472
|
}
|
|
408
|
-
function normalizeProjectPath(repoRoot, pathValue) {
|
|
473
|
+
export function normalizeProjectPath(repoRoot, pathValue) {
|
|
409
474
|
if (pathValue == null) {
|
|
410
475
|
return null;
|
|
411
476
|
}
|
|
@@ -413,25 +478,42 @@ function normalizeProjectPath(repoRoot, pathValue) {
|
|
|
413
478
|
if (!trimmed) {
|
|
414
479
|
return null;
|
|
415
480
|
}
|
|
416
|
-
if (!isAbsolute(trimmed)) {
|
|
417
|
-
const normalizedRelative = trimPathValue(normalizeToPosixPath(trimmed));
|
|
418
|
-
return normalizedRelative && normalizedRelative !== '.'
|
|
419
|
-
? normalizedRelative
|
|
420
|
-
: null;
|
|
421
|
-
}
|
|
422
481
|
const repoRootResolved = resolve(repoRoot);
|
|
423
|
-
const absoluteResolved = resolve(trimmed);
|
|
424
|
-
const
|
|
425
|
-
|
|
482
|
+
const absoluteResolved = resolve(repoRootResolved, trimmed);
|
|
483
|
+
const relativePath = relative(repoRootResolved, absoluteResolved);
|
|
484
|
+
const isInsideRepo = !isAbsolute(relativePath) &&
|
|
485
|
+
relativePath !== '..' &&
|
|
486
|
+
!relativePath.startsWith(`..${sep}`);
|
|
426
487
|
if (!isInsideRepo) {
|
|
427
488
|
return null;
|
|
428
489
|
}
|
|
429
|
-
const
|
|
430
|
-
const normalizedRelative = trimPathValue(relativePath);
|
|
490
|
+
const normalizedRelative = trimPathValue(normalizeToPosixPath(relativePath));
|
|
431
491
|
return normalizedRelative && normalizedRelative !== '.'
|
|
432
492
|
? normalizedRelative
|
|
433
493
|
: null;
|
|
434
494
|
}
|
|
495
|
+
async function normalizeReadableProjectPath(repoRoot, pathValue) {
|
|
496
|
+
const normalizedPath = normalizeProjectPath(repoRoot, pathValue);
|
|
497
|
+
if (!normalizedPath) {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
const absolutePath = join(repoRoot, normalizedPath);
|
|
501
|
+
try {
|
|
502
|
+
await lstat(absolutePath);
|
|
503
|
+
}
|
|
504
|
+
catch (error) {
|
|
505
|
+
return isMissingFileError(error) ? normalizedPath : null;
|
|
506
|
+
}
|
|
507
|
+
try {
|
|
508
|
+
const validated = await validateRealPathWithinScope(absolutePath, repoRoot);
|
|
509
|
+
return (await dirExists(validated.realPath))
|
|
510
|
+
? normalizeProjectPath(validated.realScopeRoot, validated.realPath)
|
|
511
|
+
: null;
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
435
517
|
function normalizeOatConfig(parsed) {
|
|
436
518
|
const next = { ...DEFAULT_OAT_CONFIG };
|
|
437
519
|
if (!isRecord(parsed)) {
|
|
@@ -598,7 +680,11 @@ export async function readOatLocalConfig(repoRoot) {
|
|
|
598
680
|
const configPath = getLocalConfigPath(repoRoot);
|
|
599
681
|
try {
|
|
600
682
|
const raw = await readFile(configPath, 'utf8');
|
|
601
|
-
|
|
683
|
+
const normalized = normalizeOatLocalConfig(repoRoot, parseJsonConfig(raw, configPath));
|
|
684
|
+
if (normalized.activeProject !== undefined) {
|
|
685
|
+
normalized.activeProject = await normalizeReadableProjectPath(repoRoot, normalized.activeProject);
|
|
686
|
+
}
|
|
687
|
+
return normalized;
|
|
602
688
|
}
|
|
603
689
|
catch (error) {
|
|
604
690
|
if (isMissingFileError(error)) {
|
|
@@ -623,12 +709,29 @@ export async function resolveActiveProject(repoRoot) {
|
|
|
623
709
|
if (!projectPath) {
|
|
624
710
|
return { name: null, path: null, status: 'unset' };
|
|
625
711
|
}
|
|
626
|
-
|
|
712
|
+
let resolvedProjectPath = projectPath;
|
|
713
|
+
let absoluteProjectPath = join(repoRoot, projectPath);
|
|
714
|
+
try {
|
|
715
|
+
const validated = await validateRealPathWithinScope(absoluteProjectPath, repoRoot);
|
|
716
|
+
const canonicalProjectPath = normalizeProjectPath(validated.realScopeRoot, validated.realPath);
|
|
717
|
+
if (!canonicalProjectPath) {
|
|
718
|
+
throw new Error('Project path resolves to the repository root.');
|
|
719
|
+
}
|
|
720
|
+
resolvedProjectPath = canonicalProjectPath;
|
|
721
|
+
absoluteProjectPath = validated.realPath;
|
|
722
|
+
}
|
|
723
|
+
catch {
|
|
724
|
+
return {
|
|
725
|
+
name: basename(absoluteProjectPath),
|
|
726
|
+
path: projectPath,
|
|
727
|
+
status: 'missing',
|
|
728
|
+
};
|
|
729
|
+
}
|
|
627
730
|
const statePath = join(absoluteProjectPath, 'state.md');
|
|
628
731
|
const isValid = (await dirExists(absoluteProjectPath)) && (await fileExists(statePath));
|
|
629
732
|
return {
|
|
630
733
|
name: basename(absoluteProjectPath),
|
|
631
|
-
path:
|
|
734
|
+
path: resolvedProjectPath,
|
|
632
735
|
status: isValid ? 'active' : 'missing',
|
|
633
736
|
};
|
|
634
737
|
}
|
|
@@ -637,10 +740,22 @@ export async function setActiveProject(repoRoot, projectRelativePath) {
|
|
|
637
740
|
if (!normalizedPath) {
|
|
638
741
|
throw new Error(`Active project path must be repo-relative or inside repo root: ${projectRelativePath}`);
|
|
639
742
|
}
|
|
743
|
+
let canonicalPath;
|
|
744
|
+
try {
|
|
745
|
+
const validated = await validateRealPathWithinScope(join(repoRoot, normalizedPath), repoRoot);
|
|
746
|
+
const canonicalProjectPath = normalizeProjectPath(validated.realScopeRoot, validated.realPath);
|
|
747
|
+
if (!canonicalProjectPath || !(await dirExists(validated.realPath))) {
|
|
748
|
+
throw new Error('Project directory is missing.');
|
|
749
|
+
}
|
|
750
|
+
canonicalPath = canonicalProjectPath;
|
|
751
|
+
}
|
|
752
|
+
catch {
|
|
753
|
+
throw new Error(`Active project path must be repo-relative or inside repo root: ${projectRelativePath}`);
|
|
754
|
+
}
|
|
640
755
|
const localConfig = await readOatLocalConfig(repoRoot);
|
|
641
756
|
await writeOatLocalConfig(repoRoot, {
|
|
642
757
|
...localConfig,
|
|
643
|
-
activeProject:
|
|
758
|
+
activeProject: canonicalPath,
|
|
644
759
|
});
|
|
645
760
|
}
|
|
646
761
|
export async function clearActiveProject(repoRoot, options) {
|
package/dist/config/resolve.d.ts
CHANGED
|
@@ -18,4 +18,12 @@ export interface ResolveEffectiveConfigDependencies {
|
|
|
18
18
|
export declare function resolveEffectiveConfig(repoRoot: string, userConfigDir: string, env?: NodeJS.ProcessEnv, overrides?: Partial<ResolveEffectiveConfigDependencies>): Promise<ResolvedConfig>;
|
|
19
19
|
export declare function resolveGate(effective: ResolvedConfig, skillName: string): GateConfig | null;
|
|
20
20
|
export declare function resolveExecTargets(effective: ResolvedConfig): Record<string, ExecTarget>;
|
|
21
|
+
export type ExecTargetOrigin = 'builtin' | 'user' | 'shared' | 'local';
|
|
22
|
+
export interface ResolvedExecTargetView {
|
|
23
|
+
target: ExecTarget;
|
|
24
|
+
origin: ExecTargetOrigin;
|
|
25
|
+
explicitlyConfigured: boolean;
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function resolveExecTargetViews(effective: ResolvedConfig): Record<string, ResolvedExecTargetView>;
|
|
21
29
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,UAAU,EACf,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;AAmFD,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;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAcnB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAY5B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAoDxC"}
|