@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.
- package/dist/adapters/openclaw.d.ts +32 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +102 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/adapters/registry.d.ts +7 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +17 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/types.d.ts +40 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/commands/deploy.d.ts +25 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +230 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +5 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +29 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/disable.d.ts +8 -0
- package/dist/commands/disable.d.ts.map +1 -0
- package/dist/commands/disable.js +81 -0
- package/dist/commands/disable.js.map +1 -0
- package/dist/commands/enable.d.ts +14 -0
- package/dist/commands/enable.d.ts.map +1 -0
- package/dist/commands/enable.js +178 -0
- package/dist/commands/enable.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +36 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +183 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +33 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/keys.d.ts +15 -0
- package/dist/config/keys.d.ts.map +1 -0
- package/dist/config/keys.js +30 -0
- package/dist/config/keys.js.map +1 -0
- package/dist/config/paths.d.ts +7 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +9 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { IntegrationAdapter } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw adapter ā patches ~/.openclaw/openclaw.json to:
|
|
4
|
+
* - Add tools.deny list to block dangerous tools
|
|
5
|
+
* - Add Wooblay MCP server to agents.list[].mcp.servers[]
|
|
6
|
+
*/
|
|
7
|
+
export declare class OpenClawAdapter implements IntegrationAdapter {
|
|
8
|
+
readonly name = "openclaw";
|
|
9
|
+
readonly configPath: string;
|
|
10
|
+
detect(): Promise<{
|
|
11
|
+
installed: boolean;
|
|
12
|
+
configExists: boolean;
|
|
13
|
+
version?: string;
|
|
14
|
+
}>;
|
|
15
|
+
backup(): Promise<string>;
|
|
16
|
+
enable(opts: {
|
|
17
|
+
gateUrl: string;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
success: boolean;
|
|
20
|
+
message: string;
|
|
21
|
+
}>;
|
|
22
|
+
disable(backupPath: string): Promise<void>;
|
|
23
|
+
restart(): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
message: string;
|
|
26
|
+
}>;
|
|
27
|
+
status(): Promise<{
|
|
28
|
+
healthy: boolean;
|
|
29
|
+
message: string;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,UAAU,SAAmB;IAEhC,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAOlF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAYzB,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAgDjF,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1C,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAKzD,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAyB/D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, copyFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { mkdirSync } from 'node:fs';
|
|
5
|
+
import { BACKUPS_DIR } from '../config/paths.js';
|
|
6
|
+
const OPENCLAW_DIR = join(homedir(), '.openclaw');
|
|
7
|
+
const OPENCLAW_CONFIG = join(OPENCLAW_DIR, 'openclaw.json');
|
|
8
|
+
/**
|
|
9
|
+
* OpenClaw adapter ā patches ~/.openclaw/openclaw.json to:
|
|
10
|
+
* - Add tools.deny list to block dangerous tools
|
|
11
|
+
* - Add Wooblay MCP server to agents.list[].mcp.servers[]
|
|
12
|
+
*/
|
|
13
|
+
export class OpenClawAdapter {
|
|
14
|
+
name = 'openclaw';
|
|
15
|
+
configPath = OPENCLAW_CONFIG;
|
|
16
|
+
async detect() {
|
|
17
|
+
// Check if openclaw binary is on PATH (simplified check)
|
|
18
|
+
const configExists = existsSync(OPENCLAW_CONFIG);
|
|
19
|
+
const installed = existsSync(OPENCLAW_DIR);
|
|
20
|
+
return { installed, configExists };
|
|
21
|
+
}
|
|
22
|
+
async backup() {
|
|
23
|
+
mkdirSync(BACKUPS_DIR, { recursive: true });
|
|
24
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
25
|
+
const backupPath = join(BACKUPS_DIR, `openclaw-${timestamp}.json`);
|
|
26
|
+
if (existsSync(OPENCLAW_CONFIG)) {
|
|
27
|
+
copyFileSync(OPENCLAW_CONFIG, backupPath);
|
|
28
|
+
}
|
|
29
|
+
return backupPath;
|
|
30
|
+
}
|
|
31
|
+
async enable(opts) {
|
|
32
|
+
if (!existsSync(OPENCLAW_CONFIG)) {
|
|
33
|
+
return { success: false, message: `Config not found at ${OPENCLAW_CONFIG}` };
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const raw = readFileSync(OPENCLAW_CONFIG, 'utf-8');
|
|
37
|
+
const config = JSON.parse(raw);
|
|
38
|
+
// Add tools.deny list
|
|
39
|
+
const tools = config['tools'] ?? {};
|
|
40
|
+
tools['deny'] = ['exec', 'process', 'browser', 'canvas'];
|
|
41
|
+
config['tools'] = tools;
|
|
42
|
+
// Add MCP server to agents
|
|
43
|
+
const agents = config['agents'] ?? {};
|
|
44
|
+
const list = agents['list'] ?? [{}];
|
|
45
|
+
for (const agent of list) {
|
|
46
|
+
const mcp = agent['mcp'] ?? {};
|
|
47
|
+
const servers = mcp['servers'] ?? [];
|
|
48
|
+
// Remove existing wooblay server if present
|
|
49
|
+
const filtered = servers.filter((s) => s['name'] !== 'wooblay-gate');
|
|
50
|
+
filtered.push({
|
|
51
|
+
name: 'wooblay-gate',
|
|
52
|
+
url: `${opts.gateUrl}/mcp`,
|
|
53
|
+
transport: 'sse',
|
|
54
|
+
});
|
|
55
|
+
mcp['servers'] = filtered;
|
|
56
|
+
agent['mcp'] = mcp;
|
|
57
|
+
}
|
|
58
|
+
agents['list'] = list;
|
|
59
|
+
config['agents'] = agents;
|
|
60
|
+
writeFileSync(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
61
|
+
return { success: true, message: 'OpenClaw config patched with Wooblay MCP server' };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
65
|
+
return { success: false, message: `Failed to patch config: ${msg}` };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async disable(backupPath) {
|
|
69
|
+
if (!existsSync(backupPath)) {
|
|
70
|
+
throw new Error(`Backup not found at ${backupPath}`);
|
|
71
|
+
}
|
|
72
|
+
copyFileSync(backupPath, OPENCLAW_CONFIG);
|
|
73
|
+
}
|
|
74
|
+
async restart() {
|
|
75
|
+
// Placeholder ā actual restart logic would kill/spawn the process
|
|
76
|
+
return { success: false, message: 'OpenClaw restart is not yet implemented' };
|
|
77
|
+
}
|
|
78
|
+
async status() {
|
|
79
|
+
const configExists = existsSync(OPENCLAW_CONFIG);
|
|
80
|
+
if (!configExists) {
|
|
81
|
+
return { healthy: false, message: 'OpenClaw config not found' };
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const raw = readFileSync(OPENCLAW_CONFIG, 'utf-8');
|
|
85
|
+
const config = JSON.parse(raw);
|
|
86
|
+
const agents = config['agents'] ?? {};
|
|
87
|
+
const list = agents['list'] ?? [];
|
|
88
|
+
const hasWooblay = list.some((agent) => {
|
|
89
|
+
const mcp = agent['mcp'] ?? {};
|
|
90
|
+
const servers = mcp['servers'] ?? [];
|
|
91
|
+
return servers.some((s) => s['name'] === 'wooblay-gate');
|
|
92
|
+
});
|
|
93
|
+
return hasWooblay
|
|
94
|
+
? { healthy: true, message: 'Wooblay MCP server is configured in OpenClaw' }
|
|
95
|
+
: { healthy: false, message: 'Wooblay MCP server not found in OpenClaw config' };
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return { healthy: false, message: 'Failed to read OpenClaw config' };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOrD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAO3D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OpenClawAdapter } from './openclaw.js';
|
|
2
|
+
const adapters = {
|
|
3
|
+
openclaw: () => new OpenClawAdapter(),
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Get an integration adapter by name.
|
|
7
|
+
* Throws if the adapter is not registered.
|
|
8
|
+
*/
|
|
9
|
+
export function getAdapter(name) {
|
|
10
|
+
const factory = adapters[name];
|
|
11
|
+
if (!factory) {
|
|
12
|
+
const available = Object.keys(adapters).join(', ');
|
|
13
|
+
throw new Error(`Unknown adapter "${name}". Available: ${available}`);
|
|
14
|
+
}
|
|
15
|
+
return factory();
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,QAAQ,GAA6C;IACzD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntegrationAdapter ā interface for plugging agent frameworks into Wooblay.
|
|
3
|
+
*
|
|
4
|
+
* Each adapter knows how to detect, configure, and manage
|
|
5
|
+
* a specific agent runtime (e.g. OpenClaw).
|
|
6
|
+
*/
|
|
7
|
+
export interface IntegrationAdapter {
|
|
8
|
+
/** Human-readable name of the adapter (e.g. "openclaw") */
|
|
9
|
+
readonly name: string;
|
|
10
|
+
/** Path to the framework's config file */
|
|
11
|
+
readonly configPath: string;
|
|
12
|
+
/** Detect whether the framework is installed and configured */
|
|
13
|
+
detect(): Promise<{
|
|
14
|
+
installed: boolean;
|
|
15
|
+
configExists: boolean;
|
|
16
|
+
version?: string;
|
|
17
|
+
}>;
|
|
18
|
+
/** Back up the current config; returns the backup file path */
|
|
19
|
+
backup(): Promise<string>;
|
|
20
|
+
/** Patch the framework config to route through Wooblay Gate */
|
|
21
|
+
enable(opts: {
|
|
22
|
+
gateUrl: string;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
message: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** Restore the framework config from a backup */
|
|
28
|
+
disable(backupPath: string): Promise<void>;
|
|
29
|
+
/** Restart the framework process */
|
|
30
|
+
restart(): Promise<{
|
|
31
|
+
success: boolean;
|
|
32
|
+
message: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Check if the framework is running and healthy */
|
|
35
|
+
status(): Promise<{
|
|
36
|
+
healthy: boolean;
|
|
37
|
+
message: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,+DAA+D;IAC/D,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEnF,+DAA+D;IAC/D,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElF,iDAAiD;IACjD,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,oCAAoC;IACpC,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE1D,oDAAoD;IACpD,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wooblay deploy ā Build, push, and provision a secure runtime on EC2.
|
|
3
|
+
*
|
|
4
|
+
* This command:
|
|
5
|
+
* 1. Reads the runtime manifest (runtimes/<runtime>.yaml)
|
|
6
|
+
* 2. Builds Docker images for Gate + Agent runtime
|
|
7
|
+
* 3. Pushes images to ECR
|
|
8
|
+
* 4. Runs Terraform to provision a hardened EC2 instance
|
|
9
|
+
* 5. Outputs the tenant URL and health status
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* wooblay deploy --runtime openclaw --tenant my-client
|
|
13
|
+
*/
|
|
14
|
+
interface DeployOptions {
|
|
15
|
+
runtime: string;
|
|
16
|
+
tenant: string;
|
|
17
|
+
region: string;
|
|
18
|
+
instanceType: string;
|
|
19
|
+
skipBuild: boolean;
|
|
20
|
+
skipPush: boolean;
|
|
21
|
+
dryRun: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function deploy(opts: DeployOptions): Promise<void>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAoBD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0M/D"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wooblay deploy ā Build, push, and provision a secure runtime on EC2.
|
|
3
|
+
*
|
|
4
|
+
* This command:
|
|
5
|
+
* 1. Reads the runtime manifest (runtimes/<runtime>.yaml)
|
|
6
|
+
* 2. Builds Docker images for Gate + Agent runtime
|
|
7
|
+
* 3. Pushes images to ECR
|
|
8
|
+
* 4. Runs Terraform to provision a hardened EC2 instance
|
|
9
|
+
* 5. Outputs the tenant URL and health status
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* wooblay deploy --runtime openclaw --tenant my-client
|
|
13
|
+
*/
|
|
14
|
+
import { execSync } from 'node:child_process';
|
|
15
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
16
|
+
import { resolve, join } from 'node:path';
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
function run(cmd, opts) {
|
|
19
|
+
try {
|
|
20
|
+
const result = execSync(cmd, {
|
|
21
|
+
cwd: opts?.cwd,
|
|
22
|
+
encoding: 'utf-8',
|
|
23
|
+
stdio: opts?.silent ? 'pipe' : 'inherit',
|
|
24
|
+
});
|
|
25
|
+
return result?.toString().trim() ?? '';
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
29
|
+
throw new Error(`Command failed: ${cmd}\n${msg}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function runCapture(cmd, opts) {
|
|
33
|
+
return run(cmd, { ...opts, silent: true });
|
|
34
|
+
}
|
|
35
|
+
export async function deploy(opts) {
|
|
36
|
+
const { runtime, tenant, region, instanceType, skipBuild, skipPush, dryRun } = opts;
|
|
37
|
+
console.log(chalk.bold('\n=== Wooblay Deploy ==='));
|
|
38
|
+
console.log(` Runtime: ${chalk.cyan(runtime)}`);
|
|
39
|
+
console.log(` Tenant: ${chalk.cyan(tenant)}`);
|
|
40
|
+
console.log(` Region: ${chalk.cyan(region)}`);
|
|
41
|
+
console.log(` Instance: ${chalk.cyan(instanceType)}`);
|
|
42
|
+
if (dryRun)
|
|
43
|
+
console.log(chalk.yellow(' [DRY RUN ā no resources will be created]'));
|
|
44
|
+
console.log('');
|
|
45
|
+
// āā Find project root āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
46
|
+
const projectRoot = findProjectRoot();
|
|
47
|
+
if (!projectRoot) {
|
|
48
|
+
console.error(chalk.red('Could not find project root (looking for pnpm-workspace.yaml)'));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
// āā Step 1: Read runtime manifest āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
52
|
+
console.log(chalk.bold('Step 1: Reading runtime manifest...'));
|
|
53
|
+
const manifestPath = join(projectRoot, 'runtimes', `${runtime}.yaml`);
|
|
54
|
+
if (!existsSync(manifestPath)) {
|
|
55
|
+
console.error(chalk.red(`Runtime manifest not found: ${manifestPath}`));
|
|
56
|
+
console.error(chalk.dim(`Available runtimes: ls ${join(projectRoot, 'runtimes')}/*.yaml`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk.green(` ā Found ${manifestPath}`));
|
|
60
|
+
// āā Step 2: Verify AWS CLI āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
61
|
+
console.log(chalk.bold('\nStep 2: Verifying AWS credentials...'));
|
|
62
|
+
try {
|
|
63
|
+
const identity = runCapture('aws sts get-caller-identity --output json');
|
|
64
|
+
const account = JSON.parse(identity);
|
|
65
|
+
console.log(chalk.green(` ā AWS Account: ${account.Account}`));
|
|
66
|
+
console.log(chalk.green(` ā Identity: ${account.Arn}`));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
console.error(chalk.red(' ā AWS CLI not configured. Run: aws configure'));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
// Get account ID
|
|
73
|
+
const accountId = runCapture('aws sts get-caller-identity --query Account --output text');
|
|
74
|
+
const ecrBase = `${accountId}.dkr.ecr.${region}.amazonaws.com`;
|
|
75
|
+
// āā Step 3: Build Docker images āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
76
|
+
const gateImage = `${ecrBase}/wooblay-gate:${tenant}-latest`;
|
|
77
|
+
const agentImage = `${ecrBase}/openclaw-wooblay:${tenant}-latest`;
|
|
78
|
+
if (!skipBuild) {
|
|
79
|
+
console.log(chalk.bold('\nStep 3: Building Docker images...'));
|
|
80
|
+
console.log(' Building Gate image...');
|
|
81
|
+
run(`docker build -f docker/gate/Dockerfile -t ${gateImage} .`, { cwd: projectRoot });
|
|
82
|
+
console.log(chalk.green(' ā Gate image built'));
|
|
83
|
+
console.log(' Building Agent runtime image...');
|
|
84
|
+
run(`docker build -f docker/runtimes/${runtime}/Dockerfile -t ${agentImage} .`, { cwd: projectRoot });
|
|
85
|
+
console.log(chalk.green(' ā Agent image built'));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(chalk.dim('\nStep 3: Skipping build (--skip-build)'));
|
|
89
|
+
}
|
|
90
|
+
// āā Step 4: Push to ECR āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
91
|
+
if (!skipPush) {
|
|
92
|
+
console.log(chalk.bold('\nStep 4: Pushing images to ECR...'));
|
|
93
|
+
// Authenticate with ECR
|
|
94
|
+
run(`aws ecr get-login-password --region ${region} | docker login --username AWS --password-stdin ${ecrBase}`, {
|
|
95
|
+
cwd: projectRoot,
|
|
96
|
+
});
|
|
97
|
+
console.log(chalk.green(' ā ECR authenticated'));
|
|
98
|
+
run(`docker push ${gateImage}`, { cwd: projectRoot });
|
|
99
|
+
console.log(chalk.green(' ā Gate image pushed'));
|
|
100
|
+
run(`docker push ${agentImage}`, { cwd: projectRoot });
|
|
101
|
+
console.log(chalk.green(' ā Agent image pushed'));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.log(chalk.dim('\nStep 4: Skipping push (--skip-push)'));
|
|
105
|
+
}
|
|
106
|
+
// āā Step 5: Generate signing keys if needed āāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
107
|
+
console.log(chalk.bold('\nStep 5: Generating tenant signing keys...'));
|
|
108
|
+
let serverPrivateKey;
|
|
109
|
+
let serverPublicKey;
|
|
110
|
+
try {
|
|
111
|
+
// Try to read existing keys from the local .env
|
|
112
|
+
const envPath = join(projectRoot, '.env');
|
|
113
|
+
const envContent = existsSync(envPath) ? readFileSync(envPath, 'utf-8') : '';
|
|
114
|
+
const privMatch = envContent.match(/WOOBLAY_SERVER_PRIVATE_KEY=(.+)/);
|
|
115
|
+
const pubMatch = envContent.match(/WOOBLAY_SERVER_PUBLIC_KEY=(.+)/);
|
|
116
|
+
if (privMatch && pubMatch) {
|
|
117
|
+
serverPrivateKey = privMatch[1].trim();
|
|
118
|
+
serverPublicKey = pubMatch[1].trim();
|
|
119
|
+
console.log(chalk.green(' ā Using signing keys from .env'));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Generate new keys using node crypto
|
|
123
|
+
const keyScript = `
|
|
124
|
+
const { generateKeyPairSync } = require('crypto');
|
|
125
|
+
const { publicKey, privateKey } = generateKeyPairSync('ed25519');
|
|
126
|
+
const pub = publicKey.export({ type: 'spki', format: 'der' }).toString('hex');
|
|
127
|
+
const priv = privateKey.export({ type: 'pkcs8', format: 'der' }).toString('hex');
|
|
128
|
+
console.log(JSON.stringify({ pub, priv }));
|
|
129
|
+
`;
|
|
130
|
+
const keyJson = runCapture(`node -e "${keyScript.replace(/\n/g, ' ')}"`);
|
|
131
|
+
const keys = JSON.parse(keyJson);
|
|
132
|
+
serverPrivateKey = keys.priv;
|
|
133
|
+
serverPublicKey = keys.pub;
|
|
134
|
+
console.log(chalk.green(' ā Generated new ed25519 signing keys'));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.error(chalk.red(' ā Failed to generate signing keys'));
|
|
139
|
+
throw err;
|
|
140
|
+
}
|
|
141
|
+
// āā Step 6: Run Terraform āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
142
|
+
console.log(chalk.bold('\nStep 6: Provisioning EC2 instance via Terraform...'));
|
|
143
|
+
const runtimeTfDir = join(projectRoot, 'infra', 'runtime');
|
|
144
|
+
if (!existsSync(runtimeTfDir)) {
|
|
145
|
+
console.error(chalk.red(`Terraform directory not found: ${runtimeTfDir}`));
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
// First, get base infrastructure outputs
|
|
149
|
+
console.log(' Getting base infrastructure outputs...');
|
|
150
|
+
const baseTfDir = join(projectRoot, 'infra', 'base');
|
|
151
|
+
let baseOutputs;
|
|
152
|
+
try {
|
|
153
|
+
const outputJson = runCapture(`terraform output -json`, { cwd: baseTfDir });
|
|
154
|
+
const parsed = JSON.parse(outputJson);
|
|
155
|
+
baseOutputs = Object.fromEntries(Object.entries(parsed).map(([k, v]) => [k, v.value]));
|
|
156
|
+
console.log(chalk.green(' ā Base outputs loaded'));
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
console.error(chalk.red(' ā Could not read base Terraform outputs.'));
|
|
160
|
+
console.error(chalk.dim(' Run: cd infra/base && terraform init && terraform apply'));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
// Initialize Terraform
|
|
164
|
+
run('terraform init', { cwd: runtimeTfDir });
|
|
165
|
+
// Build tfvars
|
|
166
|
+
const privateSubnetIds = baseOutputs['private_subnet_ids'];
|
|
167
|
+
const publicSubnetIds = baseOutputs['public_subnet_ids'];
|
|
168
|
+
const firstPrivateSubnet = Array.isArray(privateSubnetIds) ? privateSubnetIds[0] : '';
|
|
169
|
+
const tfVars = [
|
|
170
|
+
`-var="tenant_name=${tenant}"`,
|
|
171
|
+
`-var="aws_region=${region}"`,
|
|
172
|
+
`-var="vpc_id=${baseOutputs['vpc_id']}"`,
|
|
173
|
+
`-var="private_subnet_id=${firstPrivateSubnet}"`,
|
|
174
|
+
`-var='public_subnet_ids=${JSON.stringify(publicSubnetIds)}'`,
|
|
175
|
+
`-var="runtime_security_group_id=${baseOutputs['runtime_security_group_id']}"`,
|
|
176
|
+
`-var="alb_arn=${baseOutputs['alb_arn']}"`,
|
|
177
|
+
`-var="alb_http_listener_arn=${baseOutputs['alb_http_listener_arn']}"`,
|
|
178
|
+
`-var="kms_key_arn=${baseOutputs['kms_key_arn']}"`,
|
|
179
|
+
`-var="log_group_name=${baseOutputs['log_group_name']}"`,
|
|
180
|
+
`-var="gate_image=${gateImage}"`,
|
|
181
|
+
`-var="agent_image=${agentImage}"`,
|
|
182
|
+
`-var="instance_type=${instanceType}"`,
|
|
183
|
+
`-var="server_private_key=${serverPrivateKey}"`,
|
|
184
|
+
`-var="server_public_key=${serverPublicKey}"`,
|
|
185
|
+
`-var="tool_filter=risky"`,
|
|
186
|
+
];
|
|
187
|
+
const tfVarString = tfVars.join(' ');
|
|
188
|
+
if (dryRun) {
|
|
189
|
+
console.log(chalk.yellow('\n [DRY RUN] Would run:'));
|
|
190
|
+
console.log(chalk.dim(` terraform plan ${tfVarString}`));
|
|
191
|
+
run(`terraform plan ${tfVarString}`, { cwd: runtimeTfDir });
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(' Applying Terraform...');
|
|
195
|
+
run(`terraform apply -auto-approve ${tfVarString}`, { cwd: runtimeTfDir });
|
|
196
|
+
console.log(chalk.green(' ā EC2 instance provisioned'));
|
|
197
|
+
// Get outputs
|
|
198
|
+
console.log(chalk.bold('\n=== Deployment Complete ==='));
|
|
199
|
+
try {
|
|
200
|
+
const tenantUrl = runCapture('terraform output -raw tenant_url', { cwd: runtimeTfDir });
|
|
201
|
+
const healthUrl = runCapture('terraform output -raw health_url', { cwd: runtimeTfDir });
|
|
202
|
+
const instanceId = runCapture('terraform output -raw instance_id', { cwd: runtimeTfDir });
|
|
203
|
+
const ssmCmd = runCapture('terraform output -raw ssm_command', { cwd: runtimeTfDir });
|
|
204
|
+
console.log(` Tenant URL: ${chalk.cyan(tenantUrl)}`);
|
|
205
|
+
console.log(` Health Check: ${chalk.cyan(healthUrl)}`);
|
|
206
|
+
console.log(` Instance ID: ${chalk.cyan(instanceId)}`);
|
|
207
|
+
console.log(` SSM Access: ${chalk.dim(ssmCmd)}`);
|
|
208
|
+
console.log('');
|
|
209
|
+
console.log(chalk.green(' The instance is bootstrapping. It may take 2-3 minutes'));
|
|
210
|
+
console.log(chalk.green(' for the Gate to become healthy and the UI to be accessible.'));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
console.log(chalk.yellow(' Outputs not yet available. Check with:'));
|
|
214
|
+
console.log(chalk.dim(` cd ${runtimeTfDir} && terraform output`));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function findProjectRoot() {
|
|
219
|
+
let dir = process.cwd();
|
|
220
|
+
for (let i = 0; i < 10; i++) {
|
|
221
|
+
if (existsSync(join(dir, 'pnpm-workspace.yaml')))
|
|
222
|
+
return dir;
|
|
223
|
+
const parent = resolve(dir, '..');
|
|
224
|
+
if (parent === dir)
|
|
225
|
+
break;
|
|
226
|
+
dir = parent;
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BtD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export async function dev(opts) {
|
|
3
|
+
console.log(chalk.bold.cyan('\nš Wooblay ā Local Development\n'));
|
|
4
|
+
if (opts.sqlite) {
|
|
5
|
+
console.log(chalk.yellow(' Using SQLite mode (no Docker required)\n'));
|
|
6
|
+
console.log(chalk.gray(' Set environment variable:'));
|
|
7
|
+
console.log(chalk.white(' export DATABASE_URL="file:./wooblay.db"\n'));
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
// āā Step 1: Postgres via Docker āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
11
|
+
console.log(chalk.yellow('ā Step 1: Start Postgres\n'));
|
|
12
|
+
console.log(chalk.white(' docker-compose -f docker/docker-compose.yml up -d postgres'));
|
|
13
|
+
console.log(chalk.gray(' Postgres will be available at localhost:5432\n'));
|
|
14
|
+
}
|
|
15
|
+
// āā Step 2: Gate dev server āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
16
|
+
console.log(chalk.yellow('ā Step 2: Start Gate dev server\n'));
|
|
17
|
+
console.log(chalk.white(' pnpm --filter @wooblay/gate dev'));
|
|
18
|
+
console.log(chalk.gray(' Gate will be available at http://localhost:4800\n'));
|
|
19
|
+
// āā Step 3: UI dev server āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
20
|
+
console.log(chalk.yellow('ā Step 3: Start UI dev server\n'));
|
|
21
|
+
console.log(chalk.white(' pnpm --filter @wooblay/ui dev'));
|
|
22
|
+
console.log(chalk.gray(' UI will be available at http://localhost:5173\n'));
|
|
23
|
+
// āā Tip āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
24
|
+
console.log(chalk.gray('ā'.repeat(60)));
|
|
25
|
+
console.log(chalk.gray(' Tip: Run each command in a separate terminal, or use:'));
|
|
26
|
+
console.log(chalk.white(' pnpm dev'));
|
|
27
|
+
console.log(chalk.gray(' to start all services via Turborepo.\n'));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAE/E,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAE7E,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disable Wooblay supervision for a specific agent framework.
|
|
3
|
+
*
|
|
4
|
+
* For OpenClaw: restores config backup and removes the plugin.
|
|
5
|
+
* For MCP/Generic: prints instructions.
|
|
6
|
+
*/
|
|
7
|
+
export declare function disable(framework: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=disable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../src/commands/disable.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe9D"}
|