@kafca/agentdock 0.1.22 → 0.1.24

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 (89) hide show
  1. package/README.md +4 -0
  2. package/dist/renderer/assets/{Badge-B_rgzxYO.js → Badge-CXcUMqb-.js} +1 -1
  3. package/dist/renderer/assets/{Chat-CYtp6m7T.js → Chat-BRxdPzi-.js} +1 -1
  4. package/dist/renderer/assets/{ChatMarkdown-DOBMwa9d.js → ChatMarkdown-sWGBIfIb.js} +1 -1
  5. package/dist/renderer/assets/{Config-DppMSPHF.js → Config-DqxuxIGg.js} +1 -1
  6. package/dist/renderer/assets/{CronList-BDtB1SuA.js → CronList-OgHxbti5.js} +1 -1
  7. package/dist/renderer/assets/{Dashboard-iFlRnd7Y.js → Dashboard-DmklXiH1.js} +2 -2
  8. package/dist/renderer/assets/{EmptyState-bKDt_T88.js → EmptyState-BvDmi8dq.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-CKPhKPIg.js → KnowledgeDetail-Bj59Hdpo.js} +2 -2
  10. package/dist/renderer/assets/{KnowledgeHome-CFeJre6i.js → KnowledgeHome-CigQ-nSo.js} +3 -3
  11. package/dist/renderer/assets/{Logs-CyxSVOFK.js → Logs-Bfc7gBpY.js} +1 -1
  12. package/dist/renderer/assets/{Modal-CxPnk1Ey.js → Modal-CfmiFknz.js} +1 -1
  13. package/dist/renderer/assets/{Page-kU9vubzj.js → Page-BxtLEw_b.js} +1 -1
  14. package/dist/renderer/assets/{ProjectDetail-D9FY9NWZ.js → ProjectDetail-CcUphxGm.js} +1 -1
  15. package/dist/renderer/assets/{ProjectList-DIwr2TXg.js → ProjectList-CVkvDIfy.js} +1 -1
  16. package/dist/renderer/assets/{Select-BaWoz5Dn.js → Select-DgQMZ0MD.js} +1 -1
  17. package/dist/renderer/assets/{SessionChat-Cm9CW8Zx.js → SessionChat-CRmGKfBx.js} +1 -1
  18. package/dist/renderer/assets/{SessionList-UPnWlXXO.js → SessionList-D0E8XbYw.js} +1 -1
  19. package/dist/renderer/assets/ThreadChat-DUgqZSBB.js +23 -0
  20. package/dist/renderer/assets/Workspace-Q4g4rlRT.js +14 -0
  21. package/dist/renderer/assets/{arrow-left-BmZAVGV7.js → arrow-left-BySN_zhF.js} +1 -1
  22. package/dist/renderer/assets/{book-open-DZ3GXFgI.js → book-open-BGlrnrTc.js} +1 -1
  23. package/dist/renderer/assets/{check-CeVSvDCv.js → check-BiJogEa5.js} +1 -1
  24. package/dist/renderer/assets/{chevron-down-yryuMoQ-.js → chevron-down-D2fHRJv6.js} +1 -1
  25. package/dist/renderer/assets/{circle-eASsFISH.js → circle-CIcjixmI.js} +1 -1
  26. package/dist/renderer/assets/desktop-DAXY9Bxv.js +4 -0
  27. package/dist/renderer/assets/desktop-DyA_NYew.js +1 -0
  28. package/dist/renderer/assets/{funnel-pwAe2Ixp.js → funnel-BUzwb-id.js} +1 -1
  29. package/dist/renderer/assets/{heart-B2Sp-bCm.js → heart-DZEQ1z_V.js} +1 -1
  30. package/dist/renderer/assets/{index-BC3MWbS1.js → index-CB_KyLOr.js} +39 -39
  31. package/dist/renderer/assets/{index-Cse2Br64.js → index-DgsIo4vJ.js} +3 -3
  32. package/dist/renderer/assets/{pencil-BfEunUF3.js → pencil-DGL4agcl.js} +1 -1
  33. package/dist/renderer/assets/{play-Dcs9Lj_Z.js → play-DzasCLM4.js} +1 -1
  34. package/dist/renderer/assets/{plug-B_YschQe.js → plug-dubNMe_m.js} +1 -1
  35. package/dist/renderer/assets/{plus-Pqo-cXHQ.js → plus-DN4kML4k.js} +1 -1
  36. package/dist/renderer/assets/projects-migPtfRe.js +1 -0
  37. package/dist/renderer/assets/{save-BKM5yi1A.js → save-CNIc9tjl.js} +1 -1
  38. package/dist/renderer/assets/{search-BU42h10M.js → search-C0EGbF3I.js} +1 -1
  39. package/dist/renderer/assets/{server-DA5t3Rtr.js → server-BMxQ4zmc.js} +1 -1
  40. package/dist/renderer/assets/{session-utils-Cr9VhNSq.js → session-utils-Bf5O-iMi.js} +1 -1
  41. package/dist/renderer/assets/{sessions-bvV8ZMfX.js → sessions-BMSs6rEI.js} +1 -1
  42. package/dist/renderer/assets/{shield-check-BeOJKur_.js → shield-check-i3Tf1TUz.js} +1 -1
  43. package/dist/renderer/assets/{trash-2-CQ7HKO3q.js → trash-2-SKrcp18f.js} +1 -1
  44. package/dist/renderer/assets/{user-CtFjY9SV.js → user-cNUZddjZ.js} +1 -1
  45. package/dist/renderer/assets/{wifi-off-Ci5m0ysf.js → wifi-off-Dyb84ANR.js} +1 -1
  46. package/dist/renderer/index.html +1 -1
  47. package/dist-electron/electron/channel-content.test.js +29 -0
  48. package/dist-electron/electron/lac-cli.test.js +49 -4
  49. package/dist-electron/electron/local-core-acp-content.test.js +39 -0
  50. package/dist-electron/electron/local-core-contracts.test.js +67 -0
  51. package/dist-electron/electron/local-core-refactor.test.js +628 -0
  52. package/dist-electron/electron/plugin-kernel.test.js +74 -14
  53. package/dist-electron/electron/workspace-task-store.test.js +124 -0
  54. package/dist-electron/packages/contracts/src/local-core.js +110 -0
  55. package/dist-electron/packages/core-sdk/src/index.js +40 -20
  56. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-content.js +25 -4
  57. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-response-processor.js +3 -2
  58. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-store.js +44 -28
  59. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +5 -1
  60. package/dist-electron/services/local-ai-core/src/acp/workspace-acp-permissions.js +15 -6
  61. package/dist-electron/services/local-ai-core/src/channel/lark/cards.js +210 -0
  62. package/dist-electron/services/local-ai-core/src/channel/lark/config.js +54 -0
  63. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +280 -496
  64. package/dist-electron/services/local-ai-core/src/channel/lark/registration.js +50 -0
  65. package/dist-electron/services/local-ai-core/src/channel/lark/runtime-state.js +191 -0
  66. package/dist-electron/services/local-ai-core/src/channel/lark/types.js +2 -0
  67. package/dist-electron/services/local-ai-core/src/channel/shared/content.js +23 -0
  68. package/dist-electron/services/local-ai-core/src/channel/shared/plugin.js +31 -0
  69. package/dist-electron/services/local-ai-core/src/channel/weixin/config.js +125 -0
  70. package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +164 -352
  71. package/dist-electron/services/local-ai-core/src/channel/weixin/transport.js +169 -0
  72. package/dist-electron/services/local-ai-core/src/channel/weixin/types.js +2 -0
  73. package/dist-electron/services/local-ai-core/src/cli/lac.js +19 -16
  74. package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +5 -0
  75. package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-lark-plugin.js +18 -39
  76. package/dist-electron/services/local-ai-core/src/plugins/builtin/channel-weixin-plugin.js +18 -39
  77. package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +55 -44
  78. package/dist-electron/services/local-ai-core/src/runtime/server.js +10 -8
  79. package/dist-electron/services/local-ai-core/src/scheduler/job-id.js +15 -0
  80. package/dist-electron/services/local-ai-core/src/scheduler/scheduler-service.js +30 -5
  81. package/dist-electron/shared/desktop.js +37 -5
  82. package/dist-electron/src/pages/Threads/thread-chat-model.js +57 -0
  83. package/dist-electron/src/pages/Threads/thread-chat-permission.test.js +70 -0
  84. package/package.json +1 -1
  85. package/dist/renderer/assets/ThreadChat-YvVsACW3.js +0 -23
  86. package/dist/renderer/assets/Workspace-ST7V8u6T.js +0 -14
  87. package/dist/renderer/assets/desktop-Che1cbpE.js +0 -4
  88. package/dist/renderer/assets/desktop-DkrP_s-b.js +0 -1
  89. package/dist/renderer/assets/projects-BCj0k_Gy.js +0 -1
@@ -1,14 +0,0 @@
1
- import{c as rt,y as j,t as st,r as A,j as n,B as I,I as T,S as nt}from"./index-BC3MWbS1.js";import{M as Oe}from"./Modal-CxPnk1Ey.js";import{S as ae}from"./Select-BaWoz5Dn.js";import{E as he}from"./EmptyState-bKDt_T88.js";import{P as at,S as Te,a as ot}from"./Page-kU9vubzj.js";import{c as it,d as Le,e as lt,f as ct}from"./desktop-DkrP_s-b.js";import{D as me,c as $e,g as fe,d as dt,e as ut}from"./desktop-Che1cbpE.js";import{T as ge}from"./trash-2-CQ7HKO3q.js";import{P as ee}from"./plus-Pqo-cXHQ.js";import{S as ze}from"./save-BKM5yi1A.js";import"./index-Cse2Br64.js";import"./chevron-down-yryuMoQ-.js";import"./check-CeVSvDCv.js";/**
2
- * @license lucide-react v0.487.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const ht=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],mt=rt("qr-code",ht);var ft=Object.defineProperty,ie=Object.getOwnPropertySymbols,He=Object.prototype.hasOwnProperty,Ye=Object.prototype.propertyIsEnumerable,Fe=(c,d,o)=>d in c?ft(c,d,{enumerable:!0,configurable:!0,writable:!0,value:o}):c[d]=o,xe=(c,d)=>{for(var o in d||(d={}))He.call(d,o)&&Fe(c,o,d[o]);if(ie)for(var o of ie(d))Ye.call(d,o)&&Fe(c,o,d[o]);return c},ve=(c,d)=>{var o={};for(var h in c)He.call(c,h)&&d.indexOf(h)<0&&(o[h]=c[h]);if(c!=null&&ie)for(var h of ie(c))d.indexOf(h)<0&&Ye.call(c,h)&&(o[h]=c[h]);return o};/**
7
- * @license QR Code generator library (TypeScript)
8
- * Copyright (c) Project Nayuki.
9
- * SPDX-License-Identifier: MIT
10
- */var W;(c=>{const d=class C{constructor(e,r,t,a){if(this.version=e,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],e<C.MIN_VERSION||e>C.MAX_VERSION)throw new RangeError("Version value out of range");if(a<-1||a>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let l=[];for(let m=0;m<this.size;m++)l.push(!1);for(let m=0;m<this.size;m++)this.modules.push(l.slice()),this.isFunction.push(l.slice());this.drawFunctionPatterns();const u=this.addEccAndInterleave(t);if(this.drawCodewords(u),a==-1){let m=1e9;for(let g=0;g<8;g++){this.applyMask(g),this.drawFormatBits(g);const p=this.getPenaltyScore();p<m&&(a=g,m=p),this.applyMask(g)}}x(0<=a&&a<=7),this.mask=a,this.applyMask(a),this.drawFormatBits(a),this.isFunction=[]}static encodeText(e,r){const t=c.QrSegment.makeSegments(e);return C.encodeSegments(t,r)}static encodeBinary(e,r){const t=c.QrSegment.makeBytes(e);return C.encodeSegments([t],r)}static encodeSegments(e,r,t=1,a=40,l=-1,u=!0){if(!(C.MIN_VERSION<=t&&t<=a&&a<=C.MAX_VERSION)||l<-1||l>7)throw new RangeError("Invalid value");let m,g;for(m=t;;m++){const w=C.getNumDataCodewords(m,r)*8,N=M.getTotalBits(e,m);if(N<=w){g=N;break}if(m>=a)throw new RangeError("Data too long")}for(const w of[C.Ecc.MEDIUM,C.Ecc.QUARTILE,C.Ecc.HIGH])u&&g<=C.getNumDataCodewords(m,w)*8&&(r=w);let p=[];for(const w of e){o(w.mode.modeBits,4,p),o(w.numChars,w.mode.numCharCountBits(m),p);for(const N of w.getData())p.push(N)}x(p.length==g);const R=C.getNumDataCodewords(m,r)*8;x(p.length<=R),o(0,Math.min(4,R-p.length),p),o(0,(8-p.length%8)%8,p),x(p.length%8==0);for(let w=236;p.length<R;w^=253)o(w,8,p);let k=[];for(;k.length*8<p.length;)k.push(0);return p.forEach((w,N)=>k[N>>>3]|=w<<7-(N&7)),new C(m,r,k,l)}getModule(e,r){return 0<=e&&e<this.size&&0<=r&&r<this.size&&this.modules[r][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let t=0;t<this.size;t++)this.setFunctionModule(6,t,t%2==0),this.setFunctionModule(t,6,t%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),r=e.length;for(let t=0;t<r;t++)for(let a=0;a<r;a++)t==0&&a==0||t==0&&a==r-1||t==r-1&&a==0||this.drawAlignmentPattern(e[t],e[a]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const r=this.errorCorrectionLevel.formatBits<<3|e;let t=r;for(let l=0;l<10;l++)t=t<<1^(t>>>9)*1335;const a=(r<<10|t)^21522;x(a>>>15==0);for(let l=0;l<=5;l++)this.setFunctionModule(8,l,h(a,l));this.setFunctionModule(8,7,h(a,6)),this.setFunctionModule(8,8,h(a,7)),this.setFunctionModule(7,8,h(a,8));for(let l=9;l<15;l++)this.setFunctionModule(14-l,8,h(a,l));for(let l=0;l<8;l++)this.setFunctionModule(this.size-1-l,8,h(a,l));for(let l=8;l<15;l++)this.setFunctionModule(8,this.size-15+l,h(a,l));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;const r=this.version<<12|e;x(r>>>18==0);for(let t=0;t<18;t++){const a=h(r,t),l=this.size-11+t%3,u=Math.floor(t/3);this.setFunctionModule(l,u,a),this.setFunctionModule(u,l,a)}}drawFinderPattern(e,r){for(let t=-4;t<=4;t++)for(let a=-4;a<=4;a++){const l=Math.max(Math.abs(a),Math.abs(t)),u=e+a,m=r+t;0<=u&&u<this.size&&0<=m&&m<this.size&&this.setFunctionModule(u,m,l!=2&&l!=4)}}drawAlignmentPattern(e,r){for(let t=-2;t<=2;t++)for(let a=-2;a<=2;a++)this.setFunctionModule(e+a,r+t,Math.max(Math.abs(a),Math.abs(t))!=1)}setFunctionModule(e,r,t){this.modules[r][e]=t,this.isFunction[r][e]=!0}addEccAndInterleave(e){const r=this.version,t=this.errorCorrectionLevel;if(e.length!=C.getNumDataCodewords(r,t))throw new RangeError("Invalid argument");const a=C.NUM_ERROR_CORRECTION_BLOCKS[t.ordinal][r],l=C.ECC_CODEWORDS_PER_BLOCK[t.ordinal][r],u=Math.floor(C.getNumRawDataModules(r)/8),m=a-u%a,g=Math.floor(u/a);let p=[];const R=C.reedSolomonComputeDivisor(l);for(let w=0,N=0;w<a;w++){let _=e.slice(N,N+g-l+(w<m?0:1));N+=_.length;const $=C.reedSolomonComputeRemainder(_,R);w<m&&_.push(0),p.push(_.concat($))}let k=[];for(let w=0;w<p[0].length;w++)p.forEach((N,_)=>{(w!=g-l||_>=m)&&k.push(N[w])});return x(k.length==u),k}drawCodewords(e){if(e.length!=Math.floor(C.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let r=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let a=0;a<this.size;a++)for(let l=0;l<2;l++){const u=t-l,g=(t+1&2)==0?this.size-1-a:a;!this.isFunction[g][u]&&r<e.length*8&&(this.modules[g][u]=h(e[r>>>3],7-(r&7)),r++)}}x(r==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let r=0;r<this.size;r++)for(let t=0;t<this.size;t++){let a;switch(e){case 0:a=(t+r)%2==0;break;case 1:a=r%2==0;break;case 2:a=t%3==0;break;case 3:a=(t+r)%3==0;break;case 4:a=(Math.floor(t/3)+Math.floor(r/2))%2==0;break;case 5:a=t*r%2+t*r%3==0;break;case 6:a=(t*r%2+t*r%3)%2==0;break;case 7:a=((t+r)%2+t*r%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[r][t]&&a&&(this.modules[r][t]=!this.modules[r][t])}}getPenaltyScore(){let e=0;for(let l=0;l<this.size;l++){let u=!1,m=0,g=[0,0,0,0,0,0,0];for(let p=0;p<this.size;p++)this.modules[l][p]==u?(m++,m==5?e+=C.PENALTY_N1:m>5&&e++):(this.finderPenaltyAddHistory(m,g),u||(e+=this.finderPenaltyCountPatterns(g)*C.PENALTY_N3),u=this.modules[l][p],m=1);e+=this.finderPenaltyTerminateAndCount(u,m,g)*C.PENALTY_N3}for(let l=0;l<this.size;l++){let u=!1,m=0,g=[0,0,0,0,0,0,0];for(let p=0;p<this.size;p++)this.modules[p][l]==u?(m++,m==5?e+=C.PENALTY_N1:m>5&&e++):(this.finderPenaltyAddHistory(m,g),u||(e+=this.finderPenaltyCountPatterns(g)*C.PENALTY_N3),u=this.modules[p][l],m=1);e+=this.finderPenaltyTerminateAndCount(u,m,g)*C.PENALTY_N3}for(let l=0;l<this.size-1;l++)for(let u=0;u<this.size-1;u++){const m=this.modules[l][u];m==this.modules[l][u+1]&&m==this.modules[l+1][u]&&m==this.modules[l+1][u+1]&&(e+=C.PENALTY_N2)}let r=0;for(const l of this.modules)r=l.reduce((u,m)=>u+(m?1:0),r);const t=this.size*this.size,a=Math.ceil(Math.abs(r*20-t*10)/t)-1;return x(0<=a&&a<=9),e+=a*C.PENALTY_N4,x(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,r=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let t=[6];for(let a=this.size-7;t.length<e;a-=r)t.splice(1,0,a);return t}}static getNumRawDataModules(e){if(e<C.MIN_VERSION||e>C.MAX_VERSION)throw new RangeError("Version number out of range");let r=(16*e+128)*e+64;if(e>=2){const t=Math.floor(e/7)+2;r-=(25*t-10)*t-55,e>=7&&(r-=36)}return x(208<=r&&r<=29648),r}static getNumDataCodewords(e,r){return Math.floor(C.getNumRawDataModules(e)/8)-C.ECC_CODEWORDS_PER_BLOCK[r.ordinal][e]*C.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let r=[];for(let a=0;a<e-1;a++)r.push(0);r.push(1);let t=1;for(let a=0;a<e;a++){for(let l=0;l<r.length;l++)r[l]=C.reedSolomonMultiply(r[l],t),l+1<r.length&&(r[l]^=r[l+1]);t=C.reedSolomonMultiply(t,2)}return r}static reedSolomonComputeRemainder(e,r){let t=r.map(a=>0);for(const a of e){const l=a^t.shift();t.push(0),r.forEach((u,m)=>t[m]^=C.reedSolomonMultiply(u,l))}return t}static reedSolomonMultiply(e,r){if(e>>>8||r>>>8)throw new RangeError("Byte out of range");let t=0;for(let a=7;a>=0;a--)t=t<<1^(t>>>7)*285,t^=(r>>>a&1)*e;return x(t>>>8==0),t}finderPenaltyCountPatterns(e){const r=e[1];x(r<=this.size*3);const t=r>0&&e[2]==r&&e[3]==r*3&&e[4]==r&&e[5]==r;return(t&&e[0]>=r*4&&e[6]>=r?1:0)+(t&&e[6]>=r*4&&e[0]>=r?1:0)}finderPenaltyTerminateAndCount(e,r,t){return e&&(this.finderPenaltyAddHistory(r,t),r=0),r+=this.size,this.finderPenaltyAddHistory(r,t),this.finderPenaltyCountPatterns(t)}finderPenaltyAddHistory(e,r){r[0]==0&&(e+=this.size),r.pop(),r.unshift(e)}};d.MIN_VERSION=1,d.MAX_VERSION=40,d.PENALTY_N1=3,d.PENALTY_N2=3,d.PENALTY_N3=40,d.PENALTY_N4=10,d.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],d.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],c.QrCode=d;function o(E,e,r){if(e<0||e>31||E>>>e)throw new RangeError("Value out of range");for(let t=e-1;t>=0;t--)r.push(E>>>t&1)}function h(E,e){return(E>>>e&1)!=0}function x(E){if(!E)throw new Error("Assertion error")}const v=class P{constructor(e,r,t){if(this.mode=e,this.numChars=r,this.bitData=t,r<0)throw new RangeError("Invalid argument");this.bitData=t.slice()}static makeBytes(e){let r=[];for(const t of e)o(t,8,r);return new P(P.Mode.BYTE,e.length,r)}static makeNumeric(e){if(!P.isNumeric(e))throw new RangeError("String contains non-numeric characters");let r=[];for(let t=0;t<e.length;){const a=Math.min(e.length-t,3);o(parseInt(e.substring(t,t+a),10),a*3+1,r),t+=a}return new P(P.Mode.NUMERIC,e.length,r)}static makeAlphanumeric(e){if(!P.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let r=[],t;for(t=0;t+2<=e.length;t+=2){let a=P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t))*45;a+=P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t+1)),o(a,11,r)}return t<e.length&&o(P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t)),6,r),new P(P.Mode.ALPHANUMERIC,e.length,r)}static makeSegments(e){return e==""?[]:P.isNumeric(e)?[P.makeNumeric(e)]:P.isAlphanumeric(e)?[P.makeAlphanumeric(e)]:[P.makeBytes(P.toUtf8ByteArray(e))]}static makeEci(e){let r=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)o(e,8,r);else if(e<16384)o(2,2,r),o(e,14,r);else if(e<1e6)o(6,3,r),o(e,21,r);else throw new RangeError("ECI assignment value out of range");return new P(P.Mode.ECI,0,r)}static isNumeric(e){return P.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return P.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,r){let t=0;for(const a of e){const l=a.mode.numCharCountBits(r);if(a.numChars>=1<<l)return 1/0;t+=4+l+a.bitData.length}return t}static toUtf8ByteArray(e){e=encodeURI(e);let r=[];for(let t=0;t<e.length;t++)e.charAt(t)!="%"?r.push(e.charCodeAt(t)):(r.push(parseInt(e.substring(t+1,t+3),16)),t+=2);return r}};v.NUMERIC_REGEX=/^[0-9]*$/,v.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,v.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let M=v;c.QrSegment=v})(W||(W={}));(c=>{(d=>{const o=class{constructor(x,v){this.ordinal=x,this.formatBits=v}};o.LOW=new o(0,1),o.MEDIUM=new o(1,0),o.QUARTILE=new o(2,3),o.HIGH=new o(3,2),d.Ecc=o})(c.QrCode||(c.QrCode={}))})(W||(W={}));(c=>{(d=>{const o=class{constructor(x,v){this.modeBits=x,this.numBitsCharCount=v}numCharCountBits(x){return this.numBitsCharCount[Math.floor((x+7)/17)]}};o.NUMERIC=new o(1,[10,12,14]),o.ALPHANUMERIC=new o(2,[9,11,13]),o.BYTE=new o(4,[8,16,16]),o.KANJI=new o(8,[8,10,12]),o.ECI=new o(7,[0,0,0]),d.Mode=o})(c.QrSegment||(c.QrSegment={}))})(W||(W={}));var K=W;/**
11
- * @license qrcode.react
12
- * Copyright (c) Paul O'Shannessy
13
- * SPDX-License-Identifier: ISC
14
- */var gt={L:K.QrCode.Ecc.LOW,M:K.QrCode.Ecc.MEDIUM,Q:K.QrCode.Ecc.QUARTILE,H:K.QrCode.Ecc.HIGH},Ge=128,We="L",Ve="#FFFFFF",Ke="#000000",Xe=!1,qe=1,pt=4,xt=0,vt=.1;function Je(c,d=0){const o=[];return c.forEach(function(h,x){let v=null;h.forEach(function(M,E){if(!M&&v!==null){o.push(`M${v+d} ${x+d}h${E-v}v1H${v+d}z`),v=null;return}if(E===h.length-1){if(!M)return;v===null?o.push(`M${E+d},${x+d} h1v1H${E+d}z`):o.push(`M${v+d},${x+d} h${E+1-v}v1H${v+d}z`);return}M&&v===null&&(v=E)})}),o.join("")}function Ze(c,d){return c.slice().map((o,h)=>h<d.y||h>=d.y+d.h?o:o.map((x,v)=>v<d.x||v>=d.x+d.w?x:!1))}function bt(c,d,o,h){if(h==null)return null;const x=c.length+o*2,v=Math.floor(d*vt),M=x/d,E=(h.width||v)*M,e=(h.height||v)*M,r=h.x==null?c.length/2-E/2:h.x*M,t=h.y==null?c.length/2-e/2:h.y*M,a=h.opacity==null?1:h.opacity;let l=null;if(h.excavate){let m=Math.floor(r),g=Math.floor(t),p=Math.ceil(E+r-m),R=Math.ceil(e+t-g);l={x:m,y:g,w:p,h:R}}const u=h.crossOrigin;return{x:r,y:t,h:e,w:E,excavation:l,opacity:a,crossOrigin:u}}function wt(c,d){return d!=null?Math.max(Math.floor(d),0):c?pt:xt}function et({value:c,level:d,minVersion:o,includeMargin:h,marginSize:x,imageSettings:v,size:M,boostLevel:E}){let e=j.useMemo(()=>{const m=(Array.isArray(c)?c:[c]).reduce((g,p)=>(g.push(...K.QrSegment.makeSegments(p)),g),[]);return K.QrCode.encodeSegments(m,gt[d],o,void 0,void 0,E)},[c,d,o,E]);const{cells:r,margin:t,numCells:a,calculatedImageSettings:l}=j.useMemo(()=>{let u=e.getModules();const m=wt(h,x),g=u.length+m*2,p=bt(u,M,m,v);return{cells:u,margin:m,numCells:g,calculatedImageSettings:p}},[e,M,v,h,x]);return{qrcode:e,margin:t,cells:r,numCells:a,calculatedImageSettings:l}}var yt=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),Ct=j.forwardRef(function(d,o){const h=d,{value:x,size:v=Ge,level:M=We,bgColor:E=Ve,fgColor:e=Ke,includeMargin:r=Xe,minVersion:t=qe,boostLevel:a,marginSize:l,imageSettings:u}=h,g=ve(h,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:p}=g,R=ve(g,["style"]),k=u==null?void 0:u.src,w=j.useRef(null),N=j.useRef(null),_=j.useCallback(L=>{w.current=L,typeof o=="function"?o(L):o&&(o.current=L)},[o]),[$,V]=j.useState(!1),{margin:S,cells:H,numCells:z,calculatedImageSettings:y}=et({value:x,level:M,minVersion:t,boostLevel:a,includeMargin:r,marginSize:l,imageSettings:u,size:v});j.useEffect(()=>{if(w.current!=null){const L=w.current,F=L.getContext("2d");if(!F)return;let Y=H;const G=N.current,se=y!=null&&G!==null&&G.complete&&G.naturalHeight!==0&&G.naturalWidth!==0;se&&y.excavation!=null&&(Y=Ze(H,y.excavation));const X=window.devicePixelRatio||1;L.height=L.width=v*X;const U=v/z*X;F.scale(U,U),F.fillStyle=E,F.fillRect(0,0,z,z),F.fillStyle=e,yt?F.fill(new Path2D(Je(Y,S))):H.forEach(function(le,ce){le.forEach(function(de,ue){de&&F.fillRect(ue+S,ce+S,1,1)})}),y&&(F.globalAlpha=y.opacity),se&&F.drawImage(G,y.x+S,y.y+S,y.w,y.h)}}),j.useEffect(()=>{V(!1)},[k]);const re=xe({height:v,width:v},p);let D=null;return k!=null&&(D=j.createElement("img",{src:k,key:k,style:{display:"none"},onLoad:()=>{V(!0)},ref:N,crossOrigin:y==null?void 0:y.crossOrigin})),j.createElement(j.Fragment,null,j.createElement("canvas",xe({style:re,height:v,width:v,ref:_,role:"img"},R)),D)});Ct.displayName="QRCodeCanvas";var tt=j.forwardRef(function(d,o){const h=d,{value:x,size:v=Ge,level:M=We,bgColor:E=Ve,fgColor:e=Ke,includeMargin:r=Xe,minVersion:t=qe,boostLevel:a,title:l,marginSize:u,imageSettings:m}=h,g=ve(h,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:p,cells:R,numCells:k,calculatedImageSettings:w}=et({value:x,level:M,minVersion:t,boostLevel:a,includeMargin:r,marginSize:u,imageSettings:m,size:v});let N=R,_=null;m!=null&&w!=null&&(w.excavation!=null&&(N=Ze(R,w.excavation)),_=j.createElement("image",{href:m.src,height:w.h,width:w.w,x:w.x+p,y:w.y+p,preserveAspectRatio:"none",opacity:w.opacity,crossOrigin:w.crossOrigin}));const $=Je(N,p);return j.createElement("svg",xe({height:v,width:v,viewBox:`0 0 ${k} ${k}`,ref:o,role:"img"},g),!!l&&j.createElement("title",null,l),j.createElement("path",{fill:E,d:`M0,0 h${k}v${k}H0z`,shapeRendering:"crispEdges"}),j.createElement("path",{fill:e,d:$,shapeRendering:"crispEdges"}),_)});tt.displayName="QRCodeSVG";const Q="__custom__",pe=["weixin","lark"],be=[{id:"openai",label:"OpenAI",name:"openai",base_url:"https://api.openai.com/v1",model:"gpt-4.1-mini"},{id:"openrouter",label:"OpenRouter",name:"openrouter",base_url:"https://openrouter.ai/api/v1",model:"openai/gpt-4.1-mini"},{id:"anthropic",label:"Anthropic",name:"anthropic",base_url:"https://api.anthropic.com/v1",model:"claude-3-5-haiku-latest"},{id:"minimax",label:"Minimax",name:"minimax",base_url:"https://api.minimax.chat/v1",model:"MiniMax-M2.5"},{id:"ollama",label:"Ollama",name:"ollama",base_url:"http://127.0.0.1:11434/v1",model:"qwen2.5-coder:7b"}];function B(c){return JSON.parse(JSON.stringify(c))}function te(c){return Array.isArray(c.projects)||(c.projects=[]),c.projects}function Et(c){const d=new Set(c.map(h=>h.name).filter(Boolean));let o=c.length+1;for(;d.has(`project-${o}`);)o+=1;return{name:`project-${o}`,agentType:ut,workDir:"",model:""}}function oe(c){var d,o,h,x,v;return{...c,agent:{...c.agent,options:{...((d=c.agent)==null?void 0:d.options)||{},model:$e((o=c.agent)==null?void 0:o.type,String(((x=(h=c.agent)==null?void 0:h.options)==null?void 0:x.model)||""))},providers:((v=c.agent)==null?void 0:v.providers)||[]},platforms:c.platforms||[]}}function Be(c,d){return d.includes(c)?c:Q}function kt(c){var d;return((d=be.find(o=>c.name===o.name||o.base_url&&c.base_url===o.base_url||o.model&&c.model===o.model&&c.name===o.name))==null?void 0:d.id)||Q}function Nt(c,d){const o=be.find(h=>h.id===d);return o?{...c,name:o.name,base_url:o.base_url,model:o.model}:c}function Ue(c="weixin"){return{type:c,options:{}}}function Qe(c){const d=c.type==="feishu"?"lark":c.type,o=c.options&&typeof c.options=="object"?{...c.options}:{};return d==="weixin"?{type:d,options:{...o}}:d==="lark"?{type:d,options:{...o,app_id:String(o.app_id||"").trim(),app_secret:String(o.app_secret||"").trim(),card_actions:o.card_actions===!0}}:{type:d,options:o}}function Pt(c){var d;if(c.type==="weixin")return"WeChat QR login";if(c.type==="lark"){const o=String(((d=c.options)==null?void 0:d.app_id)||"").trim();return o?`App ID ${o}`:"App ID and secret required"}return"Custom platform"}function Mt(c){var h,x;const d=String(((x=(h=c.agent)==null?void 0:h.options)==null?void 0:x.work_dir)||"").trim();return d?d.replace(/\/+$/,"").split("/").filter(Boolean).pop()||d:"No work directory"}function jt(c){return c==="success"?"border-primary/20 bg-primary/10 text-primary dark:border-primary/25 dark:bg-primary/10 dark:text-blue-200":c==="warning"?"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200":"border-red-200 bg-red-50 text-red-700 dark:border-red-400/20 dark:bg-red-500/10 dark:text-red-200"}function Ht(){var we,ye,Ce,Ee,ke,Ne,Pe,Me,je,Se,Ae,Re,Ie,_e,De;const[c,d]=st(),o=c.get("project")||"",[h,x]=A.useState(null),[v,M]=A.useState(null),[E,e]=A.useState(0),[r,t]=A.useState("basic"),[a,l]=A.useState(null),[u,m]=A.useState(null),[g,p]=A.useState(null),[R,k]=A.useState(!1),[w,N]=A.useState(!0),[_,$]=A.useState(""),[V,S]=A.useState(null),H=A.useCallback(async(s="")=>{N(!0);try{const i=await it(),f=B(i.parsed||{});if(f.projects=te(f).map(b=>oe(b)),x(f),M(B(f)),s){const b=(f.projects||[]).findIndex(O=>O.name===s);e(b>=0?b:0)}}catch(i){S({tone:"error",message:i instanceof Error?i.message:String(i)})}finally{N(!1)}},[]);A.useEffect(()=>{H(o)},[H]);const z=(h==null?void 0:h.projects)||[],y=z[E]||null,re=JSON.stringify(h||{})!==JSON.stringify(v||{});A.useEffect(()=>{if(!h||!o)return;const s=z.findIndex(i=>i.name===o);s>=0&&s!==E&&e(s)},[h,z,o,E]);const D=A.useCallback(s=>{x(i=>{if(!i)return i;const f=B(i),b=te(f),O=b[E];return O?(b[E]=oe(s(O)),f):i})},[E]),L=A.useCallback((s,i)=>{D(f=>{const b=[...f.agent.providers||[]],O=b[s];return O?(b[s]=i(O),{...f,agent:{...f.agent,providers:b}}):f})},[D]),F=()=>{l(Et(z))},Y=s=>{l(i=>i&&{...i,...s})},G=()=>{if(!a)return;const s=a.name.trim(),i=a.agentType.trim(),f=a.workDir.trim(),b=a.model.trim();if(!s||!i||!f){S({tone:"warning",message:"Project name, agent type, and work directory are required."});return}if(z.some(J=>J.name===s)){S({tone:"warning",message:`Project "${s}" already exists.`});return}const O=oe({name:s,agent:{type:i,options:{model:b||fe(i),work_dir:f},providers:[]},platforms:[],admin_from:"",disabled_commands:[]}),q=z.length;x(J=>{const Z=B(J||{});return te(Z).push(O),Z}),e(q),d({project:s}),l(null),S(null)},se=s=>{x(i=>{if(!i)return i;const f=B(i),b=te(f);return b.splice(s,1),e(Math.max(0,Math.min(s,b.length-1))),f})},X=s=>{var f;if(p(null),s===null){m({index:s,draft:Ue()});return}const i=(f=y==null?void 0:y.platforms)==null?void 0:f[s];i&&m({index:s,draft:B(i)})},U=s=>{m(i=>i&&{...i,draft:s(i.draft)})},le=()=>{if(!u)return;const s=Qe(u.draft);D(i=>{const f=[...i.platforms||[]];return u.index===null?f.push(s):f[u.index]=s,{...i,platforms:f}}),m(null),p(null)},ce=async()=>{if(!(!(y!=null&&y.name)||!h)){k(!0);try{if(u){const i=B(h),f=te(i),b=f[E];if(b){const O=[...b.platforms||[]],q=Qe(u.draft);u.index===null?O.push(q):O[u.index]=q,f[E]=oe({...b,platforms:O});const J=await Le(i),Z=B(J.parsed||i);M(Z),x(B(Z)),m(ne=>ne&&{index:ne.index??O.length-1,draft:q})}}const s=await lt(y.name);p({...s,status:"wait"}),S(null)}catch(s){S({tone:"error",message:s instanceof Error?s.message:String(s)})}finally{k(!1)}}},de=async()=>{if(!(!(y!=null&&y.name)||!(g!=null&&g.ticket))){k(!0);try{const s=await ct(y.name,g.ticket);p(i=>i&&{...i,status:s.status}),s.status==="confirmed"&&S({tone:"success",message:"WeChat QR code confirmed."})}catch(s){S({tone:"error",message:s instanceof Error?s.message:String(s)})}finally{k(!1)}}},ue=async()=>{if(h){$("config");try{const s=await Le(h);M(B(s.parsed||h)),x(B(s.parsed||h)),S({tone:"success",message:"Project changes saved."}),await H()}catch(s){S({tone:"error",message:s instanceof Error?s.message:String(s)})}finally{$("")}}};return w&&!h?n.jsx("div",{className:"flex h-64 items-center justify-center text-sm text-slate-400 animate-pulse",children:"Loading workspace..."}):n.jsxs("div",{className:"space-y-6 animate-fade-in",children:[n.jsx(at,{title:"工作区",description:"创建项目,配置 Agent、工作目录、Provider 和平台接入。"}),V?n.jsx("div",{role:"status",className:`rounded-xl border px-4 py-3 text-sm ${jt(V.tone)}`,children:V.message}):null,re?n.jsx("div",{className:"rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200",children:"You have unsaved project changes."}):null,n.jsxs("div",{className:"grid min-w-0 grid-cols-1 gap-4 lg:grid-cols-[340px_minmax(0,1fr)]",children:[n.jsx(Te,{title:"项目",actions:n.jsxs(I,{size:"sm",onClick:F,children:[n.jsx(ee,{size:14})," 新建项目"]}),className:"lg:self-start",children:z.length===0?n.jsx(he,{message:"还没有项目。"}):n.jsx("div",{className:"space-y-2",children:z.map((s,i)=>{var f,b;return n.jsxs("div",{className:`flex items-center justify-between gap-2 rounded-xl border px-3 py-2 transition-colors ${i===E?"border-accent/30 bg-accent/10":"border-black/10 hover:bg-black/[0.04] dark:border-white/[0.08] dark:hover:bg-white/[0.06]"}`,children:[n.jsxs("button",{type:"button",onClick:()=>{e(i),d(s.name?{project:s.name}:{})},className:"min-w-0 flex-1 text-left",children:[n.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:s.name||`Project ${i+1}`}),n.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[((f=s.agent)==null?void 0:f.type)||"unknown"," · ",Mt(s)," · ",((b=s.platforms)==null?void 0:b.length)||0," platforms"]})]}),n.jsx(I,{variant:"ghost",size:"sm",onClick:()=>se(i),"aria-label":`Remove ${s.name}`,children:n.jsx(ge,{size:14})})]},`${s.name}-${i}`)})})}),n.jsx(Te,{title:(y==null?void 0:y.name)||"Project details",description:y?n.jsxs("span",{className:"break-all",children:[((we=y.agent)==null?void 0:we.type)||"unknown"," · ",String(((Ce=(ye=y.agent)==null?void 0:ye.options)==null?void 0:Ce.work_dir)||"No work directory")]}):void 0,children:y?n.jsxs("div",{className:"space-y-6",children:[n.jsx("div",{className:"flex gap-2 overflow-x-auto border-b border-black/10 pb-4 [scrollbar-width:none] dark:border-white/[0.08] [&::-webkit-scrollbar]:hidden sm:flex-wrap",children:[["basic","基本信息"],["providers","Provider"],["platforms","平台接入"]].map(([s,i])=>n.jsx("button",{type:"button",onClick:()=>t(s),className:`shrink-0 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors ${r===s?"bg-accent text-white":"bg-black/[0.04] text-muted-foreground hover:bg-black/[0.07] hover:text-foreground dark:bg-white/[0.05] dark:hover:bg-white/[0.08]"}`,children:i},s))}),r==="basic"?n.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[n.jsx(T,{label:"Project name",value:y.name,onChange:s=>D(i=>({...i,name:s.target.value}))}),n.jsxs(ae,{label:"Agent type",value:Be(((Ee=y.agent)==null?void 0:Ee.type)||"",me),onChange:s=>D(i=>{var b;const f=s.target.value===Q?i.agent.type:s.target.value;return{...i,agent:{...i.agent,type:f,options:{...i.agent.options||{},model:$e(f,String(((b=i.agent.options)==null?void 0:b.model)||""))}}}}),children:[me.map(s=>n.jsx("option",{value:s,children:s},s)),n.jsx("option",{value:Q,children:"custom"})]}),n.jsx(T,{label:"Work directory",value:String(((Ne=(ke=y.agent)==null?void 0:ke.options)==null?void 0:Ne.work_dir)||""),onChange:s=>D(i=>({...i,agent:{...i.agent,options:{...i.agent.options||{},work_dir:s.target.value}}}))}),n.jsx(T,{label:"Default model",value:String(((Me=(Pe=y.agent)==null?void 0:Pe.options)==null?void 0:Me.model)||""),onChange:s=>D(i=>({...i,agent:{...i.agent,options:{...i.agent.options||{},model:s.target.value}}})),placeholder:fe((je=y.agent)==null?void 0:je.type)||"Use agent default model"})]}):null,r==="providers"?n.jsxs("section",{className:"space-y-3",children:[n.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("div",{children:[n.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Providers"}),n.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Basic endpoint and default model only."})]}),n.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>D(s=>({...s,agent:{...s.agent,providers:[...s.agent.providers||[],{name:`provider-${(s.agent.providers||[]).length+1}`}]}})),children:[n.jsx(ee,{size:14})," Provider"]})]}),(y.agent.providers||[]).length===0?n.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-black/10 px-4 py-4 dark:border-white/[0.08] sm:flex-row sm:items-center sm:justify-between",children:[n.jsx("p",{className:"text-sm text-muted-foreground",children:"No providers configured."}),n.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>D(s=>({...s,agent:{...s.agent,providers:[...s.agent.providers||[],{name:`provider-${(s.agent.providers||[]).length+1}`}]}})),children:[n.jsx(ee,{size:14})," Add provider"]})]}):n.jsx("div",{className:"space-y-3",children:(y.agent.providers||[]).map((s,i)=>n.jsx("div",{className:"rounded-xl border border-black/10 p-4 dark:border-white/[0.08]",children:n.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:[n.jsxs(ae,{label:"Preset",value:kt(s),onChange:f=>{f.target.value!==Q&&L(i,b=>Nt(b,f.target.value))},children:[be.map(f=>n.jsx("option",{value:f.id,children:f.label},f.id)),n.jsx("option",{value:Q,children:"custom"})]}),n.jsx(T,{label:"Name",value:s.name||"",onChange:f=>L(i,b=>({...b,name:f.target.value}))}),n.jsx(T,{label:"API key",type:"password",value:s.api_key||"",onChange:f=>L(i,b=>({...b,api_key:f.target.value}))}),n.jsx(T,{label:"Base URL",value:s.base_url||"",onChange:f=>L(i,b=>({...b,base_url:f.target.value}))}),n.jsx(T,{label:"Default model",value:s.model||"",onChange:f=>L(i,b=>({...b,model:f.target.value}))}),n.jsx("div",{className:"flex items-end",children:n.jsxs(I,{variant:"danger",size:"sm",onClick:()=>D(f=>{const b=[...f.agent.providers||[]];return b.splice(i,1),{...f,agent:{...f.agent,providers:b}}}),children:[n.jsx(ge,{size:14})," Remove"]})})]})},`${s.name}-${i}`))})]}):null,r==="platforms"?n.jsxs("section",{className:"space-y-3",children:[n.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("div",{children:[n.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Platforms"}),n.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Configure each platform with its own required connection fields."})]}),n.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>X(null),children:[n.jsx(ee,{size:14})," Platform"]})]}),(y.platforms||[]).length===0?n.jsx(he,{message:"No platforms configured."}):n.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:(y.platforms||[]).map((s,i)=>n.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-black/10 p-3 dark:border-white/[0.08]",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:s.type}),n.jsx("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:Pt(s)})]}),n.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[n.jsx(I,{variant:"secondary",size:"sm",onClick:()=>X(i),"aria-label":`Configure ${s.type}`,children:n.jsx(nt,{size:14})}),n.jsx(I,{variant:"danger",size:"sm",onClick:()=>D(f=>{const b=[...f.platforms||[]];return b.splice(i,1),{...f,platforms:b}}),children:n.jsx(ge,{size:14})})]})]},`${s.type}-${i}`))})]}):null,n.jsx("div",{className:"flex flex-wrap gap-2 border-t border-black/10 pt-5 dark:border-white/[0.08]",children:n.jsxs(I,{className:"w-full sm:w-auto",onClick:()=>void ue(),loading:_==="config",disabled:!re&&_!=="config",children:[n.jsx(ze,{size:14})," 保存更改"]})})]}):n.jsx(he,{message:"选择或新建项目后开始配置。"})})]}),n.jsx(Oe,{open:!!a,onClose:()=>l(null),title:"新建项目",children:a?n.jsxs("div",{className:"space-y-4",children:[n.jsx(T,{label:"Project name",value:a.name,onChange:s=>Y({name:s.target.value}),autoFocus:!0}),n.jsx(ae,{label:"Agent type",value:a.agentType,onChange:s=>{const i=s.target.value;Y({agentType:i})},children:me.map(s=>n.jsx("option",{value:s,children:s},s))}),n.jsx(T,{label:"Work directory",value:a.workDir,onChange:s=>Y({workDir:s.target.value}),placeholder:"/Users/yinyin/code/my-project"}),n.jsx(T,{label:"Default model",value:a.model,onChange:s=>Y({model:s.target.value}),placeholder:fe(a.agentType)||"Use agent default model"}),n.jsxs("div",{className:"flex flex-col-reverse gap-2 pt-2 sm:flex-row sm:justify-end",children:[n.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>l(null),children:"Cancel"}),n.jsxs(I,{className:"w-full sm:w-auto",onClick:G,children:[n.jsx(ee,{size:14})," 新建项目"]})]})]}):null}),n.jsx(Oe,{open:!!u,onClose:()=>{m(null),p(null)},title:(u==null?void 0:u.index)===null?"Add platform":"Configure platform",children:u?n.jsxs("div",{className:"space-y-4",children:[n.jsxs(ae,{label:"Platform",value:Be(u.draft.type,[...pe]),onChange:s=>{const i=s.target.value===Q?u.draft.type:s.target.value;U(()=>Ue(i)),p(null)},children:[pe.map(s=>n.jsx("option",{value:s,children:s},s)),dt.filter(s=>!pe.includes(s)).map(s=>n.jsx("option",{value:s,children:s},s)),n.jsx("option",{value:Q,children:"custom"})]}),u.draft.type==="lark"?n.jsxs("div",{className:"grid grid-cols-1 gap-3",children:[n.jsx(T,{label:"App ID",value:String(((Se=u.draft.options)==null?void 0:Se.app_id)||""),onChange:s=>U(i=>({...i,options:{...i.options||{},app_id:s.target.value}})),placeholder:"cli_xxx"}),n.jsx(T,{label:"App Secret",type:"password",value:String(((Ae=u.draft.options)==null?void 0:Ae.app_secret)||""),onChange:s=>U(i=>({...i,options:{...i.options||{},app_secret:s.target.value}}))}),n.jsx(T,{label:"Verification token",value:String(((Re=u.draft.options)==null?void 0:Re.verification_token)||""),onChange:s=>U(i=>({...i,options:{...i.options||{},verification_token:s.target.value}}))}),n.jsx(T,{label:"Encrypt key",value:String(((Ie=u.draft.options)==null?void 0:Ie.encrypt_key)||""),onChange:s=>U(i=>({...i,options:{...i.options||{},encrypt_key:s.target.value}}))}),n.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[n.jsx("input",{type:"checkbox",checked:((_e=u.draft.options)==null?void 0:_e.auto_approve)===!0,onChange:s=>U(i=>({...i,options:{...i.options||{},auto_approve:s.target.checked}}))}),"Auto-approve Lark users"]}),n.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[n.jsx("input",{type:"checkbox",checked:((De=u.draft.options)==null?void 0:De.card_actions)===!0,onChange:s=>U(i=>({...i,options:{...i.options||{},card_actions:s.target.checked}}))}),"Enable Lark card action buttons"]})]}):null,u.draft.type==="weixin"?n.jsxs("div",{className:"space-y-3",children:[n.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"WeChat does not need an App ID or secret. Save this platform, then generate a QR code and scan it to finish login."}),g!=null&&g.qrCodeUrl?n.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-black/10 p-4 dark:border-white/[0.08]",children:[n.jsx("div",{className:"rounded-lg border border-black/10 bg-white p-3",children:n.jsx(tt,{value:g.qrCodeUrl,size:176,includeMargin:!0})}),n.jsx(ot,{tone:g.status==="confirmed"?"success":g.status==="expired"?"danger":"warning",children:g.status||"wait"})]}):null,n.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap",children:[n.jsxs(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void ce(),loading:R,children:[n.jsx(mt,{size:14})," Generate QR"]}),n.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void de(),loading:R,disabled:!(g!=null&&g.ticket),children:"Check status"})]})]}):null,u.draft.type!=="lark"&&u.draft.type!=="weixin"?n.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"This platform has no daily UI fields yet. Existing advanced options are preserved in config."}):null,n.jsxs("div",{className:"flex flex-col-reverse gap-2 border-t border-black/10 pt-4 dark:border-white/[0.08] sm:flex-row sm:justify-end",children:[n.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>m(null),children:"Cancel"}),n.jsxs(I,{className:"w-full sm:w-auto",onClick:le,children:[n.jsx(ze,{size:14})," Apply"]})]})]}):null})]})}export{Ht as default};
@@ -1,4 +0,0 @@
1
- const h="opencode",r="opencode/minimax-m2.5-free";const f=["opencode","codex","claudecode","cursor","gemini","qoder","iflow","localcore-acp"],_=["telegram","feishu","lark","discord","slack","dingtalk","wecom","weixin","qq","qqbot","line"],l=["opencode","codex","claudecode","acp","localcore-acp"],c="localcore-acp",i=["[Scheduler Tools]","If the user asks to create, view, edit, delete, or manually run a scheduled task for this conversation, use the Bash tool to run the local scheduler CLI.","Use these commands:",'lac scheduler add --cron "<5-field cron>" --message "<exact message to send>" --desc "<short label>" [--execution-mode same-thread|side-thread]',"lac scheduler list","lac scheduler list --thread","lac scheduler info <job-id>",'lac scheduler edit <job-id> [--cron "<5-field cron>"] [--message "<exact message>"] [--desc "<short label>"] [--enabled true|false] [--execution-mode same-thread|side-thread]',"lac scheduler del <job-id>","lac scheduler run <job-id>","Environment variables LOCAL_AI_WORKSPACE_ID, LOCAL_AI_THREAD_ID, LOCAL_AI_PLATFORM, LOCAL_AI_CHAT_ID, and LOCAL_AI_PLATFORM_USER_ID are already set when available.","Prefer relying on those variables instead of inventing your own route or creating session-only cron jobs.","By default, `lac scheduler list` shows all scheduled tasks in the current workspace. Use `lac scheduler list --thread` to show only the current conversation thread.","Use `--execution-mode same-thread` to reuse the current thread, or `--execution-mode side-thread` to run in a dedicated scheduled thread.","Only use the scheduler CLI when the user explicitly asks for scheduled automation.","[/Scheduler Tools]"].join(`
2
- `),d=["[Channel Tools]","If the user asks you to send a local file back through the current channel conversation, use the Bash tool to run the local channel CLI.","Use this command:",'lac channel send-file --path "<absolute-or-workdir-relative-file-path>" [--target "<channel-chat-or-user-id>"]',"By default, the file is sent to the current platform conversation from LOCAL_AI_CHAT_ID.","Use --target only when the user explicitly names a different channel chat or user id.","The CLI accepts absolute paths. Check that the file exists before sending when practical.","Only use the channel CLI when the user explicitly asks to send a file through the channel.","[/Channel Tools]"].join(`
3
- `),u={allow:"allow",deny:"deny","allow all":"allow all",allowall:"allow all","perm:allow":"allow","perm:deny":"deny","perm:allow_all":"allow all"};function m(e,t=[]){return[i,"",d,...t.flatMap(o=>o?["",o]:[]),"","[User Message]",e,"[/User Message]"].join(`
4
- `)}function O(e){switch(String(e||"").trim().toLowerCase()){case"opencode":return r;case"claudecode":return"";default:return""}}function T(e,t){const o=String(e||"").trim().toLowerCase(),a=String(t||"").trim();return o?o==="opencode"?a||r:o==="claudecode"&&a.startsWith("opencode/")?"":a:a}function s(e){return e&&u[String(e).trim().toLowerCase()]||null}function E(e){return!!s(e==null?void 0:e.data)}function L(e){if(!e||typeof e!="object")return null;const t=e,o=typeof t.text=="string"?t.text:typeof t.Text=="string"?t.Text:"",a=typeof t.data=="string"?t.data:typeof t.Data=="string"?t.Data:"";if(!o||!a)return null;const n=s(a);return n?{text:n,data:n}:{text:o,data:a}}function p(e){return e?l.includes(String(e).trim().toLowerCase()):!1}function A(e){const t=String(e||"").trim().toLowerCase();return t==="acp"||t==="opencode"||t==="codex"||t==="claudecode"||t===c}export{f as D,s as a,A as b,T as c,_ as d,h as e,O as g,E as i,L as n,p as s,m as w};
@@ -1 +0,0 @@
1
- import{V as l,P as g,X as d,Y as u,_ as c,$ as h,a0 as C,a1 as w,a2 as k,a3 as v,a4 as S,a5 as P,a6 as m,a7 as y,a8 as L,a9 as b,aa as f,ab as G,ac as R,ad as B,ae as A,af as F,ag as E,ah as I,ai as W,aj as D,ak as K,al as T,am as x,m as i,i as Q,an as U,ao as j,ap as z,aq as $,ar as _,as as q,at as M,au as V,g as X}from"./index-BC3MWbS1.js";function t(){if(!window.desktop)throw new Error("Desktop APIs are unavailable in the browser build");return window.desktop}const Y={getRuntimeStatus:()=>t().getRuntimeStatus(),startService:()=>t().startService(),stopService:()=>t().stopService(),restartService:()=>t().restartService(),getLogs:e=>t().getLogs(e),listInstalledAgentRuntimes:()=>w().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>C().then(e=>e.runtimes),readConfigFile:()=>t().readConfigFile(),saveRawConfigFile:e=>t().saveRawConfigFile(e),saveStructuredConfigFile:e=>t().saveStructuredConfigFile(e),getThreadKnowledgeBases:(e,a)=>t().getThreadKnowledgeBases(e,a),updateThreadKnowledgeBases:(e,a,s)=>t().updateThreadKnowledgeBases(e,a,s),deleteThreadKnowledgeBases:(e,a)=>t().deleteThreadKnowledgeBases(e,a),saveSettings:e=>t().saveSettings(e),getCapabilitySnapshot:()=>h(),getPluginDiagnostics:()=>c(),listChannelGateways:e=>t().listChannelGateways(e),getChannelGatewayStatus:(e,a)=>t().getChannelGatewayStatus(e,a),testChannelConnection:(e,a)=>t().testChannelConnection(e,a),enableChannelGateway:(e,a)=>t().enableChannelGateway(e,a),disableChannelGateway:(e,a)=>t().disableChannelGateway(e,a),listChannelPendingPairings:(e,a)=>t().listChannelPendingPairings(e,a),approveChannelPairing:(e,a)=>t().approveChannelPairing(e,a),rejectChannelPairing:(e,a)=>t().rejectChannelPairing(e,a),listChannelAuthorizedUsers:(e,a)=>t().listChannelAuthorizedUsers(e,a),getWeixinQrCode:e=>u(e),checkWeixinQrCodeStatus:(e,a)=>d(e,a),listLarkGateways:()=>t().listLarkGateways(),getLarkGatewayStatus:e=>t().getLarkGatewayStatus(e),testLarkConnection:e=>t().testLarkConnection(e),enableLarkGateway:e=>t().enableLarkGateway(e),disableLarkGateway:e=>t().disableLarkGateway(e),listLarkPendingPairings:e=>t().listLarkPendingPairings(e),approveLarkPairing:e=>t().approveLarkPairing(e),rejectLarkPairing:e=>t().rejectLarkPairing(e),listLarkAuthorizedUsers:e=>t().listLarkAuthorizedUsers(e),probeWorkspaceStreaming:e=>t().probeWorkspaceStreaming(e),onRuntimeEvent:e=>t().onRuntimeEvent(e),onRuntimeDetectionEvent:e=>g(a=>{(a.type.startsWith("runtime.detect.")||a.type==="runtime.status.changed")&&e(a)}),onBridgeEvent:e=>l(e)},r={getRuntimeStatus:()=>V(),startService:()=>M(),stopService:()=>q(),restartService:()=>_(),getLogs:e=>$(e),listInstalledAgentRuntimes:()=>w().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>C().then(e=>e.runtimes),readConfigFile:()=>z(),saveRawConfigFile:e=>j(e),saveStructuredConfigFile:e=>U(e),getThreadKnowledgeBases:(e,a)=>Q(a).then(s=>s.selectedKnowledgeBaseIds||[]),updateThreadKnowledgeBases:(e,a,s)=>i(a,s).then(p=>p.knowledgeBaseIds),deleteThreadKnowledgeBases:(e,a)=>i(a,[]).then(()=>({deleted:!0})),saveSettings:e=>x(e),getCapabilitySnapshot:()=>h(),getPluginDiagnostics:()=>c(),listChannelGateways:e=>T(e).then(a=>a.gateways),getChannelGatewayStatus:(e,a)=>K(e,a),testChannelConnection:(e,a)=>D(e,a),enableChannelGateway:(e,a)=>W(e,a),disableChannelGateway:(e,a)=>I(e,a),listChannelPendingPairings:(e,a)=>E(e,a).then(s=>s.pairings),approveChannelPairing:(e,a)=>F(e,a),rejectChannelPairing:(e,a)=>A(e,a),listChannelAuthorizedUsers:(e,a)=>B(e,a).then(s=>s.users),getWeixinQrCode:e=>u(e),checkWeixinQrCodeStatus:(e,a)=>d(e,a),listLarkGateways:()=>R().then(e=>e.gateways),getLarkGatewayStatus:e=>G(e),testLarkConnection:e=>f(e),enableLarkGateway:e=>b(e),disableLarkGateway:e=>L(e),listLarkPendingPairings:e=>y(e).then(a=>a.pairings),approveLarkPairing:e=>m(e),rejectLarkPairing:e=>P(e),listLarkAuthorizedUsers:e=>S(e).then(a=>a.users),probeWorkspaceStreaming:e=>v(e),onRuntimeEvent:e=>k(e),onRuntimeDetectionEvent:e=>g(a=>{(a.type.startsWith("runtime.detect.")||a.type==="runtime.status.changed")&&e(a)}),onBridgeEvent:e=>l(e)};let o=null;function H(e){return e==="electron"&&window.desktop?Y:r}function n(){const e=o||H(X());if(!e)throw new Error("Managed desktop APIs are unavailable in this build");return o=e,e}const N=()=>n().getRuntimeStatus(),O=()=>n().startService(),Z=()=>n().listInstalledAgentRuntimes(),ee=()=>n().refreshInstalledAgentRuntimes(),ae=()=>n().readConfigFile(),te=e=>n().saveStructuredConfigFile(e),ne=(e,a,s)=>n().updateThreadKnowledgeBases(e,a,s),se=e=>n().saveSettings(e),ie=()=>n().getPluginDiagnostics(),re=e=>n().getWeixinQrCode(e),oe=(e,a)=>n().checkWeixinQrCodeStatus(e,a),le=e=>n().onRuntimeEvent(e),ge=e=>n().onRuntimeDetectionEvent(e),de=e=>n().onBridgeEvent(e);export{ge as a,de as b,ae as c,te as d,re as e,oe as f,N as g,ie as h,se as i,Z as l,le as o,ee as r,O as s,ne as u};
@@ -1 +0,0 @@
1
- import{z as t}from"./index-BC3MWbS1.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};