@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.
Files changed (146) hide show
  1. package/dist/bin.js +9137 -2087
  2. package/dist/client/.vite/manifest.json +364 -332
  3. package/dist/client/assets/AgentDetailView-BPzzEIn1.js +18 -0
  4. package/dist/client/assets/{AgentDetailView-BzSyldiW.css → AgentDetailView-D7UY2Tup.css} +1 -1
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-D2AQ6swg.js → AgentPermissionPolicyEditor-CqlLF0pf.js} +1 -1
  6. package/dist/client/assets/{AgentsView-DwEFPKuN.js → AgentsView-C4uCWzdt.js} +3 -3
  7. package/dist/client/assets/ChatView-BGV9F2K0.js +6 -0
  8. package/dist/client/assets/{CommandCenter-BABqoSkg.js → CommandCenter-BhIfVVjz.js} +16 -16
  9. package/dist/client/assets/{DevServerView-DlgOzRdC.js → DevServerView-Bd86MWUa.js} +1 -1
  10. package/dist/client/assets/DirectoryPicker-BDe9G84f.js +1 -0
  11. package/dist/client/assets/DocumentsView-BkAHMt19.js +1 -0
  12. package/dist/client/assets/{EvalsView-CQBNrO5n.js → EvalsView-BxxCVaJ8.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-2SDqP2lc.js → ExperimentalAgentOnboardingModal-7-BD6W1v.js} +1 -1
  14. package/dist/client/assets/{GoalsView-BgkX-_SB.js → GoalsView-B3KICwNu.js} +1 -1
  15. package/dist/client/assets/{InsightsView-CJY4eZcO.js → InsightsView-DO8qefU1.js} +2 -2
  16. package/dist/client/assets/{MemoryView-5Crtfanz.js → MemoryView-urkPdqTn.js} +1 -1
  17. package/dist/client/assets/{PiExtensionsManager-COmzskVa.js → PiExtensionsManager-BwVKjJIo.js} +2 -2
  18. package/dist/client/assets/PluginManager-C-OuqDLa.js +1 -0
  19. package/dist/client/assets/{PullRequestView-DAHh0FVM.js → PullRequestView-B4q4X5WV.js} +2 -2
  20. package/dist/client/assets/{ResearchView-cSUka3sd.js → ResearchView-DlW6z3sm.js} +1 -1
  21. package/dist/client/assets/{SecretsView-ChFAfFRY.js → SecretsView-C-3eC0KB.js} +1 -1
  22. package/dist/client/assets/{SessionTerminal-D4R3ScvQ.css → SessionTerminal-BvK8A98c.css} +1 -1
  23. package/dist/client/assets/SessionTerminal-DVfyVeS2.js +2 -0
  24. package/dist/client/assets/SettingsModal-BC_2Y56_.css +1 -0
  25. package/dist/client/assets/{SettingsModal-pAz_hOoN.js → SettingsModal-BzXctrhu.js} +1 -1
  26. package/dist/client/assets/SettingsModal-qs8w3rov.js +21 -0
  27. package/dist/client/assets/SetupWizardModal-DDJ8PCkH.js +2 -0
  28. package/dist/client/assets/{ShadcnColorPicker-CsfgWpf6.js → ShadcnColorPicker-BcD5fZ_P.js} +1 -1
  29. package/dist/client/assets/{SkillsView-BSUplEYb.js → SkillsView-DojlvxFh.js} +1 -1
  30. package/dist/client/assets/TodoView-BKZ07WxZ.js +6 -0
  31. package/dist/client/assets/WorkflowNodeEditor-BJNbi4_V.js +8 -0
  32. package/dist/client/assets/{agentSkills-qVb0x_G3.js → agentSkills-NbIIJy87.js} +1 -1
  33. package/dist/client/assets/app-0jcSCRQr.js +13 -0
  34. package/dist/client/assets/app-BPzPEE6G.js +13 -0
  35. package/dist/client/assets/app-BSZU5Uns.js +13 -0
  36. package/dist/client/assets/app-CEtD1B9K.js +13 -0
  37. package/dist/client/assets/app-CVyRSEUX.js +13 -0
  38. package/dist/client/assets/app-DoLz_4Dg.js +13 -0
  39. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DEt4eIEQ.js → architectureDiagram-3BPJPVTR-CJu9RVXs.js} +1 -1
  40. package/dist/client/assets/{blockDiagram-GPEHLZMM-CJuX0UM_.js → blockDiagram-GPEHLZMM-crZsLLTq.js} +1 -1
  41. package/dist/client/assets/{c4Diagram-AAUBKEIU-a46Lm113.js → c4Diagram-AAUBKEIU-D5mmJKvW.js} +1 -1
  42. package/dist/client/assets/channel-Zfk0yRN2.js +1 -0
  43. package/dist/client/assets/{chunk-2J33WTMH-iBhwyS0c.js → chunk-2J33WTMH-BZIDltTX.js} +1 -1
  44. package/dist/client/assets/{chunk-4BX2VUAB-C7lS5wER.js → chunk-4BX2VUAB-ND_SzhUa.js} +1 -1
  45. package/dist/client/assets/{chunk-55IACEB6-CQ6YOncn.js → chunk-55IACEB6-C3n-Nisk.js} +1 -1
  46. package/dist/client/assets/{chunk-727SXJPM-CveMaMKK.js → chunk-727SXJPM-DfiPA7wv.js} +1 -1
  47. package/dist/client/assets/{chunk-AQP2D5EJ-DErjGUEk.js → chunk-AQP2D5EJ-CDE0u57Z.js} +1 -1
  48. package/dist/client/assets/{chunk-FMBD7UC4-DXUvEFfJ.js → chunk-FMBD7UC4-COR53PTE.js} +1 -1
  49. package/dist/client/assets/{chunk-ND2GUHAM-w5RqSj1J.js → chunk-ND2GUHAM-CbcTdl7C.js} +1 -1
  50. package/dist/client/assets/{chunk-QZHKN3VN-CAi0lJ7V.js → chunk-QZHKN3VN-DiB3PReK.js} +1 -1
  51. package/dist/client/assets/classDiagram-4FO5ZUOK-BehQ-wnv.js +1 -0
  52. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BehQ-wnv.js +1 -0
  53. package/dist/client/assets/{cose-bilkent-S5V4N54A-Ck2h4uV5.js → cose-bilkent-S5V4N54A-Dg3YVyLX.js} +1 -1
  54. package/dist/client/assets/createLucideIcon-CshVyKO4.js +21 -0
  55. package/dist/client/assets/{dagre-BM42HDAG-BCRTXNj6.js → dagre-BM42HDAG-D2bK3gNb.js} +1 -1
  56. package/dist/client/assets/dashboard-view-BcbTWSCe.js +1 -0
  57. package/dist/client/assets/dashboard-view-Bsdq3OM4.css +1 -0
  58. package/dist/client/assets/dashboard-view-DafOfnxI.js +1 -0
  59. package/dist/client/assets/{dashboard-view-D9rF_PCq.js → dashboard-view-t2UfQxck.js} +1320 -1335
  60. package/dist/client/assets/{diagram-2AECGRRQ-DTTk-DYO.js → diagram-2AECGRRQ-BWT8KaEl.js} +1 -1
  61. package/dist/client/assets/{diagram-5GNKFQAL-jDc9kMi2.js → diagram-5GNKFQAL-DWfJlASD.js} +1 -1
  62. package/dist/client/assets/{diagram-KO2AKTUF-CcLmzlGr.js → diagram-KO2AKTUF-DE3hFbLT.js} +1 -1
  63. package/dist/client/assets/{diagram-LMA3HP47-DCW8XKQj.js → diagram-LMA3HP47-CYCFeD4B.js} +1 -1
  64. package/dist/client/assets/{diagram-OG6HWLK6-wbbKquPs.js → diagram-OG6HWLK6-C0C8lEGv.js} +1 -1
  65. package/dist/client/assets/{erDiagram-TEJ5UH35-Fo933Mo7.js → erDiagram-TEJ5UH35-kSo7RjKA.js} +1 -1
  66. package/dist/client/assets/{flowDiagram-I6XJVG4X-Dfum7HZP.js → flowDiagram-I6XJVG4X-DxRf1SVH.js} +1 -1
  67. package/dist/client/assets/{folder-open-B8vOwFeP.js → folder-open-DO1rnCxq.js} +1 -1
  68. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BzEBCn01.js → ganttDiagram-6RSMTGT7-CGtxSeWq.js} +1 -1
  69. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CgovghHs.js → gitGraphDiagram-PVQCEYII-BNZv_DFY.js} +1 -1
  70. package/dist/client/assets/index-BCf32Sgx.css +1 -0
  71. package/dist/client/assets/index-D7eX7QJk.js +2511 -0
  72. package/dist/client/assets/{infoDiagram-5YYISTIA-BzpU4Wys.js → infoDiagram-5YYISTIA-DailohMo.js} +1 -1
  73. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-cpp5pozu.js → ishikawaDiagram-YF4QCWOH-Cy3shDZP.js} +1 -1
  74. package/dist/client/assets/{journeyDiagram-JHISSGLW-BVjcw6oo.js → journeyDiagram-JHISSGLW-B1rU18Qx.js} +1 -1
  75. package/dist/client/assets/{kanban-definition-UN3LZRKU-4unAhBzo.js → kanban-definition-UN3LZRKU-CRNUDgkO.js} +1 -1
  76. package/dist/client/assets/loader-circle-CMNcxXXr.js +16 -0
  77. package/dist/client/assets/{mermaid.core-DzIyUj9t.js → mermaid.core-Cg0po76i.js} +4 -4
  78. package/dist/client/assets/{mindmap-definition-RKZ34NQL-Be_yfVir.js → mindmap-definition-RKZ34NQL-CEjwlhOe.js} +1 -1
  79. package/dist/client/assets/{pieDiagram-4H26LBE5-Cfnw2aji.js → pieDiagram-4H26LBE5-70T-php2.js} +1 -1
  80. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BFlC-_Uo.js → quadrantDiagram-W4KKPZXB-ChcpRG7l.js} +1 -1
  81. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DpVPzCOx.js → requirementDiagram-4Y6WPE33-9Pzb_Cot.js} +1 -1
  82. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DM-gKKP0.js → sankeyDiagram-5OEKKPKP-Bx6DkeKq.js} +1 -1
  83. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DjhZCZhd.js → sequenceDiagram-3UESZ5HK-emWPkPv7.js} +1 -1
  84. package/dist/client/assets/{shield-alert-DCfkjjYc.js → shield-alert-BdAjnDkU.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-AJRCARHV-BCA96rdI.js → stateDiagram-AJRCARHV-B_X2-VQy.js} +1 -1
  86. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DvQssSEq.js +1 -0
  87. package/dist/client/assets/{timeline-definition-PNZ67QCA-CHW2OQRw.js → timeline-definition-PNZ67QCA-CkyhunuI.js} +1 -1
  88. package/dist/client/assets/{upload-EJc5PJPz.js → upload-D9-yuO2D.js} +1 -1
  89. package/dist/client/assets/{users-C-e-99Vp.js → users-B4aebngl.js} +1 -1
  90. package/dist/client/assets/{vennDiagram-CIIHVFJN-shGh4eBY.js → vennDiagram-CIIHVFJN-8OGD6Vb7.js} +1 -1
  91. package/dist/client/assets/{wardley-L42UT6IY-l0RGrVhn.js → wardley-L42UT6IY-MnRFGNPm.js} +1 -1
  92. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-C-USmO8A.js → wardleyDiagram-YWT4CUSO-BAEzb08c.js} +1 -1
  93. package/dist/client/assets/{xychartDiagram-2RQKCTM6-CHX9Umta.js → xychartDiagram-2RQKCTM6-DUxideKC.js} +1 -1
  94. package/dist/client/assets/zoom-out-DzDzWQt1.js +21 -0
  95. package/dist/client/index.html +14 -5
  96. package/dist/client/version.json +1 -1
  97. package/dist/droid-cli/package.json +1 -1
  98. package/dist/extension.js +6720 -1170
  99. package/dist/pi-claude-cli/package.json +1 -1
  100. package/dist/plugin-sdk/index.d.ts +108 -4
  101. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  102. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +70 -25
  105. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-linear-import/bundled.js +658 -0
  110. package/dist/plugins/fusion-plugin-linear-import/manifest.json +48 -0
  111. package/dist/plugins/fusion-plugin-linear-import/package.json +11 -0
  112. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  117. package/package.json +2 -1
  118. package/skill/fusion/SKILL.md +2 -2
  119. package/skill/fusion/references/engine-tools.md +1 -0
  120. package/skill/fusion/references/extension-tools.md +81 -0
  121. package/skill/fusion/references/fusion-capabilities.md +7 -0
  122. package/dist/client/assets/AgentDetailView-BJditQat.js +0 -18
  123. package/dist/client/assets/ChatView-B4bjPXFN.js +0 -6
  124. package/dist/client/assets/DirectoryPicker-BwMSmxYS.js +0 -1
  125. package/dist/client/assets/DocumentsView-BfaRXFg5.js +0 -1
  126. package/dist/client/assets/PluginManager-CGWXqZMa.js +0 -1
  127. package/dist/client/assets/SessionTerminal-CtQKDaqI.js +0 -2
  128. package/dist/client/assets/SettingsModal-BYaotQ2o.js +0 -21
  129. package/dist/client/assets/SettingsModal-BzZNPNIh.css +0 -1
  130. package/dist/client/assets/SetupWizardModal-eHZHi8VP.js +0 -2
  131. package/dist/client/assets/TodoView-DhBseLvM.js +0 -6
  132. package/dist/client/assets/WorkflowNodeEditor-Bi12CNif.js +0 -8
  133. package/dist/client/assets/app-5S4z84u5.js +0 -13
  134. package/dist/client/assets/app-B1VYocx2.js +0 -13
  135. package/dist/client/assets/app-BhtYYxin.js +0 -13
  136. package/dist/client/assets/app-Cts0__Vx.js +0 -13
  137. package/dist/client/assets/app-DczBmsP4.js +0 -13
  138. package/dist/client/assets/app-_GFUqcMK.js +0 -13
  139. package/dist/client/assets/channel-BGI9APMr.js +0 -1
  140. package/dist/client/assets/classDiagram-4FO5ZUOK-g6hCcufy.js +0 -1
  141. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-g6hCcufy.js +0 -1
  142. package/dist/client/assets/dashboard-view-BfLJ60Kd.js +0 -1
  143. package/dist/client/assets/index-BjELA24x.js +0 -1336
  144. package/dist/client/assets/index-DwGW7OJh.css +0 -1
  145. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DHds08RS.js +0 -1
  146. package/dist/client/assets/zoom-out-NWbVkreR.js +0 -41
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/pi-claude-cli",
3
- "version": "0.54.0",
3
+ "version": "0.56.0",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "main": "index.ts",
@@ -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;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cli-printing-press",
3
- "version": "0.1.35",
3
+ "version": "0.1.37",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/compound-engineering",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -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
- const timer = setTimeout(() => {
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
- resolve({ code: 124, stdout, stderr });
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
- clearTimeout(timer);
33
- resolve({ code: 127, stdout, stderr });
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
- clearTimeout(timer);
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 ? [options.binaryPath] : [...CANDIDATES];
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
- binaryName: binary,
55
- binaryPath: binary,
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
- binaryName: binary,
67
- binaryPath: binary,
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
- binaryName: binary,
77
- binaryPath: binary,
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
- reason: "cursor-agent/cursor not found on PATH",
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
- async function discoverCursorProviderModels() {
126
- const probe = await probeCursorBinary();
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,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/dependency-graph",
3
- "version": "0.1.49",
3
+ "version": "0.1.51",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/droid-runtime",
3
- "version": "0.1.44",
3
+ "version": "0.1.46",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.68",
3
+ "version": "0.2.70",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {