github Python analyzed 5b7733e

DjangoAILab/CastFabric

github

Open-source multi-protocol casting fabric for LAN audio devices and AI agents

maintainer
DjangoAILab
licence
MIT
first seen
2026-09-02
last seen
2026-09-07
releases · 30d
3
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged committed secret ×3 in DjangoAILab/CastFabric
  2. HIGH code analysis flagged committed secret ×3 in DjangoAILab/CastFabric
  3. HIGH code analysis flagged committed secret ×3 in DjangoAILab/CastFabric
  4. HIGH code analysis flagged committed secret ×3 in DjangoAILab/CastFabric
capabilities 26 tools
transport stdio · streamable-http counts 26 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • archive_playlist
  • begin_media_upload
  • control_playlist_run
  • create_playlist
  • create_url_media_asset
  • delete_media_asset
  • get_media_asset
  • get_playback_status
  • get_playlist
  • get_playlist_progress
  • get_playlist_run
  • get_system_status
  • list_media_assets
  • list_playlist_runs
  • list_playlists
  • mutate_playlist_items
  • pause
  • play_media_asset
  • query_playback_history
  • resume
  • scan_outputs
  • set_volume
  • start_playlist
  • stop
  • update_media_asset
  • update_playlist
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 5b7733e · analyzer v33 · 2d ago

skills & prompt files 2

danger signals4

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

code files: 132

filesystem 22

  • fs (weak) DjangoAILab-CastFabric-5b7733e/docs/prototypes/validate_console_prototype.py :9 from pathlib import Path
  • fs DjangoAILab-CastFabric-5b7733e/miair/airplay/connections/audio.py :455 self.sink = self.pa.open(format=self.pa.get_format_from_width(2),
  • fs DjangoAILab-CastFabric-5b7733e/miair/airplay/connections/event.py :35 event_file = open(self.file, "wb")
  • fs DjangoAILab-CastFabric-5b7733e/miair/airplay/fairplay3.py :24 sys.stdout = open(os.devnull, 'w')
  • fs DjangoAILab-CastFabric-5b7733e/miair/airplay/pairing/hap.py :139 with open(path, mode="r", encoding="utf-8") as f:
  • fs DjangoAILab-CastFabric-5b7733e/miair/airplay/server.py :976 self._codec_context.open()
  • fs DjangoAILab-CastFabric-5b7733e/miair/app.py :1220 open(self.config.log_file, "w", encoding="utf-8").close()
  • fs DjangoAILab-CastFabric-5b7733e/miair/auth.py :31 with open(self.token_path, encoding="utf-8") as handle:
  • fs DjangoAILab-CastFabric-5b7733e/miair/config.py :465 with open(self.config_file, "w", encoding="utf-8") as f:
  • fs DjangoAILab-CastFabric-5b7733e/miair/content/media.py :11 from pathlib import Path, PurePath
  • fs DjangoAILab-CastFabric-5b7733e/miair/content/repository.py :10 from pathlib import Path
  • fs DjangoAILab-CastFabric-5b7733e/miair/dlna/device_server.py :8 import shutil
show 10 more
  • fs DjangoAILab-CastFabric-5b7733e/miair/dlna/media_buffer.py :316 with open(output_path, 'rb') as f:
  • fs DjangoAILab-CastFabric-5b7733e/miair/playback/files.py :10 from pathlib import Path, PurePath
  • fs DjangoAILab-CastFabric-5b7733e/miair/runtime/events.py :10 from pathlib import Path
  • fs DjangoAILab-CastFabric-5b7733e/miair/web/api.py :242 with open('/proc/1/cgroup', 'r') as f:
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_api_v1.py :6 from pathlib import Path
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_audio_seek.py :284 with open(out_path, "rb") as f:
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_auth_persistence.py :106 with open(token_path, "w", encoding="utf-8") as handle:
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_console_contract.py :3 from pathlib import Path
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_media_assets.py :12 with wave.open(output, "wb") as audio:
  • fs (weak) DjangoAILab-CastFabric-5b7733e/tests/test_miplay_media.py :2 import shutil

shell / exec 8

  • shell DjangoAILab-CastFabric-5b7733e/miair.py :4 import subprocess
  • shell DjangoAILab-CastFabric-5b7733e/miair/airplay/audio_stream.py :13 import subprocess
  • shell DjangoAILab-CastFabric-5b7733e/miair/airplay/server.py :15 import subprocess
  • shell DjangoAILab-CastFabric-5b7733e/miair/airplay/utils.py :6 import subprocess
  • shell DjangoAILab-CastFabric-5b7733e/miair/config.py :9 import subprocess
  • shell DjangoAILab-CastFabric-5b7733e/miair/web/api.py :275 import subprocess
  • shell (weak) DjangoAILab-CastFabric-5b7733e/tests/test_audio_seek.py :262 import subprocess
  • shell (weak) DjangoAILab-CastFabric-5b7733e/tests/test_miplay_media.py :4 import subprocess

network 33

  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/airplay1.py :21 import socket # noqa
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/audio_stream.py :17 from aiohttp import web
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/connections/audio.py :1 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/connections/control.py :2 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/connections/event.py :1 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/mdns.py :8 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/pairing/hap.py :2 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/server.py :13 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/airplay/utils.py :2 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/app.py :10 from aiohttp import web
  • net DjangoAILab-CastFabric-5b7733e/miair/auth.py :13 import aiohttp
  • net DjangoAILab-CastFabric-5b7733e/miair/config.py :8 import socket
show 21 more
  • net DjangoAILab-CastFabric-5b7733e/miair/content/media.py :13 from urllib.parse import urlsplit
  • net DjangoAILab-CastFabric-5b7733e/miair/conversation.py :16 import aiohttp
  • net DjangoAILab-CastFabric-5b7733e/miair/dlna/client.py :9 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/dlna/device_server.py :12 import aiohttp
  • net DjangoAILab-CastFabric-5b7733e/miair/dlna/eventing.py :8 import aiohttp
  • net DjangoAILab-CastFabric-5b7733e/miair/dlna/media_buffer.py :7 import aiohttp
  • net DjangoAILab-CastFabric-5b7733e/miair/dlna/ssdp.py :8 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :7 from urllib.parse import urlsplit
  • net DjangoAILab-CastFabric-5b7733e/miair/miplay/receiver.py :10 import socket
  • net DjangoAILab-CastFabric-5b7733e/miair/runtime/redaction.py :8 from urllib.parse import urlsplit, urlunsplit
  • net DjangoAILab-CastFabric-5b7733e/miair/web/api.py :9 import urllib.request
  • net DjangoAILab-CastFabric-5b7733e/miair/web/api_v1.py :9 from urllib.parse import urlsplit
  • net DjangoAILab-CastFabric-5b7733e/miair/web/origin.py :7 from aiohttp import web
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_api_v1.py :9 from urllib.parse import urlsplit
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_auth_persistence.py :9 import aiohttp
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_dlna_output_poc.py :9 import aiohttp
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_local_dlna_client.py :6 import aiohttp
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_mcp_transport.py :5 from aiohttp.test_utils import TestClient, TestServer
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_miplay_mdns.py :2 import socket
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_miplay_sink.py :4 import aiohttp
  • net (weak) DjangoAILab-CastFabric-5b7733e/tests/test_playlist_dmr_integration.py :4 import aiohttp

database 2

  • db DjangoAILab-CastFabric-5b7733e/miair/content/repository.py :6 import sqlite3
  • db (weak) DjangoAILab-CastFabric-5b7733e/tests/test_content_repository.py :1 import sqlite3

tool registrations 26

  • get_system_status DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :61
  • scan_outputs DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :85
  • list_media_assets DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :202
  • get_media_asset DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :215
  • create_url_media_asset DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :222
  • update_media_asset DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :234
  • delete_media_asset DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :251
  • play_media_asset DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :258
  • begin_media_upload DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :270
  • list_playlists DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :284
  • get_playlist DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :288
  • create_playlist DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :295
show 14 more
  • update_playlist DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :308
  • mutate_playlist_items DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :328
  • archive_playlist DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :359
  • start_playlist DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :371
  • get_playlist_run DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :388
  • list_playlist_runs DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :395
  • control_playlist_run DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :399
  • get_playlist_progress DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :412
  • query_playback_history DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :422
  • get_playback_status DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :457
  • pause DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :467
  • resume DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :474
  • stop DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :503
  • set_volume DjangoAILab-CastFabric-5b7733e/miair/mcp/server.py :513

declared dependencies 8

  • mcp@>=2.1.1,<3
  • aiohttp@>=3.9.0
  • miservice-fork@*
  • zeroconf@>=0.38.0
  • pycryptodome@>=3.15.0
  • av@>=10.0.0
  • pytest@>=8.0
  • pytest-asyncio@>=0.23

transport_posture 1

  • network-listening, binds all interfaces, no auth detected DjangoAILab-CastFabric-5b7733e/miair/app.py :757 host="0.0.0.0",