@ycodium-ai/plugin-im 0.2.2526 → 0.2.2554

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.
@@ -0,0 +1,204 @@
1
+ {
2
+ "settings": {
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",
6
+ "language": {
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.",
9
+ "zhCN": "中文",
10
+ "en": "English"
11
+ },
12
+ "reportOnly": "Report only, all projects",
13
+ "archivedSuffix": "(archived)",
14
+ "runtimeMode": {
15
+ "approvalRequired": "Ask before commands and file changes",
16
+ "autoAcceptEdits": "Auto-accept edits, ask before other actions",
17
+ "auto": "Approve routine actions",
18
+ "fullAccess": "Commands and edits without prompts"
19
+ },
20
+ "notifyMode": {
21
+ "turn": "One message per finished turn",
22
+ "message": "Every reply the agent completes"
23
+ }
24
+ },
25
+ "platform": {
26
+ "lark": "Lark",
27
+ "telegram": "Telegram",
28
+ "wecom": "WeCom"
29
+ },
30
+ "column": {
31
+ "displayName": {
32
+ "label": "Name",
33
+ "placeholder": "Team chat"
34
+ },
35
+ "platform": {
36
+ "label": "Platform"
37
+ },
38
+ "larkAppId": {
39
+ "label": "Lark app ID"
40
+ },
41
+ "larkAppSecret": {
42
+ "label": "Lark app secret"
43
+ },
44
+ "telegramToken": {
45
+ "label": "Telegram bot token"
46
+ },
47
+ "wecomBotId": {
48
+ "label": "WeCom bot ID"
49
+ },
50
+ "wecomBotSecret": {
51
+ "label": "WeCom bot secret"
52
+ },
53
+ "chatId": {
54
+ "label": "Group id",
55
+ "description": "The platform's own id for the group to post in."
56
+ },
57
+ "allowedSenders": {
58
+ "label": "Who may command the bot",
59
+ "description": "Comma-separated user ids from that platform. Empty means anyone in the group can make the agent run things on this machine."
60
+ },
61
+ "proxy": {
62
+ "label": "Proxy",
63
+ "description": "Some platforms are only reachable through a proxy on this machine, and which one can differ per row."
64
+ },
65
+ "projectId": {
66
+ "label": "Project",
67
+ "description": "Where a message from this group starts its thread. Empty means the row only reports, and reports every project."
68
+ },
69
+ "runtimeMode": {
70
+ "label": "What a chat message may do",
71
+ "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."
72
+ },
73
+ "mode": {
74
+ "label": "How much to send",
75
+ "description": "A single turn can produce dozens of assistant messages — mostly commentary between tool calls — so one per finished turn is the readable default."
76
+ }
77
+ },
78
+ "reply": {
79
+ "notAllowed": "You are not on this group's allow list, so this tap had no effect.",
80
+ "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.",
81
+ "projectArchived": "Project \"{{title}}\" is archived. Restore it, then message again.",
82
+ "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.",
83
+ "threadGone": "The earlier session was deleted or archived, so this group now starts a new one.",
84
+ "teamGone": "The team this group was sending to no longer exists, so messages go to a normal session again."
85
+ },
86
+ "approval": {
87
+ "allow": "Allow",
88
+ "deny": "Deny",
89
+ "alreadyHandled": "Already handled",
90
+ "replyHint": "Reply with the number."
91
+ },
92
+ "command": {
93
+ "teamSelected": "OK. From now on messages go to \"{{title}}\".",
94
+ "threadSelected": "OK. From now on messages start a normal session.",
95
+ "teamNotFound": "No team is called \"{{query}}\", or more than one matches.",
96
+ "noTeams": "There are no teams on this machine yet.",
97
+ "newSession": "OK. The next message starts a new session.",
98
+ "stopNoSession": "Nothing is running in this group.",
99
+ "stopNoTurn": "No turn is running right now.",
100
+ "stopped": "Stopped. The session is still there — just keep talking."
101
+ },
102
+ "status": {
103
+ "routedTeam": "Sent to: {{title}}",
104
+ "routedThread": "Normal session",
105
+ "nothingRunning": "{{where}}. Nothing is running.",
106
+ "session": "Session: {{title}}",
107
+ "running": "Running. Send /stop to stop it.",
108
+ "idle": "Idle.",
109
+ "model": "Model: {{model}}",
110
+ "planOn": "Plan mode: on"
111
+ },
112
+ "targets": {
113
+ "currentThread": "This group is on a normal session.",
114
+ "currentTeam": "Sent to: {{title}}",
115
+ "noTeams": "There are no teams on this machine yet.",
116
+ "teamList": "Teams you can pick:",
117
+ "hint": "Use /team name to switch, /thread to go back to a normal session."
118
+ },
119
+ "help": {
120
+ "title": "Commands:",
121
+ "stop": "· /stop — stop the turn that is running; the session stays",
122
+ "status": "· /status — what is going on right now",
123
+ "new": "· /new — forget the current session; the next message starts a new one",
124
+ "team": "· /team name — send the next messages to a team; /team alone lists the teams",
125
+ "thread": "· /thread — go back to a normal session",
126
+ "aliases": "Chinese shortcuts (停 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换团队 / 换对话) work when the reply language is Chinese.",
127
+ "sessions": "· /sessions — list the sessions this bot opened for this group's project",
128
+ "resume": "· /resume number — switch to one of them (a number from /sessions, or the start of its id)",
129
+ "model": "· /model — see the model this group uses; /model number or /model instance/model switches it",
130
+ "plan": "· /plan — toggle plan mode (the agent proposes a plan instead of acting); /plan on, /plan off set it"
131
+ },
132
+ "sessions": {
133
+ "title": "Sessions this bot opened for this group's project ({{count}}):",
134
+ "empty": "This bot has not opened any session for this group's project yet. Send a message to start one.",
135
+ "more": "{{count}} more not shown — reach them with /resume and the start of an id.",
136
+ "footer": "Switch with /resume number, or /resume and the start of an id.",
137
+ "untitled": "Untitled",
138
+ "unavailable": "Could not read the session list right now. Try again in a moment.",
139
+ "badge": {
140
+ "current": "★ current",
141
+ "running": "● running",
142
+ "elsewhere": "in another chat"
143
+ },
144
+ "age": {
145
+ "justNow": "just now",
146
+ "minutes": "{{count}} min ago",
147
+ "hours": "{{count}} h ago",
148
+ "days": "{{count}} d ago"
149
+ }
150
+ },
151
+ "resume": {
152
+ "notFound": "No session matches \"{{query}}\". Use /sessions to see the list.",
153
+ "busy": "A turn is running in this group — send /stop first, then switch.",
154
+ "already": "This group is already on that session.",
155
+ "gone": "That session was deleted or archived, so it cannot be resumed.",
156
+ "runningElsewhere": "That session is running a turn in another chat — stop it there first.",
157
+ "done": "Switched to \"{{title}}\". Send a message to keep going from there."
158
+ },
159
+ "model": {
160
+ "current": "Model: {{model}}",
161
+ "currentUnknown": "Model: not decided yet — a new session uses the project's default.",
162
+ "unavailable": "The available models cannot be read right now, so the model cannot be switched.",
163
+ "listTitle": "Available models:",
164
+ "more": "{{count}} more not shown — pick one with /model instance/model.",
165
+ "footer": "Switch with /model number, or /model instance/model.",
166
+ "notFound": "No single model matches \"{{query}}\". Use /model to see the list.",
167
+ "setNow": "Model set to {{model}}. The current session uses it from its next turn.",
168
+ "setNext": "Model set to {{model}}. It applies to the next new session.",
169
+ "setFailed": "Could not switch the current session's model. Try again in a moment."
170
+ },
171
+ "plan": {
172
+ "on": "Plan mode is on: from the next message the agent proposes a plan instead of acting. Send /plan off to leave it.",
173
+ "off": "Plan mode is off. Messages are handled normally again.",
174
+ "alreadyOn": "Plan mode is already on.",
175
+ "alreadyOff": "Plan mode is already off.",
176
+ "usage": "Usage: /plan toggles plan mode; /plan on and /plan off set it."
177
+ },
178
+ "card": {
179
+ "untitled": "Chat",
180
+ "status": {
181
+ "working": "Working on it…",
182
+ "done": "Done",
183
+ "error": "Something went wrong",
184
+ "interrupted": "Interrupted"
185
+ },
186
+ "step": {
187
+ "think": "think",
188
+ "command": "command",
189
+ "file": "edit",
190
+ "mcp": "mcp",
191
+ "tool": "tool",
192
+ "agent": "agent",
193
+ "web": "search",
194
+ "image": "image",
195
+ "omitted": "{{count}} earlier steps"
196
+ },
197
+ "truncated": "… ({{count}} earlier characters not shown)",
198
+ "approval": {
199
+ "doneTitle": "Handled",
200
+ "chosen": "Chosen: {{label}}",
201
+ "elsewhere": "Already handled elsewhere (the web app or another client)."
202
+ }
203
+ }
204
+ }
@@ -0,0 +1,204 @@
1
+ {
2
+ "settings": {
3
+ "title": "聊天",
4
+ "description": "把聊天群接到 Ycodium。一行一个群:先在对应平台建好机器人、拉进群,再把它的凭据填进来。选了项目,这个群就能派活;项目留空,这一行就只往群里报,而且报所有项目。",
5
+ "groups": "群",
6
+ "language": {
7
+ "label": "回话语言",
8
+ "description": "机器人在群里自己说的话用什么语言:帮助、状态、确认和各种提示。中文快捷命令只在选中文时认。保存后插件会重启。",
9
+ "zhCN": "中文",
10
+ "en": "English"
11
+ },
12
+ "reportOnly": "只报不收,报所有项目",
13
+ "archivedSuffix": "(已归档)",
14
+ "runtimeMode": {
15
+ "approvalRequired": "命令和改文件前先问",
16
+ "autoAcceptEdits": "自动接受改动,其他操作先问",
17
+ "auto": "常规操作自动批准",
18
+ "fullAccess": "命令和改动都不问"
19
+ },
20
+ "notifyMode": {
21
+ "turn": "每轮收尾发一条",
22
+ "message": "agent 说完一句就发一句"
23
+ }
24
+ },
25
+ "platform": {
26
+ "lark": "飞书",
27
+ "telegram": "Telegram",
28
+ "wecom": "企业微信"
29
+ },
30
+ "column": {
31
+ "displayName": {
32
+ "label": "名称",
33
+ "placeholder": "团队群"
34
+ },
35
+ "platform": {
36
+ "label": "平台"
37
+ },
38
+ "larkAppId": {
39
+ "label": "飞书应用 ID"
40
+ },
41
+ "larkAppSecret": {
42
+ "label": "飞书应用密钥"
43
+ },
44
+ "telegramToken": {
45
+ "label": "Telegram 机器人令牌"
46
+ },
47
+ "wecomBotId": {
48
+ "label": "企业微信机器人 ID"
49
+ },
50
+ "wecomBotSecret": {
51
+ "label": "企业微信机器人密钥"
52
+ },
53
+ "chatId": {
54
+ "label": "群 id",
55
+ "description": "该平台自己给这个群的 id,机器人往这里发。"
56
+ },
57
+ "allowedSenders": {
58
+ "label": "谁能指挥机器人",
59
+ "description": "该平台的用户 id,逗号分隔。留空表示群里任何人都能让 agent 在这台机器上跑东西。"
60
+ },
61
+ "proxy": {
62
+ "label": "代理",
63
+ "description": "有些平台只能经本机上的某个代理才连得上,而且每一行可以不一样。"
64
+ },
65
+ "projectId": {
66
+ "label": "项目",
67
+ "description": "这个群里的消息在哪个项目里开会话。留空表示这一行只报不收,并且报所有项目。"
68
+ },
69
+ "runtimeMode": {
70
+ "label": "聊天消息能做什么",
71
+ "description": "任何能 @ 到机器人的人都能开一轮,所以默认故意不给满权限。不论选哪一档,要拍板的事都会摆到群里。"
72
+ },
73
+ "mode": {
74
+ "label": "发多少",
75
+ "description": "一轮活儿可能产生几十条助手消息,大多是工具调用之间的碎碎念,所以默认每轮收尾只发一条,读起来才不累。"
76
+ }
77
+ },
78
+ "reply": {
79
+ "notAllowed": "你不在这个群的可指挥名单里,这次点击没有生效。",
80
+ "noDefaultModel": "项目「{{title}}」还没选 agent,开不了会话。发 /model 选一个,或者到项目设置里设个默认,再发一次消息。",
81
+ "projectArchived": "项目「{{title}}」已归档,恢复后再发消息。",
82
+ "projectMissing": "「{{group}}」绑的项目已经不在这台机器上了(可能被删了),开不了会话。到 Ycodium 的聊天设置里给这个群重新选一个项目。",
83
+ "threadGone": "之前那条会话已被删除或归档,这个群改为开一条新会话。",
84
+ "teamGone": "这个群原来派给的队已经不在了,接下来改回普通会话。"
85
+ },
86
+ "approval": {
87
+ "allow": "允许",
88
+ "deny": "拒绝",
89
+ "alreadyHandled": "已处理",
90
+ "replyHint": "回复编号即可。"
91
+ },
92
+ "command": {
93
+ "teamSelected": "好,接下来派给「{{title}}」。",
94
+ "threadSelected": "好,接下来开普通会话。",
95
+ "teamNotFound": "没找到叫「{{query}}」的队,也可能是不止一支对得上。",
96
+ "noTeams": "这台机器上还没有团队。",
97
+ "newSession": "好,下一句话开一条新会话。",
98
+ "stopNoSession": "这个群现在没有在跑的活儿。",
99
+ "stopNoTurn": "现在没有在跑的一轮。",
100
+ "stopped": "停了。会话还在,接着说就行。"
101
+ },
102
+ "status": {
103
+ "routedTeam": "派给:{{title}}",
104
+ "routedThread": "普通会话",
105
+ "nothingRunning": "{{where}}。现在没有在跑的活儿。",
106
+ "session": "会话:{{title}}",
107
+ "running": "正在跑。想停就打 /stop。",
108
+ "idle": "空闲着。",
109
+ "model": "模型:{{model}}",
110
+ "planOn": "计划模式:开"
111
+ },
112
+ "targets": {
113
+ "currentThread": "现在这个群开的是普通会话。",
114
+ "currentTeam": "现在派给:{{title}}",
115
+ "noTeams": "这台机器上还没有团队。",
116
+ "teamList": "可选的队:",
117
+ "hint": "用 /team 队名 切换,/thread 切回普通会话。"
118
+ },
119
+ "help": {
120
+ "title": "能用的命令:",
121
+ "stop": "· /stop —— 停掉正在跑的这一轮,会话留着",
122
+ "status": "· /status —— 现在在干什么",
123
+ "new": "· /new —— 忘掉当前会话,下一句开新的",
124
+ "team": "· /team 队名 —— 把接下来的活派给一支队;/team 不带名字看有哪些队",
125
+ "thread": "· /thread —— 切回普通会话",
126
+ "aliases": "中文也行:停 / 状态 / 新对话 / 会话列表 / 切换会话 / 换模型 / 计划模式 / 换团队 / 换对话。",
127
+ "sessions": "· /sessions —— 列出本机器人为这个群的项目开过的会话",
128
+ "resume": "· /resume 编号 —— 切到其中一条(/sessions 里的编号,或会话 id 的开头)",
129
+ "model": "· /model —— 看这个群用的模型;/model 编号 或 /model 实例/模型 切换",
130
+ "plan": "· /plan —— 开关计划模式(agent 先出计划、不动手);/plan on、/plan off 明确设定"
131
+ },
132
+ "sessions": {
133
+ "title": "本机器人为这个群的项目开过的会话({{count}} 条):",
134
+ "empty": "本机器人还没有为这个群的项目开过会话,发一句话就会开一条。",
135
+ "more": "还有 {{count}} 条没列出——用 /resume 加会话 id 的开头也能切到。",
136
+ "footer": "用 /resume 编号 切换,或 /resume 加会话 id 的开头。",
137
+ "untitled": "(无标题)",
138
+ "unavailable": "现在读不出会话列表,稍后再试。",
139
+ "badge": {
140
+ "current": "★ 当前",
141
+ "running": "● 在跑",
142
+ "elsewhere": "接在别的群"
143
+ },
144
+ "age": {
145
+ "justNow": "刚刚",
146
+ "minutes": "{{count}} 分钟前",
147
+ "hours": "{{count}} 小时前",
148
+ "days": "{{count}} 天前"
149
+ }
150
+ },
151
+ "resume": {
152
+ "notFound": "没有哪条会话对得上「{{query}}」。用 /sessions 看看有哪些。",
153
+ "busy": "这个群有一轮正在跑——先 /stop,再切换。",
154
+ "already": "这个群已经在那条会话里了。",
155
+ "gone": "那条会话已被删除或归档,接不上了。",
156
+ "runningElsewhere": "那条会话正在别的群里跑着一轮——先到那边停掉它。",
157
+ "done": "已切到「{{title}}」。发一句话就从那里接着聊。"
158
+ },
159
+ "model": {
160
+ "current": "模型:{{model}}",
161
+ "currentUnknown": "模型:还没定——新开会话时用项目的默认模型。",
162
+ "unavailable": "现在读不出可选的模型,没法切换模型。",
163
+ "listTitle": "可选的模型:",
164
+ "more": "还有 {{count}} 个没列出——用 /model 实例/模型 也能选到。",
165
+ "footer": "用 /model 编号 切换,或 /model 实例/模型。",
166
+ "notFound": "没有唯一对得上「{{query}}」的模型。用 /model 看看有哪些。",
167
+ "setNow": "模型已设为 {{model}},当前会话从下一轮起用它。",
168
+ "setNext": "模型已设为 {{model}},下一条新会话起用它。",
169
+ "setFailed": "没能切换当前会话的模型,稍后再试。"
170
+ },
171
+ "plan": {
172
+ "on": "计划模式已开:从下一条消息起,agent 先出计划、不动手。发 /plan off 退出。",
173
+ "off": "计划模式已关,消息照常处理。",
174
+ "alreadyOn": "计划模式已经是开着的。",
175
+ "alreadyOff": "计划模式已经是关着的。",
176
+ "usage": "用法:/plan 切换计划模式;/plan on、/plan off 明确设定。"
177
+ },
178
+ "card": {
179
+ "untitled": "对话",
180
+ "status": {
181
+ "working": "处理中…",
182
+ "done": "已完成",
183
+ "error": "出错了",
184
+ "interrupted": "已中断"
185
+ },
186
+ "step": {
187
+ "think": "思考",
188
+ "command": "命令",
189
+ "file": "改文件",
190
+ "mcp": "mcp",
191
+ "tool": "工具",
192
+ "agent": "子 agent",
193
+ "web": "搜索",
194
+ "image": "看图",
195
+ "omitted": "更早的 {{count}} 步"
196
+ },
197
+ "truncated": "…(前面 {{count}} 个字符没有显示)",
198
+ "approval": {
199
+ "doneTitle": "已处理",
200
+ "chosen": "已选:{{label}}",
201
+ "elsewhere": "已在别处处理(网页或其他客户端)。"
202
+ }
203
+ }
204
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.2526",
3
+ "version": "0.2.2554",
4
4
  "description": "Talk to your agents from Telegram, WeCom or Lark.",
5
5
  "keywords": [
6
6
  "im",
@@ -12,7 +12,8 @@
12
12
  ],
13
13
  "license": "UNLICENSED",
14
14
  "files": [
15
- "dist"
15
+ "dist",
16
+ "locales"
16
17
  ],
17
18
  "type": "module",
18
19
  "publishConfig": {
@@ -21,10 +22,12 @@
21
22
  "devDependencies": {
22
23
  "@effect/vitest": "4.0.0-beta.103",
23
24
  "@larksuiteoapi/node-sdk": "^1.73.0",
25
+ "@types/markdown-it": "^14.2.0",
24
26
  "effect": "4.0.0-beta.103",
25
27
  "esbuild": "0.28.1",
28
+ "markdown-it": "^15.0.2",
26
29
  "vite-plus": "0.2.2",
27
- "@ycodium-ai/plugin-api": "0.2.2526"
30
+ "@ycodium-ai/plugin-api": "0.2.2554"
28
31
  },
29
32
  "ycodium": {
30
33
  "plugin": "./dist/index.js",
@@ -36,6 +39,7 @@
36
39
  "kind": "commands.dispatch",
37
40
  "commands": [
38
41
  "thread.create",
42
+ "thread.meta.update",
39
43
  "thread.turn.start",
40
44
  "thread.turn.interrupt",
41
45
  "thread.approval.respond"