chainlesschain 0.162.129 → 0.162.131

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 (159) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-CjyeHTE3.js → AIOps-2KUTHQX_.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BmOH_-ot.js → ActionButton-L7_IhqNu.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-B-YkU8Fp.js → Analytics-CUixECiG.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CuFNWJei.js → AppLayout-Dpe2haDQ.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-JXoVP3K2.js → Audit-CnRXY9qp.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-B9JqIjt8.js → Backup-C0JsfiNs.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BzEr4mwO.js → BaseInput-Cu__ZKoW.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-CM-DNmWs.js → Chat-CBFYmY92.js} +3 -3
  10. package/src/assets/web-panel/assets/ChatBubbleRenderer-Df45RqwP.js +1 -0
  11. package/src/assets/web-panel/assets/{Checkbox-5FciM970.js → Checkbox-Brs6y0pv.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-BF5c0WB9.js → Codegen-DvIDK2R6.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-CG_wkd48.js → Col-BY1bz9zm.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-ej7R0US7.js → Community-Du0uBY_j.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-Dlg4k3rN.js → Compact-CxkCfnD4.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-Cx6BfZnz.js → Compliance-DI4GSvYO.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-BL8p2cmR.js → Cowork-BaBiaYNG.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-COSKa4zx.js → Cron-By787-AO.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-DZ2DEeE_.js → Crosschain-D06BizgW.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-B6Q_pgN5.js → DID-CaE65NYK.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-BCZ2eHJo.js → Dashboard-BEk1ucNb.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-DwLgfZRo.js → Dropdown-Depeqs8h.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-BvnHEPxa.js → EmailListRenderer-BA1AKXFR.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-MsMgMTC9.js → FamilyGuardDashboard-BZFbC7Cx.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-Ci0x7pTL.js → Federation-8yPwScKv.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-C2EJGAnp.js → FormItemContext-BVy_AKdW.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-IUljtwjD.js → GenericCardRenderer-D7kFe3QM.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-BX-hBoC5.js → Git-BI_taCzW.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-BIb-35Rd.js → Governance-DIOg1O6M.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-CB0gghy0.js → Inference-CSL-isQ_.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-1BCNC0Oo.js → KnowledgeGraph-iCn8Fvmf.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-D67YXKnU.js → Logs-YMjpW89s.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-BSeDWSKx.js → Marketplace--fNmNRri.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-Cmvac5W5.js → McpTools-DGaQOFxN.js} +3 -3
  35. package/src/assets/web-panel/assets/{Memory-D85lYzCp.js → Memory-DNjUfk5O.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-gPBhV4nP.js → MobileBridge-Ce2Pn2oK.js} +1 -1
  37. package/src/assets/web-panel/assets/{MobileProjects-CXsSTCfe.js → MobileProjects-DaNhq1_x.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-rlDnPtag.js → Mtc-Htf1b8xE.js} +2 -2
  39. package/src/assets/web-panel/assets/{MtcAudit-BO6mqtdr.js → MtcAudit-2IIu0OB3.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-Bk9V9nBV.js → Multisig-BMAUzfxj.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-DZkhnkfw.js → NLProgramming-DsPldroh.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-BbaD_XAo.js → Notes-COLd7vCP.js} +2 -2
  43. package/src/assets/web-panel/assets/{NotificationSettings-BNl0Il7M.js → NotificationSettings-CNzZtI_o.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-DtNoxKG2.js → OrderTableRenderer-6NPy-YHQ.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-Bk_dqC59.js → Organization-DSNHsR4a.js} +2 -2
  46. package/src/assets/web-panel/assets/{Overflow-Cw7Qamv_.js → Overflow-BcAYe_TB.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-FzzSmu_y.js → P2P-B9XhsIKr.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-CeviOv7K.js → PdhVaultBrowser-BR0GWf23.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-IS2FQEgL.js → Permissions-Css2FapO.js} +2 -2
  50. package/src/assets/web-panel/assets/{PersonalDataHub-04ttWHKH.js → PersonalDataHub-DjRdBk_h.js} +2 -2
  51. package/src/assets/web-panel/assets/{Pipeline-Cx9y62wr.js → Pipeline-Cv6hncIf.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-LvvrekzX.js → Privacy-vDC68AoW.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-CJJEetRr.js → ProjectInit-mkoQhgMU.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-drpxq_Yr.js → ProjectSettings-Byl3RnMM.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-DVC8DqeX.js → Projects-CILs2XYD.js} +1 -1
  56. package/src/assets/web-panel/assets/Providers-BCrc0doI.js +1 -0
  57. package/src/assets/web-panel/assets/{QuickAsk-BomqW8Xa.js → QuickAsk-Dt4oMuVS.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-Dka18zh7.js → Recommend-BERAt_xe.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-Ch71xCZL.js → Reputation-BKMmJ1ht.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-2AKWUZzX.js → Row-DtGT9VXo.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-DFMI7djC.js → RssFeed-CU_HDGRB.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-DoxPUkiR.js → Search-Df58g7IV.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-Bf8OErKg.js → Security-Cf9gGz78.js} +2 -2
  64. package/src/assets/web-panel/assets/{Services-DT9GVjgK.js → Services-epoiecXf.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-Do-alAv-.js → Skeleton-C9675HRM.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-_8ktReLz.js → Skills-DnGvHN3A.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-BifGXj02.js → Sla-DRwsKeYG.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-CfhPuhk-.js → SpeechSettings-DqBcNvXF.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-NSvl1-yD.js → SyncSettings-CR50CALR.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-BPZrX6nT.js → Tasks-ncUrJWWO.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-D6i5n_86.js → Templates-CWjIynfa.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-0_EZvyny.js → Tenant-CpIyHDJJ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Terminal-C0bBnwiL.js → Terminal-BVUShXlx.js} +2 -2
  74. package/src/assets/web-panel/assets/{TimelineRenderer-C2vROnU9.js → TimelineRenderer-C0ovMDh_.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-Ck7m-kR2.js → Tokens-BJJfEvw7.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-BKAbnsRZ.js → Trigger-nDr3aXXM.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-FBA1i6cO.js → Trust-DBfuYxaI.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-D6rNOPG6.js → UkeySign-DTUTMPJd.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-CWX3nRYP.js → VideoEditing-CQqkMpBR.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-B-vjWfn0.js → Wallet-84mblhC7.js} +2 -2
  81. package/src/assets/web-panel/assets/{WebAuthn-fqxCcvgZ.js → WebAuthn-xH8iwuYw.js} +2 -2
  82. package/src/assets/web-panel/assets/{WorkflowEditor-CzD0b2bC.js → WorkflowEditor-BAdP685p.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-CLDhnAg0.js → chat-BG05UmOG.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-Bsx0xu94.js → colors-B--izi6g.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-ClNOQCC1.js → compact-item-mhINqcNr.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-C9qwlNzm.js → createContext-BxF4heyS.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-B-PQddh3.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-BjL86m8O.js → hasIn-k6zp6JXy.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CzFKyNlh.js → index-ALaGUTBj.js} +1 -1
  90. package/src/assets/web-panel/assets/index-B8dJqRve.js +1 -0
  91. package/src/assets/web-panel/assets/{index-DSD59ol-.js → index-BQTN9owK.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DjAr8YaL.js → index-Bm4EqCGD.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CwQZwXPJ.js → index-BmqTrBA9.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BMMnqlW5.js → index-BptC59Nw.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-Zu84Ozkn.js → index-BpxmdKly.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DYWR3Fuw.js → index-Bz_W2HMQ.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-C8oEq3hQ.js → index-C3T_jBxU.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BtDnkt0c.js → index-C7E33Rtr.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BrHUhD9x.js → index-C8YjdEoE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Y4uJ30Ah.js → index-C9uMHXAU.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-jvOBxWy6.js → index-CDgK11Jy.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Bt6ZAvMp.js → index-CQ4ARcWQ.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DKsnftoz.js → index-CZY1CcMi.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-3eQIypA8.js → index-C_PP2xgo.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-_0ECrZoI.js → index-CaOJtN9_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-WmVFMlAe.js → index-Cf1HBQJD.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Cz25YHjU.js → index-ClLYJ9Lr.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CzQVC884.js → index-D22mMJcM.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BCsWcWmp.js → index-D4it444p.js} +3 -3
  110. package/src/assets/web-panel/assets/{index-CQeZRo2L.js → index-D50R_x2q.js} +1 -1
  111. package/src/assets/web-panel/assets/index-DA_QbRy1.js +1 -0
  112. package/src/assets/web-panel/assets/{index-X2XknuSQ.js → index-DBeRyDo3.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-lk6R89hG.js → index-DIfHlmg5.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B2zTB67T.js → index-DJ7voWn9.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-D2A--4sc.js → index-DYDTWu56.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Bm9gKRV-.js → index-DZhH_4lu.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CVCY712-.js → index-DbJ9HYUz.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BRDcaAuf.js → index-DcIEV2W9.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DzsUEMdg.js → index-DkGO_kL_.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CVKSsTRh.js → index-DoIbLP_2.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CU5yLwtP.js → index-Dut5fnts.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CKeX2KPo.js → index-Dy6draCr.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-iTw-umm2.js → index-Hrtyb8g4.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-lCvsdviy.js → index-NufO1jVs.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BX9f8Ndq.js → index-YVGxF1lz.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BD00_RPv.js → index-ptTT_8Cw.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-mJ643Df2.js → index-tgxfNjRl.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-BlV5uKWf.js → initDefaultProps-BRO1fie3.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-BoNTPycr.js → motion-B0PeqWDm.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-BoHsTpsz.js → move-DaFHMz5S.js} +1 -1
  131. package/src/assets/web-panel/assets/{mtc-parser-Dx4pix3T.js → mtc-parser-CwRq1H46.js} +1 -1
  132. package/src/assets/web-panel/assets/{omit-Bc_rHmwI.js → omit-BoixPnCY.js} +1 -1
  133. package/src/assets/web-panel/assets/{pickAttrs-C2Gx_OKe.js → pickAttrs-CtG4UyHs.js} +1 -1
  134. package/src/assets/web-panel/assets/{placementArrow-6GK7Cdbb.js → placementArrow-CGzpdN2U.js} +1 -1
  135. package/src/assets/web-panel/assets/{responsiveObserve-CyUw2c3T.js → responsiveObserve-DxtcM-r9.js} +1 -1
  136. package/src/assets/web-panel/assets/{slide-CfzSX_OP.js → slide-oAHegf3-.js} +1 -1
  137. package/src/assets/web-panel/assets/{statusUtils-ibSrlk34.js → statusUtils-Ddl5dLe-.js} +1 -1
  138. package/src/assets/web-panel/assets/{styleChecker-BjNyUO9n.js → styleChecker-4gYXGrlZ.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFlexGapSupport-Df3lrxtE.js → useFlexGapSupport-DB-sP5mv.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFs-ghOdQfsO.js → useFs-cROlRg8N.js} +1 -1
  141. package/src/assets/web-panel/assets/{usePersonalDataHub-B9owuxqJ.js → usePersonalDataHub-COtU3A5K.js} +1 -1
  142. package/src/assets/web-panel/assets/{vnode-uwV_RL8P.js → vnode-Cz2bZGdQ.js} +1 -1
  143. package/src/assets/web-panel/assets/{zoom-C11M_bVH.js → zoom-zhr1SK6Y.js} +1 -1
  144. package/src/assets/web-panel/index.html +1 -1
  145. package/src/commands/agents.js +15 -28
  146. package/src/lib/agents.js +57 -0
  147. package/src/repl/add-dir.js +73 -0
  148. package/src/repl/agent-repl.js +311 -1
  149. package/src/repl/agents-status.js +122 -0
  150. package/src/repl/hooks-status.js +67 -0
  151. package/src/repl/pr-comments.js +197 -0
  152. package/src/repl/release-notes.js +29 -0
  153. package/src/repl/status-summary.js +33 -0
  154. package/src/repl/todos-status.js +65 -0
  155. package/src/assets/web-panel/assets/ChatBubbleRenderer-Cr5q17KH.js +0 -1
  156. package/src/assets/web-panel/assets/Providers-A-plW3Jh.js +0 -1
  157. package/src/assets/web-panel/assets/devWarning-CRAOFndl.js +0 -1
  158. package/src/assets/web-panel/assets/index-BNsQhG7g.js +0 -1
  159. package/src/assets/web-panel/assets/index-Bpggj8w_.js +0 -1
@@ -0,0 +1,197 @@
1
+ /**
2
+ * `/pr-comments` REPL command (Claude-Code parity) — fetch a GitHub pull
3
+ * request's review summaries, conversation comments and inline code comments
4
+ * via the `gh` CLI, format them, and feed the block back as this turn's input
5
+ * so the agent can address the feedback.
6
+ *
7
+ * The pure pieces (parse args + format) are unit-tested; the `gh` calls go
8
+ * through an injected `runGh` so fetchPrComments is testable without a network
9
+ * or a real repo. The REPL (agent-repl.js) wires expandPrComments into the
10
+ * same promptText seam that `/mcp__server__prompt` uses.
11
+ */
12
+ import { execFile } from "child_process";
13
+
14
+ /** Default `gh` runner — resolves stdout, rejects with a friendly message. */
15
+ function defaultRunGh(args) {
16
+ return new Promise((resolve, reject) => {
17
+ execFile(
18
+ "gh",
19
+ args,
20
+ { encoding: "utf-8", maxBuffer: 16 * 1024 * 1024 },
21
+ (err, stdout, stderr) => {
22
+ if (err) {
23
+ if (err.code === "ENOENT") {
24
+ return reject(
25
+ new Error(
26
+ "gh CLI not found — install GitHub CLI (https://cli.github.com) and run `gh auth login`.",
27
+ ),
28
+ );
29
+ }
30
+ return reject(
31
+ new Error(String(stderr || err.message || "gh failed").trim()),
32
+ );
33
+ }
34
+ resolve(stdout);
35
+ },
36
+ );
37
+ });
38
+ }
39
+
40
+ /**
41
+ * Parse `/pr-comments [<n>|<url>] [--repo owner/name]`.
42
+ * @returns {{ pr: number|null, repo: string|null }}
43
+ */
44
+ export function parsePrCommentsArg(line) {
45
+ const rest = String(line || "")
46
+ .trim()
47
+ .replace(/^\/pr-comments\b/, "")
48
+ .trim();
49
+ let pr = null;
50
+ let repo = null;
51
+ const tokens = rest.length ? rest.split(/\s+/) : [];
52
+ for (let i = 0; i < tokens.length; i += 1) {
53
+ const t = tokens[i];
54
+ if (t === "--repo" || t === "-R") {
55
+ repo = tokens[i + 1] || null;
56
+ i += 1;
57
+ } else if (/^\d+$/.test(t)) {
58
+ pr = Number(t);
59
+ } else {
60
+ const m = /github\.com\/([^/]+\/[^/]+)\/pull\/(\d+)/.exec(t);
61
+ if (m) {
62
+ repo = repo || m[1];
63
+ pr = pr ?? Number(m[2]);
64
+ }
65
+ }
66
+ }
67
+ return { pr, repo };
68
+ }
69
+
70
+ /** Indent a (possibly multi-line) comment body under its header. */
71
+ function indentBody(body, indent = " ") {
72
+ const text = String(body || "").trim();
73
+ if (!text) return `${indent}(empty)`;
74
+ return text
75
+ .split(/\r?\n/)
76
+ .map((l) => indent + l)
77
+ .join("\n");
78
+ }
79
+
80
+ /**
81
+ * Format fetched PR comment data into a plain-text block.
82
+ * @param {object} data { number, title, url, reviews[], conversation[], inline[] }
83
+ */
84
+ export function formatPrComments(data) {
85
+ const number = data?.number;
86
+ const reviews = (Array.isArray(data?.reviews) ? data.reviews : []).filter(
87
+ (r) => (r?.body && r.body.trim()) || (r?.state && r.state !== "COMMENTED"),
88
+ );
89
+ const conv = Array.isArray(data?.conversation) ? data.conversation : [];
90
+ const inline = Array.isArray(data?.inline) ? data.inline : [];
91
+
92
+ const lines = [`PR #${number ?? "?"} — ${data?.title || "(no title)"}`];
93
+ if (data?.url) lines.push(data.url);
94
+
95
+ lines.push("", `Reviews (${reviews.length}):`);
96
+ for (const r of reviews) {
97
+ const who = r?.author?.login || r?.user?.login || "?";
98
+ lines.push(` @${who} ${r?.state || ""}`.trimEnd());
99
+ if (r?.body && r.body.trim()) lines.push(indentBody(r.body));
100
+ }
101
+
102
+ lines.push("", `Conversation comments (${conv.length}):`);
103
+ for (const c of conv) {
104
+ const who = c?.author?.login || c?.user?.login || "?";
105
+ lines.push(` @${who}:`);
106
+ lines.push(indentBody(c?.body));
107
+ }
108
+
109
+ lines.push("", `Inline code comments (${inline.length}):`);
110
+ for (const c of inline) {
111
+ const who = c?.user?.login || c?.author?.login || "?";
112
+ const lineNo = c?.line ?? c?.original_line;
113
+ const loc = c?.path
114
+ ? `${c.path}${lineNo != null ? ":" + lineNo : ""}`
115
+ : "?";
116
+ lines.push(` ${loc} @${who}:`);
117
+ lines.push(indentBody(c?.body));
118
+ }
119
+
120
+ return lines.join("\n");
121
+ }
122
+
123
+ /**
124
+ * Fetch a PR's reviews + conversation + inline comments via `gh`.
125
+ * @param {object} opts { pr?: number, repo?: string, deps?: { runGh } }
126
+ */
127
+ export async function fetchPrComments({ pr = null, repo = null, deps } = {}) {
128
+ const runGh = deps?.runGh || defaultRunGh;
129
+ const viewArgs = ["pr", "view"];
130
+ if (pr) viewArgs.push(String(pr));
131
+ if (repo) viewArgs.push("--repo", repo);
132
+ viewArgs.push("--json", "number,title,url,comments,reviews");
133
+ const meta = JSON.parse(await runGh(viewArgs));
134
+ const number = meta?.number;
135
+
136
+ let ownerRepo = repo;
137
+ if (!ownerRepo) {
138
+ const m = /github\.com\/([^/]+\/[^/]+)\/pull\//.exec(meta?.url || "");
139
+ ownerRepo = m ? m[1] : null;
140
+ }
141
+
142
+ let inline = [];
143
+ if (ownerRepo && number) {
144
+ try {
145
+ const raw = await runGh([
146
+ "api",
147
+ `repos/${ownerRepo}/pulls/${number}/comments?per_page=100`,
148
+ ]);
149
+ const parsed = JSON.parse(raw);
150
+ if (Array.isArray(parsed)) inline = parsed;
151
+ } catch {
152
+ // inline review-thread comments are best-effort; the JSON view above is
153
+ // the primary source.
154
+ inline = [];
155
+ }
156
+ }
157
+
158
+ return {
159
+ number,
160
+ title: meta?.title,
161
+ url: meta?.url,
162
+ reviews: Array.isArray(meta?.reviews) ? meta.reviews : [],
163
+ conversation: Array.isArray(meta?.comments) ? meta.comments : [],
164
+ inline,
165
+ };
166
+ }
167
+
168
+ const PR_INSTRUCTION =
169
+ "下面是该 PR 的评审意见(reviews / 评论 / 行内代码评论)。请逐条理解并处理:" +
170
+ "能直接改的就改代码,需要讨论或澄清的给出回应。";
171
+
172
+ /**
173
+ * Expand a `/pr-comments …` line into turn input. Returns
174
+ * `{ number, count, block, text }`, or `null` when the line isn't the command.
175
+ * Throws on fetch failure (the REPL surfaces it and skips the turn).
176
+ */
177
+ export async function expandPrComments(line, { deps } = {}) {
178
+ if (
179
+ !String(line || "")
180
+ .trim()
181
+ .startsWith("/pr-comments")
182
+ )
183
+ return null;
184
+ const { pr, repo } = parsePrCommentsArg(line);
185
+ const data = await fetchPrComments({ pr, repo, deps });
186
+ const block = formatPrComments(data);
187
+ const count =
188
+ (data.reviews?.length || 0) +
189
+ (data.conversation?.length || 0) +
190
+ (data.inline?.length || 0);
191
+ return {
192
+ number: data.number,
193
+ count,
194
+ block,
195
+ text: `${PR_INSTRUCTION}\n\n${block}`,
196
+ };
197
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `/release-notes` REPL command — show the running cc version and point at the
3
+ * full changelog (Claude-Code parity). The npm package ships only bin/ + src/ +
4
+ * README, so rather than bundle a copy of the changelog that would go stale, we
5
+ * surface a reliable pointer to the canonical sources + how to upgrade.
6
+ */
7
+
8
+ export const CHANGELOG_URL = "https://docs.chainlesschain.com/changelog";
9
+ export const RELEASES_URL =
10
+ "https://github.com/chainlesschain/chainlesschain/releases";
11
+
12
+ /**
13
+ * @param {object} info { version, installedVersion }
14
+ */
15
+ export function formatReleaseNotes(info = {}) {
16
+ const lines = [`cc ${info.version || "?"}`];
17
+ if (info.installedVersion && info.installedVersion !== info.version) {
18
+ lines.push(` (disk ${info.installedVersion} — restart to apply)`);
19
+ }
20
+ lines.push(
21
+ "",
22
+ "What's new / 完整更新日志:",
23
+ ` ${CHANGELOG_URL}`,
24
+ ` ${RELEASES_URL}`,
25
+ "",
26
+ "检查更新 / 升级: cc update · npm i -g chainlesschain",
27
+ );
28
+ return lines.join("\n");
29
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * `/status` REPL command — a concise environment snapshot (Claude-Code parity,
3
+ * minus the account/billing bits cc doesn't have). Lighter than `/doctor`'s
4
+ * health check: just "where am I" — version, model, session, cwd, roots, and
5
+ * connection counts. Pure renderer; the REPL gathers the live info.
6
+ */
7
+
8
+ /**
9
+ * @param {object} info
10
+ * version, installedVersion, node, platform, provider, model, sessionId,
11
+ * messageCount, cwd, extraRoots, ideConnected, mcpServers, hookEvents
12
+ */
13
+ export function formatStatus(info = {}) {
14
+ const ver =
15
+ info.installedVersion && info.installedVersion !== info.version
16
+ ? `cc ${info.version} (disk ${info.installedVersion} — restart to apply)`
17
+ : `cc ${info.version || "?"}`;
18
+ const lines = [
19
+ `${ver} · node ${info.node || "?"} · ${info.platform || "?"}`,
20
+ ` provider/model: ${info.provider || "?"} / ${info.model || "?"}`,
21
+ ` session: ${info.sessionId || "(none)"} · messages: ${info.messageCount ?? 0}`,
22
+ ` cwd: ${info.cwd || "?"}`,
23
+ ];
24
+ if (info.extraRoots > 0) {
25
+ lines.push(` extra roots: +${info.extraRoots} (/add-dir)`);
26
+ }
27
+ lines.push(
28
+ ` IDE: ${info.ideConnected ? "connected" : "none"} · ` +
29
+ `MCP: ${info.mcpServers || 0} server(s) · ` +
30
+ `hooks: ${info.hookEvents || 0} event(s)`,
31
+ );
32
+ return lines.join("\n");
33
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Pure renderer for the `/todos` REPL command — a user-facing view of the
3
+ * agent's session TODO list (the one it maintains with the `todo_write` tool).
4
+ * The data comes from todo-manager's getTodos(sessionId); this module only
5
+ * formats it, so it stays deterministic and unit-testable.
6
+ *
7
+ * The agent uses todos to track multi-step work; before this command they were
8
+ * only visible to the model. `/todos` surfaces them to the human, the way
9
+ * Claude Code's /todos view does.
10
+ */
11
+
12
+ /** A short status badge for one todo item. */
13
+ export function todoStatusLabel(status) {
14
+ switch (status) {
15
+ case "in_progress":
16
+ return "▶ in progress";
17
+ case "completed":
18
+ return "✓ done";
19
+ case "cancelled":
20
+ return "✗ cancelled";
21
+ case "pending":
22
+ return "☐ pending";
23
+ default:
24
+ return status || "?";
25
+ }
26
+ }
27
+
28
+ /** Count items by status (tolerant of unknown statuses). */
29
+ export function summarize(todos) {
30
+ const counts = { pending: 0, in_progress: 0, completed: 0, cancelled: 0 };
31
+ for (const t of Array.isArray(todos) ? todos : []) {
32
+ if (counts[t?.status] !== undefined) counts[t.status] += 1;
33
+ }
34
+ return counts;
35
+ }
36
+
37
+ /**
38
+ * Render the session TODO list as a plain-text block.
39
+ * @param {Array} todos from getTodos(sessionId): [{ id, content, status }]
40
+ */
41
+ export function formatTodos(todos) {
42
+ const list = Array.isArray(todos) ? todos : [];
43
+ if (list.length === 0) {
44
+ return (
45
+ "No TODOs for this session.\n" +
46
+ " (The agent tracks multi-step work with the todo_write tool — " +
47
+ "they appear here once it creates some.)"
48
+ );
49
+ }
50
+ const c = summarize(list);
51
+ const lines = [
52
+ `Session TODOs (${list.length}: ${c.completed} done, ` +
53
+ `${c.in_progress} in progress, ${c.pending} pending` +
54
+ (c.cancelled ? `, ${c.cancelled} cancelled` : "") +
55
+ `):`,
56
+ ];
57
+ for (const t of list) {
58
+ const content = String(t?.content || "")
59
+ .replace(/\s+/g, " ")
60
+ .trim();
61
+ const short = content.length > 80 ? content.slice(0, 80) + "…" : content;
62
+ lines.push(` ${todoStatusLabel(t?.status)} ${short}`);
63
+ }
64
+ return lines.join("\n");
65
+ }
@@ -1 +0,0 @@
1
- import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as w,V as x,_ as B,b as s}from"./vendor-BvqAck49.js";import{_ as k}from"./index-BCsWcWmp.js";import"./icons-DP3uiYxy.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(),g=String(e.getMonth()+1).padStart(2,"0"),b=String(e.getDate()).padStart(2,"0"),f=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${g}-${b} ${f}:${h}`}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=v("a-tag");return u(),S("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(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[w(a(t.event.source.adapter),1)]),_:1},8,["color"])):x("v-if",!0)])],2)}const A=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-pwSbgt/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
@@ -1 +0,0 @@
1
- import{E as N,r as k,I as m,J as F,U as d,c as i,K as l,V as u,S as P,F as R,Z as q,o as I,a as A,P as g,Q as x,R as C,_ as E}from"./vendor-BvqAck49.js";import{u as M,_ as H,d as _}from"./index-BCsWcWmp.js";import{a as D,b as W,c as j}from"./parsers-UEvh_ShA.js";import{R as J}from"./icons-DP3uiYxy.js";const B=N("providers",()=>{const K=k(!1),o=k(null),v=k([]),e=k([]),w=k(null);async function U(){const s=M();K.value=!0;try{const{output:f}=await s.execute("llm providers",15e3);v.value=D(f);const p=v.value.find(h=>h.active);p&&(w.value=p.name);const{output:b}=await s.execute("llm models",15e3);e.value=W(b)}catch(f){console.error("Failed to load providers:",f)}finally{K.value=!1}}async function y(s){await M().execute(`llm switch ${s}`,1e4),v.value.forEach(p=>p.active=p.name===s),w.value=s}async function a(s){const f=M();o.value=s;try{const{output:p,exitCode:b}=await f.execute("llm test",3e4),h=v.value.find(L=>L.name===s);return h&&(h.status=b===0?"ok":"error"),b===0}catch{const p=v.value.find(b=>b.name===s);return p&&(p.status="error"),!1}finally{o.value=null}}return{loading:K,testing:o,providers:v,localModels:e,activeProvider:w,loadProviders:U,switchProvider:y,testProvider:a}}),Q={__name:"Providers",setup(K,{expose:o}){o();const v=B(),e=M(),w=k(!1),U=k(!1),y=k(!1),a=A({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let s={};const f=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],p={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},b=f.map(n=>({value:n,label:p[n]||n}));async function h(n){try{await v.switchProvider(n),_.success(`已切换到 ${n}`)}catch(t){_.error(`切换失败: ${t.message}`)}}async function L(n){await v.testProvider(n)?_.success(`${n} 连接正常`):_.warning(`${n} 连接失败,请检查配置`)}async function z(){w.value=!0;try{const{output:n}=await e.execute("config list",15e3),t=j(n);t.provider&&(a.provider=t.provider),t.model&&(a.model=t.model),t.apiKey&&(a.apiKey=t.apiKey),t.baseUrl&&(a.baseUrl=t.baseUrl),t.temperature!==void 0&&(a.temperature=t.temperature),t.maxTokens!==void 0&&(a.maxTokens=t.maxTokens),s={provider:t.provider??"",model:t.model??"",apiKey:t.apiKey??"",baseUrl:t.baseUrl??"",temperature:t.temperature??a.temperature,maxTokens:t.maxTokens??a.maxTokens},_.success("配置已加载")}catch(n){_.error(`加载配置失败: ${n.message}`)}finally{w.value=!1}}async function O(){U.value=!0;const n=[],t=[];try{if(a.provider&&a.provider!==s.provider)try{await e.execute(`config set llm.provider ${a.provider}`,1e4),t.push("provider")}catch(c){n.push(`provider: ${c.message}`)}if(a.model&&a.model!==s.model)try{await e.execute(`config set llm.model ${a.model}`,1e4),t.push("model")}catch(c){n.push(`model: ${c.message}`)}if(a.apiKey&&a.apiKey!==s.apiKey)try{await e.execute(`config set llm.apiKey ${a.apiKey}`,1e4),t.push("apiKey")}catch(c){n.push(`apiKey: ${c.message}`)}if(a.baseUrl!==void 0&&a.baseUrl!==s.baseUrl)try{await e.execute(`config set llm.baseUrl ${a.baseUrl}`,1e4),t.push("baseUrl")}catch(c){n.push(`baseUrl: ${c.message}`)}if(a.temperature!==s.temperature)try{await e.execute(`config set llm.temperature ${a.temperature}`,1e4),t.push("temperature")}catch(c){n.push(`temperature: ${c.message}`)}if(a.maxTokens!==s.maxTokens)try{await e.execute(`config set llm.maxTokens ${a.maxTokens}`,1e4),t.push("maxTokens")}catch(c){n.push(`maxTokens: ${c.message}`)}n.length>0?_.warning(`部分配置保存失败: ${n.join("; ")}`):t.length>0?(_.success(`已保存 ${t.length} 项配置`),s={...a},(t.includes("apiKey")||t.includes("provider")||t.includes("baseUrl")||t.includes("model"))&&(y.value=!0),t.includes("provider")&&v.loadProviders()):_.info("没有检测到配置变更")}catch(c){_.error(`保存配置失败: ${c.message}`)}finally{U.value=!1}}function S(){a.provider=s.provider||void 0,a.model=s.model||"",a.apiKey=s.apiKey||"",a.baseUrl=s.baseUrl||"",a.temperature=s.temperature??.7,a.maxTokens=s.maxTokens??4096}I(()=>{v.loadProviders(),z()});const T={providersStore:v,ws:e,configLoading:w,configSaving:U,showRestartHint:y,configForm:a,get loadedConfig(){return s},set loadedConfig(n){s=n},knownProviders:f,providerLabels:p,providerOptions:b,switchProvider:h,test:L,loadConfig:z,saveConfig:O,resetForm:S,onMounted:I,reactive:A,ref:k,get ReloadOutlined(){return J},get message(){return _},get useProvidersStore(){return B},get useWsStore(){return M},get parseLlmConfigOutput(){return j}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},Z={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},X={key:1,style:{"text-align":"center",padding:"60px"}},Y={class:"providers-grid"},$={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},ee={style:{"font-size":"24px"}},oe={style:{flex:"1"}},ae={style:{color:"#e0e0e0","font-weight":"500"}},te={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},re={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},se={key:0,style:{"margin-top":"24px"}},ne={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},le={class:"config-grid"},de={style:{display:"flex","align-items":"center",gap:"12px"}},ce={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}};function me(K,o,v,e,w,U){const y=m("a-button"),a=m("a-alert"),s=m("a-spin"),f=m("a-tag"),p=m("a-badge"),b=m("a-card"),h=m("a-list-item"),L=m("a-list"),z=m("a-divider"),O=m("a-select"),S=m("a-form-item"),T=m("a-input"),n=m("a-input-password"),t=m("a-slider"),c=m("a-input-number"),V=m("a-form");return g(),F("div",null,[d("div",Z,[o[10]||(o[10]=d("div",null,[d("h2",{class:"page-title"},"LLM 配置"),d("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),i(y,{type:"primary",ghost:"",loading:e.providersStore.loading,onClick:o[0]||(o[0]=r=>e.providersStore.loadProviders())},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[9]||(o[9]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),u(" Active Provider Banner "),e.providersStore.activeProvider?(g(),P(a,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[d("span",null,[o[11]||(o[11]=x("当前激活:",-1)),d("strong",null,C(e.providersStore.activeProvider),1)])]),_:1})):u("v-if",!0),u(" Loading "),e.providersStore.loading?(g(),F("div",X,[i(s,{size:"large"}),o[12]||(o[12]=d("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(g(),F(R,{key:2},[u(" Providers Grid "),d("div",null,[d("div",Y,[(g(!0),F(R,null,q(e.providersStore.providers,r=>(g(),P(b,{key:r.name,class:E(["provider-card",{active:r.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[d("div",$,[d("span",ee,C(r.icon),1),d("div",oe,[d("div",ae,C(r.label),1),d("div",te,C(r.name),1)]),d("div",null,[r.active?(g(),P(f,{key:0,color:"green"},{default:l(()=>[...o[13]||(o[13]=[x("活跃",-1)])]),_:1})):r.status==="ok"?(g(),P(p,{key:1,status:"success",text:""})):r.status==="error"?(g(),P(p,{key:2,status:"error",text:""})):u("v-if",!0)])]),d("div",re,[i(y,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:e.providersStore.testing===r.name,onClick:G=>e.test(r.name)},{default:l(()=>[...o[14]||(o[14]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),r.active?(g(),P(f,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...o[16]||(o[16]=[x("当前",-1)])]),_:1})):(g(),P(y,{key:0,size:"small",type:"primary",ghost:"",onClick:G=>e.switchProvider(r.name)},{default:l(()=>[...o[15]||(o[15]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),u(" Local Models (Ollama) "),e.providersStore.localModels.length?(g(),F("div",se,[o[17]||(o[17]=d("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),i(L,{"data-source":e.providersStore.localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:r})=>[i(h,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[i(f,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(C(r.size||"local"),1)]),_:2},1024)]),default:l(()=>[d("span",ne,C(r.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):u("v-if",!0),u(" LLM Parameter Settings "),i(z,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),e.showRestartHint?(g(),P(a,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:o[1]||(o[1]=r=>e.showRestartHint=!1)})):u("v-if",!0),d("div",ie,[o[19]||(o[19]=d("h3",{class:"section-title"},"LLM 参数设置",-1)),i(y,{size:"small",loading:e.configLoading,onClick:e.loadConfig,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[18]||(o[18]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),i(b,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[i(V,{model:e.configForm,layout:"vertical",class:"config-form"},{default:l(()=>[d("div",le,[u(" Provider "),i(S,{label:"Provider(提供商)"},{default:l(()=>[i(O,{value:e.configForm.provider,"onUpdate:value":o[2]||(o[2]=r=>e.configForm.provider=r),placeholder:"选择 LLM 提供商",options:e.providerOptions,style:{width:"100%"},disabled:e.configSaving},null,8,["value","options","disabled"])]),_:1}),u(" Model "),i(S,{label:"Model(模型名称)"},{default:l(()=>[i(T,{value:e.configForm.model,"onUpdate:value":o[3]||(o[3]=r=>e.configForm.model=r),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" API Key "),i(S,{label:"API Key"},{default:l(()=>[i(n,{value:e.configForm.apiKey,"onUpdate:value":o[4]||(o[4]=r=>e.configForm.apiKey=r),placeholder:"输入 API Key",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Base URL "),i(S,{label:"Base URL"},{default:l(()=>[i(T,{value:e.configForm.baseUrl,"onUpdate:value":o[5]||(o[5]=r=>e.configForm.baseUrl=r),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Temperature "),i(S,{label:"Temperature(温度)"},{default:l(()=>[d("div",de,[i(t,{value:e.configForm.temperature,"onUpdate:value":o[6]||(o[6]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,style:{flex:"1"},disabled:e.configSaving},null,8,["value","disabled"]),i(c,{value:e.configForm.temperature,"onUpdate:value":o[7]||(o[7]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:e.configSaving},null,8,["value","disabled"])])]),_:1}),u(" Max Tokens "),i(S,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[i(c,{value:e.configForm.maxTokens,"onUpdate:value":o[8]||(o[8]=r=>e.configForm.maxTokens=r),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:e.configSaving},null,8,["value","disabled"])]),_:1})]),d("div",ce,[i(y,{onClick:e.resetForm,disabled:e.configSaving,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...o[20]||(o[20]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),i(y,{type:"primary",loading:e.configSaving,onClick:e.saveConfig},{default:l(()=>[...o[21]||(o[21]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})])],2112))])}const ge=H(Q,[["render",me],["__scopeId","data-v-64155d06"],["__file","/tmp/cc-web-panel-pwSbgt/repo/packages/web-panel/src/views/Providers.vue"]]);export{ge as default};
@@ -1 +0,0 @@
1
- import{R as r}from"./index-BCsWcWmp.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-2AKWUZzX.js";import{a0 as t}from"./index-BCsWcWmp.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-CyUw2c3T.js";import"./useFlexGapSupport-Df3lrxtE.js";import"./styleChecker-BjNyUO9n.js";import"./index-DKsnftoz.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-CG_wkd48.js";import{a0 as t}from"./index-BCsWcWmp.js";import"./vendor-BvqAck49.js";import"./index-DKsnftoz.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};