@camstack/system 1.2.481 → 1.2.483

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.
Files changed (109) hide show
  1. package/dist/addon-runner.js +2 -2
  2. package/dist/addon-runner.mjs +2 -2
  3. package/dist/{agent-https-o3X-jkS7.js → agent-https-CHZpVx3I.js} +1 -1
  4. package/dist/{agent-https-doVPSeiy.mjs → agent-https-NP141VCW.mjs} +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +3 -3
  10. package/dist/builtins/alerts/alerts.addon.mjs +3 -3
  11. package/dist/builtins/alerts/device-label.d.ts +2 -2
  12. package/dist/builtins/autotrack/index.js +1 -1
  13. package/dist/builtins/autotrack/index.mjs +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  16. package/dist/builtins/calendars/calendars.addon.js +1 -1
  17. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  18. package/dist/builtins/camera-grid/acquire-retry.d.ts +1 -1
  19. package/dist/builtins/camera-grid/addon.d.ts +2 -2
  20. package/dist/builtins/camera-grid/grid-profiles.d.ts +1 -1
  21. package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +1 -1
  22. package/dist/builtins/camera-grid/index.js +3 -3
  23. package/dist/builtins/camera-grid/index.mjs +3 -3
  24. package/dist/builtins/composer/composer.addon.js +4 -4
  25. package/dist/builtins/composer/composer.addon.mjs +4 -4
  26. package/dist/builtins/composer/existing-target.d.ts +1 -1
  27. package/dist/builtins/composer/own-field-reads.d.ts +1 -1
  28. package/dist/builtins/console-logging/index.js +2 -2
  29. package/dist/builtins/console-logging/index.mjs +2 -2
  30. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  31. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  32. package/dist/builtins/device-history/device-history.addon.js +2 -2
  33. package/dist/builtins/device-history/device-history.addon.mjs +2 -2
  34. package/dist/builtins/device-manager/device-aggregation.d.ts +1 -1
  35. package/dist/builtins/device-manager/device-bindings-store.d.ts +3 -3
  36. package/dist/builtins/device-manager/device-manager.addon.js +9 -9
  37. package/dist/builtins/device-manager/device-manager.addon.mjs +9 -9
  38. package/dist/builtins/device-manager/device-meta-types.d.ts +2 -2
  39. package/dist/builtins/device-manager/device-online-fallback.d.ts +1 -1
  40. package/dist/builtins/hub-forwarder/index.js +2 -2
  41. package/dist/builtins/hub-forwarder/index.mjs +2 -2
  42. package/dist/builtins/keychain/index.js +3 -3
  43. package/dist/builtins/keychain/index.mjs +3 -3
  44. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  45. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  46. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  47. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  48. package/dist/builtins/local-network/local-network.addon.js +2 -2
  49. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  50. package/dist/builtins/loki-logging/index.js +1 -1
  51. package/dist/builtins/loki-logging/index.mjs +1 -1
  52. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +1 -1
  53. package/dist/builtins/native-metrics/native-metrics.addon.js +3 -3
  54. package/dist/builtins/native-metrics/native-metrics.addon.mjs +3 -3
  55. package/dist/builtins/native-metrics/thread-cpu-sampler.d.ts +1 -1
  56. package/dist/builtins/platform-probe/index.js +1 -1
  57. package/dist/builtins/platform-probe/index.mjs +1 -1
  58. package/dist/builtins/record-entries/index.js +1 -1
  59. package/dist/builtins/record-entries/index.mjs +1 -1
  60. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  61. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  62. package/dist/builtins/snapshot/index.js +1 -1
  63. package/dist/builtins/snapshot/index.mjs +1 -1
  64. package/dist/builtins/snapshot/snapshot-fatigue.d.ts +1 -1
  65. package/dist/builtins/snapshot/snapshot-link-url.d.ts +1 -1
  66. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  67. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  68. package/dist/builtins/sqlite-storage/filter-compiler.d.ts +1 -1
  69. package/dist/builtins/sqlite-storage/index.js +1 -1
  70. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  71. package/dist/builtins/sqlite-storage/prefix-range.d.ts +2 -2
  72. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  73. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  74. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  75. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  76. package/dist/builtins/system-config/system-config.addon.js +3 -3
  77. package/dist/builtins/system-config/system-config.addon.mjs +280 -280
  78. package/dist/builtins/winston-logging/index.js +2 -2
  79. package/dist/builtins/winston-logging/index.mjs +2 -2
  80. package/dist/{composition-sources-BrDtOpfE.mjs → composition-sources-CC13wGKL.mjs} +1 -1
  81. package/dist/{composition-sources-BmhhDWIc.js → composition-sources-CQxrCexr.js} +1 -1
  82. package/dist/{constants-BVJrLycr.js → constants-Bt0NFXDm.js} +1 -1
  83. package/dist/{constants-xuLNi4a2.mjs → constants-DMB-ex5z.mjs} +1 -1
  84. package/dist/{device-ca-DgLZPn5R.js → device-ca-CSLMfr4Q.js} +1 -1
  85. package/dist/{device-ca-DKOZSFED.mjs → device-ca-HQKcvofS.mjs} +1 -1
  86. package/dist/{dist--v3KMKa1.js → dist-2gZWO597.js} +2215 -241
  87. package/dist/{dist-BIJXQo_j.mjs → dist-DvKEKSap.mjs} +2215 -241
  88. package/dist/file-host-worker.js +1 -1
  89. package/dist/file-host-worker.mjs +1 -1
  90. package/dist/{formatter-B7qW8bPJ.mjs → formatter-DkYZ4LXp.mjs} +1 -1
  91. package/dist/{formatter-DqAKDlvN.js → formatter-xbxeV4GD.js} +1 -1
  92. package/dist/{hub-mdns-ciao-C3NJsOvK.js → hub-mdns-ciao-Bs3cn9C1.js} +2 -2
  93. package/dist/{hub-mdns-ciao-DMFXIlMY.mjs → hub-mdns-ciao-CVf6mxIZ.mjs} +2 -2
  94. package/dist/index.js +131 -17
  95. package/dist/index.mjs +129 -18
  96. package/dist/kernel/addon-installer.d.ts +25 -5
  97. package/dist/kernel/addon-version-policy.d.ts +26 -0
  98. package/dist/kernel/heap-watch.d.ts +1 -1
  99. package/dist/kernel/index.d.ts +2 -0
  100. package/dist/kernel/moleculer/trpc-links.d.ts +1 -1
  101. package/dist/kernel/transport/socket-channel.d.ts +1 -1
  102. package/dist/logging/formatter.d.ts +1 -1
  103. package/dist/{restore-archive-DAEsvFY6.mjs → restore-archive-EFYeCdrG.mjs} +78 -78
  104. package/dist/{restore-archive-DpkdAuFf.js → restore-archive-_mgadWlk.js} +1 -1
  105. package/dist/{retention-DbunrLR4.mjs → retention-FFJW3-3P.mjs} +1 -1
  106. package/dist/{retention-C71dNCIh.js → retention-qugQGYuY.js} +1 -1
  107. package/dist/{wal-maintenance-CsGk4kYn.js → wal-maintenance-DbUC_wdC.js} +0 -0
  108. package/dist/{wal-maintenance-DYAJwPWu.mjs → wal-maintenance-TCW_esAc.mjs} +0 -0
  109. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { i as __require } from "./chunk-CNf5ZN-e.mjs";
2
- import { Ci as ReadinessTimeoutError, Cn as isCollectionArrayMethod, Da as userError, Dn as isObjectInput, Fi as asJsonObject$1, Gi as createEvent$1, Ii as asNumber, J as METHOD_ACCESS_MAP, Ji as defineRecordKinds, Jn as objectInputDeclaresAddonId, K as LOG_LEVEL_RANK, Li as asString$1, Mr as supportedRuntimes, Oa as withoutCallerStamp, On as isVoidInput, Pn as lifecycleJobSchema, Rn as logLevelAtMost, Si as ReadinessRegistry, Sn as isArrayOutputSchema, Yi as emitDownForOwnedCaps, Yn as objectInputDeclaresRequiredDeviceId, Zi as expandCapMethods, _ as CatalogFileSchema, _r as scopesAllowAddon, ai as DATAPLANE_SECRET_HEADER$1, ba as scopeKey, fn as extractNestedAddonId, ga as readinessKey, ii as CALLER_STAMPED_CAPABILITIES$1, ka as EventCategory$1, kn as kebabToCamel$1, ma as parseJsonUnknown, mr as resolveMethodAuth, n as AGENT_MDNS_TXT_KEYS, nr as procedureAuthKey, oi as DEVICE_SETTINGS_CONTRIBUTION_METHODS, pa as parseJsonObject, r as ALL_CAPABILITY_DEFINITIONS, si as DEVICE_STATUS_METHOD, t as AGENT_MDNS_SERVICE_TYPE, ti as errMsg$1, u as CATALOG_LANGS, va as resolveCapMount, vn as interpolate, vr as scopesAllowDeviceCap, vt as addonSettingsCapability, wr as splitTranslationRef, xi as RUNTIME_DEFAULTS, zn as looseSchema } from "./dist-BIJXQo_j.mjs";
3
- import { d as JWT_SIGNING_KEY_REF, f as JwtSigningKeyUnavailableError, g as processJwtSigningKey, i as generateDeviceCa, l as verifyDeviceLeaf, m as getProcessJwtSigningKeyState, n as DEVICE_CA_KEY_REF, o as issueDeviceLeaf, p as SYSTEM_SECRET_OWNER, s as loadDeviceCa, u as verifyDeviceSignature, v as staticJwtSigningKey } from "./device-ca-DKOZSFED.mjs";
2
+ import { Ci as ReadinessTimeoutError, Cn as isCollectionArrayMethod, Da as userError, Dn as isObjectInput, Fi as asJsonObject$1, Gi as createEvent$1, Ii as asNumber, J as METHOD_ACCESS_MAP, Ji as defineRecordKinds, Jn as objectInputDeclaresAddonId, K as LOG_LEVEL_RANK, Li as asString$1, Mr as supportedRuntimes, Oa as withoutCallerStamp, On as isVoidInput, Pn as lifecycleJobSchema, Rn as logLevelAtMost, Si as ReadinessRegistry, Sn as isArrayOutputSchema, Yi as emitDownForOwnedCaps, Yn as objectInputDeclaresRequiredDeviceId, Zi as expandCapMethods, _ as CatalogFileSchema, _r as scopesAllowAddon, ai as DATAPLANE_SECRET_HEADER$1, ba as scopeKey, fn as extractNestedAddonId, ga as readinessKey, ii as CALLER_STAMPED_CAPABILITIES$1, ka as EventCategory$1, kn as kebabToCamel$1, ma as parseJsonUnknown, mr as resolveMethodAuth, n as AGENT_MDNS_TXT_KEYS, nr as procedureAuthKey, oi as DEVICE_SETTINGS_CONTRIBUTION_METHODS, pa as parseJsonObject, r as ALL_CAPABILITY_DEFINITIONS, si as DEVICE_STATUS_METHOD, t as AGENT_MDNS_SERVICE_TYPE, ti as errMsg$1, u as CATALOG_LANGS, va as resolveCapMount, vn as interpolate, vr as scopesAllowDeviceCap, vt as addonSettingsCapability, wr as splitTranslationRef, xi as RUNTIME_DEFAULTS, zn as looseSchema } from "./dist-DvKEKSap.mjs";
3
+ import { d as JWT_SIGNING_KEY_REF, f as JwtSigningKeyUnavailableError, g as processJwtSigningKey, i as generateDeviceCa, l as verifyDeviceLeaf, m as getProcessJwtSigningKeyState, n as DEVICE_CA_KEY_REF, o as issueDeviceLeaf, p as SYSTEM_SECRET_OWNER, s as loadDeviceCa, u as verifyDeviceSignature, v as staticJwtSigningKey } from "./device-ca-HQKcvofS.mjs";
4
4
  import { t as require_read_all_rows } from "./read-all-rows-TaPqdWNF.mjs";
5
5
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
6
6
  import "./builtins/alerts/index.mjs";
@@ -8,7 +8,7 @@ import { CalendarsAddon } from "./builtins/calendars/calendars.addon.mjs";
8
8
  import "./builtins/calendars/index.mjs";
9
9
  import { ComposerAddon } from "./builtins/composer/composer.addon.mjs";
10
10
  import "./builtins/composer/index.mjs";
11
- import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
11
+ import { t as formatLogLine } from "./formatter-DkYZ4LXp.mjs";
12
12
  import { ConsoleDestination, ConsoleLoggingAddon } from "./builtins/console-logging/index.mjs";
13
13
  import { t as loadPrefixed } from "./prefix-walk-DAOBSyH1.mjs";
14
14
  import { CoreBlocksAddon, o as createAddonSettingsStore } from "./builtins/core-blocks/core-blocks.addon.mjs";
@@ -25,21 +25,21 @@ import { LokiDestination, LokiLoggingAddon } from "./builtins/loki-logging/index
25
25
  import NativeMetricsAddon, { a as NativeMetricsProvider, n as nodeProcReader, r as parseProcStat } from "./builtins/native-metrics/native-metrics.addon.mjs";
26
26
  import { DeviceHistoryAddon } from "./builtins/device-history/device-history.addon.mjs";
27
27
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./builtins/sqlite-storage/filesystem-storage.addon.mjs";
28
- import { C as RecordsEngine, l as SqliteSettingsBackend } from "./wal-maintenance-DYAJwPWu.mjs";
28
+ import { C as RecordsEngine, l as SqliteSettingsBackend } from "./wal-maintenance-TCW_esAc.mjs";
29
29
  import { SqliteSettingsAddon } from "./builtins/sqlite-storage/sqlite-settings.addon.mjs";
30
30
  import { ConfigStore, DeviceStore } from "./builtins/sqlite-storage/index.mjs";
31
31
  import { StorageOrchestratorAddon, a as stripForwardedCaller, i as createHubCapForwardService, l as STORAGE_DRAIN_STATE_LEGACY, n as HUB_CAP_FWD_ACTION, o as buildStorageLocationRegistry, r as HUB_CAP_FWD_SERVICE, t as StorageOrchestratorService, u as storageOrchestratorRecordKinds } from "./builtins/storage-orchestrator/storage-orchestrator.addon.mjs";
32
32
  import "./builtins/storage-orchestrator/index.mjs";
33
- import { A as buildNameConstraintSet, B as setProcessAgentHttpsNames, C as LEAF_RENEWAL_WINDOW_DAYS, E as evaluateExistingCert, F as readNameConstraints, I as AGENT_HTTPS_NAMES_COLLECTION, L as AGENT_HTTPS_NAMES_COLUMNS, M as isLocalOnlyHostname, N as permitsIdentity, O as PERMITTED_DNS_SUFFIXES, P as permitsName, R as AgentHttpsNames, S as CA_VALIDITY_DAYS, T as SERVER_AUTH_OID, a as collectAgentNames, b as collectCertIdentity, c as installAgentHttps, d as issueAgentHttpsLeaf, f as loadAgentHttps, h as CA_COMMON_NAME, i as certificateNames, j as isConstrainedCa, k as PERMITTED_IP_RANGES, l as isContainerBridgeAddress, m as pinnedHttpsCaFingerprint, n as acceptAgentSans, o as createAgentHttpsRequest, p as pemDigest, r as agentHttpsPaths, s as describeHttpsLeaf, t as AgentHttpsInstallError, u as isPrivateAddress, w as MAX_LEAF_VALIDITY_DAYS, x as systemHostFacts, y as localCaCommonName, z as getProcessAgentHttpsNames } from "./agent-https-doVPSeiy.mjs";
34
- import { a as MESH_CA_KEY_REF, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY } from "./constants-xuLNi4a2.mjs";
33
+ import { A as buildNameConstraintSet, B as setProcessAgentHttpsNames, C as LEAF_RENEWAL_WINDOW_DAYS, E as evaluateExistingCert, F as readNameConstraints, I as AGENT_HTTPS_NAMES_COLLECTION, L as AGENT_HTTPS_NAMES_COLUMNS, M as isLocalOnlyHostname, N as permitsIdentity, O as PERMITTED_DNS_SUFFIXES, P as permitsName, R as AgentHttpsNames, S as CA_VALIDITY_DAYS, T as SERVER_AUTH_OID, a as collectAgentNames, b as collectCertIdentity, c as installAgentHttps, d as issueAgentHttpsLeaf, f as loadAgentHttps, h as CA_COMMON_NAME, i as certificateNames, j as isConstrainedCa, k as PERMITTED_IP_RANGES, l as isContainerBridgeAddress, m as pinnedHttpsCaFingerprint, n as acceptAgentSans, o as createAgentHttpsRequest, p as pemDigest, r as agentHttpsPaths, s as describeHttpsLeaf, t as AgentHttpsInstallError, u as isPrivateAddress, w as MAX_LEAF_VALIDITY_DAYS, x as systemHostFacts, y as localCaCommonName, z as getProcessAgentHttpsNames } from "./agent-https-NP141VCW.mjs";
34
+ import { a as MESH_CA_KEY_REF, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY } from "./constants-DMB-ex5z.mjs";
35
35
  import { $ as generateMeshKeyPair, A as setProcessMeshPeerTransportLookup, B as describeMeshLeaf, C as setProcessMeshTlsEnabler, D as getProcessPeerLeaf, E as getProcessNodeMeshTransport, F as setProcessMeshTlsListenerState, G as MeshCaKeeper, H as setProcessMeshCertificateRegistry, I as MESH_NODE_CERTIFICATES_COLLECTION, J as caFingerprint, K as getProcessMeshCaState, L as MESH_NODE_CERTIFICATES_COLUMNS, M as revokeMeshCertificate, N as getProcessMeshTlsListenerState, O as isProcessVerifiedMeshPeer, P as openMeshTlsWhenRevocationsLoaded, Q as generateMeshCa, R as MeshCertificateRegistry, S as ServiceBroker, SystemConfigAddon, T as emitProcessNodeRegistered, U as MeshCrl, V as getProcessMeshCertificateRegistry, W as processMeshCrl, X as createMeshCsrPem, Y as caFingerprintCompact, Z as exportMeshPrivateKeyPem, _ as signPairingProof, _t as readCidrSetting, a as hubHostFromMeshAddress, at as AGENT_UI_UNLOCK_TTL_MS, b as TlsTcpTransporter, c as PAIRING_MAX_SESSIONS, ct as AGENT_UI_UNLOCK_VERSION, d as PAIRING_PROTOCOL, dt as mintAgentUiUnlockTicket, et as isValidAgentNodeId, f as PAIRING_TTL_MS, ft as parseAgentDashboardOrigins, g as keyFingerprintShort, gt as parseCidrList, h as describeCsr, ht as normalizeIp, i as AgentPairing, it as AGENT_DASHBOARD_ORIGINS_FIELD, j as renewMeshCertificate, k as onProcessNodeRegistered, l as PAIRING_PATHS, lt as UnlockTicketJtiStore, m as computePairingSas, mt as createCidrMatcher, n as HubPairing, nt as issueMeshLeafFromCsr, o as PAIRING_CODE_DIGITS, ot as AGENT_UI_UNLOCK_TYP, p as computePairingCommitment, pt as verifyAgentUiUnlockTicket, q as requireProcessMeshCa, r as PairingHttpError, rt as loadMeshCa, s as PAIRING_MAX_CODE_ATTEMPTS, st as AGENT_UI_UNLOCK_USE, tt as issueMeshLeafForNode, u as PAIRING_PIN_DIGITS, ut as isAllowedAgentDashboardReturnTo, v as verifyPairingProof, w as dropProcessPeer, x as Errors, y as MESH_TLS_PORT_HELLO_FIELD, z as RENEWAL_ABANDONED } from "./builtins/system-config/system-config.addon.mjs";
36
36
  import "./builtins/system-config/index.mjs";
37
37
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
38
38
  import { C as isModelDownloaded, T as revisionWeightUrl, _ as downloadFile, a as startEventLoopStallMonitor, b as fetchJson, c as createAuthenticatedFileServer, d as resolveFilePath, f as ModelDownloadService, g as deleteModelFromDisk, h as collectModelFiles, i as attributeStall, l as parseRangeHeader, m as adoptModelRevisions, n as STALL_REPORT_MS, o as createFileDataPlaneHandler, r as STALL_TICK_MS, s as contentTypeFor, t as CustomActionRegistry, u as parseTokenizedUrl, v as downloadModel, w as resolveFormatRevision, x as getModelFilePath, y as ensureModel } from "./custom-action-registry-DZSCLBuT.mjs";
39
- import { A as allFamiliesListenHost, C as caReplacementMarkerFile, D as replaceUnconstrainedLocalCa, E as reissueTlsLeaf, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as retirePreviousLocalCa, P as readLanHttpState, S as validateUploadedTls, T as loadTlsCert, _ as splitPemCertificates, a as storeUploadedCertificate, b as chainsToPublicRoot, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as useStoredUploadedCertificate, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as ensureTlsCert, x as checkUploadedCa, y as writeTlsMode } from "./hub-mdns-ciao-DMFXIlMY.mjs";
39
+ import { A as allFamiliesListenHost, C as caReplacementMarkerFile, D as replaceUnconstrainedLocalCa, E as reissueTlsLeaf, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as retirePreviousLocalCa, P as readLanHttpState, S as validateUploadedTls, T as loadTlsCert, _ as splitPemCertificates, a as storeUploadedCertificate, b as chainsToPublicRoot, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as useStoredUploadedCertificate, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as ensureTlsCert, x as checkUploadedCa, y as writeTlsMode } from "./hub-mdns-ciao-CVf6mxIZ.mjs";
40
40
  import { n as getPlatformKeychainKey, r as setPlatformKeychainKey, t as clearPlatformKeychainKey } from "./platform-key-source-BWlq0jjn.mjs";
41
41
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Di9daRwI.mjs";
42
- import { _ as backupRecordStoresOf, c as BackupDecryptError, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, h as readBackupEncryptionHeader, l as BackupKeyFormatError, r as prepareRestoreArchive, s as SystemBackupService, t as BackupKeyRequiredError, u as BackupKeyMismatchError } from "./restore-archive-DAEsvFY6.mjs";
42
+ import { _ as backupRecordStoresOf, c as BackupDecryptError, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, h as readBackupEncryptionHeader, l as BackupKeyFormatError, r as prepareRestoreArchive, s as SystemBackupService, t as BackupKeyRequiredError, u as BackupKeyMismatchError } from "./restore-archive-EFYeCdrG.mjs";
43
43
  import { r as nodeCoralFs, t as classifyCoralAccelerator } from "./coral-accelerators-DBlgWB8k.mjs";
44
44
  import { z } from "zod";
45
45
  import * as crypto$1 from "node:crypto";
@@ -7525,6 +7525,34 @@ var AddonManifest = class {
7525
7525
  }
7526
7526
  };
7527
7527
  //#endregion
7528
+ //#region src/kernel/addon-version-policy.ts
7529
+ /**
7530
+ * Which version an installed addon should be running (D942).
7531
+ *
7532
+ * The hub's target is the registry dist-tag `latest`. An agent's target is
7533
+ * the hub's installed version — never the registry, and never "strictly
7534
+ * newer". A missing target is an unreadable authority: a failed read changes
7535
+ * nothing (D49), including never a move downward because the registry or the
7536
+ * hub could not be asked.
7537
+ */
7538
+ var ADDON_VERSION_REASON_REGISTRY_LATEST = "installed version differs from registry latest";
7539
+ var ADDON_VERSION_REASON_HUB = "agent follows the hub installed version";
7540
+ /**
7541
+ * Move when `installed` is not `target`. `target === null` (or empty) means
7542
+ * the authority could not be read — keep whatever is installed.
7543
+ * `installed === null` with a known target is a first install of that target.
7544
+ */
7545
+ function decideAddonVersionMove(installed, target, reason) {
7546
+ if (target === null || target.length === 0) return { move: false };
7547
+ if (installed !== null && installed === target) return { move: false };
7548
+ return {
7549
+ move: true,
7550
+ from: installed ?? "absent",
7551
+ to: target,
7552
+ reason
7553
+ };
7554
+ }
7555
+ //#endregion
7528
7556
  //#region src/kernel/deps/closure-dedupe.ts
7529
7557
  /**
7530
7558
  * Closure dedupe — stop copying into every addon the libraries the server
@@ -8279,6 +8307,25 @@ function readPackageJson(pkgJsonPath) {
8279
8307
  function shouldSkipClosureProvidedSeed(packageName, isResolvable) {
8280
8308
  return packageName === "@camstack/system" && isResolvable;
8281
8309
  }
8310
+ /** How long a boot-time `dist-tags.latest` read may take before it is "unreadable". */
8311
+ var REGISTRY_LATEST_TIMEOUT_MS = 15e3;
8312
+ function readInstalledPackageVersion(addonDir) {
8313
+ try {
8314
+ const raw = JSON.parse(fs$1.readFileSync(path$1.join(addonDir, "package.json"), "utf-8"));
8315
+ if (raw === null || typeof raw !== "object") return null;
8316
+ const version = Reflect.get(raw, "version");
8317
+ return typeof version === "string" && version.length > 0 ? version : null;
8318
+ } catch {
8319
+ return null;
8320
+ }
8321
+ }
8322
+ function distTagLatest(body) {
8323
+ if (body === null || typeof body !== "object") return null;
8324
+ const tags = Reflect.get(body, "dist-tags");
8325
+ if (tags === null || typeof tags !== "object") return null;
8326
+ const latest = Reflect.get(tags, "latest");
8327
+ return typeof latest === "string" && latest.length > 0 ? latest : null;
8328
+ }
8282
8329
  /** Minimal no-op logger for default parameter */
8283
8330
  var noopLogger = {
8284
8331
  debug() {},
@@ -8312,7 +8359,7 @@ var STAGING_RESIDUE_MIN_AGE_MS = 30 * 6e4;
8312
8359
  * npm error path …/.staging/install-14820-2026-08-07T12-28-28-875Z/package/package.json
8313
8360
  *
8314
8361
  * which the propagation then reported as `runtime dependency install failed`.
8315
- * Observed on the Mac desktop agent and on little-unraid on 2026-08-07.
8362
+ * Observed on the Mac desktop agent and on agent-a on 2026-08-07.
8316
8363
  *
8317
8364
  * So a sweep only removes what cannot be live: not a tree this process is
8318
8365
  * building, and not one young enough to belong to anybody's in-flight install.
@@ -8329,6 +8376,7 @@ var AddonInstaller = class AddonInstaller {
8329
8376
  isPackageResolvable;
8330
8377
  /** Test seam — production resolves via `CAMSTACK_FRAMEWORK_DIR`. */
8331
8378
  closureNodeModulesDir;
8379
+ resolveLatestVersionOverride;
8332
8380
  /**
8333
8381
  * Central manifest of installed addons. Tracks version + source +
8334
8382
  * timestamps + last-backup pointer per package, written atomically
@@ -8351,6 +8399,7 @@ var AddonInstaller = class AddonInstaller {
8351
8399
  this.manifest = new AddonManifest(config.addonsDir);
8352
8400
  this.isPackageResolvable = config.isPackageResolvable;
8353
8401
  this.closureNodeModulesDir = config.closureNodeModulesDir;
8402
+ this.resolveLatestVersionOverride = config.resolveLatestVersion;
8354
8403
  if (config.installSource) this.installSource = config.installSource;
8355
8404
  else this.installSource = "npm";
8356
8405
  }
@@ -8464,10 +8513,13 @@ var AddonInstaller = class AddonInstaller {
8464
8513
  * defaults to npm in production.
8465
8514
  *
8466
8515
  * There is no version argument and there is deliberately no pin: the system is
8467
- * addons-agnostic and `latest` is the whole contract at first boot (operator,
8468
- * 2026-08-13). A copy already under the addon root is never replaced either —
8469
- * bootstrap is seed-only, and overwriting a deployed bundle would be an
8470
- * un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
8516
+ * addons-agnostic and `latest` is the whole contract (operator, 2026-08-13,
8517
+ * restated 2026-10-25 — D942). A copy already under the addon root is left
8518
+ * alone when this installer is not on the npm source (a workspace or a
8519
+ * bundled desktop seed) and when the package is the closure-provided
8520
+ * `@camstack/system` (a copy there would shadow the closure). Every other
8521
+ * required addon already on disk is moved to registry `latest` when that
8522
+ * tag differs, higher or lower. An unreadable registry changes nothing.
8471
8523
  *
8472
8524
  * @param packages — optional custom package list (default: REQUIRED_PACKAGES)
8473
8525
  */
@@ -8483,7 +8535,16 @@ var AddonInstaller = class AddonInstaller {
8483
8535
  for (const packageName of pkgList) {
8484
8536
  const addonDir = path$1.join(this.addonsDir, packageName);
8485
8537
  if (fs$1.existsSync(path$1.join(addonDir, "package.json"))) {
8486
- this.logger.debug(`${packageName} — already installed, skipping`);
8538
+ if (this.installSource !== "npm" || shouldSkipClosureProvidedSeed(packageName, this.isResolvableFromClosure(packageName))) {
8539
+ this.logger.debug(`${packageName} — already installed, skipping`);
8540
+ continue;
8541
+ }
8542
+ try {
8543
+ await this.followInstalledAddonToLatest(packageName, addonDir);
8544
+ } catch (err) {
8545
+ const msg = errMsg$1(err);
8546
+ this.logger.error(`Failed to move ${packageName} to registry latest`, { meta: { error: msg } });
8547
+ }
8487
8548
  continue;
8488
8549
  }
8489
8550
  if (shouldSkipClosureProvidedSeed(packageName, this.isResolvableFromClosure(packageName))) {
@@ -8508,6 +8569,56 @@ var AddonInstaller = class AddonInstaller {
8508
8569
  }
8509
8570
  }
8510
8571
  /**
8572
+ * Move an already-installed required addon to registry `latest` when the
8573
+ * installed version differs. `applyUpdate` keeps the previous tree as a
8574
+ * backup and restores it if the install throws. A null latest (registry
8575
+ * down, or no tag) leaves the copy where it is.
8576
+ */
8577
+ async followInstalledAddonToLatest(packageName, addonDir) {
8578
+ const installedVersion = readInstalledPackageVersion(addonDir);
8579
+ const decision = decideAddonVersionMove(installedVersion, await this.readRegistryLatest(packageName), ADDON_VERSION_REASON_REGISTRY_LATEST);
8580
+ if (!decision.move) {
8581
+ this.logger.debug(`${packageName} — installed copy matches registry latest, or the registry could not be read`);
8582
+ return;
8583
+ }
8584
+ this.logger.info(`${packageName} — moving ${decision.from} → ${decision.to}: ${decision.reason}`, { meta: {
8585
+ from: decision.from,
8586
+ to: decision.to,
8587
+ reason: decision.reason
8588
+ } });
8589
+ if (this.manifest.get(packageName) == null) this.manifest.upsert(packageName, {
8590
+ version: installedVersion ?? "0.0.0",
8591
+ source: "npm"
8592
+ });
8593
+ await this.applyUpdate(packageName, decision.to);
8594
+ }
8595
+ /** `dist-tags.latest`, or `null` when the registry cannot be read. */
8596
+ async readRegistryLatest(packageName) {
8597
+ if (this.resolveLatestVersionOverride) try {
8598
+ return await this.resolveLatestVersionOverride(packageName);
8599
+ } catch (err) {
8600
+ this.logger.warn(`${packageName} — registry unreadable, leaving the installed copy`, { meta: { error: errMsg$1(err) } });
8601
+ return null;
8602
+ }
8603
+ return this.fetchRegistryLatest(packageName);
8604
+ }
8605
+ async fetchRegistryLatest(packageName) {
8606
+ const metadataUrl = `${(this.registry ?? "https://registry.npmjs.org").replace(/\/+$/, "")}/${encodeURIComponent(packageName).replace(/^%40/, "@")}`;
8607
+ try {
8608
+ const metadataRes = await fetch(metadataUrl, { signal: AbortSignal.timeout(REGISTRY_LATEST_TIMEOUT_MS) });
8609
+ if (!metadataRes.ok) {
8610
+ this.logger.warn(`${packageName} — registry answered ${metadataRes.status}, leaving the installed copy`);
8611
+ return null;
8612
+ }
8613
+ const latest = distTagLatest(await metadataRes.json());
8614
+ if (latest === null) this.logger.warn(`${packageName} — registry returned no dist-tags.latest, leaving the installed copy`);
8615
+ return latest;
8616
+ } catch (err) {
8617
+ this.logger.warn(`${packageName} — registry unreadable, leaving the installed copy`, { meta: { error: errMsg$1(err) } });
8618
+ return null;
8619
+ }
8620
+ }
8621
+ /**
8511
8622
  * Reconcile the install manifest against the addons actually present on
8512
8623
  * disk: register seeded addons, correct a version that disagrees with the
8513
8624
  * installed `package.json`, and drop entries naming a directory that does
@@ -9722,7 +9833,7 @@ function isDirEntry(entry, parentDir) {
9722
9833
  *
9723
9834
  * Measured 2026-08-07/08 on the live cluster:
9724
9835
  *
9725
- * little-unraid `@camstack/system.bak-pre-unshadow` — no package.json left,
9836
+ * agent-a `@camstack/system.bak-pre-unshadow` — no package.json left,
9726
9837
  * so not loadable, but the agent main process held five live
9727
9838
  * mappings of `better_sqlite3.node` out of it (D87).
9728
9839
  * macmini `@camstack/system.bak-pre-1272-1786129145` — still declares
@@ -19322,7 +19433,7 @@ var SocketChannel = class {
19322
19433
  * `res` frame, or the socket's `close` (which drains `pending`) — so a peer
19323
19434
  * that receives the request and then neither answers nor closes leaves the
19324
19435
  * caller pending forever. That is a wedged handler, or a half-open socket
19325
- * after a child died without a clean teardown, and it is how camera 615 spent
19436
+ * after a child died without a clean teardown, and it is how camera 101 spent
19326
19437
  * 30+ minutes with every inference permit held by a call that was never
19327
19438
  * coming back.
19328
19439
  */
@@ -22300,7 +22411,7 @@ function buildLinkChain(target, localResolver, hookup) {
22300
22411
  /**
22301
22412
  * Can libva initialise the VA driver on this node's render node? (D926)
22302
22413
  *
22303
- * Measured 2026-10-23 (intel-1.2.509, hub + little-unraid): Intel's iHD 25.2.4
22414
+ * Measured 2026-10-23 (intel-1.2.509, hub + agent-a): Intel's iHD 25.2.4
22304
22415
  * exports only `__vaDriverInit_1_22`, the container's Ubuntu libva 2.20 looks
22305
22416
  * for `_1_20`, and `vaInitialize` failed — while the resolver kept offering
22306
22417
  * `qsv, vaapi`. Every session tried, failed and fell back to software: 722
@@ -27767,4 +27878,4 @@ function resetCatalogRegistryForTests() {
27767
27878
  }
27768
27879
  //#endregion
27769
27880
  var readAllRows = import_read_all_rows.readAllRows;
27770
- export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_DASHBOARD_ORIGINS_FIELD, AGENT_HTTPS_NAMES_COLLECTION, AGENT_HTTPS_NAMES_COLUMNS, AGENT_READINESS_SERVICE_NAME, AGENT_UI_UNLOCK_TTL_MS, AGENT_UI_UNLOCK_TYP, AGENT_UI_UNLOCK_USE, AGENT_UI_UNLOCK_VERSION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRefusedError, AddonRouteRegistry, AgentHttpsInstallError, AgentHttpsNames, AgentMdnsAdvertiser, AgentMeshIdentityGate, AgentPairing, AlertCenterAddon, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, CatalogRegistry, ClusterNodeHistoryBodySchema, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_CA_KEY_REF, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceCaStore, DeviceCredentialManager, DeviceHistoryAddon, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, HubPairing, INFRA_CAPABILITIES, INTEGRATIONS_LEGACY, INTEGRATION_SETTINGS_LEGACY, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_NODE_CERTIFICATES_COLLECTION, MESH_NODE_CERTIFICATES_COLUMNS, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, MESH_TLS_PORT_HELLO_FIELD, METHOD_ACCESS_MAP, MeshCaKeeper, MeshCertificateRegistry, MeshCrl, MeshIdentityGate, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PAIRING_CODE_DIGITS, PAIRING_MAX_CODE_ATTEMPTS, PAIRING_MAX_SESSIONS, PAIRING_PATHS, PAIRING_PIN_DIGITS, PAIRING_PROTOCOL, PAIRING_TTL_MS, PARENT_ROUTED_PROVIDER_ADDON_ID, PERMITTED_DNS_SUFFIXES, PERMITTED_IP_RANGES, PREVIOUS_LEAF_GRACE_MS, PYTHON_VERSION, PairingHttpError, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RENEWAL_ABANDONED, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, RecordsEngine, ReplEngine, RingBuffer, SERVER_AUTH_OID, SERVER_NAMESPACE, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORAGE_DRAIN_STATE_LEGACY, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UnlockTicketJtiStore, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, acceptAgentSans, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, agentHttpsPaths, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, asBrokerLike, attachUserManagementInternal, attributeStall, backupOrchestratorRecordKinds, backupRecordStoresOf, bareAddonOf, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildAgentAnnouncement, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNameConstraintSet, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, buildTransporter, builderMountedCapNames, caFingerprint, caFingerprintCompact, caReplacementMarkerFile, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, catalogNamespaceOf, certificateNames, chainsToPublicRoot, checkUploadedCa, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterAgentRecordKinds, clusterEventTopic, clusterNodeHistoryRecordKind, collectAgentNames, collectCertIdentity, collectModelFiles, compileLogFilter, computePairingCommitment, computePairingSas, connectBrokerTransport, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createAgentEventScope, createAgentHttpsRequest, createAgentTransport, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCiaoPublisher, createCidrMatcher, createCoreCapService, createCoreCatalogRegistry, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createKernelInferenceEngine, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, currentBrokerTransporter, deleteModelFromDisk, deriveAgentListenPort, describeCsr, describeHttpsLeaf, describeMeshLeaf, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, disconnectBrokerTransport, downloadBinary, downloadFile, downloadModel, dropProcessPeer, emitDownForOwnedCaps, emitHeapDiagnosticReport, emitProcessNodeRegistered, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, filterIsEmpty, findAddonRefusal, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateDeviceCa, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getCatalogRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessAgentHttpsNames, getProcessJwtSigningKeyState, getProcessMeshCaState, getProcessMeshCertificateRegistry, getProcessMeshTlsListenerState, getProcessNodeMeshTransport, getProcessPeerLeaf, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, heapSpaceField, hostNodeIdOf, hubHostFromMeshAddress, hubMainRssBudget, installAgentHttps, installBrokerTransporter, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, integrationRegistryRecordKinds, ipcParentLink, isAddonDeploySource, isAllowedAgentDashboardReturnTo, isArrayBufferCensusReport, isArrayOutputSchema, isCollectionArrayMethod, isConstrainedCa, isContainerBridgeAddress, isCredentialKeyName, isInfraCapability, isInstalledTransporter, isLocalOnlyHostname, isModelDownloaded, isPeerEventPacket, isPrivateAddress, isProcessVerifiedMeshPeer, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isValidAgentNodeId, isolatedBuiltinPhase, issueAgentHttpsLeaf, issueDeviceLeaf, issueMeshLeafForNode, issueMeshLeafFromCsr, keyFingerprintShort, leafFingerprintOf, levelRank, lineContainsText, lineMatches, loadAgentHttps, loadDeviceCa, loadMeshCa, loadTlsCert, localCaCommonName, localEndpointPath, localProviderLink, localSupportedPythonRuntimes, mapSignalsToInferenceHardware, meshErrorType, mintAgentUiUnlockTicket, mountNativeCapService, nextRssBudgetState, normalizeIp, onProcessNodeRegistered, onSessionsRevoked, openMeshTlsWhenRevocationsLoaded, originNodeOf, overlayGetStatus, parseAgentDashboardOrigins, parseCapAction, parseCidrList, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, pemDigest, permitsIdentity, permitsName, pinnedHttpsCaFingerprint, preferencesLimitReasonOf, prepareBootTls, prepareRestoreArchive, probePlatform, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readAllRows, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readNameConstraints, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, renewMeshCertificate, replaceUnconstrainedLocalCa, requireProcessMeshCa, resetCatalogRegistryForTests, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, retirePreviousLocalCa, revertToGeneratedCertificate, revisionWeightUrl, revokeMeshCertificate, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessAgentHttpsNames, setProcessMeshCertificateRegistry, setProcessMeshPeerTransportLookup, setProcessMeshTlsEnabler, setProcessMeshTlsListenerState, setWrapperActive, shouldReclaim, signPairingProof, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storageOrchestratorRecordKinds, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, systemHostFacts, udsChildLogToWorkerEntry, useStoredUploadedCertificate, validateProviderRegistrations, validateUploadedTls, verifyAgentUiUnlockTicket, verifyDeviceLeaf, verifyDeviceSignature, verifyPairingProof, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };
27881
+ export { ADDON_VERSION_REASON_HUB, ADDON_VERSION_REASON_REGISTRY_LATEST, AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_DASHBOARD_ORIGINS_FIELD, AGENT_HTTPS_NAMES_COLLECTION, AGENT_HTTPS_NAMES_COLUMNS, AGENT_READINESS_SERVICE_NAME, AGENT_UI_UNLOCK_TTL_MS, AGENT_UI_UNLOCK_TYP, AGENT_UI_UNLOCK_USE, AGENT_UI_UNLOCK_VERSION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRefusedError, AddonRouteRegistry, AgentHttpsInstallError, AgentHttpsNames, AgentMdnsAdvertiser, AgentMeshIdentityGate, AgentPairing, AlertCenterAddon, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, CatalogRegistry, ClusterNodeHistoryBodySchema, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_CA_KEY_REF, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceCaStore, DeviceCredentialManager, DeviceHistoryAddon, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, HubPairing, INFRA_CAPABILITIES, INTEGRATIONS_LEGACY, INTEGRATION_SETTINGS_LEGACY, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_NODE_CERTIFICATES_COLLECTION, MESH_NODE_CERTIFICATES_COLUMNS, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, MESH_TLS_PORT_HELLO_FIELD, METHOD_ACCESS_MAP, MeshCaKeeper, MeshCertificateRegistry, MeshCrl, MeshIdentityGate, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PAIRING_CODE_DIGITS, PAIRING_MAX_CODE_ATTEMPTS, PAIRING_MAX_SESSIONS, PAIRING_PATHS, PAIRING_PIN_DIGITS, PAIRING_PROTOCOL, PAIRING_TTL_MS, PARENT_ROUTED_PROVIDER_ADDON_ID, PERMITTED_DNS_SUFFIXES, PERMITTED_IP_RANGES, PREVIOUS_LEAF_GRACE_MS, PYTHON_VERSION, PairingHttpError, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RENEWAL_ABANDONED, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, RecordsEngine, ReplEngine, RingBuffer, SERVER_AUTH_OID, SERVER_NAMESPACE, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORAGE_DRAIN_STATE_LEGACY, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UnlockTicketJtiStore, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, acceptAgentSans, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, agentHttpsPaths, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, asBrokerLike, attachUserManagementInternal, attributeStall, backupOrchestratorRecordKinds, backupRecordStoresOf, bareAddonOf, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildAgentAnnouncement, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNameConstraintSet, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, buildTransporter, builderMountedCapNames, caFingerprint, caFingerprintCompact, caReplacementMarkerFile, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, catalogNamespaceOf, certificateNames, chainsToPublicRoot, checkUploadedCa, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterAgentRecordKinds, clusterEventTopic, clusterNodeHistoryRecordKind, collectAgentNames, collectCertIdentity, collectModelFiles, compileLogFilter, computePairingCommitment, computePairingSas, connectBrokerTransport, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createAgentEventScope, createAgentHttpsRequest, createAgentTransport, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCiaoPublisher, createCidrMatcher, createCoreCapService, createCoreCatalogRegistry, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createKernelInferenceEngine, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, currentBrokerTransporter, decideAddonVersionMove, deleteModelFromDisk, deriveAgentListenPort, describeCsr, describeHttpsLeaf, describeMeshLeaf, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, disconnectBrokerTransport, downloadBinary, downloadFile, downloadModel, dropProcessPeer, emitDownForOwnedCaps, emitHeapDiagnosticReport, emitProcessNodeRegistered, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, filterIsEmpty, findAddonRefusal, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateDeviceCa, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getCatalogRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessAgentHttpsNames, getProcessJwtSigningKeyState, getProcessMeshCaState, getProcessMeshCertificateRegistry, getProcessMeshTlsListenerState, getProcessNodeMeshTransport, getProcessPeerLeaf, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, heapSpaceField, hostNodeIdOf, hubHostFromMeshAddress, hubMainRssBudget, installAgentHttps, installBrokerTransporter, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, integrationRegistryRecordKinds, ipcParentLink, isAddonDeploySource, isAllowedAgentDashboardReturnTo, isArrayBufferCensusReport, isArrayOutputSchema, isCollectionArrayMethod, isConstrainedCa, isContainerBridgeAddress, isCredentialKeyName, isInfraCapability, isInstalledTransporter, isLocalOnlyHostname, isModelDownloaded, isPeerEventPacket, isPrivateAddress, isProcessVerifiedMeshPeer, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isValidAgentNodeId, isolatedBuiltinPhase, issueAgentHttpsLeaf, issueDeviceLeaf, issueMeshLeafForNode, issueMeshLeafFromCsr, keyFingerprintShort, leafFingerprintOf, levelRank, lineContainsText, lineMatches, loadAgentHttps, loadDeviceCa, loadMeshCa, loadTlsCert, localCaCommonName, localEndpointPath, localProviderLink, localSupportedPythonRuntimes, mapSignalsToInferenceHardware, meshErrorType, mintAgentUiUnlockTicket, mountNativeCapService, nextRssBudgetState, normalizeIp, onProcessNodeRegistered, onSessionsRevoked, openMeshTlsWhenRevocationsLoaded, originNodeOf, overlayGetStatus, parseAgentDashboardOrigins, parseCapAction, parseCidrList, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, pemDigest, permitsIdentity, permitsName, pinnedHttpsCaFingerprint, preferencesLimitReasonOf, prepareBootTls, prepareRestoreArchive, probePlatform, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readAllRows, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readNameConstraints, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, renewMeshCertificate, replaceUnconstrainedLocalCa, requireProcessMeshCa, resetCatalogRegistryForTests, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, retirePreviousLocalCa, revertToGeneratedCertificate, revisionWeightUrl, revokeMeshCertificate, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessAgentHttpsNames, setProcessMeshCertificateRegistry, setProcessMeshPeerTransportLookup, setProcessMeshTlsEnabler, setProcessMeshTlsListenerState, setWrapperActive, shouldReclaim, signPairingProof, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storageOrchestratorRecordKinds, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, systemHostFacts, udsChildLogToWorkerEntry, useStoredUploadedCertificate, validateProviderRegistrations, validateUploadedTls, verifyAgentUiUnlockTicket, verifyDeviceLeaf, verifyDeviceSignature, verifyPairingProof, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };
@@ -61,6 +61,12 @@ export interface AddonInstallerConfig {
61
61
  * specs point it at a fabricated closure dir.
62
62
  */
63
63
  readonly closureNodeModulesDir?: string;
64
+ /**
65
+ * Resolve dist-tag `latest` for a package. `null` means the registry could
66
+ * not be read — the caller leaves the installed copy alone (D942, D49).
67
+ * Production leaves it unset and asks the registry; specs inject it.
68
+ */
69
+ readonly resolveLatestVersion?: (packageName: string) => Promise<string | null>;
64
70
  }
65
71
  import type { InstalledPackage, IScopedLogger } from "@camstack/types";
66
72
  import { AddonManifest } from "./addon-manifest.js";
@@ -108,7 +114,7 @@ export interface StagingEntryAge {
108
114
  * npm error path …/.staging/install-14820-2026-08-07T12-28-28-875Z/package/package.json
109
115
  *
110
116
  * which the propagation then reported as `runtime dependency install failed`.
111
- * Observed on the Mac desktop agent and on little-unraid on 2026-08-07.
117
+ * Observed on the Mac desktop agent and on agent-a on 2026-08-07.
112
118
  *
113
119
  * So a sweep only removes what cannot be live: not a tree this process is
114
120
  * building, and not one young enough to belong to anybody's in-flight install.
@@ -123,6 +129,7 @@ export declare class AddonInstaller {
123
129
  private readonly isPackageResolvable?;
124
130
  /** Test seam — production resolves via `CAMSTACK_FRAMEWORK_DIR`. */
125
131
  private readonly closureNodeModulesDir;
132
+ private readonly resolveLatestVersionOverride;
126
133
  /**
127
134
  * Central manifest of installed addons. Tracks version + source +
128
135
  * timestamps + last-backup pointer per package, written atomically
@@ -206,15 +213,28 @@ export declare class AddonInstaller {
206
213
  * defaults to npm in production.
207
214
  *
208
215
  * There is no version argument and there is deliberately no pin: the system is
209
- * addons-agnostic and `latest` is the whole contract at first boot (operator,
210
- * 2026-08-13). A copy already under the addon root is never replaced either —
211
- * bootstrap is seed-only, and overwriting a deployed bundle would be an
212
- * un-deploy ([D90](../../../../docs/decisions/adr-0090.md)).
216
+ * addons-agnostic and `latest` is the whole contract (operator, 2026-08-13,
217
+ * restated 2026-10-25 — D942). A copy already under the addon root is left
218
+ * alone when this installer is not on the npm source (a workspace or a
219
+ * bundled desktop seed) and when the package is the closure-provided
220
+ * `@camstack/system` (a copy there would shadow the closure). Every other
221
+ * required addon already on disk is moved to registry `latest` when that
222
+ * tag differs, higher or lower. An unreadable registry changes nothing.
213
223
  *
214
224
  * @param packages — optional custom package list (default: REQUIRED_PACKAGES)
215
225
  */
216
226
  ensureRequiredPackages(packages?: readonly string[]): Promise<void>;
217
227
  /**
228
+ * Move an already-installed required addon to registry `latest` when the
229
+ * installed version differs. `applyUpdate` keeps the previous tree as a
230
+ * backup and restores it if the install throws. A null latest (registry
231
+ * down, or no tag) leaves the copy where it is.
232
+ */
233
+ private followInstalledAddonToLatest;
234
+ /** `dist-tags.latest`, or `null` when the registry cannot be read. */
235
+ private readRegistryLatest;
236
+ private fetchRegistryLatest;
237
+ /**
218
238
  * Reconcile the install manifest against the addons actually present on
219
239
  * disk: register seeded addons, correct a version that disagrees with the
220
240
  * installed `package.json`, and drop entries naming a directory that does
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Which version an installed addon should be running (D942).
3
+ *
4
+ * The hub's target is the registry dist-tag `latest`. An agent's target is
5
+ * the hub's installed version — never the registry, and never "strictly
6
+ * newer". A missing target is an unreadable authority: a failed read changes
7
+ * nothing (D49), including never a move downward because the registry or the
8
+ * hub could not be asked.
9
+ */
10
+ export declare const ADDON_VERSION_REASON_REGISTRY_LATEST: "installed version differs from registry latest";
11
+ export declare const ADDON_VERSION_REASON_HUB: "agent follows the hub installed version";
12
+ export type AddonVersionReason = typeof ADDON_VERSION_REASON_REGISTRY_LATEST | typeof ADDON_VERSION_REASON_HUB;
13
+ export type AddonVersionMove = {
14
+ readonly move: false;
15
+ } | {
16
+ readonly move: true;
17
+ readonly from: string;
18
+ readonly to: string;
19
+ readonly reason: AddonVersionReason;
20
+ };
21
+ /**
22
+ * Move when `installed` is not `target`. `target === null` (or empty) means
23
+ * the authority could not be read — keep whatever is installed.
24
+ * `installed === null` with a known target is a first install of that target.
25
+ */
26
+ export declare function decideAddonVersionMove(installed: string | null, target: string | null, reason: AddonVersionReason): AddonVersionMove;
@@ -242,7 +242,7 @@ export declare function reclaimIntervalMs(passesAtFloor: number, minIntervalMs?:
242
242
  * every UDS handshake and every cross-runner cap call is served on it, and a
243
243
  * live CPU profile of a boot put `(idle)` at 0.1%). The reclaim pass is a
244
244
  * stop-the-world ON that loop, and `took=` prices the PASS without ever pricing
245
- * what it delays. 590ms against a p99 of 4ms is a visible stall; the same 590ms
245
+ * what it delays. 104ms against a p99 of 4ms is a visible stall; the same 104ms
246
246
  * against a p99 of 900ms is noise inside a queue that was already saturated.
247
247
  * Those are opposite conclusions, and until now the log could not tell them
248
248
  * apart.
@@ -3,6 +3,8 @@ export { AddonLoader } from "./addon-loader.js";
3
3
  export { AddonEngineManager } from "./addon-engine-manager.js";
4
4
  export type { AddonInstallerConfig, InstallSource, InstalledPackage } from "./addon-installer.js";
5
5
  export { AddonInstaller } from "./addon-installer.js";
6
+ export type { AddonVersionMove, AddonVersionReason } from "./addon-version-policy.js";
7
+ export { ADDON_VERSION_REASON_HUB, ADDON_VERSION_REASON_REGISTRY_LATEST, decideAddonVersionMove } from "./addon-version-policy.js";
6
8
  export type { AddonInstallSource, AddonManifestEntry, AddonManifestFile } from "./addon-manifest.js";
7
9
  export { AddonManifest } from "./addon-manifest.js";
8
10
  export type { AddonDirCandidate, QuarantinedEntry, ResidueQuarantineResult, ResidueReason, ResidueVerdict } from "./addon-residue.js";
@@ -21,7 +21,7 @@ export interface LocalProviderResolver {
21
21
  getByName(capabilityName: string): unknown | null;
22
22
  /**
23
23
  * The node this resolver's providers run on (e.g. `'hub'`, `'hub/model-studio'`,
24
- * `'little-unraid/model-studio'`). When set, {@link localProviderLink} defers a
24
+ * `'agent-a/model-studio'`). When set, {@link localProviderLink} defers a
25
25
  * call carrying an explicit `nodePin` to a DIFFERENT node instead of
26
26
  * short-circuiting to a co-located provider — so the pin routes to the
27
27
  * intended node (parent → `onUnownedCall` → CapRouteResolver). Symmetric to
@@ -45,7 +45,7 @@ export declare class SocketChannel implements LocalChannel {
45
45
  * `res` frame, or the socket's `close` (which drains `pending`) — so a peer
46
46
  * that receives the request and then neither answers nor closes leaves the
47
47
  * caller pending forever. That is a wedged handler, or a half-open socket
48
- * after a child died without a clean teardown, and it is how camera 615 spent
48
+ * after a child died without a clean teardown, and it is how camera 101 spent
49
49
  * 30+ minutes with every inference permit held by a call that was never
50
50
  * coming back.
51
51
  */
@@ -22,7 +22,7 @@
22
22
  *
23
23
  * Rendered examples:
24
24
  * [hub/winston-logging] 71184 - 04/20/2026, 12:45:53 AM INFO Winston logging initialized
25
- * [hub/provider-rtsp] 71184 - 04/20/2026, 12:46:01 AM WARN [salone] probe failed {err="timeout"}
25
+ * [hub/provider-rtsp] 71184 - 04/20/2026, 12:46:01 AM WARN [hall] probe failed {err="timeout"}
26
26
  * [dev-agent-0/detection] 12345 - 04/20/2026, 12:47:15 AM ERROR [cortile] no detector {codec=av1}
27
27
  */
28
28
  import type { LogEntry } from "@camstack/types";