github JavaScript analyzed eb5c073

cicy-ai/cicy-desktop

github

Electron desktop automation worker — 100+ system tools (Chrome/CDP, JS exec, screenshots, file/shell ops) over MCP & HTTP, with a homepage UI for managing local & remote AI teams.

maintainer
cicy-ai
license
Apache-2.0
first seen
2026-07-07
last seen
2026-08-01
releases · 30d
43
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · http · sse counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

code evidence vv2.1.262 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 126

filesystem 50

  • fs cicy-ai-cicy-desktop-eb5c073/src/app-updater.js :19 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/auth-loopback.js :24 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :9 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :17 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/registry.js :10 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/sidecar-ipc.js :19 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/backends/window-manager.js :10 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-launcher.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/chrome/debugger-port-resolver.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :97 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/i18n/index.js :10 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/main-old.js :5 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/main.js :6 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/master/chrome-config.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/master/master-token-manager.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/master/worker-inventory.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/profiles/profile-store.js :24 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/profiles/trusted-origins-store.js :17 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/server/logging.js :6 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :19 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/colima-docker.js :30 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :17 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :22 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :35 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/native.js :17 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/runtime.js :31 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :20 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/newtab-protocol.js :15 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/panel-cells.js :16 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/account-tools.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/chrome-tools.js :5 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/desktop-snapshot-tools.js :5 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/exec-js.js :63 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/exec-tools.js :8 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/file-tools.js :5 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/hook-gemini.js :392 const fs = require('fs');
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :16 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/tab-browser-tools.js :19 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tools/window-tools.js :583 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/tray.js :12 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/auth.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/brand-host-electron.js :28 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/desktop-snapshot.js :24 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/global-json.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/rpc-audit.js :14 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-monitor.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-registry.js :23 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-state.js :4 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-thumbnails.js :18 const fs = require("fs");
  • fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-utils.js :8 const fs = require("fs");

shell / exec 25

  • shell cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :118 const { execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :23 const { execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/backends/open-external.js :14 const { spawn } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/backends/sidecar-ipc.js :12 // sidecar:restart → { ok, ... } — stop + fresh spawn (same version)
  • shell cicy-ai-cicy-desktop-eb5c073/src/backends/window-manager.js :13 const { execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-launcher.js :7 const { spawn, execFileSync } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :96 const cp = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/main-old.js :641 const { exec } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/main.js :780 const { execFileSync } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :24 const { spawn, execFileSync, execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/colima-docker.js :27 const { execFile, spawn } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :14 const { execFile, execFileSync, spawn } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :21 const { spawn, execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :38 const { execFile, execFileSync } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/native.js :16 const { spawn, execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/runtime.js :30 const { execFile } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :17 const { execFile, execFileSync, spawn } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/tools/chrome-tools.js :8 const { execFileSync } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/tools/exec-tools.js :5 const { exec } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :5 const { execSync } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/utils/brand-host-electron.js :29 const cp = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/utils/desktop-snapshot.js :27 const { execFileSync, spawn } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/utils/process-utils.js :4 const { exec } = require("child_process");
  • shell cicy-ai-cicy-desktop-eb5c073/src/utils/rpc-guard.js :19 // child_process directly and bypass any IPC gate; closing that requires dropping
  • shell cicy-ai-cicy-desktop-eb5c073/src/utils/window-utils.js :72 // XSS can't `require('child_process')` to bypass the rpc:guarded gate.

network 29

  • net cicy-ai-cicy-desktop-eb5c073/src/app-updater.js :20 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/auth-email.js :63 const res = await fetch(REQUEST_URL, {
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/auth-loopback.js :21 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/homepage-react/assets/index-BdDyCznZ.js :1 (function(){const v=document.createElement("link").relList;if(v&&v.supports&&v.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))o(p);new MutationO
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :10 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :20 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/poller.js :8 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/backends/updater.js :11 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-cdp-client.js :7 const response = await fetch(url);
  • net cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :147 const r = await fetch(url, { signal: ctrl.signal, cache: "no-store" });
  • net cicy-ai-cicy-desktop-eb5c073/src/cluster/remote-executor.js :5 const response = await fetch(new URL(requestPath, baseUrl), {
  • net cicy-ai-cicy-desktop-eb5c073/src/cluster/worker-client.js :32 const response = await this.fetch(new URL(path, this.masterUrl), {
  • net cicy-ai-cicy-desktop-eb5c073/src/main-old.js :10 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/main.js :80 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :21 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :15 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :25 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :57 const req = require("https").get("https://www.gstatic.com/generate_204", { timeout: 2000 }, (res) => {
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/mirrors.js :58 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/net-detect.js :15 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/version.js :9 const http = require("http");
  • net cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :1021 const https = require("https");
  • net cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/newtab-protocol.js :81 const up = await fetch(`http://127.0.0.1:${CICY_PORT}/newtab?profile=${encodeURIComponent(profile)}`);
  • net cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/panel-cells.js :274 const r = await fetch("http://127.0.0.1:8008/api/tmux/panes", {
  • net cicy-ai-cicy-desktop-eb5c073/src/tools/cdp-tools.js :265 const blob = await fetch('data:image/png;base64,' + base64).then(r => r.blob());
  • net cicy-ai-cicy-desktop-eb5c073/src/tools/exec-js.js :10 "在窗口中执行JS代码并返回结果,支持async/await。示例: document.title 或 return document.title 或 await fetch('/api').then(r=>r.json())",
  • net cicy-ai-cicy-desktop-eb5c073/src/tools/hook-gemini.js :393 const https = require('https');
  • net cicy-ai-cicy-desktop-eb5c073/src/utils/process-utils.js :5 const net = require("net");
  • net cicy-ai-cicy-desktop-eb5c073/workers/render/src/App.jsx :445 const r = await window.cicy.cloud.fetch(`${base}/_agents`, { headers: hub.token ? { Authorization: `Bearer ${hub.token}` } : {} });

secrets 2

  • secrets cicy-ai-cicy-desktop-eb5c073/src/main.js :488 const workerToken = process.env.CICY_MASTER_TOKEN;
  • secrets cicy-ai-cicy-desktop-eb5c073/src/master/master-main.js :36 function startMasterServer({ port = 8100, masterToken = process.env.CICY_MASTER_TOKEN } = {}) {

install hooks 1

  • prepublishOnly cicy-ai-cicy-desktop-eb5c073/package.json :19 node scripts/build-homepage.cjs

declared dependencies 29

  • @modelcontextprotocol/sdk@^1.25.3
  • chrome-remote-interface@^0.33.0
  • cors@^2.8.5
  • electron-context-menu@^4.0.4
  • electron-log@^5.2.4
  • electron-updater@6.6.2
  • express@^4.18.2
  • i18next@^26.2.0
  • js-beautify@^1.15.4
  • js-yaml@^4.1.1
  • serve-index@^1.9.2
  • swagger-jsdoc@^6.2.8
  • swagger-ui-express@^5.0.1
  • zod@3.25
  • electron@41.0.3
  • electron-builder@^26.7.0
  • javascript-obfuscator@^5.4.7
  • prettier@^3.8.1
  • cicy-code-darwin-arm64@2.3.22
  • cicy-code-darwin-x64@2.3.22
  • cicy-code-linux-arm64@2.3.22
  • cicy-code-linux-x64@2.3.22
  • cicy-code-windows-x64@2.3.22
  • cicy-mihomo-darwin-arm64@1.10.4
  • cicy-mihomo-darwin-x64@1.10.4
  • cicy-mihomo-linux-arm64@1.10.4
  • cicy-mihomo-linux-x64@1.10.4
  • cicy-mihomo-windows-arm64@1.10.4
  • cicy-mihomo-windows-x64@1.10.4

clipboard 1

  • clipboard shell call cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :348 execSync(`xclip -selection clipboard -t image/jpeg -i ${jpegFile}`);

perm:untrusted 1

  • untrusted cicy-ai-cicy-desktop-eb5c073/src/tools/cdp-tools.js :265 const blob = await fetch('data:image/png;base64,' + base64).then(r => r.blob());