clawdex-mobile 5.1.3-internal.9 → 5.2.3

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 (48) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +6 -55
  3. package/bin/clawdex.js +2 -2
  4. package/docs/setup-and-operations.md +13 -100
  5. package/docs/troubleshooting.md +2 -71
  6. package/package.json +17 -6
  7. package/scripts/setup-secure-dev.sh +5 -79
  8. package/scripts/setup-wizard.sh +37 -87
  9. package/scripts/start-bridge-secure.js +9 -269
  10. package/services/cursor-app-server/README.md +39 -0
  11. package/services/cursor-app-server/dist/appServer.d.ts +52 -0
  12. package/services/cursor-app-server/dist/appServer.js +780 -0
  13. package/services/cursor-app-server/dist/appServer.js.map +1 -0
  14. package/services/cursor-app-server/dist/cursorWorkspace.d.ts +7 -0
  15. package/services/cursor-app-server/dist/cursorWorkspace.js +126 -0
  16. package/services/cursor-app-server/dist/cursorWorkspace.js.map +1 -0
  17. package/services/cursor-app-server/dist/index.d.ts +4 -0
  18. package/services/cursor-app-server/dist/index.js +4 -0
  19. package/services/cursor-app-server/dist/index.js.map +1 -0
  20. package/services/cursor-app-server/dist/input.d.ts +27 -0
  21. package/services/cursor-app-server/dist/input.js +143 -0
  22. package/services/cursor-app-server/dist/input.js.map +1 -0
  23. package/services/cursor-app-server/dist/jsonRpc.d.ts +15 -0
  24. package/services/cursor-app-server/dist/jsonRpc.js +93 -0
  25. package/services/cursor-app-server/dist/jsonRpc.js.map +1 -0
  26. package/services/cursor-app-server/dist/projection.d.ts +8 -0
  27. package/services/cursor-app-server/dist/projection.js +507 -0
  28. package/services/cursor-app-server/dist/projection.js.map +1 -0
  29. package/services/cursor-app-server/dist/sdkDriver.d.ts +50 -0
  30. package/services/cursor-app-server/dist/sdkDriver.js +166 -0
  31. package/services/cursor-app-server/dist/sdkDriver.js.map +1 -0
  32. package/services/cursor-app-server/dist/stdio.d.ts +2 -0
  33. package/services/cursor-app-server/dist/stdio.js +7 -0
  34. package/services/cursor-app-server/dist/stdio.js.map +1 -0
  35. package/services/cursor-app-server/dist/types.d.ts +218 -0
  36. package/services/cursor-app-server/dist/types.js +2 -0
  37. package/services/cursor-app-server/dist/types.js.map +1 -0
  38. package/services/cursor-app-server/package.json +43 -0
  39. package/services/rust-bridge/Cargo.lock +1 -1
  40. package/services/rust-bridge/Cargo.toml +1 -1
  41. package/services/rust-bridge/src/main.rs +1703 -353
  42. package/vendor/bridge-binaries/darwin-arm64/codex-rust-bridge +0 -0
  43. package/vendor/bridge-binaries/darwin-x64/codex-rust-bridge +0 -0
  44. package/vendor/bridge-binaries/linux-arm64/codex-rust-bridge +0 -0
  45. package/vendor/bridge-binaries/linux-armv7l/codex-rust-bridge +0 -0
  46. package/vendor/bridge-binaries/linux-x64/codex-rust-bridge +0 -0
  47. package/vendor/bridge-binaries/win32-x64/codex-rust-bridge.exe +0 -0
  48. package/scripts/codespaces-bootstrap.js +0 -297
@@ -0,0 +1,166 @@
1
+ import { Agent, Cursor, } from '@cursor/sdk';
2
+ export class CursorSdkDriver {
3
+ async createAgent(options) {
4
+ return wrapAgent(await Agent.create({
5
+ agentId: options.agentId,
6
+ apiKey: options.apiKey,
7
+ name: options.name,
8
+ model: options.model,
9
+ ...buildLocalCursorAgentOptions({ cwd: options.cwd }),
10
+ }));
11
+ }
12
+ async resumeAgent(agentId, options) {
13
+ return wrapAgent(await Agent.resume(agentId, {
14
+ apiKey: options.apiKey,
15
+ model: options.model,
16
+ ...buildLocalCursorAgentOptions({
17
+ cwd: options.cwd,
18
+ ...(options.storeCwd ? { storeCwd: options.storeCwd } : {}),
19
+ }),
20
+ }));
21
+ }
22
+ async listAgents(options) {
23
+ const result = await Agent.list({
24
+ runtime: 'local',
25
+ cwd: options.cwd,
26
+ limit: options.limit,
27
+ cursor: options.cursor,
28
+ });
29
+ return {
30
+ items: result.items.map(toAgentInfo),
31
+ nextCursor: result.nextCursor,
32
+ };
33
+ }
34
+ async getAgent(agentId, options) {
35
+ return toAgentInfo(await Agent.get(agentId, { cwd: options.cwd, apiKey: options.apiKey }));
36
+ }
37
+ async listMessages(agentId, options) {
38
+ return (await Agent.messages.list(agentId, {
39
+ runtime: 'local',
40
+ cwd: options.cwd,
41
+ limit: options.limit,
42
+ offset: options.offset,
43
+ }));
44
+ }
45
+ async listRuns(agentId, options) {
46
+ const result = await Agent.listRuns(agentId, {
47
+ runtime: 'local',
48
+ cwd: options.cwd,
49
+ limit: options.limit,
50
+ cursor: options.cursor,
51
+ });
52
+ return {
53
+ items: result.items.map(toRunInfo),
54
+ nextCursor: result.nextCursor,
55
+ };
56
+ }
57
+ async listModels(options) {
58
+ return (await Cursor.models.list({ apiKey: options.apiKey })).map(toModelListItem);
59
+ }
60
+ }
61
+ export function buildLocalCursorAgentOptions(options) {
62
+ return {
63
+ local: {
64
+ cwd: options.cwd,
65
+ },
66
+ platform: localCursorAgentPlatform(options.storeCwd ?? options.cwd),
67
+ };
68
+ }
69
+ export function localCursorAgentPlatform(cwd) {
70
+ return {
71
+ workspaceRef: cwd,
72
+ };
73
+ }
74
+ function wrapAgent(agent) {
75
+ return {
76
+ agentId: agent.agentId,
77
+ get model() {
78
+ return agent.model;
79
+ },
80
+ send: async (message, options) => wrapRun(await agent.send(message, { model: options?.model })),
81
+ close: () => agent.close(),
82
+ };
83
+ }
84
+ function wrapRun(run) {
85
+ return {
86
+ id: run.id,
87
+ agentId: run.agentId,
88
+ get status() {
89
+ return run.status;
90
+ },
91
+ stream: () => run.stream(),
92
+ wait: () => run.wait(),
93
+ conversation: () => run.conversation(),
94
+ cancel: () => run.cancel(),
95
+ };
96
+ }
97
+ function toAgentInfo(info) {
98
+ return {
99
+ agentId: info.agentId,
100
+ name: info.name,
101
+ summary: info.summary,
102
+ lastModified: info.lastModified,
103
+ createdAt: info.createdAt,
104
+ status: info.status,
105
+ runtime: info.runtime,
106
+ cwd: info.runtime === 'local' ? info.cwd : undefined,
107
+ };
108
+ }
109
+ function toModelListItem(model) {
110
+ const contextWindow = modelDefaultContextWindow(model);
111
+ return {
112
+ id: model.id,
113
+ displayName: model.displayName,
114
+ description: model.description,
115
+ providerId: 'cursor',
116
+ providerName: 'Cursor',
117
+ contextWindow,
118
+ isDefault: model.variants?.some((variant) => variant.isDefault === true) ?? false,
119
+ };
120
+ }
121
+ function modelDefaultContextWindow(model) {
122
+ const defaultVariant = model.variants?.find((variant) => variant.isDefault === true) ??
123
+ (model.variants?.length === 1 ? model.variants[0] : undefined);
124
+ const variantContext = defaultVariant?.params.find((param) => param.id === 'context');
125
+ const parsedVariantContext = parseContextWindowValue(variantContext?.value);
126
+ if (parsedVariantContext) {
127
+ return parsedVariantContext;
128
+ }
129
+ const contextParameter = model.parameters?.find((parameter) => parameter.id === 'context');
130
+ const contextValues = new Set();
131
+ for (const value of contextParameter?.values ?? []) {
132
+ const parsed = parseContextWindowValue(value.value);
133
+ if (parsed) {
134
+ contextValues.add(parsed);
135
+ }
136
+ }
137
+ if (contextValues.size === 1) {
138
+ return [...contextValues][0];
139
+ }
140
+ return undefined;
141
+ }
142
+ function parseContextWindowValue(value) {
143
+ const normalized = value?.trim().toLowerCase();
144
+ if (!normalized) {
145
+ return undefined;
146
+ }
147
+ const match = /^([0-9]+(?:\.[0-9]+)?)([km])?$/.exec(normalized);
148
+ if (!match) {
149
+ return undefined;
150
+ }
151
+ const numeric = Number(match[1]);
152
+ if (!Number.isFinite(numeric) || numeric <= 0) {
153
+ return undefined;
154
+ }
155
+ const multiplier = match[2] === 'm' ? 1_000_000 : match[2] === 'k' ? 1_000 : 1;
156
+ return Math.floor(numeric * multiplier);
157
+ }
158
+ function toRunInfo(run) {
159
+ return {
160
+ id: run.id,
161
+ status: run.status,
162
+ model: run.model,
163
+ createdAt: run.createdAt,
164
+ };
165
+ }
166
+ //# sourceMappingURL=sdkDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkDriver.js","sourceRoot":"","sources":["../src/sdkDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { createCursorAppServerFromEnv } from './appServer.js';
3
+ import { JsonRpcStdioServer } from './jsonRpc.js';
4
+ const appServer = createCursorAppServerFromEnv();
5
+ const server = new JsonRpcStdioServer(appServer, process.stdin, process.stdout);
6
+ server.start();
7
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,SAAS,GAAG,4BAA4B,EAAE,CAAC;AACjD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhF,MAAM,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,218 @@
1
+ export type CursorAppServerRuntime = 'local';
2
+ export type ThreadLifecycleStatus = 'idle' | 'running' | 'error' | 'complete';
3
+ export interface AppServerNotification {
4
+ method: string;
5
+ params: Record<string, unknown>;
6
+ }
7
+ export interface ModelSelection {
8
+ id: string;
9
+ params?: Array<{
10
+ id: string;
11
+ value: string;
12
+ }>;
13
+ }
14
+ export interface CursorModelListItem {
15
+ id: string;
16
+ displayName?: string;
17
+ description?: string;
18
+ providerId?: string;
19
+ providerName?: string;
20
+ contextWindow?: number;
21
+ isDefault?: boolean;
22
+ }
23
+ export interface CursorAgentInfo {
24
+ agentId: string;
25
+ name: string;
26
+ summary: string;
27
+ lastModified: number;
28
+ createdAt?: number;
29
+ status?: 'running' | 'finished' | 'error';
30
+ runtime?: 'local' | 'cloud';
31
+ cwd?: string;
32
+ }
33
+ export interface CursorAgentMessage {
34
+ type: 'user' | 'assistant';
35
+ uuid: string;
36
+ agent_id: string;
37
+ message: unknown;
38
+ }
39
+ export type CursorRunStatus = 'running' | 'finished' | 'error' | 'cancelled';
40
+ export interface CursorRunResult {
41
+ id: string;
42
+ status: Exclude<CursorRunStatus, 'running'>;
43
+ result?: string;
44
+ durationMs?: number;
45
+ model?: ModelSelection;
46
+ git?: CursorRunGitInfo;
47
+ }
48
+ export interface CursorRunInfo {
49
+ id: string;
50
+ status: CursorRunStatus;
51
+ model?: ModelSelection;
52
+ createdAt?: number;
53
+ }
54
+ export interface CursorRunGitBranchInfo {
55
+ repoUrl: string;
56
+ branch?: string;
57
+ prUrl?: string;
58
+ }
59
+ export interface CursorRunGitInfo {
60
+ branches: CursorRunGitBranchInfo[];
61
+ }
62
+ export type CursorStreamMessage = {
63
+ type: 'assistant';
64
+ agent_id?: string;
65
+ run_id?: string;
66
+ message?: unknown;
67
+ } | {
68
+ type: 'thinking';
69
+ agent_id?: string;
70
+ run_id?: string;
71
+ text?: string;
72
+ } | {
73
+ type: 'tool_call';
74
+ agent_id?: string;
75
+ run_id?: string;
76
+ call_id?: string;
77
+ name?: string;
78
+ status?: string;
79
+ args?: unknown;
80
+ result?: unknown;
81
+ truncated?: {
82
+ args?: boolean;
83
+ result?: boolean;
84
+ };
85
+ } | {
86
+ type: 'status';
87
+ agent_id?: string;
88
+ run_id?: string;
89
+ status?: string;
90
+ } | {
91
+ type: 'task';
92
+ agent_id?: string;
93
+ run_id?: string;
94
+ text?: string;
95
+ status?: string;
96
+ };
97
+ export interface CursorRunHandle {
98
+ readonly id: string;
99
+ readonly agentId: string;
100
+ readonly status: CursorRunStatus;
101
+ stream(): AsyncGenerator<CursorStreamMessage, void>;
102
+ wait(): Promise<CursorRunResult>;
103
+ conversation(): Promise<unknown[]>;
104
+ cancel(): Promise<void>;
105
+ }
106
+ export interface CursorAgentHandle {
107
+ readonly agentId: string;
108
+ readonly model?: ModelSelection;
109
+ send(message: string | {
110
+ text: string;
111
+ images?: Array<{
112
+ data: string;
113
+ mimeType: string;
114
+ }>;
115
+ }, options?: {
116
+ model?: ModelSelection;
117
+ }): Promise<CursorRunHandle>;
118
+ close(): void;
119
+ }
120
+ export interface CursorDriver {
121
+ createAgent(options: {
122
+ agentId?: string;
123
+ cwd: string;
124
+ apiKey: string;
125
+ name?: string;
126
+ model?: ModelSelection;
127
+ }): Promise<CursorAgentHandle>;
128
+ resumeAgent(agentId: string, options: {
129
+ cwd: string;
130
+ storeCwd?: string;
131
+ apiKey: string;
132
+ model?: ModelSelection;
133
+ }): Promise<CursorAgentHandle>;
134
+ listAgents(options: {
135
+ cwd: string;
136
+ limit?: number;
137
+ cursor?: string;
138
+ }): Promise<{
139
+ items: CursorAgentInfo[];
140
+ nextCursor?: string;
141
+ }>;
142
+ getAgent(agentId: string, options: {
143
+ cwd: string;
144
+ apiKey?: string;
145
+ }): Promise<CursorAgentInfo>;
146
+ listMessages(agentId: string, options: {
147
+ cwd: string;
148
+ limit?: number;
149
+ offset?: number;
150
+ }): Promise<CursorAgentMessage[]>;
151
+ listRuns(agentId: string, options: {
152
+ cwd: string;
153
+ limit?: number;
154
+ cursor?: string;
155
+ }): Promise<{
156
+ items: CursorRunInfo[];
157
+ nextCursor?: string;
158
+ }>;
159
+ listModels(options: {
160
+ apiKey: string;
161
+ }): Promise<CursorModelListItem[]>;
162
+ }
163
+ export type ThreadContentEntry = {
164
+ type: 'text';
165
+ text: string;
166
+ } | {
167
+ type: 'localImage';
168
+ path: string;
169
+ } | {
170
+ type: 'image';
171
+ path?: string;
172
+ url?: string;
173
+ };
174
+ export interface ThreadItem {
175
+ type: 'userMessage' | 'agentMessage' | 'reasoning' | 'toolCall';
176
+ id: string;
177
+ content?: ThreadContentEntry[];
178
+ text?: string;
179
+ tool?: string;
180
+ status?: string;
181
+ args?: unknown;
182
+ result?: unknown;
183
+ truncated?: {
184
+ args?: boolean;
185
+ result?: boolean;
186
+ };
187
+ }
188
+ export interface ThreadTurn {
189
+ id: string;
190
+ status: 'completed' | 'in_progress' | 'failed' | 'cancelled';
191
+ items: ThreadItem[];
192
+ error?: {
193
+ message: string;
194
+ };
195
+ }
196
+ export interface ThreadRecord {
197
+ id: string;
198
+ name: string | null;
199
+ title: string | null;
200
+ preview: string;
201
+ createdAt: number;
202
+ updatedAt: number;
203
+ status: {
204
+ type: ThreadLifecycleStatus;
205
+ };
206
+ cwd: string;
207
+ source: 'cursorSdk';
208
+ turns?: ThreadTurn[];
209
+ }
210
+ export interface CursorAppServerOptions {
211
+ runtime: CursorAppServerRuntime;
212
+ cwd?: string;
213
+ apiKey?: string;
214
+ defaultModel?: string;
215
+ driver?: CursorDriver;
216
+ cursorProjectsDir?: string;
217
+ now?: () => Date;
218
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@clawdex/cursor-app-server",
3
+ "version": "0.1.0",
4
+ "description": "App-server shaped JSON-RPC adapter for Cursor agents.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "bin": {
10
+ "cursor-app-server": "dist/stdio.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "dev": "tsx src/stdio.ts",
21
+ "start": "node dist/stdio.js",
22
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && chmod +x dist/stdio.js",
23
+ "prepack": "npm run build",
24
+ "typecheck": "tsc -p tsconfig.json --noEmit",
25
+ "lint": "eslint src --ext .ts",
26
+ "test": "vitest run",
27
+ "test:watch": "vitest"
28
+ },
29
+ "dependencies": {
30
+ "@cursor/sdk": "1.0.11",
31
+ "zod": "^3.25.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.19.15",
35
+ "@typescript-eslint/eslint-plugin": "^8.57.1",
36
+ "@typescript-eslint/parser": "^8.57.1",
37
+ "eslint": "^10.0.3",
38
+ "globals": "^16.5.0",
39
+ "tsx": "^4.20.6",
40
+ "typescript": "^5.9.2",
41
+ "vitest": "^4.1.0"
42
+ }
43
+ }
@@ -149,7 +149,7 @@ dependencies = [
149
149
 
150
150
  [[package]]
151
151
  name = "codex-rust-bridge"
152
- version = "5.1.3-internal.9"
152
+ version = "5.2.3"
153
153
  dependencies = [
154
154
  "axum",
155
155
  "base64",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "codex-rust-bridge"
3
- version = "5.1.3-internal.9"
3
+ version = "5.2.3"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]