pi-cursor-bridge 0.2.4 → 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.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/cursor-bridge.mjs +15 -8
- package/extensions/index.ts +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cursor-bridge",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.5+codex.20260922110122",
|
|
4
4
|
"description": "Evidence-backed Cursor Context Engine search and bounded Cursor Agent execution, including a UI-suppressed minimal runtime.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Vanyangyang"
|
package/README.md
CHANGED
|
@@ -12,6 +12,6 @@ pi install npm:pi-cursor-bridge
|
|
|
12
12
|
|
|
13
13
|
Restart Pi after installation. Initialize the current project by asking Pi to initialize Cursor Bridge for the absolute project path, then use it normally. The package includes the `cce-routing` and `cursor-delegate` Skills and registers the native Cursor Bridge MCP tools directly in Pi.
|
|
14
14
|
|
|
15
|
-
Pi wrapper 0.2.
|
|
15
|
+
Pi wrapper 0.2.5 embeds Cursor Bridge 6.0.5, including Cursor 3.21 model-provider alias matching and `reasoning_effort` verification for Grok 4.7/high. Its result contract returns a compact receipt for background `cursor_do` work: poll `cursor_status(task_id)` normally, retrieve the terminal raw reply with `cursor_status(task_id, detail="result")`, check `isError` before using its content, and use `detail="full"` only when diagnostics are needed. Cursor must be installed and signed in. Current end-to-end compatibility claims remain scoped to the environments documented in the main repository.
|
|
16
16
|
|
|
17
17
|
Full documentation: [English](https://github.com/Vanyangyang/cursor-bridge#readme) · [简体中文](https://github.com/Vanyangyang/cursor-bridge/blob/main/README.zh-CN.md)
|
package/dist/cursor-bridge.mjs
CHANGED
|
@@ -22985,7 +22985,7 @@ function updateCursorSessionRegistry(filePath, mutator, options = {}) {
|
|
|
22985
22985
|
// server.mjs
|
|
22986
22986
|
init_cursor_ensure_core();
|
|
22987
22987
|
init_lifecycle_paths();
|
|
22988
|
-
var PLUGIN_VERSION = "6.0.
|
|
22988
|
+
var PLUGIN_VERSION = "6.0.5";
|
|
22989
22989
|
var CDP_PORT2 = Number(process.env.CURSOR_BRIDGE_CDP_PORT || 9223);
|
|
22990
22990
|
var ORIGIN = `http://localhost:${CDP_PORT2}`;
|
|
22991
22991
|
var QUERY_TIMEOUT = Number(process.env.CURSOR_BRIDGE_TIMEOUT || 3e5);
|
|
@@ -23550,6 +23550,10 @@ var EXPR_SELECTED_AGENT_MODEL_CONFIG = `(function(){
|
|
|
23550
23550
|
function normalizeModelPickerText(value) {
|
|
23551
23551
|
return String(value || "").trim().toLowerCase().replace(/extra[\s_-]*high/g, "xhigh").replace(/[^a-z0-9]+/g, "");
|
|
23552
23552
|
}
|
|
23553
|
+
function normalizeModelPickerModelText(value) {
|
|
23554
|
+
const normalized = normalizeModelPickerText(value);
|
|
23555
|
+
return normalized.startsWith("cursor") && normalized.length > "cursor".length ? normalized.slice("cursor".length) : normalized;
|
|
23556
|
+
}
|
|
23553
23557
|
function isCursorEffortOptionText(text) {
|
|
23554
23558
|
return CURSOR_MODEL_EFFORTS.includes(normalizeModelPickerText(text));
|
|
23555
23559
|
}
|
|
@@ -23559,10 +23563,11 @@ function modelPickerAvailableIsDecisive(kind, available) {
|
|
|
23559
23563
|
return available.some((text) => isCursorEffortOptionText(text));
|
|
23560
23564
|
}
|
|
23561
23565
|
function selectModelPickerRow(rows, requested, kind = "model") {
|
|
23562
|
-
const
|
|
23566
|
+
const normalize = kind === "parameter" ? normalizeModelPickerText : normalizeModelPickerModelText;
|
|
23567
|
+
const wanted = normalize(requested);
|
|
23563
23568
|
if (!wanted) return null;
|
|
23564
23569
|
const candidates = (Array.isArray(rows) ? rows : []).filter((row) => row && row.disabled !== true && (kind === "any" || row.kind === kind)).map((row) => {
|
|
23565
|
-
const normalized =
|
|
23570
|
+
const normalized = normalize(row.text);
|
|
23566
23571
|
let score = normalized === wanted ? 1e3 : 0;
|
|
23567
23572
|
if (kind !== "parameter") {
|
|
23568
23573
|
if (!score && normalized.startsWith(wanted)) score = 800;
|
|
@@ -23690,15 +23695,16 @@ function exprCreateAgentForWorkspace(projectPath) {
|
|
|
23690
23695
|
}
|
|
23691
23696
|
function matchSelectedAgentModelConfig(snapshot, requestedModel, requestedEffort) {
|
|
23692
23697
|
if (!snapshot || snapshot.found !== true) return null;
|
|
23693
|
-
const requested =
|
|
23698
|
+
const requested = normalizeModelPickerModelText(requestedModel);
|
|
23694
23699
|
const entries = Array.isArray(snapshot.selectedModels) && snapshot.selectedModels.length ? snapshot.selectedModels : [{ modelId: snapshot.modelName, parameters: {} }];
|
|
23695
23700
|
const matches = entries.filter((entry) => {
|
|
23696
|
-
const candidate =
|
|
23697
|
-
return candidate &&
|
|
23701
|
+
const candidate = normalizeModelPickerModelText(entry && entry.modelId);
|
|
23702
|
+
return candidate && candidate === requested;
|
|
23698
23703
|
});
|
|
23699
23704
|
if (matches.length !== 1) return null;
|
|
23700
23705
|
const match = matches[0];
|
|
23701
|
-
const
|
|
23706
|
+
const parameters = match.parameters || {};
|
|
23707
|
+
const effort = normalizeCursorModelEffort(parameters.reasoning_effort ?? parameters.effort, "");
|
|
23702
23708
|
if (requestedEffort && effort !== requestedEffort) return null;
|
|
23703
23709
|
return { modelId: match.modelId, effort: effort || null };
|
|
23704
23710
|
}
|
|
@@ -25905,7 +25911,7 @@ var CursorBridge = class {
|
|
|
25905
25911
|
}
|
|
25906
25912
|
stage = "verify_model";
|
|
25907
25913
|
let trigger2 = await this._readModelPickerTrigger(c);
|
|
25908
|
-
if (!trigger2.found || !
|
|
25914
|
+
if (!trigger2.found || !normalizeModelPickerModelText(trigger2.text).includes(normalizeModelPickerModelText(requestedModel))) {
|
|
25909
25915
|
const reopened = await this._openModelPicker(c);
|
|
25910
25916
|
located = await this._findModelPickerModel(c, reopened, requestedModel);
|
|
25911
25917
|
const selected = selectModelPickerRow(located.snapshot.rows.filter((row) => row.selected), requestedModel, "model");
|
|
@@ -28033,6 +28039,7 @@ export {
|
|
|
28033
28039
|
normalizeCursorModelEffort,
|
|
28034
28040
|
normalizeCursorRuntimeMode,
|
|
28035
28041
|
normalizeDelegationMode,
|
|
28042
|
+
normalizeModelPickerModelText,
|
|
28036
28043
|
normalizeModelPickerText,
|
|
28037
28044
|
normalizeRequestContext,
|
|
28038
28045
|
pathsOverlap,
|
package/extensions/index.ts
CHANGED
|
@@ -10,7 +10,7 @@ const hostWorkspaceId = hostCwd.replace(/\\/g, "/").toLowerCase();
|
|
|
10
10
|
export default createStdioMcpExtension({
|
|
11
11
|
label: "Cursor Bridge",
|
|
12
12
|
clientName: "pi-cursor-bridge",
|
|
13
|
-
packageVersion: "0.2.
|
|
13
|
+
packageVersion: "0.2.5",
|
|
14
14
|
serverName: "cursor-bridge",
|
|
15
15
|
serverScript: join(packageRoot, "dist", "cursor-bridge.mjs"),
|
|
16
16
|
cwd: hostCwd,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-cursor-bridge",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Windows only. Use Cursor Context Engine and bounded, explicitly continuous Cursor Agent execution from the Pi coding agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -47,6 +47,6 @@
|
|
|
47
47
|
},
|
|
48
48
|
"piPackage": {
|
|
49
49
|
"embeddedProduct": "Cursor Bridge",
|
|
50
|
-
"embeddedProductVersion": "6.0.
|
|
50
|
+
"embeddedProductVersion": "6.0.5"
|
|
51
51
|
}
|
|
52
52
|
}
|