feat(workspace): 支持多行命令输入并新增仪表盘接口

将底部命令输入框改为支持自动增高的多行 textarea,
并把发送快捷键调整为 Ctrl+Shift+Enter,同时更新多语言提示文案

新增 dashboard summary 后端接口与聚合类型定义,
为首页管理驾驶舱改造提供统一数据入口,并同步知识库方案记录
This commit is contained in:
yinjianm
2026-03-25 23:57:17 +08:00
parent 9e49fcea61
commit 1f52ff6e0a
22 changed files with 1068 additions and 16 deletions
@@ -0,0 +1,184 @@
# 变更提案: dashboard-management-cockpit
## 元信息
```yaml
类型: 新功能
方案类型: implementation
优先级: P1
状态: 草稿
创建: 2026-03-25
```
---
## 1. 需求
### 背景
当前首页仪表盘主要由连接列表和最近活动组成,信息密度偏低,缺少“总览面板”应有的关键统计、趋势和分布视角。用户明确反馈该区域“太简陋”,希望加入各类数据统计,使首页能更快反映连接资产规模、近期活跃度和审计行为概况。
### 目标
- 将首页升级为管理驾驶舱式仪表盘,而不再只是列表首页。
- 新增可快速扫读的统计卡片、近 7 天趋势图、连接类型分布和高频连接排行。
- 通过后端聚合接口统一提供 dashboard summary,避免前端依赖多接口拼装复杂统计。
- 保留现有连接列表、最近活动和跳转链路,让首页既能看总览,也能继续执行常用操作。
### 约束条件
```yaml
时间约束: 本轮内完成前后端联动与基础构建验证
性能约束: 仪表盘首页统计应通过单个 summary 接口返回,避免首屏并发拉取过多数据
兼容性约束: 保持现有 `/connections` 与 `/audit-logs` 页面和接口行为不变
业务约束: 统计口径优先使用当前数据库中已稳定存在的连接表和审计日志表,不依赖临时内存状态
```
### 验收标准
- [ ] 首页新增核心统计卡片,至少覆盖连接总数、近 7 天活跃连接数、审计日志总数、近 24 小时 SSH 成功/失败次数
- [ ] 首页新增趋势和分布图表,至少覆盖近 7 天审计事件趋势和连接类型分布
- [ ] 首页新增“近期最活跃连接”排行,基于审计日志中的连接事件聚合
- [ ] 后端提供单独的 dashboard summary API,并由前端页面消费
- [ ] `packages/frontend``packages/backend` 的构建校验通过
---
## 2. 方案
### 技术方案
在后端新增 `dashboard` 聚合模块,提供 `GET /api/v1/dashboard/summary` 接口,直接基于 SQLite 中的 `connections``connection_tags``audit_logs` 数据生成首页所需的统计摘要。前端新增 dashboard store 与 summary 类型定义,重构 `DashboardView.vue`,将当前首页拆分为“统计卡片 + 图表区 + 排行/列表区 + 最近活动”,并继续复用现有连接列表与最近活动交互。图表继续使用仓库已存在的 `chart.js` / `vue-chartjs` 技术栈。
### 影响范围
```yaml
涉及模块:
- backend: 新增 dashboard 聚合接口与数据查询逻辑
- frontend: 新增 summary 类型和 store,重构 DashboardView 展示结构
- frontend: 补充 dashboard 多语言文案
预计变更文件: 10-14
```
### 风险评估
| 风险 | 等级 | 应对 |
|------|------|------|
| 审计日志 `details` 为 JSON 字符串,连接排行和事件摘要解析不稳 | 中 | 后端统一做安全解析,解析失败时忽略单条异常数据,不阻断整体 summary |
| 新增 dashboard 接口后,首页首屏依赖单次聚合查询,若 SQL 设计粗糙会拖慢加载 | 中 | 采用有限窗口统计和聚合 SQL,避免全量明细搬运到前端 |
| DashboardView 重构后破坏现有连接列表或最近活动交互 | 中 | 保留现有 store 和核心交互函数,仅将展示层重组并补充 summary 数据源 |
---
## 3. 技术设计
### 架构设计
```mermaid
flowchart LR
A[DashboardView] --> B[dashboard.store]
B --> C[/api/v1/dashboard/summary]
C --> D[dashboard.controller]
D --> E[dashboard.service]
E --> F[(connections)]
E --> G[(connection_tags)]
E --> H[(audit_logs)]
```
### API设计
#### GET /api/v1/dashboard/summary
- **请求**: 无
- **响应**:
```json
{
"totals": {
"connections": 0,
"activeConnections7d": 0,
"taggedConnections": 0,
"auditLogs": 0
},
"sshOutcomes24h": {
"success": 0,
"failure": 0
},
"connectionTypes": [
{ "type": "SSH", "count": 0 }
],
"activityTrend7d": [
{ "date": "2026-03-25", "count": 0 }
],
"topConnections": [
{ "connectionId": 1, "connectionName": "prod-1", "host": "1.2.3.4", "count": 8 }
]
}
```
### 数据模型
| 字段 | 类型 | 说明 |
|------|------|------|
| `totals.connections` | `number` | 连接总数 |
| `totals.activeConnections7d` | `number` | 最近 7 天内 `last_connected_at` 有值的连接数 |
| `totals.taggedConnections` | `number` | 至少绑定一个标签的连接数 |
| `totals.auditLogs` | `number` | 审计日志总数 |
| `sshOutcomes24h.success` | `number` | 24 小时内 SSH 成功次数 |
| `sshOutcomes24h.failure` | `number` | 24 小时内 SSH 失败次数 |
| `connectionTypes[]` | `{ type, count }[]` | 按连接类型统计 |
| `activityTrend7d[]` | `{ date, count }[]` | 近 7 天事件趋势 |
| `topConnections[]` | `{ connectionId, connectionName, host, count }[]` | 近期最活跃连接排行 |
---
## 4. 核心场景
### 场景: 首页快速判断系统活跃度
**模块**: frontend / backend
**条件**: 用户登录后进入首页仪表盘。
**行为**: 页面调用 summary 接口并展示总量卡片、近 7 天趋势和 24 小时 SSH 结果摘要。
**结果**: 用户无需进入连接页和审计页,就能快速判断近期使用情况与异常趋势。
### 场景: 从总览切换到具体操作
**模块**: frontend
**条件**: 用户在仪表盘查看高频连接、连接列表和最近活动。
**行为**: 用户可直接从连接列表发起连接,或从最近活动跳转到完整审计日志页。
**结果**: 仪表盘成为“总览 + 操作入口”的组合页,而非只读报表。
---
## 5. 技术决策
### dashboard-management-cockpit#D001: 采用后端聚合 summary 接口,而不是前端多接口拼装
**日期**: 2026-03-25
**状态**: ✅采纳
**背景**: 管理驾驶舱需要同时展示总量、趋势、分布和排行。若继续依赖前端分别拉取连接列表和审计日志再本地聚合,首页逻辑会迅速变重,且趋势统计需要更多分页数据支撑。
**选项分析**:
| 选项 | 优点 | 缺点 |
|------|------|------|
| A: 新增后端 summary 接口 | 首页只需一次请求,统计口径集中统一,前端组件更清晰 | 需要新增后端模块和类型定义 |
| B: 前端继续基于 `/connections``/audit-logs` 本地聚合 | 不需要新增后端路由 | 首页需要管理更多请求和聚合逻辑,趋势/排行容易依赖不完整数据 |
**决策**: 选择方案A
**理由**: 这次需求明确是“管理驾驶舱版”而非轻量美化,后端聚合更适合承载统计口径和后续扩展。
**影响**: backend, frontend
### dashboard-management-cockpit#D002: 首页统计只使用数据库稳定数据,不引入在线会话内存态
**日期**: 2026-03-25
**状态**: ✅采纳
**背景**: 在线会话数等实时指标需要额外打通 WebSocket 或运行时状态管理,而当前仓库首页并无现成只读接口。
**选项分析**:
| 选项 | 优点 | 缺点 |
|------|------|------|
| A: 先基于连接表和审计日志做稳定指标 | 实现确定性高,口径清晰,适合本轮交付 | 暂不覆盖实时在线会话数 |
| B: 额外引入内存会话态指标 | 指标更丰富 | 改动范围扩大,需处理跨进程/重启后一致性问题 |
**决策**: 选择方案A
**理由**: 用户当前核心诉求是“首页更像仪表盘”,稳定的趋势和资产统计优先级高于易漂移的瞬时在线数。
**影响**: backend, frontend
---
## 6. 成果设计
### 设计方向
- **美学基调**: 延续现有后台控制台风格,但提升为更有层次的运营驾驶舱布局,强调信息密度和扫读效率
- **记忆点**: 首页首屏以一排高对比统计卡片和双图表区形成明显“总览区”,不再像普通列表页
- **参考**: 当前项目的卡片/边框/主题变量体系 + 运维控制台式信息编排
### 视觉要素
- **配色**: 继续使用现有主题 token;通过不同强调色区分卡片状态,例如主色用于总量、绿色/红色用于 SSH 成功失败、蓝青色用于趋势图
- **字体**: 沿用项目现有字体体系,避免引入与整体后台风格冲突的新字体
- **布局**: 顶部四卡片总览,中部双栏图表,下部左侧活跃连接排行、右侧最近活动,连接列表保留为可操作区域
- **动效**: 卡片和图表使用轻量渐进出现与 hover 反馈,避免夸张动画影响管理界面稳定感
- **氛围**: 保留现有边框卡片语言,通过更清晰的区块分层、数据注释和图例提升专业感
### 技术约束
- **可访问性**: 图表需要同时提供标题和数字文本,避免纯图形表达
- **响应式**: 桌面端优先双栏布局,窄屏时需自然折叠为单栏
@@ -0,0 +1,50 @@
# 任务清单: dashboard-management-cockpit
```yaml
@feature: dashboard-management-cockpit
@created: 2026-03-25
@status: pending
@mode: R2
```
## 进度概览
| 完成 | 失败 | 跳过 | 总数 |
|------|------|------|------|
| 0 | 0 | 0 | 6 |
---
## 任务列表
### 1. 后端 Dashboard 聚合接口
- [ ] 1.1 在 `packages/backend/src/dashboard/` 下新增 summary 查询与 service/controller/routes,实现基于连接表、标签关联表和审计日志表的聚合统计接口 | depends_on: []
- [ ] 1.2 在 `packages/backend/src/index.ts` 中注册 dashboard 路由,并补齐必要的后端类型定义 | depends_on: [1.1]
### 2. 前端数据接入
- [ ] 2.1 在 `packages/frontend/src/types/server.types.ts` 中新增 dashboard summary 响应类型,并在 `packages/frontend/src/stores/` 中新增 dashboard store 负责获取首页聚合数据 | depends_on: [1.2]
### 3. 仪表盘页面重构
- [ ] 3.1 重构 `packages/frontend/src/views/DashboardView.vue`,新增统计卡片、近 7 天趋势图、连接类型分布图和活跃连接排行,同时保留现有连接列表与最近活动区域 | depends_on: [2.1]
- [ ] 3.2 更新 `packages/frontend/src/locales/zh-CN.json``packages/frontend/src/locales/en-US.json``packages/frontend/src/locales/ja-JP.json` 的 dashboard 文案,补齐新增统计与图表标签 | depends_on: [3.1]
### 4. 验证
- [ ] 4.1 执行 `packages/backend``packages/frontend` 的构建校验,确认新增 dashboard 接口和页面改造通过类型检查与打包 | depends_on: [3.2]
---
## 执行日志
| 时间 | 任务 | 状态 | 备注 |
|------|------|------|------|
| 2026-03-25 23:43 | DESIGN | completed | 已确认采用“后端 summary 接口 + 前端驾驶舱重构”的实现路径,统计口径优先使用稳定数据库数据 |
---
## 执行备注
> `create_package.py` 在当前环境未返回有效执行报告,方案包已按模板规则手工创建。开发实施阶段需同步前后端、locale 和知识库变更记录。
@@ -0,0 +1 @@
{"status":"in_progress","completed":0,"failed":0,"pending":9,"total":9,"done":0,"percent":0,"current":"DESIGN completed - package created for login credential management","updated_at":"2026-03-25 23:54:00"}
@@ -0,0 +1,206 @@
# 变更提案: login-credential-management
## 元信息
```yaml
类型: 新功能
方案类型: implementation
优先级: P1
状态: 草稿
创建: 2026-03-25
```
---
## 1. 需求
### 背景
当前连接的用户名、密码、认证方式和 SSH 密钥选择直接存放在连接本体中。这样虽然能满足单连接直填,但无法形成独立的登录凭证资产,也无法在多台服务器之间稳定复用同一组登录配置。用户明确要求新增独立“登录凭证管理”,同时保留原有直填方式,并支持在新增连接、编辑连接和批量编辑中一键应用已保存凭证。
### 目标
- 新增统一“登录凭证管理”,支持 SSH / RDP / VNC 三类凭证的列表、新增、编辑、删除。
- 新增连接和编辑连接时,保留“账号密码 / 密钥直填”能力,同时增加“使用已保存凭证”模式。
- 批量编辑连接时支持一键把选中的服务器切换到某个已保存凭证。
- 连接运行时需要优先解析“引用凭证”,未引用时继续使用连接自身保存的直填凭证。
- 兼容已有连接数据,不强制迁移旧连接为凭证引用。
### 约束条件
```yaml
时间约束: 本轮内完成数据库、后端 API、前端交互和基础验证闭环
兼容性约束: 旧连接必须继续可编辑、可测试、可连接
数据约束: 已保存凭证需要单独建模,不能继续依附于 connections 表临时拼装
交互约束: 不做本地仓库/云端仓库区分,管理入口采用贴近现有连接工作流的管理面板
安全约束: 凭证敏感字段继续复用现有 encrypt/decrypt 机制,不在连接列表接口中明文返回
```
### 验收标准
- [ ] 后端新增独立登录凭证表和 CRUD API,支持 SSH / RDP / VNC 三类凭证
- [ ] `connections` 表新增可选凭证引用字段,连接创建、更新、测试和实际使用时都能解析已保存凭证
- [ ] 新增连接/编辑连接时支持在“直填凭证”和“已保存凭证”之间切换,且不移除原有直填能力
- [ ] 批量编辑连接支持一键应用某个已保存凭证
- [ ] 旧连接在不绑定登录凭证时仍按原逻辑工作
- [ ] 前后端至少完成可运行的构建或类型校验验证
---
## 2. 方案
### 技术方案
采用“独立登录凭证实体 + 连接可选引用”的实现路径。后端新增 `login_credentials` 表和对应模块,统一存储凭证名称、协议类型、用户名、认证方式、加密后的密码/密钥等信息。`connections` 表新增 `login_credential_id` 外键,连接在保存时可以选择两种模式:
1. 继续在连接中直填并保存用户名/密码/密钥
2. 改为引用某个已保存凭证
连接运行时、测试连接和批量编辑都统一走“先看引用凭证,再回退连接自身凭证”的解析逻辑。前端在现有连接表单的认证区加入“认证来源”切换,并新增登录凭证管理面板;批量编辑弹窗补“应用已保存凭证”入口。
### 影响范围
```yaml
涉及模块:
- backend: database schema/migrations, login-credentials 模块, connections 模块
- frontend: AddConnectionForm, BatchEditConnectionForm, 连接相关 store/types, 新增登录凭证管理组件与入口
- frontend: locales 多语言文案
- knowledge-base: 方案包、实施日志与知识同步
预计变更文件: 14-22
```
### 风险评估
| 风险 | 等级 | 应对 |
|------|------|------|
| 连接、测试连接、实际握手三条链路凭证解析不一致 | 高 | 后端提炼统一的“解析有效凭证”逻辑,禁止三处各写一套 |
| 旧连接编辑回显时,直填模式与引用模式切换导致字段覆盖 | 中 | 前端明确区分 `credential_source` 状态,提交时只发送当前模式需要的字段 |
| 批量编辑对不同类型连接应用凭证时可能出现协议不匹配 | 中 | 限制只能应用同类型凭证,后端再次校验 |
| 新增通用凭证实体后与现有 `ssh_keys` 关系重复 | 中 | 保留 `ssh_keys` 作为 SSH 私钥仓库,登录凭证通过 `ssh_key_id` 引用已保存 SSH 密钥 |
---
## 3. 技术设计
### 架构设计
```mermaid
flowchart LR
A[AddConnectionForm / BatchEditConnectionForm] --> B[loginCredentials.store]
A --> C[connections.store]
B --> D[/api/v1/login-credentials]
C --> E[/api/v1/connections]
D --> F[login-credentials.controller]
E --> G[connections.controller]
F --> H[login-credentials.service]
G --> I[connection.service]
H --> J[(login_credentials)]
I --> J
I --> K[(connections)]
I --> L[(ssh_keys)]
```
### API 设计
#### GET /api/v1/login-credentials
- 返回所有登录凭证的安全摘要,不包含明文密码/私钥
#### POST /api/v1/login-credentials
- 新增登录凭证
- 请求需包含 `type``name``username` 和对应认证字段
#### PUT /api/v1/login-credentials/:id
- 更新登录凭证
- 允许局部更新;敏感字段为空时表示“不改”
#### DELETE /api/v1/login-credentials/:id
- 删除登录凭证
- 若有连接引用,默认将连接的 `login_credential_id` 置空,不删连接
#### POST /api/v1/connections/test-unsaved
- 继续保留原接口
- 新增支持 `login_credential_id`,测试时优先使用登录凭证解析结果
### 数据模型
#### 新表 `login_credentials`
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | `INTEGER` | 主键 |
| `name` | `TEXT` | 凭证名称,前端展示用 |
| `type` | `TEXT` | `SSH` / `RDP` / `VNC` |
| `username` | `TEXT` | 登录用户名 |
| `auth_method` | `TEXT` | SSH 为 `password` / `key`RDP/VNC 固定 `password` |
| `encrypted_password` | `TEXT NULL` | 加密后的密码 |
| `ssh_key_id` | `INTEGER NULL` | SSH 引用的密钥 ID |
| `encrypted_private_key` | `TEXT NULL` | 直接保存的 SSH 私钥 |
| `encrypted_passphrase` | `TEXT NULL` | SSH 私钥口令 |
| `notes` | `TEXT NULL` | 凭证备注 |
| `created_at` | `INTEGER` | 创建时间 |
| `updated_at` | `INTEGER` | 更新时间 |
#### `connections` 表增量字段
| 字段 | 类型 | 说明 |
|------|------|------|
| `login_credential_id` | `INTEGER NULL` | 引用的登录凭证 ID |
### 核心决策
### login-credential-management#D001: 采用“连接可选引用凭证 + 保留直填”的双轨方案
**日期**: 2026-03-25
**状态**: ✅采纳
**背景**: 用户明确要求“不要移除直填”,同时还要能选择使用已保存配置。
**选项分析**:
| 选项 | 优点 | 缺点 |
|------|------|------|
| A: 连接只允许引用凭证 | 数据归一最强 | 会破坏现有直填体验,不符合用户要求 |
| B: 连接保留直填,并可选引用凭证 | 兼容旧逻辑,迁移风险低 | 数据模型和前端状态更复杂 |
**决策**: 选择方案 B
**理由**: 这是唯一满足用户要求且兼容现有连接资产的路径。
**影响**: backend, frontend
### login-credential-management#D002: SSH 登录凭证继续复用 `ssh_keys` 作为底层密钥仓库
**日期**: 2026-03-25
**状态**: ✅采纳
**背景**: 仓库已有完整 SSH 密钥管理链路,不应为了通用登录凭证重复造一套密钥管理。
**选项分析**:
| 选项 | 优点 | 缺点 |
|------|------|------|
| A: 登录凭证内部直接复用 `ssh_key_id` | 复用现有密钥管理和解密逻辑 | 模型上需要解释“凭证”和“密钥”两层关系 |
| B: 在登录凭证里完全复制私钥管理 | 数据模型更扁平 | 重复实现、风险更高 |
**决策**: 选择方案 A
**理由**: 能最大程度复用现有 SSH 密钥能力,减少改动面和安全风险。
**影响**: backend, frontend
---
## 4. 核心场景
### 场景: 新增连接时选择已保存凭证
**模块**: frontend / backend
**条件**: 用户打开新增连接弹窗并选择“使用已保存凭证”。
**行为**: 表单展示可筛选的凭证下拉或管理入口,用户选择后仅保存 `login_credential_id`
**结果**: 新连接不再重复保存一套账号密码,而是复用独立登录凭证。
### 场景: 批量编辑时一键应用凭证
**模块**: frontend / backend
**条件**: 用户在连接列表中多选多台服务器并打开批量编辑。
**行为**: 批量编辑弹窗允许选择某个已保存凭证,提交后把选中连接统一切换到该凭证。
**结果**: 多台同账号主机可快速改绑同一登录凭证。
### 场景: 旧连接继续使用直填凭证
**模块**: backend
**条件**: 连接未绑定 `login_credential_id`
**行为**: 测试连接、建立连接、编辑回显时继续走旧字段。
**结果**: 老数据零强制迁移,升级后仍可工作。
---
## 5. 成果设计
### 设计方向
- **美学基调**: 延续现有深色控制台视觉,新增一个更聚焦“资产管理”的右侧管理面板
- **记忆点**: 在连接表单中将“认证信息”升级为“认证来源 + 凭证管理”的组合区域,形成明显的操作跃迁
- **交互立场**: 新能力应嵌在现有连接工作流内,而不是把用户赶去陌生页面
### 视觉要素
- **配色**: 继续使用现有 `background / border / primary / text-secondary` 变量,凭证列表用绿色锁图标和次级文字区分状态
- **布局**: 连接弹窗中认证区采用上下分段,先选“直填 / 已保存凭证”,再展示对应表单;登录凭证管理使用右侧抽屉或侧面板布局
- **动效**: 切换认证来源时做轻量内容切换,不引入重动画;凭证管理面板滑入滑出,保持与现有 modal 体系兼容
- **氛围**: 保持专业、克制,不做多余装饰;重点在于“操作密度”和“字段分组清晰”
### 技术约束
- **响应式**: 桌面优先,窄屏时管理面板应退化为全屏弹层
- **可访问性**: 切换认证来源后应保留明确字段标题和禁用态反馈
@@ -0,0 +1,58 @@
# 任务清单: login-credential-management
```yaml
@feature: login-credential-management
@created: 2026-03-25
@status: pending
@mode: R3
```
## 进度概览
| 完成 | 失败 | 跳过 | 总数 |
|------|------|------|------|
| 0 | 0 | 0 | 9 |
---
## 任务列表
### 1. 后端登录凭证模型与迁移
- [ ] 1.1 在 `packages/backend/src/database/schema.ts``schema.registry.ts``migrations.ts` 中新增 `login_credentials` 表定义和 `connections.login_credential_id` 迁移 | depends_on: []
- [ ] 1.2 新增 `packages/backend/src/login-credentials/` 模块,实现 repository/service/controller/routes 和类型定义,提供凭证 CRUD 接口 | depends_on: [1.1]
### 2. 连接模块凭证引用支持
- [ ] 2.1 在 `packages/backend/src/types/connection.types.ts``packages/backend/src/connections/connection.service.ts``packages/backend/src/connections/connections.controller.ts` 中新增 `login_credential_id` 与统一凭证解析逻辑,覆盖创建、更新、测试和读取回显 | depends_on: [1.2]
- [ ] 2.2 在 `packages/backend/src/index.ts` 注册登录凭证路由,并确保连接测试与实际连接链路复用新的凭证解析逻辑 | depends_on: [2.1]
### 3. 前端登录凭证管理与表单接入
- [ ] 3.1 新增前端登录凭证类型、store 和管理组件,提供列表、新增、编辑、删除交互入口 | depends_on: [2.2]
- [ ] 3.2 改造 `packages/frontend/src/components/AddConnectionFormAuth.vue``AddConnectionForm.vue``packages/frontend/src/composables/useAddConnectionForm.ts`,支持“直填凭证 / 已保存凭证”双模式 | depends_on: [3.1]
### 4. 批量编辑与文案同步
- [ ] 4.1 改造 `packages/frontend/src/components/BatchEditConnectionForm.vue`,支持批量应用已保存登录凭证并做类型校验 | depends_on: [3.1]
- [ ] 4.2 更新连接相关 store、页面入口与 `packages/frontend/src/locales/zh-CN.json``packages/frontend/src/locales/en-US.json``packages/frontend/src/locales/ja-JP.json` 文案 | depends_on: [3.2, 4.1]
### 5. 验证与知识同步
- [ ] 5.1 执行前后端构建或类型校验,验证登录凭证管理、连接表单和批量编辑改造可通过基础检查 | depends_on: [4.2]
- [ ] 5.2 同步 `.helloagents` 知识库与 CHANGELOG,记录本次“登录凭证管理”实现方案和落地结果 | depends_on: [5.1]
---
## 执行日志
| 时间 | 任务 | 状态 | 备注 |
|------|------|------|------|
| 2026-03-25 23:54 | DESIGN | completed | 已确认采用“独立登录凭证实体 + 连接可选引用 + 保留直填”的实现路径 |
---
## 执行备注
> 当前环境缺少可用 Python 运行时,`create_package.py` 未能执行;本方案包已按模板规范手工创建。开发阶段需优先保证统一凭证解析逻辑,避免连接创建、测试和运行时三套行为分叉。