@vantinelai/openclaw 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/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/proxy.d.ts +21 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +54 -0
- package/dist/proxy.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface OpenclawJsonConfig {
|
|
2
|
+
models?: {
|
|
3
|
+
providers?: Record<string, unknown>;
|
|
4
|
+
};
|
|
5
|
+
'diagnostics-otel'?: {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
endpoint: string;
|
|
8
|
+
protocol: string;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
};
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns the default path to ~/.openclaw/openclaw.json
|
|
15
|
+
*/
|
|
16
|
+
export declare function getOpenclawConfigPath(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Read existing openclaw.json if it exists, return empty object otherwise.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readOpenclawConfig(configPath?: string): OpenclawJsonConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Deep-merge a patch into the existing openclaw.json and write it back.
|
|
23
|
+
* Returns the path written to.
|
|
24
|
+
*/
|
|
25
|
+
export declare function writeOpenclawConfig(patch: OpenclawJsonConfig, configPath?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Build the Vantinel config fragment for openclaw.json
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildVantinelConfigFragment(apiKey: string, gatewayUrl: string): OpenclawJsonConfig;
|
|
30
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAW1E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAaR;AAqBD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAqBpB"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the default path to ~/.openclaw/openclaw.json
|
|
6
|
+
*/
|
|
7
|
+
export function getOpenclawConfigPath() {
|
|
8
|
+
return path.join(os.homedir(), '.openclaw', 'openclaw.json');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Read existing openclaw.json if it exists, return empty object otherwise.
|
|
12
|
+
*/
|
|
13
|
+
export function readOpenclawConfig(configPath) {
|
|
14
|
+
const filePath = configPath ?? getOpenclawConfigPath();
|
|
15
|
+
try {
|
|
16
|
+
if (fs.existsSync(filePath)) {
|
|
17
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
18
|
+
return JSON.parse(raw);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Ignore parse errors — start fresh
|
|
23
|
+
}
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Deep-merge a patch into the existing openclaw.json and write it back.
|
|
28
|
+
* Returns the path written to.
|
|
29
|
+
*/
|
|
30
|
+
export function writeOpenclawConfig(patch, configPath) {
|
|
31
|
+
const filePath = configPath ?? getOpenclawConfigPath();
|
|
32
|
+
const dir = path.dirname(filePath);
|
|
33
|
+
// Ensure directory exists
|
|
34
|
+
if (!fs.existsSync(dir)) {
|
|
35
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
const existing = readOpenclawConfig(filePath);
|
|
38
|
+
const merged = deepMerge(existing, patch);
|
|
39
|
+
fs.writeFileSync(filePath, JSON.stringify(merged, null, 2), 'utf-8');
|
|
40
|
+
return filePath;
|
|
41
|
+
}
|
|
42
|
+
function deepMerge(base, patch) {
|
|
43
|
+
const result = { ...base };
|
|
44
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
45
|
+
if (value !== null &&
|
|
46
|
+
typeof value === 'object' &&
|
|
47
|
+
!Array.isArray(value) &&
|
|
48
|
+
typeof result[key] === 'object' &&
|
|
49
|
+
result[key] !== null &&
|
|
50
|
+
!Array.isArray(result[key])) {
|
|
51
|
+
result[key] = deepMerge(result[key], value);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
result[key] = value;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the Vantinel config fragment for openclaw.json
|
|
61
|
+
*/
|
|
62
|
+
export function buildVantinelConfigFragment(apiKey, gatewayUrl) {
|
|
63
|
+
const baseUrl = gatewayUrl.replace(/\/$/, '');
|
|
64
|
+
return {
|
|
65
|
+
models: {
|
|
66
|
+
providers: {
|
|
67
|
+
vantinel: {
|
|
68
|
+
baseUrl: `${baseUrl}/v1`,
|
|
69
|
+
apiKey,
|
|
70
|
+
type: 'openai',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
'diagnostics-otel': {
|
|
75
|
+
enabled: true,
|
|
76
|
+
endpoint: `${baseUrl}/v1/traces`,
|
|
77
|
+
protocol: 'http/json',
|
|
78
|
+
headers: {
|
|
79
|
+
'X-Vantinel-API-Key': apiKey,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vantinel/openclaw
|
|
3
|
+
*
|
|
4
|
+
* One-line setup for Vantinel observability with OpenClaw / NemoClaw agents.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { setup } from '@vantinelai/openclaw'
|
|
8
|
+
* await setup({ apiKey: 'vntl_...', gatewayUrl: 'http://localhost:8000' })
|
|
9
|
+
*/
|
|
10
|
+
export { getOpenclawConfigPath, readOpenclawConfig, writeOpenclawConfig, buildVantinelConfigFragment } from './config.js';
|
|
11
|
+
export { startMcpProxy, stopMcpProxy, isMcpProxyRunning } from './proxy.js';
|
|
12
|
+
export type { OpenclawSetupConfig, SetupResult, OpenclawClientWrapper } from './types.js';
|
|
13
|
+
import type { OpenclawSetupConfig, SetupResult } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* One-call setup: writes openclaw.json fragment, verifies gateway connectivity,
|
|
16
|
+
* and optionally starts the MCP proxy.
|
|
17
|
+
*/
|
|
18
|
+
export declare function setup(config: OpenclawSetupConfig): Promise<SetupResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Programmatically wrap an OpenClaw JS client instance.
|
|
21
|
+
* Intercepts tool calls to add Vantinel observability.
|
|
22
|
+
*
|
|
23
|
+
* @param client - An OpenClaw client instance (duck-typed)
|
|
24
|
+
* @param config - Vantinel config
|
|
25
|
+
*/
|
|
26
|
+
export declare function wrapOpenClaw(client: Record<string, unknown>, config: Pick<OpenclawSetupConfig, 'apiKey' | 'gatewayUrl' | 'agentId'>): Record<string, unknown>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the Vantinel dashboard deep-link URL for a given agent session.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getSessionUrl(sessionId: string, options?: {
|
|
31
|
+
dashboardUrl?: string;
|
|
32
|
+
}): string;
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAG1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnE;;;GAGG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsD7E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC,GACrE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BzB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC,MAAM,CAGR"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vantinel/openclaw
|
|
3
|
+
*
|
|
4
|
+
* One-line setup for Vantinel observability with OpenClaw / NemoClaw agents.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { setup } from '@vantinelai/openclaw'
|
|
8
|
+
* await setup({ apiKey: 'vntl_...', gatewayUrl: 'http://localhost:8000' })
|
|
9
|
+
*/
|
|
10
|
+
export { getOpenclawConfigPath, readOpenclawConfig, writeOpenclawConfig, buildVantinelConfigFragment } from './config.js';
|
|
11
|
+
export { startMcpProxy, stopMcpProxy, isMcpProxyRunning } from './proxy.js';
|
|
12
|
+
import { buildVantinelConfigFragment, writeOpenclawConfig } from './config.js';
|
|
13
|
+
/**
|
|
14
|
+
* One-call setup: writes openclaw.json fragment, verifies gateway connectivity,
|
|
15
|
+
* and optionally starts the MCP proxy.
|
|
16
|
+
*/
|
|
17
|
+
export async function setup(config) {
|
|
18
|
+
const gatewayUrl = (config.gatewayUrl ?? 'http://localhost:8000').replace(/\/$/, '');
|
|
19
|
+
const errors = [];
|
|
20
|
+
let gatewayLatencyMs;
|
|
21
|
+
let configWritten = false;
|
|
22
|
+
let configPath = '';
|
|
23
|
+
let proxyStarted = false;
|
|
24
|
+
// 1. Write openclaw.json fragment
|
|
25
|
+
try {
|
|
26
|
+
const fragment = buildVantinelConfigFragment(config.apiKey, gatewayUrl);
|
|
27
|
+
configPath = writeOpenclawConfig(fragment);
|
|
28
|
+
configWritten = true;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
errors.push(`Failed to write openclaw.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
32
|
+
}
|
|
33
|
+
// 2. Verify gateway connectivity
|
|
34
|
+
try {
|
|
35
|
+
const start = Date.now();
|
|
36
|
+
const res = await fetch(`${gatewayUrl}/health`, {
|
|
37
|
+
signal: AbortSignal.timeout(3000),
|
|
38
|
+
});
|
|
39
|
+
gatewayLatencyMs = Date.now() - start;
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
errors.push(`Gateway health check failed: HTTP ${res.status}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
errors.push(`Cannot reach gateway at ${gatewayUrl}: ${err instanceof Error ? err.message : String(err)}`);
|
|
46
|
+
}
|
|
47
|
+
// 3. Optionally start MCP proxy
|
|
48
|
+
if (config.startMcpProxy) {
|
|
49
|
+
try {
|
|
50
|
+
const { startMcpProxy } = await import('./proxy.js');
|
|
51
|
+
proxyStarted = await startMcpProxy('openclaw-mcp-server', [], {
|
|
52
|
+
mode: config.proxyMode ?? 'openclaw',
|
|
53
|
+
collectorUrl: gatewayUrl,
|
|
54
|
+
apiKey: config.apiKey,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
errors.push(`Failed to start MCP proxy: ${err instanceof Error ? err.message : String(err)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
ok: errors.length === 0,
|
|
63
|
+
gatewayUrl,
|
|
64
|
+
gatewayLatencyMs,
|
|
65
|
+
configWritten,
|
|
66
|
+
configPath,
|
|
67
|
+
proxyStarted,
|
|
68
|
+
errors,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Programmatically wrap an OpenClaw JS client instance.
|
|
73
|
+
* Intercepts tool calls to add Vantinel observability.
|
|
74
|
+
*
|
|
75
|
+
* @param client - An OpenClaw client instance (duck-typed)
|
|
76
|
+
* @param config - Vantinel config
|
|
77
|
+
*/
|
|
78
|
+
export function wrapOpenClaw(client, config) {
|
|
79
|
+
const gatewayUrl = (config.gatewayUrl ?? 'http://localhost:8000').replace(/\/$/, '');
|
|
80
|
+
const apiKey = config.apiKey;
|
|
81
|
+
// Wrap the `run` method if it exists (OpenClaw's main execution method)
|
|
82
|
+
if (typeof client['run'] === 'function') {
|
|
83
|
+
const originalRun = client['run'];
|
|
84
|
+
const agentId = config.agentId ?? 'openclaw-agent';
|
|
85
|
+
const sessionId = `oc_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
86
|
+
// Send session start
|
|
87
|
+
void sendSessionEvent(apiKey, gatewayUrl, 'start', sessionId, agentId).catch(() => { });
|
|
88
|
+
client['run'] = async function (...args) {
|
|
89
|
+
try {
|
|
90
|
+
const result = await originalRun.apply(client, args);
|
|
91
|
+
void sendSessionEvent(apiKey, gatewayUrl, 'end', sessionId, agentId).catch(() => { });
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
void sendSessionEvent(apiKey, gatewayUrl, 'error', sessionId, agentId, {
|
|
96
|
+
error: err instanceof Error ? err.message : String(err),
|
|
97
|
+
}).catch(() => { });
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return client;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns the Vantinel dashboard deep-link URL for a given agent session.
|
|
106
|
+
*/
|
|
107
|
+
export function getSessionUrl(sessionId, options) {
|
|
108
|
+
const base = (options?.dashboardUrl ?? 'https://app.vantinel.com').replace(/\/$/, '');
|
|
109
|
+
return `${base}/agents/${encodeURIComponent(sessionId)}`;
|
|
110
|
+
}
|
|
111
|
+
// ── Internal helpers ──────────────────────────────────────────────────────────
|
|
112
|
+
async function sendSessionEvent(apiKey, gatewayUrl, event, sessionId, agentId, metadata) {
|
|
113
|
+
await fetch(`${gatewayUrl}/v1/agents/sessions`, {
|
|
114
|
+
method: 'POST',
|
|
115
|
+
headers: {
|
|
116
|
+
'Content-Type': 'application/json',
|
|
117
|
+
'X-Vantinel-API-Key': apiKey,
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({ event, session_id: sessionId, agent_id: agentId, metadata }),
|
|
120
|
+
signal: AbortSignal.timeout(2000),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# 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/dist/proxy.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ProxyOptions {
|
|
2
|
+
mode?: 'openclaw' | 'nemoclaw' | 'generic';
|
|
3
|
+
collectorUrl?: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
clientId?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Start the Vantinel MCP proxy wrapper.
|
|
9
|
+
* Spawns `npx vantinel-mcp-proxy --mode <mode>` in the background.
|
|
10
|
+
* Returns true if started successfully, false if already running or failed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function startMcpProxy(targetCommand: string, targetArgs: string[], options?: ProxyOptions): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Stop the running MCP proxy process.
|
|
15
|
+
*/
|
|
16
|
+
export declare function stopMcpProxy(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns true if the MCP proxy is currently running.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isMcpProxyRunning(): boolean;
|
|
21
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAKlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
package/dist/proxy.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
let proxyProcess = null;
|
|
3
|
+
/**
|
|
4
|
+
* Start the Vantinel MCP proxy wrapper.
|
|
5
|
+
* Spawns `npx vantinel-mcp-proxy --mode <mode>` in the background.
|
|
6
|
+
* Returns true if started successfully, false if already running or failed.
|
|
7
|
+
*/
|
|
8
|
+
export async function startMcpProxy(targetCommand, targetArgs, options = {}) {
|
|
9
|
+
if (proxyProcess && !proxyProcess.killed) {
|
|
10
|
+
return false; // Already running
|
|
11
|
+
}
|
|
12
|
+
const mode = options.mode ?? 'openclaw';
|
|
13
|
+
const env = {
|
|
14
|
+
...process.env,
|
|
15
|
+
};
|
|
16
|
+
if (options.collectorUrl)
|
|
17
|
+
env['VANTINEL_COLLECTOR_URL'] = options.collectorUrl;
|
|
18
|
+
if (options.apiKey)
|
|
19
|
+
env['VANTINEL_API_KEY'] = options.apiKey;
|
|
20
|
+
if (options.clientId)
|
|
21
|
+
env['VANTINEL_CLIENT_ID'] = options.clientId;
|
|
22
|
+
if (options.mode)
|
|
23
|
+
env['VANTINEL_MODE'] = options.mode;
|
|
24
|
+
const args = ['--mode', mode, '--', targetCommand, ...targetArgs];
|
|
25
|
+
proxyProcess = spawn('npx', ['vantinel-mcp-proxy', ...args], {
|
|
26
|
+
env,
|
|
27
|
+
stdio: 'inherit',
|
|
28
|
+
detached: false,
|
|
29
|
+
});
|
|
30
|
+
proxyProcess.on('error', (err) => {
|
|
31
|
+
console.warn('[Vantinel] MCP proxy failed to start:', err.message);
|
|
32
|
+
proxyProcess = null;
|
|
33
|
+
});
|
|
34
|
+
proxyProcess.on('exit', () => {
|
|
35
|
+
proxyProcess = null;
|
|
36
|
+
});
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Stop the running MCP proxy process.
|
|
41
|
+
*/
|
|
42
|
+
export async function stopMcpProxy() {
|
|
43
|
+
if (proxyProcess && !proxyProcess.killed) {
|
|
44
|
+
proxyProcess.kill('SIGTERM');
|
|
45
|
+
proxyProcess = null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns true if the MCP proxy is currently running.
|
|
50
|
+
*/
|
|
51
|
+
export function isMcpProxyRunning() {
|
|
52
|
+
return proxyProcess !== null && !proxyProcess.killed;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAEpD,IAAI,YAAY,GAAwB,IAAI,CAAC;AAS7C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,UAAoB,EACpB,UAAwB,EAAE;IAE1B,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC,CAAC,kBAAkB;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;IACxC,MAAM,GAAG,GAA2B;QAClC,GAAG,OAAO,CAAC,GAA6B;KACzC,CAAC;IAEF,IAAI,OAAO,CAAC,YAAY;QAAE,GAAG,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM;QAAE,GAAG,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7D,IAAI,OAAO,CAAC,QAAQ;QAAE,GAAG,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnE,IAAI,OAAO,CAAC,IAAI;QAAE,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,CAAC;IAElE,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,EAAE;QAC3D,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnE,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QAC3B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvD,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface OpenclawSetupConfig {
|
|
2
|
+
/** Vantinel API key (starts with vntl_) */
|
|
3
|
+
apiKey: string;
|
|
4
|
+
/** Gateway URL, defaults to http://localhost:8000 */
|
|
5
|
+
gatewayUrl?: string;
|
|
6
|
+
/** Agent ID for this OpenClaw instance */
|
|
7
|
+
agentId?: string;
|
|
8
|
+
/** Session budget in USD. 0 = unlimited */
|
|
9
|
+
sessionBudget?: number;
|
|
10
|
+
/** Whether to start MCP proxy wrapper automatically */
|
|
11
|
+
startMcpProxy?: boolean;
|
|
12
|
+
/** Mode for MCP proxy: openclaw, nemoclaw, generic */
|
|
13
|
+
proxyMode?: 'openclaw' | 'nemoclaw' | 'generic';
|
|
14
|
+
/** Dashboard URL for deep-links */
|
|
15
|
+
dashboardUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SetupResult {
|
|
18
|
+
ok: boolean;
|
|
19
|
+
gatewayUrl: string;
|
|
20
|
+
gatewayLatencyMs?: number;
|
|
21
|
+
configWritten: boolean;
|
|
22
|
+
configPath: string;
|
|
23
|
+
proxyStarted: boolean;
|
|
24
|
+
errors: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface OpenclawClientWrapper {
|
|
27
|
+
/** The underlying VantinelClient for direct use */
|
|
28
|
+
sendSessionEvent(event: 'start' | 'end' | 'step' | 'error', sessionId: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
29
|
+
destroy(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAChD,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vantinelai/openclaw",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "One-line Vantinel observability setup for OpenClaw and NemoClaw autonomous agents",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"clean": "rm -rf dist"
|
|
19
|
+
},
|
|
20
|
+
"keywords": ["vantinel", "openclaw", "nemoclaw", "ai-agent", "observability"],
|
|
21
|
+
"author": "Vantinel AI <support@vantinel.com>",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/vantinel/vantinel-node.git",
|
|
26
|
+
"directory": "packages/openclaw"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist/",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"typescript": "^5.0.0",
|
|
35
|
+
"@types/node": "^20.0.0"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
}
|
|
40
|
+
}
|