opencodev2-cursor 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +161 -3
- package/dist/backends/agent-argv.mjs +12 -0
- package/dist/backends/agent-cli.d.ts +10 -0
- package/dist/backends/agent-cli.js +117 -0
- package/dist/backends/agent-cli.js.map +1 -0
- package/dist/backends/auto-models.d.ts +26 -0
- package/dist/backends/auto-models.js +43 -0
- package/dist/backends/auto-models.js.map +1 -0
- package/dist/backends/checkpoint.d.ts +8 -0
- package/dist/backends/checkpoint.js +28 -0
- package/dist/backends/checkpoint.js.map +1 -0
- package/dist/backends/native/auth.d.ts +20 -0
- package/dist/backends/native/auth.js +145 -0
- package/dist/backends/native/auth.js.map +1 -0
- package/dist/backends/native/backend.d.ts +12 -0
- package/dist/backends/native/backend.js +105 -0
- package/dist/backends/native/backend.js.map +1 -0
- package/dist/backends/native/h2-bridge.mjs +55 -0
- package/dist/backends/native/proto.d.ts +31 -0
- package/dist/backends/native/proto.js +130 -0
- package/dist/backends/native/proto.js.map +1 -0
- package/dist/backends/sdk-runner.mjs +317 -0
- package/dist/backends/sdk.d.ts +30 -0
- package/dist/backends/sdk.js +304 -0
- package/dist/backends/sdk.js.map +1 -0
- package/dist/backends/select.d.ts +4 -0
- package/dist/backends/select.js +15 -0
- package/dist/backends/select.js.map +1 -0
- package/dist/backends/spawn.d.ts +15 -0
- package/dist/backends/spawn.js +64 -0
- package/dist/backends/spawn.js.map +1 -0
- package/dist/backends/stream-json.d.ts +7 -0
- package/dist/backends/stream-json.js +106 -0
- package/dist/backends/stream-json.js.map +1 -0
- package/dist/backends/types.d.ts +72 -0
- package/dist/backends/types.js +15 -0
- package/dist/backends/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/auth.d.ts +9 -0
- package/dist/plugin/auth.js +126 -0
- package/dist/plugin/auth.js.map +1 -0
- package/dist/plugin/catalog.d.ts +41 -0
- package/dist/plugin/catalog.js +123 -0
- package/dist/plugin/catalog.js.map +1 -0
- package/dist/proxy/server.d.ts +17 -0
- package/dist/proxy/server.js +265 -0
- package/dist/proxy/server.js.map +1 -0
- package/dist/proxy/title.d.ts +4 -0
- package/dist/proxy/title.js +24 -0
- package/dist/proxy/title.js.map +1 -0
- package/dist/proxy/tools.d.ts +4 -0
- package/dist/proxy/tools.js +26 -0
- package/dist/proxy/tools.js.map +1 -0
- package/dist/proxy/translate.d.ts +42 -0
- package/dist/proxy/translate.js +77 -0
- package/dist/proxy/translate.js.map +1 -0
- package/dist/util/log.d.ts +1 -0
- package/dist/util/log.js +27 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/paths.d.ts +6 -0
- package/dist/util/paths.js +30 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/windows.d.ts +28 -0
- package/dist/util/windows.js +123 -0
- package/dist/util/windows.js.map +1 -0
- package/package.json +53 -6
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export function launchFromPath(bin, lookup) {
|
|
4
|
+
const dirs = lookup.pathEnv.split(lookup.delimiter ?? path.delimiter).filter(Boolean);
|
|
5
|
+
const exts = lookup.pathExt.split(";").filter(Boolean);
|
|
6
|
+
const names = bin.includes(".") ? [bin] : [bin, ...exts.map((ext) => bin + ext.toLowerCase()), ...exts.map((ext) => bin + ext)];
|
|
7
|
+
// Windows paths ignore case. macOS and Linux (no PATHEXT) treat different cases as different files.
|
|
8
|
+
const caseInsensitive = exts.length > 0;
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
for (const dir of dirs) {
|
|
11
|
+
for (const name of names) {
|
|
12
|
+
const candidate = path.join(dir, name);
|
|
13
|
+
const key = caseInsensitive ? candidate.toLowerCase() : candidate;
|
|
14
|
+
if (seen.has(key))
|
|
15
|
+
continue;
|
|
16
|
+
seen.add(key);
|
|
17
|
+
if (!lookup.exists(candidate))
|
|
18
|
+
continue;
|
|
19
|
+
return launchFor(candidate, lookup);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
export function launchFor(file, lookup) {
|
|
25
|
+
const ext = path.extname(file).toLowerCase();
|
|
26
|
+
if (ext === ".ps1") {
|
|
27
|
+
return {
|
|
28
|
+
command: "powershell.exe",
|
|
29
|
+
args: ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", file],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (ext === ".cmd" || ext === ".bat") {
|
|
33
|
+
const ps1 = lookup.sibling(file, path.basename(file, ext) + ".ps1");
|
|
34
|
+
if (ps1) {
|
|
35
|
+
return {
|
|
36
|
+
command: "powershell.exe",
|
|
37
|
+
args: ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", ps1],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { command: file, args: [] };
|
|
42
|
+
}
|
|
43
|
+
/** Looks up launchers on the host. Despite the file name, this works on macOS and Linux too. */
|
|
44
|
+
export function windowsLookup(platform = process.platform) {
|
|
45
|
+
return {
|
|
46
|
+
pathEnv: process.env.PATH ?? "",
|
|
47
|
+
pathExt: platform === "win32" ? (process.env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD;.PS1") : "",
|
|
48
|
+
exists: (file) => {
|
|
49
|
+
try {
|
|
50
|
+
return fs.existsSync(file);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
sibling: (file, name) => {
|
|
57
|
+
const next = path.join(path.dirname(file), name);
|
|
58
|
+
return fs.existsSync(next) ? next : undefined;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function resolveCursorAgentLaunch(explicit) {
|
|
63
|
+
if (explicit)
|
|
64
|
+
return launchFor(explicit, windowsLookup());
|
|
65
|
+
return launchFromPath("cursor-agent", windowsLookup());
|
|
66
|
+
}
|
|
67
|
+
function versionKey(name) {
|
|
68
|
+
const match = /^(\d{4})\.(\d{1,2})\.(\d{1,2})(?:-(\d{2})-(\d{2})-(\d{2}))?/.exec(name);
|
|
69
|
+
if (!match)
|
|
70
|
+
return 0;
|
|
71
|
+
const [, year, month, day, hour = "0", minute = "0", second = "0"] = match;
|
|
72
|
+
return Number(year) * 1e10 + Number(month) * 1e8 + Number(day) * 1e6 + Number(hour) * 1e4 + Number(minute) * 100 + Number(second);
|
|
73
|
+
}
|
|
74
|
+
function realLauncherPath(script, realpath) {
|
|
75
|
+
try {
|
|
76
|
+
return realpath(script);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return script;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* cursor-agent.ps1 forwards every argument through powershell. A long prompt then exceeds the Windows command-line limit,
|
|
84
|
+
* and Linux caps one argument near 128 KB. Spawn the versioned node binary directly instead.
|
|
85
|
+
* On macOS and Linux `cursor-agent` is usually a symlink into `versions/<ver>/`, so resolve it first.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveAgentRuntime(launch, exists = fs.existsSync, platform = process.platform, realpath = fs.realpathSync) {
|
|
88
|
+
const fileFlag = launch.args.indexOf("-File");
|
|
89
|
+
const script = fileFlag >= 0 ? launch.args[fileFlag + 1] : launch.command;
|
|
90
|
+
if (!script)
|
|
91
|
+
return undefined;
|
|
92
|
+
const dir = path.dirname(realLauncherPath(script, realpath));
|
|
93
|
+
const beside = runtimeIn(dir, exists, platform);
|
|
94
|
+
if (beside)
|
|
95
|
+
return beside;
|
|
96
|
+
const versions = path.join(dir, "versions");
|
|
97
|
+
if (!exists(versions))
|
|
98
|
+
return undefined;
|
|
99
|
+
let names = [];
|
|
100
|
+
try {
|
|
101
|
+
names = fs.readdirSync(versions);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
const ranked = names
|
|
107
|
+
.filter((name) => /^\d{4}\.\d{1,2}\.\d{1,2}(?:-\d{2}-\d{2}-\d{2})?-[a-f0-9]+$/.test(name))
|
|
108
|
+
.sort((left, right) => versionKey(right) - versionKey(left));
|
|
109
|
+
for (const name of ranked) {
|
|
110
|
+
const found = runtimeIn(path.join(versions, name), exists, platform);
|
|
111
|
+
if (found)
|
|
112
|
+
return found;
|
|
113
|
+
}
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
function runtimeIn(dir, exists, platform) {
|
|
117
|
+
const node = path.join(dir, platform === "win32" ? "node.exe" : "node");
|
|
118
|
+
const index = path.join(dir, "index.js");
|
|
119
|
+
if (exists(node) && exists(index))
|
|
120
|
+
return { node, index };
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=windows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/util/windows.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "opencodev2-cursor",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "opencodev2-cursor",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "OpenCode V2 plugin that uses a Cursor subscription from OpenChamber and other OpenCode hosts.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/aenemo/opencodev2-cursor.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": "https://github.com/aenemo/opencodev2-cursor/issues",
|
|
11
|
+
"homepage": "https://github.com/aenemo/opencodev2-cursor#readme",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc -p tsconfig.json && node scripts/copy-runtime.mjs",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"opencode",
|
|
32
|
+
"opencode-plugin",
|
|
33
|
+
"openchamber",
|
|
34
|
+
"cursor"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=22.13"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@opencode/plugin": "2.1.4"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@bufbuild/protobuf": "^2.2.5",
|
|
44
|
+
"@cursor/sdk": "1.2.0",
|
|
45
|
+
"zod": "^3.24.2"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@opencode/plugin": "2.1.4",
|
|
49
|
+
"@types/node": "^24.6.0",
|
|
50
|
+
"typescript": "^5.9.3",
|
|
51
|
+
"vitest": "^3.2.4"
|
|
52
|
+
}
|
|
53
|
+
}
|