dsh-arcvista 0.1.1 → 0.1.2
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/CHANGELOG.md +4 -0
- package/README.md +12 -32
- package/package.json +1 -1
- package/public/js/pages/settings.js +9 -7
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ ArcVista 把这些问题做成一个可以直接下钻的看板,而不是一
|
|
|
24
24
|

|
|
25
25
|
|
|
26
26
|
- **不需要单独启动 Node 服务**:ArcVista 的 API 和静态页面由 DSH Host 插件直接挂载在 `/arcvista` 路径下;
|
|
27
|
-
- **不需要配置模型**:分析使用 DSH 当前选择的默认模型(例如 `deepseek-flash`),模型调用通过 DSH 的 `llm`
|
|
27
|
+
- **不需要配置模型**:分析使用 DSH 当前选择的默认模型(例如 `deepseek-flash`),模型调用通过 DSH 的 `llm` 服务完成;设置页不提供模型配置;
|
|
28
28
|
- 数据仍保存在本机:默认写在 `~/.dsh/arcvista/`(SQLite、备份和仓库镜像),不会写进 `node_modules`;
|
|
29
29
|
- 面板顶部显示运行状态,右上角可以刷新或在独立浏览器窗口打开;
|
|
30
30
|
- 主题跟随 DSH 的浅色 / 深色模式(映射到 `daylight` / `obsidian`),内嵌页面隐藏了 ArcVista 原来的左侧栏;
|
|
@@ -124,7 +124,7 @@ npm start
|
|
|
124
124
|
- 由仓库结构、构建清单、网关路由、Feign 声明、编排配置与依赖推断生成的分层架构图:客户端 → 接入层 → 服务层 → 数据层 → 基础设施 / 外部系统。
|
|
125
125
|
- 拖拽平移、滚轮缩放、节点悬停高亮依赖链路;点击节点打开节点详情(指标、复杂度驱动、上下游依赖、下钻入口)。
|
|
126
126
|
- **下钻分析**:进入单个模块的内部结构(按 Controller / Service / Domain / DTO / 事件 / 配置等职责聚合的依赖子图)、关键流程、对外接口、调用方/被依赖方、数据组件、模块风险与改进建议;支持继续追问该模块。
|
|
127
|
-
-
|
|
127
|
+
- 模型由 DSH 统一提供,架构的命名、业务职责、外部系统与连接会基于代码证据做语义增强;没有模型时启发式结果同样完整可用。
|
|
128
128
|
|
|
129
129
|
### 2. 安全架构守护
|
|
130
130
|
|
|
@@ -142,7 +142,7 @@ npm start
|
|
|
142
142
|
- 业务域来自服务边界;能力来自 Controller 聚合;实体来自领域模型;事件来自 Kafka / RabbitMQ 主题与监听器;数据组件来自依赖与编排配置;参与者来自客户端入口。
|
|
143
143
|
- 卡片式业务域泳道:业务能力、领域实体、事件、数据组件、参与者分别用不同类型卡片呈现;接口与领域实体默认收起避免过密,可在筛选器中展开。
|
|
144
144
|
- 普通滚动只滚动页面,`Ctrl/⌘ + 滚轮`或工具条缩放;点击节点查看业务含义,并从业务域下钻到对应代码模块。
|
|
145
|
-
-
|
|
145
|
+
- 模型由 DSH 统一提供,自动补充业务语义、业务能力、主业务流程(如"下单 → 支付 → 扣减库存 → 发货签收")与跨域事实。
|
|
146
146
|
|
|
147
147
|
### 4. 复杂度
|
|
148
148
|
|
|
@@ -170,27 +170,13 @@ npm start
|
|
|
170
170
|
- **架构与业务 diff**:架构节点增减、业务域/实体/接口/事件变化。
|
|
171
171
|
- **风险清单**:只把本次变更引入的风险计入结论;目标分支的历史高危单独列为"存量风险",避免把老问题算到新分支头上。
|
|
172
172
|
|
|
173
|
-
##
|
|
173
|
+
## 模型
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
作为 DSH 插件运行时,分析始终使用 **DSH 当前选择的默认模型**(例如 `deepseek-flash`),不需要在 ArcVista 里配置 Base URL、模型名或 API Key。
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
模型用于:架构图的业务命名、分层语义与外部系统补全;业务知识图谱的业务域/能力/流程;架构风险与治理建议;模块下钻的职责说明与追问回答。
|
|
178
178
|
|
|
179
|
-
|
|
180
|
-
ARCVISTA_LLM_API_KEY=sk-xxx \
|
|
181
|
-
ARCVISTA_LLM_BASE_URL=https://api.deepseek.com/v1 \
|
|
182
|
-
ARCVISTA_LLM_MODEL=deepseek-chat \
|
|
183
|
-
npm start
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
模型会被用于:
|
|
187
|
-
|
|
188
|
-
- 架构图的业务命名、分层语义、外部系统补全;
|
|
189
|
-
- 业务知识图谱的业务域/能力/流程;
|
|
190
|
-
- 基于指标的架构风险与治理建议;
|
|
191
|
-
- 模块下钻的职责说明、内部结构与追问回答。
|
|
192
|
-
|
|
193
|
-
**没有配置 Key 也能完整使用**:架构、依赖、安全守护、复杂度、覆盖率、知识图谱全部由静态分析引擎生成,风险规则照常运行。快照会记录当次使用的引擎(`LLM 语义增强` / `启发式`)。
|
|
179
|
+
没有可用模型时,架构、依赖、安全守护、复杂度、覆盖率与知识图谱仍由静态分析引擎完整生成,风险规则照常运行。
|
|
194
180
|
|
|
195
181
|
## 工作方式
|
|
196
182
|
|
|
@@ -225,14 +211,13 @@ Git 仓库 ──► 本地镜像(bare)──► 按提交检出 worktree
|
|
|
225
211
|
|
|
226
212
|
## 数据、备份与隐私
|
|
227
213
|
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
- **自动备份**:启动时、每次分析完成以及删除产品前,会把 SQLite
|
|
231
|
-
-
|
|
214
|
+
- DSH 插件模式下,所有数据保存在 `~/.dsh/arcvista/arcvista.db`(SQLite);独立 CLI 模式使用 `data/`。
|
|
215
|
+
- 仓库镜像与检出代码在数据目录的 `repos/`、`worktrees/`,可随时删除,重新分析会重建。
|
|
216
|
+
- **自动备份**:启动时、每次分析完成以及删除产品前,会把 SQLite 快照写入数据目录的 `backups/`(默认保留 12 份,文件权限 600;可用 `ARCVISTA_BACKUP_DIR` 修改位置,`ARCVISTA_BACKUP_KEEP` 修改保留数量)。
|
|
217
|
+
- **自动恢复**:如果数据目录里的 `arcvista.db` 缺失或无法打开,启动时会自动从最近一份包含产品的备份恢复,并在启动日志和设置页提示恢复来源。
|
|
232
218
|
- 设置页「当前状态」可以看到数据目录、备份目录和最近备份时间,也可以点「立即备份数据」手动备份。
|
|
233
219
|
- 仓库镜像体积可能较大;备份只包含数据库(产品、快照、设置),不会重复备份仓库镜像。
|
|
234
|
-
- API Key
|
|
235
|
-
- 只有配置大模型并执行分析时,才会把**仓库证据摘要**(模块、依赖、路由、配置、指标等,不含完整源码)发送给你配置的模型服务。
|
|
220
|
+
- 模型调用通过 DSH 的 `llm` 服务完成,ArcVista 不保存 API Key;分析时只把**仓库证据摘要**(模块、依赖、路由、配置、指标等,不含完整源码)发送给 DSH 当前模型。
|
|
236
221
|
|
|
237
222
|
## 环境变量
|
|
238
223
|
|
|
@@ -249,9 +234,6 @@ Git 仓库 ──► 本地镜像(bare)──► 按提交检出 worktree
|
|
|
249
234
|
| `ARCVISTA_GIT_CLONE_TIMEOUT_MS` | `900000` | 单次克隆超时(默认 15 分钟) |
|
|
250
235
|
| `ARCVISTA_GIT_FETCH_TIMEOUT_MS` | `300000` | 单次拉取超时(默认 5 分钟) |
|
|
251
236
|
| `ARCVISTA_GIT_WORKTREE_TIMEOUT_MS` | `300000` | 单次检出超时(默认 5 分钟) |
|
|
252
|
-
| `ARCVISTA_LLM_API_KEY` | — | 大模型 API Key(优先于页面设置) |
|
|
253
|
-
| `ARCVISTA_LLM_BASE_URL` | — | 大模型 Base URL |
|
|
254
|
-
| `ARCVISTA_LLM_MODEL` | — | 模型名 |
|
|
255
237
|
| `ARCVISTA_DEBUG` | — | 打印异常堆栈 |
|
|
256
238
|
|
|
257
239
|
## API 一览
|
|
@@ -266,8 +248,6 @@ Git 仓库 ──► 本地镜像(bare)──► 按提交检出 worktree
|
|
|
266
248
|
| `POST` | `/api/products/:id/modules/analyze` | 模块下钻(异步任务) |
|
|
267
249
|
| `GET` | `/api/products/:id/compare` | 分支/快照对比 |
|
|
268
250
|
| `GET` | `/api/jobs/:id` | 任务进度与日志 |
|
|
269
|
-
| `GET/PUT` | `/api/settings` | 模型配置 |
|
|
270
|
-
| `POST` | `/api/settings/test` | 测试模型连接 |
|
|
271
251
|
|
|
272
252
|
## 目录结构
|
|
273
253
|
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@ export async function renderSettings(main, ctx) {
|
|
|
21
21
|
<div>
|
|
22
22
|
<div class="eyebrow">CONFIGURATION · 观测参数</div>
|
|
23
23
|
<h1 class="page-title">${dshManaged ? '观测<em>配置</em>' : '模型与<em>观测配置</em>'}</h1>
|
|
24
|
-
<p class="page-sub">${dshManaged ? 'ArcVista 现在运行在 DSH 插件中,模型由 DSH
|
|
24
|
+
<p class="page-sub">${dshManaged ? 'ArcVista 现在运行在 DSH 插件中,模型由 DSH 统一提供,无需单独设置。分析结论与快照仍保存在本机。' : 'ArcVista 是本地工具,分析结论与快照全部保存在你自己的机器上。配置一个 OpenAI 兼容的大模型后,架构语义、业务知识图谱、风险判断与模块下钻会由模型增强;不配置也能使用完整的启发式分析。'}</p>
|
|
25
25
|
</div>
|
|
26
26
|
<div class="masthead-right">
|
|
27
27
|
<div class="masthead-meta">${dshManaged ? 'DSH MODEL' : llm.enabled ? 'MODEL ONLINE' : 'HEURISTIC MODE'}<br/><b>${dshManaged ? esc(llm.model || 'DSH') : llm.enabled ? esc(llm.model || '') : '需要在下方配置 Key'}</b></div>
|
|
@@ -48,7 +48,7 @@ export async function renderSettings(main, ctx) {
|
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
50
50
|
|
|
51
|
-
${dshManaged ? `<div class="banner banner--teal mb-24"><span>${icon('shield', 16)}</span><div><strong>模型由 DSH 统一提供</strong> 当前使用 <span class="mono">${esc(llm.model || 'DSH')}</span
|
|
51
|
+
${dshManaged ? `<div class="banner banner--teal mb-24"><span>${icon('shield', 16)}</span><div><strong>模型由 DSH 统一提供</strong> 当前使用 <span class="mono">${esc(llm.model || 'DSH')}</span>;无需在 ArcVista 内配置。</div></div>` : ''}
|
|
52
52
|
<div class="settings-grid">
|
|
53
53
|
<div class="panel" ${dshManaged ? 'style="display:none"' : ''}>
|
|
54
54
|
<div class="panel-head">
|
|
@@ -113,10 +113,12 @@ export async function renderSettings(main, ctx) {
|
|
|
113
113
|
<div class="panel-head"><div><div class="panel-title">当前状态</div></div></div>
|
|
114
114
|
<div class="panel-body">
|
|
115
115
|
<dl class="kv-list">
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
${dshManaged
|
|
117
|
+
? '<div class="kv"><dt>模型(DSH 提供)</dt><dd class="mono">' + esc(llm.model || 'DSH') + '</dd></div>'
|
|
118
|
+
: `<div class="kv"><dt>模型增强</dt><dd>${llm.enabled ? '<span class="teal">已启用</span>' : '<span class="amber">启发式模式</span>'}</dd></div>
|
|
119
|
+
<div class="kv"><dt>Base URL</dt><dd class="mono" style="font-size:10px;word-break:break-all">${esc(llm.baseUrl || '—')}</dd></div>
|
|
118
120
|
<div class="kv"><dt>模型</dt><dd class="mono">${esc(llm.model || '—')}</dd></div>
|
|
119
|
-
|
|
121
|
+
<div class="kv"><dt>Key</dt><dd class="mono">${llm.hasKey ? esc(llm.apiKeyMasked || '已保存') : llm.envKey ? '来自环境变量' : '未配置'}</dd></div>`}
|
|
120
122
|
<div class="kv"><dt>数据目录</dt><dd class="mono" style="font-size:10px;word-break:break-all">${esc(health?.dataDir || '—')}</dd></div>
|
|
121
123
|
<div class="kv"><dt>备份目录</dt><dd class="mono" style="font-size:10px;word-break:break-all">${esc(health?.backups?.dir || '—')}</dd></div>
|
|
122
124
|
<div class="kv"><dt>最近备份</dt><dd>${health?.backups?.latest ? `${esc(timeAgo(health.backups.latest.at))} · ${esc(fmtBytes(health.backups.latest.size))}` : '暂无'}</dd></div>
|
|
@@ -128,7 +130,7 @@ export async function renderSettings(main, ctx) {
|
|
|
128
130
|
</div>
|
|
129
131
|
</div>
|
|
130
132
|
</div>
|
|
131
|
-
<div class="panel">
|
|
133
|
+
<div class="panel" ${dshManaged ? 'style="display:none"' : ''}>
|
|
132
134
|
<div class="panel-head"><div><div class="panel-title">模型增强了什么</div></div></div>
|
|
133
135
|
<div class="panel-body">
|
|
134
136
|
<ul class="bullet-list">
|
|
@@ -141,7 +143,7 @@ export async function renderSettings(main, ctx) {
|
|
|
141
143
|
<div class="help">没有 Key 时,架构、依赖、安全守护、复杂度、覆盖率、知识图谱仍由静态分析引擎生成,风险规则照常运行。快照会记录当次使用的引擎,可随时重新分析。</div>
|
|
142
144
|
</div>
|
|
143
145
|
</div>
|
|
144
|
-
<div class="panel">
|
|
146
|
+
<div class="panel" ${dshManaged ? 'style="display:none"' : ''}>
|
|
145
147
|
<div class="panel-head"><div><div class="panel-title">环境变量方式</div></div></div>
|
|
146
148
|
<div class="panel-body">
|
|
147
149
|
<div class="help" style="line-height:2">
|