chattool 7.0.2__tar.gz → 7.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {chattool-7.0.2/src/chattool.egg-info → chattool-7.0.3}/PKG-INFO +11 -1
- {chattool-7.0.2 → chattool-7.0.3}/README.md +10 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/__init__.py +1 -1
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/cli.py +8 -0
- chattool-7.0.3/src/chattool/serve/local.py +109 -0
- {chattool-7.0.2 → chattool-7.0.3/src/chattool.egg-info}/PKG-INFO +11 -1
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool.egg-info/SOURCES.txt +1 -0
- {chattool-7.0.2 → chattool-7.0.3}/LICENSE +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/MANIFEST.in +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/pyproject.toml +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/scripts/migrate_chattool_envs_to_chatarch.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/setup.cfg +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/_all.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/client/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/client/cert_client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/client/main.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/client/svg2gif_client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/aliyun.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/azure.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/base.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/browser.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/crs.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/elements.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/feishu.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/github.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/huggingface.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/liblib.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/openai.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/pollinations.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/siliconflow.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/skills.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/tencent.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/tongyi.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/tplink.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/config/zulip.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/const.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/docker/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/docker/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/docker/elements.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/docker/main.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/daily.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/harvest.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/models.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/presets.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/arxiv/query.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/github/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/github/client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/github/models.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/wordpress/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/wordpress/client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/explore/wordpress/models.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/interaction/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/interaction/command_schema.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/interaction/policy.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/interaction/warnings.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/llm/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/llm/chattype.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/llm/response.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/mcp/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/mcp/catalog.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/mcp/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/mcp/server.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/capture.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/cert_server.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/lark_serve.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/serve/svg2gif.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/alias.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/hermes/install.sh +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/nvm.sh +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/README.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-help.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-project.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-status.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-stop.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/index.ts +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/package.json +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/cc_connect.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/chrome.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/claude.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/codex.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/docker.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/elements.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/frp.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/hermes.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/lark_cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/mode_prompt.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/nodejs.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/opencode.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/opencode_chatloop.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/core.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/options.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/render.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/en/AGENTS.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/en/projects/README.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/zh/AGENTS.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/zh/projects/README.md +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/zsh.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/skill/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/skill/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/skill/interaction.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/skill/platforms.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/skill/validation.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/base.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/playwright_impl.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/selenium.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/test_browser.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/test_module.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/test_remote.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/browser/xhs_qrcode.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cc/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cc/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/acme_dns_tiny.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/cert_server.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/cert_updater.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/cert/email.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/crs/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/crs/api.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/crs/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/aliyun.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/base.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/domain_utils.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/ip_updater.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/mcp.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/tencent.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/dns/utils.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/api.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/commands.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/render.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/github/requests.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/base.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/helpers.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/huggingface.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/liblib.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/pollinations.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/siliconflow.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/image/tongyi.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/interact.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/bot.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/context.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/docx_blocks.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/elements.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/markdown_blocks.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/lark/session.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/link_check.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/mcp.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/scanner.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/network/service_urls.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/nginx/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/nginx/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/nginx/templates.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/pypi/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/pypi/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/pypi/main.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/tplogin.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/tplogin_cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/zulip/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/zulip/cli.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/zulip/client.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/zulip/legacy.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/tools/zulip/mcp.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/__init__.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/basic.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/custom_logger.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/fastobj.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/httpclient.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/pathing.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/test_helpers.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool/utils/urltool.py +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool.egg-info/dependency_links.txt +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool.egg-info/entry_points.txt +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool.egg-info/requires.txt +0 -0
- {chattool-7.0.2 → chattool-7.0.3}/src/chattool.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chattool
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.3
|
|
4
4
|
Summary: Toolkit for Chat API
|
|
5
5
|
Author-email: Rex Wang <1073853456@qq.com>
|
|
6
6
|
License: MIT license
|
|
@@ -248,6 +248,16 @@ chattool explore arxiv get
|
|
|
248
248
|
|
|
249
249
|
交互终端里,`chattool explore arxiv get` 缺少 arXiv ID 时会自动补问。
|
|
250
250
|
|
|
251
|
+
### 本地服务 (`chattool serve`)
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
chattool serve local ./cli-tree.html --host 127.0.0.1 --port 8765
|
|
255
|
+
chattool serve local ./reports --html cli-tree.html --port 8765
|
|
256
|
+
chattool serve local . --html index.html --dry-run
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`serve local` 可用本地端口打开 HTML 文件或目录;省略目标时默认使用当前目录,`-i` 会进入统一交互补问。
|
|
260
|
+
|
|
251
261
|
### 其他工具
|
|
252
262
|
|
|
253
263
|
| 工具 | 命令 | 说明 |
|
|
@@ -158,6 +158,16 @@ chattool explore arxiv get
|
|
|
158
158
|
|
|
159
159
|
交互终端里,`chattool explore arxiv get` 缺少 arXiv ID 时会自动补问。
|
|
160
160
|
|
|
161
|
+
### 本地服务 (`chattool serve`)
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
chattool serve local ./cli-tree.html --host 127.0.0.1 --port 8765
|
|
165
|
+
chattool serve local ./reports --html cli-tree.html --port 8765
|
|
166
|
+
chattool serve local . --html index.html --dry-run
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`serve local` 可用本地端口打开 HTML 文件或目录;省略目标时默认使用当前目录,`-i` 会进入统一交互补问。
|
|
170
|
+
|
|
161
171
|
### 其他工具
|
|
162
172
|
|
|
163
173
|
| 工具 | 命令 | 说明 |
|
|
@@ -27,6 +27,12 @@ def _load_lark():
|
|
|
27
27
|
return command
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
def _load_local():
|
|
31
|
+
command = _load_attr("chattool.serve.local", "local")
|
|
32
|
+
command.short_help = "Serve a local directory or HTML file."
|
|
33
|
+
return command
|
|
34
|
+
|
|
35
|
+
|
|
30
36
|
def _load_svg2gif():
|
|
31
37
|
command = _load_attr("chattool.serve.svg2gif", "svg2gif_app")
|
|
32
38
|
command.short_help = "Run the SVG-to-GIF conversion service."
|
|
@@ -44,6 +50,7 @@ serve_cli._lazy_commands.update(
|
|
|
44
50
|
"capture": _load_capture,
|
|
45
51
|
"cert": _load_cert,
|
|
46
52
|
"lark": _load_lark,
|
|
53
|
+
"local": _load_local,
|
|
47
54
|
"svg2gif": _load_svg2gif,
|
|
48
55
|
}
|
|
49
56
|
)
|
|
@@ -52,6 +59,7 @@ serve_cli._lazy_command_help.update(
|
|
|
52
59
|
"capture": "Run the screenshot capture server.",
|
|
53
60
|
"cert": "Run the certificate service.",
|
|
54
61
|
"lark": "Run the Lark webhook service.",
|
|
62
|
+
"local": "Serve a local directory or HTML file.",
|
|
55
63
|
"svg2gif": "Run the SVG-to-GIF conversion service.",
|
|
56
64
|
}
|
|
57
65
|
)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from urllib.parse import quote
|
|
5
|
+
|
|
6
|
+
import click
|
|
7
|
+
|
|
8
|
+
from chattool.interaction.command_schema import (
|
|
9
|
+
CommandField,
|
|
10
|
+
CommandSchema,
|
|
11
|
+
add_interactive_option,
|
|
12
|
+
resolve_command_inputs,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
LOCAL_SCHEMA = CommandSchema(
|
|
17
|
+
name="serve-local",
|
|
18
|
+
fields=(
|
|
19
|
+
CommandField(
|
|
20
|
+
"target",
|
|
21
|
+
prompt="HTML file or directory",
|
|
22
|
+
kind="path",
|
|
23
|
+
default=".",
|
|
24
|
+
prompt_if_missing=True,
|
|
25
|
+
),
|
|
26
|
+
),
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def resolve_local_target(target: str | None, html_name: str | None) -> dict[str, str]:
|
|
31
|
+
"""Resolve a directory or HTML file into a static root and URL path."""
|
|
32
|
+
|
|
33
|
+
raw_target = Path(target or ".").expanduser()
|
|
34
|
+
target_path = raw_target.resolve()
|
|
35
|
+
|
|
36
|
+
if target_path.is_file():
|
|
37
|
+
if html_name:
|
|
38
|
+
raise click.UsageError("--html can only be used when TARGET is a directory.")
|
|
39
|
+
root = target_path.parent
|
|
40
|
+
html_path = target_path
|
|
41
|
+
elif target_path.is_dir():
|
|
42
|
+
root = target_path
|
|
43
|
+
html_path = (root / (html_name or "index.html")).resolve()
|
|
44
|
+
try:
|
|
45
|
+
html_path.relative_to(root)
|
|
46
|
+
except ValueError as exc:
|
|
47
|
+
raise click.UsageError("--html must resolve inside TARGET directory.") from exc
|
|
48
|
+
else:
|
|
49
|
+
raise click.UsageError(f"TARGET does not exist: {raw_target}")
|
|
50
|
+
|
|
51
|
+
if not html_path.exists():
|
|
52
|
+
raise click.UsageError(f"HTML file does not exist: {html_path}")
|
|
53
|
+
if not html_path.is_file():
|
|
54
|
+
raise click.UsageError(f"HTML path is not a file: {html_path}")
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
"root": str(root),
|
|
58
|
+
"html": str(html_path),
|
|
59
|
+
"path": "/" + quote(str(html_path.relative_to(root)).replace("\\", "/")),
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@click.command(name="local")
|
|
64
|
+
@click.argument("target", required=False)
|
|
65
|
+
@click.option("--html", "html_name", default=None, help="HTML file inside TARGET directory. Defaults to index.html.")
|
|
66
|
+
@click.option("--host", default="127.0.0.1", show_default=True, help="Bind host.")
|
|
67
|
+
@click.option("--port", default=8765, show_default=True, type=int, help="Bind port.")
|
|
68
|
+
@click.option("--open/--no-open", "open_browser", default=True, show_default=True, help="Open the URL in a browser.")
|
|
69
|
+
@click.option("--dry-run", is_flag=True, help="Print resolved server info without starting the server.")
|
|
70
|
+
@add_interactive_option
|
|
71
|
+
def local(
|
|
72
|
+
target: str | None,
|
|
73
|
+
html_name: str | None,
|
|
74
|
+
host: str,
|
|
75
|
+
port: int,
|
|
76
|
+
open_browser: bool,
|
|
77
|
+
dry_run: bool,
|
|
78
|
+
interactive: bool | None,
|
|
79
|
+
) -> None:
|
|
80
|
+
"""Serve a local directory or HTML file over HTTP."""
|
|
81
|
+
|
|
82
|
+
values = resolve_command_inputs(
|
|
83
|
+
schema=LOCAL_SCHEMA,
|
|
84
|
+
provided={"target": target},
|
|
85
|
+
interactive=interactive,
|
|
86
|
+
usage="Usage: chattool serve local [TARGET] [--html FILE] [--host HOST] [--port PORT] [-i|-I]",
|
|
87
|
+
)
|
|
88
|
+
resolved = resolve_local_target(values["target"], html_name)
|
|
89
|
+
url = f"http://{host}:{port}{resolved['path']}"
|
|
90
|
+
click.echo(f"Root: {resolved['root']}")
|
|
91
|
+
click.echo(f"HTML: {resolved['html']}")
|
|
92
|
+
click.echo(f"URL: {url}")
|
|
93
|
+
if dry_run:
|
|
94
|
+
return
|
|
95
|
+
|
|
96
|
+
import http.server
|
|
97
|
+
import socketserver
|
|
98
|
+
import webbrowser
|
|
99
|
+
from functools import partial
|
|
100
|
+
|
|
101
|
+
handler = partial(http.server.SimpleHTTPRequestHandler, directory=resolved["root"])
|
|
102
|
+
with socketserver.TCPServer((host, port), handler) as httpd:
|
|
103
|
+
click.echo("Press Ctrl+C to stop.")
|
|
104
|
+
if open_browser:
|
|
105
|
+
webbrowser.open(url)
|
|
106
|
+
try:
|
|
107
|
+
httpd.serve_forever()
|
|
108
|
+
except KeyboardInterrupt:
|
|
109
|
+
click.echo("\nStopped.")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chattool
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.3
|
|
4
4
|
Summary: Toolkit for Chat API
|
|
5
5
|
Author-email: Rex Wang <1073853456@qq.com>
|
|
6
6
|
License: MIT license
|
|
@@ -248,6 +248,16 @@ chattool explore arxiv get
|
|
|
248
248
|
|
|
249
249
|
交互终端里,`chattool explore arxiv get` 缺少 arXiv ID 时会自动补问。
|
|
250
250
|
|
|
251
|
+
### 本地服务 (`chattool serve`)
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
chattool serve local ./cli-tree.html --host 127.0.0.1 --port 8765
|
|
255
|
+
chattool serve local ./reports --html cli-tree.html --port 8765
|
|
256
|
+
chattool serve local . --html index.html --dry-run
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`serve local` 可用本地端口打开 HTML 文件或目录;省略目标时默认使用当前目录,`-i` 会进入统一交互补问。
|
|
260
|
+
|
|
251
261
|
### 其他工具
|
|
252
262
|
|
|
253
263
|
| 工具 | 命令 | 说明 |
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/en/AGENTS.md
RENAMED
|
File without changes
|
|
File without changes
|
{chattool-7.0.2 → chattool-7.0.3}/src/chattool/setup/workspace/templates/default/zh/AGENTS.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|