@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { a as isErrorWithCode, c as isStringArray, l as isUnknownArray, s as isRecord, t as errorMessage } from "./dist-D8zokgGo.js";
|
|
2
|
-
import { n as writeFileAtomic } from "./root-
|
|
2
|
+
import { n as writeFileAtomic } from "./root-BcS4-Kge.js";
|
|
3
3
|
import { n as toPosixRelPath } from "./relPath-DW8MC8VO.js";
|
|
4
|
-
import {
|
|
5
|
-
import { C as actionVisible, O as firstUnknownDefault, _ as uniqueRefTargets, b as projectBacklinkRow, c as selectDynamicRecord, f as itemIsDone, g as uniqueEmbedTargets, h as uniqueBacklinkSources, i as ownProp, k as schemaDefaults, n as deriveAll, o as firstDateField, s as resolveIcon, t as defangForPrompt, v as backlinkRows, x as rollupValue, y as coerceNumeric } from "./promptSafety-
|
|
6
|
-
import { B as SCHEMA_FILE$1, C as CollectionQueryZ,
|
|
4
|
+
import { K as embedTargetId, U as COMPUTED_TYPES, X as fieldText, Y as storageKindFor, Z as fieldTextOrNull, d as parseIsoDate, f as parseIsoDateTime, q as isFieldDrivenEvery, w as isCanonicalServerTime } from "./itemId-4P9S_ehz.js";
|
|
5
|
+
import { C as actionVisible, O as firstUnknownDefault, _ as uniqueRefTargets, b as projectBacklinkRow, c as selectDynamicRecord, f as itemIsDone, g as uniqueEmbedTargets, h as uniqueBacklinkSources, i as ownProp, k as schemaDefaults, n as deriveAll, o as firstDateField, s as resolveIcon, t as defangForPrompt, v as backlinkRows, x as rollupValue, y as coerceNumeric } from "./promptSafety-Bte62OvU.js";
|
|
6
|
+
import { B as SCHEMA_FILE$1, C as CollectionQueryZ, G as resolveTemplatePath, H as isUnderRealRoot, O as isRegularFile, S as compileJsonlQuery, V as isContainedInRoot, W as resolveDataDir, Y as isBackendUnavailable, Z as archiveDir, at as isPresetSlug$1, b as queryCsv, c as resolveMutateSet, d as storeFor, f as checkpointSqliteDatabase, gt as stagingSkillDir, i as resolvePrimaryField, j as resolveCreateItemId, m as cacheDir, n as discoverCollections, q as safeSlugName, r as loadCollection, rt as getWorkspaceRoot, s as CollectionSchemaZ, st as log, u as readOnlyRefusal, y as normalizeCsvValue } from "./discovery-BY-nMCuh.js";
|
|
7
7
|
import { ingestStatePath } from "./feeds/paths.js";
|
|
8
8
|
import { mirrorSkillWrite } from "./skill-bridge/index.js";
|
|
9
9
|
import { constants } from "node:fs";
|
|
@@ -31,27 +31,78 @@ import { z } from "zod";
|
|
|
31
31
|
async function readCustomViewHtml(collection, viewFile, opts = {}) {
|
|
32
32
|
return readSourceAwareFile(collection, viewFile, opts);
|
|
33
33
|
}
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
/** `<staging>/<slug>` when THAT slug is actually staged there, else null.
|
|
35
|
+
*
|
|
36
|
+
* `stagingSkillDir` only says whether the ROOT has a staging tree, and then
|
|
37
|
+
* joins the slug — so on its own it claims every collection in a staged
|
|
38
|
+
* workspace is staged. That is wrong for the two layouts that coexist there:
|
|
39
|
+
* a collection IMPORTED via the discover panel, and one committed directly
|
|
40
|
+
* under `.claude/skills/`, neither of which has a staging copy. A stale
|
|
41
|
+
* `data/skills/<slug>/views/x.html` left beside them then SHADOWED the real
|
|
42
|
+
* view on every read (#3031).
|
|
43
|
+
*
|
|
44
|
+
* The evidence is the slug's own `schema.json`, because that is what the
|
|
45
|
+
* authoring layout actually produces — `putSchema` writes it, and the delete
|
|
46
|
+
* path below has always keyed on it. It must be a REGULAR FILE — `lstat`, not
|
|
47
|
+
* `stat` — so a symlink standing in for the schema is not evidence.
|
|
48
|
+
*
|
|
49
|
+
* Exported so the DELETE path uses this exact function rather than a second
|
|
50
|
+
* copy of the expression: "reads and deletes agree" is a claim `views.ts` has
|
|
51
|
+
* made in its comments since #1836, and sharing the predicate is what makes
|
|
52
|
+
* it structurally true instead of a convention two files have to remember. */
|
|
53
|
+
async function stagedSkillDir(workspaceRoot, safeSlug) {
|
|
54
|
+
const staging = stagingSkillDir(workspaceRoot, safeSlug);
|
|
55
|
+
if (staging === null) return null;
|
|
56
|
+
return await isStagedSchema(path.join(staging, "schema.json")) ? staging : null;
|
|
57
|
+
}
|
|
58
|
+
/** Is the staged `schema.json` there, as a regular file?
|
|
59
|
+
*
|
|
60
|
+
* NOT `isRegularFile` from `io.ts`, which answers `false` for every `lstat`
|
|
61
|
+
* failure. Here "no schema" and "the schema could not be inspected" must not
|
|
62
|
+
* collapse into one answer: the second would quietly downgrade a staged slug
|
|
63
|
+
* to unstaged and serve the OTHER base's copy — the same masking the read loop
|
|
64
|
+
* below refuses, and for the same reason (Sourcery review on #3032). Only the
|
|
65
|
+
* missing-here codes mean "not staged"; anything else propagates. */
|
|
66
|
+
async function isStagedSchema(target) {
|
|
67
|
+
try {
|
|
68
|
+
return (await lstat(target)).isFile();
|
|
69
|
+
} catch (err) {
|
|
70
|
+
if (!isMissingHere(err)) throw err;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** The two codes that mean "not at this path" rather than "this path failed".
|
|
75
|
+
* A permission denial / disk error must propagate — silently treating it as
|
|
76
|
+
* absent masks a real failure as a stale-from-another-base success or a
|
|
77
|
+
* misleading 404 (CodeRabbit review on #1836). */
|
|
78
|
+
function isMissingHere(err) {
|
|
79
|
+
return isErrorWithCode(err) && (err.code === "ENOENT" || err.code === "ENOTDIR");
|
|
80
|
+
}
|
|
81
|
+
/** Read `relPath` from the first base that holds it, or null when none does.
|
|
82
|
+
* Bases are tried in order and each is containment-checked on its own, so the
|
|
83
|
+
* fallback never widens what a single base would have allowed. */
|
|
84
|
+
async function readFromBases(bases, relPath) {
|
|
43
85
|
for (const base of bases) {
|
|
44
86
|
const resolved = resolveTemplatePath(base, relPath);
|
|
45
87
|
if (resolved === null) continue;
|
|
46
88
|
try {
|
|
47
89
|
return await readFile(resolved, "utf-8");
|
|
48
90
|
} catch (err) {
|
|
49
|
-
if (!
|
|
50
|
-
if (err.code !== "ENOENT" && err.code !== "ENOTDIR") throw err;
|
|
91
|
+
if (!isMissingHere(err)) throw err;
|
|
51
92
|
}
|
|
52
93
|
}
|
|
53
94
|
return null;
|
|
54
95
|
}
|
|
96
|
+
/** Internal helper: read a file using the same source-aware base fallback as
|
|
97
|
+
* `readCustomViewHtml`. Used by both `readCustomViewHtml` and
|
|
98
|
+
* `readCustomViewI18n` so the two stay in lockstep. */
|
|
99
|
+
async function readSourceAwareFile(collection, relPath, opts) {
|
|
100
|
+
const safeSlug = safeSlugName(collection.slug);
|
|
101
|
+
if (safeSlug === null) return null;
|
|
102
|
+
const workspaceRoot = opts.workspaceRoot ?? getWorkspaceRoot();
|
|
103
|
+
const staging = collection.source === "project" ? await stagedSkillDir(workspaceRoot, safeSlug) : null;
|
|
104
|
+
return readFromBases(staging === null ? [collection.skillDir] : [staging, collection.skillDir], relPath);
|
|
105
|
+
}
|
|
55
106
|
var I18N_FALLBACK_LOCALE = "en";
|
|
56
107
|
var EMPTY_I18N = {
|
|
57
108
|
locale: "",
|
|
@@ -1265,27 +1316,20 @@ async function deleteCollection(collection, opts = {}) {
|
|
|
1265
1316
|
}
|
|
1266
1317
|
//#endregion
|
|
1267
1318
|
//#region src/collection/server/views.ts
|
|
1268
|
-
async function fileExists(target) {
|
|
1269
|
-
try {
|
|
1270
|
-
await stat(target);
|
|
1271
|
-
return true;
|
|
1272
|
-
} catch (err) {
|
|
1273
|
-
if (!isErrorWithCode(err)) throw err;
|
|
1274
|
-
if (err.code === "ENOENT" || err.code === "ENOTDIR") return false;
|
|
1275
|
-
throw err;
|
|
1276
|
-
}
|
|
1277
|
-
}
|
|
1278
1319
|
/** The authoritative base dir for a collection's schema.json + view HTML.
|
|
1279
1320
|
* For a project collection, prefer the staging tree when its schema.json is
|
|
1280
1321
|
* present (authoring layout); otherwise fall back to the active skill dir
|
|
1281
1322
|
* (imported layout — staging never materialised). For feed / user, it's
|
|
1282
|
-
* always the discovered skillDir.
|
|
1283
|
-
*
|
|
1323
|
+
* always the discovered skillDir.
|
|
1324
|
+
*
|
|
1325
|
+
* Matches `readCustomViewHtml` so reads and deletes agree on both layouts —
|
|
1326
|
+
* through the SAME function now (`stagedSkillDir`), not through two copies of
|
|
1327
|
+
* one expression. The read side had drifted off it and was preferring staging
|
|
1328
|
+
* per root rather than per slug (#3031), which is precisely the drift a shared
|
|
1329
|
+
* predicate makes unrepresentable. */
|
|
1284
1330
|
async function canonicalBase(collection, workspaceRoot, safeSlug) {
|
|
1285
1331
|
if (collection.source !== "project") return collection.skillDir;
|
|
1286
|
-
|
|
1287
|
-
if (staging !== null && await fileExists(path.join(staging, "schema.json"))) return staging;
|
|
1288
|
-
return collection.skillDir;
|
|
1332
|
+
return await stagedSkillDir(workspaceRoot, safeSlug) ?? collection.skillDir;
|
|
1289
1333
|
}
|
|
1290
1334
|
/** Every on-disk schema.json that must reflect the removal. The active
|
|
1291
1335
|
* `<skillDir>/schema.json` is the discovery anchor and is always present.
|
|
@@ -1295,9 +1339,9 @@ async function canonicalBase(collection, workspaceRoot, safeSlug) {
|
|
|
1295
1339
|
async function schemaWriteTargets(collection, workspaceRoot, safeSlug) {
|
|
1296
1340
|
const active = path.join(collection.skillDir, SCHEMA_FILE$1);
|
|
1297
1341
|
if (collection.source !== "project") return [active];
|
|
1298
|
-
const staging =
|
|
1342
|
+
const staging = await stagedSkillDir(workspaceRoot, safeSlug);
|
|
1299
1343
|
const targets = [];
|
|
1300
|
-
if (staging !== null
|
|
1344
|
+
if (staging !== null) targets.push(path.join(staging, SCHEMA_FILE$1));
|
|
1301
1345
|
targets.push(active);
|
|
1302
1346
|
return targets;
|
|
1303
1347
|
}
|
|
@@ -1876,24 +1920,53 @@ function openItemsFileRefusal(err, shown) {
|
|
|
1876
1920
|
* descriptor's inode is the one reachable at a contained path. A hardlink
|
|
1877
1921
|
* would satisfy it, but the agent cannot create one across the mount boundary
|
|
1878
1922
|
* — only the workspace is mounted, and a hardlink cannot cross filesystems. */
|
|
1879
|
-
|
|
1880
|
-
|
|
1923
|
+
/** What the filesystem says about the path the descriptor was opened from:
|
|
1924
|
+
* the link itself (is it a symlink?), the resolved target, the root resolved
|
|
1925
|
+
* BY THE SAME API, and the target's stat.
|
|
1926
|
+
*
|
|
1927
|
+
* Resolving the two sides with different apis is not a style question: on
|
|
1928
|
+
* Windows `realpath` expands an 8.3 short name and `realpathSync` does not, so
|
|
1929
|
+
* a root from `os.tmpdir()` compared against an async-resolved file inside it
|
|
1930
|
+
* read as "outside the workspace" and refused every itemsFile (#2972). */
|
|
1931
|
+
async function resolveOpenedPaths(hostPath, root) {
|
|
1932
|
+
const link = await lstat(hostPath);
|
|
1933
|
+
const real = await realpath(hostPath);
|
|
1934
|
+
return {
|
|
1935
|
+
link,
|
|
1936
|
+
real,
|
|
1937
|
+
rootReal: await realpath(root),
|
|
1938
|
+
atPath: await stat(real)
|
|
1939
|
+
};
|
|
1940
|
+
}
|
|
1941
|
+
/** Judge the opened descriptor against the paths it claims to be. Returns the
|
|
1942
|
+
* refusal text, or null when the descriptor is the contained file it should
|
|
1943
|
+
* be. `opened` is the descriptor's own stat, so the identity check compares
|
|
1944
|
+
* what was OPENED with what is reachable at the path. */
|
|
1945
|
+
function openedFileProblem(paths, opened, shown) {
|
|
1946
|
+
if (paths.link.isSymbolicLink()) return symlinkRefusal(shown);
|
|
1947
|
+
if (!isUnderRealRoot(paths.real, paths.rootReal)) return outsideWorkspaceRefusal(shown);
|
|
1948
|
+
if (paths.atPath.ino !== opened.ino || paths.atPath.dev !== opened.dev) return `manageCollection: \`itemsFile\` '${shown}' changed while it was being opened. Nothing was read; write the file, then call putItems.`;
|
|
1949
|
+
return null;
|
|
1950
|
+
}
|
|
1951
|
+
/** The descriptor's own shape: a regular file, within the byte cap. Returns the
|
|
1952
|
+
* refusal text, or null. Checked before any path work — a fifo or an 8 MiB
|
|
1953
|
+
* blob is refused without paying for a realpath. */
|
|
1954
|
+
function openedShapeProblem(opened, shown) {
|
|
1881
1955
|
if (!opened.isFile()) return `manageCollection: \`itemsFile\` '${shown}' is not a regular file. It must be a JSON file holding an array of record objects.`;
|
|
1882
1956
|
if (opened.size > 8388608) return `manageCollection: \`itemsFile\` '${shown}' is ${opened.size} bytes, over the limit of ${MAX_ITEMS_FILE_BYTES}. Nothing was read; split the rows across several files and call once per file.`;
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1957
|
+
return null;
|
|
1958
|
+
}
|
|
1959
|
+
async function verifyOpenedItemsFile(handle, hostPath, root, shown) {
|
|
1960
|
+
const opened = await handle.stat();
|
|
1961
|
+
const shapeProblem = openedShapeProblem(opened, shown);
|
|
1962
|
+
if (shapeProblem !== null) return shapeProblem;
|
|
1963
|
+
let paths;
|
|
1886
1964
|
try {
|
|
1887
|
-
|
|
1888
|
-
real = await realpath(hostPath);
|
|
1889
|
-
atPath = await stat(real);
|
|
1965
|
+
paths = await resolveOpenedPaths(hostPath, root);
|
|
1890
1966
|
} catch (err) {
|
|
1891
1967
|
return openItemsFileRefusal(err, shown);
|
|
1892
1968
|
}
|
|
1893
|
-
|
|
1894
|
-
if (!isContainedInRoot(real, root)) return outsideWorkspaceRefusal(shown);
|
|
1895
|
-
if (atPath.ino !== opened.ino || atPath.dev !== opened.dev) return `manageCollection: \`itemsFile\` '${shown}' changed while it was being opened. Nothing was read; write the file, then call putItems.`;
|
|
1896
|
-
return { size: opened.size };
|
|
1969
|
+
return openedFileProblem(paths, opened, shown) ?? { size: opened.size };
|
|
1897
1970
|
}
|
|
1898
1971
|
/** Open the file ONCE, then prove that descriptor is the contained file.
|
|
1899
1972
|
* `O_NOFOLLOW` refuses a symlink outright rather than resolving it, and
|
|
@@ -2333,7 +2406,7 @@ var MANAGE_COLLECTION_DEFINITION = {
|
|
|
2333
2406
|
},
|
|
2334
2407
|
schema: {
|
|
2335
2408
|
type: "object",
|
|
2336
|
-
description: "putSchema: the full collection schema object (same shape as schema.json — title, icon, dataPath, primaryKey, fields, …). Call getSchema first for the current one, and schemaDocs for the field DSL."
|
|
2409
|
+
description: "putSchema: the full collection schema object (same shape as schema.json — title, icon, dataPath, primaryKey, fields, …). `icon` is either a Material Symbols name (lowercase letters, digits and underscores only — `podcasts`, `rss_feed`, `3d_rotation`; capitals/spaces/hyphens never match) or a SINGLE emoji. Prefer an emoji when the collection would otherwise share a look-alike glyph with another one — it is in colour and tells them apart in the launcher. `color` is an OPTIONAL accent (violet | indigo | sky | teal | emerald | lime | fuchsia) drawn as a pale chip behind the launcher glyph — another way to separate collections that share a generic icon. Omit it rather than guessing; an unknown name simply draws no accent. Call getSchema first for the current one, and schemaDocs for the field DSL."
|
|
2337
2410
|
},
|
|
2338
2411
|
topic: {
|
|
2339
2412
|
type: "string",
|
|
@@ -2356,6 +2429,6 @@ function makeManageCollectionTool(deps = {}) {
|
|
|
2356
2429
|
};
|
|
2357
2430
|
}
|
|
2358
2431
|
//#endregion
|
|
2359
|
-
export { recordFieldProblem as A, applyMutateAction as C, validateCollectionRecords as D, STORE_UNREADABLE as E, buildCollectionActionSeedPrompt as F, promptPathsFor as I, readCustomViewHtml as L, enrichItems as M, runQueryOverRows as N, validateRecordObject as O, buildActionSeedPrompt as P, readCustomViewI18n as R, schemaRelations as S, MAX_RECORD_ISSUES as T, resolveEvery as _, MAX_UNSELECTIVE_ITEMS as a, computeCollectionIcon as b, deleteCollection as c, computeSuccessor as d, daysInMonth as f, parseCivil as g, maybeSpawnSuccessor as h, MAX_SCHEMA_ISSUES as i, runCollectionQuery as j, compileRecordZ as k, deleteCollectionRefusalMessage as l, isTriggerDue as m, MAX_PUT_ITEMS as n, makeManageCollectionTool as o, formatCivil as p, MAX_PUT_LINT as r, deleteCustomView as s, MAX_ITEMS_FILE_BYTES as t, advanceTriggerDate as u, successorId as v, firstMutateParamProblem as w, buildWorkspaceOntology as x, ONE_SECOND_MS as y, readSkillTemplate as z };
|
|
2432
|
+
export { recordFieldProblem as A, stagedSkillDir as B, applyMutateAction as C, validateCollectionRecords as D, STORE_UNREADABLE as E, buildCollectionActionSeedPrompt as F, promptPathsFor as I, readCustomViewHtml as L, enrichItems as M, runQueryOverRows as N, validateRecordObject as O, buildActionSeedPrompt as P, readCustomViewI18n as R, schemaRelations as S, MAX_RECORD_ISSUES as T, resolveEvery as _, MAX_UNSELECTIVE_ITEMS as a, computeCollectionIcon as b, deleteCollection as c, computeSuccessor as d, daysInMonth as f, parseCivil as g, maybeSpawnSuccessor as h, MAX_SCHEMA_ISSUES as i, runCollectionQuery as j, compileRecordZ as k, deleteCollectionRefusalMessage as l, isTriggerDue as m, MAX_PUT_ITEMS as n, makeManageCollectionTool as o, formatCivil as p, MAX_PUT_LINT as r, deleteCustomView as s, MAX_ITEMS_FILE_BYTES as t, advanceTriggerDate as u, successorId as v, firstMutateParamProblem as w, buildWorkspaceOntology as x, ONE_SECOND_MS as y, readSkillTemplate as z };
|
|
2360
2433
|
|
|
2361
|
-
//# sourceMappingURL=server-
|
|
2434
|
+
//# sourceMappingURL=server-DyYwfNB6.js.map
|