@skillctl/adapters 0.3.1 → 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 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.
@@ -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
@@ -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,GAC/B,OAAO,CAAC,IAAI,CAAC;IAIV,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
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"}
@@ -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, { mode: mode, relative: options?.relative });
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
@@ -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,OAAgC;QAEhC,MAAM,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,UAAkB;QACtD,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;CACF"}
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"}
@@ -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,CAkBzE"}
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('~') ? join(homedir(), d.slice(2)) : join(cwd, d);
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,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,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACzE,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"}
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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Grok Adapter.
3
+ * Paths:
4
+ * global: ~/.grok/skills
5
+ * project: .grok/skills
6
+ */
7
+ import { BaseAgentAdapter } from '../base/index.js';
8
+ import type { AgentAdapter } from '@skillctl/core';
9
+ export declare class GrokAdapter extends BaseAgentAdapter implements AgentAdapter {
10
+ constructor();
11
+ detect(): Promise<boolean>;
12
+ }
13
+ export declare const grokAdapter: GrokAdapter;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grok/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAA8B,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,qBAAa,WAAY,SAAQ,gBAAiB,YAAW,YAAY;;IAKjE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CASjC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Grok Adapter.
3
+ * Paths:
4
+ * global: ~/.grok/skills
5
+ * project: .grok/skills
6
+ */
7
+ import { BaseAgentAdapter, join, homedir, basicDetect } from '../base/index.js';
8
+ import { pathExists } from '@skillctl/link-manager';
9
+ export class GrokAdapter extends BaseAgentAdapter {
10
+ constructor() {
11
+ super('grok', 'Grok', ['.grok/skills'], [join(homedir(), '.grok', 'skills')]);
12
+ }
13
+ async detect() {
14
+ const cwd = process.cwd();
15
+ const project = join(cwd, '.grok');
16
+ const global = join(homedir(), '.grok');
17
+ if ((await pathExists(project)) || (await pathExists(global))) {
18
+ return true;
19
+ }
20
+ return basicDetect(this.projectPaths, this.globalPaths);
21
+ }
22
+ }
23
+ export const grokAdapter = new GrokAdapter();
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/grok/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAC/C;QACE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,8 @@ import { cursorAdapter } from './cursor/index.js';
4
4
  import { opencodeAdapter } from './opencode/index.js';
5
5
  import { codexAdapter } from './codex/index.js';
6
6
  import { geminiAdapter } from './gemini/index.js';
7
- export { claudeAdapter, cursorAdapter, opencodeAdapter, codexAdapter, geminiAdapter };
7
+ import { grokAdapter } from './grok/index.js';
8
+ export { claudeAdapter, cursorAdapter, opencodeAdapter, codexAdapter, geminiAdapter, grokAdapter };
8
9
  export * from './base/index.js';
9
10
  export type { AgentAdapter };
10
11
  export declare const allAdapters: AgentAdapter[];
@@ -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;AAkBlD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACtF,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,CA+DrF;AAED,eAAO,MAAM,WAAW,UAAoC,CAAC;AAE7D,cAAc,WAAW,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
@@ -4,6 +4,7 @@ import { cursorAdapter } from './cursor/index.js';
4
4
  import { opencodeAdapter } from './opencode/index.js';
5
5
  import { codexAdapter } from './codex/index.js';
6
6
  import { geminiAdapter } from './gemini/index.js';
7
+ import { grokAdapter } from './grok/index.js';
7
8
  import { pathExists } from './base/index.js';
8
9
  import { join } from 'node:path';
9
10
  import { homedir } from 'node:os';
@@ -14,11 +15,12 @@ const BUILTIN_ADAPTERS = [
14
15
  opencodeAdapter,
15
16
  codexAdapter,
16
17
  geminiAdapter,
18
+ grokAdapter,
17
19
  ];
18
20
  for (const adapter of BUILTIN_ADAPTERS) {
19
21
  registerAdapter(adapter);
20
22
  }
21
- export { claudeAdapter, cursorAdapter, opencodeAdapter, codexAdapter, geminiAdapter };
23
+ export { claudeAdapter, cursorAdapter, opencodeAdapter, codexAdapter, geminiAdapter, grokAdapter };
22
24
  export * from './base/index.js';
23
25
  export const allAdapters = BUILTIN_ADAPTERS;
24
26
  export async function getEnabledAdapters(config) {
@@ -31,7 +33,7 @@ async function countSkillsInDir(dir) {
31
33
  try {
32
34
  const items = await readdir(dir, { withFileTypes: true });
33
35
  for (const item of items) {
34
- if (!item.isDirectory() || item.name.startsWith('.'))
36
+ if ((!item.isDirectory() && !item.isSymbolicLink()) || item.name.startsWith('.'))
35
37
  continue;
36
38
  for (const name of ['SKILL.md', 'skill.md']) {
37
39
  try {
@@ -80,10 +82,12 @@ export async function scanCoexistence(cwd = process.cwd()) {
80
82
  recs.push('Run `skillctl import from-npx --dry-run` to migrate into canonical store');
81
83
  }
82
84
  const skillctlHome = join(homedir(), '.skillctl');
83
- if (await pathExists(skillctlHome)) {
84
- details.push('Found ~/.skillctl (may be python skillctl or skillctl canonical store)');
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');
85
89
  paths.push(skillctlHome);
86
- recs.push('Run `skillctl import --from-skillctl --dry-run` if using Python skillctl');
90
+ recs.push('Run `skillctl import from-skillctl --dry-run` if using Python skillctl');
87
91
  }
88
92
  const npxLock = join(cwd, 'skills-lock.json');
89
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":"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"}
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?: 'symlink' | 'copy' | 'junction';
17
+ mode?: LinkMode;
8
18
  dryRun?: boolean;
19
+ scope?: SyncScope;
20
+ adapterIds?: string[];
9
21
  adapters?: AgentAdapter[];
22
+ prune?: boolean;
10
23
  }
11
- export declare function syncSkillsToAgents(skills: SkillTarget[], options?: SyncOptions): Promise<{
12
- synced: number;
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
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4CtE;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
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 { loadConfig, resolveAdapterTarget } from '@skillctl/core';
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 adapters = options.adapters || (await getEnabledAdapters(cfg));
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 notes = [];
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 && !options.adapters) {
14
- notes.push(`Skipped ${adapter.name} (not detected)`);
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
- for (const basePath of adapter.projectPaths) {
19
- for (const skill of skills) {
20
- const fullTarget = resolveAdapterTarget(basePath, skill.name, cwd);
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
- for (const basePath of adapter.globalPaths) {
31
- for (const skill of skills) {
32
- const fullTarget = resolveAdapterTarget(basePath, skill.name, cwd);
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
- return { synced, adaptersUsed: used, notes };
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":"AACA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAahD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEtB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACnE,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClG,MAAM,EAAE,CAAC;gBACX,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACnE,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAC9E,MAAM,EAAE,CAAC;gBACX,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
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.1",
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/core": "0.3.1",
15
- "@skillctl/link-manager": "0.3.1"
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 2>&1 || echo 'run after build; tests use mocks'"
45
+ "test": "node --test ./dist/test/*.test.js"
45
46
  }
46
47
  }
@@ -1,3 +0,0 @@
1
- declare function runTests(): Promise<void>;
2
- export { runTests };
3
- //# sourceMappingURL=adapter-detect-ensure.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter-detect-ensure.test.d.ts","sourceRoot":"","sources":["../../src/test/adapter-detect-ensure.test.ts"],"names":[],"mappings":"AAkBA,iBAAe,QAAQ,kBAwHtB;AAMD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,114 +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, 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
- // restore temp for next section
42
- process.cwd = origCwd;
43
- // --- Coexistence scan stub ---
44
- await mkdir(join(projectDir, '.agents', 'skills'), { recursive: true });
45
- await writeFile(join(projectDir, 'skills-lock.json'), '{}');
46
- const coexist = await scanCoexistence(projectDir);
47
- assert.ok(coexist.detected, 'coexistence should detect .agents + lock');
48
- assert.ok(coexist.details.some((d) => d.includes('.agents/skills')));
49
- assert.ok(coexist.details.some((d) => d.includes('skills-lock.json')));
50
- await rm(join(projectDir, '.agents'), { recursive: true, force: true });
51
- await rm(join(projectDir, 'skills-lock.json'), { force: true });
52
- // --- Ensure + remove using LinkManager (real fs in tmp) ---
53
- // Simulate canonical skill
54
- const canonical = join(tmp, 'canonical', 'demo-skill');
55
- await mkdir(join(canonical), { recursive: true });
56
- await writeFile(join(canonical, 'SKILL.md'), '---\nname: demo-skill\n---\nDemo');
57
- // Use claude adapter ensure with project path resolved
58
- const claudeSkillsRoot = join(projectDir, '.claude', 'skills');
59
- const targetForSkill = join(claudeSkillsRoot, 'demo-skill');
60
- // call ensureTarget (adapters append? no, we pass full target)
61
- await claudeAdapter.ensureTarget('demo-skill', targetForSkill, canonical, 'copy'); // use copy for test reliability (no symlink perms)
62
- // verify created
63
- const tstat = await stat(targetForSkill);
64
- assert.ok(tstat.isDirectory(), 'target skill dir created by ensure');
65
- // verify contents via link or copy
66
- const skillMd = join(targetForSkill, 'SKILL.md');
67
- const sstat = await stat(skillMd);
68
- assert.ok(sstat.isFile());
69
- // removeTarget
70
- await claudeAdapter.removeTarget('demo-skill', targetForSkill);
71
- try {
72
- await stat(targetForSkill);
73
- assert.fail('target should be removed');
74
- }
75
- catch (e) {
76
- assert.ok(e.code === 'ENOENT' || e.code === 'ENOTDIR');
77
- }
78
- // Test via syncSkillsToAgents (wiring)
79
- const fakeCanonical2 = join(tmp, 'canonical', 'sync-skill');
80
- await mkdir(fakeCanonical2, { recursive: true });
81
- await writeFile(join(fakeCanonical2, 'SKILL.md'), 'sync test');
82
- // override cwd again
83
- process.cwd = () => projectDir;
84
- const res = await syncSkillsToAgents([{ name: 'sync-skill', canonicalPath: fakeCanonical2 }], { mode: 'copy', adapters: [claudeAdapter] } // pass explicit to avoid detect skip
85
- );
86
- assert.ok(res.synced >= 1, 'sync should ensure at least one');
87
- assert.ok(res.adaptersUsed.includes('claude-code'));
88
- if (process.platform !== 'win32') {
89
- const relCanonical = join(tmp, 'canonical', 'relative-skill');
90
- await mkdir(relCanonical, { recursive: true });
91
- await writeFile(join(relCanonical, 'SKILL.md'), 'relative');
92
- await syncSkillsToAgents([{ name: 'relative-skill', canonicalPath: relCanonical }], { mode: 'symlink', adapters: [claudeAdapter] });
93
- const relTarget = join(projectDir, '.claude', 'skills', 'relative-skill');
94
- const { readlink } = await import('node:fs/promises');
95
- const linkVal = await readlink(relTarget);
96
- assert.ok(!linkVal.startsWith('/') && !/^[A-Za-z]:/.test(linkVal), 'project link should be relative');
97
- }
98
- // cleanup created
99
- await rm(join(projectDir, '.claude'), { recursive: true, force: true });
100
- console.log('All PR6 adapter detect/ensure/coexistence/sync tests passed.');
101
- }
102
- finally {
103
- // restore
104
- process.cwd = origCwd;
105
- // @ts-ignore restore
106
- (await import('node:os')).homedir = origHomedir;
107
- await rm(tmp, { recursive: true, force: true });
108
- }
109
- }
110
- if (import.meta.url === `file://${process.argv[1]}`) {
111
- runTests().catch((e) => { console.error(e); process.exit(1); });
112
- }
113
- export { runTests };
114
- //# 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":"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"}