@runfusion/fusion 0.51.0 → 0.52.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 (136) hide show
  1. package/dist/bin.js +9038 -4527
  2. package/dist/client/.vite/manifest.json +329 -329
  3. package/dist/client/assets/{AgentDetailView-CjwOlcMI.js → AgentDetailView-C-PM8cwG.js} +1 -1
  4. package/dist/client/assets/{AgentPermissionPolicyEditor-CD8znNHS.js → AgentPermissionPolicyEditor-DrVW4VPc.js} +1 -1
  5. package/dist/client/assets/{AgentsView-CTjNaKu-.js → AgentsView-DJJO0laF.js} +6 -11
  6. package/dist/client/assets/ChatView-C7uTm5hO.js +16 -0
  7. package/dist/client/assets/ChatView-D_2wBIIx.css +1 -0
  8. package/dist/client/assets/CommandCenter-CKvo0MuO.js +71 -0
  9. package/dist/client/assets/{DevServerView-BE_o7v9j.js → DevServerView-BHLG4Mxg.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-BpcPo65A.js → DirectoryPicker-CRY-rpnj.js} +1 -1
  11. package/dist/client/assets/{DocumentsView-Cpma23hu.js → DocumentsView-DhC4dnXD.js} +1 -1
  12. package/dist/client/assets/{EvalsView-DYSobhb7.js → EvalsView-DsnLOVZB.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-D_iQqD-n.js → ExperimentalAgentOnboardingModal-B4iFX60E.js} +1 -1
  14. package/dist/client/assets/GoalsView-D5bzq6W9.js +2 -0
  15. package/dist/client/assets/{InsightsView-DZyMvYQ8.js → InsightsView-Drpu72M4.js} +1 -1
  16. package/dist/client/assets/{MemoryView-B9Z6cRma.js → MemoryView-auLBP3UW.js} +1 -1
  17. package/dist/client/assets/{PiExtensionsManager-BQt3JU60.js → PiExtensionsManager-RlbkXf_t.js} +1 -1
  18. package/dist/client/assets/{PluginManager-DEsUstVo.js → PluginManager-BJMUacpG.js} +1 -1
  19. package/dist/client/assets/{PullRequestView-B7k8ogy4.js → PullRequestView-344B9WF-.js} +1 -1
  20. package/dist/client/assets/{ResearchView-BseF58_R.js → ResearchView-BNqt-f53.js} +1 -1
  21. package/dist/client/assets/{SecretsView-bkNS5VBC.js → SecretsView-Be8Tm8It.js} +1 -1
  22. package/dist/client/assets/SessionTerminal-CumHUelZ.js +2 -0
  23. package/dist/client/assets/SettingsModal-AJfer-ve.js +21 -0
  24. package/dist/client/assets/{SettingsModal-DAH7LuLw.js → SettingsModal-B28DuhaN.js} +1 -1
  25. package/dist/client/assets/SettingsModal-CaE4JYxi.css +1 -0
  26. package/dist/client/assets/{SetupWizardModal-Bm6bG31V.js → SetupWizardModal-y2j9aZoi.js} +2 -2
  27. package/dist/client/assets/ShadcnColorPicker-Cc72uPKJ.js +11 -0
  28. package/dist/client/assets/ShadcnColorPicker-CyeAnJUU.css +1 -0
  29. package/dist/client/assets/{SkillsView-D_UEJY_f.js → SkillsView-HQp7UTdA.js} +1 -1
  30. package/dist/client/assets/{TodoView-CMCoPep1.js → TodoView-DF7_qWGH.js} +1 -1
  31. package/dist/client/assets/WorkflowNodeEditor-BjpqTIYE.js +8 -0
  32. package/dist/client/assets/WorkflowNodeEditor-Df-_206_.css +1 -0
  33. package/dist/client/assets/{agentSkills-BiipFw1z.js → agentSkills-Cy_HrYHd.js} +1 -1
  34. package/dist/client/assets/{app-A1yCJR4Q.js → app-CGubyqAW.js} +3 -3
  35. package/dist/client/assets/{app-T5iMjZpX.js → app-CrQpHbIs.js} +1 -1
  36. package/dist/client/assets/{app-Bfiafek7.js → app-DboK-0Ty.js} +3 -3
  37. package/dist/client/assets/{app-Bh-Xj32t.js → app-DjnYET2y.js} +1 -1
  38. package/dist/client/assets/{app-zR_n4GL2.js → app-MacS555z.js} +1 -1
  39. package/dist/client/assets/{app-DxJHfzxz.js → app-nvVayIeU.js} +3 -3
  40. package/dist/client/assets/{architectureDiagram-3BPJPVTR-glwWkaDt.js → architectureDiagram-3BPJPVTR-4ur4sxlr.js} +1 -1
  41. package/dist/client/assets/{blockDiagram-GPEHLZMM-C8DhxwG4.js → blockDiagram-GPEHLZMM-BgZeqq_q.js} +1 -1
  42. package/dist/client/assets/{c4Diagram-AAUBKEIU-CQXf6PzI.js → c4Diagram-AAUBKEIU-BQtdOIrm.js} +1 -1
  43. package/dist/client/assets/channel-Dn5XowfJ.js +1 -0
  44. package/dist/client/assets/{chunk-2J33WTMH-kak65s83.js → chunk-2J33WTMH-C1k1PBy1.js} +1 -1
  45. package/dist/client/assets/{chunk-4BX2VUAB-B_yEpoxU.js → chunk-4BX2VUAB-hNujwvSn.js} +1 -1
  46. package/dist/client/assets/{chunk-55IACEB6-C9lQVeH5.js → chunk-55IACEB6-CnXV9LyI.js} +1 -1
  47. package/dist/client/assets/{chunk-727SXJPM-D4SVzqNs.js → chunk-727SXJPM-B-ocMdYN.js} +1 -1
  48. package/dist/client/assets/{chunk-AQP2D5EJ-DBHuj4BH.js → chunk-AQP2D5EJ-CWNRUL6C.js} +1 -1
  49. package/dist/client/assets/{chunk-FMBD7UC4-BJ3ghjau.js → chunk-FMBD7UC4-DerrCiYe.js} +1 -1
  50. package/dist/client/assets/{chunk-ND2GUHAM-CE4tkh6e.js → chunk-ND2GUHAM-BfcSPlX-.js} +1 -1
  51. package/dist/client/assets/{chunk-QZHKN3VN-DmVw_cEu.js → chunk-QZHKN3VN-BaWScAds.js} +1 -1
  52. package/dist/client/assets/classDiagram-4FO5ZUOK-zSOW-KNk.js +1 -0
  53. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-zSOW-KNk.js +1 -0
  54. package/dist/client/assets/{cose-bilkent-S5V4N54A-DI_-BOYE.js → cose-bilkent-S5V4N54A-n0Oeinz2.js} +1 -1
  55. package/dist/client/assets/{dagre-BM42HDAG-ywUbHZxt.js → dagre-BM42HDAG-CUtehSt2.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-r4NTTh_X.js → dashboard-view-BW3GHqgb.js} +218 -218
  57. package/dist/client/assets/{dashboard-view-DJvdban3.js → dashboard-view-DWKCxtr5.js} +1 -1
  58. package/dist/client/assets/{diagram-2AECGRRQ-CAGucHCe.js → diagram-2AECGRRQ-Bz4aOzhR.js} +1 -1
  59. package/dist/client/assets/{diagram-5GNKFQAL-D_1uzVtW.js → diagram-5GNKFQAL-UoxIMwPf.js} +1 -1
  60. package/dist/client/assets/{diagram-KO2AKTUF-D7zY4Nlm.js → diagram-KO2AKTUF-BYR7hloS.js} +1 -1
  61. package/dist/client/assets/{diagram-LMA3HP47-C1T9eOzA.js → diagram-LMA3HP47-BR9MaP8U.js} +1 -1
  62. package/dist/client/assets/{diagram-OG6HWLK6-sWxhPvzU.js → diagram-OG6HWLK6-BOfldYHv.js} +1 -1
  63. package/dist/client/assets/{erDiagram-TEJ5UH35-DfHtnaNg.js → erDiagram-TEJ5UH35-B8x9mfOs.js} +1 -1
  64. package/dist/client/assets/{flowDiagram-I6XJVG4X-Brbb_Jlh.js → flowDiagram-I6XJVG4X-DBnTroCV.js} +1 -1
  65. package/dist/client/assets/{folder-open-BLwukrE0.js → folder-open-CFze34Eq.js} +1 -1
  66. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CLvZ7891.js → ganttDiagram-6RSMTGT7-BfzFy7iz.js} +1 -1
  67. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DD56Jsa3.js → gitGraphDiagram-PVQCEYII-CNTFu6IY.js} +1 -1
  68. package/dist/client/assets/index-QnHUwSjw.css +1 -0
  69. package/dist/client/assets/index-Y-vyXPPN.js +1331 -0
  70. package/dist/client/assets/{infoDiagram-5YYISTIA-uXai801q.js → infoDiagram-5YYISTIA-DJiBRaAl.js} +1 -1
  71. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-C_bWlUP_.js → ishikawaDiagram-YF4QCWOH-CIY9t4cc.js} +1 -1
  72. package/dist/client/assets/{journeyDiagram-JHISSGLW-B2kB9niE.js → journeyDiagram-JHISSGLW-HLMZmcjY.js} +1 -1
  73. package/dist/client/assets/{kanban-definition-UN3LZRKU-BJwlpR9z.js → kanban-definition-UN3LZRKU-x9nKoxCI.js} +1 -1
  74. package/dist/client/assets/{linear-dXivciGL.js → linear-CwI45w2t.js} +1 -1
  75. package/dist/client/assets/{mermaid.core-0hUjZF5S.js → mermaid.core-pHkdB6fb.js} +4 -4
  76. package/dist/client/assets/{mindmap-definition-RKZ34NQL-DsTgTpX-.js → mindmap-definition-RKZ34NQL-Bs_4Tofu.js} +1 -1
  77. package/dist/client/assets/{pieDiagram-4H26LBE5-BUQsNWHN.js → pieDiagram-4H26LBE5-BGHz9JGZ.js} +1 -1
  78. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DOYWgfAz.js → quadrantDiagram-W4KKPZXB-xHSR7cAR.js} +1 -1
  79. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DUnPKaMd.js → requirementDiagram-4Y6WPE33-D7YMNM44.js} +1 -1
  80. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Btl4NRo-.js → sankeyDiagram-5OEKKPKP-OAXuab3Y.js} +1 -1
  81. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-b0hyJ_Wr.js → sequenceDiagram-3UESZ5HK-BZCjKFVL.js} +1 -1
  82. package/dist/client/assets/{shield-alert-yWvC7t2v.js → shield-alert-BBK8Risa.js} +1 -1
  83. package/dist/client/assets/{stateDiagram-AJRCARHV-orREjkd9.js → stateDiagram-AJRCARHV-COnJQqA4.js} +1 -1
  84. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DYJRRNh-.js → stateDiagram-v2-BHNVJYJU-Diml4Nhm.js} +1 -1
  85. package/dist/client/assets/{time-DoDTxsna.js → time-Ckmi30gH.js} +1 -1
  86. package/dist/client/assets/{timeline-definition-PNZ67QCA-DZga7lqO.js → timeline-definition-PNZ67QCA-DHIKvV9L.js} +1 -1
  87. package/dist/client/assets/{upload-BsYRkl_8.js → upload-CqUJUdZW.js} +1 -1
  88. package/dist/client/assets/{users-dyoJEvrM.js → users-CAE-FEzI.js} +1 -1
  89. package/dist/client/assets/{vendor-reactflow-Bg-Qjzh8.js → vendor-reactflow-CnI7NMXG.js} +1 -1
  90. package/dist/client/assets/{vennDiagram-CIIHVFJN-C2P26V71.js → vennDiagram-CIIHVFJN-o9AxLDoL.js} +1 -1
  91. package/dist/client/assets/{wardley-L42UT6IY-ckctH9bL.js → wardley-L42UT6IY-B7MIazje.js} +1 -1
  92. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-9It3QAYs.js → wardleyDiagram-YWT4CUSO-B6qUJx0N.js} +1 -1
  93. package/dist/client/assets/{xychartDiagram-2RQKCTM6-Dj3sSBqg.js → xychartDiagram-2RQKCTM6-13mSXuCA.js} +1 -1
  94. package/dist/client/index.html +8 -8
  95. package/dist/client/theme-data.css +140 -0
  96. package/dist/client/version.json +1 -1
  97. package/dist/droid-cli/package.json +1 -1
  98. package/dist/extension.js +7126 -3447
  99. package/dist/pi-claude-cli/index.ts +13 -0
  100. package/dist/pi-claude-cli/package.json +1 -1
  101. package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +2 -2
  102. package/dist/pi-claude-cli/src/__tests__/provider.test.ts +27 -4
  103. package/dist/plugin-sdk/index.d.ts +32 -1
  104. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  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 +1 -1
  114. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  116. package/package.json +1 -1
  117. package/skill/fusion/SKILL.md +1 -0
  118. package/skill/fusion/references/engine-tools.md +3 -3
  119. package/skill/fusion/references/extension-tools.md +81 -4
  120. package/skill/fusion/references/fusion-capabilities.md +8 -0
  121. package/dist/client/assets/ChatView-DCWypaw3.js +0 -19
  122. package/dist/client/assets/ChatView-DwIIrJxb.css +0 -1
  123. package/dist/client/assets/CommandCenter-C4v0FMxx.js +0 -71
  124. package/dist/client/assets/GoalsView-B6Wfxk59.js +0 -2
  125. package/dist/client/assets/SessionTerminal-BSllyqgF.js +0 -2
  126. package/dist/client/assets/SettingsModal-Dso0K76J.js +0 -21
  127. package/dist/client/assets/SettingsModal-tUDR6nJ9.css +0 -1
  128. package/dist/client/assets/ShadcnColorPicker-CLiOvo7W.js +0 -11
  129. package/dist/client/assets/ShadcnColorPicker-CzZo9UOD.css +0 -1
  130. package/dist/client/assets/WorkflowNodeEditor-BeQcn0Wa.js +0 -8
  131. package/dist/client/assets/WorkflowNodeEditor-WYIxHTxY.css +0 -1
  132. package/dist/client/assets/channel-BY6zFSV1.js +0 -1
  133. package/dist/client/assets/classDiagram-4FO5ZUOK-CeX_WCiC.js +0 -1
  134. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CeX_WCiC.js +0 -1
  135. package/dist/client/assets/index-DAv17W73.js +0 -1317
  136. package/dist/client/assets/index-DhBnj8YN.css +0 -1
@@ -190,6 +190,19 @@ export default function (pi: ExtensionAPI) {
190
190
  // catalog catches up.
191
191
  // https://platform.claude.com/docs/en/about-claude/models/overview
192
192
  const extraModels: typeof catalogModels = [
193
+ /*
194
+ * FNXC:ModelCatalog 2026-06-30-12:31:
195
+ * The vendored Claude CLI provider has its own model list because it exposes `pi-claude-cli` independently from direct `anthropic`. Add Claude Sonnet 5 here as supplemental metadata so Claude CLI users can select it before the upstream pi-ai catalog catches up, while the dedupe below prevents duplicate rows after it does.
196
+ */
197
+ {
198
+ id: "claude-sonnet-5",
199
+ name: "Claude Sonnet 5",
200
+ reasoning: true,
201
+ input: ["text", "image"],
202
+ cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
203
+ contextWindow: 1_000_000,
204
+ maxTokens: 128_000,
205
+ },
193
206
  {
194
207
  id: "claude-opus-4-7",
195
208
  name: "Claude Opus 4.7",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/pi-claude-cli",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "main": "index.ts",
@@ -61,14 +61,14 @@ describe("buildClaudeSpawnArgs", () => {
61
61
  });
62
62
 
63
63
  it("builds args including model and optional session/mcp flags", () => {
64
- const args = buildClaudeSpawnArgs("claude-sonnet-4-6", undefined, {
64
+ const args = buildClaudeSpawnArgs("claude-sonnet-5", undefined, {
65
65
  resumeSessionId: "sess-1",
66
66
  effort: "high",
67
67
  mcpConfigPath: "/tmp/mcp.json",
68
68
  });
69
69
 
70
70
  expect(args).toContain("--model");
71
- expect(args).toContain("claude-sonnet-4-6");
71
+ expect(args[args.indexOf("--model") + 1]).toBe("claude-sonnet-5");
72
72
  expect(args).toContain("--resume");
73
73
  expect(args).toContain("sess-1");
74
74
  expect(args).toContain("--effort");
@@ -127,6 +127,7 @@ describe("provider registration (default export)", () => {
127
127
  const modelIds = new Set(config.models.map((m: { id: string }) => m.id));
128
128
 
129
129
  for (const id of [
130
+ "claude-sonnet-5",
130
131
  "claude-opus-4-7",
131
132
  "claude-sonnet-4-6",
132
133
  "claude-sonnet-4-5",
@@ -134,6 +135,15 @@ describe("provider registration (default export)", () => {
134
135
  ]) {
135
136
  expect(modelIds.has(id)).toBe(true);
136
137
  }
138
+
139
+ expect(config.models.find((m: { id: string }) => m.id === "claude-sonnet-5")).toMatchObject({
140
+ name: "Claude Sonnet 5",
141
+ reasoning: true,
142
+ input: ["text", "image"],
143
+ cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
144
+ contextWindow: 1_000_000,
145
+ maxTokens: 128_000,
146
+ });
137
147
  });
138
148
 
139
149
  it("deduplicates extra models when catalog already includes them", async () => {
@@ -143,6 +153,17 @@ describe("provider registration (default export)", () => {
143
153
 
144
154
  getModelsMock.mockReturnValueOnce([
145
155
  ...mockModels,
156
+ {
157
+ id: "claude-sonnet-5",
158
+ name: "Claude Sonnet 5 Upstream",
159
+ api: "anthropic",
160
+ provider: "anthropic",
161
+ reasoning: true,
162
+ input: ["text", "image"],
163
+ cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
164
+ contextWindow: 1_000_000,
165
+ maxTokens: 128_000,
166
+ } as any,
146
167
  {
147
168
  id: "claude-sonnet-4-6",
148
169
  name: "Claude Sonnet 4.6",
@@ -160,10 +181,12 @@ describe("provider registration (default export)", () => {
160
181
  mod.default(mockPi);
161
182
 
162
183
  const config = registerProvider.mock.calls[0][1];
163
- const matches = config.models.filter(
164
- (m: { id: string }) => m.id === "claude-sonnet-4-6",
165
- );
166
- expect(matches).toHaveLength(1);
184
+ for (const id of ["claude-sonnet-5", "claude-sonnet-4-6"]) {
185
+ const matches = config.models.filter(
186
+ (m: { id: string }) => m.id === id,
187
+ );
188
+ expect(matches).toHaveLength(1);
189
+ }
167
190
  });
168
191
  });
169
192
 
@@ -689,6 +689,13 @@ interface CustomFieldRejection {
689
689
  detail: string;
690
690
  }
691
691
 
692
+ type WorkflowLifecycleWarningCode = "missing-completion-summary" | "missing-merge-region" | "unsafe-terminal-before-merge" | "optional-group-after-execution" | "review-gate-without-failure-route";
693
+ interface WorkflowLifecycleWarning {
694
+ code: WorkflowLifecycleWarningCode;
695
+ nodeId?: string;
696
+ message: string;
697
+ }
698
+
692
699
  interface WorkflowNodeLayout {
693
700
  x: number;
694
701
  y: number;
@@ -698,15 +705,18 @@ interface WorkflowDefinition {
698
705
  id: string;
699
706
  name: string;
700
707
  description: string;
708
+ icon?: string;
701
709
  kind: WorkflowDefinitionKind;
702
710
  ir: WorkflowIr;
703
711
  layout: Record<string, WorkflowNodeLayout>;
712
+ lifecycleWarnings?: WorkflowLifecycleWarning[];
704
713
  createdAt: string;
705
714
  updatedAt: string;
706
715
  }
707
716
  interface WorkflowDefinitionInput {
708
717
  name: string;
709
718
  description?: string;
719
+ icon?: string;
710
720
  ir: WorkflowIr;
711
721
  layout?: Record<string, WorkflowNodeLayout>;
712
722
  kind?: WorkflowDefinitionKind;
@@ -714,6 +724,7 @@ interface WorkflowDefinitionInput {
714
724
  interface WorkflowDefinitionUpdate {
715
725
  name?: string;
716
726
  description?: string;
727
+ icon?: string | null;
717
728
  ir?: WorkflowIr;
718
729
  layout?: Record<string, WorkflowNodeLayout>;
719
730
  rehomeTo?: string;
@@ -2662,6 +2673,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
2662
2673
  private scanAndRecordCitations;
2663
2674
  private getTaskSelectClause;
2664
2675
  private computeTimedExecutionMs;
2676
+ private getLatestAgentLogActivityMs;
2677
+ private hasFreshAgentLogActivitySinceTaskUpdate;
2665
2678
  private getTaskSelectClauseWithActivityLogLimit;
2666
2679
  private createTaskPersistSerializationContext;
2667
2680
  private getTaskPersistValues;
@@ -2902,6 +2915,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
2902
2915
  handoffToReview(taskId: string, opts: HandoffToReviewOptions): Promise<Task>;
2903
2916
  private resolveWorkflowMoveActor;
2904
2917
  private resolveWorkflowBypassGuards;
2918
+ private isWorkflowDoneBypassGuardedTask;
2905
2919
  private shouldSkipWorkflowMovePolicies;
2906
2920
  private prepareWorkflowMovePolicyPreflight;
2907
2921
  private evaluateWorkflowMovePolicies;
@@ -3001,6 +3015,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
3001
3015
  githubTracking?: TaskGithubTracking | null;
3002
3016
  tokenUsage?: TaskTokenUsage | null;
3003
3017
  modifiedFiles?: string[] | null;
3018
+ workflowTransitionNotification?: Task["workflowTransitionNotification"] | null;
3004
3019
  missionId?: string | null;
3005
3020
  sliceId?: string | null;
3006
3021
  }, runContext?: RunMutationContext): Promise<Task>;
@@ -4328,7 +4343,7 @@ declare const COMPLETION_DOCUMENTATION_MODES: readonly ["off", "changeset", "cha
4328
4343
  type CompletionDocumentationMode = (typeof COMPLETION_DOCUMENTATION_MODES)[number];
4329
4344
  declare const THEME_MODES: readonly ["dark", "light", "system"];
4330
4345
  type ThemeMode = (typeof THEME_MODES)[number];
4331
- declare const COLOR_THEMES: readonly ["default", "ocean", "forest", "sunset", "zen", "berry", "high-contrast", "industrial", "monochrome", "slate", "ash", "air", "graphite", "silver", "solarized", "factory", "factory-mono", "ayu", "one-dark", "nord", "dracula", "gruvbox", "tokyo-night", "catppuccin-mocha", "github-dark", "everforest", "rose-pine", "kanagawa", "night-owl", "palenight", "monokai-pro", "slime", "brutalist", "neon-city", "parchment", "terminal", "glass", "horizon", "vitesse", "outrun", "snazzy", "porple", "espresso", "mars", "poimandres", "ember", "rust", "copper", "foundry", "carbon", "sandstone", "lagoon", "frost", "lavender", "neon-bloom", "sepia", "shadcn", "shadcn-custom", "shadcn-blue", "shadcn-green", "shadcn-red", "shadcn-purple", "shadcn-pink", "shadcn-orange", "shadcn-yellow", "shadcn-mono-red", "shadcn-mono-blue", "shadcn-mono-green", "shadcn-mono-purple", "shadcn-mono-pink", "shadcn-mono-orange", "shadcn-mono-yellow", "shadcn-black", "shadcn-gray", "shadcn-gray-blue"];
4346
+ declare const COLOR_THEMES: readonly ["default", "ocean", "forest", "sunset", "zen", "berry", "high-contrast", "industrial", "monochrome", "slate", "ash", "air", "graphite", "silver", "solarized", "factory", "factory-mono", "ayu", "one-dark", "nord", "dracula", "gruvbox", "tokyo-night", "catppuccin-mocha", "github-dark", "everforest", "rose-pine", "kanagawa", "night-owl", "palenight", "monokai-pro", "slime", "brutalist", "neon-city", "parchment", "terminal", "glass", "horizon", "vitesse", "outrun", "snazzy", "porple", "espresso", "mars", "poimandres", "ember", "rust", "copper", "foundry", "carbon", "sandstone", "lagoon", "frost", "lavender", "neon-bloom", "sepia", "shadcn", "shadcn-ember", "shadcn-custom", "shadcn-blue", "shadcn-green", "shadcn-red", "shadcn-purple", "shadcn-pink", "shadcn-orange", "shadcn-yellow", "shadcn-mono-red", "shadcn-mono-blue", "shadcn-mono-green", "shadcn-mono-purple", "shadcn-mono-pink", "shadcn-mono-orange", "shadcn-mono-yellow", "shadcn-black", "shadcn-gray", "shadcn-gray-blue"];
4332
4347
  type ColorTheme = (typeof COLOR_THEMES)[number];
4333
4348
  declare const SUPPORTED_LOCALES: readonly ["en", "zh-CN", "zh-TW", "fr", "es", "ko"];
4334
4349
  type Locale = (typeof SUPPORTED_LOCALES)[number];
@@ -4419,6 +4434,7 @@ interface WorkflowStepResult {
4419
4434
  workflowStepId: string;
4420
4435
  workflowStepName: string;
4421
4436
  phase?: WorkflowStepPhase;
4437
+ source?: "optional-group" | "node";
4422
4438
  status: "passed" | "failed" | "advisory_failure" | "skipped" | "pending";
4423
4439
  output?: string;
4424
4440
  verdict?: "APPROVE" | "APPROVE_WITH_NOTES" | "REVISE";
@@ -4537,6 +4553,15 @@ interface TaskLogEntry {
4537
4553
  outcome?: string;
4538
4554
  runContext?: RunMutationContext;
4539
4555
  }
4556
+ type WorkflowTransitionNotificationKind = "manual-merge-hold" | "recovery-requeue";
4557
+ interface WorkflowTransitionNotificationMarker {
4558
+ kind: WorkflowTransitionNotificationKind;
4559
+ column: ColumnId;
4560
+ transitionId: string;
4561
+ nodeId?: string;
4562
+ reason?: string;
4563
+ createdAt: string;
4564
+ }
4540
4565
  type ActivityEventType = "task:created" | "task:moved" | "task:updated" | "task:deleted" | "task:merged" | "task:failed" | "task:duplicate-warning-overridden" | "task:auto-archived-deterministic-duplicate" | "task:auto-archived-near-duplicate" | "task:near-duplicate-flagged" | "task:release-authorization-required" | "task:auto-archived-ghost-bug" | "task:auto-archived-duplicate" | "task:merge-worktree-reacquired" | "settings:updated" | "project:isolation-transition";
4541
4566
  interface ActivityLogEntry {
4542
4567
  id: string;
@@ -5115,6 +5140,7 @@ interface Task {
5115
5140
  stalePausedReview?: StalePausedReviewSignal;
5116
5141
  inReviewStalled?: InReviewStalledSignal;
5117
5142
  stalePausedTodo?: StalePausedTodoSignal;
5143
+ workflowTransitionNotification?: WorkflowTransitionNotificationMarker;
5118
5144
  stalledReview?: StalledReviewSignal;
5119
5145
  tokenUsage?: TaskTokenUsage;
5120
5146
  size?: "S" | "M" | "L";
@@ -5403,6 +5429,7 @@ interface GlobalSettings {
5403
5429
  colorTheme?: ColorTheme;
5404
5430
  shadcnCustomColors?: Record<string, string>;
5405
5431
  dashboardFontScalePct?: number;
5432
+ dismissModalsOnOutsideClick?: boolean;
5406
5433
  language?: Locale;
5407
5434
  defaultProvider?: string;
5408
5435
  defaultModelId?: string;
@@ -5579,6 +5606,7 @@ interface ProjectSettings {
5579
5606
  groupOverlappingFiles: boolean;
5580
5607
  ignoreHiddenOverlapPaths?: boolean;
5581
5608
  overlapIgnorePaths?: string[];
5609
+ allowAbsoluteFileBrowserPaths?: boolean;
5582
5610
  autoMerge: boolean;
5583
5611
  testMode?: boolean;
5584
5612
  mergeRequestContractShadowEnabled?: boolean;
@@ -5617,6 +5645,8 @@ interface ProjectSettings {
5617
5645
  recycleWorktrees?: boolean;
5618
5646
  showWorktreeGrouping?: boolean;
5619
5647
  openTasksInRightSidebar?: boolean;
5648
+ openMobileTasksInPopup?: boolean;
5649
+ taskDetailChatFirst?: boolean;
5620
5650
  executorAllowSiblingBranchRename?: boolean;
5621
5651
  worktreeNaming?: "random" | "task-id" | "task-title";
5622
5652
  worktrunk?: WorktrunkSettings;
@@ -5801,6 +5831,7 @@ interface ProjectSettings {
5801
5831
  reflectionAfterTask?: boolean;
5802
5832
  reviewHandoffPolicy?: "disabled" | "comment-triggered" | "always";
5803
5833
  quickChatButtonMode?: "floating" | "footer" | "off";
5834
+ quickChatCloseOnOutsideClick?: boolean;
5804
5835
  showQuickChatFAB?: boolean;
5805
5836
  chatAutoCleanupDays?: number;
5806
5837
  mailAutoCleanupDays?: number;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
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.31",
3
+ "version": "0.1.32",
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.14",
3
+ "version": "0.1.15",
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.33",
3
+ "version": "0.1.34",
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.45",
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/droid-runtime",
3
- "version": "0.1.40",
3
+ "version": "0.1.41",
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.64",
3
+ "version": "0.2.65",
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.64",
3
+ "version": "0.2.65",
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.64",
3
+ "version": "0.2.65",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/roadmap",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/whatsapp-chat",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "exports": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runfusion/fusion",
3
- "version": "0.51.0",
3
+ "version": "0.52.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",
@@ -28,6 +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_duplicate`, `fn_task_refine`, `fn_task_archive`, `fn_task_unarchive`, `fn_task_delete`, `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
32
  - **GitHub tools** — `fn_task_import_github`, `fn_task_import_github_issue`, `fn_task_browse_github_issues`
32
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`
33
34
  - **Goal tools** — `fn_goal_list`, `fn_goal_create`, `fn_goal_archive`, `fn_goal_show`
@@ -1,11 +1,11 @@
1
1
  # Engine Session-Scoped Tools
2
2
 
3
- These tools are **not** part of the user-invokable extension surface. They are injected by the engine at runtime for specific agent session types.
3
+ This reference documents tools injected by the engine at runtime for specific agent session types. Some shared workflow tools are also part of the public extension surface; use `references/extension-tools.md` as the canonical user-invokable extension reference and this page for runtime agent-role availability.
4
4
 
5
5
  - Source files: `packages/engine/src/agent-tools.ts`, `triage.ts`, `executor.ts`, `merger.ts`, `agent-heartbeat.ts`
6
6
  - Availability: only when the engine creates a session for the matching agent role
7
7
  - Runtime contract: engine sessions now forward requested skill names (`skillSelection.requestedSkillNames`) into the generic runtime `skills` field so non-pi runtimes can still receive Fusion skill intent.
8
- - Important: do not tell users to call these directly from the generic extension tool list
8
+ - Important: do not tell users to call runtime-only tools directly from the generic extension tool list
9
9
 
10
10
  ## Shared runtime tools (`agent-tools.ts`)
11
11
 
@@ -54,7 +54,7 @@ These tools are **not** part of the user-invokable extension surface. They are i
54
54
  | `fn_send_message` | executor, step-session, heartbeat | Send inbox messages to agents/users | `to_id` (string), `content` (string), `type?` (`agent-to-agent` \| `agent-to-user`), `reply_to_message_id?` (string) |
55
55
  | `fn_read_messages` | executor, step-session, heartbeat | Read inbox messages | `unread_only?` (boolean), `limit?` (number) |
56
56
  | `fn_post_room_message` | heartbeat | Post a message to a chat room the agent is a member of | `roomId` (string), `content` (string), `replyToMessageId?` (string), `mentions?` (string[]) |
57
- | `fn_artifact_register` | triage, executor, heartbeat; chat/planning (explicit `task_id`) | Register an artifact (document, image, video, audio, or other) so other agents and tasks can discover it | `type` (string), `title` (string), `description?` (string), `mimeType?` (string), `uri?` (string), `content?` (string), `taskId?` (string); chat/planning also require `task_id` (string) |
57
+ | `fn_artifact_register` | triage, executor, heartbeat; chat/planning (explicit `task_id`) | Register an artifact (document, image, video, audio, or other) so other agents and tasks can discover it; image artifacts may provide `dataBase64` bytes for registry-managed media storage | `type` (string), `title` (string), `description?` (string), `mimeType?` (string), `uri?` (string), `content?` (string), `dataBase64?` (base64 string), `taskId?` (string); chat/planning also require `task_id` (string) |
58
58
  | `fn_artifact_list` | triage, executor, heartbeat; chat/planning (explicit `task_id`) | List registered artifacts across agents and tasks with filters for type, authorId, taskId, search, limit, and offset | `type?` (string), `authorId?` (string), `taskId?` (string), `search?` (string), `limit?` (number), `offset?` (number); chat/planning also require `task_id` (string) |
59
59
  | `fn_artifact_view` | triage, executor, heartbeat | View a registered artifact by id, including metadata and inline content or the uri/path reference for media artifacts | `id` (string) |
60
60
 
@@ -18,7 +18,7 @@ Create a new task on the Fusion task board. The task enters the planning column
18
18
  | `depends` | array | — | Task IDs this depends on (e.g. ['FN-001', 'FN-002']) |
19
19
  | `agentId` | string | — | Agent ID to assign this task to (e.g. 'agent-abc123') |
20
20
  | `priority` | string(enum) | — | Task priority (low, normal, high, urgent) |
21
- | `workflow_id` | string | — | Workflow ID to select for the new task (e.g. 'WF-003' or 'builtin:coding'). |
21
+ | `workflow_id` | string | — | Workflow ID to select for the new task (e.g. 'WF-003' or 'builtin:coding'). Omit to inherit the project default workflow. Use fn_workflow_list to discover valid IDs. |
22
22
 
23
23
  ### fn_task_update
24
24
 
@@ -33,7 +33,7 @@ Update fields on an existing task. Supports modifying the title, description, de
33
33
  | `agentId` | union | — | Agent ID to assign this task to, or null to clear (e.g. 'agent-abc123') |
34
34
  | `nodeId` | union | — | Node ID override for this task, or null to clear |
35
35
  | `priority` | string(enum) | — | Task priority (low, normal, high, urgent) |
36
- | `workflow_id` | union | — | Workflow ID to select for this task (e.g. 'WF-003' or 'builtin:coding'), |
36
+ | `workflow_id` | union | — | Workflow ID to select for this task (e.g. 'WF-003' or 'builtin:coding'), or null to clear the workflow selection and revert to the project default. Use fn_workflow_list to discover valid IDs. |
37
37
 
38
38
  ### fn_task_list
39
39
 
@@ -136,6 +136,83 @@ Create a task via AI-guided planning mode — interactive conversation to refine
136
136
  | `description` | string | — | Initial plan description (optional) — the AI will ask clarifying questions if not provided |
137
137
  | `baseBranch` | string | — | Optional base branch for the task created from this planning session |
138
138
 
139
+ ## Workflow Tools
140
+
141
+ ### fn_workflow_list
142
+
143
+ List built-in and custom Fusion workflow definitions available in this project.
144
+
145
+ No parameters.
146
+
147
+ ### fn_workflow_get
148
+
149
+ Fetch a Fusion workflow definition by ID, including its resolved workflow IR.
150
+
151
+ | Parameter | Type | Required | Description |
152
+ |-----------|------|----------|-------------|
153
+ | `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. |
154
+
155
+ ### fn_workflow_create
156
+
157
+ Create a custom Fusion workflow definition from a validated workflow IR.
158
+
159
+ | Parameter | Type | Required | Description |
160
+ |-----------|------|----------|-------------|
161
+ | `name` | string | ✓ | Workflow name (required, non-empty). |
162
+ | `description` | string | — | Optional human-readable description. |
163
+ | `icon` | string | — | Optional compact plain-text icon for this custom workflow. |
164
+ | `ir` | unknown | ✓ | Workflow graph (intermediate representation). Validated server-side; a malformed graph is rejected. |
165
+ | `layout` | record | — | Optional node layout map keyed by node id. |
166
+ | `confirm_policy_escalation` | boolean | — | Set true to confirm binding a column to an agent whose permission policy is broader (more privileged) than the project default. Required when such a binding is present; the create is otherwise rejected naming the offending column. |
167
+
168
+ ### fn_workflow_update
169
+
170
+ Update a custom Fusion workflow definition's metadata, IR, or layout.
171
+
172
+ | Parameter | Type | Required | Description |
173
+ |-----------|------|----------|-------------|
174
+ | `workflow_id` | string | ✓ | The workflow definition ID to update (built-ins cannot be edited). |
175
+ | `name` | string | — | New name. |
176
+ | `description` | string | — | New description. |
177
+ | `icon` | string | — | New compact plain-text icon; blank clears it. |
178
+ | `ir` | unknown | — | Replacement workflow graph (validated server-side). |
179
+ | `layout` | record | — | Replacement node layout map. |
180
+ | `rehome_to` | string | — | When an IR update removes a column that still holds cards, supply the column id to re-home those occupants into. Required to resolve an OccupiedColumns conflict; the target must exist in the new IR. |
181
+ | `confirm_policy_escalation` | boolean | — | Set true to confirm binding a column to an agent whose permission policy is broader (more privileged) than the project default. Required when such a binding is present; the update is otherwise rejected naming the offending column. |
182
+
183
+ ### fn_workflow_delete
184
+
185
+ Delete a custom Fusion workflow definition; built-in workflows are protected.
186
+
187
+ | Parameter | Type | Required | Description |
188
+ |-----------|------|----------|-------------|
189
+ | `workflow_id` | string | ✓ | The workflow definition ID to delete (built-ins cannot be deleted). |
190
+
191
+ ### fn_workflow_settings
192
+
193
+ Read or write per-project values for a workflow's declared settings.
194
+
195
+ | Parameter | Type | Required | Description |
196
+ |-----------|------|----------|-------------|
197
+ | `action` | union | ✓ | `get` reads the stored setting VALUES plus the engine-effective values for the workflow; `set` writes values (requires `values`). |
198
+ | `workflow_id` | string | ✓ | The workflow whose setting VALUES to read/write (e.g. 'WF-003', or a 'builtin:*' id). Values are scoped per (workflow, project). Built-in workflow VALUES are writable even though built-in DECLARATIONS are not (declarations are edited via the workflow IR's `settings`). Values are validated against THIS workflow's declared settings (use fn_workflow_get to inspect them). |
199
+ | `values` | record | — | For action='set': a map of settingId → value to write. A `null` value DELETES the override (null-as-delete). Each value is validated against the named workflow's declaration; on ANY rejection (unknown-setting/type-mismatch/enum-violation/no-settings-defined) nothing is persisted and the typed rejection list is returned. |
200
+
201
+ ### fn_trait_list
202
+
203
+ List column traits available when authoring Fusion workflow IR columns.
204
+
205
+ No parameters.
206
+
207
+ ### fn_workflow_select
208
+
209
+ Assign a workflow definition to a task by workflow ID.
210
+
211
+ | Parameter | Type | Required | Description |
212
+ |-----------|------|----------|-------------|
213
+ | `workflow_id` | string | ✓ | The workflow definition ID to select (e.g. 'WF-003', or a 'builtin:*' id). Use fn_workflow_list to discover available IDs. |
214
+ | `task_id` | string | — | Task to assign the workflow to. Defaults to the current task. |
215
+
139
216
  ## GitHub Tools
140
217
 
141
218
  ### fn_task_import_github
@@ -456,8 +533,8 @@ Create a new task and assign it to a specific agent for execution. The task goes
456
533
  |-----------|------|----------|-------------|
457
534
  | `agent_id` | string | ✓ | The agent ID to delegate work to |
458
535
  | `description` | string | ✓ | What needs to be done |
459
- | `dependencies` | array | — | Task IDs this new task depends on (e.g. [\"KB-001\"] |
460
- | `workflow_id` | string | — | Workflow ID to select for the new task (e.g. 'WF-003' or 'builtin:coding'). |
536
+ | `dependencies` | array | — | Task IDs this new task depends on (e.g. ["KB-001"] |
537
+ | `workflow_id` | string | — | Workflow ID to select for the new task (e.g. 'WF-003' or 'builtin:coding'). Omit to inherit the project default workflow. Use fn_workflow_list to discover valid IDs. |
461
538
  | `override` | boolean | — | Set true to bypass executor-role assignment policy |
462
539
 
463
540
  ### fn_agent_show
@@ -12,6 +12,14 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
12
12
  <!-- BEGIN: fusion-capabilities-tool-table (auto-generated by scripts/sync-fusion-skill-tools.mjs — do not edit by hand) -->
13
13
  | Tool | Purpose |
14
14
  |------|---------|
15
+ | `fn_workflow_list` | List built-in and custom Fusion workflow definitions available in this project. |
16
+ | `fn_workflow_get` | Fetch a Fusion workflow definition by ID, including its resolved workflow IR. |
17
+ | `fn_workflow_create` | Create a custom Fusion workflow definition from a validated workflow IR. |
18
+ | `fn_workflow_update` | Update a custom Fusion workflow definition's metadata, IR, or layout. |
19
+ | `fn_workflow_delete` | Delete a custom Fusion workflow definition; built-in workflows are protected. |
20
+ | `fn_workflow_settings` | Read or write per-project values for a workflow's declared settings. |
21
+ | `fn_trait_list` | List column traits available when authoring Fusion workflow IR columns. |
22
+ | `fn_workflow_select` | Assign a workflow definition to a task by workflow ID. |
15
23
  | `fn_task_create` | Create a new task on the Fusion task board. The task enters the planning column where the AI planning agent will plan it into a full prompt with steps, file scope, and acceptance criteria. Optionally pass workflow_id to select a workflow at creation time; use fn_workflow_list to discover valid IDs. |
16
24
  | `fn_task_update` | Update fields on an existing task. Supports modifying the title, description, dependencies, assigned agent, priority, and workflow_id after task creation. Set workflow_id to a workflow ID to select it, or null to clear the workflow selection. |
17
25
  | `fn_task_list` | List all tasks on the Fusion board, grouped by column. |