@tacuchi/agent-workflow-cli 25.9.0 → 26.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -2
  3. package/dist/application/capability/design-handler.js +94 -0
  4. package/dist/application/capability/design-handler.js.map +1 -1
  5. package/dist/application/capability/dispatcher.js +178 -18
  6. package/dist/application/capability/dispatcher.js.map +1 -1
  7. package/dist/application/capability/durable-effect.js.map +1 -1
  8. package/dist/application/capability/readiness.js +8 -54
  9. package/dist/application/capability/readiness.js.map +1 -1
  10. package/dist/application/capability/resolution.js +124 -192
  11. package/dist/application/capability/resolution.js.map +1 -1
  12. package/dist/application/doctor/prepare.js +0 -3
  13. package/dist/application/doctor/prepare.js.map +1 -1
  14. package/dist/application/doctor/provider-skills.js +21 -132
  15. package/dist/application/doctor/provider-skills.js.map +1 -1
  16. package/dist/application/doctor/repair-runner.js +0 -47
  17. package/dist/application/doctor/repair-runner.js.map +1 -1
  18. package/dist/application/flow/submit.js +1 -1
  19. package/dist/application/flow/submit.js.map +1 -1
  20. package/dist/application/plan-lint-service.js +31 -5
  21. package/dist/application/plan-lint-service.js.map +1 -1
  22. package/dist/application/retirement/attribution.js +1 -2
  23. package/dist/application/retirement/attribution.js.map +1 -1
  24. package/dist/application/self/clean-legacy.js +1 -2
  25. package/dist/application/self/clean-legacy.js.map +1 -1
  26. package/dist/application/self/install-skill.js +5 -49
  27. package/dist/application/self/install-skill.js.map +1 -1
  28. package/dist/application/self/skill-files.js +29 -0
  29. package/dist/application/self/skill-files.js.map +1 -0
  30. package/dist/application/skills-resolver-service.js +5 -91
  31. package/dist/application/skills-resolver-service.js.map +1 -1
  32. package/dist/application/source-boundary-policy.js +10 -2
  33. package/dist/application/source-boundary-policy.js.map +1 -1
  34. package/dist/cli/commands/capability.js +12 -4
  35. package/dist/cli/commands/capability.js.map +1 -1
  36. package/dist/cli/commands/index.js +0 -4
  37. package/dist/cli/commands/index.js.map +1 -1
  38. package/dist/cli/commands/self.js +1 -22
  39. package/dist/cli/commands/self.js.map +1 -1
  40. package/dist/cli/commands/skills.js +4 -11
  41. package/dist/cli/commands/skills.js.map +1 -1
  42. package/dist/cli/help-groups.js +1 -3
  43. package/dist/cli/help-groups.js.map +1 -1
  44. package/dist/cli/tui/app.js +2 -3
  45. package/dist/cli/tui/app.js.map +1 -1
  46. package/dist/cli/tui/components/host-admin-section.js +2 -13
  47. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  48. package/dist/cli/tui/components/tabs-config.js +1 -2
  49. package/dist/cli/tui/components/tabs-config.js.map +1 -1
  50. package/dist/cli/tui/tui-prefs.js +2 -0
  51. package/dist/cli/tui/tui-prefs.js.map +1 -1
  52. package/dist/dist-manifest.json +60 -204
  53. package/dist/domain/capability/protocol.js +3 -1
  54. package/dist/domain/capability/protocol.js.map +1 -1
  55. package/dist/domain/doctor/operations.js +0 -18
  56. package/dist/domain/doctor/operations.js.map +1 -1
  57. package/dist/domain/flow/authority.js +1 -3
  58. package/dist/domain/flow/authority.js.map +1 -1
  59. package/dist/domain/skills.js +2 -6
  60. package/dist/domain/skills.js.map +1 -1
  61. package/package.json +2 -2
  62. package/skills/w/SKILL.md +9 -16
  63. package/skills/w/exports/README.md +4 -4
  64. package/skills/w/exports/export-diagrams/EXPORT.md +1 -1
  65. package/skills/w/exports/export-scripts/EXPORT.md +1 -1
  66. package/skills/w/harness/HARNESS.md +2 -5
  67. package/skills/w/loops/CHASSIS.md +1 -1
  68. package/skills/w/loops/CODE-POLICIES.md +1 -1
  69. package/skills/w/loops/README.md +2 -2
  70. package/skills/w/loops/quick-loop/LOOP.md +1 -1
  71. package/skills/w/loops/spec-refine-loop/LOOP.md +1 -1
  72. package/skills/w/roles/README.md +11 -47
  73. package/skills/w/roles/design/ROLE.md +3 -1
  74. package/skills/w/roles/diagrams/ROLE.md +1 -1
  75. package/skills/w/roles/git/ROLE.md +1 -1
  76. package/skills/w/roles/research/ROLE.md +1 -1
  77. package/skills/w/roles/sql/ROLE.md +1 -1
  78. package/dist/application/capability/descriptor-loader.js +0 -109
  79. package/dist/application/capability/descriptor-loader.js.map +0 -1
  80. package/dist/application/capability/installed-inventory.js +0 -168
  81. package/dist/application/capability/installed-inventory.js.map +0 -1
  82. package/dist/application/doctor/skills-toml-migrate.js +0 -76
  83. package/dist/application/doctor/skills-toml-migrate.js.map +0 -1
  84. package/dist/application/self/install-plugin-skills-git.js +0 -226
  85. package/dist/application/self/install-plugin-skills-git.js.map +0 -1
  86. package/dist/application/self/install-plugin-skills.js +0 -203
  87. package/dist/application/self/install-plugin-skills.js.map +0 -1
  88. package/dist/application/self/plugin-cache-clear.js +0 -133
  89. package/dist/application/self/plugin-cache-clear.js.map +0 -1
  90. package/dist/application/self/plugin-cache-reload.js +0 -141
  91. package/dist/application/self/plugin-cache-reload.js.map +0 -1
  92. package/dist/application/self/skills-apply.js +0 -623
  93. package/dist/application/self/skills-apply.js.map +0 -1
  94. package/dist/application/self/skills-catalog.js +0 -35
  95. package/dist/application/self/skills-catalog.js.map +0 -1
  96. package/dist/application/self/skills-change.js +0 -479
  97. package/dist/application/self/skills-change.js.map +0 -1
  98. package/dist/application/self/skills-discovery.js +0 -275
  99. package/dist/application/self/skills-discovery.js.map +0 -1
  100. package/dist/application/self/skills-manager.js +0 -253
  101. package/dist/application/self/skills-manager.js.map +0 -1
  102. package/dist/application/self/skills-payload.js +0 -566
  103. package/dist/application/self/skills-payload.js.map +0 -1
  104. package/dist/application/self/skills-registry.js +0 -107
  105. package/dist/application/self/skills-registry.js.map +0 -1
  106. package/dist/application/skill-index-service.js +0 -78
  107. package/dist/application/skill-index-service.js.map +0 -1
  108. package/dist/cli/commands/plugin-cache.js +0 -25
  109. package/dist/cli/commands/plugin-cache.js.map +0 -1
  110. package/dist/cli/commands/skill-index.js +0 -19
  111. package/dist/cli/commands/skill-index.js.map +0 -1
  112. package/dist/cli/tui/data/recommended-skills.js +0 -482
  113. package/dist/cli/tui/data/recommended-skills.js.map +0 -1
  114. package/dist/cli/tui/tabs/skills-tab.js +0 -664
  115. package/dist/cli/tui/tabs/skills-tab.js.map +0 -1
@@ -1,141 +0,0 @@
1
- import { join } from "node:path";
2
- import { selfInstallPluginSkills } from "./install-plugin-skills.js";
3
- import { listSafe, selfClearPluginCache, } from "./plugin-cache-clear.js";
4
- export async function selfReloadPluginCache(args, ctx) {
5
- // Input validation (--plugin/--target) is delegated to selfClearPluginCache:
6
- // its INVALID_INPUT error surfaces through the passthrough below, and the
7
- // casts are only consumed after clearResult.ok.
8
- const plugin = args.values.get("plugin");
9
- const targetArg = args.values.get("target");
10
- const fromArg = args.values.get("from");
11
- const dryRun = args.flags.has("--dry-run");
12
- const clearResult = await selfClearPluginCache(args, ctx);
13
- if (!clearResult.ok || !clearResult.data) {
14
- return clearResult;
15
- }
16
- const removed = clearResult.data.removed;
17
- const clearSummary = clearResult.data.summary;
18
- if (targetArg === "claude" || targetArg === "codex") {
19
- return buildHostReloadResult(targetArg, plugin, removed, clearSummary, dryRun);
20
- }
21
- const source = await resolveSource(ctx, plugin, fromArg);
22
- if (!source) {
23
- return buildSourceMissingResult(targetArg, plugin, removed, clearSummary);
24
- }
25
- if (dryRun) {
26
- return {
27
- ok: true,
28
- data: {
29
- status: "dry-run",
30
- target: targetArg,
31
- plugin,
32
- removed,
33
- reinstalled: [],
34
- summary: `[dry-run] ${clearSummary} | se reinstalaría desde ${source}`,
35
- },
36
- exitCode: 0,
37
- };
38
- }
39
- return await runReinstall(ctx, plugin, targetArg, source, removed, clearSummary);
40
- }
41
- function buildHostReloadResult(target, plugin, removed, clearSummary, dryRun) {
42
- const host = target === "claude" ? "Claude Code" : "Codex";
43
- const hint = `Reiniciá ${host} para que el host re-clone el plugin desde el marketplace.`;
44
- const status = dryRun ? "dry-run" : removed.length === 0 ? "nothing" : "cleared-only";
45
- const summary = dryRun ? `[dry-run] ${clearSummary} | ${hint}` : `${clearSummary} ${hint}`;
46
- return {
47
- ok: true,
48
- data: { status, target, plugin, removed, reinstalled: [], hint, summary },
49
- exitCode: 0,
50
- };
51
- }
52
- function buildSourceMissingResult(target, plugin, removed, clearSummary) {
53
- return {
54
- ok: false,
55
- error: {
56
- code: "SOURCE_NOT_FOUND",
57
- message: `No se encontró source para reinstalar '${plugin}' en ${target}. Pasá --from <path-skills-dir> o instalá el plugin en Claude Code primero (provee cache compartido).`,
58
- },
59
- data: {
60
- status: removed.length === 0 ? "nothing" : "cleared-only",
61
- target,
62
- plugin,
63
- removed,
64
- reinstalled: [],
65
- summary: clearSummary,
66
- },
67
- exitCode: 1,
68
- };
69
- }
70
- async function runReinstall(ctx, plugin, target, source, removed, clearSummary) {
71
- const installArgs = {
72
- rest: [],
73
- plugin: {},
74
- flags: new Set(["--force"]),
75
- values: new Map([
76
- ["from", source],
77
- ["target", target],
78
- ["namespace", plugin],
79
- ]),
80
- valuesMulti: new Map(),
81
- };
82
- const installResult = await selfInstallPluginSkills(installArgs, ctx);
83
- const reinstalled = installResult.data?.skills ?? [];
84
- return {
85
- ok: installResult.ok,
86
- data: {
87
- status: "reloaded",
88
- target,
89
- plugin,
90
- removed,
91
- reinstalled,
92
- summary: `${clearSummary} ${installResult.data?.summary ?? ""}`.trim(),
93
- },
94
- ...(installResult.error ? { error: installResult.error } : {}),
95
- exitCode: installResult.exitCode,
96
- };
97
- }
98
- async function resolveSource(ctx, plugin, fromArg) {
99
- if (fromArg && (await ctx.fs.exists(fromArg)))
100
- return fromArg;
101
- const home = ctx.env.homeDir();
102
- for (const host of ["claude", "codex"]) {
103
- const found = await findInHostCache(ctx, join(home, `.${host}`, "plugins", "cache"), plugin);
104
- if (found)
105
- return found;
106
- }
107
- return null;
108
- }
109
- async function findInHostCache(ctx, cacheRoot, plugin) {
110
- if (!(await ctx.fs.exists(cacheRoot)))
111
- return null;
112
- const marketplaces = await listSafe(ctx, cacheRoot);
113
- for (const mp of marketplaces) {
114
- const skillsDir = await findSkillsDir(ctx, join(cacheRoot, mp.name, plugin));
115
- if (skillsDir)
116
- return skillsDir;
117
- }
118
- return null;
119
- }
120
- async function findSkillsDir(ctx, pluginRoot) {
121
- if (!(await ctx.fs.exists(pluginRoot)))
122
- return null;
123
- const versions = await listSafe(ctx, pluginRoot);
124
- const latest = pickLatestVersion(versions.map((v) => v.name));
125
- if (!latest)
126
- return null;
127
- const skillsDir = join(pluginRoot, latest, "skills");
128
- return (await ctx.fs.exists(skillsDir)) ? skillsDir : null;
129
- }
130
- function pickLatestVersion(names) {
131
- const semver = names.filter((n) => /^\d+\.\d+\.\d+/.test(n));
132
- if (semver.length === 0)
133
- return null;
134
- semver.sort((a, b) => {
135
- const [aMaj = 0, aMin = 0, aPatch = 0] = a.split(".").map(Number);
136
- const [bMaj = 0, bMin = 0, bPatch = 0] = b.split(".").map(Number);
137
- return bMaj - aMaj || bMin - aMin || bPatch - aPatch;
138
- });
139
- return semver[0] ?? null;
140
- }
141
- //# sourceMappingURL=plugin-cache-reload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-cache-reload.js","sourceRoot":"","sources":["../../../src/application/self/plugin-cache-reload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAA0B,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAGL,QAAQ,EACR,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAYjC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAgB,EAChB,GAAe;IAEf,6EAA6E;IAC7E,0EAA0E;IAC1E,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAgB,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,WAAuD,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAE9C,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACpD,OAAO,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE;gBACJ,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,aAAa,YAAY,4BAA4B,MAAM,EAAE;aACvE;YACD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA0B,EAC1B,MAAc,EACd,OAA6B,EAC7B,YAAoB,EACpB,MAAe;IAEf,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3D,MAAM,IAAI,GAAG,YAAY,IAAI,4DAA4D,CAAC;IAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IACtF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,YAAY,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,IAAI,EAAE,CAAC;IAC3F,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACzE,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAgD,EAChD,MAAc,EACd,OAA6B,EAC7B,YAAoB;IAEpB,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,0CAA0C,MAAM,QAAQ,MAAM,uGAAuG;SAC/K;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc;YACzD,MAAM;YACN,MAAM;YACN,OAAO;YACP,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,YAAY;SACtB;QACD,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAe,EACf,MAAc,EACd,MAAgD,EAChD,MAAc,EACd,OAA6B,EAC7B,YAAoB;IAEpB,MAAM,WAAW,GAAe;QAC9B,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,EAAE,IAAI,GAAG,CAAiB;YAC9B,CAAC,MAAM,EAAE,MAAM,CAAC;YAChB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,WAAW,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,WAAW,EAAE,IAAI,GAAG,EAAE;KACvB,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IACrD,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,IAAI,EAAE;YACJ,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,MAAM;YACN,OAAO;YACP,WAAW;YACX,OAAO,EAAE,GAAG,YAAY,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;SACvE;QACD,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,QAAQ,EAAE,aAAa,CAAC,QAAQ;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAe,EACf,MAAc,EACd,OAA2B;IAE3B,IAAI,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAU,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7F,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAe,EACf,SAAiB,EACjB,MAAc;IAEd,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACpD,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAe,EAAE,UAAkB;IAC9D,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC"}