@open-agent-toolkit/cli 0.0.34 → 0.0.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/docs/cli-utilities/tool-packs.md +8 -1
- package/assets/docs/provider-sync/manifest-and-drift.md +2 -0
- package/assets/public-package-versions.json +4 -4
- package/dist/commands/init/tools/core/index.d.ts.map +1 -1
- package/dist/commands/init/tools/core/index.js +7 -1
- package/dist/commands/init/tools/docs/index.d.ts.map +1 -1
- package/dist/commands/init/tools/docs/index.js +4 -2
- package/dist/commands/init/tools/ideas/index.d.ts.map +1 -1
- package/dist/commands/init/tools/ideas/index.js +8 -2
- package/dist/commands/init/tools/index.d.ts +13 -2
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +321 -83
- package/dist/commands/init/tools/install-state.d.ts +10 -0
- package/dist/commands/init/tools/install-state.d.ts.map +1 -0
- package/dist/commands/init/tools/install-state.js +36 -0
- package/dist/commands/init/tools/project-management/index.d.ts.map +1 -1
- package/dist/commands/init/tools/project-management/index.js +6 -0
- package/dist/commands/init/tools/research/index.d.ts.map +1 -1
- package/dist/commands/init/tools/research/index.js +8 -3
- package/dist/commands/init/tools/utility/index.d.ts.map +1 -1
- package/dist/commands/init/tools/utility/index.js +4 -2
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +8 -2
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +27 -5
- package/dist/commands/sync/sync.types.d.ts +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/tools/install/index.d.ts +2 -1
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +26 -8
- package/dist/commands/tools/shared/auto-sync.d.ts +4 -1
- package/dist/commands/tools/shared/auto-sync.d.ts.map +1 -1
- package/dist/commands/tools/shared/auto-sync.js +7 -2
- package/dist/commands/tools/shared/install-sync-context.d.ts +9 -0
- package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -0
- package/dist/commands/tools/shared/install-sync-context.js +45 -0
- package/dist/engine/compute-plan.d.ts +2 -1
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +8 -1
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
2
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
3
|
+
import { canonicalPathsForPack, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
3
4
|
import { resolveAssetsRoot } from '../../../../fs/assets.js';
|
|
4
5
|
import { resolveProjectRoot } from '../../../../fs/paths.js';
|
|
5
6
|
import { Command } from 'commander';
|
|
@@ -19,6 +20,7 @@ export function createInitToolsProjectManagementCommand(overrides = {}) {
|
|
|
19
20
|
.description('Install OAT project-management skills and templates')
|
|
20
21
|
.option('--force', 'Overwrite existing files where applicable')
|
|
21
22
|
.action(async (options, command) => {
|
|
23
|
+
let didInstall = false;
|
|
22
24
|
try {
|
|
23
25
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
24
26
|
const targetRoot = await dependencies.resolveProjectRoot(context.cwd);
|
|
@@ -44,6 +46,7 @@ export function createInitToolsProjectManagementCommand(overrides = {}) {
|
|
|
44
46
|
context.logger.info(`Templates: copied=${result.copiedTemplates.length}, updated=${result.updatedTemplates.length}, skipped=${result.skippedTemplates.length}`);
|
|
45
47
|
context.logger.info('Run: oat sync --scope project');
|
|
46
48
|
}
|
|
49
|
+
didInstall = true;
|
|
47
50
|
process.exitCode = 0;
|
|
48
51
|
}
|
|
49
52
|
catch (error) {
|
|
@@ -57,5 +60,8 @@ export function createInitToolsProjectManagementCommand(overrides = {}) {
|
|
|
57
60
|
}
|
|
58
61
|
process.exitCode = 1;
|
|
59
62
|
}
|
|
63
|
+
if (didInstall) {
|
|
64
|
+
setInstalledCanonicalPaths(command, canonicalPathsForPack('project-management'));
|
|
65
|
+
}
|
|
60
66
|
});
|
|
61
67
|
}
|
|
@@ -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;AAC9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,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;AAC9B,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,10 +1,11 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
2
|
import { confirmAction, selectManyWithAbort, } from '../../../shared/shared.prompts.js';
|
|
3
3
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
|
+
import { canonicalAgentPaths, canonicalSkillPaths, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
4
5
|
import { resolveAssetsRoot } from '../../../../fs/assets.js';
|
|
5
6
|
import { resolveProjectRoot, resolveScopeRoot } from '../../../../fs/paths.js';
|
|
6
7
|
import { Command } from 'commander';
|
|
7
|
-
import { installResearch as defaultInstallResearch, RESEARCH_SKILLS, } from './install-research.js';
|
|
8
|
+
import { installResearch as defaultInstallResearch, RESEARCH_AGENTS, RESEARCH_SKILLS, } from './install-research.js';
|
|
8
9
|
const DEFAULT_DEPENDENCIES = {
|
|
9
10
|
buildCommandContext,
|
|
10
11
|
resolveProjectRoot,
|
|
@@ -37,7 +38,7 @@ function reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, r
|
|
|
37
38
|
context.logger.info(`Agents: copied=${result.copiedAgents.length}, updated=${result.updatedAgents.length}, skipped=${result.skippedAgents.length}`);
|
|
38
39
|
context.logger.info(`Run: oat sync --scope ${scope}`);
|
|
39
40
|
}
|
|
40
|
-
async function runInitToolsResearch(context, options, dependencies) {
|
|
41
|
+
async function runInitToolsResearch(context, options, dependencies, command) {
|
|
41
42
|
try {
|
|
42
43
|
const scope = resolveScope(context);
|
|
43
44
|
const targetRoot = scope === 'project'
|
|
@@ -81,6 +82,10 @@ async function runInitToolsResearch(context, options, dependencies) {
|
|
|
81
82
|
skills: selectedSkills,
|
|
82
83
|
force: options.force,
|
|
83
84
|
});
|
|
85
|
+
setInstalledCanonicalPaths(command, [
|
|
86
|
+
...canonicalSkillPaths(selectedSkills),
|
|
87
|
+
...canonicalAgentPaths(RESEARCH_AGENTS),
|
|
88
|
+
]);
|
|
84
89
|
reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, result);
|
|
85
90
|
process.exitCode = 0;
|
|
86
91
|
}
|
|
@@ -105,6 +110,6 @@ export function createInitToolsResearchCommand(overrides = {}) {
|
|
|
105
110
|
.option('--force', 'Overwrite existing files where applicable')
|
|
106
111
|
.action(async (options, command) => {
|
|
107
112
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
108
|
-
await runInitToolsResearch(context, options, dependencies);
|
|
113
|
+
await runInitToolsResearch(context, options, dependencies, command);
|
|
109
114
|
});
|
|
110
115
|
}
|
|
@@ -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;AAC9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,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;AAC9B,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,6 +1,7 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
2
|
import { confirmAction, selectManyWithAbort, } from '../../../shared/shared.prompts.js';
|
|
3
3
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
|
+
import { canonicalSkillPaths, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
4
5
|
import { resolveAssetsRoot } from '../../../../fs/assets.js';
|
|
5
6
|
import { resolveProjectRoot, resolveScopeRoot } from '../../../../fs/paths.js';
|
|
6
7
|
import { Command } from 'commander';
|
|
@@ -36,7 +37,7 @@ function reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, r
|
|
|
36
37
|
context.logger.info(`Skills: copied=${result.copiedSkills.length}, updated=${result.updatedSkills.length}, skipped=${result.skippedSkills.length}`);
|
|
37
38
|
context.logger.info(`Run: oat sync --scope ${scope}`);
|
|
38
39
|
}
|
|
39
|
-
async function runInitToolsUtility(context, options, dependencies) {
|
|
40
|
+
async function runInitToolsUtility(context, options, dependencies, command) {
|
|
40
41
|
try {
|
|
41
42
|
const scope = resolveScope(context);
|
|
42
43
|
const targetRoot = scope === 'project'
|
|
@@ -80,6 +81,7 @@ async function runInitToolsUtility(context, options, dependencies) {
|
|
|
80
81
|
skills: selectedSkills,
|
|
81
82
|
force: options.force,
|
|
82
83
|
});
|
|
84
|
+
setInstalledCanonicalPaths(command, canonicalSkillPaths(selectedSkills));
|
|
83
85
|
reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, result);
|
|
84
86
|
process.exitCode = 0;
|
|
85
87
|
}
|
|
@@ -104,6 +106,6 @@ export function createInitToolsUtilityCommand(overrides = {}) {
|
|
|
104
106
|
.option('--force', 'Overwrite existing files where applicable')
|
|
105
107
|
.action(async (options, command) => {
|
|
106
108
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
107
|
-
await runInitToolsUtility(context, options, dependencies);
|
|
109
|
+
await runInitToolsUtility(context, options, dependencies, command);
|
|
108
110
|
});
|
|
109
111
|
}
|
|
@@ -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;AAC9B,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,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;AAC9B,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,6 +1,7 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../../app/command-context.js';
|
|
2
2
|
import { confirmAction, } from '../../../shared/shared.prompts.js';
|
|
3
3
|
import { readGlobalOptions } from '../../../shared/shared.utils.js';
|
|
4
|
+
import { canonicalPathsForPack, setInstalledCanonicalPaths, } from '../../../tools/shared/install-sync-context.js';
|
|
4
5
|
import { resolveAssetsRoot } from '../../../../fs/assets.js';
|
|
5
6
|
import { resolveProjectRoot } from '../../../../fs/paths.js';
|
|
6
7
|
import { Command } from 'commander';
|
|
@@ -46,7 +47,7 @@ async function runInitToolsWorkflows(context, options, dependencies) {
|
|
|
46
47
|
context.logger.info('Cancelled: no files were overwritten.');
|
|
47
48
|
}
|
|
48
49
|
process.exitCode = 0;
|
|
49
|
-
return;
|
|
50
|
+
return false;
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
const assetsRoot = await dependencies.resolveAssetsRoot();
|
|
@@ -57,6 +58,7 @@ async function runInitToolsWorkflows(context, options, dependencies) {
|
|
|
57
58
|
});
|
|
58
59
|
reportSuccess(context, targetRoot, assetsRoot, result);
|
|
59
60
|
process.exitCode = 0;
|
|
61
|
+
return true;
|
|
60
62
|
}
|
|
61
63
|
catch (error) {
|
|
62
64
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -67,6 +69,7 @@ async function runInitToolsWorkflows(context, options, dependencies) {
|
|
|
67
69
|
context.logger.error(message);
|
|
68
70
|
}
|
|
69
71
|
process.exitCode = 1;
|
|
72
|
+
return false;
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
export function createInitToolsWorkflowsCommand(overrides = {}) {
|
|
@@ -79,6 +82,9 @@ export function createInitToolsWorkflowsCommand(overrides = {}) {
|
|
|
79
82
|
.option('--force', 'Overwrite existing files where applicable')
|
|
80
83
|
.action(async (options, command) => {
|
|
81
84
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
82
|
-
await runInitToolsWorkflows(context, options, dependencies);
|
|
85
|
+
const didInstall = await runInitToolsWorkflows(context, options, dependencies);
|
|
86
|
+
if (didInstall) {
|
|
87
|
+
setInstalledCanonicalPaths(command, canonicalPathsForPack('workflows'));
|
|
88
|
+
}
|
|
83
89
|
});
|
|
84
90
|
}
|
|
@@ -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":"AAsCA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,cAAc,CAAC;AAmTtB,wBAAgB,iBAAiB,CAC/B,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CA6BT"}
|
|
@@ -5,6 +5,7 @@ import { selectManyWithAbort, } from '../shared/shared.prompts.js';
|
|
|
5
5
|
import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.utils.js';
|
|
6
6
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../config/index.js';
|
|
7
7
|
import { computeSyncPlan, executeSyncPlan, scanCanonical } from '../../engine/index.js';
|
|
8
|
+
import { CliError } from '../../errors/index.js';
|
|
8
9
|
import { resolveProjectRoot, resolveScopeRoot } from '../../fs/paths.js';
|
|
9
10
|
import { loadManifest } from '../../manifest/index.js';
|
|
10
11
|
import { claudeAdapter } from '../../providers/claude/index.js';
|
|
@@ -15,7 +16,7 @@ import { cursorAdapter } from '../../providers/cursor/index.js';
|
|
|
15
16
|
import { geminiAdapter } from '../../providers/gemini/index.js';
|
|
16
17
|
import { getConfigAwareAdapters, } from '../../providers/shared/index.js';
|
|
17
18
|
import { formatSyncPlan } from '../../ui/output.js';
|
|
18
|
-
import { Command } from 'commander';
|
|
19
|
+
import { Command, Option } from 'commander';
|
|
19
20
|
import { runSyncApply } from './apply.js';
|
|
20
21
|
import { runSyncDryRun } from './dry-run.js';
|
|
21
22
|
function defaultDependencies() {
|
|
@@ -53,6 +54,18 @@ function defaultDependencies() {
|
|
|
53
54
|
formatSyncPlan,
|
|
54
55
|
};
|
|
55
56
|
}
|
|
57
|
+
const INSTALL_CANONICAL_PATH_PATTERN = /^\.agents\/(skills|agents|rules)\/[^/\\]+$/;
|
|
58
|
+
function validateInstallCanonicalPaths(paths) {
|
|
59
|
+
if (!paths?.length) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
for (const path of paths) {
|
|
63
|
+
if (!INSTALL_CANONICAL_PATH_PATTERN.test(path)) {
|
|
64
|
+
throw new CliError(`Invalid --install-canonical path: ${path}`, 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return paths;
|
|
68
|
+
}
|
|
56
69
|
function hasProviderMismatches(mismatches) {
|
|
57
70
|
return (mismatches.detectedUnset.length > 0 ||
|
|
58
71
|
mismatches.detectedDisabled.length > 0);
|
|
@@ -125,7 +138,7 @@ async function maybeResolveProviderMismatches(context, scope, scopeRoot, configP
|
|
|
125
138
|
activeAdapters: resolution.activeAdapters,
|
|
126
139
|
};
|
|
127
140
|
}
|
|
128
|
-
async function computePlans(context, dependencies) {
|
|
141
|
+
async function computePlans(context, dependencies, allowedRemovalCanonicalPaths) {
|
|
129
142
|
const scopePlans = [];
|
|
130
143
|
for (const scope of resolveConcreteScopes(context.scope)) {
|
|
131
144
|
const scopeRoot = await dependencies.resolveScopeRoot(scope, context);
|
|
@@ -149,6 +162,7 @@ async function computePlans(context, dependencies) {
|
|
|
149
162
|
scope,
|
|
150
163
|
config: resolved.config,
|
|
151
164
|
scopeRoot,
|
|
165
|
+
allowedRemovalCanonicalPaths,
|
|
152
166
|
});
|
|
153
167
|
let codexExtensionPlan;
|
|
154
168
|
let codexExtension;
|
|
@@ -201,8 +215,8 @@ function logNonInteractiveMismatchGuidance(context, scopePlans) {
|
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
217
|
}
|
|
204
|
-
async function runSyncCommand(context, dependencies) {
|
|
205
|
-
const scopePlans = await computePlans(context, dependencies);
|
|
218
|
+
async function runSyncCommand(context, dependencies, allowedRemovalCanonicalPaths) {
|
|
219
|
+
const scopePlans = await computePlans(context, dependencies, allowedRemovalCanonicalPaths);
|
|
206
220
|
logNonInteractiveMismatchGuidance(context, scopePlans);
|
|
207
221
|
if (context.dryRun) {
|
|
208
222
|
runSyncDryRun(context, scopePlans, dependencies);
|
|
@@ -218,8 +232,16 @@ export function createSyncCommand(overrides = {}) {
|
|
|
218
232
|
return new Command('sync')
|
|
219
233
|
.description('Sync canonical content to provider views')
|
|
220
234
|
.option('--dry-run', 'Preview sync changes without applying')
|
|
235
|
+
.addOption(new Option('--install-canonical <path>', 'Internal install sync filter')
|
|
236
|
+
.hideHelp()
|
|
237
|
+
.default([])
|
|
238
|
+
.argParser((value, previous) => [
|
|
239
|
+
...(previous ?? []),
|
|
240
|
+
value,
|
|
241
|
+
]))
|
|
221
242
|
.action(async (_options, command) => {
|
|
222
243
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
223
|
-
|
|
244
|
+
const options = command.opts();
|
|
245
|
+
await runSyncCommand(context, dependencies, validateInstallCanonicalPaths(options.installCanonical));
|
|
224
246
|
});
|
|
225
247
|
}
|
|
@@ -70,6 +70,7 @@ export interface SyncCommandDependencies {
|
|
|
70
70
|
scope: ConcreteScope;
|
|
71
71
|
config: SyncConfig;
|
|
72
72
|
scopeRoot: string;
|
|
73
|
+
allowedRemovalCanonicalPaths?: string[];
|
|
73
74
|
}) => Promise<SyncPlan>;
|
|
74
75
|
executeSyncPlan: (plan: SyncPlan, manifest: Manifest, manifestPath: string) => Promise<SyncResult>;
|
|
75
76
|
computeCodexProjectExtensionPlan: (scopeRoot: string, canonicalEntries: CanonicalEntry[]) => Promise<CodexExtensionPlan>;
|
|
@@ -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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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { type InitToolsDependencies } from '../../init/tools/index.js';
|
|
1
2
|
import { type AutoSyncDependencies } from '../../tools/shared/auto-sync.js';
|
|
2
3
|
import type { Command } from 'commander';
|
|
3
|
-
export declare function createToolsInstallCommand(syncDependencies?: AutoSyncDependencies): Command;
|
|
4
|
+
export declare function createToolsInstallCommand(syncDependencies?: AutoSyncDependencies, initOverrides?: Partial<InitToolsDependencies>, createBaseCommand?: () => Command): Command;
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/install/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/install/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC,wBAAgB,yBAAyB,CACvC,gBAAgB,GAAE,oBAA8C,EAChE,aAAa,GAAE,OAAO,CAAC,qBAAqB,CAAM,EAClD,iBAAiB,CAAC,EAAE,MAAM,OAAO,GAChC,OAAO,CAoCT"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
3
|
-
import { createInitToolsCommand } from '../../init/tools/index.js';
|
|
3
|
+
import { consumeInitToolsRunMetadata, createInitToolsCommand, } from '../../init/tools/index.js';
|
|
4
4
|
import { readGlobalOptions, resolveConcreteScopes, } from '../../shared/shared.utils.js';
|
|
5
5
|
import { autoSync, } from '../../tools/shared/auto-sync.js';
|
|
6
|
+
import { getInstalledCanonicalPaths as getInstallSyncCanonicalPaths } from '../../tools/shared/install-sync-context.js';
|
|
6
7
|
const defaultSyncDependencies = {
|
|
7
|
-
runSync: async ({ scope, cwd }) => {
|
|
8
|
+
runSync: async ({ scope, cwd, installedCanonicalPaths }) => {
|
|
9
|
+
const syncArgs = [
|
|
10
|
+
...process.execArgv,
|
|
11
|
+
process.argv[1],
|
|
12
|
+
'sync',
|
|
13
|
+
'--scope',
|
|
14
|
+
scope,
|
|
15
|
+
];
|
|
16
|
+
for (const canonicalPath of installedCanonicalPaths ?? []) {
|
|
17
|
+
syncArgs.push('--install-canonical', canonicalPath);
|
|
18
|
+
}
|
|
8
19
|
await new Promise((resolve, reject) => {
|
|
9
|
-
execFile(process.execPath,
|
|
20
|
+
execFile(process.execPath, syncArgs, { cwd }, (error) => {
|
|
10
21
|
if (error)
|
|
11
22
|
reject(error);
|
|
12
23
|
else
|
|
@@ -15,8 +26,10 @@ const defaultSyncDependencies = {
|
|
|
15
26
|
});
|
|
16
27
|
},
|
|
17
28
|
};
|
|
18
|
-
export function createToolsInstallCommand(syncDependencies = defaultSyncDependencies) {
|
|
19
|
-
const cmd =
|
|
29
|
+
export function createToolsInstallCommand(syncDependencies = defaultSyncDependencies, initOverrides = {}, createBaseCommand) {
|
|
30
|
+
const cmd = createBaseCommand === undefined
|
|
31
|
+
? createInitToolsCommand(initOverrides)
|
|
32
|
+
: createBaseCommand();
|
|
20
33
|
cmd.name('install');
|
|
21
34
|
cmd.option('--no-sync', 'Skip auto-sync after install');
|
|
22
35
|
cmd.hook('postAction', async (thisCommand, actionCommand) => {
|
|
@@ -26,9 +39,14 @@ export function createToolsInstallCommand(syncDependencies = defaultSyncDependen
|
|
|
26
39
|
if (opts.sync === false)
|
|
27
40
|
return;
|
|
28
41
|
const globalOptions = readGlobalOptions(actionCommand);
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
42
|
+
const buildContext = initOverrides.buildCommandContext ?? buildCommandContext;
|
|
43
|
+
const context = buildContext(globalOptions);
|
|
44
|
+
const metadata = consumeInitToolsRunMetadata();
|
|
45
|
+
const scopes = metadata === null
|
|
46
|
+
? resolveConcreteScopes(context.scope)
|
|
47
|
+
: metadata.affectedScopes;
|
|
48
|
+
const installedCanonicalPaths = getInstallSyncCanonicalPaths(actionCommand);
|
|
49
|
+
await autoSync(scopes, context.cwd, context.home, context.logger, syncDependencies, { installedCanonicalPaths });
|
|
32
50
|
});
|
|
33
51
|
return cmd;
|
|
34
52
|
}
|
|
@@ -5,6 +5,7 @@ export interface AutoSyncDependencies {
|
|
|
5
5
|
scope: ConcreteScope;
|
|
6
6
|
cwd: string;
|
|
7
7
|
home: string;
|
|
8
|
+
installedCanonicalPaths?: string[];
|
|
8
9
|
}) => Promise<void>;
|
|
9
10
|
}
|
|
10
11
|
export interface AutoSyncResult {
|
|
@@ -12,5 +13,7 @@ export interface AutoSyncResult {
|
|
|
12
13
|
scopes: ConcreteScope[];
|
|
13
14
|
error: string | null;
|
|
14
15
|
}
|
|
15
|
-
export declare function autoSync(scopes: ConcreteScope[], cwd: string, home: string, logger: CliLogger, dependencies: AutoSyncDependencies
|
|
16
|
+
export declare function autoSync(scopes: ConcreteScope[], cwd: string, home: string, logger: CliLogger, dependencies: AutoSyncDependencies, options?: {
|
|
17
|
+
installedCanonicalPaths?: string[];
|
|
18
|
+
}): Promise<AutoSyncResult>;
|
|
16
19
|
//# sourceMappingURL=auto-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-sync.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/shared/auto-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-sync.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/shared/auto-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACpC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,oBAAoB,EAClC,OAAO,CAAC,EAAE;IAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
export async function autoSync(scopes, cwd, home, logger, dependencies) {
|
|
1
|
+
export async function autoSync(scopes, cwd, home, logger, dependencies, options) {
|
|
2
2
|
if (scopes.length === 0) {
|
|
3
3
|
return { synced: false, scopes: [], error: null };
|
|
4
4
|
}
|
|
5
5
|
try {
|
|
6
6
|
for (const scope of scopes) {
|
|
7
|
-
await dependencies.runSync({
|
|
7
|
+
await dependencies.runSync({
|
|
8
|
+
scope,
|
|
9
|
+
cwd,
|
|
10
|
+
home,
|
|
11
|
+
installedCanonicalPaths: options?.installedCanonicalPaths,
|
|
12
|
+
});
|
|
8
13
|
}
|
|
9
14
|
logger.info('Auto-sync completed.');
|
|
10
15
|
return { synced: true, scopes, error: null };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PackName } from '../../tools/shared/types.js';
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
export declare function canonicalSkillPaths(skillNames: readonly string[]): string[];
|
|
4
|
+
export declare function canonicalAgentPaths(agentNames: readonly string[]): string[];
|
|
5
|
+
export declare function canonicalPathsForPack(pack: PackName): string[];
|
|
6
|
+
export declare function canonicalPathsForPacks(packs: readonly PackName[]): string[];
|
|
7
|
+
export declare function setInstalledCanonicalPaths(command: Command, canonicalPaths: readonly string[]): void;
|
|
8
|
+
export declare function getInstalledCanonicalPaths(command: Command): string[];
|
|
9
|
+
//# sourceMappingURL=install-sync-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-sync-context.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/shared/install-sync-context.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI3E;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAuB9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,EAAE,CAI3E;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,IAAI,CAMN;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAGrE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CORE_SKILLS, DOCS_SKILLS, IDEA_SKILLS, PROJECT_MANAGEMENT_SKILLS, RESEARCH_AGENTS, RESEARCH_SKILLS, UTILITY_SKILLS, WORKFLOW_AGENTS, WORKFLOW_SKILLS, } from '../../init/tools/shared/skill-manifest.js';
|
|
2
|
+
const INSTALL_SYNC_CANONICAL_PATHS = Symbol('oat.installSyncCanonicalPaths');
|
|
3
|
+
function uniqueCanonicalPaths(paths) {
|
|
4
|
+
return [...new Set(paths)];
|
|
5
|
+
}
|
|
6
|
+
export function canonicalSkillPaths(skillNames) {
|
|
7
|
+
return uniqueCanonicalPaths(skillNames.map((skillName) => `.agents/skills/${skillName}`));
|
|
8
|
+
}
|
|
9
|
+
export function canonicalAgentPaths(agentNames) {
|
|
10
|
+
return uniqueCanonicalPaths(agentNames.map((agentName) => `.agents/agents/${agentName}`));
|
|
11
|
+
}
|
|
12
|
+
export function canonicalPathsForPack(pack) {
|
|
13
|
+
switch (pack) {
|
|
14
|
+
case 'core':
|
|
15
|
+
return canonicalSkillPaths(CORE_SKILLS);
|
|
16
|
+
case 'ideas':
|
|
17
|
+
return canonicalSkillPaths(IDEA_SKILLS);
|
|
18
|
+
case 'docs':
|
|
19
|
+
return canonicalSkillPaths(DOCS_SKILLS);
|
|
20
|
+
case 'workflows':
|
|
21
|
+
return uniqueCanonicalPaths([
|
|
22
|
+
...canonicalSkillPaths(WORKFLOW_SKILLS),
|
|
23
|
+
...canonicalAgentPaths(WORKFLOW_AGENTS),
|
|
24
|
+
]);
|
|
25
|
+
case 'utility':
|
|
26
|
+
return canonicalSkillPaths(UTILITY_SKILLS);
|
|
27
|
+
case 'project-management':
|
|
28
|
+
return canonicalSkillPaths(PROJECT_MANAGEMENT_SKILLS);
|
|
29
|
+
case 'research':
|
|
30
|
+
return uniqueCanonicalPaths([
|
|
31
|
+
...canonicalSkillPaths(RESEARCH_SKILLS),
|
|
32
|
+
...canonicalAgentPaths(RESEARCH_AGENTS),
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function canonicalPathsForPacks(packs) {
|
|
37
|
+
return uniqueCanonicalPaths(packs.flatMap((pack) => canonicalPathsForPack(pack)));
|
|
38
|
+
}
|
|
39
|
+
export function setInstalledCanonicalPaths(command, canonicalPaths) {
|
|
40
|
+
Reflect.set(command, INSTALL_SYNC_CANONICAL_PATHS, uniqueCanonicalPaths(canonicalPaths));
|
|
41
|
+
}
|
|
42
|
+
export function getInstalledCanonicalPaths(command) {
|
|
43
|
+
const value = Reflect.get(command, INSTALL_SYNC_CANONICAL_PATHS);
|
|
44
|
+
return Array.isArray(value) ? uniqueCanonicalPaths(value) : [];
|
|
45
|
+
}
|
|
@@ -10,7 +10,8 @@ interface ComputeSyncPlanArgs {
|
|
|
10
10
|
scope: EngineScope;
|
|
11
11
|
config: SyncConfig;
|
|
12
12
|
scopeRoot?: string;
|
|
13
|
+
allowedRemovalCanonicalPaths?: string[];
|
|
13
14
|
}
|
|
14
|
-
export declare function computeSyncPlan({ canonical, adapters, manifest, scope, config, scopeRoot: explicitScopeRoot, }: ComputeSyncPlanArgs): Promise<SyncPlan>;
|
|
15
|
+
export declare function computeSyncPlan({ canonical, adapters, manifest, scope, config, scopeRoot: explicitScopeRoot, allowedRemovalCanonicalPaths, }: ComputeSyncPlanArgs): Promise<SyncPlan>;
|
|
15
16
|
export {};
|
|
16
17
|
//# sourceMappingURL=compute-plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-plan.d.ts","sourceRoot":"","sources":["../../src/engine/compute-plan.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIvE,OAAO,KAAK,EACV,WAAW,EAEX,QAAQ,EAET,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"compute-plan.d.ts","sourceRoot":"","sources":["../../src/engine/compute-plan.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIvE,OAAO,KAAK,EACV,WAAW,EAEX,QAAQ,EAET,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;CACzC;AAoPD,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,SAAS,EAAE,iBAAiB,EAC5B,4BAA4B,GAC7B,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsHzC"}
|
|
@@ -168,12 +168,15 @@ function resolveScopeRoot(canonical, explicitScopeRoot) {
|
|
|
168
168
|
function entryContentTypeMatches(entry, contentType) {
|
|
169
169
|
return entry.type === contentType;
|
|
170
170
|
}
|
|
171
|
-
export async function computeSyncPlan({ canonical, adapters, manifest, scope, config, scopeRoot: explicitScopeRoot, }) {
|
|
171
|
+
export async function computeSyncPlan({ canonical, adapters, manifest, scope, config, scopeRoot: explicitScopeRoot, allowedRemovalCanonicalPaths, }) {
|
|
172
172
|
const entries = [];
|
|
173
173
|
const removals = [];
|
|
174
174
|
const scopeRoot = resolveScopeRoot(canonical, explicitScopeRoot);
|
|
175
175
|
const seenCanonicalKeys = new Set();
|
|
176
176
|
const activeProviderNames = new Set();
|
|
177
|
+
const removalFilter = allowedRemovalCanonicalPaths
|
|
178
|
+
? new Set(allowedRemovalCanonicalPaths.map((canonicalPath) => normalize(canonicalPath)))
|
|
179
|
+
: null;
|
|
177
180
|
for (const adapter of adapters) {
|
|
178
181
|
for (const mapping of getSyncMappings(adapter, scope)) {
|
|
179
182
|
const mappingStrategy = resolveStrategy(adapter, config, Boolean(mapping.transformCanonical));
|
|
@@ -228,6 +231,10 @@ export async function computeSyncPlan({ canonical, adapters, manifest, scope, co
|
|
|
228
231
|
if (seenCanonicalKeys.has(canonicalKey)) {
|
|
229
232
|
continue;
|
|
230
233
|
}
|
|
234
|
+
if (removalFilter &&
|
|
235
|
+
!removalFilter.has(normalize(manifestEntry.canonicalPath))) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
231
238
|
removals.push(createRemovalEntry(manifestEntry, scopeRoot));
|
|
232
239
|
}
|
|
233
240
|
return { scope, entries, removals };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"ora": "^9.0.0",
|
|
34
34
|
"yaml": "2.8.2",
|
|
35
35
|
"zod": "^3.25.76",
|
|
36
|
-
"@open-agent-toolkit/control-plane": "0.0.
|
|
36
|
+
"@open-agent-toolkit/control-plane": "0.0.36"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.10.0",
|