@open-agent-toolkit/cli 0.1.74 → 0.2.0
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/configuration.md +18 -12
- package/assets/docs/cli-utilities/tool-packs.md +1 -1
- package/assets/docs/provider-sync/commands.md +26 -0
- package/assets/docs/provider-sync/config.md +17 -6
- package/assets/docs/provider-sync/index.md +17 -5
- package/assets/docs/provider-sync/manifest-and-drift.md +39 -1
- package/assets/docs/provider-sync/providers.md +8 -2
- package/assets/docs/provider-sync/scope-and-surface.md +5 -1
- package/assets/docs/reference/file-locations.md +9 -3
- package/assets/docs/reference/oat-directory-structure.md +11 -3
- package/assets/docs/reference/troubleshooting.md +11 -0
- package/assets/docs/workflows/index.md +1 -0
- package/assets/docs/workflows/skills/index.md +3 -0
- package/assets/docs/workflows/wave-workflows.md +77 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/create-agnostic-skill/SKILL.md +1 -1
- package/assets/skills/create-agnostic-skill/references/docs/skills-guide.md +24 -15
- package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +9 -3
- package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +9 -3
- package/assets/skills/oat-wave-execute/SKILL.md +317 -0
- package/assets/skills/oat-wave-execute/assets/orchestration-log-template.md +54 -0
- package/assets/skills/oat-wave-execute/assets/wrapper-plan-template.md +157 -0
- package/assets/skills/oat-wave-execute/scripts/bootstrap-group.sh +195 -0
- package/assets/skills/oat-wave-program/SKILL.md +109 -0
- package/assets/skills/oat-wave-program/assets/execution-program-template.md +40 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +55 -0
- package/dist/commands/init/index.d.ts +6 -2
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +90 -31
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +2 -1
- package/dist/commands/project/validate-plan/validate-plan.js +1 -1
- package/dist/commands/remove/skill/remove-skill.d.ts +2 -0
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +20 -2
- package/dist/commands/shared/adopt-stray.d.ts.map +1 -1
- package/dist/commands/shared/adopt-stray.js +3 -0
- package/dist/commands/shared/cursor-skill-disposition.d.ts +17 -0
- package/dist/commands/shared/cursor-skill-disposition.d.ts.map +1 -0
- package/dist/commands/shared/cursor-skill-disposition.js +41 -0
- package/dist/commands/status/index.d.ts +10 -4
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +99 -31
- package/dist/config/oat-config.d.ts +0 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +26 -23
- package/dist/config/sync-config.d.ts +6 -2
- package/dist/config/sync-config.d.ts.map +1 -1
- package/dist/config/sync-config.js +18 -6
- package/dist/config/user-sync-config.d.ts +11 -0
- package/dist/config/user-sync-config.d.ts.map +1 -0
- package/dist/config/user-sync-config.js +61 -0
- package/dist/drift/strays.d.ts +1 -1
- package/dist/drift/strays.d.ts.map +1 -1
- package/dist/drift/strays.js +2 -1
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +154 -4
- package/dist/engine/engine.types.d.ts +2 -2
- package/dist/engine/engine.types.d.ts.map +1 -1
- package/dist/engine/engine.types.js +1 -0
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +4 -0
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +6 -2
- package/dist/manifest/manifest.types.d.ts +12 -12
- package/dist/providers/cursor/paths.d.ts.map +1 -1
- package/dist/providers/cursor/paths.js +6 -4
- package/dist/providers/shared/adapter.types.d.ts +6 -0
- package/dist/providers/shared/adapter.types.d.ts.map +1 -1
- package/dist/providers/shared/adapter.utils.d.ts +2 -1
- package/dist/providers/shared/adapter.utils.d.ts.map +1 -1
- package/dist/providers/shared/adapter.utils.js +29 -6
- package/package.json +2 -2
|
@@ -7,12 +7,14 @@ import { applyGitignore } from '../local/apply.js';
|
|
|
7
7
|
import { addLocalPaths } from '../local/manage.js';
|
|
8
8
|
import { adoptStrayToCanonical, isAdoptionConflictError, } from '../shared/adopt-stray.js';
|
|
9
9
|
import { detectCodexRoleStrays, filterMaterializationManagedStrays, regenerateCodexAfterAdoption, } from '../shared/codex-strays.js';
|
|
10
|
+
import { applyCursorSkillDisposition, isCursorSkillCandidate, } from '../shared/cursor-skill-disposition.js';
|
|
10
11
|
import { PROVIDER_CONFIG_REMEDIATION } from '../shared/messages.js';
|
|
11
12
|
import { withScopeOption } from '../shared/scope-option.js';
|
|
12
13
|
import { confirmAction, inputWithDefault, selectManyWithAbort, selectWithAbort, } from '../shared/shared.prompts.js';
|
|
13
14
|
import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.utils.js';
|
|
14
15
|
import { DEFAULT_SYNC_CONFIG, loadSyncConfig, saveSyncConfig, } from '../../config/index.js';
|
|
15
|
-
import { detectDefaultBranch,
|
|
16
|
+
import { detectDefaultBranch, readOatConfig, resolveLocalPaths, writeOatConfig, } from '../../config/oat-config.js';
|
|
17
|
+
import { resolveUserSyncConfig } from '../../config/user-sync-config.js';
|
|
16
18
|
import { detectStrays, filterKnownStrays, } from '../../drift/index.js';
|
|
17
19
|
import { configureLocalHooksPath, getHookInstallInfo, installHook, isHookInstalled, scanBundledManagedAgents, scanCanonical, uninstallHook, } from '../../engine/index.js';
|
|
18
20
|
import { dirExists, fileExists } from '../../fs/io.js';
|
|
@@ -26,7 +28,8 @@ import { copilotAdapter } from '../../providers/copilot/index.js';
|
|
|
26
28
|
import { cursorAdapter } from '../../providers/cursor/index.js';
|
|
27
29
|
import { applyCursorProjectExtensionPlan, computeCursorProjectExtensionPlan, } from '../../providers/cursor/codec/sync-extension.js';
|
|
28
30
|
import { geminiAdapter } from '../../providers/gemini/index.js';
|
|
29
|
-
import { getActiveAdapters, getConfigAwareAdapters,
|
|
31
|
+
import { getActiveAdapters, getConfigAwareAdapters, } from '../../providers/shared/index.js';
|
|
32
|
+
import { getAdoptionSources } from '../../providers/shared/adapter.utils.js';
|
|
30
33
|
import { Command } from 'commander';
|
|
31
34
|
import { detectExistingDocs, } from './detect-docs.js';
|
|
32
35
|
import { createInitToolsCommand, runInitToolsWithDefaults, } from './tools/index.js';
|
|
@@ -83,10 +86,10 @@ async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries
|
|
|
83
86
|
...(cursorExtensionPlan ? [cursorExtensionPlan] : []),
|
|
84
87
|
];
|
|
85
88
|
for (const adapter of adaptersToScan) {
|
|
86
|
-
const
|
|
87
|
-
for (const
|
|
88
|
-
const providerDir = join(scopeRoot,
|
|
89
|
-
const strays = filterMaterializationManagedStrays((await detectStrays(adapter.name, providerDir, manifest, canonicalEntries, mapping)).map((report) => ({ provider: adapter.name, report })), materializationPlans).map((candidate) => candidate.report);
|
|
89
|
+
const adoptionSources = getAdoptionSources(adapter, scope);
|
|
90
|
+
for (const source of adoptionSources) {
|
|
91
|
+
const providerDir = join(scopeRoot, source.directory);
|
|
92
|
+
const strays = filterMaterializationManagedStrays((await detectStrays(adapter.name, providerDir, manifest, canonicalEntries, source.mapping)).map((report) => ({ provider: adapter.name, report })), materializationPlans).map((candidate) => candidate.report);
|
|
90
93
|
for (const report of strays) {
|
|
91
94
|
if (report.state.status !== 'stray') {
|
|
92
95
|
continue;
|
|
@@ -94,7 +97,7 @@ async function collectStraysDefault(scopeRoot, scope, manifest, canonicalEntries
|
|
|
94
97
|
candidates.push({
|
|
95
98
|
provider: adapter.name,
|
|
96
99
|
report,
|
|
97
|
-
mapping,
|
|
100
|
+
mapping: source.mapping,
|
|
98
101
|
});
|
|
99
102
|
}
|
|
100
103
|
}
|
|
@@ -158,7 +161,7 @@ function createDependencies() {
|
|
|
158
161
|
async loadSyncConfig(configPath) {
|
|
159
162
|
return loadSyncConfig(configPath, DEFAULT_SYNC_CONFIG);
|
|
160
163
|
},
|
|
161
|
-
|
|
164
|
+
resolveUserSyncConfig,
|
|
162
165
|
saveSyncConfig,
|
|
163
166
|
getConfigAwareAdapters,
|
|
164
167
|
applyOatCoreGitignore,
|
|
@@ -173,6 +176,7 @@ function createDependencies() {
|
|
|
173
176
|
fileExists,
|
|
174
177
|
inputWithDefault,
|
|
175
178
|
selectWithAbort,
|
|
179
|
+
applyCursorSkillDisposition,
|
|
176
180
|
runGuidedSetup: runGuidedSetupImpl,
|
|
177
181
|
runToolPacks: runInitToolsWithDefaults,
|
|
178
182
|
async runProviderSync(projectRoot) {
|
|
@@ -454,12 +458,13 @@ async function runInitCommand(context, dependencies, hookFlag, setupFlag) {
|
|
|
454
458
|
let projectRoot = null;
|
|
455
459
|
let oatDirExistedBefore = true;
|
|
456
460
|
const scopeSummaries = [];
|
|
461
|
+
let migrationAborted = false;
|
|
457
462
|
for (const scope of scopes) {
|
|
458
463
|
const scopeRoot = await dependencies.resolveScopeRoot(scope, context);
|
|
459
464
|
const syncConfigPath = join(scopeRoot, '.oat', 'sync', 'config.json');
|
|
460
465
|
const userConfigDir = join(context.home, '.oat');
|
|
461
466
|
let syncConfig = await dependencies.loadSyncConfig(syncConfigPath);
|
|
462
|
-
const
|
|
467
|
+
const userSyncConfig = await dependencies.resolveUserSyncConfig(userConfigDir);
|
|
463
468
|
let activeAdaptersForStrays;
|
|
464
469
|
if (scope === 'project') {
|
|
465
470
|
projectRoot = scopeRoot;
|
|
@@ -514,45 +519,99 @@ async function runInitCommand(context, dependencies, hookFlag, setupFlag) {
|
|
|
514
519
|
candidates: collectedStrays,
|
|
515
520
|
knownStrays: {
|
|
516
521
|
project: syncConfig.knownStrays,
|
|
517
|
-
user:
|
|
522
|
+
user: userSyncConfig.knownStrays,
|
|
518
523
|
},
|
|
519
524
|
});
|
|
520
525
|
let straysAdopted = 0;
|
|
526
|
+
let codexStrayAdopted = false;
|
|
527
|
+
const cursorSkillStrays = strays.filter(isCursorSkillCandidate);
|
|
528
|
+
const ordinaryStrays = strays.filter((stray) => !isCursorSkillCandidate(stray));
|
|
521
529
|
if (!context.interactive && strays.length > 0) {
|
|
522
530
|
context.logger.warn(ADOPT_REMEDIATION);
|
|
523
531
|
}
|
|
524
|
-
if (context.interactive && strays.length > 0) {
|
|
525
|
-
const
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
532
|
+
if (context.interactive && strays.length > 0 && !migrationAborted) {
|
|
533
|
+
for (const stray of cursorSkillStrays) {
|
|
534
|
+
const disposition = await dependencies.selectWithAbort(`Migrate Cursor skill [${scope}]: ${formatPathForScope(scope, stray.report.providerPath)}`, [
|
|
535
|
+
{
|
|
536
|
+
label: 'Adopt into canonical',
|
|
537
|
+
value: 'adopt',
|
|
538
|
+
description: `Move to ${stray.mapping.canonicalDir}.`,
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
label: 'Keep Cursor-only',
|
|
542
|
+
value: 'keep',
|
|
543
|
+
description: 'Leave in .cursor/skills and remember this choice.',
|
|
544
|
+
},
|
|
545
|
+
], { interactive: context.interactive });
|
|
546
|
+
if (disposition === null) {
|
|
547
|
+
migrationAborted = true;
|
|
548
|
+
break;
|
|
536
549
|
}
|
|
537
550
|
try {
|
|
538
|
-
manifest = await dependencies.
|
|
539
|
-
|
|
540
|
-
|
|
551
|
+
manifest = await dependencies.applyCursorSkillDisposition(scopeRoot, stray, manifest, disposition, syncConfigPath);
|
|
552
|
+
if (disposition === 'adopt') {
|
|
553
|
+
straysAdopted += 1;
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
context.logger.success(`Kept Cursor-only [${scope}]: ${formatPathForScope(scope, stray.report.providerPath)}.`);
|
|
557
|
+
}
|
|
541
558
|
}
|
|
542
559
|
catch (error) {
|
|
543
|
-
if (
|
|
560
|
+
if (error instanceof Error &&
|
|
561
|
+
error.message.startsWith('Cannot keep ')) {
|
|
562
|
+
context.logger.warn(error.message);
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
if (!isAdoptionConflictError(error) || disposition !== 'adopt') {
|
|
544
566
|
throw error;
|
|
545
567
|
}
|
|
546
568
|
const shouldReplace = await dependencies.confirmAction(`Conflict detected for ${formatPathForScope(scope, stray.report.providerPath)}. Replace canonical content with stray content?`, { interactive: context.interactive });
|
|
547
569
|
if (!shouldReplace) {
|
|
548
|
-
context.logger.warn(`Skipped conflicting
|
|
570
|
+
context.logger.warn(`Skipped conflicting Cursor skill [${scope}]: ${formatPathForScope(scope, stray.report.providerPath)}`);
|
|
549
571
|
continue;
|
|
550
572
|
}
|
|
551
|
-
manifest = await dependencies.
|
|
552
|
-
replaceCanonical: true,
|
|
553
|
-
});
|
|
573
|
+
manifest = await dependencies.applyCursorSkillDisposition(scopeRoot, stray, manifest, disposition, syncConfigPath, { replaceCanonical: true });
|
|
554
574
|
straysAdopted += 1;
|
|
555
|
-
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
if (!migrationAborted && ordinaryStrays.length > 0) {
|
|
578
|
+
const selectedValues = await dependencies.selectManyWithAbort(`Select stray entries to adopt [${scope}]`, ordinaryStrays.map((stray, index) => ({
|
|
579
|
+
label: formatStrayChoiceLabel(scope, stray.report.providerPath, stray.provider),
|
|
580
|
+
value: String(index),
|
|
581
|
+
description: formatPathForScope(scope, stray.report.providerPath),
|
|
582
|
+
})), { interactive: context.interactive });
|
|
583
|
+
if (selectedValues === null) {
|
|
584
|
+
migrationAborted = true;
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
const selectedIndices = new Set(selectedValues.map((value) => Number.parseInt(value, 10)));
|
|
588
|
+
for (const [index, stray] of ordinaryStrays.entries()) {
|
|
589
|
+
if (!selectedIndices.has(index)) {
|
|
590
|
+
continue;
|
|
591
|
+
}
|
|
592
|
+
try {
|
|
593
|
+
manifest = await dependencies.adoptStray(scopeRoot, stray, manifest);
|
|
594
|
+
straysAdopted += 1;
|
|
595
|
+
codexStrayAdopted =
|
|
596
|
+
codexStrayAdopted || stray.provider === 'codex';
|
|
597
|
+
}
|
|
598
|
+
catch (error) {
|
|
599
|
+
if (!isAdoptionConflictError(error)) {
|
|
600
|
+
throw error;
|
|
601
|
+
}
|
|
602
|
+
const shouldReplace = await dependencies.confirmAction(`Conflict detected for ${formatPathForScope(scope, stray.report.providerPath)}. Replace canonical content with stray content?`, { interactive: context.interactive });
|
|
603
|
+
if (!shouldReplace) {
|
|
604
|
+
context.logger.warn(`Skipped conflicting stray entry [${scope}]: ${formatPathForScope(scope, stray.report.providerPath)}`);
|
|
605
|
+
continue;
|
|
606
|
+
}
|
|
607
|
+
manifest = await dependencies.adoptStray(scopeRoot, stray, manifest, {
|
|
608
|
+
replaceCanonical: true,
|
|
609
|
+
});
|
|
610
|
+
straysAdopted += 1;
|
|
611
|
+
codexStrayAdopted =
|
|
612
|
+
codexStrayAdopted || stray.provider === 'codex';
|
|
613
|
+
}
|
|
614
|
+
}
|
|
556
615
|
}
|
|
557
616
|
}
|
|
558
617
|
if (codexStrayAdopted && scope === 'project') {
|
|
@@ -11,7 +11,7 @@ export interface PackMetadata {
|
|
|
11
11
|
}
|
|
12
12
|
export declare const PACK_METADATA: Record<string, PackMetadata>;
|
|
13
13
|
export declare function resolvePackDefaultScope(packName: string): 'user' | 'project';
|
|
14
|
-
export declare const WORKFLOW_SKILLS: readonly ["oat-cursor-cloud-projects", "oat-project-autonomous", "oat-project-capture", "oat-project-clear-active", "oat-project-complete", "oat-project-design", "oat-project-dispatch-subagents", "oat-project-discover", "oat-project-document", "oat-project-implement", "oat-project-import-plan", "oat-project-new", "oat-project-next", "oat-project-open", "oat-project-plan", "oat-project-plan-writing", "oat-project-pr-final", "oat-project-pr-progress", "oat-project-progress", "oat-project-promote-spec-driven", "oat-project-quick-start", "oat-project-reconcile", "oat-project-revise", "oat-project-review-provide", "oat-project-review-provide-remote", "oat-project-review-receive", "oat-project-review-receive-remote", "oat-project-spec", "oat-project-split", "oat-project-summary", "oat-repo-knowledge-index", "oat-worktree-bootstrap", "oat-worktree-bootstrap-auto", "oat-wrap-up"];
|
|
14
|
+
export declare const WORKFLOW_SKILLS: readonly ["oat-cursor-cloud-projects", "oat-project-autonomous", "oat-project-capture", "oat-project-clear-active", "oat-project-complete", "oat-project-design", "oat-project-dispatch-subagents", "oat-project-discover", "oat-project-document", "oat-project-implement", "oat-project-import-plan", "oat-project-new", "oat-project-next", "oat-project-open", "oat-project-plan", "oat-project-plan-writing", "oat-project-pr-final", "oat-project-pr-progress", "oat-project-progress", "oat-project-promote-spec-driven", "oat-project-quick-start", "oat-project-reconcile", "oat-project-revise", "oat-project-review-provide", "oat-project-review-provide-remote", "oat-project-review-receive", "oat-project-review-receive-remote", "oat-project-spec", "oat-project-split", "oat-project-summary", "oat-repo-knowledge-index", "oat-worktree-bootstrap", "oat-worktree-bootstrap-auto", "oat-wave-execute", "oat-wave-program", "oat-wrap-up"];
|
|
15
15
|
export declare const WORKFLOW_AGENTS: readonly ["oat-codebase-mapper.md", "oat-phase-implementer.md", "oat-reviewer.md"];
|
|
16
16
|
export declare const WORKFLOW_TEMPLATES: readonly ["state.md", "discovery.md", "spec.md", "design.md", "plan.md", "implementation.md", "summary.md", "project-log.md"];
|
|
17
17
|
export declare const WORKFLOW_SCRIPTS: readonly ["generate-oat-state.sh", "generate-thin-index.sh", "resolve-tracking.sh"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/init/tools/shared/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAKtD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAID,eAAO,MAAM,eAAe,85BAqClB,CAAC;AAEX,eAAO,MAAM,eAAe,oFAIlB,CAAC;AAEX,eAAO,MAAM,kBAAkB,+HASrB,CAAC;AAEX,eAAO,MAAM,gBAAgB,qFAInB,CAAC;AAIX,eAAO,MAAM,WAAW,2FAKd,CAAC;AAIX,eAAO,MAAM,WAAW,qCAAsC,CAAC;AAI/D,eAAO,MAAM,WAAW,iLAQd,CAAC;AAEX,eAAO,MAAM,YAAY,kCAAmC,CAAC;AAI7D,eAAO,MAAM,cAAc,2NASjB,CAAC;AAIX,eAAO,MAAM,yBAAyB,sHAK5B,CAAC;AAEX,eAAO,MAAM,4BAA4B,yIAQ/B,CAAC;AAEX,eAAO,MAAM,0BAA0B,aAAc,CAAC;AAItD,eAAO,MAAM,iBAAiB,6BAA8B,CAAC;AAI7D,eAAO,MAAM,eAAe,2EAMlB,CAAC;AAEX,eAAO,MAAM,eAAe,qCAAsC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,UAAU,+BAA+B;IACvC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;CACjE;AAMD,wBAAgB,gCAAgC,CAC9C,SAAS,GAAE,OAAO,CAAC,+BAA+B,CAAM,GACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/validate-plan/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,UAAU,+BAA+B;IACvC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;CACjE;AAMD,wBAAgB,gCAAgC,CAC9C,SAAS,GAAE,OAAO,CAAC,+BAA+B,CAAM,GACvD,OAAO,CA0ET"}
|
|
@@ -10,7 +10,8 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
10
10
|
export function createProjectValidatePlanCommand(overrides = {}) {
|
|
11
11
|
const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
|
|
12
12
|
return new Command('validate-plan')
|
|
13
|
-
.description('Validate plan.md parallelism metadata against the plan phase list')
|
|
13
|
+
.description('Validate plan.md parallelism metadata against the plan phase list; singleton groups are not allowed — run a solo lane as an ungrouped phase (ungrouped phases execute sequentially in plan order)')
|
|
14
|
+
.summary('Validate plan.md parallelism metadata against the plan phase list')
|
|
14
15
|
.option('--project-path <path>', 'project directory containing plan.md', process.cwd())
|
|
15
16
|
.action((options, command) => {
|
|
16
17
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
@@ -49,7 +49,7 @@ export function validateParallelGroups(groups, phaseIds) {
|
|
|
49
49
|
continue;
|
|
50
50
|
}
|
|
51
51
|
if (group.length < 2) {
|
|
52
|
-
errors.push(`group[${i}] must contain at least 2 phase IDs (singleton groups are not allowed)`);
|
|
52
|
+
errors.push(`group[${i}] must contain at least 2 phase IDs (singleton groups are not allowed — run a solo lane as an ungrouped phase (ungrouped phases execute sequentially in plan order))`);
|
|
53
53
|
}
|
|
54
54
|
for (const phaseId of group) {
|
|
55
55
|
if (typeof phaseId !== 'string') {
|
|
@@ -3,6 +3,7 @@ import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
|
3
3
|
import { type SyncConfig } from '../../../config/sync-config.js';
|
|
4
4
|
import { type Manifest } from '../../../manifest/index.js';
|
|
5
5
|
import { type ConfigAwareAdaptersResult, type PathMapping, type ProviderAdapter } from '../../../providers/shared/index.js';
|
|
6
|
+
import type { AdoptionSource } from '../../../providers/shared/adapter.types.js';
|
|
6
7
|
import type { ConcreteScope, Scope } from '../../../shared/types.js';
|
|
7
8
|
import { Command } from 'commander';
|
|
8
9
|
export interface RemoveSkillDependencies {
|
|
@@ -14,6 +15,7 @@ export interface RemoveSkillDependencies {
|
|
|
14
15
|
getAdapters: () => ProviderAdapter[];
|
|
15
16
|
getConfigAwareAdapters: (adapters: ProviderAdapter[], scopeRoot: string, config: SyncConfig) => Promise<ConfigAwareAdaptersResult>;
|
|
16
17
|
getSyncMappings: (adapter: ProviderAdapter, scope: Scope) => PathMapping[];
|
|
18
|
+
getAdoptionSources: (adapter: ProviderAdapter, scope: Scope) => AdoptionSource[];
|
|
17
19
|
pathExists: (path: string) => Promise<boolean>;
|
|
18
20
|
removeDirectory: (path: string) => Promise<void>;
|
|
19
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skill/remove-skill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,KAAK,yBAAyB,EAG9B,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC1C,cAAc,CAAC;IACpB,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,KACf,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACxC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;IAC3E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,oCAAoC,IAAI,uBAAuB,
|
|
1
|
+
{"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skill/remove-skill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,KAAK,yBAAyB,EAG9B,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC1C,cAAc,CAAC;IACpB,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,KACf,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACxC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;IAC3E,kBAAkB,EAAE,CAClB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,KAAK,KACT,cAAc,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,oCAAoC,IAAI,uBAAuB,CAiC9E;AAuLD,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,uBAAuB,GACpC,OAAO,CAAC,OAAO,CAAC,CAsDlB;AAED,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,OAAO,CAwCT"}
|
|
@@ -13,6 +13,7 @@ import { copilotAdapter } from '../../../providers/copilot/index.js';
|
|
|
13
13
|
import { cursorAdapter } from '../../../providers/cursor/index.js';
|
|
14
14
|
import { geminiAdapter } from '../../../providers/gemini/index.js';
|
|
15
15
|
import { getConfigAwareAdapters, getSyncMappings, } from '../../../providers/shared/index.js';
|
|
16
|
+
import { getAdoptionSources } from '../../../providers/shared/adapter.utils.js';
|
|
16
17
|
import { Command } from 'commander';
|
|
17
18
|
export function createDefaultRemoveSkillDependencies() {
|
|
18
19
|
return {
|
|
@@ -39,6 +40,7 @@ export function createDefaultRemoveSkillDependencies() {
|
|
|
39
40
|
},
|
|
40
41
|
getConfigAwareAdapters,
|
|
41
42
|
getSyncMappings,
|
|
43
|
+
getAdoptionSources,
|
|
42
44
|
async pathExists(path) {
|
|
43
45
|
return (await fileExists(path)) || (await dirExists(path));
|
|
44
46
|
},
|
|
@@ -76,10 +78,10 @@ async function buildScopePlan(scope, scopeRoot, skillName, dependencies) {
|
|
|
76
78
|
const managedProviderViews = [];
|
|
77
79
|
const unmanagedProviderViews = [];
|
|
78
80
|
for (const adapter of activeAdapters) {
|
|
79
|
-
const
|
|
81
|
+
const syncMappings = dependencies
|
|
80
82
|
.getSyncMappings(adapter, scope)
|
|
81
83
|
.filter((mapping) => mapping.contentType === 'skill');
|
|
82
|
-
for (const mapping of
|
|
84
|
+
for (const mapping of syncMappings) {
|
|
83
85
|
const relativePath = join(mapping.providerDir, skillName);
|
|
84
86
|
const absolutePath = join(scopeRoot, relativePath);
|
|
85
87
|
const hasManifestEntry = manifest.entries.some((entry) => entry.canonicalPath === canonicalRelativePath &&
|
|
@@ -101,6 +103,22 @@ async function buildScopePlan(scope, scopeRoot, skillName, dependencies) {
|
|
|
101
103
|
});
|
|
102
104
|
}
|
|
103
105
|
}
|
|
106
|
+
const syncProviderDirs = new Set(syncMappings.map((mapping) => mapping.providerDir));
|
|
107
|
+
const localAdoptionSources = dependencies
|
|
108
|
+
.getAdoptionSources(adapter, scope)
|
|
109
|
+
.filter((source) => source.contentType === 'skill' &&
|
|
110
|
+
!syncProviderDirs.has(source.directory));
|
|
111
|
+
for (const source of localAdoptionSources) {
|
|
112
|
+
const relativePath = join(source.directory, skillName);
|
|
113
|
+
const absolutePath = join(scopeRoot, relativePath);
|
|
114
|
+
if (await dependencies.pathExists(absolutePath)) {
|
|
115
|
+
unmanagedProviderViews.push({
|
|
116
|
+
provider: adapter.name,
|
|
117
|
+
absolutePath,
|
|
118
|
+
relativePath,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
104
122
|
}
|
|
105
123
|
return {
|
|
106
124
|
scope,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-stray.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/adopt-stray.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAEzE;AAWD,wBAAsB,qBAAqB,CACzC,UAAU,SAAS,sBAAsB,EAEzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"adopt-stray.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/adopt-stray.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAEzE;AAWD,wBAAsB,qBAAqB,CACzC,UAAU,SAAS,sBAAsB,EAEzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC,CA8EnB"}
|
|
@@ -53,6 +53,9 @@ export async function adoptStrayToCanonical(scopeRoot, stray, manifest, options
|
|
|
53
53
|
else {
|
|
54
54
|
await rename(providerAbsolutePath, canonicalAbsolutePath);
|
|
55
55
|
}
|
|
56
|
+
if (stray.mapping.nativeRead) {
|
|
57
|
+
return manifest;
|
|
58
|
+
}
|
|
56
59
|
const strategy = await createSymlink(canonicalAbsolutePath, providerAbsolutePath, undefined, isFile);
|
|
57
60
|
const canonicalPath = toPosixPath(relative(scopeRoot, canonicalAbsolutePath));
|
|
58
61
|
const providerPath = toPosixPath(relative(scopeRoot, providerAbsolutePath));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Manifest } from '../../manifest/manifest.types.js';
|
|
2
|
+
import type { PathMapping } from '../../providers/shared/adapter.types.js';
|
|
3
|
+
export type CursorSkillDisposition = 'adopt' | 'keep';
|
|
4
|
+
export interface CursorSkillCandidate {
|
|
5
|
+
provider: string;
|
|
6
|
+
report: {
|
|
7
|
+
providerPath: string;
|
|
8
|
+
};
|
|
9
|
+
mapping: PathMapping;
|
|
10
|
+
}
|
|
11
|
+
interface ApplyCursorSkillDispositionOptions {
|
|
12
|
+
replaceCanonical?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function isCursorSkillCandidate(candidate: CursorSkillCandidate): boolean;
|
|
15
|
+
export declare function applyCursorSkillDisposition(scopeRoot: string, candidate: CursorSkillCandidate, manifest: Manifest, disposition: CursorSkillDisposition, syncConfigPath: string, options?: ApplyCursorSkillDispositionOptions): Promise<Manifest>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=cursor-skill-disposition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-skill-disposition.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/cursor-skill-disposition.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAInE,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,kCAAkC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,oBAAoB,GAC9B,OAAO,CAST;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,sBAAsB,EACnC,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,QAAQ,CAAC,CAcnB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { access } from 'node:fs/promises';
|
|
2
|
+
import { basename, relative, resolve } from 'node:path';
|
|
3
|
+
import { appendKnownStray } from '../../config/sync-config.js';
|
|
4
|
+
import { CliError } from '../../errors/index.js';
|
|
5
|
+
import { toPosixPath } from '../../fs/paths.js';
|
|
6
|
+
import { adoptStrayToCanonical } from './adopt-stray.js';
|
|
7
|
+
export function isCursorSkillCandidate(candidate) {
|
|
8
|
+
const providerPath = toPosixPath(candidate.report.providerPath);
|
|
9
|
+
return (candidate.provider === 'cursor' &&
|
|
10
|
+
candidate.mapping.contentType === 'skill' &&
|
|
11
|
+
candidate.mapping.nativeRead &&
|
|
12
|
+
(providerPath === '.cursor/skills' ||
|
|
13
|
+
providerPath.startsWith('.cursor/skills/')));
|
|
14
|
+
}
|
|
15
|
+
export async function applyCursorSkillDisposition(scopeRoot, candidate, manifest, disposition, syncConfigPath, options = {}) {
|
|
16
|
+
if (!isCursorSkillCandidate(candidate)) {
|
|
17
|
+
throw new CliError(`Cannot apply a Cursor skill disposition to ${candidate.report.providerPath}.`);
|
|
18
|
+
}
|
|
19
|
+
if (disposition === 'adopt') {
|
|
20
|
+
return adoptStrayToCanonical(scopeRoot, candidate, manifest, options);
|
|
21
|
+
}
|
|
22
|
+
await assertCursorOnlyNameAvailable(scopeRoot, candidate);
|
|
23
|
+
await appendKnownStray(syncConfigPath, candidate.report.providerPath);
|
|
24
|
+
return manifest;
|
|
25
|
+
}
|
|
26
|
+
async function assertCursorOnlyNameAvailable(scopeRoot, candidate) {
|
|
27
|
+
const canonicalPath = resolve(scopeRoot, candidate.mapping.canonicalDir, basename(candidate.report.providerPath));
|
|
28
|
+
if (!(await pathExists(canonicalPath))) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
throw new CliError(`Cannot keep ${candidate.report.providerPath} Cursor-only because canonical skill ${toPosixPath(relative(scopeRoot, canonicalPath))} has the same name. Rename one skill, then run the command again.`);
|
|
32
|
+
}
|
|
33
|
+
async function pathExists(path) {
|
|
34
|
+
try {
|
|
35
|
+
await access(path);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
|
|
2
2
|
import { type CodexRoleStray } from '../shared/codex-strays.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type CursorSkillDisposition } from '../shared/cursor-skill-disposition.js';
|
|
4
|
+
import { type MultiSelectChoice, type PromptContext, type SelectChoice } from '../shared/shared.prompts.js';
|
|
4
5
|
import { type SyncConfig } from '../../config/index.js';
|
|
5
|
-
import { type UserConfig } from '../../config/oat-config.js';
|
|
6
6
|
import { type CopyTransform, type DriftReport } from '../../drift/index.js';
|
|
7
7
|
import { type CanonicalEntry } from '../../engine/index.js';
|
|
8
8
|
import type { Manifest } from '../../manifest/index.js';
|
|
9
9
|
import { type CodexExtensionPlan } from '../../providers/codex/codec/sync-extension.js';
|
|
10
10
|
import { type CursorExtensionPlan } from '../../providers/cursor/codec/sync-extension.js';
|
|
11
11
|
import { type PathMapping, type ProviderAdapter } from '../../providers/shared/index.js';
|
|
12
|
+
import type { AdoptionSource } from '../../providers/shared/adapter.types.js';
|
|
12
13
|
import { type ConcreteScope, type Scope } from '../../shared/types.js';
|
|
13
14
|
import { Command } from 'commander';
|
|
14
15
|
interface StatusDependencies {
|
|
@@ -16,15 +17,16 @@ interface StatusDependencies {
|
|
|
16
17
|
resolveScopeRoot: (scope: ConcreteScope, context: CommandContext) => Promise<string>;
|
|
17
18
|
loadManifest: (manifestPath: string) => Promise<Manifest>;
|
|
18
19
|
loadSyncConfig: (configPath: string) => Promise<SyncConfig>;
|
|
19
|
-
|
|
20
|
+
resolveUserSyncConfig: (userConfigDir: string) => Promise<SyncConfig>;
|
|
20
21
|
saveManifest: (manifestPath: string, manifest: Manifest) => Promise<void>;
|
|
21
22
|
scanCanonical: (scopeRoot: string, scope: ConcreteScope) => Promise<CanonicalEntry[]>;
|
|
22
23
|
scanBundledManagedAgents: () => Promise<CanonicalEntry[]>;
|
|
23
24
|
getAdapters: () => ProviderAdapter[];
|
|
24
25
|
getActiveAdapters: (adapters: ProviderAdapter[], scopeRoot: string) => Promise<ProviderAdapter[]>;
|
|
25
26
|
getSyncMappings: (adapter: ProviderAdapter, scope: Scope) => PathMapping[];
|
|
27
|
+
getAdoptionSources: (adapter: ProviderAdapter, scope: Scope) => AdoptionSource[];
|
|
26
28
|
detectDrift: (entry: Manifest['entries'][number], scopeRoot: string, copyTransform?: CopyTransform) => Promise<DriftReport>;
|
|
27
|
-
detectStrays: (provider: string, providerDir: string, manifest: Manifest, canonicalEntries: CanonicalEntry[], mapping?: Pick<PathMapping, 'contentType' | 'providerExtension'>) => Promise<DriftReport[]>;
|
|
29
|
+
detectStrays: (provider: string, providerDir: string, manifest: Manifest, canonicalEntries: CanonicalEntry[], mapping?: Pick<PathMapping, 'contentType' | 'nativeRead' | 'providerExtension'>) => Promise<DriftReport[]>;
|
|
28
30
|
detectCodexRoleStrays: (scopeRoot: string, canonicalEntries: CanonicalEntry[], managedRoleNames?: Set<string>) => Promise<CodexRoleStray[]>;
|
|
29
31
|
computeCodexProjectExtensionPlan: (scopeRoot: string, canonicalEntries: CanonicalEntry[], allowedCanonicalPaths?: string[], options?: {
|
|
30
32
|
userConfigDir?: string;
|
|
@@ -37,10 +39,14 @@ interface StatusDependencies {
|
|
|
37
39
|
}) => Promise<CursorExtensionPlan>;
|
|
38
40
|
applyCursorProjectExtensionPlan: (scopeRoot: string, plan: CursorExtensionPlan) => Promise<unknown>;
|
|
39
41
|
selectManyWithAbort: <T extends string>(message: string, choices: MultiSelectChoice<T>[], ctx: PromptContext) => Promise<T[] | null>;
|
|
42
|
+
selectWithAbort: <T extends string>(message: string, choices: SelectChoice<T>[], ctx: PromptContext) => Promise<T | null>;
|
|
40
43
|
confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
|
|
41
44
|
adoptStray: (scopeRoot: string, stray: StatusStrayCandidate, manifest: Manifest, options?: {
|
|
42
45
|
replaceCanonical?: boolean;
|
|
43
46
|
}) => Promise<Manifest>;
|
|
47
|
+
applyCursorSkillDisposition: (scopeRoot: string, stray: StatusStrayCandidate, manifest: Manifest, disposition: CursorSkillDisposition, syncConfigPath: string, options?: {
|
|
48
|
+
replaceCanonical?: boolean;
|
|
49
|
+
}) => Promise<Manifest>;
|
|
44
50
|
formatStatusTable: (reports: DriftReport[]) => string;
|
|
45
51
|
}
|
|
46
52
|
interface StatusStrayCandidate {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
|