github TypeScript analyzed 49bc83e

ijmh2/ripieno

github

A self-hosted shared workspace where several people and several AI agents work on one codebase - every message and file change attributed to a named agent belonging to a named person. Everyone brings their own: a Claude Code or Codex subscription, an API key for any OpenAI-compatible endpoint, or a local model via Ollama.

maintainer
ijmh2
licence
MIT
first seen
2026-08-08
last seen
2026-09-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

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

tools

  • approve
  • context_add
  • context_read
  • room_actions
  • room_post
  • room_read
  • room_roster
  • workspace_edit_file
  • workspace_list_dir
  • workspace_list_files
  • workspace_read_file
  • workspace_run_command
  • workspace_search
  • workspace_write_file
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 49bc83e · analyzer v33 · 1d ago

skills & prompt files 1

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

code files: 172

filesystem 43

  • fs ijmh2-ripieno-49bc83e/packages/extension/esbuild.js :2 const fs = require("node:fs");
  • fs ijmh2-ripieno-49bc83e/packages/extension/src/browserSession.ts :2 import { mkdtemp, rm, access } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/extension/src/toolExecutor.ts :105 * `fs.writeFile` would change the file behind the editor's back — no undo, no
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test-host/run.js :2 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/agentHost.test.js :20 const fs = require("node:fs/promises");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/agentReconnect.test.js :5 const fs = require("node:fs/promises");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/claudeRunner.test.js :4 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/cliRunner.test.js :266 const raw = require("node:fs").readFileSync(path.join(__dirname, "fixtures/codex-0.153.1-readonly.jsonl"), "utf8");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/eventStreamAgent.js :10 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/handoffAgentHost.test.js :5 const fs = require("node:fs/promises");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/manifest.test.js :23 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/openaiCompat.test.js :19 const fs = require("node:fs");
show 28 more
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/providerEvents.test.js :18 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/releaseMetadata.test.js :3 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/roomPanelUi.test.js :3 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/roomUi.test.js :3 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/rosterReachesAgent.js :8 const fs = require("node:fs");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/soloRelay.test.js :17 const fs = require("node:fs/promises");
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/workspaceFs.test.js :90 await fs.readFile({ path: "/src/a.ts" });
  • fs (weak) ijmh2-ripieno-49bc83e/packages/extension/test/workspaceHosting.test.js :3 const fs = require("node:fs");
  • fs ijmh2-ripieno-49bc83e/packages/relay/src/bootstrap.ts :14 import { mkdir, readFile, writeFile } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/relay/src/roomStore.ts :15 import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/relay/test/bootstrap.test.ts :14 import { mkdtemp, readFile, writeFile, mkdir } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/relay/test/collaboration.test.ts :2 import { mkdtemp, rm } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/relay/test/roomStore.test.ts :14 import { mkdtemp, rm, stat, writeFile } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/relay/test/shutdown.test.ts :13 import { mkdtemp, rm, readdir } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-core/src/index.ts :21 import * as fs from "fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-core/src/paths.ts :17 import * as fs from "fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-core/src/walk.ts :16 import * as fs from "fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-core/test/escapes.test.ts :12 import { mkdtemp, rm, mkdir, writeFile, symlink } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-core/test/paths.test.ts :14 import { mkdtemp, rm, mkdir, writeFile, symlink } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-core/test/tools.test.ts :14 import { mkdtemp, rm, mkdir, writeFile, readFile } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-host/src/gate.ts :15 import { writeFile, mkdir } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-host/src/git.ts :18 import { access, chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
  • fs ijmh2-ripieno-49bc83e/packages/workspace-host/src/host.ts :14 import { realpath } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/concurrency.test.ts :17 import { mkdtemp, rm, mkdir, writeFile, readFile } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/gate.test.ts :12 import { mkdtemp, rm, readFile, writeFile } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/git.test.ts :13 import { mkdtemp, rm, mkdir, writeFile, readFile } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/integration.test.ts :15 import { mkdtemp, rm, writeFile, readFile, mkdir } from "node:fs/promises";
  • fs (weak) ijmh2-ripieno-49bc83e/scripts/demo-provenance.js :21 const { mkdtemp, mkdir, writeFile, rm } = require("node:fs/promises");

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

shell / exec 12

  • shell ijmh2-ripieno-49bc83e/packages/extension/src/browserSession.ts :1 import { spawn, type ChildProcess } from "node:child_process";
  • shell ijmh2-ripieno-49bc83e/packages/extension/src/extension.ts :4 import { spawn } from "child_process";
  • shell ijmh2-ripieno-49bc83e/packages/extension/src/runners.ts :15 import { spawn, type ChildProcess } from "child_process";
  • shell (weak) ijmh2-ripieno-49bc83e/packages/extension/test/claudeRunner.test.js :3 const cp = require("node:child_process");
  • shell ijmh2-ripieno-49bc83e/packages/workspace-core/src/index.ts :24 import { exec } from "child_process";
  • shell ijmh2-ripieno-49bc83e/packages/workspace-host/src/git.ts :16 import { exec } from "node:child_process";
  • shell (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/concurrency.test.ts :18 import { exec } from "node:child_process";
  • shell (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/git.test.ts :14 import { exec } from "node:child_process";
  • shell (weak) ijmh2-ripieno-49bc83e/packages/workspace-host/test/integration.test.ts :16 import { exec } from "node:child_process";
  • shell (weak) ijmh2-ripieno-49bc83e/scripts/demo-provenance.js :22 const { exec } = require("node:child_process");
  • shell (weak) ijmh2-ripieno-49bc83e/scripts/screenshots.js :18 const { execFileSync } = require("node:child_process");
  • shell (weak) ijmh2-ripieno-49bc83e/scripts/setup.js :19 const { execFileSync, execSync } = require("node:child_process");

network 10

  • net ijmh2-ripieno-49bc83e/packages/extension/src/identity.ts :96 const res = await fetch(`${API}/user`, {
  • net ijmh2-ripieno-49bc83e/packages/extension/src/runners.ts :496 response = await fetch(`${url}/chat/completions`, {
  • net (weak) ijmh2-ripieno-49bc83e/packages/extension/test/agentHost.test.js :21 const http = require("node:http");
  • net (weak) ijmh2-ripieno-49bc83e/packages/extension/test/browserSession.test.js :3 const http=require('node:http');
  • net (weak) ijmh2-ripieno-49bc83e/packages/extension/test/openaiCompat.test.js :18 const http = require("node:http");
  • net ijmh2-ripieno-49bc83e/packages/relay-client/src/index.ts :7 import { isIP } from "node:net";
  • net ijmh2-ripieno-49bc83e/packages/relay/src/server.ts :8 import { createServer } from "node:http";
  • net (weak) ijmh2-ripieno-49bc83e/packages/relay/test/resilience.test.ts :17 import net from "node:net";
  • net ijmh2-ripieno-49bc83e/packages/workspace-host/src/index.ts :9 import { createServer } from "node:http";
  • net (weak) ijmh2-ripieno-49bc83e/scripts/site.js :231 const http = require("node:http");

secrets 5

  • secrets ijmh2-ripieno-49bc83e/packages/extension/src/permissionServer.ts :24 const TOKEN = process.env.RIPIENO_APPROVAL_TOKEN;
  • secrets ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :22 const TOKEN = process.env.RIPIENO_WORKSPACE_TOKEN;
  • secrets ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :33 token: process.env.RIPIENO_TOKEN,
  • secrets ijmh2-ripieno-49bc83e/packages/relay/src/index.ts :24 const workspaceToken = process.env.RIPIENO_WORKSPACE_TOKEN;
  • secrets ijmh2-ripieno-49bc83e/packages/workspace-host/src/index.ts :15 const workspaceToken = process.env.RIPIENO_WORKSPACE_TOKEN;

tool registrations 21

  • approve ijmh2-ripieno-49bc83e/packages/extension/src/permissionServer.ts :101
  • context_read ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :111
  • context_add ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :123
  • workspace_read_file ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :141
  • workspace_list_dir ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :155
  • workspace_search ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :165
  • workspace_write_file ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :175
  • workspace_edit_file ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :185
  • workspace_run_command ijmh2-ripieno-49bc83e/packages/extension/src/workspaceServer.ts :196
  • room_read ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :52
  • room_post ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :75
  • room_roster ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :104
show 9 more
  • context_read ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :139
  • context_add ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :181
  • workspace_read_file ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :241
  • workspace_list_files ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :258
  • workspace_search ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :272
  • workspace_write_file ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :286
  • workspace_edit_file ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :302
  • workspace_run_command ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :320
  • room_actions ijmh2-ripieno-49bc83e/packages/mcp/src/index.ts :335

install hooks 1

  • prepare ijmh2-ripieno-49bc83e/package.json :24 npm run build:relay --if-present

declared dependencies 1

  • markdown-it@^14.1.0

ide-extension 1

  • eager-activation (medium) ijmh2-ripieno-49bc83e/packages/extension/test-host/driver/package.json activationEvents includes "*" — runs on every window load

transport_posture 2

  • network-listening, binds all interfaces, no auth detected ijmh2-ripieno-49bc83e/packages/relay/test/identityDefault.test.ts :82 () => startServer({ port: 0, mode: "byo", host: "0.0.0.0" }),
  • network-listening, binds all interfaces, no auth detected ijmh2-ripieno-49bc83e/packages/workspace-host/src/index.ts :105 http.listen(port, "0.0.0.0");