tellrun 1.3.2 → 1.3.3

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.
@@ -119,8 +119,10 @@ CLI 与打包入口已接入,可使用 `npm pack` 的本地产物全局安装
119
119
  | src/config.ts、src/logger.ts | Telegram 凭据与本人身份校验、结构化日志 |
120
120
  | src/im/telegram.ts | grammY 接入、本人验证、入站标准化、回复与连接生命周期 |
121
121
  | src/agents/codex.ts | Codex app-server 连接、协议校验、会话创建或恢复、执行与中断 |
122
+ | src/agents/codex-rpc.ts | 模型查询与任务连接共用的 RPC 收发、初始化、超时与断线清理 |
122
123
  | src/agents/codex-interaction.ts | 审批与提问请求的校验、交互内容转换和文件变更格式 |
123
124
  | src/core/relay.ts | 平台无关的命令处理、单会话协调和串行任务执行 |
125
+ | src/core/menus.ts | 权限、模型与推理选择规则、菜单阶段流转及回复文案 |
124
126
  | src/core/types.ts | 实际跨模块复用的来源、消息、Agent 接口和执行结果 |
125
127
  | src/storage/store.ts、src/storage/schema.ts | JSON 状态读写、结构校验与业务操作 |
126
128
  | src/storage/lock.ts | 单实例锁的获取、旧锁回收与所有权释放 |
@@ -130,6 +132,8 @@ Telegram SDK 类型仅在 IM 连接模块使用,Codex RPC 类型仅在 Agent
130
132
 
131
133
  当前依赖关系为 `main → 组件组装`,`im → 统一消息处理入口 → core → 存储操作`。核心层通过 `Agent` 接口执行和停止任务,IM 独立读取 outbox 发送回复。Worker 保留在核心模块,协议处理保留在 Agent 模块,不额外拆出转发层。
132
134
 
135
+ 菜单规则由 core/menus 实现,store 为其提供当前状态读取、事务更新和回复入队接口,并保留原有调用入口。菜单选择、入站去重、按钮清理与回复仍合并为一次原子保存;菜单模块不直接操作文件或 IM API。Codex 查询与任务复用 RPC 实现,各自保持独立连接;通信模块只处理收发与连接故障,会话恢复、审批和任务取消仍由 Codex 适配器决定。
136
+
133
137
  按实际复用抽取函数和共享类型,新增前检查现有定义。避免为单一用途拆出多层 Controller / Service / Repository、抽象基类和通用插件注册器;对公开函数、关键逻辑和必要常量添加简洁中文 JSDoc。
134
138
 
135
139
  ## 入站消息与执行流程
@@ -234,6 +238,14 @@ Codex 模型、provider 和认证优先沿用服务用户已有配置。应用
234
238
 
235
239
  聊天保存当前选择,任务提交时复制模式 ID;旧文件补空值,沿用默认模式。选择跨重启与同目录 `/new` 保留,换目录恢复默认。菜单使用独立 UUID、原消息与聊天校验、10 分钟有效期;重新打开、新建会话、切换目录和重启均撤回旧按钮,发送途中的旧菜单由迟到回执清理。菜单与选择都通过现有 outbox 持久化,点击回调不执行 RPC。新建或恢复 Codex 会话时传入所选模式,并核对服务端返回的三项实际设置;拒绝或不符时不发送 turn/start。运行中切换不改变当前任务及 turn/steer,状态查询在模式不同时分别展示。
236
240
 
241
+ `/model` 复用权限菜单的选项结构、回调校验与 outbox 清理。模型目录由独立循环通过 Agent.listModels 读取,Codex 适配器使用单独的后台连接分页调用 model/list,返回模型 ID、名称、支持的推理档位及默认档位;查询总时限为 15 秒,失败保留原选择,关停取消查询,不占用任务连接或入站控制路径。菜单 ID 防止迟到查询覆盖新菜单,列表不写死,也不维护另一套 Provider 配置。[模型目录接口](https://learn.chatgpt.com/docs/app-server#models)
242
+
243
+ 选中模型后使用新菜单 ID 展示该模型的推理档位,并标注默认档位;暂存的模型不改变聊天选择,选完第二步后将模型与推理强度一起保存。无推理选项时直接保存模型,推理强度保留为空并沿用 Codex 配置。两项设置在任务提交时形成快照,跨重启与同目录 `/new` 保留,换目录恢复默认。新任务通过 thread/start 或 thread/resume 传入 model,并核对返回值,再将同一模型和所选 effort 传入 turn/start;恢复已派发轮次不覆盖设置或重新提交输入。
244
+
245
+ 模型菜单明确区分 loading、model、reasoning 三个阶段,各阶段的数据由联合类型约束;旧文件中没有阶段标记的菜单在读取时兼容转换。菜单使用 Agent 返回的模型、权限与推理选项,默认值文案不绑定具体 Agent;新增 IM 时可以复用选择规则。Telegram 的更新确认、草稿和消息回执边界仍待第二个 IM 接入时整理。
246
+
247
+ `/model` 只发送一条菜单消息:第一步显示当前模型和推理档位,第二步在原消息上展示推理按钮,不重复列出档位说明;选定后原地替换为一行确认并收起按钮。两步仍使用不同菜单 ID,旧按钮失效;编辑回执迟到时保留更新后的阶段或确认结果。
248
+
237
249
  ## 任务状态与恢复语义
238
250
 
239
251
  | 状态 | 含义及允许的后续动作 |
@@ -352,3 +364,5 @@ Claude 等 Agent 的新增工作集中在会话创建或恢复、任务输入、
352
364
  macOS 后台管理通过 18 项临时验证:17 项模拟覆盖平台分发、无桌面登录、无效路径、系统命令失败、启动超时、并发控制、启动等待期间停止、就绪标记归属与清理、日志跟随,以及 Linux systemd 和 linger 回归;另在本机真实 launchd 登录域运行隔离服务,验证特殊字符路径、重复启动、登录入口加载、停止、重启、崩溃恢复和卸载。隔离服务已卸载;检查与构建通过,真实 Telegram 后台联调及 Linux 实机服务验收仍需单独完成。
353
365
 
354
366
  服务与任务生命周期分离通过 15 项临时回归:服务退出不发取消、恢复离线结果且不重跑、恢复后的补充输入与明确停止、历史分页与轮次隔离、未知轮次、忙碌会话、审批映射、初始化期间退出、权限校验、在途输入不重放、旧状态兼容、环境隔离、daemon 启动失败、重连后完成已保存的取消,以及连接前停止不能误报原任务已取消。另使用本机 Codex 0.165.0 与本机模拟模型服务,验证适配器断开后任务仍执行、新适配器接回同一轮次、实时完成与离线结果恢复。未调用真实模型、发送 Telegram 消息或操作现有 Codex daemon;目标 Linux 的 systemd 停止与升级仍需实机验收。
367
+
368
+ 菜单与 RPC 职责拆分通过 71 项临时检查:36 项模型、推理、菜单状态及协议检查,3 项 Telegram 模拟,17 项 WebSocket 审批与权限回归,以及上述 15 项生命周期回归。新增检查覆盖三阶段旧菜单兼容、非法阶段拒绝加载、选择写盘失败的原子回滚、其他 IM 来源与 Agent 自定义选项、双向 RPC 同编号隔离和非法通信帧。检查与构建通过;本轮未连接真实 Telegram 或提交真实模型任务。
package/docs/prd.md CHANGED
@@ -73,6 +73,7 @@
73
73
  | --- | --- |
74
74
  | /start 或 /help | 展示使用说明、当前会话和常用操作 |
75
75
  | /new | 新建 Agent 会话 |
76
+ | /model | 显示当前模型与推理强度,先选模型再选支持的推理档位,两步完成后用于后续任务 |
76
77
  | /permissions | 选择后续任务的权限模式,执行中的任务保持原权限 |
77
78
  | /sessions | 分页列出会话,点击切换 |
78
79
  | /status | 显示当前会话、工作目录、运行中的任务、队列和服务状态 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tellrun",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "Self-hosted Telegram bot for remote AI coding with OpenAI Codex CLI, persistent sessions, and streaming replies.",
5
5
  "keywords": [
6
6
  "codex",