@ycodium-ai/plugin-im 0.2.2678 → 0.2.2690

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
@@ -1,25 +1,24 @@
1
1
  {
2
2
  "settings": {
3
3
  "title": "Chat",
4
- "description": "Connect chat groups to Ycodium. One row per group: create a bot on that platform, add it to the group, and paste its credentials. Pick a project and that group can start work; leave the project empty and the row only reports, on every project.",
5
- "groups": "Groups",
4
+ "description": "Connect chat bots to Ycodium. One row per bot: create the bot on its platform, paste its credentials, and list the people allowed to use it. Those people message the bot (or add it to a group), pick a project in the chat, and can start work.",
5
+ "bots": "Bots",
6
6
  "language": {
7
7
  "label": "Reply language",
8
- "description": "The language of the bot's own sentences in the group: help, status, confirmations and notices. Chinese shortcut commands only work when this is Chinese. Saving restarts the plugin.",
8
+ "description": "The language of the bot's own sentences in the chat: help, status, confirmations and notices. Chinese shortcut commands only work when this is Chinese. Saving restarts the plugin.",
9
9
  "zhCN": "中文",
10
10
  "en": "English"
11
11
  },
12
- "reportOnly": "Report only, all projects",
13
- "archivedSuffix": "(archived)",
14
12
  "runtimeMode": {
15
13
  "approvalRequired": "Ask before commands and file changes",
16
14
  "autoAcceptEdits": "Auto-accept edits, ask before other actions",
17
15
  "auto": "Approve routine actions",
18
16
  "fullAccess": "Commands and edits without prompts"
19
17
  },
20
- "notifyMode": {
21
- "turn": "One message per finished turn",
22
- "message": "Every reply the agent completes"
18
+ "groupMention": {
19
+ "always": "Only when it is mentioned",
20
+ "never": "Every message",
21
+ "ambient": "Every message, except ones aimed at someone else"
23
22
  }
24
23
  },
25
24
  "platform": {
@@ -30,7 +29,7 @@
30
29
  "column": {
31
30
  "displayName": {
32
31
  "label": "Name",
33
- "placeholder": "Team chat"
32
+ "placeholder": "Team bot"
34
33
  },
35
34
  "platform": {
36
35
  "label": "Platform"
@@ -51,38 +50,30 @@
51
50
  "wecomBotSecret": {
52
51
  "label": "WeCom bot secret"
53
52
  },
54
- "chatId": {
55
- "label": "Group id",
56
- "description": "The platform's own id for the group to post in."
57
- },
58
53
  "allowedSenders": {
59
- "label": "Who may command the bot",
60
- "description": "Comma-separated user ids from that platform. Empty means anyone in the group can make the agent run things on this machine."
54
+ "label": "Allowed people",
55
+ "description": "Comma-separated user ids from that platform. Only these people can make the agent work on this machine; while the list is empty, nobody can. Message the bot and it tells you your own id."
61
56
  },
62
57
  "proxy": {
63
58
  "label": "Proxy",
64
- "description": "Some platforms are only reachable through a proxy on this machine, and which one can differ per row."
65
- },
66
- "projectId": {
67
- "label": "Project",
68
- "description": "Where a message from this group starts its thread. Empty means the row only reports, and reports every project."
59
+ "description": "Some platforms are only reachable through a proxy on this machine, and which one can differ per bot."
69
60
  },
70
61
  "runtimeMode": {
71
62
  "label": "What a chat message may do",
72
- "description": "Anyone who can mention the bot starts a turn, so this is deliberately not full access by default. Whichever mode asks, the request lands in the group."
63
+ "description": "People on the allow list start turns from chat, so this is deliberately not full access by default. Whichever mode asks, the request lands in the chat."
73
64
  },
74
- "mode": {
75
- "label": "How much to send",
76
- "description": "A single turn can produce dozens of assistant messages — mostly commentary between tool calls — so one per finished turn is the readable default."
65
+ "groupMention": {
66
+ "label": "In groups, answer",
67
+ "description": "When the bot answers in a group (unset means only when it is mentioned); direct chats always count. WeCom only delivers messages that mention the bot, so this changes nothing there."
77
68
  }
78
69
  },
79
70
  "reply": {
80
- "notAllowed": "You are not on this group's allow list, so this tap had no effect.",
71
+ "notAllowed": "You are not on this bot's allow list, so this tap had no effect.",
81
72
  "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.",
82
- "projectArchived": "Project \"{{title}}\" is archived. Restore it, then message again.",
83
- "projectMissing": "The project bound to \"{{group}}\" is no longer on this machine (it may have been deleted), so a thread cannot be started. In Ycodium's chat settings, pick a project for this group again.",
84
- "threadGone": "The earlier session was deleted or archived, so this group now starts a new one.",
85
- "teamGone": "The team this group was sending to no longer exists, so messages go to a normal session again.",
73
+ "projectArchived": "Project \"{{title}}\" is archived. Restore it, or send /repo to pick another project, then message again.",
74
+ "projectMissing": "The project this chat was working on is no longer on this machine (it may have been deleted), so a thread cannot be started. Send /repo to pick another one.",
75
+ "threadGone": "The earlier session was deleted or archived, so this chat now starts a new one.",
76
+ "teamGone": "The team this chat was sending to no longer exists, so messages go to a normal session again.",
86
77
  "attachmentReceived": "Got {{names}} ({{count}} waiting). Tell me what to do with them.",
87
78
  "attachmentFailed": "Could not take {{name}}: {{reason}}.",
88
79
  "attachmentReason": {
@@ -95,7 +86,8 @@
95
86
  "attachmentsNoTeam": "Files cannot be sent to a team yet, so they were left out. Send /thread to go back to a normal session.",
96
87
  "unsupportedType": "I can't process {{type}} messages yet.",
97
88
  "unsupportedFolder": "Folders can't be downloaded. Zip it and send the archive instead.",
98
- "sendingFile": "Sending {{name}}:"
89
+ "sendingFile": "Sending {{name}}:",
90
+ "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."
99
91
  },
100
92
  "approval": {
101
93
  "allow": "Allow",
@@ -153,10 +145,10 @@
153
145
  "teamNotFound": "No team is called \"{{query}}\", or more than one matches.",
154
146
  "noTeams": "There are no teams on this machine yet.",
155
147
  "newSession": "OK. The next message starts a new session.",
156
- "stopNoSession": "Nothing is running in this group.",
148
+ "stopNoSession": "Nothing is running in this chat.",
157
149
  "stopNoTurn": "No turn is running right now.",
158
150
  "continued": "Resumed. The waiting messages are being sent.",
159
- "continueNothing": "Nothing to resume: sending is not paused in this group.",
151
+ "continueNothing": "Nothing to resume: sending is not paused in this chat.",
160
152
  "continueFailed": "Could not resume sending. Try again in a moment.",
161
153
  "stopped": "Stopped. The session is still there — just keep talking."
162
154
  },
@@ -168,10 +160,12 @@
168
160
  "running": "Running. Send /stop to stop it.",
169
161
  "idle": "Idle.",
170
162
  "model": "Model: {{model}}",
171
- "planOn": "Plan mode: on"
163
+ "planOn": "Plan mode: on",
164
+ "project": "Project: {{title}}",
165
+ "noProject": "No project picked yet. Send /repo to pick one."
172
166
  },
173
167
  "targets": {
174
- "currentThread": "This group is on a normal session.",
168
+ "currentThread": "This chat is on a normal session.",
175
169
  "currentTeam": "Sent to: {{title}}",
176
170
  "noTeams": "There are no teams on this machine yet.",
177
171
  "teamList": "Teams you can pick:",
@@ -185,16 +179,18 @@
185
179
  "new": "· /new — forget the current session; the next message starts a new one",
186
180
  "team": "· /team name — send the next messages to a team; /team alone lists the teams",
187
181
  "thread": "· /thread — go back to a normal session",
188
- "aliases": "Chinese shortcuts (停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换团队 / 换对话) work when the reply language is Chinese.",
189
- "sessions": "· /sessions — list the sessions this bot opened for this group's project",
182
+ "aliases": "Chinese shortcuts (停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话) work when the reply language is Chinese.",
183
+ "sessions": "· /sessions — list the sessions this bot opened for this chat's project",
190
184
  "resume": "· /resume number — switch to one of them (a number from /sessions, or the start of its id)",
191
- "model": "· /model — see the model this group uses; /model number or /model instance/model switches it",
185
+ "model": "· /model — see the model this chat uses; /model number or /model instance/model switches it",
192
186
  "plan": "· /plan — toggle plan mode (the agent proposes a plan instead of acting); /plan on, /plan off set it",
193
- "panel": "Send /panel to open the command panel with a button for every command."
187
+ "panel": "Send /panel to open the command panel with a button for every command.",
188
+ "repo": "· /repo — pick the project this chat works on; /repo number or /repo name picks directly",
189
+ "group": "· /group name — Lark only: the bot creates a group and adds you (bots on other platforms cannot)"
194
190
  },
195
191
  "sessions": {
196
- "title": "Sessions this bot opened for this group's project ({{count}}):",
197
- "empty": "This bot has not opened any session for this group's project yet. Send a message to start one.",
192
+ "title": "Sessions this bot opened for this chat's project ({{count}}):",
193
+ "empty": "This bot has not opened any session for this chat's project yet. Send a message to start one.",
198
194
  "more": "{{count}} more not shown — reach them with /resume and the start of an id.",
199
195
  "footer": "Switch with /resume number, or /resume and the start of an id.",
200
196
  "untitled": "Untitled",
@@ -213,8 +209,8 @@
213
209
  },
214
210
  "resume": {
215
211
  "notFound": "No session matches \"{{query}}\". Use /sessions to see the list.",
216
- "busy": "A turn is running in this group — send /stop first, then switch.",
217
- "already": "This group is already on that session.",
212
+ "busy": "A turn is running in this chat — send /stop first, then switch.",
213
+ "already": "This chat is already on that session.",
218
214
  "gone": "That session was deleted or archived, so it cannot be resumed.",
219
215
  "runningElsewhere": "That session is running a turn in another chat — stop it there first.",
220
216
  "done": "Switched to \"{{title}}\". Send a message to keep going from there."
@@ -283,7 +279,8 @@
283
279
  "planOn": "Plan mode: on",
284
280
  "planOff": "Plan mode: off",
285
281
  "status": "Status",
286
- "help": "Text help"
282
+ "help": "Text help",
283
+ "repo": "Pick project"
287
284
  },
288
285
  "back": "Back",
289
286
  "prev": "Previous",
@@ -305,6 +302,103 @@
305
302
  },
306
303
  "models": {
307
304
  "title": "Pick a model"
305
+ },
306
+ "projects": {
307
+ "title": "Pick a project",
308
+ "hint": "Tap a project and this chat works on it.",
309
+ "pickedTitle": "Project picked",
310
+ "picked": "{{title}}\nSend /repo to change it."
311
+ }
312
+ },
313
+ "setup": {
314
+ "action": {
315
+ "label": "Set up with one scan",
316
+ "description": "Scan with the Feishu app. Ycodium creates a bot app under your account, publishes it, and fills in the App ID and App secret on this row.",
317
+ "badge": "Beta",
318
+ "warning": "This uses Feishu developer console interfaces that are not public, so it may stop working. If it does, set the app up by hand in the developer console."
319
+ },
320
+ "manual": {
321
+ "createApp": {
322
+ "title": "Create the app",
323
+ "body": "Open the Feishu developer console and create a self-built app for your company. Copy its App ID and App secret from Credentials & Basic Info."
324
+ },
325
+ "enableBot": {
326
+ "title": "Turn on the bot",
327
+ "body": "In App Features, add the Bot capability."
328
+ },
329
+ "longConnection": {
330
+ "title": "Use the long connection for events and card callbacks",
331
+ "body": "In Events & Callbacks, set both the event subscription and the callback subscription to Long connection, then subscribe to the event and the card callback listed below. Setting only the events leaves every card button dead."
332
+ },
333
+ "scopes": {
334
+ "title": "Add the permissions",
335
+ "body": "In Permissions, add every permission listed below. A missing one only breaks the feature that needs it."
336
+ },
337
+ "publish": {
338
+ "title": "Publish a version",
339
+ "body": "Create a version and publish it. Choose \"visible to me only\" so it is approved at once, without waiting for an administrator."
340
+ },
341
+ "fillRow": {
342
+ "title": "Fill in the row",
343
+ "body": "Paste the App ID and App secret into this bot's row on the Chat card and save."
344
+ }
345
+ },
346
+ "status": {
347
+ "waiting": "Waiting for the scan",
348
+ "scanned": "Scanned. Confirm on your phone.",
349
+ "expired": "The code expired"
350
+ },
351
+ "step": {
352
+ "login": "Sign in with the QR code",
353
+ "identity": "Read your account",
354
+ "findApp": "Look for an app from an earlier try",
355
+ "createApp": "Create the app",
356
+ "enableBot": "Turn on the bot",
357
+ "longConnection": "Switch events and callbacks to the long connection",
358
+ "scopes": "Add permissions",
359
+ "events": "Subscribe to events",
360
+ "callbacks": "Subscribe to card callbacks",
361
+ "publish": "Publish a version",
362
+ "secret": "Read the App secret"
363
+ },
364
+ "done": "Done. The App ID and App secret are filled in. Save to start the connection, then message the bot and pick a project in the chat.",
365
+ "warn": {
366
+ "scopesMissing": "These permissions could not be added automatically: {{names}}. Add them in the developer console."
367
+ },
368
+ "failure": {
369
+ "qrExpired": "The code expired before it was scanned. Show a new code and scan again.",
370
+ "scanTimeout": "Nobody scanned the code in time. Show a new code and try again.",
371
+ "network": "Could not reach the Feishu developer console. Check this machine's network or proxy, then try again.",
372
+ "timeout": "The developer console took too long to answer. Try again, or follow the manual steps.",
373
+ "sessionInvalid": "The developer console did not accept this sign-in. Scan again.",
374
+ "consoleRejected": "The developer console turned the request down. Follow the manual steps, or try again later.",
375
+ "ownerDenied": "This account is not the owner of that app, so it cannot change it. Scan with the account that created it, or follow the manual steps.",
376
+ "verificationFailed": "The console did not keep the event settings, so the bot would receive nothing. Nothing was published. Follow the manual steps.",
377
+ "publishNeedsManual": "The app is set up but its version could not be published. Publish it in the developer console, then paste the App ID and App secret here.",
378
+ "busy": "Another setup is already running on this machine.",
379
+ "unknown": "Setup stopped on an unexpected error. Try again, or follow the manual steps.",
380
+ "createUnknown": "The console did not confirm whether the app was created. Try again: an app made by an earlier try is found and reused.",
381
+ "secretMissing": "The app {{appId}} is published, but its App secret could not be read. Copy it from Credentials & Basic Info in the developer console.",
382
+ "stopped": "Setup was stopped."
308
383
  }
384
+ },
385
+ "repo": {
386
+ "needProject": "This chat has no project yet, so I won't start any work. Pick one and I will.",
387
+ "currentLine": "This chat works on project \"{{title}}\".",
388
+ "noProjects": "There are no projects on this machine yet. Add one in Ycodium first.",
389
+ "more": "{{count}} more not shown — pick one with /repo and a project name or the start of it.",
390
+ "footer": "Reply /repo number to pick, or /repo and a project name.",
391
+ "done": "Connected to project \"{{title}}\". The next message starts a new session there.",
392
+ "already": "This chat is already on project \"{{title}}\".",
393
+ "notFound": "No single project matches \"{{query}}\". Send /repo to see the list.",
394
+ "busy": "A turn is running in this chat — send /stop first, then switch.",
395
+ "gone": "That project was archived or deleted, so it cannot be picked."
396
+ },
397
+ "group": {
398
+ "usage": "Usage: /group name — the bot creates a group with that name and adds you to it.",
399
+ "created": "Created the group \"{{name}}\" and added you. Open it to pick a project.",
400
+ "unsupported": "Bots on this platform cannot create groups. Create the group in the app and add the bot to it.",
401
+ "noSender": "I cannot tell who you are on this platform, so I cannot add you to a new group.",
402
+ "failed": "Could not create the group. Check that the app is allowed to create groups and add members, then try again."
309
403
  }
310
404
  }
@@ -1,25 +1,24 @@
1
1
  {
2
2
  "settings": {
3
3
  "title": "聊天",
4
- "description": "把聊天群接到 Ycodium。一行一个群:先在对应平台建好机器人、拉进群,再把它的凭据填进来。选了项目,这个群就能派活;项目留空,这一行就只往群里报,而且报所有项目。",
5
- "groups": "群",
4
+ "description": "把聊天机器人接到 Ycodium。一行一个机器人:先在对应平台建好机器人、把凭据填进来,再把允许使用它的人填进「允许的人」。名单里的人私聊机器人(或把它拉进群)、在聊天里选好项目,就能派活。",
5
+ "bots": "机器人",
6
6
  "language": {
7
7
  "label": "回话语言",
8
- "description": "机器人在群里自己说的话用什么语言:帮助、状态、确认和各种提示。中文快捷命令只在选中文时认。保存后插件会重启。",
8
+ "description": "机器人在聊天里自己说的话用什么语言:帮助、状态、确认和各种提示。中文快捷命令只在选中文时认。保存后插件会重启。",
9
9
  "zhCN": "中文",
10
10
  "en": "English"
11
11
  },
12
- "reportOnly": "只报不收,报所有项目",
13
- "archivedSuffix": "(已归档)",
14
12
  "runtimeMode": {
15
13
  "approvalRequired": "命令和改文件前先问",
16
14
  "autoAcceptEdits": "自动接受改动,其他操作先问",
17
15
  "auto": "常规操作自动批准",
18
16
  "fullAccess": "命令和改动都不问"
19
17
  },
20
- "notifyMode": {
21
- "turn": "每轮收尾发一条",
22
- "message": "agent 说完一句就发一句"
18
+ "groupMention": {
19
+ "always": "被 @ 才理",
20
+ "never": "每句都理",
21
+ "ambient": "每句都理,明显对别人说的除外"
23
22
  }
24
23
  },
25
24
  "platform": {
@@ -30,7 +29,7 @@
30
29
  "column": {
31
30
  "displayName": {
32
31
  "label": "名称",
33
- "placeholder": "团队群"
32
+ "placeholder": "团队机器人"
34
33
  },
35
34
  "platform": {
36
35
  "label": "平台"
@@ -51,38 +50,30 @@
51
50
  "wecomBotSecret": {
52
51
  "label": "企业微信机器人密钥"
53
52
  },
54
- "chatId": {
55
- "label": "群 id",
56
- "description": "该平台自己给这个群的 id,机器人往这里发。"
57
- },
58
53
  "allowedSenders": {
59
- "label": "谁能指挥机器人",
60
- "description": "该平台的用户 id,逗号分隔。留空表示群里任何人都能让 agent 在这台机器上跑东西。"
54
+ "label": "允许的人",
55
+ "description": "该平台的用户 id,逗号分隔。只有名单里的人能让 agent 在这台机器上干活,留空则谁都不能。给机器人发一句话,它会告诉你自己的 id。"
61
56
  },
62
57
  "proxy": {
63
58
  "label": "代理",
64
- "description": "有些平台只能经本机上的某个代理才连得上,而且每一行可以不一样。"
65
- },
66
- "projectId": {
67
- "label": "项目",
68
- "description": "这个群里的消息在哪个项目里开会话。留空表示这一行只报不收,并且报所有项目。"
59
+ "description": "有些平台只能经本机上的某个代理才连得上,而且每个机器人可以不一样。"
69
60
  },
70
61
  "runtimeMode": {
71
62
  "label": "聊天消息能做什么",
72
- "description": "任何能 @ 到机器人的人都能开一轮,所以默认故意不给满权限。不论选哪一档,要拍板的事都会摆到群里。"
63
+ "description": "名单里的人都能从聊天里开一轮,所以默认故意不给满权限。不论选哪一档,要拍板的事都会摆到聊天里。"
73
64
  },
74
- "mode": {
75
- "label": "发多少",
76
- "description": "一轮活儿可能产生几十条助手消息,大多是工具调用之间的碎碎念,所以默认每轮收尾只发一条,读起来才不累。"
65
+ "groupMention": {
66
+ "label": "群里什么时候理它",
67
+ "description": "机器人在群里什么时候回应(不选就是被 @ 才理);单聊永远理。企业微信只把 @ 到机器人的群消息推过来,这一项对它没有效果。"
77
68
  }
78
69
  },
79
70
  "reply": {
80
- "notAllowed": "你不在这个群的可指挥名单里,这次点击没有生效。",
71
+ "notAllowed": "你不在这个机器人的允许名单里,这次点击没有生效。",
81
72
  "noDefaultModel": "项目「{{title}}」还没选 agent,开不了会话。发 /model 选一个,或者到项目设置里设个默认,再发一次消息。",
82
- "projectArchived": "项目「{{title}}」已归档,恢复后再发消息。",
83
- "projectMissing": "「{{group}}」绑的项目已经不在这台机器上了(可能被删了),开不了会话。到 Ycodium 的聊天设置里给这个群重新选一个项目。",
84
- "threadGone": "之前那条会话已被删除或归档,这个群改为开一条新会话。",
85
- "teamGone": "这个群原来派给的队已经不在了,接下来改回普通会话。",
73
+ "projectArchived": "项目「{{title}}」已归档。恢复它,或发 /repo 换个项目,再发消息。",
74
+ "projectMissing": "这个聊天原来做的项目已经不在这台机器上了(可能被删了),开不了会话。发 /repo 重新选一个。",
75
+ "threadGone": "之前那条会话已被删除或归档,这个聊天改为开一条新会话。",
76
+ "teamGone": "这个聊天原来派给的队已经不在了,接下来改回普通会话。",
86
77
  "attachmentReceived": "收到 {{names}}(现有 {{count}} 个待处理)。说一句想让我怎么处理。",
87
78
  "attachmentFailed": "没能收下 {{name}}:{{reason}}。",
88
79
  "attachmentReason": {
@@ -95,7 +86,8 @@
95
86
  "attachmentsNoTeam": "文件还发不到团队,这次没带上。发 /thread 回到普通会话。",
96
87
  "unsupportedType": "我还不能处理 {{type}} 类型的消息。",
97
88
  "unsupportedFolder": "文件夹没法下载,请打包成压缩文件再发。",
98
- "sendingFile": "正在发送 {{name}}:"
89
+ "sendingFile": "正在发送 {{name}}:",
90
+ "notAllowedYet": "你还不在允许名单里,你的用户 id 是 {{id}},请把它填进 设置 → 插件 → 聊天 → 这个机器人的「允许的人」。"
99
91
  },
100
92
  "approval": {
101
93
  "allow": "允许",
@@ -153,10 +145,10 @@
153
145
  "teamNotFound": "没找到叫「{{query}}」的队,也可能是不止一支对得上。",
154
146
  "noTeams": "这台机器上还没有团队。",
155
147
  "newSession": "好,下一句话开一条新会话。",
156
- "stopNoSession": "这个群现在没有在跑的活儿。",
148
+ "stopNoSession": "这个聊天现在没有在跑的活儿。",
157
149
  "stopNoTurn": "现在没有在跑的一轮。",
158
150
  "continued": "已恢复,排着的消息开始发送。",
159
- "continueNothing": "没有可恢复的:这个群的发送没有被暂停。",
151
+ "continueNothing": "没有可恢复的:这个聊天的发送没有被暂停。",
160
152
  "continueFailed": "没能恢复发送,稍后再试。",
161
153
  "stopped": "停了。会话还在,接着说就行。"
162
154
  },
@@ -168,10 +160,12 @@
168
160
  "running": "正在跑。想停就打 /stop。",
169
161
  "idle": "空闲着。",
170
162
  "model": "模型:{{model}}",
171
- "planOn": "计划模式:开"
163
+ "planOn": "计划模式:开",
164
+ "project": "项目:{{title}}",
165
+ "noProject": "还没选项目。发 /repo 选一个。"
172
166
  },
173
167
  "targets": {
174
- "currentThread": "现在这个群开的是普通会话。",
168
+ "currentThread": "现在这个聊天开的是普通会话。",
175
169
  "currentTeam": "现在派给:{{title}}",
176
170
  "noTeams": "这台机器上还没有团队。",
177
171
  "teamList": "可选的队:",
@@ -185,16 +179,18 @@
185
179
  "new": "· /new —— 忘掉当前会话,下一句开新的",
186
180
  "team": "· /team 队名 —— 把接下来的活派给一支队;/team 不带名字看有哪些队",
187
181
  "thread": "· /thread —— 切回普通会话",
188
- "aliases": "中文也行:停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换团队 / 换对话。",
189
- "sessions": "· /sessions —— 列出本机器人为这个群的项目开过的会话",
182
+ "aliases": "中文也行:停 / 继续发送 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换项目 / 建群 / 换团队 / 换对话。",
183
+ "sessions": "· /sessions —— 列出本机器人为这个聊天的项目开过的会话",
190
184
  "resume": "· /resume 编号 —— 切到其中一条(/sessions 里的编号,或会话 id 的开头)",
191
- "model": "· /model —— 看这个群用的模型;/model 编号 或 /model 实例/模型 切换",
185
+ "model": "· /model —— 看这个聊天用的模型;/model 编号 或 /model 实例/模型 切换",
192
186
  "plan": "· /plan —— 开关计划模式(agent 先出计划、不动手);/plan on、/plan off 明确设定",
193
- "panel": "发 /panel 打开可点的命令面板。"
187
+ "panel": "发 /panel 打开可点的命令面板。",
188
+ "repo": "· /repo —— 选这个聊天做哪个项目;/repo 编号 或 /repo 项目名 直接选",
189
+ "group": "· /group 群名 —— 仅飞书:机器人建一个群并把你拉进去(别的平台的机器人建不了群)"
194
190
  },
195
191
  "sessions": {
196
- "title": "本机器人为这个群的项目开过的会话({{count}} 条):",
197
- "empty": "本机器人还没有为这个群的项目开过会话,发一句话就会开一条。",
192
+ "title": "本机器人为这个聊天的项目开过的会话({{count}} 条):",
193
+ "empty": "本机器人还没有为这个聊天的项目开过会话,发一句话就会开一条。",
198
194
  "more": "还有 {{count}} 条没列出——用 /resume 加会话 id 的开头也能切到。",
199
195
  "footer": "用 /resume 编号 切换,或 /resume 加会话 id 的开头。",
200
196
  "untitled": "(无标题)",
@@ -202,7 +198,7 @@
202
198
  "badge": {
203
199
  "current": "★ 当前",
204
200
  "running": "● 在跑",
205
- "elsewhere": "接在别的群"
201
+ "elsewhere": "接在别的聊天"
206
202
  },
207
203
  "age": {
208
204
  "justNow": "刚刚",
@@ -213,10 +209,10 @@
213
209
  },
214
210
  "resume": {
215
211
  "notFound": "没有哪条会话对得上「{{query}}」。用 /sessions 看看有哪些。",
216
- "busy": "这个群有一轮正在跑——先 /stop,再切换。",
217
- "already": "这个群已经在那条会话里了。",
212
+ "busy": "这个聊天有一轮正在跑——先 /stop,再切换。",
213
+ "already": "这个聊天已经在那条会话里了。",
218
214
  "gone": "那条会话已被删除或归档,接不上了。",
219
- "runningElsewhere": "那条会话正在别的群里跑着一轮——先到那边停掉它。",
215
+ "runningElsewhere": "那条会话正在别的聊天里跑着一轮——先到那边停掉它。",
220
216
  "done": "已切到「{{title}}」。发一句话就从那里接着聊。"
221
217
  },
222
218
  "model": {
@@ -283,7 +279,8 @@
283
279
  "planOn": "计划模式:开",
284
280
  "planOff": "计划模式:关",
285
281
  "status": "状态",
286
- "help": "文字说明"
282
+ "help": "文字说明",
283
+ "repo": "选项目"
287
284
  },
288
285
  "back": "返回",
289
286
  "prev": "上一页",
@@ -305,6 +302,103 @@
305
302
  },
306
303
  "models": {
307
304
  "title": "选模型"
305
+ },
306
+ "projects": {
307
+ "title": "选一个项目",
308
+ "hint": "点一个项目,这个聊天就做它。",
309
+ "pickedTitle": "已选定项目",
310
+ "picked": "{{title}}\n发 /repo 可以更换。"
311
+ }
312
+ },
313
+ "setup": {
314
+ "action": {
315
+ "label": "扫码一键配置",
316
+ "description": "用飞书 App 扫码。Ycodium 会在你的账号下建一个机器人应用并发布,再把 App ID 与 App Secret 填进这一行。",
317
+ "badge": "测试版",
318
+ "warning": "这个功能用的是飞书开发者后台的非公开接口,可能会失效。失效时请到开发者后台手动配置应用。"
319
+ },
320
+ "manual": {
321
+ "createApp": {
322
+ "title": "创建应用",
323
+ "body": "打开飞书开发者后台,为你的企业创建一个企业自建应用,在「凭证与基础信息」里复制 App ID 和 App Secret。"
324
+ },
325
+ "enableBot": {
326
+ "title": "开启机器人",
327
+ "body": "在「应用功能」里添加「机器人」能力。"
328
+ },
329
+ "longConnection": {
330
+ "title": "事件与卡片回调都用长连接",
331
+ "body": "在「事件与回调」里,把事件订阅和回调订阅的接收方式都设为「使用长连接」,再订阅下面列出的事件和卡片回调。只改事件不改回调,所有卡片按钮都会失灵。"
332
+ },
333
+ "scopes": {
334
+ "title": "添加权限",
335
+ "body": "在「权限管理」里添加下面列出的每一项权限。少一项只会让用到它的功能失效。"
336
+ },
337
+ "publish": {
338
+ "title": "发布版本",
339
+ "body": "创建一个版本并发布。可见范围选「仅自己可见」,这样会立即通过审批,不用等管理员。"
340
+ },
341
+ "fillRow": {
342
+ "title": "填进这一行",
343
+ "body": "把 App ID 与 App Secret 填进聊天卡里这个机器人的那一行,保存。"
344
+ }
345
+ },
346
+ "status": {
347
+ "waiting": "等待扫码",
348
+ "scanned": "已扫码,请在手机上确认",
349
+ "expired": "二维码已过期"
350
+ },
351
+ "step": {
352
+ "login": "扫码登录",
353
+ "identity": "读取账号信息",
354
+ "findApp": "查找之前尝试时建的应用",
355
+ "createApp": "创建应用",
356
+ "enableBot": "开启机器人",
357
+ "longConnection": "事件与回调切换为长连接",
358
+ "scopes": "添加权限",
359
+ "events": "订阅事件",
360
+ "callbacks": "订阅卡片回调",
361
+ "publish": "发布版本",
362
+ "secret": "读取 App Secret"
363
+ },
364
+ "done": "完成。App ID 与 App Secret 已填好。点保存后连接才会开始,接着给机器人发一句话,在聊天里选项目。",
365
+ "warn": {
366
+ "scopesMissing": "这些权限没能自动添加:{{names}}。请到开发者后台手动添加。"
367
+ },
368
+ "failure": {
369
+ "qrExpired": "二维码在扫描前过期了。请换一个新二维码再扫。",
370
+ "scanTimeout": "没有及时扫码。请换一个新二维码再试。",
371
+ "network": "连不上飞书开发者后台。请检查这台机器的网络或代理后重试。",
372
+ "timeout": "飞书开发者后台响应太慢。请重试,或按手动步骤配置。",
373
+ "sessionInvalid": "开发者后台不认这次登录。请重新扫码。",
374
+ "consoleRejected": "开发者后台拒绝了这次请求。请按手动步骤配置,或稍后再试。",
375
+ "ownerDenied": "这个账号不是该应用的所有者,无法修改它。请用创建该应用的账号扫码,或按手动步骤配置。",
376
+ "verificationFailed": "后台没有保存事件配置,机器人会收不到任何消息,所以没有发布。请按手动步骤配置。",
377
+ "publishNeedsManual": "应用已配置好,但版本没能发布。请到开发者后台手动发布,再把 App ID 与 App Secret 填到这里。",
378
+ "busy": "这台机器上已经有一次配置在进行。",
379
+ "unknown": "配置因为意外错误中断。请重试,或按手动步骤配置。",
380
+ "createUnknown": "后台没有确认应用是否已创建。请重试:之前那次建出的应用会被找回并复用。",
381
+ "secretMissing": "应用 {{appId}} 已发布,但读不到它的 App Secret。请到开发者后台「凭证与基础信息」里复制。",
382
+ "stopped": "配置被中止了。"
308
383
  }
384
+ },
385
+ "repo": {
386
+ "needProject": "这个聊天还没选项目,选定之前我不开工。选一个就开始。",
387
+ "currentLine": "这个聊天现在在项目「{{title}}」上。",
388
+ "noProjects": "这台机器上还没有项目,先到 Ycodium 里添加一个。",
389
+ "more": "还有 {{count}} 个没列出——用 /repo 加项目名或名字开头也能选到。",
390
+ "footer": "回复 /repo 编号 来选,或 /repo 加项目名。",
391
+ "done": "已接上项目「{{title}}」,下一句话在这里开新会话。",
392
+ "already": "这个聊天已经在项目「{{title}}」上了。",
393
+ "notFound": "没有唯一对得上「{{query}}」的项目。发 /repo 看看有哪些。",
394
+ "busy": "这个聊天有一轮正在跑——先 /stop,再换项目。",
395
+ "gone": "那个项目已归档或已删除,选不了。"
396
+ },
397
+ "group": {
398
+ "usage": "用法:/group 群名 —— 机器人建一个这个名字的群,并把你拉进去。",
399
+ "created": "已建好群「{{name}}」,并把你拉进去了。到群里选项目就能开始。",
400
+ "unsupported": "这个平台的机器人建不了群。请在 App 里自己建群,再把机器人拉进去。",
401
+ "noSender": "我认不出你在这个平台上是谁,没法把你拉进新群。",
402
+ "failed": "没能建群。请确认这个应用有建群和拉人的权限,再试一次。"
309
403
  }
310
404
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.2678",
3
+ "version": "0.2.2690",
4
4
  "description": "Talk to your agents from Telegram, WeCom or Lark.",
5
5
  "keywords": [
6
6
  "im",
@@ -27,7 +27,7 @@
27
27
  "esbuild": "0.28.1",
28
28
  "markdown-it": "^15.0.2",
29
29
  "vite-plus": "0.2.2",
30
- "@ycodium-ai/plugin-api": "0.2.2678"
30
+ "@ycodium-ai/plugin-api": "0.2.2690"
31
31
  },
32
32
  "ycodium": {
33
33
  "plugin": "./dist/index.js",