@ycodium-ai/plugin-im 0.2.3180 → 0.2.3202

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
@@ -170,7 +170,7 @@
170
170
  },
171
171
  "wecomAppCallbackBaseUrl": {
172
172
  "label": "Public callback base URL (optional)",
173
- "description": "When set, logs print the full callback URL to paste into WeCom “Receive messages → API receive”. Default listener is 127.0.0.1; use a reverse proxy or tunnel.",
173
+ "description": "The public address that forwards to this machine's callback port. When set, the full callback URL to paste into WeCom “Receive messages → API receive” appears below; otherwise only the path does.",
174
174
  "placeholder": "https://im.example.com or http://IP:30987"
175
175
  },
176
176
  "wecomAppApiBaseUrl": {
@@ -180,9 +180,14 @@
180
180
  },
181
181
  "wecomAppListenPort": {
182
182
  "label": "Local callback port (optional)",
183
- "description": "Defaults to 30987 on 127.0.0.1. Shared across self-built apps.",
183
+ "description": "Defaults to 30987. Self-built apps listening on the same address share one port; rows with different listen addresses (say 0.0.0.0 and 127.0.0.1) need different ports, or the second one fails to listen.",
184
184
  "placeholder": "30987"
185
185
  },
186
+ "wecomAppListenHost": {
187
+ "label": "Local listen address (optional)",
188
+ "description": "Defaults to 127.0.0.1: only this machine can reach the callback port, so put a reverse proxy or tunnel in front of it. 0.0.0.0 listens on every network interface, which opens the callback port to the network; only use it behind a firewall you control.",
189
+ "placeholder": "127.0.0.1"
190
+ },
186
191
  "wechatBotToken": {
187
192
  "label": "WeChat bot token",
188
193
  "description": "bot_token from QR binding. Live iLink login is gated by proposal 0069; filling this in does not connect yet."
@@ -193,6 +198,7 @@
193
198
  }
194
199
  },
195
200
  "reply": {
201
+ "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.",
196
202
  "conclusionRecovered": "(Finished while restarting; delivered now)",
197
203
  "notAllowed": "You are not on this bot's allow list, so this tap had no effect.",
198
204
  "noDefaultModel": "Project \"{{title}}\" has no agent selected yet, so a thread cannot be started. Send /model to pick one, or set a default in the project settings, then message again.",
@@ -216,7 +222,8 @@
216
222
  "unsupportedType": "I can't process {{type}} messages yet.",
217
223
  "unsupportedFolder": "Folders can't be downloaded. Zip it and send the archive instead.",
218
224
  "sendingFile": "Sending {{name}}:",
219
- "notAllowedYet": "You are not on the allow list yet. Your user id is {{id}}. Add it under Settings → Plugins → Chat, in this bot's \"Allowed people\" box."
225
+ "notAllowedYet": "You are not on the allow list yet. Your user id is {{id}}. Add it under Settings → Plugins → Chat, in this bot's \"Allowed people\" box.",
226
+ "received": "Got it, working on it."
220
227
  },
221
228
  "approval": {
222
229
  "allow": "Allow",
@@ -547,13 +554,16 @@
547
554
  "description": "Verify platform credentials still work; does not open a session or call a model.",
548
555
  "running": "Checking {{rowId}}…",
549
556
  "done": "Connection OK",
550
- "failed": "Connection failed (ref {{ref}})",
557
+ "failed": "Connection failed",
551
558
  "notSaved": "Save this row first (credentials are read from saved config only).",
552
559
  "hint": {
553
- "badToken": "This does not look like a bot token. Copy it again from BotFather: digits, a colon, then the key (ref {{ref}})",
554
- "unauthorized": "Telegram does not accept this token. It may have been revoked; get the current one from BotFather (ref {{ref}})",
555
- "notBot": "This token does not belong to a bot. Use the token BotFather gave you (ref {{ref}})",
556
- "webhookActive": "This bot has a webhook set by another service, so it cannot receive messages here. Remove the webhook there, then check again (ref {{ref}})"
560
+ "badToken": "This does not look like a bot token. Copy it again from BotFather: digits, a colon, then the key.",
561
+ "unauthorized": "Telegram does not accept this token. It may have been revoked; get the current one from BotFather.",
562
+ "notBot": "This token does not belong to a bot. Use the token BotFather gave you.",
563
+ "webhookActive": "This bot has a webhook set by another service, so it cannot receive messages here. Remove the webhook there, then check again.",
564
+ "wecomTrustedIp": "Add this machine's outbound public IP to the app's trusted IP list in the WeCom admin console.",
565
+ "wecomInvalidUser": "Check that the recipient, department or tag exists and is in this app's visible range.",
566
+ "wecomInvalidAgent": "Check the AgentId against this self-built application in the WeCom admin console."
557
567
  }
558
568
  },
559
569
  "copyDiagnostics": {
@@ -561,24 +571,24 @@
561
571
  "description": "Run a connection probe and produce copy-paste diagnostics (no secrets).",
562
572
  "running": "Building diagnostics for {{rowId}}…",
563
573
  "done": "Diagnostics ready — see details below",
564
- "failed": "Diagnostics failed (ref {{ref}})",
574
+ "failed": "Diagnostics failed",
565
575
  "notSaved": "Save this row first before copying diagnostics."
566
576
  },
567
577
  "diagnostic": {
568
- "ref": "Ref {{ref}}\n{{detail}}"
578
+ "ref": "Reference: {{ref}}\n{{detail}}"
569
579
  },
570
580
  "larkRepair": {
571
581
  "label": "Repair scopes",
572
- "description": "Verify the Lark app can still mint a token and list scope / publish steps.",
582
+ "description": "Check whether the saved credentials can mint a token; scopes, event subscriptions and publishing are not checked automatically.",
573
583
  "step": {
574
- "scopes": "Confirm message / resource / panel scopes",
575
- "events": "Confirm long connection and event subscriptions",
576
- "publish": "Publish if scopes were added",
584
+ "scopes": "Scopes — not checked",
585
+ "events": "Event subscriptions — not checked",
586
+ "publish": "Publishing — not checked",
577
587
  "verify": "Verify the app can still mint a tenant token"
578
588
  },
579
- "done": "Credentials work; add any missing scopes in the Feishu console and publish",
580
- "hint": "Ref {{ref}}\n{{detail}}\nIf scopes are missing, request them on the Feishu open platform and publish; a chat /repair command will follow.",
581
- "failed": "Could not verify the Lark app (ref {{ref}})",
589
+ "done": "Only token issuance was verified. Scopes, event subscriptions and publishing were not checked automatically; review them on the Feishu open platform.",
590
+ "hint": "Reference: {{ref}}\n{{detail}}\nReview scopes, event subscriptions and publishing on the Feishu open platform; none were checked automatically.",
591
+ "failed": "Could not mint a token with the saved credentials. Scopes, event subscriptions and publishing were not checked automatically; review them on the Feishu open platform.",
582
592
  "notLark": "This row is not a saved Lark bot."
583
593
  }
584
594
  },
@@ -617,7 +627,23 @@
617
627
  "removeFailed": "Couldn't delete this bot.",
618
628
  "status": {
619
629
  "ready": "Ready",
620
- "incomplete": "Incomplete"
630
+ "incomplete": "Incomplete",
631
+ "connecting": "Connecting",
632
+ "connected": "Connected",
633
+ "notConnected": "Not connected"
634
+ },
635
+ "connection": {
636
+ "failed": "The last connection attempt failed.",
637
+ "details": "Details: {{error}}",
638
+ "reason": {
639
+ "not-available": "This platform can't be connected yet.",
640
+ "invalid-app-id": "The App ID isn't in the right format.",
641
+ "disconnected": "The connection to the platform is down.",
642
+ "subscription-failed": "The platform didn't confirm the subscription.",
643
+ "token-unavailable": "Couldn't get an access token.",
644
+ "credentials-rejected": "The platform rejected the credentials."
645
+ },
646
+ "duplicate": "Uses the same credentials as “{{name}}”. Only that row connects."
621
647
  },
622
648
  "secret": {
623
649
  "saved": "Saved. Leave blank to keep it.",
@@ -629,7 +655,8 @@
629
655
  "format": "This format isn't right."
630
656
  },
631
657
  "publicField": {
632
- "callbackUrl": "Callback URL"
658
+ "callbackUrl": "Callback URL",
659
+ "callbackPath": "Callback path"
633
660
  },
634
661
  "action": {
635
662
  "running": "Working…",
@@ -655,6 +682,11 @@
655
682
  "untitled": "New target",
656
683
  "removeConfirm": "Delete this target",
657
684
  "removeFailed": "Couldn't delete this target."
685
+ },
686
+ "publicFieldHint": {
687
+ "callbackNeedsKeys": "Fill in Token and EncodingAESKey and save; the callback URL is derived from them and appears here.",
688
+ "callbackPathNeedsBase": "Put the public address that forwards to this machine in front of this path, or fill in the public callback base URL above to get the full URL.",
689
+ "callbackFollowsKeys": "This URL changes when Token or EncodingAESKey changes. Paste it into WeCom again after changing them."
658
690
  }
659
691
  },
660
692
  "team": {
@@ -170,7 +170,7 @@
170
170
  },
171
171
  "wecomAppCallbackBaseUrl": {
172
172
  "label": "公网回调基址(可选)",
173
- "description": "填公网可达的 http(s) 基址后,日志会打印完整回调 URL,把它贴进企微「接收消息 → 设置 API 接收」。不填只显示本机路径。默认监听 127.0.0.1,需反代或隧道。",
173
+ "description": "转发到本机回调端口的公网地址。填了下面就给出完整回调地址,贴进企业微信「接收消息 → 设置 API 接收」;不填只给路径。",
174
174
  "placeholder": "https://im.example.com 或 http://IP:30987"
175
175
  },
176
176
  "wecomAppApiBaseUrl": {
@@ -180,9 +180,14 @@
180
180
  },
181
181
  "wecomAppListenPort": {
182
182
  "label": "本机回调端口(可选)",
183
- "description": "默认 30987,只听 127.0.0.1。多台自建应用共用一个端口。",
183
+ "description": "默认 30987。监听地址相同的自建应用共用一个端口;监听地址不同的两行(比如 0.0.0.0 和 127.0.0.1)要用不同端口,否则后一个监听不起来。",
184
184
  "placeholder": "30987"
185
185
  },
186
+ "wecomAppListenHost": {
187
+ "label": "本机监听地址(可选)",
188
+ "description": "默认 127.0.0.1:只有本机连得上回调端口,需要在前面放反代或隧道。填 0.0.0.0 会在所有网卡上监听,等于把回调端口对外开放,要自己用防火墙控好。",
189
+ "placeholder": "127.0.0.1"
190
+ },
186
191
  "wechatBotToken": {
187
192
  "label": "微信机器人令牌",
188
193
  "description": "扫码绑定后得到的 bot_token。真登录尚未开放:填了也不会连上 iLink,见提案 0069 安全评审。"
@@ -193,6 +198,7 @@
193
198
  }
194
199
  },
195
200
  "reply": {
201
+ "wecomDeliveryFailed": "这条回复没送到企业微信里的 {{recipient}}:对方不在这个应用的可见范围。到企业微信管理后台把他们加进应用的可见范围,再让 agent 重发一次。",
196
202
  "conclusionRecovered": "(重启期间完成,现在补发)",
197
203
  "notAllowed": "你不在这个机器人的允许名单里,这次点击没有生效。",
198
204
  "noDefaultModel": "项目「{{title}}」还没选 agent,开不了会话。发 /model 选一个,或者到项目设置里设个默认,再发一次消息。",
@@ -216,7 +222,8 @@
216
222
  "unsupportedType": "我还不能处理 {{type}} 类型的消息。",
217
223
  "unsupportedFolder": "文件夹没法下载,请打包成压缩文件再发。",
218
224
  "sendingFile": "正在发送 {{name}}:",
219
- "notAllowedYet": "你还不在允许名单里,你的用户 id 是 {{id}},请把它填进 设置 → 插件 → 聊天 → 这个机器人的「允许的人」。"
225
+ "notAllowedYet": "你还不在允许名单里,你的用户 id 是 {{id}},请把它填进 设置 → 插件 → 聊天 → 这个机器人的「允许的人」。",
226
+ "received": "收到,在处理。"
220
227
  },
221
228
  "approval": {
222
229
  "allow": "允许",
@@ -547,13 +554,16 @@
547
554
  "description": "验证平台凭据是否仍可用;不会开会话,也不会调模型。",
548
555
  "running": "正在检查 {{rowId}} …",
549
556
  "done": "连接正常",
550
- "failed": "连接失败(参考号 {{ref}})",
557
+ "failed": "连接失败",
551
558
  "notSaved": "请先保存这一行再检查连接(凭据只从已保存配置读取)。",
552
559
  "hint": {
553
- "badToken": "这不像机器人的 token。到 BotFather 重新复制一份:数字、冒号,后面是密钥(参考号 {{ref}})",
554
- "unauthorized": "Telegram 不认这个 token,可能已经作废。到 BotFather 取现在的那一份(参考号 {{ref}})",
555
- "notBot": "这个 token 不是机器人的。请用 BotFather 给的那一份(参考号 {{ref}})",
556
- "webhookActive": "这个机器人被别的服务设了 webhook,在这里收不到消息。先到那边撤掉 webhook,再检查一次(参考号 {{ref}})"
560
+ "badToken": "这不像机器人的 token。到 BotFather 重新复制一份:数字、冒号,后面是密钥。",
561
+ "unauthorized": "Telegram 不认这个 token,可能已经作废。到 BotFather 取现在的那一份。",
562
+ "notBot": "这个 token 不是机器人的。请用 BotFather 给的那一份。",
563
+ "webhookActive": "这个机器人被别的服务设了 webhook,在这里收不到消息。先到那边撤掉 webhook,再检查一次。",
564
+ "wecomTrustedIp": "把这台机器的出站公网 IP 加进企业微信后台这个应用的企业可信 IP。",
565
+ "wecomInvalidUser": "确认收件人、部门或标签存在,并在这个自建应用的可见范围内。",
566
+ "wecomInvalidAgent": "核对企业微信后台这个自建应用的 AgentId。"
557
567
  }
558
568
  },
559
569
  "copyDiagnostics": {
@@ -561,24 +571,24 @@
561
571
  "description": "跑一次连接探测,生成可复制的诊断文本(不含密钥)。",
562
572
  "running": "正在生成诊断 {{rowId}} …",
563
573
  "done": "诊断已生成,见下方详情",
564
- "failed": "诊断失败(参考号 {{ref}})",
574
+ "failed": "诊断失败",
565
575
  "notSaved": "请先保存这一行再复制诊断。"
566
576
  },
567
577
  "diagnostic": {
568
- "ref": "参考号 {{ref}}\n{{detail}}"
578
+ "ref": "参考号:{{ref}}\n{{detail}}"
569
579
  },
570
580
  "larkRepair": {
571
581
  "label": "补全权限",
572
- "description": "核对飞书应用仍能换 token,并提示需要补的权限与发布步骤。",
582
+ "description": "检查已保存的凭据能否换取 token;权限、事件订阅和发布不会自动检查。",
573
583
  "step": {
574
- "scopes": "确认消息 / 资源 / 面板等权限",
575
- "events": "确认长连接与事件订阅",
576
- "publish": "如有增量权限,完成发布审批",
584
+ "scopes": "权限:未检查",
585
+ "events": "事件订阅:未检查",
586
+ "publish": "发布:未检查",
577
587
  "verify": "验证应用仍可换取 tenant token"
578
588
  },
579
- "done": "凭据可用;若权限不足请按飞书控制台补齐后发布",
580
- "hint": "参考号 {{ref}}\n{{detail}}\n缺权限时可在飞书开放平台对该应用增量申请并发布;聊天侧 /repair 命令后续补齐。",
581
- "failed": "无法验证飞书应用(参考号 {{ref}})",
589
+ "done": "仅核实了凭据仍能换取 token;权限、事件订阅和发布没有自动检查,请到飞书开放平台核对。",
590
+ "hint": "参考号:{{ref}}\n{{detail}}\n请到飞书开放平台核对权限、事件订阅和发布;这三项均未自动检查。",
591
+ "failed": "已保存的凭据未能换取 token;权限、事件订阅和发布没有自动检查,请到飞书开放平台核对。",
582
592
  "notLark": "这一行不是已保存的飞书机器人。"
583
593
  }
584
594
  },
@@ -616,8 +626,24 @@
616
626
  "copyFailed": "没复制上。",
617
627
  "removeFailed": "没能删掉这个机器人。",
618
628
  "status": {
619
- "ready": "可用",
620
- "incomplete": "还没填完"
629
+ "ready": "就绪",
630
+ "incomplete": "待补全",
631
+ "connecting": "连接中",
632
+ "connected": "已连接",
633
+ "notConnected": "未连接"
634
+ },
635
+ "connection": {
636
+ "failed": "上次连接没有成功。",
637
+ "details": "详情:{{error}}",
638
+ "reason": {
639
+ "not-available": "这个平台还不能连接。",
640
+ "invalid-app-id": "App ID 格式不正确。",
641
+ "disconnected": "和平台的连接断了。",
642
+ "subscription-failed": "平台没有确认订阅。",
643
+ "token-unavailable": "没能换到访问令牌。",
644
+ "credentials-rejected": "平台拒绝了凭据。"
645
+ },
646
+ "duplicate": "和「{{name}}」用的是同一份凭据,只连那一行。"
621
647
  },
622
648
  "secret": {
623
649
  "saved": "已经存过,留空就保持原值。",
@@ -629,7 +655,8 @@
629
655
  "format": "这个格式不对。"
630
656
  },
631
657
  "publicField": {
632
- "callbackUrl": "回调地址"
658
+ "callbackUrl": "回调地址",
659
+ "callbackPath": "回调路径"
633
660
  },
634
661
  "action": {
635
662
  "running": "正在处理…",
@@ -655,6 +682,11 @@
655
682
  "untitled": "新目标",
656
683
  "removeConfirm": "删除这个目标",
657
684
  "removeFailed": "这个目标没删掉。"
685
+ },
686
+ "publicFieldHint": {
687
+ "callbackNeedsKeys": "填好 Token 和 EncodingAESKey 并保存后,这里给出回调地址(地址由它俩算出)。",
688
+ "callbackPathNeedsBase": "把转发到本机的公网地址拼在这段路径前面,或在上面填公网回调基址,这里就给出完整地址。",
689
+ "callbackFollowsKeys": "改了 Token 或 EncodingAESKey,这个地址会变,要重新贴进企业微信。"
658
690
  }
659
691
  },
660
692
  "team": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.3180",
3
+ "version": "0.2.3202",
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.3180"
35
+ "@ycodium-ai/plugin-api": "0.2.3202"
36
36
  },
37
37
  "ycodium": {
38
38
  "plugin": "./dist/index.js",
@@ -54,6 +54,7 @@
54
54
  "commands": [
55
55
  "thread.create",
56
56
  "thread.meta.update",
57
+ "thread.external-messages.append",
57
58
  "thread.turn.start",
58
59
  "thread.turn.interrupt",
59
60
  "thread.approval.respond",