@runfusion/fusion 0.50.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 +9801 -4827
- package/dist/client/.vite/manifest.json +328 -327
- package/dist/client/assets/{AgentDetailView-D2oYUApl.js → AgentDetailView-C-PM8cwG.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-DGgx46f3.js → AgentPermissionPolicyEditor-DrVW4VPc.js} +1 -1
- package/dist/client/assets/{AgentsView-Dhf5Vq_T.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-DjJYp6Jj.js → DevServerView-BHLG4Mxg.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CYPYp9T4.js → DirectoryPicker-CRY-rpnj.js} +1 -1
- package/dist/client/assets/{DocumentsView-CeQVRVdp.js → DocumentsView-DhC4dnXD.js} +1 -1
- package/dist/client/assets/{EvalsView-D250mVR5.js → EvalsView-DsnLOVZB.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-B1EEY_bl.js → ExperimentalAgentOnboardingModal-B4iFX60E.js} +1 -1
- package/dist/client/assets/{GoalsView-CUh8JBnJ.css → GoalsView-4-eEOeqw.css} +1 -1
- package/dist/client/assets/GoalsView-D5bzq6W9.js +2 -0
- package/dist/client/assets/{InsightsView-CbWItYe8.js → InsightsView-Drpu72M4.js} +1 -1
- package/dist/client/assets/{MemoryView-Ct0nOTES.js → MemoryView-auLBP3UW.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DSQwngX-.js → PiExtensionsManager-RlbkXf_t.js} +1 -1
- package/dist/client/assets/{PluginManager-DqLxCiNg.js → PluginManager-BJMUacpG.js} +1 -1
- package/dist/client/assets/PullRequestView-344B9WF-.js +6 -0
- package/dist/client/assets/PullRequestView-NkeImY1n.css +1 -0
- package/dist/client/assets/{ResearchView-CJQL9XKC.js → ResearchView-BNqt-f53.js} +1 -1
- package/dist/client/assets/{SecretsView-ChN9aTbi.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-CIC5jhgo.js → SettingsModal-B28DuhaN.js} +1 -1
- package/dist/client/assets/SettingsModal-CaE4JYxi.css +1 -0
- package/dist/client/assets/{SetupWizardModal-C6EGjmbd.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-Dz8dDwfP.js → SkillsView-HQp7UTdA.js} +1 -1
- package/dist/client/assets/{TodoView-DvJFzoOv.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-B2dD5Nm5.js → agentSkills-Cy_HrYHd.js} +1 -1
- package/dist/client/assets/{app-D27ewSC0.js → app-CGubyqAW.js} +3 -3
- package/dist/client/assets/{app-dATBczl3.js → app-CrQpHbIs.js} +2 -2
- package/dist/client/assets/{app-BYq4S7Cb.js → app-DboK-0Ty.js} +1 -1
- package/dist/client/assets/{app-OPrfgjjn.js → app-DjnYET2y.js} +3 -3
- package/dist/client/assets/{app-DFLDkeOE.js → app-MacS555z.js} +3 -3
- package/dist/client/assets/{app-k1K9zAjp.js → app-nvVayIeU.js} +3 -3
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-ClO0MnzR.js → architectureDiagram-3BPJPVTR-4ur4sxlr.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-C4cyy4WE.js → blockDiagram-GPEHLZMM-BgZeqq_q.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-NHPC9TJo.js → c4Diagram-AAUBKEIU-BQtdOIrm.js} +1 -1
- package/dist/client/assets/channel-Dn5XowfJ.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-CGYIKTVR.js → chunk-2J33WTMH-C1k1PBy1.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BkCCD0tE.js → chunk-4BX2VUAB-hNujwvSn.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Be3yOIDe.js → chunk-55IACEB6-CnXV9LyI.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-DxjyMaQQ.js → chunk-727SXJPM-B-ocMdYN.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-BC0PjN0W.js → chunk-AQP2D5EJ-CWNRUL6C.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DoWxmM8k.js → chunk-FMBD7UC4-DerrCiYe.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-EOpuc9pP.js → chunk-ND2GUHAM-BfcSPlX-.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DiRyx9QZ.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-CfVoUUxT.js → cose-bilkent-S5V4N54A-n0Oeinz2.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BfILvxLb.js → dagre-BM42HDAG-CUtehSt2.js} +1 -1
- package/dist/client/assets/{dashboard-view-C9YIcx-O.js → dashboard-view-BW3GHqgb.js} +1633 -1633
- package/dist/client/assets/{dashboard-view-wFC1pe4d.js → dashboard-view-DWKCxtr5.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-6mdmbH-5.js → diagram-2AECGRRQ-Bz4aOzhR.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-CY7MMwO1.js → diagram-5GNKFQAL-UoxIMwPf.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-D05XnQqd.js → diagram-KO2AKTUF-BYR7hloS.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-B18FTOJG.js → diagram-LMA3HP47-BR9MaP8U.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-xmXlYf5m.js → diagram-OG6HWLK6-BOfldYHv.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-4XlgVLCs.js → erDiagram-TEJ5UH35-B8x9mfOs.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BYl3ps7f.js → flowDiagram-I6XJVG4X-DBnTroCV.js} +1 -1
- package/dist/client/assets/{folder-open-BH6FwmO7.js → folder-open-CFze34Eq.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-4vxuH9Dx.js → ganttDiagram-6RSMTGT7-BfzFy7iz.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BESmFgXT.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-DvjdjtwB.js → infoDiagram-5YYISTIA-DJiBRaAl.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Cis5IoEm.js → ishikawaDiagram-YF4QCWOH-CIY9t4cc.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-C20pB1W8.js → journeyDiagram-JHISSGLW-HLMZmcjY.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CiVfCeU3.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-CW0vCXA6.js → mermaid.core-pHkdB6fb.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-E5rPHUdw.js → mindmap-definition-RKZ34NQL-Bs_4Tofu.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DVIFbPjH.js → pieDiagram-4H26LBE5-BGHz9JGZ.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-C8qPRe_x.js → quadrantDiagram-W4KKPZXB-xHSR7cAR.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DQ-pwXh3.js → requirementDiagram-4Y6WPE33-D7YMNM44.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BnghLuUc.js → sankeyDiagram-5OEKKPKP-OAXuab3Y.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-ChlGxGVk.js → sequenceDiagram-3UESZ5HK-BZCjKFVL.js} +1 -1
- package/dist/client/assets/{shield-alert-BfOnDO6O.js → shield-alert-BBK8Risa.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-ByUvNEch.js → stateDiagram-AJRCARHV-COnJQqA4.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Df38ITSP.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-bsAGc83D.js → timeline-definition-PNZ67QCA-DHIKvV9L.js} +1 -1
- package/dist/client/assets/{upload-BK1crTqn.js → upload-CqUJUdZW.js} +1 -1
- package/dist/client/assets/{users-DW8jC2Z9.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-BBIj6LFN.js → vennDiagram-CIIHVFJN-o9AxLDoL.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-De6JFroy.js → wardley-L42UT6IY-B7MIazje.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-P1LOLx0_.js → wardleyDiagram-YWT4CUSO-B6qUJx0N.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-v1G4ki6U.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 +7658 -3691
- 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 +38 -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/bundled.js +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/manifest.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/best-practices.md +3 -3
- package/skill/fusion/references/engine-tools.md +3 -3
- package/skill/fusion/references/extension-tools.md +82 -5
- package/skill/fusion/references/fusion-capabilities.md +9 -1
- package/skill/fusion/workflows/task-management.md +1 -1
- package/dist/client/assets/ChatView-DpgpxHva.js +0 -19
- package/dist/client/assets/ChatView-DwIIrJxb.css +0 -1
- package/dist/client/assets/CommandCenter-DzQhGq_J.js +0 -71
- package/dist/client/assets/GoalsView-MftVwE9g.js +0 -2
- package/dist/client/assets/PullRequestView-CpdE3Yo_.css +0 -1
- package/dist/client/assets/PullRequestView-D0WgwdAi.js +0 -6
- package/dist/client/assets/SessionTerminal-BVon9kbr.js +0 -2
- package/dist/client/assets/SettingsModal-B4WANQnu.js +0 -21
- package/dist/client/assets/SettingsModal-tUDR6nJ9.css +0 -1
- package/dist/client/assets/ShadcnColorPicker-4e_aXoGX.js +0 -11
- package/dist/client/assets/ShadcnColorPicker-CzZo9UOD.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-DrdTCstS.js +0 -8
- package/dist/client/assets/WorkflowNodeEditor-WYIxHTxY.css +0 -1
- package/dist/client/assets/channel-Q2WKocEP.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CPFl2Aqd.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CPFl2Aqd.js +0 -1
- package/dist/client/assets/index-B9jtBwFy.css +0 -1
- package/dist/client/assets/index-DFeBJ3GM.js +0 -1302
|
@@ -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;
|
|
@@ -2531,6 +2542,7 @@ interface TaskStoreEvents {
|
|
|
2531
2542
|
settings: Settings;
|
|
2532
2543
|
previous: Settings;
|
|
2533
2544
|
}];
|
|
2545
|
+
"artifact:registered": [artifact: Artifact];
|
|
2534
2546
|
"agent:log": [entry: AgentLogEntry];
|
|
2535
2547
|
"merger:autostashOrphans": [
|
|
2536
2548
|
data: {
|
|
@@ -2661,6 +2673,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2661
2673
|
private scanAndRecordCitations;
|
|
2662
2674
|
private getTaskSelectClause;
|
|
2663
2675
|
private computeTimedExecutionMs;
|
|
2676
|
+
private getLatestAgentLogActivityMs;
|
|
2677
|
+
private hasFreshAgentLogActivitySinceTaskUpdate;
|
|
2664
2678
|
private getTaskSelectClauseWithActivityLogLimit;
|
|
2665
2679
|
private createTaskPersistSerializationContext;
|
|
2666
2680
|
private getTaskPersistValues;
|
|
@@ -2901,6 +2915,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
2901
2915
|
handoffToReview(taskId: string, opts: HandoffToReviewOptions): Promise<Task>;
|
|
2902
2916
|
private resolveWorkflowMoveActor;
|
|
2903
2917
|
private resolveWorkflowBypassGuards;
|
|
2918
|
+
private isWorkflowDoneBypassGuardedTask;
|
|
2904
2919
|
private shouldSkipWorkflowMovePolicies;
|
|
2905
2920
|
private prepareWorkflowMovePolicyPreflight;
|
|
2906
2921
|
private evaluateWorkflowMovePolicies;
|
|
@@ -3000,6 +3015,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
|
|
|
3000
3015
|
githubTracking?: TaskGithubTracking | null;
|
|
3001
3016
|
tokenUsage?: TaskTokenUsage | null;
|
|
3002
3017
|
modifiedFiles?: string[] | null;
|
|
3018
|
+
workflowTransitionNotification?: Task["workflowTransitionNotification"] | null;
|
|
3003
3019
|
missionId?: string | null;
|
|
3004
3020
|
sliceId?: string | null;
|
|
3005
3021
|
}, runContext?: RunMutationContext): Promise<Task>;
|
|
@@ -4327,7 +4343,7 @@ declare const COMPLETION_DOCUMENTATION_MODES: readonly ["off", "changeset", "cha
|
|
|
4327
4343
|
type CompletionDocumentationMode = (typeof COMPLETION_DOCUMENTATION_MODES)[number];
|
|
4328
4344
|
declare const THEME_MODES: readonly ["dark", "light", "system"];
|
|
4329
4345
|
type ThemeMode = (typeof THEME_MODES)[number];
|
|
4330
|
-
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"];
|
|
4331
4347
|
type ColorTheme = (typeof COLOR_THEMES)[number];
|
|
4332
4348
|
declare const SUPPORTED_LOCALES: readonly ["en", "zh-CN", "zh-TW", "fr", "es", "ko"];
|
|
4333
4349
|
type Locale = (typeof SUPPORTED_LOCALES)[number];
|
|
@@ -4418,6 +4434,7 @@ interface WorkflowStepResult {
|
|
|
4418
4434
|
workflowStepId: string;
|
|
4419
4435
|
workflowStepName: string;
|
|
4420
4436
|
phase?: WorkflowStepPhase;
|
|
4437
|
+
source?: "optional-group" | "node";
|
|
4421
4438
|
status: "passed" | "failed" | "advisory_failure" | "skipped" | "pending";
|
|
4422
4439
|
output?: string;
|
|
4423
4440
|
verdict?: "APPROVE" | "APPROVE_WITH_NOTES" | "REVISE";
|
|
@@ -4474,6 +4491,7 @@ interface PrInfo {
|
|
|
4474
4491
|
commentCount: number;
|
|
4475
4492
|
isDraft?: boolean;
|
|
4476
4493
|
draft?: boolean;
|
|
4494
|
+
manual?: boolean;
|
|
4477
4495
|
autoMergeOnGreen?: boolean;
|
|
4478
4496
|
autoMergeStrategy?: "merge" | "squash" | "rebase";
|
|
4479
4497
|
lastMergeError?: string;
|
|
@@ -4535,6 +4553,15 @@ interface TaskLogEntry {
|
|
|
4535
4553
|
outcome?: string;
|
|
4536
4554
|
runContext?: RunMutationContext;
|
|
4537
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
|
+
}
|
|
4538
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";
|
|
4539
4566
|
interface ActivityLogEntry {
|
|
4540
4567
|
id: string;
|
|
@@ -5113,6 +5140,7 @@ interface Task {
|
|
|
5113
5140
|
stalePausedReview?: StalePausedReviewSignal;
|
|
5114
5141
|
inReviewStalled?: InReviewStalledSignal;
|
|
5115
5142
|
stalePausedTodo?: StalePausedTodoSignal;
|
|
5143
|
+
workflowTransitionNotification?: WorkflowTransitionNotificationMarker;
|
|
5116
5144
|
stalledReview?: StalledReviewSignal;
|
|
5117
5145
|
tokenUsage?: TaskTokenUsage;
|
|
5118
5146
|
size?: "S" | "M" | "L";
|
|
@@ -5401,6 +5429,7 @@ interface GlobalSettings {
|
|
|
5401
5429
|
colorTheme?: ColorTheme;
|
|
5402
5430
|
shadcnCustomColors?: Record<string, string>;
|
|
5403
5431
|
dashboardFontScalePct?: number;
|
|
5432
|
+
dismissModalsOnOutsideClick?: boolean;
|
|
5404
5433
|
language?: Locale;
|
|
5405
5434
|
defaultProvider?: string;
|
|
5406
5435
|
defaultModelId?: string;
|
|
@@ -5577,6 +5606,7 @@ interface ProjectSettings {
|
|
|
5577
5606
|
groupOverlappingFiles: boolean;
|
|
5578
5607
|
ignoreHiddenOverlapPaths?: boolean;
|
|
5579
5608
|
overlapIgnorePaths?: string[];
|
|
5609
|
+
allowAbsoluteFileBrowserPaths?: boolean;
|
|
5580
5610
|
autoMerge: boolean;
|
|
5581
5611
|
testMode?: boolean;
|
|
5582
5612
|
mergeRequestContractShadowEnabled?: boolean;
|
|
@@ -5613,6 +5643,10 @@ interface ProjectSettings {
|
|
|
5613
5643
|
testCommand?: string;
|
|
5614
5644
|
buildCommand?: string;
|
|
5615
5645
|
recycleWorktrees?: boolean;
|
|
5646
|
+
showWorktreeGrouping?: boolean;
|
|
5647
|
+
openTasksInRightSidebar?: boolean;
|
|
5648
|
+
openMobileTasksInPopup?: boolean;
|
|
5649
|
+
taskDetailChatFirst?: boolean;
|
|
5616
5650
|
executorAllowSiblingBranchRename?: boolean;
|
|
5617
5651
|
worktreeNaming?: "random" | "task-id" | "task-title";
|
|
5618
5652
|
worktrunk?: WorktrunkSettings;
|
|
@@ -5769,6 +5803,8 @@ interface ProjectSettings {
|
|
|
5769
5803
|
titleSummarizerModelId?: string;
|
|
5770
5804
|
titleSummarizerFallbackProvider?: string;
|
|
5771
5805
|
titleSummarizerFallbackModelId?: string;
|
|
5806
|
+
prTitlePromptInstructions?: string;
|
|
5807
|
+
prDescriptionPromptInstructions?: string;
|
|
5772
5808
|
scripts?: Record<string, string>;
|
|
5773
5809
|
setupScript?: string;
|
|
5774
5810
|
insightExtractionEnabled?: boolean;
|
|
@@ -5795,6 +5831,7 @@ interface ProjectSettings {
|
|
|
5795
5831
|
reflectionAfterTask?: boolean;
|
|
5796
5832
|
reviewHandoffPolicy?: "disabled" | "comment-triggered" | "always";
|
|
5797
5833
|
quickChatButtonMode?: "floating" | "footer" | "off";
|
|
5834
|
+
quickChatCloseOnOutsideClick?: boolean;
|
|
5798
5835
|
showQuickChatFAB?: boolean;
|
|
5799
5836
|
chatAutoCleanupDays?: number;
|
|
5800
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`
|
|
@@ -33,7 +33,7 @@ For work larger than L, use missions to break it into phases.
|
|
|
33
33
|
| Vague idea needing refinement | `fn_task_plan` |
|
|
34
34
|
| Large project with phases | `fn_mission_create` + hierarchy |
|
|
35
35
|
| Task failed, needs retry | `fn_task_retry` |
|
|
36
|
-
|
|
|
36
|
+
| User explicitly requests manual control | `fn_task_pause` |
|
|
37
37
|
| Completed task needs follow-up | `fn_task_refine` |
|
|
38
38
|
| Clean up done tasks | `fn_task_archive` |
|
|
39
39
|
| Import external work | `fn_task_import_github*` |
|
|
@@ -49,10 +49,10 @@ For work larger than L, use missions to break it into phases.
|
|
|
49
49
|
## Working with the AI Engine
|
|
50
50
|
|
|
51
51
|
- **Don't fight the automation** — let triage, scheduler, and executor do their jobs
|
|
52
|
-
- **Pause
|
|
52
|
+
- **Pause only on explicit user request** — use `fn_task_pause` for user-driven manual control, never as agent failure or blocker handling
|
|
53
53
|
- **Steer don't micromanage** — use steering comments (via CLI `fn task steer`) to guide the AI without rewriting the spec
|
|
54
54
|
- **Check progress** — use `fn_task_show` to monitor step completion
|
|
55
|
-
- **Let it fail and retry** — if a task fails, check the log, then `fn_task_retry`
|
|
55
|
+
- **Let it fail and retry** — if a task fails, check the log, then `fn_task_retry` or create a focused follow-up task instead of pausing it
|
|
56
56
|
|
|
57
57
|
## Mission Planning Tips
|
|
58
58
|
|
|
@@ -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
|
|
|
@@ -63,7 +63,7 @@ Attach a file to a task. Supports images (png, jpg, gif, webp) and text files (t
|
|
|
63
63
|
|
|
64
64
|
### fn_task_pause
|
|
65
65
|
|
|
66
|
-
Pause a task — stops all automated agent and scheduler interaction
|
|
66
|
+
Pause a task for explicit user-requested manual control — stops all automated agent and scheduler interaction. Agents should not pause tasks to handle failures or blockers; use retry, create/delegate follow-up work, or let the task surface as failed instead.
|
|
67
67
|
|
|
68
68
|
| Parameter | Type | Required | Description |
|
|
69
69
|
|-----------|------|----------|-------------|
|
|
@@ -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,12 +12,20 @@ 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. |
|
|
18
26
|
| `fn_task_show` | Show full details for a task including steps, progress, and log entries. |
|
|
19
27
|
| `fn_task_attach` | Attach a file to a task. Supports images (png, jpg, gif, webp) and text files (txt, log, json, yaml, yml, toml, csv, xml). |
|
|
20
|
-
| `fn_task_pause` | Pause a task — stops all automated agent and scheduler interaction
|
|
28
|
+
| `fn_task_pause` | Pause a task for explicit user-requested manual control — stops all automated agent and scheduler interaction. Agents should not pause tasks to handle failures or blockers; use retry, create/delegate follow-up work, or let the task surface as failed instead. |
|
|
21
29
|
| `fn_task_unpause` | Unpause a task — resumes automated agent and scheduler interaction. |
|
|
22
30
|
| `fn_task_retry` | Retry a failed task — clears the error state. Non-review failures move to todo; in-review execution failures move to todo preserving progress; in-review merge failures stay in-place for auto-merge retry. |
|
|
23
31
|
| `fn_task_duplicate` | Duplicate an existing task, creating a fresh copy in planning. Copies the title and description but resets all execution state. The AI planning agent will replan the new task. |
|
|
@@ -60,7 +60,7 @@ Use `fn_task_show` with the task ID:
|
|
|
60
60
|
|
|
61
61
|
| Action | Tool | Notes |
|
|
62
62
|
|--------|------|-------|
|
|
63
|
-
| Pause automation | `fn_task_pause` | Stops scheduler and executor from touching the task |
|
|
63
|
+
| Pause automation | `fn_task_pause` | Stops scheduler and executor from touching the task; use only when the user explicitly requests manual control, not for failure/blocker handling |
|
|
64
64
|
| Resume automation | `fn_task_unpause` | Re-enables automated processing |
|
|
65
65
|
| Retry failed task | `fn_task_retry` | Clears error, moves back to todo |
|
|
66
66
|
| Duplicate task | `fn_task_duplicate` | Creates fresh copy in triage |
|