@stevecastaneda/paseo-progress 1.4.0 → 1.5.0

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,207 @@
1
+ import type { ProgressMessages } from "../messages";
2
+
3
+ export const messages: ProgressMessages = {
4
+ status: {
5
+ "not_started": "Not started",
6
+ "working": "Working",
7
+ "blocked": "Blocked",
8
+ "done": "Done",
9
+ "skipped": "Skipped"
10
+ },
11
+ questionModes: {
12
+ "stop": {
13
+ "label": "Stop",
14
+ "hint": "Agents stop all work when they ask, until you answer."
15
+ },
16
+ "work-around": {
17
+ "label": "Work around",
18
+ "hint": "Agents hold what your answer affects and keep working on the rest."
19
+ },
20
+ "keep-building": {
21
+ "label": "Keep building",
22
+ "hint": "Agents build their recommended option while you decide, and change course if you pick another. Big questions still wait."
23
+ }
24
+ },
25
+ noteKinds: {
26
+ "new": "New",
27
+ "improved": "Improved",
28
+ "fixed": "Fixed"
29
+ },
30
+ loading: "Loading…",
31
+ loadingProgress: "Loading progress",
32
+ unknownError: "something went wrong",
33
+ openSettings: "Open Progress settings",
34
+ noProgress: "No progress recorded yet",
35
+ emptyIntro: ["An agent working in this worktree records progress with the ", " command. It shows up here as soon as the first run starts."],
36
+ finished: "Finished",
37
+ lastUpdated: "Last updated ",
38
+ activity: "Activity",
39
+ answered: "Answered",
40
+ deliverables: "Deliverables",
41
+ noActivity: "No activity yet.",
42
+ noAnswers: "No answered questions yet.",
43
+ noDeliverables: "No deliverables yet.",
44
+ workDoneShort: "done",
45
+ workDoneLong: "of estimated work done",
46
+ stuck: "Stuck",
47
+ possiblyStalled: "Possibly stalled",
48
+ waiting: "Waiting",
49
+ workingSince: "Working since ",
50
+ startedWorking: "Started working ",
51
+ flagged: "Flagged ",
52
+ questions: "Questions",
53
+ copyFailure: "Could not copy. Select the text and use Copy.",
54
+ changedCourse: " The agent had already built another option, so work changed course.",
55
+ answerRecorded: "Answer recorded ",
56
+ buildingWith: "Building with ",
57
+ recommended: "Recommended",
58
+ agentStopped: "Agent stopped until you answer",
59
+ waitingForYou: "Waiting for you",
60
+ big: "Big",
61
+ colon: ": ",
62
+ parenthetical: (text: string) => ` (${text})`,
63
+ listSeparator: ", ",
64
+ sentenceBreak: ". ",
65
+ yourAnswer: "Your answer",
66
+ asked: "Asked ",
67
+ openProgress: "Open Progress",
68
+ needsYou: "Progress needs you",
69
+ nothingNeedsYou: "Nothing needs you right now.",
70
+ overdueAside: " (no update past its estimate)",
71
+ writeUp: "Write-up",
72
+ timeline: "Timeline",
73
+ untitledAgent: "Untitled agent",
74
+ permissionNeeded: "Needs your permission",
75
+ agentError: "Stopped with an error",
76
+ openChat: "Open chat",
77
+ byTime: " by time",
78
+ added: "Added",
79
+ resetStatus: "Back to not started",
80
+ copyPathDone: "Copied path",
81
+ copyPathFailure: "Could not copy. Select the path and use Copy.",
82
+ openFailure: "Could not open it",
83
+ linkFailure: "Could not open this link.",
84
+ showLess: "Show less",
85
+ readMore: "Read more",
86
+ showFewer: "Show fewer",
87
+ seeWhatsNew: "See what’s new",
88
+ dismissWhatsNew: "Dismiss what's new",
89
+ gotIt: "Got it",
90
+ loadingPreview: "Loading preview",
91
+ truncatedText: "Showing the first 256 KB.",
92
+ openRest: " Press Open to see the rest in its default app.",
93
+ open: "Open",
94
+ openDefault: "Open in its default app",
95
+ back: "Back",
96
+ previousFile: "Previous file",
97
+ nextFile: "Next file",
98
+ videoChanged: "the video changed while it was loading. Try again.",
99
+ localHistory: "Run history stays on this computer.",
100
+ historyStopped: "Runs will stay on this computer. Files already saved stay in the repo.",
101
+ historyFailure: "Could not change where runs are saved.",
102
+ changeFolder: "Change…",
103
+ saving: "Saving…",
104
+ stopSaving: "Stop saving",
105
+ stopping: "Stopping…",
106
+ saveToRepo: "Save to repo…",
107
+ historyFolderTitle: "Save run history to a folder",
108
+ historyFolderHint: "Each run becomes its own file in this folder, in every worktree of this repo. Commit them like any other file.",
109
+ repoTop: "Top of the repo",
110
+ loadingFolders: "Loading folders",
111
+ noFolders: "No folders in here.",
112
+ listFoldersFailure: "Could not list the folders.",
113
+ newFolder: "New folder",
114
+ newFolderName: "New folder name",
115
+ useNewFolder: "Use new folder",
116
+ pickFolderHint: "Open a folder to use it, or make a new one.",
117
+ cancel: "Cancel",
118
+ useFolder: "Use folder",
119
+ installCommand: "Install command",
120
+ updateCommand: "Update command",
121
+ installCommandFailure: "Could not install the command.",
122
+ installSkill: "Install skill",
123
+ updateSkill: "Update skill",
124
+ skillForeign: "Something else already exists at every paseo-progress skill path, so the plugin won't install the skill.",
125
+ skillInstalled: "Installed the paseo-progress skill. New agent sessions will use it.",
126
+ installSkillFailure: "Could not install the skill.",
127
+ installing: "Installing…",
128
+ loadingSettings: "Loading settings…",
129
+ tryAgain: "Try again",
130
+ reload: "Reload",
131
+ reset: "Reset",
132
+ questionMode: "When an agent asks you a question",
133
+ display: "Display",
134
+ language: "Language",
135
+ languageHint: "Applies to every client connected to this Paseo host. System follows each client’s system locale, not Paseo’s app language.",
136
+ systemLanguage: "System",
137
+ readProgressError: (error: string) => `Could not read progress: ${error}`,
138
+ savedOutside: ["Progress is saved outside the repo, in ", ", so git never sees it."],
139
+ staleWarning: (duration: string) => `Possibly stale. No update for ${duration}. The work may have stopped, so working items show a warning until the next update.`,
140
+ itemHeading: (label: string) => `${label}s`,
141
+ noItems: (label: string) => `No ${label.toLowerCase()}s yet.`,
142
+ skippedLines: (count: number, file: string) => `Skipped ${count} ${count === 1 ? "line" : "lines"} in ${file}: `,
143
+ issueLine: (line: number, reason: string) => `line ${line} (${reason})`,
144
+ issueList: (items: string[], more: number) => `${items.join(", ")}${more ? `, and ${more} more` : ""}.`,
145
+ overdueUpdate: (duration: string) => `No update for longer than its ${duration} estimate. Last update `,
146
+ blockedSince: (note: string | undefined, narrow: boolean) => `Blocked${note ? `: ${note}` : ""}${narrow ? ", " : ". Since "}`,
147
+ doneCount: (count: number) => `${count} done`,
148
+ skippedCount: (count: number) => `${count} skipped`,
149
+ toggleFinished: (shown: boolean, label: string) => `${shown ? "Hide" : "Show"} ${label}`,
150
+ details: (id: string) => `${id} details`,
151
+ stageStarted: (stage: string) => `${stage} stage started `,
152
+ waitsFor: (title: string) => `Waits for ${title}`,
153
+ hasDeliverables: (count: number) => count === 1 ? "Has a deliverable" : `Has ${count} deliverables`,
154
+ questionCount: (count: number) => `${count} ${count === 1 ? "question" : "questions"}`,
155
+ shortQuestions: (count: number) => `${count}Q`,
156
+ stuckCount: (count: number) => `${count} stuck`,
157
+ waitingCount: (count: number) => `${count} waiting`,
158
+ questionsWaiting: (count: number) => `${count} ${count === 1 ? "question" : "questions"} waiting for you`,
159
+ headlineDone: (done: number, total: number, label: string) => `${done} of ${total} ${label.toLowerCase()}${total === 1 ? "" : "s"} done`,
160
+ copiedChoice: (id: string, letter: string) => `Copied "${id} ${letter}". Paste it to your agent.`,
161
+ copiedQuestion: (id: string) => `Copied ${id} for your reply`,
162
+ copyQuestion: (id: string) => `Copy ${id} for your reply`,
163
+ questionChoices: (id: string) => `${id} choices`,
164
+ raisedBy: (name: string) => `, raised by ${name}`,
165
+ copyChoice: (id: string, letter: string) => `Copy ${id} ${letter}`,
166
+ copyChoiceForAgent: (id: string, letter: string) => `Copy ${id} ${letter} for your agent`,
167
+ blockedAside: (note: string | undefined) => ` (blocked${note ? `: ${note}` : ""})`,
168
+ waitingDetail: (id: string, title: string) => `for ${id}: ${title}`,
169
+ waitingForTicket: (id: string) => `Waiting for ${id}`,
170
+ openItem: (title: string) => `Open ${title}`,
171
+ workedEstimate: (worked: string, estimate: string) => `Worked ${worked} of a ${estimate} estimate`,
172
+ byTimeHint: (id: string, label: string) => `Items marked “by time” weren't tagged to ${id}; they happened while it was the ${label.toLowerCase()} being worked on.`,
173
+ openAgentChat: (title: string) => `Open the chat with ${title}`,
174
+ stageLabel: (stage: string) => `${stage} stage`,
175
+ soFar: (duration: string) => `${duration} so far`,
176
+ opened: (title: string) => `Opened ${title}`,
177
+ copyItemPath: (title: string) => `Copy the path of ${title}`,
178
+ readError: (error: string) => `Couldn't read it here: ${error}`,
179
+ showOlder: (count: number) => `Show ${count} older`,
180
+ newVersion: (version: string) => `New in ${version}:`,
181
+ whatsNewTitle: (version: string) => `What’s new in Progress ${version}`,
182
+ loadingVideo: (percent: number) => `Loading video, ${percent}%`,
183
+ previewError: (error: string) => `Could not preview it: ${error}`,
184
+ emptyFolder: (title: string) => `Nothing in ${title} yet.`,
185
+ firstEntries: (count: number) => `Showing the first ${count}.`,
186
+ galleryPosition: (index: number, count: number) => `${index} of ${count}`,
187
+ historySaved: (path: string) => `Each run will be saved to ${path}.`,
188
+ historyInRepo: ["Each run is saved to ", " in this repo."],
189
+ useNamedFolder: (name: string) => `Use ${name}`,
190
+ launcherMissing: (path: string) => `Agents record progress with the paseo-progress command, which isn't installed yet. Installing adds it at ${path}`,
191
+ launcherOutdated: (path: string) => `An older paseo-progress command is installed at ${path}.`,
192
+ launcherForeign: (path: string) => `Something else already exists at ${path}, so the plugin won't install there. The README shows how to install it elsewhere.`,
193
+ launcherOffPath: (path: string) => `paseo-progress is installed, but its folder isn't on the PATH Paseo uses, so agents need the full path: ${path}`,
194
+ launcherInstalled: (path: string) => `Installed paseo-progress at ${path}`,
195
+ skillSkipped: (paths: string) => ` Something else is already at ${paths}, so the plugin leaves it alone.`,
196
+ skillMissing: (paths: string, skipped: string) => `Agents learn when to record progress from the paseo-progress skill, which isn't installed yet. Installing adds a link in ${paths}.${skipped}`,
197
+ skillOutdated: (paths: string, skipped: string) => `The paseo-progress skill in ${paths} points to a copy of the plugin Paseo no longer runs.${skipped}`,
198
+ resetTo: (label: string) => `Go back to ${label}`,
199
+ ago: (duration: string) => `${duration} ago`,
200
+ workDone: (done: string, total: string) => `${done} of ${total}`,
201
+ justNow: "just now",
202
+ lessThanMinute: "<1m",
203
+ zeroMinutes: "0m",
204
+ minutes: (minutes: number) => `${minutes}m`,
205
+ hours: (hours: number) => `${hours}h`,
206
+ hoursMinutes: (hours: number, minutes: number) => `${hours}h ${minutes}m`,
207
+ };
@@ -0,0 +1,207 @@
1
+ import type { ProgressMessages } from "../messages";
2
+
3
+ export const messages: ProgressMessages = {
4
+ status: {
5
+ "not_started": "未开始",
6
+ "working": "进行中",
7
+ "blocked": "受阻",
8
+ "done": "已完成",
9
+ "skipped": "已跳过"
10
+ },
11
+ questionModes: {
12
+ "stop": {
13
+ "label": "停止",
14
+ "hint": "智能体提问后会停止所有工作,直到你回答。"
15
+ },
16
+ "work-around": {
17
+ "label": "继续其他工作",
18
+ "hint": "智能体暂停受回答影响的工作,继续处理其余事项。"
19
+ },
20
+ "keep-building": {
21
+ "label": "继续构建",
22
+ "hint": "你做决定期间,智能体会先按推荐方案构建;若你选择其他方案,则调整方向。重大问题仍会等待回答。"
23
+ }
24
+ },
25
+ noteKinds: {
26
+ "new": "新增",
27
+ "improved": "改进",
28
+ "fixed": "修复"
29
+ },
30
+ loading: "加载中…",
31
+ loadingProgress: "正在加载进度",
32
+ unknownError: "发生了错误",
33
+ openSettings: "打开 Progress 设置",
34
+ noProgress: "尚未记录进度",
35
+ emptyIntro: ["在此工作树中工作的智能体会通过 ", " 命令记录进度。首次运行开始后,进度就会显示在这里。"],
36
+ finished: "已结束",
37
+ lastUpdated: "最后更新于 ",
38
+ activity: "动态",
39
+ answered: "已回答",
40
+ deliverables: "交付物",
41
+ noActivity: "暂无动态。",
42
+ noAnswers: "暂无已回答的问题。",
43
+ noDeliverables: "暂无交付物。",
44
+ workDoneShort: "已完成",
45
+ workDoneLong: "的预计工作已完成",
46
+ stuck: "卡住",
47
+ possiblyStalled: "可能已停滞",
48
+ waiting: "等待中",
49
+ workingSince: "开始工作于 ",
50
+ startedWorking: "开始工作于 ",
51
+ flagged: "标记于 ",
52
+ questions: "问题",
53
+ copyFailure: "无法复制。请选中文本后使用复制功能。",
54
+ changedCourse: "智能体已实现了另一个方案,因此调整了工作方向。",
55
+ answerRecorded: "回答记录于 ",
56
+ buildingWith: "正在按以下方案构建 ",
57
+ recommended: "推荐",
58
+ agentStopped: "智能体已停止,等待你回答",
59
+ waitingForYou: "等待你的回答",
60
+ big: "重大问题",
61
+ colon: ":",
62
+ parenthetical: (text: string) => `(${text})`,
63
+ listSeparator: ",",
64
+ sentenceBreak: "。",
65
+ yourAnswer: "你的回答",
66
+ asked: "提出于 ",
67
+ openProgress: "打开 Progress",
68
+ needsYou: "Progress 需要你处理",
69
+ nothingNeedsYou: "目前没有需要你处理的事项。",
70
+ overdueAside: "(超过预计时长未更新)",
71
+ writeUp: "总结",
72
+ timeline: "时间线",
73
+ untitledAgent: "未命名的智能体",
74
+ permissionNeeded: "需要你的授权",
75
+ agentError: "因错误停止",
76
+ openChat: "打开对话",
77
+ byTime: " 按时间关联",
78
+ added: "已添加",
79
+ resetStatus: "恢复为未开始",
80
+ copyPathDone: "已复制路径",
81
+ copyPathFailure: "无法复制。请选中路径后使用复制功能。",
82
+ openFailure: "无法打开",
83
+ linkFailure: "无法打开此链接。",
84
+ showLess: "收起",
85
+ readMore: "展开阅读",
86
+ showFewer: "收起",
87
+ seeWhatsNew: "查看更新",
88
+ dismissWhatsNew: "关闭更新提示",
89
+ gotIt: "知道了",
90
+ loadingPreview: "正在加载预览",
91
+ truncatedText: "仅显示前 256 KB。",
92
+ openRest: "点击“打开”,在默认应用中查看完整内容。",
93
+ open: "打开",
94
+ openDefault: "在默认应用中打开",
95
+ back: "返回",
96
+ previousFile: "上一个文件",
97
+ nextFile: "下一个文件",
98
+ videoChanged: "视频在加载过程中发生了变化。请重试。",
99
+ localHistory: "运行记录保存在这台电脑上。",
100
+ historyStopped: "运行记录将保存在这台电脑上。已保存的文件会保留在仓库中。",
101
+ historyFailure: "无法更改运行记录的保存位置。",
102
+ changeFolder: "更改…",
103
+ saving: "保存中…",
104
+ stopSaving: "停止保存",
105
+ stopping: "停止中…",
106
+ saveToRepo: "保存到仓库…",
107
+ historyFolderTitle: "将运行记录保存到文件夹",
108
+ historyFolderHint: "此仓库各工作树的每次运行都会在此文件夹中保存为单独的文件。你可以像其他文件一样提交它们。",
109
+ repoTop: "仓库根目录",
110
+ loadingFolders: "正在加载文件夹",
111
+ noFolders: "这里没有文件夹。",
112
+ listFoldersFailure: "无法列出文件夹。",
113
+ newFolder: "新建文件夹",
114
+ newFolderName: "新文件夹名称",
115
+ useNewFolder: "使用新文件夹",
116
+ pickFolderHint: "打开一个文件夹以使用它,或新建文件夹。",
117
+ cancel: "取消",
118
+ useFolder: "使用文件夹",
119
+ installCommand: "安装命令",
120
+ updateCommand: "更新命令",
121
+ installCommandFailure: "无法安装命令。",
122
+ installSkill: "安装技能",
123
+ updateSkill: "更新技能",
124
+ skillForeign: "所有 paseo-progress 技能路径都已被其他内容占用,插件无法安装技能。",
125
+ skillInstalled: "已安装 paseo-progress 技能。新的智能体会话将使用此技能。",
126
+ installSkillFailure: "无法安装技能。",
127
+ installing: "安装中…",
128
+ loadingSettings: "正在加载设置…",
129
+ tryAgain: "重试",
130
+ reload: "重新加载",
131
+ reset: "重置",
132
+ questionMode: "当智能体向你提问时",
133
+ display: "显示",
134
+ language: "语言",
135
+ languageHint: "应用于连接到此 Paseo 主机的所有客户端。“跟随系统”使用各客户端的系统语言,不跟随 Paseo 的应用语言。",
136
+ systemLanguage: "跟随系统",
137
+ readProgressError: (error: string) => `无法读取进度:${error}`,
138
+ savedOutside: ["进度保存在仓库之外的 ", ",不会被 git 跟踪。"],
139
+ staleWarning: (duration: string) => `进度可能已过时。已有 ${duration} 未更新。工作可能已停止,正在处理的事项会显示警告,直到下次更新。`,
140
+ itemHeading: (label: string) => label,
141
+ noItems: (label: string) => `暂无 ${label}。`,
142
+ skippedLines: (count: number, file: string) => `已跳过 ${file} 中的 ${count} 行:`,
143
+ issueLine: (line: number, reason: string) => `第 ${line} 行(${reason})`,
144
+ issueList: (items: string[], more: number) => `${items.join(",")}${more ? `,另有 ${more} 处` : ""}。`,
145
+ overdueUpdate: (duration: string) => `超过预计的 ${duration} 未更新。最后更新于 `,
146
+ blockedSince: (note: string | undefined, narrow: boolean) => `受阻${note ? `:${note}` : ""},始于 `,
147
+ doneCount: (count: number) => `${count} 项已完成`,
148
+ skippedCount: (count: number) => `${count} 项已跳过`,
149
+ toggleFinished: (shown: boolean, label: string) => `${shown ? "收起" : "显示"} ${label}`,
150
+ details: (id: string) => `${id} 详情`,
151
+ stageStarted: (stage: string) => `${stage} 阶段开始于 `,
152
+ waitsFor: (title: string) => `等待 ${title}`,
153
+ hasDeliverables: (count: number) => `有 ${count} 个交付物`,
154
+ questionCount: (count: number) => `${count} 个问题`,
155
+ shortQuestions: (count: number) => `${count} 问`,
156
+ stuckCount: (count: number) => `${count} 项卡住`,
157
+ waitingCount: (count: number) => `${count} 个待回答`,
158
+ questionsWaiting: (count: number) => `${count} 个问题等待你的回答`,
159
+ headlineDone: (done: number, total: number, label: string) => `${label} 已完成 ${done}/${total}`,
160
+ copiedChoice: (id: string, letter: string) => `已复制“${id} ${letter}”。请粘贴给智能体。`,
161
+ copiedQuestion: (id: string) => `已复制 ${id},可用于回复`,
162
+ copyQuestion: (id: string) => `复制 ${id} 以回复`,
163
+ questionChoices: (id: string) => `${id} 选项`,
164
+ raisedBy: (name: string) => `,提问者:${name}`,
165
+ copyChoice: (id: string, letter: string) => `复制 ${id} ${letter}`,
166
+ copyChoiceForAgent: (id: string, letter: string) => `复制 ${id} ${letter} 给智能体`,
167
+ blockedAside: (note: string | undefined) => `(受阻${note ? `:${note}` : ""})`,
168
+ waitingDetail: (id: string, title: string) => `等待 ${id}:${title}`,
169
+ waitingForTicket: (id: string) => `等待 ${id}`,
170
+ openItem: (title: string) => `打开 ${title}`,
171
+ workedEstimate: (worked: string, estimate: string) => `已工作 ${worked},预计 ${estimate}`,
172
+ byTimeHint: (id: string, label: string) => `标记为“按时间关联”的事项未标注为 ${id},而是发生在这个 ${label} 正在处理期间。`,
173
+ openAgentChat: (title: string) => `打开与 ${title} 的对话`,
174
+ stageLabel: (stage: string) => `${stage} 阶段`,
175
+ soFar: (duration: string) => `已用 ${duration}`,
176
+ opened: (title: string) => `已打开 ${title}`,
177
+ copyItemPath: (title: string) => `复制 ${title} 的路径`,
178
+ readError: (error: string) => `无法在此读取:${error}`,
179
+ showOlder: (count: number) => `显示更早的 ${count} 项`,
180
+ newVersion: (version: string) => `${version} 的更新:`,
181
+ whatsNewTitle: (version: string) => `Progress ${version} 更新内容`,
182
+ loadingVideo: (percent: number) => `正在加载视频,${percent}%`,
183
+ previewError: (error: string) => `无法预览:${error}`,
184
+ emptyFolder: (title: string) => `${title} 中暂无内容。`,
185
+ firstEntries: (count: number) => `仅显示前 ${count} 项。`,
186
+ galleryPosition: (index: number, count: number) => `${index} / ${count}`,
187
+ historySaved: (path: string) => `每次运行都将保存到 ${path}。`,
188
+ historyInRepo: ["每次运行都保存在此仓库的 ", " 中。"],
189
+ useNamedFolder: (name: string) => `使用 ${name}`,
190
+ launcherMissing: (path: string) => `智能体通过 paseo-progress 命令记录进度,此命令尚未安装。安装后将添加到 ${path}`,
191
+ launcherOutdated: (path: string) => `${path} 中安装了旧版 paseo-progress 命令。`,
192
+ launcherForeign: (path: string) => `${path} 已被其他内容占用,插件无法在此安装。请参照 README 安装到其他位置。`,
193
+ launcherOffPath: (path: string) => `paseo-progress 已安装,但其文件夹不在 Paseo 使用的 PATH 中,智能体需要使用完整路径:${path}`,
194
+ launcherInstalled: (path: string) => `已将 paseo-progress 安装到 ${path}`,
195
+ skillSkipped: (paths: string) => `${paths} 已被其他内容占用,插件将保留原有内容。`,
196
+ skillMissing: (paths: string, skipped: string) => `智能体通过 paseo-progress 技能了解何时记录进度,此技能尚未安装。安装会在 ${paths} 中添加链接。${skipped}`,
197
+ skillOutdated: (paths: string, skipped: string) => `${paths} 中的 paseo-progress 技能指向 Paseo 已不再使用的插件副本。${skipped}`,
198
+ resetTo: (label: string) => `恢复为“${label}”`,
199
+ ago: (duration: string) => `${duration}前`,
200
+ workDone: (done: string, total: string) => `${done} / ${total}`,
201
+ justNow: "刚刚",
202
+ lessThanMinute: "<1 分钟",
203
+ zeroMinutes: "0 分钟",
204
+ minutes: (minutes: number) => `${minutes} 分钟`,
205
+ hours: (hours: number) => `${hours} 小时`,
206
+ hoursMinutes: (hours: number, minutes: number) => `${hours} 小时 ${minutes} 分钟`,
207
+ };
@@ -0,0 +1,189 @@
1
+ import type { TicketStatus } from "../shared/events";
2
+ import type { QuestionMode } from "../shared/question-modes";
3
+ import type { NoteKind } from "../shared/whats-new";
4
+
5
+ // Text before and after a value the UI draws in its own style.
6
+ export type Around = readonly [before: string, after: string];
7
+
8
+ export interface ProgressMessages {
9
+ status: Record<TicketStatus, string>;
10
+ questionModes: Record<QuestionMode, { label: string; hint: string }>;
11
+ noteKinds: Record<NoteKind, string>;
12
+ loading: string;
13
+ loadingProgress: string;
14
+ unknownError: string;
15
+ openSettings: string;
16
+ noProgress: string;
17
+ emptyIntro: Around;
18
+ finished: string;
19
+ lastUpdated: string;
20
+ activity: string;
21
+ answered: string;
22
+ deliverables: string;
23
+ noActivity: string;
24
+ noAnswers: string;
25
+ noDeliverables: string;
26
+ workDoneShort: string;
27
+ workDoneLong: string;
28
+ stuck: string;
29
+ waiting: string;
30
+ possiblyStalled: string;
31
+ workingSince: string;
32
+ startedWorking: string;
33
+ flagged: string;
34
+ questions: string;
35
+ copyFailure: string;
36
+ changedCourse: string;
37
+ answerRecorded: string;
38
+ buildingWith: string;
39
+ recommended: string;
40
+ agentStopped: string;
41
+ waitingForYou: string;
42
+ big: string;
43
+ colon: string;
44
+ parenthetical: (text: string) => string;
45
+ listSeparator: string;
46
+ sentenceBreak: string;
47
+ yourAnswer: string;
48
+ asked: string;
49
+ openProgress: string;
50
+ needsYou: string;
51
+ nothingNeedsYou: string;
52
+ overdueAside: string;
53
+ writeUp: string;
54
+ timeline: string;
55
+ untitledAgent: string;
56
+ permissionNeeded: string;
57
+ agentError: string;
58
+ openChat: string;
59
+ byTime: string;
60
+ added: string;
61
+ resetStatus: string;
62
+ copyPathDone: string;
63
+ copyPathFailure: string;
64
+ openFailure: string;
65
+ linkFailure: string;
66
+ showLess: string;
67
+ readMore: string;
68
+ showFewer: string;
69
+ seeWhatsNew: string;
70
+ dismissWhatsNew: string;
71
+ gotIt: string;
72
+ loadingPreview: string;
73
+ truncatedText: string;
74
+ openRest: string;
75
+ open: string;
76
+ openDefault: string;
77
+ back: string;
78
+ previousFile: string;
79
+ nextFile: string;
80
+ videoChanged: string;
81
+ localHistory: string;
82
+ historyStopped: string;
83
+ historyFailure: string;
84
+ changeFolder: string;
85
+ saving: string;
86
+ stopSaving: string;
87
+ stopping: string;
88
+ saveToRepo: string;
89
+ historyFolderTitle: string;
90
+ historyFolderHint: string;
91
+ repoTop: string;
92
+ loadingFolders: string;
93
+ noFolders: string;
94
+ listFoldersFailure: string;
95
+ newFolder: string;
96
+ newFolderName: string;
97
+ useNewFolder: string;
98
+ pickFolderHint: string;
99
+ cancel: string;
100
+ useFolder: string;
101
+ installCommand: string;
102
+ updateCommand: string;
103
+ installCommandFailure: string;
104
+ installSkill: string;
105
+ updateSkill: string;
106
+ skillForeign: string;
107
+ skillInstalled: string;
108
+ installSkillFailure: string;
109
+ installing: string;
110
+ loadingSettings: string;
111
+ tryAgain: string;
112
+ reload: string;
113
+ reset: string;
114
+ questionMode: string;
115
+ display: string;
116
+ language: string;
117
+ languageHint: string;
118
+ systemLanguage: string;
119
+ readProgressError: (error: string) => string;
120
+ savedOutside: Around;
121
+ staleWarning: (duration: string) => string;
122
+ itemHeading: (label: string) => string;
123
+ noItems: (label: string) => string;
124
+ skippedLines: (count: number, file: string) => string;
125
+ issueLine: (line: number, reason: string) => string;
126
+ issueList: (items: string[], more: number) => string;
127
+ overdueUpdate: (duration: string) => string;
128
+ blockedSince: (note: string | undefined, narrow: boolean) => string;
129
+ doneCount: (count: number) => string;
130
+ skippedCount: (count: number) => string;
131
+ toggleFinished: (shown: boolean, label: string) => string;
132
+ details: (id: string) => string;
133
+ stageStarted: (stage: string) => string;
134
+ waitsFor: (title: string) => string;
135
+ hasDeliverables: (count: number) => string;
136
+ questionCount: (count: number) => string;
137
+ shortQuestions: (count: number) => string;
138
+ stuckCount: (count: number) => string;
139
+ waitingCount: (count: number) => string;
140
+ questionsWaiting: (count: number) => string;
141
+ headlineDone: (done: number, total: number, label: string) => string;
142
+ copiedChoice: (id: string, letter: string) => string;
143
+ copiedQuestion: (id: string) => string;
144
+ copyQuestion: (id: string) => string;
145
+ questionChoices: (id: string) => string;
146
+ raisedBy: (name: string) => string;
147
+ copyChoice: (id: string, letter: string) => string;
148
+ copyChoiceForAgent: (id: string, letter: string) => string;
149
+ blockedAside: (note: string | undefined) => string;
150
+ waitingDetail: (id: string, title: string) => string;
151
+ waitingForTicket: (id: string) => string;
152
+ openItem: (title: string) => string;
153
+ workedEstimate: (worked: string, estimate: string) => string;
154
+ byTimeHint: (id: string, label: string) => string;
155
+ openAgentChat: (title: string) => string;
156
+ stageLabel: (stage: string) => string;
157
+ soFar: (duration: string) => string;
158
+ opened: (title: string) => string;
159
+ copyItemPath: (title: string) => string;
160
+ readError: (error: string) => string;
161
+ showOlder: (count: number) => string;
162
+ newVersion: (version: string) => string;
163
+ whatsNewTitle: (version: string) => string;
164
+ loadingVideo: (percent: number) => string;
165
+ previewError: (error: string) => string;
166
+ emptyFolder: (title: string) => string;
167
+ firstEntries: (count: number) => string;
168
+ galleryPosition: (index: number, count: number) => string;
169
+ historySaved: (path: string) => string;
170
+ historyInRepo: Around;
171
+ useNamedFolder: (name: string) => string;
172
+ launcherMissing: (path: string) => string;
173
+ launcherOutdated: (path: string) => string;
174
+ launcherForeign: (path: string) => string;
175
+ launcherOffPath: (path: string) => string;
176
+ launcherInstalled: (path: string) => string;
177
+ skillSkipped: (paths: string) => string;
178
+ skillMissing: (paths: string, skipped: string) => string;
179
+ skillOutdated: (paths: string, skipped: string) => string;
180
+ resetTo: (label: string) => string;
181
+ ago: (duration: string) => string;
182
+ workDone: (done: string, total: string) => string;
183
+ justNow: string;
184
+ lessThanMinute: string;
185
+ zeroMinutes: string;
186
+ minutes: (minutes: number) => string;
187
+ hours: (hours: number) => string;
188
+ hoursMinutes: (hours: number, minutes: number) => string;
189
+ }