cicy-desktop 2.1.213 → 2.1.215

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cicy-desktop",
3
- "version": "2.1.213",
3
+ "version": "2.1.215",
4
4
  "description": "CiCy - AI-powered operating system browser",
5
5
  "main": "src/main.js",
6
6
  "bin": {
@@ -148,8 +148,34 @@ function writeChromeConfig(next) {
148
148
  } catch {}
149
149
  }
150
150
 
151
+ // Identity is recorded in the `accounts` map (accounts.gmail / .google / .github
152
+ // → {account,password,totp}) via the account CLI; older code only wrote a bare
153
+ // top-level `gmail`. normalizeAccounts coerces the map; resolveGmail prefers the
154
+ // accounts map and falls back to the legacy field — so gmail shows whichever way
155
+ // it was recorded (this is why panels showed empty: read top-level, wrote accounts).
156
+ function normalizeAccounts(raw) {
157
+ const out = {};
158
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
159
+ for (const [svc, val] of Object.entries(raw)) {
160
+ if (typeof val === "string") out[svc] = { account: val };
161
+ else if (val && typeof val === "object" && !Array.isArray(val)) out[svc] = val;
162
+ }
163
+ }
164
+ return out;
165
+ }
166
+ function resolveGmail(accounts, fallback) {
167
+ const a = accounts || {};
168
+ return (
169
+ (a.gmail && a.gmail.account) ||
170
+ (a.google && a.google.account) ||
171
+ (typeof fallback === "string" ? fallback : "") ||
172
+ ""
173
+ );
174
+ }
175
+
151
176
  function chromeView(idx, entry) {
152
177
  const e = entry && typeof entry === "object" ? entry : {};
178
+ const accounts = normalizeAccounts(e.accounts);
153
179
  return {
154
180
  id: `chrome-${idx}`,
155
181
  backend: "chrome",
@@ -159,7 +185,8 @@ function chromeView(idx, entry) {
159
185
  logins: (Array.isArray(e.logins) ? e.logins : []).map(normalizeLogin),
160
186
  note: typeof e.note === "string" ? e.note : "",
161
187
  // chrome-specific extras (read-only passthrough)
162
- gmail: typeof e.gmail === "string" ? e.gmail : "",
188
+ gmail: resolveGmail(accounts, e.gmail),
189
+ accounts,
163
190
  port: typeof e.port === "number" ? e.port : 11000 + idx,
164
191
  rpaDir: typeof e.rpaDir === "string" ? e.rpaDir : `~/chrome/profile_${idx}`,
165
192
  platform: e.platform && typeof e.platform === "object" ? e.platform : {},
@@ -208,6 +235,9 @@ function writeAccount(data) {
208
235
  function electronView(idx, data) {
209
236
  const d = data && typeof data === "object" ? data : { accountIdx: idx };
210
237
  const meta = d.metadata && typeof d.metadata === "object" ? d.metadata : {};
238
+ // Electron identities may live on the account file directly (d.accounts) or
239
+ // under metadata (meta.accounts / meta.gmail); resolve from whichever is set.
240
+ const accounts = normalizeAccounts(d.accounts || meta.accounts);
211
241
  return {
212
242
  id: `electron-${idx}`,
213
243
  backend: "electron",
@@ -216,6 +246,8 @@ function electronView(idx, data) {
216
246
  proxy: normalizeProxy(d.proxy),
217
247
  logins: (Array.isArray(d.logins) ? d.logins : []).map(normalizeLogin),
218
248
  note: typeof d.note === "string" ? d.note : meta.description || "",
249
+ gmail: resolveGmail(accounts, d.gmail || meta.gmail),
250
+ accounts,
219
251
  partition: `persist:sandbox-${idx}`,
220
252
  ipInfo: normalizeIpInfo(d.ipInfo),
221
253
  };
@@ -166,6 +166,22 @@ function normalizePrivateChromeEntry(profileKey, accountIdx, entry) {
166
166
  };
167
167
  }
168
168
 
169
+ // resolveGmail derives a profile's Google identity. The `account` CLI / UI now
170
+ // records identities in the `accounts` map (accounts.gmail / accounts.google),
171
+ // so read from there FIRST and only fall back to the legacy top-level `gmail`
172
+ // field (which was only ever set at `add --gmail` time). This is why gmail/login
173
+ // info showed empty: it was recorded into accounts.* but everything read the
174
+ // top-level gmail field.
175
+ function resolveGmail(normalized) {
176
+ const a = (normalized && normalized.accounts) || {};
177
+ return (
178
+ (a.gmail && a.gmail.account) ||
179
+ (a.google && a.google.account) ||
180
+ (normalized && normalized.gmail) ||
181
+ ""
182
+ );
183
+ }
184
+
169
185
  function normalizeEffectiveChromeProfile(accountIdx, effectiveChromeProfile) {
170
186
  const parsed = injectedChromeProfileSchema.parse(effectiveChromeProfile || {});
171
187
  const gmail = typeof parsed.gmail === "string" ? parsed.gmail : "";
@@ -507,7 +523,7 @@ function registerChromeTools(registerTool) {
507
523
  views.push({
508
524
  profileKey,
509
525
  accountIdx,
510
- gmail: normalized.gmail,
526
+ gmail: resolveGmail(normalized),
511
527
  note: normalized.note,
512
528
  orgPath: normalized.orgPath,
513
529
  rpaDir: normalized.rpaDir,
@@ -515,6 +531,9 @@ function registerChromeTools(registerTool) {
515
531
  proxy: normalized.proxyUrl,
516
532
  proxyRaw: normalized.proxy,
517
533
  platform: normalized.platform,
534
+ // The service→credentials map (accounts.gmail / .github / …) — the panel
535
+ // reads identities from here, so it must travel with the list view.
536
+ accounts: normalized.accounts,
518
537
  // parity with electron_list_profiles so the panel renders the same row
519
538
  ipInfo: profileStore.normalizeIpInfo(entry.ipInfo),
520
539
  logins: (Array.isArray(entry.logins) ? entry.logins : []).map(profileStore.normalizeLogin),
@@ -537,7 +556,7 @@ function registerChromeTools(registerTool) {
537
556
  async ({ includeHidden } = {}) => {
538
557
  const entries = listPrivateChromeEntries({ includeHidden: !!includeHidden });
539
558
  const gmails = entries
540
- .map(({ profileKey, accountIdx, entry }) => normalizePrivateChromeEntry(profileKey, accountIdx, entry).gmail)
559
+ .map(({ profileKey, accountIdx, entry }) => resolveGmail(normalizePrivateChromeEntry(profileKey, accountIdx, entry)))
541
560
  .filter(Boolean);
542
561
  return toToolResult({ gmails });
543
562
  },
@@ -555,12 +574,13 @@ function registerChromeTools(registerTool) {
555
574
  const accounts = entries.map(({ profileKey, accountIdx, entry }) => {
556
575
  const normalized = normalizePrivateChromeEntry(profileKey, accountIdx, entry);
557
576
  const gh = normalized.platform?.github || {};
577
+ const ghAcct = (normalized.accounts && normalized.accounts.github) || {};
558
578
  return {
559
579
  profileKey,
560
580
  accountIdx,
561
- gmail: normalized.gmail,
562
- email: gh.email || "",
563
- username: gh.username || "",
581
+ gmail: resolveGmail(normalized),
582
+ email: gh.email || ghAcct.email || "",
583
+ username: gh.username || ghAcct.account || "",
564
584
  };
565
585
  });
566
586
  return toToolResult({ githubAccounts: accounts });