@runfusion/fusion 0.58.0 → 0.60.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/README.md +2 -3
- package/dist/bin.js +16034 -13546
- package/dist/client/.vite/manifest.json +251 -248
- package/dist/client/assets/AgentDetailView-BBjuuYbU.js +18 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor-3x5cc2cp.js → AgentPermissionPolicyEditor-DOdy1ln0.js} +1 -1
- package/dist/client/assets/{AgentsView-B77vHi_7.js → AgentsView-DlyT08sc.js} +4 -4
- package/dist/client/assets/ChatView-CJBnc6rJ.js +6 -0
- package/dist/client/assets/CommandCenter-BhRLZmOH.js +99 -0
- package/dist/client/assets/CommandCenter-DSrIaOro.css +1 -0
- package/dist/client/assets/{DevServerView-BXmkO05R.js → DevServerView-DRpi8Xqz.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CZ3EXSE5.js → DirectoryPicker-Bw_A-64N.js} +1 -1
- package/dist/client/assets/{DocumentsView-BSWFgTsC.css → DocumentsView-BSC7wh2B.css} +1 -1
- package/dist/client/assets/{DocumentsView-GlAyW64J.js → DocumentsView-w0eDbpbG.js} +2 -2
- package/dist/client/assets/{EvalsView-BLmcsNNf.js → EvalsView-DxQALLwD.js} +1 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BuEWZrjl.js +1 -0
- package/dist/client/assets/{GoalsView-BRfZ4qGe.js → GoalsView-C3MGEtSt.js} +1 -1
- package/dist/client/assets/InsightsView-C0-BkE8_.js +11 -0
- package/dist/client/assets/{MemoryView-ChkuBpUf.js → MemoryView-Dd8uiLHH.js} +2 -2
- package/dist/client/assets/{PiExtensionsManager-DXwQdB7b.js → PiExtensionsManager-DlsEVOjG.js} +1 -1
- package/dist/client/assets/{PluginManager-B8zAjhqf.js → PluginManager-Cf9AOCcC.js} +1 -1
- package/dist/client/assets/{PullRequestView-DL1E1ixh.js → PullRequestView-hm77QtHV.js} +2 -2
- package/dist/client/assets/{ResearchView-BCYCHiyQ.js → ResearchView-BMQEnYH6.js} +1 -1
- package/dist/client/assets/SecretsView-Dc3sWf40.js +1 -0
- package/dist/client/assets/{SessionTerminal-BvK8A98c.css → SessionTerminal-CDTiqrd7.css} +1 -1
- package/dist/client/assets/SessionTerminal-CEv1G-9-.js +2 -0
- package/dist/client/assets/SettingsModal-DFrTDsBm.js +21 -0
- package/dist/client/assets/{SettingsModal-U7ma-5OU.js → SettingsModal-TuphE_CP.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-BCDoA33s.js → SetupWizardModal-CNGogJJp.js} +2 -2
- package/dist/client/assets/{ShadcnColorPicker-EVU2cXpo.js → ShadcnColorPicker-1Z7JIWTE.js} +2 -2
- package/dist/client/assets/{SkillsView-V48VsthB.js → SkillsView-CjPvmnz6.js} +1 -1
- package/dist/client/assets/TodoView-CUD4xw3T.css +1 -0
- package/dist/client/assets/TodoView-DmJPSWOu.js +6 -0
- package/dist/client/assets/WorkflowNodeEditor-BqO2yRXe.js +8 -0
- package/dist/client/assets/{agentSkills-B-QDeW2q.js → agentSkills-BNahUMFe.js} +1 -1
- package/dist/client/assets/app-BzgEwAOr.js +13 -0
- package/dist/client/assets/{app-RIK4I745.js → app-C7eDKtXM.js} +3 -3
- package/dist/client/assets/{app-SHNioZxk.js → app-CL1Ik1qS.js} +3 -3
- package/dist/client/assets/{app-De_pkbYi.js → app-Ckb9wA3K.js} +3 -3
- package/dist/client/assets/{app-cZgmPvs6.js → app-Den3D7oy.js} +3 -3
- package/dist/client/assets/{app--U62_ZWS.js → app-nAsTBQMW.js} +3 -3
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DvR35aCH.js → architectureDiagram-3BPJPVTR-Bb_ZGdtz.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-ciQdpSqc.js → blockDiagram-GPEHLZMM-CWfWJnIM.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CV0Z6UEL.js → c4Diagram-AAUBKEIU-Dufe_2hy.js} +1 -1
- package/dist/client/assets/channel-BYHFEnHT.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-CkAQRX3g.js → chunk-2J33WTMH-BdKWX3Y7.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-CJXvYVcN.js → chunk-4BX2VUAB-CQ9_zgu6.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-DOv0lN1u.js → chunk-55IACEB6-DEFTCISD.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-tRsHXz7i.js → chunk-727SXJPM-8RnJp1fx.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CfzOMXn9.js → chunk-AQP2D5EJ-DJg6awe1.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BKvUZ2cn.js → chunk-FMBD7UC4-Bw-OImRT.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-FqiVnW7u.js → chunk-ND2GUHAM-BSx9p0RO.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BAJDyCpZ.js → chunk-QZHKN3VN-Dbdv72P6.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BLstvJ1W.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BLstvJ1W.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DYizdcNp.js → cose-bilkent-S5V4N54A-CXtcC6U2.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BDWwvXJx.js → dagre-BM42HDAG-BO0r4g14.js} +1 -1
- package/dist/client/assets/{dashboard-view-DmfIFCV-.js → dashboard-view-BTnVGch5.js} +1 -1
- package/dist/client/assets/{dashboard-view-BYn_jRw9.js → dashboard-view-CoDeYJbQ.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-C8ic2E9q.js → diagram-2AECGRRQ-CLmeU2g6.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-H5IDcv9E.js → diagram-5GNKFQAL-CKyM23Jy.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DkczJXd6.js → diagram-KO2AKTUF-ByeVRDs_.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-P1vh7RIU.js → diagram-LMA3HP47-r8qKTJDn.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-CgeybA5t.js → diagram-OG6HWLK6-D2ugPdm7.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DSJa4zRQ.js → erDiagram-TEJ5UH35-dLzbDn0G.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-DG91ZWS9.js → flowDiagram-I6XJVG4X-et7EENd6.js} +1 -1
- package/dist/client/assets/{folder-open-iGyAYoN-.js → folder-open-BVtcjVIK.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-dkOQjOK8.js → ganttDiagram-6RSMTGT7-DmiabChP.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-GqrJtmDT.js → gitGraphDiagram-PVQCEYII-I1vbhqer.js} +1 -1
- package/dist/client/assets/index-C2HFa2A-.css +1 -0
- package/dist/client/assets/index-inWk2g6R.js +2540 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BfFhhqbU.js → infoDiagram-5YYISTIA-xd6L9Gq3.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DBBV-PIS.js → ishikawaDiagram-YF4QCWOH-fUeEYBvD.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-xZisXOgZ.js → journeyDiagram-JHISSGLW-B7xjU8Oh.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CbOJloOw.js → kanban-definition-UN3LZRKU-CJ8oRjFI.js} +1 -1
- package/dist/client/assets/{mermaid.core-DKBiVV3q.js → mermaid.core-2udKsaH3.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-Bf9V63ac.js → mindmap-definition-RKZ34NQL-CVywzN7Q.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-0ukMaTVl.js → pieDiagram-4H26LBE5-8vzzC4Mg.js} +1 -1
- package/dist/client/assets/{puzzle-BvEf9PLH.js → puzzle-D60d3Nv1.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CwXZAtYI.js → quadrantDiagram-W4KKPZXB-Cxyb4Mom.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DVsu9t-w.js → requirementDiagram-4Y6WPE33-Bs5RaG7r.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DOJUnv7J.js → sankeyDiagram-5OEKKPKP-Jf7Zq43D.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B67g0g9m.js → sequenceDiagram-3UESZ5HK-CG0I780H.js} +1 -1
- package/dist/client/assets/{shield-alert-4FPCIFZ2.js → shield-alert-B7JyuWPR.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-CPPa0bHh.js → stateDiagram-AJRCARHV-C1c5XtKG.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Dyj14elw.js → stateDiagram-v2-BHNVJYJU-Cv7_pOt_.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-UVWf2E8M.js → timeline-definition-PNZ67QCA-BWg-lsI0.js} +1 -1
- package/dist/client/assets/{upload-BkgVjwwc.js → upload-Dxv5FPaS.js} +1 -1
- package/dist/client/assets/{users-9nCT4liw.js → users-DvKg3opr.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CqGrv1wQ.js → vennDiagram-CIIHVFJN-gFjFmLlv.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-aA0pos_F.js → wardley-L42UT6IY-BaCNX8ou.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-C-O5tD1L.js → wardleyDiagram-YWT4CUSO-BRR6aw0q.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-qoIF674C.js → xychartDiagram-2RQKCTM6-D6Gwn1XW.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +14159 -12709
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +27 -1
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +4 -7
- 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/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +4 -7
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +0 -5
- 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-reports/src/dashboard/components/ShareBlocksPanel.tsx +4 -1
- package/dist/plugins/fusion-plugin-reports/src/dashboard/components/__tests__/ShareBlocksPanel.test.tsx +41 -2
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +0 -5
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/engine-tools.md +1 -0
- package/skill/fusion/references/extension-tools.md +10 -0
- package/skill/fusion/references/fusion-capabilities.md +1 -0
- package/dist/client/assets/AgentDetailView-whCXABbu.js +0 -18
- package/dist/client/assets/ChatView-CninsTIm.js +0 -6
- package/dist/client/assets/CommandCenter-B9q-zM9p.css +0 -1
- package/dist/client/assets/CommandCenter-C6LmdUin.js +0 -71
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DvDix9pH.js +0 -1
- package/dist/client/assets/InsightsView-X4RlcgrU.js +0 -11
- package/dist/client/assets/SecretsView-B48BIZKw.js +0 -1
- package/dist/client/assets/SessionTerminal-CUyYlq16.js +0 -2
- package/dist/client/assets/SettingsModal-DbjBoUYD.js +0 -21
- package/dist/client/assets/TodoView-DmpJmxu7.css +0 -1
- package/dist/client/assets/TodoView-MZ9Pfl65.js +0 -6
- package/dist/client/assets/WorkflowNodeEditor-B95Dvf-O.js +0 -8
- package/dist/client/assets/app-SucmTDhV.js +0 -13
- package/dist/client/assets/channel-Y_Uhrtqx.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DhicwSPE.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DhicwSPE.js +0 -1
- package/dist/client/assets/index-Bg8SMXUs.css +0 -1
- package/dist/client/assets/index-DO9Ch72Y.js +0 -2544
|
@@ -1079,6 +1079,7 @@ interface PluginUpdateInput {
|
|
|
1079
1079
|
homepage?: string;
|
|
1080
1080
|
path?: string;
|
|
1081
1081
|
dependencies?: string[];
|
|
1082
|
+
settingsSchema?: Record<string, PluginSettingSchema> | null;
|
|
1082
1083
|
aiScanOnLoad?: boolean;
|
|
1083
1084
|
lastSecurityScan?: PluginSecurityScanResult;
|
|
1084
1085
|
}
|
|
@@ -2604,6 +2605,7 @@ interface MoveTaskOptions {
|
|
|
2604
2605
|
preserveProgress?: boolean;
|
|
2605
2606
|
preserveWorktree?: boolean;
|
|
2606
2607
|
preserveStatus?: boolean;
|
|
2608
|
+
preservePause?: boolean;
|
|
2607
2609
|
allocateWorktree?: (reservedNames: Set<string>) => string | null;
|
|
2608
2610
|
moveSource?: "user" | "engine" | "scheduler";
|
|
2609
2611
|
workflowMoveActor?: WorkflowMovePolicyInput["actor"];
|
|
@@ -2961,7 +2963,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2961
2963
|
checkoutRunId: string | null;
|
|
2962
2964
|
checkoutLeaseRenewedAt: string;
|
|
2963
2965
|
}): Promise<Task>;
|
|
2964
|
-
selectNextTaskForAgent(agentId: string, agent?: Pick<Agent, "id" | "role">): Promise<InboxTask | null>;
|
|
2966
|
+
selectNextTaskForAgent(agentId: string, agent?: Pick<Agent, "id" | "role"> & Partial<Pick<Agent, "runtimeConfig">>): Promise<InboxTask | null>;
|
|
2965
2967
|
private areAllDependenciesDone;
|
|
2966
2968
|
private readTaskForMove;
|
|
2967
2969
|
moveTask(id: string, toColumn: ColumnId, options?: MoveTaskOptions): Promise<Task>;
|
|
@@ -3030,9 +3032,11 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3030
3032
|
workflowStepRetries?: number;
|
|
3031
3033
|
stuckKillCount?: number | null;
|
|
3032
3034
|
resumeLimboCount?: number | null;
|
|
3035
|
+
executeRequeueLoopCount?: number | null;
|
|
3033
3036
|
graphResumeRetryCount?: number | null;
|
|
3034
3037
|
resumeLimboTipSha?: string | null;
|
|
3035
3038
|
resumeLimboStepSignature?: string | null;
|
|
3039
|
+
executeRequeueLoopSignature?: string | null;
|
|
3036
3040
|
postReviewFixCount?: number | null;
|
|
3037
3041
|
recoveryRetryCount?: number | null;
|
|
3038
3042
|
taskDoneRetryCount?: number | null;
|
|
@@ -3055,6 +3059,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3055
3059
|
planningModelProvider?: string | null;
|
|
3056
3060
|
planningModelId?: string | null;
|
|
3057
3061
|
thinkingLevel?: string | null;
|
|
3062
|
+
validatorThinkingLevel?: string | null;
|
|
3063
|
+
planningThinkingLevel?: string | null;
|
|
3058
3064
|
error?: string | null;
|
|
3059
3065
|
summary?: string | null;
|
|
3060
3066
|
sessionFile?: string | null;
|
|
@@ -3419,6 +3425,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3419
3425
|
consumePluginGateVerdicts(taskId: string, toColumn: string): PluginGateVerdict[];
|
|
3420
3426
|
private resolveTaskCustomFieldDefsSync;
|
|
3421
3427
|
private resolveTaskWorkflowIrSync;
|
|
3428
|
+
private resolveWorkflowIrByIdSync;
|
|
3422
3429
|
private resolveEffectiveWorkflowIdSync;
|
|
3423
3430
|
private countActiveInCapacitySlotSync;
|
|
3424
3431
|
private countActiveExecutionWorktreeHoldersSync;
|
|
@@ -5298,9 +5305,11 @@ interface Task {
|
|
|
5298
5305
|
workflowStepRetries?: number;
|
|
5299
5306
|
stuckKillCount?: number;
|
|
5300
5307
|
resumeLimboCount?: number;
|
|
5308
|
+
executeRequeueLoopCount?: number;
|
|
5301
5309
|
graphResumeRetryCount?: number | null;
|
|
5302
5310
|
resumeLimboTipSha?: string;
|
|
5303
5311
|
resumeLimboStepSignature?: string;
|
|
5312
|
+
executeRequeueLoopSignature?: string;
|
|
5304
5313
|
postReviewFixCount?: number;
|
|
5305
5314
|
recoveryRetryCount?: number;
|
|
5306
5315
|
taskDoneRetryCount?: number;
|
|
@@ -5318,6 +5327,8 @@ interface Task {
|
|
|
5318
5327
|
awaitingApprovalReason?: "release-authorization";
|
|
5319
5328
|
approvedPlanFingerprint?: string;
|
|
5320
5329
|
thinkingLevel?: ThinkingLevel;
|
|
5330
|
+
validatorThinkingLevel?: ThinkingLevel;
|
|
5331
|
+
planningThinkingLevel?: ThinkingLevel;
|
|
5321
5332
|
executionMode?: ExecutionMode;
|
|
5322
5333
|
plannerOversightLevel?: PlannerOversightLevel;
|
|
5323
5334
|
plannerOverseerState?: PlannerOverseerRuntimeSnapshot;
|
|
@@ -5405,6 +5416,8 @@ interface TaskCreateInput {
|
|
|
5405
5416
|
planningModelProvider?: string;
|
|
5406
5417
|
planningModelId?: string;
|
|
5407
5418
|
thinkingLevel?: ThinkingLevel;
|
|
5419
|
+
validatorThinkingLevel?: ThinkingLevel;
|
|
5420
|
+
planningThinkingLevel?: ThinkingLevel;
|
|
5408
5421
|
summarize?: boolean;
|
|
5409
5422
|
missionId?: string;
|
|
5410
5423
|
sliceId?: string;
|
|
@@ -5657,10 +5670,13 @@ interface GlobalSettings {
|
|
|
5657
5670
|
validatorGlobalModelId?: string;
|
|
5658
5671
|
titleSummarizerGlobalProvider?: string;
|
|
5659
5672
|
titleSummarizerGlobalModelId?: string;
|
|
5673
|
+
mergerGlobalProvider?: string;
|
|
5674
|
+
mergerGlobalModelId?: string;
|
|
5660
5675
|
executionGlobalThinkingLevel?: ThinkingLevel;
|
|
5661
5676
|
planningGlobalThinkingLevel?: ThinkingLevel;
|
|
5662
5677
|
validatorGlobalThinkingLevel?: ThinkingLevel;
|
|
5663
5678
|
titleSummarizerGlobalThinkingLevel?: ThinkingLevel;
|
|
5679
|
+
mergerGlobalThinkingLevel?: ThinkingLevel;
|
|
5664
5680
|
daemonToken?: string;
|
|
5665
5681
|
daemonPort?: number;
|
|
5666
5682
|
daemonHost?: string;
|
|
@@ -5817,6 +5833,7 @@ interface ProjectSettings {
|
|
|
5817
5833
|
showWorktreeGrouping?: boolean;
|
|
5818
5834
|
openTasksInRightSidebar?: boolean;
|
|
5819
5835
|
openMobileTasksInPopup?: boolean;
|
|
5836
|
+
taskPopupsBoardListOnly?: boolean;
|
|
5820
5837
|
showCostBadgeOnCards?: boolean;
|
|
5821
5838
|
taskDetailChatFirst?: boolean;
|
|
5822
5839
|
executorAllowSiblingBranchRename?: boolean;
|
|
@@ -5838,6 +5855,12 @@ interface ProjectSettings {
|
|
|
5838
5855
|
defaultProviderOverride?: string;
|
|
5839
5856
|
defaultModelIdOverride?: string;
|
|
5840
5857
|
defaultThinkingLevelOverride?: ThinkingLevel;
|
|
5858
|
+
chatNewSessionMode?: "prompt" | "always-default";
|
|
5859
|
+
chatDefaultKind?: "model" | "agent";
|
|
5860
|
+
chatDefaultAgentId?: string;
|
|
5861
|
+
chatDefaultModelProvider?: string;
|
|
5862
|
+
chatDefaultModelId?: string;
|
|
5863
|
+
chatDefaultThinkingLevel?: ThinkingLevel;
|
|
5841
5864
|
executionProvider?: string;
|
|
5842
5865
|
executionModelId?: string;
|
|
5843
5866
|
executionThinkingLevel?: ThinkingLevel;
|
|
@@ -5992,6 +6015,9 @@ interface ProjectSettings {
|
|
|
5992
6015
|
titleSummarizerProvider?: string;
|
|
5993
6016
|
titleSummarizerModelId?: string;
|
|
5994
6017
|
titleSummarizerThinkingLevel?: ThinkingLevel;
|
|
6018
|
+
mergerProvider?: string;
|
|
6019
|
+
mergerModelId?: string;
|
|
6020
|
+
mergerThinkingLevel?: ThinkingLevel;
|
|
5995
6021
|
titleSummarizerFallbackProvider?: string;
|
|
5996
6022
|
titleSummarizerFallbackModelId?: string;
|
|
5997
6023
|
titleSummarizerFallbackThinkingLevel?: ThinkingLevel;
|
|
@@ -5,11 +5,6 @@ var __export = (target, all) => {
|
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
// ../plugin-sdk/src/index.ts
|
|
8
|
-
import {
|
|
9
|
-
WORKFLOW_EXTENSION_SCHEMA_VERSION,
|
|
10
|
-
workflowExtensionRegistryId,
|
|
11
|
-
createBoardActionServices
|
|
12
|
-
} from "@fusion/core";
|
|
13
8
|
function definePlugin(plugin2) {
|
|
14
9
|
return plugin2;
|
|
15
10
|
}
|
|
@@ -16349,7 +16344,6 @@ var RequestError = class _RequestError extends Error {
|
|
|
16349
16344
|
|
|
16350
16345
|
// ../../plugins/fusion-plugin-acp-runtime/src/process-manager.ts
|
|
16351
16346
|
import { spawn } from "node:child_process";
|
|
16352
|
-
import { redactSecrets } from "@fusion/core";
|
|
16353
16347
|
function debugLog(message) {
|
|
16354
16348
|
if (process.env.PI_ACP_DEBUG !== "1") return;
|
|
16355
16349
|
console.error(`[acp-runtime] ${message}`);
|
|
@@ -17305,7 +17299,10 @@ function extractPromptImagesFromOptions(options) {
|
|
|
17305
17299
|
const data = typeof rec.data === "string" ? rec.data : void 0;
|
|
17306
17300
|
const mimeType = typeof rec.mimeType === "string" ? rec.mimeType : void 0;
|
|
17307
17301
|
if (!data || !mimeType || data.length === 0 || mimeType.length === 0) continue;
|
|
17308
|
-
|
|
17302
|
+
let uri = typeof rec.uri === "string" && rec.uri.length > 0 ? rec.uri : void 0;
|
|
17303
|
+
if (!uri && typeof rec.path === "string" && rec.path.length > 0) {
|
|
17304
|
+
uri = rec.path.startsWith("file:") ? rec.path : `file://${rec.path}`;
|
|
17305
|
+
}
|
|
17309
17306
|
images.push({ data, mimeType, ...uri ? { uri } : {} });
|
|
17310
17307
|
}
|
|
17311
17308
|
return images.length > 0 ? images : void 0;
|
|
@@ -129072,11 +129072,6 @@ var init_openai_responses = __esm({
|
|
|
129072
129072
|
});
|
|
129073
129073
|
|
|
129074
129074
|
// ../plugin-sdk/src/index.ts
|
|
129075
|
-
import {
|
|
129076
|
-
WORKFLOW_EXTENSION_SCHEMA_VERSION,
|
|
129077
|
-
workflowExtensionRegistryId,
|
|
129078
|
-
createBoardActionServices
|
|
129079
|
-
} from "@fusion/core";
|
|
129080
129075
|
function definePlugin(plugin2) {
|
|
129081
129076
|
return plugin2;
|
|
129082
129077
|
}
|
|
@@ -5,11 +5,6 @@ var __export = (target, all) => {
|
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
// ../plugin-sdk/src/index.ts
|
|
8
|
-
import {
|
|
9
|
-
WORKFLOW_EXTENSION_SCHEMA_VERSION,
|
|
10
|
-
workflowExtensionRegistryId,
|
|
11
|
-
createBoardActionServices
|
|
12
|
-
} from "@fusion/core";
|
|
13
8
|
function definePlugin(plugin2) {
|
|
14
9
|
return plugin2;
|
|
15
10
|
}
|
|
@@ -16337,7 +16332,6 @@ var RequestError = class _RequestError extends Error {
|
|
|
16337
16332
|
|
|
16338
16333
|
// ../../plugins/fusion-plugin-grok-runtime/src/acp/process-manager.ts
|
|
16339
16334
|
import { spawn } from "node:child_process";
|
|
16340
|
-
import { redactSecrets } from "@fusion/core";
|
|
16341
16335
|
function debugLog(message) {
|
|
16342
16336
|
if (process.env.PI_ACP_DEBUG !== "1" && process.env.FUSION_GROK_ACP_DEBUG !== "1") return;
|
|
16343
16337
|
console.error(`[grok-acp] ${message}`);
|
|
@@ -17293,7 +17287,10 @@ function extractPromptImagesFromOptions(options) {
|
|
|
17293
17287
|
const data = typeof rec.data === "string" ? rec.data : void 0;
|
|
17294
17288
|
const mimeType = typeof rec.mimeType === "string" ? rec.mimeType : void 0;
|
|
17295
17289
|
if (!data || !mimeType || data.length === 0 || mimeType.length === 0) continue;
|
|
17296
|
-
|
|
17290
|
+
let uri = typeof rec.uri === "string" && rec.uri.length > 0 ? rec.uri : void 0;
|
|
17291
|
+
if (!uri && typeof rec.path === "string" && rec.path.length > 0) {
|
|
17292
|
+
uri = rec.path.startsWith("file:") ? rec.path : `file://${rec.path}`;
|
|
17293
|
+
}
|
|
17297
17294
|
images.push({ data, mimeType, ...uri ? { uri } : {} });
|
|
17298
17295
|
}
|
|
17299
17296
|
return images.length > 0 ? images : void 0;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
|
+
import { copyTextToClipboard } from "@fusion/dashboard/app/utils/copyToClipboard";
|
|
2
3
|
import { getShareBlocks } from "../api.js";
|
|
3
4
|
import type { ReportRecord } from "../types.js";
|
|
4
5
|
import type { ShareBlocks } from "../../share-blocks.js";
|
|
@@ -35,7 +36,9 @@ export function ShareBlocksPanel({ report }: { report: ReportRecord }) {
|
|
|
35
36
|
</div>
|
|
36
37
|
<textarea className="input share-blocks-panel__content" readOnly value={value} />
|
|
37
38
|
<button className="btn btn-sm" onClick={async () => {
|
|
38
|
-
|
|
39
|
+
/* FNXC:Clipboard 2026-07-12-00:00: Direct navigator.clipboard.writeText crashes or mis-reports on non-secure origins such as mobile http://fusionstudio:4040; copyTextToClipboard centralizes the secure-context guard and execCommand fallback. */
|
|
40
|
+
const copiedToClipboard = await copyTextToClipboard(value);
|
|
41
|
+
if (!copiedToClipboard) return;
|
|
39
42
|
setCopied(true);
|
|
40
43
|
setTimeout(() => setCopied(false), 1000);
|
|
41
44
|
}}>{copied ? "Copied" : "Copy"}</button>
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
2
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
3
|
import { ShareBlocksPanel } from "../ShareBlocksPanel.js";
|
|
4
4
|
|
|
5
|
+
const originalClipboard = navigator.clipboard;
|
|
6
|
+
const originalExecCommand = document.execCommand;
|
|
7
|
+
|
|
5
8
|
const getShareBlocks = vi.fn();
|
|
6
9
|
vi.mock("../../api.js", () => ({ getShareBlocks: (...args: unknown[]) => getShareBlocks(...args) }));
|
|
7
10
|
|
|
8
11
|
describe("ShareBlocksPanel", () => {
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
Object.defineProperty(navigator, "clipboard", { configurable: true, value: originalClipboard });
|
|
14
|
+
Object.defineProperty(document, "execCommand", { configurable: true, value: originalExecCommand });
|
|
15
|
+
getShareBlocks.mockReset();
|
|
16
|
+
});
|
|
17
|
+
|
|
9
18
|
it("renders tabs and copies selected block", async () => {
|
|
10
19
|
getShareBlocks.mockResolvedValue({ plainText: "a", markdown: "b", slack: "c", emailHtml: "d" });
|
|
11
|
-
Object.
|
|
20
|
+
Object.defineProperty(navigator, "clipboard", { configurable: true, value: { writeText: vi.fn().mockResolvedValue(undefined) } });
|
|
12
21
|
render(<ShareBlocksPanel report={{ id: "rep_1" } as any} />);
|
|
13
22
|
await screen.findByText("Plain Text");
|
|
14
23
|
fireEvent.click(screen.getByText("Markdown"));
|
|
@@ -16,6 +25,36 @@ describe("ShareBlocksPanel", () => {
|
|
|
16
25
|
await waitFor(() => expect(navigator.clipboard.writeText).toHaveBeenCalledWith("b"));
|
|
17
26
|
});
|
|
18
27
|
|
|
28
|
+
it("copies selected block through execCommand when Clipboard API is unavailable", async () => {
|
|
29
|
+
getShareBlocks.mockResolvedValue({ plainText: "a", markdown: "b", slack: "c", emailHtml: "d" });
|
|
30
|
+
const execCommand = vi.fn().mockReturnValue(true);
|
|
31
|
+
Object.defineProperty(navigator, "clipboard", { configurable: true, value: undefined });
|
|
32
|
+
Object.defineProperty(document, "execCommand", { configurable: true, value: execCommand });
|
|
33
|
+
|
|
34
|
+
render(<ShareBlocksPanel report={{ id: "rep_1" } as any} />);
|
|
35
|
+
await screen.findByText("Plain Text");
|
|
36
|
+
fireEvent.click(screen.getByText("Markdown"));
|
|
37
|
+
fireEvent.click(screen.getByText("Copy"));
|
|
38
|
+
|
|
39
|
+
await waitFor(() => expect(execCommand).toHaveBeenCalledWith("copy"));
|
|
40
|
+
expect(screen.getByText("Copied")).toBeInTheDocument();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("does not show copied when both clipboard paths fail", async () => {
|
|
44
|
+
getShareBlocks.mockResolvedValue({ plainText: "a", markdown: "b", slack: "c", emailHtml: "d" });
|
|
45
|
+
const execCommand = vi.fn().mockReturnValue(false);
|
|
46
|
+
Object.defineProperty(navigator, "clipboard", { configurable: true, value: undefined });
|
|
47
|
+
Object.defineProperty(document, "execCommand", { configurable: true, value: execCommand });
|
|
48
|
+
|
|
49
|
+
render(<ShareBlocksPanel report={{ id: "rep_1" } as any} />);
|
|
50
|
+
await screen.findByText("Plain Text");
|
|
51
|
+
fireEvent.click(screen.getByText("Copy"));
|
|
52
|
+
|
|
53
|
+
await waitFor(() => expect(execCommand).toHaveBeenCalledWith("copy"));
|
|
54
|
+
expect(screen.getByText("Copy")).toBeInTheDocument();
|
|
55
|
+
expect(screen.queryByText("Copied")).not.toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
|
|
19
58
|
it("shows locked message on 409", async () => {
|
|
20
59
|
getShareBlocks.mockRejectedValue(new Error("409 Conflict"));
|
|
21
60
|
render(<ShareBlocksPanel report={{ id: "rep_1" } as any} />);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
package/skill/fusion/SKILL.md
CHANGED
|
@@ -28,7 +28,7 @@ Mission → Milestone → Slice → Feature → Task
|
|
|
28
28
|
**Tool categories:**
|
|
29
29
|
<!-- BEGIN: tool-categories (auto-generated by scripts/sync-fusion-skill-tools.mjs — do not edit by hand) -->
|
|
30
30
|
- **Task tools** — `fn_task_create`, `fn_task_update`, `fn_task_list`, `fn_task_show`, `fn_task_attach`, `fn_task_pause`, `fn_task_unpause`, `fn_task_retry`, `fn_task_bypass_review`, `fn_task_duplicate`, `fn_task_refine`, `fn_task_archive`, `fn_task_unarchive`, `fn_task_delete`, `fn_task_browse_gitlab_project_issues`, `fn_task_import_gitlab_project_issues`, `fn_task_browse_gitlab_group_issues`, `fn_task_import_gitlab_group_issues`, `fn_task_browse_gitlab_merge_requests`, `fn_task_import_gitlab_merge_requests`, `fn_task_plan`
|
|
31
|
-
- **Workflow tools** — `fn_workflow_list`, `fn_workflow_get`, `fn_workflow_create`, `fn_workflow_update`, `fn_workflow_delete`, `fn_workflow_settings`, `fn_trait_list`, `fn_workflow_select`
|
|
31
|
+
- **Workflow tools** — `fn_workflow_list`, `fn_workflow_get`, `fn_workflow_validate`, `fn_workflow_create`, `fn_workflow_update`, `fn_workflow_delete`, `fn_workflow_settings`, `fn_trait_list`, `fn_workflow_select`
|
|
32
32
|
- **GitHub tools** — `fn_task_import_github`, `fn_task_import_github_issue`, `fn_task_browse_github_issues`
|
|
33
33
|
- **Mission tools** — `fn_mission_create`, `fn_mission_list`, `fn_mission_show`, `fn_mission_list_goals`, `fn_mission_link_goal`, `fn_mission_unlink_goal`, `fn_mission_backfill_assertions`, `fn_mission_delete`, `fn_mission_update`, `fn_milestone_add`, `fn_slice_add`, `fn_feature_add`, `fn_feature_delete`, `fn_slice_delete`, `fn_milestone_delete`, `fn_slice_activate`, `fn_feature_link_task`, `fn_feature_update`, `fn_milestone_update`
|
|
34
34
|
- **Goal tools** — `fn_goal_list`, `fn_goal_create`, `fn_goal_archive`, `fn_goal_show`
|
|
@@ -27,6 +27,7 @@ This reference documents tools injected by the engine at runtime for specific ag
|
|
|
27
27
|
| `fn_workflow_settings` | executor | Read/write a workflow's per-`(workflow, project)` setting **values** (`get` returns `{stored, effective, orphaned}`; `set` writes `values` and returns `{stored, effective, orphaned}`, with `null` clearing an override — including any stored value for an orphaned key). Validated against the named workflow's declared settings; built-in **values** are writable though built-in **declarations** are not; invalid values return a typed rejection list and persist nothing | `action` (`get` \| `set`), `workflow_id` (string), `values?` (object keyed by setting id) |
|
|
28
28
|
| `fn_workflow_list` | executor, chat, planning | List the project's custom workflows (read-only built-ins plus user definitions) | none |
|
|
29
29
|
| `fn_workflow_get` | executor, chat, planning | Fetch one workflow definition by id — name, description, builtin flag, and the full IR (nodes/edges/columns/artifacts/fields) as JSON | `workflow_id` (string) |
|
|
30
|
+
| `fn_workflow_validate` | executor, chat, planning | Dry-run validate a Fusion workflow IR without creating or mutating any workflow; runs the same server-side IR, trait, code-node, and column-agent validation as create/update and returns typed errors | `workflow_id?` (string), `ir?` (object) |
|
|
30
31
|
| `fn_workflow_select` | executor, chat, planning | Assign a custom workflow to a task (defaults to the current task) | `workflow_id` (string), `task_id?` (string) |
|
|
31
32
|
| `fn_workflow_create` | executor, chat, planning | Create a custom workflow definition from a graph IR (validated server-side). v2 IR supports step-inversion constructs: `parse-steps`, `foreach` (mode/isolation/concurrency/maxReworkCycles), `step-execute`, `step-review`, `code` nodes, `rework` edges, plus `artifacts` and custom `fields` declarations | `name` (string), `description?` (string), `ir` (object), `layout?` (object) |
|
|
32
33
|
| `fn_workflow_update` | executor, chat, planning | Update a custom workflow definition's name/description/ir/layout (built-ins cannot be edited; same step-inversion IR constructs as create; editing `fields` orphans rather than destroys existing task values) | `workflow_id` (string), `name?` (string), `description?` (string), `ir?` (object), `layout?` (object), `rehome_to?` (string) |
|
|
@@ -223,6 +223,16 @@ Fetch a Fusion workflow definition by ID, including its resolved workflow IR.
|
|
|
223
223
|
|-----------|------|----------|-------------|
|
|
224
224
|
| `workflow_id` | string | ✓ | The workflow definition ID to fetch (e.g. 'WF-003', or a 'builtin:*' id). Use fn_workflow_list to discover available IDs. |
|
|
225
225
|
|
|
226
|
+
### fn_workflow_validate
|
|
227
|
+
|
|
228
|
+
Dry-run validate a Fusion workflow IR without creating or mutating any workflow.
|
|
229
|
+
|
|
230
|
+
| Parameter | Type | Required | Description |
|
|
231
|
+
|-----------|------|----------|-------------|
|
|
232
|
+
| `workflow_id` | string | — | Workflow definition ID to dry-run validate (e.g. 'WF-003', or a 'builtin:*' id). Use either workflow_id or ir; validation performs no persistence. |
|
|
233
|
+
| `ir` | unknown | — | Inline workflow graph (intermediate representation) to dry-run validate. Use either ir or workflow_id; validation performs no persistence. |
|
|
234
|
+
| `confirm_policy_escalation` | boolean | — | Set true to confirm that validating column-agent bindings may allow a broader agent policy. This is checked exactly like create/update but never persists anything. |
|
|
235
|
+
|
|
226
236
|
### fn_workflow_create
|
|
227
237
|
|
|
228
238
|
Create a custom Fusion workflow definition from a validated workflow IR.
|
|
@@ -14,6 +14,7 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
|
|
|
14
14
|
|------|---------|
|
|
15
15
|
| `fn_workflow_list` | List built-in and custom Fusion workflow definitions available in this project. |
|
|
16
16
|
| `fn_workflow_get` | Fetch a Fusion workflow definition by ID, including its resolved workflow IR. |
|
|
17
|
+
| `fn_workflow_validate` | Dry-run validate a Fusion workflow IR without creating or mutating any workflow. |
|
|
17
18
|
| `fn_workflow_create` | Create a custom Fusion workflow definition from a validated workflow IR. |
|
|
18
19
|
| `fn_workflow_update` | Update a custom Fusion workflow definition's metadata, IR, or layout. |
|
|
19
20
|
| `fn_workflow_delete` | Delete a custom Fusion workflow definition; built-in workflows are protected. |
|