@workflow-code/cli 0.2.4-20261012001.codex-cli-web → 0.2.4-20261012003.codex-cli-web

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.
@@ -34,7 +34,9 @@ import {
34
34
  } from "./chunk-P6K3NB5S.js";
35
35
  import {
36
36
  getCurrentLocale,
37
- i18n
37
+ i18n,
38
+ initI18n,
39
+ normalizeLocale
38
40
  } from "./chunk-7WEXRL5A.js";
39
41
  import "./chunk-NSPRIPOP.js";
40
42
 
@@ -42,6 +44,319 @@ import "./chunk-NSPRIPOP.js";
42
44
  import { spawn as spawn3 } from "child_process";
43
45
  import path8 from "path";
44
46
 
47
+ // src/web/messages.zh-cn.json
48
+ var messages_zh_cn_default = {
49
+ " and others": "\u7B49",
50
+ ", ": "\u3001",
51
+ "{0}": "\u5DF2{0}",
52
+ "{0} \xB7 {1}/{2} items": "{0} \xB7 {1}/{2} \u9879",
53
+ "{0} days": "{0} \u5929",
54
+ "{0} failed": "{0}\u5931\u8D25",
55
+ "{0} hours": "{0} \u5C0F\u65F6",
56
+ "{0} min": "{0} \u5206",
57
+ "{0} must be a valid boolean.": "{0} \u9700\u8981\u662F\u6709\u6548\u5E03\u5C14\u503C\u3002",
58
+ "{0} must be a valid number.": "{0} \u9700\u8981\u662F\u6709\u6548\u6570\u5B57\u3002",
59
+ "{0} must be valid JSON.": "{0} \u9700\u8981\u662F\u6709\u6548\u7684 JSON\u3002",
60
+ "{0} selected": "\u5DF2\u9009 {0} \u9879",
61
+ "{0} tools": "{0} \u4E2A\u5DE5\u5177",
62
+ "{0}...": "\u6B63\u5728{0}",
63
+ "{0}{1} \xB7 {2} items": "\u5DF2{0}{1} \xB7 {2} \u9879",
64
+ "{1} in {0}": "{0} \u4E2D {1}",
65
+ "Account balance ${0}": "\u8D26\u6237\u4F59\u989D ${0}",
66
+ "Add attachment": "\u6DFB\u52A0\u9644\u4EF6",
67
+ "Agent run": "Agent \u8FD0\u884C",
68
+ "All chats": "\u5168\u90E8\u804A\u5929",
69
+ "All conversations": "\u5168\u90E8\u5BF9\u8BDD",
70
+ Apply: "\u5E94\u7528",
71
+ "Apply changes": "\u5E94\u7528\u4FEE\u6539",
72
+ "Approve execution": "\u6279\u51C6\u6267\u884C",
73
+ Ask: "\u63D0\u95EE",
74
+ Attachment: "\u9644\u4EF6",
75
+ "Auto-approve": "\u81EA\u52A8\u6279\u51C6",
76
+ "Awaiting confirmation": "\u7B49\u5F85\u786E\u8BA4",
77
+ "Awaiting confirmation: {0}": "\u7B49\u5F85\u786E\u8BA4{0}",
78
+ "Back to {0}": "\u8FD4\u56DE {0}",
79
+ Branch: "\u5206\u652F",
80
+ "Browser sign-in": "\u6D4F\u89C8\u5668\u767B\u5F55",
81
+ "Call tool": "\u8C03\u7528\u5DE5\u5177",
82
+ Cancel: "\u53D6\u6D88",
83
+ "Cancel editing": "\u53D6\u6D88\u7F16\u8F91",
84
+ Card: "\u5361\u7247",
85
+ Chat: "\u804A\u5929",
86
+ "Choose files": "\u9009\u62E9\u6587\u4EF6",
87
+ Close: "\u5173\u95ED",
88
+ "Close account": "\u5173\u95ED\u8D26\u53F7",
89
+ "Close conversation history": "\u5173\u95ED\u5BF9\u8BDD\u5386\u53F2",
90
+ "Close parameters": "\u5173\u95ED\u53C2\u6570",
91
+ "Close search": "\u5173\u95ED\u641C\u7D22",
92
+ Code: "\u4EE3\u7801",
93
+ Command: "\u547D\u4EE4",
94
+ "Compact context": "\u538B\u7F29\u4E0A\u4E0B\u6587",
95
+ Complete: "\u5B8C\u6210",
96
+ Completed: "\u5DF2\u5B8C\u6210",
97
+ "Configuration {0}": "\u914D\u7F6E {0}",
98
+ "Configuration actions": "\u914D\u7F6E\u64CD\u4F5C",
99
+ "Configuration name": "\u914D\u7F6E\u540D\u79F0",
100
+ "Connecting to project": "\u6B63\u5728\u8FDE\u63A5\u9879\u76EE",
101
+ "Connection changed.": "\u8FDE\u63A5\u5DF2\u53D8\u66F4\u3002",
102
+ "Connection interrupted": "\u8FDE\u63A5\u5DF2\u4E2D\u65AD",
103
+ "Connection interrupted.": "\u8FDE\u63A5\u5DF2\u4E2D\u65AD\u3002",
104
+ "Connection not verified": "\u8FDE\u63A5\u672A\u9A8C\u8BC1",
105
+ Conversation: "\u5BF9\u8BDD",
106
+ "Conversation actions": "\u5BF9\u8BDD\u64CD\u4F5C",
107
+ "Conversation history": "\u5BF9\u8BDD\u5386\u53F2",
108
+ "Conversation messages": "\u5BF9\u8BDD\u6D88\u606F",
109
+ "Conversation name": "\u5BF9\u8BDD\u540D\u79F0",
110
+ Conversations: "\u5BF9\u8BDD\u5217\u8868",
111
+ Copied: "\u5DF2\u590D\u5236",
112
+ Copy: "\u590D\u5236",
113
+ "Copy {0}": "\u590D\u5236{0}",
114
+ "Copy code": "\u590D\u5236\u4EE3\u7801",
115
+ "Copy message": "\u590D\u5236\u6D88\u606F",
116
+ "Current configuration": "\u5F53\u524D\u914D\u7F6E",
117
+ Daily: "\u6BCF\u65E5",
118
+ Default: "\u9ED8\u8BA4",
119
+ Delete: "\u5220\u9664",
120
+ "Delete conversation": "\u5220\u9664\u5BF9\u8BDD",
121
+ "Delete record": "\u5220\u9664\u8BB0\u5F55",
122
+ "Delete this configuration?": "\u5220\u9664\u8FD9\u4E2A\u914D\u7F6E\uFF1F",
123
+ "Delete this conversation?": "\u5220\u9664\u8FD9\u4E2A\u5BF9\u8BDD\uFF1F",
124
+ "Delete this run?": "\u5220\u9664\u8FD9\u6761\u8FD0\u884C\u8BB0\u5F55\uFF1F",
125
+ Deny: "\u62D2\u7EDD",
126
+ Details: "\u8BE6\u60C5",
127
+ "Download file": "\u4E0B\u8F7D\u6587\u4EF6",
128
+ "Duration {0}{1}s": "\u7528\u65F6 {0}{1}s",
129
+ Edit: "\u7F16\u8F91",
130
+ "Edit file": "\u7F16\u8F91\u6587\u4EF6",
131
+ "Edit queued message": "\u7F16\u8F91\u5F85\u53D1\u6D88\u606F",
132
+ Email: "\u90AE\u7BB1",
133
+ Enable: "\u542F\u7528",
134
+ "End run": "\u7ED3\u675F\u8FD0\u884C",
135
+ "Ended: {0}": "\u7ED3\u675F\uFF1A{0}",
136
+ "Enter your email and password.": "\u8BF7\u8F93\u5165\u90AE\u7BB1\u548C\u5BC6\u7801\u3002",
137
+ "Entrypoint parameters": "\u5165\u53E3\u53C2\u6570",
138
+ Entrypoints: "\u8FD0\u884C\u5165\u53E3",
139
+ Error: "\u9519\u8BEF",
140
+ Execute: "\u6267\u884C",
141
+ "Execute plan": "\u6309\u8BA1\u5212\u6267\u884C",
142
+ "Export conversation": "\u5BFC\u51FA\u5BF9\u8BDD",
143
+ "Export record": "\u5BFC\u51FA\u8BB0\u5F55",
144
+ "Export run": "\u5BFC\u51FA\u8FD0\u884C\u8BB0\u5F55",
145
+ Failed: "\u5931\u8D25",
146
+ "Failed to load Kanban": "\u770B\u677F\u52A0\u8F7D\u5931\u8D25",
147
+ File: "\u6587\u4EF6",
148
+ "File exceeds 50 MiB.": "\u6587\u4EF6\u8D85\u8FC7 50 MiB\u3002",
149
+ "Files in {0}": "{0} \u4E2D\u7684\u6587\u4EF6",
150
+ "Fit graph": "\u9002\u914D\u6D41\u7A0B",
151
+ Form: "\u8868\u5355",
152
+ "Full screen": "\u5168\u5C4F",
153
+ "Generated file": "\u751F\u6210\u6587\u4EF6",
154
+ "Go to latest message": "\u56DE\u5230\u6700\u65B0\u6D88\u606F",
155
+ Graph: "\u6D41\u7A0B",
156
+ Height: "\u9AD8\u5EA6",
157
+ "Hide conversations": "\u9690\u85CF\u5BF9\u8BDD\u5217\u8868",
158
+ "Hide Kanban configurations": "\u9690\u85CF\u770B\u677F\u914D\u7F6E",
159
+ "Hide password": "\u9690\u85CF\u5BC6\u7801",
160
+ "Hide runs": "\u9690\u85CF\u8FD0\u884C\u8BB0\u5F55",
161
+ Image: "\u56FE\u7247",
162
+ "Incorrect email or password, or sign-in expired.": "\u90AE\u7BB1\u6216\u5BC6\u7801\u4E0D\u6B63\u786E\uFF0C\u6216\u767B\u5F55\u5DF2\u5931\u6548\u3002",
163
+ Interrupted: "\u5DF2\u4E2D\u65AD",
164
+ "JSON argument array": "JSON \u53C2\u6570\u6570\u7EC4",
165
+ "Just now": "\u521A\u521A",
166
+ Kanban: "\u770B\u677F",
167
+ "Kanban configurations": "\u770B\u677F\u914D\u7F6E",
168
+ List: "\u5217\u51FA",
169
+ "List files": "\u5217\u51FA\u6587\u4EF6",
170
+ "Load more": "\u52A0\u8F7D\u66F4\u591A",
171
+ "Loading Kanban": "\u6B63\u5728\u52A0\u8F7D\u770B\u677F",
172
+ "Loading parameters...": "\u52A0\u8F7D\u53C2\u6570...",
173
+ "Loading...": "\u52A0\u8F7D\u4E2D...",
174
+ "Lock title": "\u9501\u5B9A\u6807\u9898",
175
+ Logs: "\u65E5\u5FD7",
176
+ Loop: "\u5FAA\u73AF",
177
+ "Loop end": "\u5FAA\u73AF\u7ED3\u675F",
178
+ "Managed by server": "\u7531\u670D\u52A1\u5668\u7BA1\u7406",
179
+ Merge: "\u6C47\u5408",
180
+ Message: "\u6D88\u606F",
181
+ Monthly: "\u6BCF\u6708",
182
+ "Move up": "\u4E0A\u79FB",
183
+ "New configuration": "\u65B0\u5EFA\u914D\u7F6E",
184
+ "New conversation": "\u65B0\u5BF9\u8BDD",
185
+ "New run": "\u65B0\u5EFA\u8FD0\u884C",
186
+ Next: "\u4E0B\u4E00\u4E2A",
187
+ "Next question": "\u4E0B\u4E00\u95EE",
188
+ No: "\u5426",
189
+ "No active subscriptions": "\u6682\u65E0\u5DF2\u8BA2\u9605\u5957\u9910",
190
+ "No additional details": "\u6682\u65E0\u989D\u5916\u8BE6\u60C5",
191
+ "No available options": "\u6682\u65E0\u53EF\u7528\u9009\u9879",
192
+ "No conversations": "\u6682\u65E0\u5BF9\u8BDD",
193
+ "No logs": "\u6682\u65E0\u65E5\u5FD7",
194
+ "No matching conversations": "\u6CA1\u6709\u5339\u914D\u7684\u5BF9\u8BDD",
195
+ "No options": "\u6682\u65E0\u9009\u9879",
196
+ "No page methods registered": "\u9875\u9762\u6682\u672A\u6CE8\u518C\u65B9\u6CD5",
197
+ "No runs": "\u6682\u65E0\u8FD0\u884C\u8BB0\u5F55",
198
+ "No static workflow structure is available. Showing recorded execution nodes.": "\u672A\u89E3\u6790\u5230\u9759\u6001\u6D41\u7A0B\u7ED3\u6784\uFF0C\u663E\u793A\u5DF2\u6709\u8FD0\u884C\u8282\u70B9\u3002",
199
+ "No tools declared by this project": "\u9879\u76EE\u672A\u58F0\u660E\u5DE5\u5177",
200
+ "Node {0} does not match the static structure.": "\u8282\u70B9 {0} \u672A\u5339\u914D\u9759\u6001\u7ED3\u6784\u3002",
201
+ "Not selected": "\u672A\u9009\u62E9",
202
+ "Open {0}": "\u6253\u5F00 {0}",
203
+ "Page methods": "\u9875\u9762\u65B9\u6CD5",
204
+ "Parameter mode": "\u53C2\u6570\u6A21\u5F0F",
205
+ Parameters: "\u53C2\u6570",
206
+ "Parameters JSON": "\u53C2\u6570 JSON",
207
+ Password: "\u5BC6\u7801",
208
+ "Pending approval": "\u5F85\u786E\u8BA4",
209
+ Phone: "\u624B\u673A",
210
+ Plan: "\u8BA1\u5212",
211
+ "Please confirm {0}": "\u8BF7\u786E\u8BA4 {0}",
212
+ "Please enter {0}.": "\u8BF7\u586B\u5199 {0}\u3002",
213
+ "Preview size": "\u9884\u89C8\u5C3A\u5BF8",
214
+ Previous: "\u4E0A\u4E00\u4E2A",
215
+ "Previous question": "\u4E0A\u4E00\u95EE",
216
+ "Project connection expired": "\u9879\u76EE\u8FDE\u63A5\u5DF2\u5931\u6548",
217
+ "Project connection expired.": "\u9879\u76EE\u8FDE\u63A5\u5DF2\u5931\u6548\u3002",
218
+ "Queued messages ({0})": "\u5F85\u53D1\u6D88\u606F ({0})",
219
+ Read: "\u8BFB\u53D6",
220
+ "Read data": "\u8BFB\u53D6\u6570\u636E",
221
+ "Read file": "\u8BFB\u53D6\u6587\u4EF6",
222
+ "Read knowledge": "\u8BFB\u53D6\u77E5\u8BC6",
223
+ "Read web page": "\u8BFB\u53D6\u7F51\u9875",
224
+ Reasoning: "\u601D\u8003\u8FC7\u7A0B",
225
+ Reconnect: "\u91CD\u65B0\u8FDE\u63A5",
226
+ "Reconnecting...": "\u6B63\u5728\u91CD\u65B0\u8FDE\u63A5...",
227
+ "Reconnection will start when the network is available.": "\u7F51\u7EDC\u6062\u590D\u540E\u5C06\u81EA\u52A8\u91CD\u8FDE\u3002",
228
+ "Refresh Kanban": "\u5237\u65B0\u770B\u677F",
229
+ "Refresh parameters": "\u5237\u65B0\u53C2\u6570",
230
+ "Refresh usage": "\u5237\u65B0\u7528\u91CF",
231
+ "Related projects are unavailable: {0}": "\u5173\u8054\u9879\u76EE\u4E0D\u53EF\u7528\uFF1A{0}",
232
+ "Remove attachment": "\u79FB\u9664\u9644\u4EF6",
233
+ "Remove file": "\u79FB\u9664\u6587\u4EF6",
234
+ Rename: "\u91CD\u547D\u540D",
235
+ "Rename configuration": "\u91CD\u547D\u540D\u914D\u7F6E",
236
+ "Rename conversation": "\u91CD\u547D\u540D\u5BF9\u8BDD",
237
+ "Reopen using the project's run URL.": "\u8BF7\u4F7F\u7528\u9879\u76EE\u8FD0\u884C\u5730\u5740\u91CD\u65B0\u6253\u5F00\u3002",
238
+ Rerun: "\u91CD\u65B0\u8FD0\u884C",
239
+ Reset: "\u91CD\u7F6E",
240
+ "Reset options": "\u91CD\u7F6E\u9009\u9879",
241
+ "Resize preview": "\u8C03\u6574\u9884\u89C8\u5C3A\u5BF8",
242
+ Responding: "\u56DE\u590D\u4E2D",
243
+ "Responding...": "\u6B63\u5728\u56DE\u590D...",
244
+ Result: "\u7ED3\u679C",
245
+ "Resume queue": "\u7EE7\u7EED\u53D1\u9001\u961F\u5217",
246
+ "Resume run": "\u7EE7\u7EED\u8FD0\u884C",
247
+ Retry: "\u91CD\u8BD5",
248
+ "Retry loading parameters": "\u91CD\u8BD5\u52A0\u8F7D\u53C2\u6570",
249
+ "Retry save": "\u91CD\u8BD5\u4FDD\u5B58",
250
+ "Revise instructions": "\u4FEE\u6539\u8981\u6C42",
251
+ "Revise plan": "\u4FEE\u6539\u8BA1\u5212",
252
+ Run: "\u8FD0\u884C",
253
+ "Run arguments must be an array of strings.": "\u8FD0\u884C\u53C2\u6570\u9700\u8981\u662F\u5B57\u7B26\u4E32\u6570\u7EC4\u3002",
254
+ "Run command": "\u8FD0\u884C\u547D\u4EE4",
255
+ "Run failed": "\u8FD0\u884C\u5931\u8D25",
256
+ "Run interrupted": "\u8FD0\u884C\u5DF2\u4E2D\u65AD",
257
+ "Run logs": "\u8FD0\u884C\u65E5\u5FD7",
258
+ "Run parameters": "\u8FD0\u884C\u53C2\u6570",
259
+ "Run records \xB7 {0} items, {1} failed": "\u8FD0\u884C\u8BB0\u5F55 \xB7 {0} \u9879\uFF0C{1} \u9879\u5931\u8D25",
260
+ "Run subtask": "\u8FD0\u884C\u5B50\u4EFB\u52A1",
261
+ "Run timed out": "\u8FD0\u884C\u8D85\u65F6",
262
+ Running: "\u8FD0\u884C\u4E2D",
263
+ "Running...": "\u6B63\u5728\u8FD0\u884C...",
264
+ Runs: "\u8FD0\u884C\u8BB0\u5F55",
265
+ Save: "\u4FDD\u5B58",
266
+ "Save queued message": "\u4FDD\u5B58\u5F85\u53D1\u6D88\u606F",
267
+ Search: "\u641C\u7D22",
268
+ "Search all conversations": "\u641C\u7D22\u5168\u90E8\u5BF9\u8BDD",
269
+ "Search content": "\u641C\u7D22\u5185\u5BB9",
270
+ "Search conversation content": "\u641C\u7D22\u5BF9\u8BDD\u5185\u5BB9",
271
+ "Search conversations": "\u641C\u7D22\u5BF9\u8BDD",
272
+ "Search knowledge": "\u641C\u7D22\u77E5\u8BC6",
273
+ "Search runs": "\u641C\u7D22\u8FD0\u884C\u8BB0\u5F55",
274
+ "Search web": "\u641C\u7D22\u7F51\u9875",
275
+ "Select up to 32 files.": "\u6700\u591A\u9009\u62E9 32 \u4E2A\u6587\u4EF6\u3002",
276
+ "Select...": "\u9009\u62E9...",
277
+ Send: "\u53D1\u9001",
278
+ "Send a message...": "\u53D1\u9001\u6D88\u606F...",
279
+ "Send now": "\u7ACB\u5373\u53D1\u9001",
280
+ Server: "\u670D\u52A1\u5668",
281
+ "Show conversations": "\u663E\u793A\u5BF9\u8BDD\u5217\u8868",
282
+ "Show Kanban configurations": "\u663E\u793A\u770B\u677F\u914D\u7F6E",
283
+ "Show password": "\u663E\u793A\u5BC6\u7801",
284
+ "Show runs": "\u663E\u793A\u8FD0\u884C\u8BB0\u5F55",
285
+ "Sign in": "\u767B\u5F55",
286
+ "Sign in to Workflow": "\u767B\u5F55 Workflow",
287
+ "Sign in to Workflow Server to connect Kanban data.": "\u8BF7\u767B\u5F55 Workflow Server \u4EE5\u8FDE\u63A5\u770B\u677F\u6570\u636E\u3002",
288
+ "Sign in to Workflow Server, then refresh parameters.": "\u8BF7\u5148\u767B\u5F55 Workflow Server\uFF0C\u7136\u540E\u5237\u65B0\u53C2\u6570\u3002",
289
+ "Sign out": "\u9000\u51FA\u767B\u5F55",
290
+ "Sign-in expired": "\u767B\u5F55\u5DF2\u5931\u6548",
291
+ "Sign-in expired. Sign in to Workflow Server again.": "\u767B\u5F55\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 Workflow Server\u3002",
292
+ "Signed in; account verified": "\u5DF2\u767B\u5F55\uFF0C\u8D26\u53F7\u9A8C\u8BC1\u901A\u8FC7",
293
+ "Signed out": "\u672A\u767B\u5F55",
294
+ "Signing in...": "\u767B\u5F55\u4E2D...",
295
+ "Started: {0}": "\u5F00\u59CB\uFF1A{0}",
296
+ Stop: "\u505C\u6B62",
297
+ "Stop run": "\u505C\u6B62\u8FD0\u884C",
298
+ Stopped: "\u5DF2\u505C\u6B62",
299
+ "Stopped \xB7 {0}/{1} items completed": "\u5DF2\u505C\u6B62 \xB7 {0}/{1} \u9879\u5B8C\u6210",
300
+ "Stopped {0}": "\u5DF2\u505C\u6B62{0}",
301
+ "Submitting...": "\u6B63\u5728\u63D0\u4EA4...",
302
+ "System AI": "\u7CFB\u7EDF AI",
303
+ "System AI usage": "\u7CFB\u7EDF AI \u7528\u91CF",
304
+ Tablet: "\u5E73\u677F",
305
+ "The current session is running.": "\u5F53\u524D\u4F1A\u8BDD\u6B63\u5728\u8FD0\u884C\u3002",
306
+ "The Kanban connection is unavailable.": "\u770B\u677F\u8FDE\u63A5\u4E0D\u53EF\u7528\u3002",
307
+ "The options for {0} have changed. Please select again.": "{0} \u7684\u9009\u9879\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002",
308
+ "The project does not support this attachment type.": "\u9879\u76EE\u4E0D\u652F\u6301\u6B64\u7C7B\u9644\u4EF6\u3002",
309
+ "The related project connection was interrupted. Reconnecting.": "\u5173\u8054\u9879\u76EE\u66F4\u65B0\u8FDE\u63A5\u5DF2\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8FDE\u3002",
310
+ "The request timed out. Check the current status.": "\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u5F53\u524D\u72B6\u6001\u3002",
311
+ Thinking: "\u601D\u8003",
312
+ "Thought complete": "\u601D\u8003\u5B8C\u6210",
313
+ "Timed out": "\u5DF2\u8D85\u65F6",
314
+ Tool: "\u5DE5\u5177",
315
+ "Tool input": "\u5DE5\u5177\u53C2\u6570",
316
+ "Tool permissions": "\u5DE5\u5177\u6743\u9650",
317
+ Trace: "\u8F68\u8FF9",
318
+ Unlimited: "\u4E0D\u9650",
319
+ "Unlock title": "\u89E3\u9664\u6807\u9898\u9501\u5B9A",
320
+ "Unsupported attachment type, or the 50 MiB per file / 32 attachment limit was exceeded.": "\u9644\u4EF6\u7C7B\u578B\u4E0D\u53D7\u652F\u6301\uFF0C\u6216\u8D85\u8FC7\u5355\u6587\u4EF6 50 MiB / 32 \u4E2A\u9644\u4EF6\u9650\u5236\u3002",
321
+ "Update data": "\u66F4\u65B0\u6570\u636E",
322
+ "Update knowledge": "\u66F4\u65B0\u77E5\u8BC6",
323
+ "Update tasks": "\u66F4\u65B0\u4EFB\u52A1\u5217\u8868",
324
+ Validity: "\u6709\u6548\u671F",
325
+ "Verify sign-in": "\u9A8C\u8BC1\u767B\u5F55",
326
+ "Verifying account...": "\u6B63\u5728\u9A8C\u8BC1\u8D26\u53F7...",
327
+ "View all ({0})": "\u67E5\u770B\u5168\u90E8\uFF08{0}\uFF09",
328
+ "Waiting for input": "\u7B49\u5F85\u8F93\u5165",
329
+ "Waiting for tool results...": "\u7B49\u5F85\u5DE5\u5177\u7ED3\u679C...",
330
+ Weekly: "\u6BCF\u5468",
331
+ Width: "\u5BBD\u5EA6",
332
+ Workflow: "\u5DE5\u4F5C\u6D41",
333
+ "Workflow Account": "Workflow \u8D26\u53F7",
334
+ "Workflow entrypoint": "\u5DE5\u4F5C\u6D41\u5165\u53E3",
335
+ "Workflow run": "\u5DE5\u4F5C\u6D41\u8FD0\u884C",
336
+ Write: "\u5199\u5165",
337
+ "Write anything": "\u968F\u5FC3\u8F93\u5165",
338
+ "Write file": "\u5199\u5165\u6587\u4EF6",
339
+ Yes: "\u662F",
340
+ "Zoom in": "\u653E\u5927",
341
+ "Zoom out": "\u7F29\u5C0F"
342
+ };
343
+
344
+ // src/web/localization.ts
345
+ if (typeof document !== "undefined" && document.documentElement) {
346
+ const requested = new URL(location.href).searchParams.get("workflowLocale");
347
+ initI18n({ preference: normalizeLocale(requested || document.documentElement.lang || navigator.language) });
348
+ } else if (!i18n.isInitialized) {
349
+ initI18n();
350
+ }
351
+ i18n.addResourceBundle("zh-CN", "cliWeb", messages_zh_cn_default);
352
+ i18n.addResourceBundle("en", "cliWeb", Object.fromEntries(Object.keys(messages_zh_cn_default).map((message) => [message, message])));
353
+ var locale = getCurrentLocale;
354
+ function t(message, ...args) {
355
+ const translate = i18n.t;
356
+ const text = translate(message, { ns: "cliWeb", keySeparator: false, nsSeparator: false, fallbackLng: false, defaultValue: message });
357
+ return text.replace(/\{(\d+)\}/g, (placeholder, index) => Number(index) < args.length ? String(args[Number(index)]) : placeholder);
358
+ }
359
+
45
360
  // src/web/server.ts
46
361
  import { createServer } from "http";
47
362
  import { createHash as createHash3, randomBytes as randomBytes2, timingSafeEqual } from "crypto";
@@ -140,33 +455,33 @@ function validateWorkflowValues(fields, values, states = {}) {
140
455
  const value = workflowParamValue(field, values[field.name]);
141
456
  const label = field.label || field.name;
142
457
  if (field.required && (typeof value === "string" && !value.trim() || Array.isArray(value) && !value.length)) {
143
- throw new Error(`\u8BF7\u586B\u5199 ${label}\u3002`);
458
+ throw new Error(t("Please enter {0}.", label));
144
459
  }
145
460
  if (value === "" || Array.isArray(value) && !value.length) {
146
461
  continue;
147
462
  }
148
463
  if (field.type === "number" && (typeof value !== "string" || !Number.isFinite(Number(value)))) {
149
- throw new Error(`${label} \u9700\u8981\u662F\u6709\u6548\u6570\u5B57\u3002`);
464
+ throw new Error(t("{0} must be a valid number.", label));
150
465
  }
151
466
  if (field.type === "boolean" && value !== "true" && value !== "false") {
152
- throw new Error(`${label} \u9700\u8981\u662F\u6709\u6548\u5E03\u5C14\u503C\u3002`);
467
+ throw new Error(t("{0} must be a valid boolean.", label));
153
468
  }
154
469
  if (field.format === "json" || field.type === "file" || field.control === "audio") {
155
470
  let parsed;
156
471
  try {
157
472
  parsed = JSON.parse(typeof value === "string" ? value : JSON.stringify(value));
158
473
  } catch {
159
- throw new Error(`${label} \u9700\u8981\u662F\u6709\u6548\u7684 JSON\u3002`);
474
+ throw new Error(t("{0} must be valid JSON.", label));
160
475
  }
161
476
  if (field.required && (field.type === "file" || field.control === "audio") && (parsed === null || Array.isArray(parsed) && !parsed.length)) {
162
- throw new Error(`\u8BF7\u586B\u5199 ${label}\u3002`);
477
+ throw new Error(t("Please enter {0}.", label));
163
478
  }
164
479
  }
165
480
  const choices = states[field.name]?.resolvedOptions ?? field.options;
166
481
  if (choices && choices.length > 0) {
167
482
  const allowed = new Set(choices.filter((option) => states[field.name]?.options?.[option.value]?.visible !== false && !states[field.name]?.options?.[option.value]?.disabled).map((option) => option.value));
168
483
  if ((Array.isArray(value) ? value : [value]).some((entry) => !allowed.has(entry))) {
169
- throw new Error(`${label} \u7684\u9009\u9879\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002`);
484
+ throw new Error(t("The options for {0} have changed. Please select again.", label));
170
485
  }
171
486
  }
172
487
  }
@@ -226,7 +541,7 @@ var ConversationController = class {
226
541
  delete message.submittingInput;
227
542
  if (message.status === "running") {
228
543
  message.status = message.pendingInput ? "waiting_for_input" : "aborted";
229
- message.error = "\u8FD0\u884C\u5DF2\u4E2D\u65AD";
544
+ message.error = t("Run interrupted");
230
545
  }
231
546
  }
232
547
  }
@@ -250,7 +565,7 @@ var ConversationController = class {
250
565
  }
251
566
  blank() {
252
567
  const now = Date.now();
253
- return { id: globalThis.crypto.randomUUID(), title: "\u65B0\u5BF9\u8BDD", createdAt: now, updatedAt: now, messages: [], parameterValues: {}, toolPermissionPolicies: {}, queuedInputs: [], draft: { text: "", attachments: [] } };
568
+ return { id: globalThis.crypto.randomUUID(), title: t("New conversation"), createdAt: now, updatedAt: now, messages: [], parameterValues: {}, toolPermissionPolicies: {}, queuedInputs: [], draft: { text: "", attachments: [] } };
254
569
  }
255
570
  async persist() {
256
571
  const sessions = this.sessions.map((entry) => ({ ...entry, messages: entry.messages.map(({ submittingInput: _, ...message }) => message) }));
@@ -355,7 +670,7 @@ var ConversationController = class {
355
670
  const waiting = entry.messages.some((message) => message.pendingInput);
356
671
  if (entry.activeRunId || waiting || entry.queuedInputs?.length) {
357
672
  if (!this.project.conversation?.inputQueue?.enabled) {
358
- throw new Error("\u5F53\u524D\u4F1A\u8BDD\u6B63\u5728\u8FD0\u884C\u3002");
673
+ throw new Error(t("The current session is running."));
359
674
  }
360
675
  if (entry.draft?.editingQueueId) {
361
676
  const index = entry.queuedInputs.findIndex((item) => item.id === entry.draft?.editingQueueId);
@@ -399,7 +714,7 @@ var ConversationController = class {
399
714
  }
400
715
  if (!answer) {
401
716
  if (!entry.messages.length && !entry.titleLocked) {
402
- entry.title = (input.text || input.attachments[0]?.name || "\u5DE5\u4F5C\u6D41\u8FD0\u884C").slice(0, 80);
717
+ entry.title = (input.text || input.attachments[0]?.name || t("Workflow run")).slice(0, 80);
403
718
  }
404
719
  entry.messages.push({ id: globalThis.crypto.randomUUID(), role: "user", content: input.text || "", attachments: input.attachments, args, input, entrypointId: input.entrypointId, createdAt: Date.now() });
405
720
  answer = { id: globalThis.crypto.randomUUID(), role: "assistant", content: "", items: [], status: "running", createdAt: Date.now(), model: typeof input.params.model === "string" ? input.params.model : void 0, args, entrypointId: input.entrypointId, events: [] };
@@ -431,7 +746,7 @@ var ConversationController = class {
431
746
  rawArgs(text) {
432
747
  const raw = JSON.parse(text);
433
748
  if (!Array.isArray(raw) || !raw.every((arg) => typeof arg === "string")) {
434
- throw new Error("\u8FD0\u884C\u53C2\u6570\u9700\u8981\u662F\u5B57\u7B26\u4E32\u6570\u7EC4\u3002");
749
+ throw new Error(t("Run arguments must be an array of strings."));
435
750
  }
436
751
  return raw;
437
752
  }
@@ -440,7 +755,7 @@ var ConversationController = class {
440
755
  try {
441
756
  await this.persist();
442
757
  if (task.cancelled || this.disposed) {
443
- throw new Error("\u5DF2\u505C\u6B62");
758
+ throw new Error(t("Stopped"));
444
759
  }
445
760
  const report = await this.runtime.run(request, (event) => {
446
761
  if (task.cancelled || this.disposed || this.tasks.get(answer.runId) !== task) {
@@ -476,7 +791,7 @@ var ConversationController = class {
476
791
  this.changed();
477
792
  });
478
793
  if (task.cancelled || this.disposed) {
479
- throw new Error("\u5DF2\u505C\u6B62");
794
+ throw new Error(t("Stopped"));
480
795
  }
481
796
  answer.report = report;
482
797
  answer.status = report.status;
@@ -498,17 +813,17 @@ var ConversationController = class {
498
813
  answer.timers = report.timers ?? answer.timers;
499
814
  if (report.status === "failed") {
500
815
  const data = report.result?.data;
501
- answer.error = report.result?.error?.message || (data && typeof data === "object" && "errMessage" in data && typeof data.errMessage === "string" ? data.errMessage : "\u8FD0\u884C\u5931\u8D25");
816
+ answer.error = report.result?.error?.message || (data && typeof data === "object" && "errMessage" in data && typeof data.errMessage === "string" ? data.errMessage : t("Run failed"));
502
817
  }
503
818
  if (report.status === "aborted" || report.status === "timed_out") {
504
- answer.error = report.status === "aborted" ? "\u5DF2\u505C\u6B62" : "\u8FD0\u884C\u8D85\u65F6";
819
+ answer.error = report.status === "aborted" ? t("Stopped") : t("Run timed out");
505
820
  }
506
821
  if (answer.submittingInput && pending && report.status === "failed") {
507
822
  answer.status = "waiting_for_input";
508
823
  answer.pendingInput = pending;
509
824
  }
510
825
  if (!answer.content && !answer.items?.length && report.status === "success") {
511
- answer.content = report.result?.data === void 0 ? "\u5DF2\u5B8C\u6210" : JSON.stringify(report.result.data, null, 2);
826
+ answer.content = report.result?.data === void 0 ? t("Completed") : JSON.stringify(report.result.data, null, 2);
512
827
  }
513
828
  } catch (error) {
514
829
  answer.error = error instanceof Error ? error.message : String(error);
@@ -568,7 +883,7 @@ var ConversationController = class {
568
883
  if (pending) {
569
884
  pending.pendingInput = void 0;
570
885
  pending.status = "aborted";
571
- pending.error = "\u5DF2\u505C\u6B62";
886
+ pending.error = t("Stopped");
572
887
  this.changed();
573
888
  void this.persist().catch((error) => this.options.log(String(error)));
574
889
  }
@@ -790,7 +1105,7 @@ var WorkflowController = class {
790
1105
  delete record2.submittingInput;
791
1106
  if (record2.status === "running" || record2.status === "waiting_for_input") {
792
1107
  record2.status = "interrupted";
793
- record2.error = "\u8FD0\u884C\u5DF2\u4E2D\u65AD";
1108
+ record2.error = t("Run interrupted");
794
1109
  this.clearTimers(record2);
795
1110
  }
796
1111
  }
@@ -1565,10 +1880,10 @@ var KanbanController = class {
1565
1880
  create(workspace, params, values = createDefaultKanbanValues(params), name) {
1566
1881
  if (!name) {
1567
1882
  let index = 1;
1568
- while (workspace.configurations.some((item2) => item2.name === `\u914D\u7F6E ${index}`)) {
1883
+ while (workspace.configurations.some((item2) => item2.name === t("Configuration {0}", index))) {
1569
1884
  index++;
1570
1885
  }
1571
- name = `\u914D\u7F6E ${index}`;
1886
+ name = t("Configuration {0}", index);
1572
1887
  }
1573
1888
  const date = (/* @__PURE__ */ new Date()).toISOString(), item = { id: randomUUID2(), name, values: { ...values }, createdAt: date, updatedAt: date };
1574
1889
  workspace.configurations.push(item);
@@ -1744,7 +2059,7 @@ var KanbanController = class {
1744
2059
  this.missingRelatedProjectAliases = [];
1745
2060
  const connection = this.hooks.connection();
1746
2061
  if (!connection) {
1747
- this.relatedProjectWarning = "\u8BF7\u767B\u5F55 Workflow Server \u4EE5\u8FDE\u63A5\u770B\u677F\u6570\u636E\u3002";
2062
+ this.relatedProjectWarning = t("Sign in to Workflow Server to connect Kanban data.");
1748
2063
  return;
1749
2064
  }
1750
2065
  const abort = this.feed = new AbortController();
@@ -1766,7 +2081,7 @@ var KanbanController = class {
1766
2081
  } }, abort.signal);
1767
2082
  } catch {
1768
2083
  if (!abort.signal.aborted) {
1769
- this.relatedProjectWarning = "\u5173\u8054\u9879\u76EE\u66F4\u65B0\u8FDE\u63A5\u5DF2\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8FDE\u3002";
2084
+ this.relatedProjectWarning = t("The related project connection was interrupted. Reconnecting.");
1770
2085
  this.hooks.changed();
1771
2086
  }
1772
2087
  }
@@ -1840,13 +2155,14 @@ function conversationResourceCards(items, projectId, conversationId) {
1840
2155
  continue;
1841
2156
  }
1842
2157
  let output = record(content.output);
2158
+ const details = record(output?.details);
1843
2159
  if (Array.isArray(output?.content) && output.content.length === 1) {
1844
2160
  try {
1845
2161
  output = record(JSON.parse(String(record(output.content[0])?.text)));
1846
2162
  } catch {
1847
2163
  }
1848
2164
  }
1849
- let descriptor = record(record(output?.details)?.resourceCard);
2165
+ let descriptor = record(details?.resourceCard) ?? record(record(output?.details)?.resourceCard);
1850
2166
  const input = record(content.input) ?? {};
1851
2167
  const tool = string(content.tool) ?? "";
1852
2168
  if (tool === "workflow-ui_present_card") {
@@ -2153,6 +2469,7 @@ import { spawn } from "child_process";
2153
2469
  import { existsSync, readFileSync } from "fs";
2154
2470
  import path5 from "path";
2155
2471
  import { fileURLToPath } from "url";
2472
+ import { WORKFLOW_RUNTIME_LOCALE_ENV } from "workflow-code";
2156
2473
  function cliRoot() {
2157
2474
  let directory = path5.dirname(fileURLToPath(import.meta.url));
2158
2475
  for (let depth = 0; depth < 8; depth++) {
@@ -2186,6 +2503,8 @@ function createWebRuntime(projectDir, storageDir, connection) {
2186
2503
  const env = {
2187
2504
  ...process.env,
2188
2505
  WORKFLOW_RUNTIME_PLATFORM: "cli",
2506
+ [WORKFLOW_RUNTIME_LOCALE_ENV]: locale(),
2507
+ WORKFLOW_CODE_LOCALE: locale(),
2189
2508
  WORKFLOW_SERVER_URL: auth?.serverUrl ?? "",
2190
2509
  WORKFLOW_SERVER_ADMIN_KEY: auth?.accessToken ?? "",
2191
2510
  WORKFLOW_SERVER_TOKEN: "",
@@ -2317,7 +2636,7 @@ function createWebRuntime(projectDir, storageDir, connection) {
2317
2636
  // src/web/account-auth.ts
2318
2637
  async function loginWebAccount(serverUrl, email, password) {
2319
2638
  if (!email.trim() || !password) {
2320
- throw new Error("\u8BF7\u8F93\u5165\u90AE\u7BB1\u548C\u5BC6\u7801\u3002");
2639
+ throw new Error(t("Enter your email and password."));
2321
2640
  }
2322
2641
  let token = "";
2323
2642
  let cookie = "";
@@ -2327,7 +2646,7 @@ async function loginWebAccount(serverUrl, email, password) {
2327
2646
  const response = await fetch(`${serverUrl}${endpoint}`, { ...options, redirect: "error", signal: AbortSignal.timeout(15e3) });
2328
2647
  const result = await response.json();
2329
2648
  if (!response.ok || result.errCode !== 0 || !result.data) {
2330
- const message = response.status === 401 ? "\u90AE\u7BB1\u6216\u5BC6\u7801\u4E0D\u6B63\u786E\uFF0C\u6216\u767B\u5F55\u5DF2\u5931\u6548\u3002" : result.errMessage || "Workflow Server login failed.";
2649
+ const message = response.status === 401 ? t("Incorrect email or password, or sign-in expired.") : result.errMessage || "Workflow Server login failed.";
2331
2650
  throw new Error(String(message).replaceAll(password, "[redacted]").replaceAll(token || "\0", "[redacted]"));
2332
2651
  }
2333
2652
  return { response, data: result.data };
@@ -2863,7 +3182,7 @@ ${token}`;
2863
3182
  if (message.type === "export-message") {
2864
3183
  replies.push({ type: "download", name: `run-${answer.id}.json`, content: JSON.stringify(redactWorkflowData(answer, [...sensitiveTokens], false), null, 2) }, { type: "exported", sessionId: current.id, messageId: answer.id });
2865
3184
  } else {
2866
- replies.push({ type: "preview", title: message.type === "logs" ? "\u8FD0\u884C\u65E5\u5FD7" : "\u8F68\u8FF9", content: message.type === "logs" ? answer.report?.logs ?? "" : { report: answer.report, events: answer.events, items: answer.items } });
3185
+ replies.push({ type: "preview", title: message.type === "logs" ? t("Run logs") : t("Trace"), content: message.type === "logs" ? answer.report?.logs ?? "" : { report: answer.report, events: answer.events, items: answer.items } });
2867
3186
  }
2868
3187
  break;
2869
3188
  }
@@ -3072,7 +3391,7 @@ ${token}`;
3072
3391
  const ancestors = options.host ? "'self' vscode-webview: vscode-file: https://*.vscode-cdn.net https://*.vscode-webview.net http://127.0.0.1:* http://localhost:*" : "'self' vscode-webview:";
3073
3392
  response.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-store", "Content-Security-Policy": `default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https: http:; font-src 'self'; connect-src 'self'; media-src 'self' blob:; frame-src 'self'; object-src 'none'; base-uri 'none'; frame-ancestors ${ancestors}; form-action 'self'` });
3074
3393
  const ui = isKanban ? "kanban-workspace" : isWorkflow ? "workflow-workspace" : "workflow-ui";
3075
- response.end(`<!doctype html><html lang="zh-CN" data-theme="${options.theme ?? "auto"}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="workflow-project" content="${key}"><title>Workflow</title><link rel="stylesheet" href="/assets/codicons/codicon.css"><link rel="stylesheet" href="/assets/${ui}.css"><link rel="stylesheet" href="/assets/theme.css"></head><body data-surface="${options.host?.surface ?? "editor"}"><div id="app"></div><script src="/assets/${ui}.js" defer></script></body></html>`);
3394
+ response.end(`<!doctype html><html lang="${locale()}" data-theme="${options.theme ?? "auto"}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="workflow-project" content="${key}"><title>Workflow</title><link rel="stylesheet" href="/assets/codicons/codicon.css"><link rel="stylesheet" href="/assets/${ui}.css"><link rel="stylesheet" href="/assets/theme.css"></head><body data-surface="${options.host?.surface ?? "editor"}"><div id="app"></div><script src="/assets/${ui}.js" defer></script></body></html>`);
3076
3395
  return;
3077
3396
  }
3078
3397
  const assets = { "/assets/workflow-ui.js": "application/javascript", "/assets/workflow-ui.css": "text/css", "/assets/theme.css": "text/css", "/assets/codicons/codicon.css": "text/css", "/assets/codicons/codicon.ttf": "font/ttf" };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow-code/cli",
3
- "version": "0.2.4-20261012001.codex-cli-web",
3
+ "version": "0.2.4-20261012003.codex-cli-web",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "workflow-code": "./dist/index.js"
@@ -21,7 +21,7 @@
21
21
  "zod": "4.4.3"
22
22
  },
23
23
  "peerDependencies": {
24
- "workflow-code": "0.2.4-20260929001"
24
+ "workflow-code": ">=0.2.4-20260929001 <0.2.5-0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@dagrejs/dagre": "1.1.8",
@@ -42,11 +42,11 @@
42
42
  "@workflow-code/kanban-project": "0.1.0",
43
43
  "@workflow-code/openai-responses": "0.1.0",
44
44
  "@workflow-code/project-dependencies": "0.1.0",
45
+ "@workflow-code/project-upload": "0.1.0",
45
46
  "@workflow-code/project-info": "0.1.0",
46
47
  "@workflow-code/runtime-compatibility": "0.1.0",
47
48
  "@workflow-code/workflow-ids": "0.1.0",
48
- "@workflow-code/workflow-mcp": "0.1.0",
49
- "@workflow-code/project-upload": "0.1.0"
49
+ "@workflow-code/workflow-mcp": "0.1.0"
50
50
  },
51
51
  "scripts": {
52
52
  "bootstrap": "node scripts/bootstrap.mjs",