@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.
- package/dist/bin.js +9038 -4527
- package/dist/client/.vite/manifest.json +329 -329
- package/dist/client/assets/{AgentDetailView-CjwOlcMI.js → AgentDetailView-C-PM8cwG.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-CD8znNHS.js → AgentPermissionPolicyEditor-DrVW4VPc.js} +1 -1
- package/dist/client/assets/{AgentsView-CTjNaKu-.js → AgentsView-DJJO0laF.js} +6 -11
- package/dist/client/assets/ChatView-C7uTm5hO.js +16 -0
- package/dist/client/assets/ChatView-D_2wBIIx.css +1 -0
- package/dist/client/assets/CommandCenter-CKvo0MuO.js +71 -0
- package/dist/client/assets/{DevServerView-BE_o7v9j.js → DevServerView-BHLG4Mxg.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BpcPo65A.js → DirectoryPicker-CRY-rpnj.js} +1 -1
- package/dist/client/assets/{DocumentsView-Cpma23hu.js → DocumentsView-DhC4dnXD.js} +1 -1
- package/dist/client/assets/{EvalsView-DYSobhb7.js → EvalsView-DsnLOVZB.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-D_iQqD-n.js → ExperimentalAgentOnboardingModal-B4iFX60E.js} +1 -1
- package/dist/client/assets/GoalsView-D5bzq6W9.js +2 -0
- package/dist/client/assets/{InsightsView-DZyMvYQ8.js → InsightsView-Drpu72M4.js} +1 -1
- package/dist/client/assets/{MemoryView-B9Z6cRma.js → MemoryView-auLBP3UW.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-BQt3JU60.js → PiExtensionsManager-RlbkXf_t.js} +1 -1
- package/dist/client/assets/{PluginManager-DEsUstVo.js → PluginManager-BJMUacpG.js} +1 -1
- package/dist/client/assets/{PullRequestView-B7k8ogy4.js → PullRequestView-344B9WF-.js} +1 -1
- package/dist/client/assets/{ResearchView-BseF58_R.js → ResearchView-BNqt-f53.js} +1 -1
- package/dist/client/assets/{SecretsView-bkNS5VBC.js → SecretsView-Be8Tm8It.js} +1 -1
- package/dist/client/assets/SessionTerminal-CumHUelZ.js +2 -0
- package/dist/client/assets/SettingsModal-AJfer-ve.js +21 -0
- package/dist/client/assets/{SettingsModal-DAH7LuLw.js → SettingsModal-B28DuhaN.js} +1 -1
- package/dist/client/assets/SettingsModal-CaE4JYxi.css +1 -0
- package/dist/client/assets/{SetupWizardModal-Bm6bG31V.js → SetupWizardModal-y2j9aZoi.js} +2 -2
- package/dist/client/assets/ShadcnColorPicker-Cc72uPKJ.js +11 -0
- package/dist/client/assets/ShadcnColorPicker-CyeAnJUU.css +1 -0
- package/dist/client/assets/{SkillsView-D_UEJY_f.js → SkillsView-HQp7UTdA.js} +1 -1
- package/dist/client/assets/{TodoView-CMCoPep1.js → TodoView-DF7_qWGH.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-BjpqTIYE.js +8 -0
- package/dist/client/assets/WorkflowNodeEditor-Df-_206_.css +1 -0
- package/dist/client/assets/{agentSkills-BiipFw1z.js → agentSkills-Cy_HrYHd.js} +1 -1
- package/dist/client/assets/{app-A1yCJR4Q.js → app-CGubyqAW.js} +3 -3
- package/dist/client/assets/{app-T5iMjZpX.js → app-CrQpHbIs.js} +1 -1
- package/dist/client/assets/{app-Bfiafek7.js → app-DboK-0Ty.js} +3 -3
- package/dist/client/assets/{app-Bh-Xj32t.js → app-DjnYET2y.js} +1 -1
- package/dist/client/assets/{app-zR_n4GL2.js → app-MacS555z.js} +1 -1
- package/dist/client/assets/{app-DxJHfzxz.js → app-nvVayIeU.js} +3 -3
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-glwWkaDt.js → architectureDiagram-3BPJPVTR-4ur4sxlr.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-C8DhxwG4.js → blockDiagram-GPEHLZMM-BgZeqq_q.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CQXf6PzI.js → c4Diagram-AAUBKEIU-BQtdOIrm.js} +1 -1
- package/dist/client/assets/channel-Dn5XowfJ.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-kak65s83.js → chunk-2J33WTMH-C1k1PBy1.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-B_yEpoxU.js → chunk-4BX2VUAB-hNujwvSn.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-C9lQVeH5.js → chunk-55IACEB6-CnXV9LyI.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-D4SVzqNs.js → chunk-727SXJPM-B-ocMdYN.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DBHuj4BH.js → chunk-AQP2D5EJ-CWNRUL6C.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BJ3ghjau.js → chunk-FMBD7UC4-DerrCiYe.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-CE4tkh6e.js → chunk-ND2GUHAM-BfcSPlX-.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DmVw_cEu.js → chunk-QZHKN3VN-BaWScAds.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-zSOW-KNk.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-zSOW-KNk.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DI_-BOYE.js → cose-bilkent-S5V4N54A-n0Oeinz2.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-ywUbHZxt.js → dagre-BM42HDAG-CUtehSt2.js} +1 -1
- package/dist/client/assets/{dashboard-view-r4NTTh_X.js → dashboard-view-BW3GHqgb.js} +218 -218
- package/dist/client/assets/{dashboard-view-DJvdban3.js → dashboard-view-DWKCxtr5.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-CAGucHCe.js → diagram-2AECGRRQ-Bz4aOzhR.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-D_1uzVtW.js → diagram-5GNKFQAL-UoxIMwPf.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-D7zY4Nlm.js → diagram-KO2AKTUF-BYR7hloS.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-C1T9eOzA.js → diagram-LMA3HP47-BR9MaP8U.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-sWxhPvzU.js → diagram-OG6HWLK6-BOfldYHv.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DfHtnaNg.js → erDiagram-TEJ5UH35-B8x9mfOs.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Brbb_Jlh.js → flowDiagram-I6XJVG4X-DBnTroCV.js} +1 -1
- package/dist/client/assets/{folder-open-BLwukrE0.js → folder-open-CFze34Eq.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CLvZ7891.js → ganttDiagram-6RSMTGT7-BfzFy7iz.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DD56Jsa3.js → gitGraphDiagram-PVQCEYII-CNTFu6IY.js} +1 -1
- package/dist/client/assets/index-QnHUwSjw.css +1 -0
- package/dist/client/assets/index-Y-vyXPPN.js +1331 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-uXai801q.js → infoDiagram-5YYISTIA-DJiBRaAl.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-C_bWlUP_.js → ishikawaDiagram-YF4QCWOH-CIY9t4cc.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-B2kB9niE.js → journeyDiagram-JHISSGLW-HLMZmcjY.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-BJwlpR9z.js → kanban-definition-UN3LZRKU-x9nKoxCI.js} +1 -1
- package/dist/client/assets/{linear-dXivciGL.js → linear-CwI45w2t.js} +1 -1
- package/dist/client/assets/{mermaid.core-0hUjZF5S.js → mermaid.core-pHkdB6fb.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DsTgTpX-.js → mindmap-definition-RKZ34NQL-Bs_4Tofu.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-BUQsNWHN.js → pieDiagram-4H26LBE5-BGHz9JGZ.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DOYWgfAz.js → quadrantDiagram-W4KKPZXB-xHSR7cAR.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DUnPKaMd.js → requirementDiagram-4Y6WPE33-D7YMNM44.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Btl4NRo-.js → sankeyDiagram-5OEKKPKP-OAXuab3Y.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-b0hyJ_Wr.js → sequenceDiagram-3UESZ5HK-BZCjKFVL.js} +1 -1
- package/dist/client/assets/{shield-alert-yWvC7t2v.js → shield-alert-BBK8Risa.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-orREjkd9.js → stateDiagram-AJRCARHV-COnJQqA4.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DYJRRNh-.js → stateDiagram-v2-BHNVJYJU-Diml4Nhm.js} +1 -1
- package/dist/client/assets/{time-DoDTxsna.js → time-Ckmi30gH.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DZga7lqO.js → timeline-definition-PNZ67QCA-DHIKvV9L.js} +1 -1
- package/dist/client/assets/{upload-BsYRkl_8.js → upload-CqUJUdZW.js} +1 -1
- package/dist/client/assets/{users-dyoJEvrM.js → users-CAE-FEzI.js} +1 -1
- package/dist/client/assets/{vendor-reactflow-Bg-Qjzh8.js → vendor-reactflow-CnI7NMXG.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-C2P26V71.js → vennDiagram-CIIHVFJN-o9AxLDoL.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-ckctH9bL.js → wardley-L42UT6IY-B7MIazje.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-9It3QAYs.js → wardleyDiagram-YWT4CUSO-B6qUJx0N.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-Dj3sSBqg.js → xychartDiagram-2RQKCTM6-13mSXuCA.js} +1 -1
- package/dist/client/index.html +8 -8
- package/dist/client/theme-data.css +140 -0
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +7126 -3447
- package/dist/pi-claude-cli/index.ts +13 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +2 -2
- package/dist/pi-claude-cli/src/__tests__/provider.test.ts +27 -4
- package/dist/plugin-sdk/index.d.ts +32 -1
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +1 -0
- package/skill/fusion/references/engine-tools.md +3 -3
- package/skill/fusion/references/extension-tools.md +81 -4
- package/skill/fusion/references/fusion-capabilities.md +8 -0
- package/dist/client/assets/ChatView-DCWypaw3.js +0 -19
- package/dist/client/assets/ChatView-DwIIrJxb.css +0 -1
- package/dist/client/assets/CommandCenter-C4v0FMxx.js +0 -71
- package/dist/client/assets/GoalsView-B6Wfxk59.js +0 -2
- package/dist/client/assets/SessionTerminal-BSllyqgF.js +0 -2
- package/dist/client/assets/SettingsModal-Dso0K76J.js +0 -21
- package/dist/client/assets/SettingsModal-tUDR6nJ9.css +0 -1
- package/dist/client/assets/ShadcnColorPicker-CLiOvo7W.js +0 -11
- package/dist/client/assets/ShadcnColorPicker-CzZo9UOD.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-BeQcn0Wa.js +0 -8
- package/dist/client/assets/WorkflowNodeEditor-WYIxHTxY.css +0 -1
- package/dist/client/assets/channel-BY6zFSV1.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CeX_WCiC.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CeX_WCiC.js +0 -1
- package/dist/client/assets/index-DAv17W73.js +0 -1317
- 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",
|
|
@@ -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-
|
|
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).
|
|
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
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "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",
|
package/skill/fusion/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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. [
|
|
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. |
|