@wooblaymcp/cli 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 (53) hide show
  1. package/dist/adapters/openclaw.d.ts +32 -0
  2. package/dist/adapters/openclaw.d.ts.map +1 -0
  3. package/dist/adapters/openclaw.js +102 -0
  4. package/dist/adapters/openclaw.js.map +1 -0
  5. package/dist/adapters/registry.d.ts +7 -0
  6. package/dist/adapters/registry.d.ts.map +1 -0
  7. package/dist/adapters/registry.js +17 -0
  8. package/dist/adapters/registry.js.map +1 -0
  9. package/dist/adapters/types.d.ts +40 -0
  10. package/dist/adapters/types.d.ts.map +1 -0
  11. package/dist/adapters/types.js +2 -0
  12. package/dist/adapters/types.js.map +1 -0
  13. package/dist/commands/deploy.d.ts +25 -0
  14. package/dist/commands/deploy.d.ts.map +1 -0
  15. package/dist/commands/deploy.js +230 -0
  16. package/dist/commands/deploy.js.map +1 -0
  17. package/dist/commands/dev.d.ts +5 -0
  18. package/dist/commands/dev.d.ts.map +1 -0
  19. package/dist/commands/dev.js +29 -0
  20. package/dist/commands/dev.js.map +1 -0
  21. package/dist/commands/disable.d.ts +8 -0
  22. package/dist/commands/disable.d.ts.map +1 -0
  23. package/dist/commands/disable.js +81 -0
  24. package/dist/commands/disable.js.map +1 -0
  25. package/dist/commands/enable.d.ts +14 -0
  26. package/dist/commands/enable.d.ts.map +1 -0
  27. package/dist/commands/enable.js +178 -0
  28. package/dist/commands/enable.js.map +1 -0
  29. package/dist/commands/init.d.ts +2 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +36 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/setup.d.ts +8 -0
  34. package/dist/commands/setup.d.ts.map +1 -0
  35. package/dist/commands/setup.js +183 -0
  36. package/dist/commands/setup.js.map +1 -0
  37. package/dist/commands/status.d.ts +5 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +33 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/config/keys.d.ts +15 -0
  42. package/dist/config/keys.d.ts.map +1 -0
  43. package/dist/config/keys.js +30 -0
  44. package/dist/config/keys.js.map +1 -0
  45. package/dist/config/paths.d.ts +7 -0
  46. package/dist/config/paths.d.ts.map +1 -0
  47. package/dist/config/paths.js +9 -0
  48. package/dist/config/paths.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +95 -0
  52. package/dist/index.js.map +1 -0
  53. package/package.json +37 -0
@@ -0,0 +1,30 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { loadKeyPairFromDisk, storeKeyPair } from '@wooblay/crypto';
3
+ import { KEYS_DIR } from './paths.js';
4
+ /**
5
+ * Load a named keypair from ~/.wooblay/keys/.
6
+ * Returns null if the keys don't exist yet.
7
+ */
8
+ export function loadKeys(name) {
9
+ const pubPath = `${KEYS_DIR}/${name}.pub`;
10
+ const keyPath = `${KEYS_DIR}/${name}.key`;
11
+ if (!existsSync(pubPath) || !existsSync(keyPath)) {
12
+ return null;
13
+ }
14
+ return loadKeyPairFromDisk(KEYS_DIR, name);
15
+ }
16
+ /**
17
+ * Store a named keypair to ~/.wooblay/keys/ with secure permissions.
18
+ */
19
+ export function saveKeys(name, kp) {
20
+ storeKeyPair(KEYS_DIR, name, kp);
21
+ }
22
+ /**
23
+ * Check if a named keypair exists in ~/.wooblay/keys/.
24
+ */
25
+ export function keysExist(name) {
26
+ const pubPath = `${KEYS_DIR}/${name}.pub`;
27
+ const keyPath = `${KEYS_DIR}/${name}.key`;
28
+ return existsSync(pubPath) && existsSync(keyPath);
29
+ }
30
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/config/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,IAAI,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,IAAI,MAAM,CAAC;IAE1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,EAAW;IAChD,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,IAAI,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,IAAI,MAAM,CAAC;IAC1C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Root Wooblay config directory: ~/.wooblay */
2
+ export declare const WOOBLAY_HOME: string;
3
+ /** Directory for signing keys: ~/.wooblay/keys */
4
+ export declare const KEYS_DIR: string;
5
+ /** Directory for config backups: ~/.wooblay/backups */
6
+ export declare const BACKUPS_DIR: string;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAGA,gDAAgD;AAChD,eAAO,MAAM,YAAY,QAA8B,CAAC;AAExD,kDAAkD;AAClD,eAAO,MAAM,QAAQ,QAA6B,CAAC;AAEnD,uDAAuD;AACvD,eAAO,MAAM,WAAW,QAAgC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { join } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ /** Root Wooblay config directory: ~/.wooblay */
4
+ export const WOOBLAY_HOME = join(homedir(), '.wooblay');
5
+ /** Directory for signing keys: ~/.wooblay/keys */
6
+ export const KEYS_DIR = join(WOOBLAY_HOME, 'keys');
7
+ /** Directory for config backups: ~/.wooblay/backups */
8
+ export const BACKUPS_DIR = join(WOOBLAY_HOME, 'backups');
9
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAExD,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAEnD,uDAAuD;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { readFileSync } from 'node:fs';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { dirname, join } from 'node:path';
7
+ import { setup } from './commands/setup.js';
8
+ import { status } from './commands/status.js';
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
11
+ const program = new Command();
12
+ program
13
+ .name('wooblay')
14
+ .description('Wooblay CLI – configure agents, check status, manage integrations')
15
+ .version(pkg.version);
16
+ // ── Setup (default command) ─────────────────────────────────────────
17
+ program
18
+ .command('setup', { isDefault: true })
19
+ .description('Configure all detected AI agents to use Wooblay (one command, all agents)')
20
+ .option('--api-key <key>', 'Wooblay API key (wbl_ak_...)')
21
+ .option('--endpoint <url>', 'Wooblay Gate URL', 'https://gate.wooblay.com')
22
+ .option('--instance-id <id>', 'Proxy instance ID')
23
+ .action(async (opts) => {
24
+ await setup({ apiKey: opts.apiKey, endpoint: opts.endpoint, instanceId: opts.instanceId });
25
+ });
26
+ // ── Status ──────────────────────────────────────────────────────────
27
+ program
28
+ .command('status')
29
+ .description('Check Gate health status')
30
+ .option('--tenant <name>', 'Tenant name (defaults to local)')
31
+ .action(async (opts) => {
32
+ await status(opts);
33
+ });
34
+ // ── Init (local dev setup) ──────────────────────────────────────────
35
+ program
36
+ .command('init')
37
+ .description('Initialize local development environment')
38
+ .action(async () => {
39
+ const { init } = await import('./commands/init.js');
40
+ await init();
41
+ });
42
+ // ── Dev ─────────────────────────────────────────────────────────────
43
+ program
44
+ .command('dev')
45
+ .description('Start local development environment')
46
+ .option('--sqlite', 'Use SQLite instead of Postgres')
47
+ .action(async (opts) => {
48
+ const { dev } = await import('./commands/dev.js');
49
+ await dev(opts);
50
+ });
51
+ // ── Enable adapter integration ──────────────────────────────────────
52
+ program
53
+ .command('enable <framework>')
54
+ .description('Enable Wooblay supervision for an agent framework (openclaw, mcp, generic)')
55
+ .option('--gate-url <url>', 'Wooblay Gate URL', 'http://localhost:4800')
56
+ .action(async (framework, opts) => {
57
+ const { enable } = await import('./commands/enable.js');
58
+ await enable(framework, { gateUrl: opts.gateUrl });
59
+ });
60
+ // ── Disable adapter integration ────────────────────────────────────
61
+ program
62
+ .command('disable <framework>')
63
+ .description('Disable Wooblay supervision for an agent framework')
64
+ .action(async (framework) => {
65
+ const { disable } = await import('./commands/disable.js');
66
+ await disable(framework);
67
+ });
68
+ // ── Deploy a secure runtime to EC2 ──────────────────────────────────
69
+ program
70
+ .command('deploy')
71
+ .description('Build, push, and provision a secure agent runtime on EC2')
72
+ .requiredOption('--runtime <name>', 'Runtime manifest name (e.g. openclaw)', 'openclaw')
73
+ .requiredOption('--tenant <name>', 'Tenant name (lowercase, alphanumeric + hyphens)')
74
+ .option('--region <region>', 'AWS region', 'us-east-1')
75
+ .option('--instance-type <type>', 'EC2 instance type', 't4g.medium')
76
+ .option('--skip-build', 'Skip Docker image build', false)
77
+ .option('--skip-push', 'Skip pushing images to ECR', false)
78
+ .option('--dry-run', 'Plan only, do not create resources', false)
79
+ .action(async (opts) => {
80
+ const { deploy } = await import('./commands/deploy.js');
81
+ await deploy({
82
+ runtime: opts.runtime,
83
+ tenant: opts.tenant,
84
+ region: opts.region,
85
+ instanceType: opts.instanceType,
86
+ skipBuild: opts.skipBuild,
87
+ skipPush: opts.skipPush,
88
+ dryRun: opts.dryRun,
89
+ });
90
+ });
91
+ program.parseAsync(process.argv).catch((err) => {
92
+ console.error(chalk.red('Error:'), err instanceof Error ? err.message : err);
93
+ process.exit(1);
94
+ });
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@wooblaymcp/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "bin": {
9
+ "wooblay": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18.0.0"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -b && node --input-type=commonjs -e \"const f=require('fs');const p='dist/index.js';const c=f.readFileSync(p,'utf8');if(!c.startsWith('#!')){f.writeFileSync(p,'#!/usr/bin/env node\\n'+c)}\"",
19
+ "dev": "tsx src/index.ts",
20
+ "clean": "rm -rf dist *.tsbuildinfo",
21
+ "prepublishOnly": "pnpm build"
22
+ },
23
+ "dependencies": {
24
+ "chalk": "^5.4.0",
25
+ "commander": "^13.1.0"
26
+ },
27
+ "optionalDependencies": {
28
+ "@wooblay/crypto": "workspace:*",
29
+ "@wooblay/gate-client": "workspace:*",
30
+ "@wooblay/types": "workspace:*"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^25.2.3",
34
+ "tsx": "^4.19.0",
35
+ "typescript": "^5.9.3"
36
+ }
37
+ }