@mulmoclaude/core 4.5.0 → 4.7.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.
@@ -1671,5 +1671,5 @@ export declare const CollectionSchemaZ: z.ZodPreprocess<z.ZodObject<{
1671
1671
  }, z.core.$strip>>;
1672
1672
  fallback: z.ZodOptional<z.ZodString>;
1673
1673
  }, z.core.$strip>>;
1674
- }, z.core.$strip>>;
1674
+ }, z.core.$strip>, unknown>;
1675
1675
  export {};
@@ -6,7 +6,7 @@ const require_relPath = require("../../../relPath-CTAjGdCL.cjs");
6
6
  const require_utils_fetch = require("../../../utils/fetch.cjs");
7
7
  const require_discovery = require("../../../discovery-2TvulIz8.cjs");
8
8
  const require_templatePath = require("../../../templatePath-27vUZowm.cjs");
9
- const require_server = require("../../../server-Wz4_ALLl.cjs");
9
+ const require_server = require("../../../server-DXUt34Rt.cjs");
10
10
  const require_skill_bridge_index = require("../../../skill-bridge/index.cjs");
11
11
  const require_types = require("../../../types-CNqkLT4M.cjs");
12
12
  let node_fs = require("node:fs");
@@ -4,7 +4,7 @@ import { n as toPosixRelPath } from "../../../relPath-DW8MC8VO.js";
4
4
  import { fetchWithTimeout } from "../../../utils/fetch.js";
5
5
  import { K as safeRecordId, et as collectionsRegistriesConfigPath, ht as skillsStagingDir, lt as projectSkillsDir, r as loadCollection, rt as getWorkspaceRoot, s as CollectionSchemaZ, st as log, t as acceptParsedSchema } from "../../../discovery-BY-nMCuh.js";
6
6
  import { t as isSafeActionTemplatePath } from "../../../templatePath-k_WNbL_Q.js";
7
- import { y as ONE_SECOND_MS } from "../../../server-BENtFplH.js";
7
+ import { y as ONE_SECOND_MS } from "../../../server-DyYwfNB6.js";
8
8
  import { claudeSkillDir, dataSkillDir, mirrorSkillWrite } from "../../../skill-bridge/index.js";
9
9
  import { n as parseRegistryIndex, r as isRecord, t as OFFICIAL_REGISTRY_NAME } from "../../../types-BKVZrtyc.js";
10
10
  import { readFileSync } from "node:fs";
@@ -3,7 +3,7 @@ const require_root = require("../../root-BvwBUcol.cjs");
3
3
  const require_itemId = require("../../itemId-CGT2J7YK.cjs");
4
4
  const require_discovery = require("../../discovery-2TvulIz8.cjs");
5
5
  const require_templatePath = require("../../templatePath-27vUZowm.cjs");
6
- const require_server = require("../../server-Wz4_ALLl.cjs");
6
+ const require_server = require("../../server-DXUt34Rt.cjs");
7
7
  exports.APP_MANIFEST_FILE = require_discovery.APP_MANIFEST_FILE;
8
8
  exports.BackendUnavailableError = require_discovery.BackendUnavailableError;
9
9
  exports.COLLECTION_ROOT_REQUIRED = require_discovery.COLLECTION_ROOT_REQUIRED;
@@ -101,6 +101,7 @@ exports.setFirestoreAccessor = require_discovery.setFirestoreAccessor;
101
101
  exports.setSharedCollectionsSupport = require_discovery.setSharedCollectionsSupport;
102
102
  exports.sharedCollectionChangePayload = require_discovery.sharedCollectionChangePayload;
103
103
  exports.sharedItemsPath = require_discovery.sharedItemsPath;
104
+ exports.stagedSkillDir = require_server.stagedSkillDir;
104
105
  exports.storeFor = require_discovery.storeFor;
105
106
  exports.successorId = require_server.successorId;
106
107
  exports.toDetail = require_discovery.toDetail;
@@ -2,5 +2,5 @@ import { t as canonicalRoot } from "../../root-BcS4-Kge.js";
2
2
  import { U as COMPUTED_TYPES } from "../../itemId-4P9S_ehz.js";
3
3
  import { $ as collectionChangePayload, A as readItem, B as SCHEMA_FILE, C as CollectionQueryZ, D as generateItemId, E as deleteItem, F as loadAppManifest, G as resolveTemplatePath, H as isUnderRealRoot, I as parseAppManifest, J as BackendUnavailableError, K as safeRecordId, L as sharedItemsPath, M as writeItem, N as APP_MANIFEST_FILE, O as isRegularFile, P as appManifestReason, Q as collectionChangeKey, R as pageFromFullRead, S as compileJsonlQuery, T as MAX_QUERY_ROWS, U as itemFilePath, V as isContainedInRoot, W as resolveDataDir, X as COLLECTION_ROOT_REQUIRED, Y as isBackendUnavailable, _ as dedupeByRecordId, a as toDetail, ct as peekWorkspaceRoot, d as storeFor, dt as setCollectionChangePublisher, ft as setFirestoreAccessor, g as decodeCsvRecordId, h as csvRowToItem, i as resolvePrimaryField, it as hostSupportsSharedCollections, j as resolveCreateItemId, k as listItems, l as collectionWritable, mt as sharedCollectionChangePayload, n as discoverCollections, nt as firestoreHandle, o as toSummary, ot as localCollectionKey, p as MAX_CSV_ROWS, pt as setSharedCollectionsSupport, q as safeSlugName, r as loadCollection, rt as getWorkspaceRoot, s as CollectionSchemaZ, st as log, t as acceptParsedSchema, tt as configureCollectionHost, u as readOnlyRefusal, ut as publishCollectionChange, v as encodeCsvRecordId, w as DEFAULT_QUERY_ROWS, x as compileCsvQuery, y as normalizeCsvValue, z as projectItemFields } from "../../discovery-BY-nMCuh.js";
4
4
  import { i as isSafeTemplatePath, n as isSafeCustomViewI18nPath, r as isSafeCustomViewPath, t as isSafeActionTemplatePath } from "../../templatePath-k_WNbL_Q.js";
5
- import { A as recordFieldProblem, C as applyMutateAction, D as validateCollectionRecords, E as STORE_UNREADABLE, F as buildCollectionActionSeedPrompt, I as promptPathsFor, L as readCustomViewHtml, M as enrichItems, N as runQueryOverRows, O as validateRecordObject, P as buildActionSeedPrompt, R as readCustomViewI18n, S as schemaRelations, T as MAX_RECORD_ISSUES, _ as resolveEvery, a as MAX_UNSELECTIVE_ITEMS, b as computeCollectionIcon, c as deleteCollection, d as computeSuccessor, f as daysInMonth, g as parseCivil, h as maybeSpawnSuccessor, i as MAX_SCHEMA_ISSUES, j as runCollectionQuery, k as compileRecordZ, l as deleteCollectionRefusalMessage, m as isTriggerDue, n as MAX_PUT_ITEMS, o as makeManageCollectionTool, p as formatCivil, r as MAX_PUT_LINT, s as deleteCustomView, t as MAX_ITEMS_FILE_BYTES, u as advanceTriggerDate, v as successorId, w as firstMutateParamProblem, x as buildWorkspaceOntology, z as readSkillTemplate } from "../../server-BENtFplH.js";
6
- export { APP_MANIFEST_FILE, BackendUnavailableError, COLLECTION_ROOT_REQUIRED, COMPUTED_TYPES, CollectionQueryZ, CollectionSchemaZ, DEFAULT_QUERY_ROWS, MAX_CSV_ROWS, MAX_ITEMS_FILE_BYTES, MAX_PUT_ITEMS, MAX_PUT_LINT, MAX_QUERY_ROWS, MAX_RECORD_ISSUES, MAX_SCHEMA_ISSUES, MAX_UNSELECTIVE_ITEMS, SCHEMA_FILE, STORE_UNREADABLE, acceptParsedSchema, advanceTriggerDate, appManifestReason, applyMutateAction, buildActionSeedPrompt, buildCollectionActionSeedPrompt, buildWorkspaceOntology, canonicalRoot, collectionChangeKey, collectionChangePayload, collectionWritable, compileCsvQuery, compileJsonlQuery, compileRecordZ, computeCollectionIcon, computeSuccessor, configureCollectionHost, csvRowToItem, daysInMonth, decodeCsvRecordId, dedupeByRecordId, deleteCollection, deleteCollectionRefusalMessage, deleteCustomView, deleteItem, discoverCollections, encodeCsvRecordId, enrichItems, firestoreHandle, firstMutateParamProblem, formatCivil, generateItemId, getWorkspaceRoot, hostSupportsSharedCollections, isBackendUnavailable, isContainedInRoot, isRegularFile, isSafeActionTemplatePath, isSafeCustomViewI18nPath, isSafeCustomViewPath, isSafeTemplatePath, isTriggerDue, isUnderRealRoot, itemFilePath, listItems, loadAppManifest, loadCollection, localCollectionKey, log, makeManageCollectionTool, maybeSpawnSuccessor, normalizeCsvValue, pageFromFullRead, parseAppManifest, parseCivil, peekWorkspaceRoot, projectItemFields, promptPathsFor, publishCollectionChange, readCustomViewHtml, readCustomViewI18n, readItem, readOnlyRefusal, readSkillTemplate, recordFieldProblem, resolveCreateItemId, resolveDataDir, resolveEvery, resolvePrimaryField, resolveTemplatePath, runCollectionQuery, runQueryOverRows, safeRecordId, safeSlugName, schemaRelations, setCollectionChangePublisher, setFirestoreAccessor, setSharedCollectionsSupport, sharedCollectionChangePayload, sharedItemsPath, storeFor, successorId, toDetail, toSummary, validateCollectionRecords, validateRecordObject, writeItem };
5
+ import { A as recordFieldProblem, B as stagedSkillDir, C as applyMutateAction, D as validateCollectionRecords, E as STORE_UNREADABLE, F as buildCollectionActionSeedPrompt, I as promptPathsFor, L as readCustomViewHtml, M as enrichItems, N as runQueryOverRows, O as validateRecordObject, P as buildActionSeedPrompt, R as readCustomViewI18n, S as schemaRelations, T as MAX_RECORD_ISSUES, _ as resolveEvery, a as MAX_UNSELECTIVE_ITEMS, b as computeCollectionIcon, c as deleteCollection, d as computeSuccessor, f as daysInMonth, g as parseCivil, h as maybeSpawnSuccessor, i as MAX_SCHEMA_ISSUES, j as runCollectionQuery, k as compileRecordZ, l as deleteCollectionRefusalMessage, m as isTriggerDue, n as MAX_PUT_ITEMS, o as makeManageCollectionTool, p as formatCivil, r as MAX_PUT_LINT, s as deleteCustomView, t as MAX_ITEMS_FILE_BYTES, u as advanceTriggerDate, v as successorId, w as firstMutateParamProblem, x as buildWorkspaceOntology, z as readSkillTemplate } from "../../server-DyYwfNB6.js";
6
+ export { APP_MANIFEST_FILE, BackendUnavailableError, COLLECTION_ROOT_REQUIRED, COMPUTED_TYPES, CollectionQueryZ, CollectionSchemaZ, DEFAULT_QUERY_ROWS, MAX_CSV_ROWS, MAX_ITEMS_FILE_BYTES, MAX_PUT_ITEMS, MAX_PUT_LINT, MAX_QUERY_ROWS, MAX_RECORD_ISSUES, MAX_SCHEMA_ISSUES, MAX_UNSELECTIVE_ITEMS, SCHEMA_FILE, STORE_UNREADABLE, acceptParsedSchema, advanceTriggerDate, appManifestReason, applyMutateAction, buildActionSeedPrompt, buildCollectionActionSeedPrompt, buildWorkspaceOntology, canonicalRoot, collectionChangeKey, collectionChangePayload, collectionWritable, compileCsvQuery, compileJsonlQuery, compileRecordZ, computeCollectionIcon, computeSuccessor, configureCollectionHost, csvRowToItem, daysInMonth, decodeCsvRecordId, dedupeByRecordId, deleteCollection, deleteCollectionRefusalMessage, deleteCustomView, deleteItem, discoverCollections, encodeCsvRecordId, enrichItems, firestoreHandle, firstMutateParamProblem, formatCivil, generateItemId, getWorkspaceRoot, hostSupportsSharedCollections, isBackendUnavailable, isContainedInRoot, isRegularFile, isSafeActionTemplatePath, isSafeCustomViewI18nPath, isSafeCustomViewPath, isSafeTemplatePath, isTriggerDue, isUnderRealRoot, itemFilePath, listItems, loadAppManifest, loadCollection, localCollectionKey, log, makeManageCollectionTool, maybeSpawnSuccessor, normalizeCsvValue, pageFromFullRead, parseAppManifest, parseCivil, peekWorkspaceRoot, projectItemFields, promptPathsFor, publishCollectionChange, readCustomViewHtml, readCustomViewI18n, readItem, readOnlyRefusal, readSkillTemplate, recordFieldProblem, resolveCreateItemId, resolveDataDir, resolveEvery, resolvePrimaryField, resolveTemplatePath, runCollectionQuery, runQueryOverRows, safeRecordId, safeSlugName, schemaRelations, setCollectionChangePublisher, setFirestoreAccessor, setSharedCollectionsSupport, sharedCollectionChangePayload, sharedItemsPath, stagedSkillDir, storeFor, successorId, toDetail, toSummary, validateCollectionRecords, validateRecordObject, writeItem };
@@ -25,6 +25,26 @@ type SourceAwareReadTarget = Pick<LoadedCollection, "slug" | "source" | "skillDi
25
25
  * containment / `..` defense per base, so the fallback never broadens the
26
26
  * attack surface. */
27
27
  export declare function readCustomViewHtml(collection: SourceAwareReadTarget, viewFile: string, opts?: IoOptions): Promise<string | null>;
28
+ /** `<staging>/<slug>` when THAT slug is actually staged there, else null.
29
+ *
30
+ * `stagingSkillDir` only says whether the ROOT has a staging tree, and then
31
+ * joins the slug — so on its own it claims every collection in a staged
32
+ * workspace is staged. That is wrong for the two layouts that coexist there:
33
+ * a collection IMPORTED via the discover panel, and one committed directly
34
+ * under `.claude/skills/`, neither of which has a staging copy. A stale
35
+ * `data/skills/<slug>/views/x.html` left beside them then SHADOWED the real
36
+ * view on every read (#3031).
37
+ *
38
+ * The evidence is the slug's own `schema.json`, because that is what the
39
+ * authoring layout actually produces — `putSchema` writes it, and the delete
40
+ * path below has always keyed on it. It must be a REGULAR FILE — `lstat`, not
41
+ * `stat` — so a symlink standing in for the schema is not evidence.
42
+ *
43
+ * Exported so the DELETE path uses this exact function rather than a second
44
+ * copy of the expression: "reads and deletes agree" is a claim `views.ts` has
45
+ * made in its comments since #1836, and sharing the predicate is what makes
46
+ * it structurally true instead of a convention two files have to remember. */
47
+ export declare function stagedSkillDir(workspaceRoot: string, safeSlug: string): Promise<string | null>;
28
48
  export interface CustomViewI18nResult {
29
49
  /** The locale the returned `dict` is keyed to — equals the requested locale
30
50
  * when available, else the `"en"` fallback, else `""` when neither block is
@@ -4,7 +4,7 @@ const require_itemId = require("../itemId-CGT2J7YK.cjs");
4
4
  const require_promptSafety = require("../promptSafety-Cv-SoTd4.cjs");
5
5
  require("../collection/index.cjs");
6
6
  const require_discovery = require("../discovery-2TvulIz8.cjs");
7
- const require_server = require("../server-Wz4_ALLl.cjs");
7
+ const require_server = require("../server-DXUt34Rt.cjs");
8
8
  const require_notifier = require("../notifier-DZJj0sOh.cjs");
9
9
  let node_fs_promises = require("node:fs/promises");
10
10
  //#region src/collection-watchers/config.ts
@@ -3,7 +3,7 @@ import { X as fieldText, j as isValidCollectionName } from "../itemId-4P9S_ehz.j
3
3
  import { E as whenMatches, f as itemIsDone } from "../promptSafety-Bte62OvU.js";
4
4
  import "../collection/index.js";
5
5
  import { $ as collectionChangePayload, U as itemFilePath, ct as peekWorkspaceRoot, d as storeFor, mt as sharedCollectionChangePayload, n as discoverCollections, nt as firestoreHandle, r as loadCollection, ut as publishCollectionChange } from "../discovery-BY-nMCuh.js";
6
- import { h as maybeSpawnSuccessor, m as isTriggerDue } from "../server-BENtFplH.js";
6
+ import { h as maybeSpawnSuccessor, m as isTriggerDue } from "../server-DyYwfNB6.js";
7
7
  import { d as publish, m as updateForPlugin, n as clear, s as listAll } from "../notifier-DhnwR82U.js";
8
8
  import { access } from "node:fs/promises";
9
9
  //#region src/collection-watchers/config.ts
@@ -5,7 +5,7 @@ const require_root = require("../../root-BvwBUcol.cjs");
5
5
  const require_itemId = require("../../itemId-CGT2J7YK.cjs");
6
6
  const require_project = require("../../project-C1ep9pvo.cjs");
7
7
  const require_discovery = require("../../discovery-2TvulIz8.cjs");
8
- const require_server = require("../../server-Wz4_ALLl.cjs");
8
+ const require_server = require("../../server-DXUt34Rt.cjs");
9
9
  const require_feeds_paths = require("../paths.cjs");
10
10
  const require_ingestTypes = require("../../ingestTypes-DsVH9BYy.cjs");
11
11
  const require_notifier = require("../../notifier-DZJj0sOh.cjs");
@@ -3,7 +3,7 @@ import { t as canonicalRoot } from "../../root-BcS4-Kge.js";
3
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
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-BENtFplH.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
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";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_paths = require("../paths-ClV946_f.cjs");
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
@@ -7,7 +7,7 @@ const require_utils_fetch = require("../utils/fetch.cjs");
7
7
  const require_itemId = require("../itemId-CGT2J7YK.cjs");
8
8
  const require_project = require("../project-C1ep9pvo.cjs");
9
9
  const require_discovery = require("../discovery-2TvulIz8.cjs");
10
- const require_paths = require("../paths-ClV946_f.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);
@@ -1,4 +1,3 @@
1
- require("./rolldown-runtime-VH7oDXx4.cjs");
2
1
  let node_path = require("node:path");
3
2
  let node_os = require("node:os");
4
3
  //#region src/global-config/paths.ts
@@ -22,4 +21,4 @@ Object.defineProperty(exports, "mulmoGlobalConfigPath", {
22
21
  }
23
22
  });
24
23
 
25
- //# sourceMappingURL=paths-ClV946_f.cjs.map
24
+ //# sourceMappingURL=paths-C8-jxR0s.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths-ClV946_f.cjs","names":[],"sources":["../src/global-config/paths.ts"],"sourcesContent":["// The host-NEUTRAL per-user config file shared by MulmoClaude and\n// MulmoTerminal. It lives OUTSIDE any workspace, in the same `~/.config/mulmo`\n// directory the Google grant already uses (`../google/paths.ts`), for the same\n// reason: one machine, one set of cross-app preferences, surviving workspace\n// resets and never synced.\n//\n// Deliberately NOT `~/mulmoclaude/config/settings.json` (that is per-workspace\n// and MulmoClaude-owned) and NOT `~/.mulmoterminal/config.json` (that is the\n// terminal's own file). Neither app owns this one.\n//\n// The `home` parameter exists so tests can thread a fake home.\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function mulmoConfigDir(home?: string): string {\n return join(home ?? homedir(), \".config\", \"mulmo\");\n}\n\nexport function mulmoGlobalConfigPath(home?: string): string {\n return join(mulmoConfigDir(home), \"config.json\");\n}\n"],"mappings":";;;;AAcA,SAAgB,eAAe,MAAuB;CACpD,QAAA,GAAO,UAAA,KAAA,CAAK,SAAA,GAAQ,QAAA,QAAA,CAAQ,GAAG,WAAW,OAAO;AACnD;AAEA,SAAgB,sBAAsB,MAAuB;CAC3D,QAAA,GAAO,UAAA,KAAA,CAAK,eAAe,IAAI,GAAG,aAAa;AACjD"}
1
+ {"version":3,"file":"paths-C8-jxR0s.cjs","names":[],"sources":["../src/global-config/paths.ts"],"sourcesContent":["// The host-NEUTRAL per-user config file shared by MulmoClaude and\n// MulmoTerminal. It lives OUTSIDE any workspace, in the same `~/.config/mulmo`\n// directory the Google grant already uses (`../google/paths.ts`), for the same\n// reason: one machine, one set of cross-app preferences, surviving workspace\n// resets and never synced.\n//\n// Deliberately NOT `~/mulmoclaude/config/settings.json` (that is per-workspace\n// and MulmoClaude-owned) and NOT `~/.mulmoterminal/config.json` (that is the\n// terminal's own file). Neither app owns this one.\n//\n// The `home` parameter exists so tests can thread a fake home.\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function mulmoConfigDir(home?: string): string {\n return join(home ?? homedir(), \".config\", \"mulmo\");\n}\n\nexport function mulmoGlobalConfigPath(home?: string): string {\n return join(mulmoConfigDir(home), \"config.json\");\n}\n"],"mappings":";;;AAcA,SAAgB,eAAe,MAAuB;CACpD,QAAA,GAAO,UAAA,KAAA,CAAK,SAAA,GAAQ,QAAA,QAAA,CAAQ,GAAG,WAAW,OAAO;AACnD;AAEA,SAAgB,sBAAsB,MAAuB;CAC3D,QAAA,GAAO,UAAA,KAAA,CAAK,eAAe,IAAI,GAAG,aAAa;AACjD"}