@mulmoclaude/core 4.4.2 → 4.5.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 +18 -0
- 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 +5 -4
- package/dist/collection/server/index.js +5 -5
- package/dist/collection/server/paths.d.ts +10 -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/google/index.cjs +3 -3
- 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/plugin-vue/IconGlyph.d.ts +27 -0
- package/dist/plugin-vue/index.cjs +117 -201
- package/dist/plugin-vue/index.cjs.map +1 -1
- package/dist/plugin-vue/index.d.ts +1 -0
- package/dist/plugin-vue/index.js +118 -203
- 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-BvXO49Vj.js → server-BENtFplH.js} +47 -18
- package/dist/{server-BvXO49Vj.js.map → server-BENtFplH.js.map} +1 -1
- package/dist/{server-CF1qllGV.cjs → server-Wz4_ALLl.cjs} +47 -18
- package/dist/{server-CF1qllGV.cjs.map → server-Wz4_ALLl.cjs.map} +1 -1
- package/package.json +8 -8
- 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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
|
|
2
2
|
const require_dist = require("./dist-CsgSfWwR.cjs");
|
|
3
|
-
const require_root = require("./root-
|
|
3
|
+
const require_root = require("./root-BvwBUcol.cjs");
|
|
4
4
|
const require_relPath = require("./relPath-CTAjGdCL.cjs");
|
|
5
|
-
const require_itemId = require("./itemId-
|
|
6
|
-
const require_promptSafety = require("./promptSafety-
|
|
7
|
-
const require_discovery = require("./discovery-
|
|
5
|
+
const require_itemId = require("./itemId-CGT2J7YK.cjs");
|
|
6
|
+
const require_promptSafety = require("./promptSafety-Cv-SoTd4.cjs");
|
|
7
|
+
const require_discovery = require("./discovery-2TvulIz8.cjs");
|
|
8
8
|
const require_feeds_paths = require("./feeds/paths.cjs");
|
|
9
9
|
const require_skill_bridge_index = require("./skill-bridge/index.cjs");
|
|
10
10
|
let node_fs = require("node:fs");
|
|
@@ -1878,24 +1878,53 @@ function openItemsFileRefusal(err, shown) {
|
|
|
1878
1878
|
* descriptor's inode is the one reachable at a contained path. A hardlink
|
|
1879
1879
|
* would satisfy it, but the agent cannot create one across the mount boundary
|
|
1880
1880
|
* — only the workspace is mounted, and a hardlink cannot cross filesystems. */
|
|
1881
|
-
|
|
1882
|
-
|
|
1881
|
+
/** What the filesystem says about the path the descriptor was opened from:
|
|
1882
|
+
* the link itself (is it a symlink?), the resolved target, the root resolved
|
|
1883
|
+
* BY THE SAME API, and the target's stat.
|
|
1884
|
+
*
|
|
1885
|
+
* Resolving the two sides with different apis is not a style question: on
|
|
1886
|
+
* Windows `realpath` expands an 8.3 short name and `realpathSync` does not, so
|
|
1887
|
+
* a root from `os.tmpdir()` compared against an async-resolved file inside it
|
|
1888
|
+
* read as "outside the workspace" and refused every itemsFile (#2972). */
|
|
1889
|
+
async function resolveOpenedPaths(hostPath, root) {
|
|
1890
|
+
const link = await (0, node_fs_promises.lstat)(hostPath);
|
|
1891
|
+
const real = await (0, node_fs_promises.realpath)(hostPath);
|
|
1892
|
+
return {
|
|
1893
|
+
link,
|
|
1894
|
+
real,
|
|
1895
|
+
rootReal: await (0, node_fs_promises.realpath)(root),
|
|
1896
|
+
atPath: await (0, node_fs_promises.stat)(real)
|
|
1897
|
+
};
|
|
1898
|
+
}
|
|
1899
|
+
/** Judge the opened descriptor against the paths it claims to be. Returns the
|
|
1900
|
+
* refusal text, or null when the descriptor is the contained file it should
|
|
1901
|
+
* be. `opened` is the descriptor's own stat, so the identity check compares
|
|
1902
|
+
* what was OPENED with what is reachable at the path. */
|
|
1903
|
+
function openedFileProblem(paths, opened, shown) {
|
|
1904
|
+
if (paths.link.isSymbolicLink()) return symlinkRefusal(shown);
|
|
1905
|
+
if (!require_discovery.isUnderRealRoot(paths.real, paths.rootReal)) return outsideWorkspaceRefusal(shown);
|
|
1906
|
+
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.`;
|
|
1907
|
+
return null;
|
|
1908
|
+
}
|
|
1909
|
+
/** The descriptor's own shape: a regular file, within the byte cap. Returns the
|
|
1910
|
+
* refusal text, or null. Checked before any path work — a fifo or an 8 MiB
|
|
1911
|
+
* blob is refused without paying for a realpath. */
|
|
1912
|
+
function openedShapeProblem(opened, shown) {
|
|
1883
1913
|
if (!opened.isFile()) return `manageCollection: \`itemsFile\` '${shown}' is not a regular file. It must be a JSON file holding an array of record objects.`;
|
|
1884
1914
|
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.`;
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1915
|
+
return null;
|
|
1916
|
+
}
|
|
1917
|
+
async function verifyOpenedItemsFile(handle, hostPath, root, shown) {
|
|
1918
|
+
const opened = await handle.stat();
|
|
1919
|
+
const shapeProblem = openedShapeProblem(opened, shown);
|
|
1920
|
+
if (shapeProblem !== null) return shapeProblem;
|
|
1921
|
+
let paths;
|
|
1888
1922
|
try {
|
|
1889
|
-
|
|
1890
|
-
real = await (0, node_fs_promises.realpath)(hostPath);
|
|
1891
|
-
atPath = await (0, node_fs_promises.stat)(real);
|
|
1923
|
+
paths = await resolveOpenedPaths(hostPath, root);
|
|
1892
1924
|
} catch (err) {
|
|
1893
1925
|
return openItemsFileRefusal(err, shown);
|
|
1894
1926
|
}
|
|
1895
|
-
|
|
1896
|
-
if (!require_discovery.isContainedInRoot(real, root)) return outsideWorkspaceRefusal(shown);
|
|
1897
|
-
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.`;
|
|
1898
|
-
return { size: opened.size };
|
|
1927
|
+
return openedFileProblem(paths, opened, shown) ?? { size: opened.size };
|
|
1899
1928
|
}
|
|
1900
1929
|
/** Open the file ONCE, then prove that descriptor is the contained file.
|
|
1901
1930
|
* `O_NOFOLLOW` refuses a symlink outright rather than resolving it, and
|
|
@@ -2335,7 +2364,7 @@ var MANAGE_COLLECTION_DEFINITION = {
|
|
|
2335
2364
|
},
|
|
2336
2365
|
schema: {
|
|
2337
2366
|
type: "object",
|
|
2338
|
-
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."
|
|
2367
|
+
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."
|
|
2339
2368
|
},
|
|
2340
2369
|
topic: {
|
|
2341
2370
|
type: "string",
|
|
@@ -2593,4 +2622,4 @@ Object.defineProperty(exports, "validateRecordObject", {
|
|
|
2593
2622
|
}
|
|
2594
2623
|
});
|
|
2595
2624
|
|
|
2596
|
-
//# sourceMappingURL=server-
|
|
2625
|
+
//# sourceMappingURL=server-Wz4_ALLl.cjs.map
|