@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
@@ -5849,6 +5849,8 @@ var tasks = projectSchema.table("tasks", {
5849
5849
  executeRequeueLoopCount: integer("execute_requeue_loop_count").default(0),
5850
5850
  executeRequeueLoopSignature: text("execute_requeue_loop_signature"),
5851
5851
  recoveryRetryCount: integer("recovery_retry_count"),
5852
+ sessionContentionHoldCount: integer("session_contention_hold_count").default(0),
5853
+ sessionContentionWaitReason: text("session_contention_wait_reason"),
5852
5854
  taskDoneRetryCount: integer("task_done_retry_count").default(0),
5853
5855
  // FNXC:Lifecycle 2026-07-16-21:40: FN-8141 skip-bypass taint marker (nullable ISO timestamp).
5854
5856
  bulkCompletionRefusalAt: text("bulk_completion_refusal_at"),
@@ -7771,6 +7773,12 @@ var chatSessions = projectSchema.table("chat_sessions", {
7771
7773
  // FNXC:ChatPinned 2026-07-16-12:00: nullable timestamp persists the active
7772
7774
  // Direct-session pin; the ChatStore enforces the per-scope max-three invariant.
7773
7775
  pinnedAt: text("pinned_at"),
7776
+ // FNXC:MemoryFocus 2026-08-13-15:57: per-conversation read-time memory FOCUS/TOPIC
7777
+ // (migration 0059). NULL/empty ('' normalized to NULL) means the conversation
7778
+ // inherits the whole-project scope; otherwise it scopes fn_memory_search +
7779
+ // proactive recall to this topic. It is a read-time filter only — Stash capture
7780
+ // stays write-anywhere across every conversation.
7781
+ memoryFocus: text("memory_focus"),
7774
7782
  cliSessionFile: text("cli_session_file"),
7775
7783
  inFlightGeneration: jsonb("in_flight_generation"),
7776
7784
  cliExecutorAdapterId: text("cli_executor_adapter_id")
@@ -8209,7 +8217,33 @@ var projectTableNames = [
8209
8217
  land report the previous test's successor as the busy holder), and health compaction skipped them.
8210
8218
  */
8211
8219
  "workspace_coordination_leases",
8212
- "workspace_land_intents"
8220
+ "workspace_land_intents",
8221
+ /*
8222
+ FNXC:PgTableRegistry 2026-08-23-16:05:
8223
+ Second occurrence of the FN-9059 omission above, found by a leaking `current_plan_evidence` row:
8224
+ a task's plan-evidence version counter continued across tests (a fresh KB-002 started at v2), so
8225
+ `task-dependency-mutation.pg` asserted version 2 and read 3 in a whole-file run while passing in
8226
+ isolation. Every table declared with `projectSchema.table(...)` must be registered here — the
8227
+ harness reset and health compaction both drive off this list, and an unregistered table is simply
8228
+ never cleaned. `project-table-registry.test.ts` now fails when the two drift apart.
8229
+ */
8230
+ "chat_session_tags",
8231
+ "chat_tags",
8232
+ "configuration_revisions",
8233
+ "current_plan_evidence",
8234
+ "mission_lineage_stops",
8235
+ "spec_drift_reports",
8236
+ "spec_locks",
8237
+ "symbol_locks",
8238
+ "task_lifecycle_consumer_cursors",
8239
+ "task_lifecycle_consumer_dead_letters",
8240
+ "task_lifecycle_consumer_receipts",
8241
+ "task_lifecycle_consumer_registrations",
8242
+ "task_lifecycle_event_seq",
8243
+ "task_lifecycle_events",
8244
+ "task_verification_requests",
8245
+ "unplanned_execution_blocks",
8246
+ "workflow_agent_capacity_leases"
8213
8247
  ];
8214
8248
 
8215
8249
  // ../core/src/postgres/schema/central.ts
@@ -8980,6 +9014,7 @@ var DEFAULT_GLOBAL_SETTINGS = {
8980
9014
  defaultProjectId: void 0,
8981
9015
  setupComplete: void 0,
8982
9016
  cliOnboardingCompletedAt: void 0,
9017
+ githubStarPromptDismissedAt: void 0,
8983
9018
  favoriteProviders: void 0,
8984
9019
  favoriteModels: void 0,
8985
9020
  openrouterModelSync: true,
@@ -9009,7 +9044,10 @@ var DEFAULT_GLOBAL_SETTINGS = {
9009
9044
  /* 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. */
9010
9045
  autoUpdateEnabled: void 0,
9011
9046
  autoRestartAfterUpdate: void 0,
9012
- autoReloadOnVersionChange: true,
9047
+ /*
9048
+ FNXC:VersionAutoReload 2026-08-23-04:03:
9049
+ 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.
9050
+ */
9013
9051
  githubTrackingDefaultRepo: void 0,
9014
9052
  reportRoadmapDedupeEnabled: void 0,
9015
9053
  reportRoadmapLabel: void 0,
@@ -9604,6 +9642,40 @@ var DEFAULT_PROJECT_SETTINGS = {
9604
9642
  taskEvaluationRetention: void 0,
9605
9643
  memoryEnabled: true,
9606
9644
  memoryBackendType: "qmd",
9645
+ // FNXC:StashConfig 2026-08-13-16:35: (RUFU-068) Optional per-project Stash LCM
9646
+ // memory backend config. stashUrl points at the operator's Stash server
9647
+ // (default http://127.0.0.1:3457). stashApiKey is an override for hard
9648
+ // isolation (separate Stash instance/account); the PRIMARY API key lives in
9649
+ // the global secrets store ("stash-api-key") and is NEVER committed. Project
9650
+ // value wins over global. TencentDB's URL setting is intentionally NOT ported.
9651
+ stashUrl: "",
9652
+ stashApiKey: "",
9653
+ /*
9654
+ FNXC:Rufu126VectorSearch 2026-08-19-10:50:
9655
+ RUFU-126 (D3): opt-in vector (semantic) recall for the Stash memory backend.
9656
+ Default OFF — zero behavior change until the operator enables it (this is a
9657
+ prototype; rejected alternative was automatic capability detection, which
9658
+ would change default behavior and pay a per-process 404 round-trip against
9659
+ unpatched servers). When true, multi-word (≥2 tokens) recall queries try the
9660
+ Stash GET /api/v1/me/sessions/events/semantic-search endpoint first and fall
9661
+ back byte-identically to the RUFU-121 keyword path on any vector failure
9662
+ (see memory-backend-stash.ts search() + docs/research/stash-vector-search-evaluation.md
9663
+ for D1–D5). Schema-only, consistent with stashUrl/stashApiKey (no UI row).
9664
+ */
9665
+ stashVectorSearch: false,
9666
+ /*
9667
+ FNXC:StashSessionCapture 2026-08-19-04:37:
9668
+ (RUFU-122) Task-terminal transcript upload defaults. All are inert unless
9669
+ memoryBackendType === "stash". executorSessionCaptureEnabled gates ONLY the
9670
+ transcript upload (the RUFU-068 terminal anchor event still fires when it is
9671
+ off) and defaults ON. executorSessionCaptureMaxEvents caps transcript events
9672
+ per task; the engine keeps the most recent N (default 20000).
9673
+ executorSessionCaptureIncludeStatus is the schema-only "keep a setting" for
9674
+ uploading `status` log entries (default off; no UI row).
9675
+ */
9676
+ executorSessionCaptureEnabled: true,
9677
+ executorSessionCaptureMaxEvents: 2e4,
9678
+ executorSessionCaptureIncludeStatus: false,
9607
9679
  memoryAutoSummarizeEnabled: false,
9608
9680
  memoryAutoSummarizeThresholdChars: 5e4,
9609
9681
  memoryAutoSummarizeSchedule: "0 3 * * *",
@@ -13949,10 +14021,59 @@ var DEFAULT_TRIAGE_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.id ===
13949
14021
  var DEFAULT_TRIAGE_FAST_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.id === "default-triage-fast")?.prompt ?? "";
13950
14022
  var DEFAULT_REVIEWER_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.role === "reviewer")?.prompt ?? "";
13951
14023
  var DEFAULT_MERGER_PROMPT = BUILTIN_AGENT_PROMPTS.find((prompt) => prompt.role === "merger")?.prompt ?? "";
14024
+ var REVIEW_GATE_STEP_TEMPLATE_START = "### Step {N-1}: Testing & Verification";
14025
+ var REVIEW_GATE_STEP_TEMPLATE_END = "## Documentation Requirements";
14026
+ var REVIEW_GATED_STEP_CONTRACT = `## Review-gated step contract (OVERRIDES the step template above)
14027
+
14028
+ This workflow runs testing, verification, documentation, and delivery as REVIEW-COLUMN GATES after
14029
+ implementation. They are not task steps here.
14030
+
14031
+ - Do NOT emit a "Testing & Verification" step.
14032
+ - Do NOT emit a "Documentation & Delivery" step.
14033
+ - Emit implementation steps only, ending with the last implementation step.
14034
+ - Per-step verification bullets stay: each implementation step still runs its own targeted tests.
14035
+
14036
+ `;
14037
+ function applyReviewGatedStepContract(prompt) {
14038
+ const start = prompt.indexOf(REVIEW_GATE_STEP_TEMPLATE_START);
14039
+ const end = prompt.indexOf(REVIEW_GATE_STEP_TEMPLATE_END);
14040
+ if (start < 0 || end < 0 || end <= start) {
14041
+ return `${prompt}
14042
+
14043
+ ${REVIEW_GATED_STEP_CONTRACT}`;
14044
+ }
14045
+ return `${prompt.slice(0, start)}${REVIEW_GATED_STEP_CONTRACT}${prompt.slice(end)}`;
14046
+ }
14047
+ var DOCUMENTATION_STEP_TEMPLATE_START = "### Step {N}: Documentation & Delivery";
14048
+ var DOCUMENTATION_STEP_TEMPLATE_END = "## Documentation Requirements";
14049
+ var NO_DOCUMENTATION_STEP_CONTRACT = `## Documentation is not a step (OVERRIDES the step template above)
14050
+
14051
+ Do NOT emit a "Documentation & Delivery" step. "Testing & Verification" is the LAST step.
14052
+
14053
+ - **Repository documentation is implementation work.** When a change makes an existing doc wrong,
14054
+ update that doc inside the step that made the change, so it is reviewed together with the code.
14055
+ Never plan it as its own step, and never gate completion on it when the change documents nothing.
14056
+ - **Fusion-side delivery is not yours to plan.** The card summary, the delivery note, artifact
14057
+ registration, and out-of-scope follow-up tasks are produced by a review-column milestone after the
14058
+ review passes. Do not emit steps or checklist items for any of them.
14059
+
14060
+ `;
14061
+ function stripDocumentationDeliveryStep(prompt) {
14062
+ const start = prompt.indexOf(DOCUMENTATION_STEP_TEMPLATE_START);
14063
+ const end = prompt.indexOf(DOCUMENTATION_STEP_TEMPLATE_END);
14064
+ if (start < 0 || end < 0 || end <= start) {
14065
+ return `${prompt}
14066
+
14067
+ ${NO_DOCUMENTATION_STEP_CONTRACT}`;
14068
+ }
14069
+ return `${prompt.slice(0, start)}${NO_DOCUMENTATION_STEP_CONTRACT}${prompt.slice(end)}`;
14070
+ }
13952
14071
  var BUILTIN_SEAM_PROMPTS = {
13953
14072
  execute: DEFAULT_EXECUTOR_PROMPT,
13954
14073
  planning: DEFAULT_TRIAGE_PROMPT,
13955
14074
  "planning-fast": DEFAULT_TRIAGE_FAST_PROMPT,
14075
+ /* Review-gated tasks keep test and delivery work in review-column gates. */
14076
+ "planning-implementation-only": applyReviewGatedStepContract(DEFAULT_TRIAGE_PROMPT),
13956
14077
  "step-execute": DEFAULT_EXECUTOR_PROMPT,
13957
14078
  review: DEFAULT_REVIEWER_PROMPT,
13958
14079
  merge: DEFAULT_MERGER_PROMPT
@@ -14220,6 +14341,7 @@ function postMergeVerificationOptionalGroupNode(column = "done") {
14220
14341
  }
14221
14342
 
14222
14343
  // ../core/src/workflows/builtin-plan-review-group.ts
14344
+ 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.";
14223
14345
  var PLAN_REVIEW_GROUP_ID = "plan-review";
14224
14346
  var PLAN_REVIEW_STEP_NODE_ID = "plan-review-step";
14225
14347
  var PLAN_REVIEW_NAME = "Plan Review";
@@ -14261,6 +14383,10 @@ function planReviewOptionalGroupNode(column, options = {}) {
14261
14383
  toolMode: "readonly",
14262
14384
  gateMode: "gate"
14263
14385
  };
14386
+ if (options.requireImplementationOnlySteps === true) {
14387
+ promptConfig.prompt = `${PLAN_REVIEW_PROMPT}${IMPLEMENTATION_ONLY_STEPS_CRITERION}`;
14388
+ promptConfig.requireImplementationOnlySteps = true;
14389
+ }
14264
14390
  if (options.requireExternalIntegrationEvidence === true) {
14265
14391
  promptConfig.requireExternalIntegrationEvidence = true;
14266
14392
  }
@@ -14301,6 +14427,7 @@ function planReviewOptionalGroupNode(column, options = {}) {
14301
14427
  var PLAN_REPLAN_NODE_ID = "plan-replan";
14302
14428
  var BROWSER_VERIFICATION_REMEDIATION_NODE_ID = "browser-verification-remediation";
14303
14429
  var CODE_REVIEW_REMEDIATION_NODE_ID = "code-review-remediation";
14430
+ var REVIEW_GATED_CODE_REVIEW_REMEDIATION_NODE_ID = "code-review-remediation-steps";
14304
14431
  function planReplanNode(column = "triage") {
14305
14432
  return {
14306
14433
  id: PLAN_REPLAN_NODE_ID,
@@ -14327,6 +14454,14 @@ function browserVerificationRemediationNode(column = "in-progress") {
14327
14454
  }
14328
14455
  };
14329
14456
  }
14457
+ function codeReviewRemediationStepsNode(column = "in-progress") {
14458
+ return {
14459
+ id: REVIEW_GATED_CODE_REVIEW_REMEDIATION_NODE_ID,
14460
+ kind: "prompt",
14461
+ column,
14462
+ config: { name: "Code review remediation", workflowAction: "review-remediation-steps", forWorkflowStepId: "code-review", toolMode: "readonly" }
14463
+ };
14464
+ }
14330
14465
  function codeReviewRemediationNode(column = "in-progress") {
14331
14466
  return {
14332
14467
  id: CODE_REVIEW_REMEDIATION_NODE_ID,
@@ -14975,6 +15110,147 @@ var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
14975
15110
  })();
14976
15111
  var BUILTIN_CODING_IDEAS_WORKFLOW_IR = parseWorkflowIr(RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR);
14977
15112
 
15113
+ // ../core/src/workflows/builtin-documentation-delivery-group.ts
15114
+ var DOCUMENTATION_DELIVERY_GROUP_ID = "documentation-delivery";
15115
+ var DOCUMENTATION_DELIVERY_PROMPT = `Report on the accepted implementation exactly once, for the operator who reads this card later.
15116
+
15117
+ You have NO writer. This session can read, search and list \u2014 nothing else. Everything durable you
15118
+ produce is the text you output here. Do not call a tool to save it, do not claim you saved anything,
15119
+ and do not modify repository files: the code has already been reviewed and must not change now.
15120
+
15121
+ ## 1. The card summary (always)
15122
+
15123
+ Open with 2-4 sentences of plain prose an operator can read to know what shipped and why. Mention
15124
+ user-visible behaviour or important files when they matter, and how it was verified. No headings, no
15125
+ bullet lists, no process narration, no verdict. This text becomes the task's summary.
15126
+
15127
+ ## 2. Follow-up proposals (only when they genuinely exist)
15128
+
15129
+ If the work surfaced worthwhile follow-up ideas OUTSIDE this task's scope, end your output with one
15130
+ fenced JSON block, and nothing after it:
15131
+
15132
+ \`\`\`json
15133
+ {"recommendations":[{"id":"stable-slug","title":"short title","description":"what to do and why","category":"improvement"}]}
15134
+ \`\`\`
15135
+
15136
+ - \`category\` is one of: improvement, feature, bug, other.
15137
+ - Each \`id\` must be unique and stable.
15138
+ - These are PROPOSALS for a human, not work orders and not tasks: an operator decides which become
15139
+ tasks. You cannot create tasks and must not try.
15140
+ - Ground every entry in something you actually saw. Omit the block entirely rather than invent work,
15141
+ restate this task, or pad the list. Fewer, real proposals are the correct answer.
15142
+ - Never put commands, shell syntax, credentials or secrets in a proposal.
15143
+
15144
+ You cannot block this card and you have no verdict to give. If something is missing or you could not
15145
+ determine it, say so plainly in the summary and finish.`;
15146
+ function documentationDeliveryOptionalGroupNode(column) {
15147
+ return {
15148
+ id: DOCUMENTATION_DELIVERY_GROUP_ID,
15149
+ kind: "optional-group",
15150
+ column,
15151
+ config: {
15152
+ name: "Documentation",
15153
+ defaultOn: true,
15154
+ /*
15155
+ FNXC:ReportingOnlyGroup 2026-08-26-06:56:
15156
+ Documentation ONLY documents. `gateMode: "advisory"` on the inner node was not enough and the
15157
+ gap was measured on a real card: its REVISE recorded `advisory_failure`, which held the merge
15158
+ door ("no current approval") AND bounced the card to implementation with no work to do, where
15159
+ it re-ran Code Review against an unchanged tree and merged on the second pass by luck.
15160
+ `reportingOnly` states the contract once: no approval to withhold, no remediation to request.
15161
+ */
15162
+ reportingOnly: true,
15163
+ template: {
15164
+ nodes: [{
15165
+ id: "documentation-delivery-step",
15166
+ kind: "prompt",
15167
+ config: {
15168
+ name: "Documentation",
15169
+ prompt: DOCUMENTATION_DELIVERY_PROMPT,
15170
+ toolMode: "readonly",
15171
+ gateMode: "advisory",
15172
+ workflowAction: "documentation-delivery",
15173
+ /* The two projection contracts that give a writer-less node durable output. */
15174
+ summaryTarget: "task",
15175
+ recommendationsTarget: "task"
15176
+ }
15177
+ }],
15178
+ edges: []
15179
+ }
15180
+ }
15181
+ };
15182
+ }
15183
+
15184
+ // ../core/src/workflows/builtin-coding-ideas-v2-workflow-ir.ts
15185
+ var clone = (ir) => JSON.parse(JSON.stringify(ir));
15186
+ var RAW_BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR = (() => {
15187
+ const ir = clone(BUILTIN_CODING_IDEAS_WORKFLOW_IR);
15188
+ ir.name = "builtin-coding-ideas-v2";
15189
+ const plan = ir.nodes.find((node) => node.id === "plan");
15190
+ if (!plan?.config) throw new Error("coding-ideas-v2 requires the inherited planning node");
15191
+ plan.config.prompt = stripDocumentationDeliveryStep(String(plan.config.prompt ?? ""));
15192
+ const parse3 = ir.nodes.find((node) => node.id === "parse");
15193
+ if (parse3) parse3.config = { ...parse3.config, implementationOnlySteps: true, preserveRemediationSteps: true };
15194
+ const codeReviewRemediation = ir.nodes.find((node) => node.id === "code-review-remediation");
15195
+ if (codeReviewRemediation) {
15196
+ codeReviewRemediation.config = {
15197
+ ...codeReviewRemediation.config,
15198
+ ...codeReviewRemediationStepsNode().config,
15199
+ name: "Code Review Remediation"
15200
+ };
15201
+ }
15202
+ const codeReviewIndex = ir.nodes.findIndex((node) => node.id === "code-review");
15203
+ if (codeReviewIndex < 0) throw new Error("coding-ideas-v2 requires the inherited code-review gate");
15204
+ const codeReviewStep = ir.nodes[codeReviewIndex]?.config?.template?.nodes?.find((node) => node.id === "code-review-step");
15205
+ if (!codeReviewStep?.config) throw new Error("coding-ideas-v2 requires the inherited code-review-step template node");
15206
+ codeReviewStep.config.prompt = `${String(codeReviewStep.config.prompt ?? "")}
15207
+
15208
+ ## Step 0: Judge the TESTS before you judge the code
15209
+
15210
+ You cannot run anything: this session is read-only, \`bash\` is denied and no verification tool is
15211
+ available to you. Do not claim you ran lint, tests or a build, and do not ask for a command to be
15212
+ run. The executor already wrote and ran the tests; your job is to rule on whether that work is
15213
+ sound.
15214
+
15215
+ Read the test files in the diff and rule on FOUR things:
15216
+
15217
+ 1. **They exist.** A behavioural change with no test is a REVISE. Say which change is uncovered.
15218
+ 2. **They are real tests.** Assertions executed by a test runner. A typecheck is not a test, a build
15219
+ is not a test, and manual verification is not a test.
15220
+ 3. **They assert BEHAVIOUR.** Never a comment, a date stamp, or prose lifted from source. Asserting
15221
+ that a comment exists tests nothing a user or caller can observe. Code-construct guards
15222
+ (call-site allowlists, architectural ratchets) are legitimate and stay.
15223
+ 4. **They cover the INVARIANT, not just the reported case.** For a bug fix, a test that only
15224
+ reproduces the single reported symptom is incomplete: require every known surface. If this task
15225
+ CHANGED, GATED or REMOVED behaviour, the tests that encoded the OLD behaviour must have been
15226
+ updated or deleted in the same change \u2014 they live outside the File Scope and targeted
15227
+ verification will not have surfaced them.
15228
+
15229
+ Then review the code itself for what tests do not catch: logic errors, broken edge cases, and
15230
+ unhandled failure modes.`;
15231
+ ir.nodes.splice(codeReviewIndex + 1, 0, documentationDeliveryOptionalGroupNode("in-review"));
15232
+ const summaryIndex = ir.nodes.findIndex((node) => node.id === "completion-summary");
15233
+ if (summaryIndex >= 0) ir.nodes.splice(summaryIndex, 1);
15234
+ ir.edges = ir.edges.filter((edge) => edge.from !== "completion-summary" && edge.to !== "completion-summary");
15235
+ ir.edges = ir.edges.filter((edge) => !(edge.from === "code-review" && edge.to === "merge-gate"));
15236
+ ir.edges.push(
15237
+ { from: "steps", to: "code-review", condition: "success" },
15238
+ { from: "code-review", to: "documentation-delivery", condition: "success" },
15239
+ { from: "documentation-delivery", to: "merge-gate", condition: "success" },
15240
+ /*
15241
+ FNXC:CodingIdeasV2Workflow 2026-08-25-10:20:
15242
+ Documentation is ADVISORY: it reports, it never vetoes. Its failure edge reaches the merge gate
15243
+ exactly like its success edge, so a delivery note that could not be written cannot strand a
15244
+ card whose code is already approved. Measured why: as a blocking gate it bounced a task whose
15245
+ own plan said not to implement anything ("No task-specific implementation is present"), and the
15246
+ card looped through the review lane every five minutes indefinitely.
15247
+ */
15248
+ { from: "documentation-delivery", to: "merge-gate", condition: "failure" }
15249
+ );
15250
+ return ir;
15251
+ })();
15252
+ var BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR = parseWorkflowIr(RAW_BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR);
15253
+
14978
15254
  // ../core/src/workflows/builtin-brainstorming-workflow-ir.ts
14979
15255
  var APPROVAL_PHRASE = "looks good";
14980
15256
  var RAW_BUILTIN_BRAINSTORMING_WORKFLOW_IR = (() => {
@@ -15730,6 +16006,47 @@ var BUILTIN_WORKFLOWS = [
15730
16006
  createdAt: BUILTIN_TS,
15731
16007
  updatedAt: BUILTIN_TS
15732
16008
  },
16009
+ /*
16010
+ * FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
16011
+ * Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
16012
+ * Implementation and its tests finish in `in-progress` — the executor's own final verification
16013
+ * runs the project's configured test/build commands there, and a red result appends named fix
16014
+ * steps rather than letting the card advance. `in-review` is then three read-only milestones:
16015
+ * Code Review judges, Documentation reports, and the merge is the last thing that happens.
16016
+ * The layout is ordered left-to-right in that same sequence so the editor's diagram reads the way
16017
+ * the graph runs; nodes deleted from the graph must be deleted from this map too, or the editor
16018
+ * keeps positioning ghosts.
16019
+ */
16020
+ {
16021
+ id: "builtin:coding-ideas-v2",
16022
+ name: "Coding (Ideas) V2",
16023
+ 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.",
16024
+ kind: "workflow",
16025
+ ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
16026
+ layout: {
16027
+ start: { x: 60, y: 160 },
16028
+ plan: { x: 230, y: 160 },
16029
+ "plan-review": { x: 400, y: 160 },
16030
+ "plan-replan": { x: 400, y: 320 },
16031
+ "plan-review-no-op": { x: 570, y: 320 },
16032
+ parse: { x: 570, y: 160 },
16033
+ steps: { x: 740, y: 160 },
16034
+ "review-pending-handoff": { x: 740, y: 320 },
16035
+ "code-review": { x: 910, y: 160 },
16036
+ "code-review-remediation": { x: 910, y: 320 },
16037
+ "documentation-delivery": { x: 1080, y: 160 },
16038
+ "merge-gate": { x: 1250, y: 160 },
16039
+ "branch-group-member-integration": { x: 1420, y: 80 },
16040
+ "branch-group-promotion": { x: 1590, y: 80 },
16041
+ "merge-manual-hold": { x: 1420, y: 240 },
16042
+ "merge-attempt": { x: 1760, y: 160 },
16043
+ "merge-retry": { x: 1930, y: 80 },
16044
+ "recovery-router": { x: 1930, y: 240 },
16045
+ end: { x: 2100, y: 160 }
16046
+ },
16047
+ createdAt: BUILTIN_TS,
16048
+ updatedAt: BUILTIN_TS
16049
+ },
15733
16050
  {
15734
16051
  id: "builtin:legacy-coding",
15735
16052
  name: "Legacy coding",
@@ -19785,7 +20102,7 @@ __export(external_exports, {
19785
20102
  check: () => check2,
19786
20103
  cidrv4: () => cidrv42,
19787
20104
  cidrv6: () => cidrv62,
19788
- clone: () => clone,
20105
+ clone: () => clone2,
19789
20106
  codec: () => codec,
19790
20107
  coerce: () => coerce_exports,
19791
20108
  config: () => config2,
@@ -20169,7 +20486,7 @@ __export(core_exports2, {
20169
20486
  _void: () => _void,
20170
20487
  _xid: () => _xid,
20171
20488
  _xor: () => _xor,
20172
- clone: () => clone,
20489
+ clone: () => clone2,
20173
20490
  config: () => config2,
20174
20491
  createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod,
20175
20492
  createToJSONSchemaMethod: () => createToJSONSchemaMethod,
@@ -20306,7 +20623,7 @@ __export(util_exports, {
20306
20623
  captureStackTrace: () => captureStackTrace,
20307
20624
  cleanEnum: () => cleanEnum,
20308
20625
  cleanRegex: () => cleanRegex,
20309
- clone: () => clone,
20626
+ clone: () => clone2,
20310
20627
  cloneDef: () => cloneDef,
20311
20628
  createTransparentProxy: () => createTransparentProxy,
20312
20629
  defineLazy: () => defineLazy,
@@ -20595,7 +20912,7 @@ var primitiveTypes = /* @__PURE__ */ new Set([
20595
20912
  function escapeRegex(str) {
20596
20913
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
20597
20914
  }
20598
- function clone(inst, def, params) {
20915
+ function clone2(inst, def, params) {
20599
20916
  const cl = new inst._zod.constr(def ?? inst._zod.def);
20600
20917
  if (!def || params?.parent)
20601
20918
  cl._zod.parent = inst;
@@ -20696,7 +21013,7 @@ function pick(schema, mask) {
20696
21013
  },
20697
21014
  checks: []
20698
21015
  });
20699
- return clone(schema, def);
21016
+ return clone2(schema, def);
20700
21017
  }
20701
21018
  function omit(schema, mask) {
20702
21019
  const currDef = schema._zod.def;
@@ -20721,7 +21038,7 @@ function omit(schema, mask) {
20721
21038
  },
20722
21039
  checks: []
20723
21040
  });
20724
- return clone(schema, def);
21041
+ return clone2(schema, def);
20725
21042
  }
20726
21043
  function extend(schema, shape) {
20727
21044
  if (!isPlainObject(shape)) {
@@ -20744,7 +21061,7 @@ function extend(schema, shape) {
20744
21061
  return _shape;
20745
21062
  }
20746
21063
  });
20747
- return clone(schema, def);
21064
+ return clone2(schema, def);
20748
21065
  }
20749
21066
  function safeExtend(schema, shape) {
20750
21067
  if (!isPlainObject(shape)) {
@@ -20757,7 +21074,7 @@ function safeExtend(schema, shape) {
20757
21074
  return _shape;
20758
21075
  }
20759
21076
  });
20760
- return clone(schema, def);
21077
+ return clone2(schema, def);
20761
21078
  }
20762
21079
  function merge(a, b) {
20763
21080
  if (a._zod.def.checks?.length) {
@@ -20774,7 +21091,7 @@ function merge(a, b) {
20774
21091
  },
20775
21092
  checks: b._zod.def.checks ?? []
20776
21093
  });
20777
- return clone(a, def);
21094
+ return clone2(a, def);
20778
21095
  }
20779
21096
  function partial(Class2, schema, mask) {
20780
21097
  const currDef = schema._zod.def;
@@ -20812,7 +21129,7 @@ function partial(Class2, schema, mask) {
20812
21129
  },
20813
21130
  checks: []
20814
21131
  });
20815
- return clone(schema, def);
21132
+ return clone2(schema, def);
20816
21133
  }
20817
21134
  function required(Class2, schema, mask) {
20818
21135
  const def = mergeDefs(schema._zod.def, {
@@ -20843,7 +21160,7 @@ function required(Class2, schema, mask) {
20843
21160
  return shape;
20844
21161
  }
20845
21162
  });
20846
- return clone(schema, def);
21163
+ return clone2(schema, def);
20847
21164
  }
20848
21165
  function aborted(x, startIndex = 0) {
20849
21166
  if (x.aborted === true)
@@ -32454,7 +32771,7 @@ var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
32454
32771
  return this.check(...chks);
32455
32772
  },
32456
32773
  clone(def2, params) {
32457
- return clone(this, def2, params);
32774
+ return clone2(this, def2, params);
32458
32775
  },
32459
32776
  brand() {
32460
32777
  return this;
@@ -33205,7 +33522,7 @@ function record(keyType, valueType, params) {
33205
33522
  });
33206
33523
  }
33207
33524
  function partialRecord(keyType, valueType, params) {
33208
- const k = clone(keyType);
33525
+ const k = clone2(keyType);
33209
33526
  k._zod.values = void 0;
33210
33527
  return new ZodRecord({
33211
33528
  type: "record",
@@ -37954,13 +38271,13 @@ var AcpRuntimeAdapter = class {
37954
38271
  env: buildSpawnEnv(this.settings.envAllowList, {
37955
38272
  required: this.settings.requiredEnv,
37956
38273
  /*
37957
- FNXC:AcpSubscribeCompat 2026-08-21-18:40:
38274
+ FNXC:AcpTaskEnv 2026-08-21-18:40:
37958
38275
  `taskEnv` is the engine's contract for task-scoped subprocess env
37959
- (AgentRuntimeOptions.taskEnv). Merge it AFTER the allow-list so task
37960
- values win, but only for keys the allow-list already admits the
37961
- allow-list stays the trust boundary (KTD6b).
38276
+ (AgentRuntimeOptions.taskEnv). Overlay it before filtering so task values
38277
+ win, while only keys admitted by the allow-list reach the subprocess
38278
+ the allow-list stays the trust boundary (KTD6b).
37962
38279
  */
37963
- sourceEnv: options.taskEnv ? { ...process.env, ...options.taskEnv } : process.env
38280
+ sourceEnv: { ...process.env, ...options.taskEnv }
37964
38281
  }),
37965
38282
  advertiseFs: { read: this.settings.fsRead, write: this.settings.fsWrite },
37966
38283
  clientHandler,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.36-beta.8",
3
+ "version": "0.1.36-beta.9",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {