crewx-agent-cli 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +79 -4
  2. package/dist/adapters.d.ts +12 -0
  3. package/dist/adapters.d.ts.map +1 -1
  4. package/dist/adapters.js +112 -40
  5. package/dist/adapters.js.map +1 -1
  6. package/dist/api.d.ts +40 -17
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +187 -11
  9. package/dist/api.js.map +1 -1
  10. package/dist/bridge-watchdog.d.ts +10 -0
  11. package/dist/bridge-watchdog.d.ts.map +1 -0
  12. package/dist/bridge-watchdog.js +45 -0
  13. package/dist/bridge-watchdog.js.map +1 -0
  14. package/dist/config.d.ts +9 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +53 -2
  17. package/dist/config.js.map +1 -1
  18. package/dist/constants.d.ts +6 -1
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +11 -1
  21. package/dist/constants.js.map +1 -1
  22. package/dist/daemon.d.ts +34 -1
  23. package/dist/daemon.d.ts.map +1 -1
  24. package/dist/daemon.js +507 -102
  25. package/dist/daemon.js.map +1 -1
  26. package/dist/errors.d.ts +4 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +3 -1
  29. package/dist/errors.js.map +1 -1
  30. package/dist/index.d.ts +3 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +17 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/join.d.ts +1 -0
  35. package/dist/join.d.ts.map +1 -1
  36. package/dist/join.js +13 -0
  37. package/dist/join.js.map +1 -1
  38. package/dist/outbox.d.ts +22 -0
  39. package/dist/outbox.d.ts.map +1 -0
  40. package/dist/outbox.js +189 -0
  41. package/dist/outbox.js.map +1 -0
  42. package/dist/process-lock.d.ts +31 -0
  43. package/dist/process-lock.d.ts.map +1 -0
  44. package/dist/process-lock.js +272 -0
  45. package/dist/process-lock.js.map +1 -0
  46. package/dist/prompt.d.ts.map +1 -1
  47. package/dist/prompt.js +7 -0
  48. package/dist/prompt.js.map +1 -1
  49. package/dist/runtime-proxy.d.ts +18 -0
  50. package/dist/runtime-proxy.d.ts.map +1 -0
  51. package/dist/runtime-proxy.js +221 -0
  52. package/dist/runtime-proxy.js.map +1 -0
  53. package/package.json +6 -2
@@ -0,0 +1,221 @@
1
+ import { randomBytes, timingSafeEqual } from 'node:crypto';
2
+ import { createServer } from 'node:http';
3
+ import { API_PATH, CLI_VERSION, MAX_API_RESPONSE_BYTES } from './constants.js';
4
+ import { CliError, redactSecrets } from './errors.js';
5
+ const MAX_PROXY_REQUEST_BYTES = 1024 * 1024;
6
+ const PROXY_REQUEST_TIMEOUT_MS = 20_000;
7
+ const ALLOWED_ROUTES = [
8
+ { pattern: /^\/tasks$/, methods: ['GET', 'POST'] },
9
+ { pattern: /^\/tasks\/[1-9]\d*$/, methods: ['PATCH'] },
10
+ { pattern: /^\/documents$/, methods: ['GET', 'POST'] },
11
+ { pattern: /^\/documents\/[1-9]\d*$/, methods: ['PATCH'] },
12
+ { pattern: /^\/memories$/, methods: ['GET', 'POST'] },
13
+ { pattern: /^\/memories\/[1-9]\d*$/, methods: ['PATCH'] },
14
+ { pattern: /^\/integrations$/, methods: ['GET'] },
15
+ { pattern: /^\/integrations\/[^/]+\/search$/, methods: ['GET'] },
16
+ ];
17
+ function authorized(value, token) {
18
+ if (!value?.startsWith('Bearer '))
19
+ return false;
20
+ const supplied = Buffer.from(value.slice('Bearer '.length));
21
+ const expected = Buffer.from(token);
22
+ return supplied.length === expected.length && timingSafeEqual(supplied, expected);
23
+ }
24
+ function sendJson(response, status, payload) {
25
+ const body = JSON.stringify(payload);
26
+ response.writeHead(status, {
27
+ 'content-type': 'application/json',
28
+ 'content-length': Buffer.byteLength(body),
29
+ 'cache-control': 'no-store',
30
+ });
31
+ response.end(body);
32
+ }
33
+ async function readRequestBody(request) {
34
+ const chunks = [];
35
+ let size = 0;
36
+ for await (const chunk of request) {
37
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
38
+ size += bytes.length;
39
+ if (size > MAX_PROXY_REQUEST_BYTES) {
40
+ throw new CliError('CrewX runtime tool request is too large.', 1, {
41
+ code: 'runtime_proxy_request_too_large',
42
+ });
43
+ }
44
+ chunks.push(bytes);
45
+ }
46
+ return Buffer.concat(chunks);
47
+ }
48
+ async function readUpstreamBody(response) {
49
+ const declared = Number(response.headers.get('content-length') ?? '0');
50
+ if (Number.isFinite(declared) && declared > MAX_API_RESPONSE_BYTES) {
51
+ throw new CliError('CrewX runtime tool response is too large.', 1, {
52
+ code: 'runtime_proxy_response_too_large',
53
+ });
54
+ }
55
+ if (!response.body)
56
+ return Buffer.alloc(0);
57
+ const chunks = [];
58
+ const reader = response.body.getReader();
59
+ let size = 0;
60
+ try {
61
+ while (true) {
62
+ const part = await reader.read();
63
+ if (part.done)
64
+ break;
65
+ size += part.value.byteLength;
66
+ if (size > MAX_API_RESPONSE_BYTES) {
67
+ await reader.cancel();
68
+ throw new CliError('CrewX runtime tool response is too large.', 1, {
69
+ code: 'runtime_proxy_response_too_large',
70
+ });
71
+ }
72
+ chunks.push(Buffer.from(part.value));
73
+ }
74
+ }
75
+ finally {
76
+ reader.releaseLock();
77
+ }
78
+ return Buffer.concat(chunks);
79
+ }
80
+ export async function startRuntimeCredentialProxy(options) {
81
+ const upstreamBase = options.upstreamUrl.replace(/\/+$/, '');
82
+ if (!upstreamBase.endsWith(API_PATH)) {
83
+ throw new CliError('CrewX runtime proxy received an invalid upstream API URL.', 1, {
84
+ code: 'runtime_proxy_invalid_upstream',
85
+ });
86
+ }
87
+ const proxyToken = randomBytes(32).toString('base64url');
88
+ const fetch = options.fetch ?? globalThis.fetch;
89
+ const sockets = new Set();
90
+ const server = createServer(async (request, response) => {
91
+ try {
92
+ response.setHeader('cache-control', 'no-store');
93
+ if (!authorized(request.headers.authorization, proxyToken)) {
94
+ sendJson(response, 401, { message: 'This runtime capability is invalid or expired.' });
95
+ return;
96
+ }
97
+ const localUrl = new URL(request.url ?? '/', 'http://127.0.0.1');
98
+ if (!localUrl.pathname.startsWith(`${API_PATH}/`)) {
99
+ sendJson(response, 404, { message: 'This CrewX runtime capability cannot access that route.' });
100
+ return;
101
+ }
102
+ const suffix = localUrl.pathname.slice(API_PATH.length);
103
+ const method = request.method ?? 'GET';
104
+ const route = ALLOWED_ROUTES.find((candidate) => candidate.pattern.test(suffix) && candidate.methods.includes(method));
105
+ if (!route) {
106
+ sendJson(response, 403, { message: 'This CrewX runtime capability cannot perform that action.' });
107
+ return;
108
+ }
109
+ const canMutate = options.chatOnly !== true &&
110
+ (options.permissionPreset === 'standard' ||
111
+ options.permissionPreset === 'full_access');
112
+ if (method !== 'GET' && !canMutate) {
113
+ sendJson(response, 403, {
114
+ message: options.chatOnly === true
115
+ ? 'This chat-only CrewX agent can read shared context but cannot change workspace data.'
116
+ : 'This read-only CrewX agent can read shared context but cannot change workspace data.',
117
+ });
118
+ return;
119
+ }
120
+ const body = method === 'GET' || method === 'HEAD'
121
+ ? undefined
122
+ : await readRequestBody(request);
123
+ const timeout = AbortSignal.timeout(PROXY_REQUEST_TIMEOUT_MS);
124
+ const assignmentHeaders = method === 'PATCH' && /^\/tasks\/[1-9]\d*$/.test(suffix)
125
+ ? {
126
+ ...(options.assignmentId
127
+ ? { 'x-crewx-assignment-id': options.assignmentId }
128
+ : {}),
129
+ ...(options.claimToken
130
+ ? { 'x-crewx-claim-token': options.claimToken }
131
+ : {}),
132
+ ...(options.sessionId
133
+ ? { 'x-crewx-session-id': options.sessionId }
134
+ : {}),
135
+ }
136
+ : {};
137
+ const upstream = await fetch(`${upstreamBase}${suffix}${localUrl.search}`, {
138
+ method,
139
+ headers: {
140
+ accept: 'application/json',
141
+ authorization: `Bearer ${options.upstreamToken}`,
142
+ 'content-type': 'application/json',
143
+ 'user-agent': `crewx-runtime-proxy/${CLI_VERSION}`,
144
+ ...assignmentHeaders,
145
+ },
146
+ redirect: 'manual',
147
+ signal: timeout,
148
+ ...(body ? { body: body.toString('utf8') } : {}),
149
+ });
150
+ const upstreamBody = await readUpstreamBody(upstream);
151
+ const headers = {
152
+ 'content-type': upstream.headers.get('content-type') ?? 'application/json',
153
+ 'content-length': upstreamBody.length,
154
+ 'cache-control': 'no-store',
155
+ };
156
+ const retryAfter = upstream.headers.get('retry-after');
157
+ if (retryAfter)
158
+ headers['retry-after'] = retryAfter;
159
+ response.writeHead(upstream.status, headers);
160
+ response.end(upstreamBody);
161
+ }
162
+ catch (error) {
163
+ if (response.headersSent) {
164
+ response.destroy(error instanceof Error ? error : undefined);
165
+ return;
166
+ }
167
+ const status = error instanceof CliError &&
168
+ error.code === 'runtime_proxy_request_too_large'
169
+ ? 413
170
+ : 502;
171
+ sendJson(response, status, {
172
+ message: redactSecrets(error instanceof Error
173
+ ? `CrewX runtime tool request failed: ${error.message}`
174
+ : 'CrewX runtime tool request failed.', [options.upstreamToken, proxyToken]),
175
+ });
176
+ }
177
+ });
178
+ server.on('connection', (socket) => {
179
+ sockets.add(socket);
180
+ socket.once('close', () => sockets.delete(socket));
181
+ });
182
+ await new Promise((resolve, reject) => {
183
+ const onError = (error) => {
184
+ server.off('listening', onListening);
185
+ reject(error);
186
+ };
187
+ const onListening = () => {
188
+ server.off('error', onError);
189
+ resolve();
190
+ };
191
+ server.once('error', onError);
192
+ server.once('listening', onListening);
193
+ server.listen({ host: '127.0.0.1', port: 0, exclusive: true });
194
+ });
195
+ const address = server.address();
196
+ if (!address || typeof address === 'string') {
197
+ server.close();
198
+ throw new CliError('CrewX could not open its local runtime capability proxy.', 1, {
199
+ code: 'runtime_proxy_listen_failed',
200
+ });
201
+ }
202
+ let closed = false;
203
+ return {
204
+ environment: {
205
+ CREWX_URL: `http://127.0.0.1:${String(address.port)}`,
206
+ CREWX_TOKEN: proxyToken,
207
+ CREWX_CLI_PATH: options.cliPath,
208
+ },
209
+ close: async () => {
210
+ if (closed)
211
+ return;
212
+ closed = true;
213
+ await new Promise((resolve) => {
214
+ server.close(() => resolve());
215
+ for (const socket of sockets)
216
+ socket.destroy();
217
+ });
218
+ },
219
+ };
220
+ }
221
+ //# sourceMappingURL=runtime-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-proxy.js","sourceRoot":"","sources":["../src/runtime-proxy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewx-agent-cli",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Connect Codex, Claude Code, Pi, Hermes, and OpenClaw agents to a CrewX workspace.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,6 +14,10 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
+ },
18
+ "./adapters": {
19
+ "types": "./dist/adapters.d.ts",
20
+ "import": "./dist/adapters.js"
17
21
  }
18
22
  },
19
23
  "files": [
@@ -38,7 +42,7 @@
38
42
  },
39
43
  "dependencies": {
40
44
  "commander": "^14.0.2",
41
- "crewx-agent-protocol": "0.2.3"
45
+ "crewx-agent-protocol": "0.2.5"
42
46
  },
43
47
  "devDependencies": {
44
48
  "@types/node": "^24.10.1",