zhiqu 0.0.0-stage → 0.1.0

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 (48) hide show
  1. package/README.md +162 -2
  2. package/bin/zhiqu.js +11 -0
  3. package/package.json +24 -4
  4. package/src/agent.js +1228 -0
  5. package/src/api.js +214 -0
  6. package/src/cli.js +792 -0
  7. package/src/clock.js +8 -0
  8. package/src/commands.js +46 -0
  9. package/src/compact.js +211 -0
  10. package/src/config.js +201 -0
  11. package/src/defaults.js +44 -0
  12. package/src/desktop.js +66 -0
  13. package/src/execmode.js +181 -0
  14. package/src/goal.js +105 -0
  15. package/src/host/code-host.js +251 -0
  16. package/src/host/sandbox-launch.js +25 -0
  17. package/src/http.js +134 -0
  18. package/src/instructions.js +101 -0
  19. package/src/longinput.js +108 -0
  20. package/src/mcp-server.js +137 -0
  21. package/src/mcp.js +312 -0
  22. package/src/origins.js +14 -0
  23. package/src/prompt.js +126 -0
  24. package/src/render/diff.js +76 -0
  25. package/src/render/markdown.js +185 -0
  26. package/src/render/term.js +124 -0
  27. package/src/replay.js +98 -0
  28. package/src/review.js +391 -0
  29. package/src/session.js +222 -0
  30. package/src/skills.js +97 -0
  31. package/src/sse.js +43 -0
  32. package/src/todos.js +97 -0
  33. package/src/tools/drafts.js +185 -0
  34. package/src/tools/edit.js +98 -0
  35. package/src/tools/exec.js +151 -0
  36. package/src/tools/execrules.js +116 -0
  37. package/src/tools/globs.js +119 -0
  38. package/src/tools/guard.js +169 -0
  39. package/src/tools/jobs.js +138 -0
  40. package/src/tools/jsonschema.js +98 -0
  41. package/src/tools/local.js +973 -0
  42. package/src/tools/patch.js +166 -0
  43. package/src/tools/sandbox.js +375 -0
  44. package/src/tools/syntax.js +96 -0
  45. package/src/ui.js +679 -0
  46. package/src/update.js +51 -0
  47. package/src/version.js +6 -0
  48. package/src/window.js +36 -0
package/README.md CHANGED
@@ -1,3 +1,163 @@
1
- # Temporary Holding Version
1
+ # zhiqu
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 知趣·象限([zhiqustudy.com](https://zhiqustudy.com))的命令行 coding agent。**循环和工具跑在你的电脑上**(读、搜、改文件、跑命令都在本机的工作区里),
4
+ **模型、登录和你的数据(任务、知识 Wiki、记忆)在服务器上**(模型的 API Key 只存在服务器,命令行拿不到)。
5
+
6
+ ## 安装
7
+
8
+ 要 Node.js 18.17 或更新的版本。
9
+
10
+ ```bash
11
+ npm install -g zhiqu
12
+ ```
13
+
14
+ 在国内下得慢的话,换 npmmirror 的源(它会自动同步 npm 上的版本):
15
+
16
+ ```bash
17
+ npm install -g zhiqu --registry=https://registry.npmmirror.com
18
+ ```
19
+
20
+ ## 第一次用
21
+
22
+ 1. 在 [zhiqustudy.com](https://zhiqustudy.com) 注册账号,在网页「设置 → AI 模型」里加一个模型(填你自己的 API Key,只存在服务器上)。
23
+ 2. 登录:
24
+
25
+ ```bash
26
+ zhiqu login
27
+ ```
28
+
29
+ 它会打开浏览器、给你一个设备码,确认是你本人之后点「允许」就好 —— 命令行不接触你的密码。
30
+ 3. 到你的项目目录里开始:
31
+
32
+ ```bash
33
+ cd 你的项目
34
+ zhiqu
35
+ ```
36
+
37
+ 默认连的是 `https://zhiqustudy.com`。用本机的知趣·象限桌面应用:`zhiqu login --server http://127.0.0.1:47615`;
38
+ 自己部署的服务器同理。
39
+
40
+ ## 三档权限
41
+
42
+ | 档位 | 做什么 | 切换 |
43
+ |---|---|---|
44
+ | `plan` | 只读、只搜、只出计划;计划交上来,你批准了才开始改 | `/mode plan` 或 `--mode plan` |
45
+ | `ask` | 每次写文件先给 diff、每条命令先给你看,问 y / n(`a` = 本会话都允许这一类) | `/mode ask`(默认) |
46
+ | `auto` | 写文件、跑命令都不再问,**做完再告诉你**(每一步照样显示) | `/mode auto` |
47
+
48
+ 三档的安全规则一样,`auto` 免的是「问」,不是「规则」:
49
+
50
+ - **系统沙箱**(macOS 的 Seatbelt、Linux 的 bubblewrap):命令只能写工作区(`.git`、`.zhiqu` 除外),默认断网,读不到家目录里的东西。
51
+ 没有沙箱的平台(Windows)退回白名单:只能跑认得的命令,不接受行内代码。
52
+ - 路径不出工作区(`../`、绝对路径、中间某段是指向外面的软链都拒);不读 `.env`、`*.pem`、`id_rsa` 这类文件。
53
+ - 改一个已存在的文件之前必须先读过它;读过之后被你在编辑器里改了就要重读。
54
+ - 子进程拿不到你的环境变量(令牌、云凭据);超时连同它起的子进程一起杀掉;输出有上限。
55
+
56
+ ## 命令
57
+
58
+ ```
59
+ zhiqu 在当前目录开一段会话
60
+ zhiqu -p "帮我写个贪吃蛇" 只跑这一句,打印回答后退出
61
+ zhiqu -c 接着上一段会话
62
+ zhiqu --resume [id] 挑一段会话接着做
63
+ zhiqu --goal "目标" 一直做到目标达成并核对通过
64
+ zhiqu exec "要做的事" 给脚本和 CI 用:stdout 只有结论,默认只读(要写给 --mode auto);--json、--output-schema、-o
65
+ zhiqu review [说明] 只读地审查改动,按 P0–P3 列出真问题
66
+ zhiqu login [--server URL] 登录(浏览器里确认);--token zqp_… 用网页里签的个人访问令牌
67
+ zhiqu logout | whoami | models | help | --version
68
+ zhiqu mcp 当 MCP 服务器,见下面
69
+ ```
70
+
71
+ 常用选项:`--mode plan|ask|auto`、`--model <id>`、`--effort instant|medium|high|extra|max`(思考档位)、
72
+ `--sandbox-network off|local|on`(沙箱里的命令能不能联网,默认 off)。完整的用 `zhiqu help` 看。
73
+
74
+ 会话里输入 `/` 会弹出命令菜单:`/goal`、`/mode`、`/model`、`/effort`、`/window`、`/ps`、`/stop`、`/resume`、`/new`、`/compact`、
75
+ `/init`、`/review`、`/skills`、`/mcp`、`/system`、`/verbose`、`/usage`、`/help`、`/exit`。↑↓ 选、回车执行、Tab 补全、Esc 关掉。
76
+
77
+ 本地工具:`list_files`、`read_file`、`search`(正则、按文件类型过滤、跳过 `.gitignore` 的)、`write_file`、`edit_file`、
78
+ `apply_patch`(一次改多个文件,全成或全不成)、`delete_file`(挪进 `.zhiqu/trash/`,能恢复)、`shell`(在系统沙箱里;
79
+ 可以放到后台,用 `/ps`、`/stop` 管)。行尾加 `\` 换行接着输入;Ctrl+C 打断正在做的事;它干活时可以接着打下一句,回车排队。
80
+
81
+ ## goal 模式
82
+
83
+ ```
84
+ /goal 做一个能跑的贪吃蛇,放在 game/ 下,并自己验证 会话里设目标
85
+ zhiqu --goal "修好所有失败的测试" --mode auto < /dev/null 无人值守(退出码 0 达成 / 2 卡住 / 3 轮数用完)
86
+ ```
87
+
88
+ 设了目标之后,它是这段会话的最高优先级:模型不能说「接下来你可以……」就停,只有宣告
89
+ **已达成**(附上它亲自验证过的证据)或 **卡住了**(说清楚需要你做什么)才会停;宣告达成之后还要过一道独立核对,
90
+ 核对不过就带着缺口接着做。有轮数上限,Ctrl+C 随时停,`/goal continue` 接着追,`/goal clear` 放下。
91
+
92
+ ## 文件放在哪
93
+
94
+ ```
95
+ ~/.zhiqu/config.json 服务器、令牌(600 权限)、默认模型、默认档位
96
+ ~/.zhiqu/system.md 系统内容:第一次运行时写一份,之后以它为准,可以改
97
+ ~/.zhiqu/ZHIQU.md 你自己的通用约定(每个项目都会带上)
98
+ ~/.zhiqu/skills/<名字>/SKILL.md
99
+ ~/.zhiqu/mcp.json
100
+
101
+ <项目>/ZHIQU.md 项目说明(没有的话兼容读 CLAUDE.md);/init 可以生成初稿
102
+ <项目>/.zhiqu/settings.json 项目级设置(不收令牌 —— 这个文件可能被提交)
103
+ <项目>/.zhiqu/system.md 项目级系统内容,优先于 ~/.zhiqu/system.md
104
+ <项目>/.zhiqu/skills/<名字>/SKILL.md
105
+ <项目>/.zhiqu/mcp.json
106
+ <项目>/.zhiqu/setup.json + sessions/*.jsonl 会话记录(/resume 用;已在 .zhiqu/.gitignore 里忽略)
107
+ ```
108
+
109
+ **Skills 渐进式披露**:平时上下文里只有每个 skill 的名字和一句描述(`SKILL.md` 的 frontmatter);
110
+ 任务对得上时模型用 `load_skill` 取正文;正文里提到的参考文件、脚本,真用到时再按需取。
111
+ 所以 `SKILL.md` 可以写得短,把大段细节放进同目录的其它文件。
112
+
113
+ **MCP**:`.zhiqu/mcp.json` 里 `mcpServers` 下每项要么是 `{"command", "args", "env"}`(stdio),要么是
114
+ `{"url", "headers"}`(HTTP);值里可以写 `${环境变量}`。工具名会加前缀 `mcp__服务__工具`;每个工具第一次用都会问你
115
+ (`auto` 也问);返回的内容一律当作数据,不当作指令。
116
+
117
+ **长对话**:用到模型上下文窗口的约 80% 时自动把较早的对话压成摘要(目标、决定、改过的文件、待办),也可以 `/compact`。
118
+ 窗口大小在网页「设置 → AI 模型」里按模型设置。
119
+
120
+ ## 对话在网页里也看得到
121
+
122
+ 每段命令行会话在网页「AI 助手」里是一个 Notebook(「命令行 · 项目名 · 标题」)。让它排计划、改任务状态、记长期记忆、写知识 Wiki
123
+ 时,除了改任务状态是直接生效,其余生成的都是草稿,在网页里确认之后才生效。
124
+
125
+ ## 让别的 AI 也用上你的 Wiki 和任务:`zhiqu mcp`
126
+
127
+ `zhiqu mcp` 是一个 MCP 服务器(stdio)。接上之后,Claude Code、Claude 桌面版、Cursor 这些客户端能用你在知趣·象限里的东西:
128
+
129
+ | 工具 | 做什么 |
130
+ |---|---|
131
+ | `search_wiki` / `read_wiki_page` | 查、读知识 Wiki |
132
+ | `create_wiki_patch` | 改 Wiki —— **只生成草稿**,到网页「知识 Wiki → 待合入变更」里确认 |
133
+ | `list_tasks` | 读没做完的任务(带 `#编号`)。网页「设置 → AI 模型」里关了「让 AI 读我的任务」时读不到 |
134
+ | `update_task_status` | 把一条任务标成待办 / 进行中 / 已完成 —— **直接生效** |
135
+ | `create_study_plan` | 新建任务 / 例行计划 —— **只生成草稿**,到网页 AI 助手里确认 |
136
+ | `read_memory` / `propose_memory` | 读长期记忆 / 提议新的(草稿) |
137
+
138
+ 先 `zhiqu login` 登录一次(令牌存在 `~/.zhiqu/config.json`,`zhiqu mcp` 用的就是它)。连的是登录时的那台服务器 —— 默认是 `https://zhiqustudy.com`;
139
+ 连本机的桌面应用就 `zhiqu login --server http://127.0.0.1:47615`,那就要开着桌面应用。
140
+
141
+ **Claude Code**(所有项目都能用):
142
+
143
+ ```bash
144
+ claude mcp add --scope user zhiqu -- zhiqu mcp
145
+ ```
146
+
147
+ **Claude 桌面版**:`~/Library/Application Support/Claude/claude_desktop_config.json`(Windows 是 `%APPDATA%\Claude\claude_desktop_config.json`)。
148
+ 图形界面的应用不一定找得到 `zhiqu`,`command` 写 `which zhiqu` 给出的完整路径:
149
+
150
+ ```json
151
+ { "mcpServers": { "zhiqu": { "command": "/opt/homebrew/bin/zhiqu", "args": ["mcp"] } } }
152
+ ```
153
+
154
+ **Cursor**:`~/.cursor/mcp.json`,内容同上。
155
+
156
+ 一个 MCP 连接算一段会话:它生成的草稿挂在网页 AI 助手里一个「MCP · 客户端名」的 Notebook 上。每个工具第一次用时客户端会问你允不允许;
157
+ 读的那几个标了只读(`readOnlyHint`),客户端可以据此少问几次。
158
+
159
+ ## 开发
160
+
161
+ ```bash
162
+ npm test # node --test;与服务器端共用的一致性用例也在里面
163
+ ```
package/bin/zhiqu.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { main } from '../src/cli.js';
3
+
4
+ main(process.argv.slice(2)).then(
5
+ (code) => { process.exitCode = code ?? 0; },
6
+ (err) => {
7
+ process.stderr.write(`zhiqu:${err && err.message ? err.message : err}\n`);
8
+ if (process.env.ZHIQU_DEBUG) process.stderr.write(`${err && err.stack}\n`);
9
+ process.exitCode = 1;
10
+ },
11
+ );
package/package.json CHANGED
@@ -1,6 +1,26 @@
1
1
  {
2
2
  "name": "zhiqu",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "知趣·象限的命令行 coding agent:循环与工具跑在你的电脑上,模型、登录、学习数据在服务器上",
5
+ "type": "module",
6
+ "bin": {
7
+ "zhiqu": "bin/zhiqu.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "src",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18.17"
16
+ },
17
+ "scripts": {
18
+ "test": "node --test test/*.test.js",
19
+ "set-server": "node scripts/set-default-server.mjs",
20
+ "prepublishOnly": "node scripts/check-release.mjs"
21
+ },
22
+ "license": "UNLICENSED",
23
+ "zhiqu": {
24
+ "defaultServer": "https://zhiqustudy.com"
25
+ }
26
+ }