@yg-toolkit/datapull 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 +74 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +540 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/config/dotenv.d.ts +4 -0
- package/dist/config/dotenv.d.ts.map +1 -0
- package/dist/config/dotenv.js +47 -0
- package/dist/config/dotenv.js.map +1 -0
- package/dist/config/paths.d.ts +8 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +24 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +59 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +73 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/security.d.ts +12 -0
- package/dist/config/security.d.ts.map +1 -0
- package/dist/config/security.js +86 -0
- package/dist/config/security.js.map +1 -0
- package/dist/config/store.d.ts +19 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +120 -0
- package/dist/config/store.js.map +1 -0
- package/dist/connections/service.d.ts +34 -0
- package/dist/connections/service.d.ts.map +1 -0
- package/dist/connections/service.js +220 -0
- package/dist/connections/service.js.map +1 -0
- package/dist/core/errors.d.ts +9 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +29 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/output.d.ts +16 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +91 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/runtime.d.ts +3 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +14 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/doctor/service.d.ts +9 -0
- package/dist/doctor/service.d.ts.map +1 -0
- package/dist/doctor/service.js +81 -0
- package/dist/doctor/service.js.map +1 -0
- package/dist/exporters/exporter.d.ts +10 -0
- package/dist/exporters/exporter.d.ts.map +1 -0
- package/dist/exporters/exporter.js +2 -0
- package/dist/exporters/exporter.js.map +1 -0
- package/dist/exporters/factory.d.ts +4 -0
- package/dist/exporters/factory.d.ts.map +1 -0
- package/dist/exporters/factory.js +11 -0
- package/dist/exporters/factory.js.map +1 -0
- package/dist/exporters/mysql.d.ts +16 -0
- package/dist/exporters/mysql.d.ts.map +1 -0
- package/dist/exporters/mysql.js +177 -0
- package/dist/exporters/mysql.js.map +1 -0
- package/dist/exporters/objects.d.ts +4 -0
- package/dist/exporters/objects.d.ts.map +1 -0
- package/dist/exporters/objects.js +32 -0
- package/dist/exporters/objects.js.map +1 -0
- package/dist/exporters/postgresql.d.ts +16 -0
- package/dist/exporters/postgresql.d.ts.map +1 -0
- package/dist/exporters/postgresql.js +228 -0
- package/dist/exporters/postgresql.js.map +1 -0
- package/dist/exporters/sql.d.ts +5 -0
- package/dist/exporters/sql.d.ts.map +1 -0
- package/dist/exporters/sql.js +14 -0
- package/dist/exporters/sql.js.map +1 -0
- package/dist/exporters/sqlserver.d.ts +11 -0
- package/dist/exporters/sqlserver.d.ts.map +1 -0
- package/dist/exporters/sqlserver.js +126 -0
- package/dist/exporters/sqlserver.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive/connections.d.ts +16 -0
- package/dist/interactive/connections.d.ts.map +1 -0
- package/dist/interactive/connections.js +97 -0
- package/dist/interactive/connections.js.map +1 -0
- package/dist/interactive/wizard.d.ts +4 -0
- package/dist/interactive/wizard.d.ts.map +1 -0
- package/dist/interactive/wizard.js +284 -0
- package/dist/interactive/wizard.js.map +1 -0
- package/dist/output/transaction.d.ts +39 -0
- package/dist/output/transaction.d.ts.map +1 -0
- package/dist/output/transaction.js +329 -0
- package/dist/output/transaction.js.map +1 -0
- package/dist/process/runner.d.ts +14 -0
- package/dist/process/runner.d.ts.map +1 -0
- package/dist/process/runner.js +43 -0
- package/dist/process/runner.js.map +1 -0
- package/dist/pull/service.d.ts +24 -0
- package/dist/pull/service.d.ts.map +1 -0
- package/dist/pull/service.js +102 -0
- package/dist/pull/service.js.map +1 -0
- package/dist/skills/installer.d.ts +25 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +177 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/skills/targets.d.ts +12 -0
- package/dist/skills/targets.d.ts.map +1 -0
- package/dist/skills/targets.js +37 -0
- package/dist/skills/targets.js.map +1 -0
- package/dist/tools/catalog.d.ts +17 -0
- package/dist/tools/catalog.d.ts.map +1 -0
- package/dist/tools/catalog.js +161 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/manager.d.ts +21 -0
- package/dist/tools/manager.d.ts.map +1 -0
- package/dist/tools/manager.js +110 -0
- package/dist/tools/manager.js.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +3 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +43 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/path.d.ts +4 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +47 -0
- package/dist/utils/path.js.map +1 -0
- package/package.json +68 -0
- package/resources/ci/mysql-seed.sql +36 -0
- package/resources/ci/postgresql-seed.sql +45 -0
- package/resources/ci/sqlserver-seed.sql +57 -0
- package/resources/compatibility-matrix.json +315 -0
- package/resources/export-sqlserver.ps1 +257 -0
- package/skill/SKILL.md +42 -0
- package/skill/agents/openai.yaml +6 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"policy": "仅实际验证通过的组合可声明支持;空矩阵表示开发包尚未完成发布验收。",
|
|
4
|
+
"requiredPlatforms": [
|
|
5
|
+
"windows-10-11",
|
|
6
|
+
"macos",
|
|
7
|
+
"ubuntu-lts",
|
|
8
|
+
"debian-stable",
|
|
9
|
+
"fedora-current"
|
|
10
|
+
],
|
|
11
|
+
"requiredEngines": [
|
|
12
|
+
"mysql",
|
|
13
|
+
"postgresql",
|
|
14
|
+
"sqlserver"
|
|
15
|
+
],
|
|
16
|
+
"requiredSkillTargets": [
|
|
17
|
+
"codex:user",
|
|
18
|
+
"codex:project",
|
|
19
|
+
"claude:user",
|
|
20
|
+
"claude:project",
|
|
21
|
+
"cursor:user",
|
|
22
|
+
"cursor:project",
|
|
23
|
+
"trae:user",
|
|
24
|
+
"trae:project"
|
|
25
|
+
],
|
|
26
|
+
"verified": [
|
|
27
|
+
{
|
|
28
|
+
"engine": "mysql",
|
|
29
|
+
"serverVersion": "8.4.11",
|
|
30
|
+
"clientTools": "mysql=mysql Ver 26.7.0 for Win64 on x86_64 (MySQL Community Server - GPL)",
|
|
31
|
+
"platform": "windows-10-11",
|
|
32
|
+
"osVersion": "win32 x64 self-hosted",
|
|
33
|
+
"nodeVersion": "v22.12.0",
|
|
34
|
+
"installAdapterVersion": 1,
|
|
35
|
+
"verifiedAt": "2026-09-18T14:59:41.860Z",
|
|
36
|
+
"result": "passed",
|
|
37
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"engine": "postgresql",
|
|
41
|
+
"serverVersion": "18.6",
|
|
42
|
+
"clientTools": "psql=psql (PostgreSQL) 18.3; pg_dump=pg_dump (PostgreSQL) 18.3",
|
|
43
|
+
"platform": "windows-10-11",
|
|
44
|
+
"osVersion": "win32 x64 self-hosted",
|
|
45
|
+
"nodeVersion": "v22.12.0",
|
|
46
|
+
"installAdapterVersion": 1,
|
|
47
|
+
"verifiedAt": "2026-09-18T14:59:47.825Z",
|
|
48
|
+
"result": "passed",
|
|
49
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"engine": "sqlserver",
|
|
53
|
+
"serverVersion": "15.0.2000.5",
|
|
54
|
+
"clientTools": "sqlcmd=Microsoft (R) SQL Server Command Line Tool; pwsh=PowerShell 7.6.6; sqlserver-module=22.4.5.1",
|
|
55
|
+
"platform": "windows-10-11",
|
|
56
|
+
"osVersion": "win32 x64 self-hosted",
|
|
57
|
+
"nodeVersion": "v22.12.0",
|
|
58
|
+
"installAdapterVersion": 1,
|
|
59
|
+
"verifiedAt": "2026-09-18T14:59:58.184Z",
|
|
60
|
+
"result": "passed",
|
|
61
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"engine": "mysql",
|
|
65
|
+
"serverVersion": "8.4.11",
|
|
66
|
+
"clientTools": "mysql=mysql Ver 26.7.0 for macos14.8 on x86_64 (Homebrew)",
|
|
67
|
+
"platform": "macos",
|
|
68
|
+
"osVersion": "darwin x64 macos15",
|
|
69
|
+
"nodeVersion": "v22.12.0",
|
|
70
|
+
"installAdapterVersion": 1,
|
|
71
|
+
"verifiedAt": "2026-09-18T15:32:31.837Z",
|
|
72
|
+
"result": "passed",
|
|
73
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"engine": "postgresql",
|
|
77
|
+
"serverVersion": "18.6",
|
|
78
|
+
"clientTools": "psql=psql (PostgreSQL) 18.6; pg_dump=pg_dump (PostgreSQL) 18.6",
|
|
79
|
+
"platform": "macos",
|
|
80
|
+
"osVersion": "darwin x64 macos15",
|
|
81
|
+
"nodeVersion": "v22.12.0",
|
|
82
|
+
"installAdapterVersion": 1,
|
|
83
|
+
"verifiedAt": "2026-09-18T15:33:11.039Z",
|
|
84
|
+
"result": "passed",
|
|
85
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"engine": "sqlserver",
|
|
89
|
+
"serverVersion": "15.0.2000.5",
|
|
90
|
+
"clientTools": "sqlcmd=sqlcmd: Install/Create/Query SQL Server, Azure SQL, and Tools; pwsh=PowerShell 7.6.4; sqlserver-module=22.4.5.1",
|
|
91
|
+
"platform": "macos",
|
|
92
|
+
"osVersion": "darwin x64 macos15",
|
|
93
|
+
"nodeVersion": "v22.12.0",
|
|
94
|
+
"installAdapterVersion": 1,
|
|
95
|
+
"verifiedAt": "2026-09-18T15:34:19.252Z",
|
|
96
|
+
"result": "passed",
|
|
97
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"engine": "mysql",
|
|
101
|
+
"serverVersion": "8.4.11",
|
|
102
|
+
"clientTools": "mysql=mysql Ver 8.0.46-0ubuntu0.24.04.4 for Linux on x86_64 ((Ubuntu))",
|
|
103
|
+
"platform": "ubuntu-lts",
|
|
104
|
+
"osVersion": "linux x64 ubuntu24",
|
|
105
|
+
"nodeVersion": "v22.12.0",
|
|
106
|
+
"installAdapterVersion": 1,
|
|
107
|
+
"verifiedAt": "2026-09-18T15:31:37.703Z",
|
|
108
|
+
"result": "passed",
|
|
109
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"engine": "postgresql",
|
|
113
|
+
"serverVersion": "18.6",
|
|
114
|
+
"clientTools": "psql=psql (PostgreSQL) 18.6 (Ubuntu 18.6-1.pgdg24.04+2); pg_dump=pg_dump (PostgreSQL) 18.6 (Ubuntu 18.6-1.pgdg24.04+2)",
|
|
115
|
+
"platform": "ubuntu-lts",
|
|
116
|
+
"osVersion": "linux x64 ubuntu24",
|
|
117
|
+
"nodeVersion": "v22.12.0",
|
|
118
|
+
"installAdapterVersion": 1,
|
|
119
|
+
"verifiedAt": "2026-09-18T15:32:29.546Z",
|
|
120
|
+
"result": "passed",
|
|
121
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"engine": "sqlserver",
|
|
125
|
+
"serverVersion": "15.0.2000.5",
|
|
126
|
+
"clientTools": "sqlcmd=Microsoft (R) SQL Server Command Line Tool; pwsh=PowerShell 7.6.6; sqlserver-module=22.4.5.1",
|
|
127
|
+
"platform": "ubuntu-lts",
|
|
128
|
+
"osVersion": "linux x64 ubuntu24",
|
|
129
|
+
"nodeVersion": "v22.12.0",
|
|
130
|
+
"installAdapterVersion": 1,
|
|
131
|
+
"verifiedAt": "2026-09-18T15:33:59.284Z",
|
|
132
|
+
"result": "passed",
|
|
133
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"engine": "mysql",
|
|
137
|
+
"serverVersion": "8.4.11",
|
|
138
|
+
"clientTools": "mysql=mysql Ver 8.4.11 for Linux on x86_64 (MySQL Community Server - GPL)",
|
|
139
|
+
"platform": "debian-stable",
|
|
140
|
+
"osVersion": "linux x64 self-hosted",
|
|
141
|
+
"nodeVersion": "v22.12.0",
|
|
142
|
+
"installAdapterVersion": 1,
|
|
143
|
+
"verifiedAt": "2026-09-18T15:23:52.618Z",
|
|
144
|
+
"result": "passed",
|
|
145
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"engine": "postgresql",
|
|
149
|
+
"serverVersion": "18.6",
|
|
150
|
+
"clientTools": "psql=psql (PostgreSQL) 18.6 (Debian 18.6-1.pgdg13+2); pg_dump=pg_dump (PostgreSQL) 18.6 (Debian 18.6-1.pgdg13+2)",
|
|
151
|
+
"platform": "debian-stable",
|
|
152
|
+
"osVersion": "linux x64 self-hosted",
|
|
153
|
+
"nodeVersion": "v22.12.0",
|
|
154
|
+
"installAdapterVersion": 1,
|
|
155
|
+
"verifiedAt": "2026-09-18T15:23:57.196Z",
|
|
156
|
+
"result": "passed",
|
|
157
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"engine": "sqlserver",
|
|
161
|
+
"serverVersion": "15.0.2000.5",
|
|
162
|
+
"clientTools": "sqlcmd=sqlcmd: Install/Create/Query SQL Server, Azure SQL, and Tools; pwsh=PowerShell 7.6.6; sqlserver-module=22.4.5.1",
|
|
163
|
+
"platform": "debian-stable",
|
|
164
|
+
"osVersion": "linux x64 self-hosted",
|
|
165
|
+
"nodeVersion": "v22.12.0",
|
|
166
|
+
"installAdapterVersion": 1,
|
|
167
|
+
"verifiedAt": "2026-09-18T15:24:10.099Z",
|
|
168
|
+
"result": "passed",
|
|
169
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"engine": "mysql",
|
|
173
|
+
"serverVersion": "8.4.11",
|
|
174
|
+
"clientTools": "mysql=mysql Ver 8.4.10 for Linux on x86_64 (Source distribution)",
|
|
175
|
+
"platform": "fedora-current",
|
|
176
|
+
"osVersion": "linux x64 self-hosted",
|
|
177
|
+
"nodeVersion": "v22.12.0",
|
|
178
|
+
"installAdapterVersion": 1,
|
|
179
|
+
"verifiedAt": "2026-09-18T15:29:22.634Z",
|
|
180
|
+
"result": "passed",
|
|
181
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"engine": "postgresql",
|
|
185
|
+
"serverVersion": "18.6",
|
|
186
|
+
"clientTools": "psql=psql (PostgreSQL) 18.6; pg_dump=pg_dump (PostgreSQL) 18.6",
|
|
187
|
+
"platform": "fedora-current",
|
|
188
|
+
"osVersion": "linux x64 self-hosted",
|
|
189
|
+
"nodeVersion": "v22.12.0",
|
|
190
|
+
"installAdapterVersion": 1,
|
|
191
|
+
"verifiedAt": "2026-09-18T15:29:27.221Z",
|
|
192
|
+
"result": "passed",
|
|
193
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"engine": "sqlserver",
|
|
197
|
+
"serverVersion": "15.0.2000.5",
|
|
198
|
+
"clientTools": "sqlcmd=sqlcmd: Install/Create/Query SQL Server, Azure SQL, and Tools; pwsh=PowerShell 7.6.6; sqlserver-module=22.4.5.1",
|
|
199
|
+
"platform": "fedora-current",
|
|
200
|
+
"osVersion": "linux x64 self-hosted",
|
|
201
|
+
"nodeVersion": "v22.12.0",
|
|
202
|
+
"installAdapterVersion": 1,
|
|
203
|
+
"verifiedAt": "2026-09-18T15:29:35.917Z",
|
|
204
|
+
"result": "passed",
|
|
205
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
"platformVerifications": [
|
|
209
|
+
{
|
|
210
|
+
"platform": "windows-10-11",
|
|
211
|
+
"osVersion": "win32 x64 self-hosted",
|
|
212
|
+
"nodeVersion": "v22.12.0",
|
|
213
|
+
"npmInstall": true,
|
|
214
|
+
"skillTargets": [
|
|
215
|
+
"codex:user",
|
|
216
|
+
"codex:project",
|
|
217
|
+
"claude:user",
|
|
218
|
+
"claude:project",
|
|
219
|
+
"cursor:user",
|
|
220
|
+
"cursor:project",
|
|
221
|
+
"trae:user",
|
|
222
|
+
"trae:project"
|
|
223
|
+
],
|
|
224
|
+
"agentDiscoveryVerified": false,
|
|
225
|
+
"agentDiscoveryNote": "CI 已验证 8 个用户级/项目级安装路径与回验;Windows 上 Codex 用户级和项目级实际发现通过。Claude Code 因当前账号返回 402 未完成,Cursor、Trae 因桌面自动化运行时不可用未完成,因此整个平台仍不标记为发现通过。",
|
|
226
|
+
"verifiedAt": "2026-09-18T14:59:58.840Z",
|
|
227
|
+
"result": "passed",
|
|
228
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"platform": "macos",
|
|
232
|
+
"osVersion": "darwin x64 macos15",
|
|
233
|
+
"nodeVersion": "v22.12.0",
|
|
234
|
+
"npmInstall": true,
|
|
235
|
+
"skillTargets": [
|
|
236
|
+
"codex:user",
|
|
237
|
+
"codex:project",
|
|
238
|
+
"claude:user",
|
|
239
|
+
"claude:project",
|
|
240
|
+
"cursor:user",
|
|
241
|
+
"cursor:project",
|
|
242
|
+
"trae:user",
|
|
243
|
+
"trae:project"
|
|
244
|
+
],
|
|
245
|
+
"agentDiscoveryVerified": false,
|
|
246
|
+
"agentDiscoveryNote": "CI 只验证安装路径与回验;Codex、Claude Code、Cursor、Trae 实际发现仍需专用验收机确认。",
|
|
247
|
+
"verifiedAt": "2026-09-18T15:34:20.175Z",
|
|
248
|
+
"result": "passed",
|
|
249
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"platform": "ubuntu-lts",
|
|
253
|
+
"osVersion": "linux x64 ubuntu24",
|
|
254
|
+
"nodeVersion": "v22.12.0",
|
|
255
|
+
"npmInstall": true,
|
|
256
|
+
"skillTargets": [
|
|
257
|
+
"codex:user",
|
|
258
|
+
"codex:project",
|
|
259
|
+
"claude:user",
|
|
260
|
+
"claude:project",
|
|
261
|
+
"cursor:user",
|
|
262
|
+
"cursor:project",
|
|
263
|
+
"trae:user",
|
|
264
|
+
"trae:project"
|
|
265
|
+
],
|
|
266
|
+
"agentDiscoveryVerified": false,
|
|
267
|
+
"agentDiscoveryNote": "CI 只验证安装路径与回验;Codex、Claude Code、Cursor、Trae 实际发现仍需专用验收机确认。",
|
|
268
|
+
"verifiedAt": "2026-09-18T15:33:59.877Z",
|
|
269
|
+
"result": "passed",
|
|
270
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"platform": "debian-stable",
|
|
274
|
+
"osVersion": "linux x64 self-hosted",
|
|
275
|
+
"nodeVersion": "v22.12.0",
|
|
276
|
+
"npmInstall": true,
|
|
277
|
+
"skillTargets": [
|
|
278
|
+
"codex:user",
|
|
279
|
+
"codex:project",
|
|
280
|
+
"claude:user",
|
|
281
|
+
"claude:project",
|
|
282
|
+
"cursor:user",
|
|
283
|
+
"cursor:project",
|
|
284
|
+
"trae:user",
|
|
285
|
+
"trae:project"
|
|
286
|
+
],
|
|
287
|
+
"agentDiscoveryVerified": false,
|
|
288
|
+
"agentDiscoveryNote": "CI 只验证安装路径与回验;Codex、Claude Code、Cursor、Trae 实际发现仍需专用验收机确认。",
|
|
289
|
+
"verifiedAt": "2026-09-18T15:24:10.429Z",
|
|
290
|
+
"result": "passed",
|
|
291
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"platform": "fedora-current",
|
|
295
|
+
"osVersion": "linux x64 self-hosted",
|
|
296
|
+
"nodeVersion": "v22.12.0",
|
|
297
|
+
"npmInstall": true,
|
|
298
|
+
"skillTargets": [
|
|
299
|
+
"codex:user",
|
|
300
|
+
"codex:project",
|
|
301
|
+
"claude:user",
|
|
302
|
+
"claude:project",
|
|
303
|
+
"cursor:user",
|
|
304
|
+
"cursor:project",
|
|
305
|
+
"trae:user",
|
|
306
|
+
"trae:project"
|
|
307
|
+
],
|
|
308
|
+
"agentDiscoveryVerified": false,
|
|
309
|
+
"agentDiscoveryNote": "CI 只验证安装路径与回验;Codex、Claude Code、Cursor、Trae 实际发现仍需专用验收机确认。",
|
|
310
|
+
"verifiedAt": "2026-09-18T15:29:36.246Z",
|
|
311
|
+
"result": "passed",
|
|
312
|
+
"gitSha": "2ededdb9436e49fd71a0d5652e2f86bca62a597b"
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
param(
|
|
2
|
+
[Parameter(Mandatory = $true)]
|
|
3
|
+
[string]$OutputDirectory
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
$ErrorActionPreference = 'Stop'
|
|
7
|
+
$currentStage = '初始化'
|
|
8
|
+
|
|
9
|
+
function Set-ExportStage {
|
|
10
|
+
param([string]$Stage)
|
|
11
|
+
$script:currentStage = $Stage
|
|
12
|
+
[Console]::Error.WriteLine("[datapull] SQL Server 导出阶段:$Stage")
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function Get-RequiredEnvironmentValue {
|
|
16
|
+
param([string]$Name)
|
|
17
|
+
$value = [Environment]::GetEnvironmentVariable($Name, 'Process')
|
|
18
|
+
if ([string]::IsNullOrWhiteSpace($value)) {
|
|
19
|
+
throw "缺少内部环境变量:$Name"
|
|
20
|
+
}
|
|
21
|
+
return $value
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function Get-SafeFileStem {
|
|
25
|
+
param([string]$Identifier)
|
|
26
|
+
$readable = [regex]::Replace($Identifier, '[<>:"/\\|?*\x00-\x1f]', '_')
|
|
27
|
+
$readable = [regex]::Replace($readable, '\s+', '_').Trim('.', ' ', '_')
|
|
28
|
+
if ([string]::IsNullOrWhiteSpace($readable)) { $readable = 'object' }
|
|
29
|
+
if ($readable.Length -gt 100) { $readable = $readable.Substring(0, 100).TrimEnd('.', ' ') }
|
|
30
|
+
$sha = [System.Security.Cryptography.SHA256]::Create()
|
|
31
|
+
try {
|
|
32
|
+
$bytes = [System.Text.Encoding]::UTF8.GetBytes($Identifier)
|
|
33
|
+
$hash = [System.BitConverter]::ToString($sha.ComputeHash($bytes)).Replace('-', '').ToLowerInvariant().Substring(0, 10)
|
|
34
|
+
}
|
|
35
|
+
finally { $sha.Dispose() }
|
|
36
|
+
return "$readable--$hash"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function Write-Utf8NoBom {
|
|
40
|
+
param([string]$Path, [string]$Content)
|
|
41
|
+
$encoding = New-Object System.Text.UTF8Encoding($false)
|
|
42
|
+
[System.IO.File]::WriteAllText($Path, $Content, $encoding)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
$selectedTypes = @((Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_TYPES') | ConvertFrom-Json)
|
|
46
|
+
$records = New-Object System.Collections.Generic.List[object]
|
|
47
|
+
$objectsDirectory = Join-Path $OutputDirectory '_objects'
|
|
48
|
+
[System.IO.Directory]::CreateDirectory($objectsDirectory) | Out-Null
|
|
49
|
+
|
|
50
|
+
function Test-TypeSelected {
|
|
51
|
+
param([string]$ObjectType)
|
|
52
|
+
return $selectedTypes -contains $ObjectType
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function Add-Record {
|
|
56
|
+
param(
|
|
57
|
+
[string]$Ddl,
|
|
58
|
+
[string]$ObjectType,
|
|
59
|
+
[AllowEmptyString()][string]$Schema,
|
|
60
|
+
[string]$Name,
|
|
61
|
+
[string]$Identity
|
|
62
|
+
)
|
|
63
|
+
if (-not (Test-TypeSelected -ObjectType $ObjectType)) { return }
|
|
64
|
+
if ([string]::IsNullOrWhiteSpace($Ddl)) { throw "对象 $Identity 的 DDL 为空。" }
|
|
65
|
+
$fileName = "$(Get-SafeFileStem -Identifier "$ObjectType.$Identity").sql"
|
|
66
|
+
$relativePath = "_objects/$fileName"
|
|
67
|
+
Write-Utf8NoBom -Path (Join-Path $objectsDirectory $fileName) -Content ($Ddl.TrimEnd() + "`n")
|
|
68
|
+
$records.Add([pscustomobject]@{
|
|
69
|
+
objectType = $ObjectType
|
|
70
|
+
schema = if ([string]::IsNullOrWhiteSpace($Schema)) { $null } else { $Schema }
|
|
71
|
+
name = $Name
|
|
72
|
+
identity = $Identity
|
|
73
|
+
file = $relativePath
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function Add-SmoRecord {
|
|
78
|
+
param(
|
|
79
|
+
[object]$Object,
|
|
80
|
+
[string]$ObjectType,
|
|
81
|
+
[AllowEmptyString()][string]$Schema,
|
|
82
|
+
[string]$Name,
|
|
83
|
+
[string]$Identity,
|
|
84
|
+
[object]$Scripter
|
|
85
|
+
)
|
|
86
|
+
if (-not (Test-TypeSelected -ObjectType $ObjectType)) { return }
|
|
87
|
+
$fragments = @($Scripter.Script(@($Object.Urn)))
|
|
88
|
+
if ($fragments.Count -eq 0) { throw "对象 $Identity 的 DDL 为空。" }
|
|
89
|
+
$ddl = (($fragments | ForEach-Object { $_.ToString().TrimEnd() }) -join "`nGO`n")
|
|
90
|
+
Add-Record -Ddl $ddl -ObjectType $ObjectType -Schema $Schema -Name $Name -Identity $Identity
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
Set-ExportStage -Stage '加载 SqlServer 模块'
|
|
94
|
+
try {
|
|
95
|
+
Import-Module SqlServer -ErrorAction Stop
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
throw "缺少或无法加载 PowerShell SqlServer 模块。请运行 Install-Module SqlServer -Scope CurrentUser。原始错误:$($_.Exception.Message)"
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
$hostName = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_HOST'
|
|
102
|
+
$port = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_PORT'
|
|
103
|
+
$databaseName = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_DATABASE'
|
|
104
|
+
$authentication = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_AUTH'
|
|
105
|
+
$encrypt = (Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_ENCRYPT') -eq 'true'
|
|
106
|
+
$trustCertificate = (Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_TRUST_CERT') -eq 'true'
|
|
107
|
+
|
|
108
|
+
if (-not $encrypt) {
|
|
109
|
+
throw 'DataPull 要求 SQL Server 启用加密。'
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
$serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
|
|
113
|
+
$serverConnection.ServerInstance = "$hostName,$port"
|
|
114
|
+
if ($serverConnection.PSObject.Properties.Name -contains 'ConnectTimeout') {
|
|
115
|
+
$serverConnection.ConnectTimeout = 30
|
|
116
|
+
}
|
|
117
|
+
if ($serverConnection.PSObject.Properties.Name -contains 'StatementTimeout') {
|
|
118
|
+
$serverConnection.StatementTimeout = 120
|
|
119
|
+
}
|
|
120
|
+
if ($authentication -eq 'integrated') {
|
|
121
|
+
$serverConnection.LoginSecure = $true
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
$serverConnection.LoginSecure = $false
|
|
125
|
+
$serverConnection.Login = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_USER'
|
|
126
|
+
$serverConnection.Password = Get-RequiredEnvironmentValue -Name 'DATAPULL_SQLSERVER_PASSWORD'
|
|
127
|
+
}
|
|
128
|
+
if ($serverConnection.PSObject.Properties.Name -contains 'EncryptConnection') {
|
|
129
|
+
$serverConnection.EncryptConnection = $true
|
|
130
|
+
}
|
|
131
|
+
if ($serverConnection.PSObject.Properties.Name -contains 'TrustServerCertificate') {
|
|
132
|
+
$serverConnection.TrustServerCertificate = $trustCertificate
|
|
133
|
+
}
|
|
134
|
+
elseif ($trustCertificate) {
|
|
135
|
+
throw '当前 PowerShell SqlServer 模块不支持 TrustServerCertificate,请升级模块后重试。'
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($serverConnection)
|
|
139
|
+
try {
|
|
140
|
+
Set-ExportStage -Stage '连接目标数据库'
|
|
141
|
+
$server.ConnectionContext.Connect()
|
|
142
|
+
# 过滤对象时会访问这些属性;预批量加载可避免高延迟连接上的逐对象往返查询。
|
|
143
|
+
[string[]]$schemaObjectFields = @('IsSystemObject', 'Schema', 'Name')
|
|
144
|
+
[string[]]$namedObjectFields = @('IsSystemObject', 'Name')
|
|
145
|
+
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Table], $schemaObjectFields)
|
|
146
|
+
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.View], $schemaObjectFields)
|
|
147
|
+
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.UserDefinedFunction], $schemaObjectFields)
|
|
148
|
+
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.StoredProcedure], $schemaObjectFields)
|
|
149
|
+
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Trigger], $namedObjectFields)
|
|
150
|
+
Set-ExportStage -Stage '读取数据库元数据'
|
|
151
|
+
$database = $server.Databases[$databaseName]
|
|
152
|
+
if ($null -eq $database) { throw "数据库不存在或当前账户不可见:$databaseName" }
|
|
153
|
+
$database.Refresh()
|
|
154
|
+
|
|
155
|
+
# 表需要完整的约束和索引;视图、存储程序等对象使用轻量选项,避免触发无关元数据查询。
|
|
156
|
+
$tableOptions = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
|
|
157
|
+
$tableOptions.ScriptSchema = $true
|
|
158
|
+
$tableOptions.ScriptData = $false
|
|
159
|
+
$tableOptions.SchemaQualify = $true
|
|
160
|
+
$tableOptions.IncludeHeaders = $false
|
|
161
|
+
$tableOptions.IncludeIfNotExists = $false
|
|
162
|
+
$tableOptions.ScriptOwner = $false
|
|
163
|
+
$tableOptions.Permissions = $false
|
|
164
|
+
$tableOptions.NoFileGroup = $true
|
|
165
|
+
$tableOptions.DriAll = $true
|
|
166
|
+
$tableOptions.Indexes = $true
|
|
167
|
+
$tableOptions.Triggers = $false
|
|
168
|
+
$tableOptions.ExtendedProperties = $true
|
|
169
|
+
|
|
170
|
+
$objectOptions = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
|
|
171
|
+
$objectOptions.ScriptSchema = $true
|
|
172
|
+
$objectOptions.ScriptData = $false
|
|
173
|
+
$objectOptions.SchemaQualify = $true
|
|
174
|
+
$objectOptions.IncludeHeaders = $false
|
|
175
|
+
$objectOptions.IncludeIfNotExists = $false
|
|
176
|
+
$objectOptions.ScriptOwner = $false
|
|
177
|
+
$objectOptions.Permissions = $false
|
|
178
|
+
$objectOptions.NoFileGroup = $true
|
|
179
|
+
$objectOptions.DriAll = $false
|
|
180
|
+
$objectOptions.Indexes = $false
|
|
181
|
+
$objectOptions.Triggers = $false
|
|
182
|
+
$objectOptions.ExtendedProperties = $false
|
|
183
|
+
|
|
184
|
+
$tableScripter = New-Object Microsoft.SqlServer.Management.Smo.Scripter($server)
|
|
185
|
+
$tableScripter.Options = $tableOptions
|
|
186
|
+
$objectScripter = New-Object Microsoft.SqlServer.Management.Smo.Scripter($server)
|
|
187
|
+
$objectScripter.Options = $objectOptions
|
|
188
|
+
|
|
189
|
+
if (Test-TypeSelected -ObjectType 'schema') {
|
|
190
|
+
Set-ExportStage -Stage '导出 schema'
|
|
191
|
+
$systemSchemas = @('dbo', 'guest', 'sys', 'INFORMATION_SCHEMA')
|
|
192
|
+
foreach ($schemaObject in @($database.Schemas | Where-Object { $systemSchemas -notcontains $_.Name })) {
|
|
193
|
+
$escapedSchema = $schemaObject.Name.Replace(']', ']]')
|
|
194
|
+
Add-Record -Ddl "CREATE SCHEMA [$escapedSchema];" -ObjectType 'schema' -Schema $schemaObject.Name -Name $schemaObject.Name -Identity $schemaObject.Name
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
Set-ExportStage -Stage '读取 table 清单'
|
|
199
|
+
$tables = @($database.Tables | Where-Object { -not $_.IsSystemObject })
|
|
200
|
+
Set-ExportStage -Stage "脚本化 table 与表级 trigger($($tables.Count) 个 table)"
|
|
201
|
+
foreach ($table in $tables) {
|
|
202
|
+
Add-SmoRecord -Object $table -ObjectType 'table' -Schema $table.Schema -Name $table.Name -Identity "$($table.Schema).$($table.Name)" -Scripter $tableScripter
|
|
203
|
+
foreach ($trigger in @($table.Triggers | Where-Object { -not $_.IsSystemObject })) {
|
|
204
|
+
Add-SmoRecord -Object $trigger -ObjectType 'trigger' -Schema $table.Schema -Name "$($table.Name).$($trigger.Name)" -Identity "$($table.Schema).$($table.Name).$($trigger.Name)" -Scripter $objectScripter
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
Set-ExportStage -Stage '读取 view 清单'
|
|
208
|
+
$views = @($database.Views | Where-Object { -not $_.IsSystemObject })
|
|
209
|
+
Set-ExportStage -Stage "脚本化 view($($views.Count) 个)"
|
|
210
|
+
foreach ($view in $views) {
|
|
211
|
+
Add-SmoRecord -Object $view -ObjectType 'view' -Schema $view.Schema -Name $view.Name -Identity "$($view.Schema).$($view.Name)" -Scripter $objectScripter
|
|
212
|
+
}
|
|
213
|
+
Set-ExportStage -Stage '导出 function'
|
|
214
|
+
foreach ($function in @($database.UserDefinedFunctions | Where-Object { -not $_.IsSystemObject })) {
|
|
215
|
+
Add-SmoRecord -Object $function -ObjectType 'function' -Schema $function.Schema -Name $function.Name -Identity "$($function.Schema).$($function.Name)" -Scripter $objectScripter
|
|
216
|
+
}
|
|
217
|
+
Set-ExportStage -Stage '导出 procedure'
|
|
218
|
+
foreach ($procedure in @($database.StoredProcedures | Where-Object { -not $_.IsSystemObject })) {
|
|
219
|
+
Add-SmoRecord -Object $procedure -ObjectType 'procedure' -Schema $procedure.Schema -Name $procedure.Name -Identity "$($procedure.Schema).$($procedure.Name)" -Scripter $objectScripter
|
|
220
|
+
}
|
|
221
|
+
Set-ExportStage -Stage '导出数据库级 trigger'
|
|
222
|
+
foreach ($trigger in @($database.Triggers | Where-Object { -not $_.IsSystemObject })) {
|
|
223
|
+
Add-SmoRecord -Object $trigger -ObjectType 'trigger' -Schema '' -Name $trigger.Name -Identity "database.$($trigger.Name)" -Scripter $objectScripter
|
|
224
|
+
}
|
|
225
|
+
if ($database.PSObject.Properties.Name -contains 'Sequences') {
|
|
226
|
+
Set-ExportStage -Stage '导出 sequence'
|
|
227
|
+
foreach ($sequence in @($database.Sequences)) {
|
|
228
|
+
Add-SmoRecord -Object $sequence -ObjectType 'sequence' -Schema $sequence.Schema -Name $sequence.Name -Identity "$($sequence.Schema).$($sequence.Name)" -Scripter $objectScripter
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if ($database.PSObject.Properties.Name -contains 'Synonyms') {
|
|
232
|
+
Set-ExportStage -Stage '导出 synonym'
|
|
233
|
+
foreach ($synonym in @($database.Synonyms)) {
|
|
234
|
+
Add-SmoRecord -Object $synonym -ObjectType 'synonym' -Schema $synonym.Schema -Name $synonym.Name -Identity "$($synonym.Schema).$($synonym.Name)" -Scripter $objectScripter
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
Set-ExportStage -Stage '导出用户定义类型'
|
|
238
|
+
foreach ($dataType in @($database.UserDefinedDataTypes)) {
|
|
239
|
+
Add-SmoRecord -Object $dataType -ObjectType 'type' -Schema $dataType.Schema -Name $dataType.Name -Identity "$($dataType.Schema).$($dataType.Name)" -Scripter $objectScripter
|
|
240
|
+
}
|
|
241
|
+
if ($database.PSObject.Properties.Name -contains 'UserDefinedTableTypes') {
|
|
242
|
+
foreach ($tableType in @($database.UserDefinedTableTypes)) {
|
|
243
|
+
Add-SmoRecord -Object $tableType -ObjectType 'type' -Schema $tableType.Schema -Name $tableType.Name -Identity "$($tableType.Schema).$($tableType.Name)" -Scripter $objectScripter
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
Set-ExportStage -Stage '写入对象清单'
|
|
248
|
+
[object[]]$recordArray = $records
|
|
249
|
+
Write-Utf8NoBom -Path (Join-Path $OutputDirectory 'objects.json') -Content ((ConvertTo-Json -InputObject $recordArray -Depth 5) + "`n")
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
throw "SQL Server 结构导出失败(阶段:$currentStage)。原始错误:$($_.Exception.Message)"
|
|
253
|
+
}
|
|
254
|
+
finally {
|
|
255
|
+
if ($serverConnection.IsOpen) { $serverConnection.Disconnect() }
|
|
256
|
+
Remove-Item Env:DATAPULL_SQLSERVER_PASSWORD -ErrorAction SilentlyContinue
|
|
257
|
+
}
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: datapull
|
|
3
|
+
description: 检查并指导安装 DataPull CLI,使用已登记连接拉取 MySQL、PostgreSQL 或 SQL Server 的结构文件;适用于环境诊断、连接选择、对象范围确认和 CLI 错误恢复,不替代 CLI 管理凭证或生成 DDL。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DataPull
|
|
7
|
+
|
|
8
|
+
把 DataPull CLI 作为唯一执行入口。本 Skill 负责环境检查、安装指导和安全调用,不实现连接管理、依赖安装或结构文件生成。
|
|
9
|
+
|
|
10
|
+
## 环境门
|
|
11
|
+
|
|
12
|
+
1. 检查 Node.js 是否为 `>=22.12`、NPM 是否可用、`datapull --version` 是否成功。
|
|
13
|
+
2. CLI 缺失时,只向用户提供 `npm install --global @yg-toolkit/datapull`;由用户亲自执行,不代替用户进行全局安装。
|
|
14
|
+
3. CLI 存在时执行 `datapull doctor --json`,依据退出码和 `error.code` 给出下一条恢复命令。环境门完成的标准是 CLI 可执行且诊断结果已被解释。
|
|
15
|
+
|
|
16
|
+
## 调用流程
|
|
17
|
+
|
|
18
|
+
优先使用带 `--json` 的命令模式:
|
|
19
|
+
|
|
20
|
+
- `datapull connection list --json`:列出脱敏登记连接。
|
|
21
|
+
- `datapull database list --connection <alias> --json`:读取收藏、最近使用和可访问数据库。
|
|
22
|
+
- `datapull pull --connection <alias> --database <database> --include <types> --yes --json`:拉取结构文件。
|
|
23
|
+
|
|
24
|
+
执行拉取前向用户说明连接别名、目标数据库、对象类型和当前项目根。任一值无法从用户请求或 CLI 脱敏结果唯一确定时,停在该步骤并请用户决定;不猜测连接、数据库或对象范围。
|
|
25
|
+
|
|
26
|
+
当 CLI 返回缺少工具时,说明 `actionPlan.installation` 中的工具、来源、命令、权限与下载影响。只有用户明确要求执行该安装计划后,才在下一次 CLI 调用中加入 `--install-missing --yes`。
|
|
27
|
+
|
|
28
|
+
当 SQL Server 返回 `SQLSERVER_TLS_CERTIFICATE_UNTRUSTED` 时,说明连接仍可保持加密,但信任服务器证书会失去服务器身份验证并带来中间人攻击风险。由用户在“安装可信 CA”“仅本次信任”“保存到该连接”中决定;只有用户明确选择后,才分别调用:
|
|
29
|
+
|
|
30
|
+
- 仅本次:在 `connection test`、`database list` 或 `pull` 中加入 `--trust-server-certificate --yes`。
|
|
31
|
+
- 保存:`datapull connection update --alias <alias> --trust-server-certificate --yes --json`。
|
|
32
|
+
- 恢复验证:`datapull connection update --alias <alias> --verify-server-certificate --yes --json`。
|
|
33
|
+
|
|
34
|
+
Agent 不替用户选择信任证书,也不把测试环境的放宽策略推广到其他连接。
|
|
35
|
+
|
|
36
|
+
## 秘密边界
|
|
37
|
+
|
|
38
|
+
数据库密码或含秘密 URL 只由用户在 CLI 隐藏输入中填写,或手工更新 CLI 显示的 `credentials.env`。不要在聊天中索要、复述或传递秘密,不读取该文件内容,也不把秘密放入命令参数。
|
|
39
|
+
|
|
40
|
+
## 完成标准
|
|
41
|
+
|
|
42
|
+
只有在 CLI 退出码为零、JSON 中 `ok:true`,且 `outputPath`、`updatedTypes`、`preservedTypes` 与用户目标一致时,才报告拉取成功。失败时原样保留稳定 `error.code`,给出一条对应的恢复命令,并区分本地契约验证与真实数据库拉取结果。
|