github Python re-analysis due

protostatis/unchained-infra

github

Open infrastructure/control plane for Unchained

maintainer
protostatis
license
MIT
first seen
2026-06-10
last seen
2026-09-05
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

capabilities 31 tools
transport stdio · streamable-http · http counts 31 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • cdp_click
  • cdp_get_cookies
  • cdp_key_press
  • cdp_list_frames
  • cdp_list_tab_aliases
  • cdp_navigate
  • cdp_press_enter
  • cdp_provision_cleanup
  • cdp_provision_launch
  • cdp_screenshot
  • cdp_scroll
  • cdp_set_cookies
  • cdp_set_file
  • cdp_set_tab_alias
  • cdp_type
  • cdp_wait_ready
  • ddm
  • ddm_frame
  • intel_extract
  • intel_find_paths
  • intel_probe
  • intel_shape
  • intel_stores
  • js_eval
  • js_eval_frame
  • list_connected_agents
  • list_provisioned_tabs
  • rhythm_catch
  • rhythm_execute
  • rhythm_query
  • rhythm_train
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 795aef1 · analyzer v33 · 1d ago

skills & prompt files 2

danger signals2

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

code files: 243

filesystem 91

  • fs protostatis-unchained-infra-795aef1/deploy/compose_service_diff.py :18 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/e2e_fin_workspace_runtime.py :42 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/ensure_fin_terminal_secrets.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/rebuild_research_desk_vendor_manifest.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/research_desk_install_helper_smoke.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/terminal_runtime_reconciler.py :64 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_compose_service_diff.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_deploy_source_guard.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_fin_terminal_secrets.py :5 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_hosted_context_rollout.py :5 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_public_terminal_pilot.py :32 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_runtime_context_files.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_terminal_runtime_reconciler.py :27 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/test_workspace_runtime_provider.py :28 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/validate_hosted_context_rollout.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/deploy/workspace_runtime_provider.py :91 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/setup.py :9 long_description=(open("README.md", encoding="utf-8").read()),
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/analysis_runtime.py :2 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/capsule_runtime.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/cli.py :11 import shutil
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/codex_adapter.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_agent.py :11 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_session.py :5 import shutil
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/mcp_client.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/planning.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/reload_control.py :6 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/webapp.py :14 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/tools/oss_guard/check_agent_artifact_leaks.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/tools/oss_guard/check_private_imports.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/tools/oss_guard/check_public_doc_leaks.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/agent_package.py :17 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/agent_stream.py :85 with open(_env_obs) as _f:
  • fs (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/agent_cli.py :88 with open(_CLAUDE_MD_PATH) as f:
  • fs (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/runner.py :23 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/cdp_tool.py :180 with open(sc_path, "w") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/cdp_tool_packaged.py :98 with open(proc_cmdline, "rb") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/chat_agent_cli.py :29 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/chat_agent_codex.py :169 with open(path) as f:
  • fs protostatis-unchained-infra-795aef1/unchained/chat_agent_gemini.py :148 with open(path) as f:
  • fs protostatis-unchained-infra-795aef1/unchained/chat_agent_openrouter.py :435 with open(_CLAUDE_MD_PATH) as f:
  • fs protostatis-unchained-infra-795aef1/unchained/chat_agent_sdk.py :152 with open(path) as f:
  • fs protostatis-unchained-infra-795aef1/unchained/chat_event_transport.py :225 with open(path, "r", encoding="utf-8") as handle:
  • fs protostatis-unchained-infra-795aef1/unchained/chrome_bridge.py :30 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/fidelity_lab_checker.py :321 with open(report_path, "w") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/hosted_conversations.py :122 lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT, 0o600)
  • fs protostatis-unchained-infra-795aef1/unchained/maps_stream.py :46 with open(_env_obs) as _f:
  • fs protostatis-unchained-infra-795aef1/unchained/scheduled_tasks.py :24 from pathlib import Path
  • fs (weak) protostatis-unchained-infra-795aef1/unchained/scripts/research_desk_release_smoke.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/signup_agent.py :29 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/stream_ctl.py :30 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_agent_view_mobile_render.py :20 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_agent_view_preview_stability.py :12 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_bridge_helpers.py :194 with open(path, "w") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/test_cdp_tool_prov_roundtrip.py :15 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_chat_archives.py :78 with open(os.path.join(mod.ARCHIVE_DIR, "arc.json"), "w") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/test_chat_event_transport.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_chat_status.py :698 with open(path, "rb") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/test_credit.py :63 os.unlink(self._db_path)
  • fs protostatis-unchained-infra-795aef1/unchained/test_credit_handlers.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_dev_script.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_dev_server_smoke.py :17 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_fin_terminal.py :9 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_fin_workspace.py :25 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_hosted_billing.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_hosted_conversations.py :9 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_install_update.py :15 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_legal_pages.py :7 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_multi_slot_provision.py :15 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_open_core_boundary.py :12 with open(path, "r", encoding="utf-8") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/test_profile_enforcement.py :18 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_provider_key_crypto.py :35 os.unlink(self._tmp.name)
  • fs protostatis-unchained-infra-795aef1/unchained/test_provision_agent_isolation.py :22 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_provision_cleanup_slot.py :171 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_published_results.py :11 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_scheduled_tasks.py :5 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_scheduler_agent_access.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_semantic_mirror.py :6 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_tab_isolation.py :121 with open(path, "w") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/test_template_transforms.py :6 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_trial_new_chat.py :8 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_trial_slot_labels.py :5 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/test_unbrowser_mcp_router.py :8 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/test_web_contracts.py :12 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/unbrowser_mcp_router.py :25 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/web.py :18 from pathlib import Path
  • fs protostatis-unchained-infra-795aef1/unchained/web_app/handlers/chat_flow.py :173 with open(entry.path) as f:
  • fs protostatis-unchained-infra-795aef1/unchained/web_app/handlers/install_flow.py :502 with open(bridge_path, "rb") as f:
  • fs protostatis-unchained-infra-795aef1/unchained/web_app/handlers/pages.py :696 with open(session_path) as f:
  • fs (weak) protostatis-unchained-infra-795aef1/unchained/web_app/handlers/unbrowser_demo.py :12 import shutil
  • fs protostatis-unchained-infra-795aef1/unchained/web_app/research_desk_page.py :314 pprovalUrl){const approvalWindow=window.open(approvalUrl,'_blank','noopener');if(approvalWindow){setConnectNote('Approve the request in the local desk tab that just opened.');}else{setConnectNote('App
  • fs protostatis-unchained-infra-795aef1/unchained/web_app/runtime_agents.py :44 log_fh = open(log_path, "a")

shell / exec 35

  • shell protostatis-unchained-infra-795aef1/deploy/e2e_fin_workspace_runtime.py :34 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/research_desk_install_helper_smoke.py :14 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/terminal_runtime_reconciler.py :60 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/test_deploy_source_guard.py :5 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/test_fin_terminal_secrets.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/test_public_terminal_pilot.py :27 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/test_runtime_context_files.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/test_terminal_runtime_reconciler.py :22 import subprocess
  • shell protostatis-unchained-infra-795aef1/deploy/workspace_runtime_provider.py :87 import subprocess
  • shell protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/cli.py :12 import subprocess
  • shell protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/codex_adapter.py :6 import subprocess
  • shell protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_agent.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_session.py :6 import subprocess
  • shell protostatis-unchained-infra-795aef1/tools/oss_guard/check_public_doc_leaks.py :8 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/agent_stream.py :33 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/cdp_tool_packaged.py :30 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/chat_agent_cli.py :44 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/chrome_bridge.py :38 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/maps_stream.py :33 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/signup_agent.py :31 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/stream_ctl.py :32 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_agent_view_mobile_render.py :22 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_agent_view_preview_stability.py :13 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_cdp_tool_rhythm.py :9 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_fin_terminal.py :6 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_hosted_billing.py :9 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_install_update.py :16 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_semantic_mirror.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_template_transforms.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_trial_new_chat.py :9 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_trial_slot_labels.py :6 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/test_web_contracts.py :13 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/web.py :21 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/web_app/runtime_agents.py :7 import subprocess
  • shell protostatis-unchained-infra-795aef1/unchained/web_state.py :15 import subprocess

network 93

  • net protostatis-unchained-infra-795aef1/deploy/e2e_fin_workspace_runtime.py :32 import socket
  • net protostatis-unchained-infra-795aef1/deploy/research_desk_install_helper_smoke.py :12 import socket
  • net protostatis-unchained-infra-795aef1/deploy/test_workspace_runtime_provider.py :754 import urllib.request
  • net protostatis-unchained-infra-795aef1/deploy/workspace_runtime_provider.py :909 from urllib.parse import urlsplit
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/capsule_runtime.py :10 from urllib.parse import urlparse
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/cli.py :27 from urllib.parse import parse_qs, quote_plus, urlparse
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_agent.py :8 import urllib.error
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/mcp_client.py :5 import urllib.error
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/planning.py :10 from urllib.parse import parse_qs, quote_plus, unquote_plus, urlparse
  • net protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/webapp.py :16 from urllib.parse import parse_qs, quote, unquote, urlparse
  • net protostatis-unchained-infra-795aef1/unchained/agent_stream.py :39 import urllib.parse
  • net protostatis-unchained-infra-795aef1/unchained/analytics.py :12 from urllib.parse import urlparse
  • net protostatis-unchained-infra-795aef1/unchained/api.py :31 import urllib.parse
  • net (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/agent_openrouter.py :10 import httpx
  • net (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/evaluator.py :80 import httpx
  • net (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/runner.py :25 import urllib.parse
  • net protostatis-unchained-infra-795aef1/unchained/cdp_tool_packaged.py :32 import urllib.request
  • net protostatis-unchained-infra-795aef1/unchained/chat_agent_cli.py :34 import socket
  • net protostatis-unchained-infra-795aef1/unchained/chat_agent_codex.py :29 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/chat_agent_gemini.py :29 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/chat_agent_openrouter.py :46 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/chrome_bridge.py :34 import urllib.parse
  • net protostatis-unchained-infra-795aef1/unchained/domain_policy.py :6 from urllib.parse import urlparse
  • net protostatis-unchained-infra-795aef1/unchained/financial_workspace.py :165 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/maps_stream.py :37 import urllib.parse
  • net protostatis-unchained-infra-795aef1/unchained/mcp_server.py :630 from urllib.parse import urlparse
  • net protostatis-unchained-infra-795aef1/unchained/nudge.py :17 from urllib.parse import urlparse
  • net protostatis-unchained-infra-795aef1/unchained/private_core_client.py :14 import aiohttp
  • net protostatis-unchained-infra-795aef1/unchained/provision_helpers.py :8 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/published_results.py :185 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/relay.py :33 import urllib.parse
  • net protostatis-unchained-infra-795aef1/unchained/scheduled_tasks.py :29 import urllib.error
  • net protostatis-unchained-infra-795aef1/unchained/scheduler_agent.py :6 from urllib.parse import urlsplit, urlunsplit
  • net protostatis-unchained-infra-795aef1/unchained/scheduler_tool.py :19 import urllib.error
  • net protostatis-unchained-infra-795aef1/unchained/signup_agent.py :30 import socket
  • net protostatis-unchained-infra-795aef1/unchained/stream_ctl.py :31 import socket
  • net protostatis-unchained-infra-795aef1/unchained/test_agent.py :385 with patch("urllib.request.urlopen", return_value=mock_resp):
  • net protostatis-unchained-infra-795aef1/unchained/test_agent_view_mobile_render.py :21 import socket
  • net protostatis-unchained-infra-795aef1/unchained/test_agent_view_preview_stability.py :17 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/test_auth_redirect.py :10 from urllib.parse import parse_qs, urlparse
  • net protostatis-unchained-infra-795aef1/unchained/test_bridge_helpers.py :12 import urllib.error
  • net protostatis-unchained-infra-795aef1/unchained/test_cdp_tool_prov_roundtrip.py :284 patch.object(ct.urllib.request, "urlopen", return_value=response),
  • net protostatis-unchained-infra-795aef1/unchained/test_chat_event_transport.py :13 from aiohttp import ClientSession, web
  • net protostatis-unchained-infra-795aef1/unchained/test_chat_status.py :693 with patch("chat_agent_cli.urllib.request.urlopen", side_effect=fake_urlopen):
  • net protostatis-unchained-infra-795aef1/unchained/test_chat_turn_resume.py :13 from aiohttp import web as aiohttp_web
  • net protostatis-unchained-infra-795aef1/unchained/test_codex_agent.py :6 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_concurrent_tabs.py :12 import urllib.request
  • net protostatis-unchained-infra-795aef1/unchained/test_dev_script.py :13 from aiohttp import web as aiohttp_web
  • net protostatis-unchained-infra-795aef1/unchained/test_dev_server_smoke.py :24 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_facebook_auth.py :10 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_fin_workspace_integration.py :836 from aiohttp import web as _web
  • net protostatis-unchained-infra-795aef1/unchained/test_fin_workspace_runtime.py :77 with patch("httpx.Client") as m_client:
  • net protostatis-unchained-infra-795aef1/unchained/test_first_look_preview_proxy.py :5 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/test_first_look_preview_public.py :5 from aiohttp.test_utils import AioHTTPTestCase
  • net protostatis-unchained-infra-795aef1/unchained/test_first_look_preview_ws.py :17 from aiohttp import WSMsgType
  • net protostatis-unchained-infra-795aef1/unchained/test_github_auth.py :10 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_hosted_billing.py :15 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_legal_pages.py :14 from aiohttp.test_utils import make_mocked_request
  • net protostatis-unchained-infra-795aef1/unchained/test_multi_client_scroll.py :29 from aiohttp import web, test_utils
  • net protostatis-unchained-infra-795aef1/unchained/test_multi_slot_provision.py :61 """Return a context-manager mock for urllib.request.urlopen.
  • net protostatis-unchained-infra-795aef1/unchained/test_openrouter_agent.py :30 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_private_core_client_screencast.py :7 import aiohttp
  • net protostatis-unchained-infra-795aef1/unchained/test_provision_cleanup_slot.py :191 @patch("httpx.AsyncClient")
  • net protostatis-unchained-infra-795aef1/unchained/test_provision_helpers.py :14 @patch("provision_helpers.httpx.AsyncClient")
  • net protostatis-unchained-infra-795aef1/unchained/test_provision_status.py :50 """Return a mock for urllib.request.urlopen based on port → tabs mapping."""
  • net protostatis-unchained-infra-795aef1/unchained/test_published_results.py :14 from aiohttp.test_utils import TestClient, TestServer
  • net protostatis-unchained-infra-795aef1/unchained/test_scheduled_tasks.py :80 patch("scheduled_tasks.urllib.request.urlopen", side_effect=fake_urlopen),
  • net protostatis-unchained-infra-795aef1/unchained/test_tab_isolation.py :48 """Fake urllib.request.urlopen for CDP HTTP endpoints."""
  • net protostatis-unchained-infra-795aef1/unchained/test_tab_leak.py :541 with patch("urllib.request.urlopen", side_effect=_mock_urlopen):
  • net protostatis-unchained-infra-795aef1/unchained/test_trial_new_chat.py :16 from aiohttp import web as aiohttp_web
  • net protostatis-unchained-infra-795aef1/unchained/test_unbrowser_growth_analytics.py :11 from urllib.parse import quote, urlencode
  • net protostatis-unchained-infra-795aef1/unchained/test_unbrowser_mcp_router.py :10 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/test_web_404.py :9 from aiohttp import web as aiohttp_web
  • net protostatis-unchained-infra-795aef1/unchained/test_web_contracts.py :22 from aiohttp import web as aiohttp_web
  • net protostatis-unchained-infra-795aef1/unchained/unbrowser_mcp_router.py :34 import httpx
  • net protostatis-unchained-infra-795aef1/unchained/unbrowser_ssrf_proxy.py :15 import socket
  • net protostatis-unchained-infra-795aef1/unchained/web.py :27 from urllib.parse import quote, urlparse
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/analytics.py :5 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/auth_admin.py :12 from urllib.parse import urlencode, urlparse
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/chat_flow.py :17 from urllib.parse import urlsplit
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/chat_stream.py :17 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/credit_internal.py :17 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/fin_terminal.py :7 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/fin_workspace.py :57 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/fin_workspace_auth.py :34 from urllib.parse import urlencode
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/install_flow.py :5 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/overlay_ws.py :15 from aiohttp import web
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/pages.py :10 from urllib.parse import quote, urlencode
  • net protostatis-unchained-infra-795aef1/unchained/web_app/handlers/provision.py :7 from aiohttp import web
  • net (weak) protostatis-unchained-infra-795aef1/unchained/web_app/handlers/unbrowser_demo.py :20 from aiohttp import web
  • net (weak) protostatis-unchained-infra-795aef1/unchained/web_app/handlers/x_manager_demo.py :24 from urllib.parse import quote_plus
  • net protostatis-unchained-infra-795aef1/unchained/web_app/research_desk_page.py :11 from urllib.parse import urlsplit
  • net protostatis-unchained-infra-795aef1/unchained/web_app/routes.py :12 from aiohttp import web

secrets 44

  • secrets protostatis-unchained-infra-795aef1/deploy/e2e_fin_workspace_runtime.py :212 os.environ["FIN_WORKSPACE_CONTROL_TOKEN"] = "c" * 40
  • secrets protostatis-unchained-infra-795aef1/deploy/workspace_runtime_provider.py :159 self.token = os.environ.get("FIN_WORKSPACE_RUNTIME_TOKEN", "").strip()
  • secrets protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/cli.py :6 import getpass
  • secrets protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/lab_agent.py :144 if os.environ.get("OPENAI_API_KEY") and os.environ.get("OPENAI_MODEL"):
  • secrets protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/mcp_client.py :167 resolved_api_key = api_key or os.environ.get("UNCHAINED_API_KEY") or env_file_values.get("UNCHAINED_API_KEY")
  • secrets protostatis-unchained-infra-795aef1/research_desk_vendor/unchained_pyreplab/webapp.py :2888 if os.environ.get("UNCHAINED_API_KEY") or os.environ.get("UNCHAINED_AGENT_ID"):
  • secrets protostatis-unchained-infra-795aef1/unchained/agent_package.py :221 print(json.dumps({"claim_id": os.environ["CLAIM_ID"], "claim_secret": os.environ["CLAIM_SECRET"]}))
  • secrets protostatis-unchained-infra-795aef1/unchained/agent_stream.py :106 OBS_PASSWORD = os.environ.get("OBS_PASSWORD", "")
  • secrets (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/agent_openrouter.py :100 api_key = os.environ.get("OPENROUTER_API_KEY", "")
  • secrets (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/evaluator.py :73 api_key = os.environ.get("ANTHROPIC_API_KEY", "")
  • secrets (weak) protostatis-unchained-infra-795aef1/unchained/benchmark/runner.py :421 if not os.environ.get("ANTHROPIC_API_KEY"):
  • secrets protostatis-unchained-infra-795aef1/unchained/cdp_tool_packaged.py :35 API_KEY = os.environ.get("UNCHAINED_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/chat_agent_cli.py :185 KEY = os.environ.get("UNCHAINED_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/chat_agent_codex.py :1040 parser.add_argument("--key", default=os.environ.get("UNCHAINED_API_KEY", ""),
  • secrets protostatis-unchained-infra-795aef1/unchained/chat_agent_gemini.py :825 parser.add_argument("--key", default=os.environ.get("UNCHAINED_API_KEY", ""),
  • secrets protostatis-unchained-infra-795aef1/unchained/chat_agent_openrouter.py :1357 self.openrouter_key = os.environ.get("OPENROUTER_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/chat_agent_sdk.py :845 parser.add_argument("--key", default=os.environ.get("UNCHAINED_API_KEY", ""),
  • secrets protostatis-unchained-infra-795aef1/unchained/chrome_bridge.py :2556 if os.environ.get("UNCHAINED_API_KEY"):
  • secrets protostatis-unchained-infra-795aef1/unchained/credit.py :92 return os.environ.get("HOSTED_AGENT_SERVICE_TOKEN", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/maps_stream.py :57 OBS_PASSWORD = os.environ.get("OBS_PASSWORD", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/private_core_client.py :85 self.token = token if token is not None else os.environ.get("PRIVATE_CORE_TOKEN", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/published_results.py :173 api_key = os.environ.get("OPENROUTER_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/relay.py :68 os.environ.get("RELAY_SHARED_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/scheduled_tasks.py :36 DEFAULT_API_KEY = os.environ.get("UNCHAINED_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/scheduler_tool.py :23 API_KEY = os.environ.get("UNCHAINED_API_KEY", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/signup_agent.py :70 _JWT_SECRET = os.environ.get("JWT_SECRET", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/stream_ctl.py :138 api_key = os.environ.get("OPENROUTER_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/template_utils.py :530 facebook_app_secret = os.environ.get("FACEBOOK_APP_SECRET", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/test_credit.py :1238 os.environ["HOSTED_AGENT_SERVICE_TOKEN"] = "hosted-token-aaa"
  • secrets protostatis-unchained-infra-795aef1/unchained/test_credit_handlers.py :43 self._saved_token = os.environ.get("HOSTED_AGENT_SERVICE_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_fin_workspace.py :1437 self._saved_token = os.environ.get("FIN_WORKSPACE_CONTROL_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_fin_workspace_integration.py :107 os.environ["FIN_WORKSPACE_CONTROL_TOKEN"] = "t" * 40
  • secrets protostatis-unchained-infra-795aef1/unchained/test_fin_workspace_runtime.py :74 os.environ["FIN_WORKSPACE_RUNTIME_PROVIDER_TOKEN"] = "p" * 40
  • secrets protostatis-unchained-infra-795aef1/unchained/test_hosted_billing.py :39 self._saved_token = os.environ.get("HOSTED_AGENT_SERVICE_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_openrouter_agent.py :32 OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY", "")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_provider_key_crypto.py :16 self._old_secret = os.environ.get("JWT_SECRET")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_provision_cleanup_slot.py :55 old_token = os.environ.get("RELAY_SHARED_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_provision_status.py :241 old_token = os.environ.get("RELAY_SHARED_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/test_relay_auth.py :50 old_token = os.environ.get("RELAY_SHARED_TOKEN")
  • secrets protostatis-unchained-infra-795aef1/unchained/web.py :119 JWT_SECRET = os.environ.get("JWT_SECRET", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/web_app/handlers/auth_admin.py :201 app_secret = os.environ.get("FACEBOOK_APP_SECRET", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/web_app/handlers/fin_workspace.py :959 return os.environ.get("FIN_WORKSPACE_RUNTIME_PROXY_TOKEN", "").strip()
  • secrets protostatis-unchained-infra-795aef1/unchained/web_app/handlers/install_flow.py :590 print(json.dumps({{"token": os.environ["TOKEN"]}}))
  • secrets protostatis-unchained-infra-795aef1/unchained/web_app/runtime_tabs.py :276 hkey = os.environ.get("HEADLESS_API_KEY", "")

database 14

  • db protostatis-unchained-infra-795aef1/deploy/e2e_fin_workspace_runtime.py :33 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/analytics.py :9 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/auth.py :25 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/credit.py :34 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/financial_workspace.py :35 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/published_results.py :15 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/scheduled_tasks.py :25 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_activation_lifecycle_state.py :7 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_analytics.py :6 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_credit.py :20 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_dev_server_smoke.py :18 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_fin_workspace.py :20 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_published_results.py :8 import sqlite3
  • db protostatis-unchained-infra-795aef1/unchained/test_scheduled_tasks.py :6 import sqlite3

tool registrations 31

  • ddm protostatis-unchained-infra-795aef1/unchained/mcp_server.py :174
  • intel_probe protostatis-unchained-infra-795aef1/unchained/mcp_server.py :200
  • intel_extract protostatis-unchained-infra-795aef1/unchained/mcp_server.py :219
  • intel_stores protostatis-unchained-infra-795aef1/unchained/mcp_server.py :245
  • intel_shape protostatis-unchained-infra-795aef1/unchained/mcp_server.py :256
  • intel_find_paths protostatis-unchained-infra-795aef1/unchained/mcp_server.py :273
  • cdp_navigate protostatis-unchained-infra-795aef1/unchained/mcp_server.py :290
  • cdp_wait_ready protostatis-unchained-infra-795aef1/unchained/mcp_server.py :310
  • cdp_click protostatis-unchained-infra-795aef1/unchained/mcp_server.py :324
  • cdp_scroll protostatis-unchained-infra-795aef1/unchained/mcp_server.py :352
  • cdp_type protostatis-unchained-infra-795aef1/unchained/mcp_server.py :368
  • cdp_press_enter protostatis-unchained-infra-795aef1/unchained/mcp_server.py :380
  • cdp_key_press protostatis-unchained-infra-795aef1/unchained/mcp_server.py :391
  • js_eval protostatis-unchained-infra-795aef1/unchained/mcp_server.py :420
  • js_eval_frame protostatis-unchained-infra-795aef1/unchained/mcp_server.py :440
  • cdp_list_frames protostatis-unchained-infra-795aef1/unchained/mcp_server.py :460
  • ddm_frame protostatis-unchained-infra-795aef1/unchained/mcp_server.py :472
  • cdp_screenshot protostatis-unchained-infra-795aef1/unchained/mcp_server.py :504
  • cdp_set_file protostatis-unchained-infra-795aef1/unchained/mcp_server.py :533
  • cdp_set_tab_alias protostatis-unchained-infra-795aef1/unchained/mcp_server.py :546
  • cdp_list_tab_aliases protostatis-unchained-infra-795aef1/unchained/mcp_server.py :565
  • cdp_set_cookies protostatis-unchained-infra-795aef1/unchained/mcp_server.py :572
  • cdp_get_cookies protostatis-unchained-infra-795aef1/unchained/mcp_server.py :602
  • list_connected_agents protostatis-unchained-infra-795aef1/unchained/mcp_server.py :614
  • cdp_provision_launch protostatis-unchained-infra-795aef1/unchained/mcp_server.py :659
  • cdp_provision_cleanup protostatis-unchained-infra-795aef1/unchained/mcp_server.py :696
  • list_provisioned_tabs protostatis-unchained-infra-795aef1/unchained/mcp_server.py :729
  • rhythm_catch protostatis-unchained-infra-795aef1/unchained/mcp_server.py :765
  • rhythm_execute protostatis-unchained-infra-795aef1/unchained/mcp_server.py :789
  • rhythm_train protostatis-unchained-infra-795aef1/unchained/mcp_server.py :814
  • rhythm_query protostatis-unchained-infra-795aef1/unchained/mcp_server.py :834

declared dependencies 1

  • pandas@>=2.2,<3

transport_posture 2

  • binds all interfaces (0.0.0.0) protostatis-unchained-infra-795aef1/unchained/api.py :469 web.run_app(app, host="0.0.0.0", port=port)
  • binds all interfaces (0.0.0.0) protostatis-unchained-infra-795aef1/unchained/mcp_server.py :853 host = "0.0.0.0"