@tickernelz/paperclip-pro-adapter-cursor-local 2026.925.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.
Files changed (74) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +296 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +102 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/execute.d.ts +15 -0
  15. package/dist/server/execute.d.ts.map +1 -0
  16. package/dist/server/execute.js +640 -0
  17. package/dist/server/execute.js.map +1 -0
  18. package/dist/server/execute.remote.test.d.ts +2 -0
  19. package/dist/server/execute.remote.test.d.ts.map +1 -0
  20. package/dist/server/execute.remote.test.js +284 -0
  21. package/dist/server/execute.remote.test.js.map +1 -0
  22. package/dist/server/execute.test.d.ts +2 -0
  23. package/dist/server/execute.test.d.ts.map +1 -0
  24. package/dist/server/execute.test.js +294 -0
  25. package/dist/server/execute.test.js.map +1 -0
  26. package/dist/server/index.d.ts +7 -0
  27. package/dist/server/index.d.ts.map +1 -0
  28. package/dist/server/index.js +62 -0
  29. package/dist/server/index.js.map +1 -0
  30. package/dist/server/parse.d.ts +13 -0
  31. package/dist/server/parse.d.ts.map +1 -0
  32. package/dist/server/parse.js +139 -0
  33. package/dist/server/parse.js.map +1 -0
  34. package/dist/server/remote-command.d.ts +20 -0
  35. package/dist/server/remote-command.d.ts.map +1 -0
  36. package/dist/server/remote-command.js +172 -0
  37. package/dist/server/remote-command.js.map +1 -0
  38. package/dist/server/remote-command.test.d.ts +2 -0
  39. package/dist/server/remote-command.test.d.ts.map +1 -0
  40. package/dist/server/remote-command.test.js +123 -0
  41. package/dist/server/remote-command.test.js.map +1 -0
  42. package/dist/server/skills.d.ts +8 -0
  43. package/dist/server/skills.d.ts.map +1 -0
  44. package/dist/server/skills.js +69 -0
  45. package/dist/server/skills.js.map +1 -0
  46. package/dist/server/test.d.ts +10 -0
  47. package/dist/server/test.d.ts.map +1 -0
  48. package/dist/server/test.js +334 -0
  49. package/dist/server/test.js.map +1 -0
  50. package/dist/server/test.test.d.ts +2 -0
  51. package/dist/server/test.test.d.ts.map +1 -0
  52. package/dist/server/test.test.js +116 -0
  53. package/dist/server/test.test.js.map +1 -0
  54. package/dist/shared/stream.d.ts +5 -0
  55. package/dist/shared/stream.d.ts.map +1 -0
  56. package/dist/shared/stream.js +13 -0
  57. package/dist/shared/stream.js.map +1 -0
  58. package/dist/shared/trust.d.ts +2 -0
  59. package/dist/shared/trust.d.ts.map +1 -0
  60. package/dist/shared/trust.js +7 -0
  61. package/dist/shared/trust.js.map +1 -0
  62. package/dist/ui/build-config.d.ts +3 -0
  63. package/dist/ui/build-config.d.ts.map +1 -0
  64. package/dist/ui/build-config.js +36 -0
  65. package/dist/ui/build-config.js.map +1 -0
  66. package/dist/ui/index.d.ts +3 -0
  67. package/dist/ui/index.d.ts.map +1 -0
  68. package/dist/ui/index.js +3 -0
  69. package/dist/ui/index.js.map +1 -0
  70. package/dist/ui/parse-stdout.d.ts +3 -0
  71. package/dist/ui/parse-stdout.d.ts.map +1 -0
  72. package/dist/ui/parse-stdout.js +378 -0
  73. package/dist/ui/parse-stdout.js.map +1 -0
  74. package/package.json +58 -0
@@ -0,0 +1,294 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { describe, expect, it, vi } from "vitest";
5
+ import { runChildProcess } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
6
+ import { SANDBOX_INSTALL_COMMAND } from "../index.js";
7
+ import { execute } from "./execute.js";
8
+ const { setPrepareCursorSandboxCommand, } = vi.hoisted(() => {
9
+ const setPrepareCursorSandboxCommand = vi.fn();
10
+ return { setPrepareCursorSandboxCommand };
11
+ });
12
+ vi.mock("@tickernelz/paperclip-pro-adapter-utils/execution-target", async () => {
13
+ const actual = await vi.importActual("@tickernelz/paperclip-pro-adapter-utils/execution-target");
14
+ return {
15
+ ...actual,
16
+ startAdapterExecutionTargetPaperclipBridge: async () => null,
17
+ };
18
+ });
19
+ vi.mock("./remote-command.js", async () => {
20
+ const actual = await vi.importActual("./remote-command.js");
21
+ return {
22
+ ...actual,
23
+ prepareCursorSandboxCommand: async (input) => {
24
+ return setPrepareCursorSandboxCommand(input);
25
+ },
26
+ };
27
+ });
28
+ function buildFakeAgentScript(captureDir) {
29
+ return `#!/bin/sh
30
+ cat > ${JSON.stringify(path.join(captureDir, "prompt.txt"))}
31
+ printf '%s' "$0" > ${JSON.stringify(path.join(captureDir, "command.txt"))}
32
+ printf '%s' "$PATH" > ${JSON.stringify(path.join(captureDir, "path.txt"))}
33
+ printf '%s\\n' '{"type":"system","subtype":"init","session_id":"cursor-session-fresh-1","model":"auto"}'
34
+ printf '%s\\n' '{"type":"assistant","message":{"content":[{"type":"output_text","text":"hello"}]}}'
35
+ printf '%s\\n' '{"type":"result","subtype":"success","session_id":"cursor-session-fresh-1","result":"ok"}'
36
+ `;
37
+ }
38
+ function buildInstallSimulationCommand(commandPath, captureDir) {
39
+ return [
40
+ `mkdir -p ${JSON.stringify(path.dirname(commandPath))}`,
41
+ `mkdir -p ${JSON.stringify(captureDir)}`,
42
+ `cat > ${JSON.stringify(commandPath)} <<'EOF'`,
43
+ buildFakeAgentScript(captureDir),
44
+ "EOF",
45
+ `chmod +x ${JSON.stringify(commandPath)}`,
46
+ ].join("\n");
47
+ }
48
+ function createFreshLeaseSandboxRunner(options) {
49
+ let counter = 0;
50
+ const installCommands = [];
51
+ const systemPath = [
52
+ "/usr/local/bin",
53
+ "/opt/homebrew/bin",
54
+ "/usr/local/sbin",
55
+ "/usr/bin",
56
+ "/bin",
57
+ "/usr/sbin",
58
+ "/sbin",
59
+ ].join(path.delimiter);
60
+ return {
61
+ installCommands,
62
+ execute: async (input) => {
63
+ counter += 1;
64
+ const args = [...(input.args ?? [])];
65
+ if (args[1] === SANDBOX_INSTALL_COMMAND) {
66
+ installCommands.push(args[1]);
67
+ args[1] = buildInstallSimulationCommand(options.installCommandPath, options.captureDir);
68
+ }
69
+ const inheritedPath = input.env?.PATH ?? systemPath;
70
+ const pathWithLocalBin = `${path.join(options.homeDir, ".local", "bin")}${path.delimiter}${inheritedPath}`;
71
+ const env = {
72
+ ...(input.env ?? {}),
73
+ HOME: input.env?.HOME ?? options.homeDir,
74
+ PATH: pathWithLocalBin,
75
+ };
76
+ return await runChildProcess(`cursor-fresh-lease-${counter}`, input.command, args, {
77
+ cwd: input.cwd ?? process.cwd(),
78
+ env,
79
+ stdin: input.stdin,
80
+ timeoutSec: Math.max(1, Math.ceil((input.timeoutMs ?? 30_000) / 1000)),
81
+ graceSec: 5,
82
+ onLog: input.onLog ?? (async () => { }),
83
+ onSpawn: input.onSpawn
84
+ ? async (meta) => input.onSpawn?.({ pid: meta.pid, startedAt: meta.startedAt })
85
+ : undefined,
86
+ });
87
+ },
88
+ };
89
+ }
90
+ describe("cursor execute", () => {
91
+ it("installs the default agent command on a fresh sandbox lease before execution", async () => {
92
+ setPrepareCursorSandboxCommand.mockReset();
93
+ setPrepareCursorSandboxCommand.mockImplementation(async (input) => {
94
+ const actual = await vi.importActual("./remote-command.js");
95
+ return actual.prepareCursorSandboxCommand(input);
96
+ });
97
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-cursor-fresh-lease-"));
98
+ const homeDir = path.join(root, "home");
99
+ const workspace = path.join(root, "workspace");
100
+ const remoteWorkspace = path.join(root, "remote-workspace");
101
+ const captureDir = path.join(root, "capture");
102
+ const agentPath = path.join(homeDir, ".local", "bin", "agent");
103
+ await fs.mkdir(workspace, { recursive: true });
104
+ await fs.mkdir(remoteWorkspace, { recursive: true });
105
+ const runner = createFreshLeaseSandboxRunner({
106
+ homeDir,
107
+ installCommandPath: agentPath,
108
+ captureDir,
109
+ });
110
+ const previousHome = process.env.HOME;
111
+ process.env.HOME = homeDir;
112
+ try {
113
+ const result = await execute({
114
+ runId: "run-fresh-lease-1",
115
+ agent: {
116
+ id: "agent-1",
117
+ companyId: "company-1",
118
+ name: "Cursor Coder",
119
+ adapterType: "cursor",
120
+ adapterConfig: {},
121
+ },
122
+ runtime: {
123
+ sessionId: null,
124
+ sessionParams: null,
125
+ sessionDisplayId: null,
126
+ taskKey: null,
127
+ },
128
+ executionTarget: {
129
+ kind: "remote",
130
+ transport: "sandbox",
131
+ remoteCwd: remoteWorkspace,
132
+ runner,
133
+ timeoutMs: 30_000,
134
+ },
135
+ config: {
136
+ command: "agent",
137
+ cwd: workspace,
138
+ promptTemplate: "Follow the paperclip heartbeat.",
139
+ },
140
+ context: {},
141
+ authToken: "run-jwt-token",
142
+ onLog: async () => { },
143
+ });
144
+ expect(result.exitCode).toBe(0);
145
+ expect(result.errorMessage).toBeNull();
146
+ expect(runner.installCommands).toEqual([SANDBOX_INSTALL_COMMAND]);
147
+ const command = await fs.readFile(path.join(captureDir, "command.txt"), "utf8");
148
+ const runtimePath = await fs.readFile(path.join(captureDir, "path.txt"), "utf8");
149
+ const prompt = await fs.readFile(path.join(captureDir, "prompt.txt"), "utf8");
150
+ expect(command).toBe(agentPath);
151
+ expect(runtimePath.split(path.delimiter)).toContain(path.join(homeDir, ".local", "bin"));
152
+ expect(prompt).toContain("Follow the paperclip heartbeat.");
153
+ }
154
+ finally {
155
+ if (previousHome === undefined)
156
+ delete process.env.HOME;
157
+ else
158
+ process.env.HOME = previousHome;
159
+ await fs.rm(root, { recursive: true, force: true });
160
+ }
161
+ });
162
+ it("reruns sandbox command resolution after managed runtime setup and keeps the original sandbox home", async () => {
163
+ setPrepareCursorSandboxCommand.mockReset();
164
+ const prepareInputs = [];
165
+ let finalPreparedCommand = null;
166
+ const rootDir = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-cursor-fresh-lease-managed-"));
167
+ const workspaceDir = path.join(rootDir, "workspace");
168
+ const remoteWorkspace = path.join(rootDir, "remote-workspace");
169
+ const systemHomeDir = path.join(rootDir, "system-home");
170
+ const managedCaptureDir = path.join(rootDir, "managed-capture");
171
+ await fs.mkdir(managedCaptureDir, { recursive: true });
172
+ await fs.mkdir(workspaceDir, { recursive: true });
173
+ await fs.mkdir(remoteWorkspace, { recursive: true });
174
+ const preferredAgentScript = `#!/bin/sh
175
+ printf '%s\\n' '{"type":"system","subtype":"init","session_id":"cursor-session-fresh-1","model":"auto"}'
176
+ printf '%s\\n' '{"type":"assistant","message":{"content":[{"type":"output_text","text":"hello"}]}}'
177
+ printf '%s\\n' '{"type":"result","subtype":"success","session_id":"cursor-session-fresh-1","result":"ok"}'
178
+ `;
179
+ setPrepareCursorSandboxCommand.mockImplementation(async (input) => {
180
+ const call = prepareInputs.length;
181
+ prepareInputs.push(input);
182
+ if (call === 0) {
183
+ return {
184
+ command: input.command,
185
+ env: input.env,
186
+ remoteSystemHomeDir: systemHomeDir,
187
+ addedPathEntry: null,
188
+ preferredCommandPath: null,
189
+ };
190
+ }
191
+ expect(input.remoteSystemHomeDirHint).toBe(systemHomeDir);
192
+ const preferredCommandPath = path.join(systemHomeDir, ".local", "bin", input.command);
193
+ finalPreparedCommand = preferredCommandPath;
194
+ const runtimeEnv = {
195
+ ...input.env,
196
+ PATH: `${path.join(systemHomeDir, ".local", "bin")}${path.delimiter}${input.env.PATH}`,
197
+ };
198
+ await fs.mkdir(path.dirname(preferredCommandPath), { recursive: true });
199
+ await fs.writeFile(preferredCommandPath, preferredAgentScript);
200
+ await fs.chmod(preferredCommandPath, 0o755);
201
+ await fs.writeFile(path.join(managedCaptureDir, "agent-output.log"), preferredCommandPath);
202
+ return {
203
+ command: preferredCommandPath,
204
+ env: runtimeEnv,
205
+ remoteSystemHomeDir: systemHomeDir,
206
+ addedPathEntry: path.join(systemHomeDir, ".local", "bin"),
207
+ preferredCommandPath,
208
+ };
209
+ });
210
+ const runnerState = {
211
+ commands: [],
212
+ };
213
+ const runner = {
214
+ execute: async (input) => {
215
+ runnerState.commands.push(input.command);
216
+ if (input.command === "sh") {
217
+ return {
218
+ exitCode: 0,
219
+ signal: null,
220
+ timedOut: false,
221
+ stdout: "",
222
+ stderr: "",
223
+ pid: 555,
224
+ startedAt: new Date().toISOString(),
225
+ };
226
+ }
227
+ return runChildProcess(`cursor-fresh-lease-${runnerState.commands.length}`, input.command, input.args ?? [], {
228
+ cwd: remoteWorkspace,
229
+ env: input.env ?? {},
230
+ timeoutSec: 30,
231
+ graceSec: 5,
232
+ onLog: async () => { },
233
+ onSpawn: async () => { },
234
+ });
235
+ },
236
+ };
237
+ const runMeta = [];
238
+ const previousHome = process.env.HOME;
239
+ process.env.HOME = systemHomeDir;
240
+ try {
241
+ const command = "agent";
242
+ const result = await execute({
243
+ runId: "run-fresh-lease-managed",
244
+ agent: {
245
+ id: "agent-1",
246
+ companyId: "company-1",
247
+ name: "Cursor Coder",
248
+ adapterType: "cursor",
249
+ adapterConfig: {},
250
+ },
251
+ runtime: {
252
+ sessionId: null,
253
+ sessionParams: null,
254
+ sessionDisplayId: null,
255
+ taskKey: null,
256
+ },
257
+ executionTarget: {
258
+ kind: "remote",
259
+ transport: "sandbox",
260
+ remoteCwd: remoteWorkspace,
261
+ providerKey: "fixture",
262
+ runner: runner,
263
+ timeoutMs: 30_000,
264
+ },
265
+ config: {
266
+ command,
267
+ cwd: workspaceDir,
268
+ promptTemplate: "Run against runtime-managed command.",
269
+ },
270
+ context: {},
271
+ authToken: "run-jwt-token",
272
+ onLog: async () => { },
273
+ onMeta: async (meta) => {
274
+ runMeta.push(meta);
275
+ },
276
+ });
277
+ expect(result.exitCode).toBe(0);
278
+ expect(prepareInputs).toHaveLength(2);
279
+ expect(finalPreparedCommand).not.toBeNull();
280
+ expect(finalPreparedCommand).toMatch(/\.local\/(bin|sbin)\/agent$/);
281
+ const resolvedCommand = runMeta.find(Boolean)?.command;
282
+ expect(resolvedCommand).toMatch(/\.local\/bin\/agent$/);
283
+ expect(resolvedCommand).toContain(path.join(systemHomeDir, ".local", "bin", command));
284
+ }
285
+ finally {
286
+ if (previousHome === undefined)
287
+ delete process.env.HOME;
288
+ else
289
+ process.env.HOME = previousHome;
290
+ await fs.rm(rootDir, { recursive: true, force: true });
291
+ }
292
+ });
293
+ });
294
+ //# sourceMappingURL=execute.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.test.js","sourceRoot":"","sources":["../../src/server/execute.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { execute, ensureCursorSkillsInjected } from "./execute.js";
2
+ export { listCursorSkills, syncCursorSkills } from "./skills.js";
3
+ export { testEnvironment } from "./test.js";
4
+ export { parseCursorJsonl, isCursorUnknownSessionError } from "./parse.js";
5
+ import type { AdapterSessionCodec } from "@tickernelz/paperclip-pro-adapter-utils";
6
+ export declare const sessionCodec: AdapterSessionCodec;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAMnF,eAAO,MAAM,YAAY,EAAE,mBAsD1B,CAAC"}
@@ -0,0 +1,62 @@
1
+ export { execute, ensureCursorSkillsInjected } from "./execute.js";
2
+ export { listCursorSkills, syncCursorSkills } from "./skills.js";
3
+ export { testEnvironment } from "./test.js";
4
+ export { parseCursorJsonl, isCursorUnknownSessionError } from "./parse.js";
5
+ function readNonEmptyString(value) {
6
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
7
+ }
8
+ export const sessionCodec = {
9
+ deserialize(raw) {
10
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
11
+ return null;
12
+ const record = raw;
13
+ const sessionId = readNonEmptyString(record.sessionId) ??
14
+ readNonEmptyString(record.session_id) ??
15
+ readNonEmptyString(record.sessionID);
16
+ if (!sessionId)
17
+ return null;
18
+ const cwd = readNonEmptyString(record.cwd) ??
19
+ readNonEmptyString(record.workdir) ??
20
+ readNonEmptyString(record.folder);
21
+ const workspaceId = readNonEmptyString(record.workspaceId) ?? readNonEmptyString(record.workspace_id);
22
+ const repoUrl = readNonEmptyString(record.repoUrl) ?? readNonEmptyString(record.repo_url);
23
+ const repoRef = readNonEmptyString(record.repoRef) ?? readNonEmptyString(record.repo_ref);
24
+ return {
25
+ sessionId,
26
+ ...(cwd ? { cwd } : {}),
27
+ ...(workspaceId ? { workspaceId } : {}),
28
+ ...(repoUrl ? { repoUrl } : {}),
29
+ ...(repoRef ? { repoRef } : {}),
30
+ };
31
+ },
32
+ serialize(params) {
33
+ if (!params)
34
+ return null;
35
+ const sessionId = readNonEmptyString(params.sessionId) ??
36
+ readNonEmptyString(params.session_id) ??
37
+ readNonEmptyString(params.sessionID);
38
+ if (!sessionId)
39
+ return null;
40
+ const cwd = readNonEmptyString(params.cwd) ??
41
+ readNonEmptyString(params.workdir) ??
42
+ readNonEmptyString(params.folder);
43
+ const workspaceId = readNonEmptyString(params.workspaceId) ?? readNonEmptyString(params.workspace_id);
44
+ const repoUrl = readNonEmptyString(params.repoUrl) ?? readNonEmptyString(params.repo_url);
45
+ const repoRef = readNonEmptyString(params.repoRef) ?? readNonEmptyString(params.repo_ref);
46
+ return {
47
+ sessionId,
48
+ ...(cwd ? { cwd } : {}),
49
+ ...(workspaceId ? { workspaceId } : {}),
50
+ ...(repoUrl ? { repoUrl } : {}),
51
+ ...(repoRef ? { repoRef } : {}),
52
+ };
53
+ },
54
+ getDisplayId(params) {
55
+ if (!params)
56
+ return null;
57
+ return (readNonEmptyString(params.sessionId) ??
58
+ readNonEmptyString(params.session_id) ??
59
+ readNonEmptyString(params.sessionID));
60
+ },
61
+ };
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function parseCursorJsonl(stdout: string): {
2
+ sessionId: string | null;
3
+ summary: string;
4
+ usage: {
5
+ inputTokens: number;
6
+ cachedInputTokens: number;
7
+ outputTokens: number;
8
+ };
9
+ costUsd: number | null;
10
+ errorMessage: string | null;
11
+ };
12
+ export declare function isCursorUnknownSessionError(stdout: string, stderr: string): boolean;
13
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAmDA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;EAkG9C;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUnF"}
@@ -0,0 +1,139 @@
1
+ import { asString, asNumber, parseObject, parseJson } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
2
+ import { normalizeCursorStreamLine } from "../shared/stream.js";
3
+ function asErrorText(value) {
4
+ if (typeof value === "string")
5
+ return value;
6
+ const rec = parseObject(value);
7
+ const message = asString(rec.message, "") ||
8
+ asString(rec.error, "") ||
9
+ asString(rec.code, "") ||
10
+ asString(rec.detail, "");
11
+ if (message)
12
+ return message;
13
+ try {
14
+ return JSON.stringify(rec);
15
+ }
16
+ catch {
17
+ return "";
18
+ }
19
+ }
20
+ function collectAssistantText(message) {
21
+ if (typeof message === "string") {
22
+ const trimmed = message.trim();
23
+ return trimmed ? [trimmed] : [];
24
+ }
25
+ const rec = parseObject(message);
26
+ const direct = asString(rec.text, "").trim();
27
+ const lines = direct ? [direct] : [];
28
+ const content = Array.isArray(rec.content) ? rec.content : [];
29
+ for (const partRaw of content) {
30
+ const part = parseObject(partRaw);
31
+ const type = asString(part.type, "").trim();
32
+ if (type === "output_text" || type === "text") {
33
+ const text = asString(part.text, "").trim();
34
+ if (text)
35
+ lines.push(text);
36
+ }
37
+ }
38
+ return lines;
39
+ }
40
+ function readSessionId(event) {
41
+ return (asString(event.session_id, "").trim() ||
42
+ asString(event.sessionId, "").trim() ||
43
+ asString(event.sessionID, "").trim() ||
44
+ null);
45
+ }
46
+ export function parseCursorJsonl(stdout) {
47
+ let sessionId = null;
48
+ const messages = [];
49
+ let errorMessage = null;
50
+ let totalCostUsd = 0;
51
+ const usage = {
52
+ inputTokens: 0,
53
+ cachedInputTokens: 0,
54
+ outputTokens: 0,
55
+ };
56
+ for (const rawLine of stdout.split(/\r?\n/)) {
57
+ const line = normalizeCursorStreamLine(rawLine).line;
58
+ if (!line)
59
+ continue;
60
+ const event = parseJson(line);
61
+ if (!event)
62
+ continue;
63
+ const foundSession = readSessionId(event);
64
+ if (foundSession)
65
+ sessionId = foundSession;
66
+ const type = asString(event.type, "").trim();
67
+ if (type === "assistant") {
68
+ messages.push(...collectAssistantText(event.message));
69
+ continue;
70
+ }
71
+ if (type === "result") {
72
+ const usageObj = parseObject(event.usage);
73
+ usage.inputTokens += asNumber(usageObj.input_tokens, asNumber(usageObj.inputTokens, 0));
74
+ usage.cachedInputTokens += asNumber(usageObj.cached_input_tokens, asNumber(usageObj.cachedInputTokens, asNumber(usageObj.cache_read_input_tokens, 0)));
75
+ usage.outputTokens += asNumber(usageObj.output_tokens, asNumber(usageObj.outputTokens, 0));
76
+ totalCostUsd += asNumber(event.total_cost_usd, asNumber(event.cost_usd, asNumber(event.cost, 0)));
77
+ const isError = event.is_error === true || asString(event.subtype, "").toLowerCase() === "error";
78
+ const resultText = asString(event.result, "").trim();
79
+ if (resultText && messages.length === 0) {
80
+ messages.push(resultText);
81
+ }
82
+ if (isError) {
83
+ const resultError = asErrorText(event.error ?? event.message ?? event.result).trim();
84
+ if (resultError)
85
+ errorMessage = resultError;
86
+ }
87
+ continue;
88
+ }
89
+ if (type === "error") {
90
+ const message = asErrorText(event.message ?? event.error ?? event.detail).trim();
91
+ if (message)
92
+ errorMessage = message;
93
+ continue;
94
+ }
95
+ if (type === "system") {
96
+ const subtype = asString(event.subtype, "").trim().toLowerCase();
97
+ if (subtype === "error") {
98
+ const message = asErrorText(event.message ?? event.error ?? event.detail).trim();
99
+ if (message)
100
+ errorMessage = message;
101
+ }
102
+ continue;
103
+ }
104
+ // Compatibility with older stream-json shapes.
105
+ if (type === "text") {
106
+ const part = parseObject(event.part);
107
+ const text = asString(part.text, "").trim();
108
+ if (text)
109
+ messages.push(text);
110
+ continue;
111
+ }
112
+ if (type === "step_finish") {
113
+ const part = parseObject(event.part);
114
+ const tokens = parseObject(part.tokens);
115
+ const cache = parseObject(tokens.cache);
116
+ usage.inputTokens += asNumber(tokens.input, 0);
117
+ usage.cachedInputTokens += asNumber(cache.read, 0);
118
+ usage.outputTokens += asNumber(tokens.output, 0);
119
+ totalCostUsd += asNumber(part.cost, 0);
120
+ continue;
121
+ }
122
+ }
123
+ return {
124
+ sessionId,
125
+ summary: messages.join("\n\n").trim(),
126
+ usage,
127
+ costUsd: totalCostUsd > 0 ? totalCostUsd : null,
128
+ errorMessage,
129
+ };
130
+ }
131
+ export function isCursorUnknownSessionError(stdout, stderr) {
132
+ const haystack = `${stdout}\n${stderr}`
133
+ .split(/\r?\n/)
134
+ .map((line) => line.trim())
135
+ .filter(Boolean)
136
+ .join("\n");
137
+ return /unknown\s+(session|chat)|session\s+.*\s+not\s+found|chat\s+.*\s+not\s+found|resume\s+.*\s+not\s+found|could\s+not\s+resume/i.test(haystack);
138
+ }
139
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type AdapterExecutionTarget } from "@tickernelz/paperclip-pro-adapter-utils/execution-target";
2
+ export declare function isDefaultCursorCommand(command: string): boolean;
3
+ export type PreparedCursorSandboxCommand = {
4
+ command: string;
5
+ env: Record<string, string>;
6
+ remoteSystemHomeDir: string | null;
7
+ addedPathEntry: string | null;
8
+ preferredCommandPath: string | null;
9
+ };
10
+ export declare function prepareCursorSandboxCommand(input: {
11
+ runId: string;
12
+ target: AdapterExecutionTarget | null | undefined;
13
+ command: string;
14
+ cwd: string;
15
+ env: Record<string, string>;
16
+ remoteSystemHomeDirHint?: string | null;
17
+ timeoutSec: number;
18
+ graceSec: number;
19
+ }): Promise<PreparedCursorSandboxCommand>;
20
+ //# sourceMappingURL=remote-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-command.d.ts","sourceRoot":"","sources":["../../src/server/remote-command.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,0DAA0D,CAAC;AA0JlE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA0DxC"}