@cteno/sdk-linux-x64 2.10.16 → 2.10.18
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/bin/cteno-host-cli +2 -2
- package/manifest.json +1 -1
- package/package.json +3 -3
- package/plugins/cteno.inbox/.cteno-plugin/plugin.json +5 -9
- package/plugins/cteno.inbox/skills/cteno-inbox/SKILL.md +1 -3
- package/plugins/cteno.memory/bin/linux-x64/cteno-wiki +0 -0
- package/plugins/cteno.models/.cteno-plugin/plugin.json +10 -10
- package/plugins/jev/.cteno-plugin/plugin.json +6 -10
- package/skills/cteno-host-cli/SKILL.md +6 -1
package/bin/cteno-host-cli
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/bin/cteno-host-cli
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 36508728 bytes
|
|
4
|
+
sha256: fd0ccf047a09453b9902400d177db3d17b21f23b5d9f84c3bcf8ec9c1b72c68f
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cteno/sdk-linux-x64",
|
|
3
|
-
"version": "2.10.
|
|
4
|
-
"description": "Bundled Cteno daemon (cteno-host-cli 2.10.
|
|
3
|
+
"version": "2.10.18",
|
|
4
|
+
"description": "Bundled Cteno daemon (cteno-host-cli 2.10.18) 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.
|
|
29
|
+
"daemonVersion": "2.10.18"
|
|
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
|
+
"version": "0.6.3",
|
|
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":
|
|
55
|
+
"version": 6,
|
|
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\
|
|
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}}",
|
|
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
|
|
65
|
+
"instructions": "A bot reads messages from this source before they reach its owner. Decide what it should do with the new message. When the message is addressed to the bot (@-mention or direct message), lean towards wake, except spam, ads, promotions and harassment, which are ignore.",
|
|
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",
|
|
@@ -75,11 +75,7 @@
|
|
|
75
75
|
"route": {
|
|
76
76
|
"wake": {
|
|
77
77
|
"decision": "allow",
|
|
78
|
-
"additionalContext": "[决策模型判定需要处理;是否 @ 你见事件 isMention,回不回复按本群规则自己判断]"
|
|
79
|
-
"minConfidence": 0.6,
|
|
80
|
-
"otherwise": {
|
|
81
|
-
"decision": "note"
|
|
82
|
-
}
|
|
78
|
+
"additionalContext": "[决策模型判定需要处理;是否 @ 你见事件 isMention,回不回复按本群规则自己判断]"
|
|
83
79
|
},
|
|
84
80
|
"note": {
|
|
85
81
|
"decision": "note"
|
|
@@ -293,9 +293,7 @@ cteno-host-cli inbox remove-subscription <subscriptionId> # 仅手写 gener
|
|
|
293
293
|
| `route` 怎么分流 | `direct`(默认)/ `decision` | `decision` = 每条收进来的消息(含 @、私聊、源级事件)先过**决策小模型**:需要处理的进会话起一轮(`wake`);有用的记下来随下一条带上(`note`,不起轮);无关的略过(`ignore`) | **任何平台**都能开 |
|
|
294
294
|
|
|
295
295
|
`--focus` 一句话说明什么该叫醒(不填用默认标准)。决策模型不可用时:非 @ 群消息**不投递**;@ / 私聊**照常投递**,
|
|
296
|
-
|
|
297
|
-
连接器**未挂载**时事件在判定前就被拒收(`bound=false`、`unboundRejectedEvents`),这时 `smartToday` 不再增长——看到它不动先查挂载。
|
|
298
|
-
`inbox rooms` 显示 `decisionModelReady`、`smartToday`(route=decision 的房间)。
|
|
296
|
+
且决策判 ignore 的 @ 也只降级为 note、不丢。`inbox rooms` 显示 `decisionModelReady`、`smartToday`(route=decision 的房间)。
|
|
299
297
|
决策是本插件在 `PreConnectorDeliver` 上声明的 Hook(判定时刻 `inbox.smart-route`),`decision records --point inbox.smart-route`
|
|
300
298
|
可回看每条判定;用户想加自己的筛选规则就在同一事件上挂 Hook,不要改代码。
|
|
301
299
|
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"id": "cteno.models",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"title": "Cteno 模型",
|
|
6
6
|
"icon": "sparkles-outline",
|
|
7
7
|
"color": "#8E7CFF",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"description": "DeepSeek 官方 Anthropic-compatible 入口,默认 V4.1 Flash(识图)+ V4 Pro。",
|
|
25
25
|
"apiKeyLabel": "DeepSeek API Key",
|
|
26
26
|
"purchaseUrl": "https://platform.deepseek.com/api_keys",
|
|
27
|
-
"baseUrl": "https://api.deepseek.com/anthropic
|
|
27
|
+
"baseUrl": "https://api.deepseek.com/anthropic",
|
|
28
28
|
"apiFormat": "anthropic",
|
|
29
29
|
"defaultModelId": "deepseek-flash",
|
|
30
30
|
"compressModelId": "deepseek-flash",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"description": "OpenAI Responses API,适合 GPT-5 / GPT-4.1 系列。",
|
|
40
40
|
"apiKeyLabel": "OpenAI API Key",
|
|
41
41
|
"purchaseUrl": "https://platform.openai.com/api-keys",
|
|
42
|
-
"baseUrl": "https://api.openai.com
|
|
42
|
+
"baseUrl": "https://api.openai.com",
|
|
43
43
|
"apiFormat": "openai",
|
|
44
44
|
"defaultModelId": "gpt-5.1",
|
|
45
45
|
"compressModelId": "gpt-4.1-mini",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"description": "Claude 官方 Messages API。",
|
|
58
58
|
"apiKeyLabel": "Anthropic API Key",
|
|
59
59
|
"purchaseUrl": "https://console.anthropic.com/settings/keys",
|
|
60
|
-
"baseUrl": "https://api.anthropic.com
|
|
60
|
+
"baseUrl": "https://api.anthropic.com",
|
|
61
61
|
"apiFormat": "anthropic",
|
|
62
62
|
"defaultModelId": "claude-sonnet-4-20250514",
|
|
63
63
|
"compressModelId": "claude-3-5-haiku-20241022",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"description": "Google Gemini 原生 generateContent API。",
|
|
76
76
|
"apiKeyLabel": "Gemini API Key",
|
|
77
77
|
"purchaseUrl": "https://aistudio.google.com/apikey",
|
|
78
|
-
"baseUrl": "https://generativelanguage.googleapis.com
|
|
78
|
+
"baseUrl": "https://generativelanguage.googleapis.com",
|
|
79
79
|
"apiFormat": "gemini",
|
|
80
80
|
"defaultModelId": "gemini-3-pro-preview",
|
|
81
81
|
"compressModelId": "gemini-2.5-flash",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"description": "阿里云百炼 Anthropic-compatible Coding 入口。",
|
|
110
110
|
"apiKeyLabel": "DashScope API Key",
|
|
111
111
|
"purchaseUrl": "https://www.alibabacloud.com/help/en/model-studio/get-api-key",
|
|
112
|
-
"baseUrl": "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic
|
|
112
|
+
"baseUrl": "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic",
|
|
113
113
|
"apiFormat": "anthropic",
|
|
114
114
|
"defaultModelId": "qwen3.5-plus",
|
|
115
115
|
"compressModelId": "qwen3.5-plus",
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"description": "智谱 GLM Anthropic-compatible 入口。",
|
|
126
126
|
"apiKeyLabel": "GLM API Key",
|
|
127
127
|
"purchaseUrl": "https://docs.z.ai/guides/",
|
|
128
|
-
"baseUrl": "https://api.z.ai/api/anthropic
|
|
128
|
+
"baseUrl": "https://api.z.ai/api/anthropic",
|
|
129
129
|
"apiFormat": "anthropic",
|
|
130
130
|
"defaultModelId": "GLM-5.2",
|
|
131
131
|
"compressModelId": "GLM-4.5-Air",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"description": "Kimi Coding Anthropic-compatible 入口。",
|
|
142
142
|
"apiKeyLabel": "Kimi API Key",
|
|
143
143
|
"purchaseUrl": "https://platform.kimi.ai/console/api-keys",
|
|
144
|
-
"baseUrl": "https://api.kimi.com/coding
|
|
144
|
+
"baseUrl": "https://api.kimi.com/coding",
|
|
145
145
|
"apiFormat": "anthropic",
|
|
146
146
|
"defaultModelId": "kimi-for-coding",
|
|
147
147
|
"compressModelId": "kimi-for-coding",
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
"description": "MiniMax Anthropic-compatible 入口。",
|
|
156
156
|
"apiKeyLabel": "MiniMax API Key",
|
|
157
157
|
"purchaseUrl": "https://platform.minimax.io/docs/guides/quickstart",
|
|
158
|
-
"baseUrl": "https://api.minimax.io/anthropic
|
|
158
|
+
"baseUrl": "https://api.minimax.io/anthropic",
|
|
159
159
|
"apiFormat": "anthropic",
|
|
160
160
|
"defaultModelId": "MiniMax-M3",
|
|
161
161
|
"compressModelId": "MiniMax-M2.5",
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
"description": "xAI OpenAI-compatible 入口。",
|
|
173
173
|
"apiKeyLabel": "xAI API Key",
|
|
174
174
|
"purchaseUrl": "https://console.x.ai/",
|
|
175
|
-
"baseUrl": "https://api.x.ai
|
|
175
|
+
"baseUrl": "https://api.x.ai",
|
|
176
176
|
"apiFormat": "openai",
|
|
177
177
|
"defaultModelId": "grok-4",
|
|
178
178
|
"compressModelId": "grok-3-mini",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"id": "jev",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"title": "决策模型(Jev)",
|
|
6
6
|
"description": "决策模型(TypeSafe Jev)的官方内置插件:声明内核决策模型后端(Cteno 托管中转、自建、自带 Key 直连 TypeSafe 三种),并提供 jev-browser 浏览器连续动作 helper。Agent 通过 decision_evaluate 工具或 helper 调用内核当前选中的决策模型;Key 只存在保险箱,由宿主解析,不经脚本。决策按输入类型自动选后端:纯文字走默认后端(托管时为 Jev);带图片的请求自动走支持图片且排序靠前的后端(托管中转把图片转发给 NanoGPT Luna,不配 Key 也能用;自带 NanoGPT Key 时直连 Luna;TypeSafe 危险区图片排最后)。图片默认后端可用 `cteno-host-cli decision set-default --modality image --backend <id>` 指定。另声明四个判定时刻:结尾催做、网页注入检查、删除会话复核已按标注评估转为 active;开局技能隐藏仍为影子模式(只记录不执行)。用 `cteno-host-cli decision points/records/set-mode` 查看和切换。",
|
|
7
7
|
"icon": "navigate-outline",
|
|
@@ -146,25 +146,21 @@
|
|
|
146
146
|
"handler": {
|
|
147
147
|
"type": "decision",
|
|
148
148
|
"point": "jev.stop-continue",
|
|
149
|
-
"version":
|
|
149
|
+
"version": 1,
|
|
150
150
|
"mode": "active",
|
|
151
151
|
"title": "结尾催做:回答没做完就让 agent 继续",
|
|
152
|
-
"skipIf":
|
|
153
|
-
"/stop_hook_active",
|
|
154
|
-
"!/response"
|
|
155
|
-
],
|
|
152
|
+
"skipIf": "/stop_hook_active",
|
|
156
153
|
"timeoutSecs": 8,
|
|
157
154
|
"maxFieldChars": 4000,
|
|
158
|
-
"state": "The user asked an AI agent:\n{{/last_user_message}}\n\
|
|
155
|
+
"state": "The user asked an AI agent:\n{{/last_user_message}}\n\nThe agent's final reply:\n{{/response}}",
|
|
159
156
|
"questions": {
|
|
160
157
|
"finished": {
|
|
161
158
|
"type": "choice",
|
|
162
|
-
"instructions": "Is the agent stopping with the user's request actually handled?
|
|
159
|
+
"instructions": "Is the agent stopping with the user's request actually handled?",
|
|
163
160
|
"options": {
|
|
164
161
|
"done": "The request is handled: the work is done, or the reply fully answers it",
|
|
165
|
-
"delegated_waiting": "The remaining work was handed to a running thread or is waiting on an external event (a dispatched task, a loop or schedule, a pending build or reply), and the reply says so",
|
|
166
162
|
"blocked_on_user": "The agent stops because it genuinely needs the user (a decision, a credential, an approval) and says so",
|
|
167
|
-
"unfinished": "The agent stops early
|
|
163
|
+
"unfinished": "The agent stops early: it only described a plan, promised to do something next, or left the asked work half done without needing the user",
|
|
168
164
|
"none": "None of the other options fits"
|
|
169
165
|
}
|
|
170
166
|
}
|
|
@@ -61,12 +61,14 @@ cteno-host-cli <domain> <subcommand> --help
|
|
|
61
61
|
- **后台子 run**:`run --parent-session <id>` 让这次 run 成为该 session 的后台子会话(账本记血缘,不出现在历史列表,只在后台任务里可见);子会话结束却没有最终回答时,会以一条 `[Task Failed] <label> <child>` 回灌给父会话(首行之后是一句人话 + 一个动作,原始错误在 `<internal-details>` 里,转述给用户时只说那句人话),且不自动重跑。`--timeout-secs <s>`(默认 3600,≥10)是 CLI 等待的墙钟上限,到点返回 `status: "still_running"`(「还在做,过会儿再看」)——**超时不是失败**,子会话继续跑,做完照常回灌;`--max-turns` 只限轮数,与等待时长无关。`--no-handback` 只隐藏、不回灌。子会话在 turn 结束后才被判定失败时(例如 dream 自报失败),用 `run hand-back <child> --error <text> [--label <l>]` 回灌一次,同一个子会话幂等。
|
|
62
62
|
- **远端委派关闭**:`cteno-host-cli --machine <id> session close-delegated <child> --parent <原始父会话ID>`,要求目标 `remote-task-close-v1` 与认证 transport 调用身份;parent 参数不授予权限,目标复核子账本血缘与终态,拒绝运行中、等待决策、非委派及外机归属。旧目标/失败无普通 close 回退。并发关闭验收尚未完成,不以此入口代替最终行为验收。
|
|
63
63
|
- **生命周期**:`session close` / archive 只释放 live executor、改变列表投影,canonical SessionLedger 仍完整,可再次 `chat`/resume/reopen。只有显式 `session delete` 是永久 purge;它会清 ledger、runtime facts、pending、links 与 artifacts,不能用 close 代替删除,也不能把 archived 当不存在。
|
|
64
|
+
- **表情回应**:`session react <id> --message <Message.id> --emoji <e> [--remove]` 以用户身份写一条 reaction 账本事实(白名单表情、同表情不重复、可撤回,`changed:false` 表示无变化);目标 daemon 需声明 `message-reactions.v1`。见 `docs/architecture/message-reactions.md`。
|
|
64
65
|
- **未读徽标**:`unread` 是 daemon 持有的布尔(回合以 assistant 回复结束即置真,含 autonomous 回合),`session get` 可见 `unread`/`lastReplyTurnId`。`session mark-read <id> [--seen-turn <turn_id>]` 只在 turn 为最新回复时清除(防跨端迟到清除);`session mark-unread <id>` 置真。
|
|
65
66
|
- **压缩/分支**:`session compact` 追加 coverage/digest checkpoint,不复制 recent tail;`session rewind` 与 fork 通过 ledger ancestry/head 实现,不物理改写旧消息。命令失败时以 fail-closed 错误处理,禁止从旧 context snapshot 猜恢复状态。
|
|
66
67
|
- **同请求提醒**:capabilities 的 methods 包含 `card-remind` 时,`session card remind <card_id>` 仅提醒现有 pending 请求,复用原 ID/操作页链接;不发新卡、不重置状态、不产生回答或执行授权。终态和其他机器请求拒绝提醒。
|
|
67
68
|
- **请求定位链接**:先查 `session card capabilities` 的 methods 包含 `card-link`,再 `session card link <card_id>`。返回同一 canonical request/machine 的 `/interact?...` 第一方相对 path(终态仍可回看);只定位,不携授权、token或secret,不凭链接执行操作。不要硬编码域名或拼外站认证链接。
|
|
68
69
|
- **权限**:无人值守调用必须显式选择合适的 permission mode;默认模式可能等待无人处理的权限卡。不要无条件使用 bypass,按用户授权选择。
|
|
69
70
|
- **托管 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)。
|
|
71
|
+
- **派活可以指定推理强度**:`dispatch_task` 顶层或每个节点带 `reasoning_effort: low|medium|high|xhigh|max`(节点不填继承顶层,都不填 = 模型默认档,与 `schedule` 同一套取值)。只对声明了推理强度的 profile 生效——`cteno-host-cli profile list` 里该行的 `supportedReasoningEfforts` 含这一档;不含就**同步拒绝**(`Nothing was dispatched`),换 profile 或去掉该字段。结果回显实际强度(`reasoning_effort` / `reasoning_efforts[]`),`list_task_threads` 每个线程也带;`send_to_thread` 续跑沿用线程原来的强度。
|
|
70
72
|
- **交回要附证据、合并要过复审**:`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
73
|
- **健康检查**:`doctor [--network-only] [--json]` 一次报出配置、本机 daemon socket、Happy Server 可达性和 MCP server 状态(只读,不新增 RPC);`--network-only` 跳过 MCP 扫描只查配置与网络;有任一项 FAIL 时退出码 1。Happy Server 不通只记 warn(未登录本地模式仍可用)。只能在本机跑,不接受 `--machine`。排查「连不上」先跑它。
|
|
72
74
|
- **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`。
|
|
@@ -91,6 +93,7 @@ cteno-host-cli <domain> <subcommand> --help
|
|
|
91
93
|
- 等待超时(默认 300s,`CTENO_PERMISSION_TIMEOUT_SECS` 可调)仍自动拒绝,卡变 `expired`:没碰过的卡直接消失、不计数;只有手动点过「稍后」的卡留在「稍后」,`session card refresh <card_id>` 把说明消息发回来源线程让其重新发起这一步。
|
|
92
94
|
- `session card flag`(`station-flag`,`features` 含 `station.flag`):这台机器上各 Jelly 角标之和 `{count,tone,perJelly}`,与头像角标同源,只读。
|
|
93
95
|
- 卡生命周期(`docs/architecture/decision-card-lifecycle.md`):会话归档/删除、`decision` 带 `supersedes:<旧 cardId>` 重新发卡、daemon 启动发现来源会话已结束——这三种情况旧卡变 `invalidated`(`--status invalidated` 可查,原因在 ledger);系统从不按时间清理 pending 卡。
|
|
96
|
+
- `session card withdraw <card_id> --reason <文字> [--session <id>]`(`features` 含 `cards.withdraw`,RPC `card-withdraw`):发卡会话(或派出该线程的主对话)把自己**仍 open** 的 question/confirm 卡收回,状态 `withdrawn`(`--status withdrawn` 可查,原因在 ledger)。`--session` 缺省取 `$CTENO_SESSION_ID`,必须是发卡会话或其祖先;别的会话的卡、已答/已过期/已撤回的卡都会被拒并写明原因。等着这张卡的调用收到 `verdict:withdrawn, proceed:false`——不是批准。agent 内用 `withdraw_card` 工具。
|
|
94
97
|
- 插件(`features` 含 `attention.pluginSubscribe`):manifest 声明 `surfaces.attention.subscribe: true` 后,经 plugin-rpc `platform.attention.list` 读卡的最小投影,并收到 `attention.cardUpdated`;插件不能答卡。
|
|
95
98
|
|
|
96
99
|
## 远程保险箱的配对设备(devices 域)
|
|
@@ -204,7 +207,9 @@ cteno-host-cli jelly open [--jelly <id>] # 确保主对话存
|
|
|
204
207
|
cteno-host-cli jelly create --name 工作 --color '#ff8800' --memory-mode independent
|
|
205
208
|
cteno-host-cli jelly update --jelly <id> [--name ..] [--color ..|--clear-color] [--memory-mode ..]
|
|
206
209
|
cteno-host-cli jelly delete <id> # 删除非默认 Jelly(capability jelly.delete.v1,见下)
|
|
207
|
-
cteno-host-cli jelly threads --jelly <id> # 线程:threadId/title/status(running|
|
|
210
|
+
cteno-host-cli jelly threads --jelly <id> # 线程:threadId/title/status(running|done|failed|stopped;waiting 仅旧 daemon)
|
|
211
|
+
cteno-host-cli jelly work-items --jelly <id> [--no-done] [--done-limit N] # 工作项:todo→threads→cards,display/acceptance/revision;v2 首屏只含未完成 + 最近 20 已完成 + 需关注的未归类,带 doneTotal/doneNextCursor/unlinkedClosedCount(能力 jelly.work-items.v1/v2)
|
|
212
|
+
cteno-host-cli jelly work-items-page --jelly <id> --section done|history [--cursor C] [--limit N] # 更早的已完成 / 已结束的未归类线程,按 nextCursor 翻页(能力 jelly.work-items.v2)
|
|
208
213
|
cteno-host-cli jelly suggested-prompts # 已弃用:仅为老客户端保留(capability suggested-prompts.v1),新客户端不渲染
|
|
209
214
|
```
|
|
210
215
|
|