chattool 7.0.4__tar.gz → 7.0.5__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.4/src/chattool.egg-info → chattool-7.0.5}/PKG-INFO +2 -2
- {chattool-7.0.4 → chattool-7.0.5}/README.md +1 -1
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/__init__.py +1 -1
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/elements.py +37 -1
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/cli.py +42 -6
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/options.py +77 -14
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/render.py +2 -2
- {chattool-7.0.4 → chattool-7.0.5/src/chattool.egg-info}/PKG-INFO +2 -2
- {chattool-7.0.4 → chattool-7.0.5}/LICENSE +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/MANIFEST.in +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/pyproject.toml +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/scripts/migrate_chattool_envs_to_chatarch.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/setup.cfg +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/_all.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/cert_client.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/main.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/svg2gif_client.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/aliyun.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/azure.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/base.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/browser.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/crs.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/elements.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/feishu.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/huggingface.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/liblib.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/openai.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/pollinations.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/siliconflow.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/skills.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tencent.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tongyi.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tplink.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/zulip.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/const.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/elements.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/main.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/client.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/daily.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/harvest.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/models.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/presets.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/query.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/client.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/models.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/command_schema.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/policy.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/warnings.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/chattype.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/response.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/catalog.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/server.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/capture.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/cert_server.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/lark_serve.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/local.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/oauth.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/svg2gif.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/alias.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/hermes/install.sh +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/nvm.sh +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/README.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-help.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-project.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-status.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-stop.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/index.ts +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/package.json +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/cc_connect.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/chrome.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/claude.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/codex.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/docker.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/frp.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/hermes.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/lark_cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/mode_prompt.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/nodejs.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/opencode.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/opencode_chatloop.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/core.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/en/AGENTS.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/en/projects/README.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/zh/AGENTS.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/zh/projects/README.md +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/zsh.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/interaction.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/platforms.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/validation.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/base.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/playwright_impl.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/selenium.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_browser.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_module.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_remote.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/xhs_qrcode.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cc/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cc/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/acme_dns_tiny.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cert_server.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cert_updater.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/email.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/api.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/openai_oauth.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/aliyun.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/base.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/domain_utils.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/ip_updater.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/mcp.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/tencent.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/utils.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/base.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/codex.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/helpers.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/huggingface.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/liblib.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/pollinations.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/siliconflow.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/tongyi.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/interact.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/bot.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/context.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/docx_blocks.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/elements.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/markdown_blocks.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/session.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/link_check.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/mcp.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/scanner.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/service_urls.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/templates.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/main.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/tplogin.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/tplogin_cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/cli.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/client.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/legacy.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/mcp.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/__init__.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/basic.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/custom_logger.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/fastobj.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/httpclient.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/pathing.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/test_helpers.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/urltool.py +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/SOURCES.txt +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/dependency_links.txt +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/entry_points.txt +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/requires.txt +0 -0
- {chattool-7.0.4 → chattool-7.0.5}/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.5
|
|
4
4
|
Summary: Toolkit for Chat API
|
|
5
5
|
Author-email: Rex Wang <1073853456@qq.com>
|
|
6
6
|
License: MIT license
|
|
@@ -268,7 +268,7 @@ chattool serve local . --html index.html --dry-run
|
|
|
268
268
|
| PyPI 工具 | `chattool pypi` | 创建、构建、校验、上传与探测 Python 包 |
|
|
269
269
|
| MCP 服务 | `chattool mcp start` | 标准 MCP Server,供 Claude/Cursor 调用 |
|
|
270
270
|
| 环境安装 | `chattool setup zsh/codex/claude/opencode/hermes/lark-cli/docker` | 配置 zsh,安装或检查常用 Agent CLI / WebUI / Docker 环境,并在确认后执行建议的系统命令;`setup hermes` 封装 Hermes 官方 installer,WebUI 需显式启用;`setup opencode/codex/claude/hermes` 支持 `--install-only` 纯安装/升级,`setup opencode` 也支持 `--plugin auto-loop` 追加写入 `opencode-auto-loop` |
|
|
271
|
-
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-
|
|
271
|
+
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-chattool`、`--with-chatblog` 分别挂载 ChatTool 和 ChatBlog |
|
|
272
272
|
| Skills | `chattool skill install` | 安装 ChatTool skills 到 Codex / Claude / OpenCode |
|
|
273
273
|
| CC-Connect | `chattool cc` | cc-connect 快速配置与启动 |
|
|
274
274
|
| CRS 查询 | `chattool crs` | 查询 Claude Relay Service API key 用量、模型统计和只读 admin 信息 |
|
|
@@ -178,7 +178,7 @@ chattool serve local . --html index.html --dry-run
|
|
|
178
178
|
| PyPI 工具 | `chattool pypi` | 创建、构建、校验、上传与探测 Python 包 |
|
|
179
179
|
| MCP 服务 | `chattool mcp start` | 标准 MCP Server,供 Claude/Cursor 调用 |
|
|
180
180
|
| 环境安装 | `chattool setup zsh/codex/claude/opencode/hermes/lark-cli/docker` | 配置 zsh,安装或检查常用 Agent CLI / WebUI / Docker 环境,并在确认后执行建议的系统命令;`setup hermes` 封装 Hermes 官方 installer,WebUI 需显式启用;`setup opencode/codex/claude/hermes` 支持 `--install-only` 纯安装/升级,`setup opencode` 也支持 `--plugin auto-loop` 追加写入 `opencode-auto-loop` |
|
|
181
|
-
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-
|
|
181
|
+
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-chattool`、`--with-chatblog` 分别挂载 ChatTool 和 ChatBlog |
|
|
182
182
|
| Skills | `chattool skill install` | 安装 ChatTool skills 到 Codex / Claude / OpenCode |
|
|
183
183
|
| CC-Connect | `chattool cc` | cc-connect 快速配置与启动 |
|
|
184
184
|
| CRS 查询 | `chattool crs` | 查询 Claude Relay Service API key 用量、模型统计和只读 admin 信息 |
|
|
@@ -194,6 +194,10 @@ def workspace_setup(
|
|
|
194
194
|
dry_run,
|
|
195
195
|
with_chattool,
|
|
196
196
|
chattool_source,
|
|
197
|
+
with_chatblog,
|
|
198
|
+
chatblog_source,
|
|
199
|
+
with_memory,
|
|
200
|
+
memory_source,
|
|
197
201
|
):
|
|
198
202
|
setup_workspace(
|
|
199
203
|
profile_name=profile,
|
|
@@ -204,6 +208,10 @@ def workspace_setup(
|
|
|
204
208
|
dry_run=dry_run,
|
|
205
209
|
with_chattool=with_chattool,
|
|
206
210
|
chattool_source=chattool_source,
|
|
211
|
+
with_chatblog=with_chatblog,
|
|
212
|
+
chatblog_source=chatblog_source,
|
|
213
|
+
with_memory=with_memory,
|
|
214
|
+
memory_source=memory_source,
|
|
207
215
|
)
|
|
208
216
|
|
|
209
217
|
|
|
@@ -678,7 +686,7 @@ SETUP_COMMAND_ELEMENTS = (
|
|
|
678
686
|
param_decls=("--with-chattool/--no-chattool",),
|
|
679
687
|
kwargs={
|
|
680
688
|
"default": False,
|
|
681
|
-
"help": "Optionally clone/update ChatTool
|
|
689
|
+
"help": "Optionally clone/update ChatTool into core/ChatTool and sync its skills into workspace skills/.",
|
|
682
690
|
},
|
|
683
691
|
),
|
|
684
692
|
SetupOptionElement(
|
|
@@ -688,6 +696,34 @@ SETUP_COMMAND_ELEMENTS = (
|
|
|
688
696
|
"help": "Git URL or local ChatTool repo path used when --with-chattool is enabled.",
|
|
689
697
|
},
|
|
690
698
|
),
|
|
699
|
+
SetupOptionElement(
|
|
700
|
+
param_decls=("--with-chatblog/--no-chatblog",),
|
|
701
|
+
kwargs={
|
|
702
|
+
"default": False,
|
|
703
|
+
"help": "Optionally clone/update ChatBlog and link its posts into public/chatblog.",
|
|
704
|
+
},
|
|
705
|
+
),
|
|
706
|
+
SetupOptionElement(
|
|
707
|
+
param_decls=("--chatblog-source",),
|
|
708
|
+
kwargs={
|
|
709
|
+
"default": None,
|
|
710
|
+
"help": "Git URL or local ChatBlog repo path used when --with-chatblog is enabled.",
|
|
711
|
+
},
|
|
712
|
+
),
|
|
713
|
+
SetupOptionElement(
|
|
714
|
+
param_decls=("--with-memory/--no-memory",),
|
|
715
|
+
kwargs={
|
|
716
|
+
"default": False,
|
|
717
|
+
"help": "Optionally clone/update ChatMemory, link shared groups chatarch/common/agents, and create local skills.",
|
|
718
|
+
},
|
|
719
|
+
),
|
|
720
|
+
SetupOptionElement(
|
|
721
|
+
param_decls=("--memory-source",),
|
|
722
|
+
kwargs={
|
|
723
|
+
"default": None,
|
|
724
|
+
"help": "Git URL or local ChatMemory repo path used when --with-memory is enabled.",
|
|
725
|
+
},
|
|
726
|
+
),
|
|
691
727
|
),
|
|
692
728
|
),
|
|
693
729
|
)
|
|
@@ -102,6 +102,10 @@ def setup_workspace(
|
|
|
102
102
|
dry_run=False,
|
|
103
103
|
with_chattool=False,
|
|
104
104
|
chattool_source=None,
|
|
105
|
+
with_chatblog=False,
|
|
106
|
+
chatblog_source=None,
|
|
107
|
+
with_memory=False,
|
|
108
|
+
memory_source=None,
|
|
105
109
|
):
|
|
106
110
|
profile_name, workspace_dir = coerce_profile_and_workspace(
|
|
107
111
|
profile_name, workspace_dir
|
|
@@ -112,6 +116,8 @@ def setup_workspace(
|
|
|
112
116
|
usage = (
|
|
113
117
|
"Usage: chattool setup workspace [PROFILE] [WORKSPACE_DIR] "
|
|
114
118
|
"[--language zh|en] [--with-chattool] [--chattool-source <path-or-url>] "
|
|
119
|
+
"[--with-chatblog] [--chatblog-source <path-or-url>] "
|
|
120
|
+
"[--with-memory] [--memory-source <path-or-url>] "
|
|
115
121
|
"[--force] [--dry-run] [-i|-I]"
|
|
116
122
|
)
|
|
117
123
|
interactive, can_prompt, force_interactive, _, need_prompt = (
|
|
@@ -128,7 +134,14 @@ def setup_workspace(
|
|
|
128
134
|
"enabled": bool(with_chattool),
|
|
129
135
|
"source": chattool_source or workspace_options.CHATTOOL_REPO_URL,
|
|
130
136
|
},
|
|
131
|
-
"
|
|
137
|
+
"chatblog": {
|
|
138
|
+
"enabled": bool(with_chatblog),
|
|
139
|
+
"source": chatblog_source or workspace_options.CHATBLOG_REPO_URL,
|
|
140
|
+
},
|
|
141
|
+
"memory": {
|
|
142
|
+
"enabled": bool(with_memory),
|
|
143
|
+
"source": memory_source or workspace_options.CHATMEMORY_REPO_URL,
|
|
144
|
+
},
|
|
132
145
|
}
|
|
133
146
|
|
|
134
147
|
if need_prompt:
|
|
@@ -178,11 +191,20 @@ def setup_workspace(
|
|
|
178
191
|
can_prompt,
|
|
179
192
|
)
|
|
180
193
|
)
|
|
181
|
-
if option_settings["
|
|
194
|
+
if option_settings["chatblog"]["enabled"]:
|
|
195
|
+
applied.append(
|
|
196
|
+
workspace_options.apply_chatblog_option(
|
|
197
|
+
workspace_path,
|
|
198
|
+
option_settings["chatblog"]["source"],
|
|
199
|
+
interactive,
|
|
200
|
+
can_prompt,
|
|
201
|
+
)
|
|
202
|
+
)
|
|
203
|
+
if option_settings["memory"]["enabled"]:
|
|
182
204
|
applied.append(
|
|
183
|
-
workspace_options.
|
|
205
|
+
workspace_options.apply_memory_option(
|
|
184
206
|
workspace_path,
|
|
185
|
-
option_settings["
|
|
207
|
+
option_settings["memory"]["source"],
|
|
186
208
|
interactive,
|
|
187
209
|
can_prompt,
|
|
188
210
|
)
|
|
@@ -203,7 +225,21 @@ def setup_workspace(
|
|
|
203
225
|
click.echo(f"Repo action: {item['repo_action']}")
|
|
204
226
|
click.echo(f"Skills: {workspace_path / 'skills'}")
|
|
205
227
|
click.echo(f"Copied skills: {len(item['copied_skills'])}")
|
|
206
|
-
if item["name"] == "
|
|
207
|
-
click.echo(f"
|
|
228
|
+
if item["name"] == "chatblog":
|
|
229
|
+
click.echo(f"ChatBlog repo: {item['repo_dir']}")
|
|
208
230
|
click.echo(f"Repo action: {item['repo_action']}")
|
|
209
231
|
click.echo(f"Public link: {item['public_link']}")
|
|
232
|
+
if item["name"] == "memory":
|
|
233
|
+
click.echo(f"ChatMemory repo: {item['repo_dir']}")
|
|
234
|
+
click.echo(f"Repo action: {item['repo_action']}")
|
|
235
|
+
click.echo(
|
|
236
|
+
"Linked memory skill groups: "
|
|
237
|
+
f"{', '.join(item['linked_groups']) if item['linked_groups'] else 'none'}"
|
|
238
|
+
)
|
|
239
|
+
if item.get("local_group"):
|
|
240
|
+
click.echo(f"Local skill group: {item['local_group']}")
|
|
241
|
+
if item["skipped_groups"]:
|
|
242
|
+
click.echo(
|
|
243
|
+
"Skipped missing memory skill groups: "
|
|
244
|
+
f"{', '.join(item['skipped_groups'])}"
|
|
245
|
+
)
|
|
@@ -15,7 +15,15 @@ from chattool.interaction import (
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
CHATTOOL_REPO_URL = "https://github.com/cubenlp/ChatTool.git"
|
|
18
|
-
|
|
18
|
+
CHATBLOG_REPO_URL = "https://github.com/ChatArch/ChatBlog.git"
|
|
19
|
+
CHATMEMORY_REPO_URL = "https://github.com/ChatArch/ChatMemory.git"
|
|
20
|
+
DEFAULT_MEMORY_SKILL_GROUPS = ("chatarch", "common", "agents")
|
|
21
|
+
LOCAL_SKILL_GROUP_README = """# Local Skills
|
|
22
|
+
|
|
23
|
+
Use this directory for machine-specific, workspace-specific, or private skills that should not be shared through ChatMemory.
|
|
24
|
+
|
|
25
|
+
Shared skills should live in one of the linked ChatMemory groups: `chatarch`, `common`, or `agents`.
|
|
26
|
+
"""
|
|
19
27
|
|
|
20
28
|
|
|
21
29
|
def _run_git(
|
|
@@ -106,46 +114,100 @@ def apply_chattool_option(
|
|
|
106
114
|
|
|
107
115
|
def _ensure_symlink(source: Path, target: Path) -> None:
|
|
108
116
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
109
|
-
if target.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
117
|
+
if target.is_symlink():
|
|
118
|
+
target.unlink()
|
|
119
|
+
elif target.exists():
|
|
120
|
+
raise click.ClickException(
|
|
121
|
+
f"Refusing to replace existing non-symlink path: {target}"
|
|
122
|
+
)
|
|
114
123
|
target.symlink_to(source)
|
|
115
124
|
|
|
116
125
|
|
|
117
|
-
def
|
|
126
|
+
def _ensure_local_skill_group(workspace_dir: Path) -> Path:
|
|
127
|
+
local_dir = workspace_dir / "skills" / "local"
|
|
128
|
+
if local_dir.is_symlink():
|
|
129
|
+
raise click.ClickException(
|
|
130
|
+
f"Refusing to use symlink for local-only skill group: {local_dir}"
|
|
131
|
+
)
|
|
132
|
+
local_dir.mkdir(parents=True, exist_ok=True)
|
|
133
|
+
readme = local_dir / "README.md"
|
|
134
|
+
if not readme.exists():
|
|
135
|
+
readme.write_text(LOCAL_SKILL_GROUP_README, encoding="utf-8")
|
|
136
|
+
return local_dir
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def apply_chatblog_option(
|
|
118
140
|
workspace_dir: Path,
|
|
119
141
|
source: str,
|
|
120
142
|
interactive,
|
|
121
143
|
can_prompt: bool,
|
|
122
144
|
) -> dict:
|
|
123
|
-
repo_dir = workspace_dir / "core" / "
|
|
145
|
+
repo_dir = workspace_dir / "core" / "ChatBlog"
|
|
124
146
|
repo_action = _clone_or_update_repo(source, repo_dir, interactive, can_prompt)
|
|
125
147
|
posts_dir = repo_dir / "source" / "_posts"
|
|
126
148
|
if not posts_dir.exists():
|
|
127
149
|
raise click.ClickException(
|
|
128
|
-
f"
|
|
150
|
+
f"ChatBlog repo does not contain source/_posts: {posts_dir}"
|
|
129
151
|
)
|
|
130
|
-
public_link = workspace_dir / "public" / "
|
|
152
|
+
public_link = workspace_dir / "public" / "chatblog"
|
|
131
153
|
_ensure_symlink(posts_dir, public_link)
|
|
132
154
|
return {
|
|
133
|
-
"name": "
|
|
155
|
+
"name": "chatblog",
|
|
134
156
|
"repo_dir": repo_dir,
|
|
135
157
|
"repo_action": repo_action,
|
|
136
158
|
"public_link": public_link,
|
|
137
159
|
}
|
|
138
160
|
|
|
139
161
|
|
|
162
|
+
def apply_memory_option(
|
|
163
|
+
workspace_dir: Path,
|
|
164
|
+
source: str,
|
|
165
|
+
interactive,
|
|
166
|
+
can_prompt: bool,
|
|
167
|
+
) -> dict:
|
|
168
|
+
repo_dir = workspace_dir / "core" / "ChatMemory"
|
|
169
|
+
repo_action = _clone_or_update_repo(source, repo_dir, interactive, can_prompt)
|
|
170
|
+
skills_root = repo_dir / "Skills"
|
|
171
|
+
if not skills_root.exists():
|
|
172
|
+
raise click.ClickException(
|
|
173
|
+
f"ChatMemory repo does not contain Skills/: {skills_root}"
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
linked_groups: list[str] = []
|
|
177
|
+
skipped_groups: list[str] = []
|
|
178
|
+
for group in DEFAULT_MEMORY_SKILL_GROUPS:
|
|
179
|
+
group_source = skills_root / group
|
|
180
|
+
if not group_source.exists():
|
|
181
|
+
skipped_groups.append(group)
|
|
182
|
+
continue
|
|
183
|
+
_ensure_symlink(group_source, workspace_dir / "skills" / group)
|
|
184
|
+
linked_groups.append(group)
|
|
185
|
+
|
|
186
|
+
local_group = _ensure_local_skill_group(workspace_dir)
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
"name": "memory",
|
|
190
|
+
"repo_dir": repo_dir,
|
|
191
|
+
"repo_action": repo_action,
|
|
192
|
+
"linked_groups": linked_groups,
|
|
193
|
+
"skipped_groups": skipped_groups,
|
|
194
|
+
"local_group": local_group,
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
|
|
140
198
|
def prompt_optional_modules(language: str) -> dict[str, dict]:
|
|
141
199
|
results = {
|
|
142
200
|
"chattool": {
|
|
143
201
|
"enabled": False,
|
|
144
202
|
"source": CHATTOOL_REPO_URL,
|
|
145
203
|
},
|
|
146
|
-
"
|
|
204
|
+
"chatblog": {
|
|
205
|
+
"enabled": False,
|
|
206
|
+
"source": CHATBLOG_REPO_URL,
|
|
207
|
+
},
|
|
208
|
+
"memory": {
|
|
147
209
|
"enabled": False,
|
|
148
|
-
"source":
|
|
210
|
+
"source": CHATMEMORY_REPO_URL,
|
|
149
211
|
},
|
|
150
212
|
}
|
|
151
213
|
|
|
@@ -166,7 +228,8 @@ def prompt_optional_modules(language: str) -> dict[str, dict]:
|
|
|
166
228
|
else "选择额外的 workspace 模块",
|
|
167
229
|
choices=[
|
|
168
230
|
create_choice("ChatTool -> core/ChatTool + ./skills", "chattool"),
|
|
169
|
-
create_choice("
|
|
231
|
+
create_choice("ChatBlog -> core/ChatBlog + public/chatblog", "chatblog"),
|
|
232
|
+
create_choice("ChatMemory -> core/ChatMemory + skills/chatarch, skills/common, skills/agents + local", "memory"),
|
|
170
233
|
],
|
|
171
234
|
default_values=[],
|
|
172
235
|
instruction="",
|
|
@@ -159,8 +159,8 @@ def base_file_map(
|
|
|
159
159
|
"public/README.md": render_public_readme(language),
|
|
160
160
|
}
|
|
161
161
|
skill_md, skill_zh = render_workspace_maintenance_skill()
|
|
162
|
-
file_map["skills/workspace-maintenance/SKILL.md"] = skill_md
|
|
163
|
-
file_map["skills/workspace-maintenance/SKILL.zh.md"] = skill_zh
|
|
162
|
+
file_map["skills/local/workspace-maintenance/SKILL.md"] = skill_md
|
|
163
|
+
file_map["skills/local/workspace-maintenance/SKILL.zh.md"] = skill_zh
|
|
164
164
|
agents_content = render_agents_md(workspace_dir, profile, language, enabled_options)
|
|
165
165
|
if helper_agents_path:
|
|
166
166
|
file_map[helper_agents_path] = agents_content
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chattool
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.5
|
|
4
4
|
Summary: Toolkit for Chat API
|
|
5
5
|
Author-email: Rex Wang <1073853456@qq.com>
|
|
6
6
|
License: MIT license
|
|
@@ -268,7 +268,7 @@ chattool serve local . --html index.html --dry-run
|
|
|
268
268
|
| PyPI 工具 | `chattool pypi` | 创建、构建、校验、上传与探测 Python 包 |
|
|
269
269
|
| MCP 服务 | `chattool mcp start` | 标准 MCP Server,供 Claude/Cursor 调用 |
|
|
270
270
|
| 环境安装 | `chattool setup zsh/codex/claude/opencode/hermes/lark-cli/docker` | 配置 zsh,安装或检查常用 Agent CLI / WebUI / Docker 环境,并在确认后执行建议的系统命令;`setup hermes` 封装 Hermes 官方 installer,WebUI 需显式启用;`setup opencode/codex/claude/hermes` 支持 `--install-only` 纯安装/升级,`setup opencode` 也支持 `--plugin auto-loop` 追加写入 `opencode-auto-loop` |
|
|
271
|
-
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-
|
|
271
|
+
| Workspace | `chattool setup workspace` | 初始化围绕核心项目的人类-AI 协作工作区骨架;当前默认使用 `projects/` 作为实际工作的执行容器,workspace 根目录则保留 general-use 协议与上下文;可选 `--with-chattool`、`--with-chatblog` 分别挂载 ChatTool 和 ChatBlog |
|
|
272
272
|
| Skills | `chattool skill install` | 安装 ChatTool skills 到 Codex / Claude / OpenCode |
|
|
273
273
|
| CC-Connect | `chattool cc` | cc-connect 快速配置与启动 |
|
|
274
274
|
| CRS 查询 | `chattool crs` | 查询 Claude Relay Service API key 用量、模型统计和只读 admin 信息 |
|
|
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.4 → chattool-7.0.5}/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
|
{chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/en/AGENTS.md
RENAMED
|
File without changes
|
|
File without changes
|
{chattool-7.0.4 → chattool-7.0.5}/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
|