@skillctl/adapters 0.4.0 → 0.5.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 -21
- package/dist/base/index.d.ts +3 -1
- package/dist/base/index.d.ts.map +1 -1
- package/dist/base/index.js +8 -3
- package/dist/base/index.js.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +6 -2
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/sync.d.ts +23 -5
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +106 -28
- package/dist/sync.js.map +1 -1
- package/package.json +6 -5
- package/dist/test/adapter-detect-ensure.test.d.ts +0 -3
- package/dist/test/adapter-detect-ensure.test.d.ts.map +0 -1
- package/dist/test/adapter-detect-ensure.test.js +0 -118
- package/dist/test/adapter-detect-ensure.test.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 xFurti, Gabry848
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 xFurti, Gabry848
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/base/index.d.ts
CHANGED
|
@@ -25,7 +25,9 @@ export declare abstract class BaseAgentAdapter implements AgentAdapter {
|
|
|
25
25
|
detect(): Promise<boolean>;
|
|
26
26
|
ensureTarget(skillName: string, targetPath: string, canonical: string, mode?: 'symlink' | 'copy' | 'junction', options?: {
|
|
27
27
|
relative?: boolean;
|
|
28
|
+
dryRun?: boolean;
|
|
29
|
+
force?: boolean;
|
|
28
30
|
}): Promise<void>;
|
|
29
|
-
removeTarget(skillName: string, targetPath: string): Promise<void>;
|
|
31
|
+
removeTarget(skillName: string, targetPath: string, canonical?: string): Promise<void>;
|
|
30
32
|
}
|
|
31
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/base/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIjE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CASjG;AAED;;;GAGG;AACH,8BAAsB,gBAAiB,YAAW,YAAY;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;IAO7E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,EACtC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIjE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CASjG;AAED;;;GAGG;AACH,8BAAsB,gBAAiB,YAAW,YAAY;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;IAO7E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,EACtC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,IAAI,CAAC;IASV,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7F"}
|
package/dist/base/index.js
CHANGED
|
@@ -37,10 +37,15 @@ export class BaseAgentAdapter {
|
|
|
37
37
|
return basicDetect(this.projectPaths, this.globalPaths);
|
|
38
38
|
}
|
|
39
39
|
async ensureTarget(skillName, targetPath, canonical, mode, options) {
|
|
40
|
-
await linkManager.ensureLink(canonical, targetPath, {
|
|
40
|
+
await linkManager.ensureLink(canonical, targetPath, {
|
|
41
|
+
mode,
|
|
42
|
+
relative: options?.relative,
|
|
43
|
+
dryRun: options?.dryRun,
|
|
44
|
+
force: options?.force,
|
|
45
|
+
});
|
|
41
46
|
}
|
|
42
|
-
async removeTarget(skillName, targetPath) {
|
|
43
|
-
await linkManager.removeLink(targetPath);
|
|
47
|
+
async removeTarget(skillName, targetPath, canonical) {
|
|
48
|
+
await linkManager.removeLink(targetPath, canonical);
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
//# sourceMappingURL=index.js.map
|
package/dist/base/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAsB,EAAE,WAAqB;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAClD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,OAAgB,gBAAgB;IAC3B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,YAAY,CAAW;IACvB,WAAW,CAAW;IAE/B,YAAY,EAAU,EAAE,IAAY,EAAE,YAAsB,EAAE,WAAqB;QACjF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,IAAsC,EACtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAsB,EAAE,WAAqB;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAClD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,OAAgB,gBAAgB;IAC3B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,YAAY,CAAW;IACvB,WAAW,CAAW;IAE/B,YAAY,EAAU,EAAE,IAAY,EAAE,YAAsB,EAAE,WAAqB;QACjF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,IAAsC,EACtC,OAAmE;QAEnE,MAAM,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE;YAClD,IAAI;YACJ,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,UAAkB,EAAE,SAAkB;QAC1E,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;CACF"}
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,YAAY,CAsBzE"}
|
package/dist/factory.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
1
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { BaseAgentAdapter, basicDetect } from './base/index.js';
|
|
4
4
|
import { pathExists } from '@skillctl/link-manager';
|
|
@@ -11,7 +11,11 @@ export function createPathAdapter(config) {
|
|
|
11
11
|
if (config.detectDirs?.length) {
|
|
12
12
|
const cwd = process.cwd();
|
|
13
13
|
for (const d of config.detectDirs) {
|
|
14
|
-
const p = d.startsWith('~')
|
|
14
|
+
const p = d.startsWith('~')
|
|
15
|
+
? join(homedir(), d.slice(2))
|
|
16
|
+
: isAbsolute(d)
|
|
17
|
+
? d
|
|
18
|
+
: resolve(cwd, d);
|
|
15
19
|
if (await pathExists(p))
|
|
16
20
|
return true;
|
|
17
21
|
}
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUpD,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,WAAY,SAAQ,gBAAgB;QACxC;YACE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACzE,CAAC;QAED,KAAK,CAAC,MAAM;YACV,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;wBACzB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;4BACb,CAAC,CAAC,CAAC;4BACH,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACtB,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,CAAC;KACF;IACD,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAmB9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACnG,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,eAAO,MAAM,WAAW,EAAE,YAAY,EAAqB,CAAC;AAE5D,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA0BD,wBAAsB,eAAe,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAmB9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACnG,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,eAAO,MAAM,WAAW,EAAE,YAAY,EAAqB,CAAC;AAE5D,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA0BD,wBAAsB,eAAe,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiErF;AAED,eAAO,MAAM,WAAW,UAAoC,CAAC;AAE7D,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ async function countSkillsInDir(dir) {
|
|
|
33
33
|
try {
|
|
34
34
|
const items = await readdir(dir, { withFileTypes: true });
|
|
35
35
|
for (const item of items) {
|
|
36
|
-
if (!item.isDirectory() || item.name.startsWith('.'))
|
|
36
|
+
if ((!item.isDirectory() && !item.isSymbolicLink()) || item.name.startsWith('.'))
|
|
37
37
|
continue;
|
|
38
38
|
for (const name of ['SKILL.md', 'skill.md']) {
|
|
39
39
|
try {
|
|
@@ -82,10 +82,12 @@ export async function scanCoexistence(cwd = process.cwd()) {
|
|
|
82
82
|
recs.push('Run `skillctl import from-npx --dry-run` to migrate into canonical store');
|
|
83
83
|
}
|
|
84
84
|
const skillctlHome = join(homedir(), '.skillctl');
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
const pythonRepos = join(skillctlHome, 'repos');
|
|
86
|
+
const pythonManifest = join(skillctlHome, 'manifest.json');
|
|
87
|
+
if ((await pathExists(pythonRepos)) || (await pathExists(pythonManifest))) {
|
|
88
|
+
details.push('Found Python skillctl data under ~/.skillctl');
|
|
87
89
|
paths.push(skillctlHome);
|
|
88
|
-
recs.push('Run `skillctl import
|
|
90
|
+
recs.push('Run `skillctl import from-skillctl --dry-run` if using Python skillctl');
|
|
89
91
|
}
|
|
90
92
|
const npxLock = join(cwd, 'skills-lock.json');
|
|
91
93
|
if (await pathExists(npxLock)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,gBAAgB,GAAmB;IACvC,aAAa;IACb,aAAa;IACb,eAAe;IACf,YAAY;IACZ,aAAa;IACb,WAAW;CACZ,CAAC;AAEF,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;IACvC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACnG,cAAc,iBAAiB,CAAC;AAGhC,MAAM,CAAC,MAAM,WAAW,GAAmB,gBAAgB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAuB;IAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,OAAO,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;AACxE,CAAC;AASD,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
CHANGED
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
import type { AgentAdapter } from '@skillctl/core';
|
|
1
|
+
import type { AgentAdapter, LinkMode } from '@skillctl/core';
|
|
2
2
|
export interface SkillTarget {
|
|
3
3
|
name: string;
|
|
4
4
|
canonicalPath: string;
|
|
5
5
|
}
|
|
6
|
+
export type SyncScope = 'project' | 'global' | 'both';
|
|
7
|
+
export type SyncActionKind = 'created' | 'updated' | 'unchanged' | 'pruned' | 'skipped' | 'failed';
|
|
8
|
+
export interface SyncAction {
|
|
9
|
+
skill: string;
|
|
10
|
+
adapter: string;
|
|
11
|
+
scope: 'project' | 'global';
|
|
12
|
+
target: string;
|
|
13
|
+
action: SyncActionKind;
|
|
14
|
+
message?: string;
|
|
15
|
+
}
|
|
6
16
|
export interface SyncOptions {
|
|
7
|
-
mode?:
|
|
17
|
+
mode?: LinkMode;
|
|
8
18
|
dryRun?: boolean;
|
|
19
|
+
scope?: SyncScope;
|
|
20
|
+
adapterIds?: string[];
|
|
9
21
|
adapters?: AgentAdapter[];
|
|
22
|
+
prune?: boolean;
|
|
10
23
|
}
|
|
11
|
-
export
|
|
12
|
-
|
|
24
|
+
export interface SyncResult {
|
|
25
|
+
actions: SyncAction[];
|
|
13
26
|
adaptersUsed: string[];
|
|
27
|
+
counts: Record<SyncActionKind, number>;
|
|
28
|
+
/** @deprecated Use counts/actions. */
|
|
29
|
+
synced: number;
|
|
30
|
+
/** @deprecated Use actions. */
|
|
14
31
|
notes: string[];
|
|
15
|
-
}
|
|
32
|
+
}
|
|
33
|
+
export declare function syncSkillsToAgents(skills: SkillTarget[], options?: SyncOptions): Promise<SyncResult>;
|
|
16
34
|
export { getEnabledAdapters, scanCoexistence } from './index.js';
|
|
17
35
|
//# sourceMappingURL=sync.d.ts.map
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACvC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA4CrB;AA8FD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/sync.js
CHANGED
|
@@ -1,46 +1,124 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readdir } from 'node:fs/promises';
|
|
2
|
+
import { getRegisteredAdapters, loadConfig, resolveAdapterTarget } from '@skillctl/core';
|
|
3
|
+
import { linkManager } from '@skillctl/link-manager';
|
|
2
4
|
import { getEnabledAdapters } from './index.js';
|
|
3
5
|
export async function syncSkillsToAgents(skills, options = {}) {
|
|
4
6
|
const cfg = await loadConfig();
|
|
5
7
|
const mode = options.mode || cfg.defaultMode;
|
|
6
|
-
const
|
|
8
|
+
const scope = options.scope || 'both';
|
|
9
|
+
const explicit = Boolean(options.adapters || options.adapterIds?.length);
|
|
10
|
+
const adapters = options.adapters || selectAdapters(options.adapterIds, await getEnabledAdapters(cfg));
|
|
7
11
|
const cwd = process.cwd();
|
|
8
|
-
const
|
|
9
|
-
let synced = 0;
|
|
12
|
+
const actions = [];
|
|
10
13
|
const used = [];
|
|
11
14
|
for (const adapter of adapters) {
|
|
12
|
-
const relevant = await adapter.detect();
|
|
13
|
-
if (!relevant
|
|
14
|
-
|
|
15
|
+
const relevant = explicit || (await adapter.detect());
|
|
16
|
+
if (!relevant) {
|
|
17
|
+
actions.push({
|
|
18
|
+
skill: '*', adapter: adapter.id, scope: 'project', target: '', action: 'skipped',
|
|
19
|
+
message: `${adapter.name} not detected`,
|
|
20
|
+
});
|
|
15
21
|
continue;
|
|
16
22
|
}
|
|
17
23
|
used.push(adapter.id);
|
|
18
|
-
|
|
19
|
-
for (const
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
await adapter.ensureTarget(skill.name, fullTarget, skill.canonicalPath, mode, { relative: true });
|
|
23
|
-
synced++;
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
notes.push(`Failed ensure for ${skill.name} on ${adapter.id}: ${e.message}`);
|
|
27
|
-
}
|
|
24
|
+
if (scope !== 'global') {
|
|
25
|
+
for (const basePath of adapter.projectPaths) {
|
|
26
|
+
await syncBase(adapter, basePath, 'project', skills, mode, cfg.store, cwd, options, actions);
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
for (const
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
await adapter.ensureTarget(skill.name, fullTarget, skill.canonicalPath, mode);
|
|
35
|
-
synced++;
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
notes.push(`Failed ensure for ${skill.name} on ${adapter.id}: ${e.message}`);
|
|
39
|
-
}
|
|
29
|
+
if (scope !== 'project') {
|
|
30
|
+
for (const basePath of adapter.globalPaths) {
|
|
31
|
+
await syncBase(adapter, basePath, 'global', skills, mode, cfg.store, cwd, options, actions);
|
|
40
32
|
}
|
|
41
33
|
}
|
|
42
34
|
}
|
|
43
|
-
|
|
35
|
+
const counts = emptyCounts();
|
|
36
|
+
for (const action of actions)
|
|
37
|
+
counts[action.action]++;
|
|
38
|
+
return {
|
|
39
|
+
actions,
|
|
40
|
+
adaptersUsed: used,
|
|
41
|
+
counts,
|
|
42
|
+
synced: counts.created + counts.updated + counts.unchanged,
|
|
43
|
+
notes: actions
|
|
44
|
+
.filter((action) => action.action === 'failed' || action.action === 'skipped')
|
|
45
|
+
.map((action) => action.message || `${action.action}: ${action.target}`),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function selectAdapters(ids, enabled) {
|
|
49
|
+
if (!ids?.length)
|
|
50
|
+
return enabled;
|
|
51
|
+
const unique = [...new Set(ids)];
|
|
52
|
+
const registered = getRegisteredAdapters();
|
|
53
|
+
const selected = [];
|
|
54
|
+
for (const id of unique) {
|
|
55
|
+
const adapter = registered.find((candidate) => candidate.id === id);
|
|
56
|
+
if (!adapter)
|
|
57
|
+
throw new Error(`Unknown agent adapter: ${id}`);
|
|
58
|
+
selected.push(adapter);
|
|
59
|
+
}
|
|
60
|
+
return selected;
|
|
61
|
+
}
|
|
62
|
+
async function syncBase(adapter, basePath, scope, skills, mode, store, cwd, options, actions) {
|
|
63
|
+
for (const skill of skills) {
|
|
64
|
+
const target = resolveAdapterTarget(basePath, skill.name, cwd);
|
|
65
|
+
try {
|
|
66
|
+
const state = await linkManager.targetState(skill.canonicalPath, target);
|
|
67
|
+
if (!options.dryRun) {
|
|
68
|
+
await adapter.ensureTarget(skill.name, target, skill.canonicalPath, mode, {
|
|
69
|
+
relative: scope === 'project',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
actions.push({
|
|
73
|
+
skill: skill.name,
|
|
74
|
+
adapter: adapter.id,
|
|
75
|
+
scope,
|
|
76
|
+
target,
|
|
77
|
+
action: state === 'missing' ? 'created' : state === 'current' ? 'unchanged' : state === 'managed-stale' ? 'updated' : 'failed',
|
|
78
|
+
message: state === 'unmanaged' ? 'Refusing to overwrite unmanaged target' : undefined,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
actions.push({
|
|
83
|
+
skill: skill.name, adapter: adapter.id, scope, target, action: 'failed',
|
|
84
|
+
message: err.message,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (options.prune)
|
|
89
|
+
await pruneBase(adapter, basePath, scope, skills, store, cwd, options.dryRun, actions);
|
|
90
|
+
}
|
|
91
|
+
async function pruneBase(adapter, basePath, scope, skills, store, cwd, dryRun, actions) {
|
|
92
|
+
const base = resolveAdapterTarget(basePath, '', cwd);
|
|
93
|
+
const desired = new Set(skills.map((skill) => skill.name));
|
|
94
|
+
const entries = await readdir(base, { withFileTypes: true }).catch(() => []);
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
if (entry.name.startsWith('.') || desired.has(entry.name))
|
|
97
|
+
continue;
|
|
98
|
+
const target = resolveAdapterTarget(basePath, entry.name, cwd);
|
|
99
|
+
const inspection = await linkManager.inspectManagedTarget(target, store);
|
|
100
|
+
if (inspection.kind === 'unmanaged' || inspection.kind === 'missing' || !inspection.canonical) {
|
|
101
|
+
actions.push({
|
|
102
|
+
skill: entry.name, adapter: adapter.id, scope, target, action: 'skipped',
|
|
103
|
+
message: 'Prune preserved unmanaged target',
|
|
104
|
+
});
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
if (!dryRun)
|
|
109
|
+
await adapter.removeTarget(entry.name, target, inspection.canonical);
|
|
110
|
+
actions.push({ skill: entry.name, adapter: adapter.id, scope, target, action: 'pruned' });
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
actions.push({
|
|
114
|
+
skill: entry.name, adapter: adapter.id, scope, target, action: 'failed',
|
|
115
|
+
message: err.message,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function emptyCounts() {
|
|
121
|
+
return { created: 0, updated: 0, unchanged: 0, pruned: 0, skipped: 0, failed: 0 };
|
|
44
122
|
}
|
|
45
123
|
export { getEnabledAdapters, scanCoexistence } from './index.js';
|
|
46
124
|
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillctl/adapters",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Agent adapters for Claude Code, Cursor, OpenCode, Codex, Gemini CLI + sync and coexistence detection",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "xFurti & Gabry848",
|
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"files": [
|
|
11
|
-
"dist"
|
|
11
|
+
"dist",
|
|
12
|
+
"!dist/test"
|
|
12
13
|
],
|
|
13
14
|
"dependencies": {
|
|
14
|
-
"@skillctl/
|
|
15
|
-
"@skillctl/
|
|
15
|
+
"@skillctl/link-manager": "0.5.0",
|
|
16
|
+
"@skillctl/core": "0.5.0"
|
|
16
17
|
},
|
|
17
18
|
"devDependencies": {
|
|
18
19
|
"@types/node": "^20.14.0",
|
|
@@ -41,6 +42,6 @@
|
|
|
41
42
|
"dev": "tsc -b --watch",
|
|
42
43
|
"clean": "rimraf dist",
|
|
43
44
|
"lint": "tsc --noEmit",
|
|
44
|
-
"test": "node --test ./dist/test/*.test.js
|
|
45
|
+
"test": "node --test ./dist/test/*.test.js"
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-detect-ensure.test.d.ts","sourceRoot":"","sources":["../../src/test/adapter-detect-ensure.test.ts"],"names":[],"mappings":"AAmBA,iBAAe,QAAQ,kBA6HtB;AAMD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for PR6 adapters: detect + ensureTarget/remove (using LinkManager under the hood).
|
|
3
|
-
* Uses temp dirs for project/global simulation + mocks via temp fs (no real ~).
|
|
4
|
-
* Covers claude, cursor, opencode + coexistence.
|
|
5
|
-
*/
|
|
6
|
-
import assert from 'node:assert/strict';
|
|
7
|
-
import { mkdtemp, rm, mkdir, writeFile, stat } from 'node:fs/promises';
|
|
8
|
-
import { join } from 'node:path';
|
|
9
|
-
import { tmpdir } from 'node:os';
|
|
10
|
-
import { claudeAdapter, cursorAdapter, opencodeAdapter, grokAdapter, scanCoexistence, syncSkillsToAgents, } from '../index.js';
|
|
11
|
-
async function runTests() {
|
|
12
|
-
console.log('Running PR6 adapter detect + ensure tests...');
|
|
13
|
-
const tmp = await mkdtemp(join(tmpdir(), 'skillctl-adapters-test-'));
|
|
14
|
-
const projectDir = join(tmp, 'project');
|
|
15
|
-
const fakeHome = join(tmp, 'fakehome'); // mock homedir for global paths
|
|
16
|
-
await mkdir(projectDir, { recursive: true });
|
|
17
|
-
await mkdir(fakeHome, { recursive: true });
|
|
18
|
-
// Patch homedir for the duration of test (monkey for global paths in adapters)
|
|
19
|
-
let origHomedir = (await import('node:os')).homedir;
|
|
20
|
-
// @ts-ignore - replace for test
|
|
21
|
-
(await import('node:os')).homedir = () => fakeHome;
|
|
22
|
-
let origCwd = process.cwd;
|
|
23
|
-
try {
|
|
24
|
-
// --- Detect tests (basic + marker) ---
|
|
25
|
-
// claude
|
|
26
|
-
assert.strictEqual(await claudeAdapter.detect(), false, 'claude should not detect empty');
|
|
27
|
-
await mkdir(join(projectDir, '.claude', 'skills'), { recursive: true });
|
|
28
|
-
// cd simulation: adapters use process.cwd()
|
|
29
|
-
origCwd = process.cwd;
|
|
30
|
-
process.cwd = () => projectDir;
|
|
31
|
-
assert.strictEqual(await claudeAdapter.detect(), true, 'claude should detect .claude');
|
|
32
|
-
await rm(join(projectDir, '.claude'), { recursive: true, force: true });
|
|
33
|
-
// cursor
|
|
34
|
-
await mkdir(join(projectDir, '.agents', 'skills'), { recursive: true });
|
|
35
|
-
assert.strictEqual(await cursorAdapter.detect(), true, 'cursor detects .agents/skills');
|
|
36
|
-
await rm(join(projectDir, '.agents'), { recursive: true, force: true });
|
|
37
|
-
// opencode
|
|
38
|
-
await mkdir(join(projectDir, '.opencode'), { recursive: true });
|
|
39
|
-
assert.strictEqual(await opencodeAdapter.detect(), true, 'opencode detects .opencode');
|
|
40
|
-
await rm(join(projectDir, '.opencode'), { recursive: true, force: true });
|
|
41
|
-
// grok
|
|
42
|
-
await mkdir(join(projectDir, '.grok', 'skills'), { recursive: true });
|
|
43
|
-
assert.strictEqual(await grokAdapter.detect(), true, 'grok detects .grok/skills');
|
|
44
|
-
await rm(join(projectDir, '.grok'), { recursive: true, force: true });
|
|
45
|
-
// restore temp for next section
|
|
46
|
-
process.cwd = origCwd;
|
|
47
|
-
// --- Coexistence scan stub ---
|
|
48
|
-
await mkdir(join(projectDir, '.agents', 'skills'), { recursive: true });
|
|
49
|
-
await writeFile(join(projectDir, 'skills-lock.json'), '{}');
|
|
50
|
-
const coexist = await scanCoexistence(projectDir);
|
|
51
|
-
assert.ok(coexist.detected, 'coexistence should detect .agents + lock');
|
|
52
|
-
assert.ok(coexist.details.some((d) => d.includes('.agents/skills')));
|
|
53
|
-
assert.ok(coexist.details.some((d) => d.includes('skills-lock.json')));
|
|
54
|
-
await rm(join(projectDir, '.agents'), { recursive: true, force: true });
|
|
55
|
-
await rm(join(projectDir, 'skills-lock.json'), { force: true });
|
|
56
|
-
// --- Ensure + remove using LinkManager (real fs in tmp) ---
|
|
57
|
-
// Simulate canonical skill
|
|
58
|
-
const canonical = join(tmp, 'canonical', 'demo-skill');
|
|
59
|
-
await mkdir(join(canonical), { recursive: true });
|
|
60
|
-
await writeFile(join(canonical, 'SKILL.md'), '---\nname: demo-skill\n---\nDemo');
|
|
61
|
-
// Use claude adapter ensure with project path resolved
|
|
62
|
-
const claudeSkillsRoot = join(projectDir, '.claude', 'skills');
|
|
63
|
-
const targetForSkill = join(claudeSkillsRoot, 'demo-skill');
|
|
64
|
-
// call ensureTarget (adapters append? no, we pass full target)
|
|
65
|
-
await claudeAdapter.ensureTarget('demo-skill', targetForSkill, canonical, 'copy'); // use copy for test reliability (no symlink perms)
|
|
66
|
-
// verify created
|
|
67
|
-
const tstat = await stat(targetForSkill);
|
|
68
|
-
assert.ok(tstat.isDirectory(), 'target skill dir created by ensure');
|
|
69
|
-
// verify contents via link or copy
|
|
70
|
-
const skillMd = join(targetForSkill, 'SKILL.md');
|
|
71
|
-
const sstat = await stat(skillMd);
|
|
72
|
-
assert.ok(sstat.isFile());
|
|
73
|
-
// removeTarget
|
|
74
|
-
await claudeAdapter.removeTarget('demo-skill', targetForSkill);
|
|
75
|
-
try {
|
|
76
|
-
await stat(targetForSkill);
|
|
77
|
-
assert.fail('target should be removed');
|
|
78
|
-
}
|
|
79
|
-
catch (e) {
|
|
80
|
-
assert.ok(e.code === 'ENOENT' || e.code === 'ENOTDIR');
|
|
81
|
-
}
|
|
82
|
-
// Test via syncSkillsToAgents (wiring)
|
|
83
|
-
const fakeCanonical2 = join(tmp, 'canonical', 'sync-skill');
|
|
84
|
-
await mkdir(fakeCanonical2, { recursive: true });
|
|
85
|
-
await writeFile(join(fakeCanonical2, 'SKILL.md'), 'sync test');
|
|
86
|
-
// override cwd again
|
|
87
|
-
process.cwd = () => projectDir;
|
|
88
|
-
const res = await syncSkillsToAgents([{ name: 'sync-skill', canonicalPath: fakeCanonical2 }], { mode: 'copy', adapters: [claudeAdapter] } // pass explicit to avoid detect skip
|
|
89
|
-
);
|
|
90
|
-
assert.ok(res.synced >= 1, 'sync should ensure at least one');
|
|
91
|
-
assert.ok(res.adaptersUsed.includes('claude-code'));
|
|
92
|
-
if (process.platform !== 'win32') {
|
|
93
|
-
const relCanonical = join(tmp, 'canonical', 'relative-skill');
|
|
94
|
-
await mkdir(relCanonical, { recursive: true });
|
|
95
|
-
await writeFile(join(relCanonical, 'SKILL.md'), 'relative');
|
|
96
|
-
await syncSkillsToAgents([{ name: 'relative-skill', canonicalPath: relCanonical }], { mode: 'symlink', adapters: [claudeAdapter] });
|
|
97
|
-
const relTarget = join(projectDir, '.claude', 'skills', 'relative-skill');
|
|
98
|
-
const { readlink } = await import('node:fs/promises');
|
|
99
|
-
const linkVal = await readlink(relTarget);
|
|
100
|
-
assert.ok(!linkVal.startsWith('/') && !/^[A-Za-z]:/.test(linkVal), 'project link should be relative');
|
|
101
|
-
}
|
|
102
|
-
// cleanup created
|
|
103
|
-
await rm(join(projectDir, '.claude'), { recursive: true, force: true });
|
|
104
|
-
console.log('All PR6 adapter detect/ensure/coexistence/sync tests passed.');
|
|
105
|
-
}
|
|
106
|
-
finally {
|
|
107
|
-
// restore
|
|
108
|
-
process.cwd = origCwd;
|
|
109
|
-
// @ts-ignore restore
|
|
110
|
-
(await import('node:os')).homedir = origHomedir;
|
|
111
|
-
await rm(tmp, { recursive: true, force: true });
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
115
|
-
runTests().catch((e) => { console.error(e); process.exit(1); });
|
|
116
|
-
}
|
|
117
|
-
export { runTests };
|
|
118
|
-
//# sourceMappingURL=adapter-detect-ensure.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-detect-ensure.test.js","sourceRoot":"","sources":["../../src/test/adapter-detect-ensure.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAA0B,MAAM,SAAS,CAAC;AACzD,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,KAAK,UAAU,QAAQ;IACrB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,gCAAgC;IACxE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,+EAA+E;IAC/E,IAAI,WAAW,GAAQ,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,gCAAgC;IAChC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;IAEnD,IAAI,OAAO,GAAQ,OAAO,CAAC,GAAG,CAAC;IAE/B,IAAI,CAAC;QACH,wCAAwC;QACxC,SAAS;QACT,MAAM,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,gCAAgC,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,4CAA4C;QAC5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACtB,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,UAAiB,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,SAAS;QACT,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,+BAA+B,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,WAAW;QACX,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,4BAA4B,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,OAAO;QACP,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;QAClF,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,gCAAgC;QAChC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QAEtB,gCAAgC;QAChC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,6DAA6D;QAC7D,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,kCAAkC,CAAC,CAAC;QAEjF,uDAAuD;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAE5D,+DAA+D;QAC/D,MAAM,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,mDAAmD;QAEtI,iBAAiB;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,oCAAoC,CAAC,CAAC;QAErE,mCAAmC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1B,eAAe;QACf,MAAM,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAED,uCAAuC;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;QAE/D,qBAAqB;QACrB,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,UAAiB,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAClC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,EACvD,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,qCAAqC;SAClF,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAEpD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5D,MAAM,kBAAkB,CACtB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EACzD,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAC/C,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAC1E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACxG,CAAC;QAED,kBAAkB;QAClB,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;YAAS,CAAC;QACT,UAAU;QACV,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtB,qBAAqB;QACrB,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;QAChD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|