@sakanano-moe/agenthelm 6.7.0 → 6.11.0-rc.1
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/package.json +1 -1
- package/runtime/index.json +6 -6
- package/runtime/plugins/agent-pack/.codex-plugin/plugin.json +1 -1
- package/runtime/plugins/agent-pack/hooks/hooks.json +32 -0
- package/runtime/plugins/agent-pack/plugin.json +1 -1
- package/runtime/plugins/agent-pack/references/local-only.md +126 -0
- package/runtime/plugins/agent-pack/references/nudge.en.md +58 -0
- package/runtime/plugins/agent-pack/references/nudge.md +58 -0
- package/runtime/plugins/agent-pack/runtime/agent_pack_nudge.py +573 -0
- package/runtime/plugins/agent-pack/runtime/agenthelm.py +419 -107
- package/runtime/plugins/agent-pack/runtime/agenthelm_runtime.py +77 -53
- package/runtime/plugins/agent-pack/runtime/i18n_agent_pack.py +78 -0
- package/runtime/plugins/agent-pack/runtime/local_only.py +1130 -0
- package/runtime/plugins/agent-pack/runtime/locale/en.json +385 -0
- package/runtime/plugins/agent-pack/runtime/mcp_server.py +25 -0
- package/runtime/plugins/agent-pack/runtime/nudge_text.py +107 -0
- package/runtime/plugins/agent-pack/skills/agent-pack/SKILL.md +9 -1
- package/runtime/plugins/agents-init/.codex-plugin/plugin.json +1 -1
- package/runtime/plugins/agents-init/content.json +17 -2
- package/runtime/plugins/agents-init/plugin.json +1 -1
- package/runtime/plugins/agents-init/skills/agents-init/AGENT.template.md +47 -0
- package/runtime/plugins/agents-init/skills/agents-init/SKILL.md +39 -1
- package/runtime/plugins/agents-init/skills/agents-init/project.schema.json +404 -70
- package/runtime/plugins/agents-init/skills/agents-init/scripts/adopt.py +596 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/i18n_init.py +78 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/init_project.py +245 -72
- package/runtime/plugins/agents-init/skills/agents-init/scripts/locale/en.json +210 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/regions.py +99 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/scaffold.py +1081 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/test_adopt.py +551 -0
- package/runtime/plugins/agents-init/skills/agents-init/scripts/test_init_project.py +46 -2
- package/runtime/plugins/agents-init/skills/agents-init/scripts/test_scaffold.py +555 -0
- package/runtime/plugins/agents-init/skills/agents-init/skeleton.json +66 -0
- package/runtime/plugins/agents-init/skills/agents-init/skill.json +1 -1
- package/runtime/plugins/opinion-manager/.codex-plugin/plugin.json +1 -1
- package/runtime/plugins/opinion-manager/plugin.json +1 -1
- package/runtime/plugins/opinion-manager/references/inbox.en.md +48 -0
- package/runtime/plugins/opinion-manager/references/inbox.md +48 -0
- package/runtime/plugins/opinion-manager/runtime/context.py +19 -18
- package/runtime/plugins/opinion-manager/runtime/i18n_opinion.py +78 -0
- package/runtime/plugins/opinion-manager/runtime/inbox.py +397 -0
- package/runtime/plugins/opinion-manager/runtime/inbox_text.py +101 -0
- package/runtime/plugins/opinion-manager/runtime/lifecycle.py +45 -44
- package/runtime/plugins/opinion-manager/runtime/locale/en.json +184 -0
- package/runtime/plugins/opinion-manager/runtime/opinion_manager.py +55 -50
- package/runtime/plugins/opinion-manager/runtime/versioned.py +84 -83
- package/runtime/plugins/opinion-manager/skills/opinion-manager/SKILL.md +15 -2
- package/runtime/plugins/project-orchestrator/.codex-plugin/plugin.json +1 -1
- package/runtime/plugins/project-orchestrator/content.json +30 -3
- package/runtime/plugins/project-orchestrator/plugin.json +1 -1
- package/runtime/plugins/project-orchestrator/references/case-workspaces.md +9 -1
- package/runtime/plugins/project-orchestrator/references/case.schema.json +1 -0
- package/runtime/plugins/project-orchestrator/references/sop-interview.md +83 -0
- package/runtime/plugins/project-orchestrator/references/sop.md +156 -0
- package/runtime/plugins/project-orchestrator/runtime/assets.py +52 -57
- package/runtime/plugins/project-orchestrator/runtime/case.py +139 -80
- package/runtime/plugins/project-orchestrator/runtime/case_structure.py +71 -0
- package/runtime/plugins/project-orchestrator/runtime/case_workspace.py +47 -46
- package/runtime/plugins/project-orchestrator/runtime/i18n_orchestrator.py +78 -0
- package/runtime/plugins/project-orchestrator/runtime/locale/en.json +1409 -0
- package/runtime/plugins/project-orchestrator/runtime/memory.py +44 -43
- package/runtime/plugins/project-orchestrator/runtime/private_paths.py +119 -0
- package/runtime/plugins/project-orchestrator/runtime/project_base.py +37 -19
- package/runtime/plugins/project-orchestrator/runtime/project_cli.py +267 -174
- package/runtime/plugins/project-orchestrator/runtime/project_demo.py +130 -48
- package/runtime/plugins/project-orchestrator/runtime/project_maintain.py +524 -134
- package/runtime/plugins/project-orchestrator/runtime/project_menu.py +159 -85
- package/runtime/plugins/project-orchestrator/runtime/project_real.py +191 -106
- package/runtime/plugins/project-orchestrator/runtime/project_write.py +58 -55
- package/runtime/plugins/project-orchestrator/runtime/sop.py +1670 -0
- package/runtime/plugins/project-orchestrator/runtime/sop_structure.py +226 -0
- package/runtime/plugins/project-orchestrator/runtime/wf.py +74 -70
- package/runtime/plugins/project-orchestrator/skills/project-orchestrator/SKILL.md +22 -0
- package/runtime/plugins/project-orchestrator/sop-templates/blank/SOP.en.md +57 -0
- package/runtime/plugins/project-orchestrator/sop-templates/blank/SOP.md +57 -0
- package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/SOP.en.md +77 -0
- package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/SOP.md +77 -0
- package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/templates/digest.en.md +11 -0
- package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/templates/digest.md +11 -0
- package/runtime/plugins/project-orchestrator/sop-templates/video-to-transcript/SOP.en.md +87 -0
- package/runtime/plugins/project-orchestrator/sop-templates/video-to-transcript/SOP.md +87 -0
- package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/SOP.en.md +75 -0
- package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/SOP.md +75 -0
- package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/templates/review.en.md +11 -0
- package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/templates/review.md +12 -0
- package/runtime/plugins/project-orchestrator/templates/CASE.en.md +39 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
{
|
|
2
|
+
"离线且没有缓存的 latest.json": "Offline and no cached latest.json",
|
|
3
|
+
"最近联网失败,稍后再试": "A recent network attempt failed; try again later",
|
|
4
|
+
"无法获取 latest.json:": "Cannot fetch latest.json: ",
|
|
5
|
+
"{0} 无法解析:{1}": "{0} cannot be parsed: {1}",
|
|
6
|
+
"未找到已安装的 opinion-manager": "No installed opinion-manager found",
|
|
7
|
+
"opinion-manager updates 失败": "opinion-manager updates failed",
|
|
8
|
+
"已安装的 agents-init 没有脚手架检查(更新 agents-init 后再检查)": "The installed agents-init has no scaffold check (update agents-init, then check again)",
|
|
9
|
+
"这台机器还没有安装用户级运行时": "The user-level runtime is not installed on this machine yet",
|
|
10
|
+
"、": ", ",
|
|
11
|
+
";其中有可重建目录:{0}": "; rebuildable directories: {0}",
|
|
12
|
+
"项目位于同步盘({0})": "The project is in a synced folder ({0})",
|
|
13
|
+
"多台机器共用同一份项目时:项目文件随同步盘走,但运行时、缓存与 wf 的台账是每台机器各一份;可重建目录(依赖、构建产物)同步很慢,也容易产生冲突副本": "When several machines share one project, the project files travel with the synced folder, but the runtime, caches and wf's ledger exist once per machine; rebuildable directories (dependencies, build output) sync slowly and easily produce conflict copies",
|
|
14
|
+
"运行 agenthelm fix sync-folder 查看指引(只给方案,不改文件、不删内容);不需要就 fix --skip local:sync-folder": "Run agenthelm fix sync-folder for guidance (it only offers options, never changes or deletes files); if you do not need it, fix --skip local:sync-folder",
|
|
15
|
+
"{0} 个插件可更新": "{0} plugin(s) can be updated",
|
|
16
|
+
"(含不兼容变更)": " (includes breaking changes)",
|
|
17
|
+
"{0} 个模板/样例包可更新": "{0} template/sample pack(s) can be updated",
|
|
18
|
+
"({0} 个本地有改动,更新时逐文件确认)": " ({0} with local changes; each file is confirmed on update)",
|
|
19
|
+
"Opinion 有新版本模板或规则": "Opinion has a newer template or rule version",
|
|
20
|
+
"{0} 个旧方式安装待迁移": "{0} legacy install(s) await migration",
|
|
21
|
+
"项目脚手架有 {0} 项差异": "{0} scaffold difference(s) in the project",
|
|
22
|
+
"agenthelm:": "agenthelm: ",
|
|
23
|
+
",": ", ",
|
|
24
|
+
"。运行 `{0} check` 查看详情;更新前会先预览,由你决定。": ". Run `{0} check` for details; updates are previewed first and you decide.",
|
|
25
|
+
" [脚手架] 无法检查:{0}": " [scaffold] cannot check: {0}",
|
|
26
|
+
"(稍后)": " (later)",
|
|
27
|
+
"(期望内容已变化,重新提示)": " (the expected content changed; reminding again)",
|
|
28
|
+
" 处理:fix {0}": " Handle: fix {0}",
|
|
29
|
+
" 需要你自己处理": " You need to handle this yourself",
|
|
30
|
+
" [脚手架] {0}{1}:{2}\n ID {3}{4}": " [scaffold] {0}{1}: {2}\n ID {3}{4}",
|
|
31
|
+
" [脚手架] 决定文件有问题:{0}": " [scaffold] problem with the decisions file: {0}",
|
|
32
|
+
" [脚手架] 同步服务留下了决定文件的冲突副本:": " [scaffold] the sync service left conflict copies of the decisions file: ",
|
|
33
|
+
"(合并到 check-decisions.json 后删除)": " (merge them into check-decisions.json, then delete)",
|
|
34
|
+
" [脚手架] 与期望一致": " [scaffold] matches expectations",
|
|
35
|
+
"({0} 项已跳过)": " ({0} skipped)",
|
|
36
|
+
"(未写理由)": "(no reason given)",
|
|
37
|
+
" [已跳过·{0}] {1}:{2} {3}": " [skipped·{0}] {1}: {2} {3}",
|
|
38
|
+
" 没有被跳过的项。": " Nothing has been skipped.",
|
|
39
|
+
" (另有 {0} 项已被你跳过:check --show-skipped 查看)": " ({0} more skipped by you: see check --show-skipped)",
|
|
40
|
+
" [本机] {0}:{1}\n 影响:{2}\n 处理:{3}\n ID {4}(只记在这台机器上;fix --skip {5} --reason …)": " [this machine] {0}: {1}\n Impact: {2}\n Handle: {3}\n ID {4} (recorded on this machine only; fix --skip {5} --reason …)",
|
|
41
|
+
"云端版本源:{0}": "Cloud version source: {0}",
|
|
42
|
+
"(缓存)": " (cached)",
|
|
43
|
+
"未发现已安装的 agenthelm 插件。": "No installed agenthelm plugin found.",
|
|
44
|
+
"可更新": "update available",
|
|
45
|
+
"最新": "latest",
|
|
46
|
+
"高于云端": "ahead of cloud",
|
|
47
|
+
"版本未知": "version unknown",
|
|
48
|
+
"旧方式安装,待迁移": "legacy install, to be migrated",
|
|
49
|
+
" [旧方式] {0} {1} {2}": " [legacy] {0} {1} {2}",
|
|
50
|
+
"代码": "code",
|
|
51
|
+
"仅模板/样例": "templates/samples only",
|
|
52
|
+
"代码与模板": "code and templates",
|
|
53
|
+
"(": " (",
|
|
54
|
+
")": ")",
|
|
55
|
+
"\n {0} 不兼容:{1}": "\n {0} is incompatible: {1}",
|
|
56
|
+
"\n 更新:{0}": "\n Update: {0}",
|
|
57
|
+
" 内容锁:{0}": " Content lock: {0}",
|
|
58
|
+
"可更新(本地未改动)": "update available (no local changes)",
|
|
59
|
+
"可更新(本地有改动,更新时逐文件确认)": "update available (local changes; each file is confirmed on update)",
|
|
60
|
+
"云端未列出": "not listed by the cloud",
|
|
61
|
+
" [内容] {0} {1} → {2} {3}": " [content] {0} {1} → {2} {3}",
|
|
62
|
+
"\n 本地已改动:": "\n Locally changed: ",
|
|
63
|
+
";": "; ",
|
|
64
|
+
" [Opinion] 有新版本:{0}(用 opinion-manager 预览后确认)": " [Opinion] newer version: {0} (preview with opinion-manager, then confirm)",
|
|
65
|
+
"运行 `{0} install` 预览安装。": "Run `{0} install` to preview the installation.",
|
|
66
|
+
"旧方式安装可用 `{0}` 预览迁移。": "Run `{0}` to preview migrating the legacy installs.",
|
|
67
|
+
"全部为最新。": "Everything is up to date.",
|
|
68
|
+
"latest.json 的 repository 不是 GitHub 仓库:{0}": "latest.json's repository is not a GitHub repository: {0}",
|
|
69
|
+
"发布包含越界路径:{0}": "The release contains a path that escapes the target: {0}",
|
|
70
|
+
"发布包含不支持的条目:{0}": "The release contains an unsupported entry: {0}",
|
|
71
|
+
"{0} 不含 plugins/ 目录": "{0} has no plugins/ directory",
|
|
72
|
+
"云端 latest.json 没有发布 tag 与摘要;请用 --source 指定本地仓库": "The cloud latest.json has no release tag and digest; use --source to point at a local checkout",
|
|
73
|
+
"发布包摘要不符:{0}": "Release digest mismatch: {0}",
|
|
74
|
+
"发布包结构不符合预期": "The release structure is not as expected",
|
|
75
|
+
"未找到 {0} 命令(已查 PATH 与常见安装位置;可用 AGENTHELM_{1} 指定)": "Command {0} not found (checked PATH and common install locations; set AGENTHELM_{1} to point at it)",
|
|
76
|
+
"Claude Code 添加 agenthelm 市场({0})": "Claude Code: add the agenthelm marketplace ({0})",
|
|
77
|
+
"Claude Code 安装 {0}": "Claude Code: install {0}",
|
|
78
|
+
"Codex 添加 agenthelm 市场({0})": "Codex: add the agenthelm marketplace ({0})",
|
|
79
|
+
"Codex 安装 {0}": "Codex: install {0}",
|
|
80
|
+
"安装": "install",
|
|
81
|
+
"Cursor {0} {1} 到 ~/.cursor/plugins/local(重启 Cursor 生效)": "Cursor: {0} {1} into ~/.cursor/plugins/local (restart Cursor to apply)",
|
|
82
|
+
"刷新 Claude Code 的 agenthelm 市场": "Refresh Claude Code's agenthelm marketplace",
|
|
83
|
+
"Claude Code 更新 {0} → {1}": "Claude Code: update {0} → {1}",
|
|
84
|
+
"Codex 升级 agenthelm 市场与已装插件": "Codex: upgrade the agenthelm marketplace and installed plugins",
|
|
85
|
+
"更新": "update",
|
|
86
|
+
"{0}:没有可用的刷新工具": "{0}: no refresh tool available",
|
|
87
|
+
"重新渲染 {0} {1} → {2}": "Re-render {0} {1} → {2}",
|
|
88
|
+
"未找到已安装的 agents-init": "No installed agents-init found",
|
|
89
|
+
"先更新 agents-init 插件,再用新模板预览": "Update the agents-init plugin first, then preview with the new templates",
|
|
90
|
+
"同时存在市场安装与旧方式安装,运行 {0} migrate": "Both a marketplace install and a legacy install exist; run {0} migrate",
|
|
91
|
+
"各客户端版本不一致:": "Versions differ between clients: ",
|
|
92
|
+
"缺少:": "Missing: ",
|
|
93
|
+
"会话内更新检查已关闭": "The in-session update check is turned off",
|
|
94
|
+
"latest.json 的 URL 或本地路径(测试、离线镜像)": "URL or local path of latest.json (for tests and offline mirrors)",
|
|
95
|
+
"项目目录;默认当前目录": "project directory; defaults to the current directory",
|
|
96
|
+
"不检查项目内容": "do not check project contents",
|
|
97
|
+
"只读检查插件、模板/样例与 Opinion 是否落后于云端": "Read-only check whether plugins, templates/samples and Opinion are behind the cloud",
|
|
98
|
+
"只用缓存,不联网": "use the cache only, no network",
|
|
99
|
+
"忽略一天的缓存,立即联网": "ignore the one-day cache and go online now",
|
|
100
|
+
"会话开始时静默调用:有更新才输出一行": "called silently at session start: prints one line only when something can be updated",
|
|
101
|
+
"有可更新项或脚手架差异时退出码为 1(CI 用)": "exit code 1 when anything can be updated or the scaffold differs (for CI)",
|
|
102
|
+
"列出被你跳过的项及理由": "list the items you skipped, with reasons",
|
|
103
|
+
"忽略已记录的决定,重新评估全部脚手架差异": "ignore recorded decisions and re-evaluate every scaffold difference",
|
|
104
|
+
"输出脚手架指纹(骨架状态 + 受检 Profile 字段 + 内容锁 + 命名规则;不含 Opinion、自有字段、已跳过项)": "print the scaffold fingerprint (skeleton state + checked Profile fields + content lock + naming rule; excludes Opinion, your own fields and skipped items)",
|
|
105
|
+
"对方的 JSON": "the other machine's JSON",
|
|
106
|
+
"与 --fingerprint 合用:不带参数时逐项列出这台的明细;带另一台机器 check --fingerprint --output json 的输出文件时,指出两台差在哪里(有差异退出码 1)": "use with --fingerprint: without an argument, list this machine's details item by item; with the output file of check --fingerprint --output json from another machine, show where the two differ (exit code 1 when they do)",
|
|
107
|
+
"经各客户端的原生市场安装 agenthelm 插件(默认预览)": "Install agenthelm plugins through each client's native marketplace (preview by default)",
|
|
108
|
+
"默认安装到检测到的全部客户端": "install to every detected client by default",
|
|
109
|
+
"默认安装全部插件": "install every plugin by default",
|
|
110
|
+
"Cursor 安装用的本地仓库(默认下载发布包)": "local checkout used for Cursor installs (a release is downloaded by default)",
|
|
111
|
+
"市场来源(默认 latest.json 的 GitHub 仓库;可用镜像或本地路径)": "marketplace source (the GitHub repository from latest.json by default; a mirror or local path works)",
|
|
112
|
+
"更新落后的插件与模板/样例(默认预览,确认后 --apply)": "Update plugins and templates/samples that are behind (preview by default; add --apply to confirm)",
|
|
113
|
+
"内容更新:用新模板替换这个本地已改动的文件": "content update: replace this locally modified file with the new template",
|
|
114
|
+
"内容更新:保留这个文件的本地内容": "content update: keep this file's local content",
|
|
115
|
+
"被替换文件的备份目录(项目外)": "backup directory (outside the project) for replaced files",
|
|
116
|
+
"Cursor 更新用的本地仓库(默认下载发布包)": "local checkout used for Cursor updates (a release is downloaded by default)",
|
|
117
|
+
"把旧方式安装(agent-pack 复制 + 软链)迁到市场安装(默认预览)": "Move legacy installs (agent-pack copy + symlink) to marketplace installs (preview by default)",
|
|
118
|
+
"先经市场安装到检测到的客户端": "install through the marketplace to the detected clients first",
|
|
119
|
+
"报告重复安装、版本不一致、旧方式残留与检查开关": "Report duplicate installs, version mismatches, legacy leftovers and check switches",
|
|
120
|
+
"修复项目脚手架差异与更新(等同 project fix;默认预览,--apply 写入;--skip/--unskip 记录决定)": "Fix project scaffold differences and update (same as project fix; preview by default, --apply writes; --skip/--unskip record decisions)",
|
|
121
|
+
"用户级运行时:install / update / use / status(日常只需要 Python,不经过 npx)": "User-level runtime: install / update / use / status (needs only Python, no npx for everyday use)",
|
|
122
|
+
"项目自助入口:找资料、看进展、项目指南、检查(不需要 AI Agent;详见 project --help)": "Project self-service entry: find files, see progress, project guide, checks (no AI Agent needed; see project --help)",
|
|
123
|
+
"输出插件的已安装位置(最新优先),供下游脚本查找": "Print where a plugin is installed (newest first) for downstream scripts",
|
|
124
|
+
"只要这个版本": "only this version",
|
|
125
|
+
"也列出旧方式安装(默认不列,避免清理后才失效)": "also list legacy installs (hidden by default so cleanup does not invalidate them)",
|
|
126
|
+
"预览": "preview",
|
|
127
|
+
"完成": "done",
|
|
128
|
+
"阻塞": "blocked",
|
|
129
|
+
"失败": "failed",
|
|
130
|
+
"以上为预览;确认后追加 --apply 执行。": "The above is a preview; add --apply to run it.",
|
|
131
|
+
"(已安装的 project-orchestrator 版本过旧)": " (the installed project-orchestrator is too old)",
|
|
132
|
+
"agenthelm project 需要 project-orchestrator 的项目入口,但没有找到{0}。\n · 更新插件:{1} update,或从发布包安装运行时(见 INSTALL.md)": "agenthelm project needs the project entry of project-orchestrator, but none was found{0}.\n · Update the plugins: {1} update, or install the runtime from a release (see INSTALL.md)",
|
|
133
|
+
"当前目录不在 agenthelm 项目里": "The current directory is not in an agenthelm project",
|
|
134
|
+
"无法计算脚手架指纹:{0}": "Cannot compute the scaffold fingerprint: {0}",
|
|
135
|
+
"脚手架指纹 {0}": "Scaffold fingerprint {0}",
|
|
136
|
+
"读不了对方的输出:{0}": "Cannot read the other machine's output: {0}",
|
|
137
|
+
"对方的文件里没有指纹明细:请在对方机器运行 agenthelm check --fingerprint --output json 并保存输出": "The other file has no fingerprint details: run agenthelm check --fingerprint --output json on the other machine and save the output",
|
|
138
|
+
"两台机器的脚手架一致。": "The scaffolds of the two machines match.",
|
|
139
|
+
"有 {0} 处不同:": "{0} difference(s):",
|
|
140
|
+
"没有发现问题。": "No problems found.",
|
|
141
|
+
"没有需要更新的内容。": "Nothing to update.",
|
|
142
|
+
" [旧安装] {0} {1}: {2}": " [legacy install] {0} {1}: {2}",
|
|
143
|
+
"(需手动处理)": " (needs manual handling)",
|
|
144
|
+
"旧安装已移入:{0}(含 migration.json 清单,可按清单恢复)": "Legacy installs moved to: {0} (with a migration.json manifest to restore from)",
|
|
145
|
+
"{0} 不是 agenthelm 发布内容(缺少 index.json 或 plugins/<插件>)": "{0} is not agenthelm release content (index.json or plugins/<plugin> is missing)",
|
|
146
|
+
"--source 指向仓库检出、解压后的发布包目录或 .tar.gz 发布包": "--source points at a repository checkout, an unpacked release directory or a .tar.gz release",
|
|
147
|
+
"{0}/index.json 没有发布版本号": "{0}/index.json has no release version",
|
|
148
|
+
"{0} 在 PATH 上({1})": "{0} is on PATH ({1})",
|
|
149
|
+
"终端里的 {0} 命令目前不可用": "The {0} command in the terminal is not available right now",
|
|
150
|
+
"本次由 {0} 提供;{1},{2}。": "Provided this time by {0}; {1}, {2}.",
|
|
151
|
+
"项目根目录的 ./menu 会通过客户端插件兜底,所以现在能用;没有 AI 客户端或客户端插件被移除时打不开。wf 是单独的查找命令,运行时不会提供它:用 ./menu find 词 或 agenthelm project find 词 代替": "The project's ./menu falls back to the client plugin, so it works now; it will not open without an AI client or when the client plugin is removed. wf is a separate lookup command the runtime does not provide: use ./menu find <words> or agenthelm project find <words> instead",
|
|
152
|
+
"安装运行时(agenthelm runtime install --apply,只写用户数据目录);要在终端直接输入 agenthelm 时加 --link-bin ~/.local/bin(只链接 agenthelm,不含 wf)": "Install the runtime (agenthelm runtime install --apply, writes only the user data directory); to type agenthelm directly in a terminal, add --link-bin ~/.local/bin (links agenthelm only, not wf)",
|
|
153
|
+
"运行时 {0} 已安装,但内容与来源不同(来源:{1})": "Runtime {0} is already installed but its content differs from the source (source: {1})",
|
|
154
|
+
"已装:{0};同一版本不会被改写": "Installed: {0}; the same version is never rewritten",
|
|
155
|
+
"确认要换掉时先手动移走该目录(例如移到 ~/.agent-pack/recovery/),再重新安装": "To replace it, move that directory away yourself first (for example to ~/.agent-pack/recovery/), then install again",
|
|
156
|
+
"用户数据目录(新版本,旧版本保留)": "user data directory (new version; old versions are kept)",
|
|
157
|
+
"切换当前版本 → {0}": "switch the current version → {0}",
|
|
158
|
+
"{0} 已存在且不是本运行时的链接,不会覆盖": "{0} already exists and is not a link to this runtime; it will not be overwritten",
|
|
159
|
+
"换一个 --link-bin 目录,或手动处理该文件": "use another --link-bin directory, or handle that file yourself",
|
|
160
|
+
"命令链接(指向当前运行时)": "command link (points at the current runtime)",
|
|
161
|
+
"复制后的内容与来源摘要不一致,已放弃安装": "The copied content does not match the source digest; the installation was abandoned",
|
|
162
|
+
"重新读取:当前运行时 {0},命令 {1}": "Read back: current runtime {0}, command {1}",
|
|
163
|
+
"回读不一致:请运行 agenthelm runtime status 查看": "Read-back mismatch: run agenthelm runtime status to look",
|
|
164
|
+
"(无)": "(none)",
|
|
165
|
+
"没有安装运行时 {0}": "Runtime {0} is not installed",
|
|
166
|
+
"已安装:{0}": "Installed: {0}",
|
|
167
|
+
"本地发布包 {0}": "local release {0}",
|
|
168
|
+
"本地目录 {0}": "local directory {0}",
|
|
169
|
+
"随附内容({0})": "bundled content ({0})",
|
|
170
|
+
"GitHub Release(已核对摘要)": "GitHub Release (digest verified)",
|
|
171
|
+
"无法下载发布包:{0}": "Cannot download the release: {0}",
|
|
172
|
+
"离线时用 --source 指向发布包(.tar.gz)或仓库检出": "Offline: use --source to point at a release (.tar.gz) or a repository checkout",
|
|
173
|
+
"下载地址见 https://github.com/lc4t/agenthelm/releases": "Download from https://github.com/lc4t/agenthelm/releases",
|
|
174
|
+
"当前运行时、已装版本与可用更新": "The current runtime, installed versions and available updates",
|
|
175
|
+
"安装运行时(默认用本命令随附的内容;默认预览)": "Install the runtime (uses the content bundled with this command by default; preview by default)",
|
|
176
|
+
"联网安装最新发布版本并切换(默认预览)": "Download and install the latest release, then switch to it (preview by default)",
|
|
177
|
+
"切换到已安装的某个版本(默认预览)": "Switch to an installed version (preview by default)",
|
|
178
|
+
"latest.json 的 URL 或本地路径": "URL or local path of latest.json",
|
|
179
|
+
"本地目录或 .tar.gz 发布包(离线安装)": "local directory or .tar.gz release (offline install)",
|
|
180
|
+
"在这个目录建 agenthelm 命令链接(例如 ~/.local/bin)": "create the agenthelm command link in this directory (for example ~/.local/bin)",
|
|
181
|
+
"联网下载发布包,而不用随附内容": "download a release instead of using the bundled content",
|
|
182
|
+
"只用缓存的版本信息": "use cached version information only",
|
|
183
|
+
"agenthelm runtime 目前只支持 macOS 与 Linux。": "agenthelm runtime currently supports only macOS and Linux.",
|
|
184
|
+
"当前运行时:{0}({1})": "Current runtime: {0} ({1})",
|
|
185
|
+
"当前运行时:未安装": "Current runtime: not installed",
|
|
186
|
+
"本次命令来自:{0}": "This command comes from: {0}",
|
|
187
|
+
"有新版本 {0}:agenthelm runtime update 预览": "New version {0} available: preview with agenthelm runtime update",
|
|
188
|
+
"安装:agenthelm runtime install(预览)→ 加 --apply 执行": "Install: agenthelm runtime install (preview) → add --apply to run it",
|
|
189
|
+
"已切换": "Switched",
|
|
190
|
+
"将切换": "Will switch",
|
|
191
|
+
"{0}:{1} → {2}": "{0}: {1} → {2}",
|
|
192
|
+
"以上为预览;加 --apply 执行。": "The above is a preview; add --apply to run it.",
|
|
193
|
+
"运行时 {0}(来源:{1})": "Runtime {0} (source: {1})",
|
|
194
|
+
" 将写入:{0}({1})": " Will write: {0} ({1})",
|
|
195
|
+
" 已是当前版本,无需改动。": " Already the current version; nothing to change.",
|
|
196
|
+
" 回到旧版本:{0}": " Back to the old version: {0}",
|
|
197
|
+
" 直接用命令:把 {0} 加入 PATH,或重新运行并加 --link-bin ~/.local/bin": " To use the command directly: add {0} to PATH, or run again with --link-bin ~/.local/bin",
|
|
198
|
+
"出错:{0}": "Error: {0}",
|
|
199
|
+
"agenthelm:在 Claude Code、Codex、Cursor 间安装、检查与更新 agenthelm 插件。": "agenthelm: install, check and update the agenthelm plugins across Claude Code, Codex and Cursor.",
|
|
200
|
+
"agenthelm 用户级运行时:把四个插件的确定性工具装进用户数据目录,日常只需要 Python 3.11+。": "agenthelm user-level runtime: put the deterministic tools of the four plugins into the user data directory, so everyday use needs only Python 3.11+.",
|
|
201
|
+
"只属于这台机器的目录(.venv、node_modules、缓存)不进云同步盘:check / fix / config(详见 local-only --help)": "keep directories that belong to this machine only (.venv, node_modules, caches) out of the cloud-sync folder: check / fix / config (see local-only --help)",
|
|
202
|
+
"无法检查本机专属目录": "Cannot check the machine-local directories",
|
|
203
|
+
"只影响同步盘相关提示": "Only affects the sync-folder notices",
|
|
204
|
+
"运行 agenthelm local-only check 查看详情": "Run agenthelm local-only check for details",
|
|
205
|
+
"同步目录里有 {0} 项本机专属目录需要处理": "{0} machine-local directory item(s) in the sync folder need attention",
|
|
206
|
+
"本机环境:对方没有 local-only 明细(对方的 agent-pack 较旧或项目还没配置)": "Local environment: the other machine has no local-only detail (its agent-pack is older or the project is not configured there yet)",
|
|
207
|
+
"本机环境指纹 {0}": "Local environment fingerprint {0}",
|
|
208
|
+
"本机环境:这台没有 local-only 配置,对方有": "Local environment: this machine has no local-only configuration, the other one does",
|
|
209
|
+
"其他同步服务": "Other sync service",
|
|
210
|
+
"npm 会把软链接的 node_modules 换成真实目录(实测 10.9.4),依赖会回到同步盘里": "npm replaces a symlinked node_modules with a real directory (observed with 10.9.4), so the dependencies end up in the sync folder again",
|
|
211
|
+
"pnpm 对软链接的 node_modules 会安装失败并删掉链接目标(实测 10.28.0)": "pnpm fails to install into a symlinked node_modules and deletes the link target (observed with 10.28.0)",
|
|
212
|
+
"环境变量 PYTHONPYCACHEPREFIX=<本机目录>": "environment variable PYTHONPYCACHEPREFIX=<local directory>",
|
|
213
|
+
"环境变量 RUFF_CACHE_DIR=<本机目录>": "environment variable RUFF_CACHE_DIR=<local directory>",
|
|
214
|
+
"环境变量 MYPY_CACHE_DIR=<本机目录>": "environment variable MYPY_CACHE_DIR=<local directory>",
|
|
215
|
+
"pytest 选项 -o cache_dir=<本机目录>(或在 pytest 配置里写 cache_dir)": "pytest option -o cache_dir=<local directory> (or set cache_dir in the pytest configuration)",
|
|
216
|
+
"需要处理": "Needs attention",
|
|
217
|
+
"建议": "Suggested",
|
|
218
|
+
"可外置": "can be externalized",
|
|
219
|
+
"同步目录里应避免": "avoid in a sync folder",
|
|
220
|
+
"未测试": "untested",
|
|
221
|
+
"未知": "unknown",
|
|
222
|
+
"必须是项目内的相对路径": "must be a relative path inside the project",
|
|
223
|
+
"不能在版本库目录里": "must not be inside a version-control directory",
|
|
224
|
+
"这类目录没有实测过软链接外置:确认后可用 --externalize 指定": "Externalizing this kind of directory with a symlink has not been tested: once you are sure, name it with --externalize",
|
|
225
|
+
"然后按项目文档重新安装依赖": "then reinstall the dependencies following the project documentation",
|
|
226
|
+
"没有需要处理的项。\n": "Nothing needs attention.\n",
|
|
227
|
+
"扫描超过时间预算,结果只覆盖了已扫描的部分:用 local-only check --mode full 做完整扫描": "The scan ran out of its time budget and covers only what was scanned: run local-only check --mode full for a complete scan",
|
|
228
|
+
"路径被一个普通文件占用": "The path is occupied by a regular file",
|
|
229
|
+
"无法外置": "Cannot be externalized",
|
|
230
|
+
"整个目录随项目同步:同步很慢,不同系统或架构的二进制还会互相覆盖": "The whole directory is synced with the project: syncing is slow, and binaries for different systems or architectures overwrite each other",
|
|
231
|
+
"整个目录随项目同步,但这一类目前没有已验证的外置办法": "The whole directory is synced with the project, and there is no verified way yet to externalize this kind",
|
|
232
|
+
" 或 ": " or ",
|
|
233
|
+
"(项目根的散文件)": " (loose files in the project root)",
|
|
234
|
+
"已超过": "has exceeded",
|
|
235
|
+
"接近": "is approaching",
|
|
236
|
+
"复制到本机目录后文件数或字节数对不上,已撤销,原目录没有动": "The file count or byte count does not match after copying to the local directory; rolled back, the original directory is untouched",
|
|
237
|
+
"Windows 上只支持检查,不支持外置(建立软链接需要特权)": "On Windows only checking is supported, not externalizing (creating symlinks needs privileges)",
|
|
238
|
+
"创建": "Create",
|
|
239
|
+
"云同步:": "Cloud sync: ",
|
|
240
|
+
"配置:": "Configuration: ",
|
|
241
|
+
"没有发现需要处理的项。": "Nothing found that needs attention.",
|
|
242
|
+
"以上为预览;确认后追加 --apply 执行。移动失败会整体撤销。": "The above is a preview; add --apply after you confirm to run it. If a move fails, everything is rolled back.",
|
|
243
|
+
"已执行。重新运行 local-only check 核对;在其他设备上同步完成后同样运行 fix --apply 建立它们各自的本机目录。": "Done. Run local-only check again to verify; once syncing finishes on the other devices, run fix --apply there too to create their own local directories.",
|
|
244
|
+
"只属于这台机器的目录不进云同步盘": "Keep directories that belong to this machine out of the cloud-sync folder",
|
|
245
|
+
"只读检查(云同步、外置链接、HOME、体积、包管理器)": "read-only check (cloud sync, externalized links, HOME, size, package managers)",
|
|
246
|
+
"quick 只看浅层且不统计体积;full 完整扫描(默认)": "quick looks only at the top levels and does not measure size; full scans everything (default)",
|
|
247
|
+
"有需要处理的项时退出码为 1": "exit with code 1 when something needs attention",
|
|
248
|
+
"忽略已记录的决定": "ignore recorded decisions",
|
|
249
|
+
"输出本机环境指纹与明细(用于跨设备对比)": "print the local environment fingerprint and detail (for comparing devices)",
|
|
250
|
+
"与 --fingerprint 合用:和另一台机器的输出比较": "use with --fingerprint: compare with the output from another machine",
|
|
251
|
+
"外置、补建目标目录、调整阈值(默认预览,--apply 才写)": "externalize, create missing target directories, adjust thresholds (preview by default; --apply writes)",
|
|
252
|
+
"路径": "path",
|
|
253
|
+
"外置这个项目内路径(可重复)": "externalize this path inside the project (repeatable)",
|
|
254
|
+
"目录=MB": "dir=MB",
|
|
255
|
+
"提高某个目录的体积阈值(可重复);可写 目录=MB/文件数": "raise the size threshold of a directory (repeatable); you can write dir=MB/files",
|
|
256
|
+
"外置后在本机运行重建命令(uv sync / yarn install 等)": "after externalizing, run the rebuild command on this machine (uv sync / yarn install and so on)",
|
|
257
|
+
"显示生效的配置与文件位置": "show the effective configuration and file locations",
|
|
258
|
+
"顶层必须是对象": "the top level must be an object",
|
|
259
|
+
"yarn 2 及以上(PnP / node-modules 链接方式)未测试": "yarn 2 and later (PnP / node-modules linker) is untested",
|
|
260
|
+
"local-only 配置有问题": "The local-only configuration has problems",
|
|
261
|
+
"有问题的配置项不生效,其余按默认处理": "Items with problems are ignored; the rest follow the defaults",
|
|
262
|
+
"这台机器的 HOME 与项目约定不一致": "This machine's HOME differs from the one the project records",
|
|
263
|
+
"软链接的文本必须在所有设备上相同;不一致时 fix 拒绝建立或修改链接,已有链接在这台机器上也可能悬空": "The text of a symlink must be identical on every device; when it differs, fix refuses to create or change links, and existing links may dangle on this machine",
|
|
264
|
+
"配置里有外置条目,但缺少 project_id 或 home:运行 fix --apply 补全": "The configuration has externalized entries but lacks project_id or home: run fix --apply to fill them in",
|
|
265
|
+
"同步目录里有只属于运行中进程的文件": "The sync folder contains files that belong to running processes",
|
|
266
|
+
"SQLite 的 -wal/-shm、pid、socket 文件被多台设备同时同步会损坏数据库或误导进程": "SQLite -wal/-shm, pid and socket files synced between several devices can corrupt the database or mislead processes",
|
|
267
|
+
"同步服务留下了冲突副本": "The sync service left conflict copies",
|
|
268
|
+
"两台设备改了同一个文件,其中一份只剩在副本里": "Two devices changed the same file and one of the versions now exists only in the copy",
|
|
269
|
+
"然后在项目里运行 {0}": "then run {0} in the project",
|
|
270
|
+
"建立本机目录与链接({0});{1}": "Create the local directory and link ({0}); {1}",
|
|
271
|
+
"这台机器上用到它的命令会因为缺少依赖失败": "Commands that use it on this machine will fail because dependencies are missing",
|
|
272
|
+
"依赖回到了同步盘里": "The dependencies are back in the sync folder",
|
|
273
|
+
"各设备的链接文本不同会造成同步冲突或悬空": "Different link text on different devices causes sync conflicts or dangling links",
|
|
274
|
+
"缓存会不断变化,每次变化都触发同步": "Caches change constantly, and every change triggers a sync",
|
|
275
|
+
"在同步服务里把它设为不同步,或移出同步目录(本工具不替你做;普通内容外置会让其他设备看不到)": "Exclude it from syncing in the sync service, or move it out of the sync folder (this tool will not do it for you; externalizing ordinary content would hide it from other devices)",
|
|
276
|
+
"同步范围太大会拖慢同步,也容易产生冲突副本": "A sync scope that is too large slows syncing down and makes conflict copies more likely",
|
|
277
|
+
"项目配置有问题,先修正再处理(不会覆盖它):": "The project configuration has problems; fix it first (it will not be overwritten): ",
|
|
278
|
+
"未识别到同步服务——不需要外置,用什么都行": "No sync service detected: no need to externalize, anything works",
|
|
279
|
+
"(还没有;fix --apply 会创建)": " (none yet; fix --apply will create it)",
|
|
280
|
+
"说明:{0}": "Note: {0}",
|
|
281
|
+
"项目目录(默认当前目录)": "project directory (default: the current directory)",
|
|
282
|
+
"把这个目录当作 HOME(测试或隔离用)": "treat this directory as HOME (for tests or isolation)",
|
|
283
|
+
"{0}:limits 必须是对象": "{0}: limits must be an object",
|
|
284
|
+
"{0}:{1} 必须是字符串数组": "{0}: {1} must be an array of strings",
|
|
285
|
+
"{0}:schema_version 必须是 {1}": "{0}: schema_version must be {1}",
|
|
286
|
+
"{0}:items 必须是 [{{\"path\": …, \"kind\": …}}] 数组": "{0}: items must be an array of [{{\"path\": …, \"kind\": …}}]",
|
|
287
|
+
"项目在 ~/Documents 或 ~/Desktop 下:如果开了 iCloud“桌面与文稿”同步,路径上看不出来,请在配置里声明 sync_service(fix --service icloud)": "The project is under ~/Documents or ~/Desktop: if iCloud \"Desktop & Documents\" sync is on, the path does not show it, so declare sync_service in the configuration (fix --service icloud)",
|
|
288
|
+
"有 {0} 个文件尚未下载到本机(iCloud 占位文件):读取它们会触发下载,agenthelm 的扫描不会读取这些文件": "{0} file(s) are not downloaded to this machine yet (iCloud placeholders): reading them triggers a download; the agenthelm scan does not read them",
|
|
289
|
+
"XDG_DATA_HOME={0}:外置目录固定在 {1},不跟随这个变量(链接文本要各设备一致)": "XDG_DATA_HOME={0}: the externalized directory stays at {1} and does not follow this variable (link text must be identical on every device)",
|
|
290
|
+
"{0} 既不是目录也不是链接": "{0} is neither a directory nor a link",
|
|
291
|
+
",约 {0}{1}、{2} 个文件": ", about {0}{1}, {2} file(s)",
|
|
292
|
+
"local-only 配置不同(project_id / 同步服务 / 外置条目):等项目文件同步完成后再比较": "The local-only configuration differs (project_id / sync service / externalized entries): compare again after the project files finish syncing",
|
|
293
|
+
"这台机器的 HOME({0})与项目约定({1})不一致:拒绝建立或修改链接": "This machine's HOME ({0}) differs from the one the project records ({1}): refusing to create or change links",
|
|
294
|
+
"同步服务只能是 {0}": "The sync service must be one of: {0}",
|
|
295
|
+
"。注意:这不是已知可重建的目录,其他设备将看不到它的内容": ". Note: this is not a known rebuildable directory, and other devices will not see its contents",
|
|
296
|
+
"HOME:{0}(项目 {1},本机 {2})": "HOME: {0} (project {1}, this machine {2})",
|
|
297
|
+
"一致": "same",
|
|
298
|
+
"不一致": "different",
|
|
299
|
+
"外置条目 {0}:{1} → {2}": "Externalized entry {0}: {1} → {2}",
|
|
300
|
+
"[{0}] {1}\n 原因:{2}\n 影响:{3}": "[{0}] {1}\n Reason: {2}\n Impact: {3}",
|
|
301
|
+
" 不处理:{0}": " Not handled: {0}",
|
|
302
|
+
"声明同步服务:{0}": "declare the sync service: {0}",
|
|
303
|
+
"且不超过 1": " and at most 1",
|
|
304
|
+
"{0} 无法读取:{1}": "{0} cannot be read: {1}",
|
|
305
|
+
"{0}:{1} 必须是非空字符串": "{0}: {1} must be a non-empty string",
|
|
306
|
+
"{0}:sync_service 只能是 {1}": "{0}: sync_service must be one of: {1}",
|
|
307
|
+
"项目记录的是 {0},这台是 {1}": "The project records {0}; this machine has {1}",
|
|
308
|
+
"node_modules 无法外置到本机,会随项目同步": "node_modules cannot be externalized to this machine and will sync with the project",
|
|
309
|
+
" 等 {0} 个": " and others ({0} in all)",
|
|
310
|
+
"这台机器还没有安装 {0}": "{0} is not installed on this machine yet",
|
|
311
|
+
"链接 {0} 指向 {1},本机上没有这个目录": "The link {0} points to {1}, which does not exist on this machine",
|
|
312
|
+
"不装好就无法使用 {0};此时直接运行 uv sync 之类的命令会报“File exists”": "{0} is unusable until it is set up; running commands such as uv sync directly now fails with \"File exists\"",
|
|
313
|
+
"项目声明了外置的 {0},这台机器上还没有": "The project declares {0} as externalized, but this machine does not have it yet",
|
|
314
|
+
"{0} 既不是链接也不存在(链接可能还没同步过来,或同步服务不同步软链接)": "{0} is neither a link nor present (the link may not have synced yet, or the sync service does not sync symlinks)",
|
|
315
|
+
"{0} 又变回了真实目录": "{0} is a real directory again",
|
|
316
|
+
"本应是指向 {0} 的链接;常见原因是 npm install 或手工重装把链接换掉了": "It should be a link to {0}; the usual cause is npm install or a manual reinstall replacing the link",
|
|
317
|
+
"{0} 的链接指向了别处": "The link {0} points somewhere else",
|
|
318
|
+
"期望 {0},实际 {1}": "expected {0}, found {1}",
|
|
319
|
+
"先处理这个文件": "Deal with this file first",
|
|
320
|
+
"同步目录里有本机专属目录 {0}": "The sync folder contains the machine-local directory {0}",
|
|
321
|
+
"{0}({1})是真实目录{2}": "{0} ({1}) is a real directory{2}",
|
|
322
|
+
"同步目录里有 {0} 个工具缓存目录": "The sync folder contains {0} tool cache directory(ies)",
|
|
323
|
+
" 等": " and others",
|
|
324
|
+
"{0} 个文件": "{0} file(s)",
|
|
325
|
+
"确认这个体积正常,把阈值提到 {0:g} MB 或 {1} 个文件({2})": "Confirm the size is normal and raise the threshold to {0:g} MB or {1} files ({2})",
|
|
326
|
+
"不再提示(agenthelm fix --skip local:size:{0} --reason …;只记在这台机器上)": "Stop reminding (agenthelm fix --skip local:size:{0} --reason …; recorded on this machine only)",
|
|
327
|
+
"{0} 的体积{1}阈值": "The size of {0} {1} the threshold",
|
|
328
|
+
"{0}、{1} 个文件;阈值 {2}(达到 {3:.0%} 开始提示)": "{0}, {1} file(s); threshold {2} (reminders start at {3:.0%})",
|
|
329
|
+
"HOME 不同:这台 {0},对方 {1}(外置链接要求一致)": "HOME differs: this machine {0}, the other {1} (externalized links require them to match)",
|
|
330
|
+
"{0} 的上级 {1} 是符号链接,拒绝处理": "The parent {1} of {0} is a symbolic link; refusing to proceed",
|
|
331
|
+
"把 {0}({1} 个文件,{2})移到 {3},原位置建软链接": "Move {0} ({1} file(s), {2}) to {3} and create a symlink in its place",
|
|
332
|
+
"把 {0} 的阈值提到 {1}(写入项目配置)": "Raise the threshold of {0} to {1} (written to the project configuration)",
|
|
333
|
+
"{0}项目配置 {1}(随项目同步;project_id={2},home={3})": "{0} the project configuration {1} (synced with the project; project_id={2}, home={3})",
|
|
334
|
+
"{0}({1})": "{0} ({1})",
|
|
335
|
+
"已声明": "declared",
|
|
336
|
+
"按路径识别": "detected from the path",
|
|
337
|
+
"包管理器 {0}:{1}({2})": "Package manager {0}: {1} ({2})",
|
|
338
|
+
"体积 {0}:{1}、{2} 个文件({3:.0%} 的阈值)": "Size {0}: {1}, {2} file(s) ({3:.0%} of the threshold)",
|
|
339
|
+
"旧配置已备份到 {0}": "The old configuration was backed up to {0}",
|
|
340
|
+
"--raise-limit 的格式是 <目录>=<MB> 或 <目录>=<MB>/<文件数>:{0}": "--raise-limit takes <dir>=<MB> or <dir>=<MB>/<files>: {0}",
|
|
341
|
+
"{0}:limits.{1} 必须是正数": "{0}: limits.{1} must be a positive number",
|
|
342
|
+
"用户配置 {0}": "user configuration {0}",
|
|
343
|
+
"{0}:items 里的 {1} {2}": "{0}: item {1} in items {2}",
|
|
344
|
+
"{0} 的 limits.overrides.{1}": "limits.overrides.{1} of {0}",
|
|
345
|
+
"让各台设备的 HOME 路径一致(例如相同的用户名),或在配置里核对 home 字段": "Make HOME the same on every device (for example the same user name), or check the home field in the configuration",
|
|
346
|
+
"把数据库、pid、socket 放到项目外(例如 ~/.local/state),或在同步服务里排除这些文件": "Move the database, pid and socket files outside the project (for example ~/.local/state), or exclude them in the sync service",
|
|
347
|
+
"比对后合并进原文件并删除副本(命名规则按 Dropbox 的“conflicted copy”,iCloud 的未核对)": "Compare, merge into the original file and delete the copy (naming follows Dropbox's \"conflicted copy\"; iCloud's has not been verified)",
|
|
348
|
+
"这是你自己的链接就保持不动并在配置里去掉该条目;否则手动改回期望的目标": "If this is your own link, leave it alone and drop the entry from the configuration; otherwise change it back to the expected target by hand",
|
|
349
|
+
"外置到本机并在原位置建链接({0})": "Externalize to this machine and create a link in place ({0})",
|
|
350
|
+
"{0}:{1};不外置(改用 yarn 经典版或 bun 后再来)": "{0}: {1}; not externalized (switch to classic yarn or bun and come back)",
|
|
351
|
+
"{0}:已经是指向别处的链接({1}),不替你改": "{0}: it is already a link to somewhere else ({1}); it will not be changed for you",
|
|
352
|
+
"建立本机目录 {0}(链接已存在)": "Create the local directory {0} (the link already exists)",
|
|
353
|
+
"{0}:找不到锁文件,无法推断重建命令(不重建)": "{0}: no lock file found, so the rebuild command cannot be inferred (not rebuilt)",
|
|
354
|
+
"(没有 local-only 配置)": "(no local-only configuration)",
|
|
355
|
+
"两台机器的本机环境一致。": "The local environments of the two machines match.",
|
|
356
|
+
"同步目录里用 {0}({1})": "The sync folder uses {0} ({1})",
|
|
357
|
+
"({0})": " ({0})",
|
|
358
|
+
"{0}:这台 {1},对方 {2}": "{0}: this machine {1}, the other {2}",
|
|
359
|
+
"{0}:{1}": "{0}: {1}",
|
|
360
|
+
"{0}:本机目标 {1} 已有内容,先确认哪一份要保留": "{0}: the local target {1} already has content; decide which copy to keep first",
|
|
361
|
+
"建立本机目录 {0} 和软链接 {1}": "Create the local directory {0} and the symlink {1}",
|
|
362
|
+
"{0}:被一个普通文件占用": "{0}: occupied by a regular file",
|
|
363
|
+
"{0}:本机没有 {1},不重建": "{0}: {1} is not available on this machine; not rebuilt",
|
|
364
|
+
"项目配置:{0}({1})": "Project configuration: {0} ({1})",
|
|
365
|
+
"存在": "exists",
|
|
366
|
+
"不存在": "does not exist",
|
|
367
|
+
"用户配置:{0} 的 local_only 段": "User configuration: the local_only section of {0}",
|
|
368
|
+
"外置目录根:{0}": "Externalized directory root: {0}",
|
|
369
|
+
"阈值:{0}": "Thresholds: {0}",
|
|
370
|
+
"默认保持同步:{0}": "Kept in sync by default: {0}",
|
|
371
|
+
"修正 {0} 后重新检查": "Fix {0}, then check again",
|
|
372
|
+
"尽量改用 yarn(经典版)或 bun,它们实测可以把 node_modules 外置;换包管理器会改 lock 文件,由你决定": "Prefer yarn (classic) or bun, which were observed to externalize node_modules; switching package managers changes the lock file, which is your decision",
|
|
373
|
+
"重新外置({0});目标目录已有内容时需要你先处理": "Externalize again ({0}); if the target directory already has content, you need to deal with it first",
|
|
374
|
+
"用工具自带的环境变量把缓存放到 {0}/…(实测 PYTHONPYCACHEPREFIX、RUFF_CACHE_DIR、MYPY_CACHE_DIR 与 pytest -o cache_dir 均有效)": "Use each tool's own environment variable to put caches under {0}/… (PYTHONPYCACHEPREFIX, RUFF_CACHE_DIR, MYPY_CACHE_DIR and pytest -o cache_dir were all observed to work)",
|
|
375
|
+
"外置条目 {0}:只有{1}声明了": "Externalized entry {0}: only {1} declares it",
|
|
376
|
+
"这台": "this machine",
|
|
377
|
+
"对方": "the other machine",
|
|
378
|
+
"外置条目 {0}:链接文本不同({1} ≠ {2})": "Externalized entry {0}: the link text differs ({1} ≠ {2})",
|
|
379
|
+
"外置条目 {0}:这台 {1},对方 {2}": "Externalized entry {0}: this machine {1}, the other {2}",
|
|
380
|
+
"在 {0} 运行 {1}": "Run {1} in {0}",
|
|
381
|
+
"{0} 建链接后核对失败": "Verification failed after creating the link for {0}",
|
|
382
|
+
"本机目标目录 {0} 已有内容": "The local target directory {0} already has content",
|
|
383
|
+
"读不了对方的输出(需要对方运行 local-only check --fingerprint --output json):{0}": "Cannot read the other machine's output (it needs to run local-only check --fingerprint --output json): {0}",
|
|
384
|
+
"重建失败({0},退出码 {1}):": "Rebuild failed ({0}, exit code {1}): "
|
|
385
|
+
}
|
|
@@ -115,6 +115,22 @@ TOOLS = [
|
|
|
115
115
|
"additionalProperties": False,
|
|
116
116
|
},
|
|
117
117
|
},
|
|
118
|
+
{
|
|
119
|
+
"name": "agent_pack_cloud_sync_safety_check",
|
|
120
|
+
"title": "Check Cloud-Sync Safety of a Project",
|
|
121
|
+
"description": "Read-only. Inspect a project that lives (or may live) inside an iCloud Drive, Dropbox, OneDrive or Google Drive folder and report anything that should stay on this machine but would be synced: .venv and other virtualenvs, node_modules, tool caches, SQLite -wal/-shm files, plus conflict copies, directories close to or over the configured size limits, npm/pnpm use (their node_modules cannot be moved out of the synced folder; yarn classic and bun can), whether externalized links point at this machine's local store and still exist (a missing target means dependencies are not installed on this device), and whether HOME matches the project's recorded HOME (a hard requirement for the links). Returns structured findings with ids, severity (attention=true means act now), the evidence, and the exact CLI command to run for each fix. It never changes files; to fix, run the returned `agenthelm local-only fix` command (preview by default, --apply to write) or ask the user. Findings the user already dismissed on this machine are left out and listed under `skipped`. Projects that are not in a synced folder and have no local-only configuration return no findings.",
|
|
122
|
+
"inputSchema": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"properties": {
|
|
125
|
+
"project": {"type": "string", "description": "Project directory (any folder inside an agenthelm project works)."},
|
|
126
|
+
"mode": {"type": "string", "enum": ["quick", "standard", "full"], "default": "standard",
|
|
127
|
+
"description": "quick: shallow scan without sizes (about 1.5 s); standard: complete scan within a 6 s budget; full: complete scan, up to 2 minutes."},
|
|
128
|
+
"home": {"type": "string", "description": "Treat this directory as HOME (testing or isolation)."},
|
|
129
|
+
},
|
|
130
|
+
"required": ["project"],
|
|
131
|
+
"additionalProperties": False,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
118
134
|
{
|
|
119
135
|
"name": "agent_pack_transfer",
|
|
120
136
|
"title": "Transfer Skills and MCP Servers",
|
|
@@ -233,6 +249,15 @@ def _call(name: str, arguments: dict[str, Any]) -> dict[str, Any]:
|
|
|
233
249
|
reset_overrides=bool(arguments.get("resetOverrides", False)),
|
|
234
250
|
recovery_root=Path(recovery_value) if isinstance(recovery_value, str) else None,
|
|
235
251
|
)
|
|
252
|
+
if name == "agent_pack_cloud_sync_safety_check":
|
|
253
|
+
import agenthelm # noqa: PLC0415 - shipped next to this file
|
|
254
|
+
|
|
255
|
+
mode = arguments.get("mode", "standard")
|
|
256
|
+
if mode not in ("quick", "standard", "full"):
|
|
257
|
+
raise AgentPackError("mode must be quick, standard or full")
|
|
258
|
+
report = agenthelm.local_only_report(agenthelm.current_env(home), Path(arguments["project"]), mode=mode)
|
|
259
|
+
report["ok"] = True
|
|
260
|
+
return report
|
|
236
261
|
raise AgentPackError(f"unknown tool: {name}")
|
|
237
262
|
|
|
238
263
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""nudge 面向用户和模型的文案(中文、英文)与语言选择。
|
|
2
|
+
|
|
3
|
+
语言按这个顺序决定:配置 ``nudge.language``(``auto`` / ``zh`` / ``en``,用户配置优先于项目 Profile)→ 环境变量
|
|
4
|
+
``AGENTHELM_LANG`` → 系统 locale(``LC_ALL``、``LC_MESSAGES``、``LANG``)→ 英文。``auto``、空值和 C/POSIX 视为
|
|
5
|
+
未指定;中文 locale 用中文,其他语言的 locale 暂用英文。解析出的语言同时传给 opinion-manager 的 ``inbox``,所以同一次提示
|
|
6
|
+
里用户和模型看到的是同一种语言。候选内容是用户自己的话,不翻译。关键词列表是数据,不属于文案。
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
LANGUAGES = ("zh", "en")
|
|
15
|
+
PLACEHOLDER = re.compile(r"\{(\w+)\}")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from i18n_agent_pack import DEFAULT_LANGUAGE, normalize, resolve_language # noqa: E402,F401
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
MESSAGES: dict[str, dict[str, str]] = {
|
|
22
|
+
"label_profile": {"zh": "项目 Profile opinion.nudge", "en": "Project Profile opinion.nudge"},
|
|
23
|
+
"label_user": {"zh": "用户配置 nudge", "en": "User config nudge"},
|
|
24
|
+
"warn_object": {"zh": "{label} 必须是对象,已忽略", "en": "{label} must be an object; ignored"},
|
|
25
|
+
"warn_unknown": {"zh": "{label}.{key} 不是已知设置,已忽略", "en": "{label}.{key} is not a known setting; ignored"},
|
|
26
|
+
"warn_bool": {"zh": "{label}.{key} 必须是布尔值,已忽略", "en": "{label}.{key} must be a boolean; ignored"},
|
|
27
|
+
"warn_stop": {"zh": "{label}.stop_prompt 须为 {modes} 或 {{客户端: 模式}},已忽略",
|
|
28
|
+
"en": "{label}.stop_prompt must be {modes} or {{client: mode}}; ignored"},
|
|
29
|
+
"warn_words": {"zh": "{label}.{key} 须为非空的字符串数组,已忽略", "en": "{label}.{key} must be a non-empty array of strings; ignored"},
|
|
30
|
+
"warn_int": {"zh": "{label}.{key} 须为正整数,已忽略", "en": "{label}.{key} must be a positive integer; ignored"},
|
|
31
|
+
"warn_language": {"zh": "{label}.language 须为 auto、zh 或 en,已忽略", "en": "{label}.language must be auto, zh or en; ignored"},
|
|
32
|
+
"reminder": {
|
|
33
|
+
"zh": "[Opinion] 有 {count} 条候选观点待确认{age}{trial}。在对话里让 Agent 逐条确认,或自行运行 opinion-manager 的 inbox list。",
|
|
34
|
+
"en": "[Opinion] {count} candidate opinions await confirmation{age}{trial}. Ask the Agent to go through them in the conversation, or run opinion-manager's inbox list yourself.",
|
|
35
|
+
},
|
|
36
|
+
"reminder_age": {"zh": "(最久 {days} 天未处理)", "en": " (the oldest untouched for {days} days)"},
|
|
37
|
+
"reminder_trial": {"zh": ",另有 {trial} 条在项目内试行", "en": ", and {trial} more are on trial in this project"},
|
|
38
|
+
"reminder_hint": {
|
|
39
|
+
"zh": "\n用户已看到提示:「{text}」。不要打断当前任务;用户提起或任务间隙再协助逐条确认(inbox list --status pending --output markdown)。",
|
|
40
|
+
"en": "\nThe user has seen this notice: \"{text}\". Do not interrupt the current task; help go through the candidates when the user brings it up or between tasks (inbox list --status pending --output markdown).",
|
|
41
|
+
},
|
|
42
|
+
"relay": {
|
|
43
|
+
"zh": "\n[给用户的提示,他可能没有看到;请在首次回复里用一句话如实转告,是否处理由用户决定,不要自行改 .gitignore]\n{notice}",
|
|
44
|
+
"en": "\n[A notice for the user, who may not have seen it. Pass it on in one sentence in your first reply, as written; what to do about it is the user's decision, and do not edit .gitignore yourself]\n{notice}",
|
|
45
|
+
},
|
|
46
|
+
"add_command": {
|
|
47
|
+
"zh": 'python3 {manager} inbox add --project {root} --title "<标题>" --text "<完整规则>" --scope "<适用范围>" --quote "<用户原话>"{session} --lang {lang}',
|
|
48
|
+
"en": 'python3 {manager} inbox add --project {root} --title "<title>" --text "<the full rule>" --scope "<where it applies>" --quote "<the user\'s own words>"{session} --lang {lang}',
|
|
49
|
+
},
|
|
50
|
+
"add_command_fallback": {"zh": "opinion-manager 的 inbox add", "en": "opinion-manager's inbox add"},
|
|
51
|
+
"sep": {"zh": "、", "en": ", "},
|
|
52
|
+
"prompt_hint": {
|
|
53
|
+
"zh": "[Opinion] 用户这条消息里有可能是长期偏好或对你行为的纠正的表述(命中:{hits})。"
|
|
54
|
+
"若确属长期偏好、规则或纠正,先静默暂存为候选,不打断当前工作:{command}。"
|
|
55
|
+
"仅限本次任务的要求、项目事实和命令不是候选,忽略即可。任务完成前再请用户集中确认。",
|
|
56
|
+
"en": "[Opinion] This user message may state a lasting preference or a correction of your behavior (matched: {hits}). "
|
|
57
|
+
"If it really is a lasting preference, rule or correction, stash it as a candidate silently without interrupting the current work: {command}. "
|
|
58
|
+
"Requirements for this task only, project facts and commands are not candidates; ignore them. Ask the user to confirm candidates together before the task ends.",
|
|
59
|
+
},
|
|
60
|
+
"stop_request": {
|
|
61
|
+
"zh": "[Opinion] 本次会话暂存了 {count} 条候选观点,尚未向用户确认。请在不重复已完成工作的前提下,"
|
|
62
|
+
"用下面的编号列表一次性请用户裁决:正式采纳 / 项目内试行 / 暂缓 / 丢弃(也可以逐条说明)。"
|
|
63
|
+
"用户明确表态后运行:python3 {manager} inbox decide <编号…> --project {root} --to trial|formal|held|rejected --confirmed --lang {lang}。"
|
|
64
|
+
"采纳为正式只改状态,写入 OPINION.md 须走 opinion-manager 的完整预览与确认;未经确认不要写入。\n\n{listing}",
|
|
65
|
+
"en": "[Opinion] You stashed {count} candidate opinions in this session and have not confirmed them with the user yet. Without repeating finished work, "
|
|
66
|
+
"ask the user once, using the numbered list below: adopt as formal / trial in this project / hold / discard (they may also answer item by item). "
|
|
67
|
+
"After the user states a decision explicitly, run: python3 {manager} inbox decide <ids...> --project {root} --to trial|formal|held|rejected --confirmed --lang {lang}. "
|
|
68
|
+
"Adopting as formal only records the decision; writing it into OPINION.md goes through opinion-manager's full preview and confirmation. Do not write anything before the user confirms.\n\n{listing}",
|
|
69
|
+
},
|
|
70
|
+
"note_cursor": {
|
|
71
|
+
"zh": "Cursor 的 sessionStart 注入是否到达模型取决于 Cursor 版本(社区有未到达的反馈);"
|
|
72
|
+
"协议同时写在 opinion-manager 的 Skill 中,未到达时仍可按需触发。stop 提示默认关闭,"
|
|
73
|
+
"需要时把 nudge.stop_prompt.cursor 设为 on-completion。",
|
|
74
|
+
"en": "Whether Cursor's sessionStart injection reaches the model depends on the Cursor version (the community reports cases where it does not). "
|
|
75
|
+
"The protocol is also written in opinion-manager's Skill, so it can still be triggered on demand. The stop prompt is off by default; "
|
|
76
|
+
"set nudge.stop_prompt.cursor to on-completion if you want it.",
|
|
77
|
+
},
|
|
78
|
+
"note_no_project": {
|
|
79
|
+
"zh": "当前目录不在启用了 opinion-manager 的项目里:hook 不会产生任何输出。",
|
|
80
|
+
"en": "This directory is not in a project that uses opinion-manager: the hooks produce no output here.",
|
|
81
|
+
},
|
|
82
|
+
"err_hooks_json": {"zh": "{target} 不是合法 JSON,已停止:{error}", "en": "{target} is not valid JSON; stopped: {error}"},
|
|
83
|
+
"err_hooks_root": {"zh": "{target} 的根节点必须是对象", "en": "The root of {target} must be an object"},
|
|
84
|
+
"status_project": {"zh": "项目:{project}", "en": "Project: {project}"},
|
|
85
|
+
"status_no_project": {"zh": "(不在启用 opinion-manager 的项目里)", "en": "(not in a project that uses opinion-manager)"},
|
|
86
|
+
"status_switch": {"zh": "开关:{state}", "en": "Switch: {state}"},
|
|
87
|
+
"status_env_off": {"zh": "已被环境变量 AGENTHELM_NO_NUDGE 关闭", "en": "turned off by the environment variable AGENTHELM_NO_NUDGE"},
|
|
88
|
+
"status_on": {"zh": "开启", "en": "on"},
|
|
89
|
+
"status_off": {"zh": "关闭", "en": "off"},
|
|
90
|
+
"status_thresholds": {
|
|
91
|
+
"zh": "阈值:待确认 ≥{pending} 条或最久 ≥{stale} 天;每会话确认 ≤{prompts} 次;试行 {expire} 天未转正回退;任务结束提示 {stop};语言 {language}",
|
|
92
|
+
"en": "Thresholds: at least {pending} pending, or the oldest at least {stale} days old; at most {prompts} confirmation request(s) per session; trials revert after {expire} days; end-of-task prompt {stop}; language {language}",
|
|
93
|
+
},
|
|
94
|
+
"status_current": {
|
|
95
|
+
"zh": "当前:待确认 {pending} 条,试行 {trial} 条,最久 {days} 天", "en": "Now: {pending} pending, {trial} on trial, the oldest {days} days old"},
|
|
96
|
+
"status_quiet": {"zh": "按当前阈值,开新会话不会提示。", "en": "With the current thresholds, a new session shows no reminder."},
|
|
97
|
+
"status_exposure": {"zh": "收件箱的可见范围:{message}", "en": "Who can see the inbox: {message}"},
|
|
98
|
+
"status_warning": {"zh": "配置警告:{item}", "en": "Config warning: {item}"},
|
|
99
|
+
"install_written": {"zh": "已写入", "en": "Written"},
|
|
100
|
+
"install_unchanged": {"zh": "没有变化", "en": "No change"},
|
|
101
|
+
"install_preview": {"zh": "将写入(加 --apply 执行)", "en": "Would write (add --apply to do it)"},
|
|
102
|
+
"install_line": {"zh": "{verb}:{target}", "en": "{verb}: {target}"},
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def text(message_id: str, language: str, /, **fields: Any) -> str:
|
|
107
|
+
return MESSAGES[message_id][language].format(**fields)
|
|
@@ -15,7 +15,7 @@ description: Deterministically inventory, verify, install, sync, migrate and rec
|
|
|
15
15
|
|
|
16
16
|
## 入口
|
|
17
17
|
|
|
18
|
-
优先使用随附的 `agent-pack` MCP Tool(`agent_pack_inventory` / `agent_pack_doctor` / `agent_pack_bootstrap` / `agent_pack_sync` / `agent_pack_transfer` / `agent_pack_reconcile`);不可用时运行标准库 CLI `runtime/agent_pack_config.py`。执行能力管理前读取 [references/capability-config.md](../../references/capability-config.md)。
|
|
18
|
+
优先使用随附的 `agent-pack` MCP Tool(`agent_pack_inventory` / `agent_pack_doctor` / `agent_pack_bootstrap` / `agent_pack_sync` / `agent_pack_transfer` / `agent_pack_reconcile` / `agent_pack_cloud_sync_safety_check`);不可用时运行标准库 CLI `runtime/agent_pack_config.py`。执行能力管理前读取 [references/capability-config.md](../../references/capability-config.md)。
|
|
19
19
|
|
|
20
20
|
`runtime/agenthelm.py` 另有两个面向人的入口:`project` 转交 project-orchestrator 的项目入口(不需要 AI Agent);`runtime install|update|use|status` 管理用户级运行时(`~/.local/share/agenthelm/`,项目根目录的启动器优先使用它),写操作默认预览、`--apply` 才执行,新版本装在旁边、旧版本保留。
|
|
21
21
|
|
|
@@ -39,8 +39,16 @@ description: Deterministically inventory, verify, install, sync, migrate and rec
|
|
|
39
39
|
|
|
40
40
|
`plugin.json#version` 是唯一权威。`doctor` 对每个被盘点插件比对仓库 `plugin.json` 版本与其 `.codex-plugin/plugin.json` 适配器版本,不一致即报 issue(fail,不是 warning)。`~/.codex/plugins/cache/personal/` 是 Codex 自身的版本化缓存,滞后于 marketplace 源,须由 Codex 下次激活或重启刷新——这不是 `agent-pack` 能写的。
|
|
41
41
|
|
|
42
|
+
## 同步盘与本机专属目录(local-only)
|
|
43
|
+
|
|
44
|
+
项目放在 iCloud、Dropbox、OneDrive 等同步目录里时,`.venv`、`node_modules`、工具缓存不该进同步盘。只读 MCP Tool `agent_pack_cloud_sync_safety_check` 返回结构化发现(含 `attention`、证据、可执行的命令);改动由用户同意后运行 `agenthelm local-only fix … --apply`(默认预览,失败整体撤销)。Agent 不要自己 `mv` / `ln -s`;体积接近阈值的发现把选项交给用户。契约、实测兼容性(yarn / bun / uv 可外置,npm 会把链接换回真实目录,pnpm 会失败)、配置与多设备流程见 `references/local-only.md`。
|
|
45
|
+
|
|
42
46
|
## 边界
|
|
43
47
|
|
|
44
48
|
- 不初始化项目、不创建骨架(那是 `agents-init`)。
|
|
45
49
|
- 不选择 Task/Case、不写项目进度、不做 Git 提交(那是 project-orchestrator)。
|
|
46
50
|
- 不把原生客户端 MCP 配置中的凭据复制进可移植包;含密钥条目保持 `blocked` 并留在客户端本地。
|
|
51
|
+
|
|
52
|
+
## 观点候选采集与未决事项提示(nudge)
|
|
53
|
+
|
|
54
|
+
插件随附的 hook 调用 `runtime/agenthelm.py nudge hook`:在项目启用了 opinion-manager 时,会话开始注入候选采集协议与试行候选,工作中提醒暂存长期偏好,任务完成时请用户集中确认,并在待确认候选堆积或久未处理时提示一行。该工具只读写 opinion-manager 的收件箱,不写规则、不改项目文件。阈值、客户端差异与关闭方式见 [references/nudge.md](../../references/nudge.md);`agenthelm nudge status` 显示生效配置,`agenthelm nudge install-hooks --client cursor` 预览 Cursor 的 hook 配置。
|