@openchambery/web 1.19.13-beta.2 → 1.19.13-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 (49) hide show
  1. package/dist/assets/AssistantView-4rOhnCbj.js +2 -0
  2. package/dist/assets/{DiagramView-CjNUrHsU.js → DiagramView-qyOlOyET.js} +1 -1
  3. package/dist/assets/{MarkdownRenderer-BHfbAwVO.js → MarkdownRenderer-DJORbaAh.js} +2 -2
  4. package/dist/assets/{MarkdownRendererImpl-CkBoUibc.js → MarkdownRendererImpl-Baw1_E_b.js} +4 -1
  5. package/dist/assets/MarkstreamRendererImpl-C3y7cRux.js +3 -0
  6. package/dist/assets/{MobileDetailNavigation-aY9-HwBN.js → MobileDetailNavigation-Cy-LwJ5M.js} +1 -1
  7. package/dist/assets/{MobileShareBridge-CRt_8DmM.js → MobileShareBridge-CTai3NEM.js} +1 -1
  8. package/dist/assets/{MobileSurface-CIhtF-CU.js → MobileSurface-CYg5Flgz.js} +1 -1
  9. package/dist/assets/{MultiRunWindow-DDq6C8t7.js → MultiRunWindow-CnzvP7OW.js} +1 -1
  10. package/dist/assets/{SettingsView-DFWWMvAj.js → SettingsView-Gerbi-eT.js} +1 -1
  11. package/dist/assets/{SettingsWindow-CnYfBplB.js → SettingsWindow-Czkt-v7v.js} +1 -1
  12. package/dist/assets/{TerminalView-D5CQFVVm.js → TerminalView-C3PKUnFu.js} +1 -1
  13. package/dist/assets/{ToolOutputDialog-VMI7TQFT.js → ToolOutputDialog-Nv1AVjeU.js} +1 -1
  14. package/dist/assets/{appThemeRegistry-UIrP0-5h.js → appThemeRegistry-eohB6OfO.js} +1 -1
  15. package/dist/assets/{gitApi-Bu4W3bgD.js → gitApi-CrP1R39C.js} +1 -1
  16. package/dist/assets/{insertionBoundaries-B1AqxsBD.js → insertionBoundaries-C8jXd3NT.js} +1 -1
  17. package/dist/assets/{main-DG-k0j8A.js → main-Bjgj-x5l.js} +2 -2
  18. package/dist/assets/{main-CqcB6tKc.js → main-DZg9T7tk.js} +4 -4
  19. package/dist/assets/{miniChat-BQtYQrsh.js → miniChat-DUFEC4jl.js} +2 -2
  20. package/dist/assets/{mobile-8iyqtXkr.js → mobile-BqOSxf04.js} +2 -2
  21. package/dist/assets/{multirun-CG_FCb_Z.js → multirun-IUfGqjJa.js} +1 -1
  22. package/dist/assets/{projectMeta-DMpMDWE1.js → projectMeta-B94Ha79_.js} +1 -1
  23. package/dist/assets/{renderElectronMiniChatApp-DBzRdJl8.js → renderElectronMiniChatApp-DwWmaqPt.js} +2 -2
  24. package/dist/assets/{renderMobileApp-CIseqCyn.js → renderMobileApp-ByS1wjSm.js} +4 -4
  25. package/dist/assets/{runtimeConfig-D8nJYB-e.js → runtimeConfig-DhAd_g4W.js} +1 -1
  26. package/dist/assets/runtimeEndpointReset-Dk_Xpe6y.js +147 -0
  27. package/dist/assets/{sessionLookup-BiBD-4wC.js → sessionLookup-DZcwnQYW.js} +1 -1
  28. package/dist/assets/{useAppFontEffects-qHt5uaFN.js → useAppFontEffects-BO7HWYlJ.js} +5 -5
  29. package/dist/assets/{useDesktopWindowControlsLayout-BipyIXiK.js → useDesktopWindowControlsLayout-BAuvqFxV.js} +1 -1
  30. package/dist/assets/{useEffectiveDirectory-DSNCCbCt.js → useEffectiveDirectory-B9GzC3CE.js} +1 -1
  31. package/dist/assets/{useMobileNavigationStore-C1NJGAik.js → useMobileNavigationStore-Dqe-sz0u.js} +1 -1
  32. package/dist/assets/{useSessionAutoCleanup-Dcn6Unvd.js → useSessionAutoCleanup-DSAkV_JD.js} +1 -1
  33. package/dist/assets/{useWorkerHighlightedLines-CzpT4M7V.js → useWorkerHighlightedLines-BW-HxZ9_.js} +1 -1
  34. package/dist/index.html +2 -2
  35. package/dist/mini-chat.html +2 -2
  36. package/dist/mobile.html +2 -2
  37. package/package.json +1 -1
  38. package/server/lib/assistants/DOCUMENTATION.md +20 -11
  39. package/server/lib/assistants/assign.js +56 -1
  40. package/server/lib/assistants/assign.test.js +60 -0
  41. package/server/lib/assistants/contact-tools.js +212 -1
  42. package/server/lib/assistants/contact-tools.test.js +151 -0
  43. package/server/lib/assistants/harness.js +56 -5
  44. package/server/lib/assistants/harness.test.js +17 -9
  45. package/server/lib/assistants/service.js +514 -16
  46. package/server/lib/assistants/service.test.js +546 -26
  47. package/dist/assets/AssistantView-D5c557Oe.js +0 -2
  48. package/dist/assets/MarkstreamRendererImpl-BrXUOI9g.js +0 -3
  49. package/dist/assets/runtimeEndpointReset-CSub_ecV.js +0 -147
@@ -297,7 +297,8 @@ describe('runContactTurn', () => {
297
297
  expect(assignWork).toHaveBeenCalledTimes(1)
298
298
  expect(result.cards).toEqual([expect.objectContaining({ sessionID: 'ses_once', cardType: 'session' })])
299
299
  expect(result.cards).toHaveLength(1)
300
- expect(result.bubbles).toContain('Opened a coding session.')
300
+ // Card is the user-facing confirm — English toolText must not leak into bubbles.
301
+ expect(result.bubbles.join('\n')).not.toContain('Opened a coding session.')
301
302
  // First completion issues assign; terminate skips the auto follow-up LLM.
302
303
  expect(createChatCompletion).toHaveBeenCalledTimes(1)
303
304
  expect(completions).toBe(1)
@@ -389,7 +390,9 @@ describe('runContactTurn', () => {
389
390
  createChatCompletion: vi.fn(), AgentImpl,
390
391
  })
391
392
  expect(prompts).toHaveLength(2)
392
- expect(result.bubbles).toEqual(['Opened session.'])
393
+ // assign toolText is not a user bubble; no spoken/card in this fixture.
394
+ expect(result.bubbles).toEqual([])
395
+ expect(result.bubbles.join('\n')).not.toContain('Opened session.')
393
396
  })
394
397
  it('runs pi-agent-core with thinking off and no tools by default', async () => {
395
398
  const prompt = vi.fn(async function prompt() {
@@ -558,7 +561,9 @@ describe('runContactTurn', () => {
558
561
  projects: [{ id: 'proj_yee', path: '/repo/sample-app', label: 'OpenChamber Yee' }],
559
562
  AgentImpl,
560
563
  })
561
- expect(result.bubbles).toEqual(['opened'])
564
+ // Keep assistant spoken/confirm text; do not paint English assign toolText.
565
+ expect(result.bubbles).toEqual(['Opening that.'])
566
+ expect(result.bubbles.join('\n')).not.toContain('opened')
562
567
  expect(result.cards).toEqual([expect.objectContaining({ sessionID: 'ses_1', cardType: 'session' })])
563
568
  expect(result.thinkingLevel).toBe('off')
564
569
  })
@@ -602,7 +607,7 @@ describe('runContactTurn', () => {
602
607
  AgentImpl,
603
608
  })
604
609
  expect(result.bubbles.join('\n')).not.toMatch(/Let me think|assign_session/)
605
- expect(result.bubbles).toEqual(['Opened a coding session.'])
610
+ expect(result.bubbles.join('\n')).not.toContain('Opened a coding session.')
606
611
  expect(result.cards).toEqual([expect.objectContaining({ sessionID: 'ses_plan' })])
607
612
  })
608
613
 
@@ -644,7 +649,7 @@ describe('runContactTurn', () => {
644
649
  tools: [{ name: 'assign_session', execute: vi.fn() }],
645
650
  AgentImpl,
646
651
  })
647
- expect(result.bubbles).toEqual(['我去找一下', 'Opened a coding session.'])
652
+ expect(result.bubbles).toEqual(['我去找一下'])
648
653
  expect(result.cards).toEqual([expect.objectContaining({ sessionID: 'ses_speak' })])
649
654
  })
650
655
 
@@ -733,7 +738,8 @@ describe('runContactTurn', () => {
733
738
  assistantID: 'asst_flow',
734
739
  })])
735
740
  expect(result.bubbles.join('')).not.toContain('好的,我来直接创建')
736
- expect(result.bubbles.join('')).toContain('Created assistant FlowNL')
741
+ expect(result.bubbles.join('')).not.toContain('Created assistant FlowNL')
742
+ expect(result.cards).toHaveLength(1)
737
743
  expect(result.thinkingLevel).toBe('off')
738
744
  })
739
745
 
@@ -769,8 +775,9 @@ describe('runContactTurn', () => {
769
775
  ])
770
776
  expect(createAssistant).not.toHaveBeenCalled()
771
777
  expect(result.cards).toEqual([])
772
- expect(result.bubbles).toEqual([MISSED_TOOL_FAILURE_BUBBLE])
773
- expect(result.bubbles.join('')).not.toContain('已创建')
778
+ // Prefer existing assistant text over the English missed-tool fallback.
779
+ expect(result.bubbles).toEqual(['好的,已创建。'])
780
+ expect(result.bubbles).not.toEqual([MISSED_TOOL_FAILURE_BUBBLE])
774
781
  })
775
782
 
776
783
  it('retries a missed fence once and then executes message_assistant', async () => {
@@ -828,7 +835,8 @@ describe('runContactTurn', () => {
828
835
  text: 'hello-from-assistant 写好了',
829
836
  })
830
837
  expect(result.cards).toEqual([])
831
- expect(result.bubbles.join('')).toContain('Sent to PeerQA')
838
+ // English tool confirm must not leak; retry slice has no spoken preamble.
839
+ expect(result.bubbles.join('')).not.toContain('Sent to PeerQA')
832
840
  expect(result.bubbles.join('')).not.toContain('好的,我去说一声')
833
841
  })
834
842