chainlesschain 0.166.30 → 0.166.34
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/README.md +27 -2
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-D0L1OM_i.js → AIOps-D8PJmSrh.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CeZUkX_V.js → ActionButton-DG6DqHA3.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-P_7CIOew.js → Analytics-DiLleeWs.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-NuqDYrlO.js → AppLayout-DxYkhlHK.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-D1BTQqJM.js → Artifacts-BAW3Kdsi.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-D9XL6DVf.js → Audit-DBr4uY6E.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Ci2DB2gV.js → BackgroundAgents-Dw0r-bHX.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CreK3Yqn.js → Backup-AyhwYsio.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BkIRKFXX.js → BaseInput-Cj8qJotr.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BoJjlCDT.js → Chat-DcvimQ0u.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer--joJ1e2f.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BbA932P3.js → Checkbox-C2mlU77l.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BS_f3kQy.js → Codegen-CAfc3YaV.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BJ1tzpRh.js → Col-CIxoxtJI.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DYsZZlgI.js → Community-DvufZoRg.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Cq41A43W.js → Compact-55JTa99J.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CBqSz1op.js → Compliance-BllWog6P.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-ZAn8buD_.js → Cowork-ThsFGc5p.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DM4WTZQT.js → Cron-CZjl5Ig2.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-S65sJZwe.js → Crosschain-DIAKAoQT.js} +1 -1
- package/src/assets/web-panel/assets/{DID-0Av7FTMv.js → DID-ayygwEil.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-D-1vFtiV.js → Dashboard-C3Xjm2UO.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BZufOCir.js → Dropdown-C1S3zf-j.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DJE8szQZ.js → EmailListRenderer-DRvriU-H.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BqqPHaZn.js → FamilyGuardDashboard-iSX2bmsD.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CslSyj60.js → Federation-Dk0Stkv-.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-uTfAl63o.js → FormItemContext-DasXSGff.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BIP2obER.js → GenericCardRenderer-Dv9XGlxI.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CoVpUKSg.js → Git-B5PgXL3Z.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-zW6mlFcK.js → Governance-B78x11e_.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-zfu2tMaa.js → Inference-b7CX1RqW.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Dd38pMCe.js → KnowledgeGraph--MgBzMVp.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BhX28L73.js → Logs-CYCiGmVc.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-yrl10SWw.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DGBKtVL6.js → Marketplace-CsbwQ0eM.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-C0jSXrYN.js → McpTools-0GBWHVra.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-_xyOJV55.js → Memory-fAywmAYr.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DGm6cS5Y.js → MobileBridge-BeNEyy3s.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-Zt1cpErd.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CSfoeF9f.js → Mtc-CqRhJB70.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-DuXFbCYL.js → MtcAudit-BEyGZflc.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CdnOBFhs.js → Multisig-luz3EBT2.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C0URZ4u4.js → NLProgramming-Dkbvp8IX.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CJznx6ft.js → Notes-Cf9I2K8j.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DJcqYoZP.js → NotificationSettings-BTfuzynL.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DBmCtl2H.js +1 -0
- package/src/assets/web-panel/assets/{Organization-ucvP5Gzp.js → Organization-BbG3-vDy.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Be3DoWvY.js → Overflow-CMtFKEIQ.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BXV17CWM.js → P2P-6SAEb_lU.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-CWG2OLvh.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-Bn0mjFJA.js → Permissions-ClZxZKZl.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CQ2uLeuD.js → PersonalDataHub-BYkyoZDT.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DWv7KJKL.js → Pipeline-B28ZgADI.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B4I0G5_J.js → Privacy-BxtZywbB.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CDGy6B7j.js → ProjectInit-DPqoRnxK.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CXUq9nGH.js → ProjectSettings-QjKvMkau.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B-IA5qsB.js → Projects-Cp0Z8ZG0.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Card8pXM.js → Providers-CrS-rbyb.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DrU0hFRp.js → QrScannerModal-xTrhbVAU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-cB-AFOxA.js → QuickAsk-DFOqJoq-.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CvAvFr0u.js → Recommend-DXlKqu2-.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BIrtatCm.js → RemoteSession-BLLaZH8K.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CrRpi112.js → Reputation-CUgAdJ11.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DmaenKNU.js → Row-DzOO3wP-.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CGZBcNLM.js → RssFeed-B6GrRvh8.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Bvxjc4AU.js → Search-Cj3zKLb3.js} +1 -1
- package/src/assets/web-panel/assets/{Security-1Z-5c2n6.js → Security-LnktzidI.js} +3 -3
- package/src/assets/web-panel/assets/{Services-3zYh5_28.js → Services-BQ6sIc2K.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DEyGi_mq.js → Skeleton-CCSV3Jbw.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BjWR0303.js → Skills-CpoQ4SNk.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C6rE_C6V.js → Sla-DbAbgRPq.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DJ1DtDuf.js → SpeechSettings-C4cJ_hoD.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B2j0LEry.js → SyncSettings-BKFzjN9Z.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-Cf4bl7NS.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Eb0UjdGe.js → Templates-DTEQfFAQ.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BlkC3jZ8.js → Tenant-wToJWKXB.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-MMaa8P6V.js → Terminal-1s3c7kmF.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B4EsSPro.js → TimelineRenderer-BcfsYW3u.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Chk0rule.js → Tokens-Byez6FY0.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-Cww9ZKjK.js → Trigger-Cq8mZO88.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-xSwx_Zhk.js → Trust-DUrMmEwR.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CNaC0gRj.js → UkeySign-CVHwXrVU.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-gpoRF70F.js → VideoEditing-CDKbTRUS.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-eSjvqmUV.js → Wallet-BqnEBIOy.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-C4T03Dyz.js → WebAuthn-CeTMpj7_.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-eR0JIHbW.js → WorkflowEditor-F6OgjV3C.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CPRK3APB.js → chat-CMHUCwq3.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BP4ZS2SA.js → colors-DzVM_fpJ.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C2bvxEX0.js → compact-item-Hhmg51yT.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DfgFYASc.js → createContext-SwHt7x3Q.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-5q_Y0E88.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BlwCGOVd.js → hasIn-HGNKkn9A.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bg_1EOhP.js → index--iOqM_AI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDavuQ3n.js → index-AQcDW8bB.js} +3 -3
- package/src/assets/web-panel/assets/{index-CBJrpDfv.js → index-B6YQN5_R.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPezy3IJ.js → index-BDE-WiE5.js} +1 -1
- package/src/assets/web-panel/assets/{index-JhYgZWbg.js → index-BDhCx17_.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2n5VKtr.js → index-BDt4wSl6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BENgpvOm.js → index-BJqNTF1S.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKZNLHhD.js → index-BRikmONJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3qzM-P9.js → index-B_HgLPC5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLTzHq3a.js → index-Ba2Kszdy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DEohnDSJ.js → index-BlHB5eax.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQ-CB1zc.js → index-BmPYmoY3.js} +1 -1
- package/src/assets/web-panel/assets/{index-5b_mMYB_.js → index-Bq9MMKno.js} +1 -1
- package/src/assets/web-panel/assets/{index-IYshwMo1.js → index-BstLYy9q.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzHzRE9E.js → index-C-YkiVyL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZHYspFu.js → index-C1QJxiOL.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_LuOKcc.js → index-CDtzUt75.js} +1 -1
- package/src/assets/web-panel/assets/{index-9VWjFlVU.js → index-CMG_2fK2.js} +1 -1
- package/src/assets/web-panel/assets/{index-QE8jhGyd.js → index-COOcGOyK.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6Zbp8DY.js → index-CWkWh48N.js} +1 -1
- package/src/assets/web-panel/assets/{index-_5mGFZRu.js → index-Cc-d6f0F.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO1fPYye.js → index-ChLHLBkF.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-ubYfKF.js → index-Cnm4zroJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgUnGGL8.js → index-Co4RcBua.js} +1 -1
- package/src/assets/web-panel/assets/{index-AbVd9bHP.js → index-D5dcWBqg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZbQQtMn.js → index-DQT5thlV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DR2Tg8uN.js → index-Dcg7nQDe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdaniU1x.js → index-DgoefbLs.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyMwW_p5.js → index-DyZUrnje.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dx3HnzcX.js → index-E-bI8HpV.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2D-mqRz.js → index-F7Grz3-G.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDGliY6u.js → index-MDdTkUpA.js} +1 -1
- package/src/assets/web-panel/assets/{index-XBrnfoX6.js → index-aKV4Py_2.js} +1 -1
- package/src/assets/web-panel/assets/index-dl9TJMh5.js +1 -0
- package/src/assets/web-panel/assets/{index-B0HiXNYh.js → index-jrRtmiUh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnD3N8YJ.js → index-oz0Xxs8D.js} +1 -1
- package/src/assets/web-panel/assets/{index-Sk-fx_32.js → index-pwLuJGFh.js} +1 -1
- package/src/assets/web-panel/assets/{index-WSC6WoDZ.js → index-sYkFp9A4.js} +1 -1
- package/src/assets/web-panel/assets/index-x0DDgUaT.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-CmR0B8Wx.js → initDefaultProps-C_2QM45F.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BC0UJWJb.js → motion-DkxY04tR.js} +1 -1
- package/src/assets/web-panel/assets/{move-cvEJQRZ_.js → move-D0CJlA7D.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-0ZPAo5px.js → mtc-parser-DjP38YUD.js} +1 -1
- package/src/assets/web-panel/assets/{omit-UBXYakkw.js → omit-C9CJDaGT.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CRZgdSvi.js → pickAttrs-D5Wq2fa8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B_Y8sKr_.js → placementArrow-DJ6Dixs7.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CFgbiMsJ.js → responsiveObserve-DMmM0Dee.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CF6LYcYS.js → slide-DipmpYA-.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cj2PusGV.js → statusUtils-DSqw6_nU.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Czg7dDLr.js → styleChecker-t828MYjI.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Bhi9P67E.js → useFlexGapSupport-COsSNzDQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-X9lqJXBc.js → useFs-Bq5IEzv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-iL34aL71.js → usePersonalDataHub-CUKM0HdW.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DJ7TA9fc.js → vnode-l-JwAt2M.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DfQDsJXd.js → zoom-D7xkW-gD.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +52 -0
- package/src/lib/evolution/evolution-file-witness.js +59 -13
- package/src/lib/evolution/evolution-ledger-file-backend.js +16 -1
- package/src/lib/remote-read-loop-guard.js +290 -0
- package/src/lib/task-progress-tracker.js +5 -1
- package/src/lib/text-file-search-worker.js +147 -0
- package/src/lib/text-file-search.js +116 -0
- package/src/lib/web-fetch-snapshots.js +211 -0
- package/src/lib/web-fetch.js +317 -26
- package/src/lib/web-search.js +118 -10
- package/src/runtime/agent-core.js +85 -1
- package/src/runtime/coding-agent-contract-shared.cjs +98 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-D68YIuni.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CbOmzhyX.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-DqNyu4pO.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CEQJHoU9.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-CZDiOia9.js +0 -7
- package/src/assets/web-panel/assets/Tasks-ClYwVLRE.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CahG3JuS.js +0 -1
- package/src/assets/web-panel/assets/index-BZ3kGfit.js +0 -1
- package/src/assets/web-panel/assets/index-Dm5MZg8A.js +0 -1
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
buildReadFileOutline,
|
|
22
22
|
} from "../lib/read-file-page.js";
|
|
23
23
|
import { ReadFileLoopGuard } from "../lib/read-file-loop-guard.js";
|
|
24
|
+
import { RemoteReadLoopGuard } from "../lib/remote-read-loop-guard.js";
|
|
24
25
|
import {
|
|
25
26
|
TaskProgressTracker,
|
|
26
27
|
TASK_RECOVERY_TOOLS,
|
|
@@ -1096,6 +1097,8 @@ Key behaviors:
|
|
|
1096
1097
|
- For long-running commands (builds, full test suites, dev servers) set run_shell { run_in_background: true } to get a task_id back immediately, then poll output and completion with check_shell { task_id }. Kill a backgrounded server with check_shell { task_id, kill: true } when finished
|
|
1097
1098
|
- When asked about git status, diff, log, or other repository operations, use the git tool instead of run_shell
|
|
1098
1099
|
- When asked about files or code, use search_files to locate relevant sections, then read_file with offset/limit. Follow nextRead for large files. Reuse unchanged content already in context instead of repeatedly reading the same page; re-read when the file changes or the earlier content is no longer available.
|
|
1100
|
+
- For long text files, use search_files with path and pattern to find matching lines/columns and nearby text; read the returned nextRead location instead of paging from the top.
|
|
1101
|
+
- For online discovery without a known URL, use web_search with keywords. Return relevant source links and snippets; use web_fetch only when the source needs closer reading. For a known URL, fetch it directly. Download large pages once, then use snapshotId to search or read local chunks. Never invent URLs or claim a blocked search returned no results.
|
|
1099
1102
|
- Large task documents include a sampled outline with line numbers. Use it to locate relevant unfinished work and inspect those sections instead of scanning the entire document unless the task requires full coverage. File coverage and excerpts survive compaction; reading to EOF is not completing the user's task.
|
|
1100
1103
|
- For task counts or completion status, search the named document for the latest status/summary table first, then read that section. Distinguish historical entries from current status and repository work from external acceptance. Once the relevant entries are verified, answer; do not read every implementation detail just to count tasks.
|
|
1101
1104
|
- Before renaming or changing a symbol, use code_intelligence (action: references/definition) to find every real usage instead of guessing with text search. It degrades to "unavailable" when no language server is installed — fall back to search_files then.
|
|
@@ -1703,6 +1706,8 @@ function agentFileToolPathRequests(name, args = {}, workspaceRoots = []) {
|
|
|
1703
1706
|
},
|
|
1704
1707
|
];
|
|
1705
1708
|
case "search_files":
|
|
1709
|
+
if (typeof args.path === "string" && args.path.length > 0)
|
|
1710
|
+
return one("path", "read");
|
|
1706
1711
|
return typeof args.directory === "string" && args.directory.length > 0
|
|
1707
1712
|
? [
|
|
1708
1713
|
{
|
|
@@ -7075,6 +7080,14 @@ async function executeToolInner(
|
|
|
7075
7080
|
const result = await webFetch(args.url, {
|
|
7076
7081
|
format: args.format,
|
|
7077
7082
|
maxBytes: args.maxBytes,
|
|
7083
|
+
maxChars: args.maxChars,
|
|
7084
|
+
onOverflow: args.onOverflow,
|
|
7085
|
+
snapshotId: args.snapshotId,
|
|
7086
|
+
query: args.query,
|
|
7087
|
+
maxMatches: args.maxMatches,
|
|
7088
|
+
contextChars: args.contextChars,
|
|
7089
|
+
caseSensitive: args.caseSensitive,
|
|
7090
|
+
offset: args.offset,
|
|
7078
7091
|
timeout: args.timeout,
|
|
7079
7092
|
config: webFetchConfig,
|
|
7080
7093
|
hostResourceBudget,
|
|
@@ -7103,6 +7116,8 @@ async function executeToolInner(
|
|
|
7103
7116
|
const result = await webSearch(args.query, {
|
|
7104
7117
|
provider: args.provider,
|
|
7105
7118
|
maxResults: args.maxResults,
|
|
7119
|
+
maxBytes: args.maxBytes,
|
|
7120
|
+
maxSnippetChars: args.maxSnippetChars,
|
|
7106
7121
|
timeout: args.timeout,
|
|
7107
7122
|
config: webSearchConfig,
|
|
7108
7123
|
hostResourceBudget,
|
|
@@ -7659,6 +7674,36 @@ async function executeToolInner(
|
|
|
7659
7674
|
}
|
|
7660
7675
|
|
|
7661
7676
|
case "search_files": {
|
|
7677
|
+
if (typeof args.path === "string" && args.path.length > 0) {
|
|
7678
|
+
const file = path.resolve(cwd, args.path);
|
|
7679
|
+
const { credentialFileReason } =
|
|
7680
|
+
await import("../lib/credential-guard.js");
|
|
7681
|
+
const reason =
|
|
7682
|
+
credentialFileReason(file) ||
|
|
7683
|
+
(fs.existsSync(file)
|
|
7684
|
+
? credentialFileReason(fs.realpathSync(file))
|
|
7685
|
+
: null);
|
|
7686
|
+
if (reason)
|
|
7687
|
+
return attachDescriptor({
|
|
7688
|
+
error:
|
|
7689
|
+
"Credential file content is protected; use read_file with confirmation",
|
|
7690
|
+
code: "ERR_CREDENTIAL_FILE",
|
|
7691
|
+
});
|
|
7692
|
+
const { searchTextFile } = await import("../lib/text-file-search.js");
|
|
7693
|
+
const result = await searchTextFile(file, { ...args, hostResourceBudget });
|
|
7694
|
+
return attachDescriptor({
|
|
7695
|
+
...result,
|
|
7696
|
+
path: file,
|
|
7697
|
+
...(result.matches
|
|
7698
|
+
? {
|
|
7699
|
+
matches: result.matches.map((match) => ({
|
|
7700
|
+
...match,
|
|
7701
|
+
nextRead: { path: args.path, ...match.nextRead },
|
|
7702
|
+
})),
|
|
7703
|
+
}
|
|
7704
|
+
: {}),
|
|
7705
|
+
});
|
|
7706
|
+
}
|
|
7662
7707
|
// An explicit directory scopes the search to one root; otherwise span
|
|
7663
7708
|
// cwd plus any --add-dir roots so cross-package searches find matches.
|
|
7664
7709
|
const extraRoots = Array.isArray(additionalDirectories)
|
|
@@ -13807,11 +13852,24 @@ export async function* agentLoop(messages, options) {
|
|
|
13807
13852
|
// rather than looping forever (the iteration budget is the hard backstop).
|
|
13808
13853
|
let emptyThinkingReprompted = false;
|
|
13809
13854
|
const readFileLoopGuard = new ReadFileLoopGuard();
|
|
13855
|
+
const remoteReadLoopGuard = new RemoteReadLoopGuard();
|
|
13810
13856
|
toolContext.readFileLoopGuard = readFileLoopGuard;
|
|
13811
13857
|
let lastTaskProgressIntervention = null;
|
|
13812
13858
|
|
|
13813
13859
|
while (budget.hasRemaining()) {
|
|
13814
13860
|
readFileLoopGuard.finishBatch();
|
|
13861
|
+
if (remoteReadLoopGuard.stalled) {
|
|
13862
|
+
await _awaitBackgroundUsageSettlement(
|
|
13863
|
+
backgroundSubAgents,
|
|
13864
|
+
backgroundUsageFailureState,
|
|
13865
|
+
);
|
|
13866
|
+
yield* _drainSubAgentUsage(subAgentUsageSink);
|
|
13867
|
+
const error = new Error(
|
|
13868
|
+
"Repeated remote fetch failures or unchanged GitHub Actions logs continued after recovery guidance. Stopped the retry loop; the task is not complete. Use the retained findings, check authentication/connectivity, or fetch a specific missing log section before retrying.",
|
|
13869
|
+
);
|
|
13870
|
+
error.code = "CC_AGENT_REPEATED_REMOTE_READ";
|
|
13871
|
+
throw error;
|
|
13872
|
+
}
|
|
13815
13873
|
if (readFileLoopGuard.stalled) {
|
|
13816
13874
|
await _awaitBackgroundUsageSettlement(
|
|
13817
13875
|
backgroundSubAgents,
|
|
@@ -14388,6 +14446,14 @@ export async function* agentLoop(messages, options) {
|
|
|
14388
14446
|
// whole-file request. This changes discovery for one request only; runtime
|
|
14389
14447
|
// permissions are untouched and ordinary reads return on the next turn.
|
|
14390
14448
|
const readRecoveryTurn = readFileLoopGuard.takeRecoveryTurn();
|
|
14449
|
+
const remoteRecoveryTools = remoteReadLoopGuard.takeRecoveryTurn();
|
|
14450
|
+
if (remoteRecoveryTools.length) {
|
|
14451
|
+
yield {
|
|
14452
|
+
type: "iteration-warning",
|
|
14453
|
+
message:
|
|
14454
|
+
"Repeated web/log requests made no progress. Use retained evidence; the repeating tool is paused for one model turn.",
|
|
14455
|
+
};
|
|
14456
|
+
}
|
|
14391
14457
|
const progressIntervention = taskProgressTracker.intervention;
|
|
14392
14458
|
const newProgressIntervention =
|
|
14393
14459
|
progressIntervention &&
|
|
@@ -14408,7 +14474,7 @@ export async function* agentLoop(messages, options) {
|
|
|
14408
14474
|
};
|
|
14409
14475
|
}
|
|
14410
14476
|
const iterationToolOptions =
|
|
14411
|
-
readRecoveryTurn || taskRecoveryTurn
|
|
14477
|
+
readRecoveryTurn || taskRecoveryTurn || remoteRecoveryTools.length
|
|
14412
14478
|
? {
|
|
14413
14479
|
...effectiveToolOptions,
|
|
14414
14480
|
disabledTools: [
|
|
@@ -14416,6 +14482,7 @@ export async function* agentLoop(messages, options) {
|
|
|
14416
14482
|
...(effectiveToolOptions.disabledTools || []),
|
|
14417
14483
|
...(readRecoveryTurn ? ["read_file"] : []),
|
|
14418
14484
|
...(taskRecoveryTurn ? TASK_RECOVERY_TOOLS : []),
|
|
14485
|
+
...remoteRecoveryTools,
|
|
14419
14486
|
]),
|
|
14420
14487
|
],
|
|
14421
14488
|
}
|
|
@@ -14423,6 +14490,7 @@ export async function* agentLoop(messages, options) {
|
|
|
14423
14490
|
const readContext = [
|
|
14424
14491
|
readFileLoopGuard.findingsHint,
|
|
14425
14492
|
readFileLoopGuard.progressHint,
|
|
14493
|
+
remoteReadLoopGuard.findingsHint,
|
|
14426
14494
|
taskProgressTracker.checkpointFor(runId),
|
|
14427
14495
|
].filter(Boolean);
|
|
14428
14496
|
if (readContext.length) {
|
|
@@ -14468,6 +14536,20 @@ export async function* agentLoop(messages, options) {
|
|
|
14468
14536
|
}
|
|
14469
14537
|
}
|
|
14470
14538
|
const contextMemoryTrustedSystemIndexes = [];
|
|
14539
|
+
if (remoteReadLoopGuard.recoveryHint) {
|
|
14540
|
+
callMessages = [
|
|
14541
|
+
...callMessages,
|
|
14542
|
+
{
|
|
14543
|
+
role: "system",
|
|
14544
|
+
content:
|
|
14545
|
+
remoteReadLoopGuard.recoveryHint +
|
|
14546
|
+
(remoteRecoveryTools.length
|
|
14547
|
+
? ` One-turn recovery: ${remoteRecoveryTools.join(", ")} omitted for this request only; availability resumes on the next turn.`
|
|
14548
|
+
: ""),
|
|
14549
|
+
},
|
|
14550
|
+
];
|
|
14551
|
+
contextMemoryTrustedSystemIndexes.push(callMessages.length - 1);
|
|
14552
|
+
}
|
|
14471
14553
|
if (progressIntervention) {
|
|
14472
14554
|
callMessages = [
|
|
14473
14555
|
...callMessages,
|
|
@@ -15044,6 +15126,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15044
15126
|
_throwBackgroundUsageFailureState(backgroundUsageFailureState);
|
|
15045
15127
|
const { result: toolResult, error: toolError } = await promise;
|
|
15046
15128
|
throwIfAborted(signal);
|
|
15129
|
+
remoteReadLoopGuard.record(call.function.name, toolResult, toolArgs);
|
|
15047
15130
|
readFileLoopGuard.record(
|
|
15048
15131
|
call.function.name,
|
|
15049
15132
|
toolResult,
|
|
@@ -15528,6 +15611,7 @@ export async function* agentLoop(messages, options) {
|
|
|
15528
15611
|
// context — but tell the model when we cut it (no more silent
|
|
15529
15612
|
// mid-content slice). See MAX_TOOL_RESULT_CHARS / capToolResultString.
|
|
15530
15613
|
const resultStr = toolResultForModel(toolName, toolResult, messages);
|
|
15614
|
+
remoteReadLoopGuard.record(toolName, toolResult, toolArgs);
|
|
15531
15615
|
readFileLoopGuard.record(
|
|
15532
15616
|
toolName,
|
|
15533
15617
|
toolResult,
|
|
@@ -388,7 +388,8 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
388
388
|
title: "Search Files",
|
|
389
389
|
kind: "filesystem",
|
|
390
390
|
tier: "mvp",
|
|
391
|
-
description:
|
|
391
|
+
description:
|
|
392
|
+
"Search for files by name pattern or content. For a long text file, pass path and pattern: returns matching line/column positions, nearby context, and nextRead arguments for read_file. This streams the file instead of loading it into model context. Continue capped results with nextOffset as offset. Omit path for the existing directory search.",
|
|
392
393
|
inputSchema: {
|
|
393
394
|
type: "object",
|
|
394
395
|
properties: {
|
|
@@ -396,6 +397,40 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
396
397
|
type: "string",
|
|
397
398
|
description: "Glob pattern or search string",
|
|
398
399
|
},
|
|
400
|
+
path: {
|
|
401
|
+
type: "string",
|
|
402
|
+
description:
|
|
403
|
+
"One text file to search by literal keyword (takes precedence over directory/content_search).",
|
|
404
|
+
},
|
|
405
|
+
regex: {
|
|
406
|
+
type: "boolean",
|
|
407
|
+
description:
|
|
408
|
+
"Single-file search only: evaluate a regular expression in overlapping 64K text windows (default false). Prefer literals for exact coverage across window boundaries.",
|
|
409
|
+
},
|
|
410
|
+
caseSensitive: {
|
|
411
|
+
type: "boolean",
|
|
412
|
+
description: "Single-file search only: match case (default false).",
|
|
413
|
+
},
|
|
414
|
+
offset: {
|
|
415
|
+
type: "integer",
|
|
416
|
+
minimum: 0,
|
|
417
|
+
description:
|
|
418
|
+
"Single-file search: zero-based character offset to continue from nextOffset (default 0).",
|
|
419
|
+
},
|
|
420
|
+
maxMatches: {
|
|
421
|
+
type: "integer",
|
|
422
|
+
minimum: 1,
|
|
423
|
+
maximum: 100,
|
|
424
|
+
description:
|
|
425
|
+
"Single-file search: maximum matching excerpts (default 20).",
|
|
426
|
+
},
|
|
427
|
+
contextChars: {
|
|
428
|
+
type: "integer",
|
|
429
|
+
minimum: 0,
|
|
430
|
+
maximum: 1000,
|
|
431
|
+
description:
|
|
432
|
+
"Single-file search: characters around each match (default 150).",
|
|
433
|
+
},
|
|
399
434
|
directory: {
|
|
400
435
|
type: "string",
|
|
401
436
|
description: "Directory to search in (default: cwd)",
|
|
@@ -699,7 +734,7 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
699
734
|
kind: "network",
|
|
700
735
|
tier: "extension",
|
|
701
736
|
description:
|
|
702
|
-
"
|
|
737
|
+
"Download a web page over HTTP(S), save the extracted text locally, and return one chunk. Continue with the same URL/format and returned snapshotId + nextOffset as offset; subsequent chunks read the saved document without downloading again. Use maxChars to limit each chunk, not maxBytes. Snapshots expire after 30 minutes or cache eviction. GitHub Actions pages contain status/annotations; retrieve actual job logs using authenticated gh run view <run-id> --job <job-id> --log-failed --repo <owner/repo>. Honors allowlist from .chainlesschain/config.json:webFetch.",
|
|
703
738
|
inputSchema: {
|
|
704
739
|
type: "object",
|
|
705
740
|
properties: {
|
|
@@ -714,7 +749,53 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
714
749
|
},
|
|
715
750
|
maxBytes: {
|
|
716
751
|
type: "number",
|
|
717
|
-
description:
|
|
752
|
+
description:
|
|
753
|
+
"Raw HTTP download limit BEFORE text extraction (default: 10000000 / 10 MB). Larger text pages return a marked incomplete prefix by default; raise this for more of the page. Do not lower this to shorten output; use maxChars instead.",
|
|
754
|
+
},
|
|
755
|
+
maxChars: {
|
|
756
|
+
type: "number",
|
|
757
|
+
description:
|
|
758
|
+
"Characters per saved-text chunk (default: 20000). Returns hasMore, nextOffset and snapshotId for continuation. Applies to markdown/text/html; JSON values remain intact.",
|
|
759
|
+
},
|
|
760
|
+
snapshotId: {
|
|
761
|
+
type: "string",
|
|
762
|
+
description:
|
|
763
|
+
"Returned snapshot ID. Reads the already downloaded document from local storage without any HTTP request. Keep the same URL and format.",
|
|
764
|
+
},
|
|
765
|
+
query: {
|
|
766
|
+
type: "string",
|
|
767
|
+
description:
|
|
768
|
+
"Search the saved webpage for a literal keyword without network access (requires snapshotId). Returns matching offsets/context and nextRead arguments. Omit query when reading the matched section.",
|
|
769
|
+
},
|
|
770
|
+
maxMatches: {
|
|
771
|
+
type: "integer",
|
|
772
|
+
minimum: 1,
|
|
773
|
+
maximum: 100,
|
|
774
|
+
description:
|
|
775
|
+
"Saved-page keyword search: result limit (default 20); continue with nextOffset as offset.",
|
|
776
|
+
},
|
|
777
|
+
contextChars: {
|
|
778
|
+
type: "integer",
|
|
779
|
+
minimum: 0,
|
|
780
|
+
maximum: 1000,
|
|
781
|
+
description:
|
|
782
|
+
"Saved-page keyword search: context around each hit (default 150).",
|
|
783
|
+
},
|
|
784
|
+
caseSensitive: {
|
|
785
|
+
type: "boolean",
|
|
786
|
+
description:
|
|
787
|
+
"Saved-page keyword search: case-sensitive matching (default false).",
|
|
788
|
+
},
|
|
789
|
+
offset: {
|
|
790
|
+
type: "number",
|
|
791
|
+
description:
|
|
792
|
+
"Zero-based character position in extracted text (default: 0). For the next chunk, use the previous result's nextOffset with its snapshotId.",
|
|
793
|
+
},
|
|
794
|
+
onOverflow: {
|
|
795
|
+
type: "string",
|
|
796
|
+
enum: ["truncate", "error"],
|
|
797
|
+
description:
|
|
798
|
+
"When the raw download exceeds maxBytes: truncate (default) returns the available prefix with downloadTruncated=true and guidance to fetch more; error requires a complete response. JSON always requires a complete response.",
|
|
718
799
|
},
|
|
719
800
|
timeout: {
|
|
720
801
|
type: "number",
|
|
@@ -739,7 +820,7 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
739
820
|
kind: "network",
|
|
740
821
|
tier: "extension",
|
|
741
822
|
description:
|
|
742
|
-
"
|
|
823
|
+
"Discover web sources from keywords when no URL is known. Return ranked results (title, url, snippet) plus an optional synthesized answer; cite source URLs. This is keyword search, not URL fetching. Use web_fetch only for sources that need full-text inspection, then search/read their saved snapshot locally. Backend is configured via .chainlesschain/config.json:webSearch (default provider: auto — uses whichever API key is set, else keyless DuckDuckGo). Verification challenges are errors, not empty search results.",
|
|
743
824
|
inputSchema: {
|
|
744
825
|
type: "object",
|
|
745
826
|
properties: {
|
|
@@ -766,6 +847,19 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
766
847
|
type: "number",
|
|
767
848
|
description: "Maximum number of results to return (default: 8)",
|
|
768
849
|
},
|
|
850
|
+
maxBytes: {
|
|
851
|
+
type: "integer",
|
|
852
|
+
minimum: 1,
|
|
853
|
+
description:
|
|
854
|
+
"Raw search response download limit (default 10000000). Do not lower this to shorten snippets.",
|
|
855
|
+
},
|
|
856
|
+
maxSnippetChars: {
|
|
857
|
+
type: "integer",
|
|
858
|
+
minimum: 1,
|
|
859
|
+
maximum: 10000,
|
|
860
|
+
description:
|
|
861
|
+
"Characters per search-result snippet (default 2000). Read the linked webpage for full text.",
|
|
862
|
+
},
|
|
769
863
|
timeout: {
|
|
770
864
|
type: "number",
|
|
771
865
|
description: "Request timeout in ms (default: 15000)",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as h,P as u,J as y,U as n,R as a,S,K as x,Q as C,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-DDavuQ3n.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),v=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${v}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},R={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=h("a-tag");return u(),y("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",M,[n("span",R,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(u(),S(o,{key:0,class:"src",color:r.adapterColor},{default:x(()=>[C(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as a,J as p,b as c}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DDavuQ3n.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=c(()=>s(e.content||"")),n={props:e,rendered:r,computed:c,get renderMarkdown(){return s}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return a(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as c,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-DDavuQ3n.js";import{a8 as y,M}from"./icons-DG5UD-6K.js";const x={__name:"MobileProjects",setup(p,{expose:i}){i();const n=u(),{t:e}=m();function a(){n.push("/projects")}function _(){n.push("/mobile-bridge")}const s={router:n,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},B={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,n,e,a,_){const s=c("a-alert"),d=c("a-button"),f=c("a-space"),P=c("a-empty"),j=c("a-card");return h(),g("div",B,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(x,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as y,b as a}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-DDavuQ3n.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),g=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:g,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},M={key:1,class:"row"};function P(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):y("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):y("v-if",!0)])}const K=S(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{K as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-D68YIuni.js","./vendor-Bn1JzzAn.js","./index-DDavuQ3n.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-CEQJHoU9.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-B4EsSPro.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-DJE8szQZ.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-BIP2obER.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as ue,r as E,b as w,I as g,P as u,J as O,U as v,c,S as C,V as x,_ as M,F as V,Z as se,a0 as ae,R,K as m,Q as b,W as L,o as J}from"./vendor-Bn1JzzAn.js";import{u as U}from"./usePersonalDataHub-iL34aL71.js";import{_ as D,e as F,d as P}from"./index-DDavuQ3n.js";import{aa as q,ag as Q,M as z,aI as G,v as H,aH as K,aq as W,ac as Y,e as de,d as fe,k as pe,ai as me,aA as ye,R as _e}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Z=300,X=ue("pdhBrowser",()=>{const r=E({...I}),t=E([]),n=E(null),e=E(!1),o=E(!1),a=E(null),l=E(null),s=E(!1),i=E({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,y=null;const j=w(()=>t.value.length>0),A=w(()=>n.value!=null);function h(S={}){const p={},f=r.value;return f.q&&f.q.trim()&&(p.q=f.q.trim()),f.category&&(p.category=f.category),f.adapter&&(p.adapter=f.adapter),f.subtype&&(p.subtype=f.subtype),Number.isFinite(f.since)&&(p.since=f.since),Number.isFinite(f.until)&&(p.until=f.until),{...p,...S}}async function _(){const S=++d;e.value=!0,a.value=null;const p=U();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:B})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(S!==d)return;t.value=f.rows||[],n.value=f.nextCursor||null,l.value=f.mode||"like",s.value=!!f.shortQuery,i.value={byCategory:T.byCategory||{},byAdapter:T.byAdapter||{},bySubtype:T.bySubtype||{},total:T.total||0}}catch(f){if(S!==d)return;a.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{S===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,a.value=null;const S=U();try{const p=await S.searchEvents(h({cursor:n.value,limit:B}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,l.value=p.mode||l.value}catch(p){a.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function le(S,p){if(!(S in I))throw new Error(`pdhBrowser.setFilter: unknown key "${S}"`);r.value={...r.value,[S]:p},y&&clearTimeout(y),y=setTimeout(()=>{y=null,_()},Z)}function ie(S){return r.value={...I,...S},y&&(clearTimeout(y),y=null),_()}function ce(){r.value={...I},t.value=[],n.value=null,a.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:a,mode:l,shortQuery:s,facets:i,hasResults:j,canLoadMore:A,search:_,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:B,SEARCH_DEBOUNCE_MS:Z}}),ge=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["meeting-","system"],["vscode","system"],["vscodium","system"],["jetbrains-ide","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["hbuilderx","system"],["local-files","system"],["cursor","ai-chat"],["claude-code","ai-chat"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:Y,social:W,email:K,shopping:H,travel:G,system:z,"ai-chat":Q,other:q};function a(i){return o[i]||q}function l(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:a,badgeStyle:l,computed:w,get AppstoreOutlined(){return q},get MessageOutlined(){return Y},get PlayCircleOutlined(){return W},get MailOutlined(){return K},get ShoppingOutlined(){return H},get CarOutlined(){return G},get MobileOutlined(){return z},get RobotOutlined(){return Q},get CATEGORIES(){return ge},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Se={class:"pdh-sidebar"},Oe=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,a){const l=g("a-badge");return u(),O("div",Se,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:M(["cat-item",{active:n.selected===null}]),onClick:t[0]||(t[0]=s=>r.$emit("select",null))},[c(e.AppstoreOutlined,{class:"icon"}),t[1]||(t[1]=v("span",{class:"label"},"全部",-1)),e.total>0?(u(),C(l,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):x("v-if",!0)],2),(u(!0),O(V,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:M(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),C(ae(e.iconFor(s)),{class:"icon"})),v("span",we,R(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(l,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):x("v-if",!0)],10,Oe))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),xe={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,a=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),l=w(()=>Object.entries(e.facets.byAdapter||{}).sort((_,k)=>k[1]-_[1]).map(([_,k])=>({value:_,label:`${_} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function y(h){o("set-filter","q",h||"")}function j(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[_,k]=h;o("set-filter","since",_?+_:null),o("set-filter","until",k?+k:null)}const A={props:e,emit:o,placeholderText:a,adapterOptions:l,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:y,onDateChange:j,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Ee={class:"pdh-filter-bar"},Re={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,a){const l=g("a-input-search"),s=g("a-select"),i=g("a-range-picker"),d=g("a-button");return u(),O("div",Ee,[c(l,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=y=>r.$emit("set-filter","adapter",y||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=y=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):x("v-if",!0),n.shortQuery?(u(),O("span",Re,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",je,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):x("v-if",!0)])}const Le=D(xe,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Fe={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>F(()=>import("./ChatBubbleRenderer-D68YIuni.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-CEQJHoU9.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-B4EsSPro.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=L(()=>F(()=>import("./EmailListRenderer-DJE8szQZ.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=L(()=>F(()=>import("./GenericCardRenderer-BIP2obER.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const y=d&&d.source&&d.source.adapter;switch($(y)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return a;default:return l}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:a,GenericCardRenderer:l,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,a){return u(),C(ae(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const a=Number.isFinite(o.occurredAt)?o.occurredAt:null,l=a?new Date(a).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",a!=null?String(a):"",l,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
|
|
5
|
-
`)+`
|
|
6
|
-
`}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
|
|
7
|
-
`)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),a=document.createElement("a");return a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),a=String(n.getDate()).padStart(2,"0"),l=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${a}${s}.${l}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function a(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function l({key:i}){try{const d=a(i),y=oe(i,n.category);re(d,y,o[i]),P.success(`已导出 ${n.events.length} 条到 ${y}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return ye},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function qe(r,t,n,e,o,a){const l=g("a-button"),s=g("a-menu-item"),i=g("a-menu"),d=g("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(l,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+R(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Be=D(Pe,[["render",qe],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function a(s,i){n.setFilter(s,i)}J(()=>{!n.hasResults&&!n.isLoading&&n.search()});const l={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:a,onMounted:J,computed:w,get ReloadOutlined(){return _e},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:Be};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}},Ne={class:"pdh-browser-page"},Me={class:"page-header"},Je={class:"main-pane"},Ue={class:"results-summary"},Qe={key:0},ze={key:0},Ge={key:1},He={class:"loaded-of"},Ke={class:"results-list"},We={key:2,class:"load-more"};function Ye(r,t,n,e,o,a){const l=g("a-tag"),s=g("a-button"),i=g("a-space"),d=g("a-col"),y=g("a-spin"),j=g("a-alert"),A=g("a-empty"),h=g("a-row");return u(),O("div",Ne,[v("div",Me,[t[6]||(t[6]=v("div",null,[v("h2",{class:"page-title"},"数据浏览器"),v("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),c(i,null,{default:m(()=>[e.store.mode==="fts5"?(u(),C(l,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),C(l,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):x("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=_=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",Je,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=_=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",Ue,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",Qe,[c(y,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(V,{key:1},[v("strong",null,R(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",ze,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,R(e.categoryLabel(e.store.filters.category)),1),v("strong",null,R(e.store.facets.byCategory[e.store.filters.category]||0),1)])):x("v-if",!0),e.store.filters.q?(u(),O("span",Ge,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,R(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):x("v-if",!0),v("span",He," / 已显示 "+R(e.store.results.length),1)],64))]),e.store.error?(u(),C(j,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):x("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(A,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):x("v-if",!0),v("div",Ke,[(u(!0),O(V,null,se(e.store.results,(_,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${_.id}`,event:_},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",We,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=_=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):x("v-if",!0)])]),_:1})]),_:1})])}const nt=D(Ve,[["render",Ye],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as F,b as D,r as R,I as p,J as c,U as _,c as n,K as a,S as C,V as x,o as I,x as V,P as i,Q as k,R as r,F as T,Z as O}from"./vendor-Bn1JzzAn.js";import{u as P,_ as E}from"./index-DDavuQ3n.js";import{R as U}from"./icons-DG5UD-6K.js";const B=F("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=D(()=>y.value.filter(e=>e.status==="running")),v=D(()=>y.value.filter(e=>e.status==="pending")),w=D(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=P();l.value=!0;try{const g=await e.sendRaw({type:"tasks-list"});g&&Array.isArray(g.tasks)&&(y.value=g.tasks)}catch{}finally{l.value=!1}}async function m(e){const g=P();try{await g.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await s()}}const f=R(null);function h(e=5e3){N(),s(),u=setInterval(s,e),S()}function N(){u&&(clearInterval(u),u=null),t&&(t(),t=null),d&&(clearTimeout(d),d=null)}function S(){const e=P();if(t)return;const g=z=>{z.type==="task:notification"&&z.payload?.task&&(f.value=z.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),L={__name:"Tasks",setup(y,{expose:l}){l();const u=B(),t=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function d(s){return s.status==="running"&&s.startedAt?u.formatDuration(Date.now()-s.startedAt):s.completedAt&&s.startedAt?u.formatDuration(s.completedAt-s.startedAt):"-"}function b(s){return s?new Date(s).toLocaleString():"-"}function v(s,m){return s?s.length>m?`${s.slice(0,m)}...`:s:""}I(()=>u.startPolling(5e3)),V(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:I,onUnmounted:V,get ReloadOutlined(){return U},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},j={class:"page-header"},J={key:0,class:"error-text"},K={key:1},M={class:"task-header"},Q={class:"task-desc"},W={class:"task-id"},Z={class:"task-meta"},q=["title"],G={key:0,class:"error-text"},H={key:1,class:"success-text"},X={key:2,class:"muted-text"};function Y(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),S=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",j,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),C(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",J,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",K,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),C(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,O(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",M,[n(S,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",Q,r(o.description),1),_("span",W,r(o.id.slice(0,16)),1)]),_("div",Z,[_("span",null,"类型: "+r(o.type||"-"),1),_("span",null,"已运行: "+r(t.store.formatDuration(Date.now()-o.startedAt)),1),n(v,{size:"small",danger:"",onClick:e=>t.store.stopTask(o.id)},{default:a(()=>[...l[4]||(l[4]=[k("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):x("v-if",!0),n(f,{class:"panel-card"},{default:a(()=>[n(A,{columns:t.columns,"data-source":t.store.tasks,pagination:{pageSize:15,size:"small"},loading:t.store.loading,"row-key":"id",size:"small"},{bodyCell:a(({column:o,record:e})=>[o.key==="status"?(i(),C(S,{key:0,color:t.store.getStatusColor(e.status)},{default:a(()=>[k(r(e.status),1)]),_:2},1032,["color"])):o.key==="description"?(i(),c("span",{key:1,title:e.command},r(e.description),9,q)):o.key==="duration"?(i(),c(T,{key:2},[k(r(t.getDuration(e)),1)],64)):o.key==="createdAt"?(i(),c(T,{key:3},[k(r(t.formatTime(e.createdAt)),1)],64)):o.key==="result"?(i(),c(T,{key:4},[e.error?(i(),c("span",G,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",H,r(t.truncate(String(e.result),60)),1)):(i(),c("span",X,"-"))],64)):o.key==="action"?(i(),c(T,{key:5},[e.status==="running"?(i(),C(v,{key:0,size:"small",danger:"",onClick:g=>t.store.stopTask(e.id)},{default:a(()=>[...l[5]||(l[5]=[k(" 停止 ",-1)])]),_:1},8,["onClick"])):x("v-if",!0)],64)):x("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1})])}const st=E(L,[["render",Y],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-0cyvxy/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DDavuQ3n.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-BJ1tzpRh.js";import{a0 as t}from"./index-DDavuQ3n.js";import"./vendor-Bn1JzzAn.js";import"./index-C2n5VKtr.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-DmaenKNU.js";import{a0 as t}from"./index-DDavuQ3n.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-CFgbiMsJ.js";import"./useFlexGapSupport-Bhi9P67E.js";import"./styleChecker-Czg7dDLr.js";import"./index-C2n5VKtr.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|