@aerostack/openclaw-bridge 0.10.1 → 0.11.1
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/index.js +52 -50
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +17 -0
- package/dist/logger.js +25 -0
- package/dist/logger.js.map +1 -0
- package/dist/resolution.d.ts +25 -0
- package/dist/resolution.js +205 -0
- package/dist/resolution.js.map +1 -0
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
25
25
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
26
26
|
import { ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
27
|
+
import { resolveApproval } from './resolution.js';
|
|
28
|
+
import { info, error as logError } from './logger.js';
|
|
27
29
|
// ── Config ─────────────────────────────────────────────────────────
|
|
28
30
|
const WORKSPACE_URL = process.env.AEROSTACK_WORKSPACE_URL;
|
|
29
31
|
const TOKEN = process.env.AEROSTACK_TOKEN;
|
|
@@ -73,7 +75,7 @@ async function rpcCall(method, params) {
|
|
|
73
75
|
headers: {
|
|
74
76
|
'Content-Type': 'application/json',
|
|
75
77
|
'Authorization': `Bearer ${TOKEN}`,
|
|
76
|
-
'User-Agent': 'aerostack-openclaw-bridge/0.
|
|
78
|
+
'User-Agent': 'aerostack-openclaw-bridge/0.11.0',
|
|
77
79
|
'X-Agent-Id': 'openclaw',
|
|
78
80
|
},
|
|
79
81
|
body: JSON.stringify(body),
|
|
@@ -113,74 +115,74 @@ function parseSSEResponse(text, requestId) {
|
|
|
113
115
|
}
|
|
114
116
|
return lastData ?? { jsonrpc: '2.0', id: requestId, error: { code: -32603, message: 'Empty SSE response' } };
|
|
115
117
|
}
|
|
116
|
-
async function pollApproval(approvalId) {
|
|
117
|
-
const pollUrl = `${baseUrl}/approval-status/${approvalId}`;
|
|
118
|
-
const deadline = Date.now() + APPROVAL_TIMEOUT_MS;
|
|
119
|
-
process.stderr.write(`[aerostack-bridge] Tool requires approval (${approvalId}). Waiting...\n`);
|
|
120
|
-
while (Date.now() < deadline) {
|
|
121
|
-
await sleep(APPROVAL_POLL_INTERVAL_MS);
|
|
122
|
-
try {
|
|
123
|
-
const res = await fetch(pollUrl, {
|
|
124
|
-
headers: { 'User-Agent': 'aerostack-openclaw-bridge/0.10.1' },
|
|
125
|
-
});
|
|
126
|
-
if (!res.ok)
|
|
127
|
-
continue;
|
|
128
|
-
const status = await res.json();
|
|
129
|
-
if (status.status === 'executed') {
|
|
130
|
-
process.stderr.write(`[aerostack-bridge] Approved and executed.\n`);
|
|
131
|
-
return status;
|
|
132
|
-
}
|
|
133
|
-
if (status.status === 'approved') {
|
|
134
|
-
process.stderr.write(`[aerostack-bridge] Approved. Retrying tool call...\n`);
|
|
135
|
-
return status;
|
|
136
|
-
}
|
|
137
|
-
if (status.status === 'rejected') {
|
|
138
|
-
process.stderr.write(`[aerostack-bridge] Rejected: ${status.reviewer_note ?? 'no reason given'}\n`);
|
|
139
|
-
return status;
|
|
140
|
-
}
|
|
141
|
-
if (status.status === 'expired') {
|
|
142
|
-
process.stderr.write(`[aerostack-bridge] Approval expired.\n`);
|
|
143
|
-
return status;
|
|
144
|
-
}
|
|
145
|
-
// still pending — keep polling
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
// network error — keep trying
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return { id: approvalId, status: 'expired', tool_name: '' };
|
|
152
|
-
}
|
|
153
|
-
function sleep(ms) {
|
|
154
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
155
|
-
}
|
|
156
118
|
// ── Handle tools/call with approval retry ──────────────────────────
|
|
157
119
|
async function callToolWithApproval(name, args) {
|
|
158
120
|
const response = await rpcCall('tools/call', { name, arguments: args });
|
|
159
|
-
//
|
|
121
|
+
// Case 1: Tool gate — server returns -32050 error with approval_id
|
|
160
122
|
if (response.error?.code === -32050) {
|
|
161
123
|
const data = response.error.data;
|
|
162
124
|
const approvalId = data?.approval_id;
|
|
163
125
|
if (!approvalId || !/^[a-zA-Z0-9_-]{4,128}$/.test(approvalId)) {
|
|
164
126
|
return { jsonrpc: '2.0', id: response.id, error: { code: -32603, message: 'Approval required but no approval_id returned' } };
|
|
165
127
|
}
|
|
166
|
-
|
|
167
|
-
|
|
128
|
+
info('Tool gate: waiting for approval', { approvalId, transport: data?.ws_url ? 'ws' : 'poll' });
|
|
129
|
+
const pollUrl = data?.polling_url ?? `${baseUrl}/approval-status/${approvalId}`;
|
|
130
|
+
const result = await resolveApproval({
|
|
131
|
+
approvalId,
|
|
132
|
+
wsUrl: data?.ws_url,
|
|
133
|
+
pollUrl,
|
|
134
|
+
pollIntervalMs: APPROVAL_POLL_INTERVAL_MS,
|
|
135
|
+
timeoutMs: APPROVAL_TIMEOUT_MS,
|
|
136
|
+
});
|
|
137
|
+
if (result.status === 'rejected') {
|
|
168
138
|
return {
|
|
169
139
|
jsonrpc: '2.0',
|
|
170
140
|
id: response.id,
|
|
171
|
-
error: { code: -32603, message: `Tool call rejected: ${
|
|
141
|
+
error: { code: -32603, message: `Tool call rejected: ${result.reviewer_note ?? 'no reason given'}` },
|
|
172
142
|
};
|
|
173
143
|
}
|
|
174
|
-
if (
|
|
144
|
+
if (result.status === 'expired') {
|
|
175
145
|
return {
|
|
176
146
|
jsonrpc: '2.0',
|
|
177
147
|
id: response.id,
|
|
178
148
|
error: { code: -32603, message: 'Approval request expired' },
|
|
179
149
|
};
|
|
180
150
|
}
|
|
181
|
-
// Approved — retry the tool call (gateway
|
|
151
|
+
// Approved or executed — retry the tool call (gateway returns cached result)
|
|
152
|
+
info('Retrying tool call after approval', { approvalId, status: result.status });
|
|
182
153
|
return rpcCall('tools/call', { name, arguments: args });
|
|
183
154
|
}
|
|
155
|
+
// Case 2: Permission gate — request_approval returns success with _meta.approval_id
|
|
156
|
+
const resultObj = response.result;
|
|
157
|
+
const meta = resultObj?._meta;
|
|
158
|
+
if (meta?.approval_id && meta?.status === 'pending') {
|
|
159
|
+
const approvalId = meta.approval_id;
|
|
160
|
+
info('Permission gate: waiting for approval', { approvalId, transport: meta.ws_url ? 'ws' : 'poll' });
|
|
161
|
+
const pollUrl = meta.polling_url ?? `${baseUrl}/approval-status/${approvalId}`;
|
|
162
|
+
const result = await resolveApproval({
|
|
163
|
+
approvalId,
|
|
164
|
+
wsUrl: meta.ws_url,
|
|
165
|
+
pollUrl,
|
|
166
|
+
pollIntervalMs: APPROVAL_POLL_INTERVAL_MS,
|
|
167
|
+
timeoutMs: APPROVAL_TIMEOUT_MS,
|
|
168
|
+
});
|
|
169
|
+
// Return the resolution as a tool result to the LLM
|
|
170
|
+
let message;
|
|
171
|
+
if (result.status === 'approved' || result.status === 'executed') {
|
|
172
|
+
message = `APPROVED — Your request has been approved. You may proceed with the action.`;
|
|
173
|
+
}
|
|
174
|
+
else if (result.status === 'rejected') {
|
|
175
|
+
message = `REJECTED — Your request was denied. Reason: ${result.reviewer_note ?? 'No reason given.'}. Do NOT proceed.`;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
message = `EXPIRED — Your approval request timed out. Submit a new request if needed.`;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
jsonrpc: '2.0',
|
|
182
|
+
id: response.id,
|
|
183
|
+
result: { content: [{ type: 'text', text: message }] },
|
|
184
|
+
};
|
|
185
|
+
}
|
|
184
186
|
return response;
|
|
185
187
|
}
|
|
186
188
|
// ── MCP Server (stdio) ────────────────────────────────────────────
|
|
@@ -271,13 +273,13 @@ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
|
271
273
|
});
|
|
272
274
|
// ── Start ──────────────────────────────────────────────────────────
|
|
273
275
|
async function main() {
|
|
274
|
-
|
|
276
|
+
info('Connecting to workspace', { url: baseUrl });
|
|
275
277
|
const transport = new StdioServerTransport();
|
|
276
278
|
await server.connect(transport);
|
|
277
|
-
|
|
279
|
+
info('Ready', { url: baseUrl });
|
|
278
280
|
}
|
|
279
281
|
main().catch((err) => {
|
|
280
|
-
|
|
282
|
+
logError('Fatal error', { error: err instanceof Error ? err.message : String(err) });
|
|
281
283
|
process.exit(1);
|
|
282
284
|
});
|
|
283
285
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAQ,KAAK,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,sEAAsE;AAEtE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC1C,SAAS,gBAAgB,CAAC,GAAuB,EAAE,QAAgB,EAAE,GAAW;IAC5E,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACtG,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACtG,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAEnG,IAAI,CAAC,aAAa,EAAE,CAAC;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,wDAAwD;AACxD,IAAI,SAAc,CAAC;AACnB,IAAI,CAAC;IACD,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAAC,MAAM,CAAC;IACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC;IAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAkBlD,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,MAAgC;IACnE,MAAM,IAAI,GAAmB;QACzB,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,MAAM;QACN,MAAM,EAAE,MAAM,IAAI,EAAE;KACvB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAEvE,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YAC7B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,YAAY,EAAE,kCAAkC;gBAChD,YAAY,EAAE,UAAU;aAC3B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAE1D,uFAAuF;QACvF,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAqB,CAAC;QACjD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,OAAO,EAAE,EAAE,EAAE,CAAC;IACvG,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,SAA0B;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,QAAQ,GAA2B,IAAI,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAoB,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACL,uBAAuB;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,CAAC;AACjH,CAAC;AAED,sEAAsE;AAEtE,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAA6B;IAC3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,mEAAmE;IACnE,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAIf,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,CAAC;QAErC,IAAI,CAAC,UAAU,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE,EAAE,CAAC;QAClI,CAAC;QAED,IAAI,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjG,MAAM,OAAO,GAAG,IAAI,EAAE,WAAW,IAAI,GAAG,OAAO,oBAAoB,UAAU,EAAE,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACjC,UAAU;YACV,KAAK,EAAE,IAAI,EAAE,MAAM;YACnB,OAAO;YACP,cAAc,EAAE,yBAAyB;YACzC,SAAS,EAAE,mBAAmB;SACjC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,MAAM,CAAC,aAAa,IAAI,iBAAiB,EAAE,EAAE;aACvG,CAAC;QACN,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE;aAC/D,CAAC;QACN,CAAC;QAED,6EAA6E;QAC7E,IAAI,CAAC,mCAAmC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,oFAAoF;IACpF,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAkH,CAAC;IAC9I,MAAM,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC;IAC9B,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpC,IAAI,CAAC,uCAAuC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAEtG,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,OAAO,oBAAoB,UAAU,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACjC,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO;YACP,cAAc,EAAE,yBAAyB;YACzC,SAAS,EAAE,mBAAmB;SACjC,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,OAAe,CAAC;QACpB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/D,OAAO,GAAG,6EAA6E,CAAC;QAC5F,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,GAAG,+CAA+C,MAAM,CAAC,aAAa,IAAI,kBAAkB,mBAAmB,CAAC;QAC3H,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,4EAA4E,CAAC;QAC3F,CAAC;QAED,OAAO;YACH,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;SACzD,CAAC;IACN,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,qEAAqE;AAErE,IAAI,gBAAgB,GAA8D,IAAI,CAAC;AAEvF,KAAK,UAAU,iBAAiB;IAC5B,IAAI,gBAAgB;QAAE,OAAO;IAC7B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;QACpC,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE;KACvE,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAG,CAAC,MAAiC,CAAC;QAChD,gBAAgB,GAAG;YACf,eAAe,EAAG,CAAC,CAAC,eAA0B,IAAI,YAAY;YAC9D,YAAY,EAAE,CAAC,CAAC,YAAkC;SACrD,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACrB,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE,EACxD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC9D,CAAC;AAEF,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IACxD,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAExC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAyG,CAAC;IAC7H,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9D,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC,CAAC;IAEtF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACzE,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgG,CAAC;IACpH,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IAC5D,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAuG,CAAC;IAC3H,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAClE,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzE,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAgG,CAAC;IACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;IAC1D,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1C,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAoJ,CAAC;IACxK,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE;QACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;QACzB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;KACtC,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAA+G,CAAC;IACnI,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,sEAAsE;AAEtE,KAAK,UAAU,IAAI;IACf,IAAI,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger for aerostack-openclaw-bridge.
|
|
3
|
+
* Writes JSON to stderr so it doesn't interfere with stdio MCP transport.
|
|
4
|
+
*/
|
|
5
|
+
declare const LEVELS: {
|
|
6
|
+
readonly debug: 0;
|
|
7
|
+
readonly info: 1;
|
|
8
|
+
readonly warn: 2;
|
|
9
|
+
readonly error: 3;
|
|
10
|
+
};
|
|
11
|
+
type Level = keyof typeof LEVELS;
|
|
12
|
+
export declare function log(level: Level, msg: string, extra?: Record<string, unknown>): void;
|
|
13
|
+
export declare const debug: (msg: string, extra?: Record<string, unknown>) => void;
|
|
14
|
+
export declare const info: (msg: string, extra?: Record<string, unknown>) => void;
|
|
15
|
+
export declare const warn: (msg: string, extra?: Record<string, unknown>) => void;
|
|
16
|
+
export declare const error: (msg: string, extra?: Record<string, unknown>) => void;
|
|
17
|
+
export {};
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger for aerostack-openclaw-bridge.
|
|
3
|
+
* Writes JSON to stderr so it doesn't interfere with stdio MCP transport.
|
|
4
|
+
*/
|
|
5
|
+
const LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
|
|
6
|
+
const configured = (() => {
|
|
7
|
+
const raw = (process.env.AEROSTACK_LOG_LEVEL ?? 'info').toLowerCase();
|
|
8
|
+
return raw in LEVELS ? raw : 'info';
|
|
9
|
+
})();
|
|
10
|
+
export function log(level, msg, extra) {
|
|
11
|
+
if (LEVELS[level] < LEVELS[configured])
|
|
12
|
+
return;
|
|
13
|
+
const entry = {
|
|
14
|
+
ts: new Date().toISOString(),
|
|
15
|
+
level,
|
|
16
|
+
msg,
|
|
17
|
+
...extra,
|
|
18
|
+
};
|
|
19
|
+
process.stderr.write(JSON.stringify(entry) + '\n');
|
|
20
|
+
}
|
|
21
|
+
export const debug = (msg, extra) => log('debug', msg, extra);
|
|
22
|
+
export const info = (msg, extra) => log('info', msg, extra);
|
|
23
|
+
export const warn = (msg, extra) => log('warn', msg, extra);
|
|
24
|
+
export const error = (msg, extra) => log('error', msg, extra);
|
|
25
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAGjE,MAAM,UAAU,GAAU,CAAC,GAAG,EAAE;IAC5B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAE,GAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAW,EAAE,KAA+B;IAC1E,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO;IAC/C,MAAM,KAAK,GAA4B;QACnC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,KAAK;QACL,GAAG;QACH,GAAG,KAAK;KACX,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ApprovalResolver — WebSocket-first approval resolution with polling fallback.
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* 1. Primary: Connect WebSocket to ws_url (zero-poll, instant wake via ApprovalGateDO)
|
|
6
|
+
* 2. Safety net: Slow background poll every 30s (catches lost DO signals)
|
|
7
|
+
* 3. Fallback: If WS upgrade fails, full polling at 3s intervals (legacy behavior)
|
|
8
|
+
*
|
|
9
|
+
* The WS carries status-only messages ({ status: 'executed' | 'approved' | 'rejected' | 'expired' }).
|
|
10
|
+
* Full results are NOT sent via WS (CF 1MB limit). The caller retries the original
|
|
11
|
+
* tools/call to get the cached result through the normal gateway path.
|
|
12
|
+
*/
|
|
13
|
+
export interface ApprovalResult {
|
|
14
|
+
status: 'approved' | 'executed' | 'rejected' | 'expired';
|
|
15
|
+
reviewer_note?: string;
|
|
16
|
+
}
|
|
17
|
+
interface ResolveOptions {
|
|
18
|
+
approvalId: string;
|
|
19
|
+
wsUrl?: string;
|
|
20
|
+
pollUrl: string;
|
|
21
|
+
pollIntervalMs: number;
|
|
22
|
+
timeoutMs: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function resolveApproval(opts: ResolveOptions): Promise<ApprovalResult>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ApprovalResolver — WebSocket-first approval resolution with polling fallback.
|
|
3
|
+
*
|
|
4
|
+
* Strategy:
|
|
5
|
+
* 1. Primary: Connect WebSocket to ws_url (zero-poll, instant wake via ApprovalGateDO)
|
|
6
|
+
* 2. Safety net: Slow background poll every 30s (catches lost DO signals)
|
|
7
|
+
* 3. Fallback: If WS upgrade fails, full polling at 3s intervals (legacy behavior)
|
|
8
|
+
*
|
|
9
|
+
* The WS carries status-only messages ({ status: 'executed' | 'approved' | 'rejected' | 'expired' }).
|
|
10
|
+
* Full results are NOT sent via WS (CF 1MB limit). The caller retries the original
|
|
11
|
+
* tools/call to get the cached result through the normal gateway path.
|
|
12
|
+
*/
|
|
13
|
+
import { info, warn, debug } from './logger.js';
|
|
14
|
+
export async function resolveApproval(opts) {
|
|
15
|
+
const { approvalId, wsUrl, pollUrl, pollIntervalMs, timeoutMs } = opts;
|
|
16
|
+
const deadline = Date.now() + timeoutMs;
|
|
17
|
+
// Try WebSocket first if ws_url is available
|
|
18
|
+
if (wsUrl) {
|
|
19
|
+
try {
|
|
20
|
+
return await resolveViaWebSocket(approvalId, wsUrl, pollUrl, deadline);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const msg = err instanceof Error ? err.message : 'Unknown WS error';
|
|
24
|
+
warn('WebSocket resolution failed, falling back to polling', { approvalId, error: msg });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Fallback: full polling
|
|
28
|
+
return resolveViaPolling(approvalId, pollUrl, pollIntervalMs, deadline);
|
|
29
|
+
}
|
|
30
|
+
// ── WebSocket Resolution ────────────────────────────────────────────────────
|
|
31
|
+
async function resolveViaWebSocket(approvalId, wsUrl, pollUrl, deadline) {
|
|
32
|
+
// Dynamic import — ws is only needed for WS path, not for polling-only
|
|
33
|
+
const WebSocketImpl = await getWebSocket();
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
let settled = false;
|
|
36
|
+
let slowPollTimer = null;
|
|
37
|
+
let timeoutTimer = null;
|
|
38
|
+
const cleanup = () => {
|
|
39
|
+
settled = true;
|
|
40
|
+
if (slowPollTimer)
|
|
41
|
+
clearInterval(slowPollTimer);
|
|
42
|
+
if (timeoutTimer)
|
|
43
|
+
clearTimeout(timeoutTimer);
|
|
44
|
+
};
|
|
45
|
+
const settle = (result) => {
|
|
46
|
+
if (settled)
|
|
47
|
+
return;
|
|
48
|
+
cleanup();
|
|
49
|
+
resolve(result);
|
|
50
|
+
};
|
|
51
|
+
const fail = (err) => {
|
|
52
|
+
if (settled)
|
|
53
|
+
return;
|
|
54
|
+
cleanup();
|
|
55
|
+
reject(err);
|
|
56
|
+
};
|
|
57
|
+
debug('Connecting WebSocket', { approvalId, wsUrl });
|
|
58
|
+
const ws = new WebSocketImpl(wsUrl);
|
|
59
|
+
ws.onopen = () => {
|
|
60
|
+
info('WebSocket connected, waiting for resolution', { approvalId });
|
|
61
|
+
};
|
|
62
|
+
ws.onmessage = (event) => {
|
|
63
|
+
try {
|
|
64
|
+
const data = typeof event.data === 'string'
|
|
65
|
+
? JSON.parse(event.data)
|
|
66
|
+
: JSON.parse(String(event.data));
|
|
67
|
+
const status = data?.status;
|
|
68
|
+
debug('WebSocket message received', { approvalId, status });
|
|
69
|
+
if (status === 'executed' || status === 'approved' || status === 'rejected' || status === 'expired') {
|
|
70
|
+
info('Approval resolved via WebSocket', { approvalId, status });
|
|
71
|
+
settle({ status, reviewer_note: data?.reviewer_note });
|
|
72
|
+
try {
|
|
73
|
+
ws.close(1000);
|
|
74
|
+
}
|
|
75
|
+
catch { /* already closing */ }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
warn('Failed to parse WebSocket message', { approvalId });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
ws.onerror = (err) => {
|
|
83
|
+
const msg = err instanceof Error ? err.message : 'WebSocket error';
|
|
84
|
+
debug('WebSocket error', { approvalId, error: msg });
|
|
85
|
+
fail(new Error(`WebSocket error: ${msg}`));
|
|
86
|
+
};
|
|
87
|
+
ws.onclose = (event) => {
|
|
88
|
+
if (!settled) {
|
|
89
|
+
debug('WebSocket closed without resolution', { approvalId, code: event.code });
|
|
90
|
+
fail(new Error(`WebSocket closed unexpectedly (code ${event.code})`));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
// Handle the already-resolved race: server returns HTTP JSON instead of WS upgrade.
|
|
94
|
+
// The `ws` package emits 'unexpected-response' when it gets a non-101 response.
|
|
95
|
+
if (typeof ws.on === 'function') {
|
|
96
|
+
ws.on('unexpected-response', async (req, res) => {
|
|
97
|
+
try {
|
|
98
|
+
const chunks = [];
|
|
99
|
+
for await (const chunk of res)
|
|
100
|
+
chunks.push(chunk);
|
|
101
|
+
const body = Buffer.concat(chunks).toString();
|
|
102
|
+
const data = JSON.parse(body);
|
|
103
|
+
const status = data?.status;
|
|
104
|
+
if (status && status !== 'pending') {
|
|
105
|
+
info('Approval already resolved (WS endpoint returned JSON)', { approvalId, status });
|
|
106
|
+
settle({ status: status, reviewer_note: data?.reviewer_note });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch { /* fall through to error */ }
|
|
111
|
+
fail(new Error('WebSocket upgrade rejected by server'));
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Safety net: slow background poll every 30s
|
|
115
|
+
const SLOW_POLL_MS = 30_000;
|
|
116
|
+
slowPollTimer = setInterval(async () => {
|
|
117
|
+
if (settled)
|
|
118
|
+
return;
|
|
119
|
+
try {
|
|
120
|
+
const result = await pollOnce(pollUrl);
|
|
121
|
+
if (result) {
|
|
122
|
+
info('Approval resolved via safety-net poll', { approvalId, status: result.status });
|
|
123
|
+
settle(result);
|
|
124
|
+
try {
|
|
125
|
+
ws.close(1000);
|
|
126
|
+
}
|
|
127
|
+
catch { /* ignore */ }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch { /* poll failed — WS is still primary */ }
|
|
131
|
+
}, SLOW_POLL_MS);
|
|
132
|
+
// Timeout
|
|
133
|
+
const remaining = deadline - Date.now();
|
|
134
|
+
if (remaining <= 0) {
|
|
135
|
+
fail(new Error('Approval timeout'));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
timeoutTimer = setTimeout(() => {
|
|
139
|
+
if (!settled) {
|
|
140
|
+
warn('Approval timed out', { approvalId });
|
|
141
|
+
settle({ status: 'expired' });
|
|
142
|
+
try {
|
|
143
|
+
ws.close(1000);
|
|
144
|
+
}
|
|
145
|
+
catch { /* ignore */ }
|
|
146
|
+
}
|
|
147
|
+
}, remaining);
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// ── Polling Resolution ──────────────────────────────────────────────────────
|
|
151
|
+
async function resolveViaPolling(approvalId, pollUrl, intervalMs, deadline) {
|
|
152
|
+
info('Polling for approval resolution', { approvalId, intervalMs });
|
|
153
|
+
while (Date.now() < deadline) {
|
|
154
|
+
await sleep(intervalMs);
|
|
155
|
+
try {
|
|
156
|
+
const result = await pollOnce(pollUrl);
|
|
157
|
+
if (result) {
|
|
158
|
+
info('Approval resolved via polling', { approvalId, status: result.status });
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Network error — keep trying
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
warn('Approval polling timed out', { approvalId });
|
|
167
|
+
return { status: 'expired' };
|
|
168
|
+
}
|
|
169
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
170
|
+
async function pollOnce(pollUrl) {
|
|
171
|
+
const res = await fetch(pollUrl, {
|
|
172
|
+
headers: { 'User-Agent': 'aerostack-openclaw-bridge/0.11.0' },
|
|
173
|
+
});
|
|
174
|
+
if (!res.ok)
|
|
175
|
+
return null;
|
|
176
|
+
const data = await res.json();
|
|
177
|
+
const status = data.status;
|
|
178
|
+
if (status === 'executed' || status === 'approved') {
|
|
179
|
+
return { status, reviewer_note: data.reviewer_note };
|
|
180
|
+
}
|
|
181
|
+
if (status === 'rejected') {
|
|
182
|
+
return { status: 'rejected', reviewer_note: data.reviewer_note };
|
|
183
|
+
}
|
|
184
|
+
if (status === 'expired') {
|
|
185
|
+
return { status: 'expired' };
|
|
186
|
+
}
|
|
187
|
+
return null; // still pending
|
|
188
|
+
}
|
|
189
|
+
async function getWebSocket() {
|
|
190
|
+
// Use native WebSocket if available (Node 22+), otherwise fall back to ws
|
|
191
|
+
if (typeof globalThis.WebSocket !== 'undefined') {
|
|
192
|
+
return globalThis.WebSocket;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const ws = await import('ws');
|
|
196
|
+
return ws.default;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
throw new Error('WebSocket not available. Install the "ws" package: npm install ws');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function sleep(ms) {
|
|
203
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../src/resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AAenE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAoB;IACtD,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,6CAA6C;IAC7C,IAAI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC;YACD,OAAO,MAAM,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACpE,IAAI,CAAC,sDAAsD,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7F,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,OAAO,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,mBAAmB,CAC9B,UAAkB,EAClB,KAAa,EACb,OAAe,EACf,QAAgB;IAEhB,uEAAuE;IACvE,MAAM,aAAa,GAAG,MAAM,YAAY,EAAE,CAAC;IAE3C,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,aAAa,GAA0C,IAAI,CAAC;QAChE,IAAI,YAAY,GAAyC,IAAI,CAAC;QAE9D,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,aAAa;gBAAE,aAAa,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,YAAY;gBAAE,YAAY,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,MAAsB,EAAE,EAAE;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,CAAC,GAAU,EAAE,EAAE;YACxB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,KAAK,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAErD,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACb,IAAI,CAAC,6CAA6C,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC;QAEF,EAAE,CAAC,SAAS,GAAG,CAAC,KAAwB,EAAE,EAAE;YACxC,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAgB,CAAC;gBACtC,KAAK,CAAC,4BAA4B,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE5D,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBAClG,IAAI,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;oBAChE,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;oBACvD,IAAI,CAAC;wBAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,mCAAmC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,CAAC;QAEF,EAAE,CAAC,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnE,KAAK,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,EAAE,CAAC,OAAO,GAAG,CAAC,KAAuC,EAAE,EAAE;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,KAAK,CAAC,qCAAqC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/E,IAAI,CAAC,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC,CAAC;QAEF,oFAAoF;QACpF,gFAAgF;QAChF,IAAI,OAAQ,EAAU,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YACtC,EAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAQ,EAAE,EAAE;gBACnE,IAAI,CAAC;oBACD,MAAM,MAAM,GAAa,EAAE,CAAC;oBAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAgB,CAAC;oBACtC,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACjC,IAAI,CAAC,uDAAuD,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;wBACtF,MAAM,CAAC,EAAE,MAAM,EAAE,MAAkC,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;wBAC3F,OAAO;oBACX,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACP,CAAC;QAED,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC;QAC5B,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,MAAM,EAAE,CAAC;oBACT,IAAI,CAAC,uCAAuC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrF,MAAM,CAAC,MAAM,CAAC,CAAC;oBACf,IAAI,CAAC;wBAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC,EAAE,YAAY,CAAC,CAAC;QAEjB,UAAU;QACV,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACpC,OAAO;QACX,CAAC;QACD,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC3C,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAClD,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,iBAAiB,CAC5B,UAAkB,EAClB,OAAe,EACf,UAAkB,EAClB,QAAgB;IAEhB,IAAI,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAEpE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,+BAA+B,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7E,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,8BAA8B;QAClC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,QAAQ,CAAC,OAAe;IACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;QAC7B,OAAO,EAAE,EAAE,YAAY,EAAE,kCAAkC,EAAE;KAChE,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;IAErC,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,aAAmC,EAAE,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAmC,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,gBAAgB;AACjC,CAAC;AAED,KAAK,UAAU,YAAY;IACvB,0EAA0E;IAC1E,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,SAAS,CAAC;IAChC,CAAC;IACD,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,OAAsC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CACX,mEAAmE,CACtE,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aerostack/openclaw-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "stdio-to-HTTP bridge connecting OpenClaw to Aerostack Workspaces via MCP",
|
|
5
5
|
"author": "Aerostack",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,11 +19,13 @@
|
|
|
19
19
|
"prepublishOnly": "npm run build"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@modelcontextprotocol/sdk": "^1.25.3"
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
23
|
+
"ws": "^8.18.0"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"typescript": "~5.8.3",
|
|
26
|
-
"@types/node": "^22.0.0"
|
|
27
|
+
"@types/node": "^22.0.0",
|
|
28
|
+
"@types/ws": "^8.5.13"
|
|
27
29
|
},
|
|
28
30
|
"engines": {
|
|
29
31
|
"node": ">=18"
|