dsh-dbhub-live 5.0.1 → 5.2.0-dev.3
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/AGENTS.md +95 -209
- package/README.en.md +251 -169
- package/README.md +251 -169
- package/doc/ARCHITECTURE.md +108 -0
- package/doc/CLIENT.md +124 -0
- package/doc/DESENSITIZE.md +56 -0
- package/doc/DEVELOPMENT.md +139 -0
- package/doc/IMPACT-MATRIX.md +36 -0
- package/doc/RELEASE.md +93 -0
- package/doc/REQUIREMENTS.md +177 -105
- package/doc/images/chat-query.png +0 -0
- package/doc/images/row-editor.png +0 -0
- package/doc/images/settings-page.png +0 -0
- package/lib/adhoc.mjs +412 -34
- package/lib/capability.mjs +157 -0
- package/lib/client.js +1243 -80
- package/lib/config.mjs +370 -21
- package/lib/i18n.mjs +119 -4
- package/lib/index.mjs +401 -43
- package/lib/mcp.mjs +496 -391
- package/lib/meta.mjs +267 -0
- package/lib/options.mjs +25 -5
- package/lib/policy.mjs +92 -0
- package/lib/toml.mjs +188 -0
- package/lib/tools.mjs +1093 -827
- package/lib/update.mjs +244 -0
- package/package.json +34 -10
- package/scripts/desensitize-check.mjs +10 -3
- package/scripts/desensitize.config.mjs +255 -237
- package/scripts/docs-check.mjs +214 -0
- package/scripts/release-preflight.mjs +180 -0
- package/scripts/render-check.mjs +1366 -843
- package/test/adhoc-toml.test.mjs +365 -0
- package/test/bridge.test.mjs +227 -185
- package/test/capability.test.mjs +231 -0
- package/test/client-format.test.mjs +515 -352
- package/test/configure-options.test.mjs +244 -0
- package/test/configure-ssh.test.mjs +232 -0
- package/test/copy-from.test.mjs +155 -0
- package/test/env-options.test.mjs +456 -0
- package/test/meta.test.mjs +234 -0
- package/test/options.test.mjs +160 -123
- package/test/policy.test.mjs +132 -0
- package/test/row-cache.test.mjs +237 -138
- package/test/ssh-probe.test.mjs +834 -0
- package/test/test-op-fastpath.test.mjs +208 -0
- package/test/toml.test.mjs +352 -0
- package/test/update.test.mjs +270 -0
- package/test/util.test.mjs +17 -0
- package/test/zero-knowledge.test.mjs +120 -78
package/lib/i18n.mjs
CHANGED
|
@@ -12,6 +12,7 @@ const ZH = {
|
|
|
12
12
|
'log.hostApply': 'host apply',
|
|
13
13
|
'log.nsRegistered': '状态命名空间已注册: dsh-dbhub-live',
|
|
14
14
|
'log.loaded': 'dbhub 插件已加载({n} 个工具)',
|
|
15
|
+
'log.policyRegistered': '模型侧访问策略已注册(system prompt 段 {name})',
|
|
15
16
|
'log.initFailed': '后台初始化失败(状态卡片可见最近错误)',
|
|
16
17
|
'log.disabledBoot': '插件处于禁用状态(可在 插件 → dsh-dbhub-live → 配置 开启)',
|
|
17
18
|
'log.opSaved': '卡片配置:{title} 环境 {env} 已保存',
|
|
@@ -25,6 +26,11 @@ const ZH = {
|
|
|
25
26
|
'log.syncApplied': '配置已生效:连接摘要已刷新({n} 个工具声明)',
|
|
26
27
|
'log.stateSyncFail': '状态同步失败: {msg}',
|
|
27
28
|
'log.updateCheckFailed': 'dbhub 自动更新检查失败: {msg}',
|
|
29
|
+
// Plugin self-update check (the card's {op:'updateCheck'} command). Host log
|
|
30
|
+
// only — the browser-side wording lives in lib/client.js.
|
|
31
|
+
'log.appUpdate': '发现新版本:本插件 {current} → {latest}(来源 {source})',
|
|
32
|
+
'log.appUpToDate': '已是最新版本:本插件 {current}(最新 {latest},来源 {source})',
|
|
33
|
+
'log.appUpdateFailed': '插件更新检查失败:{msg}(当前版本 {current})',
|
|
28
34
|
'log.testStart': '卡片连接测试:{title} 环境 {env}',
|
|
29
35
|
'log.testDone': '卡片连接测试完成:{title} 环境 {env} → {result}',
|
|
30
36
|
'result.testOk': '连接成功(SELECT 1,{ms} ms)',
|
|
@@ -42,13 +48,14 @@ const ZH = {
|
|
|
42
48
|
'result.needWorkspace': '当前会话的工作区不在已注册工作区列表中,无法确定要在哪个工作区配置连接。请让用户确认后用 workspace 参数显式指定(路径或标题):\n{list}',
|
|
43
49
|
'result.unknownWorkspace': '找不到工作区 "{ws}"(不会自动改用其他工作区,以免配置到错误的位置)。可用的工作区:\n{list}',
|
|
44
50
|
'result.noDsnViaModel': '出于安全原因,不能把密码/完整连接串作为 dbhub_configure 的参数传入(否则会进入模型上下文)。插件会在界面弹出密码输入框——请引导用户输入,或让用户在 插件 → dsh-dbhub-live → 配置 中修改。',
|
|
45
|
-
'result.authHint': '提示:可能是凭据不正确或连接信息(主机/端口/库)有误。可调用 dbhub_configure 更新该环境({src})的连接——密码通过界面输入,不会经过模型;也可让用户在 插件 → dsh-dbhub-live → 配置
|
|
51
|
+
'result.authHint': '提示:可能是凭据不正确或连接信息(主机/端口/库)有误。可调用 dbhub_configure 更新该环境({src})的连接——密码通过界面输入,不会经过模型;也可让用户在 插件 → dsh-dbhub-live → 配置 中修改。**不要为了连上这个库改用命令行客户端或脚本直连**(凭据只能由用户在插件里输入)。',
|
|
46
52
|
'result.sourcesIntro': '已注册连接源 {n} 个,分属 {m} 个工作区(仅元数据:类型/主机/端口/库;密码与账号永不显示)。**每条 source 只属于一个工作区,不同工作区的相似连接是不同目标,不要混用。**',
|
|
47
53
|
'result.wsCurrentHead': '【当前工作区】(优先使用这里的 source):',
|
|
48
54
|
'result.wsGroup': '- {title}({path})',
|
|
49
55
|
'result.wsNoCurrent': '当前会话的工作区未在已注册工作区中识别出来;下面是全部工作区的连接,请用完整 source 值显式指定目标。',
|
|
50
56
|
'result.wsOtherHead': '其他工作区(仅当当前工作区没有所需连接时才参考;要复用时先让用户确认,再用 dbhub_configure 的 copyFrom 复制到当前工作区,不要直接用这里的 source 查询):',
|
|
51
|
-
'result.srcRow': ' - 环境 {env}|{badge}|连接 {conn}|来源 {src}|source 值 {srcId}',
|
|
57
|
+
'result.srcRow': ' - 环境 {env}|{badge}{ro}|连接 {conn}|来源 {src}|source 值 {srcId}',
|
|
58
|
+
'result.badgeReadOnly': '只读',
|
|
52
59
|
'result.sourcesEmpty': '暂无已注册的连接源(可用 dbhub_configure 或 插件 → dsh-dbhub-live → 配置 添加)。',
|
|
53
60
|
'result.badgeSaved': '已保存',
|
|
54
61
|
'result.badgeAuto': '自动',
|
|
@@ -94,6 +101,59 @@ const ZH = {
|
|
|
94
101
|
'result.scanEmpty': '未找到可扫描的数据库配置文件(已跳过 node_modules/.git/target 等)。可改用“输入 DSN”或“填写分项”。',
|
|
95
102
|
'result.scanNone': '扫描了 {n} 个文件,但未提取到数据库连接。可改用“输入 DSN”或“填写分项”。',
|
|
96
103
|
'result.scanPicked': '已按你的确认持久化连接(来源: 项目文件扫描,环境 {env})。查询时用 dbhub_execute_sql,source 值 = {srcId}。',
|
|
104
|
+
// ── 5.1: environment-level read-only mode ──
|
|
105
|
+
'result.readOnlyHint': '提示:该环境已开启**只读模式**(由用户在配置页设置),dbhub 只放行只读语句(MySQL 为 select/with/explain/show/describe/desc,其他连接器略有不同),写操作会被拒绝(READONLY_VIOLATION)。如需写入,请让用户在 **设置 → DBHub 数据库工具**(或插件页该行的「配置」)里关闭只读——模型只能开启,不能自行关闭。**不要改用 psql/mysql 等命令行客户端、临时脚本或任何其它途径绕过本插件完成这次写入(包括换用别的数据库插件)**:只读是用户设定的安全边界,绕过等于自行提权;若这次写入确实必要,把影响与理由告诉用户,由用户决定。',
|
|
106
|
+
'result.readOnlyUserOnly': '出于安全考虑,**关闭只读模式只能由用户操作**(模型只能开启、不能解除,否则等于自行提权)。请让用户在 **设置 → DBHub 数据库工具**(或插件页该行的「配置」)里关闭该环境的只读开关。',
|
|
107
|
+
'result.readOnlyOn': '已开启只读模式(环境 {env}):写操作会被 dbhub 拒绝(READONLY_VIOLATION)。',
|
|
108
|
+
'result.readOnlyOff': '已关闭只读模式(环境 {env})。',
|
|
109
|
+
// ── 5.1: SSH tunnel ──
|
|
110
|
+
'result.sshSet': '已配置 SSH 隧道(环境 {env}):{host}:{port}(用户 {user},认证方式 {auth})。',
|
|
111
|
+
'result.sshCleared': '已解除 SSH 隧道(环境 {env}),该连接恢复为直连。',
|
|
112
|
+
'result.sshMissingUser': 'SSH 隧道必须提供主机与用户名(sshHost / sshUser)。',
|
|
113
|
+
'result.sshMissingAuth': 'SSH 隧道缺少凭据:密钥认证需要 sshKeyPath(口令可在弹窗输入),密码认证的密码只能由用户在弹窗输入。',
|
|
114
|
+
'result.sshMultiHopUnsupported': '不支持多跳跳板机(ProxyJump 列表超过一跳):dbhub 的多跳共用同一份登录凭据,无法表达各跳不同的认证信息。请只填一跳。',
|
|
115
|
+
'result.needConnFirst': '该环境还没有已保存的连接,无法只修改选项。请先提供连接信息(或在配置页添加连接),再设置只读 / SSH 隧道。',
|
|
116
|
+
'result.promotedNotice': '(该环境原本是自动发现、未保存的连接,已在保存选项时一并持久化为已保存连接)',
|
|
117
|
+
'result.dbhubTooOld': '当前 dbhub 版本过旧({version}),不支持只读 / SSH 隧道所需的 TOML 方言。请升级 dbhub(1.4.0 及以上),或改用插件自动安装的版本。',
|
|
118
|
+
// Plugin-side runtime failures. These used to be hard-coded Chinese literals in
|
|
119
|
+
// adhoc.mjs, so an English-locale user saw Chinese in the connection-test result.
|
|
120
|
+
// Punctuation is kept byte-identical to the old literals (ASCII colon/parens) so
|
|
121
|
+
// the change is purely a localization fix.
|
|
122
|
+
'result.dbhubFetchFailed': '无法获取 dbhub: {msg}',
|
|
123
|
+
'result.tomlGenFailed': '生成临时 dbhub 配置失败: {msg}',
|
|
124
|
+
'result.dbhubSpawnFailed': '启动临时 dbhub 失败: {msg}',
|
|
125
|
+
'result.unknownConn': '(未知连接)',
|
|
126
|
+
'result.askSshPwdHeader': 'SSH 登录密码({conn})',
|
|
127
|
+
'result.askSshPwdQ': '请输入 {host}:{port} 的 SSH 登录密码(只在界面输入,不会发送给模型):',
|
|
128
|
+
'result.askSshKeyHeader': 'SSH 密钥路径({conn})',
|
|
129
|
+
'result.askSshKeyQ': '请输入 SSH 私钥文件路径(如 ~/.ssh/id_ed25519;仅在界面输入,不会发送给模型):',
|
|
130
|
+
'result.askSshPassphraseHeader': 'SSH 密钥口令({conn},可留空)',
|
|
131
|
+
'result.askSshPassphraseQ': '若该私钥有口令,请输入(只在界面输入,不会发送给模型);没有口令请留空:',
|
|
132
|
+
// ── 5.1: failure attribution + the SSH-only probe ──
|
|
133
|
+
'result.layerSsh': '【SSH 层】隧道未建立:',
|
|
134
|
+
'result.layerDb': '【数据库层】SSH 隧道可能已建立,失败发生在数据库连接/认证(不确定就先点「测试 SSH 隧道」):',
|
|
135
|
+
'result.layerInternal': '【插件层】未能启动/生成 dbhub 配置:',
|
|
136
|
+
'result.sshTestBadConfig': 'SSH 配置不完整:缺少 {missing}。需要主机、用户与凭据(密钥路径,或由你在弹窗输入的密码)。',
|
|
137
|
+
'result.sshTestNoConfig': '该环境还没有 SSH 隧道配置:请先在上方「高级:SSH 隧道」里填写主机、用户与凭据(密钥路径,或由你在弹窗输入的密码)。',
|
|
138
|
+
'result.sshTestMultiHop': 'SSH 的 ProxyJump 目前只支持**单跳**(如 jump.example.com:2222):请改成单跳,或让跳板机自己转发。',
|
|
139
|
+
'result.sshTestDefaultKey': '\n(未填密钥路径,已按默认 {path} 尝试;想用别的密钥请在该字段里填写路径。)',
|
|
140
|
+
'field.host': '主机',
|
|
141
|
+
'field.user': '用户',
|
|
142
|
+
'field.authKind': '认证方式',
|
|
143
|
+
'field.keyPath': '密钥路径',
|
|
144
|
+
'field.password': '密码',
|
|
145
|
+
'result.sshTestUnreachable': 'SSH 主机不可达:无法连接 {host}:{port}({code})。请检查主机名/IP、端口、网络与防火墙,以及该主机是否允许从本机访问。',
|
|
146
|
+
'result.sshTestKeyMissing': 'SSH 密钥文件不存在或不可读:{path}(请填绝对路径或 ~/ 开头的路径)。',
|
|
147
|
+
'result.sshTestAuthFail': 'SSH 隧道未建立({host}:{port} 端口可达,但握手/认证失败):\n{msg}',
|
|
148
|
+
'result.sshTestOk': 'SSH 隧道可用:已连上 {host}:{port} 并通过认证(探测里的"数据库"步骤必然是失败的——这正说明隧道已经把连接带过去了)。',
|
|
149
|
+
'result.sshTestUnknown': 'SSH 层结果无法判定({host}:{port} 端口可达,但 dbhub 的报错里既没有认证/握手特征、也没有转发目标的特征):\n{msg}',
|
|
150
|
+
'result.sshTestInternal': '未能完成 SSH 层测试(插件侧问题):\n{msg}',
|
|
151
|
+
// ── 5.1: card logs (F4 timing + TOML lifecycle) ──
|
|
152
|
+
'log.opOptions': '卡片配置:{title} 环境 {env} 选项已更新(只读={ro},SSH={ssh})',
|
|
153
|
+
'log.sshTunnelUp': 'SSH 隧道已启用:{title} 环境 {env} → {host}:{port}(用户 {user})',
|
|
154
|
+
'log.tomlSwept': '已清理 {n} 个陈旧的临时 dbhub 配置',
|
|
155
|
+
'log.testWalkMs': '连接测试分段计时:解析连接 {ms} ms(来源 {from})',
|
|
156
|
+
'log.testProbeMs': '连接测试分段计时:探连 {ms} ms',
|
|
97
157
|
'label.conn': '{连接: {src} → {dsn}}',
|
|
98
158
|
'label.adhocConn': '{临时连接: {dsn}}',
|
|
99
159
|
}
|
|
@@ -102,6 +162,7 @@ const EN = {
|
|
|
102
162
|
'log.hostApply': 'host apply',
|
|
103
163
|
'log.nsRegistered': 'settings namespace registered: dsh-dbhub-live',
|
|
104
164
|
'log.loaded': 'dbhub plugin loaded ({n} tools)',
|
|
165
|
+
'log.policyRegistered': 'model-facing access policy registered (system prompt section {name})',
|
|
105
166
|
'log.initFailed': 'background init failed (see the recent error on the status card)',
|
|
106
167
|
'log.disabledBoot': 'plugin disabled (enable it in Plugins → dsh-dbhub-live → Configure)',
|
|
107
168
|
'log.opSaved': 'card config: {title} environment {env} saved',
|
|
@@ -115,6 +176,9 @@ const EN = {
|
|
|
115
176
|
'log.syncApplied': 'config applied: connection summaries refreshed ({n} tool declarations)',
|
|
116
177
|
'log.stateSyncFail': 'status sync failed: {msg}',
|
|
117
178
|
'log.updateCheckFailed': 'dbhub auto-update check failed: {msg}',
|
|
179
|
+
'log.appUpdate': 'update available: plugin {current} -> {latest} (source {source})',
|
|
180
|
+
'log.appUpToDate': 'plugin is up to date: {current} (latest {latest}, source {source})',
|
|
181
|
+
'log.appUpdateFailed': 'plugin update check failed: {msg} (current {current})',
|
|
118
182
|
'log.testStart': 'card connection test: {title} env {env}',
|
|
119
183
|
'log.testDone': 'card connection test finished: {title} env {env} → {result}',
|
|
120
184
|
'result.testOk': 'connection OK (SELECT 1, {ms} ms)',
|
|
@@ -132,13 +196,14 @@ const EN = {
|
|
|
132
196
|
'result.needWorkspace': 'The session workspace is not among the registered workspaces, so the target workspace is unknown. Ask the user, then pass workspace explicitly (path or title):\n{list}',
|
|
133
197
|
'result.unknownWorkspace': 'workspace "{ws}" not found (the plugin will NOT silently switch to another workspace and configure the wrong place). Available workspaces:\n{list}',
|
|
134
198
|
'result.noDsnViaModel': 'For security, a password or full DSN cannot be passed as a dbhub_configure argument (it would land in the model context). The plugin prompts for the password in the UI — ask the user to enter it, or have them edit it in Plugins → dsh-dbhub-live → Configure.',
|
|
135
|
-
'result.authHint': 'Hint: the credentials are likely incorrect, or the connection details (host/port/database) are wrong. You can run dbhub_configure to update this source ({src}) — the password is entered in the UI, never through the model; the user can also edit it in Plugins → dsh-dbhub-live → Configure.',
|
|
199
|
+
'result.authHint': 'Hint: the credentials are likely incorrect, or the connection details (host/port/database) are wrong. You can run dbhub_configure to update this source ({src}) — the password is entered in the UI, never through the model; the user can also edit it in Plugins → dsh-dbhub-live → Configure. **Do not switch to a command-line client or script to reach this database** — credentials are entered by the user in the plugin, never by the model.',
|
|
136
200
|
'result.sourcesIntro': 'Registered source(s): {n} across {m} workspace(s) (metadata only — type/host/port/database; passwords and usernames are never shown). **Every source belongs to exactly ONE workspace; look-alike connections in different workspaces are different targets — never treat them as the same.**',
|
|
137
201
|
'result.wsCurrentHead': '[CURRENT WORKSPACE] (prefer the sources here):',
|
|
138
202
|
'result.wsGroup': '- {title} ({path})',
|
|
139
203
|
'result.wsNoCurrent': 'The session workspace was not recognized among the registered workspaces; below are all workspaces\u2019 connections — name the exact source value to pick a target.',
|
|
140
204
|
'result.wsOtherHead': 'OTHER WORKSPACES (consult only when the current workspace has no suitable connection; to reuse one, confirm with the user first and copy it here with dbhub_configure\'s copyFrom — do NOT query these sources directly):',
|
|
141
|
-
'result.srcRow': ' - env {env} | {badge} | connection {conn} | source {src} | source value {srcId}',
|
|
205
|
+
'result.srcRow': ' - env {env} | {badge}{ro} | connection {conn} | source {src} | source value {srcId}',
|
|
206
|
+
'result.badgeReadOnly': 'read-only',
|
|
142
207
|
'result.sourcesEmpty': 'no registered sources yet (add one with dbhub_configure or Plugins → dsh-dbhub-live → Configure).',
|
|
143
208
|
'result.badgeSaved': 'saved',
|
|
144
209
|
'result.badgeAuto': 'auto',
|
|
@@ -184,6 +249,56 @@ const EN = {
|
|
|
184
249
|
'result.scanEmpty': 'no database config files found (node_modules/.git/target etc. are skipped). Use "enter DSN" or "fill in fields" instead.',
|
|
185
250
|
'result.scanNone': 'scanned {n} files but extracted no database connection. Use "enter DSN" or "fill in fields" instead.',
|
|
186
251
|
'result.scanPicked': 'connection persisted from your selection (source: project file scan, env {env}). Query with dbhub_execute_sql; source value = {srcId}.',
|
|
252
|
+
// ── 5.1: environment-level read-only mode ──
|
|
253
|
+
'result.readOnlyHint': 'Note: this environment has **read-only mode** enabled (set by the user on the configuration page). dbhub only allows read statements (on MySQL: select/with/explain/show/describe/desc; other connectors differ slightly) and rejects writes with READONLY_VIOLATION. To write, ask the user to turn read-only off in **Settings → DBHub Database Tools** (or the Configure action on that Plugins row) — the model may enable it but must never disable it. **Never route this write around the plugin** through a psql/mysql-style command-line client, a throwaway script, or any other path (including another database plugin): read-only is the user safety boundary, and working around it is self-granted privilege escalation. If the write is genuinely required, tell the user what it does and why, and let them decide.',
|
|
254
|
+
'result.readOnlyUserOnly': 'For safety, **disabling read-only mode is a user-only action** (the model may enable it, never lift it — that would be self-escalation). Ask the user to clear that environment\u2019s read-only switch in **Settings → DBHub Database Tools** (or the Configure action on that Plugins row).',
|
|
255
|
+
'result.readOnlyOn': 'read-only mode enabled (env {env}): writes are rejected by dbhub (READONLY_VIOLATION).',
|
|
256
|
+
'result.readOnlyOff': 'read-only mode disabled (env {env}).',
|
|
257
|
+
// ── 5.1: SSH tunnel ──
|
|
258
|
+
'result.sshSet': 'SSH tunnel configured (env {env}): {host}:{port} (user {user}, auth {auth}).',
|
|
259
|
+
'result.sshCleared': 'SSH tunnel removed (env {env}); this connection goes direct again.',
|
|
260
|
+
'result.sshMissingUser': 'An SSH tunnel needs both a host and a user (sshHost / sshUser).',
|
|
261
|
+
'result.sshMissingAuth': 'The SSH tunnel has no credentials: key auth needs sshKeyPath (a passphrase can be entered in the dialog), and a password may only be entered by the user in the dialog.',
|
|
262
|
+
'result.sshMultiHopUnsupported': 'Multi-hop bastions are not supported (ProxyJump list longer than one hop): dbhub shares ONE credential set across every hop, so per-hop logins cannot be expressed. Provide a single hop.',
|
|
263
|
+
'result.needConnFirst': 'This environment has no saved connection yet, so options alone cannot be changed. Provide the connection first (or add it on the configuration page), then set read-only / the SSH tunnel.',
|
|
264
|
+
'result.promotedNotice': '(this environment was auto-discovered and unsaved; saving the options also persisted it as a saved connection)',
|
|
265
|
+
'result.dbhubTooOld': 'The installed dbhub is too old ({version}) for the TOML dialect that read-only / SSH tunnels require. Upgrade dbhub (1.4.0 or newer), or use the version this plugin installs automatically.',
|
|
266
|
+
// Plugin-side runtime failures (see the zh dictionary for why these moved here).
|
|
267
|
+
'result.dbhubFetchFailed': 'Cannot fetch dbhub: {msg}',
|
|
268
|
+
'result.tomlGenFailed': 'Failed to generate the temporary dbhub config: {msg}',
|
|
269
|
+
'result.dbhubSpawnFailed': 'Failed to start the temporary dbhub process: {msg}',
|
|
270
|
+
'result.unknownConn': '(unknown connection)',
|
|
271
|
+
'result.askSshPwdHeader': 'SSH login password ({conn})',
|
|
272
|
+
'result.askSshPwdQ': 'Enter the SSH login password for {host}:{port} (UI only, never sent to the model):',
|
|
273
|
+
'result.askSshKeyHeader': 'SSH key path ({conn})',
|
|
274
|
+
'result.askSshKeyQ': 'Enter the SSH private key file path (e.g. ~/.ssh/id_ed25519; UI only, never sent to the model):',
|
|
275
|
+
'result.askSshPassphraseHeader': 'SSH key passphrase ({conn}, may be blank)',
|
|
276
|
+
'result.askSshPassphraseQ': 'If the private key has a passphrase, enter it (UI only, never sent to the model); leave blank when it has none:',
|
|
277
|
+
// ── 5.1: failure attribution + the SSH-only probe ──
|
|
278
|
+
'result.layerSsh': '[SSH layer] the tunnel was not established: ',
|
|
279
|
+
'result.layerDb': '[database layer] the SSH tunnel is probably up and the failure is in the database connect/auth (press "Test SSH tunnel" when unsure): ',
|
|
280
|
+
'result.layerInternal': '[plugin layer] could not start dbhub / generate its config: ',
|
|
281
|
+
'result.sshTestBadConfig': 'Incomplete SSH configuration: missing {missing}. A host, a user and credentials (a key path, or a password you enter in the dialog) are required.',
|
|
282
|
+
'result.sshTestNoConfig': 'This environment has no SSH tunnel configured yet: fill in the host, user and credentials (a key path, or a password you enter in the dialog) under "Advanced: SSH tunnel" above.',
|
|
283
|
+
'result.sshTestMultiHop': 'ProxyJump currently supports a **single hop** only (e.g. jump.example.com:2222): use one hop, or let the jump host forward onward.',
|
|
284
|
+
'result.sshTestDefaultKey': '\n(no key path was given, so the default {path} was tried; put a path in that field to use another key.)',
|
|
285
|
+
'field.host': 'host',
|
|
286
|
+
'field.user': 'user',
|
|
287
|
+
'field.authKind': 'auth method',
|
|
288
|
+
'field.keyPath': 'key path',
|
|
289
|
+
'field.password': 'password',
|
|
290
|
+
'result.sshTestUnreachable': 'SSH host unreachable: cannot connect to {host}:{port} ({code}). Check the hostname/IP, the port, the network/firewall, and whether that host accepts connections from this machine.',
|
|
291
|
+
'result.sshTestKeyMissing': 'SSH key file missing or unreadable: {path} (use an absolute path or one starting with ~/).',
|
|
292
|
+
'result.sshTestAuthFail': 'SSH tunnel NOT established ({host}:{port} is reachable, but the handshake/authentication failed):\n{msg}',
|
|
293
|
+
'result.sshTestOk': 'SSH tunnel works: connected to {host}:{port} and authenticated (the probe\'s "database" step is SUPPOSED to fail — that proves the tunnel carried the connection).',
|
|
294
|
+
'result.sshTestUnknown': 'The SSH layer could not be classified ({host}:{port} is reachable, but dbhub\'s error carries neither an authentication/handshake signature nor the forwarded target):\n{msg}',
|
|
295
|
+
'result.sshTestInternal': 'The SSH-layer test could not run (plugin-side problem):\n{msg}',
|
|
296
|
+
// ── 5.1: card logs (F4 timing + TOML lifecycle) ──
|
|
297
|
+
'log.opOptions': 'card config: {title} environment {env} options updated (read-only={ro}, ssh={ssh})',
|
|
298
|
+
'log.sshTunnelUp': 'SSH tunnel enabled: {title} env {env} → {host}:{port} (user {user})',
|
|
299
|
+
'log.tomlSwept': 'swept {n} stale temporary dbhub config(s)',
|
|
300
|
+
'log.testWalkMs': 'connection test timing: connection resolution {ms} ms (source {from})',
|
|
301
|
+
'log.testProbeMs': 'connection test timing: probe {ms} ms',
|
|
187
302
|
'label.conn': '{connection: {src} → {dsn}}',
|
|
188
303
|
'label.adhocConn': '{adhoc: {dsn}}',
|
|
189
304
|
}
|