github TypeScript analyzed 7727eab

protonspy/open-wiki

github

A project's documentation as a wiki your AI agent already has open. Sources keep their original bytes; the agent reads them and writes pages through a gate that validates the schema, the wikilinks and the provenance. Windows desktop app, CLI and read-only MCP. No backend, your own key.

maintainer
protonspy
licence
Apache-2.0
first seen
2026-08-01
last seen
2026-08-07
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

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

tools

  • ow_index
  • ow_read_page
  • ow_read_source
  • ow_sources
skills & danger signals github-tarball
code evidence vv0.1.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 334

filesystem 158

  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/agent-prefs.ts :1 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/agent.ts :2 import { existsSync, readFileSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/edit-preview.ts :1 import { existsSync, readFileSync, statSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/page-guard.ts :3 import { existsSync, readFileSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/wiki-gate-backend.ts :1 import { existsSync, globSync, readFileSync, readdirSync, statSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/api.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/edit.ts :1 import { existsSync, readFileSync, realpathSync, rmSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/ingest.ts :2 import { readFile } from "node:fs/promises";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/project.ts :1 import { existsSync, statSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/recorder.ts :2 import { existsSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/settings.ts :1 import { existsSync, readdirSync, readFileSync } from "node:fs";
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/sources.ts :1 import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
show 28 more
  • fs protonspy-open-wiki-7727eab/apps/desktop/src/main/transcribe-run.ts :1 import { existsSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent-loop.spec.ts :2 import { existsSync, mkdtempSync, mkdirSync, rmSync, writeFileSync, readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent-prefs.spec.ts :1 import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent.spec.ts :10 } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/announcements.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/chat-pane.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/chat.spec.ts :1 import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/checks-pane.spec.ts :2 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/design-system.spec.ts :1 import { existsSync, readdirSync, readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/edit-preview.spec.ts :1 import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/edit.spec.ts :1 import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/editor-ui.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/empty-states.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/export.spec.ts :2 import { existsSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/first-run.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/harness-form.spec.ts :1 import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/honest-counts.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/keyboard.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/layout.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/loaded.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/open-existing.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/page-guard.spec.ts :2 import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/reader-keyboard.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/reading-surface.spec.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/settings-pane.spec.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/settings.spec.ts :1 import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/shell.spec.ts :1 import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/sources.spec.ts :9 } from "node:fs";

118 more not shown — this panel samples each group; the count above is the real total.

shell / exec 5

  • shell protonspy-open-wiki-7727eab/apps/desktop/src/main/recorder.ts :1 import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
  • shell protonspy-open-wiki-7727eab/packages/audio/src/ffmpeg.ts :1 import { spawn } from "node:child_process";
  • shell protonspy-open-wiki-7727eab/packages/audio/src/stt/index.ts :1 import { spawn } from "node:child_process";
  • shell (weak) protonspy-open-wiki-7727eab/scripts/dev-desktop.mjs :20 import { spawn } from "node:child_process";
  • shell (weak) protonspy-open-wiki-7727eab/scripts/fetch-ffmpeg.mjs :29 import { spawnSync } from "node:child_process";

network 5

  • net protonspy-open-wiki-7727eab/apps/desktop/src/main/settings.ts :70 * The credential check doubles as the model-list fetch (R2.5, 5.4): a successful
  • net protonspy-open-wiki-7727eab/packages/access/src/socket.ts :2 import { createConnection, createServer, type Server } from "node:net";
  • net (weak) protonspy-open-wiki-7727eab/packages/access/tests/socket.spec.ts :1 import { createConnection, createServer, type Server } from "node:net";
  • net protonspy-open-wiki-7727eab/packages/audio/src/stt/groq.ts :75 const doFetch = options.fetch ?? ((url, init) => fetch(url, init));
  • net (weak) protonspy-open-wiki-7727eab/scripts/fetch-ffmpeg.mjs :52 const res = await fetch(url);

secrets 1

  • secrets (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent.spec.ts :38 process.env.LANGSMITH_API_KEY = "leak";

tool registrations 4

  • ow_index protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :41
  • ow_read_page protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :48
  • ow_sources protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :55
  • ow_read_source protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :62

install hooks 1

  • prepack protonspy-open-wiki-7727eab/packages/cli/package.json :15 pnpm run build

declared dependencies 11

  • @eslint/js@^9.20.0
  • @types/node@^22.15.3
  • @vitest/coverage-v8@^3.2.4
  • esbuild@^0.24.0
  • eslint@^9.20.0
  • eslint-config-prettier@^10.0.1
  • globals@^16.0.0
  • prettier@^3.5.0
  • typescript@^5.9.2
  • typescript-eslint@^8.24.0
  • vitest@^3.2.4

obfuscation 1

  • dynamic require()/import() protonspy-open-wiki-7727eab/packages/cli/tests/harness-gate.spec.ts :131 const mod = (await import(`${pathToFileURL(file).href}?v=${counter++}`)) as {