@crewx/app 0.1.0-rc.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/SKILL.md ADDED
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: crewx/app
3
+ description: Open a CrewX App and run an allowed action in this task's conversation.
4
+ metadata:
5
+ version: 0.1.0
6
+ built-in: true
7
+ ---
8
+
9
+ # crewx app
10
+
11
+ | Command | Purpose |
12
+ |---|---|
13
+ | `crewx app list` | List Apps available to this task |
14
+ | `crewx app open <appId>` | Open an App in this conversation |
15
+ | `crewx app state <instanceId>` | Read AI-visible state and buttons; run only buttons with `agentAllowed: true` |
16
+ | `crewx app run <instanceId|appId> <actionId> [--input <JSON>|-] [--request-id <id>]` | Run one allowed action |
17
+ | `crewx app receipt <receiptId>` | Read a safe action receipt |
18
+ | `crewx app usage` | Show this guide |
19
+
20
+ ## When blocked
21
+
22
+ - Exit 3, 9, 10, or 11: do not click the screen, use CUA, or open another browser. Report that you could not use the App route.
23
+ - Exit 4: do not retry; report the failure.
24
+ - Include the `receiptId` in your report. Citing an ID is not proof; the checker compares the receipt's `actor.task` with this task.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function main(inputArgs?: string[]): Promise<void>;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AA2BA,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9D"}
package/dist/cli.js ADDED
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.main = main;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const engine_js_1 = require("./src/engine.js");
41
+ function emitOutcome(outcome) {
42
+ const ticket = process.env['CREWX_TASK_TICKET'] ?? '';
43
+ const json = JSON.stringify(outcome.payload);
44
+ process.stdout.write(`${ticket ? json.split(ticket).join('[redacted]') : json}\n`);
45
+ if (outcome.stderr) {
46
+ const stderr = ticket ? outcome.stderr.split(ticket).join('[redacted]') : outcome.stderr;
47
+ process.stderr.write(`${stderr}\n`);
48
+ }
49
+ if (outcome.exitCode !== 0)
50
+ process.exitCode = outcome.exitCode;
51
+ }
52
+ function printSkill() {
53
+ const candidates = [
54
+ path.join(__dirname, '..', 'SKILL.md'),
55
+ path.join(__dirname, 'SKILL.md'),
56
+ ];
57
+ const skillPath = candidates.find((candidate) => fs.existsSync(candidate));
58
+ if (!skillPath)
59
+ throw new Error('SKILL.md is not available');
60
+ process.stdout.write(fs.readFileSync(skillPath, 'utf8'));
61
+ }
62
+ async function main(inputArgs) {
63
+ const args = inputArgs ?? process.argv.slice(2);
64
+ if (args[0] === 'usage' && args.length === 1) {
65
+ try {
66
+ printSkill();
67
+ }
68
+ catch {
69
+ emitOutcome({
70
+ exitCode: 1,
71
+ payload: { ok: false, exit: 1, error: { code: 'ERROR', status: null } },
72
+ });
73
+ }
74
+ return;
75
+ }
76
+ try {
77
+ emitOutcome(await (0, engine_js_1.executeAppCommand)(args));
78
+ }
79
+ catch {
80
+ emitOutcome({
81
+ exitCode: 1,
82
+ payload: { ok: false, exit: 1, error: { code: 'ERROR', status: null } },
83
+ });
84
+ }
85
+ }
86
+ if (require.main === module) {
87
+ void main();
88
+ }
89
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,oBAsBC;AA/CD,4CAA8B;AAC9B,gDAAkC;AAClC,+CAAuE;AAEvE,SAAS,WAAW,CAAC,OAA0B;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AAClE,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;KACjC,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,SAAoB;IAC7C,MAAM,IAAI,GAAG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,CAAC;gBACV,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;aACxE,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,WAAW,CAAC,MAAM,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,CAAC;YACV,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,IAAI,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface AppCommandOutcome {
2
+ exitCode: number;
3
+ payload: Record<string, unknown>;
4
+ stderr?: string;
5
+ }
6
+ export declare function executeAppCommand(args: string[]): Promise<AppCommandOutcome>;
7
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+cD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2DlF"}
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.executeAppCommand = executeAppCommand;
37
+ const node_crypto_1 = require("node:crypto");
38
+ const fs = __importStar(require("node:fs"));
39
+ const http = __importStar(require("node:http"));
40
+ const https = __importStar(require("node:https"));
41
+ const node_url_1 = require("node:url");
42
+ const REQUEST_TIMEOUT_MS = 15000;
43
+ const APP_ID_PREFIX = 'uic_';
44
+ const REQUEST_ID_PATTERN = /^[A-Za-z0-9_-]{8,128}$/;
45
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', '[::1]', 'localhost']);
46
+ const BLOCKED_ROUTE_MESSAGE = 'Do not work around this by clicking the screen or using another browser. Report that you could not use the App route.';
47
+ const UNAUTHORIZED_MESSAGE = 'Do not retry. Report the failure.';
48
+ function isRecord(value) {
49
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
50
+ }
51
+ function failure(exitCode, code, status) {
52
+ let stderr;
53
+ if (exitCode === 3 || exitCode === 9 || exitCode === 10 || exitCode === 11) {
54
+ stderr = BLOCKED_ROUTE_MESSAGE;
55
+ }
56
+ else if (exitCode === 4) {
57
+ stderr = UNAUTHORIZED_MESSAGE;
58
+ }
59
+ return {
60
+ exitCode,
61
+ payload: { ok: false, exit: exitCode, error: { code, status } },
62
+ ...(stderr ? { stderr } : {}),
63
+ };
64
+ }
65
+ function success(payload) {
66
+ return { exitCode: 0, payload };
67
+ }
68
+ function usageFailure() {
69
+ return failure(2, 'USAGE', null);
70
+ }
71
+ function parseCommand(args) {
72
+ const command = args[0];
73
+ if (command !== 'list' && command !== 'open' && command !== 'state' && command !== 'run' && command !== 'receipt') {
74
+ return null;
75
+ }
76
+ const positional = [];
77
+ const options = new Map();
78
+ for (let index = 1; index < args.length; index += 1) {
79
+ const arg = args[index];
80
+ if (!arg.startsWith('--')) {
81
+ positional.push(arg);
82
+ continue;
83
+ }
84
+ const separator = arg.indexOf('=');
85
+ const key = separator >= 0 ? arg.slice(2, separator) : arg.slice(2);
86
+ const inlineValue = separator >= 0 ? arg.slice(separator + 1) : undefined;
87
+ if ((key !== 'input' && key !== 'request-id') || options.has(key))
88
+ return null;
89
+ const value = inlineValue ?? args[index + 1];
90
+ if (value === undefined)
91
+ return null;
92
+ if (inlineValue === undefined)
93
+ index += 1;
94
+ options.set(key, value);
95
+ }
96
+ if ((command === 'list' && positional.length !== 0)
97
+ || (command === 'open' && positional.length !== 1)
98
+ || (command === 'state' && (positional.length !== 1 || !positional[0].startsWith(APP_ID_PREFIX)))
99
+ || (command === 'run' && positional.length !== 2)
100
+ || (command === 'receipt' && positional.length !== 1)) {
101
+ return null;
102
+ }
103
+ if (command !== 'run' && (options.has('input') || options.has('request-id')))
104
+ return null;
105
+ let input = {};
106
+ if (options.has('input')) {
107
+ const raw = options.get('input');
108
+ try {
109
+ const parsed = JSON.parse(raw === '-' ? fs.readFileSync(0, 'utf8') : raw);
110
+ if (!isRecord(parsed))
111
+ return null;
112
+ input = parsed;
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ const requestId = options.get('request-id');
119
+ if (requestId !== undefined && !REQUEST_ID_PATTERN.test(requestId))
120
+ return null;
121
+ return {
122
+ command,
123
+ positional,
124
+ input,
125
+ ...(requestId !== undefined ? { requestId } : {}),
126
+ };
127
+ }
128
+ function getEndpoint(raw) {
129
+ if (!raw)
130
+ return null;
131
+ let endpoint;
132
+ try {
133
+ endpoint = new node_url_1.URL(raw);
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ if (!LOOPBACK_HOSTS.has(endpoint.hostname)
139
+ || (endpoint.protocol !== 'http:' && endpoint.protocol !== 'https:')
140
+ || endpoint.username !== ''
141
+ || endpoint.password !== ''
142
+ || endpoint.search !== ''
143
+ || endpoint.hash !== ''
144
+ || (endpoint.pathname !== '' && endpoint.pathname !== '/')) {
145
+ return null;
146
+ }
147
+ return endpoint;
148
+ }
149
+ function segment(value) {
150
+ return encodeURIComponent(value);
151
+ }
152
+ function basePath(workspaceSlug, threadId) {
153
+ return [
154
+ 'api', 'v1', 'ws', segment(workspaceSlug), 'threads', segment(threadId),
155
+ ].join('/');
156
+ }
157
+ function pathFor(context, ...segments) {
158
+ return `/${context.basePath}/${segments.map(segment).join('/')}`;
159
+ }
160
+ function responseErrorCode(data, fallback) {
161
+ if (!isRecord(data) || !isRecord(data['error']))
162
+ return fallback;
163
+ const code = data['error']['code'];
164
+ return typeof code === 'string' && code.length > 0 ? code : fallback;
165
+ }
166
+ function classifyHttpFailure(response) {
167
+ const { status, data } = response;
168
+ if (status >= 300 && status < 400)
169
+ return failure(9, 'ENDPOINT_REJECTED', status);
170
+ if (status === 401)
171
+ return failure(4, responseErrorCode(data, 'UNAUTHORIZED'), status);
172
+ if (status === 403)
173
+ return failure(5, responseErrorCode(data, 'FORBIDDEN'), status);
174
+ if (status === 404)
175
+ return failure(6, responseErrorCode(data, 'NOT_FOUND'), status);
176
+ if (status === 409)
177
+ return failure(7, responseErrorCode(data, 'CONFLICT'), status);
178
+ return failure(1, responseErrorCode(data, 'ERROR'), status);
179
+ }
180
+ function networkFailure(error) {
181
+ const errorCode = isRecord(error) && typeof error['code'] === 'string'
182
+ ? error['code']
183
+ : '';
184
+ const codexBlocked = process.env['CODEX_SANDBOX_NETWORK_DISABLED'] === '1';
185
+ const errnoBlocked = !codexBlocked && (errorCode === 'EPERM' || errorCode === 'EACCES');
186
+ return codexBlocked || errnoBlocked
187
+ ? failure(11, 'SANDBOX_BLOCKED', null)
188
+ : failure(10, 'SERVER_UNREACHABLE', null);
189
+ }
190
+ function requestJson(context, method, requestPath, body) {
191
+ const requestFunction = context.endpoint.protocol === 'https:' ? https.request : http.request;
192
+ const hostname = context.endpoint.hostname === '[::1]'
193
+ ? '::1'
194
+ : context.endpoint.hostname;
195
+ const port = context.endpoint.port ? Number(context.endpoint.port) : undefined;
196
+ const bodyText = body === undefined ? undefined : JSON.stringify(body);
197
+ const request = requestFunction({
198
+ protocol: context.endpoint.protocol,
199
+ hostname,
200
+ ...(port !== undefined ? { port } : {}),
201
+ method,
202
+ path: requestPath,
203
+ headers: {
204
+ Authorization: `Bearer ${context.ticket}`,
205
+ Accept: 'application/json',
206
+ ...(bodyText !== undefined ? { 'Content-Type': 'application/json' } : {}),
207
+ },
208
+ }, (response) => {
209
+ const status = response.statusCode ?? 0;
210
+ if (status >= 300 && status < 400) {
211
+ response.destroy();
212
+ clearTimeout(timeout);
213
+ resolveResponse({ status, data: undefined, invalidJson: false });
214
+ return;
215
+ }
216
+ const chunks = [];
217
+ response.setEncoding('utf8');
218
+ response.on('data', (chunk) => chunks.push(chunk));
219
+ response.once('error', (error) => failResponse(error));
220
+ response.once('end', () => {
221
+ clearTimeout(timeout);
222
+ const raw = chunks.join('');
223
+ try {
224
+ resolveResponse({ status, data: JSON.parse(raw), invalidJson: false });
225
+ }
226
+ catch {
227
+ resolveResponse({ status, data: undefined, invalidJson: true });
228
+ }
229
+ });
230
+ });
231
+ let socketError;
232
+ let resolveResponse;
233
+ let failResponse;
234
+ const result = new Promise((resolve, reject) => {
235
+ resolveResponse = resolve;
236
+ failResponse = reject;
237
+ });
238
+ const timeout = setTimeout(() => {
239
+ const error = new Error('Request timed out');
240
+ error.code = 'ETIMEDOUT';
241
+ request.destroy(error);
242
+ }, REQUEST_TIMEOUT_MS);
243
+ request.on('socket', (socket) => {
244
+ socket.once('error', (error) => {
245
+ socketError = error;
246
+ });
247
+ });
248
+ request.once('error', (error) => {
249
+ clearTimeout(timeout);
250
+ failResponse(socketError ?? error);
251
+ });
252
+ if (bodyText !== undefined)
253
+ request.write(bodyText);
254
+ request.end();
255
+ return result;
256
+ }
257
+ async function performRequest(context, method, requestPath, body) {
258
+ try {
259
+ const response = await requestJson(context, method, requestPath, body);
260
+ if (response.status < 200 || response.status >= 300) {
261
+ return { ok: false, outcome: classifyHttpFailure(response) };
262
+ }
263
+ if (response.invalidJson || !isRecord(response.data) || response.data['success'] !== true) {
264
+ return {
265
+ ok: false,
266
+ outcome: failure(1, responseErrorCode(response.data, 'ERROR'), response.status),
267
+ };
268
+ }
269
+ const data = response.data['data'];
270
+ if (!isRecord(data)) {
271
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
272
+ }
273
+ return { ok: true, value: data, status: response.status };
274
+ }
275
+ catch (error) {
276
+ return { ok: false, outcome: networkFailure(error) };
277
+ }
278
+ }
279
+ function appIdFrom(value) {
280
+ const direct = value['appId'] ?? value['id'];
281
+ if (typeof direct === 'string' && direct.length > 0)
282
+ return direct;
283
+ const definition = value['definition'];
284
+ if (isRecord(definition) && typeof definition['id'] === 'string')
285
+ return definition['id'];
286
+ return undefined;
287
+ }
288
+ function hashFrom(value) {
289
+ const direct = value['definitionHash'];
290
+ if (typeof direct === 'string' && direct.length > 0)
291
+ return direct;
292
+ const definition = value['definition'];
293
+ if (isRecord(definition) && typeof definition['hash'] === 'string') {
294
+ return definition['hash'];
295
+ }
296
+ return undefined;
297
+ }
298
+ function projectLauncher(value) {
299
+ if (!isRecord(value))
300
+ return undefined;
301
+ const appId = appIdFrom(value);
302
+ const definitionHash = hashFrom(value);
303
+ if (!appId || !definitionHash)
304
+ return undefined;
305
+ const actions = value['agentActions'];
306
+ return {
307
+ appId,
308
+ name: typeof value['name'] === 'string' ? value['name'] : '',
309
+ description: typeof value['description'] === 'string' ? value['description'] : '',
310
+ definitionHash,
311
+ agentActions: Array.isArray(actions) ? actions : [],
312
+ };
313
+ }
314
+ async function loadLaunchers(context) {
315
+ const response = await performRequest(context, 'GET', pathFor(context, 'ui-instances', 'apps'));
316
+ if (!response.ok)
317
+ return response;
318
+ const apps = response.value['apps'];
319
+ if (!Array.isArray(apps)) {
320
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
321
+ }
322
+ const projected = apps.map(projectLauncher);
323
+ if (projected.some((item) => item === undefined)) {
324
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
325
+ }
326
+ return { ok: true, value: projected, status: response.status };
327
+ }
328
+ function findLauncher(apps, appId) {
329
+ return apps.find((app) => app.appId === appId);
330
+ }
331
+ async function openLauncher(context, launcher) {
332
+ const response = await performRequest(context, 'POST', pathFor(context, 'ui-instances', 'open'), {
333
+ appId: launcher.appId,
334
+ expectedDefinitionHash: launcher.definitionHash,
335
+ });
336
+ if (!response.ok)
337
+ return response;
338
+ const instance = isRecord(response.value['instance']) ? response.value['instance'] : response.value;
339
+ if (!isRecord(instance)) {
340
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
341
+ }
342
+ const instanceId = instance['instanceId'] ?? instance['id'];
343
+ const revision = instance['revision'];
344
+ if (typeof instanceId !== 'string' || typeof revision !== 'number') {
345
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
346
+ }
347
+ const ai = isRecord(response.value['ai'])
348
+ ? response.value['ai']
349
+ : isRecord(instance['ai']) ? instance['ai'] : undefined;
350
+ return {
351
+ ok: true,
352
+ status: response.status,
353
+ value: {
354
+ appId: launcher.appId,
355
+ definitionHash: launcher.definitionHash,
356
+ instanceId,
357
+ revision,
358
+ state: ai && Object.prototype.hasOwnProperty.call(ai, 'state') ? ai['state'] : null,
359
+ },
360
+ };
361
+ }
362
+ async function readInstanceState(context, instanceId) {
363
+ const response = await performRequest(context, 'GET', pathFor(context, 'ui-instances', instanceId));
364
+ if (!response.ok)
365
+ return response;
366
+ const value = response.value;
367
+ const responseInstanceId = value['instanceId'];
368
+ const revision = value['revision'];
369
+ if (typeof responseInstanceId !== 'string' || typeof revision !== 'number') {
370
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
371
+ }
372
+ const ai = isRecord(value['ai']) ? value['ai'] : undefined;
373
+ return {
374
+ ok: true,
375
+ status: response.status,
376
+ value: {
377
+ instanceId: responseInstanceId,
378
+ revision,
379
+ state: ai && Object.prototype.hasOwnProperty.call(ai, 'state') ? ai['state'] : null,
380
+ buttons: ai && Object.prototype.hasOwnProperty.call(ai, 'buttons') ? ai['buttons'] : null,
381
+ },
382
+ };
383
+ }
384
+ async function runAction(context, instanceId, actionId, requestId, input) {
385
+ const response = await performRequest(context, 'POST', pathFor(context, 'ui-instances', instanceId, 'actions'), { actionId, requestId, input });
386
+ if (!response.ok)
387
+ return response;
388
+ const receipt = response.value['receipt'];
389
+ if (!isRecord(receipt)) {
390
+ return { ok: false, outcome: failure(1, 'ERROR', response.status) };
391
+ }
392
+ const receiptId = receipt['receiptId'] ?? receipt['id'];
393
+ const status = receipt['status'] ?? (response.status === 202 ? 'requested' : 'settled');
394
+ const resolve = response.value['resolve'];
395
+ const ai = isRecord(resolve) && isRecord(resolve['ai']) ? resolve['ai'] : undefined;
396
+ return {
397
+ ok: true,
398
+ status: response.status,
399
+ value: {
400
+ receiptId: typeof receiptId === 'string' ? receiptId : '',
401
+ requestId: typeof receipt['requestId'] === 'string' ? receipt['requestId'] : requestId,
402
+ instanceId,
403
+ actionId: typeof receipt['actionId'] === 'string' ? receipt['actionId'] : actionId,
404
+ status,
405
+ outcome: Object.prototype.hasOwnProperty.call(receipt, 'outcome') ? receipt['outcome'] : null,
406
+ state: ai && Object.prototype.hasOwnProperty.call(ai, 'state') ? ai['state'] : null,
407
+ },
408
+ };
409
+ }
410
+ function contextFromEnvironment() {
411
+ const ticket = process.env['CREWX_TASK_TICKET'] ?? '';
412
+ const workspaceSlug = process.env['CREWX_WORKSPACE_SLUG'] ?? '';
413
+ const threadId = process.env['CREWX_THREAD_ID'] ?? '';
414
+ if (!ticket.startsWith('crewxtk_') || !workspaceSlug || !threadId) {
415
+ return failure(3, 'NO_TICKET', null);
416
+ }
417
+ const endpoint = getEndpoint(process.env['CREWX_ENDPOINT']);
418
+ if (!endpoint)
419
+ return failure(9, 'ENDPOINT_REJECTED', null);
420
+ return {
421
+ ticket,
422
+ workspaceSlug,
423
+ threadId,
424
+ endpoint,
425
+ basePath: basePath(workspaceSlug, threadId),
426
+ };
427
+ }
428
+ function isAppCommandOutcome(value) {
429
+ return 'exitCode' in value;
430
+ }
431
+ async function executeAppCommand(args) {
432
+ const parsed = parseCommand(args);
433
+ if (!parsed)
434
+ return usageFailure();
435
+ const context = contextFromEnvironment();
436
+ if (isAppCommandOutcome(context))
437
+ return context;
438
+ if (parsed.command === 'list') {
439
+ const result = await loadLaunchers(context);
440
+ if (!result.ok)
441
+ return result.outcome;
442
+ return success({ ok: true, apps: result.value });
443
+ }
444
+ if (parsed.command === 'receipt') {
445
+ const receiptId = parsed.positional[0];
446
+ const response = await performRequest(context, 'GET', pathFor(context, 'ui-action-receipts', receiptId));
447
+ if (!response.ok)
448
+ return response.outcome;
449
+ const receipt = response.value['receipt'];
450
+ if (!isRecord(receipt))
451
+ return failure(1, 'ERROR', response.status);
452
+ return success({ ok: true, receipt });
453
+ }
454
+ if (parsed.command === 'state') {
455
+ const result = await readInstanceState(context, parsed.positional[0]);
456
+ if (!result.ok)
457
+ return result.outcome;
458
+ return success({ ok: true, ...result.value });
459
+ }
460
+ if (parsed.command === 'open') {
461
+ const appId = parsed.positional[0];
462
+ const list = await loadLaunchers(context);
463
+ if (!list.ok)
464
+ return list.outcome;
465
+ const launcher = findLauncher(list.value, appId);
466
+ if (!launcher)
467
+ return failure(6, 'MCP_APP_NOT_FOUND', null);
468
+ const opened = await openLauncher(context, launcher);
469
+ if (!opened.ok)
470
+ return opened.outcome;
471
+ return success({ ok: true, ...opened.value });
472
+ }
473
+ const [target, actionId] = parsed.positional;
474
+ const requestId = parsed.requestId ?? `cxa_${(0, node_crypto_1.randomBytes)(16).toString('base64url')}`;
475
+ let instanceId = target;
476
+ if (!target.startsWith(APP_ID_PREFIX)) {
477
+ const list = await loadLaunchers(context);
478
+ if (!list.ok)
479
+ return list.outcome;
480
+ const launcher = findLauncher(list.value, target);
481
+ if (!launcher)
482
+ return failure(6, 'MCP_APP_NOT_FOUND', null);
483
+ const opened = await openLauncher(context, launcher);
484
+ if (!opened.ok)
485
+ return opened.outcome;
486
+ instanceId = opened.value.instanceId;
487
+ }
488
+ const action = await runAction(context, instanceId, actionId, requestId, parsed.input);
489
+ if (!action.ok)
490
+ return action.outcome;
491
+ return success({ ok: true, ...action.value });
492
+ }
493
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@crewx/app",
3
+ "version": "0.1.0-rc.0",
4
+ "description": "Task-scoped CLI access to CrewX Apps",
5
+ "type": "commonjs",
6
+ "main": "dist/src/engine.js",
7
+ "types": "dist/src/engine.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/engine.d.ts",
11
+ "import": "./dist/src/engine.js",
12
+ "require": "./dist/src/engine.js",
13
+ "default": "./dist/src/engine.js"
14
+ },
15
+ "./cli": {
16
+ "import": "./dist/cli.js",
17
+ "require": "./dist/cli.js",
18
+ "default": "./dist/cli.js"
19
+ }
20
+ },
21
+ "bin": {
22
+ "app": "./dist/cli.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "SKILL.md"
27
+ ],
28
+ "keywords": [
29
+ "crewx",
30
+ "app"
31
+ ],
32
+ "license": "MIT",
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "test": "vitest run --config ../../../vitest.packages.config.ts packages/built-in/app/tests"
36
+ }
37
+ }