From 9a86dd294769977b583d06ec6869223b55f18687 Mon Sep 17 00:00:00 2001 From: qixinbo Date: Tue, 31 Mar 2026 22:05:06 +0800 Subject: [PATCH] fix: packaging error --- README.md | 2 +- README_en.md | 2 +- backend/app/cli.py | 2 +- backend/pyproject.toml | 24 ++-- backend/uv.lock | 307 +++++++++++++++-------------------------- 5 files changed, 132 insertions(+), 205 deletions(-) diff --git a/README.md b/README.md index 713149e..88f137a 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ npm run build # 2) 构建后端 wheel,并输出到根目录 dist/ cd ../backend -uv build --out-dir ../dist +uv build --wheel --out-dir ../dist ``` 构建完成后,wheel 位于项目根目录 `dist/`,例如 `dist/dataclaw-0.1.0-py3-none-any.whl`。 diff --git a/README_en.md b/README_en.md index f029774..497789b 100644 --- a/README_en.md +++ b/README_en.md @@ -94,7 +94,7 @@ npm run build # Then, build the backend wheel cd ../backend -uv build --out-dir ../dist +uv build --wheel --out-dir ../dist ``` Once built, the wheel is located in the project root `dist/` directory, e.g., `dist/dataclaw-0.1.0-py3-none-any.whl`. diff --git a/backend/app/cli.py b/backend/app/cli.py index 736244b..5ea74b4 100644 --- a/backend/app/cli.py +++ b/backend/app/cli.py @@ -124,7 +124,7 @@ def start( reload: bool = typer.Option(False, "--reload", "-r", help="开启自动重载(开发模式)"), log_level: str = typer.Option("info", "--log-level", help="日志级别"), app_target: str = typer.Option("main:app", "--app", help="ASGI 应用导入路径"), - ready_timeout: float = typer.Option(12.0, "--ready-timeout", help="就绪等待时长(秒)"), + ready_timeout: float = typer.Option(60.0, "--ready-timeout", help="就绪等待时长(秒)"), pid_file: str | None = typer.Option(None, "--pid-file", help="PID 状态文件路径"), log_file: str | None = typer.Option(None, "--log-file", help="服务日志文件路径"), ) -> None: diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 2b60990..20c12db 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -5,59 +5,63 @@ description = "Add your description here" readme = "README.md" requires-python = ">=3.11" dependencies = [ + "anthropic>=0.45.0,<1.0.0", "bcrypt>=5.0.0", "chardet>=3.0.2,<6.0.0", "clickhouse-driver>=0.2.10", "croniter>=6.0.0,<7.0.0", + "ddgs>=9.5.5,<10.0.0", "dingtalk-stream>=0.24.0,<1.0.0", "duckdb>=1.5.0", "fastapi>=0.135.1", "httpx>=0.28.0,<1.0.0", "json-repair>=0.57.0,<1.0.0", + "langfuse>=3.7.0", "lark-oapi>=1.5.0,<2.0.0", - "loguru>=0.7.3,<1.0.0", "llama-index-core>=0.14.0", "llama-index-embeddings-openai>=0.5.1", "llama-index-embeddings-openai-like>=0.3.1", - "langfuse>=3.7.0", + "loguru>=0.7.3,<1.0.0", "mcp>=1.26.0,<2.0.0", "msgpack>=1.1.0,<2.0.0", - "nanobot-ai", "oauth-cli-kit>=0.1.3,<1.0.0", "openai>=2.8.0", "openpyxl>=3.1.5", + "opentelemetry-instrumentation-httpx>=0.59b0", "pandas>=3.0.1", "passlib>=1.7.4", - "opentelemetry-instrumentation-httpx>=0.59b0", "prompt-toolkit>=3.0.50,<4.0.0", "psycopg2-binary>=2.9.11", "pydantic>=2.12.0,<3.0.0", "pydantic-settings>=2.12.0,<3.0.0", "pypdf2>=3.0.0", + "python-docx>=1.2.0", "python-dotenv>=1.0.1", "python-jose[cryptography]>=3.5.0", "python-multipart>=0.0.22", + "python-pptx>=1.0.2", "python-socketio>=5.16.0,<6.0.0", "python-socks[asyncio]>=2.8.0,<3.0.0", "python-telegram-bot[socks]>=22.6,<23.0", "pyyaml>=6.0.3", "qq-botpy>=1.2.0,<2.0.0", + "questionary>=2.0.0,<3.0.0", "readability-lxml>=0.8.4,<1.0.0", "rich>=14.0.0,<15.0.0", "slack-sdk>=3.39.0,<4.0.0", "slackify-markdown>=0.2.0,<1.0.0", "socksio>=1.0.0,<2.0.0", "sqlalchemy>=2.0.48", + "tiktoken>=0.12.0,<1.0.0", "typer>=0.20.0,<1.0.0", "uvicorn>=0.41.0", "websocket-client>=1.9.0,<2.0.0", "websockets>=16.0,<17.0", - "python-docx>=1.2.0", - "python-pptx>=1.0.2", ] [project.scripts] dataclaw = "app.cli:app" +nanobot = "nanobot.cli.commands:app" [build-system] requires = ["hatchling"] @@ -73,11 +77,11 @@ packages = ["app"] "app" = "app" [tool.hatch.build.targets.wheel.force-include] -"frontend/dist" = "app/webui" +"../frontend/dist" = "app/webui" +"../nanobot/nanobot" = "nanobot" "main.py" = "main.py" [tool.hatch.build.targets.sdist.force-include] "../frontend/dist" = "frontend/dist" - -[tool.uv.sources] -nanobot-ai = { path = "../nanobot", editable = true } +"../nanobot/nanobot" = "nanobot" +"main.py" = "main.py" diff --git a/backend/uv.lock b/backend/uv.lock index 26e7c4c..3246f84 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -214,115 +214,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, ] -[[package]] -name = "backend" -version = "0.1.0" -source = { editable = "." } -dependencies = [ - { name = "bcrypt" }, - { name = "chardet" }, - { name = "clickhouse-driver" }, - { name = "croniter" }, - { name = "dingtalk-stream" }, - { name = "duckdb" }, - { name = "fastapi" }, - { name = "httpx" }, - { name = "json-repair" }, - { name = "langfuse" }, - { name = "lark-oapi" }, - { name = "llama-index-core" }, - { name = "llama-index-embeddings-openai" }, - { name = "llama-index-embeddings-openai-like" }, - { name = "loguru" }, - { name = "mcp" }, - { name = "msgpack" }, - { name = "nanobot-ai" }, - { name = "oauth-cli-kit" }, - { name = "openai" }, - { name = "openpyxl" }, - { name = "opentelemetry-instrumentation-httpx" }, - { name = "pandas" }, - { name = "passlib" }, - { name = "prompt-toolkit" }, - { name = "psycopg2-binary" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "pypdf2" }, - { name = "python-docx" }, - { name = "python-dotenv" }, - { name = "python-jose", extra = ["cryptography"] }, - { name = "python-multipart" }, - { name = "python-pptx" }, - { name = "python-socketio" }, - { name = "python-socks" }, - { name = "python-telegram-bot", extra = ["socks"] }, - { name = "pyyaml" }, - { name = "qq-botpy" }, - { name = "readability-lxml" }, - { name = "rich" }, - { name = "slack-sdk" }, - { name = "slackify-markdown" }, - { name = "socksio" }, - { name = "sqlalchemy" }, - { name = "typer" }, - { name = "uvicorn" }, - { name = "websocket-client" }, - { name = "websockets" }, -] - -[package.metadata] -requires-dist = [ - { name = "bcrypt", specifier = ">=5.0.0" }, - { name = "chardet", specifier = ">=3.0.2,<6.0.0" }, - { name = "clickhouse-driver", specifier = ">=0.2.10" }, - { name = "croniter", specifier = ">=6.0.0,<7.0.0" }, - { name = "dingtalk-stream", specifier = ">=0.24.0,<1.0.0" }, - { name = "duckdb", specifier = ">=1.5.0" }, - { name = "fastapi", specifier = ">=0.135.1" }, - { name = "httpx", specifier = ">=0.28.0,<1.0.0" }, - { name = "json-repair", specifier = ">=0.57.0,<1.0.0" }, - { name = "langfuse", specifier = ">=3.7.0" }, - { name = "lark-oapi", specifier = ">=1.5.0,<2.0.0" }, - { name = "llama-index-core", specifier = ">=0.14.0" }, - { name = "llama-index-embeddings-openai", specifier = ">=0.5.1" }, - { name = "llama-index-embeddings-openai-like", specifier = ">=0.3.1" }, - { name = "loguru", specifier = ">=0.7.3,<1.0.0" }, - { name = "mcp", specifier = ">=1.26.0,<2.0.0" }, - { name = "msgpack", specifier = ">=1.1.0,<2.0.0" }, - { name = "nanobot-ai", editable = "../nanobot" }, - { name = "oauth-cli-kit", specifier = ">=0.1.3,<1.0.0" }, - { name = "openai", specifier = ">=2.8.0" }, - { name = "openpyxl", specifier = ">=3.1.5" }, - { name = "opentelemetry-instrumentation-httpx", specifier = ">=0.59b0" }, - { name = "pandas", specifier = ">=3.0.1" }, - { name = "passlib", specifier = ">=1.7.4" }, - { name = "prompt-toolkit", specifier = ">=3.0.50,<4.0.0" }, - { name = "psycopg2-binary", specifier = ">=2.9.11" }, - { name = "pydantic", specifier = ">=2.12.0,<3.0.0" }, - { name = "pydantic-settings", specifier = ">=2.12.0,<3.0.0" }, - { name = "pypdf2", specifier = ">=3.0.0" }, - { name = "python-docx", specifier = ">=1.2.0" }, - { name = "python-dotenv", specifier = ">=1.0.1" }, - { name = "python-jose", extras = ["cryptography"], specifier = ">=3.5.0" }, - { name = "python-multipart", specifier = ">=0.0.22" }, - { name = "python-pptx", specifier = ">=1.0.2" }, - { name = "python-socketio", specifier = ">=5.16.0,<6.0.0" }, - { name = "python-socks", extras = ["asyncio"], specifier = ">=2.8.0,<3.0.0" }, - { name = "python-telegram-bot", extras = ["socks"], specifier = ">=22.6,<23.0" }, - { name = "pyyaml", specifier = ">=6.0.3" }, - { name = "qq-botpy", specifier = ">=1.2.0,<2.0.0" }, - { name = "readability-lxml", specifier = ">=0.8.4,<1.0.0" }, - { name = "rich", specifier = ">=14.0.0,<15.0.0" }, - { name = "slack-sdk", specifier = ">=3.39.0,<4.0.0" }, - { name = "slackify-markdown", specifier = ">=0.2.0,<1.0.0" }, - { name = "socksio", specifier = ">=1.0.0,<2.0.0" }, - { name = "sqlalchemy", specifier = ">=2.0.48" }, - { name = "typer", specifier = ">=0.20.0,<1.0.0" }, - { name = "uvicorn", specifier = ">=0.41.0" }, - { name = "websocket-client", specifier = ">=1.9.0,<2.0.0" }, - { name = "websockets", specifier = ">=16.0,<17.0" }, -] - [[package]] name = "backoff" version = "2.2.1" @@ -768,6 +659,121 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, ] +[[package]] +name = "dataclaw" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "anthropic" }, + { name = "bcrypt" }, + { name = "chardet" }, + { name = "clickhouse-driver" }, + { name = "croniter" }, + { name = "ddgs" }, + { name = "dingtalk-stream" }, + { name = "duckdb" }, + { name = "fastapi" }, + { name = "httpx" }, + { name = "json-repair" }, + { name = "langfuse" }, + { name = "lark-oapi" }, + { name = "llama-index-core" }, + { name = "llama-index-embeddings-openai" }, + { name = "llama-index-embeddings-openai-like" }, + { name = "loguru" }, + { name = "mcp" }, + { name = "msgpack" }, + { name = "oauth-cli-kit" }, + { name = "openai" }, + { name = "openpyxl" }, + { name = "opentelemetry-instrumentation-httpx" }, + { name = "pandas" }, + { name = "passlib" }, + { name = "prompt-toolkit" }, + { name = "psycopg2-binary" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pypdf2" }, + { name = "python-docx" }, + { name = "python-dotenv" }, + { name = "python-jose", extra = ["cryptography"] }, + { name = "python-multipart" }, + { name = "python-pptx" }, + { name = "python-socketio" }, + { name = "python-socks" }, + { name = "python-telegram-bot", extra = ["socks"] }, + { name = "pyyaml" }, + { name = "qq-botpy" }, + { name = "questionary" }, + { name = "readability-lxml" }, + { name = "rich" }, + { name = "slack-sdk" }, + { name = "slackify-markdown" }, + { name = "socksio" }, + { name = "sqlalchemy" }, + { name = "tiktoken" }, + { name = "typer" }, + { name = "uvicorn" }, + { name = "websocket-client" }, + { name = "websockets" }, +] + +[package.metadata] +requires-dist = [ + { name = "anthropic", specifier = ">=0.45.0,<1.0.0" }, + { name = "bcrypt", specifier = ">=5.0.0" }, + { name = "chardet", specifier = ">=3.0.2,<6.0.0" }, + { name = "clickhouse-driver", specifier = ">=0.2.10" }, + { name = "croniter", specifier = ">=6.0.0,<7.0.0" }, + { name = "ddgs", specifier = ">=9.5.5,<10.0.0" }, + { name = "dingtalk-stream", specifier = ">=0.24.0,<1.0.0" }, + { name = "duckdb", specifier = ">=1.5.0" }, + { name = "fastapi", specifier = ">=0.135.1" }, + { name = "httpx", specifier = ">=0.28.0,<1.0.0" }, + { name = "json-repair", specifier = ">=0.57.0,<1.0.0" }, + { name = "langfuse", specifier = ">=3.7.0" }, + { name = "lark-oapi", specifier = ">=1.5.0,<2.0.0" }, + { name = "llama-index-core", specifier = ">=0.14.0" }, + { name = "llama-index-embeddings-openai", specifier = ">=0.5.1" }, + { name = "llama-index-embeddings-openai-like", specifier = ">=0.3.1" }, + { name = "loguru", specifier = ">=0.7.3,<1.0.0" }, + { name = "mcp", specifier = ">=1.26.0,<2.0.0" }, + { name = "msgpack", specifier = ">=1.1.0,<2.0.0" }, + { name = "oauth-cli-kit", specifier = ">=0.1.3,<1.0.0" }, + { name = "openai", specifier = ">=2.8.0" }, + { name = "openpyxl", specifier = ">=3.1.5" }, + { name = "opentelemetry-instrumentation-httpx", specifier = ">=0.59b0" }, + { name = "pandas", specifier = ">=3.0.1" }, + { name = "passlib", specifier = ">=1.7.4" }, + { name = "prompt-toolkit", specifier = ">=3.0.50,<4.0.0" }, + { name = "psycopg2-binary", specifier = ">=2.9.11" }, + { name = "pydantic", specifier = ">=2.12.0,<3.0.0" }, + { name = "pydantic-settings", specifier = ">=2.12.0,<3.0.0" }, + { name = "pypdf2", specifier = ">=3.0.0" }, + { name = "python-docx", specifier = ">=1.2.0" }, + { name = "python-dotenv", specifier = ">=1.0.1" }, + { name = "python-jose", extras = ["cryptography"], specifier = ">=3.5.0" }, + { name = "python-multipart", specifier = ">=0.0.22" }, + { name = "python-pptx", specifier = ">=1.0.2" }, + { name = "python-socketio", specifier = ">=5.16.0,<6.0.0" }, + { name = "python-socks", extras = ["asyncio"], specifier = ">=2.8.0,<3.0.0" }, + { name = "python-telegram-bot", extras = ["socks"], specifier = ">=22.6,<23.0" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "qq-botpy", specifier = ">=1.2.0,<2.0.0" }, + { name = "questionary", specifier = ">=2.0.0,<3.0.0" }, + { name = "readability-lxml", specifier = ">=0.8.4,<1.0.0" }, + { name = "rich", specifier = ">=14.0.0,<15.0.0" }, + { name = "slack-sdk", specifier = ">=3.39.0,<4.0.0" }, + { name = "slackify-markdown", specifier = ">=0.2.0,<1.0.0" }, + { name = "socksio", specifier = ">=1.0.0,<2.0.0" }, + { name = "sqlalchemy", specifier = ">=2.0.48" }, + { name = "tiktoken", specifier = ">=0.12.0,<1.0.0" }, + { name = "typer", specifier = ">=0.20.0,<1.0.0" }, + { name = "uvicorn", specifier = ">=0.41.0" }, + { name = "websocket-client", specifier = ">=1.9.0,<2.0.0" }, + { name = "websockets", specifier = ">=16.0,<17.0" }, +] + [[package]] name = "ddgs" version = "9.12.0" @@ -1912,89 +1918,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] -[[package]] -name = "nanobot-ai" -version = "0.1.4.post6" -source = { editable = "../nanobot" } -dependencies = [ - { name = "anthropic" }, - { name = "chardet" }, - { name = "croniter" }, - { name = "ddgs" }, - { name = "dingtalk-stream" }, - { name = "httpx" }, - { name = "json-repair" }, - { name = "lark-oapi" }, - { name = "loguru" }, - { name = "mcp" }, - { name = "msgpack" }, - { name = "oauth-cli-kit" }, - { name = "openai" }, - { name = "prompt-toolkit" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "python-socketio" }, - { name = "python-socks" }, - { name = "python-telegram-bot", extra = ["socks"] }, - { name = "qq-botpy" }, - { name = "questionary" }, - { name = "readability-lxml" }, - { name = "rich" }, - { name = "slack-sdk" }, - { name = "slackify-markdown" }, - { name = "socksio" }, - { name = "tiktoken" }, - { name = "typer" }, - { name = "websocket-client" }, - { name = "websockets" }, -] - -[package.metadata] -requires-dist = [ - { name = "anthropic", specifier = ">=0.45.0,<1.0.0" }, - { name = "chardet", specifier = ">=3.0.2,<6.0.0" }, - { name = "croniter", specifier = ">=6.0.0,<7.0.0" }, - { name = "ddgs", specifier = ">=9.5.5,<10.0.0" }, - { name = "dingtalk-stream", specifier = ">=0.24.0,<1.0.0" }, - { name = "httpx", specifier = ">=0.28.0,<1.0.0" }, - { name = "json-repair", specifier = ">=0.57.0,<1.0.0" }, - { name = "langsmith", marker = "extra == 'langsmith'", specifier = ">=0.1.0" }, - { name = "lark-oapi", specifier = ">=1.5.0,<2.0.0" }, - { name = "loguru", specifier = ">=0.7.3,<1.0.0" }, - { name = "matrix-nio", extras = ["e2e"], marker = "extra == 'matrix'", specifier = ">=0.25.2" }, - { name = "mcp", specifier = ">=1.26.0,<2.0.0" }, - { name = "mistune", marker = "extra == 'matrix'", specifier = ">=3.0.0,<4.0.0" }, - { name = "msgpack", specifier = ">=1.1.0,<2.0.0" }, - { name = "nh3", marker = "extra == 'matrix'", specifier = ">=0.2.17,<1.0.0" }, - { name = "oauth-cli-kit", specifier = ">=0.1.3,<1.0.0" }, - { name = "openai", specifier = ">=2.8.0" }, - { name = "prompt-toolkit", specifier = ">=3.0.50,<4.0.0" }, - { name = "pycryptodome", marker = "extra == 'weixin'", specifier = ">=3.20.0" }, - { name = "pydantic", specifier = ">=2.12.0,<3.0.0" }, - { name = "pydantic-settings", specifier = ">=2.12.0,<3.0.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.0,<10.0.0" }, - { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=1.3.0,<2.0.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=6.0.0,<7.0.0" }, - { name = "python-socketio", specifier = ">=5.16.0,<6.0.0" }, - { name = "python-socks", extras = ["asyncio"], specifier = ">=2.8.0,<3.0.0" }, - { name = "python-telegram-bot", extras = ["socks"], specifier = ">=22.6,<23.0" }, - { name = "qq-botpy", specifier = ">=1.2.0,<2.0.0" }, - { name = "qrcode", extras = ["pil"], marker = "extra == 'weixin'", specifier = ">=8.0" }, - { name = "questionary", specifier = ">=2.0.0,<3.0.0" }, - { name = "readability-lxml", specifier = ">=0.8.4,<1.0.0" }, - { name = "rich", specifier = ">=14.0.0,<15.0.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.1.0" }, - { name = "slack-sdk", specifier = ">=3.39.0,<4.0.0" }, - { name = "slackify-markdown", specifier = ">=0.2.0,<1.0.0" }, - { name = "socksio", specifier = ">=1.0.0,<2.0.0" }, - { name = "tiktoken", specifier = ">=0.12.0,<1.0.0" }, - { name = "typer", specifier = ">=0.20.0,<1.0.0" }, - { name = "websocket-client", specifier = ">=1.9.0,<2.0.0" }, - { name = "websockets", specifier = ">=16.0,<17.0" }, - { name = "wecom-aibot-sdk-python", marker = "extra == 'wecom'", specifier = ">=0.1.5" }, -] -provides-extras = ["wecom", "weixin", "matrix", "langsmith", "dev"] - [[package]] name = "nest-asyncio" version = "1.6.0"