@camstack/server 1.2.482 → 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.
@@ -40,8 +40,8 @@ exports.resolveAgentInfraCapabilities = resolveAgentInfraCapabilities;
40
40
  *
41
41
  * **To roll back:** set `CAMSTACK_AGENT_LOCAL_DATA_STORE=1` in the agent
42
42
  * container's environment and restart it. That restores `INFRA_CAPABILITIES`
43
- * EXACTLY — same entries, same order, same `required` flags — so the agent
44
- * boots its own `sqlite-settings` again and the data door resolves that engine
43
+ * EXACTLY (same entries, same order, same `required` flags) minus the hub-only
44
+ * `keychain`, which no flag brings to an agent — so the agent boots its own `sqlite-settings` again and the data door resolves that engine
45
45
  * instead of the hub (a local engine always wins over the remote; see
46
46
  * `data-store-dispatch.ts`). No redeploy, no revert, and the other two commits
47
47
  * in this series stay in place: commit 1 is inert whenever a local engine
@@ -56,6 +56,21 @@ const system_1 = require("@camstack/system");
56
56
  exports.AGENT_LOCAL_DATA_STORE_ENV = 'CAMSTACK_AGENT_LOCAL_DATA_STORE';
57
57
  /** The capability an agent no longer boots. */
58
58
  const DATA_STORE_PROVIDER = 'data-store-provider';
59
+ /**
60
+ * The keychain (D787) is the HUB's, always — whatever the rollback flag says.
61
+ *
62
+ * Booting it on an agent was the bug that locked the hub on 2026-10-08: the
63
+ * agent's settings door forwards to the hub, so an agent's keychain wrote the
64
+ * `keychain:keys` row INTO THE HUB'S DATABASE while writing the master key to
65
+ * the AGENT's `<dataDir>/.keychain/master.key`. The Mac agent booted first,
66
+ * generated the key on the Mac, and the hub's next boot found a wrapped data
67
+ * key and no key file under `/data` — `key-missing`, locked. An agent-local
68
+ * keychain also shadowed `$hub-cap-fwd` for the agent's own forked addons, so
69
+ * their secrets resolved against a keychain that could only ever be locked.
70
+ *
71
+ * An agent reaches the keychain the way it reaches every hub cap: forwarded.
72
+ */
73
+ const HUB_ONLY_INFRA = new Set(['keychain']);
59
74
  /**
60
75
  * Truthy spellings an operator actually types into a docker `-e`. Anything
61
76
  * else — including the empty string a declared-but-unset variable produces —
@@ -77,7 +92,6 @@ function isEnabled(raw) {
77
92
  * `INFRA_CAPABILITIES` itself is never touched: the hub reads the same array.
78
93
  */
79
94
  function resolveAgentInfraCapabilities(env) {
80
- if (isEnabled(env[exports.AGENT_LOCAL_DATA_STORE_ENV]))
81
- return system_1.INFRA_CAPABILITIES;
82
- return system_1.INFRA_CAPABILITIES.filter((cap) => cap.name !== DATA_STORE_PROVIDER);
95
+ const keepLocalStore = isEnabled(env[exports.AGENT_LOCAL_DATA_STORE_ENV]);
96
+ return system_1.INFRA_CAPABILITIES.filter((cap) => !HUB_ONLY_INFRA.has(cap.name) && (keepLocalStore || cap.name !== DATA_STORE_PROVIDER));
83
97
  }
@@ -7235,6 +7235,51 @@ function createCapRouter_pipelineAnalytics(getProvider, createRemoteProxy) {
7235
7235
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7236
7236
  return p.writeRetrainArchive(methodInput);
7237
7237
  }),
7238
+ previewRetrainDataset: trpc_middleware_js_1.adminProcedure
7239
+ .input(types_94.pipelineAnalyticsCapability.methods.previewRetrainDataset.input.loose())
7240
+ .output(types_94.pipelineAnalyticsCapability.methods.previewRetrainDataset.output)
7241
+ .query(async ({ input, ctx }) => {
7242
+ const { nodeId, ...methodInput } = input;
7243
+ const p = resolveProvider('pipeline-analytics', nodeId, () => getProvider(ctx), createRemoteProxy);
7244
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7245
+ return p.previewRetrainDataset(methodInput);
7246
+ }),
7247
+ createRetrainDatasetVersion: trpc_middleware_js_1.adminProcedure
7248
+ .input(types_94.pipelineAnalyticsCapability.methods.createRetrainDatasetVersion.input.loose())
7249
+ .output(types_94.pipelineAnalyticsCapability.methods.createRetrainDatasetVersion.output)
7250
+ .mutation(async ({ input, ctx }) => {
7251
+ const { nodeId, ...methodInput } = input;
7252
+ const p = resolveProvider('pipeline-analytics', nodeId, () => getProvider(ctx), createRemoteProxy);
7253
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7254
+ return p.createRetrainDatasetVersion(methodInput);
7255
+ }),
7256
+ listRetrainDatasetVersions: trpc_middleware_js_1.adminProcedure
7257
+ .input(types_94.pipelineAnalyticsCapability.methods.listRetrainDatasetVersions.input.loose())
7258
+ .output(types_94.pipelineAnalyticsCapability.methods.listRetrainDatasetVersions.output)
7259
+ .query(async ({ input, ctx }) => {
7260
+ const { nodeId, ...methodInput } = input;
7261
+ const p = resolveProvider('pipeline-analytics', nodeId, () => getProvider(ctx), createRemoteProxy);
7262
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7263
+ return p.listRetrainDatasetVersions(methodInput);
7264
+ }),
7265
+ deleteRetrainDatasetVersion: trpc_middleware_js_1.adminProcedure
7266
+ .input(types_94.pipelineAnalyticsCapability.methods.deleteRetrainDatasetVersion.input.loose())
7267
+ .output(types_94.pipelineAnalyticsCapability.methods.deleteRetrainDatasetVersion.output)
7268
+ .mutation(async ({ input, ctx }) => {
7269
+ const { nodeId, ...methodInput } = input;
7270
+ const p = resolveProvider('pipeline-analytics', nodeId, () => getProvider(ctx), createRemoteProxy);
7271
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7272
+ return p.deleteRetrainDatasetVersion(methodInput);
7273
+ }),
7274
+ verifyRetrainDatasetVersion: trpc_middleware_js_1.adminProcedure
7275
+ .input(types_94.pipelineAnalyticsCapability.methods.verifyRetrainDatasetVersion.input.loose())
7276
+ .output(types_94.pipelineAnalyticsCapability.methods.verifyRetrainDatasetVersion.output)
7277
+ .query(async ({ input, ctx }) => {
7278
+ const { nodeId, ...methodInput } = input;
7279
+ const p = resolveProvider('pipeline-analytics', nodeId, () => getProvider(ctx), createRemoteProxy);
7280
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
7281
+ return p.verifyRetrainDatasetVersion(methodInput);
7282
+ }),
7238
7283
  listRetrainAssistProfiles: trpc_middleware_js_1.adminProcedure
7239
7284
  .input(types_94.pipelineAnalyticsCapability.methods.listRetrainAssistProfiles.input.loose())
7240
7285
  .output(types_94.pipelineAnalyticsCapability.methods.listRetrainAssistProfiles.output)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/server",
3
- "version": "1.2.482",
3
+ "version": "1.2.483",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "files": [
@@ -37,18 +37,18 @@
37
37
  ]
38
38
  },
39
39
  "dependencies": {
40
- "@camstack/addon-admin-ui": "1.2.355",
41
- "@camstack/addon-agent-ui": "1.2.192",
40
+ "@camstack/addon-admin-ui": "1.2.356",
41
+ "@camstack/addon-agent-ui": "1.2.193",
42
42
  "@camstack/addon-auth": "1.2.132",
43
43
  "@camstack/addon-decoder-nodeav": "1.2.121",
44
44
  "@camstack/addon-notifiers": "1.2.128",
45
45
  "@camstack/addon-pipeline": "1.2.346",
46
46
  "@camstack/addon-pipeline-orchestrator": "1.2.298",
47
- "@camstack/addon-post-analysis": "1.2.344",
47
+ "@camstack/addon-post-analysis": "1.2.345",
48
48
  "@camstack/sdk": "1.2.126",
49
- "@camstack/system": "1.2.377",
50
- "@camstack/types": "1.2.328",
51
- "@camstack/ui-library": "1.2.250",
49
+ "@camstack/system": "1.2.378",
50
+ "@camstack/types": "1.2.329",
51
+ "@camstack/ui-library": "1.2.251",
52
52
  "@fastify/compress": "^9.0.0",
53
53
  "@fastify/cookie": "^11.0.2",
54
54
  "@fastify/cors": "^11.2.0",