Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/2928563262_yuntanfang.json
T
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
8.7 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "2928563262/yuntanfang", "files": {".env.example": {"8bf8c39a5f29c5d863219fa6fd1d74f773e5cc43": {"t": 1785745140.2516382, "n": 617, "h": "1f5e9c637d824e5f", "c": "APP_ENV=dev\nSERVER_PORT=8080\n\nMYSQL_HOST=localhost\nMYSQL_PORT=13307\nMYSQL_DATABASE=yun_tan_fang\nMYSQL_USERNAME=yuntanfang\nMYSQL_PASSWORD=change_me\n\nREDIS_HOST=localhost\nREDIS_PORT=6379\nREDIS_PASSWORD=\n\nJWT_SECRET=replace_with_local_dev_secret_at_least_32_chars\nJWT_EXPIRE_SECONDS=7200\n\nMAP_API_KEY=mock_key\nPAYMENT_MERCHANT_ID=mock_merchant\nPAYMENT_SECRET=mock_secret\nSMS_ACCESS_KEY=mock_access_key\nOSS_ENDPOINT=http://localhost:9000\nOSS_ACCESS_KEY=mock_access_key\nOSS_SECRET_KEY=mock_secret_key\nCONTENT_SAFETY_KEY=mock_key\n\nDEEPSEEK_BASE_URL=https://api.deepseek.com\nDEEPSEEK_API_KEY=\nDEEPSEEK_MODEL=deepseek-v4-pro\n"}, "02ec86d75942ea9651be5dbcbc74f76691acc235": {"t": 1785748079.1384158, "n": 617, "h": "1f5e9c637d824e5f", "c": "APP_ENV=dev\nSERVER_PORT=8080\n\nMYSQL_HOST=localhost\nMYSQL_PORT=13307\nMYSQL_DATABASE=yun_tan_fang\nMYSQL_USERNAME=yuntanfang\nMYSQL_PASSWORD=change_me\n\nREDIS_HOST=localhost\nREDIS_PORT=6379\nREDIS_PASSWORD=\n\nJWT_SECRET=replace_with_local_dev_secret_at_least_32_chars\nJWT_EXPIRE_SECONDS=7200\n\nMAP_API_KEY=mock_key\nPAYMENT_MERCHANT_ID=mock_merchant\nPAYMENT_SECRET=mock_secret\nSMS_ACCESS_KEY=mock_access_key\nOSS_ENDPOINT=http://localhost:9000\nOSS_ACCESS_KEY=mock_access_key\nOSS_SECRET_KEY=mock_secret_key\nCONTENT_SAFETY_KEY=mock_key\n\nDEEPSEEK_BASE_URL=https://api.deepseek.com\nDEEPSEEK_API_KEY=\nDEEPSEEK_MODEL=deepseek-v4-pro\n"}, "b522ef21bfc9e1c77659f5574d2fee2a1b630b83": {"t": 1785748082.4768336, "n": 524, "h": "1a2cda6ec02d4a1e", "c": "APP_ENV=dev\nSERVER_PORT=8080\n\nMYSQL_HOST=localhost\nMYSQL_PORT=13307\nMYSQL_DATABASE=yun_tan_fang\nMYSQL_USERNAME=yuntanfang\nMYSQL_PASSWORD=change_me\n\nREDIS_HOST=localhost\nREDIS_PORT=6379\nREDIS_PASSWORD=\n\nJWT_SECRET=replace_with_local_dev_secret_at_least_32_chars\nJWT_EXPIRE_SECONDS=7200\n\nMAP_API_KEY=mock_key\nPAYMENT_MERCHANT_ID=mock_merchant\nPAYMENT_SECRET=mock_secret\nSMS_ACCESS_KEY=mock_access_key\nOSS_ENDPOINT=http://localhost:9000\nOSS_ACCESS_KEY=mock_access_key\nOSS_SECRET_KEY=mock_secret_key\nCONTENT_SAFETY_KEY=mock_key\n"}, "4051d06de78c22dee525825419a7208d70d5bb22": {"t": 1785748083.8640113, "n": 523, "h": "cc86c70f1b658698", "c": "APP_ENV=dev\nSERVER_PORT=8080\n\nMYSQL_HOST=localhost\nMYSQL_PORT=3306\nMYSQL_DATABASE=yun_tan_fang\nMYSQL_USERNAME=yuntanfang\nMYSQL_PASSWORD=change_me\n\nREDIS_HOST=localhost\nREDIS_PORT=6379\nREDIS_PASSWORD=\n\nJWT_SECRET=replace_with_local_dev_secret_at_least_32_chars\nJWT_EXPIRE_SECONDS=7200\n\nMAP_API_KEY=mock_key\nPAYMENT_MERCHANT_ID=mock_merchant\nPAYMENT_SECRET=mock_secret\nSMS_ACCESS_KEY=mock_access_key\nOSS_ENDPOINT=http://localhost:9000\nOSS_ACCESS_KEY=mock_access_key\nOSS_SECRET_KEY=mock_secret_key\nCONTENT_SAFETY_KEY=mock_key\n"}}, "backend/src/main/java/com/yuntanfang/module/agent/service/AgentOrderService.java": {"8bf8c39a5f29c5d863219fa6fd1d74f773e5cc43": {"t": 1786067599.1405125, "n": 5001, "h": "77409b64ee9dde29", "c": "package com.yuntanfang.module.agent.service;\n\nimport com.yuntanfang.module.agent.dto.AgentOrderRequest;\nimport com.yuntanfang.module.agent.vo.AgentOrderResult;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.MediaType;\nimport org.springframework.stereotype.Service;\nimport org.springframework.web.client.RestClient;\n\nimport java.util.List;\nimport java.util.Map;\n\n@Service\npublic class AgentOrderService {\n\n private final RestClient restClient;\n private final String apiKey;\n private final String model;\n\n public AgentOrderService(\n @Value(\"${app.deepseek.base-url:https://api.deepseek.com}\") String baseUrl,\n @Value(\"${app.deepseek.api-key:}\") String apiKey,\n @Value(\"${app.deepseek.model:deepseek-v4-pro}\") String model\n ) {\n this.restClient = RestClient.builder().baseUrl(baseUrl).build();\n this.apiKey = apiKey;\n this.model = model;\n }\n\n public AgentOrderResult parse(AgentOrderRequest request) {\n if (apiKey == null || apiKey.isBlank()) {\n return fallback(request.message(), \"fallback_no_api_key\");\n }\n\n try {\n Map<String, Object> response = restClient.post()\n .uri(\"/v1/chat/completions\")\n .header(HttpHeaders.AUTHORIZATION, \"Bearer \" + apiKey)\n .contentType(MediaType.APPLICATION_JSON)\n .body(buildPayload(request))\n .retrieve()\n .body(Map.class);\n\n String content = extractContent(response);\n return toResult(request.message(), content, \"deepseek\");\n } catch (Exception ex) {\n return fallback(request.message(), \"fallback_deepseek_error\");\n }\n }\n\n private Map<String, Object> buildPayload(AgentOrderRequest request) {\n return Map.of(\n \"model\", model,\n \"temperature\", 0.2,\n \"messages\", List.of(\n Map.of(\n \"role\", \"system\",\n \"content\", \"\"\"\n 你是云摊坊智能点单助手。只处理摊位预约点单。\n 根据用户输入抽取:摊位名、商品、数量、口味备注、取餐时间。\n 若信息不足,先追问。若可下单,返回简短中文确认。\n 当前可用摊位:烟火小摊、乡野新农人鲜铺、非遗手作摊、老城豆花摊。\n 当前商品:招牌烤串(10串)、现炸薯条、鲜榨果汁、当季蔬果礼盒、农家土鸡蛋(10枚)、手工辣酱、生肖糖画、定制糖牌、糖画体验券、老城手作豆花、咸口豆腐脑、桂花冰豆浆。\n \"\"\"\n ),\n Map.of(\"role\", \"user\", \"content\", request.message() == null ? \"\" : request.message())\n )\n );\n }\n\n @SuppressWarnings(\"unchecked\")\n private String extractContent(Map<String, Object> response) {\n if (response == null) {\n return \"\";\n }\n List<Map<String, Object>> choices = (List<Map<String, Object>>) response.get(\"choices\");\n if (choices == null || choices.isEmpty()) {\n return \"\";\n }\n Map<String, Object> message = (Map<String, Object>) choices.get(0).get(\"message\");\n return message == null ? \"\" : String.valueOf(message.getOrDefault(\"content\", \"\"));\n }\n\n private AgentOrderResult toResult(String input, String reply, String status) {\n AgentOrderResult fallback = fallback(input, status);\n return new AgentOrderResult(\n reply == null || reply.isBlank() ? fallback.reply() : reply,\n fallback.stallName(),\n fallback.items(),\n fallback.pickupTime(),\n fallback.totalAmount(),\n fallback.confidence(),\n status,\n reply\n );\n }\n\n private AgentOrderResult fallback(String input, String status) {\n String text = input == null ? \"\" : input;\n String stallName = text.contains(\"豆花\") || text.contains(\"豆浆\") || text.contains(\"豆腐脑\")\n ? \"老城豆花摊\"\n : text.contains(\"糖画\") ? \"非遗手作摊\" : text.contains(\"鲜\") || text.contains(\"鸡蛋\") ? \"乡野新农人鲜铺\" : \"烟火小摊\";\n String product = text.contains(\"豆浆\") ? \"桂花冰豆浆\" : text.contains(\"豆腐脑\") ? \"咸口豆腐脑\" : text.contains(\"豆花\") ? \"老城手作豆花\"\n : text.contains(\"糖画\") ? \"生肖糖画\" : text.contains(\"鸡蛋\") ? \"农家土鸡蛋(10枚)\" : \"招牌烤串(10串)\";\n int quantity = text.contains(\"两\") || text.contains(\"2\") ? 2 : 1;\n String pickupTime = text.contains(\"18:30\") ? \"今天 18:30\" : \"今天 19:00\";\n String total = String.format(\"%.2f\", quantity * 16.0);\n return new AgentOrderResult(\n \"已识别:\" + stallName + \",\" + product + \" x\" + quantity + \"。\",\n stallName,\n List.of(new AgentOrderResult.OrderItem(product, quantity, \"\")),\n pickupTime,\n total,\n status.startsWith(\"fallback\") ? \"0.72\" : \"0.92\",\n status,\n \"\"\n );\n }\n}\n"}}}}