odai-dsh-agent 0.2.36 → 0.2.37

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.
Files changed (74) hide show
  1. package/README.md +8 -8
  2. package/build/src/installer.d.mts.map +1 -1
  3. package/build/src/installer.mjs +0 -1
  4. package/build/src/installer.mjs.map +1 -1
  5. package/package.json +3 -3
  6. package/preset/odai/runtime/context-activation.d.mts +2 -11
  7. package/preset/odai/runtime/context-activation.d.mts.map +1 -1
  8. package/preset/odai/runtime/context-activation.mjs +2 -14
  9. package/preset/odai/runtime/context-activation.mjs.map +1 -1
  10. package/preset/odai/runtime/context-capability.d.mts +1 -1
  11. package/preset/odai/runtime/context-capability.d.mts.map +1 -1
  12. package/preset/odai/runtime/context-capability.mjs +1 -3
  13. package/preset/odai/runtime/context-capability.mjs.map +1 -1
  14. package/preset/odai/runtime/governance-bundle.d.mts +3 -3
  15. package/preset/odai/runtime/governance-bundle.d.mts.map +1 -1
  16. package/preset/odai/runtime/governance-bundle.mjs +2 -2
  17. package/preset/odai/runtime/governance-bundle.mjs.map +1 -1
  18. package/preset/odai/runtime/governance.d.mts +0 -1
  19. package/preset/odai/runtime/governance.d.mts.map +1 -1
  20. package/preset/odai/runtime/governance.mjs +0 -21
  21. package/preset/odai/runtime/governance.mjs.map +1 -1
  22. package/preset/odai/runtime/index.d.mts.map +1 -1
  23. package/preset/odai/runtime/index.mjs +4 -3
  24. package/preset/odai/runtime/index.mjs.map +1 -1
  25. package/preset/odai/runtime/prompt-runtime.d.mts +0 -2
  26. package/preset/odai/runtime/prompt-runtime.d.mts.map +1 -1
  27. package/preset/odai/runtime/prompt-runtime.mjs +3 -38
  28. package/preset/odai/runtime/prompt-runtime.mjs.map +1 -1
  29. package/preset/odai/runtime/responsibility-gap.d.mts +0 -1
  30. package/preset/odai/runtime/responsibility-gap.d.mts.map +1 -1
  31. package/preset/odai/runtime/responsibility-gap.mjs +0 -3
  32. package/preset/odai/runtime/responsibility-gap.mjs.map +1 -1
  33. package/preset/odai/runtime/runtime-config.d.mts +0 -1
  34. package/preset/odai/runtime/runtime-config.d.mts.map +1 -1
  35. package/preset/odai/runtime/runtime-config.mjs +1 -7
  36. package/preset/odai/runtime/runtime-config.mjs.map +1 -1
  37. package/preset/odai/runtime/runtime-support.d.mts +1 -7
  38. package/preset/odai/runtime/runtime-support.d.mts.map +1 -1
  39. package/preset/odai/runtime/runtime-support.mjs +9 -4
  40. package/preset/odai/runtime/runtime-support.mjs.map +1 -1
  41. package/preset/odai/runtime/runtime-types.d.mts +0 -1
  42. package/preset/odai/runtime/runtime-types.d.mts.map +1 -1
  43. package/preset/odai/runtime/semantic-memory.d.mts.map +1 -1
  44. package/preset/odai/runtime/semantic-memory.mjs +13 -7
  45. package/preset/odai/runtime/semantic-memory.mjs.map +1 -1
  46. package/preset/odai/runtime/skill-bundle.d.mts +2 -2
  47. package/preset/odai/runtime/skill-bundle.d.mts.map +1 -1
  48. package/preset/odai/runtime/skill-bundle.mjs +1 -1
  49. package/preset/odai/runtime/skill-bundle.mjs.map +1 -1
  50. package/preset/odai/runtime/tool-runtime.d.mts +1 -3
  51. package/preset/odai/runtime/tool-runtime.d.mts.map +1 -1
  52. package/preset/odai/runtime/tool-runtime.mjs +2 -12
  53. package/preset/odai/runtime/tool-runtime.mjs.map +1 -1
  54. package/preset/odai/skills/odai/SKILL.md +28 -17
  55. package/preset/odai/skills/odai/manifest.json +4 -4
  56. package/preset/odai/skills/odai/references/craft.md +8 -2
  57. package/preset/odai/skills/odai/references/dao.md +5 -4
  58. package/preset/odai/skills/odai/references/leverage.md +4 -4
  59. package/preset/odai/skills/odai/references/memory.md +20 -0
  60. package/preset/odai/skills/odai/references/planning.md +6 -6
  61. package/preset/odai/skills/odai/references/verification.md +2 -2
  62. package/preset/odai/skills/odai-orchestration/SKILL.md +1 -11
  63. package/preset/odai/skills/odai-orchestration/assets/claude-agents/agent.md +0 -2
  64. package/preset/odai/skills/odai-orchestration/manifest.json +3 -2
  65. package/preset/odai/skills/odai-orchestration/references/install.md +10 -0
  66. package/preset/odai/skills/odai-orchestration/references/orchestration.md +0 -6
  67. package/preset/odai/skills/odai-orchestration/scripts/compose-contracts.d.mts +3 -3
  68. package/preset/odai/skills/odai-orchestration/scripts/compose-contracts.mjs +2 -2
  69. package/preset/odai/skills/odai-orchestration/scripts/install-routing.mjs +100 -55
  70. package/preset/odai/runtime/skill-evolution.d.mts +0 -112
  71. package/preset/odai/runtime/skill-evolution.d.mts.map +0 -1
  72. package/preset/odai/runtime/skill-evolution.mjs +0 -1440
  73. package/preset/odai/runtime/skill-evolution.mjs.map +0 -1
  74. package/preset/odai/skills/odai/references/support.md +0 -23
@@ -2,7 +2,7 @@
2
2
 
3
3
  import {
4
4
  existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, renameSync,
5
- rmSync, unlinkSync, writeFileSync,
5
+ rmdirSync, rmSync, unlinkSync, writeFileSync,
6
6
  } from "node:fs";
7
7
  import { homedir, tmpdir } from "node:os";
8
8
  import path from "node:path";
@@ -52,60 +52,70 @@ const previous = loadManifest(manifestPath);
52
52
  assertSafeDestination(configRoot, layout, Object.keys(previous?.files || {}));
53
53
  assertManagedState(configRoot, layout, previous);
54
54
 
55
- if (args.uninstall) {
56
- if (hasMappingArgs(args)) fail("--uninstall 不接受模型、推理档或 policy 参数");
57
- if (!previous) returnResult({ status: "not-installed", host: args.host, scope: args.scope, target: targetRoot, configRoot, requiresNewSession: false });
58
- const removed = uninstall(configRoot, manifestPath, previous);
59
- returnResult({ status: "uninstalled", host: args.host, scope: args.scope, target: targetRoot, configRoot, removed, requiresNewSession: true });
60
- }
55
+ returnResult(main());
61
56
 
62
- for (const role of requiredRoles) if (!args[`${role}Model`]) fail(`缺少 --${role}-model`);
63
- if (args.researcherEffort && !args.researcherModel) fail("--researcher-effort 需要同时提供 --researcher-model");
64
- if (args.frontendEffort && !args.frontendModel) fail("--frontend-effort 需要同时提供 --frontend-model");
65
- if (!existsSync(builder)) fail(`缺少路由生成器:${builder}`);
66
-
67
- const generatedRoot = mkdtempSync(path.join(tmpdir(), `odai-${args.host}-routing-install-`));
68
- const snapshots = new Map();
69
- try {
70
- const generated = buildAdapter(generatedRoot, configRoot);
71
- const files = collectGeneratedFiles(generatedRoot, layout);
72
- const originalFiles = prepareOriginalFiles(configRoot, previous, files);
73
- const settings = planSettings(configRoot, layout, previous);
74
- const candidates = new Set([...layout.managedFiles, ...layout.retiredFiles, ...Object.keys(previous?.files || {}), manifestName]);
75
- for (const relative of candidates) snapshot(configRoot, relative, snapshots);
76
- if (settings) snapshot(configRoot, settings.file, snapshots);
77
- for (const [relative, content] of files) atomicWrite(path.join(configRoot, relative), content);
78
- if (settings) atomicWrite(path.join(configRoot, settings.file), Buffer.from(`${JSON.stringify(settings.value, null, 2)}\n`));
79
- removeObsolete(configRoot, previous, files);
80
- const manifest = {
81
- version: 13,
82
- id: "odai-routing-installation",
83
- host: args.host,
84
- scope: args.scope,
85
- target: targetRoot,
86
- installedAt: new Date().toISOString(),
87
- generatedFrom: "skills/odai-orchestration/scripts/install-routing.mjs",
88
- governance: generated.governance,
89
- orchestration: generated.orchestration,
90
- mapping: generated.mapping,
91
- routingPolicy: generated.routing_policy,
92
- activation: generated.activation,
93
- files: Object.fromEntries([...files].map(([relative, content]) => [relative, sha256(content)])),
94
- originalFiles,
95
- settings: settings?.manifest || null,
96
- };
97
- atomicWrite(manifestPath, Buffer.from(`${JSON.stringify(manifest, null, 2)}\n`));
98
- assertManagedState(configRoot, layout, manifest);
99
- returnResult({
100
- status: previous ? "updated" : "installed", host: args.host, scope: args.scope,
101
- target: targetRoot, configRoot, mapping: generated.mapping, routingPolicy: generated.routing_policy,
102
- activation: generated.activation, requiresNewSession: true,
103
- });
104
- } catch (error) {
105
- restore(configRoot, snapshots);
106
- throw error;
107
- } finally {
108
- rmSync(generatedRoot, { recursive: true, force: true });
57
+ function main() {
58
+ if (args.uninstall) {
59
+ if (hasMappingArgs(args)) fail("--uninstall 不接受模型、推理档或 policy 参数");
60
+ if (!previous) return { status: "not-installed", host: args.host, scope: args.scope, target: targetRoot, configRoot, requiresNewSession: false };
61
+ const removed = uninstall(configRoot, manifestPath, previous);
62
+ return { status: "uninstalled", host: args.host, scope: args.scope, target: targetRoot, configRoot, removed, requiresNewSession: true };
63
+ }
64
+
65
+ for (const role of requiredRoles) if (!args[`${role}Model`]) fail(`缺少 --${role}-model`);
66
+ if (args.researcherEffort && !args.researcherModel) fail("--researcher-effort 需要同时提供 --researcher-model");
67
+ if (args.frontendEffort && !args.frontendModel) fail("--frontend-effort 需要同时提供 --frontend-model");
68
+ if (!existsSync(builder)) fail(`缺少路由生成器:${builder}`);
69
+
70
+ const generatedRoot = mkdtempSync(path.join(tmpdir(), `odai-${args.host}-routing-install-`));
71
+ const snapshots = new Map();
72
+ const newDirectories = [];
73
+ try {
74
+ const generated = buildAdapter(generatedRoot, configRoot);
75
+ const files = collectGeneratedFiles(generatedRoot, layout);
76
+ const originalFiles = prepareOriginalFiles(configRoot, previous, files);
77
+ const settings = planSettings(configRoot, layout, previous);
78
+ for (const relative of directoryAncestors([...files.keys(), manifestName, ...(settings ? [settings.file] : [])])) {
79
+ if (!existsSync(path.join(configRoot, relative))) newDirectories.push(relative);
80
+ }
81
+ const candidates = new Set([...layout.managedFiles, ...layout.retiredFiles, ...Object.keys(previous?.files || {}), manifestName]);
82
+ for (const relative of candidates) snapshot(configRoot, relative, snapshots);
83
+ if (settings) snapshot(configRoot, settings.file, snapshots);
84
+ for (const [relative, content] of files) atomicWrite(path.join(configRoot, relative), content);
85
+ if (settings) atomicWrite(path.join(configRoot, settings.file), Buffer.from(`${JSON.stringify(settings.value, null, 2)}\n`));
86
+ removeObsolete(configRoot, previous, files);
87
+ const manifest = {
88
+ version: 13,
89
+ id: "odai-routing-installation",
90
+ host: args.host,
91
+ scope: args.scope,
92
+ target: targetRoot,
93
+ installedAt: new Date().toISOString(),
94
+ generatedFrom: "skills/odai-orchestration/scripts/install-routing.mjs",
95
+ governance: generated.governance,
96
+ orchestration: generated.orchestration,
97
+ mapping: generated.mapping,
98
+ routingPolicy: generated.routing_policy,
99
+ activation: generated.activation,
100
+ files: Object.fromEntries([...files].map(([relative, content]) => [relative, sha256(content)])),
101
+ originalFiles,
102
+ createdDirectories: [...new Set([...(previous?.createdDirectories || []), ...newDirectories])],
103
+ settings: settings?.manifest || null,
104
+ };
105
+ atomicWrite(manifestPath, Buffer.from(`${JSON.stringify(manifest, null, 2)}\n`));
106
+ assertManagedState(configRoot, layout, manifest);
107
+ return {
108
+ status: previous ? "updated" : "installed", host: args.host, scope: args.scope,
109
+ target: targetRoot, configRoot, mapping: generated.mapping, routingPolicy: generated.routing_policy,
110
+ activation: generated.activation, requiresNewSession: true,
111
+ };
112
+ } catch (error) {
113
+ restore(configRoot, snapshots);
114
+ removeCreatedDirectories(configRoot, newDirectories);
115
+ throw error;
116
+ } finally {
117
+ rmSync(generatedRoot, { recursive: true, force: true });
118
+ }
109
119
  }
110
120
 
111
121
  function buildAdapter(outputRoot, root) {
@@ -310,6 +320,14 @@ function assertManagedState(root, layoutValue, manifest) {
310
320
  fail("旧路由包含当前宿主不支持的设置记录");
311
321
  }
312
322
  const accepted = new Set([...(layoutValue.knownFiles || layoutValue.managedFiles), ...layoutValue.retiredFiles]);
323
+ if (manifest.createdDirectories !== undefined) {
324
+ const allowed = directoryAncestors([...accepted, manifestName, ...(expectedSetting ? [expectedSetting.file] : [])]);
325
+ if (!Array.isArray(manifest.createdDirectories)
326
+ || manifest.createdDirectories.some(relative => typeof relative !== "string" || !allowed.has(relative))) {
327
+ fail("旧路由包含无效的托管目录记录");
328
+ }
329
+ assertSafeDestination(root, layoutValue, manifest.createdDirectories);
330
+ }
313
331
  for (const [relative, expected] of Object.entries(manifest.files || {})) {
314
332
  if (!accepted.has(relative)) fail(`旧路由包含未知文件:${relative}`);
315
333
  const file = path.join(root, relative);
@@ -348,13 +366,16 @@ function uninstall(root, manifestPathValue, manifest) {
348
366
  for (const relative of files) snapshot(root, relative, snapshots);
349
367
  if (settingPlan) snapshot(root, settingPlan.relative, snapshots);
350
368
  snapshot(root, manifestName, snapshots);
369
+ const removedDirectories = [];
351
370
 
352
371
  try {
353
372
  for (const [relative, content] of plannedFiles) applyFileState(path.join(root, relative), content);
354
373
  if (settingPlan) applyFileState(path.join(root, settingPlan.relative), settingPlan.content);
355
374
  unlinkSync(manifestPathValue);
375
+ removeCreatedDirectories(root, manifest.createdDirectories || [], removedDirectories);
356
376
  } catch (error) {
357
377
  try {
378
+ for (const relative of [...removedDirectories].reverse()) mkdirSync(path.join(root, relative), { recursive: true });
358
379
  restore(root, snapshots);
359
380
  } catch (restoreError) {
360
381
  throw new AggregateError([error, restoreError], "路由卸载失败且无法完整回滚;请检查现有托管清单与文件状态");
@@ -376,6 +397,30 @@ function planSettingRestore(root, spec) {
376
397
  };
377
398
  }
378
399
 
400
+ function directoryAncestors(files) {
401
+ const directories = new Set(["."]);
402
+ for (const relative of files) {
403
+ let directory = path.dirname(relative);
404
+ while (directory !== ".") {
405
+ directories.add(directory);
406
+ directory = path.dirname(directory);
407
+ }
408
+ }
409
+ return directories;
410
+ }
411
+
412
+ function removeCreatedDirectories(root, directories, removed = []) {
413
+ const depth = relative => relative === "." ? 0 : relative.split(/[\\/]/u).length;
414
+ for (const relative of [...new Set(directories)].sort((a, b) => depth(b) - depth(a))) {
415
+ try {
416
+ rmdirSync(path.join(root, relative));
417
+ removed.push(relative);
418
+ } catch (error) {
419
+ if (!["ENOENT", "ENOTEMPTY", "EEXIST"].includes(error?.code)) throw error;
420
+ }
421
+ }
422
+ }
423
+
379
424
  function applyFileState(file, content) {
380
425
  if (content === null) rmSync(file, { force: true });
381
426
  else atomicWrite(file, content);
@@ -447,5 +492,5 @@ Usage:
447
492
  安装后用户只需正常使用 odai。总控是唯一持续任务线程并负责实施整合;planner、reviewer 以及可选 researcher、frontend 只在能改变结果时启动。researcher 与 frontend 映射默认不配置。更新会安全移除旧版 advisor、implementer、worker、executor 和 stage runner 托管文件。`);
448
493
  }
449
494
 
450
- function returnResult(value) { process.stdout.write(`${JSON.stringify(value, null, 2)}\n`); process.exit(0); }
495
+ function returnResult(value) { process.stdout.write(`${JSON.stringify(value, null, 2)}\n`); }
451
496
  function fail(message) { throw new Error(message); }
@@ -1,112 +0,0 @@
1
- import type { SkillBundle } from "./skill-bundle.mjs";
2
- import type { DshAgent, RuntimeTool, UnknownRecord } from "./runtime-types.mjs";
3
- type StateAction = "activate" | "rollback" | "deactivate";
4
- type AuthorizationLevel = "standard" | "breaking";
5
- export interface GenerationAuthorization {
6
- readonly action: "propose" | "rebase";
7
- readonly phrase: string;
8
- readonly turn: number;
9
- readonly eventSeq: number;
10
- readonly messageId: string;
11
- }
12
- interface HistoryEvent {
13
- readonly revision: number;
14
- readonly action: StateAction;
15
- readonly from: string | null;
16
- readonly to: string | null;
17
- readonly at: string;
18
- readonly evidence: readonly string[];
19
- }
20
- export interface SkillEvolutionState {
21
- readonly schemaVersion: 1;
22
- readonly revision: number;
23
- readonly activeGenerationId?: string;
24
- readonly history: readonly HistoryEvent[];
25
- }
26
- export interface GenerationSummary extends UnknownRecord {
27
- generationId: string;
28
- parentGenerationId?: string;
29
- createdAt: string;
30
- objective: string;
31
- baseDigest: string;
32
- resultDigest: string;
33
- skillVersion: string;
34
- runtimeContract: unknown;
35
- changedPaths: readonly string[];
36
- authorizationLevel: AuthorizationLevel;
37
- activationPhrase: string;
38
- breakingReasons: readonly string[];
39
- creationAuthorization?: GenerationAuthorization;
40
- }
41
- export interface RebaseConflict {
42
- readonly path: string;
43
- readonly replacement: number;
44
- readonly reason: string;
45
- }
46
- interface SelectionEvolutionState extends UnknownRecord {
47
- status?: string;
48
- generationId?: string;
49
- baseDigest?: string;
50
- upstreamDigest?: string;
51
- rebaseRequired?: boolean;
52
- hostOverride?: boolean;
53
- }
54
- export interface EvolutionSelection {
55
- readonly mode: string;
56
- readonly status: string;
57
- readonly reasonCode: string;
58
- readonly detail?: string;
59
- readonly bundle: SkillBundle;
60
- readonly candidate?: SkillBundle;
61
- readonly rejections: readonly {
62
- readonly source: string;
63
- readonly reasonCode: string;
64
- readonly detail?: string;
65
- }[];
66
- readonly upstream?: EvolutionSelection;
67
- readonly evolution?: Readonly<SelectionEvolutionState>;
68
- }
69
- export interface EvolutionToolArguments extends UnknownRecord {
70
- action?: unknown;
71
- path?: unknown;
72
- generationId?: unknown;
73
- objective?: unknown;
74
- expectedBundleDigest?: unknown;
75
- expectedUpstreamDigest?: unknown;
76
- changes?: unknown;
77
- }
78
- export interface EvolutionToolResult extends UnknownRecord {
79
- action: string;
80
- status: string;
81
- error?: string;
82
- path?: string;
83
- bundleDigest?: string;
84
- proposalPhrase?: string;
85
- attemptId?: string;
86
- conflicts?: readonly RebaseConflict[];
87
- sha256?: string;
88
- content?: string;
89
- requiresNextTurn?: boolean;
90
- generations?: readonly GenerationSummary[];
91
- activeGenerationId?: string;
92
- active?: GenerationSummary & {
93
- rebaseRequired: boolean;
94
- };
95
- generation?: GenerationSummary;
96
- }
97
- interface CreateEvolutionToolOptions {
98
- currentSelectionFor?: (agent: DshAgent) => EvolutionSelection;
99
- selection?: EvolutionSelection;
100
- onChanged?: (agent: DshAgent, result: EvolutionToolResult) => void;
101
- now?: () => string;
102
- disabled?: boolean;
103
- }
104
- export declare function readSkillEvolutionState(root: string): Readonly<SkillEvolutionState>;
105
- export declare function resolveSkillEvolutionRoot(configuredPath: unknown, env?: Readonly<Record<string, string | undefined>>): string;
106
- export declare function skillEvolutionDisabled(env?: Readonly<Record<string, string | undefined>>): boolean;
107
- export declare function applySkillEvolutionSelection(upstream: EvolutionSelection, root: string, options?: {
108
- disabled?: boolean;
109
- }): EvolutionSelection;
110
- export declare function createSkillEvolutionTool(root: string, options?: CreateEvolutionToolOptions): RuntimeTool<EvolutionToolArguments, EvolutionToolResult>;
111
- export {};
112
- //# sourceMappingURL=skill-evolution.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-evolution.d.mts","sourceRoot":"","sources":["../src/skill-evolution.mts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAY,WAAW,EAAiB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzG,KAAK,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAE1D,KAAK,kBAAkB,GAAG,UAAU,GAAG,UAAU,CAAC;AAoBlD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAyBD,UAAU,YAAY;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AACD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAWD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,uBAAuB,CAAC;CACjD;AAGD,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAmBhH,UAAU,uBAAwB,SAAQ,aAAa;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnH,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;CACxD;AACD,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrF;AACD,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC9D,WAAW,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG;QAAE,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACvH;AACD,UAAU,0BAA0B;IAClC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,kBAAkB,CAAC;IAC9D,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkMD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CA4CnF;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,OAAO,EACvB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,CAWR;AAED,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAAG,OAAO,CAE/G;AAmpBD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,kBAAkB,CAmFpB;AAsKD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,0BAA+B,GACvC,WAAW,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CA8T1D"}