@dsh-workbench/shared 0.1.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.
- package/dist/api/blocker-table.d.ts +9 -0
- package/dist/api/blocker-table.js +130 -0
- package/dist/api/blocker.d.ts +30 -0
- package/dist/api/blocker.js +1 -0
- package/dist/api/context-ref.d.ts +10 -0
- package/dist/api/context-ref.js +40 -0
- package/dist/api/dsh-client.d.ts +170 -0
- package/dist/api/dsh-client.js +1 -0
- package/dist/api/dsh.d.ts +153 -0
- package/dist/api/dsh.js +1 -0
- package/dist/api/facts.d.ts +27 -0
- package/dist/api/facts.js +146 -0
- package/dist/api/host-write.d.ts +12 -0
- package/dist/api/host-write.js +17 -0
- package/dist/api/long-task.d.ts +18 -0
- package/dist/api/long-task.js +22 -0
- package/dist/api/unit-board.d.ts +14 -0
- package/dist/api/unit-board.js +29 -0
- package/dist/api/unit.d.ts +54 -0
- package/dist/api/unit.js +1 -0
- package/dist/api/workbench-client.d.ts +19 -0
- package/dist/api/workbench-client.js +33 -0
- package/dist/api/workbench-contract.d.ts +32 -0
- package/dist/api/workbench-contract.js +1 -0
- package/dist/components/ApprovalDetail.d.ts +27 -0
- package/dist/components/ApprovalDetail.js +33 -0
- package/dist/components/CardHead.d.ts +16 -0
- package/dist/components/CardHead.js +14 -0
- package/dist/components/ChoiceGroup.d.ts +14 -0
- package/dist/components/ChoiceGroup.js +7 -0
- package/dist/components/LongTaskRow.d.ts +16 -0
- package/dist/components/LongTaskRow.js +28 -0
- package/dist/components/MockStrip.d.ts +14 -0
- package/dist/components/MockStrip.js +7 -0
- package/dist/components/ResourceStates.d.ts +18 -0
- package/dist/components/ResourceStates.js +17 -0
- package/dist/components/SaveBar.d.ts +12 -0
- package/dist/components/SaveBar.js +6 -0
- package/dist/components/StateDot.d.ts +5 -0
- package/dist/components/StateDot.js +10 -0
- package/dist/components/board-module.d.ts +67 -0
- package/dist/components/board-module.js +1 -0
- package/dist/components/icons.d.ts +18 -0
- package/dist/components/icons.js +81 -0
- package/dist/config/constants.d.ts +27 -0
- package/dist/config/constants.js +27 -0
- package/dist/config/storage.d.ts +4 -0
- package/dist/config/storage.js +27 -0
- package/dist/host/__tests__/fakes.d.ts +41 -0
- package/dist/host/__tests__/fakes.js +76 -0
- package/dist/host/__tests__/preflight-fixtures.d.ts +19 -0
- package/dist/host/__tests__/preflight-fixtures.js +47 -0
- package/dist/host/cli-error.d.ts +8 -0
- package/dist/host/cli-error.js +70 -0
- package/dist/host/context-inject.d.ts +24 -0
- package/dist/host/context-inject.js +74 -0
- package/dist/host/data-root.d.ts +3 -0
- package/dist/host/data-root.js +12 -0
- package/dist/host/events.d.ts +9 -0
- package/dist/host/events.js +70 -0
- package/dist/host/facts.d.ts +24 -0
- package/dist/host/facts.js +44 -0
- package/dist/host/git.d.ts +55 -0
- package/dist/host/git.js +64 -0
- package/dist/host/http.d.ts +36 -0
- package/dist/host/http.js +242 -0
- package/dist/host/long-task.d.ts +58 -0
- package/dist/host/long-task.js +148 -0
- package/dist/host/mount-units.d.ts +52 -0
- package/dist/host/mount-units.js +186 -0
- package/dist/host/opencli-runtime.d.ts +22 -0
- package/dist/host/opencli-runtime.js +46 -0
- package/dist/host/opencli.d.ts +37 -0
- package/dist/host/opencli.js +152 -0
- package/dist/host/plugin-source.d.ts +31 -0
- package/dist/host/plugin-source.js +81 -0
- package/dist/host/preflight.d.ts +58 -0
- package/dist/host/preflight.js +233 -0
- package/dist/host/probe-cache.d.ts +6 -0
- package/dist/host/probe-cache.js +19 -0
- package/dist/host/probe-libs.d.ts +45 -0
- package/dist/host/probe-libs.js +61 -0
- package/dist/host/probe-units.d.ts +17 -0
- package/dist/host/probe-units.js +102 -0
- package/dist/host/probe-verdict.d.ts +7 -0
- package/dist/host/probe-verdict.js +143 -0
- package/dist/host/provision.d.ts +14 -0
- package/dist/host/provision.js +12 -0
- package/dist/host/shell.d.ts +14 -0
- package/dist/host/shell.js +23 -0
- package/dist/host/tool-approval.d.ts +29 -0
- package/dist/host/tool-approval.js +190 -0
- package/dist/host/tool-kit.d.ts +19 -0
- package/dist/host/tool-kit.js +37 -0
- package/dist/host/tool-scope.d.ts +32 -0
- package/dist/host/tool-scope.js +84 -0
- package/dist/host/unit-face.d.ts +66 -0
- package/dist/host/unit-face.js +1 -0
- package/dist/host/unit-libs.d.ts +37 -0
- package/dist/host/unit-libs.js +1 -0
- package/dist/host/unit-readiness.d.ts +7 -0
- package/dist/host/unit-readiness.js +5 -0
- package/dist/host/unit-registry.d.ts +9 -0
- package/dist/host/unit-registry.js +33 -0
- package/dist/host/value-handoff.d.ts +16 -0
- package/dist/host/value-handoff.js +21 -0
- package/dist/host/version-range.d.ts +2 -0
- package/dist/host/version-range.js +73 -0
- package/dist/host/workspace-store.d.ts +19 -0
- package/dist/host/workspace-store.js +133 -0
- package/dist/host/write-result.d.ts +1 -0
- package/dist/host/write-result.js +18 -0
- package/dist/host.d.ts +19 -0
- package/dist/host.js +19 -0
- package/dist/i18n/en.d.ts +2 -0
- package/dist/i18n/en.js +162 -0
- package/dist/i18n/index.d.ts +172 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/merge.d.ts +6 -0
- package/dist/i18n/merge.js +40 -0
- package/dist/i18n/zh.d.ts +163 -0
- package/dist/i18n/zh.js +162 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +33 -0
- package/dist/lib/blocker-action.d.ts +13 -0
- package/dist/lib/blocker-action.js +12 -0
- package/dist/lib/busy.d.ts +5 -0
- package/dist/lib/busy.js +7 -0
- package/dist/lib/react.d.ts +10 -0
- package/dist/lib/react.js +9 -0
- package/dist/lib/text.d.ts +4 -0
- package/dist/lib/text.js +48 -0
- package/dist/lib/ui.d.ts +11 -0
- package/dist/lib/ui.js +37 -0
- package/package.json +44 -0
- package/src/api/__tests__/blocker-table.test.ts +253 -0
- package/src/api/__tests__/facts.test.ts +274 -0
- package/src/api/__tests__/host-write.test.ts +55 -0
- package/src/api/__tests__/long-task.test.ts +52 -0
- package/src/api/__tests__/unit-board.test.ts +76 -0
- package/src/api/blocker-table.ts +155 -0
- package/src/api/blocker.ts +25 -0
- package/src/api/context-ref.ts +47 -0
- package/src/api/dsh-client.ts +176 -0
- package/src/api/dsh.ts +156 -0
- package/src/api/facts.ts +166 -0
- package/src/api/host-write.ts +27 -0
- package/src/api/long-task.ts +38 -0
- package/src/api/unit-board.ts +44 -0
- package/src/api/unit.ts +59 -0
- package/src/api/workbench-client.test.ts +92 -0
- package/src/api/workbench-client.ts +59 -0
- package/src/api/workbench-contract.ts +40 -0
- package/src/components/ApprovalDetail.tsx +57 -0
- package/src/components/CardHead.tsx +74 -0
- package/src/components/ChoiceGroup.tsx +38 -0
- package/src/components/LongTaskRow.tsx +65 -0
- package/src/components/MockStrip.tsx +40 -0
- package/src/components/ResourceStates.tsx +44 -0
- package/src/components/SaveBar.tsx +31 -0
- package/src/components/StateDot.tsx +31 -0
- package/src/components/board-module.ts +73 -0
- package/src/components/icons.tsx +232 -0
- package/src/config/constants.test.ts +41 -0
- package/src/config/constants.ts +52 -0
- package/src/config/storage.test.ts +82 -0
- package/src/config/storage.ts +25 -0
- package/src/host/__tests__/fakes.ts +116 -0
- package/src/host/__tests__/opencli-runtime.test.ts +46 -0
- package/src/host/cli-error.ts +77 -0
- package/src/host/data-root.ts +13 -0
- package/src/host/facts.ts +69 -0
- package/src/host/git.ts +99 -0
- package/src/host/http.ts +311 -0
- package/src/host/long-task.ts +235 -0
- package/src/host/opencli-runtime.ts +66 -0
- package/src/host/opencli.ts +210 -0
- package/src/host/plugin-source.ts +145 -0
- package/src/host/provision.ts +34 -0
- package/src/host/shell.ts +42 -0
- package/src/host/tool-approval.ts +243 -0
- package/src/host/tool-kit.ts +56 -0
- package/src/host/unit-face.ts +65 -0
- package/src/host/unit-libs.ts +41 -0
- package/src/host/value-handoff.ts +38 -0
- package/src/host/workspace-store.ts +161 -0
- package/src/host/write-result.ts +16 -0
- package/src/host.ts +19 -0
- package/src/i18n/en.ts +170 -0
- package/src/i18n/index.test.ts +15 -0
- package/src/i18n/index.ts +12 -0
- package/src/i18n/merge.test.ts +60 -0
- package/src/i18n/merge.ts +54 -0
- package/src/i18n/zh.test.ts +40 -0
- package/src/i18n/zh.ts +170 -0
- package/src/index.ts +33 -0
- package/src/lib/blocker-action.test.ts +40 -0
- package/src/lib/blocker-action.ts +28 -0
- package/src/lib/busy.test.ts +27 -0
- package/src/lib/busy.ts +11 -0
- package/src/lib/react.test.ts +26 -0
- package/src/lib/react.ts +16 -0
- package/src/lib/text.test.ts +92 -0
- package/src/lib/text.ts +46 -0
- package/src/lib/ui.test.ts +93 -0
- package/src/lib/ui.ts +38 -0
package/dist/i18n/en.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
'brand.name': 'Workbench',
|
|
3
|
+
'toggle.open': 'Open sidebar',
|
|
4
|
+
'toggle.collapse': 'Collapse sidebar',
|
|
5
|
+
'project.label': 'Switch project',
|
|
6
|
+
'workspace.section': 'Workspaces',
|
|
7
|
+
'project.none': 'No project',
|
|
8
|
+
'project.empty': 'No projects yet. Use “Add project” below.',
|
|
9
|
+
'project.add': 'Add project…',
|
|
10
|
+
'session.new': 'New session',
|
|
11
|
+
'session.new.label': 'Start a session in the current project',
|
|
12
|
+
'session.empty': 'No sessions in this project yet.',
|
|
13
|
+
'session.noProject': 'Add a project first.',
|
|
14
|
+
'session.pinned': 'Pinned',
|
|
15
|
+
'session.actions': 'Actions for {name}',
|
|
16
|
+
'status.idle': 'Idle',
|
|
17
|
+
'status.running': 'Running',
|
|
18
|
+
'status.waitingApproval': 'Waiting for approval',
|
|
19
|
+
'status.planReview': 'Waiting for plan review',
|
|
20
|
+
'status.waitingAnswer': 'Waiting for your answer',
|
|
21
|
+
'status.completed': 'Completed',
|
|
22
|
+
'status.subagentsRunning.one': '{n} subagent running',
|
|
23
|
+
'status.subagentsRunning.other': '{n} subagents running',
|
|
24
|
+
'time.now': 'just now',
|
|
25
|
+
'time.minutes': '{n} min ago',
|
|
26
|
+
'time.hours': '{n} h ago',
|
|
27
|
+
'time.days': '{n} d ago',
|
|
28
|
+
'panels.title': 'Panel modules',
|
|
29
|
+
'panels.reset': 'Reset',
|
|
30
|
+
'panels.enabled': 'enabled in this project',
|
|
31
|
+
'panels.disabled': 'not enabled in this project',
|
|
32
|
+
'panels.choose': 'Choose modules',
|
|
33
|
+
'panels.failed': 'Could not save the change. Try again.',
|
|
34
|
+
'panels.hintEffect': 'Disabling = the agent cannot reach that data',
|
|
35
|
+
'panels.dragHint': 'Drag to reorder',
|
|
36
|
+
'panels.unknownStep': 'No suite provides this view',
|
|
37
|
+
'panels.labelWithHint': '{label} ({hint})',
|
|
38
|
+
'panels.dep.missingPlugin': '⚠ not ready yet',
|
|
39
|
+
'panels.dep.missingCommands': '⚠ needs an update',
|
|
40
|
+
'panels.dep.unchecked': '⚠ cannot check',
|
|
41
|
+
'panels.tab.modules': 'Panel setup',
|
|
42
|
+
'panels.tab.market': 'Workbench module market',
|
|
43
|
+
'panels.browseMarket': 'Browse the module market',
|
|
44
|
+
'panels.noneInstalled': 'None of these modules has its plugin installed yet',
|
|
45
|
+
'panels.noneInstalledHint': 'Once installed they come back here, and you pick which go on the panel.',
|
|
46
|
+
'panels.market.installed': 'installed',
|
|
47
|
+
'panels.market.outdated': 'needs update',
|
|
48
|
+
'panels.market.hasNew': 'New version',
|
|
49
|
+
'panels.market.missing': 'not installed',
|
|
50
|
+
'panels.market.unchecked': 'unknown',
|
|
51
|
+
'panels.market.checking': 'checking',
|
|
52
|
+
'panels.market.sectionInstalled': 'Installed',
|
|
53
|
+
'panels.market.sectionPending': 'Not installed',
|
|
54
|
+
'panels.market.sectionShared': 'Shared dependencies',
|
|
55
|
+
'panels.market.sharedUsedBy': 'Used by {modules}',
|
|
56
|
+
'panels.market.listSeparator': ', ',
|
|
57
|
+
'panels.market.sharedMissing': 'not installed',
|
|
58
|
+
'panels.market.sharedOutdated': 'update available',
|
|
59
|
+
'panels.market.sharedUnsatisfied': 'wrong version',
|
|
60
|
+
'panels.market.sharedOk': 'installed',
|
|
61
|
+
'panels.market.versionArrow': '{from} → {to}',
|
|
62
|
+
'panels.market.lead': 'Installed on this machine, shared by every project.',
|
|
63
|
+
'panels.market.install': 'Install',
|
|
64
|
+
'panels.market.update': 'Update',
|
|
65
|
+
'panels.market.uninstall': 'Uninstall',
|
|
66
|
+
'panels.market.installing': 'Installing…',
|
|
67
|
+
'panels.market.updating': 'Updating…',
|
|
68
|
+
'panels.market.uninstalling': 'Uninstalling…',
|
|
69
|
+
'panels.market.confirmUninstall': 'Uninstall?',
|
|
70
|
+
'panels.market.confirmUninstallDetail': 'It will be gone from this machine, and removed from every project panel (bindings and settings are kept).',
|
|
71
|
+
'panels.market.confirmYes': 'Uninstall',
|
|
72
|
+
'panels.market.confirmNo': 'Cancel',
|
|
73
|
+
'panels.market.failed': 'Failed: {reason}',
|
|
74
|
+
'panels.market.needEnv': 'Set {env} in the terminal that started the workbench first',
|
|
75
|
+
'panels.market.noSource': 'This module declares no install method — install it yourself',
|
|
76
|
+
'panels.market.badSource': 'The install method is incomplete — install it yourself',
|
|
77
|
+
'panels.market.empty': 'No modules available',
|
|
78
|
+
'panels.market.foot': 'After installing, enable it in the panel page of that project.',
|
|
79
|
+
'panels.market.recheck': 'Check for updates',
|
|
80
|
+
'panels.market.checkUpdates': 'Check for updates',
|
|
81
|
+
'panels.market.checkedAt': 'Last checked: {time}',
|
|
82
|
+
'panels.market.justNow': 'just now',
|
|
83
|
+
'panels.market.minutesAgo': '{n} min ago',
|
|
84
|
+
'panels.market.hoursAgo': '{n} h ago',
|
|
85
|
+
'blocker.fix.install': 'Install for me',
|
|
86
|
+
'blocker.fix.update': 'Upgrade for me',
|
|
87
|
+
'blocker.fix.running': 'Running…',
|
|
88
|
+
'blocker.fix.failed': 'Failed: ',
|
|
89
|
+
'blocker.retry': 'Retry',
|
|
90
|
+
'blocker.retry.running': 'Retrying…',
|
|
91
|
+
'blocker.copy': 'Copy command',
|
|
92
|
+
'blocker.market.open': 'Open the module market',
|
|
93
|
+
'blocker.login.title': 'Sign in to {platform}',
|
|
94
|
+
'blocker.login.titleGeneric': 'Sign-in required',
|
|
95
|
+
'blocker.login.hint': 'The workbench uses your browser session; sign in once and you are done.',
|
|
96
|
+
'blocker.login.go': 'Go sign in',
|
|
97
|
+
'blocker.login.manual': 'Run `opencli coding team-current` in a terminal, finish signing in, then retry.',
|
|
98
|
+
'blocker.forbidden.title': 'No access to {platform}',
|
|
99
|
+
'blocker.forbidden.titleGeneric': 'No access',
|
|
100
|
+
'blocker.forbidden.hint': 'You are signed in, but this project/repo is not permitted for your account.',
|
|
101
|
+
'blocker.forbidden.open': 'Open permissions page',
|
|
102
|
+
'blocker.timeout.hint': 'The headless browser may not have started; retrying usually helps.',
|
|
103
|
+
'blocker.exec.hint': 'Make sure opencli is installed and on PATH (which opencli).',
|
|
104
|
+
'blocker.unknown.title': 'Something went wrong',
|
|
105
|
+
'panels.reading': 'Reading the panel setup…',
|
|
106
|
+
'panels.empty': 'No modules on the panel yet',
|
|
107
|
+
'panels.emptyHint': 'You can also just tell the agent: “add a module to the panel”.',
|
|
108
|
+
'env.title': 'Preparing the workbench',
|
|
109
|
+
'env.checking': 'Checking the runtime environment…',
|
|
110
|
+
'env.installing': 'Installing the missing dependency…',
|
|
111
|
+
'env.failed': 'One step away',
|
|
112
|
+
'env.elapsed': 'Waiting {seconds}s',
|
|
113
|
+
'env.stepFailed.install': 'install failed',
|
|
114
|
+
'env.stepFailed.path': 'installed but not found',
|
|
115
|
+
'env.stepFailed.shell': 'no shell channel',
|
|
116
|
+
'env.bridge.ok': 'Connected',
|
|
117
|
+
'env.bridge.short': 'Not connected',
|
|
118
|
+
'env.bridge.why': 'Panel data goes through the login state in your browser: with this channel down, modules cannot fetch data. It does not block startup, but fix it first.',
|
|
119
|
+
'env.bridge.daemon': 'The background service is not running. It usually starts by itself \u2014 run the command below in your terminal first.',
|
|
120
|
+
'env.bridge.extension': 'The browser extension is not connected. Install it once from the Chrome Web Store (then hit Retry here). If it is already installed, run the command below first.',
|
|
121
|
+
'env.bridge.extensionLink': 'Get the extension in the Chrome Web Store',
|
|
122
|
+
'env.bridge.profile': 'Several browser profiles are connected but none is the default: list them (command below), then pick one.',
|
|
123
|
+
'env.bridge.stale': 'The default browser profile is stale (it names an extension instance that no longer exists): pick one again.',
|
|
124
|
+
'env.bridge.unknown': 'Could not tell what went wrong: the raw output below has the steps opencli itself suggests.',
|
|
125
|
+
'env.fix.title': 'How to fix it',
|
|
126
|
+
'env.fix.why': 'The workbench uses its own opencli (installed separately from the one in your terminal), and it is not set up on this machine yet.',
|
|
127
|
+
'env.fix.whyPath': 'opencli is installed, but this environment cannot find it \u2014 usually a PATH or shell-session issue.',
|
|
128
|
+
'env.fix.whyShell': 'The workbench has no shell channel, so it cannot fetch data \u2014 nothing the user can install.',
|
|
129
|
+
'env.fix.step': 'Run this in a terminal, then hit Retry:',
|
|
130
|
+
'env.fix.stepPath': 'Open a new terminal window (or make sure npm\u2019s global bin directory is on PATH), then hit Retry.',
|
|
131
|
+
'env.fix.stepShell': 'Restart the workbench (or dsh); if it keeps happening, the shell channel is not wired up.',
|
|
132
|
+
'env.fix.permission': 'Permission denied: rerun with sudo, or point npm\u2019s global directory at your home.',
|
|
133
|
+
'env.fix.network': 'Network unreachable: check your network or proxy, then retry.',
|
|
134
|
+
'env.fix.details': 'Details (for troubleshooting)',
|
|
135
|
+
'env.retry': 'Retry',
|
|
136
|
+
'env.copyCommand': 'Copy command',
|
|
137
|
+
'env.copied': 'Copied',
|
|
138
|
+
'env.step.opencli': 'Checking the workbench opencli',
|
|
139
|
+
'env.step.codingPlugin': 'Checking the coding plugin',
|
|
140
|
+
'env.step.bridge': 'Checking the browser bridge',
|
|
141
|
+
'env.step.warm': 'Warming up site sessions',
|
|
142
|
+
'env.warm.done': '{n} site(s) warmed up',
|
|
143
|
+
'env.warm.short': 'Not warmed this time — harmless; the panel heals on first read',
|
|
144
|
+
'env.unit.missingPlugin': 'This module is not ready yet',
|
|
145
|
+
'env.unit.missingCommandsHint': 'Updating it should fix this.',
|
|
146
|
+
'env.unit.unchecked': 'Cannot check: no shell channel',
|
|
147
|
+
'env.unit.uncheckedHint': 'The module is not the problem \u2014 the shell channel is unavailable. Restart the workbench.',
|
|
148
|
+
'env.unit.missingCommands': 'This module is out of date',
|
|
149
|
+
'env.unit.hint': 'Retry after installing; other modules are unaffected.',
|
|
150
|
+
'rightbar.label': 'Data panels',
|
|
151
|
+
'rightbar.expand': 'Expand the data panel',
|
|
152
|
+
'rightbar.collapse': 'Collapse the data panel',
|
|
153
|
+
'rightbar.refresh': 'Refresh',
|
|
154
|
+
'rightbar.refreshing': 'Refreshing…',
|
|
155
|
+
'rightbar.updatedAt': 'updated {time}',
|
|
156
|
+
'rightbar.noProject': 'The current session has no workspace',
|
|
157
|
+
'coding.notARepo.title': 'This workspace is not a Coding repository',
|
|
158
|
+
'error.unknown': 'Something went wrong',
|
|
159
|
+
'board.title': 'Board',
|
|
160
|
+
'panel.conversation': 'Conversation',
|
|
161
|
+
'panels.label': 'Global panels',
|
|
162
|
+
};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { type WorkbenchMessages } from './zh';
|
|
2
|
+
export declare const dictionaries: {
|
|
3
|
+
zh: {
|
|
4
|
+
readonly 'brand.name': "工作台";
|
|
5
|
+
readonly 'toggle.open': "打开侧边栏";
|
|
6
|
+
readonly 'toggle.collapse': "收起侧边栏";
|
|
7
|
+
readonly 'project.label': "切换项目";
|
|
8
|
+
readonly 'workspace.section': "工作区";
|
|
9
|
+
readonly 'project.none': "未选择项目";
|
|
10
|
+
readonly 'project.empty': "还没有项目。用下面的「添加项目」选一个目录。";
|
|
11
|
+
readonly 'project.add': "添加项目…";
|
|
12
|
+
readonly 'session.new': "新会话";
|
|
13
|
+
readonly 'session.new.label': "在当前项目新建会话";
|
|
14
|
+
readonly 'session.empty': "这个项目还没有会话。";
|
|
15
|
+
readonly 'session.noProject': "先添加一个项目。";
|
|
16
|
+
readonly 'session.pinned': "已置顶";
|
|
17
|
+
readonly 'session.actions': "{name} 的操作";
|
|
18
|
+
readonly 'status.idle': "空闲";
|
|
19
|
+
readonly 'status.running': "运行中";
|
|
20
|
+
readonly 'status.waitingApproval': "等待授权";
|
|
21
|
+
readonly 'status.planReview': "等待计划确认";
|
|
22
|
+
readonly 'status.waitingAnswer': "等待回答";
|
|
23
|
+
readonly 'status.completed': "已完成";
|
|
24
|
+
readonly 'status.subagentsRunning.one': "{n} 个子代理运行中";
|
|
25
|
+
readonly 'status.subagentsRunning.other': "{n} 个子代理运行中";
|
|
26
|
+
readonly 'time.now': "刚刚";
|
|
27
|
+
readonly 'time.minutes': "{n} 分钟前";
|
|
28
|
+
readonly 'time.hours': "{n} 小时前";
|
|
29
|
+
readonly 'time.days': "{n} 天前";
|
|
30
|
+
readonly 'panels.title': "面板模块";
|
|
31
|
+
readonly 'panels.reset': "恢复默认";
|
|
32
|
+
readonly 'panels.enabled': "这个项目已启用";
|
|
33
|
+
readonly 'panels.disabled': "这个项目未启用";
|
|
34
|
+
readonly 'panels.choose': "选择模块";
|
|
35
|
+
readonly 'panels.failed': "改配置失败了,再试一次。";
|
|
36
|
+
readonly 'panels.hintEffect': "停用 = agent 拿不到相关数据";
|
|
37
|
+
readonly 'panels.dragHint': "拖动调整顺序";
|
|
38
|
+
readonly 'panels.unknownStep': "这一层没有套件提供";
|
|
39
|
+
readonly 'panels.labelWithHint': "{label}({hint})";
|
|
40
|
+
readonly 'panels.dep.missingPlugin': "⚠ 还没装好";
|
|
41
|
+
readonly 'panels.dep.missingCommands': "⚠ 需要更新";
|
|
42
|
+
readonly 'panels.dep.unchecked': "⚠ 检测不了";
|
|
43
|
+
readonly 'panels.tab.modules': "面板配置";
|
|
44
|
+
readonly 'panels.tab.market': "工作台模块市场";
|
|
45
|
+
readonly 'panels.browseMarket': "浏览模块市场";
|
|
46
|
+
readonly 'panels.noneInstalled': "这些模块要的插件都还没装";
|
|
47
|
+
readonly 'panels.noneInstalledHint': "装好之后它们会回到这里,再由你决定放哪几个上板。";
|
|
48
|
+
readonly 'panels.market.installed': "已装";
|
|
49
|
+
readonly 'panels.market.outdated': "要更新";
|
|
50
|
+
readonly 'panels.market.hasNew': "有新版本";
|
|
51
|
+
readonly 'panels.market.missing': "未装";
|
|
52
|
+
readonly 'panels.market.unchecked': "状态未知";
|
|
53
|
+
readonly 'panels.market.checking': "检测中";
|
|
54
|
+
readonly 'panels.market.sectionInstalled': "已安装";
|
|
55
|
+
readonly 'panels.market.sectionPending': "未安装";
|
|
56
|
+
readonly 'panels.market.sectionShared': "共用依赖";
|
|
57
|
+
readonly 'panels.market.sharedUsedBy': "供 {modules} 使用";
|
|
58
|
+
readonly 'panels.market.listSeparator': "、";
|
|
59
|
+
readonly 'panels.market.sharedMissing': "未装";
|
|
60
|
+
readonly 'panels.market.sharedOutdated': "有新版";
|
|
61
|
+
readonly 'panels.market.sharedUnsatisfied': "版本不对";
|
|
62
|
+
readonly 'panels.market.sharedOk': "已装";
|
|
63
|
+
readonly 'panels.market.versionArrow': "{from} → {to}";
|
|
64
|
+
readonly 'panels.market.lead': "装在这台机器上,所有项目共用。";
|
|
65
|
+
readonly 'panels.market.install': "安装";
|
|
66
|
+
readonly 'panels.market.update': "更新";
|
|
67
|
+
readonly 'panels.market.uninstall': "卸载";
|
|
68
|
+
readonly 'panels.market.installing': "正在安装…";
|
|
69
|
+
readonly 'panels.market.updating': "正在更新…";
|
|
70
|
+
readonly 'panels.market.uninstalling': "正在卸载…";
|
|
71
|
+
readonly 'panels.market.confirmUninstall': "要卸载吗?";
|
|
72
|
+
readonly 'panels.market.confirmUninstallDetail': "卸载后这台机器上就没有它了,所有项目的面板也会把它一起拿掉(绑定与设置不会丢)。";
|
|
73
|
+
readonly 'panels.market.confirmYes': "确定卸载";
|
|
74
|
+
readonly 'panels.market.confirmNo': "取消";
|
|
75
|
+
readonly 'panels.market.failed': "没成功:{reason}";
|
|
76
|
+
readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
|
|
77
|
+
readonly 'panels.market.noSource': "这个模块没声明怎么装,只能自己动手";
|
|
78
|
+
readonly 'panels.market.badSource': "安装方式没写全,只能自己动手";
|
|
79
|
+
readonly 'panels.market.empty': "暂无可用模块";
|
|
80
|
+
readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
|
|
81
|
+
readonly 'panels.market.recheck': "重新检查更新";
|
|
82
|
+
readonly 'panels.market.checkUpdates': "检查更新";
|
|
83
|
+
readonly 'panels.market.checkedAt': "最近检查:{time}";
|
|
84
|
+
readonly 'panels.market.justNow': "刚刚";
|
|
85
|
+
readonly 'panels.market.minutesAgo': "{n} 分钟前";
|
|
86
|
+
readonly 'panels.market.hoursAgo': "{n} 小时前";
|
|
87
|
+
readonly 'blocker.fix.install': "帮我安装";
|
|
88
|
+
readonly 'blocker.fix.update': "帮我升级";
|
|
89
|
+
readonly 'blocker.fix.running': "正在执行…";
|
|
90
|
+
readonly 'blocker.fix.failed': "执行失败:";
|
|
91
|
+
readonly 'blocker.retry': "重试";
|
|
92
|
+
readonly 'blocker.retry.running': "重试中…";
|
|
93
|
+
readonly 'blocker.copy': "复制命令";
|
|
94
|
+
readonly 'blocker.market.open': "去模块市场";
|
|
95
|
+
readonly 'blocker.login.title': "需要登录 {platform}";
|
|
96
|
+
readonly 'blocker.login.titleGeneric': "需要登录";
|
|
97
|
+
readonly 'blocker.login.hint': "工作台用你的浏览器登录态;登录一次就行,之后不用再登。";
|
|
98
|
+
readonly 'blocker.login.go': "去登录";
|
|
99
|
+
readonly 'blocker.login.manual': "在终端执行 `opencli coding team-current`,按提示完成登录后重试。";
|
|
100
|
+
readonly 'blocker.forbidden.title': "没有权限访问 {platform}";
|
|
101
|
+
readonly 'blocker.forbidden.titleGeneric': "没有权限";
|
|
102
|
+
readonly 'blocker.forbidden.hint': "账号已登录,但没有这个项目/仓库的权限;申请之后再试。";
|
|
103
|
+
readonly 'blocker.forbidden.open': "打开权限页";
|
|
104
|
+
readonly 'blocker.timeout.hint': "无头浏览器可能没起来,重试一次通常就好。";
|
|
105
|
+
readonly 'blocker.exec.hint': "确认 opencli 已安装且在 PATH 里(which opencli)。";
|
|
106
|
+
readonly 'blocker.unknown.title': "出了点问题";
|
|
107
|
+
readonly 'panels.reading': "正在读取面板配置…";
|
|
108
|
+
readonly 'panels.empty': "面板里还没有模块";
|
|
109
|
+
readonly 'panels.emptyHint': "也可以直接跟 agent 说:「把某个模块加到面板」。";
|
|
110
|
+
readonly 'env.title': "准备工作台";
|
|
111
|
+
readonly 'env.checking': "正在检测运行环境…";
|
|
112
|
+
readonly 'env.installing': "正在安装缺失的依赖…";
|
|
113
|
+
readonly 'env.failed': "还差一步就能用了";
|
|
114
|
+
readonly 'env.elapsed': "已等待 {seconds} 秒";
|
|
115
|
+
readonly 'env.stepFailed.install': "装不上";
|
|
116
|
+
readonly 'env.stepFailed.path': "装了但还找不到";
|
|
117
|
+
readonly 'env.stepFailed.shell': "执行通道不可用";
|
|
118
|
+
readonly 'env.bridge.ok': "已连接";
|
|
119
|
+
readonly 'env.bridge.short': "没连上";
|
|
120
|
+
readonly 'env.bridge.why': "面板的数据要走你浏览器里的登录态:这个通道没连上,模块就取不到数据(不拦路,但先修好它)。";
|
|
121
|
+
readonly 'env.bridge.daemon': "后台服务没起来:正常它会自己起,先在终端跑下面这条命令。";
|
|
122
|
+
readonly 'env.bridge.extension': "浏览器扩展没连上:在 Chrome 应用商店装一次就好(装完回来点「重试」)。已经装过的话,先跑下面这条命令。";
|
|
123
|
+
readonly 'env.bridge.extensionLink': "去 Chrome 应用商店装扩展";
|
|
124
|
+
readonly 'env.bridge.profile': "连上了多个浏览器 profile,但没选默认的那个:先看有哪些(下面这条命令),再选一个。";
|
|
125
|
+
readonly 'env.bridge.stale': "默认的浏览器 profile 已经失效(它记的是上一次的扩展实例):重新选一个。";
|
|
126
|
+
readonly 'env.bridge.unknown': "没认出是哪种问题:下面原始输出里有 opencli 自己给的步骤。";
|
|
127
|
+
readonly 'env.fix.title': "怎么解决";
|
|
128
|
+
readonly 'env.fix.why': "工作台用它自己那份 opencli(与你在终端里那套分开装,互不影响),这台机器上还没装好它。";
|
|
129
|
+
readonly 'env.fix.whyPath': "opencli 装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。";
|
|
130
|
+
readonly 'env.fix.whyShell': "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步用户自己装不了。";
|
|
131
|
+
readonly 'env.fix.step': "在终端里运行下面这条命令,装好之后点「重试」:";
|
|
132
|
+
readonly 'env.fix.stepPath': "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。";
|
|
133
|
+
readonly 'env.fix.stepShell': "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。";
|
|
134
|
+
readonly 'env.fix.permission': "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。";
|
|
135
|
+
readonly 'env.fix.network': "网络不通:检查网络或代理设置后重试。";
|
|
136
|
+
readonly 'env.fix.details': "详细输出(排障用)";
|
|
137
|
+
readonly 'env.retry': "重试";
|
|
138
|
+
readonly 'env.copyCommand': "复制命令";
|
|
139
|
+
readonly 'env.copied': "已复制";
|
|
140
|
+
readonly 'env.step.opencli': "检测工作台的 opencli";
|
|
141
|
+
readonly 'env.step.codingPlugin': "检测 coding 插件";
|
|
142
|
+
readonly 'env.step.bridge': "检测浏览器通道";
|
|
143
|
+
readonly 'env.step.warm': "预热站点登录态";
|
|
144
|
+
readonly 'env.warm.done': "已预热 {n} 个站点";
|
|
145
|
+
readonly 'env.warm.short': "这次没热上 —— 不影响用,面板第一次读取会自己补";
|
|
146
|
+
readonly 'env.unit.missingPlugin': "这个模块还没装好";
|
|
147
|
+
readonly 'env.unit.missingCommandsHint': "更新之后就能用了。";
|
|
148
|
+
readonly 'env.unit.unchecked': "检测不了:拿不到执行通道";
|
|
149
|
+
readonly 'env.unit.uncheckedHint': "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。";
|
|
150
|
+
readonly 'env.unit.missingCommands': "这个模块的版本旧了";
|
|
151
|
+
readonly 'env.unit.hint': "装好之后点重试;不影响其它模块。";
|
|
152
|
+
readonly 'rightbar.label': "数据面板";
|
|
153
|
+
readonly 'rightbar.expand': "展开数据面板";
|
|
154
|
+
readonly 'rightbar.collapse': "收起数据面板";
|
|
155
|
+
readonly 'rightbar.refresh': "刷新";
|
|
156
|
+
readonly 'rightbar.refreshing': "刷新中…";
|
|
157
|
+
readonly 'rightbar.updatedAt': "更新于 {time}";
|
|
158
|
+
readonly 'rightbar.noProject': "当前会话没有所属项目";
|
|
159
|
+
readonly 'coding.notARepo.title': "这个项目不是 Coding 仓库";
|
|
160
|
+
readonly 'error.unknown': "出错了";
|
|
161
|
+
readonly 'board.title': "看板";
|
|
162
|
+
readonly 'panel.conversation': "对话";
|
|
163
|
+
readonly 'panels.label': "全局面板";
|
|
164
|
+
};
|
|
165
|
+
en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstall" | "panels.market.confirmUninstallDetail" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
|
|
166
|
+
};
|
|
167
|
+
export type { WorkbenchMessages };
|
|
168
|
+
export interface Dictionaries {
|
|
169
|
+
readonly zh: Readonly<Record<string, string>>;
|
|
170
|
+
readonly en: Readonly<Record<string, string>>;
|
|
171
|
+
readonly [language: string]: Readonly<Record<string, string>>;
|
|
172
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Dictionaries } from './index';
|
|
2
|
+
export interface MessagesContribution {
|
|
3
|
+
readonly unit: string;
|
|
4
|
+
readonly messages?: Dictionaries | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare function mergeMessages(base: Dictionaries, contributions: readonly MessagesContribution[]): Dictionaries;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function assertSelfConsistent(unit, messages) {
|
|
2
|
+
const zhKeys = Object.keys(messages.zh).sort();
|
|
3
|
+
const enKeys = Object.keys(messages.en).sort();
|
|
4
|
+
if (zhKeys.length !== enKeys.length || zhKeys.some((key, index) => key !== enKeys[index])) {
|
|
5
|
+
throw new Error(`套件 ${unit} 的文案两语言不同构:zh ${zhKeys.length} 键 / en ${enKeys.length} 键`);
|
|
6
|
+
}
|
|
7
|
+
for (const [language, dictionary] of [
|
|
8
|
+
['zh', messages.zh],
|
|
9
|
+
['en', messages.en],
|
|
10
|
+
]) {
|
|
11
|
+
for (const [key, value] of Object.entries(dictionary)) {
|
|
12
|
+
if (value.trim() === '')
|
|
13
|
+
throw new Error(`套件 ${unit} 的文案 ${language}.${key} 是空的`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function mergeMessages(base, contributions) {
|
|
18
|
+
const zh = { ...base.zh };
|
|
19
|
+
const en = { ...base.en };
|
|
20
|
+
const owner = new Map(Object.keys(base.zh).map((key) => [key, '外壳']));
|
|
21
|
+
for (const item of contributions) {
|
|
22
|
+
const messages = item.messages;
|
|
23
|
+
if (messages === undefined)
|
|
24
|
+
continue;
|
|
25
|
+
assertSelfConsistent(item.unit, messages);
|
|
26
|
+
for (const [key, value] of Object.entries(messages.zh)) {
|
|
27
|
+
if (!key.startsWith(`${item.unit}.`)) {
|
|
28
|
+
throw new Error(`套件 ${item.unit} 的文案键必须以 "${item.unit}." 开头:${key}`);
|
|
29
|
+
}
|
|
30
|
+
const previous = owner.get(key);
|
|
31
|
+
if (previous !== undefined) {
|
|
32
|
+
throw new Error(`文案键冲突:${key} 由 ${previous} 与 ${item.unit} 同时声明`);
|
|
33
|
+
}
|
|
34
|
+
owner.set(key, item.unit);
|
|
35
|
+
zh[key] = value;
|
|
36
|
+
en[key] = messages.en[key] ?? '';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { zh, en };
|
|
40
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
export declare const zh: {
|
|
2
|
+
readonly 'brand.name': "工作台";
|
|
3
|
+
readonly 'toggle.open': "打开侧边栏";
|
|
4
|
+
readonly 'toggle.collapse': "收起侧边栏";
|
|
5
|
+
readonly 'project.label': "切换项目";
|
|
6
|
+
readonly 'workspace.section': "工作区";
|
|
7
|
+
readonly 'project.none': "未选择项目";
|
|
8
|
+
readonly 'project.empty': "还没有项目。用下面的「添加项目」选一个目录。";
|
|
9
|
+
readonly 'project.add': "添加项目…";
|
|
10
|
+
readonly 'session.new': "新会话";
|
|
11
|
+
readonly 'session.new.label': "在当前项目新建会话";
|
|
12
|
+
readonly 'session.empty': "这个项目还没有会话。";
|
|
13
|
+
readonly 'session.noProject': "先添加一个项目。";
|
|
14
|
+
readonly 'session.pinned': "已置顶";
|
|
15
|
+
readonly 'session.actions': "{name} 的操作";
|
|
16
|
+
readonly 'status.idle': "空闲";
|
|
17
|
+
readonly 'status.running': "运行中";
|
|
18
|
+
readonly 'status.waitingApproval': "等待授权";
|
|
19
|
+
readonly 'status.planReview': "等待计划确认";
|
|
20
|
+
readonly 'status.waitingAnswer': "等待回答";
|
|
21
|
+
readonly 'status.completed': "已完成";
|
|
22
|
+
readonly 'status.subagentsRunning.one': "{n} 个子代理运行中";
|
|
23
|
+
readonly 'status.subagentsRunning.other': "{n} 个子代理运行中";
|
|
24
|
+
readonly 'time.now': "刚刚";
|
|
25
|
+
readonly 'time.minutes': "{n} 分钟前";
|
|
26
|
+
readonly 'time.hours': "{n} 小时前";
|
|
27
|
+
readonly 'time.days': "{n} 天前";
|
|
28
|
+
readonly 'panels.title': "面板模块";
|
|
29
|
+
readonly 'panels.reset': "恢复默认";
|
|
30
|
+
readonly 'panels.enabled': "这个项目已启用";
|
|
31
|
+
readonly 'panels.disabled': "这个项目未启用";
|
|
32
|
+
readonly 'panels.choose': "选择模块";
|
|
33
|
+
readonly 'panels.failed': "改配置失败了,再试一次。";
|
|
34
|
+
readonly 'panels.hintEffect': "停用 = agent 拿不到相关数据";
|
|
35
|
+
readonly 'panels.dragHint': "拖动调整顺序";
|
|
36
|
+
readonly 'panels.unknownStep': "这一层没有套件提供";
|
|
37
|
+
readonly 'panels.labelWithHint': "{label}({hint})";
|
|
38
|
+
readonly 'panels.dep.missingPlugin': "⚠ 还没装好";
|
|
39
|
+
readonly 'panels.dep.missingCommands': "⚠ 需要更新";
|
|
40
|
+
readonly 'panels.dep.unchecked': "⚠ 检测不了";
|
|
41
|
+
readonly 'panels.tab.modules': "面板配置";
|
|
42
|
+
readonly 'panels.tab.market': "工作台模块市场";
|
|
43
|
+
readonly 'panels.browseMarket': "浏览模块市场";
|
|
44
|
+
readonly 'panels.noneInstalled': "这些模块要的插件都还没装";
|
|
45
|
+
readonly 'panels.noneInstalledHint': "装好之后它们会回到这里,再由你决定放哪几个上板。";
|
|
46
|
+
readonly 'panels.market.installed': "已装";
|
|
47
|
+
readonly 'panels.market.outdated': "要更新";
|
|
48
|
+
readonly 'panels.market.hasNew': "有新版本";
|
|
49
|
+
readonly 'panels.market.missing': "未装";
|
|
50
|
+
readonly 'panels.market.unchecked': "状态未知";
|
|
51
|
+
readonly 'panels.market.checking': "检测中";
|
|
52
|
+
readonly 'panels.market.sectionInstalled': "已安装";
|
|
53
|
+
readonly 'panels.market.sectionPending': "未安装";
|
|
54
|
+
readonly 'panels.market.sectionShared': "共用依赖";
|
|
55
|
+
readonly 'panels.market.sharedUsedBy': "供 {modules} 使用";
|
|
56
|
+
readonly 'panels.market.listSeparator': "、";
|
|
57
|
+
readonly 'panels.market.sharedMissing': "未装";
|
|
58
|
+
readonly 'panels.market.sharedOutdated': "有新版";
|
|
59
|
+
readonly 'panels.market.sharedUnsatisfied': "版本不对";
|
|
60
|
+
readonly 'panels.market.sharedOk': "已装";
|
|
61
|
+
readonly 'panels.market.versionArrow': "{from} → {to}";
|
|
62
|
+
readonly 'panels.market.lead': "装在这台机器上,所有项目共用。";
|
|
63
|
+
readonly 'panels.market.install': "安装";
|
|
64
|
+
readonly 'panels.market.update': "更新";
|
|
65
|
+
readonly 'panels.market.uninstall': "卸载";
|
|
66
|
+
readonly 'panels.market.installing': "正在安装…";
|
|
67
|
+
readonly 'panels.market.updating': "正在更新…";
|
|
68
|
+
readonly 'panels.market.uninstalling': "正在卸载…";
|
|
69
|
+
readonly 'panels.market.confirmUninstall': "要卸载吗?";
|
|
70
|
+
readonly 'panels.market.confirmUninstallDetail': "卸载后这台机器上就没有它了,所有项目的面板也会把它一起拿掉(绑定与设置不会丢)。";
|
|
71
|
+
readonly 'panels.market.confirmYes': "确定卸载";
|
|
72
|
+
readonly 'panels.market.confirmNo': "取消";
|
|
73
|
+
readonly 'panels.market.failed': "没成功:{reason}";
|
|
74
|
+
readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
|
|
75
|
+
readonly 'panels.market.noSource': "这个模块没声明怎么装,只能自己动手";
|
|
76
|
+
readonly 'panels.market.badSource': "安装方式没写全,只能自己动手";
|
|
77
|
+
readonly 'panels.market.empty': "暂无可用模块";
|
|
78
|
+
readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
|
|
79
|
+
readonly 'panels.market.recheck': "重新检查更新";
|
|
80
|
+
readonly 'panels.market.checkUpdates': "检查更新";
|
|
81
|
+
readonly 'panels.market.checkedAt': "最近检查:{time}";
|
|
82
|
+
readonly 'panels.market.justNow': "刚刚";
|
|
83
|
+
readonly 'panels.market.minutesAgo': "{n} 分钟前";
|
|
84
|
+
readonly 'panels.market.hoursAgo': "{n} 小时前";
|
|
85
|
+
readonly 'blocker.fix.install': "帮我安装";
|
|
86
|
+
readonly 'blocker.fix.update': "帮我升级";
|
|
87
|
+
readonly 'blocker.fix.running': "正在执行…";
|
|
88
|
+
readonly 'blocker.fix.failed': "执行失败:";
|
|
89
|
+
readonly 'blocker.retry': "重试";
|
|
90
|
+
readonly 'blocker.retry.running': "重试中…";
|
|
91
|
+
readonly 'blocker.copy': "复制命令";
|
|
92
|
+
readonly 'blocker.market.open': "去模块市场";
|
|
93
|
+
readonly 'blocker.login.title': "需要登录 {platform}";
|
|
94
|
+
readonly 'blocker.login.titleGeneric': "需要登录";
|
|
95
|
+
readonly 'blocker.login.hint': "工作台用你的浏览器登录态;登录一次就行,之后不用再登。";
|
|
96
|
+
readonly 'blocker.login.go': "去登录";
|
|
97
|
+
readonly 'blocker.login.manual': "在终端执行 `opencli coding team-current`,按提示完成登录后重试。";
|
|
98
|
+
readonly 'blocker.forbidden.title': "没有权限访问 {platform}";
|
|
99
|
+
readonly 'blocker.forbidden.titleGeneric': "没有权限";
|
|
100
|
+
readonly 'blocker.forbidden.hint': "账号已登录,但没有这个项目/仓库的权限;申请之后再试。";
|
|
101
|
+
readonly 'blocker.forbidden.open': "打开权限页";
|
|
102
|
+
readonly 'blocker.timeout.hint': "无头浏览器可能没起来,重试一次通常就好。";
|
|
103
|
+
readonly 'blocker.exec.hint': "确认 opencli 已安装且在 PATH 里(which opencli)。";
|
|
104
|
+
readonly 'blocker.unknown.title': "出了点问题";
|
|
105
|
+
readonly 'panels.reading': "正在读取面板配置…";
|
|
106
|
+
readonly 'panels.empty': "面板里还没有模块";
|
|
107
|
+
readonly 'panels.emptyHint': "也可以直接跟 agent 说:「把某个模块加到面板」。";
|
|
108
|
+
readonly 'env.title': "准备工作台";
|
|
109
|
+
readonly 'env.checking': "正在检测运行环境…";
|
|
110
|
+
readonly 'env.installing': "正在安装缺失的依赖…";
|
|
111
|
+
readonly 'env.failed': "还差一步就能用了";
|
|
112
|
+
readonly 'env.elapsed': "已等待 {seconds} 秒";
|
|
113
|
+
readonly 'env.stepFailed.install': "装不上";
|
|
114
|
+
readonly 'env.stepFailed.path': "装了但还找不到";
|
|
115
|
+
readonly 'env.stepFailed.shell': "执行通道不可用";
|
|
116
|
+
readonly 'env.bridge.ok': "已连接";
|
|
117
|
+
readonly 'env.bridge.short': "没连上";
|
|
118
|
+
readonly 'env.bridge.why': "面板的数据要走你浏览器里的登录态:这个通道没连上,模块就取不到数据(不拦路,但先修好它)。";
|
|
119
|
+
readonly 'env.bridge.daemon': "后台服务没起来:正常它会自己起,先在终端跑下面这条命令。";
|
|
120
|
+
readonly 'env.bridge.extension': "浏览器扩展没连上:在 Chrome 应用商店装一次就好(装完回来点「重试」)。已经装过的话,先跑下面这条命令。";
|
|
121
|
+
readonly 'env.bridge.extensionLink': "去 Chrome 应用商店装扩展";
|
|
122
|
+
readonly 'env.bridge.profile': "连上了多个浏览器 profile,但没选默认的那个:先看有哪些(下面这条命令),再选一个。";
|
|
123
|
+
readonly 'env.bridge.stale': "默认的浏览器 profile 已经失效(它记的是上一次的扩展实例):重新选一个。";
|
|
124
|
+
readonly 'env.bridge.unknown': "没认出是哪种问题:下面原始输出里有 opencli 自己给的步骤。";
|
|
125
|
+
readonly 'env.fix.title': "怎么解决";
|
|
126
|
+
readonly 'env.fix.why': "工作台用它自己那份 opencli(与你在终端里那套分开装,互不影响),这台机器上还没装好它。";
|
|
127
|
+
readonly 'env.fix.whyPath': "opencli 装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。";
|
|
128
|
+
readonly 'env.fix.whyShell': "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步用户自己装不了。";
|
|
129
|
+
readonly 'env.fix.step': "在终端里运行下面这条命令,装好之后点「重试」:";
|
|
130
|
+
readonly 'env.fix.stepPath': "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。";
|
|
131
|
+
readonly 'env.fix.stepShell': "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。";
|
|
132
|
+
readonly 'env.fix.permission': "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。";
|
|
133
|
+
readonly 'env.fix.network': "网络不通:检查网络或代理设置后重试。";
|
|
134
|
+
readonly 'env.fix.details': "详细输出(排障用)";
|
|
135
|
+
readonly 'env.retry': "重试";
|
|
136
|
+
readonly 'env.copyCommand': "复制命令";
|
|
137
|
+
readonly 'env.copied': "已复制";
|
|
138
|
+
readonly 'env.step.opencli': "检测工作台的 opencli";
|
|
139
|
+
readonly 'env.step.codingPlugin': "检测 coding 插件";
|
|
140
|
+
readonly 'env.step.bridge': "检测浏览器通道";
|
|
141
|
+
readonly 'env.step.warm': "预热站点登录态";
|
|
142
|
+
readonly 'env.warm.done': "已预热 {n} 个站点";
|
|
143
|
+
readonly 'env.warm.short': "这次没热上 —— 不影响用,面板第一次读取会自己补";
|
|
144
|
+
readonly 'env.unit.missingPlugin': "这个模块还没装好";
|
|
145
|
+
readonly 'env.unit.missingCommandsHint': "更新之后就能用了。";
|
|
146
|
+
readonly 'env.unit.unchecked': "检测不了:拿不到执行通道";
|
|
147
|
+
readonly 'env.unit.uncheckedHint': "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。";
|
|
148
|
+
readonly 'env.unit.missingCommands': "这个模块的版本旧了";
|
|
149
|
+
readonly 'env.unit.hint': "装好之后点重试;不影响其它模块。";
|
|
150
|
+
readonly 'rightbar.label': "数据面板";
|
|
151
|
+
readonly 'rightbar.expand': "展开数据面板";
|
|
152
|
+
readonly 'rightbar.collapse': "收起数据面板";
|
|
153
|
+
readonly 'rightbar.refresh': "刷新";
|
|
154
|
+
readonly 'rightbar.refreshing': "刷新中…";
|
|
155
|
+
readonly 'rightbar.updatedAt': "更新于 {time}";
|
|
156
|
+
readonly 'rightbar.noProject': "当前会话没有所属项目";
|
|
157
|
+
readonly 'coding.notARepo.title': "这个项目不是 Coding 仓库";
|
|
158
|
+
readonly 'error.unknown': "出错了";
|
|
159
|
+
readonly 'board.title': "看板";
|
|
160
|
+
readonly 'panel.conversation': "对话";
|
|
161
|
+
readonly 'panels.label': "全局面板";
|
|
162
|
+
};
|
|
163
|
+
export type WorkbenchMessages = typeof zh;
|