@untitled-devs/wasla 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.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/dist/adapters/base.d.ts +27 -0
  4. package/dist/adapters/base.d.ts.map +1 -0
  5. package/dist/adapters/base.js +9 -0
  6. package/dist/adapters/base.js.map +1 -0
  7. package/dist/adapters/claude.d.ts +31 -0
  8. package/dist/adapters/claude.d.ts.map +1 -0
  9. package/dist/adapters/claude.js +96 -0
  10. package/dist/adapters/claude.js.map +1 -0
  11. package/dist/adapters/cursor.d.ts +30 -0
  12. package/dist/adapters/cursor.d.ts.map +1 -0
  13. package/dist/adapters/cursor.js +60 -0
  14. package/dist/adapters/cursor.js.map +1 -0
  15. package/dist/adapters/factory.d.ts +5 -0
  16. package/dist/adapters/factory.d.ts.map +1 -0
  17. package/dist/adapters/factory.js +40 -0
  18. package/dist/adapters/factory.js.map +1 -0
  19. package/dist/adapters/gemini.d.ts +31 -0
  20. package/dist/adapters/gemini.d.ts.map +1 -0
  21. package/dist/adapters/gemini.js +99 -0
  22. package/dist/adapters/gemini.js.map +1 -0
  23. package/dist/adapters/github-copilot-cli.d.ts +30 -0
  24. package/dist/adapters/github-copilot-cli.d.ts.map +1 -0
  25. package/dist/adapters/github-copilot-cli.js +65 -0
  26. package/dist/adapters/github-copilot-cli.js.map +1 -0
  27. package/dist/adapters/github-copilot.d.ts +32 -0
  28. package/dist/adapters/github-copilot.d.ts.map +1 -0
  29. package/dist/adapters/github-copilot.js +86 -0
  30. package/dist/adapters/github-copilot.js.map +1 -0
  31. package/dist/adapters/openclaw.d.ts +28 -0
  32. package/dist/adapters/openclaw.d.ts.map +1 -0
  33. package/dist/adapters/openclaw.js +62 -0
  34. package/dist/adapters/openclaw.js.map +1 -0
  35. package/dist/adapters/opencode.d.ts +32 -0
  36. package/dist/adapters/opencode.d.ts.map +1 -0
  37. package/dist/adapters/opencode.js +102 -0
  38. package/dist/adapters/opencode.js.map +1 -0
  39. package/dist/cli/commands/config.d.ts +7 -0
  40. package/dist/cli/commands/config.d.ts.map +1 -0
  41. package/dist/cli/commands/config.js +66 -0
  42. package/dist/cli/commands/config.js.map +1 -0
  43. package/dist/cli/commands/install.d.ts +2 -0
  44. package/dist/cli/commands/install.d.ts.map +1 -0
  45. package/dist/cli/commands/install.js +27 -0
  46. package/dist/cli/commands/install.js.map +1 -0
  47. package/dist/cli/commands/register.d.ts +6 -0
  48. package/dist/cli/commands/register.d.ts.map +1 -0
  49. package/dist/cli/commands/register.js +56 -0
  50. package/dist/cli/commands/register.js.map +1 -0
  51. package/dist/cli/commands/status.d.ts +6 -0
  52. package/dist/cli/commands/status.d.ts.map +1 -0
  53. package/dist/cli/commands/status.js +37 -0
  54. package/dist/cli/commands/status.js.map +1 -0
  55. package/dist/cli/commands/sync-to.d.ts +8 -0
  56. package/dist/cli/commands/sync-to.d.ts.map +1 -0
  57. package/dist/cli/commands/sync-to.js +35 -0
  58. package/dist/cli/commands/sync-to.js.map +1 -0
  59. package/dist/cli/commands/sync.d.ts +6 -0
  60. package/dist/cli/commands/sync.d.ts.map +1 -0
  61. package/dist/cli/commands/sync.js +27 -0
  62. package/dist/cli/commands/sync.js.map +1 -0
  63. package/dist/cli/commands/visualizer.d.ts +11 -0
  64. package/dist/cli/commands/visualizer.d.ts.map +1 -0
  65. package/dist/cli/commands/visualizer.js +241 -0
  66. package/dist/cli/commands/visualizer.js.map +1 -0
  67. package/dist/cli/commands/watch.d.ts +6 -0
  68. package/dist/cli/commands/watch.d.ts.map +1 -0
  69. package/dist/cli/commands/watch.js +86 -0
  70. package/dist/cli/commands/watch.js.map +1 -0
  71. package/dist/cli/index.d.ts +3 -0
  72. package/dist/cli/index.d.ts.map +1 -0
  73. package/dist/cli/index.js +59 -0
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/core/registry.d.ts +20 -0
  76. package/dist/core/registry.d.ts.map +1 -0
  77. package/dist/core/registry.js +103 -0
  78. package/dist/core/registry.js.map +1 -0
  79. package/dist/core/scanner.d.ts +17 -0
  80. package/dist/core/scanner.d.ts.map +1 -0
  81. package/dist/core/scanner.js +227 -0
  82. package/dist/core/scanner.js.map +1 -0
  83. package/dist/core/types.d.ts +78 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/core/types.js +2 -0
  86. package/dist/core/types.js.map +1 -0
  87. package/dist/core/visualizer-types.d.ts +39 -0
  88. package/dist/core/visualizer-types.d.ts.map +1 -0
  89. package/dist/core/visualizer-types.js +2 -0
  90. package/dist/core/visualizer-types.js.map +1 -0
  91. package/dist/syncer/index.d.ts +31 -0
  92. package/dist/syncer/index.d.ts.map +1 -0
  93. package/dist/syncer/index.js +544 -0
  94. package/dist/syncer/index.js.map +1 -0
  95. package/dist/utils/cli-output.d.ts +12 -0
  96. package/dist/utils/cli-output.d.ts.map +1 -0
  97. package/dist/utils/cli-output.js +45 -0
  98. package/dist/utils/cli-output.js.map +1 -0
  99. package/dist/utils/fs.d.ts +14 -0
  100. package/dist/utils/fs.d.ts.map +1 -0
  101. package/dist/utils/fs.js +74 -0
  102. package/dist/utils/fs.js.map +1 -0
  103. package/dist/utils/paths.d.ts +7 -0
  104. package/dist/utils/paths.d.ts.map +1 -0
  105. package/dist/utils/paths.js +84 -0
  106. package/dist/utils/paths.js.map +1 -0
  107. package/package.json +122 -0
  108. package/src/visualizer/dist/assets/index-BRmeXR7T.js +144 -0
  109. package/src/visualizer/dist/index.html +12 -0
  110. package/src/visualizer/dist/logo.png +0 -0
@@ -0,0 +1,60 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { fileExists, writeText, ensureDir } from '../utils/fs.js';
3
+ import { dirname, join } from 'path';
4
+ import { getToolMarkers } from '../utils/paths.js';
5
+ export class CursorAdapter extends BaseAdapter {
6
+ constructor(scope = 'workspace') {
7
+ super();
8
+ this.name = 'cursor';
9
+ this.displayName = 'Cursor';
10
+ this.mcpKey = 'mcpServers';
11
+ this.contextFile = 'AGENTS.md';
12
+ this.formats = {
13
+ agent: 'md',
14
+ skill: 'md',
15
+ mcp: 'json',
16
+ context: 'md',
17
+ };
18
+ this.scope = scope;
19
+ }
20
+ get paths() {
21
+ const markers = getToolMarkers(this.scope);
22
+ const base = markers['cursor'];
23
+ return {
24
+ agent: join(base, 'agents'),
25
+ skill: join(base, 'skills'),
26
+ mcp: join(base, 'mcp.json'),
27
+ context: this.scope === 'workspace' ? join(dirname(base), 'AGENTS.md') : undefined,
28
+ };
29
+ }
30
+ get skillDirs() {
31
+ return [this.paths.skill];
32
+ }
33
+ async isInstalled() {
34
+ const markers = getToolMarkers(this.scope);
35
+ return fileExists(markers['cursor']);
36
+ }
37
+ async writeStub(asset, content, targetPath) {
38
+ if (asset.type === 'agent') {
39
+ await this.writeAgentStub(targetPath, content);
40
+ }
41
+ else {
42
+ await this.writeMcpStub(targetPath, content);
43
+ }
44
+ }
45
+ async writeAgentStub(targetPath, content) {
46
+ await ensureDir(dirname(targetPath));
47
+ await writeText(targetPath, content);
48
+ }
49
+ async writeMcpStub(targetPath, content) {
50
+ await ensureDir(dirname(targetPath));
51
+ await writeText(targetPath, content);
52
+ }
53
+ async installSkill() {
54
+ // TBD
55
+ }
56
+ getRootConfigAppend() {
57
+ return null;
58
+ }
59
+ }
60
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,OAAO,aAAc,SAAQ,WAAW;IAK5C,YAAY,QAA8B,WAAW;QACnD,KAAK,EAAE,CAAC;QALV,SAAI,GAAG,QAAQ,CAAC;QAChB,gBAAW,GAAG,QAAQ,CAAC;QAmBvB,WAAM,GAAG,YAAY,CAAC;QACtB,gBAAW,GAAG,WAAW,CAAC;QAM1B,YAAO,GAAG;YACR,KAAK,EAAE,IAAa;YACpB,KAAK,EAAE,IAAa;YACpB,GAAG,EAAE,MAAe;YACpB,OAAO,EAAE,IAAa;SACvB,CAAC;QA1BA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SACnF,CAAC;IACJ,CAAC;IAKD,IAAI,SAAS;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;IAC7B,CAAC;IASD,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAY,EAAE,OAAe,EAAE,UAAkB;QAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,OAAe;QAC9D,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,OAAe;QAC5D,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM;IACR,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { WaslaGenieAdapter } from '../core/types.js';
2
+ export declare function getAdapter(toolName: string, scope?: 'user' | 'workspace'): WaslaGenieAdapter;
3
+ export declare function getInstalledAdapters(scope?: 'user' | 'workspace'): Promise<WaslaGenieAdapter[]>;
4
+ export declare function getAllAdapters(scope?: 'user' | 'workspace'): WaslaGenieAdapter[];
5
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAiBrD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAM,GAAG,WAAyB,GACxC,iBAAiB,CAOnB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,GAAE,MAAM,GAAG,WAAyB,GACxC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAW9B;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,MAAM,GAAG,WAAyB,GAAG,iBAAiB,EAAE,CAE7F"}
@@ -0,0 +1,40 @@
1
+ import { OpenCodeAdapter } from './opencode.js';
2
+ import { CursorAdapter } from './cursor.js';
3
+ import { GithubCopilotAdapter } from './github-copilot.js';
4
+ import { GithubCopilotCliAdapter } from './github-copilot-cli.js';
5
+ import { ClaudeAdapter } from './claude.js';
6
+ import { GeminiAdapter } from './gemini.js';
7
+ import { OpenclawAdapter } from './openclaw.js';
8
+ function createAdapters(scope = 'user') {
9
+ return {
10
+ claude: new ClaudeAdapter(scope),
11
+ gemini: new GeminiAdapter(scope),
12
+ openclaw: new OpenclawAdapter(scope),
13
+ opencode: new OpenCodeAdapter(scope),
14
+ cursor: new CursorAdapter(scope),
15
+ 'github-copilot': new GithubCopilotAdapter(scope),
16
+ 'github-copilot-cli': new GithubCopilotCliAdapter(scope),
17
+ };
18
+ }
19
+ export function getAdapter(toolName, scope = 'workspace') {
20
+ const adapters = createAdapters(scope);
21
+ const adapter = adapters[toolName.toLowerCase()];
22
+ if (!adapter) {
23
+ throw new Error(`No adapter found for tool: ${toolName}`);
24
+ }
25
+ return adapter;
26
+ }
27
+ export async function getInstalledAdapters(scope = 'workspace') {
28
+ const adapters = Object.values(createAdapters(scope));
29
+ const installed = [];
30
+ for (const adapter of adapters) {
31
+ if (await adapter.isInstalled()) {
32
+ installed.push(adapter);
33
+ }
34
+ }
35
+ return installed;
36
+ }
37
+ export function getAllAdapters(scope = 'workspace') {
38
+ return Object.values(createAdapters(scope));
39
+ }
40
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,SAAS,cAAc,CAAC,QAA8B,MAAM;IAC1D,OAAO;QACL,MAAM,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC;QAChC,MAAM,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC;QAChC,QAAQ,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;QACpC,QAAQ,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;QACpC,MAAM,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC;QAChC,gBAAgB,EAAE,IAAI,oBAAoB,CAAC,KAAK,CAAC;QACjD,oBAAoB,EAAE,IAAI,uBAAuB,CAAC,KAAK,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,QAA8B,WAAW;IAEzC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAA8B,WAAW;IAEzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAA8B,WAAW;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { Asset } from '../core/types.js';
3
+ export declare class GeminiAdapter extends BaseAdapter {
4
+ name: string;
5
+ displayName: string;
6
+ private scope;
7
+ constructor(scope?: 'user' | 'workspace');
8
+ get paths(): {
9
+ agent: string;
10
+ skill: string;
11
+ mcp: string;
12
+ context: string;
13
+ };
14
+ mcpKey: string;
15
+ contextFile: string;
16
+ formats: {
17
+ agent: "md";
18
+ skill: "md";
19
+ mcp: "json";
20
+ context: "md";
21
+ };
22
+ get skillDirs(): string[];
23
+ isInstalled(): Promise<boolean>;
24
+ mcpFromNative(server: Record<string, unknown>): Record<string, unknown>;
25
+ writeStub(asset: Asset, content: string, targetPath: string): Promise<void>;
26
+ private writeSkillStub;
27
+ private writeMcpStub;
28
+ installSkill(): Promise<void>;
29
+ getRootConfigAppend(): string | null;
30
+ }
31
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,qBAAa,aAAc,SAAQ,WAAW;IAC5C,IAAI,SAAY;IAChB,WAAW,SAAgB;IAC3B,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,GAAE,MAAM,GAAG,WAAyB;IAKrD,IAAI,KAAK;;;;;MAYR;IAED,MAAM,SAAgB;IACtB,WAAW,SAAe;IAE1B,OAAO;;;;;MAKL;IAEF,IAAI,SAAS,aAEZ;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWjE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnE,cAAc;YAKd,YAAY;IAKpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCnC,mBAAmB,IAAI,MAAM,GAAG,IAAI;CAGrC"}
@@ -0,0 +1,99 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { fileExists, writeText, ensureDir } from '../utils/fs.js';
3
+ import { dirname, join } from 'path';
4
+ import { getToolMarkers } from '../utils/paths.js';
5
+ export class GeminiAdapter extends BaseAdapter {
6
+ constructor(scope = 'workspace') {
7
+ super();
8
+ this.name = 'gemini';
9
+ this.displayName = 'Gemini CLI';
10
+ this.mcpKey = 'mcpServers';
11
+ this.contextFile = 'GEMINI.md';
12
+ this.formats = {
13
+ agent: 'md',
14
+ skill: 'md',
15
+ mcp: 'json',
16
+ context: 'md',
17
+ };
18
+ this.scope = scope;
19
+ }
20
+ get paths() {
21
+ const markers = getToolMarkers(this.scope);
22
+ const workspaceRoot = dirname(markers.gemini);
23
+ return {
24
+ agent: join(markers.gemini, 'agents'),
25
+ skill: join(markers.gemini, 'skills'),
26
+ mcp: join(markers.gemini, 'settings.json'),
27
+ context: this.scope === 'workspace'
28
+ ? join(workspaceRoot, 'GEMINI.md')
29
+ : join(markers.gemini, 'GEMINI.md'),
30
+ };
31
+ }
32
+ get skillDirs() {
33
+ return [this.paths.skill];
34
+ }
35
+ async isInstalled() {
36
+ const markers = getToolMarkers(this.scope);
37
+ return fileExists(markers.gemini);
38
+ }
39
+ mcpFromNative(server) {
40
+ if (typeof server.command === 'string') {
41
+ return {
42
+ command: server.command,
43
+ ...(Array.isArray(server.args) ? { args: server.args } : {}),
44
+ ...(server.env && typeof server.env === 'object' ? { env: server.env } : {}),
45
+ };
46
+ }
47
+ return server;
48
+ }
49
+ async writeStub(asset, content, targetPath) {
50
+ if (asset.type === 'agent' || asset.type === 'skill') {
51
+ await this.writeSkillStub(targetPath, content);
52
+ }
53
+ else {
54
+ await this.writeMcpStub(targetPath, content);
55
+ }
56
+ }
57
+ async writeSkillStub(targetPath, content) {
58
+ await ensureDir(dirname(targetPath));
59
+ await writeText(targetPath, content);
60
+ }
61
+ async writeMcpStub(targetPath, content) {
62
+ await ensureDir(dirname(targetPath));
63
+ await writeText(targetPath, content);
64
+ }
65
+ async installSkill() {
66
+ // Create the skills/ directory (Gemini CLI's native skill location) and
67
+ // write a WaslaGenie skill file so Gemini knows how to run sync commands.
68
+ // We do NOT touch GEMINI.md — that file belongs to the user.
69
+ const skillDir = join(this.paths.skill, 'waslagenie');
70
+ await ensureDir(skillDir);
71
+ const skillPath = join(skillDir, 'SKILL.md');
72
+ if (await fileExists(skillPath)) {
73
+ return; // already installed, idempotent
74
+ }
75
+ const skillContent = `---
76
+ name: waslagenie
77
+ description: >
78
+ Runs WaslaGenie CLI commands to sync, inspect, or manage agents and MCPs
79
+ across AI orchestrators. Use when asked to sync tools, check sync status,
80
+ install WaslaGenie, or troubleshoot why an agent isn't appearing in a tool.
81
+ ---
82
+
83
+ # WaslaGenie Operator
84
+
85
+ Use the \`waslagenie\` CLI to sync agents and MCPs across all installed AI tools.
86
+
87
+ \`\`\`bash
88
+ waslagenie sync # Mirror agents across all tools
89
+ waslagenie status # Show registry state
90
+ waslagenie watch # Auto-sync on file changes
91
+ \`\`\`
92
+ `;
93
+ await writeText(skillPath, skillContent);
94
+ }
95
+ getRootConfigAppend() {
96
+ return null;
97
+ }
98
+ }
99
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { Asset } from '../core/types.js';
3
+ export declare class GithubCopilotCliAdapter extends BaseAdapter {
4
+ name: string;
5
+ displayName: string;
6
+ protected scope: 'user' | 'workspace';
7
+ constructor(scope?: 'user' | 'workspace');
8
+ get paths(): {
9
+ agent: string;
10
+ skill: string;
11
+ mcp: string;
12
+ context: string;
13
+ };
14
+ mcpKey: string;
15
+ contextFile: string;
16
+ get skillDirs(): string[];
17
+ formats: {
18
+ agent: "agent.md";
19
+ skill: "md";
20
+ mcp: "json";
21
+ context: "md";
22
+ };
23
+ isInstalled(): Promise<boolean>;
24
+ writeStub(asset: Asset, content: string, targetPath: string): Promise<void>;
25
+ private writeAgentStub;
26
+ private writeMcpStub;
27
+ installSkill(): Promise<void>;
28
+ getRootConfigAppend(): string | null;
29
+ }
30
+ //# sourceMappingURL=github-copilot-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot-cli.d.ts","sourceRoot":"","sources":["../../src/adapters/github-copilot-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,IAAI,SAAwB;IAC5B,WAAW,SAAwB;IACnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;gBAE1B,KAAK,GAAE,MAAM,GAAG,WAAyB;IAKrD,IAAI,KAAK;;;;;MASR;IAED,MAAM,SAAgB;IACtB,WAAW,SAAqC;IAEhD,IAAI,SAAS,aAEZ;IAED,OAAO;;;;;MAKL;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAY/B,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnE,cAAc;YAKd,YAAY;IAKpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,IAAI,MAAM,GAAG,IAAI;CAGrC"}
@@ -0,0 +1,65 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { fileExists, writeText, ensureDir } from '../utils/fs.js';
3
+ import { dirname, join } from 'path';
4
+ import { getToolMarkers } from '../utils/paths.js';
5
+ export class GithubCopilotCliAdapter extends BaseAdapter {
6
+ constructor(scope = 'workspace') {
7
+ super();
8
+ this.name = 'github-copilot-cli';
9
+ this.displayName = 'GitHub Copilot CLI';
10
+ this.mcpKey = 'mcpServers';
11
+ this.contextFile = '.github/copilot-instructions.md';
12
+ this.formats = {
13
+ agent: 'agent.md',
14
+ skill: 'md',
15
+ mcp: 'json',
16
+ context: 'md',
17
+ };
18
+ this.scope = scope;
19
+ }
20
+ get paths() {
21
+ const markers = getToolMarkers(this.scope);
22
+ const base = markers['github-copilot-cli'];
23
+ return {
24
+ agent: join(base, 'agents'),
25
+ skill: join(base, 'skills'),
26
+ mcp: this.scope === 'user' ? join(base, 'mcp-config.json') : join(dirname(base), '.mcp.json'),
27
+ context: join(base, 'copilot-instructions.md'),
28
+ };
29
+ }
30
+ get skillDirs() {
31
+ return [this.paths.skill];
32
+ }
33
+ async isInstalled() {
34
+ const markers = getToolMarkers(this.scope);
35
+ const base = markers['github-copilot-cli'];
36
+ return ((await fileExists(join(base, 'copilot-instructions.md'))) ||
37
+ (await fileExists(join(base, 'agents'))) ||
38
+ (await fileExists(join(base, 'skills'))) ||
39
+ (this.scope === 'workspace' && (await fileExists(join(dirname(base), '.mcp.json')))) ||
40
+ (this.scope === 'user' && (await fileExists(join(base, 'mcp-config.json')))));
41
+ }
42
+ async writeStub(asset, content, targetPath) {
43
+ if (asset.type === 'agent') {
44
+ await this.writeAgentStub(targetPath, content);
45
+ }
46
+ else {
47
+ await this.writeMcpStub(targetPath, content);
48
+ }
49
+ }
50
+ async writeAgentStub(targetPath, content) {
51
+ await ensureDir(dirname(targetPath));
52
+ await writeText(targetPath, content);
53
+ }
54
+ async writeMcpStub(targetPath, content) {
55
+ await ensureDir(dirname(targetPath));
56
+ await writeText(targetPath, content);
57
+ }
58
+ async installSkill() {
59
+ // TBD
60
+ }
61
+ getRootConfigAppend() {
62
+ return null;
63
+ }
64
+ }
65
+ //# sourceMappingURL=github-copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot-cli.js","sourceRoot":"","sources":["../../src/adapters/github-copilot-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { Asset } from '../core/types.js';
3
+ export declare class GithubCopilotAdapter extends BaseAdapter {
4
+ name: string;
5
+ displayName: string;
6
+ protected scope: 'user' | 'workspace';
7
+ constructor(scope?: 'user' | 'workspace');
8
+ get paths(): {
9
+ agent: string;
10
+ skill: string;
11
+ mcp: string;
12
+ context: string;
13
+ };
14
+ mcpKey: string;
15
+ contextFile: string;
16
+ get skillDirs(): string[];
17
+ formats: {
18
+ agent: "agent.md";
19
+ skill: "md";
20
+ mcp: "json";
21
+ context: "md";
22
+ };
23
+ isInstalled(): Promise<boolean>;
24
+ mcpFromNative(server: Record<string, unknown>): Record<string, unknown>;
25
+ mcpToNative(server: Record<string, unknown>): Record<string, unknown>;
26
+ writeStub(asset: Asset, content: string, targetPath: string): Promise<void>;
27
+ private writeAgentStub;
28
+ private writeMcpStub;
29
+ installSkill(): Promise<void>;
30
+ getRootConfigAppend(): string | null;
31
+ }
32
+ //# sourceMappingURL=github-copilot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot.d.ts","sourceRoot":"","sources":["../../src/adapters/github-copilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,IAAI,SAAoB;IACxB,WAAW,SAAoB;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;gBAE1B,KAAK,GAAE,MAAM,GAAG,WAAyB;IAKrD,IAAI,KAAK;;;;;MAUR;IAED,MAAM,SAAa;IACnB,WAAW,SAAqC;IAEhD,IAAI,SAAS,aAEZ;IAED,OAAO;;;;;MAKL;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAYrC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYvE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU/D,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnE,cAAc;YAKd,YAAY;IAKpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,IAAI,MAAM,GAAG,IAAI;CAGrC"}
@@ -0,0 +1,86 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { fileExists, writeText, ensureDir } from '../utils/fs.js';
3
+ import { dirname, join } from 'path';
4
+ import { getToolMarkers } from '../utils/paths.js';
5
+ export class GithubCopilotAdapter extends BaseAdapter {
6
+ constructor(scope = 'workspace') {
7
+ super();
8
+ this.name = 'github-copilot';
9
+ this.displayName = 'GitHub Copilot';
10
+ this.mcpKey = 'servers';
11
+ this.contextFile = '.github/copilot-instructions.md';
12
+ this.formats = {
13
+ agent: 'agent.md',
14
+ skill: 'md',
15
+ mcp: 'json',
16
+ context: 'md',
17
+ };
18
+ this.scope = scope;
19
+ }
20
+ get paths() {
21
+ const markers = getToolMarkers(this.scope);
22
+ const base = markers['github-copilot'];
23
+ const workspaceRoot = dirname(base);
24
+ return {
25
+ agent: join(workspaceRoot, '.github/agents'),
26
+ skill: join(workspaceRoot, '.github/skills'),
27
+ mcp: join(base, 'mcp.json'),
28
+ context: join(workspaceRoot, '.github/copilot-instructions.md'),
29
+ };
30
+ }
31
+ get skillDirs() {
32
+ return [this.paths.skill];
33
+ }
34
+ async isInstalled() {
35
+ const markers = getToolMarkers(this.scope);
36
+ const base = markers['github-copilot'];
37
+ const workspaceRoot = dirname(base);
38
+ return ((await fileExists(join(base, 'mcp.json'))) ||
39
+ (await fileExists(join(workspaceRoot, '.github/copilot-instructions.md'))) ||
40
+ (await fileExists(join(workspaceRoot, '.github/agents'))) ||
41
+ (await fileExists(join(workspaceRoot, '.github/skills'))));
42
+ }
43
+ mcpFromNative(server) {
44
+ if (server.type === 'stdio') {
45
+ const { type: _type, ...portable } = server;
46
+ return portable;
47
+ }
48
+ if (server.type === 'http' || server.type === 'sse') {
49
+ const { type: _type, ...portable } = server;
50
+ return portable;
51
+ }
52
+ return server;
53
+ }
54
+ mcpToNative(server) {
55
+ if (typeof server.command === 'string') {
56
+ return { type: 'stdio', ...server };
57
+ }
58
+ if (typeof server.url === 'string') {
59
+ return { type: 'http', ...server };
60
+ }
61
+ return server;
62
+ }
63
+ async writeStub(asset, content, targetPath) {
64
+ if (asset.type === 'agent') {
65
+ await this.writeAgentStub(targetPath, content);
66
+ }
67
+ else {
68
+ await this.writeMcpStub(targetPath, content);
69
+ }
70
+ }
71
+ async writeAgentStub(targetPath, content) {
72
+ await ensureDir(dirname(targetPath));
73
+ await writeText(targetPath, content);
74
+ }
75
+ async writeMcpStub(targetPath, content) {
76
+ await ensureDir(dirname(targetPath));
77
+ await writeText(targetPath, content);
78
+ }
79
+ async installSkill() {
80
+ // TBD
81
+ }
82
+ getRootConfigAppend() {
83
+ return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=github-copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot.js","sourceRoot":"","sources":["../../src/adapters/github-copilot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { Asset } from '../core/types.js';
3
+ export declare class OpenclawAdapter extends BaseAdapter {
4
+ name: string;
5
+ displayName: string;
6
+ private scope;
7
+ constructor(scope?: 'user' | 'workspace');
8
+ get paths(): {
9
+ skill: string;
10
+ mcp: string | undefined;
11
+ context: string;
12
+ };
13
+ mcpKey: string;
14
+ contextFile: string;
15
+ formats: {
16
+ skill: "md";
17
+ mcp: "json";
18
+ context: "md";
19
+ };
20
+ get skillDirs(): string[];
21
+ isInstalled(): Promise<boolean>;
22
+ writeStub(asset: Asset, content: string, targetPath: string): Promise<void>;
23
+ private writeAgentStub;
24
+ private writeMcpStub;
25
+ installSkill(): Promise<void>;
26
+ getRootConfigAppend(): string | null;
27
+ }
28
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,SAAc;IAClB,WAAW,SAAc;IACzB,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,GAAE,MAAM,GAAG,WAAyB;IAKrD,IAAI,KAAK;;;;MAYR;IAED,MAAM,SAAiB;IACvB,WAAW,SAAe;IAE1B,OAAO;;;;MAIL;IAEF,IAAI,SAAS,aAEZ;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAO/B,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnE,cAAc;YAKd,YAAY;IAKpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,IAAI,MAAM,GAAG,IAAI;CAGrC"}
@@ -0,0 +1,62 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { fileExists, writeText, ensureDir } from '../utils/fs.js';
3
+ import { dirname, join } from 'path';
4
+ import { getToolMarkers } from '../utils/paths.js';
5
+ export class OpenclawAdapter extends BaseAdapter {
6
+ constructor(scope = 'workspace') {
7
+ super();
8
+ this.name = 'openclaw';
9
+ this.displayName = 'OpenClaw';
10
+ this.mcpKey = 'mcp.servers';
11
+ this.contextFile = 'AGENTS.md';
12
+ this.formats = {
13
+ skill: 'md',
14
+ mcp: 'json',
15
+ context: 'md',
16
+ };
17
+ this.scope = scope;
18
+ }
19
+ get paths() {
20
+ const markers = getToolMarkers(this.scope);
21
+ const workspaceRoot = this.scope === 'workspace' ? dirname(markers.openclaw) : join(markers.openclaw, 'workspace');
22
+ return {
23
+ skill: this.scope === 'workspace'
24
+ ? join(workspaceRoot, 'skills')
25
+ : join(markers.openclaw, 'skills'),
26
+ mcp: this.scope === 'user' ? join(markers.openclaw, 'openclaw.json') : undefined,
27
+ context: join(workspaceRoot, 'AGENTS.md'),
28
+ };
29
+ }
30
+ get skillDirs() {
31
+ return [this.paths.skill];
32
+ }
33
+ async isInstalled() {
34
+ if (this.scope === 'user') {
35
+ return fileExists(getToolMarkers(this.scope).openclaw);
36
+ }
37
+ return (await fileExists(this.paths.context)) || (await fileExists(this.paths.skill));
38
+ }
39
+ async writeStub(asset, content, targetPath) {
40
+ if (asset.type === 'agent') {
41
+ await this.writeAgentStub(targetPath, content);
42
+ }
43
+ else {
44
+ await this.writeMcpStub(targetPath, content);
45
+ }
46
+ }
47
+ async writeAgentStub(targetPath, content) {
48
+ await ensureDir(dirname(targetPath));
49
+ await writeText(targetPath, content);
50
+ }
51
+ async writeMcpStub(targetPath, content) {
52
+ await ensureDir(dirname(targetPath));
53
+ await writeText(targetPath, content);
54
+ }
55
+ async installSkill() {
56
+ // OpenClaw skill installation would go here
57
+ }
58
+ getRootConfigAppend() {
59
+ return null;
60
+ }
61
+ }
62
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { BaseAdapter } from './base.js';
2
+ import { Asset } from '../core/types.js';
3
+ export declare class OpenCodeAdapter extends BaseAdapter {
4
+ name: string;
5
+ displayName: string;
6
+ protected scope: 'user' | 'workspace';
7
+ constructor(scope?: 'user' | 'workspace');
8
+ get paths(): {
9
+ agent: string;
10
+ skill: string;
11
+ mcp: string;
12
+ context: string;
13
+ };
14
+ mcpKey: string;
15
+ contextFile: string;
16
+ get skillDirs(): string[];
17
+ formats: {
18
+ agent: "md";
19
+ skill: "md";
20
+ mcp: "json";
21
+ context: "md";
22
+ };
23
+ isInstalled(): Promise<boolean>;
24
+ mcpFromNative(server: Record<string, unknown>): Record<string, unknown>;
25
+ mcpToNative(server: Record<string, unknown>): Record<string, unknown>;
26
+ writeStub(asset: Asset, content: string, targetPath: string): Promise<void>;
27
+ private writeAgentStub;
28
+ private writeMcpStub;
29
+ installSkill(): Promise<void>;
30
+ getRootConfigAppend(): string | null;
31
+ }
32
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAKzC,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,SAAc;IAClB,WAAW,SAAc;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;gBAE1B,KAAK,GAAE,MAAM,GAAG,WAAyB;IAKrD,IAAI,KAAK;;;;;MAcR;IAED,MAAM,SAAS;IACf,WAAW,SAAe;IAE1B,IAAI,SAAS,aAEZ;IAED,OAAO;;;;;MAKL;IAEI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBvE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoB/D,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnE,cAAc;YAKd,YAAY;IAKpB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,IAAI,MAAM,GAAG,IAAI;CAGrC"}