dsh-config-manager 0.1.51 → 0.1.52
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/lib/client.js +106 -106
- package/lib/index.js +1 -1
- package/lib/market/security.js +6 -3
- package/lib/market/security.js.map +1 -1
- package/lib/sync/git/git-transport.js +16 -2
- package/lib/sync/git/git-transport.js.map +1 -1
- package/lib/sync/layout.d.ts +16 -2
- package/lib/sync/layout.js +34 -2
- package/lib/sync/layout.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/market/market.test.ts +18 -0
- package/src/market/security.ts +6 -3
- package/src/sync/git/git-transport.test.ts +26 -0
- package/src/sync/git/git-transport.ts +16 -2
- package/src/sync/layout.test.ts +39 -1
- package/src/sync/layout.ts +36 -2
package/lib/client.js
CHANGED
|
@@ -3073,130 +3073,130 @@ if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"
|
|
|
3073
3073
|
document.head.appendChild(tag);
|
|
3074
3074
|
}
|
|
3075
3075
|
var config_manager_module_css_default = {
|
|
3076
|
-
"planScroll": "_367UGW_planScroll",
|
|
3077
|
-
"progressTrack": "_367UGW_progressTrack",
|
|
3078
|
-
"categoryDesc": "_367UGW_categoryDesc",
|
|
3079
|
-
"conflictOptions": "_367UGW_conflictOptions",
|
|
3080
3076
|
"pathNew": "_367UGW_pathNew",
|
|
3081
|
-
"
|
|
3082
|
-
"optionsHeader": "_367UGW_optionsHeader",
|
|
3083
|
-
"modeTabs": "_367UGW_modeTabs",
|
|
3084
|
-
"snapshotList": "_367UGW_snapshotList",
|
|
3085
|
-
"groupLabel": "_367UGW_groupLabel",
|
|
3086
|
-
"dialogBodyScroll": "_367UGW_dialogBodyScroll",
|
|
3087
|
-
"snapshotRow": "_367UGW_snapshotRow",
|
|
3088
|
-
"viewTabs": "_367UGW_viewTabs",
|
|
3089
|
-
"empty": "_367UGW_empty",
|
|
3090
|
-
"section": "_367UGW_section",
|
|
3091
|
-
"pathRow": "_367UGW_pathRow",
|
|
3092
|
-
"conflictId": "_367UGW_conflictId",
|
|
3093
|
-
"card": "_367UGW_card",
|
|
3094
|
-
"conflictItem": "_367UGW_conflictItem",
|
|
3095
|
-
"reportScroll": "_367UGW_reportScroll",
|
|
3096
|
-
"spinner": "_367UGW_spinner",
|
|
3097
|
-
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
3098
|
-
"modeHint": "_367UGW_modeHint",
|
|
3099
|
-
"progressBar": "_367UGW_progressBar",
|
|
3100
|
-
"diffScroll": "_367UGW_diffScroll",
|
|
3101
|
-
"banner": "_367UGW_banner",
|
|
3102
|
-
"conflictList": "_367UGW_conflictList",
|
|
3103
|
-
"errorLine": "_367UGW_errorLine",
|
|
3104
|
-
"dialogBody": "_367UGW_dialogBody",
|
|
3105
|
-
"actionRow": "_367UGW_actionRow",
|
|
3106
|
-
"errorList": "_367UGW_errorList",
|
|
3107
|
-
"confirmScroll": "_367UGW_confirmScroll",
|
|
3108
|
-
"wizardCard": "_367UGW_wizardCard",
|
|
3109
|
-
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
3110
|
-
"groupItems": "_367UGW_groupItems",
|
|
3111
|
-
"errorItem": "_367UGW_errorItem",
|
|
3112
|
-
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
3113
|
-
"progressMeta": "_367UGW_progressMeta",
|
|
3114
|
-
"input": "_367UGW_input",
|
|
3115
|
-
"hiddenFile": "_367UGW_hiddenFile",
|
|
3077
|
+
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
3116
3078
|
"logScroll": "_367UGW_logScroll",
|
|
3079
|
+
"progressDetail": "_367UGW_progressDetail",
|
|
3080
|
+
"conflictList": "_367UGW_conflictList",
|
|
3117
3081
|
"backupFileMeta": "_367UGW_backupFileMeta",
|
|
3118
|
-
"
|
|
3119
|
-
"
|
|
3120
|
-
"
|
|
3121
|
-
"
|
|
3122
|
-
"dialogHeaderRow": "_367UGW_dialogHeaderRow",
|
|
3123
|
-
"sectionTitle": "_367UGW_sectionTitle",
|
|
3124
|
-
"pathValue": "_367UGW_pathValue",
|
|
3082
|
+
"sectionHeader": "_367UGW_sectionHeader",
|
|
3083
|
+
"wizardCard": "_367UGW_wizardCard",
|
|
3084
|
+
"reportList": "_367UGW_reportList",
|
|
3085
|
+
"radioLabel": "_367UGW_radioLabel",
|
|
3125
3086
|
"progressBarDone": "_367UGW_progressBarDone",
|
|
3087
|
+
"sectionTitle": "_367UGW_sectionTitle",
|
|
3088
|
+
"backupFileList": "_367UGW_backupFileList",
|
|
3089
|
+
"logJumpButton": "_367UGW_logJumpButton",
|
|
3090
|
+
"hiddenFile": "_367UGW_hiddenFile",
|
|
3126
3091
|
"groupList": "_367UGW_groupList",
|
|
3127
|
-
"
|
|
3128
|
-
"
|
|
3129
|
-
"
|
|
3092
|
+
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
3093
|
+
"logLine": "_367UGW_logLine",
|
|
3094
|
+
"dshCmSpin": "_367UGW_dshCmSpin",
|
|
3095
|
+
"snapshotList": "_367UGW_snapshotList",
|
|
3096
|
+
"kindTag": "_367UGW_kindTag",
|
|
3097
|
+
"viewTab": "_367UGW_viewTab",
|
|
3098
|
+
"confirmScroll": "_367UGW_confirmScroll",
|
|
3099
|
+
"aboutLinkRow": "_367UGW_aboutLinkRow",
|
|
3100
|
+
"dialogClose": "_367UGW_dialogClose",
|
|
3130
3101
|
"fieldLabel": "_367UGW_fieldLabel",
|
|
3131
|
-
"
|
|
3102
|
+
"card": "_367UGW_card",
|
|
3103
|
+
"reportText": "_367UGW_reportText",
|
|
3104
|
+
"backupFileName": "_367UGW_backupFileName",
|
|
3105
|
+
"aboutAuthor": "_367UGW_aboutAuthor",
|
|
3106
|
+
"errorAction": "_367UGW_errorAction",
|
|
3107
|
+
"errorItem": "_367UGW_errorItem",
|
|
3108
|
+
"badgeError": "_367UGW_badgeError",
|
|
3109
|
+
"conflictItem": "_367UGW_conflictItem",
|
|
3110
|
+
"progressPercent": "_367UGW_progressPercent",
|
|
3111
|
+
"progressBadgeCount": "_367UGW_progressBadgeCount",
|
|
3132
3112
|
"reportFooter": "_367UGW_reportFooter",
|
|
3113
|
+
"groupLabel": "_367UGW_groupLabel",
|
|
3114
|
+
"backupFileRow": "_367UGW_backupFileRow",
|
|
3115
|
+
"dialogMask": "_367UGW_dialogMask",
|
|
3116
|
+
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
3117
|
+
"progressMeta": "_367UGW_progressMeta",
|
|
3118
|
+
"checkboxRow": "_367UGW_checkboxRow",
|
|
3119
|
+
"pathOld": "_367UGW_pathOld",
|
|
3120
|
+
"conflictHead": "_367UGW_conflictHead",
|
|
3121
|
+
"severityError": "_367UGW_severityError",
|
|
3122
|
+
"ghostButton": "_367UGW_ghostButton",
|
|
3133
3123
|
"hint": "_367UGW_hint",
|
|
3134
|
-
"
|
|
3135
|
-
"
|
|
3124
|
+
"secretsList": "_367UGW_secretsList",
|
|
3125
|
+
"errorFooter": "_367UGW_errorFooter",
|
|
3126
|
+
"pathValue": "_367UGW_pathValue",
|
|
3127
|
+
"sectionBody": "_367UGW_sectionBody",
|
|
3128
|
+
"empty": "_367UGW_empty",
|
|
3136
3129
|
"badgeWarn": "_367UGW_badgeWarn",
|
|
3137
|
-
"aboutAuthor": "_367UGW_aboutAuthor",
|
|
3138
|
-
"errorBanner": "_367UGW_errorBanner",
|
|
3139
|
-
"select": "_367UGW_select",
|
|
3140
|
-
"kindTag": "_367UGW_kindTag",
|
|
3141
|
-
"categoryItem": "_367UGW_categoryItem",
|
|
3142
3130
|
"reportView": "_367UGW_reportView",
|
|
3143
|
-
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
3144
|
-
"logLine": "_367UGW_logLine",
|
|
3145
|
-
"progressPercent": "_367UGW_progressPercent",
|
|
3146
|
-
"badge": "_367UGW_badge",
|
|
3147
|
-
"reportText": "_367UGW_reportText",
|
|
3148
|
-
"dialogWide": "_367UGW_dialogWide",
|
|
3149
|
-
"errorReason": "_367UGW_errorReason",
|
|
3150
|
-
"formError": "_367UGW_formError",
|
|
3151
|
-
"reportList": "_367UGW_reportList",
|
|
3152
|
-
"badgeInfo": "_367UGW_badgeInfo",
|
|
3153
3131
|
"dangerButton": "_367UGW_dangerButton",
|
|
3154
|
-
"progressBlock": "_367UGW_progressBlock",
|
|
3155
|
-
"severityError": "_367UGW_severityError",
|
|
3156
|
-
"dialogClose": "_367UGW_dialogClose",
|
|
3157
|
-
"pathMappingList": "_367UGW_pathMappingList",
|
|
3158
3132
|
"progressLabel": "_367UGW_progressLabel",
|
|
3159
|
-
"
|
|
3160
|
-
"
|
|
3161
|
-
"
|
|
3133
|
+
"errorReason": "_367UGW_errorReason",
|
|
3134
|
+
"pathMappingList": "_367UGW_pathMappingList",
|
|
3135
|
+
"warnText": "_367UGW_warnText",
|
|
3136
|
+
"viewTabs": "_367UGW_viewTabs",
|
|
3137
|
+
"rowActions": "_367UGW_rowActions",
|
|
3138
|
+
"diffScroll": "_367UGW_diffScroll",
|
|
3139
|
+
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
3140
|
+
"progressTrack": "_367UGW_progressTrack",
|
|
3141
|
+
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
3142
|
+
"conflictOptions": "_367UGW_conflictOptions",
|
|
3143
|
+
"planScroll": "_367UGW_planScroll",
|
|
3144
|
+
"groupItems": "_367UGW_groupItems",
|
|
3145
|
+
"optionsCard": "_367UGW_optionsCard",
|
|
3146
|
+
"section": "_367UGW_section",
|
|
3147
|
+
"actionRow": "_367UGW_actionRow",
|
|
3148
|
+
"categoryDesc": "_367UGW_categoryDesc",
|
|
3149
|
+
"spinner": "_367UGW_spinner",
|
|
3150
|
+
"modeHint": "_367UGW_modeHint",
|
|
3151
|
+
"badge": "_367UGW_badge",
|
|
3152
|
+
"badgeOk": "_367UGW_badgeOk",
|
|
3153
|
+
"pathRow": "_367UGW_pathRow",
|
|
3154
|
+
"reportScroll": "_367UGW_reportScroll",
|
|
3155
|
+
"groupCard": "_367UGW_groupCard",
|
|
3156
|
+
"groupNote": "_367UGW_groupNote",
|
|
3157
|
+
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
3158
|
+
"formError": "_367UGW_formError",
|
|
3159
|
+
"warnList": "_367UGW_warnList",
|
|
3160
|
+
"dialogWide": "_367UGW_dialogWide",
|
|
3161
|
+
"pullScroll": "_367UGW_pullScroll",
|
|
3162
|
+
"errorList": "_367UGW_errorList",
|
|
3163
|
+
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
3164
|
+
"primaryButton": "_367UGW_primaryButton",
|
|
3165
|
+
"progressBadgeSection": "_367UGW_progressBadgeSection",
|
|
3162
3166
|
"dialogHeader": "_367UGW_dialogHeader",
|
|
3163
|
-
"
|
|
3164
|
-
"
|
|
3165
|
-
"
|
|
3167
|
+
"modeTab": "_367UGW_modeTab",
|
|
3168
|
+
"modeTabs": "_367UGW_modeTabs",
|
|
3169
|
+
"select": "_367UGW_select",
|
|
3170
|
+
"errorTitle": "_367UGW_errorTitle",
|
|
3171
|
+
"progressBlock": "_367UGW_progressBlock",
|
|
3172
|
+
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
3173
|
+
"errorLine": "_367UGW_errorLine",
|
|
3166
3174
|
"statRow": "_367UGW_statRow",
|
|
3167
|
-
"
|
|
3168
|
-
"
|
|
3169
|
-
"
|
|
3170
|
-
"
|
|
3171
|
-
"
|
|
3172
|
-
"
|
|
3173
|
-
"
|
|
3174
|
-
"
|
|
3175
|
-
"
|
|
3175
|
+
"categoryItem": "_367UGW_categoryItem",
|
|
3176
|
+
"categoryName": "_367UGW_categoryName",
|
|
3177
|
+
"progressBar": "_367UGW_progressBar",
|
|
3178
|
+
"dialogBodyScroll": "_367UGW_dialogBodyScroll",
|
|
3179
|
+
"banner": "_367UGW_banner",
|
|
3180
|
+
"optionsHeader": "_367UGW_optionsHeader",
|
|
3181
|
+
"conflictId": "_367UGW_conflictId",
|
|
3182
|
+
"input": "_367UGW_input",
|
|
3183
|
+
"dialogBody": "_367UGW_dialogBody",
|
|
3184
|
+
"badgeInfo": "_367UGW_badgeInfo",
|
|
3185
|
+
"logPanel": "_367UGW_logPanel",
|
|
3186
|
+
"secretFields": "_367UGW_secretFields",
|
|
3176
3187
|
"rollbackBox": "_367UGW_rollbackBox",
|
|
3177
|
-
"
|
|
3178
|
-
"
|
|
3179
|
-
"
|
|
3188
|
+
"field": "_367UGW_field",
|
|
3189
|
+
"groupHeader": "_367UGW_groupHeader",
|
|
3190
|
+
"snapshotRow": "_367UGW_snapshotRow",
|
|
3180
3191
|
"dialogCard": "_367UGW_dialogCard",
|
|
3181
|
-
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
3182
|
-
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
3183
|
-
"groupCard": "_367UGW_groupCard",
|
|
3184
|
-
"warnList": "_367UGW_warnList",
|
|
3185
|
-
"progressBadge": "_367UGW_progressBadge",
|
|
3186
|
-
"warnText": "_367UGW_warnText",
|
|
3187
|
-
"logEmpty": "_367UGW_logEmpty",
|
|
3188
3192
|
"snapshotRowHeader": "_367UGW_snapshotRowHeader",
|
|
3189
|
-
"
|
|
3193
|
+
"logHeader": "_367UGW_logHeader",
|
|
3190
3194
|
"conflictDetail": "_367UGW_conflictDetail",
|
|
3191
|
-
"
|
|
3192
|
-
"
|
|
3193
|
-
"
|
|
3194
|
-
"
|
|
3195
|
-
"
|
|
3196
|
-
"modeTab": "_367UGW_modeTab",
|
|
3197
|
-
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
3198
|
-
"badgeError": "_367UGW_badgeError",
|
|
3199
|
-
"logHeader": "_367UGW_logHeader"
|
|
3195
|
+
"logEmpty": "_367UGW_logEmpty",
|
|
3196
|
+
"viewBody": "_367UGW_viewBody",
|
|
3197
|
+
"progressBadge": "_367UGW_progressBadge",
|
|
3198
|
+
"errorBanner": "_367UGW_errorBanner",
|
|
3199
|
+
"dialogHeaderRow": "_367UGW_dialogHeaderRow"
|
|
3200
3200
|
};
|
|
3201
3201
|
//#endregion
|
|
3202
3202
|
//#region src/client/common/ui.tsx
|
package/lib/index.js
CHANGED
|
@@ -97,7 +97,7 @@ export const name = 'config-manager';
|
|
|
97
97
|
/** Services required before the engine can mount (present in every profile). */
|
|
98
98
|
export const inject = ['settings', 'credentials'];
|
|
99
99
|
/** Plugin version, kept in sync with package.json ("version"). */
|
|
100
|
-
const PLUGIN_VERSION = '0.1.
|
|
100
|
+
const PLUGIN_VERSION = '0.1.52';
|
|
101
101
|
/** Plugin own package name — excluded from its own exported plugins list. */
|
|
102
102
|
const PLUGIN_NAME = 'dsh-config-manager';
|
|
103
103
|
/**
|
package/lib/market/security.js
CHANGED
|
@@ -111,10 +111,13 @@ export function validateMarketItem(itemId, manifestRaw, zipBytes) {
|
|
|
111
111
|
return { status: 'invalid', errors: [`config.zip 包含禁止分区 ${sectionId}(sessions=历史会话 / pluginFiles=任意文件 / self=本地环境),市场条目禁止携带`], warnings, manifest, internalManifest, sections: [], checksumsOk: true };
|
|
112
112
|
}
|
|
113
113
|
if (isFileSection(sectionId)) {
|
|
114
|
-
// 文件类分区:以文件形式进入 ZIP,结构校验由 security/safeExtract
|
|
115
|
-
//
|
|
114
|
+
// 文件类分区:以文件形式进入 ZIP,结构校验由 security/safeExtract 在导入期做。
|
|
115
|
+
// enabled 但 ZIP 无该前缀条目 = 空文件分区(如未安装 skills 时导出)——
|
|
116
|
+
// 合法状态:导入侧 analyzer.extractSections 对空分区收集空 files、零操作零报错,
|
|
117
|
+
// 与 sync 通道对空分区的语义一致(空分区参与 manifest 标记但不产生任何文件)。
|
|
118
|
+
// 仅加 warning 提示,不拒绝;JSON 分区仍严格要求文件存在(有内容才可能 enabled)。
|
|
116
119
|
if (!archive.names().some((n) => n.startsWith(SECTION_FILE_PREFIXES[sectionId]))) {
|
|
117
|
-
|
|
120
|
+
warnings.push(`config.zip 中分区 ${sectionId} 为空(无文件),导入后不产生任何效果`);
|
|
118
121
|
}
|
|
119
122
|
continue;
|
|
120
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/market/security.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/market/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,10 +23,11 @@ import os from 'node:os';
|
|
|
23
23
|
import path from 'node:path';
|
|
24
24
|
import { promisify } from 'node:util';
|
|
25
25
|
import { createSnapshotFs, joinFs } from "../fs.js";
|
|
26
|
-
import { readSnapshotFromDir, SNAPSHOT_MANIFEST_FILE, writeSnapshotToDir } from "../layout.js";
|
|
26
|
+
import { readSnapshotFromDir, SNAPSHOT_KEEP_CONTENT, SNAPSHOT_KEEP_FILE, SNAPSHOT_MANIFEST_FILE, writeSnapshotToDir } from "../layout.js";
|
|
27
27
|
import { deserializeSnapshot, serializeSnapshot } from "../snapshot-json.js";
|
|
28
28
|
import { computeSnapshotMeta, isEncryptedSections } from "../transport.js";
|
|
29
29
|
import { parseJsonSafe } from "../../utils/json.js";
|
|
30
|
+
import { SECTION_FILE_PREFIXES } from "../../schema/config.js";
|
|
30
31
|
import { zhMsg } from "../../core/messages.js";
|
|
31
32
|
const execFileAsync = promisify(execFile);
|
|
32
33
|
export class GitTransportError extends Error {
|
|
@@ -175,6 +176,17 @@ export class GitTransport {
|
|
|
175
176
|
if (await fsx.exists(dir))
|
|
176
177
|
await fsx.remove(dir); // 覆盖语义:先清旧目录,避免残留旧文件
|
|
177
178
|
await writeSnapshotToDir(snapshot, dir, fsx);
|
|
179
|
+
// git 不跟踪空目录:为空文件类分区目录写占位文件,保证远端保留目录。
|
|
180
|
+
// 占位文件不参与 manifest.sectionHashes(基于传入数据计算);读回时按名+内容过滤。
|
|
181
|
+
// 否则空分区(如未安装 skills)上传后目录在远端丢失,B 机全新 clone 下载即失败。
|
|
182
|
+
const plain = snapshot.sections;
|
|
183
|
+
for (const [sid, prefix] of Object.entries(SECTION_FILE_PREFIXES)) {
|
|
184
|
+
const data = plain[sid];
|
|
185
|
+
if (data === undefined || data.files.length > 0)
|
|
186
|
+
continue;
|
|
187
|
+
// joinFs 只接受两个参数,占位路径拼进 prefix 一起传
|
|
188
|
+
await fsx.writeFile(joinFs(dir, `${prefix}${SNAPSHOT_KEEP_FILE}`), new TextEncoder().encode(SNAPSHOT_KEEP_CONTENT));
|
|
189
|
+
}
|
|
178
190
|
// 同 id 旧密文单文件残留 → 一并清理(形态切换不残留)
|
|
179
191
|
await fsx.remove(this.encryptedSnapshotFile(snapshot.id));
|
|
180
192
|
rel = `${SNAPSHOTS_REL}/${snapshot.id}`;
|
|
@@ -195,8 +207,10 @@ export class GitTransport {
|
|
|
195
207
|
await this.pullFromRemote();
|
|
196
208
|
const fsx = createSnapshotFs();
|
|
197
209
|
// 优先散文件目录(明文布局);其次密文单文件(加密布局)
|
|
210
|
+
// missingFileDir='empty':git 不跟踪空目录 → 目录缺失 = 空文件分区(非损坏;
|
|
211
|
+
// 提交原子性保证非空目录不会缺失),兼容旧版插件上传的无占位快照
|
|
198
212
|
if (await fsx.isDir(this.snapshotDir(id))) {
|
|
199
|
-
return readSnapshotFromDir(this.snapshotDir(id));
|
|
213
|
+
return readSnapshotFromDir(this.snapshotDir(id), fsx, { missingFileDir: 'empty' });
|
|
200
214
|
}
|
|
201
215
|
const encFile = this.encryptedSnapshotFile(id);
|
|
202
216
|
if (await fsx.exists(encFile)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-transport.js","sourceRoot":"","sources":["../../../src/sync/git/git-transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git-transport.js","sourceRoot":"","sources":["../../../src/sync/git/git-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1I,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG/C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AA0C1C,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC;6CAC6C;AAC7C,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AACtD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,cAAc,GAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;AACvF,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAC7C,0DAA0D;AAC1D,MAAM,UAAU,GAAG,oCAAoC,CAAC;AAExD,MAAM,WAAW,GAAc,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE;YACxD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAA0D,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9E,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,sDAAsD;AACtD,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1E,CAAC;AAED,qEAAqE;AACrE,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,KAAK,CAAC;IAEL,CAAC,CAMhB;IACM,SAAS,GAAG,KAAK,CAAC;IAClB,WAAW,GAAmB,IAAI,CAAC;IAC1B,GAAG,CAAU;IAE9B,YAAY,OAA4B;QACtC,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;eACtE,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACxD,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;YAClD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc;YACxC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,2BAA2B;SAC9E,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;0DACsD;IACtD,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,UAAU;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAAE,SAAS;YACzC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAS,CAAC,qCAAqC;YAC/D,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,CAAC,CAAC,aAAa;gBACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;QACD,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC9F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS,CAAC,eAAe;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,QAAsB;QACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,yCAAyC;QACzC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;eAC1D,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAW,CAAC;QAChB,IAAI,SAAS,EAAE,CAAC;YACd,6DAA6D;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;YACrC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjF,gCAAgC;YAChC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,GAAG,GAAG,GAAG,uBAAuB,IAAI,QAAQ,CAAC,EAAE,OAAO,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;YACvE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7C,sCAAsC;YACtC,uDAAuD;YACvD,kDAAkD;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAmD,CAAC;YAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAgB,CAA6B,CAAC;gBACjE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBAC1D,mCAAmC;gBACnC,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,kBAAkB,EAAE,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACtH,CAAC;YACD,gCAAgC;YAChC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,GAAG,GAAG,GAAG,aAAa,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YACxC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,IAAI,aAAa,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,8BAA8B;QAC9B,wDAAwD;QACxD,kCAAkC;QAClC,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE;oBAC/D,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAE,GAAa,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;iBAC9E,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QACD,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,UAAU;QAClD,IAAI,GAAW,CAAC;QAChB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,GAAG,GAAG,GAAG,aAAa,IAAI,EAAE,EAAE,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1B,GAAG,GAAG,GAAG,uBAAuB,IAAI,EAAE,OAAO,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACtG,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9H,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,4CAA4C;IAEpC,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC1C,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,wCAAwC;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,uDAAuD;IAC/C,KAAK,CAAC,cAAc;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrG,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,kBAAkB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACnG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC3B,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,uBAAuB;QAChF,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3H,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,MAAM,CAClB,IAAc,EACd,OAA2E,EAAE;QAE7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/D,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,IAAI,OAAO,GAAiC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9C,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACnB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3G,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC5C,MAAM,IAAI,iBAAiB,CACzB,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAC1H,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO;gBAAE,MAAM,OAAO,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3H,OAAO;YACL,SAAS,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,kCAAkC,OAAO,EAAE,CAAC;YAC1F,KAAK;YACL,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SAChF,CAAC;IACJ,CAAC;IAED,+CAA+C;IACvC,QAAQ;QACd,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,0CAA0C;IAClC,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,IAAI,CAAC;YAAC,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC5E,CAAC;IAED,kDAAkD;IAC1C,IAAI,CAAC,IAAY,EAAE,KAAoB;QAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,YAAY,CAAC,EAAU;QAC7B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,EAAU;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,YAAY;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,kDAAkD;IAC1C,qBAAqB;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACzD,CAAC;IAED,6BAA6B;IACrB,qBAAqB,CAAC,EAAU;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,gDAAgD;IACxC,KAAK,CAAC,yBAAyB,CAAC,IAAY;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClF,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,8CAA8C;IACtC,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,MAAM,GAAG,GAAe,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxF,MAAM,CAAC,GAAG,MAAiC,CAAC;YAC5C,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ;mBAChE,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ;mBAC3D,CAAC,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,MAA6B,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
package/lib/sync/layout.d.ts
CHANGED
|
@@ -2,6 +2,15 @@ import type { SectionId } from '../schema/types.ts';
|
|
|
2
2
|
import type { SnapshotFs } from './fs.ts';
|
|
3
3
|
import type { SyncSnapshot } from './transport.ts';
|
|
4
4
|
export declare const SNAPSHOT_MANIFEST_FILE = "manifest.json";
|
|
5
|
+
/**
|
|
6
|
+
* 空文件类分区的 git 占位文件(git 不跟踪空目录):
|
|
7
|
+
* 上传方(GitTransport.upload)给 files 为空的文件类分区目录写入本占位文件,
|
|
8
|
+
* 保证远端仓库保留该目录;读回时仅当「文件名 + 内容」同时匹配才过滤,
|
|
9
|
+
* 避免吞掉用户真实同名文件。占位文件不参与 sectionHashes(基于传入数据计算)。
|
|
10
|
+
* 注意:占位内容不得含换行 —— Windows core.autocrlf 会把 LF 转 CRLF,内容校验会失败。
|
|
11
|
+
*/
|
|
12
|
+
export declare const SNAPSHOT_KEEP_FILE = ".gitkeep";
|
|
13
|
+
export declare const SNAPSHOT_KEEP_CONTENT = "DSH Config Manager sync placeholder (keep empty section dir)";
|
|
5
14
|
/** 快照根目录下的 manifest.json 结构 */
|
|
6
15
|
export interface SnapshotDirManifest {
|
|
7
16
|
id: string;
|
|
@@ -24,6 +33,11 @@ export declare function listSnapshotFiles(fsx: SnapshotFs, dir: string): Promise
|
|
|
24
33
|
export declare function writeSnapshotToDir(snapshot: SyncSnapshot, dir: string, fsx?: SnapshotFs): Promise<SnapshotDirManifest>;
|
|
25
34
|
/**
|
|
26
35
|
* 从散文件目录读回快照。
|
|
27
|
-
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 →
|
|
36
|
+
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 → 抛错(不静默降级),
|
|
37
|
+
* 但 opts.missingFileDir='empty' 时文件分区目录缺失降级为空分区
|
|
38
|
+
* (git 通道专用:git 不跟踪空目录,目录缺失 = 空文件分区;提交原子性保证非空目录不会缺失)。
|
|
39
|
+
* 读回时过滤 git 占位文件(SNAPSHOT_KEEP_FILE),使 files 与上传方数据一致。
|
|
28
40
|
*/
|
|
29
|
-
export declare function readSnapshotFromDir(dir: string, fsx?: SnapshotFs
|
|
41
|
+
export declare function readSnapshotFromDir(dir: string, fsx?: SnapshotFs, opts?: {
|
|
42
|
+
missingFileDir?: 'throw' | 'empty';
|
|
43
|
+
}): Promise<SyncSnapshot>;
|
package/lib/sync/layout.js
CHANGED
|
@@ -12,6 +12,27 @@ import { createSnapshotFs, joinFs } from "./fs.js";
|
|
|
12
12
|
import { hashSection } from "./sync-state.js";
|
|
13
13
|
import { isEncryptedSections } from "./transport.js";
|
|
14
14
|
export const SNAPSHOT_MANIFEST_FILE = 'manifest.json';
|
|
15
|
+
/**
|
|
16
|
+
* 空文件类分区的 git 占位文件(git 不跟踪空目录):
|
|
17
|
+
* 上传方(GitTransport.upload)给 files 为空的文件类分区目录写入本占位文件,
|
|
18
|
+
* 保证远端仓库保留该目录;读回时仅当「文件名 + 内容」同时匹配才过滤,
|
|
19
|
+
* 避免吞掉用户真实同名文件。占位文件不参与 sectionHashes(基于传入数据计算)。
|
|
20
|
+
* 注意:占位内容不得含换行 —— Windows core.autocrlf 会把 LF 转 CRLF,内容校验会失败。
|
|
21
|
+
*/
|
|
22
|
+
export const SNAPSHOT_KEEP_FILE = '.gitkeep';
|
|
23
|
+
export const SNAPSHOT_KEEP_CONTENT = 'DSH Config Manager sync placeholder (keep empty section dir)';
|
|
24
|
+
const SNAPSHOT_KEEP_BYTES = new TextEncoder().encode(SNAPSHOT_KEEP_CONTENT);
|
|
25
|
+
function isKeepFile(rel, data) {
|
|
26
|
+
if (rel !== SNAPSHOT_KEEP_FILE)
|
|
27
|
+
return false;
|
|
28
|
+
if (data.length !== SNAPSHOT_KEEP_BYTES.length)
|
|
29
|
+
return false;
|
|
30
|
+
for (let i = 0; i < data.length; i++) {
|
|
31
|
+
if (data[i] !== SNAPSHOT_KEEP_BYTES[i])
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
15
36
|
/** 布局支持的分区 = SECTION_JSON_PATHS ∪ SECTION_FILE_PREFIXES(secrets 等不在内) */
|
|
16
37
|
const LAYOUT_SECTION_IDS = [
|
|
17
38
|
...Object.keys(SECTION_JSON_PATHS),
|
|
@@ -115,9 +136,12 @@ export async function writeSnapshotToDir(snapshot, dir, fsx = createSnapshotFs()
|
|
|
115
136
|
}
|
|
116
137
|
/**
|
|
117
138
|
* 从散文件目录读回快照。
|
|
118
|
-
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 →
|
|
139
|
+
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 → 抛错(不静默降级),
|
|
140
|
+
* 但 opts.missingFileDir='empty' 时文件分区目录缺失降级为空分区
|
|
141
|
+
* (git 通道专用:git 不跟踪空目录,目录缺失 = 空文件分区;提交原子性保证非空目录不会缺失)。
|
|
142
|
+
* 读回时过滤 git 占位文件(SNAPSHOT_KEEP_FILE),使 files 与上传方数据一致。
|
|
119
143
|
*/
|
|
120
|
-
export async function readSnapshotFromDir(dir, fsx = createSnapshotFs()) {
|
|
144
|
+
export async function readSnapshotFromDir(dir, fsx = createSnapshotFs(), opts = {}) {
|
|
121
145
|
const manifestAbs = joinFs(dir, SNAPSHOT_MANIFEST_FILE);
|
|
122
146
|
if (!(await fsx.exists(manifestAbs))) {
|
|
123
147
|
throw new Error(`快照目录缺少 ${SNAPSHOT_MANIFEST_FILE}: ${dir}`);
|
|
@@ -156,12 +180,20 @@ export async function readSnapshotFromDir(dir, fsx = createSnapshotFs()) {
|
|
|
156
180
|
continue;
|
|
157
181
|
const baseAbs = joinFs(dir, prefix);
|
|
158
182
|
if (!(await fsx.isDir(baseAbs))) {
|
|
183
|
+
if (opts.missingFileDir === 'empty') {
|
|
184
|
+
// git 通道降级:目录缺失 = 空文件分区(git 不跟踪空目录,详见函数注释)
|
|
185
|
+
sections[sid] = { version: 1, files: [] };
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
159
188
|
throw new Error(`快照缺少文件分区目录 ${prefix}(${sid})`);
|
|
160
189
|
}
|
|
161
190
|
const rels = await listSnapshotFiles(fsx, baseAbs);
|
|
162
191
|
const files = [];
|
|
163
192
|
for (const rel of rels) {
|
|
164
193
|
const data = await fsx.readFile(joinFs(baseAbs, rel));
|
|
194
|
+
// 过滤 git 占位文件(名 + 内容同时匹配才过滤,避免吞用户真实同名文件)
|
|
195
|
+
if (isKeepFile(rel, data))
|
|
196
|
+
continue;
|
|
165
197
|
files.push({ relativePath: rel, data, contentHash: sha256Hex(data) });
|
|
166
198
|
}
|
|
167
199
|
sections[sid] = { version: 1, files };
|
package/lib/sync/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/sync/layout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/sync/layout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-config-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.52",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Backup, restore, export, import, migrate and sync your DeepSeek Harness (DSH) configuration: settings, plugins, MCP servers, skills, agent presets and workspaces. One-click migration to another machine. DSH 配置一键备份、恢复、导出、导入、迁移与同步插件。",
|
|
6
6
|
"keywords": [
|
package/src/index.ts
CHANGED
|
@@ -142,7 +142,7 @@ export const name = 'config-manager'
|
|
|
142
142
|
export const inject = ['settings', 'credentials']
|
|
143
143
|
|
|
144
144
|
/** Plugin version, kept in sync with package.json ("version"). */
|
|
145
|
-
const PLUGIN_VERSION = '0.1.
|
|
145
|
+
const PLUGIN_VERSION = '0.1.52'
|
|
146
146
|
|
|
147
147
|
/** Plugin own package name — excluded from its own exported plugins list. */
|
|
148
148
|
const PLUGIN_NAME = 'dsh-config-manager'
|
|
@@ -183,6 +183,24 @@ test('校验:sections 无交集拒绝', () => {
|
|
|
183
183
|
assert.match(res.errors.join(), /无交集/);
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
+
test('校验:文件分区 enabled 但 ZIP 无前缀条目 → valid(空分区合法,仅 warning)', () => {
|
|
187
|
+
// 模拟空 skills 分区导出:内部 manifest 声明 skills=true,但 ZIP 无任何 custom/skills/ 条目
|
|
188
|
+
const settingsJson = JSON.stringify({ version: 1, namespaces: {} });
|
|
189
|
+
const entries: ZipWriteEntry[] = [{ name: 'config/settings.json', data: Buffer.from(settingsJson) }];
|
|
190
|
+
entries.push({ name: 'integrity/checksums.json', data: Buffer.from(JSON.stringify({ 'config/settings.json': sha256Hex(Buffer.from(settingsJson)) })) });
|
|
191
|
+
const manifest = {
|
|
192
|
+
schemaVersion: 1, exporter: { name: 'X', version: '1' },
|
|
193
|
+
source: { dshVersion: '1', platform: 'linux', arch: 'x64' },
|
|
194
|
+
exportedAt: new Date().toISOString(), sections: { settings: true, skills: true },
|
|
195
|
+
security: { containsSecrets: false, encrypted: false, encryption: null },
|
|
196
|
+
};
|
|
197
|
+
entries.push({ name: 'manifest.json', data: Buffer.from(JSON.stringify(manifest)) });
|
|
198
|
+
const zip = Buffer.from(zipToBuffer(entries));
|
|
199
|
+
const res = validateMarketItem('foo', makeItemManifest('foo', zip, ['settings', 'skills']), zip);
|
|
200
|
+
assert.equal(res.status, 'valid', '空文件分区不应拒绝条目(导入侧对空分区零操作)');
|
|
201
|
+
assert.ok(res.warnings.some((w) => w.includes('skills') && w.includes('为空')), `应提示空分区 warning: ${res.warnings.join(' | ')}`);
|
|
202
|
+
});
|
|
203
|
+
|
|
186
204
|
test('校验:内部 manifest 无效拒绝', () => {
|
|
187
205
|
// zipToBuffer 自身已拒绝路径穿越条目,故此处验证 validateMarketItem 对「内容级恶意
|
|
188
206
|
// 载荷」的防线:结构合法但内部 manifest 无效的 zip 必须被拒(parseManifest → parseZipHardened 委托)。
|
package/src/market/security.ts
CHANGED
|
@@ -139,10 +139,13 @@ export function validateMarketItem(
|
|
|
139
139
|
return { status: 'invalid', errors: [`config.zip 包含禁止分区 ${sectionId}(sessions=历史会话 / pluginFiles=任意文件 / self=本地环境),市场条目禁止携带`], warnings, manifest, internalManifest, sections: [], checksumsOk: true };
|
|
140
140
|
}
|
|
141
141
|
if (isFileSection(sectionId)) {
|
|
142
|
-
// 文件类分区:以文件形式进入 ZIP,结构校验由 security/safeExtract
|
|
143
|
-
//
|
|
142
|
+
// 文件类分区:以文件形式进入 ZIP,结构校验由 security/safeExtract 在导入期做。
|
|
143
|
+
// enabled 但 ZIP 无该前缀条目 = 空文件分区(如未安装 skills 时导出)——
|
|
144
|
+
// 合法状态:导入侧 analyzer.extractSections 对空分区收集空 files、零操作零报错,
|
|
145
|
+
// 与 sync 通道对空分区的语义一致(空分区参与 manifest 标记但不产生任何文件)。
|
|
146
|
+
// 仅加 warning 提示,不拒绝;JSON 分区仍严格要求文件存在(有内容才可能 enabled)。
|
|
144
147
|
if (!archive.names().some((n) => n.startsWith(SECTION_FILE_PREFIXES[sectionId]!))) {
|
|
145
|
-
|
|
148
|
+
warnings.push(`config.zip 中分区 ${sectionId} 为空(无文件),导入后不产生任何效果`);
|
|
146
149
|
}
|
|
147
150
|
continue;
|
|
148
151
|
}
|
|
@@ -607,6 +607,32 @@ test('集成:加密快照端到端(真实 git + 本地 bare repo)—— up
|
|
|
607
607
|
await transport.delete('snap-enc'); // 不存在视为成功
|
|
608
608
|
});
|
|
609
609
|
|
|
610
|
+
test('集成:空文件类分区(skills files:[])upload 后,全新 clone 的 B 机 download 应读回空分区(git 不跟踪空目录)', async (t) => {
|
|
611
|
+
const bare = await makeBareRepo(t);
|
|
612
|
+
// 机器 A:上传含空 skills 分区(~/.dsh/skills 不存在 → files: [])的快照
|
|
613
|
+
const workDirA = await makeTempDir(t);
|
|
614
|
+
const transportA = new GitTransport({ repoUrl: bare, workDir: workDirA, credentials: { getToken: async () => TEST_TOKEN } });
|
|
615
|
+
const snap = sampleSnapshot();
|
|
616
|
+
snap.sections.skills = { version: 1, files: [] } as unknown as FilesSection;
|
|
617
|
+
snap.manifest = { ...snap.manifest, sectionIds: ['settings', 'providers', 'skills'] };
|
|
618
|
+
await transportA.upload(snap);
|
|
619
|
+
|
|
620
|
+
// 机器 B:全新 workDir(重新 clone 远端),模拟另一台机器的首次拉取
|
|
621
|
+
const workDirB = await makeTempDir(t);
|
|
622
|
+
const transportB = new GitTransport({ repoUrl: bare, workDir: workDirB, credentials: { getToken: async () => TEST_TOKEN } });
|
|
623
|
+
|
|
624
|
+
// 复现前提:git 不跟踪空目录 → B 端工作副本里不存在 custom/skills/ 目录
|
|
625
|
+
const skillsAbsB = path.join(workDirB, 'snapshots', 'snap-001', 'custom', 'skills');
|
|
626
|
+
const skillsStat = await fs.stat(skillsAbsB).catch(() => null);
|
|
627
|
+
assert.equal(skillsStat, null, 'git 应不跟踪空目录:B 端工作副本不应存在 custom/skills/');
|
|
628
|
+
|
|
629
|
+
// 修复后:download 应降级读回空分区,而不是抛「快照缺少文件分区目录」
|
|
630
|
+
const roundtrip = await transportB.download('snap-001');
|
|
631
|
+
const skills = (roundtrip.sections as Partial<Record<SectionId, SectionData>>)['skills'];
|
|
632
|
+
assert.deepEqual(skills, { version: 1, files: [] });
|
|
633
|
+
assert.deepEqual(roundtrip.manifest, snap.manifest);
|
|
634
|
+
});
|
|
635
|
+
|
|
610
636
|
// ─── t5:远端快照裁剪的 git 契约(upload 先 push,再 delete 删旧,各自独立 commit+push) ───
|
|
611
637
|
|
|
612
638
|
test('集成:裁剪删除旧快照 → 每次 delete 独立 commit+push,add 提交先于 delete 提交', async (t) => {
|
|
@@ -25,12 +25,14 @@ import { promisify } from 'node:util';
|
|
|
25
25
|
|
|
26
26
|
import { createSnapshotFs, joinFs } from '../fs.ts';
|
|
27
27
|
import type { SnapshotFs } from '../fs.ts';
|
|
28
|
-
import { readSnapshotFromDir, SNAPSHOT_MANIFEST_FILE, writeSnapshotToDir } from '../layout.ts';
|
|
28
|
+
import { readSnapshotFromDir, SNAPSHOT_KEEP_CONTENT, SNAPSHOT_KEEP_FILE, SNAPSHOT_MANIFEST_FILE, writeSnapshotToDir } from '../layout.ts';
|
|
29
29
|
import type { SnapshotDirManifest } from '../layout.ts';
|
|
30
30
|
import { deserializeSnapshot, serializeSnapshot } from '../snapshot-json.ts';
|
|
31
31
|
import { computeSnapshotMeta, isEncryptedSections } from '../transport.ts';
|
|
32
32
|
import type { SyncSnapshot, SyncSnapshotMeta, SyncTransport } from '../transport.ts';
|
|
33
33
|
import { parseJsonSafe } from '../../utils/json.ts';
|
|
34
|
+
import { SECTION_FILE_PREFIXES } from '../../schema/config.ts';
|
|
35
|
+
import type { FilesSection, SectionData, SectionId } from '../../schema/types.ts';
|
|
34
36
|
import { zhMsg } from '../../core/messages.ts';
|
|
35
37
|
import type { MsgFunc } from '../../core/messages.ts';
|
|
36
38
|
|
|
@@ -228,6 +230,16 @@ export class GitTransport implements SyncTransport {
|
|
|
228
230
|
const dir = this.snapshotDir(snapshot.id);
|
|
229
231
|
if (await fsx.exists(dir)) await fsx.remove(dir); // 覆盖语义:先清旧目录,避免残留旧文件
|
|
230
232
|
await writeSnapshotToDir(snapshot, dir, fsx);
|
|
233
|
+
// git 不跟踪空目录:为空文件类分区目录写占位文件,保证远端保留目录。
|
|
234
|
+
// 占位文件不参与 manifest.sectionHashes(基于传入数据计算);读回时按名+内容过滤。
|
|
235
|
+
// 否则空分区(如未安装 skills)上传后目录在远端丢失,B 机全新 clone 下载即失败。
|
|
236
|
+
const plain = snapshot.sections as Partial<Record<SectionId, SectionData>>;
|
|
237
|
+
for (const [sid, prefix] of Object.entries(SECTION_FILE_PREFIXES)) {
|
|
238
|
+
const data = plain[sid as SectionId] as FilesSection | undefined;
|
|
239
|
+
if (data === undefined || data.files.length > 0) continue;
|
|
240
|
+
// joinFs 只接受两个参数,占位路径拼进 prefix 一起传
|
|
241
|
+
await fsx.writeFile(joinFs(dir, `${prefix}${SNAPSHOT_KEEP_FILE}`), new TextEncoder().encode(SNAPSHOT_KEEP_CONTENT));
|
|
242
|
+
}
|
|
231
243
|
// 同 id 旧密文单文件残留 → 一并清理(形态切换不残留)
|
|
232
244
|
await fsx.remove(this.encryptedSnapshotFile(snapshot.id));
|
|
233
245
|
rel = `${SNAPSHOTS_REL}/${snapshot.id}`;
|
|
@@ -249,8 +261,10 @@ export class GitTransport implements SyncTransport {
|
|
|
249
261
|
await this.pullFromRemote();
|
|
250
262
|
const fsx = createSnapshotFs();
|
|
251
263
|
// 优先散文件目录(明文布局);其次密文单文件(加密布局)
|
|
264
|
+
// missingFileDir='empty':git 不跟踪空目录 → 目录缺失 = 空文件分区(非损坏;
|
|
265
|
+
// 提交原子性保证非空目录不会缺失),兼容旧版插件上传的无占位快照
|
|
252
266
|
if (await fsx.isDir(this.snapshotDir(id))) {
|
|
253
|
-
return readSnapshotFromDir(this.snapshotDir(id));
|
|
267
|
+
return readSnapshotFromDir(this.snapshotDir(id), fsx, { missingFileDir: 'empty' });
|
|
254
268
|
}
|
|
255
269
|
const encFile = this.encryptedSnapshotFile(id);
|
|
256
270
|
if (await fsx.exists(encFile)) {
|
package/src/sync/layout.test.ts
CHANGED
|
@@ -11,7 +11,7 @@ import fs from 'node:fs/promises';
|
|
|
11
11
|
import os from 'node:os';
|
|
12
12
|
import path from 'node:path';
|
|
13
13
|
|
|
14
|
-
import { readSnapshotFromDir, writeSnapshotToDir, SNAPSHOT_MANIFEST_FILE, isSafeRelPath, listSnapshotFiles } from './layout.ts';
|
|
14
|
+
import { readSnapshotFromDir, writeSnapshotToDir, SNAPSHOT_KEEP_CONTENT, SNAPSHOT_KEEP_FILE, SNAPSHOT_MANIFEST_FILE, isSafeRelPath, listSnapshotFiles } from './layout.ts';
|
|
15
15
|
import { createSnapshotFs } from './fs.ts';
|
|
16
16
|
import { hashSection } from './sync-state.ts';
|
|
17
17
|
import type { SnapshotFs } from './fs.ts';
|
|
@@ -169,6 +169,44 @@ test('readSnapshotFromDir: manifest 声明了分区但文件缺失 → 拒绝(
|
|
|
169
169
|
}
|
|
170
170
|
});
|
|
171
171
|
|
|
172
|
+
test('readSnapshotFromDir: 过滤 git 占位文件(名+内容匹配),保留真实同名文件', async () => {
|
|
173
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'dsh-sync-layout-keep-'));
|
|
174
|
+
try {
|
|
175
|
+
await writeSnapshotToDir(sampleSnapshot(), tmp);
|
|
176
|
+
// 模拟 GitTransport.upload 的空分区占位:custom/skills/.gitkeep(占位内容)
|
|
177
|
+
await fs.writeFile(path.join(tmp, 'custom', 'skills', SNAPSHOT_KEEP_FILE), SNAPSHOT_KEEP_CONTENT, 'utf8');
|
|
178
|
+
// 真实同名文件(非占位内容)不得被吞:plugin-files/.gitkeep
|
|
179
|
+
await fs.writeFile(path.join(tmp, 'plugin-files', SNAPSHOT_KEEP_FILE), 'real user file\n', 'utf8');
|
|
180
|
+
|
|
181
|
+
const back = (await readSnapshotFromDir(tmp)) as unknown as PlainSnapshot;
|
|
182
|
+
const skills = back.sections['skills'] as { files: { relativePath: string; data: Uint8Array }[] };
|
|
183
|
+
assert.deepEqual(skills.files.map((f) => f.relativePath), ['coding.md', 'nested/tool.md'], '占位文件应从 files 中过滤');
|
|
184
|
+
const pluginFiles = back.sections['pluginFiles'] as { files: { relativePath: string; data: Uint8Array }[] };
|
|
185
|
+
assert.deepEqual(pluginFiles.files.map((f) => f.relativePath), [SNAPSHOT_KEEP_FILE, 'dsh-ssh/main.js'], '真实 .gitkeep(非占位内容)应保留');
|
|
186
|
+
} finally {
|
|
187
|
+
await fs.rm(tmp, { recursive: true, force: true });
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
test('readSnapshotFromDir: missingFileDir=empty → 文件分区目录缺失降级为空分区;默认仍抛错', async () => {
|
|
192
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'dsh-sync-layout-empty-dir-'));
|
|
193
|
+
try {
|
|
194
|
+
const snap = sampleSnapshot();
|
|
195
|
+
snap.sections['skills'] = { version: 1, files: [] };
|
|
196
|
+
await writeSnapshotToDir(snap, tmp);
|
|
197
|
+
// 模拟 git 远端:空目录未被跟踪 → 目录不存在(manifest 仍声明 skills)
|
|
198
|
+
await fs.rm(path.join(tmp, 'custom', 'skills'), { recursive: true, force: true });
|
|
199
|
+
|
|
200
|
+
// 默认(throw):目录缺失 → 抛错(不静默降级)
|
|
201
|
+
await assert.rejects(() => readSnapshotFromDir(tmp), /快照缺少文件分区目录 custom\/skills\/(skills)/);
|
|
202
|
+
// git 通道语义(empty):目录缺失 = 空文件分区
|
|
203
|
+
const back = (await readSnapshotFromDir(tmp, createSnapshotFs(), { missingFileDir: 'empty' })) as unknown as PlainSnapshot;
|
|
204
|
+
assert.deepEqual(back.sections['skills'], { version: 1, files: [] });
|
|
205
|
+
} finally {
|
|
206
|
+
await fs.rm(tmp, { recursive: true, force: true });
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
172
210
|
test('注入验证:内存 SnapshotFs 驱动同一往返逻辑', async () => {
|
|
173
211
|
const mem: Map<string, Uint8Array> = new Map();
|
|
174
212
|
const snap = sampleSnapshot();
|
package/src/sync/layout.ts
CHANGED
|
@@ -17,6 +17,26 @@ import { isEncryptedSections } from './transport.ts';
|
|
|
17
17
|
|
|
18
18
|
export const SNAPSHOT_MANIFEST_FILE = 'manifest.json';
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* 空文件类分区的 git 占位文件(git 不跟踪空目录):
|
|
22
|
+
* 上传方(GitTransport.upload)给 files 为空的文件类分区目录写入本占位文件,
|
|
23
|
+
* 保证远端仓库保留该目录;读回时仅当「文件名 + 内容」同时匹配才过滤,
|
|
24
|
+
* 避免吞掉用户真实同名文件。占位文件不参与 sectionHashes(基于传入数据计算)。
|
|
25
|
+
* 注意:占位内容不得含换行 —— Windows core.autocrlf 会把 LF 转 CRLF,内容校验会失败。
|
|
26
|
+
*/
|
|
27
|
+
export const SNAPSHOT_KEEP_FILE = '.gitkeep';
|
|
28
|
+
export const SNAPSHOT_KEEP_CONTENT = 'DSH Config Manager sync placeholder (keep empty section dir)';
|
|
29
|
+
const SNAPSHOT_KEEP_BYTES = new TextEncoder().encode(SNAPSHOT_KEEP_CONTENT);
|
|
30
|
+
|
|
31
|
+
function isKeepFile(rel: string, data: Uint8Array): boolean {
|
|
32
|
+
if (rel !== SNAPSHOT_KEEP_FILE) return false;
|
|
33
|
+
if (data.length !== SNAPSHOT_KEEP_BYTES.length) return false;
|
|
34
|
+
for (let i = 0; i < data.length; i++) {
|
|
35
|
+
if (data[i] !== SNAPSHOT_KEEP_BYTES[i]) return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
20
40
|
/** 快照根目录下的 manifest.json 结构 */
|
|
21
41
|
export interface SnapshotDirManifest {
|
|
22
42
|
id: string;
|
|
@@ -131,9 +151,16 @@ export async function writeSnapshotToDir(
|
|
|
131
151
|
|
|
132
152
|
/**
|
|
133
153
|
* 从散文件目录读回快照。
|
|
134
|
-
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 →
|
|
154
|
+
* manifest 声明的分区必须可解析:JSON 分区文件缺失 / 文件分区目录缺失 → 抛错(不静默降级),
|
|
155
|
+
* 但 opts.missingFileDir='empty' 时文件分区目录缺失降级为空分区
|
|
156
|
+
* (git 通道专用:git 不跟踪空目录,目录缺失 = 空文件分区;提交原子性保证非空目录不会缺失)。
|
|
157
|
+
* 读回时过滤 git 占位文件(SNAPSHOT_KEEP_FILE),使 files 与上传方数据一致。
|
|
135
158
|
*/
|
|
136
|
-
export async function readSnapshotFromDir(
|
|
159
|
+
export async function readSnapshotFromDir(
|
|
160
|
+
dir: string,
|
|
161
|
+
fsx: SnapshotFs = createSnapshotFs(),
|
|
162
|
+
opts: { missingFileDir?: 'throw' | 'empty' } = {},
|
|
163
|
+
): Promise<SyncSnapshot> {
|
|
137
164
|
const manifestAbs = joinFs(dir, SNAPSHOT_MANIFEST_FILE);
|
|
138
165
|
if (!(await fsx.exists(manifestAbs))) {
|
|
139
166
|
throw new Error(`快照目录缺少 ${SNAPSHOT_MANIFEST_FILE}: ${dir}`);
|
|
@@ -173,12 +200,19 @@ export async function readSnapshotFromDir(dir: string, fsx: SnapshotFs = createS
|
|
|
173
200
|
if (!(sid in manifest.sectionHashes)) continue;
|
|
174
201
|
const baseAbs = joinFs(dir, prefix);
|
|
175
202
|
if (!(await fsx.isDir(baseAbs))) {
|
|
203
|
+
if (opts.missingFileDir === 'empty') {
|
|
204
|
+
// git 通道降级:目录缺失 = 空文件分区(git 不跟踪空目录,详见函数注释)
|
|
205
|
+
sections[sid as SectionId] = { version: 1, files: [] };
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
176
208
|
throw new Error(`快照缺少文件分区目录 ${prefix}(${sid})`);
|
|
177
209
|
}
|
|
178
210
|
const rels = await listSnapshotFiles(fsx, baseAbs);
|
|
179
211
|
const files: FilesSection['files'] = [];
|
|
180
212
|
for (const rel of rels) {
|
|
181
213
|
const data = await fsx.readFile(joinFs(baseAbs, rel));
|
|
214
|
+
// 过滤 git 占位文件(名 + 内容同时匹配才过滤,避免吞用户真实同名文件)
|
|
215
|
+
if (isKeepFile(rel, data)) continue;
|
|
182
216
|
files.push({ relativePath: rel, data, contentHash: sha256Hex(data) });
|
|
183
217
|
}
|
|
184
218
|
sections[sid as SectionId] = { version: 1, files };
|