@runfusion/fusion 0.54.0 → 0.56.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/dist/bin.js +9137 -2087
- package/dist/client/.vite/manifest.json +364 -332
- package/dist/client/assets/AgentDetailView-BPzzEIn1.js +18 -0
- package/dist/client/assets/{AgentDetailView-BzSyldiW.css → AgentDetailView-D7UY2Tup.css} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-D2AQ6swg.js → AgentPermissionPolicyEditor-CqlLF0pf.js} +1 -1
- package/dist/client/assets/{AgentsView-DwEFPKuN.js → AgentsView-C4uCWzdt.js} +3 -3
- package/dist/client/assets/ChatView-BGV9F2K0.js +6 -0
- package/dist/client/assets/{CommandCenter-BABqoSkg.js → CommandCenter-BhIfVVjz.js} +16 -16
- package/dist/client/assets/{DevServerView-DlgOzRdC.js → DevServerView-Bd86MWUa.js} +1 -1
- package/dist/client/assets/DirectoryPicker-BDe9G84f.js +1 -0
- package/dist/client/assets/DocumentsView-BkAHMt19.js +1 -0
- package/dist/client/assets/{EvalsView-CQBNrO5n.js → EvalsView-BxxCVaJ8.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-2SDqP2lc.js → ExperimentalAgentOnboardingModal-7-BD6W1v.js} +1 -1
- package/dist/client/assets/{GoalsView-BgkX-_SB.js → GoalsView-B3KICwNu.js} +1 -1
- package/dist/client/assets/{InsightsView-CJY4eZcO.js → InsightsView-DO8qefU1.js} +2 -2
- package/dist/client/assets/{MemoryView-5Crtfanz.js → MemoryView-urkPdqTn.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-COmzskVa.js → PiExtensionsManager-BwVKjJIo.js} +2 -2
- package/dist/client/assets/PluginManager-C-OuqDLa.js +1 -0
- package/dist/client/assets/{PullRequestView-DAHh0FVM.js → PullRequestView-B4q4X5WV.js} +2 -2
- package/dist/client/assets/{ResearchView-cSUka3sd.js → ResearchView-DlW6z3sm.js} +1 -1
- package/dist/client/assets/{SecretsView-ChFAfFRY.js → SecretsView-C-3eC0KB.js} +1 -1
- package/dist/client/assets/{SessionTerminal-D4R3ScvQ.css → SessionTerminal-BvK8A98c.css} +1 -1
- package/dist/client/assets/SessionTerminal-DVfyVeS2.js +2 -0
- package/dist/client/assets/SettingsModal-BC_2Y56_.css +1 -0
- package/dist/client/assets/{SettingsModal-pAz_hOoN.js → SettingsModal-BzXctrhu.js} +1 -1
- package/dist/client/assets/SettingsModal-qs8w3rov.js +21 -0
- package/dist/client/assets/SetupWizardModal-DDJ8PCkH.js +2 -0
- package/dist/client/assets/{ShadcnColorPicker-CsfgWpf6.js → ShadcnColorPicker-BcD5fZ_P.js} +1 -1
- package/dist/client/assets/{SkillsView-BSUplEYb.js → SkillsView-DojlvxFh.js} +1 -1
- package/dist/client/assets/TodoView-BKZ07WxZ.js +6 -0
- package/dist/client/assets/WorkflowNodeEditor-BJNbi4_V.js +8 -0
- package/dist/client/assets/{agentSkills-qVb0x_G3.js → agentSkills-NbIIJy87.js} +1 -1
- package/dist/client/assets/app-0jcSCRQr.js +13 -0
- package/dist/client/assets/app-BPzPEE6G.js +13 -0
- package/dist/client/assets/app-BSZU5Uns.js +13 -0
- package/dist/client/assets/app-CEtD1B9K.js +13 -0
- package/dist/client/assets/app-CVyRSEUX.js +13 -0
- package/dist/client/assets/app-DoLz_4Dg.js +13 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DEt4eIEQ.js → architectureDiagram-3BPJPVTR-CJu9RVXs.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-CJuX0UM_.js → blockDiagram-GPEHLZMM-crZsLLTq.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-a46Lm113.js → c4Diagram-AAUBKEIU-D5mmJKvW.js} +1 -1
- package/dist/client/assets/channel-Zfk0yRN2.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-iBhwyS0c.js → chunk-2J33WTMH-BZIDltTX.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-C7lS5wER.js → chunk-4BX2VUAB-ND_SzhUa.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CQ6YOncn.js → chunk-55IACEB6-C3n-Nisk.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CveMaMKK.js → chunk-727SXJPM-DfiPA7wv.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DErjGUEk.js → chunk-AQP2D5EJ-CDE0u57Z.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DXUvEFfJ.js → chunk-FMBD7UC4-COR53PTE.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-w5RqSj1J.js → chunk-ND2GUHAM-CbcTdl7C.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CAi0lJ7V.js → chunk-QZHKN3VN-DiB3PReK.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BehQ-wnv.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BehQ-wnv.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-Ck2h4uV5.js → cose-bilkent-S5V4N54A-Dg3YVyLX.js} +1 -1
- package/dist/client/assets/createLucideIcon-CshVyKO4.js +21 -0
- package/dist/client/assets/{dagre-BM42HDAG-BCRTXNj6.js → dagre-BM42HDAG-D2bK3gNb.js} +1 -1
- package/dist/client/assets/dashboard-view-BcbTWSCe.js +1 -0
- package/dist/client/assets/dashboard-view-Bsdq3OM4.css +1 -0
- package/dist/client/assets/dashboard-view-DafOfnxI.js +1 -0
- package/dist/client/assets/{dashboard-view-D9rF_PCq.js → dashboard-view-t2UfQxck.js} +1320 -1335
- package/dist/client/assets/{diagram-2AECGRRQ-DTTk-DYO.js → diagram-2AECGRRQ-BWT8KaEl.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-jDc9kMi2.js → diagram-5GNKFQAL-DWfJlASD.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-CcLmzlGr.js → diagram-KO2AKTUF-DE3hFbLT.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DCW8XKQj.js → diagram-LMA3HP47-CYCFeD4B.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-wbbKquPs.js → diagram-OG6HWLK6-C0C8lEGv.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-Fo933Mo7.js → erDiagram-TEJ5UH35-kSo7RjKA.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Dfum7HZP.js → flowDiagram-I6XJVG4X-DxRf1SVH.js} +1 -1
- package/dist/client/assets/{folder-open-B8vOwFeP.js → folder-open-DO1rnCxq.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BzEBCn01.js → ganttDiagram-6RSMTGT7-CGtxSeWq.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CgovghHs.js → gitGraphDiagram-PVQCEYII-BNZv_DFY.js} +1 -1
- package/dist/client/assets/index-BCf32Sgx.css +1 -0
- package/dist/client/assets/index-D7eX7QJk.js +2511 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BzpU4Wys.js → infoDiagram-5YYISTIA-DailohMo.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-cpp5pozu.js → ishikawaDiagram-YF4QCWOH-Cy3shDZP.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BVjcw6oo.js → journeyDiagram-JHISSGLW-B1rU18Qx.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-4unAhBzo.js → kanban-definition-UN3LZRKU-CRNUDgkO.js} +1 -1
- package/dist/client/assets/loader-circle-CMNcxXXr.js +16 -0
- package/dist/client/assets/{mermaid.core-DzIyUj9t.js → mermaid.core-Cg0po76i.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-Be_yfVir.js → mindmap-definition-RKZ34NQL-CEjwlhOe.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Cfnw2aji.js → pieDiagram-4H26LBE5-70T-php2.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BFlC-_Uo.js → quadrantDiagram-W4KKPZXB-ChcpRG7l.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DpVPzCOx.js → requirementDiagram-4Y6WPE33-9Pzb_Cot.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DM-gKKP0.js → sankeyDiagram-5OEKKPKP-Bx6DkeKq.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DjhZCZhd.js → sequenceDiagram-3UESZ5HK-emWPkPv7.js} +1 -1
- package/dist/client/assets/{shield-alert-DCfkjjYc.js → shield-alert-BdAjnDkU.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-BCA96rdI.js → stateDiagram-AJRCARHV-B_X2-VQy.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DvQssSEq.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-CHW2OQRw.js → timeline-definition-PNZ67QCA-CkyhunuI.js} +1 -1
- package/dist/client/assets/{upload-EJc5PJPz.js → upload-D9-yuO2D.js} +1 -1
- package/dist/client/assets/{users-C-e-99Vp.js → users-B4aebngl.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-shGh4eBY.js → vennDiagram-CIIHVFJN-8OGD6Vb7.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-l0RGrVhn.js → wardley-L42UT6IY-MnRFGNPm.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-C-USmO8A.js → wardleyDiagram-YWT4CUSO-BAEzb08c.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CHX9Umta.js → xychartDiagram-2RQKCTM6-DUxideKC.js} +1 -1
- package/dist/client/assets/zoom-out-DzDzWQt1.js +21 -0
- package/dist/client/index.html +14 -5
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +6720 -1170
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +108 -4
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +70 -25
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +658 -0
- package/dist/plugins/fusion-plugin-linear-import/manifest.json +48 -0
- package/dist/plugins/fusion-plugin-linear-import/package.json +11 -0
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +2 -1
- package/skill/fusion/SKILL.md +2 -2
- package/skill/fusion/references/engine-tools.md +1 -0
- package/skill/fusion/references/extension-tools.md +81 -0
- package/skill/fusion/references/fusion-capabilities.md +7 -0
- package/dist/client/assets/AgentDetailView-BJditQat.js +0 -18
- package/dist/client/assets/ChatView-B4bjPXFN.js +0 -6
- package/dist/client/assets/DirectoryPicker-BwMSmxYS.js +0 -1
- package/dist/client/assets/DocumentsView-BfaRXFg5.js +0 -1
- package/dist/client/assets/PluginManager-CGWXqZMa.js +0 -1
- package/dist/client/assets/SessionTerminal-CtQKDaqI.js +0 -2
- package/dist/client/assets/SettingsModal-BYaotQ2o.js +0 -21
- package/dist/client/assets/SettingsModal-BzZNPNIh.css +0 -1
- package/dist/client/assets/SetupWizardModal-eHZHi8VP.js +0 -2
- package/dist/client/assets/TodoView-DhBseLvM.js +0 -6
- package/dist/client/assets/WorkflowNodeEditor-Bi12CNif.js +0 -8
- package/dist/client/assets/app-5S4z84u5.js +0 -13
- package/dist/client/assets/app-B1VYocx2.js +0 -13
- package/dist/client/assets/app-BhtYYxin.js +0 -13
- package/dist/client/assets/app-Cts0__Vx.js +0 -13
- package/dist/client/assets/app-DczBmsP4.js +0 -13
- package/dist/client/assets/app-_GFUqcMK.js +0 -13
- package/dist/client/assets/channel-BGI9APMr.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-g6hCcufy.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-g6hCcufy.js +0 -1
- package/dist/client/assets/dashboard-view-BfLJ60Kd.js +0 -1
- package/dist/client/assets/index-BjELA24x.js +0 -1336
- package/dist/client/assets/index-DwGW7OJh.css +0 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DHds08RS.js +0 -1
- package/dist/client/assets/zoom-out-NWbVkreR.js +0 -41
|
@@ -289,6 +289,21 @@ interface InReviewStallSignal {
|
|
|
289
289
|
observedAt: string;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
+
declare const PLANNER_OVERSEER_STATES: readonly ["idle", "watching", "steering", "recovering", "awaiting-confirmation"];
|
|
293
|
+
type PlannerOverseerState = (typeof PLANNER_OVERSEER_STATES)[number];
|
|
294
|
+
interface PlannerOverseerRuntimeSnapshot {
|
|
295
|
+
state: PlannerOverseerState;
|
|
296
|
+
oversightLevel: PlannerOversightLevel;
|
|
297
|
+
watchedStage?: string;
|
|
298
|
+
signal?: string;
|
|
299
|
+
attemptCount?: number;
|
|
300
|
+
attemptLimit?: number;
|
|
301
|
+
pendingConfirmation?: boolean;
|
|
302
|
+
observedAt?: number;
|
|
303
|
+
reason?: string;
|
|
304
|
+
lastAction?: string;
|
|
305
|
+
}
|
|
306
|
+
|
|
292
307
|
interface ModelPricing {
|
|
293
308
|
inputPer1M: number;
|
|
294
309
|
outputPer1M: number;
|
|
@@ -404,7 +419,7 @@ type AuthMaterialSnapshot = SharedSnapshotEnvelope<{
|
|
|
404
419
|
providerAuth?: Record<string, ProviderAuthEntry>;
|
|
405
420
|
}>;
|
|
406
421
|
|
|
407
|
-
type WorkflowIrNodeKind = "start" | "prompt" | "script" | "gate" | "end" | "hold" | "split" | "join" | "foreach" | "loop" | "optional-group" | "step-review" | "parse-steps" | "code" | "notify" | "merge-gate" | "merge-attempt" | "manual-merge-hold" | "retry-backoff" | "recovery-router" | "branch-group-member-integration" | "branch-group-promotion" | "pr-create" | "pr-respond" | "pr-merge";
|
|
422
|
+
type WorkflowIrNodeKind = "start" | "prompt" | "script" | "gate" | "end" | "hold" | "split" | "join" | "foreach" | "loop" | "optional-group" | "step-review" | "parse-steps" | "code" | "notify" | "merge-gate" | "merge-attempt" | "manual-merge-hold" | "retry-backoff" | "recovery-router" | "branch-group-member-integration" | "branch-group-promotion" | "pr-create" | "pr-respond" | "pr-merge" | "ask-user" | "exit-gate";
|
|
408
423
|
interface WorkflowIrNode {
|
|
409
424
|
id: string;
|
|
410
425
|
kind: WorkflowIrNodeKind;
|
|
@@ -2621,6 +2636,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2621
2636
|
private pollingInProgress;
|
|
2622
2637
|
private lastKnownModified;
|
|
2623
2638
|
private lastPollTime;
|
|
2639
|
+
private lastArtifactRowId;
|
|
2624
2640
|
private donePauseBackfillDone;
|
|
2625
2641
|
private startupSlimListMemo;
|
|
2626
2642
|
private static readonly STARTUP_SLIM_LIST_MEMO_TTL_MS;
|
|
@@ -2858,6 +2874,14 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2858
2874
|
tasks: Task[];
|
|
2859
2875
|
hasMore: boolean;
|
|
2860
2876
|
}>;
|
|
2877
|
+
listTasksForGitlabTrackingReconcile(options?: {
|
|
2878
|
+
offset?: number;
|
|
2879
|
+
limit?: number;
|
|
2880
|
+
}): Promise<{
|
|
2881
|
+
tasks: Task[];
|
|
2882
|
+
hasMore: boolean;
|
|
2883
|
+
}>;
|
|
2884
|
+
private listTasksForProviderTrackingReconcile;
|
|
2861
2885
|
listStrandedRefinements(options?: {
|
|
2862
2886
|
freshnessThresholdMs?: number;
|
|
2863
2887
|
}): Promise<Array<{
|
|
@@ -2884,6 +2908,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2884
2908
|
windowMs?: number;
|
|
2885
2909
|
includeArchived?: boolean;
|
|
2886
2910
|
}): Promise<Task[]>;
|
|
2911
|
+
findOpenRevertTaskForSource(sourceTaskId: string): Promise<Task | null>;
|
|
2887
2912
|
private clearNearDuplicateReferencesTo;
|
|
2888
2913
|
private clearNearDuplicateReferencesToFailSoft;
|
|
2889
2914
|
getTasksByAssignedAgent(agentId: string, options?: {
|
|
@@ -2970,6 +2995,9 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2970
2995
|
size?: "S" | "M" | "L";
|
|
2971
2996
|
reviewLevel?: number;
|
|
2972
2997
|
executionMode?: ExecutionMode | null;
|
|
2998
|
+
plannerOversightLevel?: PlannerOversightLevel | null;
|
|
2999
|
+
awaitingApprovalReason?: Task["awaitingApprovalReason"] | null;
|
|
3000
|
+
approvedPlanFingerprint?: string | null;
|
|
2973
3001
|
mergeRetries?: number;
|
|
2974
3002
|
workflowStepRetries?: number;
|
|
2975
3003
|
stuckKillCount?: number | null;
|
|
@@ -3013,6 +3041,9 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3013
3041
|
sourceIssue?: TaskSourceIssue | null;
|
|
3014
3042
|
sourceMetadataPatch?: Record<string, unknown> | null;
|
|
3015
3043
|
githubTracking?: TaskGithubTracking | null;
|
|
3044
|
+
gitlabTracking?: (Omit<TaskGitLabTracking, "item"> & {
|
|
3045
|
+
item?: TaskGitLabTrackedItem | null;
|
|
3046
|
+
}) | null;
|
|
3016
3047
|
tokenUsage?: TaskTokenUsage | null;
|
|
3017
3048
|
modifiedFiles?: string[] | null;
|
|
3018
3049
|
workflowTransitionNotification?: Task["workflowTransitionNotification"] | null;
|
|
@@ -3185,7 +3216,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3185
3216
|
mimeType: string;
|
|
3186
3217
|
}>;
|
|
3187
3218
|
deleteAttachment(id: string, filename: string): Promise<Task>;
|
|
3188
|
-
appendAgentLog(taskId: string, text: string, type: AgentLogEntry["type"], detail?: string, agent?: AgentLogEntry["agent"]): Promise<void>;
|
|
3219
|
+
appendAgentLog(taskId: string, text: string, type: AgentLogEntry["type"], detail?: string, agent?: AgentLogEntry["agent"], timing?: Pick<AgentLogEntry, "durationMs" | "timeToFirstTokenMs">): Promise<void>;
|
|
3189
3220
|
emitUsageEvent(event: UsageEventInput): boolean;
|
|
3190
3221
|
private flushAgentLogBuffer;
|
|
3191
3222
|
appendAgentLogBatch(entries: Array<{
|
|
@@ -3194,6 +3225,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3194
3225
|
type: AgentLogEntry["type"];
|
|
3195
3226
|
detail?: string;
|
|
3196
3227
|
agent?: AgentLogEntry["agent"];
|
|
3228
|
+
durationMs?: number;
|
|
3229
|
+
timeToFirstTokenMs?: number;
|
|
3197
3230
|
}>): Promise<void>;
|
|
3198
3231
|
addTaskComment(id: string, text: string, author: string): Promise<Task>;
|
|
3199
3232
|
addSteeringComment(id: string, text: string, author?: "user" | "agent", runContext?: RunMutationContext): Promise<Task>;
|
|
@@ -3249,6 +3282,9 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3249
3282
|
updateGithubTracking(id: string, tracking: TaskGithubTracking | null): Promise<Task>;
|
|
3250
3283
|
linkGithubIssue(id: string, issue: TaskGithubTrackedIssue): Promise<Task>;
|
|
3251
3284
|
unlinkGithubIssue(id: string): Promise<Task>;
|
|
3285
|
+
updateGitLabTracking(id: string, tracking: TaskGitLabTracking | null): Promise<Task>;
|
|
3286
|
+
linkGitLabItem(id: string, item: TaskGitLabTrackedItem): Promise<Task>;
|
|
3287
|
+
unlinkGitLabItem(id: string): Promise<Task>;
|
|
3252
3288
|
getAgentLogs(taskId: string, options?: {
|
|
3253
3289
|
limit?: number;
|
|
3254
3290
|
offset?: number;
|
|
@@ -3964,6 +4000,7 @@ declare class Database {
|
|
|
3964
4000
|
private static readonly sharedIntegrityChecks;
|
|
3965
4001
|
private db;
|
|
3966
4002
|
private readonly dbPath;
|
|
4003
|
+
private readonly fusionDir;
|
|
3967
4004
|
private readonly inMemory;
|
|
3968
4005
|
get path(): string;
|
|
3969
4006
|
corruptionDetected: boolean;
|
|
@@ -4058,6 +4095,8 @@ declare class Database {
|
|
|
4058
4095
|
private setMetaValue;
|
|
4059
4096
|
private static readonly PROJECT_IDENTITY_META_KEY;
|
|
4060
4097
|
getProjectIdentity(): ProjectIdentity | undefined;
|
|
4098
|
+
private parseWorkflowSettingsJson;
|
|
4099
|
+
private reconcileWorkflowSettingsRootDirProjectId;
|
|
4061
4100
|
setProjectIdentity(identity: ProjectIdentity, options?: {
|
|
4062
4101
|
force?: boolean;
|
|
4063
4102
|
}): void;
|
|
@@ -4342,6 +4381,8 @@ interface HandoffToReviewOptions {
|
|
|
4342
4381
|
}
|
|
4343
4382
|
declare const EXECUTION_MODES: readonly ["standard", "fast"];
|
|
4344
4383
|
type ExecutionMode = (typeof EXECUTION_MODES)[number];
|
|
4384
|
+
declare const PLANNER_OVERSIGHT_LEVELS: readonly ["off", "observe", "steer", "autonomous"];
|
|
4385
|
+
type PlannerOversightLevel = (typeof PLANNER_OVERSIGHT_LEVELS)[number];
|
|
4345
4386
|
declare const COMPLETION_DOCUMENTATION_MODES: readonly ["off", "changeset", "changelog"];
|
|
4346
4387
|
type CompletionDocumentationMode = (typeof COMPLETION_DOCUMENTATION_MODES)[number];
|
|
4347
4388
|
declare const THEME_MODES: readonly ["dark", "light", "system"];
|
|
@@ -4525,6 +4566,30 @@ interface TaskGithubTrackedIssue {
|
|
|
4525
4566
|
lastSyncedAt?: string;
|
|
4526
4567
|
}
|
|
4527
4568
|
type GithubIssueAction = "close" | "delete" | "leave" | "auto";
|
|
4569
|
+
type GitLabTrackedItemKind = "project_issue" | "group_issue" | "merge_request";
|
|
4570
|
+
interface TaskGitLabTrackedItem {
|
|
4571
|
+
kind: GitLabTrackedItemKind;
|
|
4572
|
+
url: string;
|
|
4573
|
+
instanceUrl: string;
|
|
4574
|
+
host: string;
|
|
4575
|
+
iid: number;
|
|
4576
|
+
id?: number;
|
|
4577
|
+
projectId?: number;
|
|
4578
|
+
projectPath?: string;
|
|
4579
|
+
groupId?: number | string;
|
|
4580
|
+
groupPath?: string;
|
|
4581
|
+
title?: string;
|
|
4582
|
+
state?: string;
|
|
4583
|
+
createdAt: string;
|
|
4584
|
+
linkedAt?: string;
|
|
4585
|
+
lastSyncedAt?: string;
|
|
4586
|
+
staleAt?: string;
|
|
4587
|
+
staleReason?: string;
|
|
4588
|
+
}
|
|
4589
|
+
interface TaskGitLabTracking {
|
|
4590
|
+
item?: TaskGitLabTrackedItem;
|
|
4591
|
+
unlinkedAt?: string;
|
|
4592
|
+
}
|
|
4528
4593
|
interface TaskGithubTracking {
|
|
4529
4594
|
enabled?: boolean;
|
|
4530
4595
|
repoOverride?: string;
|
|
@@ -4584,6 +4649,8 @@ interface AgentLogEntry {
|
|
|
4584
4649
|
type: AgentLogType;
|
|
4585
4650
|
detail?: string;
|
|
4586
4651
|
agent?: AgentRole;
|
|
4652
|
+
durationMs?: number;
|
|
4653
|
+
timeToFirstTokenMs?: number;
|
|
4587
4654
|
}
|
|
4588
4655
|
type ArchiveAgentLogMode = "none" | "compact" | "full";
|
|
4589
4656
|
interface TaskAttachment {
|
|
@@ -4952,7 +5019,7 @@ interface TaskTokenBudgetOverride {
|
|
|
4952
5019
|
raisedAt?: string;
|
|
4953
5020
|
reason?: string;
|
|
4954
5021
|
}
|
|
4955
|
-
type SourceType = "dashboard_ui" | "quick_chat" | "chat_session" | "agent_heartbeat" | "automation" | "cron" | "workflow_step" | "github_import" | "task_refine" | "task_duplicate" | "cli" | "api" | "recovery" | "research" | "unknown";
|
|
5022
|
+
type SourceType = "dashboard_ui" | "quick_chat" | "chat_session" | "agent_heartbeat" | "automation" | "cron" | "workflow_step" | "github_import" | "gitlab_import" | "task_refine" | "task_duplicate" | "cli" | "api" | "recovery" | "research" | "unknown";
|
|
4956
5023
|
interface TaskSource {
|
|
4957
5024
|
sourceType: SourceType;
|
|
4958
5025
|
sourceAgentId?: string;
|
|
@@ -5136,6 +5203,7 @@ interface Task {
|
|
|
5136
5203
|
githubTracking?: TaskGithubTracking;
|
|
5137
5204
|
source?: TaskSource;
|
|
5138
5205
|
sourceIssue?: TaskSourceIssue;
|
|
5206
|
+
gitlabTracking?: TaskGitLabTracking;
|
|
5139
5207
|
log: TaskLogEntry[];
|
|
5140
5208
|
timedExecutionMs?: number;
|
|
5141
5209
|
inReviewStall?: InReviewStallSignal;
|
|
@@ -5178,8 +5246,12 @@ interface Task {
|
|
|
5178
5246
|
reviewerFallbackRetryCount?: number;
|
|
5179
5247
|
retrySummary?: RetrySummary;
|
|
5180
5248
|
nextRecoveryAt?: string;
|
|
5249
|
+
awaitingApprovalReason?: "release-authorization";
|
|
5250
|
+
approvedPlanFingerprint?: string;
|
|
5181
5251
|
thinkingLevel?: ThinkingLevel;
|
|
5182
5252
|
executionMode?: ExecutionMode;
|
|
5253
|
+
plannerOversightLevel?: PlannerOversightLevel;
|
|
5254
|
+
plannerOverseerState?: PlannerOverseerRuntimeSnapshot;
|
|
5183
5255
|
assignedAgentId?: string;
|
|
5184
5256
|
nodeId?: string;
|
|
5185
5257
|
effectiveNodeId?: string;
|
|
@@ -5246,6 +5318,7 @@ interface TaskCreateInput {
|
|
|
5246
5318
|
branchContext?: TaskBranchContext;
|
|
5247
5319
|
autoMerge?: boolean;
|
|
5248
5320
|
sourceIssue?: TaskSourceIssue;
|
|
5321
|
+
gitlabTracking?: TaskGitLabTracking;
|
|
5249
5322
|
tokenUsage?: TaskTokenUsage;
|
|
5250
5323
|
source?: TaskSource;
|
|
5251
5324
|
priority?: TaskPriority;
|
|
@@ -5275,6 +5348,7 @@ interface TaskCreateInput {
|
|
|
5275
5348
|
githubTracking?: Pick<TaskGithubTracking, "enabled" | "repoOverride">;
|
|
5276
5349
|
reviewLevel?: number;
|
|
5277
5350
|
executionMode?: ExecutionMode;
|
|
5351
|
+
plannerOversightLevel?: PlannerOversightLevel;
|
|
5278
5352
|
}
|
|
5279
5353
|
interface MeshReplicatedTaskCreatePayload {
|
|
5280
5354
|
replicationVersion: 1;
|
|
@@ -5427,11 +5501,20 @@ interface McpServersSettings {
|
|
|
5427
5501
|
enabled?: boolean;
|
|
5428
5502
|
servers?: McpServerDefinition[];
|
|
5429
5503
|
}
|
|
5504
|
+
interface DashboardKeyboardShortcuts {
|
|
5505
|
+
quickChat?: string;
|
|
5506
|
+
terminal?: string;
|
|
5507
|
+
openFiles?: string;
|
|
5508
|
+
openSettings?: string;
|
|
5509
|
+
openCommandCenter?: string;
|
|
5510
|
+
newTask?: string;
|
|
5511
|
+
}
|
|
5430
5512
|
interface GlobalSettings {
|
|
5431
5513
|
themeMode?: ThemeMode;
|
|
5432
5514
|
colorTheme?: ColorTheme;
|
|
5433
5515
|
shadcnCustomColors?: Record<string, string>;
|
|
5434
5516
|
dashboardFontScalePct?: number;
|
|
5517
|
+
dashboardKeyboardShortcuts?: DashboardKeyboardShortcuts;
|
|
5435
5518
|
dismissModalsOnOutsideClick?: boolean;
|
|
5436
5519
|
language?: Locale;
|
|
5437
5520
|
defaultProvider?: string;
|
|
@@ -5481,12 +5564,19 @@ interface GlobalSettings {
|
|
|
5481
5564
|
updateCheckEnabled?: boolean;
|
|
5482
5565
|
fnBinaryCheckEnabled?: boolean;
|
|
5483
5566
|
githubTrackingDefaultRepo?: string;
|
|
5567
|
+
gitlabEnabled?: boolean;
|
|
5568
|
+
gitlabInstanceUrl?: string;
|
|
5569
|
+
gitlabApiBaseUrl?: string;
|
|
5570
|
+
gitlabAuthToken?: string;
|
|
5571
|
+
gitlabAuthTokenType?: GitlabAuthTokenType;
|
|
5484
5572
|
updateCheckFrequency?: "manual" | "on-startup" | "daily" | "weekly";
|
|
5485
5573
|
autoReloadOnVersionChange?: boolean;
|
|
5486
5574
|
modelOnboardingComplete?: boolean;
|
|
5487
5575
|
useClaudeCli?: boolean;
|
|
5488
5576
|
useDroidCli?: boolean;
|
|
5489
5577
|
useLlamaCpp?: boolean;
|
|
5578
|
+
useCursorCli?: boolean;
|
|
5579
|
+
cursorCliBinaryPath?: string;
|
|
5490
5580
|
executionGlobalProvider?: string;
|
|
5491
5581
|
executionGlobalModelId?: string;
|
|
5492
5582
|
planningGlobalProvider?: string;
|
|
@@ -5579,6 +5669,7 @@ interface RemoteAccessProjectSettings {
|
|
|
5579
5669
|
lifecycle: RemoteAccessLifecycleConfig;
|
|
5580
5670
|
}
|
|
5581
5671
|
type GithubAuthMode = "gh-cli" | "token";
|
|
5672
|
+
type GitlabAuthTokenType = "personal" | "project" | "group";
|
|
5582
5673
|
interface SecretsEnvSettings {
|
|
5583
5674
|
enabled?: boolean;
|
|
5584
5675
|
filename?: string;
|
|
@@ -5590,6 +5681,7 @@ interface ProjectSettings {
|
|
|
5590
5681
|
globalPause?: boolean;
|
|
5591
5682
|
globalPauseReason?: string;
|
|
5592
5683
|
defaultWorkflowId?: string;
|
|
5684
|
+
aiUndoTaskWorkflowId?: string;
|
|
5593
5685
|
enabledBuiltinWorkflowIds?: string[];
|
|
5594
5686
|
approvedWorkflowCliCommands?: string[];
|
|
5595
5687
|
approvedCliAutonomyAdapters?: string[];
|
|
@@ -5791,6 +5883,14 @@ interface ProjectSettings {
|
|
|
5791
5883
|
githubTrackingEnabledByDefault?: boolean;
|
|
5792
5884
|
githubLinkImportedIssuesToTracking?: boolean;
|
|
5793
5885
|
githubTrackingDefaultRepo?: string;
|
|
5886
|
+
gitlabEnabled?: boolean;
|
|
5887
|
+
gitlabInstanceUrl?: string;
|
|
5888
|
+
gitlabApiBaseUrl?: string;
|
|
5889
|
+
gitlabAuthToken?: string;
|
|
5890
|
+
gitlabAuthTokenType?: GitlabAuthTokenType;
|
|
5891
|
+
gitlabCommentOnDone?: boolean;
|
|
5892
|
+
gitlabCommentTemplate?: string;
|
|
5893
|
+
gitlabCloseSourceIssueOnDone?: boolean;
|
|
5794
5894
|
githubTrackingDedupEnabled?: boolean;
|
|
5795
5895
|
githubAuthMode?: GithubAuthMode;
|
|
5796
5896
|
githubAuthToken?: string;
|
|
@@ -5987,10 +6087,12 @@ interface ArchivedTaskEntry {
|
|
|
5987
6087
|
size?: "S" | "M" | "L";
|
|
5988
6088
|
reviewLevel?: number;
|
|
5989
6089
|
executionMode?: ExecutionMode;
|
|
6090
|
+
plannerOversightLevel?: PlannerOversightLevel;
|
|
5990
6091
|
prInfo?: PrInfo;
|
|
5991
6092
|
prInfos?: PrInfo[];
|
|
5992
6093
|
issueInfo?: IssueInfo;
|
|
5993
6094
|
githubTracking?: TaskGithubTracking;
|
|
6095
|
+
gitlabTracking?: TaskGitLabTracking;
|
|
5994
6096
|
sourceIssue?: TaskSourceIssue;
|
|
5995
6097
|
attachments?: TaskAttachment[];
|
|
5996
6098
|
comments?: TaskComment[];
|
|
@@ -6019,6 +6121,7 @@ interface ArchivedTaskEntry {
|
|
|
6019
6121
|
validatorModelId?: string;
|
|
6020
6122
|
planningModelProvider?: string;
|
|
6021
6123
|
planningModelId?: string;
|
|
6124
|
+
tokenUsage?: TaskTokenUsage;
|
|
6022
6125
|
breakIntoSubtasks?: boolean;
|
|
6023
6126
|
noCommitsExpected?: boolean;
|
|
6024
6127
|
paused?: boolean;
|
|
@@ -6035,6 +6138,7 @@ interface ArchivedTaskEntry {
|
|
|
6035
6138
|
nextRecoveryAt?: string;
|
|
6036
6139
|
error?: string;
|
|
6037
6140
|
assigneeUserId?: string;
|
|
6141
|
+
mergeDetails?: MergeDetails;
|
|
6038
6142
|
}
|
|
6039
6143
|
type PlanningQuestionType = "text" | "single_select" | "multi_select" | "confirm";
|
|
6040
6144
|
type IsolationMode = "in-process" | "child-process";
|
|
@@ -6424,7 +6528,7 @@ interface PluginActivationInput {
|
|
|
6424
6528
|
activatedAt?: string;
|
|
6425
6529
|
}
|
|
6426
6530
|
type RunAuditDomain = "database" | "git" | "filesystem" | "sandbox";
|
|
6427
|
-
type RunAuditMutationType = "mergeQueue:enqueue" | "mergeQueue:lease-acquired" | "mergeQueue:lease-released" | "mergeQueue:lease-expired" | "task:handoff" | "task:handoff-invariant-violation" | (string & {});
|
|
6531
|
+
type RunAuditMutationType = "mergeQueue:enqueue" | "mergeQueue:lease-acquired" | "mergeQueue:lease-released" | "mergeQueue:lease-expired" | "task:handoff" | "task:handoff-invariant-violation" | "overseer:intervention" | (string & {});
|
|
6428
6532
|
interface RunAuditEventInput {
|
|
6429
6533
|
timestamp?: string;
|
|
6430
6534
|
taskId?: string;
|
|
@@ -10,17 +10,32 @@ function definePlugin(plugin2) {
|
|
|
10
10
|
|
|
11
11
|
// ../../plugins/fusion-plugin-cursor-runtime/src/cli-spawn.ts
|
|
12
12
|
import { spawn } from "node:child_process";
|
|
13
|
+
function formatSpawnError(error) {
|
|
14
|
+
const code = typeof error.code === "string" ? `${error.code}: ` : "";
|
|
15
|
+
return `spawn error: ${code}${error.message}`.trim();
|
|
16
|
+
}
|
|
13
17
|
async function runCursorCommand(binary, args, timeoutMs) {
|
|
14
18
|
return new Promise((resolve) => {
|
|
15
|
-
const child = spawn(binary, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
16
19
|
let stdout = "";
|
|
17
20
|
let stderr = "";
|
|
18
|
-
|
|
21
|
+
let settled = false;
|
|
22
|
+
let timer;
|
|
23
|
+
const finish = (result) => {
|
|
24
|
+
if (settled) return;
|
|
25
|
+
settled = true;
|
|
26
|
+
if (timer) clearTimeout(timer);
|
|
27
|
+
resolve(result);
|
|
28
|
+
};
|
|
29
|
+
const child = spawn(binary, args, {
|
|
30
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
31
|
+
shell: process.platform === "win32"
|
|
32
|
+
});
|
|
33
|
+
timer = setTimeout(() => {
|
|
19
34
|
try {
|
|
20
35
|
child.kill("SIGKILL");
|
|
21
36
|
} catch {
|
|
22
37
|
}
|
|
23
|
-
|
|
38
|
+
finish({ code: 124, stdout, stderr });
|
|
24
39
|
}, timeoutMs);
|
|
25
40
|
child.stdout?.on("data", (c) => {
|
|
26
41
|
stdout += c.toString("utf-8");
|
|
@@ -28,33 +43,55 @@ async function runCursorCommand(binary, args, timeoutMs) {
|
|
|
28
43
|
child.stderr?.on("data", (c) => {
|
|
29
44
|
stderr += c.toString("utf-8");
|
|
30
45
|
});
|
|
31
|
-
child.once("error", () => {
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
child.once("error", (error) => {
|
|
47
|
+
const diagnostic = formatSpawnError(error);
|
|
48
|
+
stderr = stderr ? `${stderr}
|
|
49
|
+
${diagnostic}` : diagnostic;
|
|
50
|
+
finish({ code: 127, stdout, stderr });
|
|
34
51
|
});
|
|
35
52
|
child.once("close", (code) => {
|
|
36
|
-
|
|
37
|
-
resolve({ code, stdout, stderr });
|
|
53
|
+
finish({ code, stdout, stderr });
|
|
38
54
|
});
|
|
39
55
|
});
|
|
40
56
|
}
|
|
41
57
|
|
|
42
58
|
// ../../plugins/fusion-plugin-cursor-runtime/src/probe.ts
|
|
43
59
|
var CANDIDATES = ["cursor-agent", "cursor"];
|
|
60
|
+
var MAX_FAILURE_DETAIL_LENGTH = 180;
|
|
61
|
+
function buildCandidates(binaryPath) {
|
|
62
|
+
const configuredBinaryPath = binaryPath?.trim() || void 0;
|
|
63
|
+
const ordered = configuredBinaryPath ? [configuredBinaryPath, ...CANDIDATES] : [...CANDIDATES];
|
|
64
|
+
return { candidates: Array.from(new Set(ordered)), configuredBinaryPath };
|
|
65
|
+
}
|
|
66
|
+
function summarizeFailure(binary, stdout, stderr) {
|
|
67
|
+
const detail = `${stderr || stdout}`.replace(/\s+/g, " ").trim();
|
|
68
|
+
if (!detail) return void 0;
|
|
69
|
+
const truncated = detail.length > MAX_FAILURE_DETAIL_LENGTH ? `${detail.slice(0, MAX_FAILURE_DETAIL_LENGTH - 1)}\u2026` : detail;
|
|
70
|
+
return `${binary}: ${truncated}`;
|
|
71
|
+
}
|
|
44
72
|
async function probeCursorBinary(options) {
|
|
45
73
|
const startedAt = Date.now();
|
|
46
74
|
const timeoutMs = options?.timeoutMs ?? 3e3;
|
|
47
|
-
const candidates = options?.binaryPath
|
|
75
|
+
const { candidates, configuredBinaryPath } = buildCandidates(options?.binaryPath);
|
|
76
|
+
const failureDetails = [];
|
|
48
77
|
for (const binary of candidates) {
|
|
49
78
|
const version = await runCursorCommand(binary, ["--version"], timeoutMs);
|
|
79
|
+
const failureDetail = summarizeFailure(binary, version.stdout, version.stderr);
|
|
80
|
+
if (failureDetail) failureDetails.push(failureDetail);
|
|
81
|
+
const common = {
|
|
82
|
+
binaryName: binary,
|
|
83
|
+
binaryPath: binary,
|
|
84
|
+
configuredBinaryPath,
|
|
85
|
+
usingConfiguredBinaryPath: configuredBinaryPath === binary,
|
|
86
|
+
diagnostics: failureDetails.length > 0 ? [...failureDetails] : void 0,
|
|
87
|
+
probeDurationMs: Date.now() - startedAt
|
|
88
|
+
};
|
|
50
89
|
if (version.code === 0) {
|
|
51
90
|
return {
|
|
52
91
|
available: true,
|
|
53
92
|
authenticated: true,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
version: version.stdout.trim() || void 0,
|
|
57
|
-
probeDurationMs: Date.now() - startedAt
|
|
93
|
+
...common,
|
|
94
|
+
version: version.stdout.trim() || void 0
|
|
58
95
|
};
|
|
59
96
|
}
|
|
60
97
|
const combined = `${version.stdout}
|
|
@@ -63,27 +100,27 @@ ${version.stderr}`.toLowerCase();
|
|
|
63
100
|
return {
|
|
64
101
|
available: true,
|
|
65
102
|
authenticated: false,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
reason: "macOS login keychain is locked",
|
|
69
|
-
probeDurationMs: Date.now() - startedAt
|
|
103
|
+
...common,
|
|
104
|
+
reason: "macOS login keychain is locked"
|
|
70
105
|
};
|
|
71
106
|
}
|
|
72
107
|
if (combined.includes("no cursor ide installation found")) {
|
|
73
108
|
return {
|
|
74
109
|
available: true,
|
|
75
110
|
authenticated: false,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
reason: "Cursor IDE installation not found",
|
|
79
|
-
probeDurationMs: Date.now() - startedAt
|
|
111
|
+
...common,
|
|
112
|
+
reason: "Cursor IDE installation not found"
|
|
80
113
|
};
|
|
81
114
|
}
|
|
82
115
|
}
|
|
116
|
+
const baseReason = configuredBinaryPath ? `Configured Cursor CLI binary '${configuredBinaryPath}' failed; PATH fallback cursor-agent/cursor also failed` : "cursor-agent/cursor not found on PATH";
|
|
83
117
|
return {
|
|
84
118
|
available: false,
|
|
85
119
|
authenticated: false,
|
|
86
|
-
|
|
120
|
+
configuredBinaryPath,
|
|
121
|
+
usingConfiguredBinaryPath: false,
|
|
122
|
+
diagnostics: failureDetails.length > 0 ? failureDetails : void 0,
|
|
123
|
+
reason: failureDetails.length > 0 ? `${baseReason} (${failureDetails.join("; ")})` : baseReason,
|
|
87
124
|
probeDurationMs: Date.now() - startedAt
|
|
88
125
|
};
|
|
89
126
|
}
|
|
@@ -122,12 +159,20 @@ async function discoverCursorModels(binary, timeoutMs = 5e3) {
|
|
|
122
159
|
}
|
|
123
160
|
|
|
124
161
|
// ../../plugins/fusion-plugin-cursor-runtime/src/provider.ts
|
|
125
|
-
|
|
126
|
-
|
|
162
|
+
function normalizeDiscoveryOptions(options) {
|
|
163
|
+
if (!options || typeof options !== "object") return {};
|
|
164
|
+
const record = options;
|
|
165
|
+
return {
|
|
166
|
+
binaryPath: typeof record.binaryPath === "string" ? record.binaryPath : void 0,
|
|
167
|
+
timeoutMs: typeof record.timeoutMs === "number" ? record.timeoutMs : void 0
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
async function discoverCursorProviderModels(options) {
|
|
171
|
+
const probe = await probeCursorBinary(normalizeDiscoveryOptions(options));
|
|
127
172
|
if (!probe.available || !probe.binaryName) {
|
|
128
173
|
return { models: [], source: "probe", fallbackUsed: true, reason: probe.reason ?? "binary unavailable" };
|
|
129
174
|
}
|
|
130
|
-
const result = await discoverCursorModels(probe.binaryName);
|
|
175
|
+
const result = await discoverCursorModels(probe.binaryPath ?? probe.binaryName);
|
|
131
176
|
return {
|
|
132
177
|
models: result.models.map((id) => ({ id, label: id })),
|
|
133
178
|
source: result.source,
|