@runfusion/fusion 0.77.0-beta.8 → 0.77.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/bin.js +8697 -4843
  2. package/dist/child-process-worker.js +8099 -4942
  3. package/dist/client/.vite/manifest.json +252 -252
  4. package/dist/client/assets/{AgentDetailView-DsMRc-aH.js → AgentDetailView-DLzgMG5W.js} +1 -1
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-BXJ52YpO.js → AgentPermissionPolicyEditor-CHoQs5wt.js} +1 -1
  6. package/dist/client/assets/{AgentsView-DO-25nlB.js → AgentsView-LDH9ih8-.js} +3 -3
  7. package/dist/client/assets/{CommandCenter-BMXMg_I2.js → CommandCenter-DQ2Wjfo6.js} +1 -1
  8. package/dist/client/assets/{DevServerView-DAeL5TYz.js → DevServerView-NunavHb5.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-Cw-XRjAa.js → DirectoryPicker-FymMYoLf.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-CusClN9u.js → DocumentsView-By9SHDrK.js} +1 -1
  11. package/dist/client/assets/{EvalsView-gNdeUDww.js → EvalsView-KHDm_jIP.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-Bmzbqzhs.js → ExperimentalAgentOnboardingModal-CXZXL44D.js} +1 -1
  13. package/dist/client/assets/{GoalsView-J8JMsoLn.js → GoalsView-CXJQllGu.js} +1 -1
  14. package/dist/client/assets/{InsightsView-BVbv56K0.js → InsightsView-PSlbun5-.js} +1 -1
  15. package/dist/client/assets/{MemoryView-DNvJFoDu.js → MemoryView-Bj31SvJV.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-BPMexS34.js → PiExtensionsManager-CbEnWrEb.js} +1 -1
  17. package/dist/client/assets/{PluginManager-DGEv-ptu.js → PluginManager-Ncr6jySY.js} +1 -1
  18. package/dist/client/assets/{PullRequestView-CF7fx-Uo.js → PullRequestView-3cR6DptH.js} +1 -1
  19. package/dist/client/assets/{ReportModal-B8S5BFgn.js → ReportModal-0cDRUWOi.js} +1 -1
  20. package/dist/client/assets/{ResearchView-CBeXsevy.js → ResearchView-rnrVF79-.js} +1 -1
  21. package/dist/client/assets/{SecretsView-Dmi9wZkv.js → SecretsView-kF17RkhO.js} +1 -1
  22. package/dist/client/assets/{SettingsModal-DSW3xnGk.js → SettingsModal-BQdO_hEg.js} +1 -1
  23. package/dist/client/assets/SettingsModal-DZdXfRcf.css +1 -0
  24. package/dist/client/assets/SettingsModal-DsA3Vg3y.js +21 -0
  25. package/dist/client/assets/{SettingsTextareaRow-CLab4Vcd.js → SettingsTextareaRow-BmxrECAt.js} +1 -1
  26. package/dist/client/assets/{SetupWizardModal-Ct6juX9x.js → SetupWizardModal-Dlgtw7CJ.js} +2 -2
  27. package/dist/client/assets/{SkillsView-Dn0bwT6i.js → SkillsView-D6BmZdru.js} +1 -1
  28. package/dist/client/assets/{WorkflowNodeEditor-cvReMlG-.js → WorkflowNodeEditor-CVHHMqvn.js} +1 -1
  29. package/dist/client/assets/{agent-import-generation-C8_ewVzC.js → agent-import-generation-CnrRwmdq.js} +1 -1
  30. package/dist/client/assets/{agentsOrgChartLayout-p1i6XROQ.js → agentsOrgChartLayout-purG_-3A.js} +1 -1
  31. package/dist/client/assets/app-BE1XE5i8.js +5 -0
  32. package/dist/client/assets/app-BZBG5TsV.js +5 -0
  33. package/dist/client/assets/app-BZk9L8ul.js +13 -0
  34. package/dist/client/assets/app-CSFGL3vj.js +13 -0
  35. package/dist/client/assets/app-CfwwdZoX.js +13 -0
  36. package/dist/client/assets/app-CtSn_Ct1.js +13 -0
  37. package/dist/client/assets/app-CyJ_qBtM.js +13 -0
  38. package/dist/client/assets/{architectureDiagram-3BPJPVTR-CzCk1QdH.js → architectureDiagram-3BPJPVTR-D_oUETkg.js} +1 -1
  39. package/dist/client/assets/{blockDiagram-GPEHLZMM-74Rj-5ov.js → blockDiagram-GPEHLZMM-SeVvCFBr.js} +1 -1
  40. package/dist/client/assets/{c4Diagram-AAUBKEIU-B570qYH-.js → c4Diagram-AAUBKEIU-C-bOAkwQ.js} +1 -1
  41. package/dist/client/assets/channel-CxElf6wV.js +1 -0
  42. package/dist/client/assets/{chunk-2J33WTMH-DejJkxt6.js → chunk-2J33WTMH-Dfy3ok0u.js} +1 -1
  43. package/dist/client/assets/{chunk-4BX2VUAB-DlgxkBuE.js → chunk-4BX2VUAB-CJhw204d.js} +1 -1
  44. package/dist/client/assets/{chunk-55IACEB6-XCfE8PwC.js → chunk-55IACEB6-Sgt6UphC.js} +1 -1
  45. package/dist/client/assets/{chunk-727SXJPM-D-nDw0Bi.js → chunk-727SXJPM-BvQJpRvs.js} +1 -1
  46. package/dist/client/assets/{chunk-AQP2D5EJ-C4KySao0.js → chunk-AQP2D5EJ-Cthfrcwy.js} +1 -1
  47. package/dist/client/assets/{chunk-FMBD7UC4-CXKdLygA.js → chunk-FMBD7UC4-Cz3x993o.js} +1 -1
  48. package/dist/client/assets/{chunk-ND2GUHAM-bNYWWGVJ.js → chunk-ND2GUHAM-PNcjW0Zw.js} +1 -1
  49. package/dist/client/assets/{chunk-QZHKN3VN-cfBQJ-MX.js → chunk-QZHKN3VN-4nKyNxvF.js} +1 -1
  50. package/dist/client/assets/classDiagram-4FO5ZUOK-CtVaR4ZF.js +1 -0
  51. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CtVaR4ZF.js +1 -0
  52. package/dist/client/assets/{cose-bilkent-S5V4N54A-CiZrg3mQ.js → cose-bilkent-S5V4N54A-Ceay49Yk.js} +1 -1
  53. package/dist/client/assets/{dagre-BM42HDAG-Bckph2U4.js → dagre-BM42HDAG-D9VGvuIj.js} +1 -1
  54. package/dist/client/assets/{dashboard-view-DDRKwfFs.js → dashboard-view-BBWCZOq1.js} +1 -1
  55. package/dist/client/assets/{dashboard-view-IuPjDVGa.js → dashboard-view-RQ4TPddv.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-CVYHQZwx.js → dashboard-view-ZGUl38Cw.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-CN_fkDM1.js → dashboard-view-gpkvNzBo.js} +1 -1
  58. package/dist/client/assets/{diagram-2AECGRRQ-Bnaurex7.js → diagram-2AECGRRQ-Q5XXKnnv.js} +1 -1
  59. package/dist/client/assets/{diagram-5GNKFQAL-BKz1omVN.js → diagram-5GNKFQAL-ByGKtZN7.js} +1 -1
  60. package/dist/client/assets/{diagram-KO2AKTUF-C51lEZwo.js → diagram-KO2AKTUF-B5wCSTUz.js} +1 -1
  61. package/dist/client/assets/{diagram-LMA3HP47-BYm5gql7.js → diagram-LMA3HP47-C4eGtq1N.js} +1 -1
  62. package/dist/client/assets/{diagram-OG6HWLK6-B9CFA4ha.js → diagram-OG6HWLK6-BxTb4tZr.js} +1 -1
  63. package/dist/client/assets/{erDiagram-TEJ5UH35-BLyCSssl.js → erDiagram-TEJ5UH35-CWt1TSp9.js} +1 -1
  64. package/dist/client/assets/{flowDiagram-I6XJVG4X-yDVmpkro.js → flowDiagram-I6XJVG4X-DUAfL604.js} +1 -1
  65. package/dist/client/assets/{folder-open-Cf2NA9nV.js → folder-open-CihApyzT.js} +1 -1
  66. package/dist/client/assets/{ganttDiagram-6RSMTGT7-mC9YPFcx.js → ganttDiagram-6RSMTGT7-DBS31zRY.js} +1 -1
  67. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DS0bEccv.js → gitGraphDiagram-PVQCEYII-BmYxNXvm.js} +1 -1
  68. package/dist/client/assets/index-BN0mudGK.js +2898 -0
  69. package/dist/client/assets/index-Bi6-k7Mt.css +1 -0
  70. package/dist/client/assets/{infoDiagram-5YYISTIA-CuuNZITP.js → infoDiagram-5YYISTIA-oeqISHuE.js} +1 -1
  71. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-MBSaC94m.js → ishikawaDiagram-YF4QCWOH-De7HSTs3.js} +1 -1
  72. package/dist/client/assets/{journeyDiagram-JHISSGLW-DkaAow9E.js → journeyDiagram-JHISSGLW-CnOQgak6.js} +1 -1
  73. package/dist/client/assets/{kanban-definition-UN3LZRKU-DSf5OLtq.js → kanban-definition-UN3LZRKU-DkkSXQc1.js} +1 -1
  74. package/dist/client/assets/{mermaid.core-HmTn21MF.js → mermaid.core-DPtpszZ3.js} +4 -4
  75. package/dist/client/assets/{mindmap-definition-RKZ34NQL-sv0Dl8aI.js → mindmap-definition-RKZ34NQL-CTVye-HX.js} +1 -1
  76. package/dist/client/assets/{pieDiagram-4H26LBE5-BDK2IQNq.js → pieDiagram-4H26LBE5-Dls6obgy.js} +1 -1
  77. package/dist/client/assets/{puzzle-D00mP67o.js → puzzle-o6sQbTzB.js} +1 -1
  78. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CiWAhwf1.js → quadrantDiagram-W4KKPZXB-BPHggPTG.js} +1 -1
  79. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DwC99D35.js → requirementDiagram-4Y6WPE33-Cdtv6VSz.js} +1 -1
  80. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CQn8z721.js → sankeyDiagram-5OEKKPKP-CgQ4VG36.js} +1 -1
  81. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B0CT8-vw.js → sequenceDiagram-3UESZ5HK-DllpS820.js} +1 -1
  82. package/dist/client/assets/{standing-instructions-template-BIBO_Prr.js → standing-instructions-template-BpjTC7lE.js} +1 -1
  83. package/dist/client/assets/{stateDiagram-AJRCARHV-BYAB_dFF.js → stateDiagram-AJRCARHV-BjDL2xGC.js} +1 -1
  84. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Cd19uJBk.js → stateDiagram-v2-BHNVJYJU-CvKLFCGR.js} +1 -1
  85. package/dist/client/assets/{timeline-definition-PNZ67QCA-DQLh8XkY.js → timeline-definition-PNZ67QCA-BHlmiUIC.js} +1 -1
  86. package/dist/client/assets/{upload-D4pkNOz2.js → upload-Bn7DjmMR.js} +1 -1
  87. package/dist/client/assets/{users-COgviS_S.js → users-CAwUf5mJ.js} +1 -1
  88. package/dist/client/assets/{vennDiagram-CIIHVFJN-BmwG1Wud.js → vennDiagram-CIIHVFJN-_pYBvG2q.js} +1 -1
  89. package/dist/client/assets/{wardley-L42UT6IY-BiO7jkmj.js → wardley-L42UT6IY-Cnu65RLv.js} +1 -1
  90. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Dq0IPg5H.js → wardleyDiagram-YWT4CUSO-DQC_N8jk.js} +1 -1
  91. package/dist/client/assets/{xychartDiagram-2RQKCTM6-BlMOlSBc.js → xychartDiagram-2RQKCTM6-CMaINq7s.js} +1 -1
  92. package/dist/client/index.html +2 -2
  93. package/dist/client/version.json +1 -1
  94. package/dist/droid-cli/package.json +1 -1
  95. package/dist/extension.js +7907 -4576
  96. package/dist/migrations/0066_chat_session_memory_focus.sql +20 -0
  97. package/dist/migrations/0067_fn_179_session_contention_wait_state.sql +3 -0
  98. package/dist/pi-claude-cli/package.json +1 -1
  99. package/dist/plugin-sdk/index.d.ts +53 -3
  100. package/dist/plugin-sdk/index.js +319 -2
  101. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +337 -20
  102. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +332 -15
  104. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +319 -2
  106. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +319 -2
  108. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +319 -2
  110. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +319 -2
  112. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +319 -2
  114. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +332 -15
  116. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +319 -2
  118. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-linear-import/bundled.js +319 -2
  120. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +332 -15
  122. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +319 -2
  124. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +319 -2
  126. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-quality/bundled.js +319 -2
  128. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-reports/bundled.js +319 -2
  130. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-roadmap/bundled.js +319 -2
  132. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-todos/bundled.js +319 -2
  134. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +422 -6468
  136. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  137. package/package.json +1 -1
  138. package/dist/client/assets/SettingsModal-D2kXP7Um.js +0 -21
  139. package/dist/client/assets/SettingsModal-Ds0Yj47X.css +0 -1
  140. package/dist/client/assets/app-BOvA34XN.js +0 -13
  141. package/dist/client/assets/app-Bic4iWXQ.js +0 -13
  142. package/dist/client/assets/app-BlbH7Tir.js +0 -5
  143. package/dist/client/assets/app-C6TctczU.js +0 -13
  144. package/dist/client/assets/app-D3qZmEIu.js +0 -13
  145. package/dist/client/assets/app-DLnMkUt5.js +0 -5
  146. package/dist/client/assets/app-mNy0DeDM.js +0 -13
  147. package/dist/client/assets/channel-DWAK5y-J.js +0 -1
  148. package/dist/client/assets/classDiagram-4FO5ZUOK-WTkXRkfm.js +0 -1
  149. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WTkXRkfm.js +0 -1
  150. package/dist/client/assets/index-BjM7LxzY.js +0 -2805
  151. package/dist/client/assets/index-DcKIzuMk.css +0 -1
@@ -5852,6 +5852,8 @@ var tasks = projectSchema.table("tasks", {
5852
5852
  executeRequeueLoopCount: integer("execute_requeue_loop_count").default(0),
5853
5853
  executeRequeueLoopSignature: text("execute_requeue_loop_signature"),
5854
5854
  recoveryRetryCount: integer("recovery_retry_count"),
5855
+ sessionContentionHoldCount: integer("session_contention_hold_count").default(0),
5856
+ sessionContentionWaitReason: text("session_contention_wait_reason"),
5855
5857
  taskDoneRetryCount: integer("task_done_retry_count").default(0),
5856
5858
  // FNXC:Lifecycle 2026-07-16-21:40: FN-8141 skip-bypass taint marker (nullable ISO timestamp).
5857
5859
  bulkCompletionRefusalAt: text("bulk_completion_refusal_at"),
@@ -7774,6 +7776,12 @@ var chatSessions = projectSchema.table("chat_sessions", {
7774
7776
  // FNXC:ChatPinned 2026-07-16-12:00: nullable timestamp persists the active
7775
7777
  // Direct-session pin; the ChatStore enforces the per-scope max-three invariant.
7776
7778
  pinnedAt: text("pinned_at"),
7779
+ // FNXC:MemoryFocus 2026-08-13-15:57: per-conversation read-time memory FOCUS/TOPIC
7780
+ // (migration 0059). NULL/empty ('' normalized to NULL) means the conversation
7781
+ // inherits the whole-project scope; otherwise it scopes fn_memory_search +
7782
+ // proactive recall to this topic. It is a read-time filter only — Stash capture
7783
+ // stays write-anywhere across every conversation.
7784
+ memoryFocus: text("memory_focus"),
7777
7785
  cliSessionFile: text("cli_session_file"),
7778
7786
  inFlightGeneration: jsonb("in_flight_generation"),
7779
7787
  cliExecutorAdapterId: text("cli_executor_adapter_id")
@@ -8212,7 +8220,33 @@ var projectTableNames = [
8212
8220
  land report the previous test's successor as the busy holder), and health compaction skipped them.
8213
8221
  */
8214
8222
  "workspace_coordination_leases",
8215
- "workspace_land_intents"
8223
+ "workspace_land_intents",
8224
+ /*
8225
+ FNXC:PgTableRegistry 2026-08-23-16:05:
8226
+ Second occurrence of the FN-9059 omission above, found by a leaking `current_plan_evidence` row:
8227
+ a task's plan-evidence version counter continued across tests (a fresh KB-002 started at v2), so
8228
+ `task-dependency-mutation.pg` asserted version 2 and read 3 in a whole-file run while passing in
8229
+ isolation. Every table declared with `projectSchema.table(...)` must be registered here — the
8230
+ harness reset and health compaction both drive off this list, and an unregistered table is simply
8231
+ never cleaned. `project-table-registry.test.ts` now fails when the two drift apart.
8232
+ */
8233
+ "chat_session_tags",
8234
+ "chat_tags",
8235
+ "configuration_revisions",
8236
+ "current_plan_evidence",
8237
+ "mission_lineage_stops",
8238
+ "spec_drift_reports",
8239
+ "spec_locks",
8240
+ "symbol_locks",
8241
+ "task_lifecycle_consumer_cursors",
8242
+ "task_lifecycle_consumer_dead_letters",
8243
+ "task_lifecycle_consumer_receipts",
8244
+ "task_lifecycle_consumer_registrations",
8245
+ "task_lifecycle_event_seq",
8246
+ "task_lifecycle_events",
8247
+ "task_verification_requests",
8248
+ "unplanned_execution_blocks",
8249
+ "workflow_agent_capacity_leases"
8216
8250
  ];
8217
8251
 
8218
8252
  // ../core/src/postgres/schema/central.ts
@@ -8983,6 +9017,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
8983
9017
  defaultProjectId: void 0,
8984
9018
  setupComplete: void 0,
8985
9019
  cliOnboardingCompletedAt: void 0,
9020
+ githubStarPromptDismissedAt: void 0,
8986
9021
  favoriteProviders: void 0,
8987
9022
  favoriteModels: void 0,
8988
9023
  openrouterModelSync: true,
@@ -9012,7 +9047,10 @@ var DEFAULT_GLOBAL_SETTINGS = {
9012
9047
  /* FNXC:UpdateAutomation 2026-08-21-02:48: Keep these schema keys unset because defaults merge into effective settings and `undefined` is distinct from explicit false. */
9013
9048
  autoUpdateEnabled: void 0,
9014
9049
  autoRestartAfterUpdate: void 0,
9015
- autoReloadOnVersionChange: true,
9050
+ /*
9051
+ FNXC:VersionAutoReload 2026-08-23-04:03:
9052
+ Version-change reload is mandatory, so its key is retired. Older persisted values are ignored because GLOBAL_SETTINGS_KEYS derives from this object and rejects unknown keys before save patches.
9053
+ */
9016
9054
  githubTrackingDefaultRepo: void 0,
9017
9055
  reportRoadmapDedupeEnabled: void 0,
9018
9056
  reportRoadmapLabel: void 0,
@@ -9607,6 +9645,40 @@ var DEFAULT_PROJECT_SETTINGS = {
9607
9645
  taskEvaluationRetention: void 0,
9608
9646
  memoryEnabled: true,
9609
9647
  memoryBackendType: "qmd",
9648
+ // FNXC:StashConfig 2026-08-13-16:35: (RUFU-068) Optional per-project Stash LCM
9649
+ // memory backend config. stashUrl points at the operator's Stash server
9650
+ // (default http://127.0.0.1:3457). stashApiKey is an override for hard
9651
+ // isolation (separate Stash instance/account); the PRIMARY API key lives in
9652
+ // the global secrets store ("stash-api-key") and is NEVER committed. Project
9653
+ // value wins over global. TencentDB's URL setting is intentionally NOT ported.
9654
+ stashUrl: "",
9655
+ stashApiKey: "",
9656
+ /*
9657
+ FNXC:Rufu126VectorSearch 2026-08-19-10:50:
9658
+ RUFU-126 (D3): opt-in vector (semantic) recall for the Stash memory backend.
9659
+ Default OFF — zero behavior change until the operator enables it (this is a
9660
+ prototype; rejected alternative was automatic capability detection, which
9661
+ would change default behavior and pay a per-process 404 round-trip against
9662
+ unpatched servers). When true, multi-word (≥2 tokens) recall queries try the
9663
+ Stash GET /api/v1/me/sessions/events/semantic-search endpoint first and fall
9664
+ back byte-identically to the RUFU-121 keyword path on any vector failure
9665
+ (see memory-backend-stash.ts search() + docs/research/stash-vector-search-evaluation.md
9666
+ for D1–D5). Schema-only, consistent with stashUrl/stashApiKey (no UI row).
9667
+ */
9668
+ stashVectorSearch: false,
9669
+ /*
9670
+ FNXC:StashSessionCapture 2026-08-19-04:37:
9671
+ (RUFU-122) Task-terminal transcript upload defaults. All are inert unless
9672
+ memoryBackendType === "stash". executorSessionCaptureEnabled gates ONLY the
9673
+ transcript upload (the RUFU-068 terminal anchor event still fires when it is
9674
+ off) and defaults ON. executorSessionCaptureMaxEvents caps transcript events
9675
+ per task; the engine keeps the most recent N (default 20000).
9676
+ executorSessionCaptureIncludeStatus is the schema-only "keep a setting" for
9677
+ uploading `status` log entries (default off; no UI row).
9678
+ */
9679
+ executorSessionCaptureEnabled: true,
9680
+ executorSessionCaptureMaxEvents: 2e4,
9681
+ executorSessionCaptureIncludeStatus: false,
9610
9682
  memoryAutoSummarizeEnabled: false,
9611
9683
  memoryAutoSummarizeThresholdChars: 5e4,
9612
9684
  memoryAutoSummarizeSchedule: "0 3 * * *",
@@ -13944,10 +14016,59 @@ var DEFAULT_TRIAGE_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.id ===
13944
14016
  var DEFAULT_TRIAGE_FAST_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.id === "default-triage-fast")?.prompt ?? "";
13945
14017
  var DEFAULT_REVIEWER_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.role === "reviewer")?.prompt ?? "";
13946
14018
  var DEFAULT_MERGER_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.role === "merger")?.prompt ?? "";
14019
+ var REVIEW_GATE_STEP_TEMPLATE_START = "### Step {N-1}: Testing & Verification";
14020
+ var REVIEW_GATE_STEP_TEMPLATE_END = "## Documentation Requirements";
14021
+ var REVIEW_GATED_STEP_CONTRACT = `## Review-gated step contract (OVERRIDES the step template above)
14022
+
14023
+ This workflow runs testing, verification, documentation, and delivery as REVIEW-COLUMN GATES after
14024
+ implementation. They are not task steps here.
14025
+
14026
+ - Do NOT emit a "Testing & Verification" step.
14027
+ - Do NOT emit a "Documentation & Delivery" step.
14028
+ - Emit implementation steps only, ending with the last implementation step.
14029
+ - Per-step verification bullets stay: each implementation step still runs its own targeted tests.
14030
+
14031
+ `;
14032
+ function applyReviewGatedStepContract(prompt) {
14033
+ const start = prompt.indexOf(REVIEW_GATE_STEP_TEMPLATE_START);
14034
+ const end = prompt.indexOf(REVIEW_GATE_STEP_TEMPLATE_END);
14035
+ if (start < 0 || end < 0 || end <= start) {
14036
+ return `${prompt}
14037
+
14038
+ ${REVIEW_GATED_STEP_CONTRACT}`;
14039
+ }
14040
+ return `${prompt.slice(0, start)}${REVIEW_GATED_STEP_CONTRACT}${prompt.slice(end)}`;
14041
+ }
14042
+ var DOCUMENTATION_STEP_TEMPLATE_START = "### Step {N}: Documentation & Delivery";
14043
+ var DOCUMENTATION_STEP_TEMPLATE_END = "## Documentation Requirements";
14044
+ var NO_DOCUMENTATION_STEP_CONTRACT = `## Documentation is not a step (OVERRIDES the step template above)
14045
+
14046
+ Do NOT emit a "Documentation & Delivery" step. "Testing & Verification" is the LAST step.
14047
+
14048
+ - **Repository documentation is implementation work.** When a change makes an existing doc wrong,
14049
+ update that doc inside the step that made the change, so it is reviewed together with the code.
14050
+ Never plan it as its own step, and never gate completion on it when the change documents nothing.
14051
+ - **Fusion-side delivery is not yours to plan.** The card summary, the delivery note, artifact
14052
+ registration, and out-of-scope follow-up tasks are produced by a review-column milestone after the
14053
+ review passes. Do not emit steps or checklist items for any of them.
14054
+
14055
+ `;
14056
+ function stripDocumentationDeliveryStep(prompt) {
14057
+ const start = prompt.indexOf(DOCUMENTATION_STEP_TEMPLATE_START);
14058
+ const end = prompt.indexOf(DOCUMENTATION_STEP_TEMPLATE_END);
14059
+ if (start < 0 || end < 0 || end <= start) {
14060
+ return `${prompt}
14061
+
14062
+ ${NO_DOCUMENTATION_STEP_CONTRACT}`;
14063
+ }
14064
+ return `${prompt.slice(0, start)}${NO_DOCUMENTATION_STEP_CONTRACT}${prompt.slice(end)}`;
14065
+ }
13947
14066
  var BUILTIN_SEAM_PROMPTS = {
13948
14067
  execute: DEFAULT_EXECUTOR_PROMPT,
13949
14068
  planning: DEFAULT_TRIAGE_PROMPT,
13950
14069
  "planning-fast": DEFAULT_TRIAGE_FAST_PROMPT,
14070
+ /* Review-gated tasks keep test and delivery work in review-column gates. */
14071
+ "planning-implementation-only": applyReviewGatedStepContract(DEFAULT_TRIAGE_PROMPT),
13951
14072
  "step-execute": DEFAULT_EXECUTOR_PROMPT,
13952
14073
  review: DEFAULT_REVIEWER_PROMPT,
13953
14074
  merge: DEFAULT_MERGER_PROMPT
@@ -14215,6 +14336,7 @@ function postMergeVerificationOptionalGroupNode(column = "done") {
14215
14336
  }
14216
14337
 
14217
14338
  // ../core/src/workflows/builtin-plan-review-group.ts
14339
+ var IMPLEMENTATION_ONLY_STEPS_CRITERION = "\n\n## Review-gated implementation steps\nREVISE when the proposed task-step list includes testing, verification, documentation, or delivery work. Those are review-column gates in this workflow, not implementation steps.";
14218
14340
  var PLAN_REVIEW_GROUP_ID = "plan-review";
14219
14341
  var PLAN_REVIEW_STEP_NODE_ID = "plan-review-step";
14220
14342
  var PLAN_REVIEW_NAME = "Plan Review";
@@ -14256,6 +14378,10 @@ function planReviewOptionalGroupNode(column, options = {}) {
14256
14378
  toolMode: "readonly",
14257
14379
  gateMode: "gate"
14258
14380
  };
14381
+ if (options.requireImplementationOnlySteps === true) {
14382
+ promptConfig.prompt = `${PLAN_REVIEW_PROMPT}${IMPLEMENTATION_ONLY_STEPS_CRITERION}`;
14383
+ promptConfig.requireImplementationOnlySteps = true;
14384
+ }
14259
14385
  if (options.requireExternalIntegrationEvidence === true) {
14260
14386
  promptConfig.requireExternalIntegrationEvidence = true;
14261
14387
  }
@@ -14296,6 +14422,7 @@ function planReviewOptionalGroupNode(column, options = {}) {
14296
14422
  var PLAN_REPLAN_NODE_ID = "plan-replan";
14297
14423
  var BROWSER_VERIFICATION_REMEDIATION_NODE_ID = "browser-verification-remediation";
14298
14424
  var CODE_REVIEW_REMEDIATION_NODE_ID = "code-review-remediation";
14425
+ var REVIEW_GATED_CODE_REVIEW_REMEDIATION_NODE_ID = "code-review-remediation-steps";
14299
14426
  function planReplanNode(column = "triage") {
14300
14427
  return {
14301
14428
  id: PLAN_REPLAN_NODE_ID,
@@ -14322,6 +14449,14 @@ function browserVerificationRemediationNode(column = "in-progress") {
14322
14449
  }
14323
14450
  };
14324
14451
  }
14452
+ function codeReviewRemediationStepsNode(column = "in-progress") {
14453
+ return {
14454
+ id: REVIEW_GATED_CODE_REVIEW_REMEDIATION_NODE_ID,
14455
+ kind: "prompt",
14456
+ column,
14457
+ config: { name: "Code review remediation", workflowAction: "review-remediation-steps", forWorkflowStepId: "code-review", toolMode: "readonly" }
14458
+ };
14459
+ }
14325
14460
  function codeReviewRemediationNode(column = "in-progress") {
14326
14461
  return {
14327
14462
  id: CODE_REVIEW_REMEDIATION_NODE_ID,
@@ -14970,6 +15105,147 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
14970
15105
  })();
14971
15106
  var BUILTIN_CODING_IDEAS_WORKFLOW_IR = parseWorkflowIr(RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR);
14972
15107
 
15108
+ // ../core/src/workflows/builtin-documentation-delivery-group.ts
15109
+ var DOCUMENTATION_DELIVERY_GROUP_ID = "documentation-delivery";
15110
+ var DOCUMENTATION_DELIVERY_PROMPT = `Report on the accepted implementation exactly once, for the operator who reads this card later.
15111
+
15112
+ You have NO writer. This session can read, search and list \u2014 nothing else. Everything durable you
15113
+ produce is the text you output here. Do not call a tool to save it, do not claim you saved anything,
15114
+ and do not modify repository files: the code has already been reviewed and must not change now.
15115
+
15116
+ ## 1. The card summary (always)
15117
+
15118
+ Open with 2-4 sentences of plain prose an operator can read to know what shipped and why. Mention
15119
+ user-visible behaviour or important files when they matter, and how it was verified. No headings, no
15120
+ bullet lists, no process narration, no verdict. This text becomes the task's summary.
15121
+
15122
+ ## 2. Follow-up proposals (only when they genuinely exist)
15123
+
15124
+ If the work surfaced worthwhile follow-up ideas OUTSIDE this task's scope, end your output with one
15125
+ fenced JSON block, and nothing after it:
15126
+
15127
+ \`\`\`json
15128
+ {"recommendations":[{"id":"stable-slug","title":"short title","description":"what to do and why","category":"improvement"}]}
15129
+ \`\`\`
15130
+
15131
+ - \`category\` is one of: improvement, feature, bug, other.
15132
+ - Each \`id\` must be unique and stable.
15133
+ - These are PROPOSALS for a human, not work orders and not tasks: an operator decides which become
15134
+ tasks. You cannot create tasks and must not try.
15135
+ - Ground every entry in something you actually saw. Omit the block entirely rather than invent work,
15136
+ restate this task, or pad the list. Fewer, real proposals are the correct answer.
15137
+ - Never put commands, shell syntax, credentials or secrets in a proposal.
15138
+
15139
+ You cannot block this card and you have no verdict to give. If something is missing or you could not
15140
+ determine it, say so plainly in the summary and finish.`;
15141
+ function documentationDeliveryOptionalGroupNode(column) {
15142
+ return {
15143
+ id: DOCUMENTATION_DELIVERY_GROUP_ID,
15144
+ kind: "optional-group",
15145
+ column,
15146
+ config: {
15147
+ name: "Documentation",
15148
+ defaultOn: true,
15149
+ /*
15150
+ FNXC:ReportingOnlyGroup 2026-08-26-06:56:
15151
+ Documentation ONLY documents. `gateMode: "advisory"` on the inner node was not enough and the
15152
+ gap was measured on a real card: its REVISE recorded `advisory_failure`, which held the merge
15153
+ door ("no current approval") AND bounced the card to implementation with no work to do, where
15154
+ it re-ran Code Review against an unchanged tree and merged on the second pass by luck.
15155
+ `reportingOnly` states the contract once: no approval to withhold, no remediation to request.
15156
+ */
15157
+ reportingOnly: true,
15158
+ template: {
15159
+ nodes: [{
15160
+ id: "documentation-delivery-step",
15161
+ kind: "prompt",
15162
+ config: {
15163
+ name: "Documentation",
15164
+ prompt: DOCUMENTATION_DELIVERY_PROMPT,
15165
+ toolMode: "readonly",
15166
+ gateMode: "advisory",
15167
+ workflowAction: "documentation-delivery",
15168
+ /* The two projection contracts that give a writer-less node durable output. */
15169
+ summaryTarget: "task",
15170
+ recommendationsTarget: "task"
15171
+ }
15172
+ }],
15173
+ edges: []
15174
+ }
15175
+ }
15176
+ };
15177
+ }
15178
+
15179
+ // ../core/src/workflows/builtin-coding-ideas-v2-workflow-ir.ts
15180
+ var clone = (ir) => JSON.parse(JSON.stringify(ir));
15181
+ var RAW_BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR = (() => {
15182
+ const ir = clone(BUILTIN_CODING_IDEAS_WORKFLOW_IR);
15183
+ ir.name = "builtin-coding-ideas-v2";
15184
+ const plan = ir.nodes.find((node) => node.id === "plan");
15185
+ if (!plan?.config) throw new Error("coding-ideas-v2 requires the inherited planning node");
15186
+ plan.config.prompt = stripDocumentationDeliveryStep(String(plan.config.prompt ?? ""));
15187
+ const parse = ir.nodes.find((node) => node.id === "parse");
15188
+ if (parse) parse.config = { ...parse.config, implementationOnlySteps: true, preserveRemediationSteps: true };
15189
+ const codeReviewRemediation = ir.nodes.find((node) => node.id === "code-review-remediation");
15190
+ if (codeReviewRemediation) {
15191
+ codeReviewRemediation.config = {
15192
+ ...codeReviewRemediation.config,
15193
+ ...codeReviewRemediationStepsNode().config,
15194
+ name: "Code Review Remediation"
15195
+ };
15196
+ }
15197
+ const codeReviewIndex = ir.nodes.findIndex((node) => node.id === "code-review");
15198
+ if (codeReviewIndex < 0) throw new Error("coding-ideas-v2 requires the inherited code-review gate");
15199
+ const codeReviewStep = ir.nodes[codeReviewIndex]?.config?.template?.nodes?.find((node) => node.id === "code-review-step");
15200
+ if (!codeReviewStep?.config) throw new Error("coding-ideas-v2 requires the inherited code-review-step template node");
15201
+ codeReviewStep.config.prompt = `${String(codeReviewStep.config.prompt ?? "")}
15202
+
15203
+ ## Step 0: Judge the TESTS before you judge the code
15204
+
15205
+ You cannot run anything: this session is read-only, \`bash\` is denied and no verification tool is
15206
+ available to you. Do not claim you ran lint, tests or a build, and do not ask for a command to be
15207
+ run. The executor already wrote and ran the tests; your job is to rule on whether that work is
15208
+ sound.
15209
+
15210
+ Read the test files in the diff and rule on FOUR things:
15211
+
15212
+ 1. **They exist.** A behavioural change with no test is a REVISE. Say which change is uncovered.
15213
+ 2. **They are real tests.** Assertions executed by a test runner. A typecheck is not a test, a build
15214
+ is not a test, and manual verification is not a test.
15215
+ 3. **They assert BEHAVIOUR.** Never a comment, a date stamp, or prose lifted from source. Asserting
15216
+ that a comment exists tests nothing a user or caller can observe. Code-construct guards
15217
+ (call-site allowlists, architectural ratchets) are legitimate and stay.
15218
+ 4. **They cover the INVARIANT, not just the reported case.** For a bug fix, a test that only
15219
+ reproduces the single reported symptom is incomplete: require every known surface. If this task
15220
+ CHANGED, GATED or REMOVED behaviour, the tests that encoded the OLD behaviour must have been
15221
+ updated or deleted in the same change \u2014 they live outside the File Scope and targeted
15222
+ verification will not have surfaced them.
15223
+
15224
+ Then review the code itself for what tests do not catch: logic errors, broken edge cases, and
15225
+ unhandled failure modes.`;
15226
+ ir.nodes.splice(codeReviewIndex + 1, 0, documentationDeliveryOptionalGroupNode("in-review"));
15227
+ const summaryIndex = ir.nodes.findIndex((node) => node.id === "completion-summary");
15228
+ if (summaryIndex >= 0) ir.nodes.splice(summaryIndex, 1);
15229
+ ir.edges = ir.edges.filter((edge) => edge.from !== "completion-summary" && edge.to !== "completion-summary");
15230
+ ir.edges = ir.edges.filter((edge) => !(edge.from === "code-review" && edge.to === "merge-gate"));
15231
+ ir.edges.push(
15232
+ { from: "steps", to: "code-review", condition: "success" },
15233
+ { from: "code-review", to: "documentation-delivery", condition: "success" },
15234
+ { from: "documentation-delivery", to: "merge-gate", condition: "success" },
15235
+ /*
15236
+ FNXC:CodingIdeasV2Workflow 2026-08-25-10:20:
15237
+ Documentation is ADVISORY: it reports, it never vetoes. Its failure edge reaches the merge gate
15238
+ exactly like its success edge, so a delivery note that could not be written cannot strand a
15239
+ card whose code is already approved. Measured why: as a blocking gate it bounced a task whose
15240
+ own plan said not to implement anything ("No task-specific implementation is present"), and the
15241
+ card looped through the review lane every five minutes indefinitely.
15242
+ */
15243
+ { from: "documentation-delivery", to: "merge-gate", condition: "failure" }
15244
+ );
15245
+ return ir;
15246
+ })();
15247
+ var BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR = parseWorkflowIr(RAW_BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR);
15248
+
14973
15249
  // ../core/src/workflows/builtin-brainstorming-workflow-ir.ts
14974
15250
  var APPROVAL_PHRASE = "looks good";
14975
15251
  var RAW_BUILTIN_BRAINSTORMING_WORKFLOW_IR = (() => {
@@ -15725,6 +16001,47 @@ var BUILTIN_WORKFLOWS = [
15725
16001
  createdAt: BUILTIN_TS,
15726
16002
  updatedAt: BUILTIN_TS
15727
16003
  },
16004
+ /*
16005
+ * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16006
+ * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
16007
+ * Implementation and its tests finish in `in-progress` — the executor's own final verification
16008
+ * runs the project's configured test/build commands there, and a red result appends named fix
16009
+ * steps rather than letting the card advance. `in-review` is then three read-only milestones:
16010
+ * Code Review judges, Documentation reports, and the merge is the last thing that happens.
16011
+ * The layout is ordered left-to-right in that same sequence so the editor's diagram reads the way
16012
+ * the graph runs; nodes deleted from the graph must be deleted from this map too, or the editor
16013
+ * keeps positioning ghosts.
16014
+ */
16015
+ {
16016
+ id: "builtin:coding-ideas-v2",
16017
+ name: "Coding (Ideas) V2",
16018
+ description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
16019
+ kind: "workflow",
16020
+ ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
16021
+ layout: {
16022
+ start: { x: 60, y: 160 },
16023
+ plan: { x: 230, y: 160 },
16024
+ "plan-review": { x: 400, y: 160 },
16025
+ "plan-replan": { x: 400, y: 320 },
16026
+ "plan-review-no-op": { x: 570, y: 320 },
16027
+ parse: { x: 570, y: 160 },
16028
+ steps: { x: 740, y: 160 },
16029
+ "review-pending-handoff": { x: 740, y: 320 },
16030
+ "code-review": { x: 910, y: 160 },
16031
+ "code-review-remediation": { x: 910, y: 320 },
16032
+ "documentation-delivery": { x: 1080, y: 160 },
16033
+ "merge-gate": { x: 1250, y: 160 },
16034
+ "branch-group-member-integration": { x: 1420, y: 80 },
16035
+ "branch-group-promotion": { x: 1590, y: 80 },
16036
+ "merge-manual-hold": { x: 1420, y: 240 },
16037
+ "merge-attempt": { x: 1760, y: 160 },
16038
+ "merge-retry": { x: 1930, y: 80 },
16039
+ "recovery-router": { x: 1930, y: 240 },
16040
+ end: { x: 2100, y: 160 }
16041
+ },
16042
+ createdAt: BUILTIN_TS,
16043
+ updatedAt: BUILTIN_TS
16044
+ },
15728
16045
  {
15729
16046
  id: "builtin:legacy-coding",
15730
16047
  name: "Legacy coding",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.86-beta.8",
3
+ "version": "0.2.86-beta.9",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {