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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursor-bridge",
3
- "version": "6.0.4+codex.20260921093343",
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.4 embeds Cursor Bridge 6.0.4, including explicit request provenance for CCE and delegated tasks. 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.
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)
@@ -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.4";
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 wanted = normalizeModelPickerText(requested);
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 = normalizeModelPickerText(row.text);
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 = normalizeModelPickerText(requestedModel);
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 = normalizeModelPickerText(entry && entry.modelId);
23697
- return candidate && (candidate === requested || requested === `cursor${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 effort = normalizeCursorModelEffort(match.parameters && match.parameters.effort, "");
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 || !normalizeModelPickerText(trigger2.text).includes(normalizeModelPickerText(requestedModel))) {
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,
@@ -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.4",
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.4",
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.4"
50
+ "embeddedProductVersion": "6.0.5"
51
51
  }
52
52
  }