@runfusion/fusion 0.77.0-beta.3 → 0.77.0-beta.5

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 (179) hide show
  1. package/dist/bin.js +13158 -10683
  2. package/dist/child-process-worker.js +9200 -6239
  3. package/dist/client/.vite/manifest.json +301 -274
  4. package/dist/client/assets/{AgentDetailView-D-mPbGXe.js → AgentDetailView-CSK_Rnlk.js} +3 -3
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-Bq3z2QY0.js → AgentPermissionPolicyEditor-kG44Adcm.js} +1 -1
  6. package/dist/client/assets/{AgentsView-CYg6b9n0.js → AgentsView-ClKwKWnU.js} +4 -4
  7. package/dist/client/assets/ChatView-DoOqgkPX.js +13 -0
  8. package/dist/client/assets/{CommandCenter-DDCbSURT.js → CommandCenter-CJxvPbgn.js} +3 -3
  9. package/dist/client/assets/{DevServerView-DJ459OYL.js → DevServerView-C4nyLONX.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-ClOKp7d1.js → DirectoryPicker-BIvXWIB5.js} +1 -1
  11. package/dist/client/assets/DocumentsView-DH_aZysM.js +1 -0
  12. package/dist/client/assets/{EvalsView-DGJFQc1W.js → EvalsView-klRK-GJQ.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-CMy3zvnk.js → ExperimentalAgentOnboardingModal-CgBmukIm.js} +1 -1
  14. package/dist/client/assets/{GoalsView-D-z3Rf4g.js → GoalsView-ysh3X2x6.js} +1 -1
  15. package/dist/client/assets/{InsightsView-By1AFGbM.js → InsightsView-BbMjCu7J.js} +3 -3
  16. package/dist/client/assets/MemoryView-B3IgA8Bx.js +3 -0
  17. package/dist/client/assets/{PiExtensionsManager-_8u94B1u.js → PiExtensionsManager-CZlIw7C3.js} +1 -1
  18. package/dist/client/assets/PluginManager-vy0YZ2Nx.js +1 -0
  19. package/dist/client/assets/{PullRequestView-NkCEKKpG.js → PullRequestView-DhhsJV8I.js} +2 -2
  20. package/dist/client/assets/ReportModal-CQMn4i1y.js +21 -0
  21. package/dist/client/assets/ReportModal-lzN_xrnM.css +1 -0
  22. package/dist/client/assets/{ResearchView-BCxXqB8F.js → ResearchView-CVwfs4l3.js} +2 -2
  23. package/dist/client/assets/{SecretsView-CxK0XDc2.js → SecretsView-CrJfHle9.js} +1 -1
  24. package/dist/client/assets/{SessionTerminal-CuVsOYc8.js → SessionTerminal-BRI8W1-G.js} +1 -1
  25. package/dist/client/assets/{SettingsModal-BtV1tIIf.js → SettingsModal-B6U5Umru.js} +1 -1
  26. package/dist/client/assets/SettingsModal-C5ic1ls7.css +1 -0
  27. package/dist/client/assets/SettingsModal-h1A_aFqD.js +21 -0
  28. package/dist/client/assets/{SettingsTextareaRow-YR4pGawU.js → SettingsTextareaRow-O7-u9uMC.js} +1 -1
  29. package/dist/client/assets/SetupWizardModal-nXfJp8cA.js +2 -0
  30. package/dist/client/assets/{SkillsView-B4Jc91WM.js → SkillsView-CoWAjvWU.js} +1 -1
  31. package/dist/client/assets/{WorkflowNodeEditor-DGtYlSHs.js → WorkflowNodeEditor-BFMM3RF_.js} +2 -2
  32. package/dist/client/assets/{agent-import-generation-CHAXFtOA.js → agent-import-generation-BqDmtTur.js} +1 -1
  33. package/dist/client/assets/{agentsOrgChartLayout-DsahEyq7.js → agentsOrgChartLayout-C4cLqlV6.js} +1 -1
  34. package/dist/client/assets/app-BBSLJDbV.js +13 -0
  35. package/dist/client/assets/app-BKwOvuxE.js +5 -0
  36. package/dist/client/assets/app-Bvr57EZQ.js +5 -0
  37. package/dist/client/assets/app-C_PTWuI1.js +13 -0
  38. package/dist/client/assets/app-DKx18PHE.js +13 -0
  39. package/dist/client/assets/app-DRW5hIgr.js +13 -0
  40. package/dist/client/assets/app-DwvelD-n.js +13 -0
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BKJBR8ob.js → architectureDiagram-3BPJPVTR-CdxcwdRe.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-CqpNEYwI.js → blockDiagram-GPEHLZMM-CfQrRfHR.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-CouyKoYs.js → c4Diagram-AAUBKEIU-Cx7-2SOm.js} +1 -1
  44. package/dist/client/assets/channel-B4WN1jC_.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-WHWSsNaC.js → chunk-2J33WTMH-D8jvgP3M.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-B-EVACQc.js → chunk-4BX2VUAB-B5tBx_s_.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-CVvNjEpv.js → chunk-55IACEB6-C-F-HQ5Z.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-CV4EKLRh.js → chunk-727SXJPM-BP8Ln-8C.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-DtDpuURf.js → chunk-AQP2D5EJ-DMnTmRmn.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-DPejtS21.js → chunk-FMBD7UC4-D_YdfnNc.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-DGDxBRA_.js → chunk-ND2GUHAM-CULXyuXq.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-D2k1MIuX.js → chunk-QZHKN3VN-CT1BWEJL.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-CKE8RSOv.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CKE8RSOv.js +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-Cr6PW7Dk.js → cose-bilkent-S5V4N54A-M-3DXa6e.js} +1 -1
  56. package/dist/client/assets/{dagre-BM42HDAG-QKrqYGWy.js → dagre-BM42HDAG-Bsiqvroz.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-BQRwsBoj.js → dashboard-view-BEBh_Ei5.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-BcNU4vFB.js → dashboard-view-Bo_gFjdO.js} +1 -1
  59. package/dist/client/assets/{dashboard-view-CkPDyljq.js → dashboard-view-CnFFG3cW.js} +1 -1
  60. package/dist/client/assets/{dashboard-view-BksOkReD.js → dashboard-view-DAHn20ph.js} +1 -1
  61. package/dist/client/assets/{diagram-2AECGRRQ-BBFXrRQl.js → diagram-2AECGRRQ-CZiHoXo5.js} +1 -1
  62. package/dist/client/assets/{diagram-5GNKFQAL-_T4nM0jp.js → diagram-5GNKFQAL-BoJVz4Or.js} +1 -1
  63. package/dist/client/assets/{diagram-KO2AKTUF-BAKmsx_j.js → diagram-KO2AKTUF-DivGQuAL.js} +1 -1
  64. package/dist/client/assets/{diagram-LMA3HP47-Xdsdd6Gx.js → diagram-LMA3HP47-DkMK7OJp.js} +1 -1
  65. package/dist/client/assets/{diagram-OG6HWLK6-tIHxhnE8.js → diagram-OG6HWLK6-DFFvRcpW.js} +1 -1
  66. package/dist/client/assets/{erDiagram-TEJ5UH35-HZSbfe0g.js → erDiagram-TEJ5UH35--217vrom.js} +1 -1
  67. package/dist/client/assets/{flowDiagram-I6XJVG4X-C4O3r0DX.js → flowDiagram-I6XJVG4X-CQgWO3xf.js} +1 -1
  68. package/dist/client/assets/{folder-open-15UiPjYb.js → folder-open-DR6cRcNR.js} +1 -1
  69. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DGsKKMEu.js → ganttDiagram-6RSMTGT7-BjDMUrS3.js} +1 -1
  70. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BY4kgtHp.js → gitGraphDiagram-PVQCEYII-gKUcDnln.js} +1 -1
  71. package/dist/client/assets/index-Dki2LBAp.css +1 -0
  72. package/dist/client/assets/index-oxnX59eO.js +2774 -0
  73. package/dist/client/assets/{infoDiagram-5YYISTIA-lJBWxF8I.js → infoDiagram-5YYISTIA-BA91T8S5.js} +1 -1
  74. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CrE_q16o.js → ishikawaDiagram-YF4QCWOH-0BY5xe-c.js} +1 -1
  75. package/dist/client/assets/{journeyDiagram-JHISSGLW-9V42jgFW.js → journeyDiagram-JHISSGLW-B_OwenbQ.js} +1 -1
  76. package/dist/client/assets/{kanban-definition-UN3LZRKU-B_T-7Vyf.js → kanban-definition-UN3LZRKU-GLabUTKp.js} +1 -1
  77. package/dist/client/assets/{mermaid.core-CwJ7S3PS.js → mermaid.core-BXo4rxYI.js} +4 -4
  78. package/dist/client/assets/{mindmap-definition-RKZ34NQL-MYNSgM6G.js → mindmap-definition-RKZ34NQL-DZl6LPoE.js} +1 -1
  79. package/dist/client/assets/{pieDiagram-4H26LBE5-CtT-wbYj.js → pieDiagram-4H26LBE5-DtHq-4py.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-CXdFNN8H.js → puzzle-OVm-I1L4.js} +1 -1
  86. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-3klC5x4k.js → quadrantDiagram-W4KKPZXB-BdjXhd5d.js} +1 -1
  87. package/dist/client/assets/{requirementDiagram-4Y6WPE33-CHfFrsBL.js → requirementDiagram-4Y6WPE33-BoFVjELN.js} +1 -1
  88. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Dtktw7Dy.js → sankeyDiagram-5OEKKPKP-B0qyJh-P.js} +1 -1
  89. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CuXPMjTU.js → sequenceDiagram-3UESZ5HK-ByY62Eqp.js} +1 -1
  90. package/dist/client/assets/{shield-alert-D9xqzJwR.js → shield-alert-CDy69fl7.js} +1 -1
  91. package/dist/client/assets/{standing-instructions-template-CcpV_LRP.js → standing-instructions-template-BsnnRlwm.js} +2 -2
  92. package/dist/client/assets/{stateDiagram-AJRCARHV-Bj_rDJwQ.js → stateDiagram-AJRCARHV-CwJ-_Phi.js} +1 -1
  93. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-D-YYF-kX.js → stateDiagram-v2-BHNVJYJU-Cfvhq8mV.js} +1 -1
  94. package/dist/client/assets/{timeline-definition-PNZ67QCA-DXalwFMD.js → timeline-definition-PNZ67QCA-Co8VfGN9.js} +1 -1
  95. package/dist/client/assets/{upload-CWVc30BQ.js → upload-CkqDbEeE.js} +1 -1
  96. package/dist/client/assets/{useDiscoveredSkillsCache-D2M95Nn0.js → useDiscoveredSkillsCache-BHUasRiZ.js} +1 -1
  97. package/dist/client/assets/{users-q_-iLqv9.js → users-B8DkpbXD.js} +1 -1
  98. package/dist/client/assets/{vennDiagram-CIIHVFJN-0-aTlrbe.js → vennDiagram-CIIHVFJN-XSJteQrL.js} +1 -1
  99. package/dist/client/assets/{wardley-L42UT6IY-Bz_e_5wx.js → wardley-L42UT6IY-Btc0FRfF.js} +1 -1
  100. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DsQu4YnA.js → wardleyDiagram-YWT4CUSO--IcDNmrf.js} +1 -1
  101. package/dist/client/assets/{xychartDiagram-2RQKCTM6-K6GQdwVG.js → xychartDiagram-2RQKCTM6-CZW93G6X.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 +10390 -7118
  107. package/dist/migrations/0000_initial.sql +3 -0
  108. package/dist/migrations/0061_fn_066_activity_log_task_id_index.sql +7 -0
  109. package/dist/migrations/0062_remove_task_subtask_splitting.sql +2 -0
  110. package/dist/migrations/0063_fn_090_ai_merge_review_reconciliation.sql +2 -0
  111. package/dist/migrations/0064_fn_094_task_repository_scope.sql +2 -0
  112. package/dist/pi-claude-cli/package.json +1 -1
  113. package/dist/pi-claude-cli/src/__tests__/event-bridge.test.ts +29 -1
  114. package/dist/pi-claude-cli/src/event-bridge.ts +10 -4
  115. package/dist/plugin-sdk/index.d.ts +301 -189
  116. package/dist/plugin-sdk/index.js +45 -105
  117. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +47 -106
  118. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +47 -106
  120. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +45 -105
  122. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +45 -105
  124. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +45 -105
  126. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +45 -105
  128. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +47 -106
  130. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +47 -106
  132. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +45 -105
  134. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-linear-import/bundled.js +45 -105
  136. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  137. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +47 -106
  138. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  139. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +45 -105
  140. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  141. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +45 -105
  142. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  143. package/dist/plugins/fusion-plugin-quality/bundled.js +45 -105
  144. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  145. package/dist/plugins/fusion-plugin-reports/bundled.js +45 -105
  146. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  147. package/dist/plugins/fusion-plugin-roadmap/bundled.js +45 -105
  148. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  149. package/dist/plugins/fusion-plugin-todos/bundled.js +45 -105
  150. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  151. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +45 -105
  152. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  153. package/package.json +1 -1
  154. package/skill/fusion/SKILL.md +1 -1
  155. package/skill/fusion/references/extension-tools.md +19 -1
  156. package/skill/fusion/references/fusion-capabilities.md +3 -1
  157. package/skill/fusion/references/task-structure.md +1 -1
  158. package/skill/fusion/workflows/specifications.md +2 -2
  159. package/dist/client/assets/ChatView-qnlDeWDu.js +0 -13
  160. package/dist/client/assets/DocumentsView-D3Yb4WqD.js +0 -1
  161. package/dist/client/assets/MemoryView-Dhe8ydZR.js +0 -3
  162. package/dist/client/assets/PluginManager-ByNlw3zN.js +0 -1
  163. package/dist/client/assets/ReportModal-DovuZwdY.js +0 -21
  164. package/dist/client/assets/ReportModal-M3uh98sc.css +0 -1
  165. package/dist/client/assets/SettingsModal-C-tiAvqQ.js +0 -21
  166. package/dist/client/assets/SettingsModal-C0FY8MPW.css +0 -1
  167. package/dist/client/assets/SetupWizardModal-DrbeWku9.js +0 -2
  168. package/dist/client/assets/app-BgpuMvTU.js +0 -13
  169. package/dist/client/assets/app-BlexHhbW.js +0 -13
  170. package/dist/client/assets/app-BsuUOR0P.js +0 -13
  171. package/dist/client/assets/app-DQVOujmO.js +0 -13
  172. package/dist/client/assets/app-DjyTRx1N.js +0 -5
  173. package/dist/client/assets/app-Dniggype.js +0 -13
  174. package/dist/client/assets/app-EV-lyZ0T.js +0 -5
  175. package/dist/client/assets/channel-D7yWYIo9.js +0 -1
  176. package/dist/client/assets/classDiagram-4FO5ZUOK-cuSqS34E.js +0 -1
  177. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-cuSqS34E.js +0 -1
  178. package/dist/client/assets/index-4c8KmZSa.js +0 -2818
  179. package/dist/client/assets/index-Bg6JQgJj.css +0 -1
@@ -154,6 +154,7 @@ CREATE TABLE IF NOT EXISTS project.tasks (
154
154
  source_issue_closed_at text,
155
155
  merge_details jsonb,
156
156
  workspace_worktrees jsonb,
157
+ repository_scope jsonb,
157
158
  break_into_subtasks integer DEFAULT 0,
158
159
  no_commits_expected integer DEFAULT 0,
159
160
  enabled_workflow_steps jsonb DEFAULT '[]',
@@ -1812,6 +1813,8 @@ CREATE INDEX IF NOT EXISTS "idxCentralActivityLogType"
1812
1813
  ON central.central_activity_log(type);
1813
1814
  CREATE INDEX IF NOT EXISTS "idxCentralActivityLogProjectId"
1814
1815
  ON central.central_activity_log(project_id);
1816
+ CREATE INDEX IF NOT EXISTS "idxCentralActivityLogTaskIdTimestamp"
1817
+ ON central.central_activity_log(task_id, timestamp DESC);
1815
1818
 
1816
1819
  CREATE TABLE IF NOT EXISTS central.global_concurrency (
1817
1820
  id integer PRIMARY KEY,
@@ -0,0 +1,7 @@
1
+ /*
2
+ FNXC:ActivityLogTaskSearch 2026-08-20-04:17:
3
+ Activity Log task search filters durable central history by an exact ID, so upgraded databases need the same
4
+ (task_id, timestamp DESC) index as fresh schemas before operators query a task across project/type filters.
5
+ */
6
+ CREATE INDEX IF NOT EXISTS "idxCentralActivityLogTaskIdTimestamp"
7
+ ON central.central_activity_log(task_id, timestamp DESC);
@@ -0,0 +1,2 @@
1
+ -- FNXC:TaskSplittingRemoval 2026-08-20-17:42: Complexity must not persist a request that can fan one task into children or delete its parent. This migration removes only the obsolete task flag and leaves every project-scoped task, dependency, prompt, and document intact.
2
+ ALTER TABLE project.tasks DROP COLUMN IF EXISTS break_into_subtasks;
@@ -0,0 +1,2 @@
1
+ -- FNXC:AIMergeReviewReconciliation 2026-08-20-21:56: FN-090 stores reconciliation state as one project-scoped task column rather than reconstructing blockers from task-log prose.
2
+ ALTER TABLE project.tasks ADD COLUMN IF NOT EXISTS ai_merge_review_reconciliation text;
@@ -0,0 +1,2 @@
1
+ -- FNXC:RepositoryScope 2026-08-20-23:07: Persist explicit workspace task intent independently of acquired checkout metadata.
2
+ ALTER TABLE project.tasks ADD COLUMN IF NOT EXISTS repository_scope jsonb;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/pi-claude-cli",
3
- "version": "0.77.0-beta.3",
3
+ "version": "0.77.0-beta.5",
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