dsh-env-manager-plugin 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +249 -2
- package/client.js +2581 -0
- package/cordis.patch.yml +4 -0
- package/docs/00-project/current-state.md +246 -0
- package/docs/00-project/glossary.md +215 -0
- package/docs/00-project/project-brief.md +114 -0
- package/docs/00-project/roadmap.md +89 -0
- package/docs/01-architecture/DSH_Environment_Service_Memory_Skill_Brainstorm.md +493 -0
- package/docs/01-architecture/api-verification.md +416 -0
- package/docs/01-architecture/architecture-overview.md +222 -0
- package/docs/01-architecture/data-model.md +930 -0
- package/docs/01-architecture/decisions/ADR-0001-plugin-as-bundle.md +29 -0
- package/docs/01-architecture/decisions/ADR-0002-file-based-storage.md +25 -0
- package/docs/01-architecture/decisions/ADR-0003-skill-router-over-search.md +25 -0
- package/docs/01-architecture/decisions/ADR-0004-typescript-host-js-client.md +31 -0
- package/docs/01-architecture/decisions/ADR-0005-layered-rule-resolution.md +36 -0
- package/docs/01-architecture/decisions/ADR-0006-credentials-as-references.md +30 -0
- package/docs/01-architecture/decisions/ADR-0007-session-scoped-default-environment.md +28 -0
- package/docs/01-architecture/decisions/ADR-0008-memory-bridge-not-second-store.md +31 -0
- package/docs/01-architecture/decisions/ADR-0009-client-host-http-transport.md +87 -0
- package/docs/01-architecture/decisions/ADR-0010-environment-plane-model.md +87 -0
- package/docs/01-architecture/decisions/ADR-0011-k8s-node-execution-model.md +92 -0
- package/docs/01-architecture/design.md +666 -0
- package/docs/01-architecture/detailed-design.md +961 -0
- package/docs/01-architecture/implementation-plan.md +323 -0
- package/docs/01-architecture/module-boundaries.md +306 -0
- package/docs/01-architecture/security-model.md +227 -0
- package/docs/01-architecture/storage-contract.md +224 -0
- package/docs/01-architecture/tool-contract.md +438 -0
- package/docs/01-architecture/ui-design.md +587 -0
- package/docs/02-harness/agent-behavior.md +36 -0
- package/docs/02-harness/change-snapshot-policy.md +29 -0
- package/docs/02-harness/client-ui-integration.md +110 -0
- package/docs/02-harness/context-policy.md +43 -0
- package/docs/02-harness/harness-standard.md +91 -0
- package/docs/02-harness/task-execution-policy.md +26 -0
- package/docs/02-harness/verification-policy.md +97 -0
- package/docs/03-openspec/archive-rule.md +25 -0
- package/docs/03-openspec/bugfix-rule.md +30 -0
- package/docs/03-openspec/design-rule.md +33 -0
- package/docs/03-openspec/openspec-usage-guide.md +31 -0
- package/docs/03-openspec/proposal-rule.md +70 -0
- package/docs/03-openspec/spec-rule.md +33 -0
- package/docs/03-openspec/tasks-rule.md +31 -0
- package/docs/04-development/coding-style.md +67 -0
- package/docs/04-development/dependency-policy.md +43 -0
- package/docs/04-development/development-guide.md +85 -0
- package/docs/04-development/directory-convention.md +105 -0
- package/docs/04-development/local-run-guide.md +55 -0
- package/docs/04-development/testing-guide.md +102 -0
- package/docs/05-domain/deployment-template.md +76 -0
- package/docs/05-domain/environment-template.md +165 -0
- package/docs/05-domain/operation-binding-template.md +55 -0
- package/docs/05-domain/operation-record-template.md +55 -0
- package/docs/05-domain/prompt-template.md +90 -0
- package/docs/05-domain/rule-template.md +73 -0
- package/docs/05-domain/service-template.md +39 -0
- package/docs/06-operations/deployment-guide.md +54 -0
- package/docs/06-operations/release.md +188 -0
- package/docs/06-operations/security-policy.md +53 -0
- package/docs/06-operations/troubleshooting.md +91 -0
- package/docs/07-templates/adr-template.md +21 -0
- package/docs/07-templates/bugfix-template.md +11 -0
- package/docs/07-templates/case-template.md +15 -0
- package/docs/07-templates/design-template.md +29 -0
- package/docs/07-templates/proposal-template.md +19 -0
- package/docs/07-templates/spec-template.md +15 -0
- package/docs/07-templates/tasks-template.md +12 -0
- package/docs/99-archive/README.md +13 -0
- package/docs/README.md +142 -0
- package/icon.svg +4 -0
- package/index.js +8 -0
- package/lib/app/app.d.ts +67 -0
- package/lib/app/app.js +494 -0
- package/lib/app/app.js.map +1 -0
- package/lib/config.d.ts +55 -0
- package/lib/config.js +42 -0
- package/lib/config.js.map +1 -0
- package/lib/domain/constants.d.ts +21 -0
- package/lib/domain/constants.js +59 -0
- package/lib/domain/constants.js.map +1 -0
- package/lib/domain/errors.d.ts +20 -0
- package/lib/domain/errors.js +22 -0
- package/lib/domain/errors.js.map +1 -0
- package/lib/domain/schemas.d.ts +28 -0
- package/lib/domain/schemas.js +445 -0
- package/lib/domain/schemas.js.map +1 -0
- package/lib/domain/types.d.ts +412 -0
- package/lib/domain/types.js +2 -0
- package/lib/domain/types.js.map +1 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.js +89 -0
- package/lib/index.js.map +1 -0
- package/lib/logger.d.ts +8 -0
- package/lib/logger.js +13 -0
- package/lib/logger.js.map +1 -0
- package/lib/memory/bridge.d.ts +18 -0
- package/lib/memory/bridge.js +13 -0
- package/lib/memory/bridge.js.map +1 -0
- package/lib/registry/integrity.d.ts +10 -0
- package/lib/registry/integrity.js +204 -0
- package/lib/registry/integrity.js.map +1 -0
- package/lib/registry/registry.d.ts +14 -0
- package/lib/registry/registry.js +182 -0
- package/lib/registry/registry.js.map +1 -0
- package/lib/resolver/merge.d.ts +23 -0
- package/lib/resolver/merge.js +90 -0
- package/lib/resolver/merge.js.map +1 -0
- package/lib/resolver/resolve.d.ts +18 -0
- package/lib/resolver/resolve.js +288 -0
- package/lib/resolver/resolve.js.map +1 -0
- package/lib/resolver/template.d.ts +10 -0
- package/lib/resolver/template.js +42 -0
- package/lib/resolver/template.js.map +1 -0
- package/lib/router/params.d.ts +3 -0
- package/lib/router/params.js +83 -0
- package/lib/router/params.js.map +1 -0
- package/lib/router/router.d.ts +11 -0
- package/lib/router/router.js +204 -0
- package/lib/router/router.js.map +1 -0
- package/lib/session/session.d.ts +16 -0
- package/lib/session/session.js +64 -0
- package/lib/session/session.js.map +1 -0
- package/lib/skill.d.ts +17 -0
- package/lib/skill.js +56 -0
- package/lib/skill.js.map +1 -0
- package/lib/storage/atomic.d.ts +10 -0
- package/lib/storage/atomic.js +107 -0
- package/lib/storage/atomic.js.map +1 -0
- package/lib/storage/paths.d.ts +10 -0
- package/lib/storage/paths.js +50 -0
- package/lib/storage/paths.js.map +1 -0
- package/lib/storage/records.d.ts +16 -0
- package/lib/storage/records.js +112 -0
- package/lib/storage/records.js.map +1 -0
- package/lib/storage/sessions.d.ts +17 -0
- package/lib/storage/sessions.js +65 -0
- package/lib/storage/sessions.js.map +1 -0
- package/lib/tools/tools.d.ts +14 -0
- package/lib/tools/tools.js +472 -0
- package/lib/tools/tools.js.map +1 -0
- package/lib/transport/http.d.ts +3 -0
- package/lib/transport/http.js +217 -0
- package/lib/transport/http.js.map +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +97 -4
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
# DSH 企业环境与服务上下文插件:Brainstorm 纪要
|
|
2
|
+
|
|
3
|
+
> 文档性质:需求头脑风暴 / 产品与架构探索,**不是最终技术设计或已实现功能说明**
|
|
4
|
+
> 日期:2026-11-01
|
|
5
|
+
> 目标读者:产品设计者、DSH 插件开发 Agent、后续技术评审人员
|
|
6
|
+
> 暂定名称:**DSH Environment & Service Registry**(亦可称 Environment Manager)
|
|
7
|
+
|
|
8
|
+
## 1. 背景与问题定义
|
|
9
|
+
|
|
10
|
+
起始问题是寻找 GitHub 或现网上现成的“DSH 环境管理系统”。讨论很快澄清:这里的“环境”**不是** DSH 的 Profile、插件运行配置或 AI CLI 环境,而是企业内部用于服务部署、问题定位和运维验证的**远程运行环境**。
|
|
11
|
+
|
|
12
|
+
日常任务可能涉及:连接虚机或物理机、访问服务器 Web 管理地址、查看日志、上传文件、部署服务、替换 JAR、重启服务、安装网元代理,以及对 Kubernetes / Docker 部署执行相关操作。用户不希望每次在新的 DSH 会话中重新解释环境拓扑、登录入口、服务 Git 地址、文件路径、执行方法与操作规范。
|
|
13
|
+
|
|
14
|
+
现成工具各有所长,例如 JumpServer 偏重堡垒机和凭据访问,Termix 偏重 SSH/SFTP 主机管理,NetBox 偏重资产拓扑,Portainer 偏重容器环境管理;但它们**不能直接等价于**讨论中的企业内部定制 DSH 插件。由此决定自研,并以 **TypeScript DSH 插件**为首要交付形态。
|
|
15
|
+
|
|
16
|
+
### 核心诉求(一句话)
|
|
17
|
+
|
|
18
|
+
为 DSH 的每一个会话提供可查询、可解析、可追溯的**企业环境 + 服务 + 部署规则 + 操作 Skill + 历史经验**上下文,让 Agent 能更快、更准确、更安全地完成运维任务,并在任务结束后积累经验。
|
|
19
|
+
|
|
20
|
+
## 2. 需求演进轨迹
|
|
21
|
+
|
|
22
|
+
| 阶段 | 新增认识 | 对设计的影响 |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| 1. 环境资产 | 需要保存服务器、IP、用户、密码、URL、部署方式及逻辑拓扑 | 从“DSH Profile 管理”纠正为“企业运行环境管理” |
|
|
25
|
+
| 2. DSH 原生化 | 第一版采用 DSH 插件,手工配置,所有会话可读取 | 不另起复杂服务;先做共享资产库和会话工具 |
|
|
26
|
+
| 3. 服务与规则 | 需要记录服务 Git 地址、日志目录、class/JAR 路径,依据服务动态拼接 | 引入 Service Catalog、Rule Resolver 和 Deployment Binding |
|
|
27
|
+
| 4. 记忆联动 | 部署、日志查询、故障处理应沉淀下来,不断演进 | 增加操作事件、证据、知识候选与规则变更提案 |
|
|
28
|
+
| 5. Skill 路由 | 安装代理、安装服务、替换重启、重新部署等操作希望直达指定 Skill | 引入 Operation Skill Registry,按上下文确定性匹配 Skill |
|
|
29
|
+
|
|
30
|
+
**结果:**从“环境清单”演进为**企业运维上下文中心**,但 V1 仍应严格控制范围,避免把所有远程执行与自动学习功能一次性做完。
|
|
31
|
+
|
|
32
|
+
## 3. 目标场景
|
|
33
|
+
|
|
34
|
+
### 3.1 环境类型与拓扑
|
|
35
|
+
|
|
36
|
+
- 原生虚机/物理机上的服务;通过 SSH、SFTP、Web URL 访问。
|
|
37
|
+
- Docker 容器承载的业务服务。
|
|
38
|
+
- Kubernetes 集群和相应业务节点、控制平面节点、工作负载、容器。
|
|
39
|
+
- 管理面、业务面、扩展节点等逻辑角色。
|
|
40
|
+
- **合设**:管理面与业务面可能是同一台机器;一个节点也可以承担多个角色。不能强制按树形结构分离成不同机器。
|
|
41
|
+
- 同一个服务可能部署于多个环境;同一个环境也可能包含多个部署实例。
|
|
42
|
+
|
|
43
|
+
### 3.2 常见操作
|
|
44
|
+
|
|
45
|
+
- 部署或安装服务、网元代理安装。
|
|
46
|
+
- 替换服务包并重启、重新部署、升级与回滚。
|
|
47
|
+
- 登录服务器、在浏览器打开后台、查询日志、健康检查。
|
|
48
|
+
- 上传/下载文件,定位 JAR、Class、配置目录。
|
|
49
|
+
- 结合 Git 仓库定位代码、构建制品与部署版本。
|
|
50
|
+
- 从历史记忆查找同类问题与有效排障步骤。
|
|
51
|
+
|
|
52
|
+
### 3.3 理想交互
|
|
53
|
+
|
|
54
|
+
> “重新部署测试环境 A 的 aicoservice。”
|
|
55
|
+
|
|
56
|
+
期望 Agent 自动完成上下文准备:
|
|
57
|
+
|
|
58
|
+
1. 找到环境和服务。
|
|
59
|
+
2. 解析实际部署实例、节点、集群、namespace、workload、路径等。
|
|
60
|
+
3. 根据环境、服务、操作类型找到**明确绑定**的 Skill,而非全局重复搜索。
|
|
61
|
+
4. 检索适用的历史经验、限制与注意事项。
|
|
62
|
+
5. 执行前校验 Skill 可用性及权限;涉及重启/替换/生产写操作需要授权。
|
|
63
|
+
6. 执行完成后记录结构化结果、证据及可复用经验;必要时生成待审核的规则/Skill 改进建议。
|
|
64
|
+
|
|
65
|
+
> 注意:上述描述是目标能力;V1 并不承诺具备完整远程执行链路。
|
|
66
|
+
|
|
67
|
+
## 4. 核心领域模型
|
|
68
|
+
|
|
69
|
+
总体上分为四类配置事实,另有操作路由和记忆桥接:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
DSH Agent / Session
|
|
73
|
+
|
|
|
74
|
+
v
|
|
75
|
+
Environment Context Resolver
|
|
76
|
+
|
|
|
77
|
+
+--> Environment Registry ----> Environment / Host / Cluster / Role
|
|
78
|
+
+--> Service Catalog ---------> Service / Git / Artifact
|
|
79
|
+
+--> Deployment Binding ------> Service <-> Environment <-> Runtime
|
|
80
|
+
+--> Rule Resolver -----------> Paths / Log Sources / Config / Runtime Rules
|
|
81
|
+
+--> Operation Skill Router --> Operation -> Skill Reference
|
|
82
|
+
|
|
|
83
|
+
+<-> Memory Bridge <---------> Memories / Evidence / Operations / Proposals
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 4.1 Environment Registry:环境资产
|
|
87
|
+
|
|
88
|
+
字段建议:
|
|
89
|
+
|
|
90
|
+
- `environmentId`、名称、别名、环境类别(开发/测试/预发/生产)、说明。
|
|
91
|
+
- 节点 Host:主机名、地址、OS、IP、SSH 端口、所属环境。
|
|
92
|
+
- Cluster:集群 ID、Kubernetes API 入口、节点和集群关系。
|
|
93
|
+
- Logical Role:`management`、`business`、`extension` 等,支持自定义角色。
|
|
94
|
+
- Access Endpoint:SSH、Web URL、K8s API、Docker 连接端等。
|
|
95
|
+
- `credentialRef`:指向加密凭据库,不直接内嵌密码或 SSH 私钥。
|
|
96
|
+
|
|
97
|
+
**结构重点:环境、节点、集群、逻辑角色是不同实体;角色与节点之间可多对多绑定。**
|
|
98
|
+
|
|
99
|
+
### 4.2 Service Catalog:服务定义
|
|
100
|
+
|
|
101
|
+
存储与部署环境无关的服务信息:
|
|
102
|
+
|
|
103
|
+
- `serviceId`、名称、别名、服务类别。
|
|
104
|
+
- Git 仓库 URL、默认分支、可选模块路径。
|
|
105
|
+
- 构建方式(如 Maven)、Artifact 名称、可用部署模式。
|
|
106
|
+
- `ruleProfileRefs`:适用的通用规则集合。
|
|
107
|
+
- 可选择配置企业专属操作及服务级 Skill 绑定。
|
|
108
|
+
|
|
109
|
+
Git 仓库相关信息在 V1 先手工维护;从 `pom.xml`、Dockerfile、Helm Chart 自动提取信息属于后续扩展。
|
|
110
|
+
|
|
111
|
+
### 4.3 Deployment Binding:实际部署关系
|
|
112
|
+
|
|
113
|
+
描述**哪个服务、以何种部署形式,运行在哪个环境/节点/集群上**:
|
|
114
|
+
|
|
115
|
+
- `deploymentId`、`environmentId`、`serviceId`。
|
|
116
|
+
- `runtimeMode`: `native` / `docker` / `kubernetes`。
|
|
117
|
+
- Native:主机、进程或 systemd 服务、安装目录。
|
|
118
|
+
- Docker:宿主机、container、volume 关联。
|
|
119
|
+
- Kubernetes:cluster、namespace、workload kind/name、container 等。
|
|
120
|
+
- 可选的实例级变量及规则覆盖。
|
|
121
|
+
|
|
122
|
+
一个服务可在同一环境有多个实例,因此不能仅用 `(environmentId, serviceId)` 唯一识别部署。
|
|
123
|
+
|
|
124
|
+
### 4.4 Rule Catalog / Resolver:动态运维规则
|
|
125
|
+
|
|
126
|
+
需求包括:
|
|
127
|
+
|
|
128
|
+
- 安装根目录与服务目录。
|
|
129
|
+
- 日志目录、日志文件名称或容器日志来源。
|
|
130
|
+
- JAR 制品路径、class 目录或 JAR 内 Class 路径。
|
|
131
|
+
- 配置文件、脚本目录、进程匹配规则。
|
|
132
|
+
- 根据服务、环境、部署实例动态解析模板。
|
|
133
|
+
|
|
134
|
+
示例(**示意路径,非公司真实路径**):
|
|
135
|
+
|
|
136
|
+
```yaml
|
|
137
|
+
ruleProfiles:
|
|
138
|
+
- id: java-common
|
|
139
|
+
variables:
|
|
140
|
+
installRoot: /opt/company/services
|
|
141
|
+
paths:
|
|
142
|
+
serviceHome: "${installRoot}/${service.name}"
|
|
143
|
+
jar: "${paths.serviceHome}/lib/${service.artifact}"
|
|
144
|
+
logDir: "${paths.serviceHome}/logs"
|
|
145
|
+
applicationLog: "${paths.logDir}/${service.name}.log"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
规则覆盖层级建议:
|
|
149
|
+
|
|
150
|
+
1. 全局通用规则。
|
|
151
|
+
2. 服务级规则。
|
|
152
|
+
3. 环境级覆盖。
|
|
153
|
+
4. 部署实例级覆盖(最高)。
|
|
154
|
+
|
|
155
|
+
**要求:**按字段合并覆盖;能够解释每个最终值的来源(`provenance`);支持预览、冲突检测、变量循环检测、未定义变量报错。模板引擎不执行 JavaScript 或 Shell。
|
|
156
|
+
|
|
157
|
+
不同运行时采用结构化日志描述,而非将一切强行解析成文件路径:
|
|
158
|
+
|
|
159
|
+
```yaml
|
|
160
|
+
logSources:
|
|
161
|
+
native:
|
|
162
|
+
kind: file
|
|
163
|
+
path: "${paths.applicationLog}"
|
|
164
|
+
docker:
|
|
165
|
+
kind: container-stdout
|
|
166
|
+
container: "${deployment.containerName}"
|
|
167
|
+
kubernetes:
|
|
168
|
+
kind: pod-logs
|
|
169
|
+
namespace: "${deployment.namespace}"
|
|
170
|
+
workload: "${deployment.workload.name}"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
注意 class 的具体位置可以是编译输出、部署目录或 JAR 内的条目,必须区分来源类型。
|
|
174
|
+
|
|
175
|
+
## 5. Operation Skill Registry:按操作精确绑定 Skill
|
|
176
|
+
|
|
177
|
+
### 5.1 设计动机
|
|
178
|
+
|
|
179
|
+
企业运维操作已有或未来会有专门 Skill,如网元代理安装、服务安装、JAR 替换重启、K8s 重新部署、日志采集和健康检查。用户希望一句自然语言之后即可定位对应 Skill,减少重复查找及 Token 成本。
|
|
180
|
+
|
|
181
|
+
**Skill Router 负责“用哪个 Skill”,Environment Registry 负责“在哪做”,Memory 负责“过去的经验”。**
|
|
182
|
+
|
|
183
|
+
### 5.2 标准操作及扩展
|
|
184
|
+
|
|
185
|
+
建议标准化操作 ID:
|
|
186
|
+
|
|
187
|
+
- `install`、`deploy`、`redeploy`、`replace`、`restart`、`upgrade`、`rollback`、`uninstall`。
|
|
188
|
+
- `collect-logs`、`health-check`、`inspect`、`upload`、`download`。
|
|
189
|
+
- 企业自定义如 `install-ne-agent`、`sync-ne-config`。
|
|
190
|
+
|
|
191
|
+
### 5.3 绑定规则示例
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
operationBindings:
|
|
195
|
+
- id: binding-001
|
|
196
|
+
operation: redeploy
|
|
197
|
+
match:
|
|
198
|
+
serviceId: aicoservice
|
|
199
|
+
deploymentMode: kubernetes
|
|
200
|
+
environmentId: test-a
|
|
201
|
+
skill:
|
|
202
|
+
name: redeploy-k8s-service
|
|
203
|
+
expectedSource: null
|
|
204
|
+
expectedDigest: null
|
|
205
|
+
parameters:
|
|
206
|
+
namespace: "${deployment.namespace}"
|
|
207
|
+
workload: "${deployment.workload.name}"
|
|
208
|
+
cluster: "${deployment.clusterId}"
|
|
209
|
+
policy:
|
|
210
|
+
requiresApproval: true
|
|
211
|
+
allowProduction: false
|
|
212
|
+
enabled: true
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
示例 Skill 名均为**占位名称**,不代表实际存在或已安装。
|
|
216
|
+
|
|
217
|
+
匹配优先级:
|
|
218
|
+
|
|
219
|
+
1. 部署实例级。
|
|
220
|
+
2. 环境 + 服务级。
|
|
221
|
+
3. 服务级。
|
|
222
|
+
4. 服务类型 + 部署模式级。
|
|
223
|
+
5. 全局默认。
|
|
224
|
+
|
|
225
|
+
同级冲突须显式报错,不随机选择;绑定的 Skill 不存在、不可用或来源不符时,应返回清晰诊断信息,不静默切到另一个会改变环境的 Skill。
|
|
226
|
+
|
|
227
|
+
Skill 绑定是**发现和选择指令**,不是执行授权。Skill 中的参数映射是给 Agent 的结构化上下文;实际执行仍需具体工具及权限策略。DSH Skill 注册表、加载 API、跨工作区可见性、同名覆盖策略和版本元数据须在目标版本中核实。
|
|
228
|
+
|
|
229
|
+
### 5.4 推荐操作接口
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
env_resolve_operation({
|
|
233
|
+
environmentId: "test-a",
|
|
234
|
+
serviceId: "aicoservice",
|
|
235
|
+
operation: "redeploy"
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
返回应包含 Skill 名称、来源与可用性、部署参数、匹配规则、规则版本、审批策略及失败原因。不要把所有 Skill 文档一次性注入会话上下文;按需加载目标 Skill。
|
|
240
|
+
|
|
241
|
+
## 6. Session Context:所有会话可读
|
|
242
|
+
|
|
243
|
+
V1 目标是一个 DSH 实例下的统一资产库,允许多个会话按权限读取。至少支持:
|
|
244
|
+
|
|
245
|
+
- `env_list`:环境清单。
|
|
246
|
+
- `env_get`:环境与拓扑详情。
|
|
247
|
+
- `env_find`:按环境名称、IP、服务名检索。
|
|
248
|
+
- `env_resolve` / `env_get_service_context`:组合环境、服务、实例和规则,返回可用 Service Context。
|
|
249
|
+
- `env_resolve_operation`:操作路由与 Skill 解析。
|
|
250
|
+
- `env_set_context`:设置当前会话默认环境(需要验证持久化机制)。
|
|
251
|
+
|
|
252
|
+
**全局资产数据与会话上下文分离**:会话绑定不能修改其他会话默认环境,也不能改变共享配置。查询结果只能提供安全字段,例如 `credentialRef` 和凭据状态,绝不能把密钥明文暴露给模型。
|
|
253
|
+
|
|
254
|
+
解析结果必须区分:
|
|
255
|
+
|
|
256
|
+
- 手工声明或配置的事实。
|
|
257
|
+
- 基于规则推导的路径。
|
|
258
|
+
- 已经过在线操作验证的事实。
|
|
259
|
+
- 某次特定时间产生的历史观测。
|
|
260
|
+
|
|
261
|
+
V1 没有远程验证能力时,不能宣称某个推导出的日志文件必然存在。
|
|
262
|
+
|
|
263
|
+
## 7. Memory Manager 联动:从操作到经验
|
|
264
|
+
|
|
265
|
+
之前规划的独立记忆插件拥有结构化记忆区,如 `decision`、`knowledge`、`api-catalog`、`process`、`open-questions`、`constraints`、`runtime-base`、`playbooks`、`assets`。本次讨论决定**复用而不再造一套记忆库**,增加结构化操作事件与观测记录。
|
|
266
|
+
|
|
267
|
+
### 7.1 三方职责
|
|
268
|
+
|
|
269
|
+
| 子系统 | 权威数据与职责 |
|
|
270
|
+
|---|---|
|
|
271
|
+
| Environment Manager | 环境、节点、服务、Git 地址、部署绑定、规则、凭据引用 |
|
|
272
|
+
| Memory Manager | 历史经验、知识、决策、限制、排障 Playbook、证据引用 |
|
|
273
|
+
| Operation Skill Router | 操作类型与具体 Skill 的绑定、路由、来源校验与参数解析 |
|
|
274
|
+
|
|
275
|
+
Memory 不应复制或维护另一份 IP、密码、仓库 URL;通过稳定 `environmentId/serviceId/deploymentId` 引用。
|
|
276
|
+
|
|
277
|
+
### 7.2 闭环
|
|
278
|
+
|
|
279
|
+
```text
|
|
280
|
+
新任务
|
|
281
|
+
-> 检索环境/服务/Skill 绑定
|
|
282
|
+
-> 查询适用的 Memory(先查再执行)
|
|
283
|
+
-> 授权后执行操作
|
|
284
|
+
-> 结构化记录操作 + 脱敏证据
|
|
285
|
+
-> 提炼知识/Playbook/待解决问题
|
|
286
|
+
-> 生成规则或 Skill 改进提案
|
|
287
|
+
-> 校验、审核、发布(非直接覆盖)
|
|
288
|
+
-> 后续会话复用
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### 7.3 Operation Record
|
|
292
|
+
|
|
293
|
+
建议建立结构化事件:
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
interface OperationRecord {
|
|
297
|
+
id: string;
|
|
298
|
+
sessionId: string;
|
|
299
|
+
environmentId: string;
|
|
300
|
+
serviceId?: string;
|
|
301
|
+
deploymentId?: string;
|
|
302
|
+
operation: string;
|
|
303
|
+
skillRef?: string;
|
|
304
|
+
startedAt: string;
|
|
305
|
+
finishedAt?: string;
|
|
306
|
+
outcome: "success" | "failure" | "unknown";
|
|
307
|
+
evidenceRefs: string[];
|
|
308
|
+
summary: string;
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
应记录命令/步骤类别、目标、时间、结果、相关错误与脱敏摘要;日志、密钥和敏感业务数据不能无节制持久化。**不能将 Agent 的事后总结等同于完整审计**;未来真正的执行工具需通过明确的事件上报接口传递执行结果。
|
|
313
|
+
|
|
314
|
+
### 7.4 Memory Scope 与证据
|
|
315
|
+
|
|
316
|
+
知识必须携带 `environmentId`、`serviceId`、`deploymentId`、可选服务版本/运行时版本与时间有效性,并提供来源操作/证据引用。单环境结论不能自动扩大为全局规则。`verified`、置信度必须有明确的校验依据,不能只靠模型自由判断。
|
|
317
|
+
|
|
318
|
+
新的或调整后的记忆类别可包括:
|
|
319
|
+
|
|
320
|
+
- `operation`:详细操作记录(优先存入事件存储,供记忆检索)。
|
|
321
|
+
- `observation`:某时刻的环境观察,带时间、有效期与证据。
|
|
322
|
+
- `knowledge` / `playbooks`:验证后的稳定排障知识和可复用流程。
|
|
323
|
+
- `open-questions`:无法确认的原因或配置差异。
|
|
324
|
+
- `decision` / `constraints`:设计决定与环境安全约束。
|
|
325
|
+
|
|
326
|
+
### 7.5 改进目标分流
|
|
327
|
+
|
|
328
|
+
| 经验发现 | 应更新对象 |
|
|
329
|
+
|---|---|
|
|
330
|
+
| 某节点日志路径与默认值不一致 | 环境/服务规则的覆盖提案 |
|
|
331
|
+
| 某安装流程缺少环境前置检查 | Skill 变更提案 |
|
|
332
|
+
| 某种失败拥有稳定可验证的排查流程 | Memory Playbook |
|
|
333
|
+
| 根因不明确 | Open Question,而非强行归纳知识 |
|
|
334
|
+
|
|
335
|
+
规则与 Skill 的**自动进化 = 自动发现候选 + 证据校验 + 影响分析 + 审核发布 + 可回滚**,不是模型直接改写配置或工作流。
|
|
336
|
+
|
|
337
|
+
## 8. 安全与治理约束
|
|
338
|
+
|
|
339
|
+
本插件会管理公司内部网络资产和可能的生产系统,因此安全为基础设计要求:
|
|
340
|
+
|
|
341
|
+
1. **凭据隔离**:密码、SSH Key、K8s token、kubeconfig 以加密 Vault 存放;Environment 和 Memory 仅保留引用,不向 Agent 回传明文。
|
|
342
|
+
2. **最小权限**:只读查询与远程写操作分离;凭据引用不等于自动授权使用。
|
|
343
|
+
3. **高风险操作确认**:服务重启、替换包、安装、删除、生产部署等需要显式授权;同时保留审计。
|
|
344
|
+
4. **作用域隔离**:会话默认环境是会话级数据;跨会话共享以访问控制为前提。
|
|
345
|
+
5. **敏感内容脱敏**:操作日志与上传的证据必须处理 Token、密码和敏感业务数据。
|
|
346
|
+
6. **规则安全**:变量模板解析不执行任意 JS/Shell;阻止循环引用、未定义引用和潜在危险的路径拼接。
|
|
347
|
+
7. **事实和推断分开**:来自规则的路径为“推导结果”,远程检查之后才可标记“已验证”。
|
|
348
|
+
8. **安全失败**:Skill 冲突、来源不符合、权限不足、凭据不可用时停止,不静默选择高风险替代方案。
|
|
349
|
+
|
|
350
|
+
## 9. V1 范围与演进路线
|
|
351
|
+
|
|
352
|
+
### P0:第一版必须实现
|
|
353
|
+
|
|
354
|
+
1. DSH TypeScript 插件基本骨架及本地共享数据持久化。
|
|
355
|
+
2. 手动配置环境、主机、K8s/Docker 资源、角色及合设关系。
|
|
356
|
+
3. 手动配置 Service Catalog、Git 地址与部署关系。
|
|
357
|
+
4. 通用模板规则 + 分层覆盖 + 规则来源解释。
|
|
358
|
+
5. 操作与 Skill 明确绑定、按作用域路由与可用性检查。
|
|
359
|
+
6. 所有 DSH 会话按需检索和解析 Service Context。
|
|
360
|
+
7. 最小 Web 配置界面或先以可验证的配置文件/管理接口实现,再补完整 UI。
|
|
361
|
+
|
|
362
|
+
### P1:形成最小经验闭环
|
|
363
|
+
|
|
364
|
+
1. 与独立 Memory 插件建立稳定公共契约。
|
|
365
|
+
2. 查询与当前服务、环境、操作相关的历史记忆。
|
|
366
|
+
3. 显式记录 Operation Record、Evidence Reference,生成候选知识。
|
|
367
|
+
4. 将潜在规则/Skill 改进建议放入待审核队列。
|
|
368
|
+
5. 实现会话默认环境的可靠持久化和恢复(以实际 DSH API 为准)。
|
|
369
|
+
|
|
370
|
+
### V1.1 / V2:持续演进
|
|
371
|
+
|
|
372
|
+
- SSH/SFTP、Web 浏览器、Docker/Kubernetes 远程执行适配器。
|
|
373
|
+
- 执行工具事件自动采集、日志脱敏、证据去重。
|
|
374
|
+
- 从 Git、Maven、Dockerfile、Helm 自动提取服务信息。
|
|
375
|
+
- Skill/规则修改提案、回归校验、影响分析、发布与回滚。
|
|
376
|
+
- 远程资产自动发现、多实例同步、多人协作与更完善的授权审计。
|
|
377
|
+
|
|
378
|
+
### 明确不在 V1 内承诺
|
|
379
|
+
|
|
380
|
+
- 全自动部署与自愈;
|
|
381
|
+
- 无人审核的生产环境规则修改或 Skill 自修改;
|
|
382
|
+
- 所有外部 SSH、浏览器插件操作自动且完整地纳入审计;
|
|
383
|
+
- 通过配置推导替代实际检查;
|
|
384
|
+
- 建设一整套独立的堡垒机/CMDB/集中调度平台。
|
|
385
|
+
|
|
386
|
+
## 10. 建议工程模块划分
|
|
387
|
+
|
|
388
|
+
```text
|
|
389
|
+
dsh-environment-manager/
|
|
390
|
+
├── src/
|
|
391
|
+
│ ├── domain/
|
|
392
|
+
│ │ ├── environment/
|
|
393
|
+
│ │ ├── service/
|
|
394
|
+
│ │ ├── deployment/
|
|
395
|
+
│ │ ├── rules/
|
|
396
|
+
│ │ └── operation-skill/
|
|
397
|
+
│ ├── storage/ # Registry 持久化、版本与加密凭据引用
|
|
398
|
+
│ ├── resolver/ # Context / Path / LogSource / Operation
|
|
399
|
+
│ ├── tools/ # DSH Agent 可调用的只读查询与路由工具
|
|
400
|
+
│ ├── session/ # 会话上下文绑定
|
|
401
|
+
│ ├── memory-bridge/ # 独立、可选的 Memory Adapter
|
|
402
|
+
│ └── web/ # 手工配置与规则预览 UI
|
|
403
|
+
├── tests/
|
|
404
|
+
└── package.json
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
技术倾向:TypeScript + Node.js、Zod 校验、本地 JSON 原子写入(初期)、Vitest 测试。存储技术为**候选实现**,未作最终决策。规则和凭据应分离存储;跨 Profile 与跨 DSH 实例的共享边界需明确。
|
|
408
|
+
|
|
409
|
+
## 11. 初版验收场景
|
|
410
|
+
|
|
411
|
+
| ID | 验收任务 | 预期结果 |
|
|
412
|
+
|---|---|---|
|
|
413
|
+
| AC-01 | 新建“测试环境 A”,配置一台同时承担管理面和业务面的主机 | 能保存多角色绑定,无重复主机资产 |
|
|
414
|
+
| AC-02 | 配置 K8s 集群、业务工作负载和 Docker 实例 | 可查询它们与环境、服务的部署关系 |
|
|
415
|
+
| AC-03 | 新建 aicoservice,指定 Git 地址与制品名 | 新会话可以检索统一 Service Catalog |
|
|
416
|
+
| AC-04 | 配置 Java 通用日志/JAR 规则与特定环境覆盖 | 正确计算路径并显示来源/覆盖关系 |
|
|
417
|
+
| AC-05 | 给测试环境的 aicoservice 绑定 redeploy Skill | `env_resolve_operation` 准确返回绑定及上下文 |
|
|
418
|
+
| AC-06 | 同时匹配两个同级 Skill | 系统报告冲突,不随机执行 |
|
|
419
|
+
| AC-07 | 新开两个会话读取同一环境,各自设置默认环境 | 数据共享,但会话上下文互不干扰 |
|
|
420
|
+
| AC-08 | Agent 查询某环境凭据 | 仅获取凭据引用和状态,不返回明文 |
|
|
421
|
+
| AC-09 | 完成一次日志检查并显式记录结果 | 记忆桥接可存储脱敏的操作摘要及证据引用 |
|
|
422
|
+
| AC-10 | 从经验提出路径规则变更 | 产生待审提案,不自动修改生产规则 |
|
|
423
|
+
|
|
424
|
+
## 12. 待确认问题与技术验证事项
|
|
425
|
+
|
|
426
|
+
以下不是阻断产品方向的问题,但进入编码前需要明确:
|
|
427
|
+
|
|
428
|
+
1. **DSH API**:目标 DSH 版本的插件注册、Tool 注册、Skill 发现/加载、Web UI 扩展点、会话元数据及插件服务依赖的实际接口。
|
|
429
|
+
2. **资产存储边界**:单机 DSH_HOME、多个 Profile、多个 DSH 实例之间的数据是否需要共享;并发写入与备份策略。
|
|
430
|
+
3. **凭据保管**:本机密钥管理方案、解锁策略、凭据轮换、只读查看权限与审计。
|
|
431
|
+
4. **角色与部署类型**:是否需要更多企业特有逻辑面、节点类别、服务组合或合设关系。
|
|
432
|
+
5. **Skill 生命周期**:同名 Skill 解析优先级、来源绑定、内容校验、版本兼容与权限检查。
|
|
433
|
+
6. **Memory Contract**:原先独立记忆插件的接口稳定性、记忆归属、证据存储、去重和回写审批机制。
|
|
434
|
+
7. **日志与路径约定**:真实服务的日志/JAR/Class/配置目录规范及其例外情况。
|
|
435
|
+
8. **操作语义**:`replace`、`redeploy`、`restart` 的企业内部具体边界,以及需要审批的动作集。
|
|
436
|
+
|
|
437
|
+
## 13. 当前共识与推荐下一步
|
|
438
|
+
|
|
439
|
+
### 已形成的方向共识
|
|
440
|
+
|
|
441
|
+
- **自研** DSH 原生 TypeScript 插件,服务企业内部定制场景。
|
|
442
|
+
- **手工配置优先**;所有会话支持按需查询。
|
|
443
|
+
- 环境拓扑不能简化成文件夹树,必须支持管理面、业务面与节点合设。
|
|
444
|
+
- 服务、Git、部署关系和日志/JAR/Class 规则独立建模,规则可以动态解析。
|
|
445
|
+
- 操作到 Skill 的绑定和精确路由为 V1 核心价值,不应等到后期。
|
|
446
|
+
- 与此前独立 Memory 插件协作,形成先查、执行、记录、提炼、审核回写闭环。
|
|
447
|
+
- Memory 不维护第二份环境事实;生产配置变更不允许凭单次观察自动生效。
|
|
448
|
+
|
|
449
|
+
### 推荐开发顺序
|
|
450
|
+
|
|
451
|
+
1. 固化 `EnvironmentRef`、`ServiceRef`、`DeploymentRef`、`RuleProfile`、`OperationBinding`、`SkillReference` 等 Schema。
|
|
452
|
+
2. 实现**纯 TypeScript** 的 Context Resolver、Rule Resolver、Operation Skill Router,先用测试数据验证组合逻辑与冲突处理。
|
|
453
|
+
3. 适配 DSH 插件入口、持久化、Tool 注册,让任意会话能实际检索。
|
|
454
|
+
4. 实现手工配置 UI 与路径/Skill 匹配预览。
|
|
455
|
+
5. 定义与 Memory 的公共契约(`OperationRecord`、`EvidenceRef`、`MemoryScope`、`RuleChangeProposal`),先跑通显式记录与查询。
|
|
456
|
+
6. 选一套真实但非生产环境的服务作为 PoC,以具体部署、日志路径和 Skill 绑定验证模型,再根据数据调整。
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## 附录 A:建议的最小 Service Context 输出
|
|
461
|
+
|
|
462
|
+
```json
|
|
463
|
+
{
|
|
464
|
+
"environmentId": "test-a",
|
|
465
|
+
"serviceId": "aicoservice",
|
|
466
|
+
"deploymentId": "deploy-001",
|
|
467
|
+
"runtimeMode": "kubernetes",
|
|
468
|
+
"source": {
|
|
469
|
+
"gitUrl": "https://git.example.internal/team/aicoservice.git"
|
|
470
|
+
},
|
|
471
|
+
"location": {
|
|
472
|
+
"clusterId": "cluster-01",
|
|
473
|
+
"namespace": "dv-sop",
|
|
474
|
+
"workload": { "kind": "Deployment", "name": "aicoservice" }
|
|
475
|
+
},
|
|
476
|
+
"logSource": {
|
|
477
|
+
"kind": "pod-logs",
|
|
478
|
+
"namespace": "dv-sop",
|
|
479
|
+
"workload": "aicoservice"
|
|
480
|
+
},
|
|
481
|
+
"resolvedBy": {
|
|
482
|
+
"ruleProfile": "company-java",
|
|
483
|
+
"status": "configured-not-verified"
|
|
484
|
+
},
|
|
485
|
+
"credentials": [{ "credentialRef": "cred-001", "status": "configured" }]
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
> 所有环境地址、Git URL、路径、服务与 Skill 名仅作建模示例,不代表现网真实数据。
|
|
490
|
+
|
|
491
|
+
## 附录 B:一句话总结
|
|
492
|
+
|
|
493
|
+
**这是一个让 DSH Agent 理解“去哪个环境、找哪个服务、用哪些规则、调用哪个 Skill、参考哪些经验”,并在操作后持续积累可信知识的企业运维上下文插件。**
|