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.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-DfP4dtQA.js → AIOps-C06IYJkC.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DZdIiY84.js → ActionButton-Cq4f1js5.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-COxsbvRb.js → Analytics-DyJsowHu.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-BKrsihC0.js → AppLayout-DSFSWtOZ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CNlw6BT8.js → Audit-C7y4wGzh.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DJax1BUm.js → Backup-BxkJJwr5.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CCc-oGsa.js → BaseInput-BraWNP3N.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-C5_iZkto.js → Chat-BhZPLetb.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BqLBbvVu.js → Checkbox-DuDAToKQ.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-C_ZHHyn4.js → Codegen-DWHT3ZCT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DY5o3xw5.js → Col-rZ1FbPeP.js} +1 -1
- package/src/assets/web-panel/assets/{Community-NWf71rLn.js → Community-BHefT_qI.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DFai5XtQ.js → Compact-D68vLPVh.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-FLeiFZLg.js → Compliance-cxmKFzWJ.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C-rt92DS.js → Cowork-Dzt1uT50.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-DuSZVwX4.js → Cron-oWxj9K9p.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-C2Sr6g2O.js → Crosschain-C9UdRkm2.js} +1 -1
- package/src/assets/web-panel/assets/{DID-C8hzIJVZ.js → DID-D5WEHKMO.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-CnjEC6qh.js → Dashboard-dP1_OGh-.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DGGWa03e.js → Dropdown-C55GjQPR.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C5pq65Oo.js → Federation-oJxrz7TD.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D6POEbFi.js → FormItemContext-CeLP5Pvz.js} +1 -1
- package/src/assets/web-panel/assets/{Git-pDAuNI9b.js → Git-CWs6CrRt.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-7oAOVDgM.js → Governance-wo9Gz6OK.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-B2jgqVc_.js → Inference-75Ob1OAF.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CsRfQMe3.js → KnowledgeGraph-DNw3Xz30.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Btr-_qa2.js → Logs-Bo7_f07I.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DYyQwT8S.js → Marketplace-Dm0yQkoQ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DZ2Muqme.js → McpTools-oh6SZgBB.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-VFISHv9O.js → Memory-DANDCrzX.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BepQB95_.js → Mtc-4D52E6FP.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-P270xCa6.js → MtcAudit-BmlorrLr.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-ChY57Wov.js → NLProgramming-DolGSSOm.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DvYOc-LP.js → Notes-BTyTq1Qk.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-DF1cYL7q.js → NotificationSettings-Db1AaWp_.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BdFBs5tB.js → Organization-DC4RfB2j.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-CWcf6XzX.js → Overflow-cYKtW74T.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Dlpijkuf.js → P2P-CY5dBoF-.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-DP9a2oRu.js → Permissions-B-U6t8Wf.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-Dkhs1ieh.js → Pipeline-a2pkdq6t.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DyY4Soyq.js → Privacy-ClgLdkPP.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-s-BGMUqA.js → ProjectSettings-D4Fi9bEQ.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-LBas316e.js → Projects-BiSWtWMm.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Bb57dGXh.js → Providers-ydpAao66.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-MOldl0LD.js → QuickAsk-Bg955QRg.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-_rz-WgUu.js → Recommend-BqynHnTn.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-BH2ufLqB.js → Reputation-B8xfdWQt.js} +1 -1
- package/src/assets/web-panel/assets/{Row-C-x3K6Kz.js → Row-D4zoYiqD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BPVfstzo.js → RssFeed-BI0FPtP6.js} +1 -1
- package/src/assets/web-panel/assets/{Search-Dz1IUxuk.js → Search-BG975ISr.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CjzlawSi.js → Security-BObRR-p6.js} +1 -1
- package/src/assets/web-panel/assets/{Services-B_at9R_D.js → Services-B2TScn1O.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-DUmYTGQw.js → Skeleton-PYzlv5Fw.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-tgkSIrrj.js → Skills-DbsTF84K.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Bb_VPx_C.js → Sla-D8q9j9bo.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BvEO_KFQ.js → SpeechSettings-CjjNbmVH.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BYE2fOCe.js → SyncSettings-UEp5lB2T.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-BOvITbzT.js → Tasks-CoCW4gWI.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CPcOkdWV.js → Templates-hd7UB-8K.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CXn2k3Bt.js → Tenant-CqebAGfR.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-ljGLGE7n.js → Tokens-9b0DDm86.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DULI2abh.js → Trigger-CG_ZXii2.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D4Y1Uqbj.js → Trust-CoCtornh.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CNIMnMaX.js → UkeySign-mBEc6SBj.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B0sKBx8K.js → VideoEditing-41j-ZZYu.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-ClcaEXP3.js → Wallet-DX4iBaEj.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-CJ-szm66.js → WebAuthn-9BlQYiNI.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-B0A6bzvw.js → WorkflowEditor-BVm3icIg.js} +1 -1
- package/src/assets/web-panel/assets/chat-D98zBL7S.js +1 -0
- package/src/assets/web-panel/assets/{colors-DIdEYifT.js → colors-ARL9W9UC.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DgctsprC.js → compact-item-MYI7UP_X.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D68iSn12.js → createContext-BddTmM7g.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-BfVEkwDr.js → hasIn-2OsB0OBj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dnjhvibk.js → index-B5UMIkIp.js} +1 -1
- package/src/assets/web-panel/assets/{index-h3RwMnvW.js → index-B7XKJHg8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVuBArIr.js → index-BA8yc-bG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIri4kXm.js → index-BIpkHBFo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWc9qPWf.js → index-BKl1SKpb.js} +3 -3
- package/src/assets/web-panel/assets/{index-COfT8est.js → index-BNXp47dX.js} +1 -1
- package/src/assets/web-panel/assets/{index-L1rKfgbj.js → index-BNjLDXWZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhSL3LyU.js → index-BO0TQWkU.js} +1 -1
- package/src/assets/web-panel/assets/{index-OEgd0e2J.js → index-BP5G8FRT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BL-ktXCL.js → index-BSKiudeY.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9q7lYch.js → index-BYKZplcs.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2a-87jy.js → index-BYbgYr7r.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnspH2S5.js → index-Bc-fiOB-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CYwWREKu.js → index-BhgLJAQi.js} +1 -1
- package/src/assets/web-panel/assets/{index-j3mQvPO6.js → index-C5qBLUjM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZsWnNr5.js → index-CHfRLYw8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cd9Uk85_.js → index-CISWdYQV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BATrOSqQ.js → index-CXMgUcC_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpfbHg4B.js → index-CndUS0Yo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGV32m2d.js → index-CtCi5cvq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjxYnpFI.js → index-CuoiTv71.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbXyrISU.js → index-D2lcW3-z.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByVIuAuT.js → index-DK71wnJK.js} +1 -1
- package/src/assets/web-panel/assets/{index-B86dckwF.js → index-DVB0ott1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlM0-wO_.js → index-DnL-YqLO.js} +1 -1
- package/src/assets/web-panel/assets/{index-1eTDj8GN.js → index-DpAOSmby.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWjGDulF.js → index-DqCyINtK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQopgmlq.js → index-Dz5ro_F6.js} +1 -1
- package/src/assets/web-panel/assets/index-G5xmB5Af.js +1 -0
- package/src/assets/web-panel/assets/{index-DDG4mKAW.js → index-GxbpL_A7.js} +1 -1
- package/src/assets/web-panel/assets/{index-BC_AMP2G.js → index-N8eKGGPN.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByPXCWc3.js → index-N9X-UOF0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Do7M55ke.js → index-TepTGolv.js} +1 -1
- package/src/assets/web-panel/assets/{index-bZQ4WUeB.js → index-awm9n2jp.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9VsNXsF.js → index-hP2fDMJo.js} +1 -1
- package/src/assets/web-panel/assets/{index-N7q4pvXQ.js → index-kNDK9K4y.js} +1 -1
- package/src/assets/web-panel/assets/index-qbPE-_18.js +1 -0
- package/src/assets/web-panel/assets/{index-B04XbTiI.js → index-tSE1B4ri.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-D5bRziL5.js → initDefaultProps-CJbHV9hH.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DEkPod7A.js → motion-BTVrWA7N.js} +1 -1
- package/src/assets/web-panel/assets/{move-CB_1Dwv-.js → move-CRIIhWv7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-UkvsaZ7a.js → omit-CDcQHhGi.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-wcF9VtXD.js → pickAttrs-Dplb8z8U.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DyFS6p4H.js → placementArrow-CP1cLg6P.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-aP8GIgAb.js → responsiveObserve-PFMAIMDu.js} +1 -1
- package/src/assets/web-panel/assets/{slide-HrH-9peG.js → slide-_CVxhTa3.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-tnhAwJgv.js → statusUtils-6j8grlgm.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B8gy0RNi.js → styleChecker-BbC7i8Sl.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Do-bHuEg.js → useFlexGapSupport-Ctha7v2w.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DMBSmk-z.js → useFs-CeTUZIh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BI-CTVZ1.js → vnode-kefkre4N.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BrBIcdS0.js → zoom-CZjCXV_O.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/lib/chat-core.js +60 -34
- package/src/assets/web-panel/assets/chat-CAmp7Hj4.js +0 -1
- package/src/assets/web-panel/assets/index-4FtfPG2_.js +0 -1
- package/src/assets/web-panel/assets/index-Ri5xYTdD.js +0 -1
package/src/lib/chat-core.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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};
|