@runfusion/fusion 0.77.0-beta.6 → 0.77.0-beta.8
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 +42896 -39460
- package/dist/child-process-worker.js +7535 -4556
- package/dist/client/.vite/manifest.json +267 -330
- package/dist/client/assets/{AgentDetailView-oyY72uSo.js → AgentDetailView-DsMRc-aH.js} +4 -4
- package/dist/client/assets/{AgentPermissionPolicyEditor-C3Qo9p1M.js → AgentPermissionPolicyEditor-BXJ52YpO.js} +2 -2
- package/dist/client/assets/{AgentsView-M2MhTIGW.js → AgentsView-DO-25nlB.js} +4 -4
- package/dist/client/assets/{CommandCenter-CpcAt6jt.js → CommandCenter-BMXMg_I2.js} +18 -18
- package/dist/client/assets/DevServerView-DAeL5TYz.js +1 -0
- package/dist/client/assets/DirectoryPicker-Cw-XRjAa.js +1 -0
- package/dist/client/assets/DocumentsView-CusClN9u.js +1 -0
- package/dist/client/assets/EvalsView-gNdeUDww.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-Bmzbqzhs.js +1 -0
- package/dist/client/assets/{GoalsView-DPj59B3l.js → GoalsView-J8JMsoLn.js} +1 -1
- package/dist/client/assets/{InsightsView-QLJNkKJp.js → InsightsView-BVbv56K0.js} +3 -3
- package/dist/client/assets/{MemoryView-CDCS-1ig.js → MemoryView-DNvJFoDu.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DktXXrmF.js → PiExtensionsManager-BPMexS34.js} +2 -2
- package/dist/client/assets/PluginManager-DGEv-ptu.js +1 -0
- package/dist/client/assets/{PullRequestView-CkObT6e3.js → PullRequestView-CF7fx-Uo.js} +2 -2
- package/dist/client/assets/ReportModal-B8S5BFgn.js +21 -0
- package/dist/client/assets/ReportModal-Dx3f2aj7.css +1 -0
- package/dist/client/assets/{ResearchView-CryFrV8l.js → ResearchView-CBeXsevy.js} +1 -1
- package/dist/client/assets/{SecretsView-9YcNW_fo.js → SecretsView-Dmi9wZkv.js} +1 -1
- package/dist/client/assets/SettingsModal-D2kXP7Um.js +21 -0
- package/dist/client/assets/{SettingsModal-llkoaJev.js → SettingsModal-DSW3xnGk.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-B_Legu-A.js → SettingsTextareaRow-CLab4Vcd.js} +1 -1
- package/dist/client/assets/SetupWizardModal-Ct6juX9x.js +2 -0
- package/dist/client/assets/{SkillsView-CSeauwIw.js → SkillsView-Dn0bwT6i.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-cvReMlG-.js +8 -0
- package/dist/client/assets/{agent-import-generation-CttglSmZ.js → agent-import-generation-C8_ewVzC.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-f-9mwRbD.js → agentsOrgChartLayout-p1i6XROQ.js} +1 -1
- package/dist/client/assets/{app-C_PTWuI1.js → app-BOvA34XN.js} +3 -3
- package/dist/client/assets/{app-BBSLJDbV.js → app-Bic4iWXQ.js} +3 -3
- package/dist/client/assets/{app-Bvr57EZQ.js → app-BlbH7Tir.js} +2 -2
- package/dist/client/assets/{app-DwvelD-n.js → app-C6TctczU.js} +3 -3
- package/dist/client/assets/{app-DRW5hIgr.js → app-D3qZmEIu.js} +3 -3
- package/dist/client/assets/{app-BKwOvuxE.js → app-DLnMkUt5.js} +2 -2
- package/dist/client/assets/{app-DKx18PHE.js → app-mNy0DeDM.js} +3 -3
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DA_Hm_di.js → architectureDiagram-3BPJPVTR-CzCk1QdH.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-JF7K8CcV.js → blockDiagram-GPEHLZMM-74Rj-5ov.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DN-wklCP.js → c4Diagram-AAUBKEIU-B570qYH-.js} +1 -1
- package/dist/client/assets/channel-DWAK5y-J.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-ChtjU8Cu.js → chunk-2J33WTMH-DejJkxt6.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-dJL0n3nn.js → chunk-4BX2VUAB-DlgxkBuE.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Bfg-QB9A.js → chunk-55IACEB6-XCfE8PwC.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BHPPwYUS.js → chunk-727SXJPM-D-nDw0Bi.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DIIpPUQN.js → chunk-AQP2D5EJ-C4KySao0.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-D230R32b.js → chunk-FMBD7UC4-CXKdLygA.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-0Lhp5CRv.js → chunk-ND2GUHAM-bNYWWGVJ.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BxbHBfKJ.js → chunk-QZHKN3VN-cfBQJ-MX.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-WTkXRkfm.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WTkXRkfm.js +1 -0
- package/dist/client/assets/{common-13IRj_PO.js → common-BsNuuNOe.js} +1 -1
- package/dist/client/assets/{common-BBynATth.js → common-CASsTuSW.js} +1 -1
- package/dist/client/assets/{common-BG-vw0tL.js → common-CfyFt5OG.js} +1 -1
- package/dist/client/assets/{common-DSo46rnH.js → common-DS98trLj.js} +1 -1
- package/dist/client/assets/common-DeoHWJCq.js +1 -0
- package/dist/client/assets/common-PpMdoH5r.js +1 -0
- package/dist/client/assets/{common-vpHuuvkd.js → common-cN--mrmm.js} +1 -1
- package/dist/client/assets/{cose-bilkent-S5V4N54A-3vEwhfYz.js → cose-bilkent-S5V4N54A-CiZrg3mQ.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-Br44UsdY.js → dagre-BM42HDAG-Bckph2U4.js} +1 -1
- package/dist/client/assets/{dashboard-view-_EglxMDl.js → dashboard-view-CN_fkDM1.js} +1 -1
- package/dist/client/assets/{dashboard-view-BldxxYfz.js → dashboard-view-CVYHQZwx.js} +1 -1
- package/dist/client/assets/dashboard-view-DDRKwfFs.js +1 -0
- package/dist/client/assets/{dashboard-view-CcPcELPx.js → dashboard-view-IuPjDVGa.js} +2 -2
- package/dist/client/assets/{diagram-2AECGRRQ-CLNxbHUP.js → diagram-2AECGRRQ-Bnaurex7.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-D3cNAeQH.js → diagram-5GNKFQAL-BKz1omVN.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DkX7h6to.js → diagram-KO2AKTUF-C51lEZwo.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-6iQIiYUr.js → diagram-LMA3HP47-BYm5gql7.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-Caje3229.js → diagram-OG6HWLK6-B9CFA4ha.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-BkU-1HB1.js → erDiagram-TEJ5UH35-BLyCSssl.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BRx3V6RE.js → flowDiagram-I6XJVG4X-yDVmpkro.js} +1 -1
- package/dist/client/assets/{folder-open-BaSOBfk2.js → folder-open-Cf2NA9nV.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-D9f1kH3t.js → ganttDiagram-6RSMTGT7-mC9YPFcx.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CQwmZcRd.js → gitGraphDiagram-PVQCEYII-DS0bEccv.js} +1 -1
- package/dist/client/assets/index-BjM7LxzY.js +2805 -0
- package/dist/client/assets/index-DcKIzuMk.css +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-DYWBkGjG.js → infoDiagram-5YYISTIA-CuuNZITP.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Df0Nzvh4.js → ishikawaDiagram-YF4QCWOH-MBSaC94m.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-bSvrZSyZ.js → journeyDiagram-JHISSGLW-DkaAow9E.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-yHJ101M8.js → kanban-definition-UN3LZRKU-DSf5OLtq.js} +1 -1
- package/dist/client/assets/{mermaid.core-Bc_0VLJw.js → mermaid.core-HmTn21MF.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DWRnMguM.js → mindmap-definition-RKZ34NQL-sv0Dl8aI.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-Ds-DEOqr.js → pieDiagram-4H26LBE5-BDK2IQNq.js} +1 -1
- package/dist/client/assets/{puzzle-CdYF81IT.js → puzzle-D00mP67o.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Bz-j2fkf.js → quadrantDiagram-W4KKPZXB-CiWAhwf1.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BaQ_PaZ-.js → requirementDiagram-4Y6WPE33-DwC99D35.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-pUCz8V4-.js → sankeyDiagram-5OEKKPKP-CQn8z721.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CFwUMspe.js → sequenceDiagram-3UESZ5HK-B0CT8-vw.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-Crocrob7.js → standing-instructions-template-BIBO_Prr.js} +2 -2
- package/dist/client/assets/{stateDiagram-AJRCARHV-CHZwo-vd.js → stateDiagram-AJRCARHV-BYAB_dFF.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BTvKaIZR.js → stateDiagram-v2-BHNVJYJU-Cd19uJBk.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Cn3XIoz2.js → timeline-definition-PNZ67QCA-DQLh8XkY.js} +1 -1
- package/dist/client/assets/{upload--GqImz6h.js → upload-D4pkNOz2.js} +1 -1
- package/dist/client/assets/{users-B0h1q4x6.js → users-COgviS_S.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CS0FNVU_.js → vennDiagram-CIIHVFJN-BmwG1Wud.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-DdYkfF5d.js → wardley-L42UT6IY-BiO7jkmj.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B_rFmPCh.js → wardleyDiagram-YWT4CUSO-Dq0IPg5H.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CCoaCgmc.js → xychartDiagram-2RQKCTM6-BlMOlSBc.js} +1 -1
- package/dist/client/index.html +13 -6
- package/dist/client/theme-data.css +85 -0
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +42201 -38907
- package/dist/migrations/0065_fn_149_review_convergence_stage.sql +3 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +62 -11
- package/dist/plugin-sdk/index.js +140 -46
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +195 -49
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +140 -46
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/engine-tools.md +5 -5
- package/dist/client/assets/ChatView-DS4XiCm_.css +0 -1
- package/dist/client/assets/ChatView-zKrUSqiQ.js +0 -13
- package/dist/client/assets/DevServerView-CjTneoG7.js +0 -1
- package/dist/client/assets/DirectoryPicker-BY6V5HLV.js +0 -1
- package/dist/client/assets/DocumentsView-RDK56-qg.js +0 -1
- package/dist/client/assets/EvalsView-DKK4ceUW.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DiBPZVwC.js +0 -1
- package/dist/client/assets/PluginManager-CQ3iEFMq.js +0 -1
- package/dist/client/assets/ReportModal-B5LTdDgi.js +0 -21
- package/dist/client/assets/ReportModal-lzN_xrnM.css +0 -1
- package/dist/client/assets/SessionTerminal-2ZSXmOkG.css +0 -1
- package/dist/client/assets/SessionTerminal-BWsA9puD.js +0 -2
- package/dist/client/assets/SettingsModal-CL6aiXiI.js +0 -21
- package/dist/client/assets/SetupWizardModal-DLA4UAGp.js +0 -2
- package/dist/client/assets/WorkflowNodeEditor-CGgMiiWy.js +0 -8
- package/dist/client/assets/channel-CwFfFSI9.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C8dZsxxX.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C8dZsxxX.js +0 -1
- package/dist/client/assets/common-DbOCE-0i.js +0 -1
- package/dist/client/assets/common-DnXF4Jmj.js +0 -1
- package/dist/client/assets/dashboard-view-B0OM3KYC.js +0 -1
- package/dist/client/assets/index-B8PcG8AJ.js +0 -2774
- package/dist/client/assets/index-Dki2LBAp.css +0 -1
- package/dist/client/assets/shield-alert-4qeU3_Rm.js +0 -6
- package/dist/client/assets/useDiscoveredSkillsCache-BEHgTFai.js +0 -1
|
@@ -163179,6 +163179,8 @@ var tasks = projectSchema.table("tasks", {
|
|
|
163179
163179
|
branchConflictRecoveryCount: integer("branch_conflict_recovery_count").default(0),
|
|
163180
163180
|
reviewerContextRetryCount: integer("reviewer_context_retry_count").default(0),
|
|
163181
163181
|
reviewerFallbackRetryCount: integer("reviewer_fallback_retry_count").default(0),
|
|
163182
|
+
reviewConvergenceStage: integer("review_convergence_stage").default(0),
|
|
163183
|
+
reviewConvergenceEscalationCount: integer("review_convergence_escalation_count").default(0),
|
|
163182
163184
|
nextRecoveryAt: text("next_recovery_at"),
|
|
163183
163185
|
error: text("error"),
|
|
163184
163186
|
summary: text("summary"),
|
|
@@ -165499,7 +165501,16 @@ var projectTableNames = [
|
|
|
165499
165501
|
"chat_rooms",
|
|
165500
165502
|
"chat_room_members",
|
|
165501
165503
|
"chat_room_messages",
|
|
165502
|
-
"chat_token_usage"
|
|
165504
|
+
"chat_token_usage",
|
|
165505
|
+
/*
|
|
165506
|
+
FNXC:WorkspaceCoordination 2026-08-23-20:05:
|
|
165507
|
+
FN-9059 (migration 0060) added these two tables to the schema without registering them here, so
|
|
165508
|
+
every registry consumer under-counted them: the PostgreSQL test harness never TRUNCATEd them
|
|
165509
|
+
between tests (a held `repo:<repo>` lease leaked from one case into the next and made the next
|
|
165510
|
+
land report the previous test's successor as the busy holder), and health compaction skipped them.
|
|
165511
|
+
*/
|
|
165512
|
+
"workspace_coordination_leases",
|
|
165513
|
+
"workspace_land_intents"
|
|
165503
165514
|
];
|
|
165504
165515
|
|
|
165505
165516
|
// ../core/src/postgres/schema/central.ts
|
|
@@ -166276,6 +166287,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
166276
166287
|
openrouterAppAttribution: void 0,
|
|
166277
166288
|
openrouterModelFilters: void 0,
|
|
166278
166289
|
openrouterProviderPreferences: void 0,
|
|
166290
|
+
orcarouterModelSync: true,
|
|
166279
166291
|
opencodeGoModelSync: true,
|
|
166280
166292
|
updateCheckEnabled: true,
|
|
166281
166293
|
fnBinaryCheckEnabled: true,
|
|
@@ -166691,6 +166703,16 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
166691
166703
|
executorEscalationProvider: void 0,
|
|
166692
166704
|
executorEscalationModelId: void 0,
|
|
166693
166705
|
executorEscalationNodeId: void 0,
|
|
166706
|
+
/*
|
|
166707
|
+
FNXC:ReviewConvergence 2026-08-23-21:05:
|
|
166708
|
+
FN-149's six review-convergence/arbitration keys are declared in BUILTIN_WORKFLOW_SETTINGS, which
|
|
166709
|
+
the U4 hard-move made the SINGLE source of truth for a moved key's default. Re-declaring them here
|
|
166710
|
+
put them back in the legacy object the hard-move emptied, so an undeclared key on a custom workflow
|
|
166711
|
+
could resolve to this literal instead of the declaration default — the exact drift
|
|
166712
|
+
`workflow-settings-fallback-alignment` guards. The declaration defaults are identical (both
|
|
166713
|
+
`*Enabled` default true, the provider/model lanes carry no default), and the reader uses
|
|
166714
|
+
`!== false`, so removing them here preserves behaviour and restores the invariant.
|
|
166715
|
+
*/
|
|
166694
166716
|
/**
|
|
166695
166717
|
* FNXC:Merge 2026-06-26-00:00:
|
|
166696
166718
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
@@ -167583,6 +167605,20 @@ function classifyWorkflowAgentNode(node) {
|
|
|
167583
167605
|
}
|
|
167584
167606
|
}
|
|
167585
167607
|
|
|
167608
|
+
// ../core/src/workflows/workflow-merge-region.ts
|
|
167609
|
+
var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
|
|
167610
|
+
"merge-gate",
|
|
167611
|
+
"merge-attempt",
|
|
167612
|
+
"manual-merge-hold",
|
|
167613
|
+
"retry-backoff",
|
|
167614
|
+
"recovery-router",
|
|
167615
|
+
"branch-group-member-integration",
|
|
167616
|
+
"branch-group-promotion",
|
|
167617
|
+
"pr-create",
|
|
167618
|
+
"pr-respond",
|
|
167619
|
+
"pr-merge"
|
|
167620
|
+
]);
|
|
167621
|
+
|
|
167586
167622
|
// ../core/src/workflows/workflow-extension-types.ts
|
|
167587
167623
|
function workflowExtensionRegistryId(pluginId, extensionId) {
|
|
167588
167624
|
return `plugin:${pluginId}:${extensionId}`;
|
|
@@ -168111,18 +168147,7 @@ function reachableFrom(start, outgoing) {
|
|
|
168111
168147
|
}
|
|
168112
168148
|
return seen;
|
|
168113
168149
|
}
|
|
168114
|
-
var INTERPRETER_ENTRY_NODE_KINDS =
|
|
168115
|
-
"merge-gate",
|
|
168116
|
-
"merge-attempt",
|
|
168117
|
-
"manual-merge-hold",
|
|
168118
|
-
"retry-backoff",
|
|
168119
|
-
"recovery-router",
|
|
168120
|
-
"branch-group-member-integration",
|
|
168121
|
-
"branch-group-promotion",
|
|
168122
|
-
"pr-create",
|
|
168123
|
-
"pr-respond",
|
|
168124
|
-
"pr-merge"
|
|
168125
|
-
]);
|
|
168150
|
+
var INTERPRETER_ENTRY_NODE_KINDS = MERGE_REGION_ENTRY_NODE_KINDS;
|
|
168126
168151
|
var MERGE_CLASS_NODE_KINDS = /* @__PURE__ */ new Set([
|
|
168127
168152
|
"merge-gate",
|
|
168128
168153
|
"merge-attempt",
|
|
@@ -169762,6 +169787,49 @@ var BUILTIN_REVIEW_REVISION_SETTINGS = [
|
|
|
169762
169787
|
default: DEFAULT_CODE_REVIEW_BLOCKING_SEVERITY,
|
|
169763
169788
|
description: 'Minimum finding severity that lets Code Review block merge. A REVISE carrying no finding at or above this level is recorded as APPROVE_WITH_NOTES and its findings are handed to the implementer. Choose "any" to block on every REVISE.'
|
|
169764
169789
|
},
|
|
169790
|
+
/*
|
|
169791
|
+
* FNXC:ReviewConvergence 2026-08-22-05:42:
|
|
169792
|
+
* FN-149 keeps recovery targets workflow-native so operators choose the cost and
|
|
169793
|
+
* capability of automatic review convergence without widening project policy.
|
|
169794
|
+
*/
|
|
169795
|
+
{
|
|
169796
|
+
id: "reviewConvergenceEscalationEnabled",
|
|
169797
|
+
name: "Review convergence escalation",
|
|
169798
|
+
type: "boolean",
|
|
169799
|
+
default: true,
|
|
169800
|
+
description: "Run one bounded alternate-model or replan recovery when a review repeats unchanged input."
|
|
169801
|
+
},
|
|
169802
|
+
{
|
|
169803
|
+
id: "reviewConvergenceEscalationProvider",
|
|
169804
|
+
name: "Review convergence escalation provider",
|
|
169805
|
+
type: "string",
|
|
169806
|
+
description: "Provider for the optional alternate-model review remediation target."
|
|
169807
|
+
},
|
|
169808
|
+
{
|
|
169809
|
+
id: "reviewConvergenceEscalationModelId",
|
|
169810
|
+
name: "Review convergence escalation model",
|
|
169811
|
+
type: "string",
|
|
169812
|
+
description: "Model for the optional alternate-model review remediation target."
|
|
169813
|
+
},
|
|
169814
|
+
{
|
|
169815
|
+
id: "reviewArbitrationEnabled",
|
|
169816
|
+
name: "Review arbitration",
|
|
169817
|
+
type: "boolean",
|
|
169818
|
+
default: true,
|
|
169819
|
+
description: "Enable bounded third-model arbitration after a review disagreement persists."
|
|
169820
|
+
},
|
|
169821
|
+
{
|
|
169822
|
+
id: "reviewArbitrationProvider",
|
|
169823
|
+
name: "Review arbitration provider",
|
|
169824
|
+
type: "string",
|
|
169825
|
+
description: "Provider for the optional review arbitration target."
|
|
169826
|
+
},
|
|
169827
|
+
{
|
|
169828
|
+
id: "reviewArbitrationModelId",
|
|
169829
|
+
name: "Review arbitration model",
|
|
169830
|
+
type: "string",
|
|
169831
|
+
description: "Model for the optional review arbitration target."
|
|
169832
|
+
},
|
|
169765
169833
|
{
|
|
169766
169834
|
id: "planReviewReplanCap",
|
|
169767
169835
|
name: "Plan Review replan cap",
|
|
@@ -169967,16 +170035,11 @@ You have tools to report progress. The board updates in real-time.
|
|
|
169967
170035
|
|
|
169968
170036
|
/*
|
|
169969
170037
|
FNXC:TaskRecommendations 2026-08-09-04:06:
|
|
169970
|
-
FN-
|
|
169971
|
-
completion boundary.
|
|
169972
|
-
|
|
170038
|
+
FN-125 requires task-execution sessions to preserve optional, non-blocking discoveries only at the
|
|
170039
|
+
accepted completion boundary. Durable Workflow Executor sessions cannot create or delegate tasks;
|
|
170040
|
+
in-scope work remains in the current task and external blockers use the honest blocked exit.
|
|
169973
170041
|
*/
|
|
169974
|
-
**Out-of-scope findings at completion:**
|
|
169975
|
-
|
|
169976
|
-
Use \`task_create\` or \`fn_delegate_task\` only when the task explicitly requires immediate filing, necessary dependency coordination, or the operator directs it. When creating multiple related tasks, declare dependencies between them:
|
|
169977
|
-
\`task_create(description="load door sounds", dependencies=[])\` \u2192 returns KB-050
|
|
169978
|
-
\`task_create(description="play sound on door open/close", dependencies=["KB-050"])\`
|
|
169979
|
-
|
|
170042
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, at the final accepted \`fn_task_done(outcome="completed")\` checkpoint evaluate optional, non-blocking findings as genuine task-ready \`recommendations\` (or \`recommendations: []\` when none qualify). Each recommendation needs a stable unique \`id\`, \`title\`, \`description\`, and \`category\`; never use it for a required current-task fix, blocker, secret, executable command, reasoning transcript, or filler. Implement required in-scope work directly in this task.
|
|
169980
170043
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
169981
170044
|
|
|
169982
170045
|
## Task Documents
|
|
@@ -170048,16 +170111,16 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
170048
170111
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
170049
170112
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
170050
170113
|
-->
|
|
170051
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
170114
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
170052
170115
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
170053
170116
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
170054
170117
|
- Read "Context to Read First" files before starting
|
|
170055
170118
|
- Follow the "Do NOT" section strictly
|
|
170056
170119
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
170057
|
-
-
|
|
170120
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
170058
170121
|
- Update documentation listed in "Must Update" and check "Check If Affected"
|
|
170059
170122
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
170060
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
170123
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
170061
170124
|
- Removing code is acceptable ONLY when it is explicitly part of your task's mission
|
|
170062
170125
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
170063
170126
|
|
|
@@ -170104,6 +170167,13 @@ Lint, tests, and typecheck are also hard quality gates:
|
|
|
170104
170167
|
- Keep fixing failures caused by your change until lint, impacted tests, build, and typecheck pass.
|
|
170105
170168
|
- If the repository exposes a typecheck command, run it and fix failures caused by your change.
|
|
170106
170169
|
- When tests fail, classify whether the failure is caused by your change, a pre-existing defect, an unrelated flaky test, or an outdated test expectation.
|
|
170170
|
+
|
|
170171
|
+
**A behavior change owns every test that asserts the old behavior.** Targeted verification runs the tests for files you TOUCHED; the tests encoding the behavior you just changed usually live in files you did NOT touch, so a green targeted run is not evidence that none exist. Before finishing, search for them:
|
|
170172
|
+
- Added a guard, validation, or required field? Grep for the FIXTURES it will now refuse \u2014 they are outside your File Scope \u2014 and fix each to state its intent explicitly.
|
|
170173
|
+
- Removed a feature? Delete its tests. A test asserting a deliberately removed contract guards nothing, and making it pass later means re-adding removed behavior.
|
|
170174
|
+
- Changed an order, default, constant, or prompt string? Grep for the literal; topology lists, prompt-content assertions, and size budgets live far from the code they describe.
|
|
170175
|
+
- Added a public store/service method? Update the inventory/drift guards that require every public surface to be classified.
|
|
170176
|
+
Fix at the SHARED FIXTURE FACTORY, not per test \u2014 one helper usually explains dozens of failures. Never make a stale test pass by weakening it: update the fixture, record the new truth, or delete the test naming the change that removed its subject.
|
|
170107
170177
|
- If broad workspace verification fails on unrelated or pre-existing failures after impacted checks pass, do NOT expand this task by fixing unrelated areas. Log the evidence, quarantine flakes per project policy, or create/link a follow-up task.
|
|
170108
170178
|
- Do not repeatedly rerun a broad failing or hanging workspace command without a new hypothesis and a narrower confirming command.
|
|
170109
170179
|
|
|
@@ -170376,6 +170446,7 @@ files with assertions that run via a test runner. Typechecks and builds are NOT
|
|
|
170376
170446
|
tests. Manual verification is NOT a test.
|
|
170377
170447
|
|
|
170378
170448
|
- Each implementation step should include writing tests for the code being changed
|
|
170449
|
+
- **If the task CHANGES, GATES, or REMOVES existing behavior, include a step to find and update the tests that assert the OLD behavior.** Name the search in that step: the fixtures a new guard will now refuse, the tests of a removed feature, or the literal to grep for a changed order/default/constant/prompt string. Those tests live OUTSIDE the File Scope, so targeted verification will not surface them and the executor will not find them by accident. Measured 2026-08-24: five such changes left ~135 stale failing tests behind, every one having passed its own targeted verification; one shared fixture line accounted for 37 of them.
|
|
170379
170450
|
- For bug fixes and UI-affordance add/remove tasks, the spec MUST include a \`## Surface Enumeration\` section. The workflow Plan Review gate validates this before execution when plan review is enabled; missing coverage is a blocking REVISE.
|
|
170380
170451
|
- For bug fixes and UI-affordance add/remove tasks, populate \`## Surface Enumeration\` with this checklist from \`docs/testing.md\`: providers/bridges/execution paths; desktop + mobile breakpoints/platforms; empty/undefined/duplicate/populated data states; shared hooks/components/modules/helpers; every component that renders the affordance; leftover shells after removal.
|
|
170381
170452
|
- For bug fixes and UI-affordance add/remove tasks, regression tests must assert the invariant across all known surfaces \u2014 enumerate every provider/bridge, desktop + mobile breakpoints, empty/undefined/populated data states, and for UI-affordance changes every component rendering the affordance plus leftover shells after removal \u2014 not just the reported repro (see FN-5787/FN-5789/FN-5803, FN-5751, and FN-6115/FN-6118/FN-6123)
|
|
@@ -170731,7 +170802,7 @@ You have tools to report progress. The board updates in real-time.
|
|
|
170731
170802
|
|
|
170732
170803
|
**Logging important actions:** \`task_log(message="what happened")\`
|
|
170733
170804
|
|
|
170734
|
-
**Out-of-scope findings at completion:** When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify.
|
|
170805
|
+
**Out-of-scope findings at completion:** This task-execution session cannot create or delegate tasks. When recommendation capture is enabled, retain optional, non-blocking discoveries as task-ready \`fn_task_done\` recommendations at accepted completion, or send \`recommendations: []\` when none qualify. Implement required in-scope work directly here; use the honest blocked exit only for a real external blocker. Never recommend required current-task work, blockers, secrets, commands, reasoning, or filler.
|
|
170735
170806
|
|
|
170736
170807
|
**Discovered a dependency:** \`task_add_dep(task_id="KB-XXX")\` \u2014 use when you discover mid-execution that another task must be completed first. This will return a warning first \u2014 you must call again with \`confirm=true\` to proceed. Adding a dependency stops execution, discards current work, and moves the task to triage for re-specification.
|
|
170737
170808
|
|
|
@@ -170801,15 +170872,15 @@ If you attempt to write to a path outside the worktree, the file tools will reje
|
|
|
170801
170872
|
FNXC:WorkflowRouting 2026-06-22-17:26:
|
|
170802
170873
|
Executors must not move the workflow of the task they are executing unless the user explicitly asked for that task's workflow. Agents remain free to set workflows on tasks they create because they are the creator for those new tasks.
|
|
170803
170874
|
-->
|
|
170804
|
-
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
170875
|
+
- Do not call \`fn_workflow_select\` to change the workflow of the task you are executing; you did not create that task, the user or triage did. The only exception is when the user explicitly requested a specific workflow for this task in a steering comment, task instruction, or similar direct instruction.
|
|
170805
170876
|
- **NEVER kill processes on port 4040.** Port 4040 is the production dashboard. Do not run \`kill\`, \`pkill\`, \`killall\`, or \`lsof -ti:4040 | xargs kill\` against it. If you need to start a test server, use \`--port 0\` for a random free port. If port 4040 is occupied, pick a different port \u2014 do NOT kill the occupant.
|
|
170806
170877
|
- Treat the File Scope in PROMPT.md as the expected starting scope, not a hard boundary when quality gates fail
|
|
170807
170878
|
- Read "Context to Read First" files before starting
|
|
170808
170879
|
- Follow the "Do NOT" section strictly
|
|
170809
170880
|
- If tests, lint, build, or typecheck fail and the fix requires touching code outside the declared File Scope, fix those failures directly and keep the repo green
|
|
170810
|
-
-
|
|
170881
|
+
- Implement mandatory and in-scope work directly in this task. Preserve optional out-of-scope follow-ups as completion recommendations.
|
|
170811
170882
|
- NEVER delete, remove, or gut modules, interfaces, settings, exports, or test files outside your File Scope
|
|
170812
|
-
- NEVER remove features as "cleanup" \u2014 if something seems unused,
|
|
170883
|
+
- NEVER remove features as "cleanup" \u2014 if something seems unused, record an optional completion recommendation for investigation instead
|
|
170813
170884
|
- If you remove existing functionality, you MUST create a changeset in \`.changeset/\` explaining the removal and rationale
|
|
170814
170885
|
|
|
170815
170886
|
## Spawning Child Agents
|
|
@@ -171676,11 +171747,15 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
171676
171747
|
// execute → browser-verification (optional-group) → review. When the group is
|
|
171677
171748
|
// disabled it passes through with outcome=success and routes straight to review.
|
|
171678
171749
|
{ from: "execute", to: "browser-verification", condition: "success" },
|
|
171679
|
-
|
|
171680
|
-
|
|
171681
|
-
|
|
171682
|
-
|
|
171683
|
-
|
|
171750
|
+
/*
|
|
171751
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
171752
|
+
Completion summary runs before Code Review because its agent may acquire and write the task
|
|
171753
|
+
worktree. The approving review is the final write-capable pre-merge stage, so landing consumes
|
|
171754
|
+
evidence for the branch it will publish rather than evidence invalidated by a later summary.
|
|
171755
|
+
*/
|
|
171756
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
171757
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
171758
|
+
{ from: "code-review", to: "review", condition: "success" },
|
|
171684
171759
|
{ from: "review", to: "merge-gate", condition: "success" },
|
|
171685
171760
|
{ from: "merge-gate", to: "branch-group-member-integration", condition: "outcome:auto-on" },
|
|
171686
171761
|
{ from: "merge-gate", to: "merge-manual-hold", condition: "outcome:auto-off" },
|
|
@@ -171693,6 +171768,12 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
171693
171768
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
171694
171769
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
171695
171770
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
171771
|
+
/*
|
|
171772
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
171773
|
+
Evidence rejected during an active graph merge is a fresh Code Review obligation, never a
|
|
171774
|
+
merge retry. Route the typed result to the final review gate before another landing attempt.
|
|
171775
|
+
*/
|
|
171776
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
171696
171777
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
171697
171778
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
171698
171779
|
{ from: "planning", to: "end", condition: "failure" },
|
|
@@ -171990,12 +172071,15 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
171990
172071
|
// KTD-5: bounded rework exhaustion → manual hold; release re-enters the group.
|
|
171991
172072
|
{ from: "steps", to: "rework-hold", condition: "outcome:rework-exhausted" },
|
|
171992
172073
|
{ from: "rework-hold", to: "browser-verification", condition: "success" },
|
|
171993
|
-
|
|
171994
|
-
|
|
171995
|
-
|
|
171996
|
-
|
|
171997
|
-
|
|
171998
|
-
|
|
172074
|
+
/*
|
|
172075
|
+
FNXC:WorkspaceReviewSeal 2026-08-21-19:36:
|
|
172076
|
+
A completion-summary agent can acquire the task worktree. It therefore precedes Code Review;
|
|
172077
|
+
the approval becomes the final write-sensitive pre-merge gate and cannot be invalidated by the
|
|
172078
|
+
built-in workflow after it is recorded.
|
|
172079
|
+
*/
|
|
172080
|
+
{ from: "browser-verification", to: "completion-summary", condition: "success" },
|
|
172081
|
+
{ from: "completion-summary", to: "code-review", condition: "success" },
|
|
172082
|
+
{ from: "code-review", to: "merge-gate", condition: "success" },
|
|
171999
172083
|
{ from: "browser-verification", to: "browser-verification-remediation", condition: "failure" },
|
|
172000
172084
|
{ from: "browser-verification-remediation", to: "browser-verification", condition: "success", kind: "rework" },
|
|
172001
172085
|
{ from: "code-review", to: "code-review-remediation", condition: "failure" },
|
|
@@ -172021,6 +172105,12 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
172021
172105
|
{ from: "merge-attempt", to: "post-merge-verification", condition: "success" },
|
|
172022
172106
|
{ from: "post-merge-verification", to: "end", condition: "success" },
|
|
172023
172107
|
{ from: "merge-attempt", to: "merge-retry", condition: "outcome:transient-failure" },
|
|
172108
|
+
/*
|
|
172109
|
+
FNXC:WorkspaceReviewReroute 2026-08-21-20:11:
|
|
172110
|
+
A stale workspace approval returns to the final Code Review gate through a bounded rework
|
|
172111
|
+
edge, preserving the existing graph owner instead of burning a merge retry.
|
|
172112
|
+
*/
|
|
172113
|
+
{ from: "merge-attempt", to: "code-review", condition: "outcome:workspace-review-required", kind: "rework" },
|
|
172024
172114
|
{ from: "merge-attempt", to: "merge-manual-hold", condition: "outcome:manual-required" },
|
|
172025
172115
|
{ from: "recovery-router", to: "merge-attempt", condition: "outcome:wake-merge", kind: "rework" },
|
|
172026
172116
|
{ from: "merge-attempt", to: "end", condition: "failure" }
|
|
@@ -172083,11 +172173,11 @@ var RAW_BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR = (() => {
|
|
|
172083
172173
|
if (!ir.edges.some((edge) => edge.from === "plan-replan" && edge.to === "plan-review" && edge.condition === "success")) {
|
|
172084
172174
|
ir.edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
172085
172175
|
}
|
|
172086
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
172087
|
-
ir.edges.push({ from: "
|
|
172176
|
+
if (!ir.edges.some((edge) => edge.from === "completion-summary" && edge.to === "code-review" && edge.condition === "success")) {
|
|
172177
|
+
ir.edges.push({ from: "completion-summary", to: "code-review", condition: "success" });
|
|
172088
172178
|
}
|
|
172089
|
-
if (!ir.edges.some((edge) => edge.from === "
|
|
172090
|
-
ir.edges.push({ from: "
|
|
172179
|
+
if (!ir.edges.some((edge) => edge.from === "code-review" && edge.to === "merge-gate" && edge.condition === "success")) {
|
|
172180
|
+
ir.edges.push({ from: "code-review", to: "merge-gate", condition: "success" });
|
|
172091
172181
|
}
|
|
172092
172182
|
return ir;
|
|
172093
172183
|
})();
|
|
@@ -172167,8 +172257,8 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
|
172167
172257
|
]);
|
|
172168
172258
|
v2.nodes = v2.nodes.filter((node) => !removedNodeIds.has(node.id));
|
|
172169
172259
|
v2.edges = v2.edges.filter((edge) => !removedNodeIds.has(edge.from) && !removedNodeIds.has(edge.to));
|
|
172170
|
-
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "
|
|
172171
|
-
v2.edges.push({ from: "steps", to: "
|
|
172260
|
+
if (!v2.edges.some((edge) => edge.from === "steps" && edge.to === "completion-summary")) {
|
|
172261
|
+
v2.edges.push({ from: "steps", to: "completion-summary", condition: "success" });
|
|
172172
172262
|
}
|
|
172173
172263
|
if (!v2.edges.some((edge) => edge.from === "merge-attempt" && edge.to === "end" && edge.condition === "success")) {
|
|
172174
172264
|
v2.edges.push({ from: "merge-attempt", to: "end", condition: "success" });
|
|
@@ -172755,10 +172845,12 @@ function linear(spec) {
|
|
|
172755
172845
|
...hasBrowserVerification ? [browserVerificationRemediationNode("in-progress")] : [],
|
|
172756
172846
|
...hasCodeReview ? [codeReviewRemediationNode("in-progress")] : []
|
|
172757
172847
|
] : [];
|
|
172848
|
+
const noOpTerminalNode = hasPlanReview ? { id: "plan-review-no-op", kind: "gate", column: "todo", config: { workflowAction: "plan-review-no-op" } } : void 0;
|
|
172758
172849
|
const nodes2 = [
|
|
172759
172850
|
{ id: "start", kind: "start" },
|
|
172760
172851
|
...workflowNodes,
|
|
172761
172852
|
...remediationNodes,
|
|
172853
|
+
...noOpTerminalNode ? [noOpTerminalNode] : [],
|
|
172762
172854
|
{ id: "end", kind: "end" }
|
|
172763
172855
|
];
|
|
172764
172856
|
const edges = [];
|
|
@@ -172774,6 +172866,8 @@ function linear(spec) {
|
|
|
172774
172866
|
}
|
|
172775
172867
|
if (hasPlanReview) {
|
|
172776
172868
|
edges.push({ from: "plan-replan", to: "plan-review", condition: "success", kind: "rework" });
|
|
172869
|
+
edges.push({ from: "plan-review", to: "plan-review-no-op", condition: "outcome:close-no-op" });
|
|
172870
|
+
edges.push({ from: "plan-review-no-op", to: "end", condition: "success" });
|
|
172777
172871
|
}
|
|
172778
172872
|
if (hasBrowserVerification) {
|
|
172779
172873
|
edges.push({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.77.0-beta.
|
|
3
|
+
"version": "0.77.0-beta.8",
|
|
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",
|
|
@@ -11,7 +11,7 @@ This reference documents tools injected by the engine at runtime for specific ag
|
|
|
11
11
|
|
|
12
12
|
| Tool | Agent Types | Purpose | Parameters |
|
|
13
13
|
|---|---|---|---|
|
|
14
|
-
| `fn_task_create` | triage,
|
|
14
|
+
| `fn_task_create` | triage, heartbeat | Create a follow-up task from within an agent run | `description` (string), `dependencies?` (string[]), `priority?` (`low` \| `normal` \| `high` \| `urgent`), `workflow_id?` (string) |
|
|
15
15
|
| `fn_task_log` | executor, heartbeat | Write significant task log entries | `message` (string), `outcome?` (string) |
|
|
16
16
|
| `fn_task_document_write` | triage, executor, heartbeat; chat/planning (explicit `task_id`) | Save/update a named **live-task** document revision, optionally with CAS; archived parents remain read-only | `key` (string), `content` (string), `author?` (string), `expected_revision?` (non-negative integer), `expected_content_hash?` (`sha256:<64 lowercase hex>`); chat/planning also require `task_id` (string) |
|
|
17
17
|
| `fn_task_document_read` | triage, executor, heartbeat; chat/planning (explicit `task_id`) | Read one named live or retained archived document; list mode remains live-only | `key?` (string); chat/planning also require `task_id` (string) |
|
|
@@ -53,7 +53,7 @@ Archived publication is deliberately absent from every runtime tool schema: ther
|
|
|
53
53
|
| `fn_update_identity` | heartbeat | Update the current agent's own `soul`, `instructionsText`, or `memory` fields | `soul?` (string), `instructionsText?` (string), `memory?` (string) |
|
|
54
54
|
| `fn_reflect_on_performance` | executor, heartbeat (when reflection service enabled) | Generate reflection insights from prior runs | `focus_area?` (string) |
|
|
55
55
|
| `fn_list_agents` | triage, executor, heartbeat | List agents (optionally filtered) | `role?` (string), `state?` (string), `includeEphemeral?` (boolean) |
|
|
56
|
-
| `fn_delegate_task` | triage,
|
|
56
|
+
| `fn_delegate_task` | triage, heartbeat | Create and assign a new task to a specific agent | `agent_id` (string), `description` (string), `dependencies?` (string[]), `workflow_id?` (string), `override?` (boolean) |
|
|
57
57
|
| `fn_get_agent_config` | executor, heartbeat | Read full config for a direct-report agent | `agent_id` (string) |
|
|
58
58
|
| `fn_update_agent_config` | executor, heartbeat | Update config fields for a direct-report, non-ephemeral agent | `agent_id` (string), optional: `soul`, `instructions_text`, `instructions_path`, `heartbeat_procedure_path`, `heartbeat_interval_ms`, `heartbeat_timeout_ms`, `max_concurrent_runs`, `message_response_mode` |
|
|
59
59
|
| `fn_agent_create` | executor, heartbeat | Create a non-ephemeral direct-report agent | `name` (string), `role` (string), optional: `soul`, `instructions_text`, `instructions_path`, `reportsTo`, `heartbeat_interval_ms`, `heartbeat_timeout_ms`, `max_concurrent_runs`, `message_response_mode` |
|
|
@@ -76,12 +76,12 @@ Archived publication is deliberately absent from every runtime tool schema: ther
|
|
|
76
76
|
|
|
77
77
|
## Executor-only runtime tools (`executor.ts`)
|
|
78
78
|
|
|
79
|
-
Note: step-session execution (`step-session-executor.ts`) reuses executor coordination tools (`fn_send_message`, `fn_read_messages`, `fn_list_agents`,
|
|
79
|
+
Note: step-session execution (`step-session-executor.ts`) reuses executor coordination tools (`fn_send_message`, `fn_read_messages`, `fn_list_agents`, task-document tools, and memory tools) so spawned/session-sliced execution keeps parity with main executor runs.
|
|
80
80
|
|
|
81
81
|
| Tool | Purpose | Parameters |
|
|
82
82
|
|---|---|---|
|
|
83
|
-
| `fn_task_update` | Update a spec step status (`pending`/`in-progress`/`done`/`skipped`), task dependencies, and/or workflow-defined custom field values | `step?` (number, 0-indexed; matches `### Step N:` in PROMPT.md, Step 0 = Preflight), `status?` (enum), `dependencies?` (string[]), `custom_fields?` (object keyed by field id; validated against the workflow field schema, `null` clears a field) |
|
|
84
|
-
| `fn_task_add_dep` | Add a dependency to current task (confirmation-gated) | `task_id` (string), `confirm?` (boolean) |
|
|
83
|
+
| `fn_task_update` | Update a spec step status (`pending`/`in-progress`/`done`/`skipped`), task dependencies (never a task it spawned), and/or workflow-defined custom field values | `step?` (number, 0-indexed; matches `### Step N:` in PROMPT.md, Step 0 = Preflight), `status?` (enum), `dependencies?` (string[]), `custom_fields?` (object keyed by field id; validated against the workflow field schema, `null` clears a field) |
|
|
84
|
+
| `fn_task_add_dep` | Add a dependency to current task (confirmation-gated; never a task it spawned) | `task_id` (string), `confirm?` (boolean) |
|
|
85
85
|
| `fn_task_done` | End the task: `outcome="completed"` (default) marks it complete; `outcome="blocked"` honestly parks it failed (`BLOCKED: <reason>`) with no completion claim, preserving steps/worktree and recording `blockedBy` as dependencies | `summary?` (string), `outcome?` (`completed` \| `blocked`), `blockedBy?` (string[]), `reason?` (string, required when blocked) |
|
|
86
86
|
| `fn_spawn_agent` | Spawn child agent in separate worktree | `name` (string), `role` (enum), `task` (string) |
|
|
87
87
|
| `fn_acquire_repo_worktree` | Acquire an isolated git worktree for a sub-repo in a workspace task (workspace mode only) | `repo` (string — must be one of the workspace's configured repos) |
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.chat-input-wrapper{position:relative;display:flex;flex:1;flex-direction:column;align-items:stretch;gap:var(--space-xs);min-width:0}.agent-mention-popup{position:absolute;z-index:250;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);min-width:220px;max-width:320px;max-height:240px;overflow-y:auto;box-shadow:var(--shadow-lg);padding:var(--space-xs) 0}.agent-mention-popup--below{top:calc(100% + var(--space-xs));left:0}.agent-mention-popup--above{bottom:calc(100% + var(--space-xs));left:0}.agent-mention-item{display:flex;align-items:center;gap:var(--space-sm);padding:calc(var(--space-sm) - (var(--space-xs) / 2)) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);color:var(--text);cursor:pointer;border:none;background:transparent;width:100%;text-align:left}.agent-mention-item:hover,.agent-mention-item--highlighted{background:var(--card-hover)}.agent-mention-item:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:var(--card-hover)}.agent-mention-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-mention-role{font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.agent-mention-empty{padding:calc(var(--space-sm) + (var(--space-xs) / 2)) var(--space-md);font-size:var(--space-md);color:var(--text-dim)}.agent-mention-section-header{padding:var(--space-xs) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs) * .5);text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.agent-mention-hint{padding:var(--space-xs) var(--space-md);font-size:var(--space-md);color:var(--text-muted)}.agent-mention-member-dot{background:var(--color-success)}@media(max-width:1024px){.agent-mention-popup{min-width:200px;max-width:min(280px,100%)}.agent-mention-popup--below,.agent-mention-popup--above{bottom:calc(100% + var(--space-xs));top:auto;left:0}}.file-mention-popup{position:absolute;z-index:250;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);min-width:calc(var(--space-xl) * 7 + var(--space-md));max-width:calc(var(--space-xl) * 10);max-height:calc(var(--space-xl) * 7 + var(--space-sm));overflow-y:auto;padding:var(--space-xs) 0}.file-mention-popup-groups,.file-mention-popup-group{display:flex;flex-direction:column}.file-mention-popup-group-header{padding:var(--space-xs) var(--space-md);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;letter-spacing:calc(var(--space-xs) / 2);text-transform:uppercase}.file-mention-popup-list{list-style:none;margin:0;padding:0}.file-mention-popup-item{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);cursor:pointer;color:var(--text);font-size:calc(var(--space-sm) + var(--space-xs) * 1.5)}.file-mention-popup-item:hover{background:var(--card-hover)}.file-mention-popup-item--selected{background:color-mix(in srgb,var(--todo) 15%,transparent)}.file-mention-popup-item:focus-visible{outline:none;box-shadow:var(--focus-ring);background:var(--card-hover)}.file-mention-popup-icon{flex-shrink:0;display:inline-flex;align-items:center;color:var(--text-muted);margin-top:1px}.file-mention-popup-info{display:flex;flex-direction:column;min-width:0;gap:calc(var(--space-xs) / 2)}.file-mention-popup-item-name{font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-mention-popup-item-path{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-mention-popup-task-row{display:flex;align-items:center;gap:var(--space-sm);min-width:0}.file-mention-popup-task-id{font-family:var(--font-mono);font-weight:600;color:var(--text);white-space:nowrap}.file-mention-popup-column-badge{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;line-height:1;text-transform:capitalize}.file-mention-popup-column-badge--triage{background:var(--status-triage-bg);color:var(--triage)}.file-mention-popup-column-badge--todo{background:var(--status-todo-bg);color:var(--todo)}.file-mention-popup-column-badge--in-progress{background:var(--status-in-progress-bg);color:var(--in-progress)}.file-mention-popup-column-badge--in-review{background:var(--status-in-review-bg);color:var(--in-review)}.file-mention-popup-column-badge--done{background:var(--status-done-bg);color:var(--done)}.file-mention-popup-column-badge--archived{background:var(--status-archived-bg);color:var(--text-muted)}.file-mention-popup-empty{padding:var(--space-lg) var(--space-md);text-align:center;color:var(--text-muted);font-size:var(--space-md)}.file-mention-popup-loading{display:flex;align-items:center;justify-content:center;padding:var(--space-lg) var(--space-md)}.file-mention-popup-loading .spinner{display:inline-block;width:var(--space-lg);height:var(--space-lg);border:calc(var(--space-xs) / 2) solid var(--border);border-top-color:var(--text-muted);border-radius:50%;animation:file-mention-popup-spinner-spin var(--duration-slow) linear infinite}@keyframes file-mention-popup-spinner-spin{to{transform:rotate(360deg)}}@media(max-width:768px){.file-mention-popup{top:auto!important;bottom:calc(100% + var(--space-xs));left:max(var(--space-md),env(safe-area-inset-left,0px))!important;right:max(var(--space-md),env(safe-area-inset-right,0px));max-width:none;width:auto;max-height:calc(var(--space-xl) * 8 + var(--space-sm))}.file-mention-popup-item{min-height:calc(var(--space-lg) + var(--space-xl) - var(--space-sm));padding:calc(var(--space-sm) + (var(--space-xs) / 2)) var(--space-md)}}.chat-empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-lg);color:var(--text-muted);padding:var(--space-xl);text-align:center}.chat-empty-state h2{font-size:calc(var(--space-xl) - var(--space-xs));color:var(--text);margin:0}.chat-empty-state-agent-select select{padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.5));min-width:calc(var(--space-xl) * 8 + var(--space-sm))}.chat-new-dialog-backdrop{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100}.chat-new-dialog{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-xl);width:calc(var(--space-xl) * 16 + var(--space-md));max-width:calc(100vw - (var(--space-md) * 2));display:flex;flex-direction:column;gap:var(--space-lg)}.chat-new-dialog h3{margin:0;font-size:calc(var(--space-lg) + (var(--space-xs) / 2))}.chat-new-dialog label{display:flex;flex-direction:column;gap:var(--space-xs);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.25));color:var(--text-muted)}.chat-new-dialog input,.chat-new-dialog select{padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.5))}.chat-new-dialog-mode-toggle{display:flex;gap:var(--space-xs)}.chat-new-dialog-mode-btn{flex:1;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.25));cursor:pointer;transition:var(--transition-fast)}.chat-new-dialog-mode-btn:hover{background:color-mix(in srgb,var(--todo) 10%,transparent);color:var(--text);border-color:color-mix(in srgb,var(--todo) 40%,var(--border))}.chat-new-dialog-mode-btn--active{background:color-mix(in srgb,var(--todo) 18%,transparent);color:var(--text);border-color:color-mix(in srgb,var(--todo) 50%,var(--border));font-weight:500}.chat-new-dialog-mode-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.chat-new-dialog-actions{display:flex;justify-content:flex-end;gap:var(--space-sm)}.chat-view-delete-dialog-copy{margin:0 0 var(--space-lg);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.5)}.chat-new-dialog-model-label{display:flex;flex-direction:column;gap:var(--space-sm)}.chat-new-dialog-loading,.chat-new-dialog-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.5))}.chat-new-dialog-agent-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-xs)}.chat-new-dialog-agent-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:calc(var(--space-sm) + (var(--space-xs) * 1.5));text-align:left;cursor:pointer;transition:background var(--transition-fast)}.chat-new-dialog-agent-item:hover{background:var(--surface-hover)}.chat-new-dialog-agent-item--selected{background:color-mix(in srgb,var(--todo) 10%,transparent);border:1px solid color-mix(in srgb,var(--todo) 30%,transparent)}.chat-new-dialog-agent-name{flex:1;font-weight:500}.chat-new-dialog-agent-role{font-size:var(--space-md);color:var(--text-muted);text-transform:capitalize}.chat-new-dialog{overflow:visible}@media(max-width:768px){.quick-chat-fab{right:var(--space-xs);bottom:calc(var(--space-xs) + var(--executor-footer-height-mobile, var(--executor-footer-height, 0px)) + var(--mobile-nav-height, 44px) + env(safe-area-inset-bottom,0px))}.chat-view-dialog-backdrop{align-items:center;justify-content:center;overflow-y:auto;padding:var(--space-md);padding-top:max(var(--space-md),env(safe-area-inset-top,0px));padding-bottom:max(var(--space-md),env(safe-area-inset-bottom,0px))}.chat-view-dialog{width:100%;max-width:min(100%,calc(var(--space-xl) * 16));max-height:calc(100dvh - (var(--space-md) * 2) - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;overflow-y:auto}}.floating-window--create-room .floating-window__body{overflow:hidden}.floating-window--create-room .create-room-modal{width:100%;height:100%;max-width:none;max-height:none;border:none;border-radius:inherit;display:flex;flex-direction:column;gap:var(--space-md)}.create-room-modal-name-group{margin-bottom:0}.create-room-modal-name-field{display:flex;align-items:center;gap:var(--space-sm)}.create-room-modal-name-hash{color:var(--text-muted);font-family:var(--font-mono)}.create-room-modal-name-field .input{flex:1}.create-room-modal-selected{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding:0 var(--space-xl)}.create-room-modal-chip{border-color:var(--border)}.create-room-modal-member-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-2xl) * 8);overflow-y:auto;padding:0 var(--space-xl)}.create-room-modal-member-row{display:flex;width:100%;align-items:center;gap:var(--space-sm);text-align:left;border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);background:var(--surface);color:var(--text);transition:background var(--transition-fast),border-color var(--transition-fast)}.create-room-modal-member-row:hover{background:var(--card-hover)}.create-room-modal-member-row:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.create-room-modal-member-row--selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.create-room-modal-member-role{margin-left:auto;color:var(--text-muted);font-size:var(--space-md)}.create-room-modal-empty{color:var(--text-muted);padding:var(--space-md);text-align:center}@media(max-width:768px){.floating-window--create-room .create-room-modal{width:100%}.create-room-modal-selected,.create-room-modal-member-list{padding:0 var(--space-md)}.create-room-modal .modal-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.create-room-modal .modal-actions .btn{width:100%}}
|