Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
11 KiB
JSON

{"repo": "cascade-router/dana", "files": {"deploy/cloud_bridge.py": {"6ebc698715baafb78918716b7c3cccdf615459a0": {"t": 1786068482.612216, "n": 10080, "h": "d9ebb295b167b3da", "c": "\"\"\"Stage 9.2 — Cloud / Hugging Face runtime bridge for Dānā LangGraph.\n\nApplies cloud-safe environment defaults, mocks desktop/vision actuators, and\nruns a single text turn through ``run_react_loop`` (same corridor as Stage 8.10\nsilent inject → LangGraph).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nimport sys\nimport threading\nfrom pathlib import Path\nfrom typing import Any, Callable\n\n_LOCK = threading.Lock()\n_BOOTSTRAPPED = False\n_HISTORY: list[dict[str, str]] = []\n_HISTORY_MAX = 12\n\n# Tools that require a local desktop / webcam — never crash the Space.\n_CLOUD_MOCK_TOOLS = frozenset(\n {\n \"analyze_visual_context\",\n \"ocr_with_region\",\n \"navigate_and_click\",\n \"press_key\",\n \"type_stealth_text\",\n \"shell_execute\",\n \"execute_powershell\",\n \"python_repl\",\n \"file_editor\",\n \"dispatch_jason_supervisor\",\n \"evaluate_slide_and_type\",\n }\n)\n\n\ndef project_root() -> Path:\n return Path(__file__).resolve().parents[1]\n\n\ndef is_cloud_mode() -> bool:\n return (os.environ.get(\"DONNA_CLOUD\") or \"\").strip().lower() in {\n \"1\",\n \"true\",\n \"yes\",\n \"on\",\n }\n\n\ndef apply_cloud_mode() -> None:\n \"\"\"Idempotent env + sys.path bootstrap for Hugging Face / headless hosts.\"\"\"\n global _BOOTSTRAPPED\n with _LOCK:\n # Repo root on path (Space may launch from deploy/).\n root = str(project_root())\n if root not in sys.path:\n sys.path.insert(0, root)\n\n os.environ.setdefault(\"DONNA_CLOUD\", \"1\")\n os.environ.setdefault(\"DONNA_HITL_AUTO_APPROVE\", \"1\")\n os.environ.setdefault(\"DONNA_HITL_REQUIRE_GUI\", \"0\")\n os.environ.setdefault(\"DONNA_OS_DRY_RUN\", \"1\")\n os.environ.setdefault(\"DONNA_GHOST_SKIP_HOTKEY\", \"1\")\n # Avoid interactive vault prompts on Spaces.\n if not (os.environ.get(\"DONNA_VAULT_KEY\") or \"\").strip():\n os.environ.setdefault(\"DONNA_VAULT_KEY\", \"hf-space-ephemeral\")\n\n # Prefer OpenAI-compatible cloud LLM when keys are present.\n if (os.environ.get(\"OPENAI_API_KEY\") or \"\").strip() or (\n os.environ.get(\"GROQ_API_KEY\") or \"\"\n ).strip():\n os.environ.setdefault(\"DONNA_CASCADE_EXTERNAL\", \"1\")\n os.environ.setdefault(\"DONNA_HF_CLOUD_LLM\", \"1\")\n\n if _BOOTSTRAPPED:\n return\n _BOOTSTRAPPED = True\n\n try:\n from dana.agentic import set_donna_mode\n from dana.core_agent import set_engine_engaged\n\n set_donna_mode(\"developer\", as_voice=False)\n set_engine_engaged(True)\n except Exception as exc: # noqa: BLE001\n print(f\"[cloud_bridge] WARNING: mode/engine bootstrap: {exc}\", flush=True)\n\n\ndef use_cloud_llm() -> bool:\n flag = (os.environ.get(\"DONNA_HF_CLOUD_LLM\") or \"\").strip().lower()\n if flag in {\"1\", \"true\", \"yes\", \"on\"}:\n return True\n if flag in {\"0\", \"false\", \"no\", \"off\"}:\n return False\n return bool(\n (os.environ.get(\"OPENAI_API_KEY\") or \"\").strip()\n or (os.environ.get(\"GROQ_API_KEY\") or \"\").strip()\n or (os.environ.get(\"DEEPSEEK_API_KEY\") or \"\").strip()\n or (os.environ.get(\"ANTHROPIC_API_KEY\") or \"\").strip()\n )\n\n\ndef _build_cloud_chat_model(*, temperature: float = 0.2) -> Any:\n \"\"\"OpenAI-compatible Chat model for Spaces without local Ollama.\"\"\"\n from langchain_openai import ChatOpenAI\n\n model = (\n (os.environ.get(\"DONNA_CLOUD_MODEL\") or \"\").strip()\n or (os.environ.get(\"DONNA_CASCADE_MODEL\") or \"\").strip()\n or \"gpt-4o-mini\"\n )\n kwargs: dict[str, Any] = {\"model\": model, \"temperature\": temperature}\n\n base = (\n (os.environ.get(\"OPENAI_BASE_URL\") or \"\").strip()\n or (os.environ.get(\"DONNA_OPENAI_BASE_URL\") or \"\").strip()\n )\n # Groq OpenAI-compatible endpoint when only GROQ_API_KEY is set.\n if not base and (os.environ.get(\"GROQ_API_KEY\") or \"\").strip():\n base = \"https://api.groq.com/openai/v1\"\n if not (os.environ.get(\"OPENAI_API_KEY\") or \"\").strip():\n os.environ[\"OPENAI_API_KEY\"] = os.environ[\"GROQ_API_KEY\"]\n if model == \"gpt-4o-mini\":\n kwargs[\"model\"] = (\n (os.environ.get(\"DONNA_CLOUD_MODEL\") or \"\").strip()\n or \"llama-3.3-70b-versatile\"\n )\n # DeepSeek OpenAI-compatible endpoint.\n if not base and (os.environ.get(\"DEEPSEEK_API_KEY\") or \"\").strip():\n base = \"https://api.deepseek.com/v1\"\n if not (os.environ.get(\"OPENAI_API_KEY\") or \"\").strip():\n os.environ[\"OPENAI_API_KEY\"] = os.environ[\"DEEPSEEK_API_KEY\"]\n if model == \"gpt-4o-mini\":\n kwargs[\"model\"] = (\n (os.environ.get(\"DONNA_CLOUD_MODEL\") or \"\").strip() or \"deepseek-chat\"\n )\n\n if base:\n kwargs[\"base_url\"] = base\n return ChatOpenAI(**kwargs)\n\n\ndef _install_cloud_llm_patches() -> Callable[[], None]:\n \"\"\"Patch cascade + Ollama preflight for cloud LLM. Returns restore fn.\"\"\"\n import dana.agentic as ag\n import dana.cascade_router as cr\n\n orig_resolve = cr.resolve_chat_model\n orig_reachable = ag.ollama_service_reachable\n\n def _resolve_cloud(query: str = \"\", **kwargs: Any) -> Any: # noqa: ARG001\n temp = float(kwargs.get(\"temperature\") or 0.2)\n return _build_cloud_chat_model(temperature=temp)\n\n def _reachable_cloud(*_a: Any, **_k: Any) -> bool:\n return True\n\n cr.resolve_chat_model = _resolve_cloud # type: ignore[assignment]\n ag.ollama_service_reachable = _reachable_cloud # type: ignore[assignment]\n\n def _restore() -> None:\n cr.resolve_chat_model = orig_resolve # type: ignore[assignment]\n ag.ollama_service_reachable = orig_reachable # type: ignore[assignment]\n\n return _restore\n\n\ndef _cloud_execute(tool_call: Any) -> str:\n \"\"\"Execute tools with desktop/vision mocked; ledger write still allowed.\"\"\"\n tid = str(getattr(tool_call, \"tool_id\", \"\") or \"\").strip()\n args = dict(getattr(tool_call, \"arguments\", None) or {})\n\n if tid in _CLOUD_MOCK_TOOLS:\n return (\n f\"[CLOUD] Tool `{tid}` is mocked on Hugging Face \"\n f\"(no local desktop/webcam). Args={args!r}\"\n )\n\n if tid == \"draft_cursor_prompt\":\n try:\n from dana.tools.general.draft_cursor_prompt import draft_cursor_prompt\n\n return str(\n draft_cursor_prompt(\n objective=str(args.get(\"objective\") or \"\"),\n context=str(args.get(\"context\") or \"\"),\n )\n )\n except Exception as exc: # noqa: BLE001\n return f\"ERROR: draft_cursor_prompt failed: {type(exc).__name__}: {exc}\"\n\n # Prefer production tool executor when importable; else soft stub.\n try:\n from dana.core_agent import execute_tool_call\n\n return str(execute_tool_call(tool_call))\n except Exception as exc: # noqa: BLE001\n return f\"[CLOUD] execute `{tid}` skipped ({type(exc).__name__}: {exc})\"\n\n\ndef _system_prompt(user_text: str) -> str:\n try:\n from dana.core_agent import build_donna_system_prompt\n\n return build_donna_system_prompt([], user_text=user_text)\n except Exception: # noqa: BLE001\n return (\n \"You are Dānā, a local-first cybernetic copilot running in \"\n \"cloud/Hugging Face mode. Prefer tools when asked. Vision and OS \"\n \"actuators are mocked — explain limitations briefly when hit.\"\n )\n\n\ndef run_text_command(message: str, *, history: list | None = None) -> str:\n \"\"\"Inject ``message`` into LangGraph (Stage 8.10 parity) and return final text.\n\n ``history`` is accepted for Gradio ChatInterface compatibility but the Astro\n REST client sends a single prompt; we keep a small process-local prior window.\n \"\"\"\n apply_cloud_mode()\n text = (message or \"\").strip()\n if not text:\n return \"Type a command for Dānā.\"\n\n # Optional Gradio chat tuples → ignore; Astro uses Interface text→text.\n _ = history\n\n restore: Callable[[], None] | None = None\n try:\n from dana.agentic import run_react_loop\n from dana.tools.broker import IntentBroker, get_broker\n\n if use_cloud_llm():\n restore = _install_cloud_llm_patches()\n\n broker = get_broker()\n forced = None\n try:\n forced = IntentBroker().parse_utterance(text)\n except Exception: # noqa: BLE001\n forced = None\n\n with _LOCK:\n prior = list(_HISTORY[-_HISTORY_MAX:])\n\n result = run_react_loop(\n user_text=text,\n system_prompt=_system_prompt(text),\n execute_fn=_cloud_execute,\n max_iters=6,\n broker=broker,\n enable_reflection=False,\n prior_messages=prior,\n on_tool_start=None,\n visual_context=\"[CLOUD] No local vision frame.\",\n model=os.environ.get(\"DONNA_LOCAL_MODEL\") or \"qwen2.5-coder:7b\",\n forced_tool=forced,\n tts_callback=None,\n )\n answer = str(getattr(result, \"final_text\", \"\") or \"\").strip()\n if not answer:\n answer = \"Dānā returned an empty response.\"\n\n with _LOCK:\n _HISTORY.append({\"role\": \"user\", \"content\": text})\n _HISTORY.append({\"role\": \"assistant\", \"content\": answer})\n if len(_HISTORY) > _HISTORY_MAX * 2:\n del _HISTORY[: len(_HISTORY) - _HISTORY_MAX * 2]\n\n return answer\n except Exception as exc: # noqa: BLE001\n return (\n f\"Dānā cloud error: {type(exc).__name__}: {exc}. \"\n \"If this is a cold boot, wait a moment and retry. \"\n \"Ensure Space Secrets include a LLM API key \"\n \"(OPENAI_API_KEY / GROQ_API_KEY / DEEPSEEK_API_KEY) \"\n \"or a reachable OLLAMA_URL.\"\n )\n finally:\n if restore is not None:\n try:\n restore()\n except Exception: # noqa: BLE001\n pass\n\n\ndef clear_history() -> None:\n with _LOCK:\n _HISTORY.clear()\n"}}}}