github JavaScript analyzed 9f05329

DevZonayed/Mochi

github

Browser companion plugin for AI coding assistants — Chrome automation MCP, in-page hint messaging, and persistent project memory across Claude Code sessions.

maintainer
DevZonayed
license
MIT
first seen
2026-06-07
last seen
2026-08-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

tool count over time

06-07 08:01 now
53t
53t
capabilities 53 tools
transport stdio · http counts 53 tools · 0 res · 0 prompts permission surface via README inference

tools

  • browser_act_and_observe

    Perform one action (click/type/navigate/press_key/click_at) and classify the result: WORKS / NO-OP / ERROR / NAVIGATES. A NO-OP (clickable but nothing changed) is a dead control = defect. Returns urlC

  • browser_assert

    Verify url-contains, url-equals, title-contains, element-exists, element-missing, text-contains, text-equals. Returns {ok, got}.

  • browser_assert_no_errors

    One-call health gate: ok=false if any console error/uncaught exception or any >=400/failed request happened since the page loaded (sinceNavigation default, or sinceMs, with ignoreUrlContains). Failed-

  • browser_audit_interactives

    Enumerate every actionable control on the page (scope:"all"\

  • browser_clear_emulation

    Reset viewport overrides.

  • browser_click

    Click by selector (CDP). Pass intent to cache the selector for next time.

  • browser_click_at

    Click at pixel coords (CDP).

  • browser_close_tab

    Close a specific session tab.

  • browser_console_messages

    accepts sinceNavigation:true to scope to the

  • browser_emulate_viewport

    Device Mode via CDP. Presets + custom width/height/DPR/UA.

  • browser_forget_selector

    Drop a cached entry.

  • browser_links

    Compact visible links with text, href, selector ref, and box.

  • browser_list_selectors

    Inspect the cache.

  • browser_list_tabs

    List session tabs + CDP attachment state.

  • browser_navigate

    Navigate primary tab, wait for load.

  • browser_network_requests

    accepts sinceNavigation, sinceMs, and

  • browser_open_tab

    Open new tab inside the session group.

  • browser_page_assets

    Hash the live page assets (script/css/document) with sha256 + a pageHash. Confirm the live bundle hash == the built hash so you never test a stale cached deploy.

  • browser_playbook_dashboard

    Generate a self-contained HTML dashboard from the library; opens in the active browser session.

  • browser_playbook_delete

    Remove a playbook + workflow + screenshots.

  • browser_playbook_diff_accept

    Bless a run's per-step screenshots as the new visual reference; bumps playbook_version.

  • browser_playbook_export

    Export one or more playbooks to a single JSON bundle file. Includes embedded base64 screenshots.

  • browser_playbook_get

    Return one playbook with meta + body sections + workflow JSON.

  • browser_playbook_import

    Import a playbook bundle (file / inline JSON / https URL). Supports overwrite + rewriteOrigin (e.g., staging → production).

  • browser_playbook_list

    List playbooks under .continuum/playbooks/, filter by origin/tag/verifiable.

  • browser_playbook_match

    Score-match playbooks against a URL, intent, or task description.

  • browser_playbook_propose_update

    Given a successful trace, create or update the matching playbook. Inputs and steps auto-inferred.

  • browser_playbook_run

    Replay a playbook (with self-heal) using provided inputs; recursively executes composes/next chains; returns verdict + evidence.

  • browser_playbook_save

    Create/update a playbook (validates frontmatter and required sections).

  • browser_playbook_secret_check

    Validate that a playbook's type: secret inputs are resolvable (env or .continuum/secrets/). Returns availability only — never values.

  • browser_playbook_seed_from_codebase

    Static-analyze the project's frontend (Next.js / Vite / CRA) and emit draft playbooks per route + form. Solves cold-start on in-house apps.

  • browser_press_key

    Real keyboard event (CDP).

  • browser_recall_selector

    "Do I already know how to find X on this site?" Returns cached selector or null.

  • browser_request_attention

    Post an OS notification asking the human to look (captcha, choice, or "done — come look"). Click focuses the window.

  • browser_run_history

    Last N runs of a workflow.

  • browser_screenshot

    PNG/JPEG (viewport / fullPage / elementRef).

  • browser_scroll

    Absolute {x,y} or relative {deltaX,deltaY}.

  • browser_session_end

    Detach debugger, ungroup or close session tabs.

  • browser_session_health

    accepts heal:true to re-attach the debugger to

  • browser_session_start

    New tab group + primary tab. Pass newWindow:true to spawn a fresh window. Posts a click-to-focus notification instead of stealing focus.

  • browser_set_storage

    Deterministic auth/state seeding — set localStorage, sessionStorage, and cookies (or clear) in one call so a flow starts from a known logged-in state.

  • browser_snapshot

    ARIA tree with stable refs + pixel boxes. Defaults to compact, viewport-only, redacted, depth-limited, and 12KB capped.

  • browser_snapshot_node

    Return one compact subtree from the stored snapshot by ref, text, or query path.

  • browser_snapshot_query

    Search the stored snapshot by text/name/role/ref/tag and return tiny excerpts.

  • browser_text

    Compact visible text lines, optionally filtered by query. Use before snapshot for reading/searching content.

  • browser_type

    Focus + clear + insertText. Pass intent to cache.

  • browser_upload_file

    Attach a file to a page target via a strategy chain: direct (DOM.setFileInputFiles) → intercept (file-chooser dialog) → drop (synthesized DataTransfer + DragEvent) → paste (synthesized ClipboardEvent)

  • browser_upload_stage

    Stage a file into the per-project library at .continuum/uploads/. Accepts path, https url, dataUrl, or base64. Returns a stable stashId (sha256-based, idempotent) reusable across many uploads.

  • browser_wait

    Sleep up to 60s.

  • browser_wait_for_response

    Block until a matching network response arrives (urlGlob/urlContains, method, statusGte/statusLt, timeoutMs). Proves a write actually persisted instead of guessing from the UI.

  • browser_window_resize

    Resize/move/maximize the actual window (only safe with newWindow).

  • browser_workflow_run

    Replay. Cached selector → self-heal by role+name → screenshot on miss.

  • browser_workflow_save

    Persist current session's auto-traced actions as a named workflow.

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

analyzed commit 9f05329 · analyzer v33 · 2w ago

skills & prompt files 2

danger signals3

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

code files: 138

filesystem 78

  • fs DevZonayed-Mochi-9f05329/install.js :11 import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/hooks/pre_tool_use.js :12 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/hooks/session_end.js :8 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/hooks/session_start.js :2 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/hooks/stop.js :14 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/hooks/user_prompt_submit.js :10 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/archive.js :6 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/comms_config.js :7 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/comms_import.js :16 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/comms_state.js :1 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/comms_store.js :8 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/dream_finalize.js :20 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/feedback.js :11 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/hint_formatter.js :10 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/install_id.js :10 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/paths.js :2 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/recall.js :16 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/rename_cli.js :5 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/render_archive.js :14 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/status.js :5 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/telemetry_cli.js :6 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/telemetry_config.js :11 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/telemetry_emit.js :42 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/telemetry_log.js :10 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/verification_ledger.js :23 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/verification_log.js :9 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/continuum/lib/write_link.js :14 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-popup-synthetic.mjs :10 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-all.mjs :4 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-config.mjs :5 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-emit.mjs :5 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-install-id.mjs :4 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-log.mjs :5 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/plugins/qa/lib/qa_coverage.js :32 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/plugins/qa/lib/qa_coverage.test.mjs :15 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_codebase_seed.test.mjs :4 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comment_merge.test.mjs :10 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_build_config.test.mjs :4 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_bundle_smoke.test.mjs :19 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_ci_verify.test.mjs :5 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_mcp_entry.test.mjs :4 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_server.test.mjs :5 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/_comms_smoke.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_state_meta.test.mjs :12 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_wa_capture.test.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_wa_lifecycle.test.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_comms_wa_lock.test.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_fixtures/playbooks/server.mjs :2 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_fixtures/upload/server.mjs :2 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/_multi-client.mjs :7 import { mkdtempSync } from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_playbook_bundles.test.mjs :4 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_playbook_dashboard.test.mjs :4 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/_playbook_e2e.mjs :7 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_playbook_wire.test.mjs :4 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_playbooks.test.mjs :4 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_secrets.test.mjs :4 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_telemetry_ci_verify.test.mjs :3 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/server/_upload_e2e.mjs :9 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_upload_wire.test.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_uploads.test.mjs :5 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/server/_visual_diff.test.mjs :4 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/bridge.js :25 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/server/src/chrome-launcher.js :6 import { existsSync } from "node:fs";
  • fs DevZonayed-Mochi-9f05329/server/src/codebase-seed.js :3 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/comms/whatsapp.js :6 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/memory.js :16 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/server/src/playbook-bundles.js :3 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/playbook-dashboard.js :3 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/playbooks.js :3 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/secrets.js :3 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/tools.js :12 import fsp from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/uploads.js :5 import fs from "node:fs/promises";
  • fs DevZonayed-Mochi-9f05329/server/src/visual-diff.js :3 import fs from "node:fs/promises";
  • fs (weak) DevZonayed-Mochi-9f05329/telemetry-server/_docker.test.mjs :3 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/telemetry-server/_server.test.mjs :3 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/telemetry-server/_server_pkg.test.mjs :3 import fs from "node:fs";
  • fs (weak) DevZonayed-Mochi-9f05329/telemetry-server/_store.test.mjs :3 import fs from "node:fs";
  • fs DevZonayed-Mochi-9f05329/telemetry-server/store.mjs :5 import fs from "node:fs";

shell / exec 14

  • shell DevZonayed-Mochi-9f05329/install.js :13 import { spawnSync } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/plugins/continuum/hooks/session_start.js :5 import { execSync } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/plugins/continuum/lib/dream_finalize.js :22 import { execSync } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/plugins/continuum/lib/feedback.js :14 import { execSync } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/plugins/continuum/lib/write_link.js :17 import { execSync } from "node:child_process";
  • shell (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-popup-synthetic.mjs :7 import { spawn, spawnSync } from "node:child_process";
  • shell (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-telemetry-all.mjs :3 import { spawnSync } from "node:child_process";
  • shell (weak) DevZonayed-Mochi-9f05329/plugins/qa/lib/qa_coverage.test.mjs :14 import { spawnSync } from "node:child_process";
  • shell (weak) DevZonayed-Mochi-9f05329/server/_comms_bundle_smoke.test.mjs :23 import { spawn, spawnSync } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/server/_comms_smoke.mjs :2 import { spawn } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/server/_integration.mjs :7 import { spawn } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/server/src/bridge.js :27 import { exec } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/server/src/chrome-launcher.js :5 import { spawn } from "node:child_process";
  • shell DevZonayed-Mochi-9f05329/server/src/secrets.js :6 import { execSync as _execSync } from "node:child_process";

network 14

  • net DevZonayed-Mochi-9f05329/extension/background.js :912 const resp = await fetch(chrome.runtime.getURL(`icons/mochi-${s}.png`));
  • net DevZonayed-Mochi-9f05329/plugins/continuum/lib/broker.js :22 const res = await fetch(`${url}${path}`, { ...opts, signal: ctrl.signal });
  • net DevZonayed-Mochi-9f05329/plugins/continuum/lib/telemetry_emit.js :8 // deps.fetch — injected fetch (defaults to global fetch) so tests mock it.
  • net (weak) DevZonayed-Mochi-9f05329/plugins/continuum/tests/run-popup-synthetic.mjs :76 const r = await fetch(`${BASE}${p}`, opts);
  • net DevZonayed-Mochi-9f05329/server/_claude_sessions.mjs :42 const r = await (await fetch(`${BASE}/claude/sessions`)).json();
  • net (weak) DevZonayed-Mochi-9f05329/server/_fixtures/playbooks/server.mjs :1 import http from "node:http";
  • net (weak) DevZonayed-Mochi-9f05329/server/_fixtures/upload/server.mjs :1 import http from "node:http";
  • net DevZonayed-Mochi-9f05329/server/_integration.mjs :378 const osResp = await fetch(`http://127.0.0.1:${TEST_PORT}/os/open-notification-settings`, { method: "POST" });
  • net (weak) DevZonayed-Mochi-9f05329/server/_uploads.test.mjs :159 import http from "node:http";
  • net DevZonayed-Mochi-9f05329/server/src/bridge.js :24 import http from "node:http";
  • net DevZonayed-Mochi-9f05329/server/src/playbook-bundles.js :5 import { request as undiciRequest } from "undici";
  • net DevZonayed-Mochi-9f05329/server/src/uploads.js :7 import { request as undiciRequest } from "undici";
  • net (weak) DevZonayed-Mochi-9f05329/telemetry-server/_server.test.mjs :29 fetch(base + p, { method: "POST", headers: { "content-type": "application/json", ...headers }, body: JSON.stringify(body) });
  • net DevZonayed-Mochi-9f05329/telemetry-server/server.mjs :6 import http from "node:http";

secrets 2

  • secrets (weak) DevZonayed-Mochi-9f05329/server/_playbook_wire.test.mjs :89 process.env.MOCHI_TEST_SECRET = "topsecret";
  • secrets (weak) DevZonayed-Mochi-9f05329/server/_secrets.test.mjs :67 process.env.GMAIL_PASSWORD = "x";

install hooks 1

  • postinstall DevZonayed-Mochi-9f05329/package.json :14 cd server && npm install

perm:untrusted 1

  • untrusted DevZonayed-Mochi-9f05329/server/_claude_sessions.mjs :42 const r = await (await fetch(`${BASE}/claude/sessions`)).json();