@camstack/types 1.2.442 → 1.2.444

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 (61) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/addon.d.ts +5 -1
  3. package/dist/addon.js +21 -5
  4. package/dist/addon.mjs +17 -6
  5. package/dist/automation/export-entities.d.ts +98 -0
  6. package/dist/capabilities/capability-definition.d.ts +1 -1
  7. package/dist/capabilities/composer.cap.d.ts +34 -0
  8. package/dist/capabilities/consumables.cap.d.ts +4 -5
  9. package/dist/capabilities/core-blocks.cap.d.ts +244 -0
  10. package/dist/capabilities/device-export.cap.d.ts +111 -1
  11. package/dist/capabilities/index.d.ts +8 -3
  12. package/dist/capabilities/metrics-provider.cap.d.ts +16 -16
  13. package/dist/capabilities/node-removal-hook.cap.d.ts +67 -0
  14. package/dist/capabilities/nodes.cap.d.ts +2 -2
  15. package/dist/capabilities/pet-fountain.cap.d.ts +138 -0
  16. package/dist/capabilities/pipeline-executor.cap.d.ts +6 -22
  17. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +3 -4
  18. package/dist/capabilities/pipeline-runner.cap.d.ts +2 -2
  19. package/dist/capabilities/pipeline-step-input.d.ts +33 -0
  20. package/dist/client.js +817 -798
  21. package/dist/client.mjs +817 -798
  22. package/dist/composition/composition-items.d.ts +3 -3
  23. package/dist/composition/composition-report.d.ts +17 -0
  24. package/dist/composition/composition.d.ts +68 -1
  25. package/dist/composition/index.d.ts +2 -0
  26. package/dist/composition/presets/pet-fountain.d.ts +36 -0
  27. package/dist/composition/validate-forward.d.ts +31 -0
  28. package/dist/{composition-C0dlyG9U.js → composition-CO6Sak-s.js} +49 -5
  29. package/dist/{composition-bIBW5_13.mjs → composition-kSuOifuG.mjs} +32 -6
  30. package/dist/device/cap-vocabulary/entries/appliances.d.ts +1 -1
  31. package/dist/device/device-control-resolution.d.ts +1 -1
  32. package/dist/device/device-type.d.ts +4 -0
  33. package/dist/{err-msg-BCdlR2Li.mjs → err-msg-DWXWc0Di.mjs} +4 -0
  34. package/dist/{err-msg-COHgq7Mb.js → err-msg-EJhsFHqa.js} +4 -0
  35. package/dist/generated/addon-api.d.ts +149 -32
  36. package/dist/generated/addon-cap-facts.d.ts +1 -1
  37. package/dist/generated/cap-status-types.d.ts +3 -1
  38. package/dist/generated/capability-router-map.d.ts +10 -4
  39. package/dist/generated/collection-array-methods.d.ts +2 -2
  40. package/dist/generated/customize-catalog.d.ts +1 -1
  41. package/dist/generated/device-local-state.d.ts +3 -0
  42. package/dist/generated/device-proxy.d.ts +3 -0
  43. package/dist/generated/device-scoped-caps.d.ts +1 -1
  44. package/dist/generated/history-catalog.d.ts +1 -1
  45. package/dist/generated/method-access-map.d.ts +1 -1
  46. package/dist/generated/method-device-selectors.d.ts +1 -1
  47. package/dist/generated/runtime-state-durability.d.ts +1 -1
  48. package/dist/generated/system-proxy.d.ts +1 -1
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.js +1616 -607
  51. package/dist/index.mjs +1581 -596
  52. package/dist/interfaces/agent.d.ts +6 -2
  53. package/dist/interfaces/event-bus.d.ts +1 -1
  54. package/dist/node.js +2 -2
  55. package/dist/node.mjs +2 -2
  56. package/dist/{sleep-DJws6ho7.mjs → sleep-6eG9C8Xl.mjs} +224 -72
  57. package/dist/{sleep-BpwNJ1Su.js → sleep-UXDHn-oJ.js} +247 -71
  58. package/dist/types/agent-pipeline-settings.d.ts +2 -2
  59. package/dist/utils/oauth-landing.d.ts +1 -1
  60. package/dist/vendor-login-proxy/flow-trace.d.ts +29 -0
  61. package/package.json +1 -1
@@ -6055,76 +6055,6 @@ var MODEL_FORMATS = [
6055
6055
  "pt",
6056
6056
  "gguf"
6057
6057
  ];
6058
- //#endregion
6059
- //#region src/cap-call-context.ts
6060
- /**
6061
- * Per-call node pinning for `ctx.api` capability calls.
6062
- *
6063
- * A capability call normally resolves to its DEFAULT provider — a `singleton`
6064
- * cap resolves to the hub, a device-scoped cap to the device's owning node. To
6065
- * query a SPECIFIC node's provider instead (e.g. a remote agent's own
6066
- * in-process `platform-probe` hardware, which the hub cannot probe), pin the
6067
- * call to that node.
6068
- *
6069
- * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
6070
- * method args), so capability method signatures stay `nodeId`-free — node
6071
- * targeting is a property of the CALL, not of the method. The transport lifts
6072
- * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
6073
- * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
6074
- * which classifies a pinned agent node as `agent-child-forward`
6075
- * (`$agent-cap-fwd.forward` → the agent's in-process provider).
6076
- *
6077
- * Usage at a call site:
6078
- *
6079
- * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
6080
- */
6081
- /** tRPC `op.context` key carrying a per-call node pin. */
6082
- var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
6083
- /**
6084
- * Build the tRPC request options that pin a single capability call to `nodeId`.
6085
- * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
6086
- *
6087
- * ## The id is normalised here, and it has to be
6088
- *
6089
- * A forked addon reads its own node from `ctx.kernel.localNodeId`, and inside a
6090
- * worker that value is a RUNNER id — `hub/export-hap`, not `hub`. Routing
6091
- * compares a pin against real node ids, so such a pin matches nothing and the
6092
- * call fails with `no provider registered for cap "…"`. The local-first
6093
- * resolver already guarded against this (`localNodeId.split('/')[0]`), which
6094
- * made the hazard invisible: unpinned calls worked, and only an explicit pin —
6095
- * the thing you reach for when you specifically need THIS node — silently
6096
- * addressed a node that does not exist.
6097
- *
6098
- * Cost of it being missing: `addon-export-hap` pinned `decoder.getInfo` to its
6099
- * own node to read the host's hardware-decode backend. It never once answered,
6100
- * so every HomeKit egress transcode decoded in SOFTWARE — including 4K H.265 —
6101
- * while D67's whole premise was that the decoder addon is the authority on
6102
- * hardware. The warn said `decoding in SOFTWARE` and read as "this node has no
6103
- * hardware", which was false.
6104
- *
6105
- * Normalising in the ONE constructor fixes every caller at once, which is why
6106
- * it is here and not at the call sites.
6107
- */
6108
- function nodePin(nodeId) {
6109
- return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: toNodeId(nodeId) } };
6110
- }
6111
- /**
6112
- * A runner id is `<nodeId>/<addonId>`; a node id has no slash. Taking the head
6113
- * is idempotent, so passing an already-clean id costs nothing.
6114
- */
6115
- function toNodeId(idOrRunnerId) {
6116
- const head = idOrRunnerId.split("/")[0];
6117
- return head === void 0 || head.length === 0 ? idOrRunnerId : head;
6118
- }
6119
- /**
6120
- * Read a per-call node pin out of a tRPC `op.context` (transport side).
6121
- * Returns the pinned nodeId, or `undefined` when no pin is present.
6122
- */
6123
- function readNodePin(context) {
6124
- if (context === null || typeof context !== "object") return void 0;
6125
- const value = Reflect.get(context, CAP_NODE_PIN_CONTEXT_KEY);
6126
- return typeof value === "string" ? value : void 0;
6127
- }
6128
6058
  zod.z.object({
6129
6059
  field: zod.z.string().min(1),
6130
6060
  on: zod.z.literal("advance")
@@ -6146,6 +6076,7 @@ var HISTORY_UNIT_LABELS = {
6146
6076
  ppm: "ppm",
6147
6077
  ppb: "ppb",
6148
6078
  "µg/m³": "µg/m³",
6079
+ L: "L",
6149
6080
  hPa: "hPa",
6150
6081
  count: "count",
6151
6082
  ratio: "ratio",
@@ -6342,6 +6273,141 @@ function isDeviceConfigCap(def) {
6342
6273
  return def?.deviceConfig !== void 0;
6343
6274
  }
6344
6275
  //#endregion
6276
+ //#region src/cap-call-context.ts
6277
+ /**
6278
+ * Per-call node pinning for `ctx.api` capability calls.
6279
+ *
6280
+ * A capability call normally resolves to its DEFAULT provider — a `singleton`
6281
+ * cap resolves to the hub, a device-scoped cap to the device's owning node. To
6282
+ * query a SPECIFIC node's provider instead (e.g. a remote agent's own
6283
+ * in-process `platform-probe` hardware, which the hub cannot probe), pin the
6284
+ * call to that node.
6285
+ *
6286
+ * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
6287
+ * method args), so capability method signatures stay `nodeId`-free — node
6288
+ * targeting is a property of the CALL, not of the method. The transport lifts
6289
+ * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
6290
+ * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
6291
+ * which classifies a pinned agent node as `agent-child-forward`
6292
+ * (`$agent-cap-fwd.forward` → the agent's in-process provider).
6293
+ *
6294
+ * Usage at a call site:
6295
+ *
6296
+ * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
6297
+ */
6298
+ /** tRPC `op.context` key carrying a per-call node pin. */
6299
+ var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
6300
+ /**
6301
+ * Build the tRPC request options that pin a single capability call to `nodeId`.
6302
+ * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
6303
+ *
6304
+ * ## The id is normalised here, and it has to be
6305
+ *
6306
+ * A forked addon reads its own node from `ctx.kernel.localNodeId`, and inside a
6307
+ * worker that value is a RUNNER id — `hub/export-hap`, not `hub`. Routing
6308
+ * compares a pin against real node ids, so such a pin matches nothing and the
6309
+ * call fails with `no provider registered for cap "…"`. The local-first
6310
+ * resolver already guarded against this (`localNodeId.split('/')[0]`), which
6311
+ * made the hazard invisible: unpinned calls worked, and only an explicit pin —
6312
+ * the thing you reach for when you specifically need THIS node — silently
6313
+ * addressed a node that does not exist.
6314
+ *
6315
+ * Cost of it being missing: `addon-export-hap` pinned `decoder.getInfo` to its
6316
+ * own node to read the host's hardware-decode backend. It never once answered,
6317
+ * so every HomeKit egress transcode decoded in SOFTWARE — including 4K H.265 —
6318
+ * while D67's whole premise was that the decoder addon is the authority on
6319
+ * hardware. The warn said `decoding in SOFTWARE` and read as "this node has no
6320
+ * hardware", which was false.
6321
+ *
6322
+ * Normalising in the ONE constructor fixes every caller at once, which is why
6323
+ * it is here and not at the call sites.
6324
+ */
6325
+ function nodePin(nodeId) {
6326
+ return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: toNodeId(nodeId) } };
6327
+ }
6328
+ /**
6329
+ * A runner id is `<nodeId>/<addonId>`; a node id has no slash. Taking the head
6330
+ * is idempotent, so passing an already-clean id costs nothing.
6331
+ */
6332
+ function toNodeId(idOrRunnerId) {
6333
+ const head = idOrRunnerId.split("/")[0];
6334
+ return head === void 0 || head.length === 0 ? idOrRunnerId : head;
6335
+ }
6336
+ /**
6337
+ * Read a per-call node pin out of a tRPC `op.context` (transport side).
6338
+ * Returns the pinned nodeId, or `undefined` when no pin is present.
6339
+ */
6340
+ function readNodePin(context) {
6341
+ if (context === null || typeof context !== "object") return void 0;
6342
+ const value = Reflect.get(context, CAP_NODE_PIN_CONTEXT_KEY);
6343
+ return typeof value === "string" ? value : void 0;
6344
+ }
6345
+ //#endregion
6346
+ //#region src/capabilities/addon-pages-source.cap.ts
6347
+ /**
6348
+ * `addon-pages-source` — collection cap exposing per-provider raw page
6349
+ * declarations. Every addon that contributes a UI page registers a
6350
+ * provider here. The hub-side singleton aggregator (`addon-pages` cap,
6351
+ * see `addon-pages.cap.ts`) walks this collection, stamps versioned
6352
+ * `bundleUrl` values, and returns the enriched `AddonPageInfo[]` list
6353
+ * that admin-ui consumes.
6354
+ *
6355
+ * The split exists because the public listing has a different output
6356
+ * shape than the per-provider raw declarations, and we want both ends
6357
+ * to flow through codegen instead of relying on a hand-written wrapper.
6358
+ */
6359
+ var AddonPageDeclarationSchema = zod.z.object({
6360
+ id: zod.z.string(),
6361
+ label: zod.z.string(),
6362
+ icon: zod.z.string(),
6363
+ path: zod.z.string(),
6364
+ /**
6365
+ * Module Federation remote name — must match the `name` field on the
6366
+ * page addon's `federation()` plugin config. Used by admin-ui's
6367
+ * `<AddonPageLoader>` to call `loadRemote('<remoteName>/page')`.
6368
+ * Conventionally `addon_<id>_page` (snake_case; MF names cannot
6369
+ * contain hyphens).
6370
+ */
6371
+ remoteName: zod.z.string(),
6372
+ /**
6373
+ * Bundle filename inside the addon's `dist/` dir served at
6374
+ * `/api/addon-pages/<addonId>/<bundle>`. With Module Federation this
6375
+ * is always `'remoteEntry.js'`; the value is kept on the metadata so
6376
+ * the static-file route can compute an mtime-based cache-buster URL
6377
+ * without a separate filesystem stat.
6378
+ */
6379
+ bundle: zod.z.string(),
6380
+ /**
6381
+ * Sidebar section this page docks into. Well-known ids: `'detection'`,
6382
+ * `'cluster'`, `'administration'` — the page renders inside that group.
6383
+ * Any OTHER string creates (or joins) a custom section rendered after
6384
+ * the built-in groups; its label comes from `sectionLabel` (first
6385
+ * declaration wins), falling back to the id. Absent → the legacy
6386
+ * "Addon Pages" group.
6387
+ */
6388
+ section: zod.z.string().optional(),
6389
+ /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
6390
+ sectionLabel: zod.z.string().optional()
6391
+ });
6392
+ var addonPagesSourceCapability = {
6393
+ name: "addon-pages-source",
6394
+ scope: "system",
6395
+ mode: "collection",
6396
+ internal: true,
6397
+ methods: {
6398
+ /**
6399
+ * `internal: true` did not gate the mount (see the 2026-08-26 note on
6400
+ * `data-store-provider`) — this was reachable on the AppRouter by ANY
6401
+ * authenticated session at the default `auth: 'protected'`. The only
6402
+ * consumer, the `addon-pages-aggregator` builtin, reads it via
6403
+ * `ctx.capabilities.getCollection('addon-pages-source')` — LOCAL-PROCESS
6404
+ * only, never tRPC (per `ctx.capabilities` seeing only the local
6405
+ * process). The public, enriched listing admin-ui actually consumes is
6406
+ * the separate `addon-pages` cap, unaffected by this change.
6407
+ */
6408
+ listPages: method(zod.z.void(), zod.z.array(AddonPageDeclarationSchema).readonly(), { auth: "admin" }) }
6409
+ };
6410
+ //#endregion
6345
6411
  //#region src/capabilities/admin-ui.cap.ts
6346
6412
  var StaticDirOutputSchema$1 = zod.z.object({ staticDir: zod.z.string() });
6347
6413
  var VersionOutputSchema$1 = zod.z.object({ version: zod.z.string() });
@@ -6475,6 +6541,29 @@ function withoutCallerStamp(input) {
6475
6541
  */
6476
6542
  var DEVICE_CHILDREN_BATCH_MAX = 256;
6477
6543
  //#endregion
6544
+ //#region src/capabilities/pipeline-step-input.ts
6545
+ /**
6546
+ * The pipeline step-input shape and the run-result bridge, in a module that
6547
+ * imports nothing but zod and types.
6548
+ *
6549
+ * WHY A SEPARATE FILE (addon footprint, D28): both were declared in
6550
+ * `pipeline-executor.cap.ts`, whose import evaluates the whole executor schema
6551
+ * graph. An addon that only needs these two (the benchmark's `runPipelineTest`
6552
+ * action) paid ~130 MB of heap at load. `pipeline-executor.cap.ts` re-exports
6553
+ * them, so every existing import keeps working; addon server code takes them
6554
+ * from `@camstack/types/addon`.
6555
+ */
6556
+ var PipelineStepInputSchema = zod.z.lazy(() => zod.z.object({
6557
+ addonId: zod.z.string(),
6558
+ modelId: zod.z.string().optional(),
6559
+ enabled: zod.z.boolean().default(true),
6560
+ children: zod.z.array(PipelineStepInputSchema).optional(),
6561
+ settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
6562
+ jumpDeviceKey: zod.z.string().optional()
6563
+ }));
6564
+ /** Typed bridge to the recursive `FrameResult` graph; validation is structural. */
6565
+ var PipelineRunResultBridge = zod.z.custom();
6566
+ //#endregion
6478
6567
  //#region src/capabilities/viewer-ui.cap.ts
6479
6568
  var StaticDirOutputSchema = zod.z.object({ staticDir: zod.z.string() });
6480
6569
  var VersionOutputSchema = zod.z.object({ version: zod.z.string() });
@@ -6755,6 +6844,7 @@ var CAP_NAMES = Object.freeze([
6755
6844
  "network-link",
6756
6845
  "network-quality",
6757
6846
  "node-certificates",
6847
+ "node-removal-hook",
6758
6848
  "nodes",
6759
6849
  "notification-output",
6760
6850
  "notification-rules",
@@ -6765,6 +6855,7 @@ var CAP_NAMES = Object.freeze([
6765
6855
  "osd",
6766
6856
  "osd-manager",
6767
6857
  "pet-feeder",
6858
+ "pet-fountain",
6768
6859
  "pipeline-analytics",
6769
6860
  "pipeline-executor",
6770
6861
  "pipeline-orchestrator",
@@ -8045,6 +8136,56 @@ var CAP_STATE_LEAVES = Object.freeze({
8045
8136
  "valueType": "number"
8046
8137
  }
8047
8138
  ],
8139
+ "pet-fountain": [
8140
+ {
8141
+ "path": "waterLevel",
8142
+ "valueType": "number"
8143
+ },
8144
+ {
8145
+ "path": "waterVolume",
8146
+ "valueType": "number"
8147
+ },
8148
+ {
8149
+ "path": "empty",
8150
+ "valueType": "boolean"
8151
+ },
8152
+ {
8153
+ "path": "pumpRunning",
8154
+ "valueType": "boolean"
8155
+ },
8156
+ {
8157
+ "path": "pumpIntervalEnabled",
8158
+ "valueType": "boolean"
8159
+ },
8160
+ {
8161
+ "path": "pumpOnTime",
8162
+ "valueType": "number"
8163
+ },
8164
+ {
8165
+ "path": "pumpOffTime",
8166
+ "valueType": "number"
8167
+ },
8168
+ {
8169
+ "path": "lastDrink",
8170
+ "valueType": "number"
8171
+ },
8172
+ {
8173
+ "path": "currentHourDrink",
8174
+ "valueType": "number"
8175
+ },
8176
+ {
8177
+ "path": "last24hDrink",
8178
+ "valueType": "number"
8179
+ },
8180
+ {
8181
+ "path": "todayDrink",
8182
+ "valueType": "number"
8183
+ },
8184
+ {
8185
+ "path": "error",
8186
+ "valueType": "string"
8187
+ }
8188
+ ],
8048
8189
  "power-meter": [
8049
8190
  {
8050
8191
  "path": "power",
@@ -9270,6 +9411,14 @@ function createDeviceProxy(api, binding, opts) {
9270
9411
  setVolume: (input) => dispatch("pet-feeder", "petFeeder", "setVolume", "mutation", input),
9271
9412
  getStatus: (input) => dispatch("pet-feeder", "petFeeder", "getStatus", "query", input)
9272
9413
  };
9414
+ const petFountainInterface = {
9415
+ setPump: (input) => dispatch("pet-fountain", "petFountain", "setPump", "mutation", input),
9416
+ setPumpInterval: (input) => dispatch("pet-fountain", "petFountain", "setPumpInterval", "mutation", input),
9417
+ setPumpOnMinutes: (input) => dispatch("pet-fountain", "petFountain", "setPumpOnMinutes", "mutation", input),
9418
+ setPumpOffMinutes: (input) => dispatch("pet-fountain", "petFountain", "setPumpOffMinutes", "mutation", input),
9419
+ resetDailyConsumption: (input) => dispatch("pet-fountain", "petFountain", "resetDailyConsumption", "mutation", input),
9420
+ getStatus: (input) => dispatch("pet-fountain", "petFountain", "getStatus", "query", input)
9421
+ };
9273
9422
  const pipelineAnalyticsInterface = {
9274
9423
  getActiveTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getActiveTracks", "query", input),
9275
9424
  getTrack: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getTrack", "query", input),
@@ -9738,6 +9887,7 @@ function createDeviceProxy(api, binding, opts) {
9738
9887
  notifier: createSliceHandle(stateSource, binding.deviceId, "notifier"),
9739
9888
  numericSensor: createSliceHandle(stateSource, binding.deviceId, "numeric-sensor"),
9740
9889
  petFeeder: createSliceHandle(stateSource, binding.deviceId, "pet-feeder"),
9890
+ petFountain: createSliceHandle(stateSource, binding.deviceId, "pet-fountain"),
9741
9891
  powerMeter: createSliceHandle(stateSource, binding.deviceId, "power-meter"),
9742
9892
  presence: createSliceHandle(stateSource, binding.deviceId, "presence"),
9743
9893
  pressureSensor: createSliceHandle(stateSource, binding.deviceId, "pressure-sensor"),
@@ -9828,6 +9978,7 @@ function createDeviceProxy(api, binding, opts) {
9828
9978
  ...bound("numeric-sensor") ? { numericSensor: numericSensorInterface } : {},
9829
9979
  ...bound("osd") ? { osd: osdInterface } : {},
9830
9980
  ...bound("pet-feeder") ? { petFeeder: petFeederInterface } : {},
9981
+ ...bound("pet-fountain") ? { petFountain: petFountainInterface } : {},
9831
9982
  ...bound("pipeline-analytics") ? { pipelineAnalytics: pipelineAnalyticsInterface } : {},
9832
9983
  ...bound("power-meter") ? { powerMeter: powerMeterInterface } : {},
9833
9984
  ...bound("presence") ? { presence: presenceInterface } : {},
@@ -9891,7 +10042,7 @@ function createDeviceProxy(api, binding, opts) {
9891
10042
  * can answer "may a rule actuate this?" without importing the schema barrel
9892
10043
  * (~144MB RSS per runner, D28).
9893
10044
  *
9894
- * Coverage: 96 device-scoped capabilities.
10045
+ * Coverage: 97 device-scoped capabilities.
9895
10046
  */
9896
10047
  var DEVICE_SCOPED_CAPS = new Set([
9897
10048
  "accessories",
@@ -9957,6 +10108,7 @@ var DEVICE_SCOPED_CAPS = new Set([
9957
10108
  "numeric-sensor",
9958
10109
  "osd",
9959
10110
  "pet-feeder",
10111
+ "pet-fountain",
9960
10112
  "pipeline-analytics",
9961
10113
  "power-meter",
9962
10114
  "presence",
@@ -10295,6 +10447,12 @@ Object.defineProperty(exports, "AUDIO_CHUNK_FORMATS", {
10295
10447
  return AUDIO_CHUNK_FORMATS;
10296
10448
  }
10297
10449
  });
10450
+ Object.defineProperty(exports, "AddonPageDeclarationSchema", {
10451
+ enumerable: true,
10452
+ get: function() {
10453
+ return AddonPageDeclarationSchema;
10454
+ }
10455
+ });
10298
10456
  Object.defineProperty(exports, "AudioChunkFormatSchema", {
10299
10457
  enumerable: true,
10300
10458
  get: function() {
@@ -10601,6 +10759,18 @@ Object.defineProperty(exports, "PeerBytesTicketSchema", {
10601
10759
  return PeerBytesTicketSchema;
10602
10760
  }
10603
10761
  });
10762
+ Object.defineProperty(exports, "PipelineRunResultBridge", {
10763
+ enumerable: true,
10764
+ get: function() {
10765
+ return PipelineRunResultBridge;
10766
+ }
10767
+ });
10768
+ Object.defineProperty(exports, "PipelineStepInputSchema", {
10769
+ enumerable: true,
10770
+ get: function() {
10771
+ return PipelineStepInputSchema;
10772
+ }
10773
+ });
10604
10774
  Object.defineProperty(exports, "PlaintextSecretError", {
10605
10775
  enumerable: true,
10606
10776
  get: function() {
@@ -10919,6 +11089,12 @@ Object.defineProperty(exports, "WELL_KNOWN_TAB_MAP", {
10919
11089
  return WELL_KNOWN_TAB_MAP;
10920
11090
  }
10921
11091
  });
11092
+ Object.defineProperty(exports, "addonPagesSourceCapability", {
11093
+ enumerable: true,
11094
+ get: function() {
11095
+ return addonPagesSourceCapability;
11096
+ }
11097
+ });
10922
11098
  Object.defineProperty(exports, "addonSliceHandleApi", {
10923
11099
  enumerable: true,
10924
11100
  get: function() {
@@ -66,8 +66,8 @@ export interface AgentPipelineSettings {
66
66
  * Placement capabilities (placement-model-design §6) — the per-node record
67
67
  * that replaced the four flat orchestrator lists (`enabledNodes`,
68
68
  * `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`). Each
69
- * flag is optional; an absent flag inherits the node default (`hub` →
70
- * capable, every other node → not). The orchestrator derives its
69
+ * flag is optional; an absent flag is ON for every node (only an
70
+ * explicit `false` turns a role off). The orchestrator derives its
71
71
  * enabled-node sets from these flags across the cluster.
72
72
  */
73
73
  readonly detect?: boolean;
@@ -12,7 +12,7 @@
12
12
  */
13
13
  /** The admin-ui route the hub's OAuth completions land on (relative to its mount). */
14
14
  export declare const OAUTH_LANDING_PATH = "/sso-complete";
15
- export declare const OAUTH_LANDING_REASONS: readonly ['access_denied', 'invalid_state', 'invalid_request', 'unknown_broker', 'not_configured', 'exchange_failed', 'no_refresh_token', 'unavailable', 'unknown'];
15
+ export declare const OAUTH_LANDING_REASONS: readonly ['access_denied', 'invalid_state', 'invalid_request', 'unknown_broker', 'not_configured', 'exchange_failed', 'no_authorization_code', 'no_refresh_token', 'unavailable', 'unknown'];
16
16
  export type OauthLandingReason = (typeof OAUTH_LANDING_REASONS)[number];
17
17
  export declare function isOauthLandingReason(value: unknown): value is OauthLandingReason;
18
18
  export interface OauthLandingOutcome {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Names-only trace of one proxied login request (D955). A sign-in that loses a parameter on
3
+ * the way (an OAuth extension, a hidden field) is invisible in the page flow; this says WHICH
4
+ * request still carried it. Everything here is a NAME, a count, a status or a boolean: no
5
+ * query value, form value, cookie value or attempt id ever leaves this module.
6
+ */
7
+ /** The most trace lines one login attempt writes; an attempt lives minutes, this is a backstop. */
8
+ export declare const FLOW_TRACE_MAX_LINES = 200;
9
+ export interface FlowTraceInput {
10
+ readonly attemptId: string;
11
+ readonly method: string;
12
+ readonly upstreamHost: string;
13
+ readonly upstreamPath: string;
14
+ readonly requestSearch: string;
15
+ /** The raw urlencoded request body of a form POST, or null. */
16
+ readonly formBody: string | null;
17
+ readonly contentType: string | undefined;
18
+ readonly status: number;
19
+ readonly location: string | null;
20
+ readonly setCookies: readonly string[];
21
+ readonly cookieHeader: string | undefined;
22
+ }
23
+ /** A short stable label for the attempt: enough to group lines, useless as a capability. */
24
+ export declare function attemptLabel(attemptId: string): string;
25
+ /** Distinct parameter names of a `?a=1&b=2` string (or of a urlencoded body), in order. */
26
+ export declare function paramNames(query: string): string[];
27
+ export declare function hasOa2(names: readonly string[]): boolean;
28
+ /** The `meta` of one trace line. Values: never. */
29
+ export declare function flowTraceMeta(input: FlowTraceInput): Record<string, string | number | boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.442",
3
+ "version": "1.2.444",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",