@mulmoclaude/core 3.15.0 → 4.0.1

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.
@@ -800,40 +800,77 @@ shipped builders produce, and asserts `handlePermission` comes back over the MCP
800
800
 
801
801
  ### Cause
802
802
 
803
- `Dockerfile.sandbox` installs the CLI unpinned (`RUN npm install -g @anthropic-ai/claude-code
804
- tsx`), so the image freezes whatever was latest when it was built. Two mechanisms then keep it
805
- frozen:
803
+ The image freezes whichever CLI was current when it was built, and
804
+ `ensureSandboxImage()` (`server/system/docker.ts`) rebuilds only when the **Dockerfile's SHA**
805
+ changes. A new CLI release upstream doesn't change that SHA, so nothing retriggers the build.
806
806
 
807
- 1. `ensureSandboxImage()` (`server/system/docker.ts`) rebuilds only when the **Dockerfile's
808
- SHA** changes. A new CLI release upstream doesn't change that SHA, so nothing retriggers.
809
- 2. Deleting the image does not delete the **build cache**. The rebuild reuses the cached
810
- `npm install -g` layer (it reports `CACHED` in 0.0s) and reinstalls nothing.
807
+ ### Fix
811
808
 
812
- So the usual "remove it and let it rebuild" reflex genuinely does nothing here, which is why
813
- this one burns time.
809
+ Read it off the boot log — since #2842 the server records the version at build time as an image
810
+ label and prints it on every start, so no container has to be run to find out:
814
811
 
815
- ### Fix
812
+ ```
813
+ INFO [sandbox] sandbox image claudeCodeVersion=2.1.220 ageDays=3
814
+ ```
816
815
 
817
- Check the version inside the image — the host's `claude --version` says nothing about it, and
818
- the entrypoint override is required because the image's ENTRYPOINT is the sandbox script:
816
+ `claudeCodeVersion=unrecorded` means the image predates the label (or was built with npm
817
+ unreachable). In that case ask the image directly — the entrypoint override is required because
818
+ the image's ENTRYPOINT is the sandbox script, and the host's own `claude --version` says nothing
819
+ about what is inside:
819
820
 
820
821
  ```bash
821
822
  docker run --rm --entrypoint claude mulmoclaude-sandbox --version
822
823
  ```
823
824
 
824
- If it's behind, drop the image AND the build cache, then let the next run rebuild:
825
+ If it's behind, drop the image and let the next run rebuild:
825
826
 
826
827
  ```bash
827
828
  yarn sandbox:remove # docker rmi mulmoclaude-sandbox
828
- docker builder prune -a -f # the step that actually invalidates the npm layer
829
829
  ```
830
830
 
831
- `docker builder prune -a -f` clears the builder cache for the whole daemon, not just this
832
- image, so unrelated builds are slower once afterwards. That is the cost of the fix, not a
833
- sign something went wrong.
831
+ Two warns fire on their own when this is worth acting on: `sandbox image is stale` past 30 days,
832
+ and `Claude CLI in the sandbox image is older than the version our MCP config needs` below
833
+ 2.1.121 (the floor for `alwaysLoad`).
834
+
835
+ > **Older than #2842?** Back then the rebuild reused the cached `npm install -g` layer (reported
836
+ > `CACHED` in 0.0s) and reinstalled nothing, so `yarn sandbox:remove` alone genuinely did nothing
837
+ > and `docker builder prune -a -f` was needed. The Dockerfile now installs an exact
838
+ > `@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}` resolved on the host, so a moved CLI changes
839
+ > the layer's own command string and invalidates it. Don't reach for `builder prune` first — it
840
+ > clears the cache for the whole daemon.
841
+
842
+ The CLI is deliberately left unpinned by default (#2202), so this can recur whenever an upstream
843
+ fix matters to you — the log line above is the way to rule it in or out.
844
+
845
+ ## A turn dies on `handlePermission not found` — read the broker lines before anything else
846
+
847
+ ### Symptoms
848
+
849
+ The same `MCP tool mcp__mulmoclaude__handlePermission ... not found` as the three sections
850
+ above, and you can't yet tell WHICH of them you are in.
851
+
852
+ ### Cause
853
+
854
+ They are genuinely different failures — a permanent load failure, a startup race, a frozen CLI —
855
+ and guessing between them is what makes this expensive. Since #2842 the log answers it directly,
856
+ so read these three before forming a theory:
857
+
858
+ | Log line | What it tells you |
859
+ |---|---|
860
+ | `spawning agent … broker=tsx` | This install is on the SLOW path: the bundle is missing, so the broker is transcoded from source on every spawn (seconds to tens of seconds over a Windows/macOS bind mount). A `broker bundle missing` warn accompanies it once per process. |
861
+ | `[mcp] broker ready bootMs=… initializeMs=…` | The broker DID connect, and how long it took. `broker cold boot is slow` replaces it past 5 s. |
862
+ | `brokerEverReady=false` on the retry warn | No beacon ever arrived for that chat — the broker did not come up at all, so the automatic 3 s replay will reproduce the same error and only double the wait. |
863
+
864
+ ### Fix
834
865
 
835
- The CLI is deliberately left unpinned (#2202), so this can recur whenever an upstream fix
836
- matters to you — the check above is the way to rule it in or out.
866
+ - `broker=tsx` → this is the cold-boot cost, not the connect-wait ceiling. In a dev checkout run
867
+ `yarn build:mcp-broker` (or plain `yarn build`); on an npm install, update `mulmoclaude` —
868
+ published launchers have shipped the bundle since 1.9.0.
869
+ - `broker ready` present with a small `initializeMs`, failing anyway → it is the startup race,
870
+ not the boot. See the scheduled-run section above.
871
+ - `brokerEverReady=false` with no `broker ready` line anywhere → the broker never started. That
872
+ is the permanent load failure; check the `Cannot find module` section.
873
+ - Old or unrecorded `claudeCodeVersion` alongside any of these → rule out the frozen CLI first.
837
874
 
838
875
  ---
839
876
 
@@ -4,9 +4,9 @@ const require_dist = require("../../../dist-CsgSfWwR.cjs");
4
4
  const require_root = require("../../../root-rPH6FGDT.cjs");
5
5
  const require_relPath = require("../../../relPath-CTAjGdCL.cjs");
6
6
  const require_utils_fetch = require("../../../utils/fetch.cjs");
7
- const require_discovery = require("../../../discovery-BsXiDZBR.cjs");
8
- const require_server = require("../../../server-DLzQ4jFu.cjs");
7
+ const require_discovery = require("../../../discovery-C_3gXoin.cjs");
9
8
  const require_templatePath = require("../../../templatePath-27vUZowm.cjs");
9
+ const require_server = require("../../../server-CF_tGCGP.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");
@@ -2,9 +2,9 @@ import { l as isUnknownArray, t as errorMessage } from "../../../dist-D8zokgGo.j
2
2
  import { n as writeFileAtomic } from "../../../root-BMroU_mB.js";
3
3
  import { n as toPosixRelPath } from "../../../relPath-DW8MC8VO.js";
4
4
  import { fetchWithTimeout } from "../../../utils/fetch.js";
5
- import { $ as collectionsRegistriesConfigPath, G as safeRecordId, ct as projectSkillsDir, mt as skillsStagingDir, nt as getWorkspaceRoot, ot as log, r as loadCollection, s as CollectionSchemaZ, t as acceptParsedSchema } from "../../../discovery-B9zdNkgW.js";
6
- import { g as ONE_SECOND_MS } from "../../../server-jm7aGA3g.js";
5
+ import { $ as collectionsRegistriesConfigPath, G as safeRecordId, ct as projectSkillsDir, mt as skillsStagingDir, nt as getWorkspaceRoot, ot as log, r as loadCollection, s as CollectionSchemaZ, t as acceptParsedSchema } from "../../../discovery-CQp0wi-n.js";
7
6
  import { t as isSafeActionTemplatePath } from "../../../templatePath-k_WNbL_Q.js";
7
+ import { g as ONE_SECOND_MS } from "../../../server-BIewQYpC.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";
@@ -1,14 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_root = require("../../root-rPH6FGDT.cjs");
3
3
  const require_itemId = require("../../itemId-Dzrr3vs5.cjs");
4
- const require_discovery = require("../../discovery-BsXiDZBR.cjs");
5
- const require_server = require("../../server-DLzQ4jFu.cjs");
4
+ const require_discovery = require("../../discovery-C_3gXoin.cjs");
6
5
  const require_templatePath = require("../../templatePath-27vUZowm.cjs");
7
- exports.APPS_COLLECTION = require_server.APPS_COLLECTION;
6
+ const require_server = require("../../server-CF_tGCGP.cjs");
8
7
  exports.APP_MANIFEST_FILE = require_discovery.APP_MANIFEST_FILE;
9
- exports.APP_ROLES = require_server.APP_ROLES;
10
- exports.APP_SLUGS_COLLECTION = require_server.APP_SLUGS_COLLECTION;
11
- exports.AuthoredAppZ = require_server.AuthoredAppZ;
12
8
  exports.BackendUnavailableError = require_discovery.BackendUnavailableError;
13
9
  exports.COLLECTION_ROOT_REQUIRED = require_discovery.COLLECTION_ROOT_REQUIRED;
14
10
  exports.COMPUTED_TYPES = require_itemId.COMPUTED_TYPES;
@@ -20,25 +16,12 @@ exports.MAX_QUERY_ROWS = require_discovery.MAX_QUERY_ROWS;
20
16
  exports.MAX_RECORD_ISSUES = require_server.MAX_RECORD_ISSUES;
21
17
  exports.MAX_SCHEMA_ISSUES = require_server.MAX_SCHEMA_ISSUES;
22
18
  exports.MAX_UNSELECTIVE_ITEMS = require_server.MAX_UNSELECTIVE_ITEMS;
23
- exports.PUBLIC_CONFIG_DOC = require_server.PUBLIC_CONFIG_DOC;
24
- exports.PUBLIC_VIEW_ID = require_server.PUBLIC_VIEW_ID;
25
- exports.RESERVED_VIEW_IDS = require_server.RESERVED_VIEW_IDS;
26
19
  exports.SCHEMA_FILE = require_discovery.SCHEMA_FILE;
27
20
  exports.STORE_UNREADABLE = require_server.STORE_UNREADABLE;
28
- exports.VIEW_AUDIENCES = require_server.VIEW_AUDIENCES;
29
- exports.VIEW_CONFIG_ID = require_server.VIEW_CONFIG_ID;
30
- exports.VIEW_ID_PATTERN = require_server.VIEW_ID_PATTERN;
31
- exports.VIEW_TIER = require_server.VIEW_TIER;
32
21
  exports.acceptParsedSchema = require_discovery.acceptParsedSchema;
33
22
  exports.advanceTriggerDate = require_server.advanceTriggerDate;
34
- exports.appConfigPath = require_server.appConfigPath;
35
23
  exports.appManifestReason = require_discovery.appManifestReason;
36
- exports.appSchemasPath = require_server.appSchemasPath;
37
- exports.appSlugDoc = require_server.appSlugDoc;
38
- exports.appStagingPath = require_server.appStagingPath;
39
- exports.appViewTierPath = require_server.appViewTierPath;
40
24
  exports.applyMutateAction = require_server.applyMutateAction;
41
- exports.bindsSubmitterIdentity = require_server.bindsSubmitterIdentity;
42
25
  exports.buildActionSeedPrompt = require_server.buildActionSeedPrompt;
43
26
  exports.buildCollectionActionSeedPrompt = require_server.buildCollectionActionSeedPrompt;
44
27
  exports.buildWorkspaceOntology = require_server.buildWorkspaceOntology;
@@ -86,23 +69,13 @@ exports.log = require_discovery.log;
86
69
  exports.makeManageCollectionTool = require_server.makeManageCollectionTool;
87
70
  exports.maybeSpawnSuccessor = require_server.maybeSpawnSuccessor;
88
71
  exports.normalizeCsvValue = require_discovery.normalizeCsvValue;
89
- exports.normalizeViews = require_server.normalizeViews;
90
72
  exports.pageFromFullRead = require_discovery.pageFromFullRead;
91
73
  exports.parseAppManifest = require_discovery.parseAppManifest;
92
- exports.parseAuthoredApp = require_server.parseAuthoredApp;
93
74
  exports.parseCivil = require_server.parseCivil;
94
- exports.participantScope = require_server.participantScope;
95
75
  exports.peekWorkspaceRoot = require_discovery.peekWorkspaceRoot;
96
- exports.projectApp = require_server.projectApp;
97
- exports.projectAppViews = require_server.projectAppViews;
98
- exports.projectDeploy = require_server.projectDeploy;
99
76
  exports.projectItemFields = require_discovery.projectItemFields;
100
- exports.projectPublish = require_server.projectPublish;
101
- exports.promoteSchema = require_server.promoteSchema;
102
- exports.promotedRoleProblems = require_server.promotedRoleProblems;
103
77
  exports.promptPathsFor = require_server.promptPathsFor;
104
78
  exports.publishCollectionChange = require_discovery.publishCollectionChange;
105
- exports.publishProblems = require_server.publishProblems;
106
79
  exports.readCustomViewHtml = require_server.readCustomViewHtml;
107
80
  exports.readCustomViewI18n = require_server.readCustomViewI18n;
108
81
  exports.readItem = require_discovery.readItem;
@@ -124,14 +97,10 @@ exports.setFirestoreAccessor = require_discovery.setFirestoreAccessor;
124
97
  exports.setSharedCollectionsSupport = require_discovery.setSharedCollectionsSupport;
125
98
  exports.sharedCollectionChangePayload = require_discovery.sharedCollectionChangePayload;
126
99
  exports.sharedItemsPath = require_discovery.sharedItemsPath;
127
- exports.stagedRuleConfig = require_server.stagedRuleConfig;
128
100
  exports.storeFor = require_discovery.storeFor;
129
101
  exports.successorId = require_server.successorId;
130
102
  exports.toDetail = require_discovery.toDetail;
131
103
  exports.toSummary = require_discovery.toSummary;
132
104
  exports.validateCollectionRecords = require_server.validateCollectionRecords;
133
105
  exports.validateRecordObject = require_server.validateRecordObject;
134
- exports.viewConfigDocId = require_server.viewConfigDocId;
135
- exports.viewDocId = require_server.viewDocId;
136
- exports.writeFor = require_server.writeFor;
137
106
  exports.writeItem = require_discovery.writeItem;
@@ -2,10 +2,6 @@ export { configureCollectionHost, canonicalRoot, getWorkspaceRoot, peekWorkspace
2
2
  export type { FirestoreDoc, FirestoreDocs } from './firestoreDocs';
3
3
  export { sharedItemsPath } from './firestoreStore';
4
4
  export { loadAppManifest, parseAppManifest, appManifestReason, APP_MANIFEST_FILE, type AppManifest, type AppManifestResult } from './appManifest';
5
- export { AuthoredAppZ, parseAuthoredApp, APP_ROLES, type AuthoredApp, type AuthoredCollectionConfig, type AuthoredMail, type AuthoredSubmit, } from './publishManifest';
6
- export { projectApp, projectAppViews, appViewTierPath, viewConfigDocId, type AppViewTier, projectDeploy, projectPublish, stagedRuleConfig, promoteSchema, appStagingPath, APP_SLUGS_COLLECTION, appSlugDoc, type AppSlugDoc, type DeployedApp, type PublishedFace, APPS_COLLECTION, PUBLIC_CONFIG_DOC, appConfigPath, appSchemasPath, type PublishStamp, type PublishedApp, type PublishedConfigDoc, type PublishedSchemaDoc, type StagedSchemaDoc, } from './publishProject';
7
- export { publishProblems, promotedRoleProblems, bindsSubmitterIdentity, type PublishableCollection } from './publishChecks';
8
- export { normalizeViews, participantScope, viewDocId, writeFor, PUBLIC_VIEW_ID, RESERVED_VIEW_IDS, VIEW_AUDIENCES, VIEW_CONFIG_ID, VIEW_ID_PATTERN, VIEW_TIER, type AppViewConfigDoc, type NormalizedView, type NormalizedViewsResult, type ProjectedViewCollection, type ProjectedViewWrite, type ViewAudience, } from './appViews';
9
5
  export type { LoadedCollection } from './discoveredCollection';
10
6
  export * from './paths';
11
7
  export * from './templatePath';
@@ -1,6 +1,6 @@
1
1
  import { t as canonicalRoot } from "../../root-BMroU_mB.js";
2
2
  import { N as COMPUTED_TYPES } from "../../itemId-DfTm08jm.js";
3
- import { A as readItem, B as SCHEMA_FILE, C as CollectionQueryZ, D as generateItemId, E as deleteItem, F as loadAppManifest, G as safeRecordId, H as itemFilePath, I as parseAppManifest, J as isBackendUnavailable, K as safeSlugName, L as sharedItemsPath, M as writeItem, N as APP_MANIFEST_FILE, O as isRegularFile, P as appManifestReason, Q as collectionChangePayload, R as pageFromFullRead, S as compileJsonlQuery, T as MAX_QUERY_ROWS, U as resolveDataDir, V as isContainedInRoot, W as resolveTemplatePath, Y as COLLECTION_ROOT_REQUIRED, Z as collectionChangeKey, _ as dedupeByRecordId, a as toDetail, at as localCollectionKey, d as storeFor, dt as setFirestoreAccessor, et as configureCollectionHost, ft as setSharedCollectionsSupport, g as decodeCsvRecordId, h as csvRowToItem, i as resolvePrimaryField, j as resolveCreateItemId, k as listItems, l as collectionWritable, lt as publishCollectionChange, n as discoverCollections, nt as getWorkspaceRoot, o as toSummary, ot as log, p as MAX_CSV_ROWS, pt as sharedCollectionChangePayload, q as BackendUnavailableError, r as loadCollection, rt as hostSupportsSharedCollections, s as CollectionSchemaZ, st as peekWorkspaceRoot, t as acceptParsedSchema, tt as firestoreHandle, u as readOnlyRefusal, ut as setCollectionChangePublisher, v as encodeCsvRecordId, w as DEFAULT_QUERY_ROWS, x as compileCsvQuery, y as normalizeCsvValue, z as projectItemFields } from "../../discovery-B9zdNkgW.js";
4
- import { $ as stagedRuleConfig, A as runQueryOverRows, B as APPS_COLLECTION, C as STORE_UNREADABLE, D as recordFieldProblem, E as compileRecordZ, F as readCustomViewI18n, G as appSlugDoc, H as PUBLIC_CONFIG_DOC, I as readSkillTemplate, J as projectApp, K as appStagingPath, L as bindsSubmitterIdentity, M as buildCollectionActionSeedPrompt, N as promptPathsFor, O as runCollectionQuery, P as readCustomViewHtml, Q as promoteSchema, R as promotedRoleProblems, S as MAX_RECORD_ISSUES, T as validateRecordObject, U as appConfigPath, V as APP_SLUGS_COLLECTION, W as appSchemasPath, X as projectDeploy, Y as projectAppViews, Z as projectPublish, _ as computeCollectionIcon, a as deleteCollection, at as RESERVED_VIEW_IDS, b as applyMutateAction, c as computeSuccessor, ct as VIEW_ID_PATTERN, d as isTriggerDue, dt as participantScope, et as viewConfigDocId, f as maybeSpawnSuccessor, ft as viewDocId, h as successorId, i as deleteCustomView, it as PUBLIC_VIEW_ID, j as buildActionSeedPrompt, k as enrichItems, l as daysInMonth, lt as VIEW_TIER, m as resolveEvery, n as MAX_UNSELECTIVE_ITEMS, nt as AuthoredAppZ, o as deleteCollectionRefusalMessage, ot as VIEW_AUDIENCES, p as parseCivil, pt as writeFor, q as appViewTierPath, r as makeManageCollectionTool, rt as parseAuthoredApp, s as advanceTriggerDate, st as VIEW_CONFIG_ID, t as MAX_SCHEMA_ISSUES, tt as APP_ROLES, u as formatCivil, ut as normalizeViews, v as buildWorkspaceOntology, w as validateCollectionRecords, x as firstMutateParamProblem, y as schemaRelations, z as publishProblems } from "../../server-jm7aGA3g.js";
3
+ import { A as readItem, B as SCHEMA_FILE, C as CollectionQueryZ, D as generateItemId, E as deleteItem, F as loadAppManifest, G as safeRecordId, H as itemFilePath, I as parseAppManifest, J as isBackendUnavailable, K as safeSlugName, L as sharedItemsPath, M as writeItem, N as APP_MANIFEST_FILE, O as isRegularFile, P as appManifestReason, Q as collectionChangePayload, R as pageFromFullRead, S as compileJsonlQuery, T as MAX_QUERY_ROWS, U as resolveDataDir, V as isContainedInRoot, W as resolveTemplatePath, Y as COLLECTION_ROOT_REQUIRED, Z as collectionChangeKey, _ as dedupeByRecordId, a as toDetail, at as localCollectionKey, d as storeFor, dt as setFirestoreAccessor, et as configureCollectionHost, ft as setSharedCollectionsSupport, g as decodeCsvRecordId, h as csvRowToItem, i as resolvePrimaryField, j as resolveCreateItemId, k as listItems, l as collectionWritable, lt as publishCollectionChange, n as discoverCollections, nt as getWorkspaceRoot, o as toSummary, ot as log, p as MAX_CSV_ROWS, pt as sharedCollectionChangePayload, q as BackendUnavailableError, r as loadCollection, rt as hostSupportsSharedCollections, s as CollectionSchemaZ, st as peekWorkspaceRoot, t as acceptParsedSchema, tt as firestoreHandle, u as readOnlyRefusal, ut as setCollectionChangePublisher, v as encodeCsvRecordId, w as DEFAULT_QUERY_ROWS, x as compileCsvQuery, y as normalizeCsvValue, z as projectItemFields } from "../../discovery-CQp0wi-n.js";
5
4
  import { i as isSafeTemplatePath, n as isSafeCustomViewI18nPath, r as isSafeCustomViewPath, t as isSafeActionTemplatePath } from "../../templatePath-k_WNbL_Q.js";
6
- export { APPS_COLLECTION, APP_MANIFEST_FILE, APP_ROLES, APP_SLUGS_COLLECTION, AuthoredAppZ, BackendUnavailableError, COLLECTION_ROOT_REQUIRED, COMPUTED_TYPES, CollectionQueryZ, CollectionSchemaZ, DEFAULT_QUERY_ROWS, MAX_CSV_ROWS, MAX_QUERY_ROWS, MAX_RECORD_ISSUES, MAX_SCHEMA_ISSUES, MAX_UNSELECTIVE_ITEMS, PUBLIC_CONFIG_DOC, PUBLIC_VIEW_ID, RESERVED_VIEW_IDS, SCHEMA_FILE, STORE_UNREADABLE, VIEW_AUDIENCES, VIEW_CONFIG_ID, VIEW_ID_PATTERN, VIEW_TIER, acceptParsedSchema, advanceTriggerDate, appConfigPath, appManifestReason, appSchemasPath, appSlugDoc, appStagingPath, appViewTierPath, applyMutateAction, bindsSubmitterIdentity, 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, itemFilePath, listItems, loadAppManifest, loadCollection, localCollectionKey, log, makeManageCollectionTool, maybeSpawnSuccessor, normalizeCsvValue, normalizeViews, pageFromFullRead, parseAppManifest, parseAuthoredApp, parseCivil, participantScope, peekWorkspaceRoot, projectApp, projectAppViews, projectDeploy, projectItemFields, projectPublish, promoteSchema, promotedRoleProblems, promptPathsFor, publishCollectionChange, publishProblems, readCustomViewHtml, readCustomViewI18n, readItem, readOnlyRefusal, readSkillTemplate, recordFieldProblem, resolveCreateItemId, resolveDataDir, resolveEvery, resolvePrimaryField, resolveTemplatePath, runCollectionQuery, runQueryOverRows, safeRecordId, safeSlugName, schemaRelations, setCollectionChangePublisher, setFirestoreAccessor, setSharedCollectionsSupport, sharedCollectionChangePayload, sharedItemsPath, stagedRuleConfig, storeFor, successorId, toDetail, toSummary, validateCollectionRecords, validateRecordObject, viewConfigDocId, viewDocId, writeFor, writeItem };
5
+ import { A as runQueryOverRows, C as STORE_UNREADABLE, D as recordFieldProblem, E as compileRecordZ, F as readCustomViewI18n, I as readSkillTemplate, M as buildCollectionActionSeedPrompt, N as promptPathsFor, O as runCollectionQuery, P as readCustomViewHtml, S as MAX_RECORD_ISSUES, T as validateRecordObject, _ as computeCollectionIcon, a as deleteCollection, b as applyMutateAction, c as computeSuccessor, d as isTriggerDue, f as maybeSpawnSuccessor, h as successorId, i as deleteCustomView, j as buildActionSeedPrompt, k as enrichItems, l as daysInMonth, m as resolveEvery, n as MAX_UNSELECTIVE_ITEMS, o as deleteCollectionRefusalMessage, p as parseCivil, r as makeManageCollectionTool, s as advanceTriggerDate, t as MAX_SCHEMA_ISSUES, u as formatCivil, v as buildWorkspaceOntology, w as validateCollectionRecords, x as firstMutateParamProblem, y as schemaRelations } from "../../server-BIewQYpC.js";
6
+ export { APP_MANIFEST_FILE, BackendUnavailableError, COLLECTION_ROOT_REQUIRED, COMPUTED_TYPES, CollectionQueryZ, CollectionSchemaZ, DEFAULT_QUERY_ROWS, MAX_CSV_ROWS, 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, 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 };
@@ -3,8 +3,8 @@ const require_root = require("../root-rPH6FGDT.cjs");
3
3
  const require_itemId = require("../itemId-Dzrr3vs5.cjs");
4
4
  const require_promptSafety = require("../promptSafety-CWqYq-NS.cjs");
5
5
  require("../collection/index.cjs");
6
- const require_discovery = require("../discovery-BsXiDZBR.cjs");
7
- const require_server = require("../server-DLzQ4jFu.cjs");
6
+ const require_discovery = require("../discovery-C_3gXoin.cjs");
7
+ const require_server = require("../server-CF_tGCGP.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
@@ -2,8 +2,8 @@ import { t as canonicalRoot } from "../root-BMroU_mB.js";
2
2
  import { B as fieldText, x as isValidCollectionName } from "../itemId-DfTm08jm.js";
3
3
  import { E as whenMatches, f as itemIsDone } from "../promptSafety-CSdyp7RF.js";
4
4
  import "../collection/index.js";
5
- import { H as itemFilePath, Q as collectionChangePayload, d as storeFor, lt as publishCollectionChange, n as discoverCollections, pt as sharedCollectionChangePayload, r as loadCollection, st as peekWorkspaceRoot, tt as firestoreHandle } from "../discovery-B9zdNkgW.js";
6
- import { d as isTriggerDue, f as maybeSpawnSuccessor } from "../server-jm7aGA3g.js";
5
+ import { H as itemFilePath, Q as collectionChangePayload, d as storeFor, lt as publishCollectionChange, n as discoverCollections, pt as sharedCollectionChangePayload, r as loadCollection, st as peekWorkspaceRoot, tt as firestoreHandle } from "../discovery-CQp0wi-n.js";
6
+ import { d as isTriggerDue, f as maybeSpawnSuccessor } from "../server-BIewQYpC.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
@@ -8,9 +8,9 @@ import { readFileSync, realpathSync, watch } from "node:fs";
8
8
  import path from "node:path";
9
9
  import { createHash, randomBytes } from "node:crypto";
10
10
  import { lstat, mkdir, open, readFile, readdir, rename, stat, unlink, writeFile } from "node:fs/promises";
11
- import { z } from "zod";
12
11
  import { tmpdir } from "node:os";
13
12
  import iconv from "iconv-lite";
13
+ import { z } from "zod";
14
14
  //#region src/host/hostSlot.ts
15
15
  function createHostSlot(name) {
16
16
  let current = null;
@@ -3303,4 +3303,4 @@ function toDetail(collection) {
3303
3303
  //#endregion
3304
3304
  export { collectionsRegistriesConfigPath as $, readItem as A, SCHEMA_FILE as B, CollectionQueryZ as C, generateItemId as D, deleteItem as E, loadAppManifest as F, safeRecordId as G, itemFilePath as H, parseAppManifest as I, isBackendUnavailable as J, safeSlugName as K, sharedItemsPath as L, writeItem as M, APP_MANIFEST_FILE as N, isRegularFile as O, appManifestReason as P, collectionChangePayload as Q, pageFromFullRead as R, compileJsonlQuery as S, MAX_QUERY_ROWS as T, resolveDataDir as U, isContainedInRoot as V, resolveTemplatePath as W, archiveDir as X, COLLECTION_ROOT_REQUIRED as Y, collectionChangeKey as Z, dedupeByRecordId as _, createHostSlot as _t, toDetail as a, localCollectionKey as at, queryCsv as b, resolveMutateSet as c, projectSkillsDir as ct, storeFor as d, setFirestoreAccessor as dt, configureCollectionHost as et, checkpointSqliteDatabase as f, setSharedCollectionsSupport as ft, decodeCsvRecordId as g, createForwardingLogger as gt, csvRowToItem as h, stagingSkillDir as ht, resolvePrimaryField as i, isPresetSlug as it, resolveCreateItemId as j, listItems as k, collectionWritable as l, publishCollectionChange as lt, cacheDir as m, skillsStagingDir as mt, discoverCollections as n, getWorkspaceRoot as nt, toSummary as o, log as ot, MAX_CSV_ROWS as p, sharedCollectionChangePayload as pt, BackendUnavailableError as q, loadCollection as r, hostSupportsSharedCollections as rt, CollectionSchemaZ as s, peekWorkspaceRoot as st, acceptParsedSchema as t, firestoreHandle as tt, readOnlyRefusal as u, setCollectionChangePublisher as ut, encodeCsvRecordId as v, DEFAULT_QUERY_ROWS as w, compileCsvQuery as x, normalizeCsvValue as y, projectItemFields as z };
3305
3305
 
3306
- //# sourceMappingURL=discovery-B9zdNkgW.js.map
3306
+ //# sourceMappingURL=discovery-CQp0wi-n.js.map