@ycodium-ai/plugin-im 0.2.3254 → 0.2.3272

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/locales/en.json CHANGED
@@ -157,6 +157,10 @@
157
157
  "label": "New messages while busy",
158
158
  "description": "When a turn is already running, how to handle new plain-text messages. Queue waits for the current turn (Steer is still a button); Steer auto-joins the running turn."
159
159
  },
160
+ "approvalTimeoutMinutes": {
161
+ "label": "Approval timeout (minutes)",
162
+ "description": "Unanswered approvals are denied automatically after this many minutes. Defaults to 60; enter an integer from 0 to 1440, and 0 turns it off. An invalid value counts as 60."
163
+ },
160
164
  "larkPanelMode": {
161
165
  "label": "Command panel",
162
166
  "description": "Which commands /panel (or typing /) lists. Minimal hides low-frequency system items; typing the same command still works."
@@ -267,6 +271,7 @@
267
271
  "welcome": "Connected. Send text or images to get started, or send /help to see the available commands."
268
272
  },
269
273
  "approval": {
274
+ "timedOut": "No one handled this within the {{minutes}}-minute limit, so it was denied automatically.",
270
275
  "allow": "Allow",
271
276
  "deny": "Deny",
272
277
  "alreadyHandled": "Already handled",
@@ -344,17 +349,35 @@
344
349
  "current": "Ycodium Chat bridge v{{version}}",
345
350
  "usage": "Usage: /version (no arguments)."
346
351
  },
352
+ "compact": {
353
+ "usage": "Usage: /compact (no arguments).",
354
+ "busy": "A reply is in progress. Wait until this turn finishes, then send /compact again.",
355
+ "unsupported": "The current model can't compact context. Use /model to switch to one that can.",
356
+ "started": "Started compacting the context. I'll post here when it finishes; you can keep sending messages meanwhile.",
357
+ "done": "Context compacted.",
358
+ "failed": "Couldn't compact the context. Try again in a moment.",
359
+ "stuck": "The previous reply failed and its turn is still open. Send /stop to end that turn, then send /compact again.",
360
+ "noSession": "This chat has no current session. Send a message to start one, or use /sessions and /resume to switch to one, then send /compact again."
361
+ },
362
+ "archived": {
363
+ "on": "On: the session list includes archived sessions. They are listed so you can find them; open one on the web to read it. They can't be continued.",
364
+ "off": "Off: the session list shows only sessions that are not archived.",
365
+ "usage": "Usage: /archived on or /archived off."
366
+ },
347
367
  "help": {
368
+ "permission": "· /permission — list modes, the mode for new turns and the bot ceiling; /permission number or mode id selects; /permission default returns to the bot setting",
348
369
  "title": "Commands:",
349
370
  "continue": "· /continue — resume sending after /stop or a failure paused it; the waiting messages go out",
350
371
  "stop": "· /stop — stop the turn that is running; the session stays",
372
+ "compact": "· /compact — compact the current session's context (no arguments)",
351
373
  "status": "· /status — what is going on right now",
352
374
  "version": "· /version — the chat bridge's version (no arguments)",
353
375
  "new": "· /new — forget the current session; the next message starts a new one",
354
376
  "team": "· /team — give this project's team a goal with each message; use /repo to pick the project first",
355
377
  "thread": "· /thread — go back to a normal session",
356
- "aliases": "Chinese shortcuts (停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 会话历史 / 换模型 / 思考强度 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话) work when the reply language is Chinese.",
378
+ "aliases": "Chinese shortcuts (停 / 继续发送 / 压缩 / 状态 / 新对话 / 会话列表 / 切换会话 / 会话历史 / 换模型 / 思考强度 / 权限 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话) work when the reply language is Chinese.",
357
379
  "sessions": "· /sessions — list this project's sessions; add a project number from /repo to list the ones this bot opened in another project",
380
+ "archived": "· /archived on|off — include archived sessions in this chat's session list; /archived alone shows the current setting",
358
381
  "resume": "· /resume number-or-id-prefix — switch sessions; one from another project switches the project too",
359
382
  "history": "· /history [count] — preview recent messages in the current session, in private chats only (default {{defaultCount}}, maximum {{maxCount}})",
360
383
  "model": "· /model — see the model this chat uses; /model number or /model instance/model switches it",
@@ -388,6 +411,28 @@
388
411
  "switchReadFailed": "Could not read the new model's reasoning efforts, so the model was not switched. Try again in a moment.",
389
412
  "listTitlePlain": "Available reasoning efforts:"
390
413
  },
414
+ "permission": {
415
+ "current": "Mode for new turns in this chat: {{mode}}",
416
+ "ceiling": "Bot ceiling: {{mode}}",
417
+ "cappedChoice": "This chat's choice: {{mode}} (above the bot ceiling, not in effect)",
418
+ "ceilingMarker": "bot ceiling",
419
+ "unavailable": "unavailable",
420
+ "usage": "Usage: /permission to list modes; /permission number or mode id to select; /permission default to use the bot setting.",
421
+ "nextTurn": "Applies from the next turn in this chat; a running turn keeps its mode.",
422
+ "notAllowed": "Only people on the bot's Allowed people list can change the mode. You can still send /permission to view the modes; ask the bot's admin to change it.",
423
+ "exceedsCeiling": "This mode exceeds the bot ceiling ({{mode}}). The chat setting was not changed. Send /permission to see the modes you can pick.",
424
+ "selected": "Mode for this chat set to: {{mode}}",
425
+ "reset": "Mode choice for this chat cleared; using the bot setting: {{mode}}",
426
+ "saveFailed": "Could not save the mode for this chat. The chat setting was not changed; try again.",
427
+ "alreadyDefault": "This chat has no mode of its own; it follows the bot setting: {{mode}}",
428
+ "numberOutOfRange": "Number {{number}} is out of range; the list is numbered 1–{{max}}.",
429
+ "notFound": "\"{{query}}\" is not a mode this bot knows.",
430
+ "savedChoice": "This chat's choice: {{mode}}",
431
+ "following": "This chat has no mode of its own; it follows the bot setting.",
432
+ "readOnly": "You're not on the bot's Allowed people list, so you can only view the modes; ask the bot's admin to change them.",
433
+ "readOnlyUnknown": "Your identity couldn't be confirmed, so you can only view the modes; ask the bot's admin to change them.",
434
+ "notAllowedUnknown": "Your identity couldn't be confirmed, so you can't change the mode. You can still send /permission to view the modes; ask the bot's admin to change it."
435
+ },
391
436
  "history": {
392
437
  "usage": "Usage: /history [count] — 1 to {{maxCount}} (larger numbers count as {{maxCount}}), default {{defaultCount}}.",
393
438
  "directOnly": "In a group this would show the session to everyone. Send /history in a private chat with the bot.",
@@ -420,7 +465,8 @@
420
465
  "current": "★ current",
421
466
  "running": "● running",
422
467
  "elsewhere": "in another chat",
423
- "web": "web"
468
+ "web": "web",
469
+ "archived": "archived"
424
470
  },
425
471
  "age": {
426
472
  "justNow": "just now",
@@ -435,6 +481,7 @@
435
481
  "busy": "A turn is running in this chat — send /stop first, then switch.",
436
482
  "already": "This chat is already on that session.",
437
483
  "gone": "That session was deleted or archived, so it cannot be resumed.",
484
+ "archived": "That session is archived and can't be continued. To just read it, open it on the web; to continue it, unarchive it on the web or in another client first, then switch to it, or send /new to start a new one.",
438
485
  "runningElsewhere": "That session is running a turn in another chat — stop it there first.",
439
486
  "done": "Switched to \"{{title}}\". Send a message to keep going from there.",
440
487
  "doneInProject": "Switched to project \"{{project}}\", session \"{{title}}\". Send a message to keep going from there.",
@@ -504,6 +551,7 @@
504
551
  "truncated": "… ({{count}} earlier characters not shown)",
505
552
  "approval": {
506
553
  "doneTitle": "Handled",
554
+ "timedOutTitle": "Denied automatically",
507
555
  "chosen": "Chosen: {{label}}",
508
556
  "elsewhere": "Already handled elsewhere (the web app or another client)."
509
557
  }
@@ -157,6 +157,10 @@
157
157
  "label": "忙时新消息",
158
158
  "description": "当前任务还在跑时,新来的普通文字怎么处理。排队会等当前轮结束(可点插话);插话则自动并入当前轮,无需每次点按钮。"
159
159
  },
160
+ "approvalTimeoutMinutes": {
161
+ "label": "审批超时(分钟)",
162
+ "description": "这么多分钟没人处理的审批会被自动拒绝。默认 60 分钟;请输入 0–1440 的整数,0 表示不自动拒绝;填写无效时按 60 分钟算。"
163
+ },
160
164
  "larkPanelMode": {
161
165
  "label": "指令面板",
162
166
  "description": "聊天里 /panel 或打 / 时列出的命令范围。精简隐藏低频系统项;手动输入同一命令仍可用。"
@@ -267,6 +271,7 @@
267
271
  "welcome": "已连上。直接发文字或图片就能开始,发 /help 看能用的命令。"
268
272
  },
269
273
  "approval": {
274
+ "timedOut": "{{minutes}} 分钟时限内没人处理,已自动拒绝。",
270
275
  "allow": "允许",
271
276
  "deny": "拒绝",
272
277
  "alreadyHandled": "已处理",
@@ -344,17 +349,35 @@
344
349
  "current": "Ycodium 聊天桥 v{{version}}",
345
350
  "usage": "用法:/version(不带参数)。"
346
351
  },
352
+ "compact": {
353
+ "usage": "用法:/compact(不带参数)。",
354
+ "busy": "正在回复,等这一轮结束后再发一次 /compact。",
355
+ "unsupported": "当前模型不支持压缩上下文,可先用 /model 换一个支持的模型。",
356
+ "started": "已开始压缩上下文,完成后会在这里说一声,期间照常发消息就行。",
357
+ "done": "上下文已压缩。",
358
+ "failed": "压缩上下文失败,请稍后重试。",
359
+ "stuck": "上一轮回复出错了,那一轮还没结束。先发 /stop 结束它,再发 /compact。",
360
+ "noSession": "这个聊天还没有当前会话。发一句话开一个,或用 /sessions 和 /resume 切过去,之后再发 /compact。"
361
+ },
362
+ "archived": {
363
+ "on": "已开启:会话列表会列出已归档的会话。列出来是为了找到它,看内容去网页,不能接着聊。",
364
+ "off": "已关闭:会话列表只列出未归档的会话。",
365
+ "usage": "用法:/archived on 或 /archived off。"
366
+ },
347
367
  "help": {
368
+ "permission": "· /permission —— 列出档位、新轮次的档位与机器人上限;/permission 编号或档位 ID 选择;/permission default(或「权限 默认」)回到机器人设置",
348
369
  "title": "能用的命令:",
349
370
  "continue": "· /continue —— /stop 或出错暂停了发送之后,用它恢复,排着的消息继续发出",
350
371
  "stop": "· /stop —— 停掉正在跑的这一轮,会话留着",
372
+ "compact": "· /compact —— 压缩当前会话的上下文(不带参数)",
351
373
  "status": "· /status —— 现在在干什么",
352
374
  "version": "· /version —— 聊天桥的版本(不带参数)",
353
375
  "new": "· /new —— 忘掉当前会话,下一句开新的",
354
376
  "team": "· /team —— 每条消息都给这个项目的团队开一个目标;先用 /repo 选项目",
355
377
  "thread": "· /thread —— 切回普通会话",
356
- "aliases": "中文也行:停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 会话历史 / 换模型 / 思考强度 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话。",
378
+ "aliases": "中文也行:停 / 继续发送 / 压缩 / 状态 / 新对话 / 会话列表 / 切换会话 / 会话历史 / 换模型 / 思考强度 / 权限 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话。",
357
379
  "sessions": "· /sessions —— 列出本项目的会话;加 /repo 里的项目编号,列出本机器人在别的项目开过的",
380
+ "archived": "· /archived on|off —— 让这个聊天的会话列表带上(on)或不带(off)已归档的会话;/archived 看当前开关",
358
381
  "resume": "· /resume 编号或 id 开头 —— 切会话;别的项目的会话会连同项目一起切",
359
382
  "history": "· /history [数量] —— 仅私聊:查看当前会话最近的消息(默认 {{defaultCount}} 条,最多 {{maxCount}} 条)",
360
383
  "model": "· /model —— 看这个聊天用的模型;/model 编号 或 /model 实例/模型 切换",
@@ -388,6 +411,28 @@
388
411
  "switchReadFailed": "暂时读不到新模型的思考强度选项,模型没有切换,请稍后重试。",
389
412
  "listTitlePlain": "可选思考强度:"
390
413
  },
414
+ "permission": {
415
+ "current": "这个聊天新轮次的档位:{{mode}}",
416
+ "ceiling": "机器人上限:{{mode}}",
417
+ "cappedChoice": "这个聊天的选择:{{mode}}(超过机器人上限,暂不生效)",
418
+ "ceilingMarker": "机器人上限",
419
+ "unavailable": "不可选",
420
+ "usage": "用法:/permission 查看档位;/permission 编号或档位 ID 选择;/permission default(或「权限 默认」)回到机器人设置。",
421
+ "nextTurn": "从这个聊天的下一轮起生效;正在运行的轮次保持原档位。",
422
+ "notAllowed": "只有机器人允许名单里的人能改档位。仍可发 /permission 查看档位;要改请联系机器人管理员。",
423
+ "exceedsCeiling": "这个档位超过机器人上限({{mode}}),没有修改聊天设置。发 /permission 看可选档位。",
424
+ "selected": "这个聊天的档位已设为:{{mode}}",
425
+ "reset": "已清除这个聊天的档位选择,回到机器人设置:{{mode}}",
426
+ "saveFailed": "无法保存这个聊天的档位,没有修改聊天设置,请重试。",
427
+ "alreadyDefault": "这个聊天未单独设置档位,正跟随机器人设置:{{mode}}",
428
+ "numberOutOfRange": "编号 {{number}} 超出范围,列表编号为 1–{{max}}。",
429
+ "notFound": "「{{query}}」不是可选的档位。",
430
+ "savedChoice": "这个聊天的选择:{{mode}}",
431
+ "following": "这个聊天未单独设置档位,跟随机器人设置。",
432
+ "readOnly": "你不在机器人允许名单里,只能查看档位;要改请联系机器人管理员。",
433
+ "readOnlyUnknown": "无法确认你的身份,只能查看档位;要改请联系机器人管理员。",
434
+ "notAllowedUnknown": "无法确认你的身份,不能改档位。仍可发 /permission 查看档位;要改请联系机器人管理员。"
435
+ },
391
436
  "history": {
392
437
  "usage": "用法:/history [数量] —— 1–{{maxCount}} 条(超出按 {{maxCount}} 条算),默认 {{defaultCount}} 条。",
393
438
  "directOnly": "在群里会把会话内容发给所有人。在与机器人的私聊里发 /history。",
@@ -420,7 +465,8 @@
420
465
  "current": "★ 当前",
421
466
  "running": "● 在跑",
422
467
  "elsewhere": "接在别的聊天",
423
- "web": "网页"
468
+ "web": "网页",
469
+ "archived": "已归档"
424
470
  },
425
471
  "age": {
426
472
  "justNow": "刚刚",
@@ -435,6 +481,7 @@
435
481
  "busy": "这个聊天有一轮正在跑——先 /stop,再切换。",
436
482
  "already": "这个聊天已经在那条会话里了。",
437
483
  "gone": "那条会话已被删除或归档,接不上了。",
484
+ "archived": "那条会话已归档,不能接着聊。只想看内容,去网页打开;想接着聊,先在网页或其他客户端里取消归档,再切过去,或发 /new 开新会话。",
438
485
  "runningElsewhere": "那条会话正在别的聊天里跑着一轮——先到那边停掉它。",
439
486
  "done": "已切到「{{title}}」。发一句话就从那里接着聊。",
440
487
  "doneInProject": "已切到项目「{{project}}」的会话「{{title}}」。发一句话就从那里接着聊。",
@@ -504,6 +551,7 @@
504
551
  "truncated": "…(前面 {{count}} 个字符没有显示)",
505
552
  "approval": {
506
553
  "doneTitle": "已处理",
554
+ "timedOutTitle": "已自动拒绝",
507
555
  "chosen": "已选:{{label}}",
508
556
  "elsewhere": "已在别处处理(网页或其他客户端)。"
509
557
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.3254",
3
+ "version": "0.2.3272",
4
4
  "description": "Talk to your agents from Telegram, WeCom, Lark, or WeChat (experimental).",
5
5
  "keywords": [
6
6
  "im",
@@ -32,8 +32,8 @@
32
32
  "markdown-it": "^15.0.2",
33
33
  "react": "19.2.6",
34
34
  "vite-plus": "0.2.2",
35
- "ycodium-react-test-harness": "0.0.0",
36
- "@ycodium-ai/plugin-api": "0.2.3254"
35
+ "@ycodium-ai/plugin-api": "0.2.3272",
36
+ "ycodium-react-test-harness": "0.0.0"
37
37
  },
38
38
  "ycodium": {
39
39
  "plugin": "./dist/index.js",
@@ -62,7 +62,8 @@
62
62
  "thread.user-input.respond",
63
63
  "thread.turn-intent.run",
64
64
  "thread.turn-intent.cancel",
65
- "thread.turn-queue.resume"
65
+ "thread.turn-queue.resume",
66
+ "thread.context.compact"
66
67
  ]
67
68
  },
68
69
  {