@teammy/cli 0.0.4 → 0.0.6

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.
package/README.md CHANGED
@@ -1,24 +1,39 @@
1
1
  # Teammy client
2
2
 
3
- 成员设备上的 Teammy 命令行客户端,需要 Node.js 22.13 或更新版本。
3
+ 成员设备上的命令行客户端,需要 Node.js 22.13+,推荐 Node.js 24。
4
+
5
+ 0.0.6 包含多项目与后台同步,配合服务端 0.0.6 使用。
6
+
7
+ ```sh
8
+ npm install -g @teammy/cli@0.0.6
9
+ ```
4
10
 
5
11
  ```sh
6
- npm install -g @teammy/cli@0.0.4
7
- teammy --help
8
- teammy --version
9
- teammy server-info --url http://127.0.0.1:4317
12
+ teammy connect --url http://teammy.internal:14317 --project PROJECT_ID --member alice
13
+ teammy status
14
+ teammy sync off
15
+ teammy sync on
16
+ teammy logs
10
17
  ```
11
18
 
12
- `server-info` 查询服务器版本与协议能力,以 JSON 输出结果;协议不兼容或连接失败时返回非零退出码。此命令不保存配置或绑定工作区。
19
+ 在项目目录执行 connect,创建 `./workspaces` 和本人 ID 子目录、维护 `.gitignore`,自动在后台下载同事资料并上传本人文件。命令退出后可以关闭终端;已开启的项目在下次登录系统时恢复,手动 off 的项目保持停止。日常使用不需要重复 connect。
20
+
21
+ 已有同名目录、文件或符号链接时拒绝接入;不自动合并已有资料。Git 已追踪该路径时也会拒绝,不修改 Git 索引。可以先自行改名保存旧目录,接入成功后将本人的文件复制到 `workspaces/<ID>/`。
22
+
23
+ 本人本地文件是发布来源,服务器旧正文不会下载到本人目录。首次本地缺失的历史文件保留在服务器,不推断为删除;确认曾在本地存在的文件,之后删除并完成稳定等待才传播。其他成员目录只接收,不反向发布,本地误改会保留并报告。
24
+
25
+ 默认约一分钟检查一次,每个文件连续一分钟没有变化后发布;首次下载立即开始,大批量接收自动续批。周期由全站网页设置热更新。会话仍需通过 `session discover` / `session track` 或已有 hook 登记来源,后台不会自动采集未登记的会话。
26
+
27
+ macOS 使用用户 LaunchAgent,Linux 使用 systemd 用户服务;不安装系统级服务、不启用 lingering。登录会话没有可用服务管理器的环境可用 `connect --no-start` 后运行 `sync --foreground`,此方式需保持终端运行。Windows 暂不支持自动后台服务。
13
28
 
14
- 管理员在网页建立成员 ID 后,运行 `connect --url URL --member ID`,再运行 `sync`。默认共享根为 `./workspaces`。支持旧 `--token-file FILE` 接入和 `status --root DIR`;绑定与设备身份保存在本地 SQLite。默认状态目录为 `~/.teammy/client`,可通过 `--state-dir DIR` 指定。
29
+ `--root DIR` 指定同步目录,默认当前目录的 `workspaces`;`--state-dir DIR` 指定本机私有状态,默认 `~/.teammy/client`。一个状态目录共用一个 daemon,项目各有独立身份、队列、锁和状态。公共描述文件位于 `workspaces/.teammy.json`,凭证仅保存在本机状态库。
15
30
 
16
- 连接后运行 `teammy sync --root DIR` 持续同步文件,默认约一分钟检查一次并逐文件等待一分钟稳定。`sync --once` 执行一轮,`--settle-ms 0` 显式允许立即处理已保存内容。上传自己的成员目录,下载其他成员目录;本地镜像冲突会保留并报告。运行 `teammy sync --help` 查看恢复与调度选项。会话来源可通过 `teammy session discover --agent AGENT --project-dir DIR` 或 `session track --agent AGENT --file PATH --project-dir DIR` 登记,之后由 sync 采集上传。支持 Claude Code、Codex、Cursor CLI SQLite、Pi v3、DSH v0;DSH 压缩日志需要 Node.js 22.15+ 或 24+。`session hook` 提供不等待网络的本地线索入口,不自动修改宿主配置。
31
+ `status --json`、`connect --json`、`sync --json` 提供机器可读结果。正常终端只显示简短结果;诊断保存在本机 `logs/client.jsonl`,每份约 1 MiB,保留当前文件和两份轮转,不记录正文和凭证。`logs --all` 查看本机所有项目事件。
17
32
 
18
- 使用 `session list`、`session search --query TEXT`、`session read --owner MEMBER --key KEY` 查看团队会话,`session sources` 查看来源与错误,`sync --sessions-only` 只运行会话链路。所有命令支持 `--root DIR` 和 `--state-dir DIR`。`teammy session --help` 查看完整参数。
33
+ `sync --once` 执行一轮并可复用后台进程;不保证文件已稳定或所有批次完成。需要手动覆盖时,先 off,再使用 `sync --once --settle-ms 0`、`--restore-missing`、`--retry` 等参数。`--restore-missing` 只恢复缺失的同事副本,不覆盖现有修改。`--adopt-baseline` 保留为显式核对本人本地文件与历史一致性的工具,正常接入不需要。管理员重置设备后,先 off,再用原 connect 命令加 `--reconnect`,保留同步基线。
19
34
 
20
- 服务器单独安装 `@teammy/server`,启动命令为 `teammy-server`。原有 `teammy server` 命令会提示迁移方式。
35
+ 已接入目录不能静默改绑;切换项目需指定另一个项目根。若修改 Node.js 或 CLI 安装位置,重新运行 sync on 可更新该用户服务的启动路径。服务依赖安装路径持续存在,不能把临时安装目录当作长期运行环境。
21
36
 
22
- 许可证随包附于 `dist/LICENSE`。
37
+ 会话支持 Claude Code、Codex、Cursor CLI SQLite、Pi v3、DSH v0。`session hook` 只登记本地线索,不等待网络,不自动修改宿主配置。`session list`、`session search --query TEXT`、`session read --owner MEMBER --key KEY` 用于查看团队会话;`session sources` 查看本机来源;详见 `teammy session --help`。
23
38
 
24
- 公共配置位于共享根 `.teammy.json`,凭证仅留在本机状态库。网页设置约每 30 秒热应用,显式 `--interval-ms` / `--settle-ms` 仍优先并显示为覆盖。网页重置设备后,使用原 connect 命令加 `--reconnect` 重新接入,保留已有同步基线。
39
+ 服务器单独安装 `@teammy/server`。`server-info --url URL` 只查询能力与版本,以 JSON 返回,不创建绑定。许可证附于 `dist/LICENSE`。
package/bin/teammy.js CHANGED
@@ -1,7 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { readFileSync } from 'node:fs';
4
- import { runCli } from '../dist/main.js';
4
+ // SQLite's known experimental notice is not an actionable CLI diagnostic.
5
+ const warningHandlers = process.listeners('warning');
6
+ process.removeAllListeners('warning');
7
+ process.on('warning', (warning) => {
8
+ if (warning.name === 'ExperimentalWarning' && warning.message.startsWith('SQLite')) return;
9
+ for (const handler of warningHandlers) handler.call(process, warning);
10
+ });
11
+ const { runCli } = await import('../dist/main.js');
5
12
 
6
13
  const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
7
14