@cteno/sdk-linux-x64 2.10.14 → 2.10.16

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.
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/bin/cteno-host-cli
3
- size: 35873016 bytes
4
- sha256: 33d6d7c39ea335b33e49e73eae438eb526e852b6dc974b1291bf66517774bdde
3
+ size: 36020472 bytes
4
+ sha256: 829ef9d9905e8b471e2920514cb8e00c86e761265457b0eeb96db5a72a046ea3
package/bin/cteno-wiki CHANGED
Binary file
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "sku": "sdk-core",
4
- "version": "2.10.14",
4
+ "version": "2.10.16",
5
5
  "target": "linux-x64",
6
6
  "binaries": [
7
7
  "cteno-host-cli",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cteno/sdk-linux-x64",
3
- "version": "2.10.14",
4
- "description": "Bundled Cteno daemon (cteno-host-cli 2.10.14) for @cteno/sdk on linux-x64",
3
+ "version": "2.10.16",
4
+ "description": "Bundled Cteno daemon (cteno-host-cli 2.10.16) for @cteno/sdk on linux-x64",
5
5
  "license": "SEE LICENSE IN LICENSE.daemon",
6
6
  "homepage": "https://github.com/zalan159/cteno-sdk#readme",
7
7
  "repository": {
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "preferUnplugged": true,
28
28
  "cteno": {
29
- "daemonVersion": "2.10.14"
29
+ "daemonVersion": "2.10.16"
30
30
  },
31
31
  "publishConfig": {
32
32
  "access": "public",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "id": "cteno.inbox",
4
- "version": "0.6.4",
4
+ "version": "0.6.5",
5
5
  "title": "Cteno Connector",
6
6
  "icon": "git-network-outline",
7
7
  "color": "#276EF1",
@@ -52,17 +52,17 @@
52
52
  "handler": {
53
53
  "type": "decision",
54
54
  "point": "inbox.smart-route",
55
- "version": 7,
55
+ "version": 8,
56
56
  "mode": "active",
57
57
  "title": "route=decision:投递前问决策模型 wake / note / ignore",
58
58
  "skipIf": "!/decide",
59
59
  "timeoutSecs": 15,
60
60
  "maxFieldChars": 16384,
61
- "state": "Source: {{/source}} / {{/roomName}}\nAddressed to the bot (@-mention or direct message): {{/isMention}}\nWhat the owner cares about right now (decide against this): {{rpc:/data/focus}}\n\nNew message (platform raw event JSON; read the text and sender inside it):\n{{/raw}}",
61
+ "state": "Source: {{/source}} / {{/roomName}}\nAddressed to the bot (@-mention or direct message): {{/isMention}}\nWhat the owner cares about right now (decide against this): {{rpc:/data/focus}}\n\nEarlier messages from this same conversation that were only kept as context (newest last; empty if none):\n{{/recentContext}}\n\nNew message (platform raw event JSON; read the text and sender inside it):\n{{/raw}}",
62
62
  "questions": {
63
63
  "route": {
64
64
  "type": "choice",
65
- "instructions": "A bot reads messages from this source before they reach its owner. Decide what it should do with the new message, judged against what the owner cares about. A message addressed to the bot (@-mention or direct message) leans towards wake, but the owner's focus decides: when it clearly falls outside what the owner wants handled, or is spam, ads, promotions or harassment, answer ignore even for a direct message.",
65
+ "instructions": "A bot reads messages from this source before they reach its owner. Decide what it should do with the new message, judged against what the owner cares about. A message addressed to the bot (@-mention or direct message) leans towards wake, but the owner's focus decides: when it clearly falls outside what the owner wants handled, or is spam, ads, promotions or harassment, answer ignore even for a direct message. Waking interrupts the owner, so wake only when the message itself asks for something the focus names; when unsure, choose note. A message with no readable text (only [图片], [文件], a sticker or a link card) is note, or ignore when the earlier messages show the same sender broadcasting promotions. Technical discussion, prices or news among other people in a group is note even when detailed.",
66
66
  "options": {
67
67
  "wake": "Someone wants something now: a question, a request, a complaint or bug report, or a call to the bot or the owner, matching what the owner wants handled",
68
68
  "note": "An announcement or status update nobody needs answered: a meeting time, a decision made, a result, a new account or link, a plan. Worth remembering, nothing to do now",
@@ -293,7 +293,9 @@ cteno-host-cli inbox remove-subscription <subscriptionId> # 仅手写 gener
293
293
  | `route` 怎么分流 | `direct`(默认)/ `decision` | `decision` = 每条收进来的消息(含 @、私聊、源级事件)先过**决策小模型**:需要处理的进会话起一轮(`wake`);有用的记下来随下一条带上(`note`,不起轮);无关的略过(`ignore`) | **任何平台**都能开 |
294
294
 
295
295
  `--focus` 一句话说明什么该叫醒(不填用默认标准)。决策模型不可用时:非 @ 群消息**不投递**;@ / 私聊**照常投递**,
296
- 且决策判 ignore 的 @ 也只降级为 note、不丢。`inbox rooms` 显示 `decisionModelReady`、`smartToday`(route=decision 的房间)。
296
+ 低置信(<0.6)的 wake / ignore 都降为 note;高置信 ignore 的私聊会丢弃。判定时模型能看到同会话最近几条 note;note 随下一次唤醒只送一次(24h 内最新 10 条)。
297
+ 连接器**未挂载**时事件在判定前就被拒收(`bound=false`、`unboundRejectedEvents`),这时 `smartToday` 不再增长——看到它不动先查挂载。
298
+ `inbox rooms` 显示 `decisionModelReady`、`smartToday`(route=decision 的房间)。
297
299
  决策是本插件在 `PreConnectorDeliver` 上声明的 Hook(判定时刻 `inbox.smart-route`),`decision records --point inbox.smart-route`
298
300
  可回看每条判定;用户想加自己的筛选规则就在同一事件上挂 Hook,不要改代码。
299
301
 
@@ -68,6 +68,8 @@ cteno-host-cli <domain> <subcommand> --help
68
68
  - **权限**:无人值守调用必须显式选择合适的 permission mode;默认模式可能等待无人处理的权限卡。不要无条件使用 bypass,按用户授权选择。
69
69
  - **托管 worktree 是 daemon 的,不是你的**:`dispatch_task` 的 `worktree: "<短名>"` 由 daemon 在 `<主检出>-wt-<短名>` 建、在节点终态时**自动回收**(分支 `cteno-wt/<短名>` 与其上的提交保留,只删检出目录)。所以**不要**为派活手搓 `git worktree add`,也不要在 kickoff 里写「干完记得删」——拆除责任必须落在比节点活得久的组件上。想看 daemon 当前托管着哪些树,用 `cteno-host-cli storage worktrees`(只读;`session worktrees` 是另一回事,它列的是某个 thread workdir 下的 git worktree)。
70
70
  - **交回要附证据、合并要过复审**:`report_to_owner(status=done)` 带 `evidence:[{command,result,files}]`;runtime 拿命令去核子线程自己账本里的 shell 调用,无证据的交回在派活方那边第一行显示「[警告:无证据交回]」。仓库 main 上有 `REVIEW.md` 时,合并只能走 `merge_review`(op=review/status/close/merge;shell 里直接往 main `git merge` 会被拒):全新上下文的只读 `merge-reviewer` 按 Important/Nit/Pre-existing 出意见,Important 必须修掉或 op=close 写理由;第 4 轮起只审新增 diff。本仓库的 `REVIEW.md` 未声明 `high_risk`,没有「命中高风险路径需人工审」这道拦截(声明了 `high_risk` 的仓库才有)。CLI 走 `cteno-host-cli session invoke-tool <sid> merge_review --input '{"op":"status","repo":"<wt>"}'`;复审记录在 `<git common dir>/cteno-review/<branch>.json`。见 `docs/architecture/review-gates.md`。
71
+ - **健康检查**:`doctor [--network-only] [--json]` 一次报出配置、本机 daemon socket、Happy Server 可达性和 MCP server 状态(只读,不新增 RPC);`--network-only` 跳过 MCP 扫描只查配置与网络;有任一项 FAIL 时退出码 1。Happy Server 不通只记 warn(未登录本地模式仍可用)。只能在本机跑,不接受 `--machine`。排查「连不上」先跑它。
72
+ - **MCP 连接共享**:`mcp_servers.yaml` 每个 server 可写 `sharing: auto|shared|private`(缺省 auto)。auto 只在握手协商出 MCP 2026-07-28 无状态协议时让多个 session 共用一个连接/进程;legacy server 默认每 session 一个进程;`shared` 是用户担保无状态的显式共享,`private` 显式不共享。见 `docs/architecture/mcp-connection-pool.md`。
71
73
  - **远程机器**:先 `machines list`(账号级列表,本身不接受 `--machine`),再把顶层 `--machine <id|name>` 放在业务命令之前。它只切换 transport;auth/host/status/connect/webview 等本地命令不能远程执行。长任务注意远程 RPC deadline,异步派出后再查状态通常更稳妥。
72
74
  - **跨机派发前先预检,别凭记忆写 machine id 和路径**。跨机是盲派:你看不见那台机器的磁盘,也不知道它装了哪些模型。两个**只读、不建 session**的命令回答这件事:
73
75
  - `cteno-host-cli --machine <id|name> machines describe` —— 平台/arch、daemon 版本、capability,以及**它真正能跑的 model profile 列表**。`dispatch_task` 带 `machine` + `profile_id` 前必须看这个:对端没有的 profile 根本无法推理。