@open-agent-toolkit/cli 0.0.33 → 0.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/docs/cli-utilities/tool-packs.md +3 -0
- package/assets/docs/provider-sync/manifest-and-drift.md +2 -0
- package/assets/docs/workflows/projects/lifecycle.md +1 -1
- package/assets/docs/workflows/skills/index.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-docs/SKILL.md +5 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +9 -3
- 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.map +1 -1
- package/dist/commands/init/tools/index.js +3 -1
- 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 +1 -1
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +17 -5
- 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/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +9 -0
- package/package.json +2 -2
|
@@ -77,6 +77,7 @@ Key behavior:
|
|
|
77
77
|
- Records installed pack state in shared repo config as `tools.<pack>: true` so other OAT workflows can detect installed capabilities without relying on filesystem heuristics
|
|
78
78
|
- Interactive runs can prompt to update selected outdated skills
|
|
79
79
|
- Auto-sync runs automatically after successful install (provider views are updated)
|
|
80
|
+
- Install-triggered auto-sync limits removal planning to the canonical entries from the pack that was just installed, so stale manifest drift in unrelated packs does not delete other provider views
|
|
80
81
|
- Use `--no-sync` to skip auto-sync
|
|
81
82
|
|
|
82
83
|
### `oat tools update`
|
|
@@ -164,6 +165,8 @@ All mutation commands (`install`, `update`, `remove`) automatically run `oat syn
|
|
|
164
165
|
|
|
165
166
|
Use `--no-sync` on any mutation command to skip this step.
|
|
166
167
|
|
|
168
|
+
For `oat tools install`, the follow-up sync still refreshes provider views immediately, but its removal pass is scoped to the canonical entries that were just installed. This avoids deleting unrelated provider views when a worktree has stale manifest entries for packs whose canonical content is absent locally.
|
|
169
|
+
|
|
167
170
|
## Legacy commands
|
|
168
171
|
|
|
169
172
|
### `oat init tools`
|
|
@@ -26,6 +26,8 @@ Tracks managed mappings so the CLI can:
|
|
|
26
26
|
- avoid deleting unmanaged provider content
|
|
27
27
|
- execute scoped removals only for managed entries
|
|
28
28
|
|
|
29
|
+
Install-triggered auto-sync narrows that removal scope further: after `oat tools install <pack>`, the follow-up sync only plans removals for canonical entries from the installed pack. This protects unrelated provider views if the current worktree has stale manifest entries for other packs whose canonical assets are missing locally.
|
|
30
|
+
|
|
29
31
|
For transformed mappings such as project-scoped rules, the manifest stores hashes for the rendered provider output that was actually written, not the canonical source markdown. This keeps drift detection aligned with the on-disk managed file.
|
|
30
32
|
|
|
31
33
|
## Drift states
|
|
@@ -104,7 +104,7 @@ When `autoReviewAtCheckpoints` is enabled (via `.oat/config.json` or `plan.md` f
|
|
|
104
104
|
|
|
105
105
|
### Quick lane diagram
|
|
106
106
|
|
|
107
|
-
1. `oat-project-quick-start` (adaptive discovery —
|
|
107
|
+
1. `oat-project-quick-start` (adaptive discovery — provide a project name and optional description; if only the name is provided, quick-start asks for the missing description before discovery. Well-understood requests synthesize quickly, exploratory requests invest in solution space exploration)
|
|
108
108
|
2. Decision point: straight to plan, optional lightweight `design.md`, or promote to spec-driven
|
|
109
109
|
3. Implement:
|
|
110
110
|
- `oat-project-implement` (sequential)
|
|
@@ -14,7 +14,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
|
|
|
14
14
|
|
|
15
15
|
## Key Skills by Use Case
|
|
16
16
|
|
|
17
|
-
- Start a new tracked project: `oat-project-new` or `oat-project-quick-start`
|
|
17
|
+
- Start a new tracked project: `oat-project-new` or `oat-project-quick-start` (quick start accepts a project name plus optional description; if you omit the description it should ask before discovery begins)
|
|
18
18
|
- Resume an existing project: `oat-project-open` and `oat-project-progress`
|
|
19
19
|
- Execute a ready plan: `oat-project-implement`
|
|
20
20
|
- Import an existing plan: `oat-project-import-plan`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-docs
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
description: Use when a user asks questions about OAT workflows, CLI commands, skill authoring, configuration, or project lifecycle. Answers questions by reading locally-bundled OAT documentation.
|
|
5
5
|
argument-hint: '[question]'
|
|
6
6
|
disable-model-invocation: false
|
|
@@ -161,13 +161,15 @@ Would you like me to:
|
|
|
161
161
|
To create a new OAT project, you have two main approaches:
|
|
162
162
|
|
|
163
163
|
1. **Quick mode** (recommended for most tasks):
|
|
164
|
-
oat-project-quick-start <project-name>
|
|
164
|
+
oat-project-quick-start <project-name> "project description"
|
|
165
165
|
|
|
166
166
|
2. **Spec-driven mode** (for complex features):
|
|
167
167
|
oat-project-new <project-name>
|
|
168
168
|
|
|
169
169
|
Quick mode goes straight from discovery to plan. Spec-driven mode adds
|
|
170
|
-
formal spec and design phases.
|
|
170
|
+
formal spec and design phases. If you invoke quick mode with only a
|
|
171
|
+
project name, it should ask you for the missing project description
|
|
172
|
+
before discovery starts.
|
|
171
173
|
|
|
172
174
|
Both create a project directory under your projects root
|
|
173
175
|
(default: .oat/projects/shared/<project-name>/) with standard artifacts:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.3
|
|
4
4
|
description: Use when a task is small enough for quick mode or rapid iteration is preferred. Scaffolds a lightweight OAT project from discovery directly to a runnable plan, with optional brainstorming and lightweight design.
|
|
5
|
-
argument-hint: '<project-name>'
|
|
5
|
+
argument-hint: '<project-name> ["project description"]'
|
|
6
6
|
disable-model-invocation: true
|
|
7
7
|
user-invocable: true
|
|
8
8
|
allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
|
|
@@ -83,7 +83,11 @@ PROJECTS_ROOT="${PROJECTS_ROOT%/}"
|
|
|
83
83
|
|
|
84
84
|
If no valid active project exists:
|
|
85
85
|
|
|
86
|
-
-
|
|
86
|
+
- Resolve startup input from `$ARGUMENTS` before doing any discovery work:
|
|
87
|
+
- Accept `{project-name}` plus an optional `{project-description}`.
|
|
88
|
+
- If `$ARGUMENTS` contains only a bare `{project-name}` (for example a slug or short title) without a substantive description, ask the user for a short project description before scanning the repo or drafting discovery.
|
|
89
|
+
- Do not infer requirements from the project name alone or go exploring the codebase to guess what the project means.
|
|
90
|
+
- If neither field is available, ask for both the project name and a short project description. One or two sentences is enough for the description.
|
|
87
91
|
- Create project via the same scaffolding path used by `oat-project-new`:
|
|
88
92
|
|
|
89
93
|
```bash
|
|
@@ -116,6 +120,8 @@ If `"$PROJECT_PATH/discovery.md"` is missing, create it from `.oat/templates/dis
|
|
|
116
120
|
|
|
117
121
|
Before asking questions, classify the request:
|
|
118
122
|
|
|
123
|
+
- Base this classification on the user's project description plus session context. A bare project name by itself is not enough context to start discovery.
|
|
124
|
+
|
|
119
125
|
- **Well-understood** — the user has a clear mental model, requirements are specific, approach is obvious. Examples: "add a CLI flag for verbose output", "rename X to Y across the codebase."
|
|
120
126
|
→ Synthesize `discovery.md` from available session context quickly when enough detail is already available. Ask only the minimum additional questions needed to remove blockers for a quality plan.
|
|
121
127
|
|
|
@@ -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;
|
|
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,CAkBT"}
|
|
@@ -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 { resolveScopeRoot } from '../../../../fs/paths.js';
|
|
5
6
|
import { Command } from 'commander';
|
|
@@ -39,6 +40,7 @@ async function runInitToolsCore(context, options, dependencies) {
|
|
|
39
40
|
});
|
|
40
41
|
reportSuccess(context, targetRoot, result);
|
|
41
42
|
process.exitCode = 0;
|
|
43
|
+
return true;
|
|
42
44
|
}
|
|
43
45
|
catch (error) {
|
|
44
46
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -49,6 +51,7 @@ async function runInitToolsCore(context, options, dependencies) {
|
|
|
49
51
|
context.logger.error(message);
|
|
50
52
|
}
|
|
51
53
|
process.exitCode = 1;
|
|
54
|
+
return false;
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
export { CORE_SKILLS };
|
|
@@ -62,6 +65,9 @@ export function createInitToolsCoreCommand(overrides = {}) {
|
|
|
62
65
|
.option('--force', 'Overwrite existing files where applicable')
|
|
63
66
|
.action(async (options, command) => {
|
|
64
67
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
65
|
-
await runInitToolsCore(context, options, dependencies);
|
|
68
|
+
const didInstall = await runInitToolsCore(context, options, dependencies);
|
|
69
|
+
if (didInstall) {
|
|
70
|
+
setInstalledCanonicalPaths(command, canonicalPathsForPack('core'));
|
|
71
|
+
}
|
|
66
72
|
});
|
|
67
73
|
}
|
|
@@ -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;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/docs/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,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,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';
|
|
@@ -37,7 +38,7 @@ function reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, r
|
|
|
37
38
|
context.logger.info(`Scripts: copied=${result.copiedScripts.length}, updated=${result.updatedScripts.length}, skipped=${result.skippedScripts.length}`);
|
|
38
39
|
context.logger.info(`Run: oat sync --scope ${scope}`);
|
|
39
40
|
}
|
|
40
|
-
async function runInitToolsDocs(context, options, dependencies) {
|
|
41
|
+
async function runInitToolsDocs(context, options, dependencies, command) {
|
|
41
42
|
try {
|
|
42
43
|
const scope = resolveScope(context);
|
|
43
44
|
const targetRoot = scope === 'project'
|
|
@@ -81,6 +82,7 @@ async function runInitToolsDocs(context, options, dependencies) {
|
|
|
81
82
|
skills: selectedSkills,
|
|
82
83
|
force: options.force,
|
|
83
84
|
});
|
|
85
|
+
setInstalledCanonicalPaths(command, canonicalSkillPaths(selectedSkills));
|
|
84
86
|
reportSuccess(context, scope, targetRoot, assetsRoot, selectedSkills, result);
|
|
85
87
|
process.exitCode = 0;
|
|
86
88
|
}
|
|
@@ -105,6 +107,6 @@ export function createInitToolsDocsCommand(overrides = {}) {
|
|
|
105
107
|
.option('--force', 'Overwrite existing files where applicable')
|
|
106
108
|
.action(async (options, command) => {
|
|
107
109
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
108
|
-
await runInitToolsDocs(context, options, dependencies);
|
|
110
|
+
await runInitToolsDocs(context, options, dependencies, command);
|
|
109
111
|
});
|
|
110
112
|
}
|
|
@@ -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;AAC9B,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,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;AAC9B,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,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, resolveScopeRoot } from '../../../../fs/paths.js';
|
|
6
7
|
import { Command } from 'commander';
|
|
@@ -56,7 +57,7 @@ async function runInitToolsIdeas(context, options, dependencies) {
|
|
|
56
57
|
context.logger.info('Cancelled: no files were overwritten.');
|
|
57
58
|
}
|
|
58
59
|
process.exitCode = 0;
|
|
59
|
-
return;
|
|
60
|
+
return false;
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
const assetsRoot = await dependencies.resolveAssetsRoot();
|
|
@@ -67,6 +68,7 @@ async function runInitToolsIdeas(context, options, dependencies) {
|
|
|
67
68
|
});
|
|
68
69
|
reportSuccess(context, scope, targetRoot, assetsRoot, result);
|
|
69
70
|
process.exitCode = 0;
|
|
71
|
+
return true;
|
|
70
72
|
}
|
|
71
73
|
catch (error) {
|
|
72
74
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -77,6 +79,7 @@ async function runInitToolsIdeas(context, options, dependencies) {
|
|
|
77
79
|
context.logger.error(message);
|
|
78
80
|
}
|
|
79
81
|
process.exitCode = 1;
|
|
82
|
+
return false;
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
export function createInitToolsIdeasCommand(overrides = {}) {
|
|
@@ -89,6 +92,9 @@ export function createInitToolsIdeasCommand(overrides = {}) {
|
|
|
89
92
|
.option('--force', 'Overwrite existing files where applicable')
|
|
90
93
|
.action(async (options, command) => {
|
|
91
94
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
92
|
-
await runInitToolsIdeas(context, options, dependencies);
|
|
95
|
+
const didInstall = await runInitToolsIdeas(context, options, dependencies);
|
|
96
|
+
if (didInstall) {
|
|
97
|
+
setInstalledCanonicalPaths(command, canonicalPathsForPack('ideas'));
|
|
98
|
+
}
|
|
93
99
|
});
|
|
94
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EAGlB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { addLocalPaths } from '../../local/manage.js';
|
|
|
6
6
|
import { removeAgentsMdSection, upsertAgentsMdSection, } from '../../shared/agents-md.js';
|
|
7
7
|
import { selectManyWithAbort, selectWithAbort, } from '../../shared/shared.prompts.js';
|
|
8
8
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
9
|
+
import { canonicalPathsForPacks, setInstalledCanonicalPaths, } from '../../tools/shared/install-sync-context.js';
|
|
9
10
|
import { readOatConfig, resolveLocalPaths, writeOatConfig, } from '../../../config/oat-config.js';
|
|
10
11
|
import { resolveAssetsRoot } from '../../../fs/assets.js';
|
|
11
12
|
import { resolveProjectRoot, resolveScopeRoot } from '../../../fs/paths.js';
|
|
@@ -389,6 +390,7 @@ export function createInitToolsCommand(overrides = {}) {
|
|
|
389
390
|
.addCommand(createInitToolsResearchCommand())
|
|
390
391
|
.action(async (_options, command) => {
|
|
391
392
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
392
|
-
await runInitTools(context, dependencies);
|
|
393
|
+
const selectedPacks = await runInitTools(context, dependencies);
|
|
394
|
+
setInstalledCanonicalPaths(command, canonicalPathsForPacks(selectedPacks));
|
|
393
395
|
});
|
|
394
396
|
}
|
|
@@ -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;
|
|
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,CAmET"}
|
|
@@ -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,4 @@
|
|
|
1
1
|
import { type AutoSyncDependencies } from '../../tools/shared/auto-sync.js';
|
|
2
2
|
import type { Command } from 'commander';
|
|
3
|
-
export declare function createToolsInstallCommand(syncDependencies?: AutoSyncDependencies): Command;
|
|
3
|
+
export declare function createToolsInstallCommand(syncDependencies?: AutoSyncDependencies, createBaseCommand?: () => Command): Command;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/install/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/tools/install/index.ts"],"names":[],"mappings":"AAQA,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,iBAAiB,GAAE,MAAM,OAAgC,GACxD,OAAO,CA2BT"}
|
|
@@ -3,10 +3,21 @@ import { buildCommandContext } from '../../../app/command-context.js';
|
|
|
3
3
|
import { 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,8 @@ const defaultSyncDependencies = {
|
|
|
15
26
|
});
|
|
16
27
|
},
|
|
17
28
|
};
|
|
18
|
-
export function createToolsInstallCommand(syncDependencies = defaultSyncDependencies) {
|
|
19
|
-
const cmd =
|
|
29
|
+
export function createToolsInstallCommand(syncDependencies = defaultSyncDependencies, createBaseCommand = createInitToolsCommand) {
|
|
30
|
+
const cmd = createBaseCommand();
|
|
20
31
|
cmd.name('install');
|
|
21
32
|
cmd.option('--no-sync', 'Skip auto-sync after install');
|
|
22
33
|
cmd.hook('postAction', async (thisCommand, actionCommand) => {
|
|
@@ -28,7 +39,8 @@ export function createToolsInstallCommand(syncDependencies = defaultSyncDependen
|
|
|
28
39
|
const globalOptions = readGlobalOptions(actionCommand);
|
|
29
40
|
const context = buildCommandContext(globalOptions);
|
|
30
41
|
const scopes = resolveConcreteScopes(context.scope);
|
|
31
|
-
|
|
42
|
+
const installedCanonicalPaths = getInstallSyncCanonicalPaths(actionCommand);
|
|
43
|
+
await autoSync(scopes, context.cwd, context.home, context.logger, syncDependencies, { installedCanonicalPaths });
|
|
32
44
|
});
|
|
33
45
|
return cmd;
|
|
34
46
|
}
|
|
@@ -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 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/validation/skills.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,UAAU,6BAA6B;IACrC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/validation/skills.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,UAAU,6BAA6B;IACrC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAmPD,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uCAAuC,EAChD,YAAY,GAAE,6BAAkC,GAC/C,OAAO,CAAC,sCAAsC,CAAC,CAoBjD;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,wBAA6B,EACtC,YAAY,GAAE,6BAAkC,GAC/C,OAAO,CAAC,uBAAuB,CAAC,CA6HlC"}
|
|
@@ -77,6 +77,15 @@ function validateQuickStartSemantics(skillPath, content, findings) {
|
|
|
77
77
|
message: 'Quick-start must limit follow-up questions to the minimum needed to remove blockers',
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
+
if (!(/(project description|project brief)/i.test(content) &&
|
|
81
|
+
/(project name alone|bare .*project-name|only a bare .*project-name)/i.test(content) &&
|
|
82
|
+
/(ask the user|ask for)/i.test(content) &&
|
|
83
|
+
/(do not infer requirements from the project name alone|not enough context to start discovery)/i.test(content))) {
|
|
84
|
+
findings.push({
|
|
85
|
+
file: skillPath,
|
|
86
|
+
message: 'Quick-start must treat a bare project name as insufficient input, ask for a project description, and avoid inferring scope from the repo',
|
|
87
|
+
});
|
|
88
|
+
}
|
|
80
89
|
}
|
|
81
90
|
async function listChangedSkillFiles(repoRoot, baseRef, dependencies) {
|
|
82
91
|
const execFile = dependencies.gitExecFile ?? execFileAsync;
|
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.35",
|
|
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.35"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.10.0",
|