@mulmoclaude/core 0.13.1 → 0.15.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/assets/helps/billing-clients-worklog.md +15 -12
- package/assets/helps/collection-skills.md +67 -22
- package/assets/helps/todo-collection.md +13 -7
- package/dist/{deriveAll-BQ_p5HSB.cjs → calendarGrid-CaR-q36Y.js} +352 -74
- package/dist/calendarGrid-CaR-q36Y.js.map +1 -0
- package/dist/calendarGrid-gN4sei7s.cjs +1070 -0
- package/dist/calendarGrid-gN4sei7s.cjs.map +1 -0
- package/dist/collection/core/backlinks.d.ts +20 -0
- package/dist/collection/core/ids.d.ts +12 -0
- package/dist/collection/core/recordZ.d.ts +23 -0
- package/dist/collection/core/schema.d.ts +72 -418
- package/dist/collection/core/schemaZ.d.ts +878 -0
- package/dist/collection/core/templatePath.d.ts +34 -0
- package/dist/collection/core/uiTypes.d.ts +22 -0
- package/dist/collection/core/where.d.ts +9 -15
- package/dist/collection/index.cjs +50 -330
- package/dist/collection/index.cjs.map +1 -1
- package/dist/collection/index.d.ts +2 -0
- package/dist/collection/index.js +14 -301
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/paths.cjs +1 -1
- package/dist/collection/paths.cjs.map +1 -1
- package/dist/collection/paths.js +1 -1
- package/dist/collection/paths.js.map +1 -1
- package/dist/collection/registry/server/index.cjs +1 -1
- package/dist/collection/registry/server/index.js +1 -1
- package/dist/collection/server/discovery.d.ts +2 -244
- package/dist/collection/server/index.cjs +8 -2
- package/dist/collection/server/index.d.ts +1 -0
- package/dist/collection/server/index.js +3 -2
- package/dist/collection/server/io.d.ts +9 -0
- package/dist/collection/server/ontology.d.ts +35 -0
- package/dist/collection/server/templatePath.d.ts +1 -34
- package/dist/collection/server/validate.d.ts +11 -7
- package/dist/collection-watchers/index.cjs +5 -4
- package/dist/collection-watchers/index.cjs.map +1 -1
- package/dist/collection-watchers/index.js +3 -2
- package/dist/collection-watchers/index.js.map +1 -1
- package/dist/feeds/index.cjs +4 -4
- package/dist/feeds/index.js +2 -2
- package/dist/feeds/ingestTypes.d.ts +15 -40
- package/dist/feeds/server/index.cjs +5 -5
- package/dist/feeds/server/index.js +3 -3
- package/dist/{ingestTypes-C7EheYZX.cjs → ingestTypes-DG8RExWt.cjs} +3 -3
- package/dist/ingestTypes-DG8RExWt.cjs.map +1 -0
- package/dist/{ingestTypes-CmJeOUJc.js → ingestTypes-V4upKeBx.js} +2 -2
- package/dist/ingestTypes-V4upKeBx.js.map +1 -0
- package/dist/{server-DKXXFTbw.js → server-BNTR7ySK.js} +531 -196
- package/dist/server-BNTR7ySK.js.map +1 -0
- package/dist/{server-G6GtOdaW.cjs → server-bsNrf2yW.cjs} +572 -213
- package/dist/server-bsNrf2yW.cjs.map +1 -0
- package/package.json +1 -1
- package/dist/deriveAll-BQ_p5HSB.cjs.map +0 -1
- package/dist/deriveAll-CMFXDQ_G.js +0 -506
- package/dist/deriveAll-CMFXDQ_G.js.map +0 -1
- package/dist/ingestTypes-C7EheYZX.cjs.map +0 -1
- package/dist/ingestTypes-CmJeOUJc.js.map +0 -1
- package/dist/server-DKXXFTbw.js.map +0 -1
- package/dist/server-G6GtOdaW.cjs.map +0 -1
package/dist/feeds/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
3
|
-
const require_ingestTypes = require("../ingestTypes-
|
|
2
|
+
const require_calendarGrid = require("../calendarGrid-gN4sei7s.cjs");
|
|
3
|
+
const require_ingestTypes = require("../ingestTypes-DG8RExWt.cjs");
|
|
4
4
|
exports.AGENT_INGEST_KIND = require_ingestTypes.AGENT_INGEST_KIND;
|
|
5
5
|
exports.DEFAULT_FEED_MAX_ITEMS = require_ingestTypes.DEFAULT_FEED_MAX_ITEMS;
|
|
6
|
-
exports.FEED_SCHEDULES =
|
|
7
|
-
exports.INGEST_KINDS =
|
|
6
|
+
exports.FEED_SCHEDULES = require_calendarGrid.FEED_SCHEDULES;
|
|
7
|
+
exports.INGEST_KINDS = require_calendarGrid.INGEST_KINDS;
|
|
8
8
|
exports.isFeedSchedule = require_ingestTypes.isFeedSchedule;
|
package/dist/feeds/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../ingestTypes-
|
|
1
|
+
import { N as FEED_SCHEDULES, P as INGEST_KINDS } from "../calendarGrid-CaR-q36Y.js";
|
|
2
|
+
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../ingestTypes-V4upKeBx.js";
|
|
3
3
|
export { AGENT_INGEST_KIND, DEFAULT_FEED_MAX_ITEMS, FEED_SCHEDULES, INGEST_KINDS, isFeedSchedule };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INGEST_KINDS, FEED_SCHEDULES, IngestKind, FeedSchedule } from '../collection/index.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AgentIngestZ, DeclarativeIngestZ } from '../collection/core/schemaZ';
|
|
2
4
|
export declare const AGENT_INGEST_KIND: "agent";
|
|
3
5
|
export type AgentIngestKind = typeof AGENT_INGEST_KIND;
|
|
4
6
|
export { INGEST_KINDS, FEED_SCHEDULES, type IngestKind, type FeedSchedule };
|
|
@@ -11,47 +13,20 @@ export declare const DEFAULT_FEED_MAX_ITEMS = 100;
|
|
|
11
13
|
* `"data.name"`). */
|
|
12
14
|
export type IngestFieldMap = Record<string, string>;
|
|
13
15
|
/** Declarative retrieval (`rss`/`atom`/`http-json`): the host fetches `url`
|
|
14
|
-
* and projects each item through `map
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/** Refresh cadence. */
|
|
24
|
-
schedule: FeedSchedule;
|
|
25
|
-
/** `http-json` only: dot/bracket path to the array of items in the
|
|
26
|
-
* response (e.g. `"hourly[]"` or `"data.results[]"`). Ignored for
|
|
27
|
-
* `rss`/`atom`, which yield items natively. */
|
|
28
|
-
itemsAt?: string;
|
|
29
|
-
/** target field → source path. Projects each raw item into a record
|
|
30
|
-
* whose keys match the schema's `fields`. */
|
|
31
|
-
map: IngestFieldMap;
|
|
32
|
-
/** Optional source path used to derive the primaryKey value when the
|
|
33
|
-
* mapped record's primaryKey is empty (e.g. `"feedId"`). Falls back
|
|
34
|
-
* to a content hash of the record. */
|
|
35
|
-
idFrom?: string;
|
|
36
|
-
/** Cap on stored records. After each fetch the feed keeps only the
|
|
37
|
-
* newest `maxItems` (ordered by the schema's first `date` field) and
|
|
38
|
-
* deletes the rest. Defaults to {@link DEFAULT_FEED_MAX_ITEMS} when
|
|
39
|
-
* omitted; `0` disables the cap (keep everything). Pruning is skipped
|
|
40
|
-
* when the schema has no `date` field to order by. */
|
|
41
|
-
maxItems?: number;
|
|
42
|
-
}
|
|
16
|
+
* and projects each item through `map` (target field → source path; a
|
|
17
|
+
* `http-json` feed may add `itemsAt`, a dot/bracket path to the items
|
|
18
|
+
* array; `idFrom` derives the primaryKey; `maxItems` caps stored records,
|
|
19
|
+
* default {@link DEFAULT_FEED_MAX_ITEMS}, `0` = keep everything). The
|
|
20
|
+
* canonical loose contract stays the minimal `CollectionIngest`; this
|
|
21
|
+
* feeds subtype is derived from the zod source of truth
|
|
22
|
+
* (`collection/core/schemaZ` `DeclarativeIngestZ`), so the engine and the
|
|
23
|
+
* schema validator can never drift. */
|
|
24
|
+
export type DeclarativeIngestSpec = z.infer<typeof DeclarativeIngestZ>;
|
|
43
25
|
/** Agent-performed retrieval (`kind: "agent"`). No `url`/`map`: the host seeds
|
|
44
26
|
* a hidden background worker (origin `system`) in `role` with `template` + a
|
|
45
27
|
* summary of every record, and the worker edits the records itself via the
|
|
46
|
-
* collections io layer. Valid on any collection (primarily skill-backed).
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
/** Refresh cadence (same vocabulary as declarative feeds). */
|
|
50
|
-
schedule: FeedSchedule;
|
|
51
|
-
/** Role id the scheduled hidden worker runs in. */
|
|
52
|
-
role: string;
|
|
53
|
-
/** Skill-relative template path (under `templates/`) seeding the worker. */
|
|
54
|
-
template: string;
|
|
55
|
-
}
|
|
28
|
+
* collections io layer. Valid on any collection (primarily skill-backed).
|
|
29
|
+
* Derived from `AgentIngestZ` in `collection/core/schemaZ`. */
|
|
30
|
+
export type AgentIngestSpec = z.infer<typeof AgentIngestZ>;
|
|
56
31
|
/** The `ingest` block carried on a `CollectionSchema`, discriminated on `kind`. */
|
|
57
32
|
export type IngestSpec = DeclarativeIngestSpec | AgentIngestSpec;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../../rolldown-runtime-D6vf50IK.cjs");
|
|
3
|
-
const
|
|
4
|
-
const require_server = require("../../server-
|
|
5
|
-
const require_ingestTypes = require("../../ingestTypes-
|
|
3
|
+
const require_calendarGrid = require("../../calendarGrid-gN4sei7s.cjs");
|
|
4
|
+
const require_server = require("../../server-bsNrf2yW.cjs");
|
|
5
|
+
const require_ingestTypes = require("../../ingestTypes-DG8RExWt.cjs");
|
|
6
6
|
const require_feeds_paths = require("../paths.cjs");
|
|
7
7
|
const require_notifier = require("../../notifier-bS8IEeLA.cjs");
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -817,8 +817,8 @@ exports.DEFAULT_FEED_MAX_ITEMS = require_ingestTypes.DEFAULT_FEED_MAX_ITEMS;
|
|
|
817
817
|
exports.DEFAULT_FEED_REFRESH_INTERVAL_MS = DEFAULT_FEED_REFRESH_INTERVAL_MS;
|
|
818
818
|
exports.FEEDS_DIR = require_feeds_paths.FEEDS_DIR;
|
|
819
819
|
exports.FEED_REFRESH_TASK_ID = FEED_REFRESH_TASK_ID;
|
|
820
|
-
exports.FEED_SCHEDULES =
|
|
821
|
-
exports.INGEST_KINDS =
|
|
820
|
+
exports.FEED_SCHEDULES = require_calendarGrid.FEED_SCHEDULES;
|
|
821
|
+
exports.INGEST_KINDS = require_calendarGrid.INGEST_KINDS;
|
|
822
822
|
exports.configureFeedsHost = configureFeedsHost;
|
|
823
823
|
exports.feedDir = require_feeds_paths.feedDir;
|
|
824
824
|
exports.feedRefreshTaskDef = feedRefreshTaskDef;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { A as
|
|
3
|
-
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../../ingestTypes-
|
|
1
|
+
import { N as FEED_SCHEDULES, P as INGEST_KINDS } from "../../calendarGrid-CaR-q36Y.js";
|
|
2
|
+
import { A as buildCollectionActionSeedPrompt, F as promptPathsFor, P as listItems, V as writeItem, X as safeSlugName, b as discoverCollections, j as deleteItem, q as resolveDataDir, z as readSkillTemplate } from "../../server-BNTR7ySK.js";
|
|
3
|
+
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../../ingestTypes-V4upKeBx.js";
|
|
4
4
|
import { FEEDS_DIR, feedDir, feedStatePath, feedsRoot, ingestStateDir, ingestStatePath } from "../paths.js";
|
|
5
5
|
import { d as publish, n as clear } from "../../notifier-ChpY0XrY.js";
|
|
6
6
|
import path from "node:path";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_calendarGrid = require("./calendarGrid-gN4sei7s.cjs");
|
|
2
2
|
require("./collection/index.cjs");
|
|
3
3
|
//#region src/feeds/ingestTypes.ts
|
|
4
4
|
var AGENT_INGEST_KIND = "agent";
|
|
5
|
-
var FEED_SCHEDULE_SET = new Set(
|
|
5
|
+
var FEED_SCHEDULE_SET = new Set(require_calendarGrid.FEED_SCHEDULES);
|
|
6
6
|
function isFeedSchedule(value) {
|
|
7
7
|
return typeof value === "string" && FEED_SCHEDULE_SET.has(value);
|
|
8
8
|
}
|
|
@@ -29,4 +29,4 @@ Object.defineProperty(exports, "isFeedSchedule", {
|
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
//# sourceMappingURL=ingestTypes-
|
|
32
|
+
//# sourceMappingURL=ingestTypes-DG8RExWt.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingestTypes-DG8RExWt.cjs","names":[],"sources":["../src/feeds/ingestTypes.ts"],"sourcesContent":["// Declarative retrieval config for the \"Feeds\" mechanism. A Feed is a\n// CollectionSchema plus this `ingest` block, registered as data (NOT as\n// a skill) under `<workspace>/feeds/<slug>/schema.json`. The host's\n// retrieval engine reads it to periodically refill the collection's\n// records via the shared collections io layer.\n//\n// The ingest vocab (INGEST_KINDS / FEED_SCHEDULES + their literal-union types)\n// lives in the sibling `../collection` subpath alongside the schema contract, so\n// the package's schema validator can enforce it. Re-exported here so the feeds\n// engine's existing importers resolve them unchanged.\nimport { INGEST_KINDS, FEED_SCHEDULES, type IngestKind, type FeedSchedule } from \"../collection/index.js\";\n// Type-only: keeps zod out of this module's runtime graph (the feeds engine\n// imports it browser-free through `../collection`'s type surface).\nimport type { z } from \"zod\";\nimport type { AgentIngestZ, DeclarativeIngestZ } from \"../collection/core/schemaZ\";\n//\n// Two flavours: the declarative kinds (`rss`/`atom`/`http-json`) fetch-and-map,\n// and `agent` dispatches a hidden worker. The `code` kind (LLM-generated\n// deterministic transform) is still reserved for a future retriever.\n\n// The agent ingest kind. Defined HERE (not imported from `../collection`) on\n// purpose: the engine only needs the literal to branch, and re-importing it as a\n// VALUE keeps this module free of a value dependency on the collection vocab.\n// Core owns its own copy for the schema validator; this matches the same literal.\nexport const AGENT_INGEST_KIND = \"agent\" as const;\nexport type AgentIngestKind = typeof AGENT_INGEST_KIND;\n\nexport { INGEST_KINDS, FEED_SCHEDULES, type IngestKind, type FeedSchedule };\n\nconst FEED_SCHEDULE_SET: ReadonlySet<string> = new Set(FEED_SCHEDULES);\n\nexport function isFeedSchedule(value: unknown): value is FeedSchedule {\n return typeof value === \"string\" && FEED_SCHEDULE_SET.has(value);\n}\n\n/** Default cap on stored records per feed when `ingest.maxItems` is\n * omitted. Keeps high-volume feeds (news / podcasts) bounded. */\nexport const DEFAULT_FEED_MAX_ITEMS = 100;\n\n/** Declarative field map: target collection field name → source path\n * into the raw item (dot/bracket path, e.g. `\"title\"` or\n * `\"data.name\"`). */\nexport type IngestFieldMap = Record<string, string>;\n\n/** Declarative retrieval (`rss`/`atom`/`http-json`): the host fetches `url`\n * and projects each item through `map` (target field → source path; a\n * `http-json` feed may add `itemsAt`, a dot/bracket path to the items\n * array; `idFrom` derives the primaryKey; `maxItems` caps stored records,\n * default {@link DEFAULT_FEED_MAX_ITEMS}, `0` = keep everything). The\n * canonical loose contract stays the minimal `CollectionIngest`; this\n * feeds subtype is derived from the zod source of truth\n * (`collection/core/schemaZ` `DeclarativeIngestZ`), so the engine and the\n * schema validator can never drift. */\nexport type DeclarativeIngestSpec = z.infer<typeof DeclarativeIngestZ>;\n\n/** Agent-performed retrieval (`kind: \"agent\"`). No `url`/`map`: the host seeds\n * a hidden background worker (origin `system`) in `role` with `template` + a\n * summary of every record, and the worker edits the records itself via the\n * collections io layer. Valid on any collection (primarily skill-backed).\n * Derived from `AgentIngestZ` in `collection/core/schemaZ`. */\nexport type AgentIngestSpec = z.infer<typeof AgentIngestZ>;\n\n/** The `ingest` block carried on a `CollectionSchema`, discriminated on `kind`. */\nexport type IngestSpec = DeclarativeIngestSpec | AgentIngestSpec;\n"],"mappings":";;;AAwBA,IAAa,oBAAoB;AAKjC,IAAM,oBAAyC,IAAI,IAAI,qBAAA,cAAc;AAErE,SAAgB,eAAe,OAAuC;CACpE,OAAO,OAAO,UAAU,YAAY,kBAAkB,IAAI,KAAK;AACjE;;;AAIA,IAAa,yBAAyB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { N as FEED_SCHEDULES } from "./calendarGrid-CaR-q36Y.js";
|
|
2
2
|
import "./collection/index.js";
|
|
3
3
|
//#region src/feeds/ingestTypes.ts
|
|
4
4
|
var AGENT_INGEST_KIND = "agent";
|
|
@@ -12,4 +12,4 @@ var DEFAULT_FEED_MAX_ITEMS = 100;
|
|
|
12
12
|
//#endregion
|
|
13
13
|
export { DEFAULT_FEED_MAX_ITEMS as n, isFeedSchedule as r, AGENT_INGEST_KIND as t };
|
|
14
14
|
|
|
15
|
-
//# sourceMappingURL=ingestTypes-
|
|
15
|
+
//# sourceMappingURL=ingestTypes-V4upKeBx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingestTypes-V4upKeBx.js","names":[],"sources":["../src/feeds/ingestTypes.ts"],"sourcesContent":["// Declarative retrieval config for the \"Feeds\" mechanism. A Feed is a\n// CollectionSchema plus this `ingest` block, registered as data (NOT as\n// a skill) under `<workspace>/feeds/<slug>/schema.json`. The host's\n// retrieval engine reads it to periodically refill the collection's\n// records via the shared collections io layer.\n//\n// The ingest vocab (INGEST_KINDS / FEED_SCHEDULES + their literal-union types)\n// lives in the sibling `../collection` subpath alongside the schema contract, so\n// the package's schema validator can enforce it. Re-exported here so the feeds\n// engine's existing importers resolve them unchanged.\nimport { INGEST_KINDS, FEED_SCHEDULES, type IngestKind, type FeedSchedule } from \"../collection/index.js\";\n// Type-only: keeps zod out of this module's runtime graph (the feeds engine\n// imports it browser-free through `../collection`'s type surface).\nimport type { z } from \"zod\";\nimport type { AgentIngestZ, DeclarativeIngestZ } from \"../collection/core/schemaZ\";\n//\n// Two flavours: the declarative kinds (`rss`/`atom`/`http-json`) fetch-and-map,\n// and `agent` dispatches a hidden worker. The `code` kind (LLM-generated\n// deterministic transform) is still reserved for a future retriever.\n\n// The agent ingest kind. Defined HERE (not imported from `../collection`) on\n// purpose: the engine only needs the literal to branch, and re-importing it as a\n// VALUE keeps this module free of a value dependency on the collection vocab.\n// Core owns its own copy for the schema validator; this matches the same literal.\nexport const AGENT_INGEST_KIND = \"agent\" as const;\nexport type AgentIngestKind = typeof AGENT_INGEST_KIND;\n\nexport { INGEST_KINDS, FEED_SCHEDULES, type IngestKind, type FeedSchedule };\n\nconst FEED_SCHEDULE_SET: ReadonlySet<string> = new Set(FEED_SCHEDULES);\n\nexport function isFeedSchedule(value: unknown): value is FeedSchedule {\n return typeof value === \"string\" && FEED_SCHEDULE_SET.has(value);\n}\n\n/** Default cap on stored records per feed when `ingest.maxItems` is\n * omitted. Keeps high-volume feeds (news / podcasts) bounded. */\nexport const DEFAULT_FEED_MAX_ITEMS = 100;\n\n/** Declarative field map: target collection field name → source path\n * into the raw item (dot/bracket path, e.g. `\"title\"` or\n * `\"data.name\"`). */\nexport type IngestFieldMap = Record<string, string>;\n\n/** Declarative retrieval (`rss`/`atom`/`http-json`): the host fetches `url`\n * and projects each item through `map` (target field → source path; a\n * `http-json` feed may add `itemsAt`, a dot/bracket path to the items\n * array; `idFrom` derives the primaryKey; `maxItems` caps stored records,\n * default {@link DEFAULT_FEED_MAX_ITEMS}, `0` = keep everything). The\n * canonical loose contract stays the minimal `CollectionIngest`; this\n * feeds subtype is derived from the zod source of truth\n * (`collection/core/schemaZ` `DeclarativeIngestZ`), so the engine and the\n * schema validator can never drift. */\nexport type DeclarativeIngestSpec = z.infer<typeof DeclarativeIngestZ>;\n\n/** Agent-performed retrieval (`kind: \"agent\"`). No `url`/`map`: the host seeds\n * a hidden background worker (origin `system`) in `role` with `template` + a\n * summary of every record, and the worker edits the records itself via the\n * collections io layer. Valid on any collection (primarily skill-backed).\n * Derived from `AgentIngestZ` in `collection/core/schemaZ`. */\nexport type AgentIngestSpec = z.infer<typeof AgentIngestZ>;\n\n/** The `ingest` block carried on a `CollectionSchema`, discriminated on `kind`. */\nexport type IngestSpec = DeclarativeIngestSpec | AgentIngestSpec;\n"],"mappings":";;;AAwBA,IAAa,oBAAoB;AAKjC,IAAM,oBAAyC,IAAI,IAAI,cAAc;AAErE,SAAgB,eAAe,OAAuC;CACpE,OAAO,OAAO,UAAU,YAAY,kBAAkB,IAAI,KAAK;AACjE;;;AAIA,IAAa,yBAAyB"}
|