mosscode 0.1.0__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.
- mosscode-0.1.0/CHANGELOG.md +29 -0
- mosscode-0.1.0/LICENSE +21 -0
- mosscode-0.1.0/MANIFEST.in +3 -0
- mosscode-0.1.0/PKG-INFO +92 -0
- mosscode-0.1.0/README.md +225 -0
- mosscode-0.1.0/docs/pypi.md +52 -0
- mosscode-0.1.0/pyproject.toml +72 -0
- mosscode-0.1.0/setup.cfg +4 -0
- mosscode-0.1.0/src/mosscode/__init__.py +10 -0
- mosscode-0.1.0/src/mosscode/__main__.py +3 -0
- mosscode-0.1.0/src/mosscode/agent.py +486 -0
- mosscode-0.1.0/src/mosscode/agents/__init__.py +249 -0
- mosscode-0.1.0/src/mosscode/agents/builtin/explore.md +16 -0
- mosscode-0.1.0/src/mosscode/agents/builtin/general.md +12 -0
- mosscode-0.1.0/src/mosscode/agents/builtin/plan.md +16 -0
- mosscode-0.1.0/src/mosscode/agents/runtime.py +685 -0
- mosscode-0.1.0/src/mosscode/agents/tasks.py +193 -0
- mosscode-0.1.0/src/mosscode/appearance.py +184 -0
- mosscode-0.1.0/src/mosscode/builtin_commands.py +1363 -0
- mosscode-0.1.0/src/mosscode/cli.py +547 -0
- mosscode-0.1.0/src/mosscode/commands.py +254 -0
- mosscode-0.1.0/src/mosscode/compaction.py +259 -0
- mosscode-0.1.0/src/mosscode/config.py +337 -0
- mosscode-0.1.0/src/mosscode/context.py +102 -0
- mosscode-0.1.0/src/mosscode/conversation.py +1046 -0
- mosscode-0.1.0/src/mosscode/coordinator.py +54 -0
- mosscode-0.1.0/src/mosscode/doctor.py +303 -0
- mosscode-0.1.0/src/mosscode/hooks/__init__.py +22 -0
- mosscode-0.1.0/src/mosscode/hooks/actions.py +151 -0
- mosscode-0.1.0/src/mosscode/hooks/conditions.py +170 -0
- mosscode-0.1.0/src/mosscode/hooks/config.py +404 -0
- mosscode-0.1.0/src/mosscode/hooks/engine.py +401 -0
- mosscode-0.1.0/src/mosscode/hooks/events.py +48 -0
- mosscode-0.1.0/src/mosscode/launcher.py +177 -0
- mosscode-0.1.0/src/mosscode/mcp_client.py +460 -0
- mosscode-0.1.0/src/mosscode/mcp_config.py +216 -0
- mosscode-0.1.0/src/mosscode/member_ui.py +289 -0
- mosscode-0.1.0/src/mosscode/memory.py +291 -0
- mosscode-0.1.0/src/mosscode/memory_extract.py +245 -0
- mosscode-0.1.0/src/mosscode/messages.py +216 -0
- mosscode-0.1.0/src/mosscode/paths.py +31 -0
- mosscode-0.1.0/src/mosscode/permissions.py +733 -0
- mosscode-0.1.0/src/mosscode/prompts.py +483 -0
- mosscode-0.1.0/src/mosscode/providers.py +587 -0
- mosscode-0.1.0/src/mosscode/scrollback.py +106 -0
- mosscode-0.1.0/src/mosscode/security.py +282 -0
- mosscode-0.1.0/src/mosscode/serialization.py +121 -0
- mosscode-0.1.0/src/mosscode/session.py +563 -0
- mosscode-0.1.0/src/mosscode/setup.py +248 -0
- mosscode-0.1.0/src/mosscode/skills/__init__.py +455 -0
- mosscode-0.1.0/src/mosscode/skills/builtin/commit/SKILL.md +15 -0
- mosscode-0.1.0/src/mosscode/skills/builtin/review/SKILL.md +15 -0
- mosscode-0.1.0/src/mosscode/skills/builtin/test/SKILL.md +13 -0
- mosscode-0.1.0/src/mosscode/skills/builtin/test/scripts/detect.py +96 -0
- mosscode-0.1.0/src/mosscode/skills/builtin/test/tool.json +9 -0
- mosscode-0.1.0/src/mosscode/teams/__init__.py +216 -0
- mosscode-0.1.0/src/mosscode/teams/backends.py +259 -0
- mosscode-0.1.0/src/mosscode/teams/board.py +230 -0
- mosscode-0.1.0/src/mosscode/teams/lock.py +173 -0
- mosscode-0.1.0/src/mosscode/teams/mailbox.py +172 -0
- mosscode-0.1.0/src/mosscode/teams/member.py +427 -0
- mosscode-0.1.0/src/mosscode/teams/merge.py +207 -0
- mosscode-0.1.0/src/mosscode/teams/pane.py +20 -0
- mosscode-0.1.0/src/mosscode/teams/pane_app.py +167 -0
- mosscode-0.1.0/src/mosscode/teams/process.py +371 -0
- mosscode-0.1.0/src/mosscode/teams/runtime.py +1355 -0
- mosscode-0.1.0/src/mosscode/teams/view.py +182 -0
- mosscode-0.1.0/src/mosscode/tool_budget.py +86 -0
- mosscode-0.1.0/src/mosscode/tools/__init__.py +38 -0
- mosscode-0.1.0/src/mosscode/tools/agent.py +127 -0
- mosscode-0.1.0/src/mosscode/tools/base.py +384 -0
- mosscode-0.1.0/src/mosscode/tools/diffing.py +16 -0
- mosscode-0.1.0/src/mosscode/tools/execution.py +99 -0
- mosscode-0.1.0/src/mosscode/tools/files.py +287 -0
- mosscode-0.1.0/src/mosscode/tools/memory.py +65 -0
- mosscode-0.1.0/src/mosscode/tools/plan.py +30 -0
- mosscode-0.1.0/src/mosscode/tools/process.py +216 -0
- mosscode-0.1.0/src/mosscode/tools/search.py +229 -0
- mosscode-0.1.0/src/mosscode/tools/search_worker.py +243 -0
- mosscode-0.1.0/src/mosscode/tools/shell.py +121 -0
- mosscode-0.1.0/src/mosscode/tools/skill.py +118 -0
- mosscode-0.1.0/src/mosscode/tools/team.py +447 -0
- mosscode-0.1.0/src/mosscode/tools/windows_job.py +75 -0
- mosscode-0.1.0/src/mosscode/tui.py +2325 -0
- mosscode-0.1.0/src/mosscode/usage.py +68 -0
- mosscode-0.1.0/src/mosscode/windows_inline.py +148 -0
- mosscode-0.1.0/src/mosscode/worktree/__init__.py +29 -0
- mosscode-0.1.0/src/mosscode/worktree/changes.py +59 -0
- mosscode-0.1.0/src/mosscode/worktree/git.py +125 -0
- mosscode-0.1.0/src/mosscode/worktree/manager.py +462 -0
- mosscode-0.1.0/src/mosscode/worktree/meta.py +82 -0
- mosscode-0.1.0/src/mosscode/worktree/names.py +52 -0
- mosscode-0.1.0/src/mosscode/worktree/setup.py +119 -0
- mosscode-0.1.0/src/mosscode.egg-info/PKG-INFO +92 -0
- mosscode-0.1.0/src/mosscode.egg-info/SOURCES.txt +141 -0
- mosscode-0.1.0/src/mosscode.egg-info/dependency_links.txt +1 -0
- mosscode-0.1.0/src/mosscode.egg-info/entry_points.txt +3 -0
- mosscode-0.1.0/src/mosscode.egg-info/requires.txt +14 -0
- mosscode-0.1.0/src/mosscode.egg-info/top_level.txt +1 -0
- mosscode-0.1.0/tests/conftest.py +19 -0
- mosscode-0.1.0/tests/fixtures/mcp_stdio_server.py +88 -0
- mosscode-0.1.0/tests/test_agent.py +414 -0
- mosscode-0.1.0/tests/test_agent_tui.py +234 -0
- mosscode-0.1.0/tests/test_cli.py +116 -0
- mosscode-0.1.0/tests/test_cli_product.py +353 -0
- mosscode-0.1.0/tests/test_commands.py +452 -0
- mosscode-0.1.0/tests/test_config.py +130 -0
- mosscode-0.1.0/tests/test_context.py +762 -0
- mosscode-0.1.0/tests/test_conversation.py +86 -0
- mosscode-0.1.0/tests/test_docs.py +34 -0
- mosscode-0.1.0/tests/test_hooks.py +1260 -0
- mosscode-0.1.0/tests/test_instructions.py +207 -0
- mosscode-0.1.0/tests/test_interaction.py +534 -0
- mosscode-0.1.0/tests/test_mcp.py +510 -0
- mosscode-0.1.0/tests/test_mcp_manager.py +309 -0
- mosscode-0.1.0/tests/test_memory.py +684 -0
- mosscode-0.1.0/tests/test_model_side.py +318 -0
- mosscode-0.1.0/tests/test_permission_modes.py +221 -0
- mosscode-0.1.0/tests/test_permission_rules.py +317 -0
- mosscode-0.1.0/tests/test_permission_tui.py +130 -0
- mosscode-0.1.0/tests/test_permissions.py +466 -0
- mosscode-0.1.0/tests/test_plan_commands.py +226 -0
- mosscode-0.1.0/tests/test_prompt_cache.py +145 -0
- mosscode-0.1.0/tests/test_prompt_size.py +61 -0
- mosscode-0.1.0/tests/test_prompts.py +149 -0
- mosscode-0.1.0/tests/test_providers.py +357 -0
- mosscode-0.1.0/tests/test_scrollback.py +286 -0
- mosscode-0.1.0/tests/test_sessions.py +639 -0
- mosscode-0.1.0/tests/test_skills.py +1315 -0
- mosscode-0.1.0/tests/test_subagents.py +1011 -0
- mosscode-0.1.0/tests/test_team_backends.py +658 -0
- mosscode-0.1.0/tests/test_team_views.py +511 -0
- mosscode-0.1.0/tests/test_teams.py +1439 -0
- mosscode-0.1.0/tests/test_tool_contracts.py +354 -0
- mosscode-0.1.0/tests/test_tool_conversation.py +155 -0
- mosscode-0.1.0/tests/test_tool_providers.py +254 -0
- mosscode-0.1.0/tests/test_tool_tui.py +115 -0
- mosscode-0.1.0/tests/test_tools.py +207 -0
- mosscode-0.1.0/tests/test_tui.py +649 -0
- mosscode-0.1.0/tests/test_windows_inline.py +53 -0
- mosscode-0.1.0/tests/test_windows_input.py +66 -0
- mosscode-0.1.0/tests/test_worktree.py +840 -0
- mosscode-0.1.0/tests/waiting.py +17 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 更新日志
|
|
2
|
+
|
|
3
|
+
这里记录每个版本的用户可见变化。格式参照 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循[语义化版本](https://semver.org/lang/zh-CN/);1.0 之前,次版本号的变化可能包含不兼容的改动,会在条目中注明。
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [0.1.0] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
首个公开版本。
|
|
10
|
+
|
|
11
|
+
### 新增
|
|
12
|
+
|
|
13
|
+
- 终端交互界面(Textual 内联模式,完成的内容进入终端原生滚动历史)和无界面模式 `-p`,输出格式 `text`、`json`、`stream-json`。
|
|
14
|
+
- 三种模型协议:Anthropic Messages、OpenAI Responses、Chat Completions;多 Provider 切换,首个事件前自动重试,缓存断点。
|
|
15
|
+
- 首次运行的配置引导 `moss setup` 和诊断命令 `moss doctor`。
|
|
16
|
+
- 本地工具:读、写、编辑、命令、glob、grep,只读的计划模式;相邻的只读调用并发执行,大结果存盘。
|
|
17
|
+
- 四个权限档位(default、acceptEdits、plan、bypassPermissions),用户、项目和本机三层规则,命令风险分级和项目路径检查。
|
|
18
|
+
- MCP 外部工具:stdio 与 HTTP 传输,后台连接、工具发现和变更订阅。
|
|
19
|
+
- 上下文估算与自动压缩、会话实时存档与恢复(`-c`、`--resume`、`/resume`)。
|
|
20
|
+
- 记忆笔记:`memory` 工具、后台提取、用户级与项目级索引。
|
|
21
|
+
- 项目指令 `AGENTS.md`(兼容 `CLAUDE.md`),支持 `@路径` 引用。
|
|
22
|
+
- Skill:`SKILL.md` 规程与脚本工具,内置 `/commit`、`/review`、`/test`。
|
|
23
|
+
- Hook:会话、轮次、请求和工具调用前后的命令、提示注入、HTTP 和 Agent 动作,项目级 Hook 需确认后启用。
|
|
24
|
+
- 子 Agent:内置 explore、plan、general,自定义定义,Fork 方式,后台任务与通知。
|
|
25
|
+
- Git 工作树隔离:创建、初始化(链接与复制)、改动检查、安全删除和过期清理。
|
|
26
|
+
- Agent 团队:共享任务、成员邮箱、各自的工作树、Windows Terminal 分屏或进程内运行、确认后逐个合并。
|
|
27
|
+
|
|
28
|
+
[Unreleased]: https://github.com/yzd11/mosscode/compare/v0.1.0...HEAD
|
|
29
|
+
[0.1.0]: https://github.com/yzd11/mosscode/releases/tag/v0.1.0
|
mosscode-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 yzd11
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
mosscode-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mosscode
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A terminal coding agent: tools, permissions, MCP, skills, hooks, sub-agents and agent teams.
|
|
5
|
+
Author: yzd11
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yzd11/mosscode
|
|
8
|
+
Project-URL: Source, https://github.com/yzd11/mosscode
|
|
9
|
+
Project-URL: Issues, https://github.com/yzd11/mosscode/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/yzd11/mosscode/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: coding-agent,ai,llm,terminal,cli,mcp,anthropic,openai
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Operating System :: MacOS
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development
|
|
23
|
+
Requires-Python: >=3.12
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: anthropic<2,>=1.12
|
|
27
|
+
Requires-Dist: openai<4,>=3.26
|
|
28
|
+
Requires-Dist: textual<9,>=8.2
|
|
29
|
+
Requires-Dist: PyYAML<7,>=6.0
|
|
30
|
+
Requires-Dist: pydantic<3,>=2.13
|
|
31
|
+
Requires-Dist: mcp<1.31,>=1.30
|
|
32
|
+
Requires-Dist: jsonschema<5,>=4.23
|
|
33
|
+
Requires-Dist: httpx<1,>=0.27
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-asyncio>=1; extra == "dev"
|
|
37
|
+
Requires-Dist: httpx2<3,>=2; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff==0.17.3; extra == "dev"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# MossCode
|
|
42
|
+
|
|
43
|
+
终端里的 coding agent:读写文件、运行命令、搜索代码,按权限档位请你确认后执行。支持 Anthropic Messages、OpenAI Responses 和 Chat Completions 三种协议,可以接入 MCP 工具、Skill、Hook、子 Agent 和 Agent 团队。
|
|
44
|
+
|
|
45
|
+
## 安装
|
|
46
|
+
|
|
47
|
+
需要 Python 3.12 或更高版本。推荐用 [uv](https://docs.astral.sh/uv/) 或 [pipx](https://pipx.pypa.io/) 安装成独立的命令:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
uv tool install mosscode
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
或
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
pipx install mosscode
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
升级用 `uv tool upgrade mosscode`(或 `pipx upgrade mosscode`)。安装后得到 `moss` 和 `mosscode` 两个相同的命令。
|
|
60
|
+
|
|
61
|
+
## 第一次运行
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
moss
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
找不到配置时,`moss` 在终端里逐项询问协议、服务地址、模型和凭据,写入 `~/.mosscode/config.yaml` 后进入界面。凭据推荐放在环境变量中,配置里只写变量名。`moss doctor` 检查安装、配置和依赖工具,不发送请求。
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
moss "解释这个项目的入口" # 启动后立即发送
|
|
71
|
+
moss -c # 恢复本项目最近的会话
|
|
72
|
+
moss -p "列出 src 下的模块" # 无界面模式,运行一个任务后退出
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 功能
|
|
76
|
+
|
|
77
|
+
- 本地工具:读、写、编辑、命令、glob、grep;相邻的只读调用并发执行。
|
|
78
|
+
- 四个权限档位与分层规则,危险命令分级确认,只读的计划模式。
|
|
79
|
+
- MCP 外部工具、Skill、生命周期 Hook。
|
|
80
|
+
- 子 Agent、后台任务、git 工作树隔离和 Agent 团队。
|
|
81
|
+
- 上下文自动压缩、会话存档与恢复、记忆笔记、项目指令 `AGENTS.md`。
|
|
82
|
+
|
|
83
|
+
支持 Windows、Linux 和 macOS。搜索优先使用 PATH 中的 [ripgrep](https://github.com/BurntSushi/ripgrep),没有时退回内置实现。
|
|
84
|
+
|
|
85
|
+
## 文档
|
|
86
|
+
|
|
87
|
+
- [项目主页与完整说明](https://github.com/yzd11/mosscode)
|
|
88
|
+
- [参考文档](https://github.com/yzd11/mosscode/tree/main/docs/reference)
|
|
89
|
+
- [更新日志](https://github.com/yzd11/mosscode/blob/main/CHANGELOG.md)
|
|
90
|
+
- [问题反馈](https://github.com/yzd11/mosscode/issues)
|
|
91
|
+
|
|
92
|
+
MIT 许可证。
|
mosscode-0.1.0/README.md
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# MossCode
|
|
2
|
+
|
|
3
|
+
终端里的 coding agent,设计上参考 Claude Code 与 pi:单一 Agent Loop,六个本地工具(读、写、改、命令、glob、grep)加 MCP 外部工具,四档权限与只读计划模式,支持 Anthropic Messages、OpenAI Responses 和 Chat Completions 三种协议;在此之上有 Skill、Hook、子 Agent、git 工作树隔离和 Agent 团队。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
需要 Python 3.12 或更高版本。推荐用 [uv](https://docs.astral.sh/uv/) 安装成独立的命令:
|
|
8
|
+
|
|
9
|
+
```powershell
|
|
10
|
+
uv tool install mosscode
|
|
11
|
+
moss --version
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
安装后得到 `moss` 和 `mosscode` 两个相同的命令,在任意目录都能运行。uv 若提示 `~/.local/bin`(Windows 上是 `%USERPROFILE%\.local\bin`)不在 PATH 中,运行 `uv tool update-shell`,然后打开新的终端。`moss doctor` 检查安装、PATH、配置和依赖工具,不发送请求。
|
|
15
|
+
|
|
16
|
+
升级:`uv tool upgrade mosscode`;卸载:`uv tool uninstall mosscode`。也可以用 pipx:`pipx install mosscode`。
|
|
17
|
+
|
|
18
|
+
支持 Windows、Linux 和 macOS:日常开发在 Windows(Windows Terminal)上进行,三个系统都由 CI 运行全部测试。搜索优先使用 PATH 中的 ripgrep(`rg`),没有时自动退回内置实现;Windows 上建议安装 Git for Windows,命令工具会优先使用 Git Bash。Agent 团队的分屏窗格需要 Windows Terminal 或 tmux,否则成员在进程内运行。
|
|
19
|
+
|
|
20
|
+
从源码安装、开发与测试见 [参与贡献](CONTRIBUTING.md)。
|
|
21
|
+
|
|
22
|
+
## 配置
|
|
23
|
+
|
|
24
|
+
### 模型
|
|
25
|
+
|
|
26
|
+
第一次运行 `moss` 时如果找不到配置,会在终端中逐项询问协议、服务地址、模型、上下文窗口和凭据,写入 `~/.mosscode/config.yaml` 后直接进入界面;也可以随时运行 `moss setup`(已有配置时不修改它)。凭据默认只写环境变量名;选择直接输入密钥时,密钥以明文保存在这个文件中。
|
|
27
|
+
|
|
28
|
+
追加 Provider 或调整其他选项时手动编辑,字段说明见 [config.example.yaml](config.example.yaml):
|
|
29
|
+
|
|
30
|
+
```powershell
|
|
31
|
+
New-Item -ItemType Directory -Force $HOME\.mosscode | Out-Null
|
|
32
|
+
Copy-Item config.example.yaml $HOME\.mosscode\config.yaml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`~/.mosscode/config.yaml` 是用户级配置,在任意目录都生效;只给某个项目用的配置放在该项目的 `.mosscode/config.yaml`。未指定 `--config` 时依次查找 `./.mosscode/config.yaml`、`~/.mosscode/config.yaml`,第一个存在的生效;工作目录下的 `config.yaml` 不会被读取。
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
providers:
|
|
39
|
+
- name: claude
|
|
40
|
+
protocol: anthropic-messages # 或 openai-responses、openai-chat-completions
|
|
41
|
+
model: replace-with-service-model
|
|
42
|
+
api_key_env: ANTHROPIC_API_KEY # 环境变量名;也可以用 api_key 直接填写
|
|
43
|
+
max_output_tokens: 32000 # 单次回复的输出上限,默认 16384
|
|
44
|
+
context_window: 200000 # 模型的上下文窗口;未配置时按 128K 估算
|
|
45
|
+
# base_url: https://your-gateway.example/v1
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
凭据推荐放在环境变量中(`$env:ANTHROPIC_API_KEY = '你的凭据'`),不要提交到仓库,也不用发送到聊天。兼容服务、多 Provider、重试和协议选项见 [模型提供商](docs/reference/providers.md)。
|
|
49
|
+
|
|
50
|
+
常用的顶层选项:
|
|
51
|
+
|
|
52
|
+
| 选项 | 默认 | 说明 |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| `default_provider` | 无 | 启动时直接使用的 Provider;未设置且有多项时启动时选择 |
|
|
55
|
+
| `max_iterations` | 200 | 单个任务最多的模型请求次数 |
|
|
56
|
+
| `shell` | `auto` | Windows 优先 Git Bash,找不到时用 PowerShell;可设 `bash`、`powershell` 或 bash.exe 路径 |
|
|
57
|
+
| `system_prompt` | 默认提示 | 填写后完整替换默认系统提示 |
|
|
58
|
+
| `auto_compact` | `true` | 接近上下文窗口时自动压缩较早的对话,见 [上下文管理](docs/reference/context.md) |
|
|
59
|
+
| `persist_sessions` | `true` | 把会话实时存档,用于恢复,见 [会话存档与恢复](docs/reference/sessions.md) |
|
|
60
|
+
| `memory` | `true` | 记忆笔记:索引注入系统提示、`memory` 工具和后台提取,见 [记忆笔记](docs/reference/memory.md) |
|
|
61
|
+
| `auto_memory` | `true` | 任务完成后在后台提取值得记住的内容;`false` 时只保留 `memory` 工具 |
|
|
62
|
+
| `memory_provider` | 当前 Provider | 后台提取使用的 Provider 名称,可以指定较便宜的模型 |
|
|
63
|
+
| `worktree_links` | `[]` | 链接进每个 git 工作树的路径(相对仓库根),如 `node_modules`、`.venv`,见 [Git 工作树](docs/reference/worktree.md#初始化) |
|
|
64
|
+
| `worktree_stale_hours` | `24` | 子 Agent 留下的无改动工作树多少小时后自动清理;`0` 关闭 |
|
|
65
|
+
| `teammate_mode` | `auto` | 团队成员在哪里运行:`auto`、`in-process`、`windows-terminal`、`tmux`,见 [Agent 团队](docs/reference/teams.md#后端) |
|
|
66
|
+
| `team_max_members` | `4` | 每个团队的成员上限,1–8 |
|
|
67
|
+
| `coordinator_mode` | `false` | 协调者模式的配置开关,还需要环境变量 `MOSSCODE_COORDINATOR_MODE=1`,见 [Agent 团队](docs/reference/teams.md#协调者模式) |
|
|
68
|
+
|
|
69
|
+
### 权限、MCP、项目指令、Skill、Hook、子 Agent 与工作树
|
|
70
|
+
|
|
71
|
+
| 文件 | 用途 | 说明 |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| `~/.mosscode/permissions.yaml`、`.mosscode/permissions.yaml`、`.mosscode/permissions.local.yaml` | 权限规则(用户、项目、本机) | [工具权限](docs/reference/permissions.md),示例 [permissions.example.yaml](permissions.example.yaml) |
|
|
74
|
+
| `~/.mosscode/mcp.yaml`、`.mosscode/mcp.yaml` | MCP Server | [MCP 外部工具](docs/reference/mcp.md),示例 [mcp.example.yaml](mcp.example.yaml) |
|
|
75
|
+
| `AGENTS.md`(或 `CLAUDE.md`)、`.mosscode/AGENTS.md`、`~/.mosscode/AGENTS.md` | 项目指令,追加到系统提示;单独一行的 `@路径` 引用其他文件 | [系统提示与缓存](docs/reference/prompts.md#项目指令agentsmd) |
|
|
76
|
+
| `~/.mosscode/skills/<名称>/`、`.mosscode/skills/<名称>/` | Skill:`SKILL.md` 规程和可选的 `tool.json` 脚本工具;项目级覆盖用户级和内置 | [Skill](docs/reference/skills.md) |
|
|
77
|
+
| `~/.mosscode/hooks.yaml`、`.mosscode/hooks.yaml`、`.mosscode/hooks.local.yaml` | Hook:在会话、轮次、请求和工具调用前后执行命令、注入提示、发送 HTTP 请求或拦截工具调用;项目级文件需确认后启用 | [Hook](docs/reference/hooks.md) |
|
|
78
|
+
| `~/.mosscode/agents/<名称>.md`、`.mosscode/agents/<名称>.md` | 子 Agent 定义:frontmatter 写名称、描述、工具范围、模型、轮数和权限档位,正文是系统提示词;项目级覆盖用户级和内置的 explore、plan、general | [子 Agent](docs/reference/subagents.md) |
|
|
79
|
+
| `.worktreeinclude`(仓库根) | 用 `.gitignore` 语法列出创建工作树时要复制过去的被忽略文件,如 `.env` | [Git 工作树](docs/reference/worktree.md#初始化) |
|
|
80
|
+
|
|
81
|
+
## 使用
|
|
82
|
+
|
|
83
|
+
```powershell
|
|
84
|
+
moss # 在当前目录启动交互界面
|
|
85
|
+
moss "解释这个项目的入口" # 启动后立即发送这条消息
|
|
86
|
+
moss --provider claude # 指定 Provider
|
|
87
|
+
moss --list-providers
|
|
88
|
+
moss -c # 恢复本项目最近的会话
|
|
89
|
+
moss --resume # 启动后从列表中选择会话
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
完整的选项、子命令和退出码见 [命令行](docs/reference/cli.md)。
|
|
93
|
+
|
|
94
|
+
用自然语言描述任务,例如“读取 README.md,说明项目入口”,模型自行选择工具。界面以内联方式显示在终端中,完成的内容进入终端原生滚动历史。
|
|
95
|
+
|
|
96
|
+
| 按键 | 作用 |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| Enter | 发送;运行中发送则排队,在下一轮请求前并入对话 |
|
|
99
|
+
| Shift+Enter、Ctrl+J、行尾 `\` | 换行 |
|
|
100
|
+
| ↑ / ↓ | 浏览输入历史;命令提示打开时选择提示 |
|
|
101
|
+
| Tab | 补全命令和参数 |
|
|
102
|
+
| Shift+Tab | 切换权限档位 default → acceptEdits → plan |
|
|
103
|
+
| Esc / Ctrl+C | 取消生成;有排队消息时第一次 Esc 只把排队消息取回输入框,任务继续;审批时 Esc 拒绝当前调用 |
|
|
104
|
+
| Ctrl+Q | 退出 |
|
|
105
|
+
|
|
106
|
+
| 命令 | 行为 |
|
|
107
|
+
|------|------|
|
|
108
|
+
| `/help [命令]` | 显示命令与快捷键;带命令名时显示该命令的用法和别名 |
|
|
109
|
+
| `/clear` | 开始新会话:清空屏幕与终端滚动历史、模型上下文和 Token 统计;权限档位、会话授权和 MCP 连接保留,AGENTS.md 重新加载 |
|
|
110
|
+
| `/compact [说明]` | 压缩上下文:较早的对话换成摘要,近期消息和用户原话保留;说明用于指定摘要侧重点 |
|
|
111
|
+
| `/resume` | 列出本项目最近的会话,↑ / ↓ 选择、Enter 恢复、Esc 收起 |
|
|
112
|
+
| `/resume ID` | 直接恢复指定会话 |
|
|
113
|
+
| `/session` | 显示当前会话的 ID、存档路径、标题和消息数 |
|
|
114
|
+
| `/memory` | 列出已加载的项目指令文件,以及用户级和项目级的记忆笔记及目录 |
|
|
115
|
+
| `/memory 名称` | 显示该笔记的路径和全文 |
|
|
116
|
+
| `/model` | 在输入框下方列出配置的提供商(当前项带 ✓),↑ / ↓ 选择、Enter 切换、Esc 收起 |
|
|
117
|
+
| `/model 名称` | 直接切换到指定提供商;对话历史保留 |
|
|
118
|
+
| `/plan` | 只读调查与规划,模型提交计划经批准后执行 |
|
|
119
|
+
| `/plan 任务` | 切入计划模式并立即调查、生成计划 |
|
|
120
|
+
| `/do [任务]` | 退出计划模式,回到进入前的档位;带任务时随后发给模型 |
|
|
121
|
+
| `/permissions`(别名 `/permission`) | 查看权限档位说明 |
|
|
122
|
+
| `/permissions 档位` | 切换到 default、acceptEdits、plan 或 bypassPermissions |
|
|
123
|
+
| `/mcp` | 列出 MCP Server 的状态(连接中、已连接及工具数、失败原因)与配置问题 |
|
|
124
|
+
| `/mcp 名称` | 列出该 Server 的工具,只读工具标注 `[只读]` |
|
|
125
|
+
| `/status` | 显示模型、权限档位、上下文、本会话用量、会话、MCP、记忆、Hook 和子 Agent 的状态 |
|
|
126
|
+
| `/skills`(别名 `/skill`) | 列出全部 Skill 及其来源、模式和描述;`/skills 名称` 查看详情,`/skills reload` 重新扫描 |
|
|
127
|
+
| `/hooks`(别名 `/hook`) | 列出 Hook 及其来源、条件、状态和最近的执行记录;`/hooks id` 查看详情,`/hooks reload` 重新加载 |
|
|
128
|
+
| `/agents`(别名 `/agent`) | 列出子 Agent 定义及其来源和描述;`/agents 名称` 查看实际可用的工具和有效权限档位,`/agents reload` 重新扫描 |
|
|
129
|
+
| `/tasks`(别名 `/task`) | 列出本会话的子 Agent 任务及其状态、用时和 Token;`/tasks id` 查看详情,`/tasks stop id` 停止 |
|
|
130
|
+
| `/worktree`(别名 `/worktrees`) | 列出 MossCode 管理的 git 工作树及其状态;`/worktree create 名称` 创建,`/worktree remove 名称 [--discard]` 删除,`/worktree clean` 清理过期的临时工作树 |
|
|
131
|
+
| `/team`(别名 `/teams`) | 列出本项目的 Agent 团队;`/team 名称` 查看成员和任务,`/team stop 成员` 停止成员,`/team delete 名称` 删除团队 |
|
|
132
|
+
| `/<Skill 名> [参数]` | 运行 Skill,如内置的 `/commit`、`/review`(在独立上下文中审查未提交的改动)、`/test` |
|
|
133
|
+
| `/exit`(别名 `/quit`) | 退出并清理资源 |
|
|
134
|
+
|
|
135
|
+
内置命令都是本地命令,不请求模型;Skill 命令把 Skill 的规程发给模型,补全菜单中带 `[skill]` 标记。命令名不区分大小写。`/etc/hosts 怎么改` 这类不像命令的文字照常发给模型;要发送恰好像命令的文字,在开头再加一个 `/`,如 `//api 怎么设计`。解析、补全和添加命令的方法见 [命令](docs/reference/commands.md)。
|
|
136
|
+
|
|
137
|
+
界面、输入排队、状态栏与配色的细节见 [终端界面](docs/reference/interface.md)。
|
|
138
|
+
|
|
139
|
+
### 会话与记忆
|
|
140
|
+
|
|
141
|
+
会话实时存档到 `~/.mosscode/projects/<项目键>/sessions/`,退出或崩溃后用 `-c`、`--resume [ID]` 或 `/resume` 接着对话,中断时未完成的工具调用会被标记出来。存档保留 30 天。见 [会话存档与恢复](docs/reference/sessions.md)。
|
|
142
|
+
|
|
143
|
+
对模型说“记住……”时,它用 `memory` 工具写一条笔记;任务完成后,后台还会提取你纠正过的做法和偏好(只依据对话,不依据工具输出)。笔记是 `~/.mosscode/memory/`(用户级)和 `~/.mosscode/projects/<项目键>/memory/`(项目级)中的 Markdown 文件,下次启动时索引进入系统提示。见 [记忆笔记](docs/reference/memory.md)。
|
|
144
|
+
|
|
145
|
+
### 权限档位
|
|
146
|
+
|
|
147
|
+
没有匹配规则时按下表判断;规则中的 deny 在任何档位都生效。
|
|
148
|
+
|
|
149
|
+
| 档位 | 只读工具与只读命令 | 文件写入/编辑 | 其他命令 |
|
|
150
|
+
| --- | --- | --- | --- |
|
|
151
|
+
| `default` | 允许 | 询问 | 询问 |
|
|
152
|
+
| `acceptEdits` | 允许 | 允许 | 询问 |
|
|
153
|
+
| `plan` | 允许 | 不可用 | 不可用 |
|
|
154
|
+
| `bypassPermissions` | 允许 | 允许 | 允许 |
|
|
155
|
+
|
|
156
|
+
审批时可选本次允许、本会话允许或永久允许(保存到 `.mosscode/permissions.local.yaml`)。删除根目录、格式化磁盘等灾难级命令一律拒绝;`git reset --hard`、`git push --force`、`rm -rf` 等高风险命令每次都要确认。路径检查是应用层限制,不是系统沙箱。完整说明见 [工具权限](docs/reference/permissions.md)。
|
|
157
|
+
|
|
158
|
+
**计划模式**:`/plan 任务` 或 Shift+Tab 进入。模型只能读取和运行只读命令,调查后用 `exit_plan_mode` 提交计划;批准后在同一任务内继续执行。见 [工具与 Agent Loop](docs/reference/tools.md#计划模式)。
|
|
159
|
+
|
|
160
|
+
**Agent 团队**:较大的、能拆成几块并行改动的任务,模型可以作为 Lead 建团队:共享任务写明依赖,至多 4 个成员各在自己的 git 工作树中工作,通过消息汇报;全部完成后经你确认逐个合并。在 Windows Terminal 中运行时成员出现在分屏窗格里,否则在进程内运行。团队跨重启保留。见 [Agent 团队](docs/reference/teams.md)。
|
|
161
|
+
|
|
162
|
+
### 无界面模式
|
|
163
|
+
|
|
164
|
+
```powershell
|
|
165
|
+
moss -p "列出 src 下的模块"
|
|
166
|
+
moss -p "解释项目入口" --show-usage
|
|
167
|
+
moss -p "列出 src 下的模块" --output-format json
|
|
168
|
+
Get-Content error.log | moss -p "解释这个错误"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`-p`(`--prompt`)运行一个任务后退出;管道输入附在任务之后,只有管道输入时它就是任务。不等待审批(可以加 `--resume ID` 或 `-c` 在已有会话上继续):需要确认的调用返回 approval_required,模型据此调整。`-p "/test 只测 cli"` 这类 Skill 命令展开后执行(fork 方式的 Skill 在独立上下文中运行);本地命令和未知命令以退出码 2 结束。`--output-format` 可选 `text`、`json`、`stream-json`;json 格式中 `is_error` 为真时退出码为 1,配置或连接错误在任何格式下都以 1 退出。未经确认的项目级 Hook 在 `-p` 中不启用(stderr 有提示),`--trust-project-hooks` 只在本次信任,`--no-hooks` 不加载任何 Hook。模型启动的后台子 Agent 在 `-p` 中照常运行:回复结束后等待它们完成,每个结果开启新的一轮,全部结束后才退出;stderr 提示任务的开始与结束。格式说明见 [模型提供商](docs/reference/providers.md#无界面模式与输出格式)。
|
|
172
|
+
|
|
173
|
+
## 架构
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
cli.py ──► tui.py(Textual 界面)或 -p(无界面)
|
|
177
|
+
└──► conversation.py(启动上下文与 MCP、对外接口)
|
|
178
|
+
└──► agent.py(Agent Loop)
|
|
179
|
+
├──► compaction.py、context.py(上下文估算与压缩)
|
|
180
|
+
├──► session.py(会话存档与恢复)、memory*.py(记忆笔记)
|
|
181
|
+
├──► providers.py(三种协议、重试、缓存标记)
|
|
182
|
+
├──► prompts.py(系统提示、环境补充、模式提醒)
|
|
183
|
+
└──► tools/(注册、校验、授权、执行)
|
|
184
|
+
├──► permissions.py、security.py(档位、规则、命令风险)
|
|
185
|
+
├──► mcp_client.py、mcp_config.py(MCP)
|
|
186
|
+
├──► skills/、tools/skill.py(Skill 与专属工具)
|
|
187
|
+
├──► hooks/(生命周期 Hook、工具调用拦截)
|
|
188
|
+
└──► agents/、tools/agent.py(子 Agent 与后台任务)
|
|
189
|
+
├──► worktree/(git 工作树隔离)
|
|
190
|
+
└──► teams/、tools/team.py(Agent 团队)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
一次任务:Agent Loop 用“稳定系统提示 + 历史 + 本次环境补充”请求模型,把流式事件交给界面;回复中的工具调用经校验和授权后执行(相邻只读调用最多 4 个并发),纯文本结果写回历史,再请求模型,直到回复不再调用工具或遇到停止条件(取消、轮数上限、连续未知工具等)。TUI 与 `-p` 共用 `Conversation`;在 Python 中可连续调用 `Conversation.ask()` 保持多轮历史,结束后 `await conversation.close()`。
|
|
194
|
+
|
|
195
|
+
| 模块 | 职责 |
|
|
196
|
+
| --- | --- |
|
|
197
|
+
| `agent.py` | Agent Loop:请求、工具执行、排队消息、停止条件、计划模式、压缩时机 |
|
|
198
|
+
| `context.py`、`compaction.py`、`tool_budget.py` | 上下文估算与阈值、摘要压缩、大结果存盘 |
|
|
199
|
+
| `session.py`、`serialization.py`、`paths.py` | 会话存档、重放与修复、锁、清理;项目键 |
|
|
200
|
+
| `memory.py`、`memory_extract.py`、`tools/memory.py` | 记忆笔记的存储、索引与校验,后台提取,memory 工具 |
|
|
201
|
+
| `providers.py` | Anthropic Messages、OpenAI Responses、Chat Completions 适配,首事件前重试,缓存断点 |
|
|
202
|
+
| `prompts.py` | 七个固定模块、工具清单、`<environment>` 与 `<system-reminder>` 补充、AGENTS.md、git 快照 |
|
|
203
|
+
| `tools/` | `files.py`、`search.py`、`process.py`、`plan.py` 等工具;`execution.py` 分批并发;`base.py` 注册与执行边界 |
|
|
204
|
+
| `permissions.py`、`security.py` | 档位、分层规则、审批请求、只读命令白名单、危险命令分级、项目路径检查 |
|
|
205
|
+
| `mcp_client.py`、`mcp_config.py` | MCP 配置、后台连接与发现、工具适配 |
|
|
206
|
+
| `skills/`、`tools/skill.py` | Skill 扫描与覆盖、目录与 `<active-skills>`、`load_skill` 和专属脚本工具;`skills/builtin/` 为内置 Skill |
|
|
207
|
+
| `hooks/` | Hook 文件读取与信任、条件、四种动作、按事件执行与日志;接入工具执行、Agent Loop 和会话 |
|
|
208
|
+
| `agents/`、`tools/agent.py` | 子 Agent 定义的加载与覆盖、定义式与 Fork 的运行时、后台任务管理与通知;`agent`、`task_output`、`task_stop` 工具;`agents/builtin/` 为内置定义 |
|
|
209
|
+
| `worktree/` | git 工作树的命名、创建与初始化(链接、复制)、改动检查、安全删除、元数据与自动清理 |
|
|
210
|
+
| `teams/`、`tools/team.py`、`coordinator.py` | Agent 团队:存储与锁、邮箱、共享任务、成员的一轮、Lead 侧运行时、合并、窗格后端与成员进程;团队工具;协调者模式 |
|
|
211
|
+
| `tui.py`、`appearance.py`、`scrollback.py` | 界面、命令与提示、原生滚动历史 |
|
|
212
|
+
| `launcher.py`、`cli.py` | 命令入口:参数、`--version` 和子命令不加载界面与 SDK;会话由 `cli.run` 启动 |
|
|
213
|
+
| `config.py`、`setup.py`、`doctor.py` | 配置加载、配置引导(`moss setup`)与诊断(`moss doctor`) |
|
|
214
|
+
|
|
215
|
+
### 文档
|
|
216
|
+
|
|
217
|
+
| 主题 | 文档 |
|
|
218
|
+
| --- | --- |
|
|
219
|
+
| 当前行为的完整说明 | [命令行](docs/reference/cli.md)、[界面](docs/reference/interface.md)、[命令](docs/reference/commands.md)、[工具与 Agent Loop](docs/reference/tools.md)、[权限](docs/reference/permissions.md)、[MCP](docs/reference/mcp.md)、[模型提供商](docs/reference/providers.md)、[系统提示与缓存](docs/reference/prompts.md)、[上下文管理](docs/reference/context.md)、[会话存档与恢复](docs/reference/sessions.md)、[记忆笔记](docs/reference/memory.md)、[Skill](docs/reference/skills.md)、[Hook](docs/reference/hooks.md)、[子 Agent](docs/reference/subagents.md)、[Git 工作树](docs/reference/worktree.md)、[Agent 团队](docs/reference/teams.md) |
|
|
220
|
+
| 版本变化 | [更新日志](CHANGELOG.md) |
|
|
221
|
+
| 开发与贡献 | [参与贡献](CONTRIBUTING.md)、[开发说明](AGENTS.md)、[安全策略](SECURITY.md) |
|
|
222
|
+
|
|
223
|
+
目前不支持网络限制、资源配额和审计日志。
|
|
224
|
+
|
|
225
|
+
MossCode 以 [MIT 许可证](LICENSE) 发布。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# MossCode
|
|
2
|
+
|
|
3
|
+
终端里的 coding agent:读写文件、运行命令、搜索代码,按权限档位请你确认后执行。支持 Anthropic Messages、OpenAI Responses 和 Chat Completions 三种协议,可以接入 MCP 工具、Skill、Hook、子 Agent 和 Agent 团队。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
需要 Python 3.12 或更高版本。推荐用 [uv](https://docs.astral.sh/uv/) 或 [pipx](https://pipx.pypa.io/) 安装成独立的命令:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
uv tool install mosscode
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
或
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
pipx install mosscode
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
升级用 `uv tool upgrade mosscode`(或 `pipx upgrade mosscode`)。安装后得到 `moss` 和 `mosscode` 两个相同的命令。
|
|
20
|
+
|
|
21
|
+
## 第一次运行
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
moss
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
找不到配置时,`moss` 在终端里逐项询问协议、服务地址、模型和凭据,写入 `~/.mosscode/config.yaml` 后进入界面。凭据推荐放在环境变量中,配置里只写变量名。`moss doctor` 检查安装、配置和依赖工具,不发送请求。
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
moss "解释这个项目的入口" # 启动后立即发送
|
|
31
|
+
moss -c # 恢复本项目最近的会话
|
|
32
|
+
moss -p "列出 src 下的模块" # 无界面模式,运行一个任务后退出
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 功能
|
|
36
|
+
|
|
37
|
+
- 本地工具:读、写、编辑、命令、glob、grep;相邻的只读调用并发执行。
|
|
38
|
+
- 四个权限档位与分层规则,危险命令分级确认,只读的计划模式。
|
|
39
|
+
- MCP 外部工具、Skill、生命周期 Hook。
|
|
40
|
+
- 子 Agent、后台任务、git 工作树隔离和 Agent 团队。
|
|
41
|
+
- 上下文自动压缩、会话存档与恢复、记忆笔记、项目指令 `AGENTS.md`。
|
|
42
|
+
|
|
43
|
+
支持 Windows、Linux 和 macOS。搜索优先使用 PATH 中的 [ripgrep](https://github.com/BurntSushi/ripgrep),没有时退回内置实现。
|
|
44
|
+
|
|
45
|
+
## 文档
|
|
46
|
+
|
|
47
|
+
- [项目主页与完整说明](https://github.com/yzd11/mosscode)
|
|
48
|
+
- [参考文档](https://github.com/yzd11/mosscode/tree/main/docs/reference)
|
|
49
|
+
- [更新日志](https://github.com/yzd11/mosscode/blob/main/CHANGELOG.md)
|
|
50
|
+
- [问题反馈](https://github.com/yzd11/mosscode/issues)
|
|
51
|
+
|
|
52
|
+
MIT 许可证。
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "mosscode"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "A terminal coding agent: tools, permissions, MCP, skills, hooks, sub-agents and agent teams."
|
|
9
|
+
readme = {file = "docs/pypi.md", content-type = "text/markdown"}
|
|
10
|
+
license = "MIT"
|
|
11
|
+
license-files = ["LICENSE"]
|
|
12
|
+
authors = [{name = "yzd11"}]
|
|
13
|
+
requires-python = ">=3.12"
|
|
14
|
+
keywords = ["coding-agent", "ai", "llm", "terminal", "cli", "mcp", "anthropic", "openai"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 3 - Alpha",
|
|
17
|
+
"Environment :: Console",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Operating System :: Microsoft :: Windows",
|
|
20
|
+
"Operating System :: POSIX :: Linux",
|
|
21
|
+
"Operating System :: MacOS",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
25
|
+
"Programming Language :: Python :: 3.14",
|
|
26
|
+
"Topic :: Software Development",
|
|
27
|
+
]
|
|
28
|
+
dependencies = ["anthropic>=1.12,<2", "openai>=3.26,<4", "textual>=8.2,<9", "PyYAML>=6.0,<7", "pydantic>=2.13,<3", "mcp>=1.30,<1.31", "jsonschema>=4.23,<5", "httpx>=0.27,<1"]
|
|
29
|
+
|
|
30
|
+
[project.optional-dependencies]
|
|
31
|
+
dev = ["pytest>=8", "pytest-asyncio>=1", "httpx2>=2,<3", "ruff==0.17.3"]
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Homepage = "https://github.com/yzd11/mosscode"
|
|
35
|
+
Source = "https://github.com/yzd11/mosscode"
|
|
36
|
+
Issues = "https://github.com/yzd11/mosscode/issues"
|
|
37
|
+
Changelog = "https://github.com/yzd11/mosscode/blob/main/CHANGELOG.md"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
moss = "mosscode.launcher:main"
|
|
41
|
+
mosscode = "mosscode.launcher:main"
|
|
42
|
+
|
|
43
|
+
[tool.setuptools.packages.find]
|
|
44
|
+
where = ["src"]
|
|
45
|
+
|
|
46
|
+
[tool.setuptools.package-data]
|
|
47
|
+
"mosscode.skills" = ["builtin/*/SKILL.md", "builtin/*/tool.json", "builtin/*/scripts/*.py"]
|
|
48
|
+
"mosscode.agents" = ["builtin/*.md"]
|
|
49
|
+
|
|
50
|
+
[tool.pytest.ini_options]
|
|
51
|
+
asyncio_mode = "auto"
|
|
52
|
+
testpaths = ["tests"]
|
|
53
|
+
faulthandler_timeout = 300 # A test that hangs prints every thread's stack instead of stalling silently.
|
|
54
|
+
|
|
55
|
+
[tool.ruff]
|
|
56
|
+
line-length = 120
|
|
57
|
+
target-version = "py312"
|
|
58
|
+
src = ["src", "tests"]
|
|
59
|
+
extend-exclude = ["*.md"] # Code examples in the docs keep their compact layout.
|
|
60
|
+
|
|
61
|
+
[tool.ruff.lint]
|
|
62
|
+
select = ["E4", "E7", "E9", "F", "I", "B", "UP"]
|
|
63
|
+
ignore = [
|
|
64
|
+
"B905", # zip() without strict=: the lengths are equal by construction where it is used.
|
|
65
|
+
"E731", # A one-line lambda bound to a local name reads better than a nested def.
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
[tool.ruff.lint.per-file-ignores]
|
|
69
|
+
"tests/*" = [
|
|
70
|
+
"E402", # Some test modules import helpers after the fixtures they depend on.
|
|
71
|
+
"B008", # Fake providers default to an immutable Usage().
|
|
72
|
+
]
|
mosscode-0.1.0/setup.cfg
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""MossCode: a coding agent in the terminal."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def __getattr__(name: str):
|
|
5
|
+
"""`mosscode.__version__` from the installed metadata, read only when asked for."""
|
|
6
|
+
if name == "__version__":
|
|
7
|
+
from .launcher import version
|
|
8
|
+
|
|
9
|
+
return version()
|
|
10
|
+
raise AttributeError(f"module 'mosscode' has no attribute {name!r}")
|