sync update from LAN repo (source dhk-1 @ 3b1ec5b4)

This commit is contained in:
gozeros committed 2026-11-05 10:56:34 +08:00
1 parent da6521b6cb
commit 264e2200d6
995 files changed
+148105 -13399

No files matched your search

@@ -9,6 +9,7 @@ SOUL 从当前 DeerFlow 智能体目录读取,避免维护两份行为规则
from __future__ import annotations
import json
import os
import sys
import urllib.error
import urllib.parse
@@ -18,9 +19,9 @@ from pathlib import Path
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8")
BASE = "http://localhost:8001"
USERNAME = "admin"
PASSWORD = "123ewq"
BASE = os.environ.get("DEERFLOW_SETUP_BASE", "http://localhost:8001").rstrip("/")
USERNAME = os.environ.get("DEERFLOW_SETUP_USERNAME", "admin")
PASSWORD = os.environ.get("DEERFLOW_SETUP_PASSWORD", "123ewq")
AGENT_ID = "biz-detail-assistant"
AGENT_NAME = "商业QB助理(全量检索版)"
MAPPING_CODE = "3q-0"
@@ -36,13 +37,21 @@ AGENT_DIR = Path(__file__).resolve().parents[1] / ".deer-flow" / "agents" / AGEN
SOUL_PATH = AGENT_DIR / "SOUL.md"
def call(method: str, path: str, body: dict | None, token: str | None):
headers = {"Content-Type": "application/json", "Accept": "application/json"}
def call(method: str, path: str, body: dict | None, token: str | None, *, form: dict | None = None):
if body is not None and form is not None:
raise ValueError("请求不能同时包含 JSON 与表单数据")
headers = {"Accept": "application/json"}
if form is not None:
headers["Content-Type"] = "application/x-www-form-urlencoded"
data = urllib.parse.urlencode(form).encode()
else:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode() if body is not None else None
if token:
headers["Authorization"] = f"Bearer {token}"
request = urllib.request.Request(
BASE + path,
data=json.dumps(body).encode() if body is not None else None,
data=data,
headers=headers,
method=method,
)
@@ -63,13 +72,23 @@ def main() -> int:
return 1
soul = SOUL_PATH.read_text(encoding="utf-8")
query = urllib.parse.urlencode({"password": PASSWORD})
status, login = call(
"POST",
f"/api/v1/auth/login/username?{query}",
{"username": USERNAME},
"/api/v1/auth/login/local",
None,
None,
form={"username": USERNAME, "password": PASSWORD},
)
# 与两个任务详情技能保持一致:旧部署关闭密码登录、但仍开启 SSO 兼容直登时,
# 仅对策略拒绝(403)回退;凭据错误、限流等失败不能绕过账号密码校验。
if status == 403:
query = urllib.parse.urlencode({"password": PASSWORD})
status, login = call(
"POST",
f"/api/v1/auth/login/username?{query}",
{"username": USERNAME},
None,
)
if status != 200:
print("登录失败", status, login)
return 1
@@ -307,6 +307,28 @@ CALL _add_column_if_missing('report_structures', 'retrieval_skills', 'TEXT NULL'
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'test_questions', 'TEXT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'retrieval_settings', 'TEXT NULL');
-- ---- llmwiki_knowledge_bases reference parent directories ------------------
-- DeerFlow 持有的 Wiki 参考父级目录 JSON 列表。ORM: PortableJSON() 在 MySQL 落 TEXT。
-- 对应 migration 20261006_01。
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_parent_directories', 'TEXT NULL');
-- ---- llmwiki_knowledge_bases Wiki generation config ------------------------
-- 目录树、重点要求与高级指令均保存 raw 值;有效 WeKnora 指令由 Gateway 编译。
-- 对应 migration 20261014_02。PortableJSON() 在 MySQL 落 TEXT。
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_directory_paths', 'TEXT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_focus_instructions', 'TEXT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_content_instructions_raw', 'TEXT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_extraction_instructions_raw', 'TEXT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_generation_managed', 'TINYINT(1) NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_config_schema_version', 'INT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_config_revision', 'INT NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_config_apply_status', 'VARCHAR(32) NULL');
CALL _add_column_if_missing('llmwiki_knowledge_bases', 'wiki_config_apply_error', 'TEXT NULL');
-- ---- knowledge_retrieval_settings management UI ---------------------------
-- 高级知识库管理入口总开关;默认关闭。对应 migration 20261019_01。
CALL _add_column_if_missing('knowledge_retrieval_settings', 'advanced_management_enabled', 'TINYINT(1) NOT NULL DEFAULT 0');
-- 所有 CALL 必须位于 DROP 之前;否则后半段补列会因存储过程已删除而失败。
DROP PROCEDURE IF EXISTS _add_column_if_missing;
@@ -323,6 +345,7 @@ SELECT table_name, column_name
OR (table_name = 'compact_menu_overrides' AND column_name = 'menu_type')
OR (table_name = 'roundtable_chains' AND column_name = 'enabled')
OR (table_name = 'llmwiki_wiki_sync_states' AND column_name = 'last_sync_result')
OR (table_name = 'llmwiki_knowledge_bases' AND column_name IN ('test_questions', 'retrieval_settings'))
OR (table_name = 'knowledge_retrieval_settings' AND column_name = 'advanced_management_enabled')
OR (table_name = 'llmwiki_knowledge_bases' AND column_name IN ('test_questions', 'retrieval_settings', 'wiki_parent_directories', 'wiki_directory_paths', 'wiki_focus_instructions', 'wiki_content_instructions_raw', 'wiki_extraction_instructions_raw', 'wiki_generation_managed', 'wiki_config_schema_version', 'wiki_config_revision', 'wiki_config_apply_status', 'wiki_config_apply_error'))
OR (table_name = 'report_structures' AND column_name IN ('retrieval_directions', 'retrieval_skills')))
ORDER BY table_name, column_name;