@koda-sl/baker-cli 0.561.0 → 0.562.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.
package/README.md CHANGED
@@ -4801,7 +4801,7 @@ baker feedback report --kind feature --title "winning-ads cannot read one countr
4801
4801
  ```
4802
4802
 
4803
4803
  - `--kind` is `bug` or `feature`; `--title` is one sentence (10+ characters), `--body` what was run, what came back and what was expected (20+); `--user-asked` when the user asked for it. Run it from a chat; a chat makes at most 10.
4804
- - Answers with the report's `id`, its `status` (`filed`, `added`, or `sending`/`held` while it is still on its way — it is retried on its own) and the `issue` once it has one.
4804
+ - Answers as soon as the report is saved, with its `id` and `status` (usually `sending`); it reaches the tracker on its own, retried if needed, so the command never waits for it.
4805
4805
  - The hints say what comes next: one plain line to the user that the Baker team was told, then carry on with what can still be done.
4806
4806
 
4807
4807
  ---
package/dist/cli.js CHANGED
@@ -553,7 +553,7 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`
553
553
  "lead-routes": () => import("./lead-routes-ZMKRNL57.js").then((m) => m.leadRoutesCommand),
554
554
  mcp: () => import("./mcp-QSDCAWMU.js").then((m) => m.mcpCommand),
555
555
  "setup-links": () => import("./setup-links-CK7LBYJK.js").then((m) => m.setupLinksCommand),
556
- feedback: () => import("./feedback-VCYIVDO2.js").then((m) => m.feedbackCommand),
556
+ feedback: () => import("./feedback-ECAZWGJP.js").then((m) => m.feedbackCommand),
557
557
  organization: () => import("./organization-6T4Q6XYI.js").then((m) => m.organizationCommand),
558
558
  schema: () => import("./schema-L4PETLZT.js").then((m) => m.schemaCommand)
559
559
  }
@@ -14,7 +14,6 @@ import "./chunk-G4FG5EQO.js";
14
14
  import "./chunk-R7XDGNZD.js";
15
15
  import "./chunk-MSMTG6OC.js";
16
16
  import {
17
- apiGet,
18
17
  apiPost
19
18
  } from "./chunk-QEREDRZO.js";
20
19
  import "./chunk-JXTNP3B5.js";
@@ -53,11 +52,11 @@ var ARGS = {
53
52
  };
54
53
  registerSchema({
55
54
  command: "feedback.report",
56
- description: `Start here when Baker itself is in the way: a command, check, hook, skill or doc that is broken, or a capability the work needs that Baker does not have. Example: baker feedback report --kind bug --title "verify fails on an archived test version" --body "\u2026" (add --user-asked when the user asked you to). Sent to the Baker team at once, with the client's details taken out; the answer names the issue it is on. Never a Task, never a message for the user to pass on. Then say one plain line to the user and keep going with what you can still do.`,
55
+ description: `Start here when Baker itself is in the way: a command, check, hook, skill or doc that is broken, or a capability the work needs that Baker does not have. Example: baker feedback report --kind bug --title "verify fails on an archived test version" --body "\u2026" (add --user-asked when the user asked you to). Answers as soon as it is saved; it reaches the Baker team on its own, with the client's details taken out. Never a Task, never a message for the user to pass on. Then say one plain line to the user and keep going with what you can still do.`,
57
56
  args: ARGS
58
57
  });
59
58
  var REPORT_HINTS = [
60
- "The Baker team has it (or will within minutes, if it is still sending \u2014 nothing more to do). Tell the user in one plain line that you let the Baker team know \u2014 no ids, commands or file names \u2014 and never ask them to pass it on.",
59
+ "The Baker team has it: once saved, the report reaches their tracker on its own, so a status of sending is the normal answer and there is nothing more to do or to tell the user about delivery. Tell the user in one plain line that you let the Baker team know \u2014 no ids, commands or file names \u2014 and never ask them to pass it on.",
61
60
  "Then keep going: work around it with what this workspace still lets you change (the pages, Forms, Knowledge and Brand you own, a staged change instead of a blocked one), finish the rest of the job, and say plainly what is left undone. One broken piece should not stop the whole task.",
62
61
  "It is not a Task: don't also file one for it."
63
62
  ];
@@ -79,20 +78,6 @@ function reportBody(args) {
79
78
  }
80
79
  return { ok: true, body: parsed.data };
81
80
  }
82
- var ISSUE_WAIT_MS = 2e4;
83
- var ISSUE_POLL_MS = 2e3;
84
- async function waitForIssue(sent, read, sleep, budgetMs = ISSUE_WAIT_MS) {
85
- let state = sent;
86
- for (let waited = 0; state.status === "sending" && waited < budgetMs; waited += ISSUE_POLL_MS) {
87
- await sleep(ISSUE_POLL_MS);
88
- try {
89
- state = await read();
90
- } catch {
91
- return state;
92
- }
93
- }
94
- return state;
95
- }
96
81
  var reportCommand = defineCommand({
97
82
  meta: {
98
83
  name: "report",
@@ -107,12 +92,7 @@ Start here: baker feedback report --kind bug --title "<what is wrong, one senten
107
92
  }
108
93
  try {
109
94
  const response = await apiPost("/api/feedback/report", parsed.body);
110
- const data = await waitForIssue(
111
- response.data,
112
- async () => (await apiGet("/api/feedback/report", { id: response.data.id })).data,
113
- (ms) => new Promise((resolve) => setTimeout(resolve, ms))
114
- );
115
- writeJson({ ok: true, data, hints: REPORT_HINTS });
95
+ writeJson({ ok: true, data: response.data, hints: REPORT_HINTS });
116
96
  } catch (err) {
117
97
  failApi(err);
118
98
  }
@@ -127,10 +107,8 @@ Full guide: ${DOC}`
127
107
  subCommands: { report: reportCommand }
128
108
  });
129
109
  export {
130
- ISSUE_WAIT_MS,
131
110
  REPORT_HINTS,
132
111
  feedbackCommand,
133
- reportBody,
134
- waitForIssue
112
+ reportBody
135
113
  };
136
- //# sourceMappingURL=feedback-VCYIVDO2.js.map
114
+ //# sourceMappingURL=feedback-ECAZWGJP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/feedback/index.ts"],"sourcesContent":["import {\n type FeedbackReportRequest,\n type FeedbackReportResponse,\n feedbackReportRequestSchema,\n PLATFORM_REPORT_KINDS,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation } from \"../actions/shared.ts\";\n\nconst DOC = \"__tooling__/docs/tools/baker/feedback.md\";\n\nconst ARGS = {\n kind: {\n type: \"string\",\n description:\n \"bug — something in Baker is broken (a command, check, hook, skill or doc does the wrong thing). feature — Baker has no way to do what the work needs.\",\n required: true,\n },\n title: {\n type: \"string\",\n description:\n \"One sentence, what is wrong or missing, in Baker's terms: \\\"baker winning-ads has no way to read one country's ads\\\".\",\n required: true,\n },\n body: {\n type: \"string\",\n description:\n \"What you ran, what came back (the exact message), what you expected, and what you ruled out. Describe the problem, not the client: no names, emails or figures from their accounts.\",\n required: true,\n },\n \"user-asked\": {\n type: \"boolean\",\n description:\n \"Set when the user asked you to tell the Baker team. Leave it off when you are reporting on your own; the team reads which it was.\",\n required: false,\n default: false,\n },\n} as const;\n\nregisterSchema({\n command: \"feedback.report\",\n description:\n 'Start here when Baker itself is in the way: a command, check, hook, skill or doc that is broken, or a capability the work needs that Baker does not have. Example: baker feedback report --kind bug --title \"verify fails on an archived test version\" --body \"…\" (add --user-asked when the user asked you to). Answers as soon as it is saved; it reaches the Baker team on its own, with the client\\'s details taken out. Never a Task, never a message for the user to pass on. Then say one plain line to the user and keep going with what you can still do.',\n args: ARGS,\n});\n\n/**\n * What to do once the report is saved. Hints rather than prose in a doc,\n * because the moment that matters is right after the call: the agent has just\n * hit a wall, and the two things it reaches for — stopping, or asking the\n * marketer to carry the report — are both wrong.\n */\nexport const REPORT_HINTS = [\n \"The Baker team has it: once saved, the report reaches their tracker on its own, so a status of sending is the normal answer and there is nothing more to do or to tell the user about delivery. Tell the user in one plain line that you let the Baker team know — no ids, commands or file names — and never ask them to pass it on.\",\n \"Then keep going: work around it with what this workspace still lets you change (the pages, Forms, Knowledge and Brand you own, a staged change instead of a blocked one), finish the rest of the job, and say plainly what is left undone. One broken piece should not stop the whole task.\",\n \"It is not a Task: don't also file one for it.\",\n];\n\ntype ReportArgs = { kind?: string; title?: string; body?: string; \"user-asked\"?: boolean };\n\n/** The request one `report` line asks for, or why it cannot be sent. */\nexport function reportBody(args: ReportArgs): { ok: true; body: FeedbackReportRequest } | { ok: false; error: string } {\n if (!(PLATFORM_REPORT_KINDS as readonly string[]).includes(args.kind ?? \"\")) {\n return { ok: false, error: `--kind is ${PLATFORM_REPORT_KINDS.join(\" or \")}, got \"${args.kind ?? \"\"}\".` };\n }\n const parsed = feedbackReportRequestSchema.safeParse({\n kind: args.kind,\n title: args.title,\n body: args.body,\n askedByUser: args[\"user-asked\"] === true,\n });\n if (!parsed.success) {\n return {\n ok: false,\n error:\n \"A report needs a --title of at least 10 characters (one sentence, what is wrong or missing) and a --body of at least 20 (what you ran, what came back, what you expected).\",\n };\n }\n return { ok: true, body: parsed.data };\n}\n\nconst reportCommand = defineCommand({\n meta: {\n name: \"report\",\n description: `Tell the Baker team about a defect in Baker or a capability it lacks; sent to their tracker at once.\nStart here: baker feedback report --kind bug --title \"<what is wrong, one sentence>\" --body \"<what you ran, what came back, what you expected>\"`,\n },\n args: ARGS,\n run: async ({ args }) => {\n const parsed = reportBody(args);\n if (!parsed.ok) {\n failValidation(parsed.error);\n }\n try {\n const response = await apiPost<FeedbackReportResponse>(\"/api/feedback/report\", parsed.body);\n writeJson({ ok: true, data: response.data, hints: REPORT_HINTS });\n } catch (err) {\n failApi(err);\n }\n },\n});\n\nexport const feedbackCommand = defineCommand({\n meta: {\n name: \"feedback\",\n description: `Report a defect in Baker, or a capability it lacks, to the Baker team — never to the user, never as a Task. Subcommands: report.\nFull guide: ${DOC}`,\n },\n subCommands: { report: reportCommand },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,qBAAqB;AAM9B,IAAM,MAAM;AAEZ,IAAM,OAAO;AAAA,EACX,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;AAEA,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AACR,CAAC;AAQM,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,WAAW,MAA4F;AACrH,MAAI,CAAE,sBAA4C,SAAS,KAAK,QAAQ,EAAE,GAAG;AAC3E,WAAO,EAAE,IAAI,OAAO,OAAO,aAAa,sBAAsB,KAAK,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,KAAK;AAAA,EAC1G;AACA,QAAM,SAAS,4BAA4B,UAAU;AAAA,IACnD,MAAM,KAAK;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,IACX,aAAa,KAAK,YAAY,MAAM;AAAA,EACtC,CAAC;AACD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO,EAAE,IAAI,MAAM,MAAM,OAAO,KAAK;AACvC;AAEA,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA,EAEf;AAAA,EACA,MAAM;AAAA,EACN,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,SAAS,WAAW,IAAI;AAC9B,QAAI,CAAC,OAAO,IAAI;AACd,qBAAe,OAAO,KAAK;AAAA,IAC7B;AACA,QAAI;AACF,YAAM,WAAW,MAAM,QAAgC,wBAAwB,OAAO,IAAI;AAC1F,gBAAU,EAAE,IAAI,MAAM,MAAM,SAAS,MAAM,OAAO,aAAa,CAAC;AAAA,IAClE,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;AAEM,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,cACH,GAAG;AAAA,EACf;AAAA,EACA,aAAa,EAAE,QAAQ,cAAc;AACvC,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-cli",
3
- "version": "0.561.0",
3
+ "version": "0.562.0",
4
4
  "description": "AI-agent-first CLI for interacting with Baker, including the Baker creative canvas.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/feedback/index.ts"],"sourcesContent":["import {\n type FeedbackReportRequest,\n type FeedbackReportResponse,\n feedbackReportRequestSchema,\n PLATFORM_REPORT_KINDS,\n type PlatformReportState,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi, failValidation } from \"../actions/shared.ts\";\n\nconst DOC = \"__tooling__/docs/tools/baker/feedback.md\";\n\nconst ARGS = {\n kind: {\n type: \"string\",\n description:\n \"bug — something in Baker is broken (a command, check, hook, skill or doc does the wrong thing). feature — Baker has no way to do what the work needs.\",\n required: true,\n },\n title: {\n type: \"string\",\n description:\n \"One sentence, what is wrong or missing, in Baker's terms: \\\"baker winning-ads has no way to read one country's ads\\\".\",\n required: true,\n },\n body: {\n type: \"string\",\n description:\n \"What you ran, what came back (the exact message), what you expected, and what you ruled out. Describe the problem, not the client: no names, emails or figures from their accounts.\",\n required: true,\n },\n \"user-asked\": {\n type: \"boolean\",\n description:\n \"Set when the user asked you to tell the Baker team. Leave it off when you are reporting on your own; the team reads which it was.\",\n required: false,\n default: false,\n },\n} as const;\n\nregisterSchema({\n command: \"feedback.report\",\n description:\n 'Start here when Baker itself is in the way: a command, check, hook, skill or doc that is broken, or a capability the work needs that Baker does not have. Example: baker feedback report --kind bug --title \"verify fails on an archived test version\" --body \"…\" (add --user-asked when the user asked you to). Sent to the Baker team at once, with the client\\'s details taken out; the answer names the issue it is on. Never a Task, never a message for the user to pass on. Then say one plain line to the user and keep going with what you can still do.',\n args: ARGS,\n});\n\n/**\n * What to do once the report is saved. Hints rather than prose in a doc,\n * because the moment that matters is right after the call: the agent has just\n * hit a wall, and the two things it reaches for — stopping, or asking the\n * marketer to carry the report — are both wrong.\n */\nexport const REPORT_HINTS = [\n \"The Baker team has it (or will within minutes, if it is still sending — nothing more to do). Tell the user in one plain line that you let the Baker team know — no ids, commands or file names — and never ask them to pass it on.\",\n \"Then keep going: work around it with what this workspace still lets you change (the pages, Forms, Knowledge and Brand you own, a staged change instead of a blocked one), finish the rest of the job, and say plainly what is left undone. One broken piece should not stop the whole task.\",\n \"It is not a Task: don't also file one for it.\",\n];\n\ntype ReportArgs = { kind?: string; title?: string; body?: string; \"user-asked\"?: boolean };\n\n/** The request one `report` line asks for, or why it cannot be sent. */\nexport function reportBody(args: ReportArgs): { ok: true; body: FeedbackReportRequest } | { ok: false; error: string } {\n if (!(PLATFORM_REPORT_KINDS as readonly string[]).includes(args.kind ?? \"\")) {\n return { ok: false, error: `--kind is ${PLATFORM_REPORT_KINDS.join(\" or \")}, got \"${args.kind ?? \"\"}\".` };\n }\n const parsed = feedbackReportRequestSchema.safeParse({\n kind: args.kind,\n title: args.title,\n body: args.body,\n askedByUser: args[\"user-asked\"] === true,\n });\n if (!parsed.success) {\n return {\n ok: false,\n error:\n \"A report needs a --title of at least 10 characters (one sentence, what is wrong or missing) and a --body of at least 20 (what you ran, what came back, what you expected).\",\n };\n }\n return { ok: true, body: parsed.data };\n}\n\n/** How long the command waits for the tracker to answer before returning \"sending\". */\nexport const ISSUE_WAIT_MS = 20_000;\nconst ISSUE_POLL_MS = 2_000;\n\n/**\n * Wait, briefly, for the report to land on an issue. The send runs on its own\n * whatever happens here: this only lets the answer say where it landed.\n */\nexport async function waitForIssue(\n sent: PlatformReportState,\n read: () => Promise<PlatformReportState>,\n sleep: (ms: number) => Promise<void>,\n budgetMs: number = ISSUE_WAIT_MS,\n): Promise<PlatformReportState> {\n let state = sent;\n for (let waited = 0; state.status === \"sending\" && waited < budgetMs; waited += ISSUE_POLL_MS) {\n await sleep(ISSUE_POLL_MS);\n try {\n state = await read();\n } catch {\n return state;\n }\n }\n return state;\n}\n\nconst reportCommand = defineCommand({\n meta: {\n name: \"report\",\n description: `Tell the Baker team about a defect in Baker or a capability it lacks; sent to their tracker at once.\nStart here: baker feedback report --kind bug --title \"<what is wrong, one sentence>\" --body \"<what you ran, what came back, what you expected>\"`,\n },\n args: ARGS,\n run: async ({ args }) => {\n const parsed = reportBody(args);\n if (!parsed.ok) {\n failValidation(parsed.error);\n }\n try {\n const response = await apiPost<FeedbackReportResponse>(\"/api/feedback/report\", parsed.body);\n const data = await waitForIssue(\n response.data,\n async () => (await apiGet<FeedbackReportResponse>(\"/api/feedback/report\", { id: response.data.id })).data,\n (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n );\n writeJson({ ok: true, data, hints: REPORT_HINTS });\n } catch (err) {\n failApi(err);\n }\n },\n});\n\nexport const feedbackCommand = defineCommand({\n meta: {\n name: \"feedback\",\n description: `Report a defect in Baker, or a capability it lacks, to the Baker team — never to the user, never as a Task. Subcommands: report.\nFull guide: ${DOC}`,\n },\n subCommands: { report: reportCommand },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,SAAS,qBAAqB;AAM9B,IAAM,MAAM;AAEZ,IAAM,OAAO;AAAA,EACX,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;AAEA,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AACR,CAAC;AAQM,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,WAAW,MAA4F;AACrH,MAAI,CAAE,sBAA4C,SAAS,KAAK,QAAQ,EAAE,GAAG;AAC3E,WAAO,EAAE,IAAI,OAAO,OAAO,aAAa,sBAAsB,KAAK,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,KAAK;AAAA,EAC1G;AACA,QAAM,SAAS,4BAA4B,UAAU;AAAA,IACnD,MAAM,KAAK;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,IACX,aAAa,KAAK,YAAY,MAAM;AAAA,EACtC,CAAC;AACD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO,EAAE,IAAI,MAAM,MAAM,OAAO,KAAK;AACvC;AAGO,IAAM,gBAAgB;AAC7B,IAAM,gBAAgB;AAMtB,eAAsB,aACpB,MACA,MACA,OACA,WAAmB,eACW;AAC9B,MAAI,QAAQ;AACZ,WAAS,SAAS,GAAG,MAAM,WAAW,aAAa,SAAS,UAAU,UAAU,eAAe;AAC7F,UAAM,MAAM,aAAa;AACzB,QAAI;AACF,cAAQ,MAAM,KAAK;AAAA,IACrB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,cAAc;AAAA,EAClC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA,EAEf;AAAA,EACA,MAAM;AAAA,EACN,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,SAAS,WAAW,IAAI;AAC9B,QAAI,CAAC,OAAO,IAAI;AACd,qBAAe,OAAO,KAAK;AAAA,IAC7B;AACA,QAAI;AACF,YAAM,WAAW,MAAM,QAAgC,wBAAwB,OAAO,IAAI;AAC1F,YAAM,OAAO,MAAM;AAAA,QACjB,SAAS;AAAA,QACT,aAAa,MAAM,OAA+B,wBAAwB,EAAE,IAAI,SAAS,KAAK,GAAG,CAAC,GAAG;AAAA,QACrG,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,MAC1D;AACA,gBAAU,EAAE,IAAI,MAAM,MAAM,OAAO,aAAa,CAAC;AAAA,IACnD,SAAS,KAAK;AACZ,cAAQ,GAAG;AAAA,IACb;AAAA,EACF;AACF,CAAC;AAEM,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,cACH,GAAG;AAAA,EACf;AAAA,EACA,aAAa,EAAE,QAAQ,cAAc;AACvC,CAAC;","names":[]}