@runfusion/fusion 0.48.0 → 0.49.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 (133) hide show
  1. package/dist/bin.js +6905 -5790
  2. package/dist/client/.vite/manifest.json +251 -250
  3. package/dist/client/assets/{AgentDetailView-CF6isJ51.js → AgentDetailView-B8_IDafM.js} +1 -1
  4. package/dist/client/assets/AgentDetailView-BzSyldiW.css +1 -0
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-DFldf6aS.js → AgentPermissionPolicyEditor-D4U6puHs.js} +1 -1
  6. package/dist/client/assets/{AgentsView-DiGseTuo.js → AgentsView-CafZRACA.js} +3 -3
  7. package/dist/client/assets/{ChatView-BjQBbDyo.js → ChatView-CZv_hIdK.js} +1 -1
  8. package/dist/client/assets/ChatView-DwIIrJxb.css +1 -0
  9. package/dist/client/assets/CommandCenter-B1P49x__.css +1 -0
  10. package/dist/client/assets/CommandCenter-D9qV7yF_.js +71 -0
  11. package/dist/client/assets/{DevServerView-D6RFaGPU.js → DevServerView-C1qppz4E.js} +1 -1
  12. package/dist/client/assets/{DirectoryPicker-DNBB-viz.js → DirectoryPicker-CW_Q-Bup.js} +1 -1
  13. package/dist/client/assets/{DocumentsView-DXG-sctG.js → DocumentsView-DGxrLknh.js} +1 -1
  14. package/dist/client/assets/{EvalsView-Ol6ECKz5.js → EvalsView-BMU01K7i.js} +1 -1
  15. package/dist/client/assets/{ExperimentalAgentOnboardingModal-BQc3GaE_.js → ExperimentalAgentOnboardingModal-B5Mwwwbz.js} +1 -1
  16. package/dist/client/assets/{GoalsView-C_m90anC.js → GoalsView-B9Vwqp8k.js} +1 -1
  17. package/dist/client/assets/{InsightsView-BbFgPsDH.js → InsightsView-C9fVBn7l.js} +1 -1
  18. package/dist/client/assets/{MemoryView-CRS7AjWK.js → MemoryView-Chm5uzjZ.js} +1 -1
  19. package/dist/client/assets/{PiExtensionsManager-BEj5xu45.js → PiExtensionsManager-BhKzgNHh.js} +1 -1
  20. package/dist/client/assets/{PluginManager-CzCM3XUY.js → PluginManager-pEIpbosd.js} +1 -1
  21. package/dist/client/assets/{PullRequestView-9yNYCunb.js → PullRequestView-DG1gPFRJ.js} +1 -1
  22. package/dist/client/assets/{ResearchView-BKdirpiw.js → ResearchView-wy7oLnPg.js} +1 -1
  23. package/dist/client/assets/{SecretsView-qGjo-0Cp.js → SecretsView-Bid0TP7K.js} +1 -1
  24. package/dist/client/assets/{SessionTerminal-C7YlkdGJ.js → SessionTerminal-B3XCQFRu.js} +1 -1
  25. package/dist/client/assets/{SettingsModal-DihNd7g8.js → SettingsModal-BMpP5CkL.js} +1 -1
  26. package/dist/client/assets/{SettingsModal-CvbiSIHS.css → SettingsModal-BzZNPNIh.css} +1 -1
  27. package/dist/client/assets/SettingsModal-Dptq-qYL.js +21 -0
  28. package/dist/client/assets/SettingsModal-tUDR6nJ9.css +1 -0
  29. package/dist/client/assets/{SetupWizardModal-MovTj5pY.js → SetupWizardModal-C_wMNV3H.js} +2 -2
  30. package/dist/client/assets/{ShadcnColorPicker-Bnf5n5R4.js → ShadcnColorPicker-CXxr3ynz.js} +1 -1
  31. package/dist/client/assets/{ShadcnColorPicker-pqVWCC5-.css → ShadcnColorPicker-CzZo9UOD.css} +1 -1
  32. package/dist/client/assets/SkillsView-Cfs7HkwW.css +1 -0
  33. package/dist/client/assets/SkillsView-DcNtAxQI.js +1 -0
  34. package/dist/client/assets/{TodoView-CIsL_uvQ.css → TodoView--YoVYWvw.css} +1 -1
  35. package/dist/client/assets/{TodoView-BEdk6FTU.js → TodoView-Bt5ZY51H.js} +1 -1
  36. package/dist/client/assets/WorkflowNodeEditor-AwHxfoz1.js +8 -0
  37. package/dist/client/assets/WorkflowNodeEditor-WYIxHTxY.css +1 -0
  38. package/dist/client/assets/{agentSkills-D5nDZPRY.js → agentSkills-DlTZq-3b.js} +1 -1
  39. package/dist/client/assets/{app-S8fehQv8.js → app-B7XunYYI.js} +3 -3
  40. package/dist/client/assets/{app-ChkCVQpq.js → app-BV3tiBJo.js} +3 -3
  41. package/dist/client/assets/{app-DMn7Jt9g.js → app-BgStK3QE.js} +3 -3
  42. package/dist/client/assets/{app-D_IT9Buz.js → app-ChEDGcMv.js} +3 -3
  43. package/dist/client/assets/{app-BglOELbc.js → app-Cl4147h6.js} +3 -3
  44. package/dist/client/assets/app-DH6H4_Pi.js +13 -0
  45. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BbkXWBni.js → architectureDiagram-3BPJPVTR-DPevXfXn.js} +1 -1
  46. package/dist/client/assets/{blockDiagram-GPEHLZMM-DhaqpHqZ.js → blockDiagram-GPEHLZMM-iREXBnwN.js} +1 -1
  47. package/dist/client/assets/{c4Diagram-AAUBKEIU-qC0WSHMZ.js → c4Diagram-AAUBKEIU-Ds4gntrv.js} +1 -1
  48. package/dist/client/assets/channel-FTiNgAnt.js +1 -0
  49. package/dist/client/assets/{chunk-2J33WTMH-Dah9zMeT.js → chunk-2J33WTMH-DI8WjOJS.js} +1 -1
  50. package/dist/client/assets/{chunk-4BX2VUAB-epHwnUb_.js → chunk-4BX2VUAB-BSvj2r_a.js} +1 -1
  51. package/dist/client/assets/{chunk-55IACEB6-DpYBy44g.js → chunk-55IACEB6-DXqk_68P.js} +1 -1
  52. package/dist/client/assets/{chunk-727SXJPM-B9b8698e.js → chunk-727SXJPM-CbVz6DAi.js} +1 -1
  53. package/dist/client/assets/{chunk-AQP2D5EJ-DrM8nnhR.js → chunk-AQP2D5EJ-O8p3lAmi.js} +1 -1
  54. package/dist/client/assets/{chunk-FMBD7UC4-jyT6Scwe.js → chunk-FMBD7UC4-8KJJYFeG.js} +1 -1
  55. package/dist/client/assets/{chunk-ND2GUHAM-EoPfF-PK.js → chunk-ND2GUHAM-D_zeaF-K.js} +1 -1
  56. package/dist/client/assets/{chunk-QZHKN3VN-qMwLVfgJ.js → chunk-QZHKN3VN-IzXnlcXm.js} +1 -1
  57. package/dist/client/assets/classDiagram-4FO5ZUOK-sIVsNnoj.js +1 -0
  58. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-sIVsNnoj.js +1 -0
  59. package/dist/client/assets/{cose-bilkent-S5V4N54A-DmPFKoVD.js → cose-bilkent-S5V4N54A-DyB8nAG8.js} +1 -1
  60. package/dist/client/assets/{dagre-BM42HDAG-DeHxd-ej.js → dagre-BM42HDAG-BkFeh-yy.js} +1 -1
  61. package/dist/client/assets/{dashboard-view-Cw5mMJay.js → dashboard-view-Ddw7AZEw.js} +1 -1
  62. package/dist/client/assets/{dashboard-view-DXjNQ5IF.js → dashboard-view-zm0LyiGH.js} +1 -1
  63. package/dist/client/assets/{diagram-2AECGRRQ-C04A2mhr.js → diagram-2AECGRRQ-D6ccxFD_.js} +1 -1
  64. package/dist/client/assets/{diagram-5GNKFQAL-DqtOwADI.js → diagram-5GNKFQAL-pYELzWoc.js} +1 -1
  65. package/dist/client/assets/{diagram-KO2AKTUF-CH0har-Z.js → diagram-KO2AKTUF-DiX408pG.js} +1 -1
  66. package/dist/client/assets/{diagram-LMA3HP47-CxN-U-0W.js → diagram-LMA3HP47-CEZO6Pzz.js} +1 -1
  67. package/dist/client/assets/{diagram-OG6HWLK6-42A7wpwF.js → diagram-OG6HWLK6-C4wPGJ9_.js} +1 -1
  68. package/dist/client/assets/{erDiagram-TEJ5UH35-CnZI5YlN.js → erDiagram-TEJ5UH35-UVoBlCdP.js} +1 -1
  69. package/dist/client/assets/{flowDiagram-I6XJVG4X-BKfQhMVF.js → flowDiagram-I6XJVG4X-BHBVkZYH.js} +1 -1
  70. package/dist/client/assets/{folder-open-STXgbemw.js → folder-open-BS746XqG.js} +1 -1
  71. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BfA0pME8.js → ganttDiagram-6RSMTGT7-JhbzzuUH.js} +1 -1
  72. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BgDFB7PS.js → gitGraphDiagram-PVQCEYII-Bf9CFASb.js} +1 -1
  73. package/dist/client/assets/index-BNXyfteR.css +1 -0
  74. package/dist/client/assets/index-DZGZRdnt.js +1302 -0
  75. package/dist/client/assets/{infoDiagram-5YYISTIA-Bb5F155s.js → infoDiagram-5YYISTIA-ODZX4ugg.js} +1 -1
  76. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-8Oati7l_.js → ishikawaDiagram-YF4QCWOH-BZ4EmuqN.js} +1 -1
  77. package/dist/client/assets/{journeyDiagram-JHISSGLW-DhHTHXTM.js → journeyDiagram-JHISSGLW-DjPguSQp.js} +1 -1
  78. package/dist/client/assets/{kanban-definition-UN3LZRKU-BWB9EtUX.js → kanban-definition-UN3LZRKU-CDlWdfMu.js} +1 -1
  79. package/dist/client/assets/{mermaid.core-BD-L2gUQ.js → mermaid.core-rI3nyVx8.js} +4 -4
  80. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BSKGd7LE.js → mindmap-definition-RKZ34NQL-BduuAfgW.js} +1 -1
  81. package/dist/client/assets/{pieDiagram-4H26LBE5-BtBFPvSW.js → pieDiagram-4H26LBE5-Df_vjilh.js} +1 -1
  82. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-aWQWYPto.js → quadrantDiagram-W4KKPZXB-DXVZfmAq.js} +1 -1
  83. package/dist/client/assets/{requirementDiagram-4Y6WPE33-CprlEpIa.js → requirementDiagram-4Y6WPE33-UJTrQjTm.js} +1 -1
  84. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Cw-AcRAV.js → sankeyDiagram-5OEKKPKP-DDERoUXV.js} +1 -1
  85. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BMW5slyv.js → sequenceDiagram-3UESZ5HK-DaULWS9L.js} +1 -1
  86. package/dist/client/assets/{shield-alert-Bzf8yNOc.js → shield-alert-BKmP809x.js} +1 -1
  87. package/dist/client/assets/{stateDiagram-AJRCARHV-CcxvIVwM.js → stateDiagram-AJRCARHV-tbFQ1nvS.js} +1 -1
  88. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-awOfoFOB.js → stateDiagram-v2-BHNVJYJU-DQ0cOptx.js} +1 -1
  89. package/dist/client/assets/{timeline-definition-PNZ67QCA-DIEAc2YP.js → timeline-definition-PNZ67QCA-BE_RPHyh.js} +1 -1
  90. package/dist/client/assets/{upload-DuwyPTKe.js → upload-CKPEXc39.js} +1 -1
  91. package/dist/client/assets/{users-D1Qhfyro.js → users-BFmWR-bN.js} +1 -1
  92. package/dist/client/assets/{vennDiagram-CIIHVFJN-DOkqg5Wi.js → vennDiagram-CIIHVFJN-TwZvt3sz.js} +1 -1
  93. package/dist/client/assets/{wardley-L42UT6IY-DoPK1Q6d.js → wardley-L42UT6IY-C6ZavOUS.js} +1 -1
  94. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-l1vun-m2.js → wardleyDiagram-YWT4CUSO-B2i11Jb0.js} +1 -1
  95. package/dist/client/assets/{xychartDiagram-2RQKCTM6-DcUOUKvl.js → xychartDiagram-2RQKCTM6-DbfolZx7.js} +1 -1
  96. package/dist/client/index.html +2 -2
  97. package/dist/client/version.json +1 -1
  98. package/dist/droid-cli/package.json +6 -25
  99. package/dist/extension.js +4529 -4120
  100. package/dist/pi-claude-cli/index.ts +14 -6
  101. package/dist/pi-claude-cli/package.json +6 -20
  102. package/dist/pi-claude-cli/src/mcp-config.ts +58 -7
  103. package/dist/plugin-sdk/index.d.ts +220 -185
  104. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +2 -9
  106. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-reports/package.json +2 -10
  114. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +3 -15
  116. package/package.json +1 -1
  117. package/skill/fusion/references/engine-tools.md +4 -0
  118. package/dist/client/assets/AgentDetailView-CgbB51Iw.css +0 -1
  119. package/dist/client/assets/ChatView-BtjkE0V7.css +0 -1
  120. package/dist/client/assets/CommandCenter-DDjpYkPe.css +0 -1
  121. package/dist/client/assets/CommandCenter-DwpiADSX.js +0 -71
  122. package/dist/client/assets/SettingsModal-DpaptT6t.js +0 -21
  123. package/dist/client/assets/SettingsModal-ino68pI2.css +0 -1
  124. package/dist/client/assets/SkillsView-Br2LkA3x.js +0 -1
  125. package/dist/client/assets/SkillsView-CJ8snrma.css +0 -1
  126. package/dist/client/assets/WorkflowNodeEditor-BOouksjw.css +0 -1
  127. package/dist/client/assets/WorkflowNodeEditor-e-eR6yzw.js +0 -8
  128. package/dist/client/assets/app-BM6bAO0b.js +0 -13
  129. package/dist/client/assets/channel-CCKvUami.js +0 -1
  130. package/dist/client/assets/classDiagram-4FO5ZUOK-C_HqY7AI.js +0 -1
  131. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C_HqY7AI.js +0 -1
  132. package/dist/client/assets/index-BnfnLXyO.css +0 -1
  133. package/dist/client/assets/index-CHy0WNjH.js +0 -1301
@@ -366,6 +366,8 @@ declare class DatabaseSync {
366
366
  constructor(path: string);
367
367
  exec(sql: string): void;
368
368
  close(): void;
369
+ serialize(): Uint8Array;
370
+ deserialize(data: Uint8Array): void;
369
371
  prepare(sql: string): SqliteStatement;
370
372
  }
371
373
 
@@ -980,11 +982,13 @@ declare class MissionStore extends EventEmitter<MissionStoreEvents> {
980
982
  branch?: string;
981
983
  baseBranch?: string;
982
984
  assignmentMode?: "shared" | "per-task-derived";
985
+ workflowId?: string | null;
983
986
  }): Promise<MissionFeature>;
984
987
  triageSlice(sliceId: string, branchOptions?: {
985
988
  branch?: string;
986
989
  baseBranch?: string;
987
990
  assignmentMode?: "shared" | "per-task-derived";
991
+ workflowId?: string | null;
988
992
  }): Promise<MissionFeature[]>;
989
993
  computeSliceStatus(sliceId: string): SliceStatus;
990
994
  computeMilestoneStatus(milestoneId: string): MilestoneStatus;
@@ -1047,6 +1051,7 @@ declare class PluginStore extends EventEmitter<PluginStoreEvents> {
1047
1051
  });
1048
1052
  private get localDb();
1049
1053
  private get centralDb();
1054
+ close(): void;
1050
1055
  init(): Promise<void>;
1051
1056
  private validateIdFormat;
1052
1057
  private validateSettingsAgainstSchema;
@@ -2436,157 +2441,6 @@ declare class CentralCore extends EventEmitter<CentralCoreEvents> {
2436
2441
  private rowToSettingsSyncState;
2437
2442
  }
2438
2443
 
2439
- declare class CentralDatabase implements CentralClaimStore {
2440
- private db;
2441
- private readonly dbPath;
2442
- private readonly globalDir;
2443
- private transactionDepth;
2444
- private readonly busyTimeoutMs;
2445
- private readonly lockRecoveryWindowMs;
2446
- private readonly lockRecoveryDelayMs;
2447
- constructor(globalDir?: string, options?: {
2448
- busyTimeoutMs?: number;
2449
- lockRecoveryWindowMs?: number;
2450
- lockRecoveryDelayMs?: number;
2451
- });
2452
- init(): void;
2453
- private hasColumn;
2454
- close(): void;
2455
- private runWithLockRecovery;
2456
- transaction<T>(fn: () => T): T;
2457
- private mapTaskClaimRow;
2458
- getTaskClaim(projectId: string, taskId: string): TaskClaimRow | null;
2459
- tryClaimTask(input: {
2460
- projectId: string;
2461
- taskId: string;
2462
- nodeId: string;
2463
- agentId: string;
2464
- runId: string | null;
2465
- renewedAt: string;
2466
- expectedEpoch?: number | null;
2467
- }): {
2468
- ok: true;
2469
- claim: TaskClaimRow;
2470
- } | {
2471
- ok: false;
2472
- reason: "conflict";
2473
- current: TaskClaimRow;
2474
- };
2475
- renewTaskClaim(input: {
2476
- projectId: string;
2477
- taskId: string;
2478
- nodeId: string;
2479
- agentId: string;
2480
- runId: string | null;
2481
- renewedAt: string;
2482
- expectedEpoch: number;
2483
- }): {
2484
- ok: true;
2485
- claim: TaskClaimRow;
2486
- } | {
2487
- ok: false;
2488
- reason: "conflict" | "not_found";
2489
- current: TaskClaimRow | null;
2490
- };
2491
- releaseTaskClaim(input: {
2492
- projectId: string;
2493
- taskId: string;
2494
- nodeId: string;
2495
- agentId: string;
2496
- }): {
2497
- ok: true;
2498
- } | {
2499
- ok: false;
2500
- reason: "not_owner" | "not_found";
2501
- current: TaskClaimRow | null;
2502
- };
2503
- prepare(sql: string): Statement;
2504
- exec(sql: string): void;
2505
- getLastModified(): number;
2506
- bumpLastModified(): void;
2507
- getSchemaVersion(): number;
2508
- getPath(): string;
2509
- getGlobalDir(): string;
2510
- }
2511
-
2512
- type MasterKeyProvider = () => Promise<Buffer>;
2513
-
2514
- type SecretScope = "project" | "global";
2515
- type SecretAccessPolicy$1 = "auto" | "prompt" | "deny";
2516
- interface SecretRecord {
2517
- id: string;
2518
- key: string;
2519
- scope: SecretScope;
2520
- description: string | null;
2521
- accessPolicy: SecretAccessPolicy$1;
2522
- envExportable: boolean;
2523
- envExportKey: string | null;
2524
- createdAt: string;
2525
- updatedAt: string;
2526
- lastReadAt: string | null;
2527
- lastReadBy: string | null;
2528
- }
2529
- interface EnvExportableSecret {
2530
- id: string;
2531
- key: string;
2532
- exportKey: string;
2533
- scope: SecretScope;
2534
- plaintextValue: string;
2535
- }
2536
- type SecretsStoreAuditEvent = {
2537
- mutationType: "secret:create" | "secret:update" | "secret:delete" | "secret:read";
2538
- scope: SecretScope;
2539
- secretId: string;
2540
- key: string;
2541
- actor?: {
2542
- agentId?: string | null;
2543
- userId?: string | null;
2544
- };
2545
- };
2546
- interface SecretsStoreOptions {
2547
- auditEmitter?: (event: SecretsStoreAuditEvent) => void;
2548
- }
2549
- declare class SecretsStore {
2550
- private readonly projectDb;
2551
- private readonly centralDb;
2552
- private readonly options;
2553
- private readonly cipher;
2554
- constructor(projectDb: Pick<Database, "prepare" | "bumpLastModified">, centralDb: Pick<CentralDatabase, "prepare" | "bumpLastModified">, masterKeyProvider: MasterKeyProvider, options?: SecretsStoreOptions);
2555
- private emitAudit;
2556
- private dbForScope;
2557
- private rowToRecord;
2558
- listSecrets(scope?: SecretScope): SecretRecord[];
2559
- listEnvExportable(opts?: {
2560
- keyPrefix?: string;
2561
- }): Promise<EnvExportableSecret[]>;
2562
- getSecretMetadata(id: string, scope: SecretScope): SecretRecord | null;
2563
- createSecret(input: {
2564
- scope: SecretScope;
2565
- key: string;
2566
- plaintextValue: string;
2567
- description?: string | null;
2568
- accessPolicy?: SecretAccessPolicy$1;
2569
- envExportable?: boolean;
2570
- envExportKey?: string | null;
2571
- }): Promise<SecretRecord>;
2572
- updateSecret(id: string, scope: SecretScope, patch: {
2573
- key?: string;
2574
- plaintextValue?: string;
2575
- description?: string | null;
2576
- accessPolicy?: SecretAccessPolicy$1;
2577
- envExportable?: boolean;
2578
- envExportKey?: string | null;
2579
- }): Promise<SecretRecord>;
2580
- deleteSecret(id: string, scope: SecretScope): void;
2581
- revealSecret(id: string, scope: SecretScope, reader: {
2582
- agentId?: string | null;
2583
- userId?: string | null;
2584
- }): Promise<{
2585
- key: string;
2586
- plaintextValue: string;
2587
- }>;
2588
- }
2589
-
2590
2444
  type UsageEventKind = "tool_call" | "tool_result" | "tool_error" | "user_message" | "session_start" | "session_stop";
2591
2445
  interface UsageEventInput {
2592
2446
  kind: UsageEventKind;
@@ -2634,6 +2488,23 @@ interface StepParser {
2634
2488
  parse(content: string): StepParseResult;
2635
2489
  }
2636
2490
 
2491
+ type OverlapBlockerRepairReason = "task-not-found" | "no-overlap-blocker" | "not-repairable-state" | "blocker-missing" | "scopes-still-overlap" | "dependency-blocker-remains" | "overlap-blocker-changed" | "rerouted-to-current-overlap" | "repaired";
2492
+ interface RepairOverlapBlockerOptions {
2493
+ dryRun?: boolean;
2494
+ reason?: string;
2495
+ }
2496
+ interface RepairOverlapBlockerResult {
2497
+ taskId: string;
2498
+ dryRun: boolean;
2499
+ repaired: boolean;
2500
+ statusCleared: boolean;
2501
+ previousOverlapBlockedBy?: string;
2502
+ currentOverlapBlockedBy?: string;
2503
+ reason: OverlapBlockerRepairReason;
2504
+ message: string;
2505
+ task?: Task;
2506
+ }
2507
+
2637
2508
  interface TaskStoreEvents {
2638
2509
  "task:created": [task: Task];
2639
2510
  "task:moved": [data: {
@@ -2852,13 +2723,6 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
2852
2723
  private taskDir;
2853
2724
  private artifactRegistryDir;
2854
2725
  private static artifactStoredName;
2855
- private getBuiltInWorkflowTemplate;
2856
- private toBuiltInWorkflowStep;
2857
- private toStoredWorkflowStep;
2858
- private getLegacyWorkflowStepSnapshot;
2859
- private applyLegacyWorkflowStepOverrides;
2860
- private ensureWorkflowStepForTemplate;
2861
- private optionalGroupIdSet;
2862
2726
  private resolveEnabledWorkflowSteps;
2863
2727
  private buildActiveTaskDependencyLookup;
2864
2728
  private recordDependencyCycleRejectedAudit;
@@ -2901,6 +2765,10 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
2901
2765
  assignmentMode?: TaskBranchAssignmentMode;
2902
2766
  }): Promise<void>;
2903
2767
  listTasksByBranchGroup(groupId: string): Promise<Task[]>;
2768
+ reconcileActiveTimingForEngineDowntime(now?: Date): Promise<{
2769
+ shiftedTaskIds: string[];
2770
+ downtimeMs: number;
2771
+ }>;
2904
2772
  private rowToPrEntity;
2905
2773
  private generatePrEntityId;
2906
2774
  getPrEntity(id: string): PrEntity | null;
@@ -3229,6 +3097,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3229
3097
  parseStepsFromPrompt(id: string): Promise<TaskStep[]>;
3230
3098
  parseDependenciesFromPrompt(id: string): Promise<string[]>;
3231
3099
  parseFileScopeFromPrompt(id: string): Promise<string[]>;
3100
+ repairOverlapBlocker(id: string, options?: RepairOverlapBlockerOptions): Promise<RepairOverlapBlockerResult>;
3101
+ private findCurrentOverlapBlockerForRepair;
3232
3102
  private makeSyntheticDeleteRunId;
3233
3103
  deleteTask(id: string, options?: {
3234
3104
  removeDependencyReferences?: boolean;
@@ -3361,7 +3231,6 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3361
3231
  cleanupArchivedTasks(): Promise<string[]>;
3362
3232
  private restoreFromArchive;
3363
3233
  private generatePromptFromArchiveEntry;
3364
- createWorkflowStep(input: WorkflowStepInput): Promise<WorkflowStep>;
3365
3234
  setPluginWorkflowStepTemplates(templates: Array<{
3366
3235
  pluginId: string;
3367
3236
  template: WorkflowStepTemplate;
@@ -3369,8 +3238,6 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3369
3238
  private resolvePluginWorkflowStep;
3370
3239
  listWorkflowSteps(): Promise<WorkflowStep[]>;
3371
3240
  getWorkflowStep(id: string): Promise<WorkflowStep | undefined>;
3372
- updateWorkflowStep(id: string, updates: Partial<WorkflowStepInput>): Promise<WorkflowStep>;
3373
- deleteWorkflowStep(id: string): Promise<void>;
3374
3241
  private nextWorkflowDefinitionId;
3375
3242
  private toWorkflowDefinition;
3376
3243
  private parseWorkflowLayout;
@@ -3406,11 +3273,6 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3406
3273
  getDefaultWorkflowId(): Promise<string | undefined>;
3407
3274
  setDefaultWorkflowId(workflowId: string | null): Promise<void>;
3408
3275
  private insertWorkflowDefinitionSync;
3409
- migrateLegacyWorkflowSteps(): Promise<{
3410
- migrated: number;
3411
- skipped: number;
3412
- combinedWorkflowId?: string;
3413
- }>;
3414
3276
  isWorkflowCliCommandApproved(command: string): Promise<boolean>;
3415
3277
  approveWorkflowCliCommand(command: string): Promise<void>;
3416
3278
  isCliAutonomyApproved(adapterId: string): Promise<boolean>;
@@ -3432,8 +3294,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3432
3294
  private writeTaskWorkflowSelection;
3433
3295
  private removeMaterializedSelection;
3434
3296
  private purgeTaskWorkflowSelectionRows;
3435
- private cleanupOrphanedMaterializedSteps;
3436
- private materializeWorkflowSteps;
3297
+ private validateWorkflowCompilable;
3437
3298
  private materializeDefaultWorkflowSteps;
3438
3299
  private materializeExplicitWorkflowSteps;
3439
3300
  selectTaskWorkflow(taskId: string, workflowId: string): Promise<string[]>;
@@ -3473,6 +3334,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3473
3334
  };
3474
3335
  getRootDir(): string;
3475
3336
  getFusionDir(): string;
3337
+ getGlobalSettingsDir(): string;
3476
3338
  getTasksDir(): string;
3477
3339
  getTaskDir(id: string): string;
3478
3340
  getDatabase(): Database;
@@ -4081,6 +3943,7 @@ declare class Database {
4081
3943
  lockRecoveryWindowMs?: number;
4082
3944
  lockRecoveryDelayMs?: number;
4083
3945
  });
3946
+ serializeSnapshot(): Uint8Array;
4084
3947
  get fts5Available(): boolean;
4085
3948
  private getTaskFtsTriggerParts;
4086
3949
  private configureTaskFts5;
@@ -4165,6 +4028,157 @@ declare class Database {
4165
4028
  getPath(): string;
4166
4029
  }
4167
4030
 
4031
+ declare class CentralDatabase implements CentralClaimStore {
4032
+ private db;
4033
+ private readonly dbPath;
4034
+ private readonly globalDir;
4035
+ private transactionDepth;
4036
+ private readonly busyTimeoutMs;
4037
+ private readonly lockRecoveryWindowMs;
4038
+ private readonly lockRecoveryDelayMs;
4039
+ constructor(globalDir?: string, options?: {
4040
+ busyTimeoutMs?: number;
4041
+ lockRecoveryWindowMs?: number;
4042
+ lockRecoveryDelayMs?: number;
4043
+ });
4044
+ init(): void;
4045
+ private hasColumn;
4046
+ close(): void;
4047
+ private runWithLockRecovery;
4048
+ transaction<T>(fn: () => T): T;
4049
+ private mapTaskClaimRow;
4050
+ getTaskClaim(projectId: string, taskId: string): TaskClaimRow | null;
4051
+ tryClaimTask(input: {
4052
+ projectId: string;
4053
+ taskId: string;
4054
+ nodeId: string;
4055
+ agentId: string;
4056
+ runId: string | null;
4057
+ renewedAt: string;
4058
+ expectedEpoch?: number | null;
4059
+ }): {
4060
+ ok: true;
4061
+ claim: TaskClaimRow;
4062
+ } | {
4063
+ ok: false;
4064
+ reason: "conflict";
4065
+ current: TaskClaimRow;
4066
+ };
4067
+ renewTaskClaim(input: {
4068
+ projectId: string;
4069
+ taskId: string;
4070
+ nodeId: string;
4071
+ agentId: string;
4072
+ runId: string | null;
4073
+ renewedAt: string;
4074
+ expectedEpoch: number;
4075
+ }): {
4076
+ ok: true;
4077
+ claim: TaskClaimRow;
4078
+ } | {
4079
+ ok: false;
4080
+ reason: "conflict" | "not_found";
4081
+ current: TaskClaimRow | null;
4082
+ };
4083
+ releaseTaskClaim(input: {
4084
+ projectId: string;
4085
+ taskId: string;
4086
+ nodeId: string;
4087
+ agentId: string;
4088
+ }): {
4089
+ ok: true;
4090
+ } | {
4091
+ ok: false;
4092
+ reason: "not_owner" | "not_found";
4093
+ current: TaskClaimRow | null;
4094
+ };
4095
+ prepare(sql: string): Statement;
4096
+ exec(sql: string): void;
4097
+ getLastModified(): number;
4098
+ bumpLastModified(): void;
4099
+ getSchemaVersion(): number;
4100
+ getPath(): string;
4101
+ getGlobalDir(): string;
4102
+ }
4103
+
4104
+ type MasterKeyProvider = () => Promise<Buffer>;
4105
+
4106
+ type SecretScope = "project" | "global";
4107
+ type SecretAccessPolicy$1 = "auto" | "prompt" | "deny";
4108
+ interface SecretRecord {
4109
+ id: string;
4110
+ key: string;
4111
+ scope: SecretScope;
4112
+ description: string | null;
4113
+ accessPolicy: SecretAccessPolicy$1;
4114
+ envExportable: boolean;
4115
+ envExportKey: string | null;
4116
+ createdAt: string;
4117
+ updatedAt: string;
4118
+ lastReadAt: string | null;
4119
+ lastReadBy: string | null;
4120
+ }
4121
+ interface EnvExportableSecret {
4122
+ id: string;
4123
+ key: string;
4124
+ exportKey: string;
4125
+ scope: SecretScope;
4126
+ plaintextValue: string;
4127
+ }
4128
+ type SecretsStoreAuditEvent = {
4129
+ mutationType: "secret:create" | "secret:update" | "secret:delete" | "secret:read";
4130
+ scope: SecretScope;
4131
+ secretId: string;
4132
+ key: string;
4133
+ actor?: {
4134
+ agentId?: string | null;
4135
+ userId?: string | null;
4136
+ };
4137
+ };
4138
+ interface SecretsStoreOptions {
4139
+ auditEmitter?: (event: SecretsStoreAuditEvent) => void;
4140
+ }
4141
+ declare class SecretsStore {
4142
+ private readonly projectDb;
4143
+ private readonly centralDb;
4144
+ private readonly options;
4145
+ private readonly cipher;
4146
+ constructor(projectDb: Pick<Database, "prepare" | "bumpLastModified">, centralDb: Pick<CentralDatabase, "prepare" | "bumpLastModified">, masterKeyProvider: MasterKeyProvider, options?: SecretsStoreOptions);
4147
+ private emitAudit;
4148
+ private dbForScope;
4149
+ private rowToRecord;
4150
+ listSecrets(scope?: SecretScope): SecretRecord[];
4151
+ listEnvExportable(opts?: {
4152
+ keyPrefix?: string;
4153
+ }): Promise<EnvExportableSecret[]>;
4154
+ getSecretMetadata(id: string, scope: SecretScope): SecretRecord | null;
4155
+ createSecret(input: {
4156
+ scope: SecretScope;
4157
+ key: string;
4158
+ plaintextValue: string;
4159
+ description?: string | null;
4160
+ accessPolicy?: SecretAccessPolicy$1;
4161
+ envExportable?: boolean;
4162
+ envExportKey?: string | null;
4163
+ }): Promise<SecretRecord>;
4164
+ updateSecret(id: string, scope: SecretScope, patch: {
4165
+ key?: string;
4166
+ plaintextValue?: string;
4167
+ description?: string | null;
4168
+ accessPolicy?: SecretAccessPolicy$1;
4169
+ envExportable?: boolean;
4170
+ envExportKey?: string | null;
4171
+ }): Promise<SecretRecord>;
4172
+ deleteSecret(id: string, scope: SecretScope): void;
4173
+ revealSecret(id: string, scope: SecretScope, reader: {
4174
+ agentId?: string | null;
4175
+ userId?: string | null;
4176
+ }): Promise<{
4177
+ key: string;
4178
+ plaintextValue: string;
4179
+ }>;
4180
+ }
4181
+
4168
4182
  declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh"];
4169
4183
  type ThinkingLevel = (typeof THINKING_LEVELS)[number];
4170
4184
  declare const COLUMNS: readonly ["triage", "todo", "in-progress", "in-review", "done", "archived"];
@@ -4377,23 +4391,6 @@ interface CustomProvider {
4377
4391
  name: string;
4378
4392
  }[];
4379
4393
  }
4380
- interface WorkflowStepInput {
4381
- templateId?: string;
4382
- name: string;
4383
- description: string;
4384
- mode?: WorkflowStepMode;
4385
- phase?: WorkflowStepPhase;
4386
- gateMode?: WorkflowStepGateMode;
4387
- prompt?: string;
4388
- toolMode?: WorkflowStepToolMode;
4389
- skillName?: string;
4390
- scriptName?: string;
4391
- enabled?: boolean;
4392
- defaultOn?: boolean;
4393
- modelProvider?: string;
4394
- modelId?: string;
4395
- migratedFragmentId?: string;
4396
- }
4397
4394
  interface WorkflowStepResult {
4398
4395
  workflowStepId: string;
4399
4396
  workflowStepName: string;
@@ -5154,6 +5151,7 @@ interface Task {
5154
5151
  columnMovedAt?: string;
5155
5152
  firstExecutionAt?: string;
5156
5153
  cumulativeActiveMs?: number;
5154
+ columnDwellMs?: Record<string, number>;
5157
5155
  executionStartedAt?: string;
5158
5156
  executionCompletedAt?: string;
5159
5157
  deletedAt?: string;
@@ -5345,6 +5343,36 @@ interface WorktrunkSettings {
5345
5343
  onFailure?: WorktrunkOnFailure;
5346
5344
  installedBinaryPath?: string;
5347
5345
  }
5346
+ interface McpSecretRef {
5347
+ secretRef: string;
5348
+ scope: SecretScope;
5349
+ }
5350
+ type McpSensitiveValue = McpSecretRef | string;
5351
+ interface McpStdioTransport {
5352
+ transport: "stdio";
5353
+ command: string;
5354
+ args?: string[];
5355
+ env?: Record<string, McpSensitiveValue>;
5356
+ }
5357
+ interface McpSseTransport {
5358
+ transport: "sse";
5359
+ url: string;
5360
+ headers?: Record<string, McpSensitiveValue>;
5361
+ }
5362
+ interface McpStreamableHttpTransport {
5363
+ transport: "streamable-http";
5364
+ url: string;
5365
+ headers?: Record<string, McpSensitiveValue>;
5366
+ }
5367
+ type McpTransport = McpStdioTransport | McpSseTransport | McpStreamableHttpTransport;
5368
+ type McpServerDefinition = {
5369
+ name: string;
5370
+ enabled?: boolean;
5371
+ } & McpTransport;
5372
+ interface McpServersSettings {
5373
+ enabled?: boolean;
5374
+ servers?: McpServerDefinition[];
5375
+ }
5348
5376
  interface GlobalSettings {
5349
5377
  themeMode?: ThemeMode;
5350
5378
  colorTheme?: ColorTheme;
@@ -5446,6 +5474,7 @@ interface GlobalSettings {
5446
5474
  researchGlobalFetchTimeoutMs?: number;
5447
5475
  researchGlobalUserAgent?: string;
5448
5476
  remoteAccess?: RemoteAccessProjectSettings;
5477
+ mcpServers?: McpServersSettings;
5449
5478
  worktrunk?: WorktrunkSettings;
5450
5479
  experimentalFeatures?: Record<string, boolean>;
5451
5480
  cliAgents?: Record<string, CliAgentSettings>;
@@ -5510,6 +5539,7 @@ interface ProjectSettings {
5510
5539
  approvedWorkflowCliCommands?: string[];
5511
5540
  approvedCliAutonomyAdapters?: string[];
5512
5541
  enginePaused?: boolean;
5542
+ engineLastActiveAt?: string;
5513
5543
  maxConcurrent: number;
5514
5544
  maxTriageConcurrent?: number;
5515
5545
  globalMaxConcurrent?: number;
@@ -5522,6 +5552,7 @@ interface ProjectSettings {
5522
5552
  heartbeatScopeDiscipline?: HeartbeatScopeDisciplineMode;
5523
5553
  heartbeatPromptTemplate?: HeartbeatPromptTemplate;
5524
5554
  groupOverlappingFiles: boolean;
5555
+ ignoreHiddenOverlapPaths?: boolean;
5525
5556
  overlapIgnorePaths?: string[];
5526
5557
  autoMerge: boolean;
5527
5558
  testMode?: boolean;
@@ -5539,6 +5570,7 @@ interface ProjectSettings {
5539
5570
  owningNodeHandoffPolicy?: OwningNodeHandoffPolicy;
5540
5571
  researchSettings?: ResearchProjectSettings;
5541
5572
  secretsEnv?: SecretsEnvSettings;
5573
+ mcpServers?: McpServersSettings;
5542
5574
  sandbox?: SandboxProjectSettings;
5543
5575
  evalSettings?: EvalProjectSettings;
5544
5576
  taskEvaluationEnabled?: boolean;
@@ -5554,6 +5586,7 @@ interface ProjectSettings {
5554
5586
  researchMaxSynthesisRounds?: number;
5555
5587
  defaultNodeId?: string;
5556
5588
  worktreeInitCommand?: string;
5589
+ worktreeCopyFiles?: string[];
5557
5590
  testCommand?: string;
5558
5591
  buildCommand?: string;
5559
5592
  recycleWorktrees?: boolean;
@@ -5617,6 +5650,7 @@ interface ProjectSettings {
5617
5650
  verificationFixRetries?: number;
5618
5651
  buildTimeoutMs?: number;
5619
5652
  verificationCommandTimeoutMs?: number;
5653
+ scopeVerificationToChangedFiles?: boolean;
5620
5654
  requirePlanApproval?: boolean;
5621
5655
  ephemeralAgentsEnabled?: boolean;
5622
5656
  agentProvisioning?: {
@@ -5905,6 +5939,7 @@ interface ArchivedTaskEntry {
5905
5939
  columnMovedAt?: string;
5906
5940
  firstExecutionAt?: string;
5907
5941
  cumulativeActiveMs?: number;
5942
+ columnDwellMs?: Record<string, number>;
5908
5943
  executionStartedAt?: string;
5909
5944
  executionCompletedAt?: string;
5910
5945
  deletedAt?: string;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cli-printing-press",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "type": "module",
5
- "description": "CLI Printing Press plugin package for Fusion",
6
5
  "private": true,
7
6
  "exports": {
8
7
  ".": {
@@ -18,13 +17,7 @@
18
17
  "import": "./src/manage-view.tsx"
19
18
  }
20
19
  },
21
- "scripts": {
22
- "build": "tsc",
23
- "test": "vitest run --silent=passed-only --reporter=dot"
24
- },
25
20
  "dependencies": {
26
- "@fusion/core": "workspace:*",
27
- "@fusion/plugin-sdk": "workspace:*",
28
21
  "express": "^5.1.0",
29
22
  "lucide-react": "^0.542.0",
30
23
  "react": "^19.0.0",
@@ -40,4 +33,4 @@
40
33
  "typescript": "^5.7.0",
41
34
  "vitest": "^4.1.0"
42
35
  }
43
- }
36
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/compound-engineering",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.30",
3
+ "version": "0.1.31",
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.42",
3
+ "version": "0.1.43",
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.37",
3
+ "version": "0.1.38",
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.61",
3
+ "version": "0.2.62",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/openclaw-runtime",
3
- "version": "0.2.61",
3
+ "version": "0.2.62",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/paperclip-runtime",
3
- "version": "0.2.61",
3
+ "version": "0.2.62",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {