@nextclaw/ui 0.27.1 → 0.27.3

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 (95) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/.vite/manifest.json +419 -419
  3. package/dist/assets/{account-panel-BVNV8XqM.js → account-panel-DiKpSvqS.js} +1 -1
  4. package/dist/assets/{agents-CfpN8PQc.js → agents-lT-bDFex.js} +1 -1
  5. package/dist/assets/agents-nyTxTl89.js +1 -0
  6. package/dist/assets/{api-CI6_8Qt1.js → api-BaML_txv.js} +1 -1
  7. package/dist/assets/{app-presenter-provider-2DwHRRle.js → app-presenter-provider-DSlY9Lz6.js} +6 -6
  8. package/dist/assets/{appearance-settings-page-Cn9w3F-K.js → appearance-settings-page-BNIxFwEY.js} +1 -1
  9. package/dist/assets/apps-D7Se5AXs.js +1 -0
  10. package/dist/assets/{book-open-i_BjUBqL.js → book-open-oG0GrLyy.js} +1 -1
  11. package/dist/assets/{card-DokH7OBp.js → card-DxCOCY_7.js} +1 -1
  12. package/dist/assets/{channels-list-page-B7G9lHUm.js → channels-list-page-UQ1xjKw9.js} +1 -1
  13. package/dist/assets/{circle-dashed-Cx8CIEbg.js → circle-dashed-pgOOTUik.js} +1 -1
  14. package/dist/assets/{client-CUJUci3r.js → client-C1Z8ITVa.js} +1 -1
  15. package/dist/assets/{config-split-page-hY1xug28.js → config-split-page-Cfozkh5B.js} +1 -1
  16. package/dist/assets/{confirm-dialog-B-ejV666.js → confirm-dialog-BdEQiFoD.js} +1 -1
  17. package/dist/assets/{context-menu-dGVv8klA.js → context-menu-DVgLoPqH.js} +1 -1
  18. package/dist/assets/{createLucideIcon-reFMl-W-.js → createLucideIcon-D-7Sxfw7.js} +1 -1
  19. package/dist/assets/cron-wSJKKm6g.js +1 -0
  20. package/dist/assets/{desktop-capabilities-page-CYJTQ3nC.js → desktop-capabilities-page-gakZ5UKX.js} +1 -1
  21. package/dist/assets/{desktop-update-config-guKAozXO.js → desktop-update-config-CVUwJyV-.js} +1 -1
  22. package/dist/assets/{dialog-DLOwdjT1.js → dialog-InO6RVpm.js} +1 -1
  23. package/dist/assets/{dist-ZaFFmAGl.js → dist-BxOjfeaD.js} +1 -1
  24. package/dist/assets/doc-browser-Cuedjp9j.js +1 -0
  25. package/dist/assets/{doc-browser-context-CTmOmuqa.js → doc-browser-context-Bs122rxO.js} +1 -1
  26. package/dist/assets/{download-DovI3Yvf.js → download-BN4aCzSx.js} +1 -1
  27. package/dist/assets/{extensions-BZ3qrM8M.js → extensions-hxS830nS.js} +1 -1
  28. package/dist/assets/{external-link-DUD3AbsF.js → external-link-NwtWKzE2.js} +1 -1
  29. package/dist/assets/{form-actions-B8VniHts.js → form-actions-XP38NiPw.js} +1 -1
  30. package/dist/assets/{i18n-IGQbjBqS.js → i18n-Bzo4IocH.js} +2 -2
  31. package/dist/assets/inbox-CnpKPeFb.js +1 -0
  32. package/dist/assets/{inbox-ClAG7SI_.js → inbox-DofXi7Xv.js} +1 -1
  33. package/dist/assets/{keyboard-shortcuts-settings-page-BqfbbKir.js → keyboard-shortcuts-settings-page-Cn3zyBq_.js} +1 -1
  34. package/dist/assets/login-page-3Yv6FU7k.js +1 -0
  35. package/dist/assets/{login-page-DYaozpzz.js → login-page-CkfjjXD2.js} +1 -1
  36. package/dist/assets/{main-CWYF9QU_.js → main-BI7BtvLx.js} +2 -2
  37. package/dist/assets/main-i18n-catalog.config-ykBbOfNP.js +1 -0
  38. package/dist/assets/marketplace-BkdTZexc.js +1 -0
  39. package/dist/assets/mcp-marketplace-page-BqFum360.js +1 -0
  40. package/dist/assets/{model-config-page-Cduyz2Hy.js → model-config-page-BCGCP2Wc.js} +1 -1
  41. package/dist/assets/{navigation-link-D-JSWFxj.js → navigation-link-tawg3qi2.js} +1 -1
  42. package/dist/assets/panel-app-i18n-catalog.config-DEFg3R5S.js +1 -0
  43. package/dist/assets/panel-apps-CRjFqZZD.js +1 -0
  44. package/dist/assets/{panelStandalone-oHxbXvYt.js → panelStandalone-smtUeY2k.js} +2 -2
  45. package/dist/assets/plus-v29lPO18.js +1 -0
  46. package/dist/assets/{privacy-settings-page-DG9E8N-F.js → privacy-settings-page-D4TI_vdw.js} +1 -1
  47. package/dist/assets/{projects-CzBaTOTL.js → projects-Rm2oKUPt.js} +1 -1
  48. package/dist/assets/{provider-models-COzjYl29.js → provider-models-CWtoV3BJ.js} +1 -1
  49. package/dist/assets/{provider-scoped-model-input-Cvy74uj8.js → provider-scoped-model-input-DJzdGBE8.js} +1 -1
  50. package/dist/assets/{providers-config-page-7rCwVnhh.js → providers-config-page-gzLkTzMP.js} +1 -1
  51. package/dist/assets/{puzzle-C5Wfpjk_.js → puzzle-CXL_z0vz.js} +1 -1
  52. package/dist/assets/{pwa-CAg_9zFs.js → pwa-Blsqtn1m.js} +1 -1
  53. package/dist/assets/{refresh-cw-OhwaPDn1.js → refresh-cw-CqsHJPqR.js} +1 -1
  54. package/dist/assets/remote-DTe4pS7P.js +1 -0
  55. package/dist/assets/{rotate-cw-aBponvp7.js → rotate-cw-DS-Gca0a.js} +1 -1
  56. package/dist/assets/{runtime-config-page-BF1wxvzR.js → runtime-config-page-B5CCnrei.js} +1 -1
  57. package/dist/assets/{save-394QCMXn.js → save-CwxRo7hc.js} +1 -1
  58. package/dist/assets/{search-BG2qAlNZ.js → search-Drx-sMCE.js} +1 -1
  59. package/dist/assets/{search-config-page-D4LeiB9y.js → search-config-page-BjVONAIH.js} +1 -1
  60. package/dist/assets/{secrets-config-page-BzGcr5Vw.js → secrets-config-page-BB32noHT.js} +1 -1
  61. package/dist/assets/security-config--ilpaAEr.js +1 -0
  62. package/dist/assets/{select-xUXYV0Gr.js → select-DHYR109w.js} +1 -1
  63. package/dist/assets/{service-apps-panel-D3wwPRzV.js → service-apps-panel-DOKGtwsR.js} +1 -1
  64. package/dist/assets/{settings-2-CWOGRRaA.js → settings-2-DAPjKYtK.js} +1 -1
  65. package/dist/assets/{status-dot-CYifnSnt.js → status-dot-xxVxbdQr.js} +1 -1
  66. package/dist/assets/{tag-chip-CjM6lyeh.js → tag-chip-0lQj9HFa.js} +1 -1
  67. package/dist/assets/{theme-provider-BToFZGZG.js → theme-provider-DDJOlUxn.js} +1 -1
  68. package/dist/assets/{trash-2-DvJ6duOW.js → trash-2-B8mbrtCx.js} +1 -1
  69. package/dist/assets/{use-config-COusaY5p.js → use-config-BpKXDcM_.js} +1 -1
  70. package/dist/assets/{use-desktop-capabilities-B-u6ojjW.js → use-desktop-capabilities-C1bXk7fx.js} +1 -1
  71. package/dist/assets/{use-viewport-layout-IKKGpjzF.js → use-viewport-layout-D6seoW0Z.js} +1 -1
  72. package/dist/assets/{x-E9VB4HQx.js → x-DLvS4xvV.js} +1 -1
  73. package/dist/index.html +36 -36
  74. package/dist/panel-standalone.html +14 -14
  75. package/package.json +2 -2
  76. package/src/features/chat/features/conversation/components/__tests__/session-conversation-input-top-slot.test.tsx +71 -0
  77. package/src/features/chat/features/conversation/components/session-conversation-input-top-slot.tsx +6 -7
  78. package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-controller.test.tsx +41 -0
  79. package/src/features/chat/features/conversation/hooks/use-session-conversation-controller.ts +4 -1
  80. package/src/shared/lib/i18n/locales/en-US/chat.json +0 -1
  81. package/src/shared/lib/i18n/locales/zh-CN/chat.json +0 -1
  82. package/dist/assets/agents-E4nu-17c.js +0 -1
  83. package/dist/assets/apps-YFlJirpx.js +0 -1
  84. package/dist/assets/cron-CH5c55CR.js +0 -1
  85. package/dist/assets/doc-browser-ClDUWo9V.js +0 -1
  86. package/dist/assets/inbox-BjBZIbgx.js +0 -1
  87. package/dist/assets/login-page-BxSMwUsc.js +0 -1
  88. package/dist/assets/main-i18n-catalog.config-itg3Gvzp.js +0 -1
  89. package/dist/assets/marketplace-CnQ5USfr.js +0 -1
  90. package/dist/assets/mcp-marketplace-page-Dor6H9IC.js +0 -1
  91. package/dist/assets/panel-app-i18n-catalog.config-BfLHr1tc.js +0 -1
  92. package/dist/assets/panel-apps-C-izvtu9.js +0 -1
  93. package/dist/assets/plus-DUdl68Eo.js +0 -1
  94. package/dist/assets/remote-DvCdHjzA.js +0 -1
  95. package/dist/assets/security-config-vD_V0BQF.js +0 -1
@@ -143,6 +143,47 @@ function createControllerParams(params: {
143
143
  };
144
144
  }
145
145
 
146
+ describe('useSessionConversationController HTTP message identity', () => {
147
+ it.each(['send', 'sendSteering', 'sendPresetMessage'] as const)(
148
+ 'supports %s over HTTP without randomUUID and keeps submission identities distinct',
149
+ async (action) => {
150
+ const params = createControllerParams({ isRunning: false });
151
+ const { result } = renderHook(() => useSessionConversationController(params));
152
+ const getRandomValues = globalThis.crypto.getRandomValues.bind(globalThis.crypto);
153
+ const now = vi.spyOn(Date, 'now').mockReturnValue(1780000000000);
154
+ vi.stubGlobal('crypto', { getRandomValues });
155
+ try {
156
+ await act(async () => {
157
+ if (action === 'sendPresetMessage') {
158
+ await result.current.sendPresetMessage('Update this session title');
159
+ await result.current.sendPresetMessage('Update this session title again');
160
+ } else {
161
+ await result.current[action]();
162
+ await result.current[action]();
163
+ }
164
+ });
165
+ } finally {
166
+ now.mockRestore();
167
+ vi.unstubAllGlobals();
168
+ }
169
+
170
+ expect(params.agent.send).toHaveBeenCalledTimes(2);
171
+ const envelopes = params.agent.send.mock.calls.map(([envelope]) => envelope);
172
+ expect(envelopes[0].message.id).not.toBe(envelopes[1].message.id);
173
+ for (const envelope of envelopes) {
174
+ expect(envelope.message.id).toMatch(/^user-/);
175
+ expect(envelope.idempotencyKey).toBe(envelope.message.id);
176
+ expect(envelope.sessionId).toBe('session-1');
177
+ if (action !== 'sendPresetMessage') {
178
+ expect(params.beginSubmission).toHaveBeenCalledWith(envelope, expect.any(Object));
179
+ expect(params.acceptSubmission).toHaveBeenCalledWith(envelope.message.id);
180
+ }
181
+ }
182
+ if (action === 'sendPresetMessage') expect(params.beginSubmission).not.toHaveBeenCalled();
183
+ },
184
+ );
185
+ });
186
+
146
187
  describe('useSessionConversationController backend run queue', () => {
147
188
  it('preallocates one stable session identity for the first root message', async () => {
148
189
  const send = vi.fn<TestAgentSend>(async (envelope) => {
@@ -191,9 +191,12 @@ function buildSubmissionEnvelope(
191
191
  sessionKey: string | null,
192
192
  delivery: NcpAgentSendEnvelope['delivery'] = 'queue',
193
193
  ): NcpAgentSendEnvelope | null {
194
+ // getRandomValues is also available on HTTP origins, unlike randomUUID.
195
+ const messageIdBytes = crypto.getRandomValues(new Uint8Array(16));
196
+ const messageId = `user-${Array.from(messageIdBytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;
194
197
  const envelope = buildNcpRequestEnvelope({
195
198
  sessionId: sessionKey ?? undefined,
196
- messageId: `user-${crypto.randomUUID()}`,
199
+ messageId,
197
200
  text: draft.composerSnapshot.text.trim(),
198
201
  attachments: [...draft.composerSnapshot.attachments],
199
202
  parts: deriveNcpMessagePartsFromComposer(
@@ -558,7 +558,6 @@
558
558
  "chatSessionErrorTitle": "Something went wrong",
559
559
  "chatSessionActivityInterrupted": "The run was interrupted. Send the message again.",
560
560
  "chatSendFailed": "Failed to send message",
561
- "chatSubmissionSending": "Checking whether the message was received…",
562
561
  "chatSendResultUnknown": "The send result is unknown. Check the session, then retry the original request.",
563
562
  "chatSendResultUnknownChild": "The send result is unknown. Check child sessions first; a safe retry is unavailable here.",
564
563
  "chatSubmissionRejected": "The message was not accepted. You can restore it and retry.",
@@ -558,7 +558,6 @@
558
558
  "chatSessionErrorTitle": "出错了",
559
559
  "chatSessionActivityInterrupted": "运行意外中断,请重新发送消息。",
560
560
  "chatSendFailed": "发送消息失败",
561
- "chatSubmissionSending": "正在确认消息是否已接收…",
562
561
  "chatSendResultUnknown": "发送结果尚未确认。请先检查会话消息,再用原请求重试。",
563
562
  "chatSendResultUnknownChild": "发送结果尚未确认。请先检查子会话消息;当前无法安全重试。",
564
563
  "chatSubmissionRejected": "消息未被接收。可恢复原内容后重试。",
@@ -1 +0,0 @@
1
- import{t as e}from"./agents-CfpN8PQc.js";export{e as AgentsPage};
@@ -1 +0,0 @@
1
- import{st as e}from"./app-presenter-provider-2DwHRRle.js";export{e as AppsPanel};
@@ -1 +0,0 @@
1
- import{K as e}from"./app-presenter-provider-2DwHRRle.js";export{e as CronJobResource};
@@ -1 +0,0 @@
1
- import{Ct as e}from"./app-presenter-provider-2DwHRRle.js";export{e as DocBrowser};
@@ -1 +0,0 @@
1
- import{z as e}from"./app-presenter-provider-2DwHRRle.js";export{e as InboxPage};
@@ -1 +0,0 @@
1
- import{t as e}from"./login-page-DYaozpzz.js";export{e as LoginPage};