状态栏、日志与隐私
状态栏项
twinny 在状态栏右侧有一个项。
| 显示 | 含义 |
|---|---|
</> | 空闲,自动建议开启 |
</> off | 空闲,自动建议关闭;Alt+\ 仍可用 |
| 旋转图标 | 补全、对话、编辑或审查正在运行;点击可停止 |
| 隐藏 | twinny 已禁用(twinny.enabled 为 false) |
悬停显示当前自动补全模型和提供者,以及自动建议是否开启。空闲时点击打开菜单:
- 开关自动建议,
- 打开对话,
- 管理提供者,
- 打开 twinny 设置,
- 显示日志。
忙碌时点击执行 Stop generation。
Twinny 输出通道
twinny 所做的一切都写入输出面板的 Twinny 通道。用 Twinny - Show logs、状态栏菜单,或在输出面板下拉框中选择 Twinny 打开。
该通道是 VS Code 日志通道,每行带时间戳和级别,面板中的级别选择器(或 Developer: Set Log Level…)决定你看到多少:
| 级别 | 内容 |
|---|---|
| Info | 请求发出一行、返回一行:工作类型、提供者和模型、耗时、提示和回复的大小,以及生成停止的原因(停止标记、行数限制、块结束、取消……) |
| Debug | 另加完整的提示和回复,各截至 8,000 字符 |
| Warning / Error | 失败及提供者的原始信息。始终写入 |
twinny.enableLogging(默认开启)控制 Info 和 Debug;警告和错误无论如何都会写入。写入前会对 API 密钥和 bearer token 脱敏。
读日志能回答大多数“它为什么这么做”的问题:FIM 模板是否匹配、模型用了多久、提示是否过长、@workspace 选了哪些分块。
隐私
twinny 没有账号、没有遥测、没有自己的服务器。离开你机器的,正是你指定的目标:
| 你使用 | 发送内容 | 目的地 |
|---|---|---|
| 本地服务器 | 提示和上下文 | 本机上的该服务器 |
| 已配对设备 | 提示和上下文,加密 | 你的另一台机器 |
| 托管 API | 提示和上下文 | 该供应商 |
| 团队网关 | 提示和上下文,以及供路由规则使用的当前工作区名称 | 你团队的网关及其背后的后端。只有团队开启了录制,网关才保留内容,并会在你连接前说明;见连接到团队 |
| GitHub 拉取请求审查 | 仓库所有者、名称、PR 编号、你的令牌 | GitHub |
| 其他 | 无 |
提示和上下文指:光标周围的代码及补全上下文;对话消息及其附件;内联编辑的选区;审查和提交信息的 diff;终端功能的最后输出;用于嵌入的文件分块;以及开启智能体模式时,模型的工具在工作区中读到的内容(文件、搜索结果、git 输出、命令输出)。
工作区索引的重排序器在扩展内运行。P2P 的 DHT 只知道某个密钥可在某个地址访问。twinny 的作者不收集任何使用数据,扩展不会向 twinny.dev 或任何你没有设置的地方发请求。发往你自己服务器的请求可能在你没有操作时发出,例如在本地服务器上加载补全模型的预热。
密钥屏蔽
提示中的 API 密钥、令牌、私钥和密码在请求发出前被替换为 REDACTED_GITHUB_TOKEN_1 之类的占位符,并在回复用到它们的地方换回,因此模型永远看不到真实值,而它写出的代码仍然可用。覆盖对话(包括智能体模式的工具结果)、补全、内联编辑和嵌入。它能识别 GitHub、GitLab、AWS、Stripe、Slack、OpenAI、Anthropic、Google、Hugging Face 和 npm 的令牌格式,以及 PEM 私钥、JWT、URL 中的密码,和代码及 .env 文件中以密钥命名的值;process.env.X 或 <your-key> 这类值不受影响。对话回复会显示 N secrets withheld 及其类型;补全则记录到 Twinny 通道。
twinny.secretShield 决定何时运行:
| 值 | 屏蔽发往以下目标的请求 |
|---|---|
offMachine(默认) | 托管 API、团队网关、已配对设备,以及任何不在本机的服务器(localhost、127.x.x.x、0.0.0.0 和 ::1 算作本机) |
always | 本地服务器也包括在内 |
off | 不屏蔽;提示原样发送 |
团队网关可以在提示到达其后端之前再次屏蔽;见策略。
twinny 写入的文件
| 路径 | 内容 |
|---|---|
~/.twinny/templates/ | 提示词模板 |
~/.twinny/embeddings/<workspace>/ | 工作区索引(LanceDB)和清单 |
~/.twinny/node/ | 命令行节点的身份和受信设备 |
| VS Code 全局状态 | 提供者(默认)、会话、已配对设备、侧边栏中选择的设置、设为始终运行的命令 |
| VS Code 密钥存储 | 扩展的 P2P 身份;团队网关密钥 |
| 扩展全局存储 | twinny.providerStorageLocation 为 file 时的提供者;P2P 主机锁 |
这些都可以删除;twinny 会重建所需内容。