@open-agent-toolkit/cli 0.0.26 → 0.0.28

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.
@@ -3,6 +3,44 @@ import { 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
5
  import { normalizeToPosixPath } from '../fs/paths.js';
6
+ const VALID_HILL_CHECKPOINT_DEFAULTS = ['every', 'final'];
7
+ const VALID_POST_IMPLEMENT_SEQUENCES = ['wait', 'summary', 'pr', 'docs-pr'];
8
+ const VALID_REVIEW_EXECUTION_MODELS = [
9
+ 'subagent',
10
+ 'inline',
11
+ 'fresh-session',
12
+ ];
13
+ function normalizeWorkflowConfig(parsed) {
14
+ if (!isRecord(parsed)) {
15
+ return undefined;
16
+ }
17
+ const next = {};
18
+ if (typeof parsed.hillCheckpointDefault === 'string' &&
19
+ VALID_HILL_CHECKPOINT_DEFAULTS.includes(parsed.hillCheckpointDefault)) {
20
+ next.hillCheckpointDefault =
21
+ parsed.hillCheckpointDefault;
22
+ }
23
+ if (typeof parsed.archiveOnComplete === 'boolean') {
24
+ next.archiveOnComplete = parsed.archiveOnComplete;
25
+ }
26
+ if (typeof parsed.createPrOnComplete === 'boolean') {
27
+ next.createPrOnComplete = parsed.createPrOnComplete;
28
+ }
29
+ if (typeof parsed.postImplementSequence === 'string' &&
30
+ VALID_POST_IMPLEMENT_SEQUENCES.includes(parsed.postImplementSequence)) {
31
+ next.postImplementSequence =
32
+ parsed.postImplementSequence;
33
+ }
34
+ if (typeof parsed.reviewExecutionModel === 'string' &&
35
+ VALID_REVIEW_EXECUTION_MODELS.includes(parsed.reviewExecutionModel)) {
36
+ next.reviewExecutionModel =
37
+ parsed.reviewExecutionModel;
38
+ }
39
+ if (typeof parsed.autoNarrowReReviewScope === 'boolean') {
40
+ next.autoNarrowReReviewScope = parsed.autoNarrowReReviewScope;
41
+ }
42
+ return Object.keys(next).length > 0 ? next : undefined;
43
+ }
6
44
  const DEFAULT_OAT_CONFIG = { version: 1 };
7
45
  const DEFAULT_OAT_LOCAL_CONFIG = { version: 1 };
8
46
  const DEFAULT_USER_CONFIG = { version: 1 };
@@ -148,6 +186,10 @@ function normalizeOatConfig(parsed) {
148
186
  if (typeof parsed.autoReviewAtCheckpoints === 'boolean') {
149
187
  next.autoReviewAtCheckpoints = parsed.autoReviewAtCheckpoints;
150
188
  }
189
+ const workflow = normalizeWorkflowConfig(parsed.workflow);
190
+ if (workflow) {
191
+ next.workflow = workflow;
192
+ }
151
193
  return next;
152
194
  }
153
195
  function normalizeOatLocalConfig(repoRoot, parsed) {
@@ -174,6 +216,10 @@ function normalizeOatLocalConfig(repoRoot, parsed) {
174
216
  ? parsed.activeIdea.trim()
175
217
  : null;
176
218
  }
219
+ const workflow = normalizeWorkflowConfig(parsed.workflow);
220
+ if (workflow) {
221
+ next.workflow = workflow;
222
+ }
177
223
  return next;
178
224
  }
179
225
  export function resolveLocalPaths(config) {
@@ -266,6 +312,10 @@ function normalizeUserConfig(parsed) {
266
312
  ? parsed.activeIdea.trim()
267
313
  : null;
268
314
  }
315
+ const workflow = normalizeWorkflowConfig(parsed.workflow);
316
+ if (workflow) {
317
+ next.workflow = workflow;
318
+ }
269
319
  return next;
270
320
  }
271
321
  export async function readUserConfig(userConfigDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AA0CD,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,CAoEzB"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AA8DD,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,CAqEzB"}
@@ -20,6 +20,15 @@ const DEFAULT_SHARED_CONFIG = {
20
20
  index: null,
21
21
  requireForProjectCompletion: false,
22
22
  },
23
+ tools: {
24
+ core: false,
25
+ docs: false,
26
+ ideas: false,
27
+ 'project-management': false,
28
+ research: false,
29
+ utility: false,
30
+ workflows: false,
31
+ },
23
32
  autoReviewAtCheckpoints: false,
24
33
  };
25
34
  const DEFAULT_LOCAL_CONFIG = {
@@ -30,6 +39,16 @@ const DEFAULT_LOCAL_CONFIG = {
30
39
  const DEFAULT_USER_CONFIG = {
31
40
  activeIdea: null,
32
41
  };
42
+ const DEFAULT_WORKFLOW_CONFIG = {
43
+ workflow: {
44
+ hillCheckpointDefault: null,
45
+ archiveOnComplete: null,
46
+ createPrOnComplete: null,
47
+ postImplementSequence: null,
48
+ reviewExecutionModel: null,
49
+ autoNarrowReReviewScope: null,
50
+ },
51
+ };
33
52
  const ENV_OVERRIDE_MAP = {
34
53
  'projects.root': 'OAT_PROJECTS_ROOT',
35
54
  'worktrees.root': 'OAT_WORKTREES_ROOT',
@@ -51,6 +70,7 @@ export async function resolveEffectiveConfig(repoRoot, userConfigDir, env = proc
51
70
  ...flattenConfig(DEFAULT_SHARED_CONFIG),
52
71
  ...flattenConfig(DEFAULT_LOCAL_CONFIG),
53
72
  ...flattenConfig(DEFAULT_USER_CONFIG),
73
+ ...flattenConfig(DEFAULT_WORKFLOW_CONFIG),
54
74
  };
55
75
  const keys = new Set([
56
76
  ...Object.keys(defaultValues),
@@ -1,7 +1,7 @@
1
1
  export interface PublicPackageContract {
2
2
  workspaceDir: string;
3
3
  publicName: string;
4
- role: 'cli' | 'docs-library';
4
+ role: 'cli' | 'docs-library' | 'support-library';
5
5
  requiredMetadataFields: string[];
6
6
  requiredPaths: string[];
7
7
  forbiddenPathPatterns: string[];
@@ -13,4 +13,5 @@ export declare function findMissingMetadataFields(packageJson: Record<string, un
13
13
  export declare function findMissingPackedPaths(packedPaths: readonly string[], contract: PublicPackageContract): string[];
14
14
  export declare function findForbiddenPackedPaths(packedPaths: readonly string[], contract: PublicPackageContract): string[];
15
15
  export declare function findWorkspaceProtocolDependencySpecs(packageJson: Record<string, unknown>): string[];
16
+ export declare function findNonPublicWorkspaceDependencySpecs(packageJson: Record<string, unknown>, publicPackageNames: readonly string[], workspacePackageNames: readonly string[]): string[];
16
17
  //# sourceMappingURL=public-package-contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-package-contract.d.ts","sourceRoot":"","sources":["../../src/release/public-package-contract.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;IAC7B,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,MAAM,EAAE,CAAC;CACvC;AAgGD,wBAAgB,yBAAyB,IAAI,qBAAqB,EAAE,CASnE;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAMV;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,EAAE,CAmBV"}
1
+ {"version":3,"file":"public-package-contract.d.ts","sourceRoot":"","sources":["../../src/release/public-package-contract.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,cAAc,GAAG,iBAAiB,CAAC;IACjD,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,MAAM,EAAE,CAAC;CACvC;AA0GD,wBAAgB,yBAAyB,IAAI,qBAAqB,EAAE,CASnE;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAIV;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,EAAE,CAMV;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,EAAE,CAmBV;AAED,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,qBAAqB,EAAE,SAAS,MAAM,EAAE,GACvC,MAAM,EAAE,CA0BV"}
@@ -35,6 +35,16 @@ const PUBLIC_PACKAGE_CONTRACTS = [
35
35
  ],
36
36
  versionPolicyIgnorePatterns: ['assets/**'],
37
37
  },
38
+ {
39
+ workspaceDir: 'packages/control-plane',
40
+ publicName: '@open-agent-toolkit/control-plane',
41
+ role: 'support-library',
42
+ requiredMetadataFields: [...COMMON_METADATA_FIELDS, 'exports', 'types'],
43
+ requiredPaths: ['dist/index.js', 'dist/index.d.ts', 'README.md'],
44
+ forbiddenPathPatterns: [...COMMON_FORBIDDEN_PATH_PATTERNS],
45
+ versionPolicyAdditionalRoots: [],
46
+ versionPolicyIgnorePatterns: [],
47
+ },
38
48
  {
39
49
  workspaceDir: 'packages/docs-config',
40
50
  publicName: '@open-agent-toolkit/docs-config',
@@ -111,3 +121,21 @@ export function findWorkspaceProtocolDependencySpecs(packageJson) {
111
121
  }
112
122
  return workspaceSpecs;
113
123
  }
124
+ export function findNonPublicWorkspaceDependencySpecs(packageJson, publicPackageNames, workspacePackageNames) {
125
+ const publicPackageNameSet = new Set(publicPackageNames);
126
+ const workspacePackageNameSet = new Set(workspacePackageNames);
127
+ const invalidSpecs = [];
128
+ for (const dependencyField of PACKED_DEPENDENCY_FIELDS) {
129
+ const dependencies = packageJson[dependencyField];
130
+ if (!dependencies || typeof dependencies !== 'object') {
131
+ continue;
132
+ }
133
+ for (const [dependencyName, spec] of Object.entries(dependencies)) {
134
+ if (workspacePackageNameSet.has(dependencyName) &&
135
+ !publicPackageNameSet.has(dependencyName)) {
136
+ invalidSpecs.push(`${dependencyField}.${dependencyName}=${String(spec)}`);
137
+ }
138
+ }
139
+ }
140
+ return invalidSpecs;
141
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -33,7 +33,7 @@
33
33
  "ora": "^9.0.0",
34
34
  "yaml": "2.8.2",
35
35
  "zod": "^3.25.76",
36
- "@open-agent-toolkit/control-plane": "0.0.1"
36
+ "@open-agent-toolkit/control-plane": "0.0.28"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.10.0",