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.
Files changed (193) hide show
  1. {chattool-7.0.4/src/chattool.egg-info → chattool-7.0.5}/PKG-INFO +2 -2
  2. {chattool-7.0.4 → chattool-7.0.5}/README.md +1 -1
  3. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/__init__.py +1 -1
  4. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/elements.py +37 -1
  5. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/cli.py +42 -6
  6. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/options.py +77 -14
  7. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/render.py +2 -2
  8. {chattool-7.0.4 → chattool-7.0.5/src/chattool.egg-info}/PKG-INFO +2 -2
  9. {chattool-7.0.4 → chattool-7.0.5}/LICENSE +0 -0
  10. {chattool-7.0.4 → chattool-7.0.5}/MANIFEST.in +0 -0
  11. {chattool-7.0.4 → chattool-7.0.5}/pyproject.toml +0 -0
  12. {chattool-7.0.4 → chattool-7.0.5}/scripts/migrate_chattool_envs_to_chatarch.py +0 -0
  13. {chattool-7.0.4 → chattool-7.0.5}/setup.cfg +0 -0
  14. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/_all.py +0 -0
  15. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/__init__.py +0 -0
  16. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/cert_client.py +0 -0
  17. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/main.py +0 -0
  18. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/client/svg2gif_client.py +0 -0
  19. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/__init__.py +0 -0
  20. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/aliyun.py +0 -0
  21. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/azure.py +0 -0
  22. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/base.py +0 -0
  23. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/browser.py +0 -0
  24. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/crs.py +0 -0
  25. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/elements.py +0 -0
  26. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/feishu.py +0 -0
  27. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/huggingface.py +0 -0
  28. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/liblib.py +0 -0
  29. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/openai.py +0 -0
  30. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/pollinations.py +0 -0
  31. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/siliconflow.py +0 -0
  32. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/skills.py +0 -0
  33. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tencent.py +0 -0
  34. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tongyi.py +0 -0
  35. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/tplink.py +0 -0
  36. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/config/zulip.py +0 -0
  37. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/const.py +0 -0
  38. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/__init__.py +0 -0
  39. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/cli.py +0 -0
  40. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/elements.py +0 -0
  41. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/docker/main.py +0 -0
  42. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/__init__.py +0 -0
  43. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/__init__.py +0 -0
  44. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/cli.py +0 -0
  45. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/client.py +0 -0
  46. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/daily.py +0 -0
  47. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/harvest.py +0 -0
  48. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/models.py +0 -0
  49. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/presets.py +0 -0
  50. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/arxiv/query.py +0 -0
  51. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/cli.py +0 -0
  52. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/__init__.py +0 -0
  53. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/client.py +0 -0
  54. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/explore/wordpress/models.py +0 -0
  55. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/__init__.py +0 -0
  56. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/command_schema.py +0 -0
  57. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/policy.py +0 -0
  58. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/interaction/warnings.py +0 -0
  59. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/__init__.py +0 -0
  60. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/chattype.py +0 -0
  61. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/llm/response.py +0 -0
  62. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/__init__.py +0 -0
  63. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/catalog.py +0 -0
  64. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/cli.py +0 -0
  65. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/mcp/server.py +0 -0
  66. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/__init__.py +0 -0
  67. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/capture.py +0 -0
  68. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/cert_server.py +0 -0
  69. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/cli.py +0 -0
  70. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/lark_serve.py +0 -0
  71. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/local.py +0 -0
  72. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/oauth.py +0 -0
  73. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/serve/svg2gif.py +0 -0
  74. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/__init__.py +0 -0
  75. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/alias.py +0 -0
  76. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/hermes/install.sh +0 -0
  77. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/nvm.sh +0 -0
  78. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/README.md +0 -0
  79. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-help.md +0 -0
  80. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-project.md +0 -0
  81. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-status.md +0 -0
  82. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop-stop.md +0 -0
  83. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/commands/chatloop.md +0 -0
  84. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/index.ts +0 -0
  85. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/assets/opencode_chatloop/plugins/chatloop/package.json +0 -0
  86. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/cc_connect.py +0 -0
  87. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/chrome.py +0 -0
  88. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/claude.py +0 -0
  89. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/cli.py +0 -0
  90. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/codex.py +0 -0
  91. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/docker.py +0 -0
  92. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/frp.py +0 -0
  93. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/hermes.py +0 -0
  94. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/lark_cli.py +0 -0
  95. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/mode_prompt.py +0 -0
  96. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/nodejs.py +0 -0
  97. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/opencode.py +0 -0
  98. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/opencode_chatloop.py +0 -0
  99. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/__init__.py +0 -0
  100. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/core.py +0 -0
  101. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/en/AGENTS.md +0 -0
  102. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/en/projects/README.md +0 -0
  103. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/zh/AGENTS.md +0 -0
  104. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace/templates/default/zh/projects/README.md +0 -0
  105. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/workspace.py +0 -0
  106. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/setup/zsh.py +0 -0
  107. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/__init__.py +0 -0
  108. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/cli.py +0 -0
  109. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/interaction.py +0 -0
  110. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/platforms.py +0 -0
  111. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/skill/validation.py +0 -0
  112. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/__init__.py +0 -0
  113. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/__init__.py +0 -0
  114. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/base.py +0 -0
  115. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/cli.py +0 -0
  116. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/playwright_impl.py +0 -0
  117. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/selenium.py +0 -0
  118. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_browser.py +0 -0
  119. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_module.py +0 -0
  120. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/test_remote.py +0 -0
  121. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/browser/xhs_qrcode.py +0 -0
  122. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cc/__init__.py +0 -0
  123. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cc/cli.py +0 -0
  124. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/__init__.py +0 -0
  125. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/acme_dns_tiny.py +0 -0
  126. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cert_server.py +0 -0
  127. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cert_updater.py +0 -0
  128. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/cli.py +0 -0
  129. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/cert/email.py +0 -0
  130. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/__init__.py +0 -0
  131. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/api.py +0 -0
  132. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/cli.py +0 -0
  133. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/crs/openai_oauth.py +0 -0
  134. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/__init__.py +0 -0
  135. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/aliyun.py +0 -0
  136. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/base.py +0 -0
  137. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/cli.py +0 -0
  138. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/domain_utils.py +0 -0
  139. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/ip_updater.py +0 -0
  140. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/mcp.py +0 -0
  141. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/tencent.py +0 -0
  142. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/dns/utils.py +0 -0
  143. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/__init__.py +0 -0
  144. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/base.py +0 -0
  145. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/cli.py +0 -0
  146. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/codex.py +0 -0
  147. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/helpers.py +0 -0
  148. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/huggingface.py +0 -0
  149. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/liblib.py +0 -0
  150. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/pollinations.py +0 -0
  151. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/siliconflow.py +0 -0
  152. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/image/tongyi.py +0 -0
  153. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/interact.py +0 -0
  154. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/__init__.py +0 -0
  155. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/bot.py +0 -0
  156. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/cli.py +0 -0
  157. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/context.py +0 -0
  158. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/docx_blocks.py +0 -0
  159. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/elements.py +0 -0
  160. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/markdown_blocks.py +0 -0
  161. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/lark/session.py +0 -0
  162. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/__init__.py +0 -0
  163. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/cli.py +0 -0
  164. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/link_check.py +0 -0
  165. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/mcp.py +0 -0
  166. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/scanner.py +0 -0
  167. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/network/service_urls.py +0 -0
  168. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/__init__.py +0 -0
  169. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/cli.py +0 -0
  170. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/nginx/templates.py +0 -0
  171. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/__init__.py +0 -0
  172. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/cli.py +0 -0
  173. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/pypi/main.py +0 -0
  174. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/tplogin.py +0 -0
  175. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/tplogin_cli.py +0 -0
  176. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/__init__.py +0 -0
  177. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/cli.py +0 -0
  178. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/client.py +0 -0
  179. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/legacy.py +0 -0
  180. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/tools/zulip/mcp.py +0 -0
  181. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/__init__.py +0 -0
  182. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/basic.py +0 -0
  183. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/custom_logger.py +0 -0
  184. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/fastobj.py +0 -0
  185. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/httpclient.py +0 -0
  186. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/pathing.py +0 -0
  187. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/test_helpers.py +0 -0
  188. {chattool-7.0.4 → chattool-7.0.5}/src/chattool/utils/urltool.py +0 -0
  189. {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/SOURCES.txt +0 -0
  190. {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/dependency_links.txt +0 -0
  191. {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/entry_points.txt +0 -0
  192. {chattool-7.0.4 → chattool-7.0.5}/src/chattool.egg-info/requires.txt +0 -0
  193. {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.4
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-opencode-loop` 启用 OpenCode loop-aware 模板并安装本地 `chatloop` 资产 |
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-opencode-loop` 启用 OpenCode loop-aware 模板并安装本地 `chatloop` 资产 |
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 信息 |
@@ -4,7 +4,7 @@ import importlib
4
4
 
5
5
  __author__ = """Rex Wang"""
6
6
  __email__ = "1073853456@qq.com"
7
- __version__ = "7.0.4"
7
+ __version__ = "7.0.5"
8
8
 
9
9
  from dotenv import load_dotenv
10
10
 
@@ -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 in the workspace root and sync its skills into docs/skills/.",
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
- "rexblog": {"enabled": False, "source": workspace_options.REXBLOG_REPO_URL},
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["rexblog"]["enabled"]:
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.apply_rexblog_option(
205
+ workspace_options.apply_memory_option(
184
206
  workspace_path,
185
- option_settings["rexblog"]["source"],
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"] == "rexblog":
207
- click.echo(f"RexBlog repo: {item['repo_dir']}")
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
- REXBLOG_REPO_URL = "https://github.com/RexWzh/RexBlog"
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.exists() or target.is_symlink():
110
- if target.is_symlink() or target.is_file():
111
- target.unlink()
112
- else:
113
- shutil.rmtree(target)
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 apply_rexblog_option(
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" / "RexBlog"
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"RexBlog repo does not contain source/_posts: {posts_dir}"
150
+ f"ChatBlog repo does not contain source/_posts: {posts_dir}"
129
151
  )
130
- public_link = workspace_dir / "public" / "hexo_blog"
152
+ public_link = workspace_dir / "public" / "chatblog"
131
153
  _ensure_symlink(posts_dir, public_link)
132
154
  return {
133
- "name": "rexblog",
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
- "rexblog": {
204
+ "chatblog": {
205
+ "enabled": False,
206
+ "source": CHATBLOG_REPO_URL,
207
+ },
208
+ "memory": {
147
209
  "enabled": False,
148
- "source": REXBLOG_REPO_URL,
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("RexBlog -> core/RexBlog + public/hexo_blog", "rexblog"),
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.4
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-opencode-loop` 启用 OpenCode loop-aware 模板并安装本地 `chatloop` 资产 |
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