@corvus-tools/skill-manager-core 0.1.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/LICENSE +21 -0
- package/dist/agents/AgentAdapter.d.ts +11 -0
- package/dist/agents/AgentAdapter.d.ts.map +1 -0
- package/dist/agents/AgentAdapter.js +2 -0
- package/dist/agents/AgentAdapter.js.map +1 -0
- package/dist/agents/adapters.d.ts +44 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +56 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/config/configSchema.d.ts +109 -0
- package/dist/config/configSchema.d.ts.map +1 -0
- package/dist/config/configSchema.js +46 -0
- package/dist/config/configSchema.js.map +1 -0
- package/dist/config/configStore.d.ts +24 -0
- package/dist/config/configStore.d.ts.map +1 -0
- package/dist/config/configStore.js +77 -0
- package/dist/config/configStore.js.map +1 -0
- package/dist/git/gitRunner.d.ts +10 -0
- package/dist/git/gitRunner.d.ts.map +1 -0
- package/dist/git/gitRunner.js +23 -0
- package/dist/git/gitRunner.js.map +1 -0
- package/dist/git/skillpackSetup.d.ts +37 -0
- package/dist/git/skillpackSetup.d.ts.map +1 -0
- package/dist/git/skillpackSetup.js +177 -0
- package/dist/git/skillpackSetup.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/links/applyEngine.d.ts +24 -0
- package/dist/links/applyEngine.d.ts.map +1 -0
- package/dist/links/applyEngine.js +230 -0
- package/dist/links/applyEngine.js.map +1 -0
- package/dist/links/linkPlan.d.ts +54 -0
- package/dist/links/linkPlan.d.ts.map +1 -0
- package/dist/links/linkPlan.js +121 -0
- package/dist/links/linkPlan.js.map +1 -0
- package/dist/lock/lockSchema.d.ts +84 -0
- package/dist/lock/lockSchema.d.ts.map +1 -0
- package/dist/lock/lockSchema.js +30 -0
- package/dist/lock/lockSchema.js.map +1 -0
- package/dist/lock/lockStore.d.ts +15 -0
- package/dist/lock/lockStore.d.ts.map +1 -0
- package/dist/lock/lockStore.js +56 -0
- package/dist/lock/lockStore.js.map +1 -0
- package/dist/manifest/manifestSchema.d.ts +86 -0
- package/dist/manifest/manifestSchema.d.ts.map +1 -0
- package/dist/manifest/manifestSchema.js +32 -0
- package/dist/manifest/manifestSchema.js.map +1 -0
- package/dist/manifest/manifestStore.d.ts +18 -0
- package/dist/manifest/manifestStore.d.ts.map +1 -0
- package/dist/manifest/manifestStore.js +47 -0
- package/dist/manifest/manifestStore.js.map +1 -0
- package/dist/paths.d.ts +14 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +43 -0
- package/dist/paths.js.map +1 -0
- package/dist/registry/registrySchema.d.ts +73 -0
- package/dist/registry/registrySchema.d.ts.map +1 -0
- package/dist/registry/registrySchema.js +30 -0
- package/dist/registry/registrySchema.js.map +1 -0
- package/dist/reports/doctorReport.d.ts +5 -0
- package/dist/reports/doctorReport.d.ts.map +1 -0
- package/dist/reports/doctorReport.js +297 -0
- package/dist/reports/doctorReport.js.map +1 -0
- package/dist/reports/reportInternals.d.ts +48 -0
- package/dist/reports/reportInternals.d.ts.map +1 -0
- package/dist/reports/reportInternals.js +220 -0
- package/dist/reports/reportInternals.js.map +1 -0
- package/dist/reports/reportTypes.d.ts +54 -0
- package/dist/reports/reportTypes.d.ts.map +1 -0
- package/dist/reports/reportTypes.js +2 -0
- package/dist/reports/reportTypes.js.map +1 -0
- package/dist/reports/statusReport.d.ts +6 -0
- package/dist/reports/statusReport.d.ts.map +1 -0
- package/dist/reports/statusReport.js +49 -0
- package/dist/reports/statusReport.js.map +1 -0
- package/dist/skillpackDefaults.d.ts +5 -0
- package/dist/skillpackDefaults.d.ts.map +1 -0
- package/dist/skillpackDefaults.js +5 -0
- package/dist/skillpackDefaults.js.map +1 -0
- package/dist/skills/skillDiscovery.d.ts +36 -0
- package/dist/skills/skillDiscovery.d.ts.map +1 -0
- package/dist/skills/skillDiscovery.js +441 -0
- package/dist/skills/skillDiscovery.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parseSkillpackConfig } from '../config/configSchema.js';
|
|
4
|
+
import { upsertSkillpackLockEntry } from '../lock/lockStore.js';
|
|
5
|
+
import { resolveUserPath } from '../paths.js';
|
|
6
|
+
import { runGit } from './gitRunner.js';
|
|
7
|
+
export async function inspectSkillpackCheckout(checkoutPath, options = {}) {
|
|
8
|
+
const git = options.git ?? runGit;
|
|
9
|
+
const resolvedCheckoutPath = resolveUserPath(checkoutPath, options.homeDir);
|
|
10
|
+
if (!(await pathExists(resolvedCheckoutPath))) {
|
|
11
|
+
return {
|
|
12
|
+
status: 'checkout-missing',
|
|
13
|
+
checkoutPath: resolvedCheckoutPath,
|
|
14
|
+
exists: false,
|
|
15
|
+
readable: false,
|
|
16
|
+
dirty: false,
|
|
17
|
+
dirtyFiles: [],
|
|
18
|
+
message: 'Checkout missing'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const checkoutStat = await fs.stat(resolvedCheckoutPath);
|
|
22
|
+
if (!checkoutStat.isDirectory()) {
|
|
23
|
+
return {
|
|
24
|
+
status: 'checkout-unreadable',
|
|
25
|
+
checkoutPath: resolvedCheckoutPath,
|
|
26
|
+
exists: true,
|
|
27
|
+
readable: false,
|
|
28
|
+
dirty: false,
|
|
29
|
+
dirtyFiles: [],
|
|
30
|
+
message: 'Checkout path exists but is not a directory'
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
await git(['rev-parse', '--is-inside-work-tree'], { cwd: resolvedCheckoutPath });
|
|
35
|
+
const commitHash = (await git(['rev-parse', 'HEAD'], { cwd: resolvedCheckoutPath })).stdout.trim();
|
|
36
|
+
const statusOutput = (await git(['-c', 'core.optionalLocks=false', 'status', '--porcelain=v1', '--untracked-files=all'], { cwd: resolvedCheckoutPath })).stdout;
|
|
37
|
+
const dirtyFiles = statusOutput
|
|
38
|
+
.split('\n')
|
|
39
|
+
.map((line) => line.trim())
|
|
40
|
+
.filter(Boolean);
|
|
41
|
+
const dirty = dirtyFiles.length > 0;
|
|
42
|
+
return {
|
|
43
|
+
status: dirty ? 'checkout-dirty' : 'checkout-readable',
|
|
44
|
+
checkoutPath: resolvedCheckoutPath,
|
|
45
|
+
exists: true,
|
|
46
|
+
readable: true,
|
|
47
|
+
commitHash,
|
|
48
|
+
dirty,
|
|
49
|
+
dirtyFiles,
|
|
50
|
+
message: dirty ? 'Checkout exists and is dirty' : 'Checkout exists and is readable'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
status: 'checkout-unreadable',
|
|
56
|
+
checkoutPath: resolvedCheckoutPath,
|
|
57
|
+
exists: true,
|
|
58
|
+
readable: false,
|
|
59
|
+
dirty: false,
|
|
60
|
+
dirtyFiles: [],
|
|
61
|
+
message: error instanceof Error ? error.message : String(error)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function applyInitialSkillpackSetup(options) {
|
|
66
|
+
const parsedConfig = parseSkillpackConfig(options.config);
|
|
67
|
+
const checkoutPath = resolveUserPath(parsedConfig.checkoutPath, options.homeDir);
|
|
68
|
+
const config = {
|
|
69
|
+
...parsedConfig,
|
|
70
|
+
checkoutPath
|
|
71
|
+
};
|
|
72
|
+
const git = options.git ?? runGit;
|
|
73
|
+
const inspectOptions = options.homeDir === undefined ? { git } : { homeDir: options.homeDir, git };
|
|
74
|
+
const initialInspection = await inspectSkillpackCheckout(checkoutPath, inspectOptions);
|
|
75
|
+
if (initialInspection.status === 'checkout-missing') {
|
|
76
|
+
try {
|
|
77
|
+
await fs.mkdir(path.dirname(checkoutPath), { recursive: true });
|
|
78
|
+
await git(['clone', '--branch', config.branch, '--single-branch', config.repositoryUrl, checkoutPath]);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
status: 'clone-failed',
|
|
83
|
+
config,
|
|
84
|
+
checkoutPath,
|
|
85
|
+
dirty: false,
|
|
86
|
+
dirtyFiles: [],
|
|
87
|
+
message: error instanceof Error ? error.message : String(error)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const clonedInspection = await inspectSkillpackCheckout(checkoutPath, inspectOptions);
|
|
91
|
+
if (!clonedInspection.readable || clonedInspection.commitHash === undefined) {
|
|
92
|
+
return {
|
|
93
|
+
status: 'clone-failed',
|
|
94
|
+
config,
|
|
95
|
+
checkoutPath,
|
|
96
|
+
dirty: false,
|
|
97
|
+
dirtyFiles: [],
|
|
98
|
+
message: clonedInspection.message
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const lockPath = await recordSkillpackLock({
|
|
102
|
+
config,
|
|
103
|
+
managerStateDir: options.managerStateDir,
|
|
104
|
+
commitHash: clonedInspection.commitHash,
|
|
105
|
+
dirty: clonedInspection.dirty,
|
|
106
|
+
...(options.now === undefined ? {} : { now: options.now })
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
status: 'clone-complete',
|
|
110
|
+
config,
|
|
111
|
+
checkoutPath,
|
|
112
|
+
lockPath,
|
|
113
|
+
commitHash: clonedInspection.commitHash,
|
|
114
|
+
dirty: clonedInspection.dirty,
|
|
115
|
+
dirtyFiles: clonedInspection.dirtyFiles,
|
|
116
|
+
message: 'Initial clone complete'
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
if (initialInspection.readable && initialInspection.commitHash !== undefined) {
|
|
120
|
+
const lockPath = await recordSkillpackLock({
|
|
121
|
+
config,
|
|
122
|
+
managerStateDir: options.managerStateDir,
|
|
123
|
+
commitHash: initialInspection.commitHash,
|
|
124
|
+
dirty: initialInspection.dirty,
|
|
125
|
+
...(options.now === undefined ? {} : { now: options.now })
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
status: initialInspection.status,
|
|
129
|
+
config,
|
|
130
|
+
checkoutPath,
|
|
131
|
+
lockPath,
|
|
132
|
+
commitHash: initialInspection.commitHash,
|
|
133
|
+
dirty: initialInspection.dirty,
|
|
134
|
+
dirtyFiles: initialInspection.dirtyFiles,
|
|
135
|
+
message: initialInspection.message
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
status: initialInspection.status,
|
|
140
|
+
config,
|
|
141
|
+
checkoutPath,
|
|
142
|
+
dirty: initialInspection.dirty,
|
|
143
|
+
dirtyFiles: initialInspection.dirtyFiles,
|
|
144
|
+
message: initialInspection.message
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function recordSkillpackLock(options) {
|
|
148
|
+
const lockOptions = options.now === undefined ?
|
|
149
|
+
{ managerStateDir: options.managerStateDir } :
|
|
150
|
+
{ managerStateDir: options.managerStateDir, now: options.now };
|
|
151
|
+
const recordedAt = (options.now ?? new Date()).toISOString();
|
|
152
|
+
const result = await upsertSkillpackLockEntry({
|
|
153
|
+
id: options.config.id,
|
|
154
|
+
repositoryUrl: options.config.repositoryUrl,
|
|
155
|
+
branch: options.config.branch,
|
|
156
|
+
checkoutPath: options.config.checkoutPath,
|
|
157
|
+
commitHash: options.commitHash,
|
|
158
|
+
dirty: options.dirty,
|
|
159
|
+
recordedAt
|
|
160
|
+
}, lockOptions);
|
|
161
|
+
return result.lockPath;
|
|
162
|
+
}
|
|
163
|
+
async function pathExists(candidatePath) {
|
|
164
|
+
try {
|
|
165
|
+
await fs.access(candidatePath);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof Error &&
|
|
170
|
+
'code' in error &&
|
|
171
|
+
error.code === 'ENOENT') {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=skillpackSetup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillpackSetup.js","sourceRoot":"","sources":["../../src/git/skillpackSetup.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { type ConfigLoadResult, type ConfigStoreOptions, ensureDefaultConfig, loadConfig, saveConfig } from './config/configStore.js';
|
|
2
|
+
export { type AgentConfig, type AgentIdConfig, type ManagerConfig, type SkillpackConfig, agentConfigSchema, agentIdSchema, createDefaultManagerConfig, managerConfigSchema, parseManagerConfig, parseSkillpackConfig, skillpackConfigSchema } from './config/configSchema.js';
|
|
3
|
+
export { type AgentAdapter, type AgentId, type AgentSupportStatus } from './agents/AgentAdapter.js';
|
|
4
|
+
export { agentAdapters, getAgentAdapter, getAgentAdapters } from './agents/adapters.js';
|
|
5
|
+
export { type CheckoutStatus, type SkillpackInspection, type SkillpackSetupOptions, type SkillpackSetupResult, type SkillpackSetupStatus, applyInitialSkillpackSetup, inspectSkillpackCheckout } from './git/skillpackSetup.js';
|
|
6
|
+
export { type GitRunner, type GitRunOptions, type GitRunResult, runGit } from './git/gitRunner.js';
|
|
7
|
+
export { type ManagerLock, type SkillpackLockEntry, createEmptyManagerLock, managerLockSchema, parseManagerLock, skillpackLockEntrySchema } from './lock/lockSchema.js';
|
|
8
|
+
export { type LockStoreOptions, getDefaultLockPath, loadLock, saveLock, upsertSkillpackLockEntry } from './lock/lockStore.js';
|
|
9
|
+
export { type RegistrySkillEntry, type SkillRegistry, type SupportedAgent, registrySkillEntrySchema, skillRegistrySchema, supportedAgentSchema } from './registry/registrySchema.js';
|
|
10
|
+
export { type DiscoveredSkill, type SkillDiscoveryIssue, type SkillDiscoveryResult, type SkillDiscoverySeverity, type SkillRiskWarning, discoverSkillsFromCheckout } from './skills/skillDiscovery.js';
|
|
11
|
+
export { type AgentLinkSelection, type GenerateLinkPlanInput, type LinkCreateOperation, type LinkPlan, type LinkPlanIssue, type LinkPlanOperation, type LinkPlanSkill, type LinkRemoveOperation, type TargetState, generateLinkPlan } from './links/linkPlan.js';
|
|
12
|
+
export { type ApplyActionResult, type ApplyActionStatus, type ApplyLinkPlanOptions, type ApplyLinkPlanResult, applyLinkPlan } from './links/applyEngine.js';
|
|
13
|
+
export { type ManagedLinkManifestEntry, type ManagedLinkType, type ManagerManifest, createEmptyManagerManifest, managedLinkManifestEntrySchema, managedLinkTypeSchema, managerManifestSchema, parseManagerManifest } from './manifest/manifestSchema.js';
|
|
14
|
+
export { type ManifestStoreOptions, loadManifest, loadManifestOrDefault, resolveManifestPaths, saveManifest } from './manifest/manifestStore.js';
|
|
15
|
+
export { type DoctorIssue, type DoctorIssueSeverity, type DoctorReport, type StatusReport, type StatusReportAgent, type StatusReportSkillpack } from './reports/reportTypes.js';
|
|
16
|
+
export { type BuildStatusReportOptions, buildStatusReport } from './reports/statusReport.js';
|
|
17
|
+
export { type BuildDoctorReportOptions, buildDoctorReport } from './reports/doctorReport.js';
|
|
18
|
+
export { assertPathInside, configFileName, defaultConfigPath, defaultLockPath, defaultManifestPath, defaultManagerStateDir, defaultSkillpackCheckoutPath, expandTilde, isPathInside, lockFileName, manifestFileName, managerStateDirSegments, resolveUserPath } from './paths.js';
|
|
19
|
+
export { defaultSkillpackBranch, defaultSkillpackDisplayName, defaultSkillpackId, defaultSkillpackRepositoryUrl } from './skillpackDefaults.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,UAAU,EACV,UAAU,EACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACjG,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,0BAA0B,EAC1B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,oBAAoB,EACzB,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,KAAK,wBAAwB,EAAE,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAC,KAAK,wBAAwB,EAAE,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,4BAA4B,EAC5B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { ensureDefaultConfig, loadConfig, saveConfig } from './config/configStore.js';
|
|
2
|
+
export { agentConfigSchema, agentIdSchema, createDefaultManagerConfig, managerConfigSchema, parseManagerConfig, parseSkillpackConfig, skillpackConfigSchema } from './config/configSchema.js';
|
|
3
|
+
export { agentAdapters, getAgentAdapter, getAgentAdapters } from './agents/adapters.js';
|
|
4
|
+
export { applyInitialSkillpackSetup, inspectSkillpackCheckout } from './git/skillpackSetup.js';
|
|
5
|
+
export { runGit } from './git/gitRunner.js';
|
|
6
|
+
export { createEmptyManagerLock, managerLockSchema, parseManagerLock, skillpackLockEntrySchema } from './lock/lockSchema.js';
|
|
7
|
+
export { getDefaultLockPath, loadLock, saveLock, upsertSkillpackLockEntry } from './lock/lockStore.js';
|
|
8
|
+
export { registrySkillEntrySchema, skillRegistrySchema, supportedAgentSchema } from './registry/registrySchema.js';
|
|
9
|
+
export { discoverSkillsFromCheckout } from './skills/skillDiscovery.js';
|
|
10
|
+
export { generateLinkPlan } from './links/linkPlan.js';
|
|
11
|
+
export { applyLinkPlan } from './links/applyEngine.js';
|
|
12
|
+
export { createEmptyManagerManifest, managedLinkManifestEntrySchema, managedLinkTypeSchema, managerManifestSchema, parseManagerManifest } from './manifest/manifestSchema.js';
|
|
13
|
+
export { loadManifest, loadManifestOrDefault, resolveManifestPaths, saveManifest } from './manifest/manifestStore.js';
|
|
14
|
+
export { buildStatusReport } from './reports/statusReport.js';
|
|
15
|
+
export { buildDoctorReport } from './reports/doctorReport.js';
|
|
16
|
+
export { assertPathInside, configFileName, defaultConfigPath, defaultLockPath, defaultManifestPath, defaultManagerStateDir, defaultSkillpackCheckoutPath, expandTilde, isPathInside, lockFileName, manifestFileName, managerStateDirSegments, resolveUserPath } from './paths.js';
|
|
17
|
+
export { defaultSkillpackBranch, defaultSkillpackDisplayName, defaultSkillpackId, defaultSkillpackRepositoryUrl } from './skillpackDefaults.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EACnB,UAAU,EACV,UAAU,EACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAKL,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAML,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAwD,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAGL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAML,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAUL,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKL,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,0BAA0B,EAC1B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACb,MAAM,6BAA6B,CAAC;AASrC,OAAO,EAAgC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAgC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,4BAA4B,EAC5B,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ManifestStoreOptions } from '../manifest/manifestStore.js';
|
|
2
|
+
import type { LinkPlan, LinkPlanOperation } from './linkPlan.js';
|
|
3
|
+
export type ApplyActionStatus = 'applied' | 'skipped' | 'planned';
|
|
4
|
+
export interface ApplyActionResult {
|
|
5
|
+
status: ApplyActionStatus;
|
|
6
|
+
code: string;
|
|
7
|
+
message: string;
|
|
8
|
+
operation: LinkPlanOperation;
|
|
9
|
+
}
|
|
10
|
+
export interface ApplyLinkPlanResult {
|
|
11
|
+
dryRun: boolean;
|
|
12
|
+
manifestPath: string;
|
|
13
|
+
applied: ApplyActionResult[];
|
|
14
|
+
skipped: ApplyActionResult[];
|
|
15
|
+
planned: ApplyActionResult[];
|
|
16
|
+
}
|
|
17
|
+
export interface ApplyLinkPlanOptions extends ManifestStoreOptions {
|
|
18
|
+
plan: LinkPlan;
|
|
19
|
+
skillpackCheckoutPath: string;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
confirmReplaceBrokenManagedLinks?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function applyLinkPlan(options: ApplyLinkPlanOptions): Promise<ApplyLinkPlanResult>;
|
|
24
|
+
//# sourceMappingURL=applyEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyEngine.d.ts","sourceRoot":"","sources":["../../src/links/applyEngine.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAsB,QAAQ,EAAE,iBAAiB,EAAsB,MAAM,eAAe,CAAC;AAEzG,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,IAAI,EAAE,QAAQ,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gCAAgC,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8C/F"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { isPathInside, resolveUserPath } from '../paths.js';
|
|
4
|
+
import { loadManifestOrDefault, saveManifest } from '../manifest/manifestStore.js';
|
|
5
|
+
export async function applyLinkPlan(options) {
|
|
6
|
+
const dryRun = options.dryRun ?? false;
|
|
7
|
+
const loadedManifest = await loadManifestOrDefault(options);
|
|
8
|
+
const manifest = cloneManifest(loadedManifest.manifest);
|
|
9
|
+
const skillpackCheckoutPath = resolveUserPath(options.skillpackCheckoutPath, options.homeDir);
|
|
10
|
+
const applied = [];
|
|
11
|
+
const skipped = [];
|
|
12
|
+
const planned = [];
|
|
13
|
+
for (const operation of options.plan.operations) {
|
|
14
|
+
const nowOption = options.now === undefined ? {} : { now: options.now };
|
|
15
|
+
const result = operation.type === 'create-link' ?
|
|
16
|
+
await planOrApplyCreate(operation, {
|
|
17
|
+
manifest,
|
|
18
|
+
skillpackCheckoutPath,
|
|
19
|
+
dryRun,
|
|
20
|
+
confirmReplaceBrokenManagedLinks: options.confirmReplaceBrokenManagedLinks ?? false,
|
|
21
|
+
...nowOption
|
|
22
|
+
}) :
|
|
23
|
+
await planOrApplyRemove(operation, {
|
|
24
|
+
manifest,
|
|
25
|
+
dryRun,
|
|
26
|
+
...nowOption
|
|
27
|
+
});
|
|
28
|
+
if (result.status === 'applied') {
|
|
29
|
+
applied.push(result);
|
|
30
|
+
}
|
|
31
|
+
else if (result.status === 'planned') {
|
|
32
|
+
planned.push(result);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
skipped.push(result);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!dryRun) {
|
|
39
|
+
manifest.updatedAt = (options.now ?? new Date()).toISOString();
|
|
40
|
+
await saveManifest(manifest, options);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
dryRun,
|
|
44
|
+
manifestPath: loadedManifest.manifestPath,
|
|
45
|
+
applied,
|
|
46
|
+
skipped,
|
|
47
|
+
planned
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function planOrApplyCreate(operation, options) {
|
|
51
|
+
const sourcePath = resolveUserPath(operation.sourcePath);
|
|
52
|
+
const targetPath = resolveUserPath(operation.targetPath);
|
|
53
|
+
if (!isPathInside(options.skillpackCheckoutPath, sourcePath)) {
|
|
54
|
+
return skipped(operation, 'source-outside-skillpack', `Source is outside the configured skillpack checkout: ${sourcePath}`);
|
|
55
|
+
}
|
|
56
|
+
if (!(await pathExists(sourcePath))) {
|
|
57
|
+
return skipped(operation, 'missing-source', `Source does not exist: ${sourcePath}`);
|
|
58
|
+
}
|
|
59
|
+
const manifestEntry = options.manifest.links[targetPath];
|
|
60
|
+
const targetInspection = await inspectTarget(targetPath);
|
|
61
|
+
if (targetInspection.kind === 'missing') {
|
|
62
|
+
if (options.dryRun) {
|
|
63
|
+
return planned(operation, 'create-link', `Would create manager-owned link at ${targetPath}`);
|
|
64
|
+
}
|
|
65
|
+
const linkType = await createManagedLink({ sourcePath, targetPath });
|
|
66
|
+
const nowOption = options.now === undefined ? {} : { now: options.now };
|
|
67
|
+
upsertManifestEntry(options.manifest, {
|
|
68
|
+
agentId: operation.agentId,
|
|
69
|
+
skillId: operation.skillId,
|
|
70
|
+
sourcePath,
|
|
71
|
+
targetPath,
|
|
72
|
+
linkType,
|
|
73
|
+
...nowOption
|
|
74
|
+
});
|
|
75
|
+
return applied(operation, 'created-link', `Created manager-owned link at ${targetPath}`);
|
|
76
|
+
}
|
|
77
|
+
if (targetInspection.kind === 'file') {
|
|
78
|
+
return skipped(operation, 'unmanaged-file-exists', `Refusing to overwrite real file: ${targetPath}`);
|
|
79
|
+
}
|
|
80
|
+
if (targetInspection.kind === 'directory') {
|
|
81
|
+
return skipped(operation, 'unmanaged-directory-exists', `Refusing to overwrite real directory: ${targetPath}`);
|
|
82
|
+
}
|
|
83
|
+
if (manifestEntry === undefined) {
|
|
84
|
+
return skipped(operation, 'unmanaged-symlink-exists', `Refusing to overwrite unmanaged symlink: ${targetPath}`);
|
|
85
|
+
}
|
|
86
|
+
if (!manifestMatchesOwnership(manifestEntry, operation, targetPath)) {
|
|
87
|
+
return skipped(operation, 'manifest-mismatch', `Manifest ownership does not match requested link: ${targetPath}`);
|
|
88
|
+
}
|
|
89
|
+
if (targetInspection.broken && !options.confirmReplaceBrokenManagedLinks) {
|
|
90
|
+
return skipped(operation, 'broken-managed-link-needs-confirmation', `Broken manager-owned link requires explicit confirmation before replacement: ${targetPath}`);
|
|
91
|
+
}
|
|
92
|
+
if (targetInspection.broken) {
|
|
93
|
+
if (options.dryRun) {
|
|
94
|
+
return planned(operation, 'replace-broken-managed-link', `Would replace broken manager-owned link at ${targetPath}`);
|
|
95
|
+
}
|
|
96
|
+
await fs.unlink(targetPath);
|
|
97
|
+
const linkType = await createManagedLink({ sourcePath, targetPath });
|
|
98
|
+
const nowOption = options.now === undefined ? {} : { now: options.now };
|
|
99
|
+
upsertManifestEntry(options.manifest, {
|
|
100
|
+
agentId: operation.agentId,
|
|
101
|
+
skillId: operation.skillId,
|
|
102
|
+
sourcePath,
|
|
103
|
+
targetPath,
|
|
104
|
+
linkType,
|
|
105
|
+
existingCreatedAt: manifestEntry.createdAt,
|
|
106
|
+
...nowOption
|
|
107
|
+
});
|
|
108
|
+
return applied(operation, 'replaced-broken-managed-link', `Replaced broken manager-owned link at ${targetPath}`);
|
|
109
|
+
}
|
|
110
|
+
if (manifestEntry.sourcePath !== sourcePath || targetInspection.resolvedSourcePath !== sourcePath) {
|
|
111
|
+
return skipped(operation, 'link-target-mismatch', `Existing link target does not match expected source: ${targetPath}`);
|
|
112
|
+
}
|
|
113
|
+
return skipped(operation, 'managed-link-already-present', `Managed link already exists: ${targetPath}`);
|
|
114
|
+
}
|
|
115
|
+
async function planOrApplyRemove(operation, options) {
|
|
116
|
+
const targetPath = resolveUserPath(operation.targetPath);
|
|
117
|
+
const manifestEntry = options.manifest.links[targetPath];
|
|
118
|
+
const targetInspection = await inspectTarget(targetPath);
|
|
119
|
+
if (manifestEntry === undefined) {
|
|
120
|
+
return skipped(operation, 'not-manager-owned', `Refusing to remove target not owned by manifest: ${targetPath}`);
|
|
121
|
+
}
|
|
122
|
+
if (!manifestMatchesRemoveOperation(manifestEntry, operation, targetPath)) {
|
|
123
|
+
return skipped(operation, 'manifest-mismatch', `Manifest ownership does not match requested removal: ${targetPath}`);
|
|
124
|
+
}
|
|
125
|
+
if (targetInspection.kind === 'missing') {
|
|
126
|
+
if (options.dryRun) {
|
|
127
|
+
return planned(operation, 'remove-stale-manifest-entry', `Would remove stale manifest entry for ${targetPath}`);
|
|
128
|
+
}
|
|
129
|
+
delete options.manifest.links[targetPath];
|
|
130
|
+
return applied(operation, 'removed-stale-manifest-entry', `Removed stale manifest entry for ${targetPath}`);
|
|
131
|
+
}
|
|
132
|
+
if (targetInspection.kind !== 'symlink') {
|
|
133
|
+
return skipped(operation, 'target-is-not-link', `Refusing to remove non-link target: ${targetPath}`);
|
|
134
|
+
}
|
|
135
|
+
if (targetInspection.resolvedSourcePath !== manifestEntry.sourcePath) {
|
|
136
|
+
return skipped(operation, 'link-target-mismatch', `Refusing to remove link whose target differs from manifest: ${targetPath}`);
|
|
137
|
+
}
|
|
138
|
+
if (options.dryRun) {
|
|
139
|
+
return planned(operation, 'remove-managed-link', `Would remove manager-owned link at ${targetPath}`);
|
|
140
|
+
}
|
|
141
|
+
await fs.unlink(targetPath);
|
|
142
|
+
delete options.manifest.links[targetPath];
|
|
143
|
+
return applied(operation, 'removed-managed-link', `Removed manager-owned link at ${targetPath}`);
|
|
144
|
+
}
|
|
145
|
+
async function createManagedLink(options) {
|
|
146
|
+
await fs.mkdir(path.dirname(options.targetPath), { recursive: true });
|
|
147
|
+
const sourceStat = await fs.stat(options.sourcePath);
|
|
148
|
+
const linkType = process.platform === 'win32' && sourceStat.isDirectory() ? 'junction' : 'symlink';
|
|
149
|
+
await fs.symlink(options.sourcePath, options.targetPath, linkType === 'junction' ? 'junction' : 'dir');
|
|
150
|
+
return linkType;
|
|
151
|
+
}
|
|
152
|
+
async function inspectTarget(targetPath) {
|
|
153
|
+
let stat;
|
|
154
|
+
try {
|
|
155
|
+
stat = await fs.lstat(targetPath);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (isMissingFileError(error)) {
|
|
159
|
+
return { kind: 'missing' };
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
if (stat.isSymbolicLink()) {
|
|
164
|
+
const linkTarget = await fs.readlink(targetPath);
|
|
165
|
+
const resolvedSourcePath = path.resolve(path.dirname(targetPath), linkTarget);
|
|
166
|
+
const broken = !(await pathExists(resolvedSourcePath));
|
|
167
|
+
return {
|
|
168
|
+
kind: 'symlink',
|
|
169
|
+
resolvedSourcePath,
|
|
170
|
+
broken
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (stat.isDirectory()) {
|
|
174
|
+
return { kind: 'directory' };
|
|
175
|
+
}
|
|
176
|
+
return { kind: 'file' };
|
|
177
|
+
}
|
|
178
|
+
function upsertManifestEntry(manifest, options) {
|
|
179
|
+
const timestamp = (options.now ?? new Date()).toISOString();
|
|
180
|
+
manifest.links[options.targetPath] = {
|
|
181
|
+
agentId: options.agentId,
|
|
182
|
+
skillId: options.skillId,
|
|
183
|
+
targetPath: options.targetPath,
|
|
184
|
+
sourcePath: options.sourcePath,
|
|
185
|
+
linkType: options.linkType,
|
|
186
|
+
createdAt: options.existingCreatedAt ?? timestamp,
|
|
187
|
+
updatedAt: timestamp
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function manifestMatchesOwnership(entry, operation, targetPath) {
|
|
191
|
+
return (entry.agentId === operation.agentId &&
|
|
192
|
+
entry.skillId === operation.skillId &&
|
|
193
|
+
entry.targetPath === targetPath);
|
|
194
|
+
}
|
|
195
|
+
function manifestMatchesRemoveOperation(entry, operation, targetPath) {
|
|
196
|
+
return entry.agentId === operation.agentId && entry.skillId === operation.skillId && entry.targetPath === targetPath;
|
|
197
|
+
}
|
|
198
|
+
function cloneManifest(manifest) {
|
|
199
|
+
return {
|
|
200
|
+
...manifest,
|
|
201
|
+
links: Object.fromEntries(Object.entries(manifest.links).map(([targetPath, entry]) => [targetPath, { ...entry }]))
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function planned(operation, code, message) {
|
|
205
|
+
return { status: 'planned', code, message, operation };
|
|
206
|
+
}
|
|
207
|
+
function applied(operation, code, message) {
|
|
208
|
+
return { status: 'applied', code, message, operation };
|
|
209
|
+
}
|
|
210
|
+
function skipped(operation, code, message) {
|
|
211
|
+
return { status: 'skipped', code, message, operation };
|
|
212
|
+
}
|
|
213
|
+
async function pathExists(candidatePath) {
|
|
214
|
+
try {
|
|
215
|
+
await fs.access(candidatePath);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
if (isMissingFileError(error)) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function isMissingFileError(error) {
|
|
226
|
+
return (error instanceof Error &&
|
|
227
|
+
'code' in error &&
|
|
228
|
+
error.code === 'ENOENT');
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=applyEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyEngine.js","sourceRoot":"","sources":["../../src/links/applyEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { AgentAdapter, AgentId } from '../agents/AgentAdapter.js';
|
|
2
|
+
export interface LinkPlanSkill {
|
|
3
|
+
id: string;
|
|
4
|
+
absolutePath: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AgentLinkSelection {
|
|
7
|
+
agentId: AgentId;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
targetPath?: string;
|
|
10
|
+
selectedSkillIds: string[];
|
|
11
|
+
previousSelectedSkillIds?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface TargetState {
|
|
14
|
+
path: string;
|
|
15
|
+
exists: boolean;
|
|
16
|
+
managed: boolean;
|
|
17
|
+
sourcePath?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface LinkCreateOperation {
|
|
20
|
+
type: 'create-link';
|
|
21
|
+
agentId: AgentId;
|
|
22
|
+
skillId: string;
|
|
23
|
+
sourcePath: string;
|
|
24
|
+
targetPath: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LinkRemoveOperation {
|
|
27
|
+
type: 'remove-link';
|
|
28
|
+
agentId: AgentId;
|
|
29
|
+
skillId: string;
|
|
30
|
+
targetPath: string;
|
|
31
|
+
}
|
|
32
|
+
export type LinkPlanOperation = LinkCreateOperation | LinkRemoveOperation;
|
|
33
|
+
export interface LinkPlanIssue {
|
|
34
|
+
severity: 'warning' | 'conflict';
|
|
35
|
+
code: string;
|
|
36
|
+
message: string;
|
|
37
|
+
agentId?: AgentId;
|
|
38
|
+
skillId?: string;
|
|
39
|
+
path?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface LinkPlan {
|
|
42
|
+
operations: LinkPlanOperation[];
|
|
43
|
+
conflicts: LinkPlanIssue[];
|
|
44
|
+
warnings: LinkPlanIssue[];
|
|
45
|
+
}
|
|
46
|
+
export interface GenerateLinkPlanInput {
|
|
47
|
+
adapters: AgentAdapter[];
|
|
48
|
+
selections: AgentLinkSelection[];
|
|
49
|
+
skills: LinkPlanSkill[];
|
|
50
|
+
homeDir?: string;
|
|
51
|
+
targetStates?: TargetState[];
|
|
52
|
+
}
|
|
53
|
+
export declare function generateLinkPlan(input: GenerateLinkPlanInput): LinkPlan;
|
|
54
|
+
//# sourceMappingURL=linkPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkPlan.d.ts","sourceRoot":"","sources":["../../src/links/linkPlan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAGrE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,QAAQ,CA2HvE"}
|