@wjarka/cezarion 0.13.6 → 0.14.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 (127) hide show
  1. package/README.md +27 -3
  2. package/dist/agent-config/catalog.d.ts +2 -0
  3. package/dist/agent-config/catalog.js +40 -2
  4. package/dist/agent-config/catalog.js.map +1 -1
  5. package/dist/agent-config/models.js +4 -0
  6. package/dist/agent-config/models.js.map +1 -1
  7. package/dist/automations/types.d.ts +4 -0
  8. package/dist/config.d.ts +2 -0
  9. package/dist/config.js +1 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/contract/agent-config.d.ts +2 -0
  12. package/dist/contract/agent-profiles.d.ts +15 -0
  13. package/dist/contract/automations.d.ts +16 -0
  14. package/dist/contract/delegation.d.ts +6 -0
  15. package/dist/contract/health.d.ts +4 -0
  16. package/dist/contract/index.js +20 -11
  17. package/dist/contract/runs.d.ts +25 -3
  18. package/dist/contract/skills.d.ts +3 -0
  19. package/dist/contract/workflows.d.ts +6 -0
  20. package/dist/contract/workspace.d.ts +20 -2
  21. package/dist/core/agent-env.js +1 -0
  22. package/dist/core/agent-env.js.map +1 -1
  23. package/dist/core/agent-profiles.js +3 -0
  24. package/dist/core/agent-profiles.js.map +1 -1
  25. package/dist/core/agent-runner.d.ts +1 -1
  26. package/dist/core/agent-runner.js +1 -1
  27. package/dist/core/agent-runner.js.map +1 -1
  28. package/dist/core/backend-detect.d.ts +1 -1
  29. package/dist/core/backend-detect.js +14 -0
  30. package/dist/core/backend-detect.js.map +1 -1
  31. package/dist/core/cursor-acp-runner.d.ts +15 -0
  32. package/dist/core/cursor-acp-runner.js +466 -0
  33. package/dist/core/cursor-acp-runner.js.map +1 -0
  34. package/dist/core/cursor-config-options.d.ts +18 -0
  35. package/dist/core/cursor-config-options.js +31 -0
  36. package/dist/core/cursor-config-options.js.map +1 -0
  37. package/dist/core/cursor-model-catalog.d.ts +23 -0
  38. package/dist/core/cursor-model-catalog.js +271 -0
  39. package/dist/core/cursor-model-catalog.js.map +1 -0
  40. package/dist/core/cursor-ui-mapper.d.ts +29 -0
  41. package/dist/core/cursor-ui-mapper.js +272 -0
  42. package/dist/core/cursor-ui-mapper.js.map +1 -0
  43. package/dist/core/host-model-catalog.js +2 -0
  44. package/dist/core/host-model-catalog.js.map +1 -1
  45. package/dist/core/model-identity.js +3 -0
  46. package/dist/core/model-identity.js.map +1 -1
  47. package/dist/core/model-presets.js +4 -0
  48. package/dist/core/model-presets.js.map +1 -1
  49. package/dist/core/provider-auth.d.ts +1 -1
  50. package/dist/core/provider-auth.js +30 -1
  51. package/dist/core/provider-auth.js.map +1 -1
  52. package/dist/core/runner-factory.js +3 -0
  53. package/dist/core/runner-factory.js.map +1 -1
  54. package/dist/core/runner-model-catalog.js +1 -0
  55. package/dist/core/runner-model-catalog.js.map +1 -1
  56. package/dist/core/shell-env.d.ts +2 -0
  57. package/dist/core/shell-env.js +8 -0
  58. package/dist/core/shell-env.js.map +1 -1
  59. package/dist/core/ui-events.d.ts +1 -1
  60. package/dist/delegation/execution-identity.d.ts +3 -0
  61. package/dist/delegation/execution-identity.js +1 -1
  62. package/dist/delegation/execution-identity.js.map +1 -1
  63. package/dist/delegation/provision.js +1 -1
  64. package/dist/delegation/provision.js.map +1 -1
  65. package/dist/delegation/routes.d.ts +53 -53
  66. package/dist/delegation/transport.d.ts +7 -7
  67. package/dist/paths.js +3 -0
  68. package/dist/paths.js.map +1 -1
  69. package/dist/runs/store.d.ts +7 -3
  70. package/dist/server/open-in-app.js +1 -0
  71. package/dist/server/open-in-app.js.map +1 -1
  72. package/dist/server/provider-action-gate.js +1 -0
  73. package/dist/server/provider-action-gate.js.map +1 -1
  74. package/dist/server/server.d.ts +1441 -1401
  75. package/dist/server/server.js +23 -9
  76. package/dist/server/server.js.map +1 -1
  77. package/dist/workflows/types.d.ts +3 -0
  78. package/dist/workflows/types.js +1 -0
  79. package/dist/workflows/types.js.map +1 -1
  80. package/dist/workspace/agent-accounts.d.ts +5 -1
  81. package/dist/workspace/agent-accounts.js +1 -0
  82. package/dist/workspace/agent-accounts.js.map +1 -1
  83. package/dist/workspace/agent-profiles.js +1 -1
  84. package/dist/workspace/agent-profiles.js.map +1 -1
  85. package/dist/workspace/config.d.ts +3 -1
  86. package/dist/workspace/config.js +1 -0
  87. package/dist/workspace/config.js.map +1 -1
  88. package/package.json +3 -3
  89. package/scripts/mock-cursor-acp.mjs +77 -0
  90. package/web/dist/assets/{agent-accounts-CdHFiYTN.js → agent-accounts-MT-jtwOU.js} +1 -1
  91. package/web/dist/assets/alert-dialog-KUiPIBmb.js +43 -0
  92. package/web/dist/assets/{collapsible-CI78cX0k.js → collapsible-CkSaP6_n.js} +1 -1
  93. package/web/dist/assets/{commit-list-D3Cy_0hj.js → commit-list-B47VXJez.js} +1 -1
  94. package/web/dist/assets/{compare-variants-BkYiBaI1.js → compare-variants-DNqtPFUv.js} +1 -1
  95. package/web/dist/assets/{diff-DDUpEMjA2.js → diff-C4aSZfrQ2.js} +2 -2
  96. package/web/dist/assets/{diff-controls-C1THeHoP.js → diff-controls-D5b8ocJ0.js} +1 -1
  97. package/web/dist/assets/{diff-stat-Cq4juy0u.js → diff-stat-B7f-F8cC.js} +1 -1
  98. package/web/dist/assets/{diff-view-Coyp_Kst.js → diff-view-BPKHTL85.js} +1 -1
  99. package/web/dist/assets/{dropdown-menu-BP8LYsNU.js → dropdown-menu-xYcDecNM.js} +1 -1
  100. package/web/dist/assets/{git-toolbar-BP8_wDyk.js → git-toolbar-C4zVVSpl.js} +1 -1
  101. package/web/dist/assets/{github-CVranJaK.js → github-D97-DHsF.js} +1 -1
  102. package/web/dist/assets/{image-preview-DXIixdjJ.js → image-preview-BhuwWeyP.js} +1 -1
  103. package/web/dist/assets/index-ujHRHX5o.js +7 -0
  104. package/web/dist/assets/{markdown-uwx4ouIE.js → markdown-CIi0LXvU.js} +1 -1
  105. package/web/dist/assets/pill-DDhByAhe.js +1 -0
  106. package/web/dist/assets/{project-router-D9DfwL9L.js → project-router-BOglfKgF.js} +1 -1
  107. package/web/dist/assets/{prompt-templates-DgR9lv5k.js → prompt-templates-DTSPmJP-.js} +1 -1
  108. package/web/dist/assets/{repo-git-BLjI-1pn.js → repo-git-DvxUSPot.js} +1 -1
  109. package/web/dist/assets/{run-diff-DRPGyUPP.js → run-diff-DEVs-zV1.js} +1 -1
  110. package/web/dist/assets/run-header-Dvb1P3Ge.js +1 -0
  111. package/web/dist/assets/{skills-DRowiHKX.js → skills-DJ06RZbi.js} +1 -1
  112. package/web/dist/assets/{tab-link-C5tpLlqv.js → tab-link-ChqeHA8K.js} +1 -1
  113. package/web/dist/assets/{task-changes-LBnRxH_G.js → task-changes-CIN0MkJE.js} +1 -1
  114. package/web/dist/assets/{task-commits-lpE22fPa.js → task-commits-BRZshVHV.js} +1 -1
  115. package/web/dist/assets/{task-files-Dh6SjTQF.js → task-files-BZTNbpcP.js} +1 -1
  116. package/web/dist/assets/{task-thread-B_74GvMl.js → task-thread-D_N6ELtr.js} +6 -6
  117. package/web/dist/assets/{textarea-D_Ce7vp0.js → textarea-DdKiIORK.js} +1 -1
  118. package/web/dist/assets/{thread-loading-CwnPHwar.js → thread-loading-BRM8kyKz.js} +1 -1
  119. package/web/dist/assets/{token-metrics-BC00XXU8.js → token-metrics-DDvhrHmK.js} +1 -1
  120. package/web/dist/assets/{utils-B8qbBJrk.js → utils-CG8vWc5K.js} +1 -1
  121. package/web/dist/assets/{workflows-B2Iq2bcd.js → workflows-CplF7YNk.js} +1 -1
  122. package/web/dist/assets/{zoomable-image-Idq840Ej.js → zoomable-image-BXioMWqb.js} +1 -1
  123. package/web/dist/index.html +13 -13
  124. package/web/dist/assets/alert-dialog-7OZcjFyp.js +0 -43
  125. package/web/dist/assets/index-CokupxlP.js +0 -7
  126. package/web/dist/assets/pill-jITycc8f.js +0 -1
  127. package/web/dist/assets/run-header-DO-yE5Gj.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"backend-detect.js","sourceRoot":"","sources":["../../src/core/backend-detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend-detect.js","sourceRoot":"","sources":["../../src/core/backend-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AASjC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,WAAW,EAAE;QACb,UAAU,EAAE;QACZ,aAAa,EAAE;QACf,OAAO,EAAE;QACT,WAAW,EAAE;QACb,OAAO,EAAE;QACT,QAAQ,EAAE;KACX,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9E,CAAC;IACD,iFAAiF;IACjF,kFAAkF;IAClF,kFAAkF;IAClF,uEAAuE;IACvE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,QAAQ,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,4EAA4E;QAC5E,yEAAyE;QACzE,IAAI,CAAC,mDAAmD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,KAAK,GAAG,uDAAuD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;aAC7F,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI;YACf,OAAO;YACP,IAAI,EAAE,oDAAoD;SAC3D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,qEAAqE;SAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;YACtB,IAAI,EAAE,mDAAmD;SAC1D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,6FAA6F;SACpG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;YACtB,IAAI,EAAE,iEAAiE;SACxE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,sGAAsG;SAC7G,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,yEAAyE;IACzE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC1E,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;YACtB,IAAI,EAAE,gDAAgD;SACvD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,kDAAkD;QAClD,OAAO;YACL,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,8DAA8D;SACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC;IACnH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,kGAAkG,EAAE,CAAC;IACxJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,8EAA8E;SACrF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AAClD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { AgentEvent, AgentRunResult, AgentRunner, AgentRunSpec, AgentRunSpecSupport, AgentSession, SessionOptions } from './agent-runner.ts';
2
+ export declare const CURSOR_SPEC_SUPPORT: AgentRunSpecSupport;
3
+ export declare class CursorAcpRunner implements AgentRunner {
4
+ private readonly options;
5
+ readonly backend: 'cursor';
6
+ readonly specSupport: Readonly<Record<keyof AgentRunSpec, import("./agent-runner.ts").SpecFieldSupport>>;
7
+ private lastSession?;
8
+ constructor(options?: {
9
+ bin?: string;
10
+ timeoutMs?: number;
11
+ });
12
+ startSession(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void, opts?: SessionOptions): AgentSession;
13
+ run(spec: AgentRunSpec, onEvent?: (event: AgentEvent) => void): Promise<AgentRunResult>;
14
+ interrupt(): Promise<void>;
15
+ }
@@ -0,0 +1,466 @@
1
+ import { parseCursorConfigOptions, cursorEffortSelection } from './cursor-config-options.js';
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { prependSystemPrompt, trackChildExit } from './agent-runner.js';
5
+ import { buildChildEnv } from './agent-env.js';
6
+ import { parseAskMarker, parseAskRequest } from './ask.js';
7
+ import { readNdjson } from './ndjson.js';
8
+ import { AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS, EOF_TERM_GRACE_MS, EOF_KILL_GRACE_MS } from './runner-runtime.js';
9
+ import { createCursorUiState, mapCursorMessage, cursorTurnStarted, cursorTurnCompleted } from './cursor-ui-mapper.js';
10
+ export const CURSOR_SPEC_SUPPORT = {
11
+ systemPrompt: { honored: true, via: 'prependSystemPrompt in opening ACP prompt' },
12
+ userPrompt: { honored: true, via: 'session/prompt text content' },
13
+ images: { honored: true, via: 'ACP image content blocks' },
14
+ cwd: { honored: true, via: 'spawn cwd and session/new or session/load cwd' },
15
+ allowedTools: { honored: false, reason: 'Cursor ACP has no per-session tool allowlist; --force follows the existing auto permission preset' },
16
+ bashAllowlist: { honored: false, reason: 'Cursor ACP has no per-session command-prefix allowlist' },
17
+ restrictNativeDelegation: { honored: true, via: 'initialize clientCapabilities._meta.subagents=false; Cursor 2026.09.15 negotiates native delegation from this capability' },
18
+ additionalDirectories: { honored: true, via: '--add-dir per additional workspace root' },
19
+ env: { honored: true, via: 'buildChildEnv cursor backend with per-run env' },
20
+ model: { honored: true, via: '--model pins initial selection; ACP model config option for advertised IDs, legacy session/set_model fallback' },
21
+ effort: { honored: true, via: 'advertised effort/reasoning/reasoning_effort select value via session/set_config_option; unsupported values fail before inference' },
22
+ timeoutMs: { honored: true, via: 'wall-clock deadline with bounded TERM/KILL teardown' },
23
+ sessionId: { honored: true, via: 'session/load sessionId on resume; session/new mints fresh ID' },
24
+ resume: { honored: true, via: 'session/load instead of session/new' },
25
+ };
26
+ export class CursorAcpRunner {
27
+ options;
28
+ backend = 'cursor';
29
+ specSupport = CURSOR_SPEC_SUPPORT;
30
+ lastSession;
31
+ constructor(options = {}) {
32
+ this.options = options;
33
+ }
34
+ startSession(spec, onEvent, opts = {}) {
35
+ const bin = this.options.bin ?? process.env.CEZ_CURSOR_BIN ?? (process.env.CEZ_DRY_RUN === '1'
36
+ ? fileURLToPath(new URL('../../scripts/mock-cursor-acp.mjs', import.meta.url)) : 'agent');
37
+ return this.lastSession = new CursorSession(bin, spec, this.options.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS, onEvent, opts);
38
+ }
39
+ run(spec, onEvent) {
40
+ return this.startSession(spec, onEvent, { autoEndAfterFirstTurn: true }).result;
41
+ }
42
+ async interrupt() { this.lastSession?.interrupt(); }
43
+ }
44
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {};
45
+ /** One ACP process; prompt responses, never notifications, own turn completion. */
46
+ class CursorSession {
47
+ spec;
48
+ onEvent;
49
+ opts;
50
+ result;
51
+ child;
52
+ hasExited;
53
+ isOpen = true;
54
+ closing = false;
55
+ busy = true;
56
+ ready = false;
57
+ markerAsk = false;
58
+ sessionId;
59
+ configOptions = [];
60
+ pendingAsk;
61
+ queued = [];
62
+ requestId = 0;
63
+ pending = new Map();
64
+ state = createCursorUiState();
65
+ texts = [];
66
+ toolCalls = [];
67
+ turnText = '';
68
+ tokensUsed = 0;
69
+ failure;
70
+ autoEnd;
71
+ deadline;
72
+ termTimer;
73
+ killTimer;
74
+ resolveResult;
75
+ settled = false;
76
+ constructor(bin, spec, timeoutMs, onEvent, opts) {
77
+ this.spec = spec;
78
+ this.onEvent = onEvent;
79
+ this.opts = opts;
80
+ this.result = new Promise(resolve => { this.resolveResult = resolve; });
81
+ this.child = spawn(bin, ['--force', ...(spec.model ? ['--model', spec.model] : []), ...(spec.additionalDirectories ?? []).flatMap(path => ['--add-dir', path]), 'acp'], {
82
+ cwd: spec.cwd, env: buildChildEnv({ backend: 'cursor', extraEnv: spec.env }),
83
+ });
84
+ this.hasExited = trackChildExit(this.child);
85
+ // Always drain stderr, but never echo credentials or unbounded provider logs.
86
+ this.child.stderr.resume();
87
+ this.child.stdin.on('error', () => { if (!this.closing)
88
+ this.fail('Cursor ACP input stream closed'); });
89
+ this.child.once('error', () => { this.fail('Unable to start Cursor CLI; install it or check CEZ_CURSOR_BIN'); this.finish(); });
90
+ this.child.once('close', (code, signal) => {
91
+ if (!this.closing)
92
+ this.fail(`Cursor ACP exited unexpectedly (${signal ?? code ?? 'unknown'})`);
93
+ this.finish();
94
+ });
95
+ const limit = spec.timeoutMs ?? timeoutMs;
96
+ if (limit > 0) {
97
+ this.deadline = setTimeout(() => { this.fail('Cursor ACP timed out and was terminated'); this.interrupt(); }, limit);
98
+ this.deadline.unref();
99
+ }
100
+ void this.read().catch(() => { if (!this.closing)
101
+ this.fail('Cursor ACP output stream failed'); });
102
+ void this.bootstrap().catch(error => { if (!this.closing)
103
+ this.fail(error instanceof Error ? error.message : 'Cursor ACP initialization failed'); });
104
+ }
105
+ get pid() { return this.child.pid; }
106
+ get open() { return this.isOpen; }
107
+ emit(event) { if (!this.settled)
108
+ this.onEvent?.(event); }
109
+ ui(event) { if (!this.settled)
110
+ this.opts.onUiEvent?.(event); }
111
+ mapped(mapping) {
112
+ this.state = mapping.state;
113
+ for (const event of mapping.events) {
114
+ this.ui(event);
115
+ if (event.type === 'item.completed' && event.item.kind === 'message' && event.item.role === 'assistant' && !event.item.parentItemId) {
116
+ this.texts.push(event.item.text);
117
+ this.turnText += event.item.text;
118
+ this.emit({ type: 'text', text: event.item.text });
119
+ }
120
+ else if (event.type === 'item.started' && event.item.kind === 'tool') {
121
+ const { id, name, input } = event.item;
122
+ this.toolCalls.push({ id, name, input });
123
+ this.emit({ type: 'tool-call', id, tool: name, input });
124
+ }
125
+ else if (event.type === 'item.completed' && event.item.kind === 'tool') {
126
+ this.emit({ type: 'tool-result', toolCallId: event.item.id, result: event.item.output ?? event.item.error ?? '', isError: event.item.status === 'failed' });
127
+ }
128
+ else if (event.type === 'usage.updated') {
129
+ this.tokensUsed = event.usage.total;
130
+ this.emit({ type: 'token-usage', tokensUsed: this.tokensUsed });
131
+ }
132
+ else if (event.type === 'image')
133
+ this.emit(event);
134
+ }
135
+ }
136
+ write(message, accepted) {
137
+ if (this.child.stdin.destroyed || this.child.stdin.writableEnded) {
138
+ accepted?.(new Error('Cursor ACP input closed'));
139
+ return;
140
+ }
141
+ this.child.stdin.write(`${JSON.stringify({ jsonrpc: '2.0', ...message })}\n`, accepted);
142
+ }
143
+ request(method, params, accepted) {
144
+ const id = ++this.requestId;
145
+ return new Promise((resolve, reject) => {
146
+ const timer = method === 'session/prompt' ? undefined : setTimeout(() => {
147
+ this.pending.delete(id);
148
+ reject(new Error(`Cursor ACP ${method} timed out`));
149
+ }, 15_000);
150
+ timer?.unref();
151
+ this.pending.set(id, { resolve, reject, timer });
152
+ this.write({ id, method, params }, error => {
153
+ accepted?.(error);
154
+ if (error) {
155
+ if (timer)
156
+ clearTimeout(timer);
157
+ this.pending.delete(id);
158
+ reject(error);
159
+ }
160
+ });
161
+ });
162
+ }
163
+ async bootstrap() {
164
+ const init = await this.request('initialize', { protocolVersion: 1, clientInfo: { name: 'cezar', version: '1' },
165
+ clientCapabilities: { _meta: { subagents: !this.spec.restrictNativeDelegation, parameterizedModelPicker: true } } });
166
+ if (!this.open)
167
+ return;
168
+ if (init.protocolVersion !== 1)
169
+ throw new Error('Cursor ACP protocol version is unsupported');
170
+ if (this.spec.resume && this.spec.sessionId && object(init.agentCapabilities).loadSession !== true)
171
+ throw new Error('Cursor CLI does not support session resume');
172
+ const resume = this.spec.resume && this.spec.sessionId;
173
+ const response = await this.request(resume ? 'session/load' : 'session/new', {
174
+ cwd: this.spec.cwd, mcpServers: [], ...(resume ? { sessionId: this.spec.sessionId } : {}),
175
+ });
176
+ if (!this.open)
177
+ return;
178
+ this.sessionId = resume ? this.spec.sessionId : typeof response.sessionId === 'string' ? response.sessionId : undefined;
179
+ if (!this.sessionId)
180
+ throw new Error('Cursor ACP returned no session ID');
181
+ this.state = { ...this.state, sessionId: this.sessionId };
182
+ const config = parseCursorConfigOptions(response.configOptions);
183
+ if (config)
184
+ this.configOptions = config;
185
+ const modelOption = this.configOptions.find(option => option.id === 'model');
186
+ if (this.spec.model && modelOption?.options.some(option => option.value === this.spec.model)) {
187
+ if (modelOption.currentValue !== this.spec.model)
188
+ await this.setConfigOption('model', this.spec.model);
189
+ }
190
+ else if (this.spec.model && config === undefined) {
191
+ // Older Cursor builds expose only the legacy model control. Opaque IDs are
192
+ // also passed intact at process launch, before the provider session is built.
193
+ await this.request('session/set_model', { sessionId: this.sessionId, modelId: this.spec.model });
194
+ }
195
+ if (this.spec.effort) {
196
+ const selection = cursorEffortSelection(this.configOptions, this.spec.effort);
197
+ await this.setConfigOption(selection.configId, selection.value);
198
+ }
199
+ if (!this.open)
200
+ return;
201
+ this.emit({ type: 'session', sessionId: this.sessionId });
202
+ this.ui({ type: 'session.started', backend: 'cursor', sessionId: this.sessionId, cwd: this.spec.cwd, ...(this.spec.model ? { model: this.spec.model } : {}) });
203
+ this.ready = true;
204
+ this.startTurn([{ type: 'text', text: prependSystemPrompt(this.spec.systemPrompt, this.spec.userPrompt) }, ...(this.spec.images ?? [])]);
205
+ }
206
+ async setConfigOption(configId, value) {
207
+ const response = await this.request('session/set_config_option', { sessionId: this.sessionId, configId, value });
208
+ const options = parseCursorConfigOptions(response.configOptions);
209
+ if (options)
210
+ this.configOptions = options;
211
+ if (!options || !options.some(option => option.id === configId && option.currentValue === value)) {
212
+ throw new Error('Cursor ACP did not confirm the requested session configuration');
213
+ }
214
+ }
215
+ startTurn(content, accepted) {
216
+ if (!this.open || !this.sessionId) {
217
+ accepted?.(new Error('Cursor session closed'));
218
+ return;
219
+ }
220
+ this.busy = true;
221
+ this.markerAsk = false;
222
+ this.turnText = '';
223
+ this.clearAutoEnd();
224
+ this.mapped(cursorTurnStarted(this.state));
225
+ const prompt = content.map(block => block.type === 'text' ? block : { type: 'image', mimeType: block.source.media_type, data: block.source.data });
226
+ void this.request('session/prompt', { sessionId: this.sessionId, prompt }, accepted).then(result => {
227
+ if (!this.open)
228
+ return;
229
+ this.mapped(cursorTurnCompleted(typeof result.stopReason === 'string' ? result.stopReason : 'error', this.state));
230
+ if (this.failure)
231
+ return;
232
+ this.busy = false;
233
+ this.markerAsk = parseAskMarker(this.turnText) !== null;
234
+ if (this.markerAsk)
235
+ this.discardQueuedMessages();
236
+ this.emit({ type: 'turn-end' });
237
+ // onEvent can synchronously reserve a new turn; do not clobber its state.
238
+ if (!this.open || this.busy)
239
+ return;
240
+ const next = !this.markerAsk ? this.queued.shift() : undefined;
241
+ if (next)
242
+ this.startTurn(next);
243
+ else {
244
+ this.opts.onAgentInputReady?.();
245
+ this.scheduleAutoEnd();
246
+ }
247
+ }).catch(error => { if (!this.closing)
248
+ this.fail(`Cursor ACP request failed: ${error instanceof Error ? error.message : 'unknown error'}`); });
249
+ }
250
+ sendMessage(content) {
251
+ if (!this.open)
252
+ return false;
253
+ this.clearAutoEnd();
254
+ this.markerAsk = false;
255
+ if (this.pendingAsk) {
256
+ const pending = this.pendingAsk;
257
+ this.pendingAsk = undefined;
258
+ const text = content.filter(b => b.type === 'text').map(b => b.text).join('\n').trim();
259
+ if (pending.kind === 'plan') {
260
+ const answer = text.replace(/^Plan:\s*/i, '');
261
+ this.write({ id: pending.id, result: { outcome: /^(approve|accept|yes)$/i.test(answer) ? { outcome: 'accepted' } : { outcome: 'rejected', reason: text } } });
262
+ }
263
+ else {
264
+ const answers = pending.questions.map((question, index) => {
265
+ const line = text.split('\n').find(line => line.startsWith(`${question.header}:`));
266
+ const answer = line ? line.slice(question.header.length + 1).trim() : pending.questions.length === 1 ? text : '';
267
+ const options = pending.wire[index]?.options ?? [];
268
+ const selectedOptionIds = options.filter(option => answer === option.label || answer.split(',').map(s => s.trim()).includes(String(option.label))).map(option => option.id);
269
+ return { questionId: question.id, selectedOptionIds };
270
+ });
271
+ if (answers.every(answer => answer.selectedOptionIds.length > 0))
272
+ this.write({ id: pending.id, result: { outcome: { outcome: 'answered', answers } } });
273
+ else {
274
+ // Cursor's question extension has only option IDs. Preserve free text
275
+ // as a following prompt after explicitly skipping that native request.
276
+ this.queued.unshift(content);
277
+ this.write({ id: pending.id, result: { outcome: { outcome: 'skipped', reason: 'User supplied a free-text answer; it follows in the next prompt.' } } });
278
+ }
279
+ }
280
+ }
281
+ else if (!this.ready || this.busy)
282
+ this.queued.push(content);
283
+ else
284
+ this.startTurn(content);
285
+ return true;
286
+ }
287
+ sendAgentMessage(content) {
288
+ if (!this.open || !this.ready || this.busy || this.pendingAsk || this.markerAsk || this.queued.length > 0)
289
+ return false;
290
+ this.busy = true;
291
+ return new Promise((resolve, reject) => this.startTurn(content, error => error ? reject(error) : resolve()));
292
+ }
293
+ discardQueuedMessages() { this.queued = []; }
294
+ clearAutoEnd() { if (this.autoEnd)
295
+ clearTimeout(this.autoEnd); this.autoEnd = undefined; }
296
+ scheduleAutoEnd() {
297
+ if (!this.opts.autoEndAfterFirstTurn || !this.open || this.busy || this.pendingAsk)
298
+ return;
299
+ this.clearAutoEnd();
300
+ this.autoEnd = setTimeout(() => { this.autoEnd = undefined; if (!this.busy && this.opts.shouldAutoEnd?.() !== false)
301
+ this.end(); }, AUTO_END_DELAY_MS);
302
+ this.autoEnd.unref();
303
+ }
304
+ end() {
305
+ if (this.closing)
306
+ return;
307
+ this.closeInput();
308
+ this.child.stdin.end();
309
+ this.termTimer = setTimeout(() => this.terminate(), EOF_TERM_GRACE_MS);
310
+ this.termTimer.unref();
311
+ }
312
+ interrupt() { this.closeInput(); this.terminate(); }
313
+ closeInput() {
314
+ if (this.closing)
315
+ return;
316
+ this.closing = true;
317
+ this.isOpen = false;
318
+ this.clearAutoEnd();
319
+ this.discardQueuedMessages();
320
+ if (this.pendingAsk)
321
+ this.write({ id: this.pendingAsk.id, result: { outcome: { outcome: 'cancelled' } } });
322
+ this.pendingAsk = undefined;
323
+ if (this.sessionId && this.busy)
324
+ this.write({ method: 'session/cancel', params: { sessionId: this.sessionId } });
325
+ }
326
+ terminate() {
327
+ if (this.hasExited())
328
+ return;
329
+ this.child.kill('SIGTERM');
330
+ if (!this.killTimer) {
331
+ this.killTimer = setTimeout(() => { if (!this.hasExited())
332
+ this.child.kill('SIGKILL'); }, EOF_KILL_GRACE_MS);
333
+ this.killTimer.unref();
334
+ }
335
+ }
336
+ fail(message) {
337
+ if (this.failure || this.settled)
338
+ return;
339
+ this.failure = message;
340
+ this.emit({ type: 'error', message });
341
+ this.ui({ type: 'session.error', message, fatal: true });
342
+ this.mapped(cursorTurnCompleted('error', this.state));
343
+ this.interrupt();
344
+ }
345
+ finish() {
346
+ if (this.settled)
347
+ return;
348
+ this.isOpen = false;
349
+ for (const timer of [this.deadline, this.autoEnd, this.termTimer, this.killTimer])
350
+ if (timer)
351
+ clearTimeout(timer);
352
+ for (const request of this.pending.values()) {
353
+ if (request.timer)
354
+ clearTimeout(request.timer);
355
+ request.reject(new Error('Cursor session closed'));
356
+ }
357
+ this.pending.clear();
358
+ if (this.busy && !this.failure)
359
+ this.mapped(cursorTurnCompleted('cancelled', this.state));
360
+ this.ui({ type: 'session.ended', reason: this.failure ? 'error' : 'end_turn' });
361
+ this.emit({ type: 'done' });
362
+ this.settled = true;
363
+ this.resolveResult({ text: this.texts.join('\n').trim(), toolCalls: this.toolCalls, tokensUsed: this.tokensUsed, ...(this.sessionId ? { sessionId: this.sessionId } : {}) });
364
+ }
365
+ async read() {
366
+ for await (const line of readNdjson(this.child.stdout)) {
367
+ let raw;
368
+ try {
369
+ raw = JSON.parse(line);
370
+ }
371
+ catch {
372
+ continue;
373
+ }
374
+ const msg = object(raw);
375
+ const params = object(msg.params);
376
+ const update = object(params.update);
377
+ if (msg.method === 'session/update' && params.sessionId === this.sessionId && update.sessionUpdate === 'config_option_update') {
378
+ const options = parseCursorConfigOptions(update.configOptions);
379
+ if (options)
380
+ this.configOptions = options;
381
+ }
382
+ const id = typeof msg.id === 'number' || typeof msg.id === 'string' ? msg.id : undefined;
383
+ if (typeof msg.method !== 'string') {
384
+ if (id === undefined)
385
+ continue;
386
+ const pending = this.pending.get(id);
387
+ if (!pending)
388
+ continue;
389
+ this.pending.delete(id);
390
+ if (pending.timer)
391
+ clearTimeout(pending.timer);
392
+ if (msg.error)
393
+ pending.reject(new Error(object(msg.error).code === -32000 ? 'Cursor ACP authentication required; run agent login' : 'Cursor ACP rejected the request'));
394
+ else
395
+ pending.resolve(object(msg.result));
396
+ continue;
397
+ }
398
+ if (this.closing)
399
+ continue;
400
+ // session/load replays history before its response; it is already in the
401
+ // persisted transcript and must not be emitted as this turn's new output.
402
+ if (!this.ready) {
403
+ if (id !== undefined)
404
+ this.write({ id, error: { code: -32601, message: 'Session not ready' } });
405
+ continue;
406
+ }
407
+ if (msg.method === 'session/update') {
408
+ const update = object(params.update);
409
+ const content = object(update.content);
410
+ // Cursor 2026.09.15 catches provider errors and emits this exact prefix,
411
+ // then returns end_turn. Narrow to its error envelope, not arbitrary prose.
412
+ if (params.sessionId === this.sessionId && update.sessionUpdate === 'agent_message_chunk'
413
+ && typeof content.text === 'string' && /^\n\nError: /u.test(content.text)) {
414
+ this.fail(/unauthenticated/i.test(content.text) ? 'Cursor provider authentication failed; run agent login' : 'Cursor provider request failed; check the Cursor CLI connection');
415
+ continue;
416
+ }
417
+ }
418
+ if (msg.method === 'cursor/ask_question' && id !== undefined) {
419
+ this.ask(id, params);
420
+ continue;
421
+ }
422
+ if (msg.method === 'cursor/create_plan' && id !== undefined) {
423
+ if (this.pendingAsk || typeof params.plan !== 'string' || !params.plan.trim()) {
424
+ this.write({ id, result: { outcome: { outcome: 'rejected', reason: 'Plan request is invalid or another question is pending' } } });
425
+ continue;
426
+ }
427
+ this.discardQueuedMessages();
428
+ this.texts.push(params.plan);
429
+ this.emit({ type: 'text', text: params.plan });
430
+ this.ui({ type: 'item.completed', item: { kind: 'message', id: `cursor-plan-${id}`, role: 'assistant', text: params.plan } });
431
+ const questions = [{ header: 'Plan', question: String(params.overview ?? params.name ?? 'Approve this plan?').slice(0, 400), options: [{ label: 'Approve' }, { label: 'Reject' }], multiSelect: false }];
432
+ this.pendingAsk = { id, questions, wire: [], kind: 'plan' };
433
+ this.ui({ type: 'ask.requested', requestId: String(id), questions });
434
+ continue;
435
+ }
436
+ if (msg.method === 'session/request_permission' && id !== undefined) {
437
+ const options = Array.isArray(params.options) ? params.options.map(object) : [];
438
+ const allow = options.find(o => o.kind === 'allow_once');
439
+ this.write({ id, result: { outcome: params.sessionId === this.sessionId && allow ? { outcome: 'selected', optionId: allow.optionId } : { outcome: 'cancelled' } } });
440
+ continue;
441
+ }
442
+ this.mapped(mapCursorMessage(msg, this.state));
443
+ if (id !== undefined) {
444
+ if (['cursor/update_todos', 'cursor/task', 'cursor/generate_image'].includes(msg.method))
445
+ this.write({ id, result: {} });
446
+ else
447
+ this.write({ id, error: { code: -32601, message: 'Method not supported' } });
448
+ }
449
+ }
450
+ }
451
+ ask(id, params) {
452
+ const wire = Array.isArray(params.questions) ? params.questions.map(object) : [];
453
+ const parsed = parseAskRequest({ questions: wire.map((q, index) => ({
454
+ id: q.id, header: wire.length > 1 ? `Question ${index + 1}` : String(params.title ?? 'Question').slice(0, 12), question: q.prompt,
455
+ options: Array.isArray(q.options) ? q.options.map(o => ({ label: object(o).label })) : [], multiSelect: q.allowMultiple === true,
456
+ })) });
457
+ if (!parsed || this.pendingAsk || wire.some(q => typeof q.id !== 'string' || !Array.isArray(q.options) || q.options.some(o => typeof object(o).id !== 'string'))) {
458
+ this.write({ id, result: { outcome: { outcome: 'skipped', reason: 'Question cannot be represented in the cockpit' } } });
459
+ return;
460
+ }
461
+ this.discardQueuedMessages();
462
+ this.pendingAsk = { id, questions: parsed.questions, wire, kind: 'question' };
463
+ this.ui({ type: 'ask.requested', requestId: String(id), questions: parsed.questions });
464
+ }
465
+ }
466
+ //# sourceMappingURL=cursor-acp-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-acp-runner.js","sourceRoot":"","sources":["../../src/core/cursor-acp-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ declare const selectSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ type: z.ZodLiteral<"select">;
5
+ currentValue: z.ZodString;
6
+ options: z.ZodArray<z.ZodObject<{
7
+ value: z.ZodString;
8
+ name: z.ZodString;
9
+ }, z.core.$strip>>;
10
+ }, z.core.$strip>;
11
+ export type CursorConfigOption = z.infer<typeof selectSchema>;
12
+ export declare function parseCursorConfigOptions(value: unknown): CursorConfigOption[] | undefined;
13
+ /** Match the model's advertised parameter and exact value; never translate a boolean toggle. */
14
+ export declare function cursorEffortSelection(options: readonly CursorConfigOption[], effort: string): {
15
+ configId: string;
16
+ value: string;
17
+ };
18
+ export {};
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ // Cursor 2026.09.15 represents model parameters (including booleans) as select options.
3
+ // Unknown option types are ignored; malformed select snapshots never replace known state.
4
+ const selectSchema = z.object({
5
+ id: z.string().min(1),
6
+ type: z.literal('select'),
7
+ currentValue: z.string(),
8
+ options: z.array(z.object({ value: z.string(), name: z.string() })),
9
+ });
10
+ export function parseCursorConfigOptions(value) {
11
+ if (!Array.isArray(value))
12
+ return undefined;
13
+ const result = [];
14
+ for (const row of value) {
15
+ if (row && typeof row === 'object' && 'type' in row && row.type !== 'select')
16
+ continue;
17
+ const parsed = selectSchema.safeParse(row);
18
+ if (!parsed.success)
19
+ return undefined;
20
+ result.push(parsed.data);
21
+ }
22
+ return result;
23
+ }
24
+ /** Match the model's advertised parameter and exact value; never translate a boolean toggle. */
25
+ export function cursorEffortSelection(options, effort) {
26
+ const option = options.find(option => ['effort', 'reasoning', 'reasoning_effort'].includes(option.id) && option.options.some(value => value.value === effort));
27
+ if (!option)
28
+ throw new Error(`Cursor's selected model does not advertise effort '${effort}'`);
29
+ return { configId: option.id, value: effort };
30
+ }
31
+ //# sourceMappingURL=cursor-config-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-config-options.js","sourceRoot":"","sources":["../../src/core/cursor-config-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wFAAwF;AACxF,0FAA0F;AAC1F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACvF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,OAAsC,EAAE,MAAc;IAC1F,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;IAC/J,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,MAAM,GAAG,CAAC,CAAC;IAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ import type { ModelOption } from './runner-model-catalog.ts';
3
+ export interface CursorModelDiscoveryOptions {
4
+ cwd: string;
5
+ bin?: string;
6
+ timeoutMs?: number;
7
+ spawn?: (bin: string, args: readonly string[], cwd: string) => ChildProcessWithoutNullStreams;
8
+ }
9
+ export declare function resolveCursorExecutable(bin?: string): string;
10
+ /** Prefer the read-only ACP extension. Older agents still expose the opaque variant listing. */
11
+ export declare function discoverCursorModels(options: CursorModelDiscoveryOptions): Promise<ModelOption[]>;
12
+ /**
13
+ * Ask the installed CLI for its account's models, without starting a model turn or session.
14
+ * https://cursor.com/docs/cli/reference/parameters documents this listing flag.
15
+ * The catalog handles failures as cached/unavailable results; no credential files are read.
16
+ */
17
+ export declare function discoverCursorVariantModels(options: CursorModelDiscoveryOptions): Promise<ModelOption[]>;
18
+ /** Parse the CLI's `Available models` listing, retaining its order and opaque model IDs. */
19
+ export declare function parseCursorModels(stdout: string): ModelOption[];
20
+ export declare function spawnCursor(bin: string, args: readonly string[], cwd: string, spawnImpl?: (bin: string, args: string[], options: {
21
+ cwd: string;
22
+ env: NodeJS.ProcessEnv;
23
+ }) => ChildProcessWithoutNullStreams): ChildProcessWithoutNullStreams;