@runfusion/fusion 0.77.0-beta.2 → 0.77.0-beta.4

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 (173) hide show
  1. package/dist/bin.js +12324 -8618
  2. package/dist/child-process-worker.js +8252 -6106
  3. package/dist/client/.vite/manifest.json +294 -267
  4. package/dist/client/assets/{AgentDetailView-Dew3af1O.js → AgentDetailView-CH6GtXl9.js} +3 -3
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-CxPQffiY.js → AgentPermissionPolicyEditor-YTEpMhUx.js} +1 -1
  6. package/dist/client/assets/{AgentsView-Cr4LDGdt.js → AgentsView-XOHHDo4a.js} +4 -4
  7. package/dist/client/assets/ChatView-gH7QX3TI.js +13 -0
  8. package/dist/client/assets/{CommandCenter-DCC90LOP.js → CommandCenter-BsH-R15f.js} +3 -3
  9. package/dist/client/assets/{DevServerView-B5b520w6.js → DevServerView-CKOa-lkc.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-1JvRd5mC.js → DirectoryPicker-DHUYTE-j.js} +1 -1
  11. package/dist/client/assets/DocumentsView-BPzrxeP-.js +1 -0
  12. package/dist/client/assets/{EvalsView-a3LhgRSo.js → EvalsView-DojCiv47.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-vdVa8h7F.js → ExperimentalAgentOnboardingModal-DuurZ8qe.js} +1 -1
  14. package/dist/client/assets/{GoalsView-Dz2o91fd.js → GoalsView-DDWPXcG1.js} +1 -1
  15. package/dist/client/assets/{InsightsView-De3R_46d.js → InsightsView-CgkMOD1A.js} +3 -3
  16. package/dist/client/assets/MemoryView-Cj49_z7O.js +3 -0
  17. package/dist/client/assets/{PiExtensionsManager-C9JABO_4.js → PiExtensionsManager-B_rRJiOd.js} +1 -1
  18. package/dist/client/assets/PluginManager-Dxwi88oY.js +1 -0
  19. package/dist/client/assets/{PullRequestView-DT8vTeVi.js → PullRequestView-z-5v2hQT.js} +2 -2
  20. package/dist/client/assets/ReportModal-DmOPEYWp.js +21 -0
  21. package/dist/client/assets/ReportModal-lzN_xrnM.css +1 -0
  22. package/dist/client/assets/{ResearchView-cNsjYu8F.js → ResearchView-D90Jbzbx.js} +2 -2
  23. package/dist/client/assets/{SecretsView-BAmf7KyS.js → SecretsView-CSyjZl5L.js} +1 -1
  24. package/dist/client/assets/SessionTerminal-Bwb8nGmU.js +2 -0
  25. package/dist/client/assets/SettingsModal-BAzmMjr9.js +21 -0
  26. package/dist/client/assets/SettingsModal-C5ic1ls7.css +1 -0
  27. package/dist/client/assets/{SettingsModal-C_9RiEI7.js → SettingsModal-CJof1Ett.js} +1 -1
  28. package/dist/client/assets/{SettingsTextareaRow-D8RHSj8b.js → SettingsTextareaRow-BYchnHfW.js} +1 -1
  29. package/dist/client/assets/SetupWizardModal-NqV-erVf.js +2 -0
  30. package/dist/client/assets/{SkillsView-DyeCwYit.js → SkillsView-BUrkIJ-p.js} +1 -1
  31. package/dist/client/assets/{WorkflowNodeEditor-C5Jc9w_A.js → WorkflowNodeEditor-DcPk2A1Z.js} +1 -1
  32. package/dist/client/assets/{agent-import-generation-SCPNeF25.js → agent-import-generation-X16OLfrL.js} +1 -1
  33. package/dist/client/assets/{agentsOrgChartLayout-CqKtNCjy.js → agentsOrgChartLayout-BhPIXckU.js} +1 -1
  34. package/dist/client/assets/app-B-TfWH9b.js +5 -0
  35. package/dist/client/assets/app-B2RDV_-t.js +13 -0
  36. package/dist/client/assets/app-CDo0mF2S.js +5 -0
  37. package/dist/client/assets/app-Cc18kAQS.js +13 -0
  38. package/dist/client/assets/app-DFF79EUn.js +13 -0
  39. package/dist/client/assets/app-DSeFHxgj.js +13 -0
  40. package/dist/client/assets/app-Ducr0y6r.js +13 -0
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Cz2HYn0b.js → architectureDiagram-3BPJPVTR-WArMtdqy.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-IimJVscG.js → blockDiagram-GPEHLZMM-emScogdV.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-C-xii7zn.js → c4Diagram-AAUBKEIU-CBY7-E0T.js} +1 -1
  44. package/dist/client/assets/channel-CP2ySYs0.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-DQ-9Xccu.js → chunk-2J33WTMH-Bcai1sOm.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-DmdAX9Bx.js → chunk-4BX2VUAB-hjiKRusj.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-IF2bk5IL.js → chunk-55IACEB6-DpO9nIb0.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-AeYpIzVu.js → chunk-727SXJPM-B9JanA0o.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-DV942DD9.js → chunk-AQP2D5EJ-D6zdnEUE.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-Bt_riVlZ.js → chunk-FMBD7UC4-CRkrJ51d.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-CbyjNbXR.js → chunk-ND2GUHAM-BLQsKt7a.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-DqiRniYQ.js → chunk-QZHKN3VN-MCOlJ723.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-DKkOBtzM.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DKkOBtzM.js +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-UCvthviL.js → cose-bilkent-S5V4N54A-Cv1XmKKG.js} +1 -1
  56. package/dist/client/assets/{dagre-BM42HDAG-DnMlT1Oi.js → dagre-BM42HDAG-flnNS_RW.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-C9D0aoRW.js → dashboard-view-CC1aH-lp.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-myjM9tr8.js → dashboard-view-CrV-rL9Q.js} +1 -1
  59. package/dist/client/assets/{dashboard-view-JysoyDRX.js → dashboard-view-DEAYb_TZ.js} +1 -1
  60. package/dist/client/assets/{dashboard-view-Cz0sp2Wl.js → dashboard-view-Dz7kqcJc.js} +1 -1
  61. package/dist/client/assets/{diagram-2AECGRRQ-BYFiqXGw.js → diagram-2AECGRRQ-Z3S7b_6_.js} +1 -1
  62. package/dist/client/assets/{diagram-5GNKFQAL-DZU3pSYq.js → diagram-5GNKFQAL-BAZHdMFq.js} +1 -1
  63. package/dist/client/assets/{diagram-KO2AKTUF-0ybdKuMm.js → diagram-KO2AKTUF-C2y3S8F0.js} +1 -1
  64. package/dist/client/assets/{diagram-LMA3HP47-Rxbgnbsp.js → diagram-LMA3HP47-Bfz0_IvT.js} +1 -1
  65. package/dist/client/assets/{diagram-OG6HWLK6-BAU_hTeV.js → diagram-OG6HWLK6-BBmSQsTI.js} +1 -1
  66. package/dist/client/assets/{erDiagram-TEJ5UH35-zr8HrwTt.js → erDiagram-TEJ5UH35-DnpdQi66.js} +1 -1
  67. package/dist/client/assets/{flowDiagram-I6XJVG4X-CrTw0iFw.js → flowDiagram-I6XJVG4X-IybTR_zf.js} +1 -1
  68. package/dist/client/assets/{folder-open-DnAlsXXn.js → folder-open-Dntm63x4.js} +1 -1
  69. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CCORsxxz.js → ganttDiagram-6RSMTGT7-DEQOe2E9.js} +1 -1
  70. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-C07wWSjj.js → gitGraphDiagram-PVQCEYII-BOKc-h63.js} +1 -1
  71. package/dist/client/assets/index-DXpztECA.css +1 -0
  72. package/dist/client/assets/index-I32FijPT.js +2821 -0
  73. package/dist/client/assets/{infoDiagram-5YYISTIA-hAeccD_4.js → infoDiagram-5YYISTIA-LqaYIdbj.js} +1 -1
  74. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-WLCzv-NH.js → ishikawaDiagram-YF4QCWOH-a8qd512s.js} +1 -1
  75. package/dist/client/assets/{journeyDiagram-JHISSGLW-ClnasNhy.js → journeyDiagram-JHISSGLW-BgoNyeiy.js} +1 -1
  76. package/dist/client/assets/{kanban-definition-UN3LZRKU-CAuARhUz.js → kanban-definition-UN3LZRKU-Bqwow7D3.js} +1 -1
  77. package/dist/client/assets/{mermaid.core-Bh02RvfX.js → mermaid.core-B2zD934i.js} +4 -4
  78. package/dist/client/assets/{mindmap-definition-RKZ34NQL-KNTlbW4V.js → mindmap-definition-RKZ34NQL-CCTOigWu.js} +1 -1
  79. package/dist/client/assets/{pieDiagram-4H26LBE5-BouAfBEw.js → pieDiagram-4H26LBE5-Bq5DtXKR.js} +1 -1
  80. package/dist/client/assets/pixelify-sans-cyrillic-400-normal-DfOZNMlW.woff +0 -0
  81. package/dist/client/assets/pixelify-sans-latin-400-normal-DLrIX9QE.woff2 +0 -0
  82. package/dist/client/assets/pixelify-sans-latin-400-normal-JapMNN6Z.woff +0 -0
  83. package/dist/client/assets/pixelify-sans-latin-ext-400-normal-BkfTUL4s.woff +0 -0
  84. package/dist/client/assets/pixelify-sans-latin-ext-400-normal-DdH6zlBQ.woff2 +0 -0
  85. package/dist/client/assets/{puzzle-CC8Ur3Cy.js → puzzle-VhTPiCit.js} +1 -1
  86. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-wTdkCUJU.js → quadrantDiagram-W4KKPZXB-CGMP3nUx.js} +1 -1
  87. package/dist/client/assets/{requirementDiagram-4Y6WPE33-BnjY4Tc_.js → requirementDiagram-4Y6WPE33-Ckeu_szu.js} +1 -1
  88. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-C-QsS08u.js → sankeyDiagram-5OEKKPKP-SWbBDD4d.js} +1 -1
  89. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DD36MILE.js → sequenceDiagram-3UESZ5HK-CiJrmL_G.js} +1 -1
  90. package/dist/client/assets/{shield-alert-DcXc56Fy.js → shield-alert-BBDlP6A5.js} +1 -1
  91. package/dist/client/assets/{standing-instructions-template-BF5y1BLz.js → standing-instructions-template-viu_kgDX.js} +2 -2
  92. package/dist/client/assets/{stateDiagram-AJRCARHV-WTq1wQr1.js → stateDiagram-AJRCARHV-DTCzK5Gt.js} +1 -1
  93. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-eILJdjII.js → stateDiagram-v2-BHNVJYJU-BIGAwFTT.js} +1 -1
  94. package/dist/client/assets/{timeline-definition-PNZ67QCA-PRNwI0NR.js → timeline-definition-PNZ67QCA-BQZEFEug.js} +1 -1
  95. package/dist/client/assets/{upload-qH_64O-B.js → upload-D5w3Ehwp.js} +1 -1
  96. package/dist/client/assets/{useDiscoveredSkillsCache-C-GPCNaO.js → useDiscoveredSkillsCache-D6zMSIaS.js} +1 -1
  97. package/dist/client/assets/{users-D2UesRE4.js → users-Bohihi_o.js} +1 -1
  98. package/dist/client/assets/{vennDiagram-CIIHVFJN-CG2Z4T4O.js → vennDiagram-CIIHVFJN-DnHguEv8.js} +1 -1
  99. package/dist/client/assets/{wardley-L42UT6IY-gO_fGvF9.js → wardley-L42UT6IY-BOqYltGN.js} +1 -1
  100. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BkyNpjUb.js → wardleyDiagram-YWT4CUSO-Re0Ery2M.js} +1 -1
  101. package/dist/client/assets/{xychartDiagram-2RQKCTM6-CMlZsiPq.js → xychartDiagram-2RQKCTM6-CnVq21b2.js} +1 -1
  102. package/dist/client/index.html +4 -4
  103. package/dist/client/theme-data.css +183 -1
  104. package/dist/client/version.json +1 -1
  105. package/dist/droid-cli/package.json +1 -1
  106. package/dist/extension.js +9275 -6726
  107. package/dist/pi-claude-cli/package.json +1 -1
  108. package/dist/pi-claude-cli/src/__tests__/event-bridge.test.ts +29 -1
  109. package/dist/pi-claude-cli/src/event-bridge.ts +10 -4
  110. package/dist/plugin-sdk/index.d.ts +25 -3
  111. package/dist/plugin-sdk/index.js +10 -1
  112. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +12 -2
  113. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +12 -2
  115. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +10 -1
  117. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  118. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +10 -1
  119. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  120. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +10 -1
  121. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  122. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +10 -1
  123. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  124. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +12 -2
  125. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  126. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +12 -2
  127. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  128. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +10 -1
  129. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  130. package/dist/plugins/fusion-plugin-linear-import/bundled.js +10 -1
  131. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  132. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +12 -2
  133. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  134. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +10 -1
  135. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  136. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +10 -1
  137. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  138. package/dist/plugins/fusion-plugin-quality/bundled.js +10 -1
  139. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  140. package/dist/plugins/fusion-plugin-reports/bundled.js +10 -1
  141. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  142. package/dist/plugins/fusion-plugin-roadmap/bundled.js +10 -1
  143. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  144. package/dist/plugins/fusion-plugin-todos/bundled.js +10 -1
  145. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  146. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +10 -1
  147. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  148. package/package.json +1 -1
  149. package/skill/fusion/SKILL.md +1 -1
  150. package/skill/fusion/references/extension-tools.md +17 -0
  151. package/skill/fusion/references/fusion-capabilities.md +2 -0
  152. package/dist/client/assets/ChatView-cNYtYx05.js +0 -13
  153. package/dist/client/assets/DocumentsView-ksK9f7xt.js +0 -1
  154. package/dist/client/assets/MemoryView-Cagk2wZG.js +0 -3
  155. package/dist/client/assets/PluginManager-D2csmdQa.js +0 -1
  156. package/dist/client/assets/ReportModal-M3uh98sc.css +0 -1
  157. package/dist/client/assets/ReportModal-YMP6V4vu.js +0 -21
  158. package/dist/client/assets/SessionTerminal-BjGcxq22.js +0 -2
  159. package/dist/client/assets/SettingsModal-C0FY8MPW.css +0 -1
  160. package/dist/client/assets/SettingsModal-DLfy2e_5.js +0 -21
  161. package/dist/client/assets/SetupWizardModal-DRJ96pHQ.js +0 -2
  162. package/dist/client/assets/app-BgpuMvTU.js +0 -13
  163. package/dist/client/assets/app-BlexHhbW.js +0 -13
  164. package/dist/client/assets/app-BsuUOR0P.js +0 -13
  165. package/dist/client/assets/app-DQVOujmO.js +0 -13
  166. package/dist/client/assets/app-DjyTRx1N.js +0 -5
  167. package/dist/client/assets/app-Dniggype.js +0 -13
  168. package/dist/client/assets/app-EV-lyZ0T.js +0 -5
  169. package/dist/client/assets/channel-D-UHgx8G.js +0 -1
  170. package/dist/client/assets/classDiagram-4FO5ZUOK-Do-8MdAc.js +0 -1
  171. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Do-8MdAc.js +0 -1
  172. package/dist/client/assets/index-B_z7OKl4.js +0 -2818
  173. package/dist/client/assets/index-DPo-IAb2.css +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/pi-claude-cli",
3
- "version": "0.77.0-beta.2",
3
+ "version": "0.77.0-beta.4",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "main": "index.ts",
@@ -179,7 +179,35 @@ describe("createEventBridge", () => {
179
179
  expect(textEnd1.content).toBe("Second");
180
180
  });
181
181
 
182
- it("repairs a missing sentence boundary between consecutive text blocks", () => {
182
+ /*
183
+ FNXC:ChatStreaming 2026-08-19-13:52:
184
+ The Claude CLI bridge must classify numeric period boundaries before mutating its output accumulator, otherwise source labels and URL paths reach Chat already corrupted.
185
+ */
186
+ it("preserves the reported dotted model links across text deltas", () => {
187
+ const bridge = createBridgeWithStart();
188
+ bridge.handleEvent({ type: "content_block_start", index: 0, content_block: { type: "text", text: "" } } as any);
189
+ for (const text of [
190
+ "[GPT‑5.",
191
+ "6 Luna](https://developers.openai.com/api/docs/models/gpt-5.",
192
+ "6-luna) [GPT‑5.",
193
+ "6 Sol](https://developers.openai.com/api/docs/models/gpt-5.",
194
+ "6-sol) [GPT‑5.",
195
+ "6 Terra](https://developers.openai.com/api/docs/models/gpt-5.",
196
+ "6-terra)",
197
+ ]) {
198
+ bridge.handleEvent({ type: "content_block_delta", index: 0, delta: { type: "text_delta", text } } as any);
199
+ }
200
+
201
+ const output = bridge.getOutput();
202
+ const text = (output.content[0] as any).text as string;
203
+ expect(text).toContain("GPT‑5.6 Luna");
204
+ expect(text).not.toContain("5. 6");
205
+ expect(text).toContain("/gpt-5.6-luna");
206
+ expect(text).toContain("/gpt-5.6-sol");
207
+ expect(text).toContain("/gpt-5.6-terra");
208
+ });
209
+
210
+ it("repairs a missing sentence boundary between consecutive text blocks", () => {
183
211
  const bridge = createBridgeWithStart();
184
212
 
185
213
  bridge.handleEvent({
@@ -72,11 +72,17 @@ function normalizeStreamingDelta(previousText: string, nextDelta: string): strin
72
72
  return nextDelta;
73
73
  }
74
74
 
75
+ /*
76
+ FNXC:ChatStreaming 2026-08-19-13:52:
77
+ Numeric dotted tokens and URL path segments are one token even when the provider splits them across deltas; do not insert a sentence space between their digits before Chat persistence.
78
+ */
79
+ const isNumericTokenContinuation =
80
+ previousChar === "." && /\d/.test(previousText.slice(-2, -1)) && /\d/.test(nextChar);
81
+
75
82
  // Claude sometimes splits adjacent sentences across separate deltas or text
76
- // blocks without preserving the separating space. Only repair the specific
77
- // "sentence punctuation + uppercase/quoted sentence start" case so code,
78
- // domains, and lowercase continuations remain untouched.
79
- if (/[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
83
+ // blocks without preserving the separating space. Keep the repair narrow so
84
+ // code, domains, lowercase continuations, and numeric tokens remain intact.
85
+ if (!isNumericTokenContinuation && /[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
80
86
  return ` ${nextDelta}`;
81
87
  }
82
88
 
@@ -209,7 +209,9 @@ declare class Database {
209
209
  getPath(): string;
210
210
  }
211
211
 
212
- declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh"];
212
+ type TaskColumnSortMode = "completion-date-desc" | "task-id-desc";
213
+
214
+ declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
213
215
  type ThinkingLevel = (typeof THINKING_LEVELS)[number];
214
216
  declare const COLUMNS: readonly ["triage", "todo", "in-progress", "in-review", "done", "archived"];
215
217
  type Column = (typeof COLUMNS)[number];
@@ -1054,6 +1056,7 @@ declare class GlobalSettingsStore {
1054
1056
  private readonly revisionIntentPath;
1055
1057
  private readonly dir;
1056
1058
  private cachedSettings;
1059
+ private cachedSettingsEpoch;
1057
1060
  private lock;
1058
1061
  constructor(dir?: string, asyncLayer?: AsyncDataLayer | undefined);
1059
1062
  private getRevisionLayer;
@@ -1428,6 +1431,10 @@ interface MissionWithHierarchy extends Mission {
1428
1431
  slices: SliceWithFeatures[];
1429
1432
  }>;
1430
1433
  }
1434
+ interface FeatureUnlinkedPayload {
1435
+ feature: MissionFeature;
1436
+ taskId?: string;
1437
+ }
1431
1438
  interface FixFeatureCreatedPayload {
1432
1439
  feature: MissionFeature;
1433
1440
  sourceFeatureId: string;
@@ -1543,6 +1550,7 @@ interface MissionStoreEvents {
1543
1550
  feature: MissionFeature;
1544
1551
  taskId: string;
1545
1552
  }];
1553
+ "feature:unlinked": [FeatureUnlinkedPayload];
1546
1554
  "mission:event": [MissionEvent];
1547
1555
  "assertion:created": [MissionContractAssertion];
1548
1556
  "assertion:updated": [MissionContractAssertion];
@@ -1652,6 +1660,7 @@ declare class MissionStore extends EventEmitter<MissionStoreEvents> {
1652
1660
  private resolveTaskLinkage;
1653
1661
  linkFeatureToTask(featureId: string, taskId: string): MissionFeature;
1654
1662
  unlinkFeatureFromTask(featureId: string): MissionFeature;
1663
+ repointFeatureToTask(featureId: string, taskId: string): MissionFeature;
1655
1664
  updateFeatureStatus(featureId: string, status: FeatureStatus, options?: MissionUpdateOptions): MissionFeature;
1656
1665
  getFeatureByTaskId(taskId: string): MissionFeature | undefined;
1657
1666
  startManualValidatorRun(featureId: string, input?: {
@@ -1833,6 +1842,7 @@ declare class AsyncMissionStore extends EventEmitter<MissionStoreEvents> {
1833
1842
  }): Promise<void>;
1834
1843
  linkFeatureToTask(featureId: string, taskId: string): Promise<MissionFeature>;
1835
1844
  unlinkFeatureFromTask(featureId: string): Promise<MissionFeature>;
1845
+ repointFeatureToTask(featureId: string, taskId: string): Promise<MissionFeature>;
1836
1846
  repairFeatureValidationState(featureId: string, options: {
1837
1847
  action: "clear" | "re_run";
1838
1848
  actor: MissionTransitionActor;
@@ -3295,6 +3305,7 @@ interface GitRepositoryCommandResult {
3295
3305
  type GitRepositoryCommandRunner = (command: string, args: string[], options: {
3296
3306
  cwd?: string;
3297
3307
  timeout: number;
3308
+ env?: NodeJS.ProcessEnv;
3298
3309
  }) => Promise<GitRepositoryCommandResult>;
3299
3310
  interface EnsureGitRepositoryOptions {
3300
3311
  runner?: GitRepositoryCommandRunner;
@@ -3362,7 +3373,6 @@ interface EnsureProjectForPathInput {
3362
3373
  isolationMode?: IsolationMode;
3363
3374
  nodeId?: string;
3364
3375
  settings?: ProjectSettings;
3365
- skipGitInit?: boolean;
3366
3376
  }
3367
3377
  interface EnsureProjectForPathResult {
3368
3378
  project: RegisteredProject;
@@ -4809,6 +4819,7 @@ interface TaskStoreEvents {
4809
4819
  }];
4810
4820
  "task:updated": [task: Task, meta?: {
4811
4821
  lanes?: TaskMoveLanes;
4822
+ failedTransition?: boolean;
4812
4823
  }];
4813
4824
  "task:deleted": [task: Task, meta?: {
4814
4825
  githubIssueAction?: GithubIssueAction;
@@ -5455,6 +5466,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
5455
5466
  areAllDependenciesDone(dependencies: string[], tasksById: Map<string, Task>, satisfiedColumns?: ReadonlySet<string>): boolean;
5456
5467
  readTaskForMove(id: string): Promise<Task>;
5457
5468
  moveTask(id: string, toColumn: ColumnId, options?: MoveTaskOptions): Promise<Task>;
5469
+ resetTaskPublication(id: string, intakeColumn: ColumnId): Promise<Task>;
5458
5470
  moveTaskIf(id: string, toColumn: ColumnId, predicate: (live: Task) => boolean | Promise<boolean>, options?: MoveTaskOptions): Promise<MoveTaskIfResult>;
5459
5471
  handoffToReview(taskId: string, opts: HandoffToReviewOptions): Promise<Task>;
5460
5472
  __setHandoffMergeQueueFailureInjectorForTesting(injector: ((taskId: string) => void | Promise<void>) | null): void;
@@ -5657,6 +5669,7 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
5657
5669
  markToolFailureRetryExhaustedAudit(taskId: string): Promise<boolean>;
5658
5670
  updateTaskAtomic(id: string, updater: (current: Task) => Parameters<TaskStore["updateTask"]>[1] | null | undefined | Promise<Parameters<TaskStore["updateTask"]>[1] | null | undefined>, runContext?: RunMutationContext): Promise<Task>;
5659
5671
  linkTaskRecommendation(id: string, recommendationId: string, createdTaskId: string, completeColumns?: ReadonlySet<string>): Promise<Task>;
5672
+ normalizeWorkspaceTaskWorktreeMetadata(id: string): Promise<Task>;
5660
5673
  mergeWorkspaceWorktreeEntry(id: string, repoRelPath: string, patch: Partial<WorkspaceWorktreeEntry>, options?: {
5661
5674
  requireExistingEntry?: boolean;
5662
5675
  clearSingularWorktree?: boolean;
@@ -6003,6 +6016,8 @@ declare class TaskStore extends EventEmitter<TaskStoreEvents> {
6003
6016
  limit?: number;
6004
6017
  offset?: number;
6005
6018
  slim?: boolean;
6019
+ sort?: TaskColumnSortMode;
6020
+ sortMode?: TaskColumnSortMode;
6006
6021
  }): Promise<{
6007
6022
  tasks: Task[];
6008
6023
  total: number;
@@ -6756,7 +6771,7 @@ declare const ANTHROPIC_AUTH_PREFERENCES: readonly ["api-key", "subscription"];
6756
6771
  type AnthropicAuthPreference = (typeof ANTHROPIC_AUTH_PREFERENCES)[number];
6757
6772
  declare const THEME_MODES: readonly ["dark", "light", "system"];
6758
6773
  type ThemeMode = (typeof THEME_MODES)[number];
6759
- declare const COLOR_THEMES: readonly ["default", "ocean", "forest", "sunset", "zen", "berry", "high-contrast", "industrial", "monochrome", "slate", "ash", "air", "graphite", "silver", "solarized", "factory", "factory-mono", "ayu", "one-dark", "nord", "dracula", "gruvbox", "tokyo-night", "catppuccin-mocha", "github-dark", "everforest", "rose-pine", "kanagawa", "night-owl", "palenight", "monokai-pro", "slime", "brutalist", "neon-city", "parchment", "terminal", "glass", "glass-silver", "horizon", "vitesse", "outrun", "snazzy", "porple", "espresso", "mars", "poimandres", "ember", "rust", "copper", "foundry", "carbon", "sandstone", "lagoon", "frost", "lavender", "neon-bloom", "sepia", "cobalt", "clay", "moss", "aurora", "calm", "dawn", "sage", "midnight", "factory-dark", "factory-light", "shadcn", "shadcn-ember", "shadcn-custom", "shadcn-blue", "shadcn-green", "shadcn-red", "shadcn-purple", "shadcn-pink", "shadcn-orange", "shadcn-yellow", "shadcn-mono", "shadcn-mono-red", "shadcn-mono-blue", "shadcn-mono-green", "shadcn-mono-purple", "shadcn-mono-pink", "shadcn-mono-orange", "shadcn-mono-yellow", "shadcn-black", "shadcn-gray", "shadcn-gray-blue"];
6774
+ declare const COLOR_THEMES: readonly ["default", "ocean", "forest", "sunset", "zen", "berry", "high-contrast", "industrial", "monochrome", "slate", "ash", "air", "graphite", "silver", "solarized", "factory", "factory-mono", "ayu", "one-dark", "nord", "dracula", "gruvbox", "tokyo-night", "catppuccin-mocha", "github-dark", "everforest", "rose-pine", "kanagawa", "night-owl", "palenight", "monokai-pro", "slime", "brutalist", "neon-city", "parchment", "medieval", "terminal", "glass", "glass-silver", "horizon", "vitesse", "outrun", "snazzy", "porple", "espresso", "mars", "poimandres", "ember", "rust", "copper", "foundry", "carbon", "sandstone", "lagoon", "frost", "lavender", "neon-bloom", "sepia", "cobalt", "clay", "moss", "aurora", "calm", "dawn", "sage", "midnight", "velvet", "factory-dark", "factory-light", "shadcn", "shadcn-ember", "shadcn-custom", "shadcn-blue", "shadcn-green", "shadcn-red", "shadcn-purple", "shadcn-pink", "shadcn-orange", "shadcn-yellow", "shadcn-mono", "shadcn-mono-red", "shadcn-mono-blue", "shadcn-mono-green", "shadcn-mono-purple", "shadcn-mono-pink", "shadcn-mono-orange", "shadcn-mono-yellow", "shadcn-black", "shadcn-gray", "shadcn-gray-blue"];
6760
6775
  type ColorTheme = (typeof COLOR_THEMES)[number];
6761
6776
  declare const SUPPORTED_LOCALES: readonly ["en", "zh-CN", "zh-TW", "fr", "es", "ko", "pt-BR"];
6762
6777
  type Locale = (typeof SUPPORTED_LOCALES)[number];
@@ -7544,6 +7559,8 @@ interface TaskReleaseGateVerdict {
7544
7559
  interface WorkspaceWorktreeEntry {
7545
7560
  worktreePath: string;
7546
7561
  branch: string;
7562
+ baseBranch?: string;
7563
+ baseBranchFallbackFrom?: string;
7547
7564
  baseCommitSha?: string;
7548
7565
  landedSha?: string;
7549
7566
  revertBoundarySha?: string;
@@ -8219,6 +8236,7 @@ type ReportActionType = "bug" | "feedback" | "idea" | "help";
8219
8236
  type ReportTarget = "issue" | "discussion";
8220
8237
  interface ProjectSettings {
8221
8238
  maxRecommendationsPerTask?: number;
8239
+ requireTaskRecommendations?: boolean;
8222
8240
  recommendationMailboxNoticeEnabled?: boolean;
8223
8241
  globalPause?: boolean;
8224
8242
  globalPauseReason?: string;
@@ -8299,6 +8317,7 @@ interface ProjectSettings {
8299
8317
  openMobileTasksInPopup?: boolean;
8300
8318
  taskPopupsBoardListOnly?: boolean;
8301
8319
  showCostBadgeOnCards?: boolean;
8320
+ chatMessageLayout?: "bubbles" | "full-width";
8302
8321
  taskDetailChatFirst?: boolean;
8303
8322
  executorAllowSiblingBranchRename?: boolean;
8304
8323
  worktreeNaming?: "random" | "task-id" | "task-title";
@@ -8483,6 +8502,7 @@ interface ProjectSettings {
8483
8502
  memoryBackupScope?: "project" | "agents" | "all";
8484
8503
  autoSummarizeTitles?: boolean;
8485
8504
  taskDefinitionInInputLanguage?: boolean;
8505
+ taskOutputLanguage?: TaskOutputLanguage;
8486
8506
  useAiMergeCommitSummary?: boolean;
8487
8507
  titleSummarizerProvider?: string;
8488
8508
  titleSummarizerCredentialInstanceId?: string;
@@ -9208,6 +9228,8 @@ interface AgentPromptsConfig {
9208
9228
  roleAssignments?: Partial<Record<AgentCapability, string>>;
9209
9229
  }
9210
9230
 
9231
+ type TaskOutputLanguage = "english" | "input" | "interface";
9232
+
9211
9233
  interface RunCommandResult {
9212
9234
  stdout: string;
9213
9235
  stderr: string;
@@ -8743,7 +8743,7 @@ import { randomUUID as randomUUID2, randomBytes, createHash as createHash2 } fro
8743
8743
  import { EventEmitter } from "events";
8744
8744
 
8745
8745
  // ../core/src/types/board/board.ts
8746
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8746
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8747
8747
 
8748
8748
  // ../core/src/types/ui/execution-and-ui.ts
8749
8749
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9181,6 +9181,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9181
9181
  var DEFAULT_PROJECT_SETTINGS = {
9182
9182
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9183
9183
  maxRecommendationsPerTask: 3,
9184
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9185
+ requireTaskRecommendations: false,
9184
9186
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9185
9187
  recommendationMailboxNoticeEnabled: true,
9186
9188
  globalPause: false,
@@ -9292,6 +9294,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9292
9294
  */
9293
9295
  showCostBadgeOnCards: false,
9294
9296
  /*
9297
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9298
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9299
+ */
9300
+ chatMessageLayout: "bubbles",
9301
+ /*
9295
9302
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9296
9303
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9297
9304
  */
@@ -9500,6 +9507,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9500
9507
  not variant-detected and unsupported input, including Japanese, remains English.
9501
9508
  */
9502
9509
  taskDefinitionInInputLanguage: false,
9510
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9511
+ taskOutputLanguage: void 0,
9503
9512
  useAiMergeCommitSummary: true,
9504
9513
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9505
9514
  titleSummarizerProvider: void 0,
@@ -8742,7 +8742,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8742
8742
  import { EventEmitter } from "node:events";
8743
8743
 
8744
8744
  // ../core/src/types/board/board.ts
8745
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8745
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8746
8746
 
8747
8747
  // ../core/src/types/ui/execution-and-ui.ts
8748
8748
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9180,6 +9180,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9180
9180
  var DEFAULT_PROJECT_SETTINGS = {
9181
9181
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9182
9182
  maxRecommendationsPerTask: 3,
9183
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9184
+ requireTaskRecommendations: false,
9183
9185
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9184
9186
  recommendationMailboxNoticeEnabled: true,
9185
9187
  globalPause: false,
@@ -9291,6 +9293,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9291
9293
  */
9292
9294
  showCostBadgeOnCards: false,
9293
9295
  /*
9296
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9297
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9298
+ */
9299
+ chatMessageLayout: "bubbles",
9300
+ /*
9294
9301
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9295
9302
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9296
9303
  */
@@ -9499,6 +9506,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9499
9506
  not variant-detected and unsupported input, including Japanese, remains English.
9500
9507
  */
9501
9508
  taskDefinitionInInputLanguage: false,
9509
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9510
+ taskOutputLanguage: void 0,
9502
9511
  useAiMergeCommitSummary: true,
9503
9512
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9504
9513
  titleSummarizerProvider: void 0,
@@ -36765,7 +36774,8 @@ function normalizeStreamingDelta(previousText, nextDelta) {
36765
36774
  const previousChar = previousText.slice(-1);
36766
36775
  const nextChar = nextDelta[0] ?? "";
36767
36776
  if (/\s/.test(previousChar) || /\s/.test(nextChar)) return nextDelta;
36768
- if (/[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
36777
+ const isNumericTokenContinuation = previousChar === "." && /\d/.test(previousText.slice(-2, -1)) && /\d/.test(nextChar);
36778
+ if (!isNumericTokenContinuation && /[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
36769
36779
  return ` ${nextDelta}`;
36770
36780
  }
36771
36781
  return nextDelta;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.36-beta.2",
3
+ "version": "0.1.36-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8742,7 +8742,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8742
8742
  import { EventEmitter } from "node:events";
8743
8743
 
8744
8744
  // ../core/src/types/board/board.ts
8745
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8745
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8746
8746
 
8747
8747
  // ../core/src/types/ui/execution-and-ui.ts
8748
8748
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9180,6 +9180,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9180
9180
  var DEFAULT_PROJECT_SETTINGS = {
9181
9181
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9182
9182
  maxRecommendationsPerTask: 3,
9183
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9184
+ requireTaskRecommendations: false,
9183
9185
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9184
9186
  recommendationMailboxNoticeEnabled: true,
9185
9187
  globalPause: false,
@@ -9291,6 +9293,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9291
9293
  */
9292
9294
  showCostBadgeOnCards: false,
9293
9295
  /*
9296
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9297
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9298
+ */
9299
+ chatMessageLayout: "bubbles",
9300
+ /*
9294
9301
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9295
9302
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9296
9303
  */
@@ -9499,6 +9506,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9499
9506
  not variant-detected and unsupported input, including Japanese, remains English.
9500
9507
  */
9501
9508
  taskDefinitionInInputLanguage: false,
9509
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9510
+ taskOutputLanguage: void 0,
9502
9511
  useAiMergeCommitSummary: true,
9503
9512
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9504
9513
  titleSummarizerProvider: void 0,
@@ -36755,7 +36764,8 @@ function normalizeStreamingDelta(previousText, nextDelta) {
36755
36764
  const previousChar = previousText.slice(-1);
36756
36765
  const nextChar = nextDelta[0] ?? "";
36757
36766
  if (/\s/.test(previousChar) || /\s/.test(nextChar)) return nextDelta;
36758
- if (/[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
36767
+ const isNumericTokenContinuation = previousChar === "." && /\d/.test(previousText.slice(-2, -1)) && /\d/.test(nextChar);
36768
+ if (!isNumericTokenContinuation && /[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
36759
36769
  return ` ${nextDelta}`;
36760
36770
  }
36761
36771
  return nextDelta;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/claude-runtime",
3
- "version": "0.1.11-beta.2",
3
+ "version": "0.1.11-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8862,7 +8862,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8862
8862
  import { EventEmitter } from "node:events";
8863
8863
 
8864
8864
  // ../core/src/types/board/board.ts
8865
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8865
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8866
8866
 
8867
8867
  // ../core/src/types/ui/execution-and-ui.ts
8868
8868
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9300,6 +9300,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9300
9300
  var DEFAULT_PROJECT_SETTINGS = {
9301
9301
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9302
9302
  maxRecommendationsPerTask: 3,
9303
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9304
+ requireTaskRecommendations: false,
9303
9305
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9304
9306
  recommendationMailboxNoticeEnabled: true,
9305
9307
  globalPause: false,
@@ -9411,6 +9413,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9411
9413
  */
9412
9414
  showCostBadgeOnCards: false,
9413
9415
  /*
9416
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9417
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9418
+ */
9419
+ chatMessageLayout: "bubbles",
9420
+ /*
9414
9421
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9415
9422
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9416
9423
  */
@@ -9619,6 +9626,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9619
9626
  not variant-detected and unsupported input, including Japanese, remains English.
9620
9627
  */
9621
9628
  taskDefinitionInInputLanguage: false,
9629
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9630
+ taskOutputLanguage: void 0,
9622
9631
  useAiMergeCommitSummary: true,
9623
9632
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9624
9633
  titleSummarizerProvider: void 0,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cli-printing-press",
3
- "version": "0.1.53-beta.2",
3
+ "version": "0.1.53-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8742,7 +8742,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8742
8742
  import { EventEmitter } from "node:events";
8743
8743
 
8744
8744
  // ../core/src/types/board/board.ts
8745
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8745
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8746
8746
 
8747
8747
  // ../core/src/types/ui/execution-and-ui.ts
8748
8748
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9180,6 +9180,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9180
9180
  var DEFAULT_PROJECT_SETTINGS = {
9181
9181
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9182
9182
  maxRecommendationsPerTask: 3,
9183
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9184
+ requireTaskRecommendations: false,
9183
9185
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9184
9186
  recommendationMailboxNoticeEnabled: true,
9185
9187
  globalPause: false,
@@ -9291,6 +9293,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9291
9293
  */
9292
9294
  showCostBadgeOnCards: false,
9293
9295
  /*
9296
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9297
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9298
+ */
9299
+ chatMessageLayout: "bubbles",
9300
+ /*
9294
9301
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9295
9302
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9296
9303
  */
@@ -9499,6 +9506,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9499
9506
  not variant-detected and unsupported input, including Japanese, remains English.
9500
9507
  */
9501
9508
  taskDefinitionInInputLanguage: false,
9509
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9510
+ taskOutputLanguage: void 0,
9502
9511
  useAiMergeCommitSummary: true,
9503
9512
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9504
9513
  titleSummarizerProvider: void 0,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/compound-engineering",
3
- "version": "0.1.36-beta.2",
3
+ "version": "0.1.36-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8745,7 +8745,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8745
8745
  import { EventEmitter } from "node:events";
8746
8746
 
8747
8747
  // ../core/src/types/board/board.ts
8748
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8748
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8749
8749
 
8750
8750
  // ../core/src/types/ui/execution-and-ui.ts
8751
8751
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9183,6 +9183,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9183
9183
  var DEFAULT_PROJECT_SETTINGS = {
9184
9184
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9185
9185
  maxRecommendationsPerTask: 3,
9186
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9187
+ requireTaskRecommendations: false,
9186
9188
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9187
9189
  recommendationMailboxNoticeEnabled: true,
9188
9190
  globalPause: false,
@@ -9294,6 +9296,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9294
9296
  */
9295
9297
  showCostBadgeOnCards: false,
9296
9298
  /*
9299
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9300
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9301
+ */
9302
+ chatMessageLayout: "bubbles",
9303
+ /*
9297
9304
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9298
9305
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9299
9306
  */
@@ -9502,6 +9509,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9502
9509
  not variant-detected and unsupported input, including Japanese, remains English.
9503
9510
  */
9504
9511
  taskDefinitionInInputLanguage: false,
9512
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9513
+ taskOutputLanguage: void 0,
9505
9514
  useAiMergeCommitSummary: true,
9506
9515
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9507
9516
  titleSummarizerProvider: void 0,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.55-beta.2",
3
+ "version": "0.1.55-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8742,7 +8742,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8742
8742
  import { EventEmitter } from "node:events";
8743
8743
 
8744
8744
  // ../core/src/types/board/board.ts
8745
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8745
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8746
8746
 
8747
8747
  // ../core/src/types/ui/execution-and-ui.ts
8748
8748
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9180,6 +9180,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9180
9180
  var DEFAULT_PROJECT_SETTINGS = {
9181
9181
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9182
9182
  maxRecommendationsPerTask: 3,
9183
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9184
+ requireTaskRecommendations: false,
9183
9185
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9184
9186
  recommendationMailboxNoticeEnabled: true,
9185
9187
  globalPause: false,
@@ -9291,6 +9293,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9291
9293
  */
9292
9294
  showCostBadgeOnCards: false,
9293
9295
  /*
9296
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9297
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9298
+ */
9299
+ chatMessageLayout: "bubbles",
9300
+ /*
9294
9301
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9295
9302
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9296
9303
  */
@@ -9499,6 +9506,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9499
9506
  not variant-detected and unsupported input, including Japanese, remains English.
9500
9507
  */
9501
9508
  taskDefinitionInInputLanguage: false,
9509
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9510
+ taskOutputLanguage: void 0,
9502
9511
  useAiMergeCommitSummary: true,
9503
9512
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9504
9513
  titleSummarizerProvider: void 0,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/dependency-graph",
3
- "version": "0.1.67-beta.2",
3
+ "version": "0.1.67-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -8742,7 +8742,7 @@ import { randomUUID, randomBytes, createHash as createHash2 } from "node:crypto"
8742
8742
  import { EventEmitter } from "node:events";
8743
8743
 
8744
8744
  // ../core/src/types/board/board.ts
8745
- var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
8745
+ var THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
8746
8746
 
8747
8747
  // ../core/src/types/ui/execution-and-ui.ts
8748
8748
  var STALE_HIGH_FANOUT_BLOCKER_AGE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -9180,6 +9180,8 @@ var DEFAULT_GLOBAL_SETTINGS = {
9180
9180
  var DEFAULT_PROJECT_SETTINGS = {
9181
9181
  // FNXC:TaskRecommendations 2026-08-08-05:02: completion follows-ups stay bounded by default; 0 disables writing them.
9182
9182
  maxRecommendationsPerTask: 3,
9183
+ // FNXC:TaskRecommendations 2026-08-19-13:05: explicit recommendation evaluation is opt-in and only applies while the positive cap enables capture; relevance always outranks count.
9184
+ requireTaskRecommendations: false,
9183
9185
  // FNXC:TaskRecommendations 2026-08-13-03:56: surface completed-task proposals by default; operators can suppress the notice without suppressing capture.
9184
9186
  recommendationMailboxNoticeEnabled: true,
9185
9187
  globalPause: false,
@@ -9291,6 +9293,11 @@ var DEFAULT_PROJECT_SETTINGS = {
9291
9293
  */
9292
9294
  showCostBadgeOnCards: false,
9293
9295
  /*
9296
+ FNXC:ChatMessageLayout 2026-08-18-20:27:
9297
+ The project preference applies one reversible layout choice to every standard and task chat surface. Explicitly seed the historical bubbles presentation so upgraded projects preserve their existing UI.
9298
+ */
9299
+ chatMessageLayout: "bubbles",
9300
+ /*
9294
9301
  FNXC:TaskDetailActivityFirst 2026-06-30-23:59:
9295
9302
  Project task-detail defaults are Activity-first unless this opt-in is true. Keeping the default false preserves explicit deep-link ids while making omitted non-done task opens land on Activity → Live.
9296
9303
  */
@@ -9499,6 +9506,8 @@ var DEFAULT_PROJECT_SETTINGS = {
9499
9506
  not variant-detected and unsupported input, including Japanese, remains English.
9500
9507
  */
9501
9508
  taskDefinitionInInputLanguage: false,
9509
+ /* FNXC:TaskOutputLanguage 2026-08-19-14:56: Undefined preserves legacy true compatibility; the resolver supplies English for fresh projects. */
9510
+ taskOutputLanguage: void 0,
9502
9511
  useAiMergeCommitSummary: true,
9503
9512
  // Title-summarizer model lanes stay project-scoped (not moved in U4).
9504
9513
  titleSummarizerProvider: void 0,
@@ -20293,7 +20302,8 @@ function normalizeStreamingDelta(previousText, nextDelta) {
20293
20302
  if (/\s/.test(previousChar) || /\s/.test(nextChar)) {
20294
20303
  return nextDelta;
20295
20304
  }
20296
- if (/[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
20305
+ const isNumericTokenContinuation = previousChar === "." && /\d/.test(previousText.slice(-2, -1)) && /\d/.test(nextChar);
20306
+ if (!isNumericTokenContinuation && /[.!?]/.test(previousChar) && /[A-Z0-9"'([]/.test(nextChar)) {
20297
20307
  return ` ${nextDelta}`;
20298
20308
  }
20299
20309
  return nextDelta;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/droid-runtime",
3
- "version": "0.1.62-beta.2",
3
+ "version": "0.1.62-beta.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {