{"repo": "alvaro209890/mapas-facil", "files": {"secrets.example.json": {"aaa97e00a45a6629a6095b498dcd99bb54b245bd": {"t": 1785745289.7641838, "n": 214, "h": "d3e680aa54494f3a", "c": "{\n \"_leia\": \"Copie para secrets.local.json (gitignored) e preencha. Nenhum valor real entra neste arquivo.\",\n \"planet_api_key\": \"\",\n \"planet_api_key_antiga\": \"\",\n \"sema_authkey\": \"\",\n \"deepseek_api_key\": \"\"\n}\n"}, "a38adcd35dfa7ac64768aba8db908e825efb5633": {"t": 1785749790.350956, "n": 214, "h": "d3e680aa54494f3a", "c": "{\n \"_leia\": \"Copie para secrets.local.json (gitignored) e preencha. Nenhum valor real entra neste arquivo.\",\n \"planet_api_key\": \"\",\n \"planet_api_key_antiga\": \"\",\n \"sema_authkey\": \"\",\n \"deepseek_api_key\": \"\"\n}\n"}}, "Fase_1_Desktop/nucleo/mapasfacil_nucleo/conversas/redator.py": {"aaa97e00a45a6629a6095b498dcd99bb54b245bd": {"t": 1785747489.5292265, "n": 1575, "h": "f9a3cfc714ca55d4", "c": "# Redator de CPF e segredos — aplicado ANTES do INSERT (F1-17 / AP-09).\n# Compartilhável com log e, depois, com o montador de contexto do M7.\n\nfrom __future__ import annotations\n\nimport re\n\n_CPF = re.compile(r\"\\b\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d{2}\\b\")\n_API_KEY = re.compile(r\"(?i)(api[_-]?key\\s*=\\s*)([^\\s&\\\"']+)\")\n_AUTHKEY = re.compile(r\"(?i)(authkey\\s*=\\s*)([^\\s&\\\"']+)\")\n_BEARER = re.compile(r\"(?i)(Bearer\\s+)([A-Za-z0-9\\-._~+/]+=*)\")\n_PLAK = re.compile(r\"\\bPLAK[A-Za-z0-9]{32}\\b\")\n_DEEPSEEK_SK = re.compile(r\"\\bsk-[a-f0-9]{32}\\b\", re.IGNORECASE)\n_WKT = re.compile(\n r\"\\b(?:MULTI)?(?:POLYGON|LINESTRING|POINT|GEOMETRYCOLLECTION)\\s*\\([^)]*(?:\\([^)]*\\)[^)]*)*\\)\",\n re.IGNORECASE,\n)\n_CAMINHO_USERS = re.compile(r\"[A-Za-z]:[\\\\/]+Users[\\\\/]+[^\\s\\\"']+\", re.IGNORECASE)\n\n\ndef redigir(texto: str) -> str:\n \"\"\"Remove CPF, chaves, WKT e caminhos absolutos. Idempotente.\"\"\"\n if not texto:\n return texto\n saida = _CPF.sub(\"[CPF removido]\", texto)\n saida = _WKT.sub(\"[geometria removida]\", saida)\n saida = _CAMINHO_USERS.sub(\"[caminho removido]\", saida)\n saida = _API_KEY.sub(\"[segredo removido]\", saida)\n saida = _AUTHKEY.sub(\"[segredo removido]\", saida)\n saida = _BEARER.sub(\"[segredo removido]\", saida)\n saida = _PLAK.sub(\"[chave planet removida]\", saida)\n saida = _DEEPSEEK_SK.sub(\"[chave deepseek removida]\", saida)\n return saida\n\n\ndef truncar(texto: str, limite: int) -> str:\n if limite <= 0:\n return \"\"\n if len(texto) <= limite:\n return texto\n if limite <= 1:\n return \"…\"\n return texto[: limite - 1] + \"…\"\n"}, "672e133c4846338876c2489708e12c0a9c8e19e3": {"t": 1785749791.7282825, "n": 1575, "h": "f9a3cfc714ca55d4", "c": "# Redator de CPF e segredos — aplicado ANTES do INSERT (F1-17 / AP-09).\n# Compartilhável com log e, depois, com o montador de contexto do M7.\n\nfrom __future__ import annotations\n\nimport re\n\n_CPF = re.compile(r\"\\b\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d{2}\\b\")\n_API_KEY = re.compile(r\"(?i)(api[_-]?key\\s*=\\s*)([^\\s&\\\"']+)\")\n_AUTHKEY = re.compile(r\"(?i)(authkey\\s*=\\s*)([^\\s&\\\"']+)\")\n_BEARER = re.compile(r\"(?i)(Bearer\\s+)([A-Za-z0-9\\-._~+/]+=*)\")\n_PLAK = re.compile(r\"\\bPLAK[A-Za-z0-9]{32}\\b\")\n_DEEPSEEK_SK = re.compile(r\"\\bsk-[a-f0-9]{32}\\b\", re.IGNORECASE)\n_WKT = re.compile(\n r\"\\b(?:MULTI)?(?:POLYGON|LINESTRING|POINT|GEOMETRYCOLLECTION)\\s*\\([^)]*(?:\\([^)]*\\)[^)]*)*\\)\",\n re.IGNORECASE,\n)\n_CAMINHO_USERS = re.compile(r\"[A-Za-z]:[\\\\/]+Users[\\\\/]+[^\\s\\\"']+\", re.IGNORECASE)\n\n\ndef redigir(texto: str) -> str:\n \"\"\"Remove CPF, chaves, WKT e caminhos absolutos. Idempotente.\"\"\"\n if not texto:\n return texto\n saida = _CPF.sub(\"[CPF removido]\", texto)\n saida = _WKT.sub(\"[geometria removida]\", saida)\n saida = _CAMINHO_USERS.sub(\"[caminho removido]\", saida)\n saida = _API_KEY.sub(\"[segredo removido]\", saida)\n saida = _AUTHKEY.sub(\"[segredo removido]\", saida)\n saida = _BEARER.sub(\"[segredo removido]\", saida)\n saida = _PLAK.sub(\"[chave planet removida]\", saida)\n saida = _DEEPSEEK_SK.sub(\"[chave deepseek removida]\", saida)\n return saida\n\n\ndef truncar(texto: str, limite: int) -> str:\n if limite <= 0:\n return \"\"\n if len(texto) <= limite:\n return texto\n if limite <= 1:\n return \"…\"\n return texto[: limite - 1] + \"…\"\n"}, "2b040bd81ab12f9cf31a60e9926319595bae94c2": {"t": 1785749794.6700869, "n": 1283, "h": "10e510a7a6dfa3eb", "c": "# Redator de CPF e segredos — aplicado ANTES do INSERT (F1-17 / AP-09).\n# Compartilhável com log e, depois, com o montador de contexto do M7.\n\nfrom __future__ import annotations\n\nimport re\n\n_CPF = re.compile(r\"\\b\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d{2}\\b\")\n_API_KEY = re.compile(r\"(?i)(api[_-]?key\\s*=\\s*)([^\\s&\\\"']+)\")\n_AUTHKEY = re.compile(r\"(?i)(authkey\\s*=\\s*)([^\\s&\\\"']+)\")\n_BEARER = re.compile(r\"(?i)(Bearer\\s+)([A-Za-z0-9\\-._~+/]+=*)\")\n_PLAK = re.compile(r\"\\bPLAK[A-Za-z0-9]{32}\\b\")\n_DEEPSEEK_SK = re.compile(r\"\\bsk-[a-f0-9]{32}\\b\", re.IGNORECASE)\n_SEMA_UUID = re.compile(\n r\"\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b\",\n re.IGNORECASE,\n)\n\n\ndef redigir(texto: str) -> str:\n \"\"\"Remove CPF e padrões de chave do texto. Idempotente.\"\"\"\n if not texto:\n return texto\n saida = _CPF.sub(\"[CPF removido]\", texto)\n saida = _API_KEY.sub(r\"\\1***\", saida)\n saida = _AUTHKEY.sub(r\"\\1***\", saida)\n saida = _BEARER.sub(r\"\\1***\", saida)\n saida = _PLAK.sub(\"PLAK***\", saida)\n saida = _DEEPSEEK_SK.sub(\"sk-***\", saida)\n return saida\n\n\ndef truncar(texto: str, limite: int) -> str:\n if limite <= 0:\n return \"\"\n if len(texto) <= limite:\n return texto\n if limite <= 1:\n return \"…\"\n return texto[: limite - 1] + \"…\"\n"}}}}