@fantasticit/sumi 0.7.1 → 0.7.3
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/README.md +16 -6
- package/dist/adapters.d.ts +5 -0
- package/dist/adapters.js +29 -12
- package/dist/adapters.js.map +1 -1
- package/node_modules/@sumi/create/package.json +1 -1
- package/node_modules/@sumi/kernel/package.json +2 -2
- package/node_modules/@sumi/plugin-sdk/package.json +1 -1
- package/node_modules/@sumi/plugin-sdk/test/isolate-tmpdir.ts +27 -0
- package/node_modules/@sumi/plugins-core/package.json +2 -2
- package/node_modules/@sumi/plugins-governance/README.md +21 -3
- package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +21 -3
- package/node_modules/@sumi/plugins-governance/dist/checkout.js +145 -8
- package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/gate.js +13 -11
- package/node_modules/@sumi/plugins-governance/dist/commands/gate.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +16 -5
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/package.json +2 -2
- package/node_modules/@sumi/plugins-openspec/package.json +2 -2
- package/node_modules/@sumi/plugins-precedent/dist/plugins/selftest.js +20 -7
- package/node_modules/@sumi/plugins-precedent/dist/plugins/selftest.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/package.json +3 -3
- package/node_modules/@sumi/plugins-review/package.json +3 -3
- package/package.json +10 -10
- package/node_modules/@sumi/create/dist/bin.d.ts +0 -2
- package/node_modules/@sumi/create/dist/bin.js +0 -52
- package/node_modules/@sumi/create/dist/bin.js.map +0 -1
- package/node_modules/@sumi/plugins-core/dist/tool-batches.d.ts +0 -11
- package/node_modules/@sumi/plugins-core/dist/tool-batches.js +0 -41
- package/node_modules/@sumi/plugins-core/dist/tool-batches.js.map +0 -1
- package/node_modules/@sumi/plugins-governance/dist/hooks.d.ts +0 -2
- package/node_modules/@sumi/plugins-governance/dist/hooks.js +0 -4
- package/node_modules/@sumi/plugins-governance/dist/hooks.js.map +0 -1
package/README.md
CHANGED
|
@@ -41,13 +41,23 @@
|
|
|
41
41
|
|
|
42
42
|
### hook
|
|
43
43
|
|
|
44
|
-
| 工具 | 写入位置 | 条目
|
|
45
|
-
| ------ | ----------------------- |
|
|
46
|
-
| Claude | `.claude/settings.json` | `PreToolUse`(`Bash\|Edit\|Write\|MultiEdit\|NotebookEdit`)→ 插件的 `beforeTool`;`PostToolUse`(编辑类工具)→ `afterEdit`;`Stop` → `sumi hint` |
|
|
47
|
-
| Codex | `.codex/hooks.json` | `PreToolUse`(`^(Bash\|apply_patch\|Edit\|Write)$`)、`PostToolUse`(`^(apply_patch\|Edit\|Write)
|
|
48
|
-
| Cursor |
|
|
44
|
+
| 工具 | 写入位置 | 条目 |
|
|
45
|
+
| ------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
46
|
+
| Claude | `.claude/settings.json` | `PreToolUse`(`Bash\|Edit\|Write\|MultiEdit\|NotebookEdit`)→ 插件的 `beforeTool`;`PostToolUse`(编辑类工具)→ `afterEdit`;`Stop` → `sumi hint` 与插件的停止检查 |
|
|
47
|
+
| Codex | `.codex/hooks.json` | `PreToolUse`(`^(Bash\|apply_patch\|Edit\|Write)$`)、`PostToolUse`(`^(apply_patch\|Edit\|Write)$`)、`Stop` → 插件的停止检查;无会话结束提示 |
|
|
48
|
+
| Cursor | `.cursor/hooks.json` | `stop` → 插件的停止检查;不支持前置拦截与编辑后 hook,`doctor` 报告能力缺口,依赖 git hook 兜底 |
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
AI 工具以会话当前目录执行 hook,会话可能位于项目子目录,因此命令不依赖当前目录定位 launcher:
|
|
51
|
+
|
|
52
|
+
| 工具 | 命令 |
|
|
53
|
+
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
54
|
+
| Claude | `node "$CLAUDE_PROJECT_DIR/control/bin/sumi.cjs" <命令>`(sh 执行,Windows 上为 Git Bash) |
|
|
55
|
+
| Codex | `node "$(git rev-parse --show-toplevel)/control/bin/sumi.cjs" <命令>`;Windows(`cmd.exe`)用 `commandWindows`:`for /f "delims=" %r in ('git rev-parse --show-toplevel') do @node "%r/control/bin/sumi.cjs" <命令>` |
|
|
56
|
+
| Cursor | `node ./control/bin/sumi.cjs <命令>`(项目 hook 固定从项目根执行) |
|
|
57
|
+
|
|
58
|
+
前置拦截只有退出码 2 会阻断,因此前置拦截条目追加 `|| exit 2`:找不到 launcher、runtime 无效或命令崩溃时同样拒绝,命令的标准错误即拒绝说明。编辑后与停止检查条目的退出码原样返回。
|
|
59
|
+
|
|
60
|
+
更新时只增删 sumi 的条目(命令以上述 launcher 写法、旧版本的 `node ./control/bin/sumi.cjs `、`sumi ` 开头),其他条目保留;旧写法的条目被 `--check` 与 `doctor` 报告为漂移,由 `sumi update` 替换。
|
|
51
61
|
|
|
52
62
|
git hook 固定包含 `pre-commit → node ./control/bin/sumi.cjs run check`,其余由插件 `hooks.git` 声明(同一 hook 不能被重复声明)。写入位置取决于 hook 管理器:
|
|
53
63
|
|
package/dist/adapters.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ interface AgentHookFile {
|
|
|
24
24
|
afterEdit?: string;
|
|
25
25
|
/** 没有插件停止检查时也生成不阻断的会话结束提示。 */
|
|
26
26
|
hint?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 调用项目 launcher 的命令字段(`command`,以及工具支持时按平台覆盖的字段)。
|
|
29
|
+
* AI 工具以会话当前目录执行 hook,会话可能位于项目子目录,命令不得依赖当前目录定位 launcher。
|
|
30
|
+
*/
|
|
31
|
+
invoke: (args: string) => Record<string, string>;
|
|
27
32
|
}
|
|
28
33
|
export interface Adapter {
|
|
29
34
|
name: string;
|
package/dist/adapters.js
CHANGED
|
@@ -8,9 +8,11 @@ import { gitHookScript, HOOK_BLOCK_END, HOOK_BLOCK_START, hookBlock, PROJECT_SUM
|
|
|
8
8
|
import { projectInstruction, topicContext, topics } from './instructions.js';
|
|
9
9
|
import { fileSha256, PROJECT_LAUNCHER, RUNTIME_MANIFEST, runtimeManifestText } from './runtime-manifest.js';
|
|
10
10
|
export const MARK = 'generated-by: sumi update';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
/**
|
|
12
|
+
* 旧版本生成的 hook 命令前缀,更新时一并识别为 sumi 的条目:
|
|
13
|
+
* 全局 sumi,以及 0.7.2 及以前 Claude Code 与 Codex 使用的相对路径 launcher(Cursor 仍使用)。
|
|
14
|
+
*/
|
|
15
|
+
const LEGACY_PREFIXES = ['sumi ', 'npx --no-install sumi ', `${PROJECT_SUMI} `];
|
|
14
16
|
const hash = (text) => createHash('sha256').update(text).digest('hex').slice(0, 16);
|
|
15
17
|
const marked = (body) => `<!-- ${MARK}; content-hash: ${hash(body)} -->\n${body}`;
|
|
16
18
|
const skillFront = (name, description) => `---\nname: ${name}\ndescription: ${description}\n---\n`;
|
|
@@ -53,6 +55,8 @@ export const ADAPTERS = {
|
|
|
53
55
|
before: 'Bash|Edit|Write|MultiEdit|NotebookEdit',
|
|
54
56
|
afterEdit: 'Edit|Write|MultiEdit|NotebookEdit',
|
|
55
57
|
hint: true,
|
|
58
|
+
// 项目设置从会话启动目录读取,$CLAUDE_PROJECT_DIR 即项目根;命令由 sh(Windows 上为 Git Bash)执行。
|
|
59
|
+
invoke: (args) => ({ command: `node "$CLAUDE_PROJECT_DIR/${PROJECT_LAUNCHER}" ${args}` }),
|
|
56
60
|
},
|
|
57
61
|
skill: {
|
|
58
62
|
dir: '.claude/skills',
|
|
@@ -75,12 +79,18 @@ export const ADAPTERS = {
|
|
|
75
79
|
format: 'nested',
|
|
76
80
|
before: '^(Bash|apply_patch|Edit|Write)$',
|
|
77
81
|
afterEdit: '^(apply_patch|Edit|Write)$',
|
|
82
|
+
// Codex 没有项目根变量,按官方建议从 git 顶层定位;Unix 经 $SHELL -lc、Windows 经 cmd.exe /C 执行。
|
|
83
|
+
invoke: (args) => ({
|
|
84
|
+
command: `node "$(git rev-parse --show-toplevel)/${PROJECT_LAUNCHER}" ${args}`,
|
|
85
|
+
commandWindows: `for /f "delims=" %r in ('git rev-parse --show-toplevel') do @node "%r/${PROJECT_LAUNCHER}" ${args}`,
|
|
86
|
+
}),
|
|
78
87
|
},
|
|
79
88
|
},
|
|
80
89
|
cursor: {
|
|
81
90
|
name: 'cursor',
|
|
82
91
|
capabilities: { editIntercept: false, commandIntercept: false, afterEdit: false, stopCheck: true, commands: true },
|
|
83
|
-
|
|
92
|
+
// Cursor 的项目 hook 固定从项目根执行,相对路径不受会话目录影响。
|
|
93
|
+
hooks: { path: '.cursor/hooks.json', format: 'cursor', invoke: (args) => ({ command: `${PROJECT_SUMI} ${args}` }) },
|
|
84
94
|
skill: {
|
|
85
95
|
dir: '.cursor/rules',
|
|
86
96
|
pattern: /^sumi-.+\.mdc$/,
|
|
@@ -148,21 +158,24 @@ export function withBlock(existing, block) {
|
|
|
148
158
|
return existing.slice(0, start) + block + existing.slice(end + HOOK_BLOCK_END.length);
|
|
149
159
|
return `${existing}${existing.endsWith('\n') ? '' : '\n'}${block}\n`;
|
|
150
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* 前置拦截只有退出码 2 会阻断,其他非零退出码被工具当作非阻断错误放行。
|
|
163
|
+
* 找不到 launcher、runtime 无效或命令崩溃都按拒绝处理,命令自己的标准错误即拒绝说明;sh 与 cmd.exe 都支持该写法。
|
|
164
|
+
*/
|
|
165
|
+
const failClosed = (fields) => Object.fromEntries(Object.entries(fields).map(([key, command]) => [key, `${command} || exit 2`]));
|
|
151
166
|
function agentHookGroups(agent, h, hooks) {
|
|
152
167
|
if (h.format === 'cursor') {
|
|
153
|
-
return hooks.stop.length ? { stop: [{
|
|
168
|
+
return hooks.stop.length ? { stop: [{ ...h.invoke(`hook agent-stop ${agent}`), type: 'command', loop_limit: null }] } : {};
|
|
154
169
|
}
|
|
155
|
-
const entry = (matcher, commands) => ({
|
|
170
|
+
const entry = (matcher, commands, before = false) => ({
|
|
156
171
|
matcher,
|
|
157
|
-
hooks: commands.map((command) => ({ type: 'command', command:
|
|
172
|
+
hooks: commands.map((command) => ({ type: 'command', ...(before ? failClosed(h.invoke(command)) : h.invoke(command)) })),
|
|
158
173
|
});
|
|
159
174
|
const stopCommands = [...(h.hint ? ['hint'] : []), ...(hooks.stop.length ? [`hook agent-stop ${agent}`] : [])];
|
|
160
175
|
return {
|
|
161
|
-
...(hooks.beforeTool.length && h.before ? { PreToolUse: [entry(h.before, hooks.beforeTool)] } : {}),
|
|
176
|
+
...(hooks.beforeTool.length && h.before ? { PreToolUse: [entry(h.before, hooks.beforeTool, true)] } : {}),
|
|
162
177
|
...(hooks.afterEdit.length && h.afterEdit ? { PostToolUse: [entry(h.afterEdit, hooks.afterEdit)] } : {}),
|
|
163
|
-
...(stopCommands.length
|
|
164
|
-
? { Stop: [{ hooks: stopCommands.map((command) => ({ type: 'command', command: `${HOOK_PREFIX}${command}` })) }] }
|
|
165
|
-
: {}),
|
|
178
|
+
...(stopCommands.length ? { Stop: [{ hooks: stopCommands.map((command) => ({ type: 'command', ...h.invoke(command) })) }] } : {}),
|
|
166
179
|
};
|
|
167
180
|
}
|
|
168
181
|
export function enabledAgents(config) {
|
|
@@ -241,7 +254,11 @@ function expected(root) {
|
|
|
241
254
|
}
|
|
242
255
|
return { files, agentHooks, gitHooks: hooks.git, manager: hookManager(root), stale };
|
|
243
256
|
}
|
|
244
|
-
|
|
257
|
+
/** sumi 条目的命令前缀:各适配器当前的 launcher 写法与旧版本写法。 */
|
|
258
|
+
const SUMI_PREFIXES = [
|
|
259
|
+
...new Set([...Object.values(ADAPTERS).flatMap((a) => (a.hooks ? [a.hooks.invoke('').command] : [])), ...LEGACY_PREFIXES]),
|
|
260
|
+
];
|
|
261
|
+
const isSumiCommand = (command) => !!command && SUMI_PREFIXES.some((prefix) => command.startsWith(prefix));
|
|
245
262
|
function commandsInHookEntry(entry) {
|
|
246
263
|
if (!entry || typeof entry !== 'object')
|
|
247
264
|
return [];
|
package/dist/adapters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAA6C,MAAM,cAAc,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAA0B,MAAM,uBAAuB,CAAC;AA6CpI,MAAM,CAAC,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAChD;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC;AAEhF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5F,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AAC1F,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,EAAE,CAAC,cAAc,IAAI,kBAAkB,WAAW,SAAS,CAAC;AAEnH,sCAAsC;AACtC,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;QACzG,OAAO,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACnG,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,GAAG,EAAE,gBAAgB;IACrB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,WAAW;IAChD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;CACvE,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,GAAG,EAAE,uBAAuB;IAC5B,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK;IAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE;CACxE,CAAC;AAEF,qCAAqC;AACrC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,eAAe,MAAM,0BAA0B,CAAC;AAErF,MAAM,CAAC,MAAM,QAAQ,GAA4B;IAC/C,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/G,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,wCAAwC;YAChD,SAAS,EAAE,mCAAmC;YAC9C,IAAI,EAAE,IAAI;YACV,wEAAwE;YACxE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,6BAA6B,gBAAgB,KAAK,IAAI,EAAE,EAAE,CAAC;SAC1F;QACD,KAAK,EAAE;YACL,GAAG,EAAE,gBAAgB;YACrB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,WAAW;YAChD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;SACrF;QACD,OAAO,EAAE;YACP,GAAG,EAAE,uBAAuB;YAC5B,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK;YAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;SACtF;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAChH,KAAK,EAAE;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,iCAAiC;YACzC,SAAS,EAAE,4BAA4B;YACvC,2EAA2E;YAC3E,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjB,OAAO,EAAE,0CAA0C,gBAAgB,KAAK,IAAI,EAAE;gBAC9E,cAAc,EAAE,yEAAyE,gBAAgB,KAAK,IAAI,EAAE;aACrH,CAAC;SACH;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClH,yCAAyC;QACzC,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,YAAY,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE;QACnH,KAAK,EAAE;YACL,GAAG,EAAE,eAAe;YACpB,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM;YAC1C,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,8BAA8B,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,MAAM,IAAI,CAAC,EAAE;SAClI;QACD,OAAO,EAAE;YACP,GAAG,EAAE,kBAAkB;YACvB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK;YAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACrD;KACF;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,QAAkB;IAM9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAmB,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,WAAW,CAAC,YAAY,IAAI,UAAU,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACtG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAID,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3H,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1D,IAAI,SAAS;QAAE,OAAO,OAAO,CAAC;IAC9B,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,OAAO,CACZ,IAAI,EACJ,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CACrH,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,QAAuB,EAAE,KAAa;IAC9D,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrH,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC;AACvE,CAAC;AAID;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,MAA8B,EAAE,EAAE,CACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;AAEpG,SAAS,eAAe,CAAC,KAAa,EAAE,CAAgB,EAAE,KAAuC;IAC/F,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7H,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,QAAkB,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QACtE,OAAO;QACP,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;KACzH,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/G,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClI,CAAC;AACJ,CAAC;AA0BD,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,MAAM,MAAM,GAAI,MAA6C,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,MAAkB,EAAE,QAAkB;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SACvC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,gCAAgC;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,2BAA2B,MAAM,CAAC,IAAI,MAAM,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3B,6BAA6B;YAC7B,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAsB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3G,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,GAAG,CACP,gBAAgB,EAChB,mBAAmB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,sCAAsC;IACtC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAe,EAAE,MAAgC,EAAE,EAAE;QACjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CACvC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAC3H,CAAC;QACF,OAAO,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CACvC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7H,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC;YAChC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5H,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChI,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;AACvF,CAAC;AAED,8CAA8C;AAC9C,MAAM,aAAa,GAAG;IACpB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC;CAC5H,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,OAA2B,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/H,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,KAA+C,CAAC;IAC/D,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAQ,IAA8B,CAAC,OAAO,KAAK,QAAQ;YAC7F,CAAC,CAAC,CAAE,IAA4B,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,EAAE,CACP;QACH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,GAAG,GAAwC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QACpE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3D,MAAM,GAAG,GAAwC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,SAAS;QACnH,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,gBAAgB;gBAAE,OAAO,GAAG,IAAI,CAAC;iBACzC,IAAI,IAAI,KAAK,cAAc;gBAAE,OAAO,GAAG,KAAK,CAAC;iBAC7C,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,WAAW,CAAC,QAAiC;IACpD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;IACnD,MAAM,GAAG,GAA8B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+DAA+D;AAC/D,SAAS,WAAW,CAClB,IAAY,EACZ,GAAa;IAEb,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QAC/C,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAChC,KAAK,EAAE,UAAU,IAAI,EAAE;gBACvB,mDAAmD;gBACnD,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC/D,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC;aACjE,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAChI,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7G,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAEzF,oFAAoF;AACpF,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAC/C,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,GAAa,EAAE,EAAE,CACtD,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzG,MAAM,YAAY,GAAG,CAAC,IAAmB,EAAE,EAAE,CAC3C,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,gCAAgC,SAAS,IAAI,CAAC;AAExG,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;aACvD,IAAI,IAAI,KAAK,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACxE,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,CAA4B,EAAE,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,EAAE,EAAE,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO;YAAE,SAAS;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,0CAA0C;IAC1C,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACxE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClF,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,KAAK,CAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACtG,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAQ,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;IAC7F,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CACP,sBAAsB,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpI,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,YAAY,CAAC;QACvC,MAAM,GAAG,GAAG,WAAW,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,QAAQ,KAAK,CAAC;QAC7E,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACtF,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,gBAAgB;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACvF,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,wBAAwB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtF,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sumi/kernel",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "策略中立的编排内核",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"./package.json": "./package.json"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@sumi/plugin-sdk": "0.7.
|
|
16
|
+
"@sumi/plugin-sdk": "0.7.3",
|
|
17
17
|
"yaml": "2.9.1",
|
|
18
18
|
"picomatch": "4.0.7"
|
|
19
19
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 各包 vitest 配置共用的 setupFiles:每个测试文件运行前把系统临时目录(TMPDIR,Windows 为 TEMP/TMP)指向
|
|
3
|
+
* 一个专用目录,测试文件结束后整体删除。
|
|
4
|
+
*
|
|
5
|
+
* 测试创建的仓库、门禁检出(失败时会保留)、自检与命令的临时文件都经 os.tmpdir() 落在这里;
|
|
6
|
+
* 测试启动的子进程(sumi、git hook、门禁)继承该环境,同样写入这里。直接用 vitest CLI、`pnpm test`,
|
|
7
|
+
* 或由 core/test-affected(vitest Node API)与 core/coverage 经根配置的 projects 运行时都会加载本文件。
|
|
8
|
+
*/
|
|
9
|
+
import { mkdtempSync, realpathSync, rmSync } from 'node:fs';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { afterAll } from 'vitest';
|
|
13
|
+
|
|
14
|
+
const NAMES = ['TMPDIR', 'TMP', 'TEMP'] as const;
|
|
15
|
+
const saved = Object.fromEntries(NAMES.map((name) => [name, process.env[name]]));
|
|
16
|
+
// 取真实路径:macOS 的 /var 是 /private/var 的符号链接,git 与子进程报告的路径是后者
|
|
17
|
+
const dir = realpathSync(mkdtempSync(join(tmpdir(), 'sumi-test-')));
|
|
18
|
+
for (const name of NAMES) process.env[name] = dir;
|
|
19
|
+
|
|
20
|
+
// 本文件的 afterAll 先于测试文件注册,按 vitest 默认的 stack 顺序最后运行,测试文件自己的清理先完成
|
|
21
|
+
afterAll(() => {
|
|
22
|
+
for (const name of NAMES) {
|
|
23
|
+
if (saved[name] === undefined) delete process.env[name];
|
|
24
|
+
else process.env[name] = saved[name];
|
|
25
|
+
}
|
|
26
|
+
rmSync(dir, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
|
|
27
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sumi/plugins-core",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "通用检查插件",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"./package.json": "./package.json"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@sumi/plugin-sdk": "0.7.
|
|
16
|
+
"@sumi/plugin-sdk": "0.7.3",
|
|
17
17
|
"yaml": "2.9.1",
|
|
18
18
|
"picomatch": "4.0.7"
|
|
19
19
|
},
|
|
@@ -94,12 +94,30 @@ git branch --set-upstream-to=upstream/main main
|
|
|
94
94
|
**验收流程**
|
|
95
95
|
|
|
96
96
|
0. 先判断人工确认:上述确认中有未完成的,立即拒绝并给出 `sumi approve <id>`,不运行检查;确认后重新推送才进入下面的步骤。
|
|
97
|
-
1.
|
|
97
|
+
1. 先清理本仓库中已无门禁使用的保留检出(见下方“检出的生命周期”),再在系统临时目录的唯一子目录 `sumi-gate-XXXXXX/<oid 前 12 位>` 中用 `git worktree add --detach` 检出被推送提交(位于 Git 内部目录之外)。被推送提交没有项目配置时,不创建检出,也不运行任何流程。
|
|
98
98
|
2. 运行 `gate.prepare`。未配置时按锁文件推断:pnpm 为 `pnpm install --frozen-lockfile --prefer-offline`,yarn、bun 为 `install --frozen-lockfile`,只有 `package.json` 时为 `npm ci --prefer-offline`,没有 `package.json` 时不准备。准备失败,或准备过程改写了受检文件,都算不通过。
|
|
99
99
|
3. 在检出中运行 `sumi run <gate.flow> --commit <oid> --json [--base <基准>] [--tier <gate.tier>]`。门禁现场重跑,不认已有的运行记录,只复用按内容存放的、已接受的评审结果。
|
|
100
|
-
4.
|
|
100
|
+
4. 运行后受检文件被改写,算不通过。通过时删除检出;不通过时保留检出,提示其路径与清理策略:检出仅供排查,之后的运行会自动清理它,其中的改动会被丢弃,修复请在作者工作树中进行。
|
|
101
101
|
5. 结论为 `pending`(例如评审未完成)时,门禁不派发评审,而是给出同范围的工作区命令 `sumi run <flow> [--tier …] --base <基准>`(无基准时为 `--all`),在工作区完成后再推送同一提交。
|
|
102
102
|
|
|
103
|
+
**检出的生命周期**
|
|
104
|
+
|
|
105
|
+
推送门禁与 `pr-report` 共用同一套检出管理:
|
|
106
|
+
|
|
107
|
+
- 创建:每次运行在系统临时目录(`TMPDIR` 等,因环境而异)下 `mkdtemp` 一个 `sumi-gate-XXXXXX` 父目录,先写入标记文件 `sumi-gate.json`(记录当前进程 pid 与创建时间),再在其中登记 worktree `<oid 前 12 位>`。同一提交的并发检查各用各的目录。
|
|
108
|
+
- 通过:用 `git worktree remove --force` 删除检出,再删除父目录(只删除符合下方第 2 条布局的父目录,不符合时什么也不做)。`git worktree remove` 失败(例如检出中的 `.git` 文件损坏)时,带标记的父目录直接删除并 `git worktree prune`,不留目录与登记。
|
|
109
|
+
- 意外抛错:同样删除检出与登记后再报错。
|
|
110
|
+
- 不通过(检查失败、评审未完成、环境准备失败、受检文件被改写等):保留检出与登记供排查,并在输出中给出路径与清理策略。
|
|
111
|
+
- 被中断或崩溃(Ctrl-C、kill、断电):进程来不及清理,检出与登记暂时留下,由下一次运行清理。
|
|
112
|
+
|
|
113
|
+
清理在每次创建检出之前进行:本仓库中已无门禁使用的 Sumi 检出,按创建时间(标记中的时间;旧版无标记的取父目录修改时间)只保留最新的一个作为最近一次失败的现场,其余删除;仍被使用的检出(含本进程的)不动。因此另一次门禁或 `pr-report` 不会立即抹掉刚失败的现场,而本仓库在没有门禁运行时最多留下一个保留检出(加上本次运行失败时保留的)。保留检出中的改动会在被清理时丢弃,修复始终在作者工作树中进行。判定方法:
|
|
114
|
+
|
|
115
|
+
1. 只看本仓库 `git worktree list` 登记的 worktree(不扫描临时目录,因此不论检出位于哪个临时根目录都能找到,也不会碰到其他仓库或未登记的目录);锁定的 worktree 不处理。
|
|
116
|
+
2. 父目录名须为 `sumi-gate-XXXXXX`、检出目录名须为 12 位十六进制;父目录中只能有检出目录与标记文件。不符合的一律不动。
|
|
117
|
+
3. 有标记时,标记中的进程仍存活(或无权探测)即视为正在使用,不清理——同一台机器上其他仓库、其他 worktree 乃至同仓库并发运行的门禁都按此保护;本进程自己的检出也不清理。没有标记的检出来自旧版本,创建超过一小时才视为不再使用。
|
|
118
|
+
|
|
119
|
+
清理尽力而为,失败不影响本次门禁。不再登记在任何仓库中的旧 `sumi-gate-*` 目录不会被自动删除,可在确认没有门禁运行后手动删除。
|
|
120
|
+
|
|
103
121
|
## 人工确认与编辑窗口
|
|
104
122
|
|
|
105
123
|
确认请求、确认记录与编辑窗口都存放在 `<git 公共目录>/sumi/` 下(`requests/`、`approvals/`、`unlock.json`),所有 worktree 共用,不在工作树中,也不随提交传播。同一对象重复登记得到同一个请求 id。`requireApproval` 由包入口导出,供其他插件发起确认。
|
|
@@ -134,7 +152,7 @@ guard 只按工作区当前的项目配置判断受保护路径。相对路径
|
|
|
134
152
|
1. 用 `gh pr view` 取 PR 的头提交、GitHub 当前目标分支 head、目标分支名称和 URL。本地 `HEAD` 必须等于 PR 头提交。
|
|
135
153
|
2. 以头提交与 GitHub 返回的精确目标分支 head 的合并基础为基准,按与门禁相同的方式(独立检出、`gate.*` 配置)现场运行门禁流程。这个范围不依赖本地可能过期或属于 fork 的 `origin/<目标分支>`;若本地缺少精确目标提交,只从 PR URL 对应的基仓库补取目标分支,不改写本地分支和 remote tracking ref。
|
|
136
154
|
3. 结论为 `pending` 时不发布,给出工作区命令。没有得到结论时也不发布。
|
|
137
|
-
4. 生成评论:结论、范围、流程与档位、各步骤状态表(不含不适用的步骤)、各步骤的报告段落、error 级问题(最多 30 条)。评论以稳定标记 `<!-- sumi-pr-report -->` 开头,下一行用 `<!-- sumi-pr-report-head:<完整 OID> -->` 绑定当前 PR 头提交。同一 PR 上已有稳定标记的评论时,通过 `gh api` 更新它,否则用 `gh pr comment`
|
|
155
|
+
4. 生成评论:结论、范围、流程与档位、各步骤状态表(不含不适用的步骤)、各步骤的报告段落、error 级问题(最多 30 条)。评论以稳定标记 `<!-- sumi-pr-report -->` 开头,下一行用 `<!-- sumi-pr-report-head:<完整 OID> -->` 绑定当前 PR 头提交。同一 PR 上已有稳定标记的评论时,通过 `gh api` 更新它,否则用 `gh pr comment` 新建。正文先写入临时目录 `sumi-pr-report-*` 中的文件交给 gh,无论发布成功与否,命令结束前都删除该目录。
|
|
138
156
|
|
|
139
157
|
### 附加图片或视频
|
|
140
158
|
|
|
@@ -23,16 +23,34 @@ export interface CheckoutRun {
|
|
|
23
23
|
/** 门禁流程与档位(来自被检提交的项目配置)。 */
|
|
24
24
|
flow: string;
|
|
25
25
|
tier?: string;
|
|
26
|
-
/**
|
|
26
|
+
/** 检出目录;通过且未被改写时已删除,否则保留供排查(见 retainedNotice)。 */
|
|
27
27
|
wt: string;
|
|
28
28
|
}
|
|
29
|
+
/** 父目录中的标记文件:证明目录由 Sumi 创建,并记录正在使用它的门禁进程。 */
|
|
30
|
+
export declare const GATE_MARKER = "sumi-gate.json";
|
|
31
|
+
/**
|
|
32
|
+
* 清理本仓库登记的、由 Sumi 创建且已无门禁使用的保留检出(失败时保留的、被中断或崩溃遗留的),
|
|
33
|
+
* 其中创建最晚的一个作为最近一次失败的现场保留,不被另一次运行立即抹掉;仍被使用的检出(含本进程的)不动。
|
|
34
|
+
* 只处理 git worktree list 中的条目,从不扫描临时目录,因此不会删除其他仓库或非 Sumi 创建的目录。
|
|
35
|
+
* 尽力而为:任何错误都不影响本次门禁。返回被清理的检出路径。
|
|
36
|
+
*/
|
|
37
|
+
export declare function sweepGateWorktrees(root: string, now?: number): string[];
|
|
29
38
|
/**
|
|
30
39
|
* 在 Git 内部目录之外创建一次性门禁 worktree。
|
|
31
|
-
*
|
|
40
|
+
* 唯一的临时父目录避免同一提交的并发检查互相复用或删除现场;父目录中的标记文件记录本进程 pid,
|
|
41
|
+
* 在登记 worktree 之前写入,使并发运行的清理始终能识别出它正在使用。
|
|
42
|
+
* 创建前先清理本仓库中已无门禁使用的保留检出。
|
|
32
43
|
*/
|
|
33
44
|
export declare function createGateWorktree(root: string, oid: string, temporaryRoot?: string): string;
|
|
34
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* 移除门禁 worktree、其唯一临时父目录与 worktree 登记。
|
|
47
|
+
* 只处理符合 Sumi 布局的检出(见 gateLayout),否则什么也不做并返回 false,绝不删除其他目录。
|
|
48
|
+
* git worktree remove 失败(例如检出中的 .git 文件已损坏)时,仅对带 Sumi 标记的父目录
|
|
49
|
+
* 直接删除并 prune 登记;没有标记的旧版检出保留现场。返回检出目录是否已不存在。
|
|
50
|
+
*/
|
|
35
51
|
export declare function removeGateWorktree(root: string, wt: string): boolean;
|
|
52
|
+
/** 检出仍保留时给出的说明(路径与清理策略);检出已删除时为 null。 */
|
|
53
|
+
export declare function retainedNotice(run: CheckoutRun): string | null;
|
|
36
54
|
/** 未配置 gate.prepare 时按检出中的锁文件推断依赖安装命令;没有 package.json 时不准备。 */
|
|
37
55
|
export declare function defaultPrepare(wt: string): string[];
|
|
38
56
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { existsSync, mkdtempSync, rmSync } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
4
|
+
import { basename, dirname, join } from 'node:path';
|
|
5
5
|
import { PROJECT_SUMI, spawnCommandSync } from '@sumi/plugin-sdk';
|
|
6
6
|
import { configAt } from './protected.js';
|
|
7
7
|
const git = (root, args, cwd = root) => execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true }).trim();
|
|
@@ -14,15 +14,121 @@ const tryGit = (root, args) => {
|
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
16
|
const trackedClean = (root, wt) => git(root, ['status', '--porcelain', '--untracked-files=no'], wt).split('\n').filter(Boolean);
|
|
17
|
+
/** 检出父目录(mkdtemp 生成)与检出目录(提交前 12 位)的形状;不符合的目录一律不视为 Sumi 创建。 */
|
|
18
|
+
const PARENT = /^sumi-gate-[A-Za-z0-9]{6}$/;
|
|
19
|
+
const LEAF = /^[0-9a-f]{12}$/;
|
|
20
|
+
/** 父目录中的标记文件:证明目录由 Sumi 创建,并记录正在使用它的门禁进程。 */
|
|
21
|
+
export const GATE_MARKER = 'sumi-gate.json';
|
|
22
|
+
/** 没有标记文件的旧版检出:创建超过此时长才视为不再使用。 */
|
|
23
|
+
const LEGACY_IDLE_MS = 60 * 60 * 1000;
|
|
24
|
+
const readMarker = (parent) => {
|
|
25
|
+
try {
|
|
26
|
+
const value = JSON.parse(readFileSync(join(parent, GATE_MARKER), 'utf8'));
|
|
27
|
+
return Number.isInteger(value.pid) && typeof value.created === 'number' ? value : null;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/** 进程是否存活:没有权限探测(EPERM)时按存活处理,宁可不清理。 */
|
|
34
|
+
function alive(pid) {
|
|
35
|
+
if (pid === process.pid)
|
|
36
|
+
return true;
|
|
37
|
+
try {
|
|
38
|
+
process.kill(pid, 0);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return error.code === 'EPERM';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 检出是否符合 Sumi 创建的布局:父目录名为 sumi-gate-XXXXXX、检出目录名为提交前 12 位,
|
|
47
|
+
* 父目录中只有检出目录与标记文件(检出目录已不存在时只剩标记)。返回标记(旧版检出为 null),
|
|
48
|
+
* 不符合时返回 false。清理与删除都以此为前提,不符合的目录一律不动。
|
|
49
|
+
*/
|
|
50
|
+
function gateLayout(wt) {
|
|
51
|
+
const parent = dirname(wt);
|
|
52
|
+
if (!PARENT.test(basename(parent)) || !LEAF.test(basename(wt)))
|
|
53
|
+
return false;
|
|
54
|
+
let entries;
|
|
55
|
+
try {
|
|
56
|
+
entries = readdirSync(parent);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const marker = readMarker(parent);
|
|
62
|
+
const allowed = marker ? [GATE_MARKER, basename(wt)] : [basename(wt)];
|
|
63
|
+
return entries.every((e) => allowed.includes(e)) ? { marker } : false;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 已无门禁使用的 Sumi 检出返回其创建时间,否则返回 null。
|
|
67
|
+
* 有标记时以其中进程是否存活为准、创建时间取标记;没有标记的旧版检出须创建超过一小时,创建时间取父目录 mtime。
|
|
68
|
+
*/
|
|
69
|
+
function staleSince(wt, now) {
|
|
70
|
+
const layout = gateLayout(wt);
|
|
71
|
+
if (!layout)
|
|
72
|
+
return null;
|
|
73
|
+
if (layout.marker)
|
|
74
|
+
return alive(layout.marker.pid) ? null : layout.marker.created;
|
|
75
|
+
try {
|
|
76
|
+
const created = statSync(dirname(wt)).mtimeMs;
|
|
77
|
+
return now - created > LEGACY_IDLE_MS ? created : null;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** 本仓库登记的全部 worktree 路径(git worktree list);锁定的 worktree 不列出。 */
|
|
84
|
+
function registeredWorktrees(root) {
|
|
85
|
+
const out = tryGit(root, ['worktree', 'list', '--porcelain']);
|
|
86
|
+
if (!out)
|
|
87
|
+
return [];
|
|
88
|
+
return out
|
|
89
|
+
.split('\n\n')
|
|
90
|
+
.map((block) => block.split('\n'))
|
|
91
|
+
.filter((lines) => !lines.some((l) => l === 'locked' || l.startsWith('locked ')))
|
|
92
|
+
.map((lines) => lines.find((l) => l.startsWith('worktree '))?.slice('worktree '.length))
|
|
93
|
+
.filter((p) => !!p);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 清理本仓库登记的、由 Sumi 创建且已无门禁使用的保留检出(失败时保留的、被中断或崩溃遗留的),
|
|
97
|
+
* 其中创建最晚的一个作为最近一次失败的现场保留,不被另一次运行立即抹掉;仍被使用的检出(含本进程的)不动。
|
|
98
|
+
* 只处理 git worktree list 中的条目,从不扫描临时目录,因此不会删除其他仓库或非 Sumi 创建的目录。
|
|
99
|
+
* 尽力而为:任何错误都不影响本次门禁。返回被清理的检出路径。
|
|
100
|
+
*/
|
|
101
|
+
export function sweepGateWorktrees(root, now = Date.now()) {
|
|
102
|
+
const stale = registeredWorktrees(root)
|
|
103
|
+
.map((wt) => ({ wt, created: staleSince(wt, now) }))
|
|
104
|
+
.filter((c) => c.created !== null)
|
|
105
|
+
.sort((a, b) => b.created - a.created)
|
|
106
|
+
.slice(1);
|
|
107
|
+
const removed = [];
|
|
108
|
+
for (const { wt } of stale) {
|
|
109
|
+
try {
|
|
110
|
+
if (removeGateWorktree(root, wt))
|
|
111
|
+
removed.push(wt);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// 尽力而为
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return removed;
|
|
118
|
+
}
|
|
17
119
|
/**
|
|
18
120
|
* 在 Git 内部目录之外创建一次性门禁 worktree。
|
|
19
|
-
*
|
|
121
|
+
* 唯一的临时父目录避免同一提交的并发检查互相复用或删除现场;父目录中的标记文件记录本进程 pid,
|
|
122
|
+
* 在登记 worktree 之前写入,使并发运行的清理始终能识别出它正在使用。
|
|
123
|
+
* 创建前先清理本仓库中已无门禁使用的保留检出。
|
|
20
124
|
*/
|
|
21
125
|
export function createGateWorktree(root, oid, temporaryRoot = tmpdir()) {
|
|
22
126
|
tryGit(root, ['worktree', 'prune']);
|
|
127
|
+
sweepGateWorktrees(root);
|
|
23
128
|
const parent = mkdtempSync(join(temporaryRoot, 'sumi-gate-'));
|
|
24
129
|
const wt = join(parent, oid.slice(0, 12));
|
|
25
130
|
try {
|
|
131
|
+
writeFileSync(join(parent, GATE_MARKER), `${JSON.stringify({ pid: process.pid, created: Date.now() })}\n`);
|
|
26
132
|
git(root, ['worktree', 'add', '-q', '--detach', wt, oid]);
|
|
27
133
|
return wt;
|
|
28
134
|
}
|
|
@@ -31,13 +137,33 @@ export function createGateWorktree(root, oid, temporaryRoot = tmpdir()) {
|
|
|
31
137
|
throw error;
|
|
32
138
|
}
|
|
33
139
|
}
|
|
34
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* 移除门禁 worktree、其唯一临时父目录与 worktree 登记。
|
|
142
|
+
* 只处理符合 Sumi 布局的检出(见 gateLayout),否则什么也不做并返回 false,绝不删除其他目录。
|
|
143
|
+
* git worktree remove 失败(例如检出中的 .git 文件已损坏)时,仅对带 Sumi 标记的父目录
|
|
144
|
+
* 直接删除并 prune 登记;没有标记的旧版检出保留现场。返回检出目录是否已不存在。
|
|
145
|
+
*/
|
|
35
146
|
export function removeGateWorktree(root, wt) {
|
|
36
|
-
|
|
147
|
+
const layout = gateLayout(wt);
|
|
148
|
+
if (!layout)
|
|
37
149
|
return false;
|
|
38
|
-
|
|
150
|
+
const parent = dirname(wt);
|
|
151
|
+
if (tryGit(root, ['worktree', 'remove', '--force', wt]) === null) {
|
|
152
|
+
if (!layout.marker)
|
|
153
|
+
return false;
|
|
154
|
+
rmSync(parent, { recursive: true, force: true });
|
|
155
|
+
tryGit(root, ['worktree', 'prune']);
|
|
156
|
+
return !existsSync(wt);
|
|
157
|
+
}
|
|
158
|
+
rmSync(parent, { recursive: true, force: true });
|
|
39
159
|
return true;
|
|
40
160
|
}
|
|
161
|
+
/** 检出仍保留时给出的说明(路径与清理策略);检出已删除时为 null。 */
|
|
162
|
+
export function retainedNotice(run) {
|
|
163
|
+
if (!run.wt || !existsSync(run.wt))
|
|
164
|
+
return null;
|
|
165
|
+
return `检出保留在 ${run.wt},修复请在作者工作树中进行;该检出仅供排查,之后在本仓库运行门禁或 pr-report 时会被自动清理(本仓库只保留最近一次失败的检出),其中的改动会被丢弃`;
|
|
166
|
+
}
|
|
41
167
|
/** 解析 sumi run --json 的输出;没有输出或不是 JSON 对象时返回 null。 */
|
|
42
168
|
function parseResult(stdout) {
|
|
43
169
|
try {
|
|
@@ -75,6 +201,17 @@ export function runGateFlow(root, oid, base, log = () => { }) {
|
|
|
75
201
|
const flow = gate.flow ?? 'check';
|
|
76
202
|
const wt = createGateWorktree(root, oid);
|
|
77
203
|
const out = { flow, ...(gate.tier ? { tier: gate.tier } : {}), wt, brief: '' };
|
|
204
|
+
try {
|
|
205
|
+
return runInGateWorktree(root, oid, base, gate, out, log);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
// 意外抛错:没有可供排查的结论,不保留检出与登记
|
|
209
|
+
removeGateWorktree(root, wt);
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function runInGateWorktree(root, oid, base, gate, out, log) {
|
|
214
|
+
const { flow, wt } = out;
|
|
78
215
|
const elapsed = (start) => `${((Date.now() - start) / 1000).toFixed(1)}s`;
|
|
79
216
|
const prepare = gate.prepare ?? defaultPrepare(wt);
|
|
80
217
|
if (prepare.length) {
|
|
@@ -83,7 +220,7 @@ export function runGateFlow(root, oid, base, log = () => { }) {
|
|
|
83
220
|
const [cmd, ...args] = prepare;
|
|
84
221
|
const r = spawnCommandSync(cmd, args, { cwd: wt, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024, windowsHide: true });
|
|
85
222
|
if (r.status !== 0)
|
|
86
|
-
return { ...out, problem: `环境准备失败:${prepare.join(' ')}
|
|
223
|
+
return { ...out, problem: `环境准备失败:${prepare.join(' ')}` };
|
|
87
224
|
log(` 环境就绪(${elapsed(start)})`);
|
|
88
225
|
}
|
|
89
226
|
const dirty = trackedClean(root, wt);
|
|
@@ -91,7 +228,7 @@ export function runGateFlow(root, oid, base, log = () => { }) {
|
|
|
91
228
|
return { ...out, problem: `环境准备改写了受检文件:${dirty.join('、')}` };
|
|
92
229
|
const launcher = join(wt, 'control/bin/sumi.cjs');
|
|
93
230
|
if (!existsSync(launcher))
|
|
94
|
-
return { ...out, problem:
|
|
231
|
+
return { ...out, problem: '受检提交缺少项目 Sumi launcher:control/bin/sumi.cjs' };
|
|
95
232
|
const cmd = process.execPath;
|
|
96
233
|
const args = [launcher, 'run', flow, '--commit', oid, '--json', ...(base ? ['--base', base] : [])];
|
|
97
234
|
if (gate.tier)
|