cicy-desktop 2.1.87 → 2.1.89

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.
@@ -6,7 +6,7 @@
6
6
  <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
7
7
  <link rel="icon" type="image/png" sizes="256x256" href="./favicon-256.png" />
8
8
  <title>CiCy Desktop</title>
9
- <script type="module" crossorigin src="./assets/index-B7UhCeq6.js"></script>
9
+ <script type="module" crossorigin src="./assets/index-5vDVCGqD.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="./assets/index-CKpaMBKz.css">
11
11
  </head>
12
12
  <body>
@@ -118,6 +118,8 @@
118
118
  "agree": "Agree and continue",
119
119
  "decline": "Decline and exit",
120
120
  "mustAgree": "You cannot use this software without accepting the Terms.",
121
- "scrollHint": "Please read to the end to continue"
121
+ "scrollHint": "Please read to the end to continue",
122
+ "menu": "Terms of Use",
123
+ "close": "Close"
122
124
  }
123
- }
125
+ }
@@ -104,20 +104,21 @@
104
104
  "retry": "Retry"
105
105
  },
106
106
  "firstRunTerms": {
107
- "_TODO": "professional fr translation pending — using en (do not machine-translate legal text)",
108
- "title": "Terms of Use & Authorization Notice",
109
- "subtitle": "Please read and accept the following before using CiCy Desktop",
110
- "summaryTitle": "At a glance",
111
- "summary1": "CiCy Desktop is an AI agent orchestration tool that runs on your own computer, helping you coordinate third-party AI assistants (Claude Code, Codex, Gemini, etc.) to get work done.",
112
- "summary2": "Third-party AI and accounts are between you and the respective provider: which AI you use, whose account you log in with, and the usage and fees are your decision and responsibility, not CiCy's.",
113
- "summary3": "To do the work, this software needs a range of authorizations on your computer (running programs, executing scripts, controlling the browser, accessing files, etc.). You are fully responsible for the operations initiated through this software.",
114
- "summary4": "Your data stays on your machine by default; CiCy does not upload your work content for operational purposes.",
115
- "summary5": "Two high-risk capabilities require your separate, explicit authorization and are off by default: (a) local HTTPS traffic auditing (installs a certificate, requires administrator); (b) local command/script execution. Accepting these Terms does not enable them.",
116
- "summary6": "You must not use this software to control unauthorized devices, conduct unlawful multi-accounting / traffic faking, circumvent platform risk controls, or scrape in violation of terms.",
117
- "viewFull": "View full Terms",
118
- "agree": "Agree and continue",
119
- "decline": "Decline and exit",
120
- "mustAgree": "You cannot use this software without accepting the Terms.",
121
- "scrollHint": "Please read to the end to continue"
107
+ "title": "Conditions d'utilisation et autorisations",
108
+ "subtitle": "Veuillez lire et accepter les conditions suivantes avant d'utiliser CiCy Desktop",
109
+ "summaryTitle": "En bref",
110
+ "summary1": "CiCy Desktop est un outil d'orchestration d'agents IA qui s'exécute sur votre propre ordinateur et vous aide à coordonner des assistants IA tiers (Claude Code, Codex, Gemini, etc.) pour accomplir votre travail.",
111
+ "summary2": "Les IA et comptes tiers relèvent de votre relation avec chaque fournisseur : le choix de l'IA, le compte utilisé, ainsi que l'usage et les frais qui en découlent relèvent de votre décision et de votre responsabilité, et non de CiCy.",
112
+ "summary3": "Pour effectuer le travail, ce logiciel nécessite une série d'autorisations sur votre ordinateur (exécuter des programmes, exécuter des scripts, contrôler le navigateur, accéder aux fichiers, etc.). Vous êtes entièrement responsable des opérations lancées via ce logiciel.",
113
+ "summary4": "Vos données restent par défaut sur votre machine ; CiCy ne téléverse pas le contenu de votre travail à des fins d'exploitation.",
114
+ "summary5": "Deux capacités à haut risque nécessitent votre autorisation distincte et explicite et sont désactivées par défaut : (a) l'audit local du trafic HTTPS (installe un certificat, nécessite l'administrateur) ; (b) l'exécution locale de commandes/scripts. L'acceptation des présentes conditions ne les active pas.",
115
+ "summary6": "Vous ne devez pas utiliser ce logiciel pour contrôler des appareils non autorisés, pratiquer la multi-connexion illicite / la falsification de trafic, contourner les contrôles de risque des plateformes ou collecter des données en violation des conditions.",
116
+ "viewFull": "Voir les conditions complètes",
117
+ "agree": "Accepter et continuer",
118
+ "decline": "Refuser et quitter",
119
+ "mustAgree": "Vous ne pouvez pas utiliser ce logiciel sans accepter les conditions.",
120
+ "scrollHint": "Veuillez lire jusqu'au bout pour continuer",
121
+ "menu": "Conditions d'utilisation",
122
+ "close": "Fermer"
122
123
  }
123
- }
124
+ }
@@ -104,20 +104,21 @@
104
104
  "retry": "Retry"
105
105
  },
106
106
  "firstRunTerms": {
107
- "_TODO": "professional ja translation pending — using en (do not machine-translate legal text)",
108
- "title": "Terms of Use & Authorization Notice",
109
- "subtitle": "Please read and accept the following before using CiCy Desktop",
110
- "summaryTitle": "At a glance",
111
- "summary1": "CiCy Desktop is an AI agent orchestration tool that runs on your own computer, helping you coordinate third-party AI assistants (Claude Code, Codex, Gemini, etc.) to get work done.",
112
- "summary2": "Third-party AI and accounts are between you and the respective provider: which AI you use, whose account you log in with, and the usage and fees are your decision and responsibility, not CiCy's.",
113
- "summary3": "To do the work, this software needs a range of authorizations on your computer (running programs, executing scripts, controlling the browser, accessing files, etc.). You are fully responsible for the operations initiated through this software.",
114
- "summary4": "Your data stays on your machine by default; CiCy does not upload your work content for operational purposes.",
115
- "summary5": "Two high-risk capabilities require your separate, explicit authorization and are off by default: (a) local HTTPS traffic auditing (installs a certificate, requires administrator); (b) local command/script execution. Accepting these Terms does not enable them.",
116
- "summary6": "You must not use this software to control unauthorized devices, conduct unlawful multi-accounting / traffic faking, circumvent platform risk controls, or scrape in violation of terms.",
117
- "viewFull": "View full Terms",
118
- "agree": "Agree and continue",
119
- "decline": "Decline and exit",
120
- "mustAgree": "You cannot use this software without accepting the Terms.",
121
- "scrollHint": "Please read to the end to continue"
107
+ "title": "利用規約と権限に関する説明",
108
+ "subtitle": "CiCy Desktop をご利用になる前に、以下の規約をお読みのうえ同意してください",
109
+ "summaryTitle": "概要",
110
+ "summary1": "CiCy Desktop は、お使いのコンピューター上で動作する AI エージェントのオーケストレーションツールで、サードパーティの AI アシスタント(Claude Code、Codex、Gemini など)を連携させて作業を進めるのを支援します。",
111
+ "summary2": "サードパーティの AI とアカウントは、あなたと各プロバイダーとの間の事項です。どの AI を使うか、誰のアカウントでログインするか、それに伴う利用量や費用は、あなたの判断と責任であり、CiCy は関与しません。",
112
+ "summary3": "作業を行うため、本ソフトウェアはお使いのコンピューターに対する一連の権限(プログラムの実行、スクリプトの実行、ブラウザの制御、ファイルへのアクセスなど)を必要とします。本ソフトウェアを通じて開始された操作については、あなたが全責任を負います。",
113
+ "summary4": "あなたのデータは既定でこの端末内に留まります。CiCy は運営目的であなたの作業内容をアップロードしません。",
114
+ "summary5": "2 つの高リスク機能は、あなたの個別かつ明示的な許可が必要で、既定では無効です。(a) ローカルでの HTTPS トラフィック監査(証明書のインストールと管理者権限が必要)、(b) ローカルでのコマンド/スクリプト実行。本規約への同意だけではこれらは有効になりません。",
115
+ "summary6": "本ソフトウェアを、許可されていないデバイスの制御、違法な複数アカウント運用/不正なトラフィック生成、プラットフォームのリスク管理の回避、規約に違反するスクレイピングに使用してはなりません。",
116
+ "viewFull": "規約全文を見る",
117
+ "agree": "同意して続行",
118
+ "decline": "同意せず終了",
119
+ "mustAgree": "規約に同意しない場合、本ソフトウェアはご利用いただけません。",
120
+ "scrollHint": "続行するには最後までお読みください",
121
+ "menu": "利用規約",
122
+ "close": "閉じる"
122
123
  }
123
- }
124
+ }
@@ -118,6 +118,8 @@
118
118
  "agree": "同意并继续",
119
119
  "decline": "不同意并退出",
120
120
  "mustAgree": "未同意则无法使用本软件。",
121
- "scrollHint": "请阅读至底部以继续"
121
+ "scrollHint": "请阅读至底部以继续",
122
+ "menu": "用户协议",
123
+ "close": "关闭"
122
124
  }
123
- }
125
+ }
@@ -244,7 +244,9 @@ module.exports = (registerTool) => {
244
244
  const data = {
245
245
  accountIdx: next, createdAt: now, updatedAt: now, windows: [],
246
246
  metadata: { description: `Account ${next}`, ...(name ? { name } : {}), tags: [] },
247
- proxy: { url: "", enabled: false }, logins: [],
247
+ // New electron profiles (next is always ≥1, so account-0 is never created
248
+ // here) default to the chrome-profile-1 mihomo listener.
249
+ proxy: { url: "socks5://127.0.0.1:20001", enabled: true }, logins: [],
248
250
  };
249
251
  fs.writeFileSync(file, JSON.stringify(data, null, 2));
250
252
  return toResult({ success: true, accountIdx: next, profile: profileStore.getProfile("electron", next) });
@@ -648,7 +648,8 @@ function registerChromeTools(registerTool) {
648
648
  orgPath: typeof orgPath === "string" && orgPath.length ? orgPath : DEFAULT_ADD_ORG_PATH,
649
649
  rpaDir: rpaDirTilde,
650
650
  port,
651
- proxy: "",
651
+ // New chrome profiles default to the chrome-profile-1 mihomo listener.
652
+ proxy: "socks5://127.0.0.1:20001",
652
653
  };
653
654
 
654
655
  writePrivateChromeConfig(data);
@@ -1008,6 +1008,7 @@ function Header({ me, welcome, onLogout, mitmTeam }) {
1008
1008
  const [open, setOpen] = useState(false);
1009
1009
  const [trustOpen, setTrustOpen] = useState(false);
1010
1010
  const [auditOpen, setAuditOpen] = useState(false);
1011
+ const [termsOpen, setTermsOpen] = useState(false);
1011
1012
  const wrap = useRef(null);
1012
1013
  // Click-outside closes the dropdown (mirrors LocalTeamCard's ⋯ menu).
1013
1014
  useEffect(() => {
@@ -1051,6 +1052,9 @@ function Header({ me, welcome, onLogout, mitmTeam }) {
1051
1052
  <button type="button" data-id="UserChip-audit-log" className="user-chip__menu-item" onClick={() => { setOpen(false); setAuditOpen(true); }}>
1052
1053
  {tr("audit.menu", "审计日志")}
1053
1054
  </button>
1055
+ <button type="button" data-id="UserChip-terms" className="user-chip__menu-item" onClick={() => { setOpen(false); setTermsOpen(true); }}>
1056
+ {tr("firstRunTerms.menu", "用户协议")}
1057
+ </button>
1054
1058
  {mitmTeam && (
1055
1059
  <div className="user-chip__menu-mitm" data-id="UserChip-mitm" onClick={(e) => e.stopPropagation()}>
1056
1060
  <MitmConsentCard team={mitmTeam} variant="menu" />
@@ -1065,6 +1069,7 @@ function Header({ me, welcome, onLogout, mitmTeam }) {
1065
1069
  </div>
1066
1070
  {trustOpen && <TrustedSitesModal onClose={() => setTrustOpen(false)} />}
1067
1071
  {auditOpen && <AuditLogModal onClose={() => setAuditOpen(false)} />}
1072
+ {termsOpen && <FirstRunTermsGate onClose={() => setTermsOpen(false)} />}
1068
1073
  </header>
1069
1074
  );
1070
1075
  }
@@ -1095,12 +1100,13 @@ const DOCKER_STEPS = [
1095
1100
 
1096
1101
  // 首启门控:整体条款的第一道同意。未同意不进主界面;读到底部才解锁"同意"。
1097
1102
  // 与 MitmConsentCard(HTTPS 审计第二道同意)完全独立 —— 同意条款 ≠ 开启审计。
1098
- function FirstRunTermsGate({ onAgree }) {
1103
+ function FirstRunTermsGate({ onAgree, onClose }) {
1099
1104
  const [scrolledEnd, setScrolledEnd] = useState(false);
1100
1105
  const [showFull, setShowFull] = useState(false);
1101
1106
  const [busy, setBusy] = useState(false);
1102
1107
  const locale = (window.cicyI18n?.locale || "en").startsWith("zh") ? "zh-CN" : "en";
1103
1108
  const t = (k, fb) => tr(`firstRunTerms.${k}`, fb);
1109
+ const review = !!onClose; // opened from the avatar menu to re-read — not the blocking first-run gate
1104
1110
  const summaries = [1, 2, 3, 4, 5, 6].map((i) => t(`summary${i}`, ""));
1105
1111
 
1106
1112
  const onScroll = (e) => {
@@ -1123,7 +1129,12 @@ function FirstRunTermsGate({ onAgree }) {
1123
1129
  const decline = () => { try { window.cicy?.terms?.decline?.(); } catch {} };
1124
1130
 
1125
1131
  return (
1126
- <div className="shell terms-gate" data-id="FirstRunTermsGate">
1132
+ <div
1133
+ className={review ? "terms-gate terms-gate--review" : "shell terms-gate"}
1134
+ data-id="FirstRunTermsGate"
1135
+ style={review ? { position: "fixed", inset: 0, zIndex: 1000, background: "rgba(8,9,14,.72)", backdropFilter: "blur(4px)" } : undefined}
1136
+ onClick={review ? (e) => { if (e.target === e.currentTarget) onClose(); } : undefined}
1137
+ >
1127
1138
  <div className="glow" aria-hidden />
1128
1139
  <div className="terms-gate__panel">
1129
1140
  <h1 className="terms-gate__title" data-id="FirstRunTermsGate-title">{t("title", "用户协议与授权说明")}</h1>
@@ -1142,16 +1153,26 @@ function FirstRunTermsGate({ onAgree }) {
1142
1153
  )}
1143
1154
  </div>
1144
1155
 
1145
- {!scrolledEnd && <div className="terms-gate__scrollhint" data-id="FirstRunTermsGate-scrollhint">{t("scrollHint", "请阅读至底部以继续")}</div>}
1146
- <div className="terms-gate__actions">
1147
- <button data-id="FirstRunTermsGate-decline" className="terms-gate__btn terms-gate__btn--ghost" onClick={decline}>
1148
- {t("decline", "不同意并退出")}
1149
- </button>
1150
- <button data-id="FirstRunTermsGate-agree" className="terms-gate__btn" disabled={!scrolledEnd || busy}
1151
- title={!scrolledEnd ? t("mustAgree", "未同意则无法使用本软件。") : ""} onClick={agree}>
1152
- {t("agree", "同意并继续")}
1153
- </button>
1154
- </div>
1156
+ {review ? (
1157
+ <div className="terms-gate__actions">
1158
+ <button data-id="FirstRunTermsGate-close" className="terms-gate__btn" onClick={onClose}>
1159
+ {t("close", "关闭")}
1160
+ </button>
1161
+ </div>
1162
+ ) : (
1163
+ <>
1164
+ {!scrolledEnd && <div className="terms-gate__scrollhint" data-id="FirstRunTermsGate-scrollhint">{t("scrollHint", "请阅读至底部以继续")}</div>}
1165
+ <div className="terms-gate__actions">
1166
+ <button data-id="FirstRunTermsGate-decline" className="terms-gate__btn terms-gate__btn--ghost" onClick={decline}>
1167
+ {t("decline", "不同意并退出")}
1168
+ </button>
1169
+ <button data-id="FirstRunTermsGate-agree" className="terms-gate__btn" disabled={!scrolledEnd || busy}
1170
+ title={!scrolledEnd ? t("mustAgree", "未同意则无法使用本软件。") : ""} onClick={agree}>
1171
+ {t("agree", "同意并继续")}
1172
+ </button>
1173
+ </div>
1174
+ </>
1175
+ )}
1155
1176
  </div>
1156
1177
  </div>
1157
1178
  );