acpus 0.5.2 → 0.6.0-alpha.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 (140) hide show
  1. package/README.md +19 -5
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/agent-progress-format.d.ts +7 -0
  4. package/dist/agent-progress-format.d.ts.map +1 -0
  5. package/dist/agent-progress-format.js +102 -0
  6. package/dist/agent-progress-format.js.map +1 -0
  7. package/dist/authoring/core.d.ts +2 -0
  8. package/dist/authoring/core.d.ts.map +1 -0
  9. package/dist/authoring/core.js +2 -0
  10. package/dist/authoring/core.js.map +1 -0
  11. package/dist/authoring/expression.d.ts +2 -0
  12. package/dist/authoring/expression.d.ts.map +1 -0
  13. package/dist/authoring/expression.js +2 -0
  14. package/dist/authoring/expression.js.map +1 -0
  15. package/dist/authoring/tasks/git.d.ts +2 -0
  16. package/dist/authoring/tasks/git.d.ts.map +1 -0
  17. package/dist/authoring/tasks/git.js +2 -0
  18. package/dist/authoring/tasks/git.js.map +1 -0
  19. package/dist/catalog.d.ts +18 -24
  20. package/dist/catalog.d.ts.map +1 -1
  21. package/dist/catalog.js +164 -174
  22. package/dist/catalog.js.map +1 -1
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +14 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/daemon.d.ts +14 -0
  28. package/dist/commands/daemon.d.ts.map +1 -0
  29. package/dist/commands/daemon.js +89 -0
  30. package/dist/commands/daemon.js.map +1 -0
  31. package/dist/commands/doctor.d.ts +11 -0
  32. package/dist/commands/doctor.d.ts.map +1 -0
  33. package/dist/commands/doctor.js +26 -0
  34. package/dist/commands/doctor.js.map +1 -0
  35. package/dist/commands/hooks.d.ts +11 -0
  36. package/dist/commands/hooks.d.ts.map +1 -0
  37. package/dist/commands/hooks.js +64 -0
  38. package/dist/commands/hooks.js.map +1 -0
  39. package/dist/commands/json.d.ts +7 -0
  40. package/dist/commands/json.d.ts.map +1 -0
  41. package/dist/commands/json.js +43 -0
  42. package/dist/commands/json.js.map +1 -0
  43. package/dist/commands/runs-picker.d.ts +21 -0
  44. package/dist/commands/runs-picker.d.ts.map +1 -0
  45. package/dist/commands/runs-picker.js +76 -0
  46. package/dist/commands/runs-picker.js.map +1 -0
  47. package/dist/commands/runs.d.ts +12 -0
  48. package/dist/commands/runs.d.ts.map +1 -0
  49. package/dist/commands/runs.js +285 -0
  50. package/dist/commands/runs.js.map +1 -0
  51. package/dist/commands/skill.d.ts +11 -0
  52. package/dist/commands/skill.d.ts.map +1 -0
  53. package/dist/commands/skill.js +221 -0
  54. package/dist/commands/skill.js.map +1 -0
  55. package/dist/commands/web.d.ts +24 -0
  56. package/dist/commands/web.d.ts.map +1 -0
  57. package/dist/commands/web.js +57 -0
  58. package/dist/commands/web.js.map +1 -0
  59. package/dist/commands/workflow.d.ts +11 -0
  60. package/dist/commands/workflow.d.ts.map +1 -0
  61. package/dist/commands/workflow.js +324 -0
  62. package/dist/commands/workflow.js.map +1 -0
  63. package/dist/daemon-entry.d.ts +3 -0
  64. package/dist/daemon-entry.d.ts.map +1 -0
  65. package/dist/daemon-entry.js +26 -0
  66. package/dist/daemon-entry.js.map +1 -0
  67. package/dist/errors.d.ts +19 -0
  68. package/dist/errors.d.ts.map +1 -0
  69. package/dist/errors.js +28 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/output.d.ts +91 -11
  72. package/dist/output.d.ts.map +1 -1
  73. package/dist/output.js +203 -44
  74. package/dist/output.js.map +1 -1
  75. package/dist/program.d.ts +9 -0
  76. package/dist/program.d.ts.map +1 -0
  77. package/dist/program.js +85 -0
  78. package/dist/program.js.map +1 -0
  79. package/dist/run-status-surface.d.ts +12 -0
  80. package/dist/run-status-surface.d.ts.map +1 -0
  81. package/dist/run-status-surface.js +324 -0
  82. package/dist/run-status-surface.js.map +1 -0
  83. package/dist/workflow-preparation.d.ts +3 -0
  84. package/dist/workflow-preparation.d.ts.map +1 -0
  85. package/dist/workflow-preparation.js +34 -0
  86. package/dist/workflow-preparation.js.map +1 -0
  87. package/package.json +35 -35
  88. package/skills/acpus/SKILL.md +120 -0
  89. package/skills/acpus/eval/evaluations.md +47 -0
  90. package/skills/acpus/examples/hooks.example.json +17 -0
  91. package/skills/acpus/examples/workflows/adversarial-review/workflow.ts +248 -0
  92. package/skills/acpus/examples/workflows/change-approval/workflow.ts +121 -0
  93. package/skills/acpus/examples/workflows/issue-triage/tasks.ts +14 -0
  94. package/skills/acpus/examples/workflows/issue-triage/workflow.ts +146 -0
  95. package/skills/acpus/examples/workflows/multi-aspect-brainstorm/workflow.ts +304 -0
  96. package/skills/acpus/examples/workflows/worktree-tournament/workflow.ts +194 -0
  97. package/skills/acpus/references/authoring.md +205 -0
  98. package/skills/acpus/references/cli-operations.md +94 -0
  99. package/skills/acpus/references/hooks-json.md +81 -0
  100. package/skills/acpus/references/runtime-recovery.md +97 -0
  101. package/dist/agent-activity.d.ts +0 -3
  102. package/dist/agent-activity.d.ts.map +0 -1
  103. package/dist/agent-activity.js +0 -50
  104. package/dist/agent-activity.js.map +0 -1
  105. package/dist/agent-overrides.d.ts +0 -3
  106. package/dist/agent-overrides.d.ts.map +0 -1
  107. package/dist/agent-overrides.js +0 -39
  108. package/dist/agent-overrides.js.map +0 -1
  109. package/dist/follow.d.ts +0 -23
  110. package/dist/follow.d.ts.map +0 -1
  111. package/dist/follow.js +0 -164
  112. package/dist/follow.js.map +0 -1
  113. package/dist/hooks.d.ts +0 -4
  114. package/dist/hooks.d.ts.map +0 -1
  115. package/dist/hooks.js +0 -159
  116. package/dist/hooks.js.map +0 -1
  117. package/dist/index.d.ts +0 -3
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js +0 -592
  120. package/dist/index.js.map +0 -1
  121. package/dist/io.d.ts +0 -3
  122. package/dist/io.d.ts.map +0 -1
  123. package/dist/io.js +0 -27
  124. package/dist/io.js.map +0 -1
  125. package/dist/observations.d.ts +0 -39
  126. package/dist/observations.d.ts.map +0 -1
  127. package/dist/observations.js +0 -83
  128. package/dist/observations.js.map +0 -1
  129. package/dist/runs-show.d.ts +0 -40
  130. package/dist/runs-show.d.ts.map +0 -1
  131. package/dist/runs-show.js +0 -296
  132. package/dist/runs-show.js.map +0 -1
  133. package/dist/supervisor-client.d.ts +0 -9
  134. package/dist/supervisor-client.d.ts.map +0 -1
  135. package/dist/supervisor-client.js +0 -8
  136. package/dist/supervisor-client.js.map +0 -1
  137. package/dist/supervisor.d.ts +0 -18
  138. package/dist/supervisor.d.ts.map +0 -1
  139. package/dist/supervisor.js +0 -24
  140. package/dist/supervisor.js.map +0 -1
@@ -0,0 +1,221 @@
1
+ import { constants } from "node:fs";
2
+ import { access, cp, lstat, mkdtemp, readFile, readlink, rename, rm, stat } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { basename, dirname, join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { Command } from "commander";
7
+ import { skillError, usageError } from "../errors.js";
8
+ import { writeResult } from "../output.js";
9
+ const ACPUS_PACKAGE = "acpus";
10
+ const ACPUS_SKILL = "acpus";
11
+ const ACPUS_TARGET = "acpus";
12
+ export function createSkillCommand(ctx) {
13
+ const command = new Command("skill")
14
+ .exitOverride()
15
+ .configureOutput({
16
+ writeOut: text => ctx.stdout.write(text),
17
+ writeErr: text => {
18
+ if (!ctx.wantsJson)
19
+ ctx.stderr.write(text);
20
+ },
21
+ outputError: (text, write) => write(text),
22
+ })
23
+ .description("Install or uninstall the bundled Acpus agent skill.");
24
+ command.addCommand(new Command("install")
25
+ .exitOverride()
26
+ .option("--project", "install into project skills directories")
27
+ .option("--global", "install into global skills directories")
28
+ .option("--dry-run", "show what would be installed without changing files")
29
+ .action(async (options) => {
30
+ const scope = parseScope(options);
31
+ const sourcePath = await bundledSkillPath();
32
+ const targets = await resolveExistingTargets(ctx.cwd, scope, "install");
33
+ const installations = await installAcpusSkill(sourcePath, targets, options.dryRun === true);
34
+ const ok = installOk(installations);
35
+ ctx.setExitCode(writeResult({
36
+ ok,
37
+ phase: "skill",
38
+ message: ok ? "Acpus skill installed." : "Acpus skill installation skipped unsafe entries.",
39
+ skill: skillResult("install", scope, options.dryRun === true, targets, { installations }),
40
+ }, ctx.wantsJson ? "json" : "text", ctx, ok ? 0 : 1));
41
+ }));
42
+ command.addCommand(new Command("uninstall")
43
+ .exitOverride()
44
+ .option("--project", "uninstall from project skills directories")
45
+ .option("--global", "uninstall from global skills directories")
46
+ .option("--dry-run", "show what would be removed without changing files")
47
+ .action(async (options) => {
48
+ const scope = parseScope(options);
49
+ const targets = await resolveExistingTargets(ctx.cwd, scope, "uninstall");
50
+ const removals = await uninstallAcpusSkill(targets, options.dryRun === true);
51
+ const ok = uninstallOk(removals);
52
+ ctx.setExitCode(writeResult({
53
+ ok,
54
+ phase: "skill",
55
+ message: ok ? "Acpus skill uninstalled." : "Acpus skill uninstall skipped unsafe entries.",
56
+ skill: skillResult("uninstall", scope, options.dryRun === true, targets, { removals }),
57
+ }, ctx.wantsJson ? "json" : "text", ctx, ok ? 0 : 1));
58
+ }));
59
+ return command;
60
+ }
61
+ function parseScope(options) {
62
+ if (options.project === true && options.global === true)
63
+ throw usageError("Pass only one of --project or --global.");
64
+ return options.global === true ? "global" : "project";
65
+ }
66
+ async function bundledSkillPath() {
67
+ const sourcePath = fileURLToPath(new URL("../../skills/acpus", import.meta.url));
68
+ try {
69
+ await access(join(sourcePath, "SKILL.md"), constants.R_OK);
70
+ return sourcePath;
71
+ }
72
+ catch {
73
+ throw skillError("Bundled Acpus skill was not found in this acpus package.");
74
+ }
75
+ }
76
+ async function resolveExistingTargets(cwd, scope, action) {
77
+ const candidates = scope === "project" ? projectTargets(cwd) : globalTargets();
78
+ const targets = [];
79
+ for (const candidate of candidates) {
80
+ if (await isDirectory(candidate.rootPath))
81
+ targets.push(candidate);
82
+ }
83
+ if (targets.length === 0) {
84
+ const missing = candidates.map(candidate => ({
85
+ scope,
86
+ kind: candidate.kind,
87
+ targetPath: candidate.targetPath,
88
+ status: "skipped",
89
+ error: "skills root does not exist",
90
+ }));
91
+ throw skillError(`No ${scope} skills directories found: ${candidates.map(candidate => candidate.rootPath).join(", ")}`, {
92
+ skill: skillResult(action, scope, false, candidates, action === "install" ? { installations: missing } : { removals: missing }),
93
+ });
94
+ }
95
+ return targets;
96
+ }
97
+ function projectTargets(cwd) {
98
+ return [
99
+ target("project", "agents", join(cwd, ".agents", "skills")),
100
+ target("project", "claude", join(cwd, ".claude", "skills")),
101
+ ];
102
+ }
103
+ function globalTargets() {
104
+ const codexHome = process.env.CODEX_HOME?.trim() || join(homedir(), ".codex");
105
+ const claudeHome = process.env.CLAUDE_CONFIG_DIR?.trim() || join(homedir(), ".claude");
106
+ return [
107
+ target("global", "agents", join(codexHome, "skills")),
108
+ target("global", "claude", join(claudeHome, "skills")),
109
+ ];
110
+ }
111
+ function target(scope, kind, rootPath) {
112
+ return { scope, kind, rootPath, targetPath: join(rootPath, ACPUS_TARGET) };
113
+ }
114
+ async function installAcpusSkill(sourcePath, targets, dryRun) {
115
+ const results = [];
116
+ for (const target of targets) {
117
+ const existing = await classifyExistingTarget(target.targetPath);
118
+ if (existing === "unsafe") {
119
+ results.push({ scope: target.scope, kind: target.kind, targetPath: target.targetPath, status: "failed", error: "target exists and is not the Acpus skill" });
120
+ continue;
121
+ }
122
+ const status = existing === "missing" ? dryRun ? "would-install" : "installed" : dryRun ? "would-update" : "updated";
123
+ if (!dryRun)
124
+ await replaceDirectory(sourcePath, target.targetPath);
125
+ results.push({ scope: target.scope, kind: target.kind, targetPath: target.targetPath, status });
126
+ }
127
+ return results;
128
+ }
129
+ async function uninstallAcpusSkill(targets, dryRun) {
130
+ const results = [];
131
+ for (const target of targets) {
132
+ const existing = await classifyExistingTarget(target.targetPath);
133
+ if (existing === "missing") {
134
+ results.push({ scope: target.scope, kind: target.kind, targetPath: target.targetPath, status: "missing" });
135
+ continue;
136
+ }
137
+ if (existing === "unsafe") {
138
+ results.push({ scope: target.scope, kind: target.kind, targetPath: target.targetPath, status: "skipped", error: "target is not the Acpus skill" });
139
+ continue;
140
+ }
141
+ if (!dryRun)
142
+ await rm(target.targetPath, { recursive: true, force: true });
143
+ results.push({ scope: target.scope, kind: target.kind, targetPath: target.targetPath, status: dryRun ? "would-remove" : "removed" });
144
+ }
145
+ return results;
146
+ }
147
+ async function classifyExistingTarget(targetPath) {
148
+ try {
149
+ const stats = await lstat(targetPath);
150
+ if (stats.isSymbolicLink())
151
+ return await isAcpusSkillSymlink(targetPath) ? "acpus" : "unsafe";
152
+ if (stats.isDirectory())
153
+ return await isAcpusSkillDirectory(targetPath) ? "acpus" : "unsafe";
154
+ return "unsafe";
155
+ }
156
+ catch (error) {
157
+ if (isNotFound(error))
158
+ return "missing";
159
+ return "unsafe";
160
+ }
161
+ }
162
+ async function isAcpusSkillSymlink(targetPath) {
163
+ try {
164
+ return await isAcpusSkillDirectory(resolve(dirname(targetPath), await readlink(targetPath)));
165
+ }
166
+ catch {
167
+ return false;
168
+ }
169
+ }
170
+ async function isAcpusSkillDirectory(targetPath) {
171
+ try {
172
+ const skill = await readFile(join(targetPath, "SKILL.md"), "utf8");
173
+ return /^name:\s*acpus\s*$/m.test(skill);
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ async function replaceDirectory(sourcePath, targetPath) {
180
+ const tempParent = await mkdtemp(join(dirname(targetPath), ".acpus-skill-"));
181
+ const tempPath = join(tempParent, basename(targetPath));
182
+ try {
183
+ await cp(sourcePath, tempPath, { recursive: true, verbatimSymlinks: true });
184
+ await rm(targetPath, { recursive: true, force: true });
185
+ await rename(tempPath, targetPath);
186
+ }
187
+ finally {
188
+ await rm(tempParent, { recursive: true, force: true });
189
+ }
190
+ }
191
+ function installOk(results) {
192
+ return results.some(result => result.status === "installed" || result.status === "updated" || result.status === "would-install" || result.status === "would-update")
193
+ && results.every(result => result.status !== "failed" && result.status !== "skipped");
194
+ }
195
+ function uninstallOk(results) {
196
+ return results.every(result => result.status !== "failed" && result.status !== "skipped");
197
+ }
198
+ function skillResult(action, scope, dryRun, targets, details) {
199
+ return {
200
+ action,
201
+ packageName: ACPUS_PACKAGE,
202
+ skillName: ACPUS_SKILL,
203
+ targetName: ACPUS_TARGET,
204
+ scope,
205
+ dryRun,
206
+ targets: targets.map(target => ({ scope: target.scope, kind: target.kind, rootPath: target.rootPath, targetPath: target.targetPath })),
207
+ ...details,
208
+ };
209
+ }
210
+ async function isDirectory(path) {
211
+ try {
212
+ return (await stat(path)).isDirectory();
213
+ }
214
+ catch {
215
+ return false;
216
+ }
217
+ }
218
+ function isNotFound(error) {
219
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
220
+ }
221
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Writable } from "node:stream";
2
+ import { Command } from "commander";
3
+ export type WebCommandContext = {
4
+ cwd: string;
5
+ stdout: Writable;
6
+ stderr: Writable;
7
+ wantsJson: boolean;
8
+ startWebServer?: WebServerStarter;
9
+ waitForSignals?: boolean;
10
+ };
11
+ type WebServerStarter = (options: {
12
+ cwd: string;
13
+ host?: string;
14
+ port?: number;
15
+ token?: boolean;
16
+ ensureDaemonRunning?: (cwd: string) => void;
17
+ }) => Promise<{
18
+ url: string;
19
+ token?: string;
20
+ close(): Promise<void>;
21
+ }>;
22
+ export declare function createWebCommand(ctx: WebCommandContext): Command;
23
+ export {};
24
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,KAAK,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CA2ChE"}
@@ -0,0 +1,57 @@
1
+ import { Command } from "commander";
2
+ import { usageError } from "../errors.js";
3
+ import { ensureDaemonRunning } from "./daemon.js";
4
+ export function createWebCommand(ctx) {
5
+ return new Command("web")
6
+ .exitOverride()
7
+ .description("Start the local web operator console.")
8
+ .option("--host <host>", "bind host (default: localhost)")
9
+ .option("--port <port>", "bind port (default: random)")
10
+ .option("--token", "protect the WebUI with a generated access token")
11
+ .action(async (options) => {
12
+ const host = options.host ?? "localhost";
13
+ const port = parsePort(options.port);
14
+ const startWebServer = ctx.startWebServer ?? (await import("@acpus/web")).startWebServer;
15
+ const server = await startWebServer({
16
+ cwd: ctx.cwd,
17
+ host,
18
+ ...(port !== undefined ? { port } : {}),
19
+ ...(options.token ? { token: true } : {}),
20
+ ensureDaemonRunning,
21
+ });
22
+ if (ctx.wantsJson) {
23
+ ctx.stdout.write(JSON.stringify({ url: server.url, ...(server.token ? { token: server.token } : {}) }) + "\n");
24
+ }
25
+ else {
26
+ ctx.stderr.write(`Acpus WebUI starting at ${server.url}\n`);
27
+ if (server.token) {
28
+ ctx.stderr.write(`Access token: ${server.token}\n`);
29
+ }
30
+ ctx.stderr.write("Press Ctrl+C to stop.\n");
31
+ }
32
+ if (ctx.waitForSignals === false)
33
+ return;
34
+ await new Promise(() => {
35
+ process.on("SIGINT", async () => {
36
+ await server.close();
37
+ process.exit(0);
38
+ });
39
+ process.on("SIGTERM", async () => {
40
+ await server.close();
41
+ process.exit(0);
42
+ });
43
+ });
44
+ });
45
+ }
46
+ function parsePort(raw) {
47
+ if (raw === undefined)
48
+ return undefined;
49
+ if (!/^\d+$/.test(raw))
50
+ throw usageError("--port must be an integer between 1 and 65535.");
51
+ const port = Number(raw);
52
+ if (!Number.isSafeInteger(port) || port < 1 || port > 65535) {
53
+ throw usageError("--port must be an integer between 1 and 65535.");
54
+ }
55
+ return port;
56
+ }
57
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Writable } from "node:stream";
2
+ import { Command } from "commander";
3
+ export type WorkflowCommandContext = {
4
+ cwd: string;
5
+ stdout: Writable;
6
+ stderr: Writable;
7
+ wantsJson: boolean;
8
+ setExitCode(code: number): void;
9
+ };
10
+ export declare function createWorkflowCommand(ctx: WorkflowCommandContext): Command;
11
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAUF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAsE1E"}