github TypeScript analyzed f4b861f

PM-Shawn/Abu-Cowork

github

Open-source alternative to Claude Cowork — a local-first AI agent desktop app · multi-model · self-evolving skills · privacy-first

maintainer
PM-Shawn
license
NOASSERTION
first seen
2026-07-04
last seen
2026-08-02
releases · 30d
18
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution ×3 in PM-Shawn/Abu-Cowork
  2. HIGH code analysis flagged dynamic code execution ×2 in PM-Shawn/Abu-Cowork
  3. HIGH code analysis flagged dynamic code execution ×2 in PM-Shawn/Abu-Cowork
  4. HIGH code analysis flagged dynamic code execution ×2 in PM-Shawn/Abu-Cowork
  5. HIGH code analysis flagged dynamic code execution ×2 in PM-Shawn/Abu-Cowork
  6. HIGH code analysis flagged dynamic code execution ×2 in PM-Shawn/Abu-Cowork
capabilities 0 tools
transport stdio · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit f4b861f · analyzer v28 · 2d ago

skills & prompt files 29

danger signals5

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

code files: 937

filesystem 5

  • fs PM-Shawn-Abu-Cowork-f4b861f/abu-browser-bridge/src/version.ts :1 import { readFileSync } from 'fs';
  • fs PM-Shawn-Abu-Cowork-f4b861f/abu-chrome-extension/build.js :2 import { cpSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
  • fs PM-Shawn-Abu-Cowork-f4b861f/src/eval/report.ts :7 import { writeFileSync, readFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
  • fs PM-Shawn-Abu-Cowork-f4b861f/src/eval/run.ts :16 import { readFileSync } from 'node:fs';
  • fs PM-Shawn-Abu-Cowork-f4b861f/src/eval/runOpenAI.ts :23 import { readFileSync } from 'node:fs';

shell / exec 6

  • shell PM-Shawn-Abu-Cowork-f4b861f/abu-browser-bridge/src/index.ts :67 const { execSync } = await import('child_process');
  • shell PM-Shawn-Abu-Cowork-f4b861f/src/core/mcp/client.ts :47 // Node.js child_process. Implements the MCP Transport interface.
  • shell PM-Shawn-Abu-Cowork-f4b861f/src/core/safety/contentGuard.ts :169 { id: 'exec_string', severity: 'high', category: 'obfuscation', regex: /\bexec\s*\(\s*["\']/i, description: 'exec() with string argument' },
  • shell PM-Shawn-Abu-Cowork-f4b861f/src/core/tools/definitions/fileTools.ts :348 // `` $` ``, `$'` in new_content as special patterns (even with a string
  • shell PM-Shawn-Abu-Cowork-f4b861f/src/core/trigger/triggerEngine.ts :31 return new RegExp(`^${regex}$`, 'i').test(str);
  • shell PM-Shawn-Abu-Cowork-f4b861f/src/core/trigger/triggerPermission.ts :22 return new RegExp(`^${regex}$`, 'i').test(command);

network 24

  • net PM-Shawn-Abu-Cowork-f4b861f/abu-browser-bridge/src/index.ts :39 const res = await fetch(`http://127.0.0.1:${DISCOVERY_PORT}/status`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/abu-browser-bridge/src/wsServer.ts :14 import { createServer, type Server as HTTPServer } from 'http';
  • net PM-Shawn-Abu-Cowork-f4b861f/abu-chrome-extension/src/background/index.ts :119 const res = await fetch(DISCOVERY_URL, { signal: controller.signal });
  • net PM-Shawn-Abu-Cowork-f4b861f/src-tauri/browser-extension/background.js :66 const res = await fetch(DISCOVERY_URL, { signal: controller.signal });
  • net PM-Shawn-Abu-Cowork-f4b861f/src/components/enterprise/EnterpriseLoginPage.tsx :63 const res = await fetch(`${base}/api/client/v1/session`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/enterprise/api.ts :127 const res = await fetch(endpoint, { ...fetchInit, headers: buildHeaders(b) })
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/enterprise/auth.ts :47 const initRes = await fetch(`${base}/api/client/bind/init`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/enterprise/bootstrap.ts :65 const res = await fetch(`${base}/api/client/v1/bootstrap`)
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/enterprise/token-refresh.ts :54 const res = await fetch(url, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/enterprise/useEnterpriseModels.ts :27 fetch(`${r.baseUrl}/v1/models`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/im/adapters/base.ts :23 const response = await fetch(webhookUrl, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/llm/openai-compatible.ts :428 // the fetch (the merged signal is GC'd with chat() — no listener leak).
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/observability/langfuse.ts :29 async fetch(url: string, options: TauriFetchOptions): Promise<Response> {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/safety/contentGuard.ts :108 { id: 'env_exfil_fetch', severity: 'critical', category: 'exfiltration', regex: /fetch\s*\([^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|API)/i, description: 'fetch() call interpolating secret environment
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/skill/npmInstaller.ts :177 resp = await fetch(url, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/tools/definitions/mediaTools.ts :80 // Call image generation API via Tauri fetch (bypasses CORS)
  • net PM-Shawn-Abu-Cowork-f4b861f/src/core/updates/checker.ts :35 const res = await fetch(LATEST_JSON_URL, { cache: 'no-cache' });
  • net PM-Shawn-Abu-Cowork-f4b861f/src/eval/runOpenAI.ts :139 const res = await fetch(url, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/consoleAnnouncement.ts :50 res = await fetch(`${baseUrl}/api/announcements?version=${APP_VERSION}`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/consoleDiagnostic.ts :29 res = await fetch(`${baseUrl}/api/diagnostics/upload`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/consoleError.ts :17 fetch(`${baseUrl}/api/error`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/consoleFeedback.ts :14 fetch(`${baseUrl}/api/feedback`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/consolePing.ts :17 fetch(`${baseUrl}/api/ping`, {
  • net PM-Shawn-Abu-Cowork-f4b861f/src/utils/previewUrl.ts :11 * 1. Lazy-fetch (port, token) from Tauri on first call; cache for app lifetime.

secrets 2

  • secrets PM-Shawn-Abu-Cowork-f4b861f/src/eval/run.ts :86 ?? process.env.ANTHROPIC_API_KEY
  • secrets PM-Shawn-Abu-Cowork-f4b861f/src/eval/runMiniMaxAB.ts :28 const API_KEY = process.env.MINIMAX_API_KEY;

install hooks 1

  • prepare PM-Shawn-Abu-Cowork-f4b861f/package.json :40 husky

declared dependencies 117

  • @modelcontextprotocol/sdk@^1.29.0
  • @anthropic-ai/sdk@^0.95.2
  • @cfworker/json-schema@^4.1.1
  • @codemirror/theme-one-dark@^6.1.3
  • @mozilla/readability@^0.6.0
  • @tauri-apps/api@^2.11.1
  • @tauri-apps/plugin-clipboard-manager@^2.3.2
  • @tauri-apps/plugin-deep-link@^2.4.9
  • @tauri-apps/plugin-dialog@^2.7.1
  • @tauri-apps/plugin-fs@^2.5.1
  • @tauri-apps/plugin-global-shortcut@^2.3.2
  • @tauri-apps/plugin-http@^2.5.9
  • @tauri-apps/plugin-notification@^2.3.3
  • @tauri-apps/plugin-opener@^2.5.4
  • @tauri-apps/plugin-os@^2.3.2
  • @tauri-apps/plugin-process@^2.3.1
  • @tauri-apps/plugin-shell@^2.3.5
  • @tauri-apps/plugin-updater@^2.10.1
  • @types/diff@^7.0.2
  • @uiw/codemirror-extensions-langs@^4.25.11
  • @uiw/react-codemirror@^4.25.11
  • @xterm/addon-fit@^0.11.0
  • @xterm/xterm@^6.0.0
  • aes-js@^3.1.2
  • class-variance-authority@^0.7.1
  • clsx@^2.1.1
  • diff@^9.0.0
  • docx-preview@^0.3.7
  • fflate@^0.8.3
  • immer@^11.1.15
  • langfuse@^3.38.20
  • linkedom@^0.18.13
  • lucide-react@^0.575.0
  • mermaid@^11.15.0
  • pptx-preview@^1.0.7
  • pptxgenjs@^4.0.1
  • qrcode@^1.5.4
  • radix-ui@^1.4.3
  • react@^19.2.7
  • react-dom@^19.2.7
  • react-markdown@^10.1.0
  • react-pdf@^10.4.1
  • react-syntax-highlighter@^16.1.1
  • react-virtuoso@^4.18.11
  • remark-breaks@^4.0.0
  • remark-gfm@^4.0.1
  • tailwind-merge@^3.5.0
  • xlsx@^0.18.5
  • yaml@^2.8.2
  • zod@^4.3.6
  • zustand@^5.0.14
  • @eslint/js@^10.0.1
  • @playwright/test@^1.61.1
  • @tailwindcss/vite@^4.3.3
  • @tauri-apps/cli@^2.11.4
  • @testing-library/jest-dom@^6.9.1
  • @testing-library/react@^16.3.2
  • @testing-library/user-event@^14.6.1
  • @types/aes-js@^3.1.4
  • @types/node@^25.7.0
  • @types/qrcode@^1.5.6
  • @types/react@^19.2.17
  • @types/react-dom@^19.2.3
  • @types/react-syntax-highlighter@^15.5.13
  • @vitejs/plugin-react@^6.0.3
  • @vitest/coverage-v8@^4.1.10
  • eslint@^10.3.0
  • eslint-plugin-react-hooks@^7.1.1
  • eslint-plugin-react-refresh@^0.5.3
  • globals@^17.6.0
  • happy-dom@^20.9.0
  • husky@^9.1.7
  • lint-staged@^17.0.8
  • shadcn@^4.7.0
  • tailwindcss@^4.2.1
  • tsx@^4.21.0
  • tw-animate-css@^1.4.0
  • typescript@~6.0.3
  • typescript-eslint@^8.59.3
  • vite@^8.0.16
  • vitest@^4.1.6
  • tauri-build@2
  • tauri@2
  • tauri-plugin-dialog@2
  • tauri-plugin-fs@2
  • tauri-plugin-shell@2
  • tauri-plugin-notification@2
  • tauri-plugin-opener@2
  • tauri-plugin-os@2
  • tauri-plugin-http@2
  • tauri-plugin-clipboard-manager@2
  • tauri-plugin-global-shortcut@2
  • tauri-plugin-updater@2
  • tauri-plugin-process@2
  • tauri-plugin-deep-link@2
  • serde@1
  • serde_json@1
  • tokio@1
  • tokio-tungstenite@0.26
  • futures-util@0.3
  • prost@0.13
  • reqwest@0.13
  • xcap@0.9
  • enigo@0.3
  • base64@0.22
  • image@0.25
  • tempfile@3
  • trash@5
  • rusqlite@0.31
  • axum@0.7
  • tower@0.5
  • mime_guess@2
  • uuid@1
  • urlencoding@2
  • subtle@2.5
  • tokio-util@0.7
  • portable-pty@0.9