chainlesschain 0.161.6 → 0.161.7

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 (132) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-DfP4dtQA.js → AIOps-C06IYJkC.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DZdIiY84.js → ActionButton-Cq4f1js5.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-COxsbvRb.js → Analytics-DyJsowHu.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-BKrsihC0.js → AppLayout-DSFSWtOZ.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CNlw6BT8.js → Audit-C7y4wGzh.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-DJax1BUm.js → Backup-BxkJJwr5.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CCc-oGsa.js → BaseInput-BraWNP3N.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-C5_iZkto.js → Chat-BhZPLetb.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-BqLBbvVu.js → Checkbox-DuDAToKQ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-C_ZHHyn4.js → Codegen-DWHT3ZCT.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-DY5o3xw5.js → Col-rZ1FbPeP.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-NWf71rLn.js → Community-BHefT_qI.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DFai5XtQ.js → Compact-D68vLPVh.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-FLeiFZLg.js → Compliance-cxmKFzWJ.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-C-rt92DS.js → Cowork-Dzt1uT50.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cron-DuSZVwX4.js → Cron-oWxj9K9p.js} +1 -1
  19. package/src/assets/web-panel/assets/{Crosschain-C2Sr6g2O.js → Crosschain-C9UdRkm2.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-C8hzIJVZ.js → DID-D5WEHKMO.js} +1 -1
  21. package/src/assets/web-panel/assets/{Dashboard-CnjEC6qh.js → Dashboard-dP1_OGh-.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-DGGWa03e.js → Dropdown-C55GjQPR.js} +1 -1
  23. package/src/assets/web-panel/assets/{Federation-C5pq65Oo.js → Federation-oJxrz7TD.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-D6POEbFi.js → FormItemContext-CeLP5Pvz.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-pDAuNI9b.js → Git-CWs6CrRt.js} +1 -1
  26. package/src/assets/web-panel/assets/{Governance-7oAOVDgM.js → Governance-wo9Gz6OK.js} +1 -1
  27. package/src/assets/web-panel/assets/{Inference-B2jgqVc_.js → Inference-75Ob1OAF.js} +1 -1
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-CsRfQMe3.js → KnowledgeGraph-DNw3Xz30.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-Btr-_qa2.js → Logs-Bo7_f07I.js} +1 -1
  30. package/src/assets/web-panel/assets/{Marketplace-DYyQwT8S.js → Marketplace-Dm0yQkoQ.js} +1 -1
  31. package/src/assets/web-panel/assets/{McpTools-DZ2Muqme.js → McpTools-oh6SZgBB.js} +1 -1
  32. package/src/assets/web-panel/assets/{Memory-VFISHv9O.js → Memory-DANDCrzX.js} +1 -1
  33. package/src/assets/web-panel/assets/{Mtc-BepQB95_.js → Mtc-4D52E6FP.js} +1 -1
  34. package/src/assets/web-panel/assets/{MtcAudit-P270xCa6.js → MtcAudit-BmlorrLr.js} +1 -1
  35. package/src/assets/web-panel/assets/{NLProgramming-ChY57Wov.js → NLProgramming-DolGSSOm.js} +1 -1
  36. package/src/assets/web-panel/assets/{Notes-DvYOc-LP.js → Notes-BTyTq1Qk.js} +1 -1
  37. package/src/assets/web-panel/assets/{NotificationSettings-DF1cYL7q.js → NotificationSettings-Db1AaWp_.js} +1 -1
  38. package/src/assets/web-panel/assets/{Organization-BdFBs5tB.js → Organization-DC4RfB2j.js} +1 -1
  39. package/src/assets/web-panel/assets/{Overflow-CWcf6XzX.js → Overflow-cYKtW74T.js} +1 -1
  40. package/src/assets/web-panel/assets/{P2P-Dlpijkuf.js → P2P-CY5dBoF-.js} +1 -1
  41. package/src/assets/web-panel/assets/{Permissions-DP9a2oRu.js → Permissions-B-U6t8Wf.js} +1 -1
  42. package/src/assets/web-panel/assets/{Pipeline-Dkhs1ieh.js → Pipeline-a2pkdq6t.js} +1 -1
  43. package/src/assets/web-panel/assets/{Privacy-DyY4Soyq.js → Privacy-ClgLdkPP.js} +1 -1
  44. package/src/assets/web-panel/assets/{ProjectSettings-s-BGMUqA.js → ProjectSettings-D4Fi9bEQ.js} +1 -1
  45. package/src/assets/web-panel/assets/{Projects-LBas316e.js → Projects-BiSWtWMm.js} +1 -1
  46. package/src/assets/web-panel/assets/{Providers-Bb57dGXh.js → Providers-ydpAao66.js} +1 -1
  47. package/src/assets/web-panel/assets/{QuickAsk-MOldl0LD.js → QuickAsk-Bg955QRg.js} +1 -1
  48. package/src/assets/web-panel/assets/{Recommend-_rz-WgUu.js → Recommend-BqynHnTn.js} +1 -1
  49. package/src/assets/web-panel/assets/{Reputation-BH2ufLqB.js → Reputation-B8xfdWQt.js} +1 -1
  50. package/src/assets/web-panel/assets/{Row-C-x3K6Kz.js → Row-D4zoYiqD.js} +1 -1
  51. package/src/assets/web-panel/assets/{RssFeed-BPVfstzo.js → RssFeed-BI0FPtP6.js} +1 -1
  52. package/src/assets/web-panel/assets/{Search-Dz1IUxuk.js → Search-BG975ISr.js} +1 -1
  53. package/src/assets/web-panel/assets/{Security-CjzlawSi.js → Security-BObRR-p6.js} +1 -1
  54. package/src/assets/web-panel/assets/{Services-B_at9R_D.js → Services-B2TScn1O.js} +1 -1
  55. package/src/assets/web-panel/assets/{Skeleton-DUmYTGQw.js → Skeleton-PYzlv5Fw.js} +1 -1
  56. package/src/assets/web-panel/assets/{Skills-tgkSIrrj.js → Skills-DbsTF84K.js} +1 -1
  57. package/src/assets/web-panel/assets/{Sla-Bb_VPx_C.js → Sla-D8q9j9bo.js} +1 -1
  58. package/src/assets/web-panel/assets/{SpeechSettings-BvEO_KFQ.js → SpeechSettings-CjjNbmVH.js} +1 -1
  59. package/src/assets/web-panel/assets/{SyncSettings-BYE2fOCe.js → SyncSettings-UEp5lB2T.js} +1 -1
  60. package/src/assets/web-panel/assets/{Tasks-BOvITbzT.js → Tasks-CoCW4gWI.js} +1 -1
  61. package/src/assets/web-panel/assets/{Templates-CPcOkdWV.js → Templates-hd7UB-8K.js} +1 -1
  62. package/src/assets/web-panel/assets/{Tenant-CXn2k3Bt.js → Tenant-CqebAGfR.js} +1 -1
  63. package/src/assets/web-panel/assets/{Tokens-ljGLGE7n.js → Tokens-9b0DDm86.js} +1 -1
  64. package/src/assets/web-panel/assets/{Trigger-DULI2abh.js → Trigger-CG_ZXii2.js} +1 -1
  65. package/src/assets/web-panel/assets/{Trust-D4Y1Uqbj.js → Trust-CoCtornh.js} +1 -1
  66. package/src/assets/web-panel/assets/{UkeySign-CNIMnMaX.js → UkeySign-mBEc6SBj.js} +1 -1
  67. package/src/assets/web-panel/assets/{VideoEditing-B0sKBx8K.js → VideoEditing-41j-ZZYu.js} +1 -1
  68. package/src/assets/web-panel/assets/{Wallet-ClcaEXP3.js → Wallet-DX4iBaEj.js} +1 -1
  69. package/src/assets/web-panel/assets/{WebAuthn-CJ-szm66.js → WebAuthn-9BlQYiNI.js} +1 -1
  70. package/src/assets/web-panel/assets/{WorkflowEditor-B0A6bzvw.js → WorkflowEditor-BVm3icIg.js} +1 -1
  71. package/src/assets/web-panel/assets/chat-D98zBL7S.js +1 -0
  72. package/src/assets/web-panel/assets/{colors-DIdEYifT.js → colors-ARL9W9UC.js} +1 -1
  73. package/src/assets/web-panel/assets/{compact-item-DgctsprC.js → compact-item-MYI7UP_X.js} +1 -1
  74. package/src/assets/web-panel/assets/{createContext-D68iSn12.js → createContext-BddTmM7g.js} +1 -1
  75. package/src/assets/web-panel/assets/{hasIn-BfVEkwDr.js → hasIn-2OsB0OBj.js} +1 -1
  76. package/src/assets/web-panel/assets/{index-Dnjhvibk.js → index-B5UMIkIp.js} +1 -1
  77. package/src/assets/web-panel/assets/{index-h3RwMnvW.js → index-B7XKJHg8.js} +1 -1
  78. package/src/assets/web-panel/assets/{index-BVuBArIr.js → index-BA8yc-bG.js} +1 -1
  79. package/src/assets/web-panel/assets/{index-DIri4kXm.js → index-BIpkHBFo.js} +1 -1
  80. package/src/assets/web-panel/assets/{index-CWc9qPWf.js → index-BKl1SKpb.js} +3 -3
  81. package/src/assets/web-panel/assets/{index-COfT8est.js → index-BNXp47dX.js} +1 -1
  82. package/src/assets/web-panel/assets/{index-L1rKfgbj.js → index-BNjLDXWZ.js} +1 -1
  83. package/src/assets/web-panel/assets/{index-BhSL3LyU.js → index-BO0TQWkU.js} +1 -1
  84. package/src/assets/web-panel/assets/{index-OEgd0e2J.js → index-BP5G8FRT.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-BL-ktXCL.js → index-BSKiudeY.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-B9q7lYch.js → index-BYKZplcs.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-B2a-87jy.js → index-BYbgYr7r.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-DnspH2S5.js → index-Bc-fiOB-.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CYwWREKu.js → index-BhgLJAQi.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-j3mQvPO6.js → index-C5qBLUjM.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-BZsWnNr5.js → index-CHfRLYw8.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-Cd9Uk85_.js → index-CISWdYQV.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BATrOSqQ.js → index-CXMgUcC_.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DpfbHg4B.js → index-CndUS0Yo.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CGV32m2d.js → index-CtCi5cvq.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CjxYnpFI.js → index-CuoiTv71.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BbXyrISU.js → index-D2lcW3-z.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-ByVIuAuT.js → index-DK71wnJK.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B86dckwF.js → index-DVB0ott1.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DlM0-wO_.js → index-DnL-YqLO.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-1eTDj8GN.js → index-DpAOSmby.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BWjGDulF.js → index-DqCyINtK.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DQopgmlq.js → index-Dz5ro_F6.js} +1 -1
  104. package/src/assets/web-panel/assets/index-G5xmB5Af.js +1 -0
  105. package/src/assets/web-panel/assets/{index-DDG4mKAW.js → index-GxbpL_A7.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BC_AMP2G.js → index-N8eKGGPN.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-ByPXCWc3.js → index-N9X-UOF0.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Do7M55ke.js → index-TepTGolv.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-bZQ4WUeB.js → index-awm9n2jp.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D9VsNXsF.js → index-hP2fDMJo.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-N7q4pvXQ.js → index-kNDK9K4y.js} +1 -1
  112. package/src/assets/web-panel/assets/index-qbPE-_18.js +1 -0
  113. package/src/assets/web-panel/assets/{index-B04XbTiI.js → index-tSE1B4ri.js} +1 -1
  114. package/src/assets/web-panel/assets/{initDefaultProps-D5bRziL5.js → initDefaultProps-CJbHV9hH.js} +1 -1
  115. package/src/assets/web-panel/assets/{motion-DEkPod7A.js → motion-BTVrWA7N.js} +1 -1
  116. package/src/assets/web-panel/assets/{move-CB_1Dwv-.js → move-CRIIhWv7.js} +1 -1
  117. package/src/assets/web-panel/assets/{omit-UkvsaZ7a.js → omit-CDcQHhGi.js} +1 -1
  118. package/src/assets/web-panel/assets/{pickAttrs-wcF9VtXD.js → pickAttrs-Dplb8z8U.js} +1 -1
  119. package/src/assets/web-panel/assets/{placementArrow-DyFS6p4H.js → placementArrow-CP1cLg6P.js} +1 -1
  120. package/src/assets/web-panel/assets/{responsiveObserve-aP8GIgAb.js → responsiveObserve-PFMAIMDu.js} +1 -1
  121. package/src/assets/web-panel/assets/{slide-HrH-9peG.js → slide-_CVxhTa3.js} +1 -1
  122. package/src/assets/web-panel/assets/{statusUtils-tnhAwJgv.js → statusUtils-6j8grlgm.js} +1 -1
  123. package/src/assets/web-panel/assets/{styleChecker-B8gy0RNi.js → styleChecker-BbC7i8Sl.js} +1 -1
  124. package/src/assets/web-panel/assets/{useFlexGapSupport-Do-bHuEg.js → useFlexGapSupport-Ctha7v2w.js} +1 -1
  125. package/src/assets/web-panel/assets/{useFs-DMBSmk-z.js → useFs-CeTUZIh2.js} +1 -1
  126. package/src/assets/web-panel/assets/{vnode-BI-CTVZ1.js → vnode-kefkre4N.js} +1 -1
  127. package/src/assets/web-panel/assets/{zoom-BrBIcdS0.js → zoom-CZjCXV_O.js} +1 -1
  128. package/src/assets/web-panel/index.html +1 -1
  129. package/src/lib/chat-core.js +60 -34
  130. package/src/assets/web-panel/assets/chat-CAmp7Hj4.js +0 -1
  131. package/src/assets/web-panel/assets/index-4FtfPG2_.js +0 -1
  132. package/src/assets/web-panel/assets/index-Ri5xYTdD.js +0 -1
@@ -242,26 +242,39 @@ export async function streamAnthropic(
242
242
  export async function* chatStream(messages, options) {
243
243
  const { provider, model, baseUrl, apiKey, sessionId } = options;
244
244
 
245
- const tokens = [];
245
+ // Token queue + waiter promise. onToken (called synchronously by each
246
+ // streamX impl per delta) pushes onto the queue and wakes the generator
247
+ // loop, which yields immediately. Pre-v5.0.3.46 this was a buffering
248
+ // tokens[] array drained only after `await streamX(...)` resolved — so
249
+ // the "stream" surfaced no progress until the LLM call finished, which
250
+ // showed up as the chat.intent placeholder card spinning at "意图: 未识别"
251
+ // for the full LLM duration.
252
+ const queue = [];
253
+ let waiter = null;
254
+ let done = false;
255
+ let capturedUsage = null;
256
+
257
+ const wake = () => {
258
+ if (!waiter) return;
259
+ const w = waiter;
260
+ waiter = null;
261
+ w();
262
+ };
246
263
  const onToken = (token) => {
247
- tokens.push(token);
264
+ queue.push(token);
265
+ wake();
248
266
  };
249
-
250
- let capturedUsage = null;
251
267
  const onUsage = (u) => {
252
268
  capturedUsage = u;
253
269
  };
254
270
 
255
- let fullResponse;
256
-
271
+ // Validate creds + assemble URL synchronously so missing-key errors
272
+ // surface immediately to the consumer instead of being deferred until
273
+ // the first queue drain tick.
274
+ let providerCall;
257
275
  if (provider === "ollama") {
258
- fullResponse = await streamOllama(
259
- messages,
260
- model,
261
- baseUrl,
262
- onToken,
263
- onUsage,
264
- );
276
+ providerCall = () =>
277
+ streamOllama(messages, model, baseUrl, onToken, onUsage);
265
278
  } else if (provider === "anthropic") {
266
279
  const providerDef = BUILT_IN_PROVIDERS.anthropic;
267
280
  const url =
@@ -276,14 +289,8 @@ export async function* chatStream(messages, options) {
276
289
  `API key required for anthropic (set ${providerDef?.apiKeyEnv || "ANTHROPIC_API_KEY"})`,
277
290
  );
278
291
  }
279
- fullResponse = await streamAnthropic(
280
- messages,
281
- model,
282
- url,
283
- key,
284
- onToken,
285
- onUsage,
286
- );
292
+ providerCall = () =>
293
+ streamAnthropic(messages, model, url, key, onToken, onUsage);
287
294
  } else {
288
295
  const providerDef = BUILT_IN_PROVIDERS[provider];
289
296
  const url =
@@ -298,16 +305,40 @@ export async function* chatStream(messages, options) {
298
305
  `API key required for ${provider} (set ${providerDef?.apiKeyEnv || "API key"})`,
299
306
  );
300
307
  }
301
- fullResponse = await streamOpenAI(
302
- messages,
303
- model,
304
- url,
305
- key,
306
- onToken,
307
- onUsage,
308
- );
308
+ providerCall = () =>
309
+ streamOpenAI(messages, model, url, key, onToken, onUsage);
309
310
  }
310
311
 
312
+ // Run the provider stream concurrently with the queue-drain loop. finally
313
+ // flips `done` and wakes the waiter so a stream that ends without emitting
314
+ // any token still terminates the generator cleanly.
315
+ const streamPromise = (async () => {
316
+ try {
317
+ return await providerCall();
318
+ } finally {
319
+ done = true;
320
+ wake();
321
+ }
322
+ })();
323
+ // Swallow-only handler so an early rejection isn't logged as unhandled
324
+ // before the consumer reaches `await streamPromise` below. The eventual
325
+ // await still rethrows.
326
+ streamPromise.catch(() => {});
327
+
328
+ while (true) {
329
+ if (queue.length > 0) {
330
+ yield { type: "response-token", token: queue.shift() };
331
+ continue;
332
+ }
333
+ if (done) break;
334
+ await new Promise((resolve) => {
335
+ waiter = resolve;
336
+ });
337
+ }
338
+
339
+ // Rethrows if providerCall rejected.
340
+ const fullResponse = await streamPromise;
341
+
311
342
  // Phase J — auto-record token usage to JSONL session store so
312
343
  // `cc session usage` and the `usage.*` WS routes see real data.
313
344
  if (sessionId && capturedUsage) {
@@ -325,11 +356,6 @@ export async function* chatStream(messages, options) {
325
356
  }
326
357
  }
327
358
 
328
- // Yield all collected tokens
329
- for (const token of tokens) {
330
- yield { type: "response-token", token };
331
- }
332
-
333
359
  yield { type: "response-complete", content: fullResponse };
334
360
  }
335
361
 
@@ -1 +0,0 @@
1
- import{E as gt,r as T,a as v,f as St}from"./vendor-Ci2pTZ_t.js";import{u as g}from"./index-CWc9qPWf.js";let Y=0;function Q(s){return Y+=1,`msg_${Date.now()}_${Y}_${s}`}const C=Object.freeze({USER:"user",ASSISTANT:"assistant",SYSTEM:"system",INTENT_RECOGNITION:"intent-recognition",INTENT_CONFIRMATION:"intent-confirmation",TASK_ANALYSIS:"task-analysis",INTERVIEW:"interview",TASK_PLAN:"task-plan",PROGRESS:"progress",ERROR:"error"}),K=Object.freeze({USER:"user",ASSISTANT:"assistant",SYSTEM:"system"});function yt(s,i){return{id:Q("intent_confirmation"),role:K.ASSISTANT,type:C.INTENT_CONFIRMATION,content:"我理解您的需求如下,请确认:",timestamp:Date.now(),metadata:{originalInput:s,understanding:i||{},status:"pending",correction:null}}}function Tt(s,i,u={}){const{reason:l,extractedInfo:p}=u,m={CONTINUE_EXECUTION:"✅ 收到,继续执行任务...",MODIFY_REQUIREMENT:`⚠️ 检测到需求变更:${p||i}`,CLARIFICATION:`📝 已记录补充信息:${p||i}`,CANCEL_TASK:"❌ 任务已取消"};return{id:Q("intent_system"),role:K.SYSTEM,type:C.SYSTEM,content:m[s]||"⚠️ 未识别意图",timestamp:Date.now(),metadata:{intent:s,reason:l,userInput:i,extractedInfo:p}}}const k="新对话",P="新 Agent",B="cc.web-panel.chat.contextMode",G=["project","file","global"],J="cc.web-panel.chat.intentDecisions",$=200,X="cc.web-panel.chat.intentEnabled";function ht(){try{const s=typeof localStorage<"u"?localStorage.getItem(B):null;return G.includes(s)?s:null}catch{return null}}function Et(){try{return typeof localStorage>"u"?!1:localStorage.getItem(X)==="true"}catch{return!1}}function z(){try{if(typeof localStorage>"u")return{};const s=localStorage.getItem(J);if(!s)return{};const i=JSON.parse(s);return i&&typeof i=="object"?i:{}}catch{return{}}}function wt(s){try{if(typeof localStorage>"u")return;const i=Object.entries(s);if(i.length>$){i.sort((l,p)=>(l[1]?.ts||0)-(p[1]?.ts||0));const u=i.slice(-$);s=Object.fromEntries(u)}localStorage.setItem(J,JSON.stringify(s))}catch{}}function F(s,i,u){if(!s||!i)return;const l=z();l[`${s}::${i}`]={...u,ts:Date.now()},wt(l)}function _t(s,i){return!s||!i?null:z()[`${s}::${i}`]||null}const Nt={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},It=gt("chat",()=>{const s=T([]),i=T(null),u=v({}),l=v({}),p=v({}),m=v({}),j=(typeof window<"u"&&window.__CC_CONFIG__||{}).mode==="project",V=j?"project":"global",O=ht(),M=T(O==="file"||O==="project"&&!j?"global":O||V);function W(t){if(G.includes(t)){M.value=t;try{typeof localStorage<"u"&&localStorage.setItem(B,t)}catch{}}}const E=T(Et());function H(t){E.value=!!t;try{typeof localStorage<"u"&&localStorage.setItem(X,E.value?"true":"false")}catch{}}const w="cc.web-panel.chat.customQuickPrompts";function Z(){try{if(typeof localStorage>"u")return null;const t=localStorage.getItem(w);if(!t)return null;const e=JSON.parse(t);if(!Array.isArray(e))return null;const n=e.map(o=>typeof o=="string"?o.trim():"").filter(o=>o.length>0&&o.length<=120).slice(0,12);return n.length>0?n:null}catch{return null}}const I=T(Z());function tt(t){if(t==null){I.value=null;try{typeof localStorage<"u"&&localStorage.removeItem(w)}catch{}return}if(!Array.isArray(t))return;const e=t.map(n=>typeof n=="string"?n.trim():"").filter(n=>n.length>0&&n.length<=120).slice(0,12);I.value=e.length>0?e:null;try{typeof localStorage<"u"&&(e.length>0?localStorage.setItem(w,JSON.stringify(e)):localStorage.removeItem(w))}catch{}}const D=T(null);let L=0;function et({prompt:t,autoSend:e=!0,session:n=null}={}){!t||!String(t).trim()||(L+=1,D.value={prompt:String(t),autoSend:e!==!1,session:n||null,token:`staged::${L}::${Date.now()}`})}function nt(){D.value=null}let U=null;const q=new Set;function S(t){return u[t]||(u[t]=[]),u[t]}function x(t){return!!(t&&m[t])}function y(t,e){t&&(m[t]=!!e)}function R(t){if(!t?.id)return;const e=s.value.find(n=>n.id===t.id);if(e){Object.assign(e,t);return}s.value.unshift(t)}function b(t,e=g()){u[t]||(u[t]=[]),l[t]||(l[t]={content:"",active:!1}),m[t]==null&&(m[t]=!1),!q.has(t)&&(q.add(t),e.onSession(t,n=>rt(t,n)))}function _(t=g()){U||(U=t.onRuntimeEvent(e=>{const n=e.payload||{},o=n.record||{};if(e.type==="session:start"){const a=n.sessionType||o.type||"chat";y(n.sessionId,!1),R({id:n.sessionId,type:a,provider:o.provider||null,model:o.model||null,projectRoot:o.projectRoot||null,status:o.status||"created",title:a==="chat"?k:P,createdAt:Date.now(),messageCount:o.messageCount??0})}else if(e.type==="session:resume"){const a=n.sessionId;if(!a)return;Array.isArray(n.history)&&(u[a]=n.history.map(r=>({role:r.role,content:r.content,timestamp:r.timestamp||Date.now()}))),l[a]||(l[a]={content:"",active:!1}),m[a]==null&&(m[a]=!1),R({id:a,type:o.type||null,provider:o.provider||null,model:o.model||null,projectRoot:o.projectRoot||null,status:o.status||"resumed",messageCount:o.messageCount??(Array.isArray(n.history)?n.history.length:0)})}else if(e.type==="session:end"){const a=n.sessionId;s.value=s.value.filter(r=>r.id!==a),delete m[a],i.value===a&&(i.value=s.value[0]?.id||null)}}))}async function ot(){const t=g();_(t),s.value=await t.listSessions(),s.value.forEach(e=>{b(e.id,t)})}async function at(t="chat",e={}){const n=g();_(n);const o=await n.createSession(t,null,e);return R({id:o,type:t,title:t==="chat"?k:P,createdAt:Date.now(),messageCount:0}),y(o,!1),b(o,n),i.value=o,o}function rt(t,e){const n=S(t),o=Nt[e.type]||e.type,a=e.payload||{};if(o==="response-token"){l[t]||(l[t]={content:"",active:!0});const r=e.token||a.token||a.delta||a.content||"";l[t].content+=r,l[t].active=!0,y(t,!0)}else if(o==="response-complete"){const r=e.content||a.content||l[t]?.content||"";n.push({role:"assistant",content:r,timestamp:Date.now()}),l[t]&&(l[t].content="",l[t].active=!1);const f=s.value.find(c=>c.id===t);if(f&&(f.title===k||f.title===P)){const c=n.find(N=>N.role==="user");c&&(f.title=c.content.slice(0,30))}f&&(f.messageCount=n.filter(c=>c.role!=="tool").length),y(t,!1)}else if(o==="tool-executing")n.push({role:"tool",tool:e.tool||a.tool||a.toolName||"unknown",input:e.input||a.input||a.args||null,status:"running",timestamp:Date.now()}),y(t,!0);else if(o==="tool-result"){const r=e.tool||a.tool||a.toolName||"unknown",f=[...n].reverse().find(c=>c.role==="tool"&&c.tool===r);f&&(f.result=e.result||a.result||a.output||null,f.status="done")}else if(o==="question")p[t]={requestId:e.requestId||a.requestId||e.id,question:e.question||a.question||a.message||"",choices:e.choices||a.choices||a.options||[]},y(t,!1);else if(o==="error"){const r=e.message||a.message||"Unknown error";n.push({role:"assistant",content:`Error: ${r}`,timestamp:Date.now()}),y(t,!1),l[t]&&(l[t].active=!1)}}async function h(t,e){const n=g();_(n),S(t).push({role:"user",content:e,timestamp:Date.now()}),l[t]||(l[t]={content:"",active:!1}),l[t].active=!0,y(t,!0),n.sendSessionMessage(t,e)}async function st(t,e){if(!t||!e?.trim())return;const n=M.value;if(n==="global"||!E.value){await h(t,e);return}const o=g(),a=S(t).filter(d=>d.role==="user"||d.role==="assistant").slice(-5).map(d=>({role:d.role,content:String(d.content||"").slice(0,500)})),r=yt(e,{});r.metadata&&(r.metadata.streaming=!0,r.metadata.streamingTokens=0),r.content="理解中…";const f=S(t);f.push(r);let c=null;const N=new AbortController,mt=setTimeout(()=>N.abort(new Error("Intent understand wall-clock timeout")),9e4);try{const d=await o.sendStream({type:"chat.intent.understand-stream",sessionId:t,userInput:e,contextMode:n,history:a},{onChunk:()=>{r.metadata&&(r.metadata.streamingTokens=(r.metadata.streamingTokens||0)+1)},idleMs:6e4,signal:N.signal});d?.success&&(c=d)}catch{}finally{clearTimeout(mt)}if(!(c&&(c.correctedInput&&c.correctedInput!==e||Array.isArray(c.keyPoints)&&c.keyPoints.length>0))){const d=f.indexOf(r);d>=0&&f.splice(d,1),await h(t,e);return}r.content="我理解您的需求如下,请确认:",r.metadata&&(r.metadata.streaming=!1,r.metadata.understanding={correctedInput:c.correctedInput,intent:c.intent,keyPoints:c.keyPoints});const A=_t(t,r.id);A?.status&&r.metadata&&(r.metadata.status=A.status,A.correction&&(r.metadata.correction=A.correction))}async function it(t,e){const o=S(t).find(r=>r.id===e);if(!o||o.type!==C.INTENT_CONFIRMATION)return;o.metadata&&(o.metadata.status="confirmed"),F(t,e,{status:"confirmed",correction:null});const a=o.metadata?.originalInput||"";a.trim()&&await h(t,a)}async function lt(t,e,n){const a=S(t).find(f=>f.id===e);if(!a||a.type!==C.INTENT_CONFIRMATION)return;a.metadata&&(a.metadata.status="corrected",a.metadata.correction=n),F(t,e,{status:"corrected",correction:n});const r=(n||"").trim();r&&await h(t,r)}async function ct(t,e,n={}){const o=g();try{return await o.sendRaw({type:"chat.intent.classify-followup",sessionId:t,input:e,context:n},2e4)}catch{return null}}function ut(t,e,n,o={}){S(t).push(Tt(e,n,o))}function ft(t,e){const n=g(),o=p[t];o&&(n.answerQuestion(t,o.requestId,e),delete p[t])}async function dt(t){const e=g();if(_(e),i.value=t,b(t,e),!u[t]||u[t].length===0)try{await e.resumeSession(t)}catch{}}const pt=St(()=>x(i.value));return{sessions:s,currentSessionId:i,messages:u,streaming:l,pendingQuestion:p,loadingBySession:m,isLoading:pt,contextMode:M,setContextMode:W,intentEnabled:E,setIntentEnabled:H,customQuickPrompts:I,setCustomQuickPrompts:tt,pendingAutoSend:D,scheduleAutoSend:et,clearAutoSend:nt,getIsLoading:x,loadSessions:ot,createSession:at,sendMessage:h,submitUserInput:st,confirmIntent:it,correctIntent:lt,classifyFollowupIntent:ct,pushFollowupIntentBanner:ut,answerQuestion:ft,switchSession:dt,getMessages:S}});export{C as M,It as u};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-DY5o3xw5.js";import{R as t}from"./index-CWc9qPWf.js";import"./index-BWjGDulF.js";import"./vendor-Ci2pTZ_t.js";import"./icons-B2G69bhT.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-C-x3K6Kz.js";import{R as t}from"./index-CWc9qPWf.js";import"./responsiveObserve-aP8GIgAb.js";import"./vendor-Ci2pTZ_t.js";import"./useFlexGapSupport-Do-bHuEg.js";import"./styleChecker-B8gy0RNi.js";import"./index-BWjGDulF.js";import"./icons-B2G69bhT.js";const l=t(o);export{l as default};