chainlesschain 0.162.76 → 0.162.77

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 (150) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-DtoQc98o.js → AIOps--t6qElO3.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-CGWpZPFu.js → ActionButton-vRiifAww.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-CC7XzLk4.js → Analytics-BfSlGprA.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CGKmgdbs.js → AppLayout-B6L2I5ld.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-oLflS_MU.js → Audit-Dwpk7vO2.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-T_wI6uZE.js → Backup-D7UuR3M8.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BPdSptnN.js → BaseInput-BzMDBTyZ.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-BQJThjZV.js → Chat-BxYUynGU.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DIgOoly0.js → ChatBubbleRenderer-BYyCFqO0.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-DINID8Xe.js → Checkbox-DgpLcrjA.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-BFRqiKXM.js → Codegen-N5dSkUbq.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-Cz1LHthL.js → Col-C1nf7jzT.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-DM2JdVks.js → Community-BuX21CEd.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DDkmTD1-.js → Compact-M37IFQe_.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-DZ42Jq-9.js → Compliance-B_OBnXJx.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-DLt4MK_F.js → Cowork-BcIn7Sb2.js} +3 -3
  18. package/src/assets/web-panel/assets/{Cron-CDDGkmF4.js → Cron-BtmA9AMI.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-DtKTUDfw.js → Crosschain-DlAiW2Iy.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-B9IBFVtN.js → DID-91Skenc5.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-DZWx6KvZ.js → Dashboard-BTzcKrw1.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-CxlclJ4x.js → Dropdown-VNCZqfkL.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-CPQkv5Rq.js → EmailListRenderer-B_o62liK.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DYaSHW7O.js → FamilyGuardDashboard-BqceYpym.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-DcANvE_W.js → Federation-BJFcp8S0.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CnzzQaBo.js → FormItemContext-DwsPen2h.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-CgfKJg4t.js → GenericCardRenderer-BOU0nfJP.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-Djh6eGK0.js → Git-C_92Ngor.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-B_qc24Q5.js → Governance-SIBJc353.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-DWVRUSsO.js → Inference-DcEwRh8C.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-16EMZ1Gg.js → KnowledgeGraph-C4LQ8MJI.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-ymceok_p.js → Logs-BXz2tihi.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-DXExrznt.js → Marketplace-DqXKQJ2n.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-B9Bnym3Q.js → McpTools-CXVGQSUd.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-V8Ck9ZnV.js → Memory-Bp8huWkt.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-B9AE87pq.js → MobileBridge-B3duw6FB.js} +3 -3
  37. package/src/assets/web-panel/assets/{MobileProjects-Dh7WHpD7.js → MobileProjects-Cn5YO60O.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-B1EIx3cJ.js → Mtc-CE_M_-1m.js} +5 -5
  39. package/src/assets/web-panel/assets/{MtcAudit-BVwqfXEq.js → MtcAudit-Dev-y1Ei.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-nymTttRr.js → Multisig-RILPE0-i.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-BHYA-EKK.js → NLProgramming-DsBeFM0w.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-D75HMT2_.js → Notes-MONi8b1b.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-BCkM1qCh.js → NotificationSettings-mXNink9t.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-Bd2_WoCO.js → OrderTableRenderer-Bvtv8CHQ.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-BHJXmWpQ.js → Organization-_7rEqDWP.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Ce6NuRg4.js → Overflow-CuqybwI0.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-ZWkd8aDF.js → P2P-BvYN2SXJ.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-m-R5EU0S.js → PdhVaultBrowser-BWGnb4i0.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-tiqBu416.js → Permissions-D2vyDMm6.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-Cp6QTgYQ.js → PersonalDataHub-BWaT70CA.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-KkrWj7O7.js → Pipeline-T_Pztk-K.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-Dxi4H49p.js → Privacy-BTChzeM8.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-D687zx7-.js → ProjectInit-BQQBICYM.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-rMyJinon.js → ProjectSettings-BOLO_fhW.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-DTnO0tyd.js → Projects-BfqkBhzi.js} +1 -1
  56. package/src/assets/web-panel/assets/{Providers-CA3qBOIm.js → Providers-DpWEAYh2.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-cPYwl4UE.js → QuickAsk-MX8kg-uO.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-AesrOSgW.js → Recommend-UOCp-h2X.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-nmrzajqY.js → Reputation-H_vE2kEf.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-CSM-D2YK.js → Row-dupAolkD.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-Dg-6lotq.js → RssFeed-DVoerh51.js} +2 -2
  62. package/src/assets/web-panel/assets/{Search-_3uDkwSU.js → Search-5zxC_iWb.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-DpqxaMpH.js → Security-vg3XxdEZ.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-ygE3fUQq.js → Services-CWjum0P4.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-BJ8X1lgD.js → Skeleton-BkVnAX7_.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-DL4ggdgL.js → Skills-2oMJr3sU.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-4QfKVw0v.js → Sla-Bv8uLcr_.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-k815pH2S.js → SpeechSettings-BfvawAGM.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-4gpgAxhL.js → SyncSettings-DzWmsU8K.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-BiIwG2Ag.js → Tasks-cbtuyShK.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-BqG2I16l.js → Templates-PP2omXNk.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant--a1-0GZY.js → Tenant-Cab9qgCx.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-9kFA0Vf8.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-BKAOZMPL.js → TimelineRenderer-Cx8kncEg.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-C5pMEI9-.js → Tokens-D19NKMv_.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-BJ5etoUd.js → Trigger-DbRaTJsm.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-CAAdDctr.js → Trust-8EFY9ZrM.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-BzKU8nII.js → UkeySign--wxy-nr4.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-DmWnsgyf.js → VideoEditing-BlRqqo2c.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-Dg9UzBAC.js → Wallet-B2x_RfaK.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-DaXZGzkp.js → WebAuthn-DISokPYb.js} +5 -5
  82. package/src/assets/web-panel/assets/{WorkflowEditor-DmJCC6AW.js → WorkflowEditor-DkuLYA12.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-CAjZEmlu.js → chat-MMwBSP3l.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DMWwvv7V.js → colors-CPP3K6Jb.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-ByqZtPIJ.js → compact-item-2ruYr7FB.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-jIGFVHeW.js → createContext-BPpiGxaR.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-D7iybGpP.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-DsRtjfTk.js → hasIn-CtP3Uqy-.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-B-Qnul4F.js → index-2cESIQ4O.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BnJVeoaZ.js → index-6Sly6NDj.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-CKKHpsMs.js → index-9SEWDDhb.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DLG_xLHk.js → index-BLAT0M1t.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BBtZVmOQ.js → index-BM7y07U3.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DMXm2ylP.js → index-BM_RMGj5.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-bqwPPH9S.js → index-Bf1tNEoB.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CGq4pe0E.js → index-Bfr1HIma.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-t1-_hEH4.js → index-Bjthf-eJ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BbGL4FLO.js → index-BkqTFggQ.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-9J6DqTyW.js → index-Bq8gB01i.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DtDCwXJx.js → index-Byddazfj.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BzJrOJ0f.js +1 -0
  102. package/src/assets/web-panel/assets/{index-BwGnc020.js → index-C2N_-y_W.js} +3 -3
  103. package/src/assets/web-panel/assets/{index-DaP_p8P6.js → index-C6qsWs-4.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CoJswPoV.js → index-COPqJgcW.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B1270EwF.js → index-COSm6DcE.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CAKaeMfc.js → index-CUQp8MdV.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CCnzbOKO.js → index-CZrah8Gb.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DbV45YpH.js → index-CZyr02ib.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-i2aDnOiW.js → index-Cru4qTvK.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CyKWJT7j.js → index-D05imMj-.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-B_wj_sYT.js → index-D5g378QF.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C6T-Xf0U.js → index-D7-Zo0uW.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B8V34BaZ.js → index-DIQO-prS.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-_orsz7Rw.js → index-DO_a65ut.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-_AG9IXm-.js → index-DSNoOIwN.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CScTtcVy.js → index-DS_ISOVj.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DdYKZY8M.js → index-DXGebJnR.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DC3_IuqF.js → index-Dc1ysHqq.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-D_4cOrLy.js → index-DpBaxHIL.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DPm-L_xW.js → index-Dy85x86R.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-D84XwMd3.js → index-DyCZ3fz1.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Cs2OGp6G.js → index-DzFVlsbg.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-i-EzGrX5.js → index-P_R2pJ9q.js} +1 -1
  124. package/src/assets/web-panel/assets/index-QN-iyhAl.js +1 -0
  125. package/src/assets/web-panel/assets/{index-YK9Xug8T.js → index-h-zAHKNr.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-C8BwUNiL.js → index-oD_rJWBp.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BMxij0bf.js → index-oaNSovPm.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-DdyD9KAT.js → initDefaultProps-BrJf63uk.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-DRrx4PK9.js → motion-BD8UoaTG.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-CHINGURR.js → move-DbunBKV-.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-DZflFtLX.js → omit-CkGNCa-h.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-DPQ6eHEY.js → pickAttrs-DTvTrHC2.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-BJYz53Bf.js → placementArrow-Cb7oz9vL.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-DhzLakk2.js → responsiveObserve-O7lB6MAE.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-DOvTqAuD.js → slide-C24m1SKv.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-B92BF_uu.js → statusUtils-D_-9GtZ3.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-HRKjxQJT.js → styleChecker-CrAYF9jD.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-D8ZqGK2s.js → useFlexGapSupport-CmgeoVPN.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-ClAmmKr2.js → useFs-DzJSzGsy.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-4G0-eIH3.js → usePersonalDataHub-Bgqky5YK.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-Bj-uyzeX.js → vnode-ErTJLgr4.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-DrMI4KzQ.js → zoom-wlf3cppM.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/hub.js +18 -15
  145. package/src/lib/agent-core.js +2 -3
  146. package/src/runtime/agent-core.js +80 -28
  147. package/src/assets/web-panel/assets/Terminal-B4MCGz06.js +0 -3
  148. package/src/assets/web-panel/assets/devWarning-DdhKA672.js +0 -1
  149. package/src/assets/web-panel/assets/index-D9VvPg88.js +0 -1
  150. package/src/assets/web-panel/assets/index-NbQuQzJJ.js +0 -1
@@ -3,9 +3,7 @@
3
3
  * `../runtime/agent-core.js` as of the CLI Runtime Convergence roadmap
4
4
  * (Phase 6b, 2026-04-09). This file is retained as a re-export shim for
5
5
  * backwards compatibility and will be removed once all external consumers
6
- * have migrated.
7
- *
8
- * Please import from `packages/cli/src/runtime/agent-core.js` in new code.
6
+ * have migrated. Please import from the runtime path in new code.
9
7
  */
10
8
 
11
9
  export {
@@ -33,6 +31,7 @@ export {
33
31
  _accumulateOllamaStream,
34
32
  _accumulateOpenAIStream,
35
33
  _accumulateAnthropicStream,
34
+ _streamErrorDisposition,
36
35
  _toAnthropicMessages,
37
36
  _anthropicThinkingParams,
38
37
  _normalizeAnthropicResponse,
@@ -2860,6 +2860,40 @@ export function _accumulateOllamaStream(lines, onToken) {
2860
2860
  return _ollamaFinalize(state);
2861
2861
  }
2862
2862
 
2863
+ /**
2864
+ * Decide how to handle an error thrown mid-stream while reading an SSE / NDJSON
2865
+ * response body. Returns:
2866
+ * - "rethrow" — the error is a user abort (Esc / AbortController) or no
2867
+ * partial text was accumulated, so surface it to the caller.
2868
+ * - "preserve" — a genuine connection drop (ECONNRESET / "terminated" /
2869
+ * server hangup) after some text already streamed to the user;
2870
+ * finalize and return what we have instead of replacing the
2871
+ * visible partial answer with a raw network error.
2872
+ *
2873
+ * Parity with Claude-Code 2.1.179 ("preserving partial responses instead of
2874
+ * showing raw errors"). Pure + exported for unit tests.
2875
+ */
2876
+ export function _streamErrorDisposition(err, signal, partialText) {
2877
+ if (isAbortError(err)) return "rethrow";
2878
+ if (signal && signal.aborted) return "rethrow";
2879
+ if (typeof partialText === "string" && partialText.trim()) return "preserve";
2880
+ return "rethrow";
2881
+ }
2882
+
2883
+ /**
2884
+ * Finalize a partial stream into the standard {message, usage} shape after a
2885
+ * mid-stream connection drop: marks the message truncated and drops any
2886
+ * half-streamed tool_call (its JSON args are incomplete and not safely
2887
+ * executable), so the agent loop treats it as a partial text answer and ends
2888
+ * the turn showing what the user already saw.
2889
+ */
2890
+ function _finalizeTruncatedStream(finalize, state) {
2891
+ const out = finalize(state);
2892
+ if (out.message && out.message.tool_calls) delete out.message.tool_calls;
2893
+ if (out.message) out.message._truncated = true;
2894
+ return out;
2895
+ }
2896
+
2863
2897
  async function _chatOllamaStreaming(apiUrl, body, onToken, signal) {
2864
2898
  const response = await fetch(apiUrl, {
2865
2899
  method: "POST",
@@ -2874,17 +2908,23 @@ async function _chatOllamaStreaming(apiUrl, body, onToken, signal) {
2874
2908
  const reader = response.body.getReader();
2875
2909
  const decoder = new TextDecoder();
2876
2910
  let buf = "";
2877
- for (;;) {
2878
- const { done, value } = await reader.read();
2879
- if (done) break;
2880
- buf += decoder.decode(value, { stream: true });
2881
- let idx;
2882
- while ((idx = buf.indexOf("\n")) >= 0) {
2883
- _ollamaReduceLine(state, buf.slice(0, idx), onToken);
2884
- buf = buf.slice(idx + 1);
2911
+ try {
2912
+ for (;;) {
2913
+ const { done, value } = await reader.read();
2914
+ if (done) break;
2915
+ buf += decoder.decode(value, { stream: true });
2916
+ let idx;
2917
+ while ((idx = buf.indexOf("\n")) >= 0) {
2918
+ _ollamaReduceLine(state, buf.slice(0, idx), onToken);
2919
+ buf = buf.slice(idx + 1);
2920
+ }
2885
2921
  }
2922
+ if (buf.trim()) _ollamaReduceLine(state, buf, onToken);
2923
+ } catch (err) {
2924
+ if (_streamErrorDisposition(err, signal, state.content) === "rethrow")
2925
+ throw err;
2926
+ return _finalizeTruncatedStream(_ollamaFinalize, state);
2886
2927
  }
2887
- if (buf.trim()) _ollamaReduceLine(state, buf, onToken);
2888
2928
  return _ollamaFinalize(state);
2889
2929
  }
2890
2930
 
@@ -3030,16 +3070,22 @@ async function _chatAnthropicStreaming(
3030
3070
  const reader = response.body.getReader();
3031
3071
  const decoder = new TextDecoder();
3032
3072
  let buf = "";
3033
- for (;;) {
3034
- const { done, value } = await reader.read();
3035
- if (done) break;
3036
- buf += decoder.decode(value, { stream: true });
3037
- const lines = buf.split("\n");
3038
- buf = lines.pop() || "";
3039
- for (const line of lines)
3040
- _anthropicReduceLine(state, line, onToken, onThinking);
3041
- }
3042
- if (buf.trim()) _anthropicReduceLine(state, buf, onToken, onThinking);
3073
+ try {
3074
+ for (;;) {
3075
+ const { done, value } = await reader.read();
3076
+ if (done) break;
3077
+ buf += decoder.decode(value, { stream: true });
3078
+ const lines = buf.split("\n");
3079
+ buf = lines.pop() || "";
3080
+ for (const line of lines)
3081
+ _anthropicReduceLine(state, line, onToken, onThinking);
3082
+ }
3083
+ if (buf.trim()) _anthropicReduceLine(state, buf, onToken, onThinking);
3084
+ } catch (err) {
3085
+ if (_streamErrorDisposition(err, signal, state.text) === "rethrow")
3086
+ throw err;
3087
+ return _finalizeTruncatedStream(_anthropicFinalize, state);
3088
+ }
3043
3089
  return _anthropicFinalize(state);
3044
3090
  }
3045
3091
 
@@ -3144,15 +3190,21 @@ async function _chatOpenAIStreaming(
3144
3190
  const reader = response.body.getReader();
3145
3191
  const decoder = new TextDecoder();
3146
3192
  let buf = "";
3147
- for (;;) {
3148
- const { done, value } = await reader.read();
3149
- if (done) break;
3150
- buf += decoder.decode(value, { stream: true });
3151
- const lines = buf.split("\n");
3152
- buf = lines.pop() || "";
3153
- for (const line of lines) _openaiReduceLine(state, line, onToken);
3154
- }
3155
- if (buf.trim()) _openaiReduceLine(state, buf, onToken);
3193
+ try {
3194
+ for (;;) {
3195
+ const { done, value } = await reader.read();
3196
+ if (done) break;
3197
+ buf += decoder.decode(value, { stream: true });
3198
+ const lines = buf.split("\n");
3199
+ buf = lines.pop() || "";
3200
+ for (const line of lines) _openaiReduceLine(state, line, onToken);
3201
+ }
3202
+ if (buf.trim()) _openaiReduceLine(state, buf, onToken);
3203
+ } catch (err) {
3204
+ if (_streamErrorDisposition(err, signal, state.text) === "rethrow")
3205
+ throw err;
3206
+ return _finalizeTruncatedStream(_openaiFinalize, state);
3207
+ }
3156
3208
  return _openaiFinalize(state);
3157
3209
  }
3158
3210
 
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
2
- import{u as fe,_ as me,d as V,e as U}from"./index-BwGnc020.js";import{I as z,J as x,U as _,Q as D,S as K,K as T,V as R,c as A,F as Q,Z as Y,R as E,o as Z,f as H,w as $,n as q,b as ee,r as S,P as y,_ as ve,a2 as we,a3 as he,a4 as _e}from"./vendor-BvqAck49.js";import{R as ye,b as pe,as as ge}from"./icons-DP3uiYxy.js";const k=new Map,C=new Map,N=new Set,F=new Set;let te=!1;function xe(c){te||(te=!0,c.onMessage(o=>{if(!(!o||typeof o.type!="string")){if(o.type==="terminal.stdout"){const{sessionId:s,data:e,seq:i}=o.payload||{};if(!s)return;let w;try{const d=atob(e||""),f=new Uint8Array(d.length);for(let n=0;n<d.length;n++)f[n]=d.charCodeAt(n);w=new TextDecoder("utf-8").decode(f)}catch{w=""}const u={sessionId:s,data:w,seq:i};k.get(s)?.forEach(d=>d(u)),N.forEach(d=>d(u))}else if(o.type==="terminal.exit"){const{sessionId:s,exitCode:e,signal:i}=o.payload||{};if(!s)return;const w={sessionId:s,exitCode:e,signal:i};C.get(s)?.forEach(u=>u(w)),F.forEach(u=>u(w))}}}))}function ne(c){const o=new TextEncoder().encode(c);let s="";for(let e=0;e<o.length;e++)s+=String.fromCharCode(o[e]);return btoa(s)}function ae(c){const o=atob(c||""),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return new TextDecoder("utf-8").decode(s)}function oe(){const c=fe();xe(c);async function o(n={}){const a=await c.sendRaw({type:"terminal.create",payload:{shell:n.shell,cwd:n.cwd,env:n.env,cols:n.cols,rows:n.rows}});if(a.ok===!1)throw new Error(a.error||"terminal_create_failed");return a.result??a}async function s(){const n=await c.sendRaw({type:"terminal.list",payload:{}});if(n.ok===!1)throw new Error(n.error||"terminal_list_failed");const a=n.result??n;return Array.isArray(a.sessions)?a.sessions:[]}async function e(n,a){const r=await c.sendRaw({type:"terminal.stdin",payload:{sessionId:n,data:ne(String(a))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function i(n,a,r){const h=await c.sendRaw({type:"terminal.resize",payload:{sessionId:n,cols:a,rows:r}});if(h.ok===!1)throw new Error(h.error||"terminal_resize_failed");return h.result??h}async function w(n){const a=await c.sendRaw({type:"terminal.close",payload:{sessionId:n}});if(a.ok===!1)throw new Error(a.error||"terminal_close_failed");return a.result??a}async function u(n,a=0){const r=await c.sendRaw({type:"terminal.history",payload:{sessionId:n,fromSeq:a}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const h=r.result??r;return{truncated:!!h.truncated,chunks:(h.chunks||[]).map(L=>({seq:L.seq,data:ae(L.data)}))}}function d(n,a){return n?(k.has(n)||k.set(n,new Set),k.get(n).add(a),()=>{k.get(n)?.delete(a),k.get(n)?.size===0&&k.delete(n)}):(N.add(a),()=>N.delete(a))}function f(n,a){return n?(C.has(n)||C.set(n,new Set),C.get(n).add(a),()=>{C.get(n)?.delete(a),C.get(n)?.size===0&&C.delete(n)}):(F.add(a),()=>F.delete(a))}return{create:o,list:s,stdin:e,resize:i,close:w,history:u,onStdout:d,onExit:f,_internal:{stdoutSubs:k,exitSubs:C,toBase64Utf8:ne,fromBase64Utf8:ae}}}const Se={__name:"Terminal",setup(c,{expose:o}){o();const s=oe(),e=S([]),i=S(null),w=S("pwsh"),u=S(!1),d=S(!1),f=S(""),n=S(""),a=S([]),r=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],h=ee(()=>e.value.find(t=>t.id===i.value));function L(t){return t?t.slice(0,8):""}let O=null,M=null;async function I(){if(O)return{xtermMod:O,fitAddonMod:M};try{O=await U(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await U(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await U(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(t){throw n.value="xterm 资源加载失败:"+(t?.message||"未知错误"),t}return{xtermMod:O,fitAddonMod:M}}async function B(t){await q();const{xtermMod:l,fitAddonMod:p}=await I(),b=a.value.find(v=>v?.dataset?.sessionId===t.id);if(!b)return;const m=new l.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),P=new p.FitAddon;m.loadAddon(P),m.open(b);try{P.fit()}catch{}t.xterm=m,t.fitAddon=P;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?V.warning("该命令被桌面端拦截(高危关键字)"):V.error("stdin 失败: "+(g?.message||g))})}),ce=s.onStdout(t.id,({data:v,seq:g})=>{t.lastSeq=g,m.write(v)}),de=s.onExit(t.id,({exitCode:v,signal:g})=>{t.alive=!1,t.exitCode=v,t.signal=g,m.writeln(`\r
3
- \x1B[33m[session exited, code=${v}, signal=${g??"-"}]\x1B[0m`)});t.offs=()=>{try{ie.dispose?.()}catch{}ce(),de()};try{const{chunks:v,truncated:g}=await s.history(t.id,0);g&&m.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const J of v)m.write(J.data),t.lastSeq=J.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const G=new ResizeObserver(()=>{try{P.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});G.observe(b);const ue=t.offs;t.offs=()=>{try{G.disconnect()}catch{}ue()}}async function re(){u.value=!0,f.value="";try{const t=await s.create({shell:w.value,cols:80,rows:24}),l={id:t.sessionId,shell:t.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(l),i.value=l.id,await B(l)}catch(t){f.value=t?.message||String(t)}finally{u.value=!1}}async function se(t){try{await s.close(t)}catch(l){f.value=l?.message||String(l)}setTimeout(()=>X(t),500)}function X(t){const l=e.value.findIndex(b=>b.id===t);if(l===-1)return;const p=e.value[l];try{p.offs?.()}catch{}try{p.xterm?.dispose?.()}catch{}e.value.splice(l,1),i.value===t&&(i.value=e.value[0]?.id||null)}function le(t){i.value=t,q(()=>{const l=e.value.find(p=>p.id===t);try{l?.fitAddon?.fit()}catch{}})}async function W(){d.value=!0,f.value="";try{const t=await s.list();for(const l of t){const p=e.value.find(m=>m.id===l.id);if(p){p.alive=l.alive,p.lastSeq=l.lastSeq;continue}const b={id:l.id,shell:l.shell,cwd:l.cwd,alive:l.alive,lastSeq:l.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(b),await B(b)}!i.value&&e.value.length>0&&(i.value=e.value[0].id)}catch(t){f.value=t?.message||String(t)}finally{d.value=!1}}Z(async()=>{await W()}),H(()=>{for(const t of e.value){try{t.offs?.()}catch{}try{t.xterm?.dispose?.()}catch{}}}),$(i,()=>{q(()=>{const t=h.value;try{t?.fitAddon?.fit()}catch{}})});const j={term:s,sessions:e,activeId:i,newShell:w,creating:u,loadingList:d,error:f,warning:n,xtermContainers:a,shellOptions:r,active:h,shortId:L,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:I,mountXterm:B,onCreate:re,onClose:se,removeSession:X,activate:le,refreshList:W,ref:S,computed:ee,onMounted:Z,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return V},get PlusOutlined(){return ge},get CloseOutlined(){return pe},get ReloadOutlined(){return ye},get useTerminal(){return oe}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},be={class:"terminal-page"},ke={class:"terminal-header"},Ce={class:"page-sub"},Ae={class:"terminal-body"},Ee={class:"session-tabs"},Oe=["onClick"],Te={class:"session-shell"},Re={class:"session-id"},Me={key:0,class:"session-empty"},ze={class:"xterm-host"},Le=["data-session-id"],Pe={key:0,class:"xterm-placeholder"},De={key:1,class:"terminal-footer"},qe={key:0,class:"footer-exit"};function Be(c,o,s,e,i,w){const u=z("a-tag"),d=z("a-select"),f=z("a-button"),n=z("a-space"),a=z("a-alert");return y(),x("div",be,[_("div",ke,[_("div",null,[o[3]||(o[3]=_("h2",{class:"page-title"},"远程终端",-1)),_("p",Ce,[o[2]||(o[2]=D(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),K(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[D(E(e.warning),1)]),_:1})):R("v-if",!0)])]),A(n,null,{default:T(()=>[A(d,{value:e.newShell,"onUpdate:value":o[0]||(o[0]=r=>e.newShell=r),style:{width:"130px"},size:"small",options:e.shellOptions},null,8,["value"]),A(f,{type:"primary",size:"small",loading:e.creating,onClick:e.onCreate},{icon:T(()=>[A(e.PlusOutlined)]),default:T(()=>[o[4]||(o[4]=D(" 新会话 ",-1))]),_:1},8,["loading"]),A(f,{size:"small",loading:e.loadingList,onClick:e.refreshList},{icon:T(()=>[A(e.ReloadOutlined)]),default:T(()=>[o[5]||(o[5]=D(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),e.error?(y(),K(a,{key:0,message:e.error,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:o[1]||(o[1]=r=>e.error="")},null,8,["message"])):R("v-if",!0),_("div",Ae,[_("div",Ee,[(y(!0),x(Q,null,Y(e.sessions,r=>(y(),x("div",{key:r.id,class:ve(["session-tab",{active:r.id===e.activeId,dead:!r.alive}]),onClick:h=>e.activate(r.id)},[_("span",Te,E(r.shell),1),_("span",Re,E(e.shortId(r.id)),1),A(e.CloseOutlined,{class:"session-close",onClick:we(h=>e.onClose(r.id),["stop"])},null,8,["onClick"])],10,Oe))),128)),e.sessions.length===0?(y(),x("div",Me,' 点击 "新会话" 创建第一个终端 ')):R("v-if",!0)]),_("div",ze,[(y(!0),x(Q,null,Y(e.sessions,r=>he((y(),x("div",{key:r.id,ref_for:!0,ref:"xtermContainers","data-session-id":r.id,class:"xterm-container"},null,8,Le)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Pe,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",De,[_("span",null,E(e.active.shell)+" · "+E(e.active.cwd||"(默认 cwd)")+" · seq "+E(e.active.lastSeq),1),e.active.alive?R("v-if",!0):(y(),x("span",qe,"已退出 (code="+E(e.active.exitCode??"-")+")",1))])):R("v-if",!0)])}const Fe=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
@@ -1 +0,0 @@
1
- import{O as r}from"./index-BwGnc020.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-Cz1LHthL.js";import{U as t}from"./index-BwGnc020.js";import"./vendor-BvqAck49.js";import"./index-D_4cOrLy.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-CSM-D2YK.js";import{U as t}from"./index-BwGnc020.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-DhzLakk2.js";import"./useFlexGapSupport-D8ZqGK2s.js";import"./styleChecker-HRKjxQJT.js";import"./index-D_4cOrLy.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};