@ycodium-ai/plugin-im 0.2.3236 → 0.2.3240

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
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "settings": {
9
9
  "title": "Chat",
10
- "description": "Connect chat bots to Ycodium. One row per bot: create the bot on its platform, paste its credentials, and pick an access mode (allowlist / open). In allowlist mode, list the people allowed to use it. For Lark, Connect a Lark bot does all of that with one scan. Admitted people message the bot (or add it to a group), pick a project in the chat, and can start work.",
10
+ "description": "Connect chat bots to Ycodium. One row per bot: create the bot on its platform, paste its credentials, and pick one access mode that decides who can use it in private chats and groups. Where the allowlist applies, list the people in \"Allowed people\". For Lark, Connect a Lark bot does all of that with one scan. Admitted people message the bot (or add it to a group), pick a project in the chat, and can start work.",
11
11
  "bots": "Bots",
12
12
  "language": {
13
13
  "label": "Reply language",
@@ -15,6 +15,14 @@
15
15
  "zhCN": "中文",
16
16
  "en": "English"
17
17
  },
18
+ "defaultModel": {
19
+ "follow": "Follow chat / project default",
20
+ "unavailable": "{{value}} (unavailable)"
21
+ },
22
+ "defaultPreset": {
23
+ "none": "No preset",
24
+ "unavailable": "{{value}} (unavailable)"
25
+ },
18
26
  "runtimeMode": {
19
27
  "approvalRequired": "Ask before commands and file changes",
20
28
  "autoAcceptEdits": "Auto-accept edits, ask before other actions",
@@ -63,7 +71,9 @@
63
71
  },
64
72
  "accessMode": {
65
73
  "allowlist": "Allowlist only (default)",
66
- "open": "Allow everyone"
74
+ "open": "Allow everyone",
75
+ "privateOpen": "Private chats: open; groups: allowlist",
76
+ "groupOpen": "Private chats: allowlist; groups: open"
67
77
  }
68
78
  },
69
79
  "platform": {
@@ -99,12 +109,20 @@
99
109
  },
100
110
  "allowedSenders": {
101
111
  "label": "Allowed people",
102
- "description": "Comma-separated user ids from that platform. Used only in allowlist mode; while the list is empty, nobody can. Message the bot and it tells you your own id."
112
+ "description": "Comma-separated user ids from that platform. Used in chats where the access mode requires the allowlist; while the list is empty, nobody can use the bot in those chats. To find an id: from an account not yet on the list, message the bot in a chat that requires the allowlist (mention it in a group). The bot replies with the id, at most once every 10 minutes per account."
103
113
  },
104
114
  "proxy": {
105
115
  "label": "Proxy",
106
116
  "description": "Some platforms are only reachable through a proxy on this machine, and which one can differ per bot."
107
117
  },
118
+ "defaultModel": {
119
+ "label": "Default model",
120
+ "description": "Used for new sessions when the chat has no /model selection. Existing sessions keep their model; send /new to use this default. Unavailable choices fall back to the project default."
121
+ },
122
+ "defaultPreset": {
123
+ "label": "Default preset",
124
+ "description": "Used for new sessions when the chat has no /preset selection. Existing sessions keep their preset; send /new to use this default. Unavailable presets are skipped."
125
+ },
108
126
  "runtimeMode": {
109
127
  "label": "What a chat message may do",
110
128
  "description": "Admitted people start turns from chat, so this is deliberately not full access by default. Whichever mode asks, the request lands in the chat."
@@ -151,6 +169,10 @@
151
169
  "label": "Numbered-reply hints",
152
170
  "description": "WeCom has no buttons; approvals and questions use reply numbers. When on, include fuller usage hints."
153
171
  },
172
+ "wecomAppStream": {
173
+ "label": "Streaming replies",
174
+ "description": "Off by default: the bot first confirms it got the message and sends the full reply once finished. When on, replies appear as they are written if the WeCom client supports it; otherwise the full reply is sent as text automatically when it is done. Turning it on is a trial: whether the WeCom client shows replies as they are written has not been verified."
175
+ },
154
176
  "wecomAppCorpId": {
155
177
  "label": "Corp ID",
156
178
  "placeholder": "ww…"
@@ -195,11 +217,12 @@
195
217
  },
196
218
  "accessMode": {
197
219
  "label": "Access mode",
198
- "description": "Allowlist admits only \"Allowed people\"; open admits any identifiable sender. New bots default to allowlist."
220
+ "description": "Allowlist admits only \"Allowed people\"; open admits any identifiable sender. New bots default to allowlist. \"Private chats: open; groups: allowlist\" and \"Private chats: allowlist; groups: open\" share the same \"Allowed people\"; in either of them, when the chat type cannot be confirmed, only \"Allowed people\" can use the bot."
199
221
  }
200
222
  },
201
223
  "reply": {
202
224
  "deliveryFailed": "The reply could not be delivered. Check this bot's connection and permissions, then try again.",
225
+ "connectionTest": "✅ Ycodium connection test\nThis test message was sent by “{{name}}” using Check connection in Settings. No reply needed.",
203
226
  "wecomDeliveryFailed": "This reply didn't reach {{recipient}} in WeCom: they are outside this app's visible range. Add them to the app's visible range in the WeCom admin console, then ask the agent to send it again.",
204
227
  "conclusionRecovered": "(Finished while restarting; delivered now)",
205
228
  "notAllowed": "You are not on this bot's allow list, so this tap had no effect.",
@@ -327,6 +350,7 @@
327
350
  "sessions": "· /sessions — list this project's sessions; add a project number from /repo to list the ones this bot opened in another project",
328
351
  "resume": "· /resume number-or-id-prefix — switch sessions; one from another project switches the project too",
329
352
  "model": "· /model — see the model this chat uses; /model number or /model instance/model switches it",
353
+ "preset": "· /preset — see the preset this chat uses for new sessions; /preset number or /preset name-or-id switches it; /preset none clears the chat choice",
330
354
  "plan": "· /plan — toggle plan mode (the agent proposes a plan instead of acting); /plan on, /plan off set it",
331
355
  "panel": "Send /panel to open the command panel with a button for every command.",
332
356
  "repo": "· /repo — pick the project this chat works on; /repo number or /repo name picks directly",
@@ -373,6 +397,23 @@
373
397
  "cancelled": "Attach cancelled.",
374
398
  "nothingPending": "No web session is waiting for confirm. Use /sessions to see the list."
375
399
  },
400
+ "preset": {
401
+ "current": "This chat's preset for new sessions: {{preset}}",
402
+ "botDefault": "Bot default preset for this chat's new sessions: {{preset}}",
403
+ "none": "No preset for this chat's new sessions.",
404
+ "unavailable": "{{value}} (unavailable)",
405
+ "item": "{{label}} ({{id}})",
406
+ "listTitle": "Available presets:",
407
+ "more": "{{count}} more not shown — pick one with /preset name-or-id.",
408
+ "empty": "No presets are available.",
409
+ "footer": "Switch with /preset number, or /preset name-or-id. Clear the chat choice with /preset none to use the bot default.",
410
+ "existing": "Existing sessions keep their preset. Send /new, then a message to use the new setting.",
411
+ "updated": "This chat's preset for new sessions set to: {{preset}}",
412
+ "cleared": "Chat preset cleared. New sessions will use the bot default, if one is set.",
413
+ "notFound": "No single preset matches \"{{query}}\". Use /preset to see the list.",
414
+ "readFailed": "Could not read the preset list. Try again later.",
415
+ "textOnly": "Preset commands only accept text. Remove attachments and try again."
416
+ },
376
417
  "model": {
377
418
  "current": "Model: {{model}}",
378
419
  "currentUnknown": "Model: not decided yet — a new session uses the project's default.",
@@ -424,6 +465,8 @@
424
465
  "panel": {
425
466
  "title": "Command panel",
426
467
  "hint": "A button does the same as typing its command. You can still type.",
468
+ "wecomTruncated": "Some commands do not fit on this card. Send /help for the full list, then type the command; in a group, mention the bot first.",
469
+ "wecomExpired": "This panel has expired. Send /panel again; in a group, mention the bot first.",
427
470
  "category": {
428
471
  "session": "Session",
429
472
  "target": "Send to",
@@ -596,11 +639,20 @@
596
639
  "rowAction": {
597
640
  "checkConnection": {
598
641
  "label": "Check connection",
599
- "description": "Verify platform credentials still work; does not open a session or call a model.",
642
+ "description": "Verify credentials and send a test message to the most recent private chat; does not open a session or call a model.",
600
643
  "running": "Checking {{rowId}}…",
601
644
  "done": "Connection OK",
645
+ "doneTestFailed": "Credentials OK, but the test message was not sent",
646
+ "doneNoTarget": "Credentials OK, but no test message was sent",
602
647
  "failed": "Connection failed",
603
648
  "notSaved": "Save this row first (credentials are read from saved config only).",
649
+ "credentialRef": "Credential check reference: {{ref}}\n{{detail}}",
650
+ "testMessage": {
651
+ "sent": "Sent to whoever last messaged the bot privately. Ask them to confirm.",
652
+ "test-target-unavailable": "No private chat to test with yet. Message the bot privately from an account allowed to use the bot, then check again.",
653
+ "test-message-failed": "Check that the bot can still send to that private chat (reason below), then check again.",
654
+ "ref": "Test message reference: {{ref}}\n{{detail}}"
655
+ },
604
656
  "hint": {
605
657
  "networkMultipleCauses": "This failure has more than one network cause. Check this machine's network and this bot's Proxy setting, then check again.",
606
658
  "networkDns": "The service's domain name could not be resolved. Check this machine's DNS and network settings, then check again.",
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "settings": {
9
9
  "title": "聊天",
10
- "description": "把聊天机器人接到 Ycodium。一行一个机器人:先在对应平台建好机器人、把凭据填进来,再选访问模式(仅白名单/允许所有人)。仅白名单时把允许使用它的人填进「允许的人」。飞书可以用「连接飞书机器人」,扫一次码全部配好。获准的人私聊机器人(或把它拉进群)、在聊天里选好项目,就能派活。",
10
+ "description": "把聊天机器人接到 Ycodium。一行一个机器人:先在对应平台建好机器人、把凭据填进来,再选一个访问模式,决定私聊和群里谁能用;用到名单时,把人填进「允许的人」。飞书可以用「连接飞书机器人」,扫一次码全部配好。获准的人私聊机器人(或把它拉进群)、在聊天里选好项目,就能派活。",
11
11
  "bots": "机器人",
12
12
  "language": {
13
13
  "label": "回话语言",
@@ -15,6 +15,14 @@
15
15
  "zhCN": "中文",
16
16
  "en": "English"
17
17
  },
18
+ "defaultModel": {
19
+ "follow": "跟随聊天 / 项目默认",
20
+ "unavailable": "{{value}}(不可用)"
21
+ },
22
+ "defaultPreset": {
23
+ "none": "无预设",
24
+ "unavailable": "{{value}}(不可用)"
25
+ },
18
26
  "runtimeMode": {
19
27
  "approvalRequired": "命令和改文件前先问",
20
28
  "autoAcceptEdits": "自动接受改动,其他操作先问",
@@ -63,7 +71,9 @@
63
71
  },
64
72
  "accessMode": {
65
73
  "allowlist": "仅白名单(默认)",
66
- "open": "允许所有人"
74
+ "open": "允许所有人",
75
+ "privateOpen": "私聊放开,群里限名单",
76
+ "groupOpen": "私聊限名单,群里放开"
67
77
  }
68
78
  },
69
79
  "platform": {
@@ -99,12 +109,20 @@
99
109
  },
100
110
  "allowedSenders": {
101
111
  "label": "允许的人",
102
- "description": "该平台的用户 id,逗号分隔。仅在「仅白名单」模式下生效;留空则谁都不能。给机器人发一句话,它会告诉你自己的 id。"
112
+ "description": "该平台的用户 id,逗号分隔。在访问模式要求名单的聊天里生效;留空则谁都不能在这些聊天里使用机器人。查 id:用还不在名单上的账号,在要求名单的聊天里给机器人发一句话(群里要 @ 它),它会回复这个 id;同一账号 10 分钟内只回一次。"
103
113
  },
104
114
  "proxy": {
105
115
  "label": "代理",
106
116
  "description": "有些平台只能经本机上的某个代理才连得上,而且每个机器人可以不一样。"
107
117
  },
118
+ "defaultModel": {
119
+ "label": "默认模型",
120
+ "description": "聊天未用 /model 选模型时,新会话使用此默认模型。已有会话保留原模型;发送 /new 后使用新默认。不可用时回退到项目默认。"
121
+ },
122
+ "defaultPreset": {
123
+ "label": "默认预设",
124
+ "description": "聊天未用 /preset 选预设时,新会话使用此预设。已有会话保留原预设;发送 /new 后使用新默认。不可用的预设会跳过。"
125
+ },
108
126
  "runtimeMode": {
109
127
  "label": "聊天消息能做什么",
110
128
  "description": "获准的人都能从聊天里开一轮,所以默认故意不给满权限。不论选哪一档,要拍板的事都会摆到聊天里。"
@@ -151,6 +169,10 @@
151
169
  "label": "编号应答提示",
152
170
  "description": "企微没有按钮,审批与提问靠回编号。开启时附带更完整的用法说明。"
153
171
  },
172
+ "wecomAppStream": {
173
+ "label": "流式回复",
174
+ "description": "默认关闭:先回一句确认,处理完再发送完整回复。开启后,企微能边写边出时逐步显示回复;不能时,完成后自动以文本发送完整回复。开启属于试用:企业微信客户端是否显示边写边出尚未验证。"
175
+ },
154
176
  "wecomAppCorpId": {
155
177
  "label": "企业 ID(CorpID)",
156
178
  "placeholder": "ww…"
@@ -195,11 +217,12 @@
195
217
  },
196
218
  "accessMode": {
197
219
  "label": "访问模式",
198
- "description": "仅白名单=只有「允许的人」能触发;允许所有人=平台能识别的发送者均可。新机器人默认仅白名单。"
220
+ "description": "仅白名单=只有「允许的人」能触发;允许所有人=平台能识别的发送者均可。新机器人默认仅白名单。「私聊放开,群里限名单」与「私聊限名单,群里放开」共用同一份「允许的人」;这两种模式下,无法确认是私聊还是群时,只有「允许的人」能用机器人。"
199
221
  }
200
222
  },
201
223
  "reply": {
202
224
  "deliveryFailed": "回复未能送达。请检查这个机器人的连接与权限,然后重试。",
225
+ "connectionTest": "✅ Ycodium 连接测试\n这条测试消息由「{{name}}」机器人通过设置页的「检查连接」发出,无需回复。",
203
226
  "wecomDeliveryFailed": "这条回复没送到企业微信里的 {{recipient}}:对方不在这个应用的可见范围。到企业微信管理后台把他们加进应用的可见范围,再让 agent 重发一次。",
204
227
  "conclusionRecovered": "(重启期间完成,现在补发)",
205
228
  "notAllowed": "你不在这个机器人的允许名单里,这次点击没有生效。",
@@ -327,6 +350,7 @@
327
350
  "sessions": "· /sessions —— 列出本项目的会话;加 /repo 里的项目编号,列出本机器人在别的项目开过的",
328
351
  "resume": "· /resume 编号或 id 开头 —— 切会话;别的项目的会话会连同项目一起切",
329
352
  "model": "· /model —— 看这个聊天用的模型;/model 编号 或 /model 实例/模型 切换",
353
+ "preset": "· /preset —— 看这个聊天新会话用的预设;/preset 编号 或 /preset 名字或 id 切换;/preset none 清掉聊天选择",
330
354
  "plan": "· /plan —— 开关计划模式(agent 先出计划、不动手);/plan on、/plan off 明确设定",
331
355
  "panel": "发 /panel 打开可点的命令面板。",
332
356
  "repo": "· /repo —— 选这个聊天做哪个项目;/repo 编号 或 /repo 项目名 直接选",
@@ -373,6 +397,23 @@
373
397
  "cancelled": "已取消附着。",
374
398
  "nothingPending": "没有待确认的网页会话。用 /sessions 看看有哪些。"
375
399
  },
400
+ "preset": {
401
+ "current": "这个聊天新会话用的预设:{{preset}}",
402
+ "botDefault": "这个聊天新会话的机器人默认预设:{{preset}}",
403
+ "none": "这个聊天的新会话没有预设。",
404
+ "unavailable": "{{value}}(不可用)",
405
+ "item": "{{label}}({{id}})",
406
+ "listTitle": "可选的预设:",
407
+ "more": "还有 {{count}} 个没列出——用 /preset 名字或 id 也能选到。",
408
+ "empty": "没有可选的预设。",
409
+ "footer": "用 /preset 编号 切换,或 /preset 名字或 id。/preset none 清掉聊天选择,改用机器人默认预设。",
410
+ "existing": "已有会话保留原预设。发 /new,再发一条消息,才会用上新设置。",
411
+ "updated": "这个聊天新会话用的预设已设为:{{preset}}",
412
+ "cleared": "已清掉聊天预设。新会话改用机器人默认预设(若已设置)。",
413
+ "notFound": "没有唯一对得上「{{query}}」的预设。用 /preset 看看有哪些。",
414
+ "readFailed": "现在读不出预设列表,稍后再试。",
415
+ "textOnly": "预设命令只接受文字。去掉附件后再试。"
416
+ },
376
417
  "model": {
377
418
  "current": "模型:{{model}}",
378
419
  "currentUnknown": "模型:还没定——新开会话时用项目的默认模型。",
@@ -424,6 +465,8 @@
424
465
  "panel": {
425
466
  "title": "命令面板",
426
467
  "hint": "点按钮等于打出对应的命令,也可以直接打字。",
468
+ "wecomTruncated": "这张卡放不下全部命令。发送 /help 查看全部命令,再直接输入命令;在群里要先 @ 机器人。",
469
+ "wecomExpired": "这个面板已过期,请重新发送 /panel;在群里要先 @ 机器人。",
427
470
  "category": {
428
471
  "session": "会话",
429
472
  "target": "派给谁",
@@ -596,11 +639,20 @@
596
639
  "rowAction": {
597
640
  "checkConnection": {
598
641
  "label": "检查连接",
599
- "description": "验证平台凭据是否仍可用;不会开会话,也不会调模型。",
642
+ "description": "验证平台凭据,并向最近的私聊发一条测试消息;不会开会话,也不会调模型。",
600
643
  "running": "正在检查 {{rowId}} …",
601
644
  "done": "连接正常",
645
+ "doneTestFailed": "凭据正常,但测试消息没发出去",
646
+ "doneNoTarget": "凭据正常,但还没发测试消息",
602
647
  "failed": "连接失败",
603
648
  "notSaved": "请先保存这一行再检查连接(凭据只从已保存配置读取)。",
649
+ "credentialRef": "凭据检查参考号:{{ref}}\n{{detail}}",
650
+ "testMessage": {
651
+ "sent": "已发到最近私聊过机器人的人,请对方确认收到。",
652
+ "test-target-unavailable": "还没有可用于测试的私聊。用获准使用这个机器人的账号私聊它一句,再检查。",
653
+ "test-message-failed": "确认机器人还能在那个私聊里发消息(原因见下方),再检查。",
654
+ "ref": "测试消息参考号:{{ref}}\n{{detail}}"
655
+ },
604
656
  "hint": {
605
657
  "networkMultipleCauses": "这次失败背后不止一种网络问题。请检查这台机器的网络和这个机器人的「代理」设置,再检查一次。",
606
658
  "networkDns": "服务域名解析失败。请检查这台机器的 DNS 和网络设置,再检查一次。",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.3236",
3
+ "version": "0.2.3240",
4
4
  "description": "Talk to your agents from Telegram, WeCom, Lark, or WeChat (experimental).",
5
5
  "keywords": [
6
6
  "im",
@@ -32,7 +32,7 @@
32
32
  "markdown-it": "^15.0.2",
33
33
  "react": "19.2.6",
34
34
  "vite-plus": "0.2.2",
35
- "@ycodium-ai/plugin-api": "0.2.3236",
35
+ "@ycodium-ai/plugin-api": "0.2.3240",
36
36
  "ycodium-react-test-harness": "0.0.0"
37
37
  },
38
38
  "ycodium": {