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.
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-DtoQc98o.js → AIOps--t6qElO3.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CGWpZPFu.js → ActionButton-vRiifAww.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CC7XzLk4.js → Analytics-BfSlGprA.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CGKmgdbs.js → AppLayout-B6L2I5ld.js} +4 -4
- package/src/assets/web-panel/assets/{Audit-oLflS_MU.js → Audit-Dwpk7vO2.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-T_wI6uZE.js → Backup-D7UuR3M8.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BPdSptnN.js → BaseInput-BzMDBTyZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BQJThjZV.js → Chat-BxYUynGU.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DIgOoly0.js → ChatBubbleRenderer-BYyCFqO0.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DINID8Xe.js → Checkbox-DgpLcrjA.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BFRqiKXM.js → Codegen-N5dSkUbq.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Cz1LHthL.js → Col-C1nf7jzT.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DM2JdVks.js → Community-BuX21CEd.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DDkmTD1-.js → Compact-M37IFQe_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DZ42Jq-9.js → Compliance-B_OBnXJx.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DLt4MK_F.js → Cowork-BcIn7Sb2.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CDDGkmF4.js → Cron-BtmA9AMI.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DtKTUDfw.js → Crosschain-DlAiW2Iy.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B9IBFVtN.js → DID-91Skenc5.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DZWx6KvZ.js → Dashboard-BTzcKrw1.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CxlclJ4x.js → Dropdown-VNCZqfkL.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CPQkv5Rq.js → EmailListRenderer-B_o62liK.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DYaSHW7O.js → FamilyGuardDashboard-BqceYpym.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DcANvE_W.js → Federation-BJFcp8S0.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CnzzQaBo.js → FormItemContext-DwsPen2h.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CgfKJg4t.js → GenericCardRenderer-BOU0nfJP.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Djh6eGK0.js → Git-C_92Ngor.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-B_qc24Q5.js → Governance-SIBJc353.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DWVRUSsO.js → Inference-DcEwRh8C.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-16EMZ1Gg.js → KnowledgeGraph-C4LQ8MJI.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-ymceok_p.js → Logs-BXz2tihi.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DXExrznt.js → Marketplace-DqXKQJ2n.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-B9Bnym3Q.js → McpTools-CXVGQSUd.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-V8Ck9ZnV.js → Memory-Bp8huWkt.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-B9AE87pq.js → MobileBridge-B3duw6FB.js} +3 -3
- package/src/assets/web-panel/assets/{MobileProjects-Dh7WHpD7.js → MobileProjects-Cn5YO60O.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B1EIx3cJ.js → Mtc-CE_M_-1m.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BVwqfXEq.js → MtcAudit-Dev-y1Ei.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-nymTttRr.js → Multisig-RILPE0-i.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BHYA-EKK.js → NLProgramming-DsBeFM0w.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-D75HMT2_.js → Notes-MONi8b1b.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BCkM1qCh.js → NotificationSettings-mXNink9t.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Bd2_WoCO.js → OrderTableRenderer-Bvtv8CHQ.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BHJXmWpQ.js → Organization-_7rEqDWP.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Ce6NuRg4.js → Overflow-CuqybwI0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-ZWkd8aDF.js → P2P-BvYN2SXJ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-m-R5EU0S.js → PdhVaultBrowser-BWGnb4i0.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-tiqBu416.js → Permissions-D2vyDMm6.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Cp6QTgYQ.js → PersonalDataHub-BWaT70CA.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-KkrWj7O7.js → Pipeline-T_Pztk-K.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Dxi4H49p.js → Privacy-BTChzeM8.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D687zx7-.js → ProjectInit-BQQBICYM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-rMyJinon.js → ProjectSettings-BOLO_fhW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DTnO0tyd.js → Projects-BfqkBhzi.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CA3qBOIm.js → Providers-DpWEAYh2.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-cPYwl4UE.js → QuickAsk-MX8kg-uO.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-AesrOSgW.js → Recommend-UOCp-h2X.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-nmrzajqY.js → Reputation-H_vE2kEf.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CSM-D2YK.js → Row-dupAolkD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Dg-6lotq.js → RssFeed-DVoerh51.js} +2 -2
- package/src/assets/web-panel/assets/{Search-_3uDkwSU.js → Search-5zxC_iWb.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DpqxaMpH.js → Security-vg3XxdEZ.js} +3 -3
- package/src/assets/web-panel/assets/{Services-ygE3fUQq.js → Services-CWjum0P4.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BJ8X1lgD.js → Skeleton-BkVnAX7_.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DL4ggdgL.js → Skills-2oMJr3sU.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-4QfKVw0v.js → Sla-Bv8uLcr_.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-k815pH2S.js → SpeechSettings-BfvawAGM.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-4gpgAxhL.js → SyncSettings-DzWmsU8K.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BiIwG2Ag.js → Tasks-cbtuyShK.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BqG2I16l.js → Templates-PP2omXNk.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant--a1-0GZY.js → Tenant-Cab9qgCx.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-9kFA0Vf8.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-BKAOZMPL.js → TimelineRenderer-Cx8kncEg.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C5pMEI9-.js → Tokens-D19NKMv_.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BJ5etoUd.js → Trigger-DbRaTJsm.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CAAdDctr.js → Trust-8EFY9ZrM.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BzKU8nII.js → UkeySign--wxy-nr4.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DmWnsgyf.js → VideoEditing-BlRqqo2c.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dg9UzBAC.js → Wallet-B2x_RfaK.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DaXZGzkp.js → WebAuthn-DISokPYb.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DmJCC6AW.js → WorkflowEditor-DkuLYA12.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CAjZEmlu.js → chat-MMwBSP3l.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DMWwvv7V.js → colors-CPP3K6Jb.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-ByqZtPIJ.js → compact-item-2ruYr7FB.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-jIGFVHeW.js → createContext-BPpiGxaR.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-D7iybGpP.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DsRtjfTk.js → hasIn-CtP3Uqy-.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-Qnul4F.js → index-2cESIQ4O.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnJVeoaZ.js → index-6Sly6NDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKKHpsMs.js → index-9SEWDDhb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLG_xLHk.js → index-BLAT0M1t.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBtZVmOQ.js → index-BM7y07U3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMXm2ylP.js → index-BM_RMGj5.js} +1 -1
- package/src/assets/web-panel/assets/{index-bqwPPH9S.js → index-Bf1tNEoB.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGq4pe0E.js → index-Bfr1HIma.js} +1 -1
- package/src/assets/web-panel/assets/{index-t1-_hEH4.js → index-Bjthf-eJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbGL4FLO.js → index-BkqTFggQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-9J6DqTyW.js → index-Bq8gB01i.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtDCwXJx.js → index-Byddazfj.js} +1 -1
- package/src/assets/web-panel/assets/index-BzJrOJ0f.js +1 -0
- package/src/assets/web-panel/assets/{index-BwGnc020.js → index-C2N_-y_W.js} +3 -3
- package/src/assets/web-panel/assets/{index-DaP_p8P6.js → index-C6qsWs-4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoJswPoV.js → index-COPqJgcW.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1270EwF.js → index-COSm6DcE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAKaeMfc.js → index-CUQp8MdV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCnzbOKO.js → index-CZrah8Gb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbV45YpH.js → index-CZyr02ib.js} +1 -1
- package/src/assets/web-panel/assets/{index-i2aDnOiW.js → index-Cru4qTvK.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyKWJT7j.js → index-D05imMj-.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_wj_sYT.js → index-D5g378QF.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6T-Xf0U.js → index-D7-Zo0uW.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8V34BaZ.js → index-DIQO-prS.js} +1 -1
- package/src/assets/web-panel/assets/{index-_orsz7Rw.js → index-DO_a65ut.js} +1 -1
- package/src/assets/web-panel/assets/{index-_AG9IXm-.js → index-DSNoOIwN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CScTtcVy.js → index-DS_ISOVj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdYKZY8M.js → index-DXGebJnR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DC3_IuqF.js → index-Dc1ysHqq.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_4cOrLy.js → index-DpBaxHIL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DPm-L_xW.js → index-Dy85x86R.js} +1 -1
- package/src/assets/web-panel/assets/{index-D84XwMd3.js → index-DyCZ3fz1.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs2OGp6G.js → index-DzFVlsbg.js} +1 -1
- package/src/assets/web-panel/assets/{index-i-EzGrX5.js → index-P_R2pJ9q.js} +1 -1
- package/src/assets/web-panel/assets/index-QN-iyhAl.js +1 -0
- package/src/assets/web-panel/assets/{index-YK9Xug8T.js → index-h-zAHKNr.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8BwUNiL.js → index-oD_rJWBp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMxij0bf.js → index-oaNSovPm.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DdyD9KAT.js → initDefaultProps-BrJf63uk.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DRrx4PK9.js → motion-BD8UoaTG.js} +1 -1
- package/src/assets/web-panel/assets/{move-CHINGURR.js → move-DbunBKV-.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DZflFtLX.js → omit-CkGNCa-h.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DPQ6eHEY.js → pickAttrs-DTvTrHC2.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BJYz53Bf.js → placementArrow-Cb7oz9vL.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DhzLakk2.js → responsiveObserve-O7lB6MAE.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DOvTqAuD.js → slide-C24m1SKv.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-B92BF_uu.js → statusUtils-D_-9GtZ3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-HRKjxQJT.js → styleChecker-CrAYF9jD.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-D8ZqGK2s.js → useFlexGapSupport-CmgeoVPN.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-ClAmmKr2.js → useFs-DzJSzGsy.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-4G0-eIH3.js → usePersonalDataHub-Bgqky5YK.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Bj-uyzeX.js → vnode-ErTJLgr4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DrMI4KzQ.js → zoom-wlf3cppM.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +18 -15
- package/src/lib/agent-core.js +2 -3
- package/src/runtime/agent-core.js +80 -28
- package/src/assets/web-panel/assets/Terminal-B4MCGz06.js +0 -3
- package/src/assets/web-panel/assets/devWarning-DdhKA672.js +0 -1
- package/src/assets/web-panel/assets/index-D9VvPg88.js +0 -1
- package/src/assets/web-panel/assets/index-NbQuQzJJ.js +0 -1
package/src/lib/agent-core.js
CHANGED
|
@@ -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
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
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
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
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
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
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};
|