@mulmoclaude/core 4.4.2 → 4.6.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/bug-report-faq.md +13 -0
- package/assets/helps/business.md +4 -0
- package/assets/helps/error-recovery.md +71 -0
- package/assets/helps/gemini.md +1 -1
- package/assets/helps/mulmoscript.md +71 -1
- package/assets/helps/presentation-deck.md +4 -1
- package/assets/helps/storyteller.md +7 -0
- package/dist/collection/core/accentColor.d.ts +23 -0
- package/dist/collection/core/iconGlyph.d.ts +26 -0
- package/dist/collection/core/schema.d.ts +9 -0
- package/dist/collection/core/schemaZ.d.ts +19 -1
- package/dist/collection/core/shortcutInfo.d.ts +14 -0
- package/dist/collection/core/uiTypes.d.ts +6 -0
- package/dist/collection/index.cjs +22 -2
- package/dist/collection/index.cjs.map +1 -1
- package/dist/collection/index.d.ts +3 -0
- package/dist/collection/index.js +17 -3
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/registry/server/index.cjs +3 -3
- package/dist/collection/registry/server/index.js +3 -3
- package/dist/collection/server/index.cjs +6 -4
- package/dist/collection/server/index.js +5 -5
- package/dist/collection/server/paths.d.ts +10 -0
- package/dist/collection/server/skillAssets.d.ts +20 -0
- package/dist/collection-watchers/index.cjs +5 -5
- package/dist/collection-watchers/index.js +5 -5
- package/dist/{discovery-Dl9nRa-m.cjs → discovery-2TvulIz8.cjs} +25 -5
- package/dist/discovery-2TvulIz8.cjs.map +1 -0
- package/dist/{discovery-P64fgtuD.js → discovery-BY-nMCuh.js} +20 -6
- package/dist/discovery-BY-nMCuh.js.map +1 -0
- package/dist/feeds/index.cjs +2 -2
- package/dist/feeds/index.js +2 -2
- package/dist/feeds/server/index.cjs +5 -5
- package/dist/feeds/server/index.js +5 -5
- package/dist/files/atomic.d.ts +4 -0
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/global-config/index.cjs +1 -1
- package/dist/google/index.cjs +4 -4
- package/dist/google/index.js +3 -3
- package/dist/iconGlyph-D8JeNg7R.js +59 -0
- package/dist/iconGlyph-D8JeNg7R.js.map +1 -0
- package/dist/iconGlyph-fSBp6k4J.cjs +70 -0
- package/dist/iconGlyph-fSBp6k4J.cjs.map +1 -0
- package/dist/{ingestTypes-CaX7_s-K.cjs → ingestTypes-DsVH9BYy.cjs} +2 -2
- package/dist/{ingestTypes-CaX7_s-K.cjs.map → ingestTypes-DsVH9BYy.cjs.map} +1 -1
- package/dist/{ingestTypes-CIy1lHjf.js → ingestTypes-GkG7bJdB.js} +2 -2
- package/dist/{ingestTypes-CIy1lHjf.js.map → ingestTypes-GkG7bJdB.js.map} +1 -1
- package/dist/{itemId-BY2YPBkT.js → itemId-4P9S_ehz.js} +48 -2
- package/dist/itemId-4P9S_ehz.js.map +1 -0
- package/dist/{itemId-CEQdK01z.cjs → itemId-CGT2J7YK.cjs} +65 -1
- package/dist/itemId-CGT2J7YK.cjs.map +1 -0
- package/dist/{paths-ClV946_f.cjs → paths-C8-jxR0s.cjs} +1 -2
- package/dist/{paths-ClV946_f.cjs.map → paths-C8-jxR0s.cjs.map} +1 -1
- package/dist/plugin-vue/IconGlyph.d.ts +27 -0
- package/dist/plugin-vue/index.cjs +64 -9
- package/dist/plugin-vue/index.cjs.map +1 -1
- package/dist/plugin-vue/index.d.ts +1 -0
- package/dist/plugin-vue/index.js +65 -11
- package/dist/plugin-vue/index.js.map +1 -1
- package/dist/{promptSafety-Bp780ezk.js → promptSafety-Bte62OvU.js} +2 -2
- package/dist/{promptSafety-Bp780ezk.js.map → promptSafety-Bte62OvU.js.map} +1 -1
- package/dist/{promptSafety-C0BWDsfT.cjs → promptSafety-Cv-SoTd4.cjs} +2 -2
- package/dist/{promptSafety-C0BWDsfT.cjs.map → promptSafety-Cv-SoTd4.cjs.map} +1 -1
- package/dist/{root-BMroU_mB.js → root-BcS4-Kge.js} +12 -2
- package/dist/root-BcS4-Kge.js.map +1 -0
- package/dist/{root-rPH6FGDT.cjs → root-BvwBUcol.cjs} +12 -2
- package/dist/root-BvwBUcol.cjs.map +1 -0
- package/dist/{server-CF1qllGV.cjs → server-DXUt34Rt.cjs} +125 -46
- package/dist/server-DXUt34Rt.cjs.map +1 -0
- package/dist/{server-BvXO49Vj.js → server-DyYwfNB6.js} +120 -47
- package/dist/server-DyYwfNB6.js.map +1 -0
- package/package.json +9 -9
- package/dist/discovery-Dl9nRa-m.cjs.map +0 -1
- package/dist/discovery-P64fgtuD.js.map +0 -1
- package/dist/itemId-BY2YPBkT.js.map +0 -1
- package/dist/itemId-CEQdK01z.cjs.map +0 -1
- package/dist/root-BMroU_mB.js.map +0 -1
- package/dist/root-rPH6FGDT.cjs.map +0 -1
- package/dist/server-BvXO49Vj.js.map +0 -1
- package/dist/server-CF1qllGV.cjs.map +0 -1
package/dist/feeds/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_itemId = require("../itemId-
|
|
3
|
-
const require_ingestTypes = require("../ingestTypes-
|
|
2
|
+
const require_itemId = require("../itemId-CGT2J7YK.cjs");
|
|
3
|
+
const require_ingestTypes = require("../ingestTypes-DsVH9BYy.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
6
|
exports.FEED_SCHEDULES = require_itemId.FEED_SCHEDULES;
|
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 { G as INGEST_KINDS, W as FEED_SCHEDULES } from "../itemId-4P9S_ehz.js";
|
|
2
|
+
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../ingestTypes-GkG7bJdB.js";
|
|
3
3
|
export { AGENT_INGEST_KIND, DEFAULT_FEED_MAX_ITEMS, FEED_SCHEDULES, INGEST_KINDS, isFeedSchedule };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../../rolldown-runtime-VH7oDXx4.cjs");
|
|
3
3
|
const require_dist = require("../../dist-CsgSfWwR.cjs");
|
|
4
|
-
const require_root = require("../../root-
|
|
5
|
-
const require_itemId = require("../../itemId-
|
|
4
|
+
const require_root = require("../../root-BvwBUcol.cjs");
|
|
5
|
+
const require_itemId = require("../../itemId-CGT2J7YK.cjs");
|
|
6
6
|
const require_project = require("../../project-C1ep9pvo.cjs");
|
|
7
|
-
const require_discovery = require("../../discovery-
|
|
8
|
-
const require_server = require("../../server-
|
|
7
|
+
const require_discovery = require("../../discovery-2TvulIz8.cjs");
|
|
8
|
+
const require_server = require("../../server-DXUt34Rt.cjs");
|
|
9
9
|
const require_feeds_paths = require("../paths.cjs");
|
|
10
|
-
const require_ingestTypes = require("../../ingestTypes-
|
|
10
|
+
const require_ingestTypes = require("../../ingestTypes-DsVH9BYy.cjs");
|
|
11
11
|
const require_notifier = require("../../notifier-DZJj0sOh.cjs");
|
|
12
12
|
let node_path = require("node:path");
|
|
13
13
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { a as isErrorWithCode, l as isUnknownArray, s as isRecord$1 } from "../../dist-D8zokgGo.js";
|
|
2
|
-
import { t as canonicalRoot } from "../../root-
|
|
3
|
-
import {
|
|
2
|
+
import { t as canonicalRoot } from "../../root-BcS4-Kge.js";
|
|
3
|
+
import { G as INGEST_KINDS, W as FEED_SCHEDULES } from "../../itemId-4P9S_ehz.js";
|
|
4
4
|
import { t as mergeIntoExisting } from "../../project-B0j_Vf_Q.js";
|
|
5
|
-
import {
|
|
6
|
-
import { F as buildCollectionActionSeedPrompt, I as promptPathsFor, z as readSkillTemplate } from "../../server-
|
|
5
|
+
import { W as resolveDataDir, _t as createForwardingLogger, d as storeFor, k as listItems, n as discoverCollections, q as safeSlugName, vt as createHostSlot } from "../../discovery-BY-nMCuh.js";
|
|
6
|
+
import { F as buildCollectionActionSeedPrompt, I as promptPathsFor, z as readSkillTemplate } from "../../server-DyYwfNB6.js";
|
|
7
7
|
import { FEEDS_DIR, feedDir, feedStatePath, feedsRoot, ingestStateDir, ingestStatePath } from "../paths.js";
|
|
8
|
-
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../../ingestTypes-
|
|
8
|
+
import { n as DEFAULT_FEED_MAX_ITEMS, r as isFeedSchedule, t as AGENT_INGEST_KIND } from "../../ingestTypes-GkG7bJdB.js";
|
|
9
9
|
import { d as publish, n as clear } from "../../notifier-DhnwR82U.js";
|
|
10
10
|
import path from "node:path";
|
|
11
11
|
import { createHash } from "node:crypto";
|
package/dist/files/atomic.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ export interface WriteAtomicOptions {
|
|
|
17
17
|
* it to force a write failure). */
|
|
18
18
|
uniqueTmp?: boolean;
|
|
19
19
|
}
|
|
20
|
+
/** The retry budgets, exported so a test can assert what they cost rather than
|
|
21
|
+
* hard-coding a second copy of the numbers. */
|
|
22
|
+
export declare const RENAME_RETRY_BUDGET_MS: number;
|
|
23
|
+
export declare const RENAME_RETRY_BUDGET_SYNC_MS: number;
|
|
20
24
|
export declare function isTransientRenameError(err: unknown, isWindows?: boolean): boolean;
|
|
21
25
|
export interface RenameRetryDeps {
|
|
22
26
|
rename: (fromPath: string, toPath: string) => Promise<void>;
|
package/dist/files/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../rolldown-runtime-VH7oDXx4.cjs");
|
|
3
3
|
const require_artifacts_paths = require("../artifacts/paths.cjs");
|
|
4
|
-
const require_root = require("../root-
|
|
4
|
+
const require_root = require("../root-BvwBUcol.cjs");
|
|
5
5
|
const require_relPath = require("../relPath-CTAjGdCL.cjs");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_path = require("node:path");
|
package/dist/files/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { classifyFilePath } from "../artifacts/paths.js";
|
|
2
|
-
import { n as writeFileAtomic, r as writeFileAtomicSync, t as canonicalRoot } from "../root-
|
|
2
|
+
import { n as writeFileAtomic, r as writeFileAtomicSync, t as canonicalRoot } from "../root-BcS4-Kge.js";
|
|
3
3
|
import { n as toPosixRelPath, t as joinPosixRelPath } from "../relPath-DW8MC8VO.js";
|
|
4
4
|
import { realpathSync } from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_paths = require("../paths-
|
|
2
|
+
const require_paths = require("../paths-C8-jxR0s.cjs");
|
|
3
3
|
let node_fs_promises = require("node:fs/promises");
|
|
4
4
|
//#region src/global-config/schema.ts
|
|
5
5
|
/** A user-supplied regular expression source is compiled and then run against
|
package/dist/google/index.cjs
CHANGED
|
@@ -2,12 +2,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_rolldown_runtime = require("../rolldown-runtime-VH7oDXx4.cjs");
|
|
3
3
|
const require_dist = require("../dist-CsgSfWwR.cjs");
|
|
4
4
|
const require_text = require("../text-CaAh9ZSO.cjs");
|
|
5
|
-
const require_root = require("../root-
|
|
5
|
+
const require_root = require("../root-BvwBUcol.cjs");
|
|
6
6
|
const require_utils_fetch = require("../utils/fetch.cjs");
|
|
7
|
-
const require_itemId = require("../itemId-
|
|
7
|
+
const require_itemId = require("../itemId-CGT2J7YK.cjs");
|
|
8
8
|
const require_project = require("../project-C1ep9pvo.cjs");
|
|
9
|
-
const require_discovery = require("../discovery-
|
|
10
|
-
const require_paths = require("../paths-
|
|
9
|
+
const require_discovery = require("../discovery-2TvulIz8.cjs");
|
|
10
|
+
const require_paths = require("../paths-C8-jxR0s.cjs");
|
|
11
11
|
let node_fs = require("node:fs");
|
|
12
12
|
let node_path = require("node:path");
|
|
13
13
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
package/dist/google/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { i as hasStringProp, t as errorMessage } from "../dist-D8zokgGo.js";
|
|
2
2
|
import { t as truncate } from "../text-CjDbP2O1.js";
|
|
3
|
-
import { n as writeFileAtomic } from "../root-
|
|
3
|
+
import { n as writeFileAtomic } from "../root-BcS4-Kge.js";
|
|
4
4
|
import { fetchWithTimeout } from "../utils/fetch.js";
|
|
5
|
-
import { d as parseIsoDate, f as parseIsoDateTime } from "../itemId-
|
|
5
|
+
import { d as parseIsoDate, f as parseIsoDateTime } from "../itemId-4P9S_ehz.js";
|
|
6
6
|
import { t as mergeIntoExisting } from "../project-B0j_Vf_Q.js";
|
|
7
|
-
import { _t as
|
|
7
|
+
import { _t as createForwardingLogger, d as storeFor, n as discoverCollections, rt as getWorkspaceRoot, vt as createHostSlot } from "../discovery-BY-nMCuh.js";
|
|
8
8
|
import { t as mulmoConfigDir } from "../paths-CkJxNZ7T.js";
|
|
9
9
|
import { promises } from "node:fs";
|
|
10
10
|
import path, { join } from "node:path";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//#region src/collection/core/iconGlyph.ts
|
|
2
|
+
/** Every one of the 3896 names in `material-symbols/index.d.ts` matches this
|
|
3
|
+
* (verified against the shipped list; the charset there is exactly
|
|
4
|
+
* `[0-9_a-z]`). Note the digits — `123`, `10k`, `3d_rotation` are real icon
|
|
5
|
+
* names, so a letters-only pattern rejects valid ones.
|
|
6
|
+
*
|
|
7
|
+
* This says "shaped like a name", NOT "is a name the font carries": a typo
|
|
8
|
+
* such as `not_a_glyph` passes and still fails to resolve. Bounding what any
|
|
9
|
+
* value can PAINT is the renderer's job — cutting to one grapheme (below)
|
|
10
|
+
* bounds the character count, not the rendered width, so both branches are
|
|
11
|
+
* additionally capped in `plugin-vue/IconGlyph.ts`. */
|
|
12
|
+
var MATERIAL_SYMBOL_NAME_RE = /^[a-z0-9_]+$/;
|
|
13
|
+
/** Drawn when neither the value nor the surface's own fallback says anything.
|
|
14
|
+
* Without it a blank `fallback` resolves to an EMPTY glyph and the surface
|
|
15
|
+
* renders a hole — this function promises a drawable result for every input,
|
|
16
|
+
* so the promise needs a floor. */
|
|
17
|
+
var DEFAULT_ICON = "dataset";
|
|
18
|
+
/** The first grapheme CLUSTER of `text`.
|
|
19
|
+
*
|
|
20
|
+
* Splitting by code point instead would drop the variation selector from
|
|
21
|
+
* `"🎙️"` and leave `"🎙"`, which renders as a monochrome text glyph rather
|
|
22
|
+
* than the colour emoji — and would cut a ZWJ sequence or a flag into a
|
|
23
|
+
* meaningless fragment. `Intl.Segmenter` is guarded because it is the one
|
|
24
|
+
* piece here that an old runtime may not carry. */
|
|
25
|
+
function firstGrapheme(text) {
|
|
26
|
+
try {
|
|
27
|
+
const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
28
|
+
for (const { segment } of segmenter.segment(text)) return segment;
|
|
29
|
+
return text;
|
|
30
|
+
} catch {
|
|
31
|
+
return [...text][0] ?? text;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Classify a schema-authored icon value.
|
|
35
|
+
*
|
|
36
|
+
* `raw` empty / blank / absent falls back to `fallback` (the per-surface
|
|
37
|
+
* default such as `"dataset"`), and a blank `fallback` in turn to
|
|
38
|
+
* {@link DEFAULT_ICON}. Both are classified by the same rule — so a caller
|
|
39
|
+
* can never smuggle an unrenderable default past the guard, and the result
|
|
40
|
+
* is always something drawable.
|
|
41
|
+
*
|
|
42
|
+
* A non-name value is cut to ONE grapheme. That bounds the character count,
|
|
43
|
+
* not the rendered width — see the containment note in
|
|
44
|
+
* `plugin-vue/IconGlyph.ts` for the other half. */
|
|
45
|
+
function resolveIconGlyph(raw, fallback) {
|
|
46
|
+
const value = (raw ?? "").trim() || fallback.trim() || "dataset";
|
|
47
|
+
if (MATERIAL_SYMBOL_NAME_RE.test(value)) return {
|
|
48
|
+
kind: "symbol",
|
|
49
|
+
name: value
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
kind: "glyph",
|
|
53
|
+
text: firstGrapheme(value)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { resolveIconGlyph as n, DEFAULT_ICON as t };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=iconGlyph-D8JeNg7R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconGlyph-D8JeNg7R.js","names":[],"sources":["../src/collection/core/iconGlyph.ts"],"sourcesContent":["// How a schema-authored `icon` value should be drawn.\n//\n// `CollectionSchema.icon` / `FeedSummary.icon` / `Shortcut.icon` are free\n// strings (`z.string().trim().min(1)` — no format constraint), but the\n// Material Symbols font resolves an icon from a LIGATURE: a value the font\n// has no ligature for is laid out as ordinary text, which overflows a fixed\n// icon box and paints over its neighbours (#2986). So the value has to be\n// classified before it reaches the font, not after.\n//\n// Classifying it also turns emoji from \"happens to work\" into a supported\n// way to tell shortcuts apart without adding a text label (#2960).\n\n/** Every one of the 3896 names in `material-symbols/index.d.ts` matches this\n * (verified against the shipped list; the charset there is exactly\n * `[0-9_a-z]`). Note the digits — `123`, `10k`, `3d_rotation` are real icon\n * names, so a letters-only pattern rejects valid ones.\n *\n * This says \"shaped like a name\", NOT \"is a name the font carries\": a typo\n * such as `not_a_glyph` passes and still fails to resolve. Bounding what any\n * value can PAINT is the renderer's job — cutting to one grapheme (below)\n * bounds the character count, not the rendered width, so both branches are\n * additionally capped in `plugin-vue/IconGlyph.ts`. */\nconst MATERIAL_SYMBOL_NAME_RE = /^[a-z0-9_]+$/;\n\n/** A resolved icon value: either a ligature name for the icon font, or a\n * literal glyph (emoji, a single letter) drawn as plain text. */\nexport type IconGlyph = { kind: \"symbol\"; name: string } | { kind: \"glyph\"; text: string };\n\n/** Drawn when neither the value nor the surface's own fallback says anything.\n * Without it a blank `fallback` resolves to an EMPTY glyph and the surface\n * renders a hole — this function promises a drawable result for every input,\n * so the promise needs a floor. */\nexport const DEFAULT_ICON = \"dataset\";\n\n/** The first grapheme CLUSTER of `text`.\n *\n * Splitting by code point instead would drop the variation selector from\n * `\"🎙️\"` and leave `\"🎙\"`, which renders as a monochrome text glyph rather\n * than the colour emoji — and would cut a ZWJ sequence or a flag into a\n * meaningless fragment. `Intl.Segmenter` is guarded because it is the one\n * piece here that an old runtime may not carry. */\nfunction firstGrapheme(text: string): string {\n try {\n const segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n for (const { segment } of segmenter.segment(text)) return segment;\n return text;\n } catch {\n return [...text][0] ?? text;\n }\n}\n\n/** Classify a schema-authored icon value.\n *\n * `raw` empty / blank / absent falls back to `fallback` (the per-surface\n * default such as `\"dataset\"`), and a blank `fallback` in turn to\n * {@link DEFAULT_ICON}. Both are classified by the same rule — so a caller\n * can never smuggle an unrenderable default past the guard, and the result\n * is always something drawable.\n *\n * A non-name value is cut to ONE grapheme. That bounds the character count,\n * not the rendered width — see the containment note in\n * `plugin-vue/IconGlyph.ts` for the other half. */\nexport function resolveIconGlyph(raw: string | undefined, fallback: string): IconGlyph {\n const value = (raw ?? \"\").trim() || fallback.trim() || DEFAULT_ICON;\n if (MATERIAL_SYMBOL_NAME_RE.test(value)) return { kind: \"symbol\", name: value };\n return { kind: \"glyph\", text: firstGrapheme(value) };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAM,0BAA0B;;;;;AAUhC,IAAa,eAAe;;;;;;;;AAS5B,SAAS,cAAc,MAAsB;CAC3C,IAAI;EACF,MAAM,YAAY,IAAI,KAAK,UAAU,KAAA,GAAW,EAAE,aAAa,WAAW,CAAC;EAC3E,KAAK,MAAM,EAAE,aAAa,UAAU,QAAQ,IAAI,GAAG,OAAO;EAC1D,OAAO;CACT,QAAQ;EACN,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;CACzB;AACF;;;;;;;;;;;;AAaA,SAAgB,iBAAiB,KAAyB,UAA6B;CACrF,MAAM,SAAS,OAAO,GAAA,CAAI,KAAK,KAAK,SAAS,KAAK,KAAA;CAClD,IAAI,wBAAwB,KAAK,KAAK,GAAG,OAAO;EAAE,MAAM;EAAU,MAAM;CAAM;CAC9E,OAAO;EAAE,MAAM;EAAS,MAAM,cAAc,KAAK;CAAE;AACrD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
//#region src/collection/core/iconGlyph.ts
|
|
2
|
+
/** Every one of the 3896 names in `material-symbols/index.d.ts` matches this
|
|
3
|
+
* (verified against the shipped list; the charset there is exactly
|
|
4
|
+
* `[0-9_a-z]`). Note the digits — `123`, `10k`, `3d_rotation` are real icon
|
|
5
|
+
* names, so a letters-only pattern rejects valid ones.
|
|
6
|
+
*
|
|
7
|
+
* This says "shaped like a name", NOT "is a name the font carries": a typo
|
|
8
|
+
* such as `not_a_glyph` passes and still fails to resolve. Bounding what any
|
|
9
|
+
* value can PAINT is the renderer's job — cutting to one grapheme (below)
|
|
10
|
+
* bounds the character count, not the rendered width, so both branches are
|
|
11
|
+
* additionally capped in `plugin-vue/IconGlyph.ts`. */
|
|
12
|
+
var MATERIAL_SYMBOL_NAME_RE = /^[a-z0-9_]+$/;
|
|
13
|
+
/** Drawn when neither the value nor the surface's own fallback says anything.
|
|
14
|
+
* Without it a blank `fallback` resolves to an EMPTY glyph and the surface
|
|
15
|
+
* renders a hole — this function promises a drawable result for every input,
|
|
16
|
+
* so the promise needs a floor. */
|
|
17
|
+
var DEFAULT_ICON = "dataset";
|
|
18
|
+
/** The first grapheme CLUSTER of `text`.
|
|
19
|
+
*
|
|
20
|
+
* Splitting by code point instead would drop the variation selector from
|
|
21
|
+
* `"🎙️"` and leave `"🎙"`, which renders as a monochrome text glyph rather
|
|
22
|
+
* than the colour emoji — and would cut a ZWJ sequence or a flag into a
|
|
23
|
+
* meaningless fragment. `Intl.Segmenter` is guarded because it is the one
|
|
24
|
+
* piece here that an old runtime may not carry. */
|
|
25
|
+
function firstGrapheme(text) {
|
|
26
|
+
try {
|
|
27
|
+
const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
28
|
+
for (const { segment } of segmenter.segment(text)) return segment;
|
|
29
|
+
return text;
|
|
30
|
+
} catch {
|
|
31
|
+
return [...text][0] ?? text;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Classify a schema-authored icon value.
|
|
35
|
+
*
|
|
36
|
+
* `raw` empty / blank / absent falls back to `fallback` (the per-surface
|
|
37
|
+
* default such as `"dataset"`), and a blank `fallback` in turn to
|
|
38
|
+
* {@link DEFAULT_ICON}. Both are classified by the same rule — so a caller
|
|
39
|
+
* can never smuggle an unrenderable default past the guard, and the result
|
|
40
|
+
* is always something drawable.
|
|
41
|
+
*
|
|
42
|
+
* A non-name value is cut to ONE grapheme. That bounds the character count,
|
|
43
|
+
* not the rendered width — see the containment note in
|
|
44
|
+
* `plugin-vue/IconGlyph.ts` for the other half. */
|
|
45
|
+
function resolveIconGlyph(raw, fallback) {
|
|
46
|
+
const value = (raw ?? "").trim() || fallback.trim() || "dataset";
|
|
47
|
+
if (MATERIAL_SYMBOL_NAME_RE.test(value)) return {
|
|
48
|
+
kind: "symbol",
|
|
49
|
+
name: value
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
kind: "glyph",
|
|
53
|
+
text: firstGrapheme(value)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
Object.defineProperty(exports, "DEFAULT_ICON", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
get: function() {
|
|
60
|
+
return DEFAULT_ICON;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports, "resolveIconGlyph", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
get: function() {
|
|
66
|
+
return resolveIconGlyph;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=iconGlyph-fSBp6k4J.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconGlyph-fSBp6k4J.cjs","names":[],"sources":["../src/collection/core/iconGlyph.ts"],"sourcesContent":["// How a schema-authored `icon` value should be drawn.\n//\n// `CollectionSchema.icon` / `FeedSummary.icon` / `Shortcut.icon` are free\n// strings (`z.string().trim().min(1)` — no format constraint), but the\n// Material Symbols font resolves an icon from a LIGATURE: a value the font\n// has no ligature for is laid out as ordinary text, which overflows a fixed\n// icon box and paints over its neighbours (#2986). So the value has to be\n// classified before it reaches the font, not after.\n//\n// Classifying it also turns emoji from \"happens to work\" into a supported\n// way to tell shortcuts apart without adding a text label (#2960).\n\n/** Every one of the 3896 names in `material-symbols/index.d.ts` matches this\n * (verified against the shipped list; the charset there is exactly\n * `[0-9_a-z]`). Note the digits — `123`, `10k`, `3d_rotation` are real icon\n * names, so a letters-only pattern rejects valid ones.\n *\n * This says \"shaped like a name\", NOT \"is a name the font carries\": a typo\n * such as `not_a_glyph` passes and still fails to resolve. Bounding what any\n * value can PAINT is the renderer's job — cutting to one grapheme (below)\n * bounds the character count, not the rendered width, so both branches are\n * additionally capped in `plugin-vue/IconGlyph.ts`. */\nconst MATERIAL_SYMBOL_NAME_RE = /^[a-z0-9_]+$/;\n\n/** A resolved icon value: either a ligature name for the icon font, or a\n * literal glyph (emoji, a single letter) drawn as plain text. */\nexport type IconGlyph = { kind: \"symbol\"; name: string } | { kind: \"glyph\"; text: string };\n\n/** Drawn when neither the value nor the surface's own fallback says anything.\n * Without it a blank `fallback` resolves to an EMPTY glyph and the surface\n * renders a hole — this function promises a drawable result for every input,\n * so the promise needs a floor. */\nexport const DEFAULT_ICON = \"dataset\";\n\n/** The first grapheme CLUSTER of `text`.\n *\n * Splitting by code point instead would drop the variation selector from\n * `\"🎙️\"` and leave `\"🎙\"`, which renders as a monochrome text glyph rather\n * than the colour emoji — and would cut a ZWJ sequence or a flag into a\n * meaningless fragment. `Intl.Segmenter` is guarded because it is the one\n * piece here that an old runtime may not carry. */\nfunction firstGrapheme(text: string): string {\n try {\n const segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n for (const { segment } of segmenter.segment(text)) return segment;\n return text;\n } catch {\n return [...text][0] ?? text;\n }\n}\n\n/** Classify a schema-authored icon value.\n *\n * `raw` empty / blank / absent falls back to `fallback` (the per-surface\n * default such as `\"dataset\"`), and a blank `fallback` in turn to\n * {@link DEFAULT_ICON}. Both are classified by the same rule — so a caller\n * can never smuggle an unrenderable default past the guard, and the result\n * is always something drawable.\n *\n * A non-name value is cut to ONE grapheme. That bounds the character count,\n * not the rendered width — see the containment note in\n * `plugin-vue/IconGlyph.ts` for the other half. */\nexport function resolveIconGlyph(raw: string | undefined, fallback: string): IconGlyph {\n const value = (raw ?? \"\").trim() || fallback.trim() || DEFAULT_ICON;\n if (MATERIAL_SYMBOL_NAME_RE.test(value)) return { kind: \"symbol\", name: value };\n return { kind: \"glyph\", text: firstGrapheme(value) };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAM,0BAA0B;;;;;AAUhC,IAAa,eAAe;;;;;;;;AAS5B,SAAS,cAAc,MAAsB;CAC3C,IAAI;EACF,MAAM,YAAY,IAAI,KAAK,UAAU,KAAA,GAAW,EAAE,aAAa,WAAW,CAAC;EAC3E,KAAK,MAAM,EAAE,aAAa,UAAU,QAAQ,IAAI,GAAG,OAAO;EAC1D,OAAO;CACT,QAAQ;EACN,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;CACzB;AACF;;;;;;;;;;;;AAaA,SAAgB,iBAAiB,KAAyB,UAA6B;CACrF,MAAM,SAAS,OAAO,GAAA,CAAI,KAAK,KAAK,SAAS,KAAK,KAAA;CAClD,IAAI,wBAAwB,KAAK,KAAK,GAAG,OAAO;EAAE,MAAM;EAAU,MAAM;CAAM;CAC9E,OAAO;EAAE,MAAM;EAAS,MAAM,cAAc,KAAK;CAAE;AACrD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_itemId = require("./itemId-
|
|
1
|
+
const require_itemId = require("./itemId-CGT2J7YK.cjs");
|
|
2
2
|
require("./collection/index.cjs");
|
|
3
3
|
//#region src/feeds/ingestTypes.ts
|
|
4
4
|
var AGENT_INGEST_KIND = "agent";
|
|
@@ -29,4 +29,4 @@ Object.defineProperty(exports, "isFeedSchedule", {
|
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
//# sourceMappingURL=ingestTypes-
|
|
32
|
+
//# sourceMappingURL=ingestTypes-DsVH9BYy.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestTypes-
|
|
1
|
+
{"version":3,"file":"ingestTypes-DsVH9BYy.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,eAAA,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 { W as FEED_SCHEDULES } from "./itemId-4P9S_ehz.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-GkG7bJdB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestTypes-
|
|
1
|
+
{"version":3,"file":"ingestTypes-GkG7bJdB.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"}
|
|
@@ -432,6 +432,52 @@ function encodeRecordTimes(record, previous, toStored) {
|
|
|
432
432
|
return changed ? out : record;
|
|
433
433
|
}
|
|
434
434
|
//#endregion
|
|
435
|
+
//#region src/collection/core/accentColor.ts
|
|
436
|
+
/** The colours a schema may name, ordered around the hue circle.
|
|
437
|
+
*
|
|
438
|
+
* Deliberately EXCLUDES the warm band (red / orange / amber): those are the
|
|
439
|
+
* notification severities (`ENUM_ALERT` red, `ENUM_NUDGE` amber in
|
|
440
|
+
* `enumColors.ts`) and the launcher's own session badges, so an accent can
|
|
441
|
+
* never make a shortcut read as "something needs attention".
|
|
442
|
+
*
|
|
443
|
+
* Seven rather than eight: rendering all eight candidates on one identical
|
|
444
|
+
* glyph put `cyan` squarely between `sky` and `teal`, so a pill could hold
|
|
445
|
+
* three shortcuts in the same blue-green band. A colour that cannot be told
|
|
446
|
+
* from its neighbour identifies nothing, which is the entire job here — the
|
|
447
|
+
* set is sized for separation, not for count. */
|
|
448
|
+
var ACCENT_COLORS = [
|
|
449
|
+
"violet",
|
|
450
|
+
"indigo",
|
|
451
|
+
"sky",
|
|
452
|
+
"teal",
|
|
453
|
+
"emerald",
|
|
454
|
+
"lime",
|
|
455
|
+
"fuchsia"
|
|
456
|
+
];
|
|
457
|
+
var CHIP_CLASSES = {
|
|
458
|
+
violet: "bg-violet-50 text-violet-700",
|
|
459
|
+
indigo: "bg-indigo-50 text-indigo-700",
|
|
460
|
+
sky: "bg-sky-50 text-sky-700",
|
|
461
|
+
teal: "bg-teal-50 text-teal-700",
|
|
462
|
+
emerald: "bg-emerald-50 text-emerald-700",
|
|
463
|
+
lime: "bg-lime-50 text-lime-700",
|
|
464
|
+
fuchsia: "bg-fuchsia-50 text-fuchsia-700"
|
|
465
|
+
};
|
|
466
|
+
/** Narrowing guard: is `value` one of the colours a schema may name? */
|
|
467
|
+
function isAccentColor(value) {
|
|
468
|
+
return typeof value === "string" && Object.hasOwn(CHIP_CLASSES, value);
|
|
469
|
+
}
|
|
470
|
+
/** The chip classes for `color`, or `null` when there is no accent to draw —
|
|
471
|
+
* absent, blank, or a name this palette does not carry.
|
|
472
|
+
*
|
|
473
|
+
* Unknown names fail soft rather than throwing, matching how `icon` is
|
|
474
|
+
* handled: a schema is user/LLM-authored, and a typo should cost the colour,
|
|
475
|
+
* not the surface. The caller falls back to its own unstyled treatment. */
|
|
476
|
+
function accentChipClasses(color) {
|
|
477
|
+
if (!isAccentColor(color)) return null;
|
|
478
|
+
return CHIP_CLASSES[color];
|
|
479
|
+
}
|
|
480
|
+
//#endregion
|
|
435
481
|
//#region src/collection/core/calendarGrid.ts
|
|
436
482
|
var MS_PER_DAY = 864e5;
|
|
437
483
|
var ISO_DATE_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
@@ -786,6 +832,6 @@ function newItemId() {
|
|
|
786
832
|
* reachable under an old name would keep shipping it. */
|
|
787
833
|
var shortHexId = newItemId;
|
|
788
834
|
//#endregion
|
|
789
|
-
export {
|
|
835
|
+
export { isSharedCollectionKey as A, isSafeSlug as B, encodeServerTime as C, collectionKeyId as D, serverTimeOf as E, sharedCollectionKey as F, INGEST_KINDS as G, AGENT_INGEST_KIND as H, SAFE_RECORD_ID_PATTERN as I, isReadOnlySchema as J, embedTargetId as K, SAFE_SLUG_PATTERN as L, localCollectionKeyOf as M, parseCollectionKeyId as N, collectionKeyName as O, sameCollectionKey as P, generateUniqueId as R, encodeRecordTimes as S, serverTimeMillis as T, COMPUTED_TYPES as U, nextUniqueItemId as V, FEED_SCHEDULES as W, fieldText as X, storageKindFor as Y, fieldTextOrNull as Z, ACCENT_COLORS as _, bucketRecords as a, decodeRecordTimes as b, dateOf as c, parseIsoDate as d, parseIsoDateTime as f, ymdKey as g, spanCoversDay as h, assignLanes as i, isValidCollectionName as j, isLocalCollectionKey as k, daySlice as l, recordSpan as m, shortHexId as n, buildMonthGrid as o, parseTimeRange as p, isFieldDrivenEvery as q, MINUTES_PER_DAY as r, compareYmd as s, newItemId as t, monthAnchorDate as u, accentChipClasses as v, isCanonicalServerTime as w, decodeServerTime as x, isAccentColor as y, isSafeRecordId as z };
|
|
790
836
|
|
|
791
|
-
//# sourceMappingURL=itemId-
|
|
837
|
+
//# sourceMappingURL=itemId-4P9S_ehz.js.map
|