@camstack/types 1.2.417 → 1.2.418
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.
- package/dist/addon.js +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/capabilities/capability-definition.d.ts +5 -0
- package/dist/capabilities/composer.cap.d.ts +198 -0
- package/dist/capabilities/core-blocks.cap.d.ts +1420 -0
- package/dist/capabilities/group-status.cap.d.ts +46 -0
- package/dist/capabilities/index.d.ts +3 -1
- package/dist/capabilities/motion.cap.d.ts +12 -4
- package/dist/client.js +3 -0
- package/dist/client.mjs +3 -0
- package/dist/composition/composition-report.d.ts +72 -0
- package/dist/composition/composition.d.ts +285 -5
- package/dist/composition/helpers/aggregate.d.ts +41 -0
- package/dist/composition/helpers/catalog.d.ts +42 -0
- package/dist/composition/helpers/compile.d.ts +22 -0
- package/dist/composition/helpers/index.d.ts +6 -0
- package/dist/composition/helpers/save.d.ts +18 -0
- package/dist/composition/helpers/source-pick.d.ts +40 -0
- package/dist/composition/helpers/spec.d.ts +38 -0
- package/dist/composition/index.d.ts +1 -0
- package/dist/composition/source-ref.d.ts +11 -0
- package/dist/composition/validate-composition.d.ts +5 -0
- package/dist/{composition-kEl9mevu.mjs → composition-B85l9j1M.mjs} +114 -8
- package/dist/{composition-DsmkwP9-.js → composition-OJKOJJD-.js} +179 -7
- package/dist/device/cap-vocabulary/entries/sensors.d.ts +1 -1
- package/dist/generated/addon-api.d.ts +14 -0
- package/dist/generated/addon-cap-facts.d.ts +1 -1
- package/dist/generated/cap-status-types.d.ts +3 -1
- package/dist/generated/capability-router-map.d.ts +5 -2
- package/dist/generated/device-local-state.d.ts +3 -0
- package/dist/generated/device-proxy.d.ts +3 -0
- package/dist/generated/history-catalog.d.ts +1 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +1 -1
- package/dist/generated/runtime-state-durability.d.ts +1 -1
- package/dist/index.js +706 -12
- package/dist/index.mjs +686 -13
- package/dist/node.js +1 -1
- package/dist/node.mjs +1 -1
- package/dist/{sleep-gtskVoMw.js → sleep-7Gw3GJ4n.js} +18 -0
- package/dist/{sleep-CARd6wZF.mjs → sleep-B81gwQuR.mjs} +18 -0
- package/package.json +1 -1
|
@@ -2160,6 +2160,78 @@ function evaluateExpressionSource(expr, bindingValues, now, opts) {
|
|
|
2160
2160
|
}
|
|
2161
2161
|
}
|
|
2162
2162
|
//#endregion
|
|
2163
|
+
//#region src/composition/source-ref.ts
|
|
2164
|
+
/**
|
|
2165
|
+
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
2166
|
+
* id. Split out so helper schemas can name it without a cycle through
|
|
2167
|
+
* `composition.ts` (D659).
|
|
2168
|
+
*/
|
|
2169
|
+
var CompositionSourceRefSchema = z.object({
|
|
2170
|
+
/** The owning addon; `stableId` is unique only within it. */
|
|
2171
|
+
addonId: z.string().min(1),
|
|
2172
|
+
stableId: z.string().min(1)
|
|
2173
|
+
});
|
|
2174
|
+
//#endregion
|
|
2175
|
+
//#region src/composition/helpers/spec.ts
|
|
2176
|
+
/**
|
|
2177
|
+
* A helper spec is what the editor stores and reads back (D944). The compiled
|
|
2178
|
+
* features are a projection; the editor never edits the expression.
|
|
2179
|
+
*/
|
|
2180
|
+
/** A group may name more members than an expression call (the 16-arg cap). */
|
|
2181
|
+
var MAX_HELPER_MEMBERS = 64;
|
|
2182
|
+
var GROUP_TEMPLATE_IDS = [
|
|
2183
|
+
"temperature",
|
|
2184
|
+
"humidity",
|
|
2185
|
+
"pressure",
|
|
2186
|
+
"illuminance",
|
|
2187
|
+
"power",
|
|
2188
|
+
"energy",
|
|
2189
|
+
"battery",
|
|
2190
|
+
"numeric",
|
|
2191
|
+
"motion",
|
|
2192
|
+
"contact",
|
|
2193
|
+
"leak",
|
|
2194
|
+
"smoke",
|
|
2195
|
+
"occupancy",
|
|
2196
|
+
"binary"
|
|
2197
|
+
];
|
|
2198
|
+
var NUMERIC_AGGREGATES = [
|
|
2199
|
+
"mean",
|
|
2200
|
+
"median",
|
|
2201
|
+
"min",
|
|
2202
|
+
"max",
|
|
2203
|
+
"sum"
|
|
2204
|
+
];
|
|
2205
|
+
var BINARY_AGGREGATES = ["any", "all"];
|
|
2206
|
+
var AGGREGATE_REDUCERS = [
|
|
2207
|
+
"mean",
|
|
2208
|
+
"median",
|
|
2209
|
+
"min",
|
|
2210
|
+
"max",
|
|
2211
|
+
"sum",
|
|
2212
|
+
"any",
|
|
2213
|
+
"all"
|
|
2214
|
+
];
|
|
2215
|
+
var GroupTemplateIdSchema = z.enum(GROUP_TEMPLATE_IDS);
|
|
2216
|
+
var AggregateReducerSchema = z.enum(AGGREGATE_REDUCERS);
|
|
2217
|
+
/** One member. The field is stored so occupancy can name motion or binary. */
|
|
2218
|
+
var HelperMemberSchema = z.object({
|
|
2219
|
+
source: CompositionSourceRefSchema,
|
|
2220
|
+
cap: z.string().min(1),
|
|
2221
|
+
fieldPath: z.string().min(1)
|
|
2222
|
+
});
|
|
2223
|
+
/**
|
|
2224
|
+
* Phase 1a is groups only. Math, integral and statistics stay off this union
|
|
2225
|
+
* until the composer can run them — a control must not save a spec it cannot.
|
|
2226
|
+
*/
|
|
2227
|
+
var GroupHelperSpecSchema = z.object({
|
|
2228
|
+
kind: z.literal("group"),
|
|
2229
|
+
templateId: GroupTemplateIdSchema,
|
|
2230
|
+
aggregate: AggregateReducerSchema,
|
|
2231
|
+
members: z.array(HelperMemberSchema).min(1).max(64)
|
|
2232
|
+
});
|
|
2233
|
+
var HelperSpecSchema = z.discriminatedUnion("kind", [GroupHelperSpecSchema]);
|
|
2234
|
+
//#endregion
|
|
2163
2235
|
//#region src/composition/composition.ts
|
|
2164
2236
|
/**
|
|
2165
2237
|
* A COMPOSITION: a device assembled from other devices' state (D659).
|
|
@@ -2195,11 +2267,6 @@ var MAX_COMPOSITION_FEATURES = 16;
|
|
|
2195
2267
|
var MAX_COMPOSITION_FIELDS_PER_FEATURE = 32;
|
|
2196
2268
|
/** Longest snippet a `code` source may carry (slice 4). */
|
|
2197
2269
|
var MAX_COMPOSITION_CODE_LENGTH = 2e4;
|
|
2198
|
-
var CompositionSourceRefSchema = z.object({
|
|
2199
|
-
/** The owning addon; `stableId` is unique only within it. */
|
|
2200
|
-
addonId: z.string().min(1),
|
|
2201
|
-
stableId: z.string().min(1)
|
|
2202
|
-
});
|
|
2203
2270
|
/** One field of one capability of one source device. */
|
|
2204
2271
|
var CompositionFieldReadSchema = z.object({
|
|
2205
2272
|
source: CompositionSourceRefSchema,
|
|
@@ -2242,10 +2309,42 @@ var CompositionCodeSourceSchema = z.object({
|
|
|
2242
2309
|
kind: z.literal("code"),
|
|
2243
2310
|
code: z.string().min(1).max(MAX_COMPOSITION_CODE_LENGTH)
|
|
2244
2311
|
});
|
|
2312
|
+
/**
|
|
2313
|
+
* `aggregate`: a group reducer. Offline and unknown reads are excluded, not
|
|
2314
|
+
* folded in as 0 or false (D944). Free expressions stay `expression` so a
|
|
2315
|
+
* stale member is still included there.
|
|
2316
|
+
*/
|
|
2317
|
+
var CompositionAggregateSourceSchema = z.object({
|
|
2318
|
+
kind: z.literal("aggregate"),
|
|
2319
|
+
reducer: z.enum([
|
|
2320
|
+
"mean",
|
|
2321
|
+
"median",
|
|
2322
|
+
"min",
|
|
2323
|
+
"max",
|
|
2324
|
+
"sum",
|
|
2325
|
+
"any",
|
|
2326
|
+
"all"
|
|
2327
|
+
]),
|
|
2328
|
+
reads: z.array(CompositionFieldReadSchema).min(1).max(64),
|
|
2329
|
+
/** `value` is the reading; the others are the member counts. */
|
|
2330
|
+
publish: z.enum([
|
|
2331
|
+
"value",
|
|
2332
|
+
"included",
|
|
2333
|
+
"excluded",
|
|
2334
|
+
"total"
|
|
2335
|
+
]),
|
|
2336
|
+
/** What a `value` publish does when nobody is included. Counts ignore this. */
|
|
2337
|
+
empty: z.enum([
|
|
2338
|
+
"null",
|
|
2339
|
+
"omit",
|
|
2340
|
+
"offline"
|
|
2341
|
+
])
|
|
2342
|
+
});
|
|
2245
2343
|
var CompositionFieldSourceSchema = z.discriminatedUnion("kind", [
|
|
2246
2344
|
CompositionFromSourceSchema,
|
|
2247
2345
|
CompositionExpressionSourceSchema,
|
|
2248
|
-
CompositionCodeSourceSchema
|
|
2346
|
+
CompositionCodeSourceSchema,
|
|
2347
|
+
CompositionAggregateSourceSchema
|
|
2249
2348
|
]);
|
|
2250
2349
|
/** `forward`: RESERVED for slice 3. Argument mapping arrives there as an additive optional `args`. */
|
|
2251
2350
|
var CompositionForwardCommandSchema = z.object({
|
|
@@ -2311,7 +2410,13 @@ var CompositionExistingTargetSchema = z.object({
|
|
|
2311
2410
|
var CompositionTargetSchema = z.discriminatedUnion("kind", [CompositionNewTargetSchema, CompositionExistingTargetSchema]);
|
|
2312
2411
|
var CompositionSchema = z.object({
|
|
2313
2412
|
target: CompositionTargetSchema,
|
|
2314
|
-
features: z.array(CompositionFeatureSchema).min(1).max(16)
|
|
2413
|
+
features: z.array(CompositionFeatureSchema).min(1).max(16),
|
|
2414
|
+
/**
|
|
2415
|
+
* Present when the block is a helper template. Absent on a free
|
|
2416
|
+
* composition (the room example, device 4603). The editor reads this,
|
|
2417
|
+
* never the compiled features.
|
|
2418
|
+
*/
|
|
2419
|
+
helper: HelperSpecSchema.optional()
|
|
2315
2420
|
}).superRefine((composition, ctx) => {
|
|
2316
2421
|
const seen = /* @__PURE__ */ new Set();
|
|
2317
2422
|
composition.features.forEach((feature, index) => {
|
|
@@ -2358,6 +2463,7 @@ function fieldReads(source) {
|
|
|
2358
2463
|
cap: binding.cap,
|
|
2359
2464
|
fieldPath: binding.fieldPath
|
|
2360
2465
|
}] : []);
|
|
2466
|
+
case "aggregate": return source.reads;
|
|
2361
2467
|
case "code": return [];
|
|
2362
2468
|
}
|
|
2363
2469
|
}
|
|
@@ -2384,4 +2490,4 @@ function featureSources(feature) {
|
|
|
2384
2490
|
return featureFieldEntries(feature).map((e) => e.source);
|
|
2385
2491
|
}
|
|
2386
2492
|
//#endregion
|
|
2387
|
-
export {
|
|
2493
|
+
export { evaluateStatefulExpressionCall as $, compositionFeatureEnabled as A, evaluateSensorLevelEdge as At, BINARY_AGGREGATES as B, canonicalHash as Bt, CompositionTargetSchema as C, ExpressionParseError as Ct, MAX_COMPOSITION_ITEMS as D, SOURCE_CAP_CHANGED_AT_FIELD as Dt, MAX_COMPOSITION_FIELDS_PER_FEATURE as E, SOURCE_CAP_ACTIVE_FIELD as Et, featureFieldEntries as F, chooseFfmpegBinary as Ft, HelperSpecSchema as G, buildFfmpegArgs as Gt, GroupHelperSpecSchema as H, AUDIO_PRESETS as Ht, featureSources as I, ffmpegBinaryName as It, CompositionSourceRefSchema as J, invocationFromEncodeProfile as Jt, MAX_HELPER_MEMBERS as K, buildInputArgs as Kt, fieldReads as L, FFMPEG_RELEASE as Lt, compositionReadKey as M, sliceActiveValue as Mt, compositionSliceKey as N, sliceChangedAt as Nt, composedDeviceRef as O, SOURCE_DEVICE_TYPES as Ot, compositionSourceKey as P, FFMPEG_PATH_ENV as Pt, evaluateExpressionSource as Q, resolveStreamMaps as Qt, AGGREGATE_REDUCERS as R, getFfmpegArtifact as Rt, CompositionSchema as S, ExpressionEvalError as St, MAX_COMPOSITION_FEATURES as T, SOURCE_CAPS as Tt, GroupTemplateIdSchema as U, audioPlanFromEncodeProfile as Ut, GROUP_TEMPLATE_IDS as V, Fmp4BoxSplitter as Vt, HelperMemberSchema as W, buildAudioArgs as Wt, cloneStatefulExpressionMemory as X, logBannerArgs as Xt, EXPRESSION_INJECTED_NOW as Y, isSoftwareDecode as Yt, createStatefulExpressionMemory as Z, pickVideoEncoder as Zt, CompositionFromSourceSchema as _, EXPRESSION_BUILTIN_NAMES as _t, CUSTOMIZATION_BLOCK_NAME_PREFIX as a, compileExpressionSafe as at, CompositionNewTargetSchema as b, evaluateRose as bt, CompositionCodeSourceSchema as c, EXPRESSION_COMPILE_CACHE_CAPACITY as ct, CompositionExpressionSourceSchema as d, MAX_EXPRESSION_BINDINGS as dt, toExpressionValue as et, CompositionFeatureSchema as f, MAX_EXPRESSION_CALL_ARGS as ft, CompositionForwardCommandSchema as g, EXPRESSION_BUILTINS as gt, CompositionFieldsFeatureSchema as h, RESERVED_BINDING_NAMES as ht, COMPOSITION_ITEM_KEY_RE as i, compileExpression as it, compositionItemFieldPath as j, isSourceCap as jt, composedDeviceStableId as k, evaluateSensorEdge as kt, CompositionCommandTargetSchema as l, EXPRESSION_IDENTIFIER_RE as lt, CompositionFieldSourceSchema as m, MAX_EXPRESSION_SOURCE_LENGTH as mt, COMPOSER_ADDON_ID as n, createExpressionScope as nt, CompositionAggregateSourceSchema as o, parseExpression as ot, CompositionFieldReadSchema as p, MAX_EXPRESSION_EVAL_STEPS as pt, NUMERIC_AGGREGATES as q, buildVideoArgs as qt, COMPOSITION_ITEM_ARRAY_PATH as r, evaluateAst as rt, CompositionBindingSchema as s, tokenize as st, COMPOSED_DEVICE_STABLE_ID_PREFIX as t, validateExpressionSource as tt, CompositionExistingTargetSchema as u, MAX_EXPRESSION_AST_NODES as ut, CompositionItemEntrySchema as v, disarmRoseMemory as vt, MAX_COMPOSITION_CODE_LENGTH as w, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as wt, CompositionPassthroughFeatureSchema as x, isStatefulBuiltin as xt, CompositionLiteralBindingSchema as y, evaluateCount as yt, AggregateReducerSchema as z, getFfmpegDownloadUrl as zt };
|
|
@@ -2160,6 +2160,78 @@ function evaluateExpressionSource(expr, bindingValues, now, opts) {
|
|
|
2160
2160
|
}
|
|
2161
2161
|
}
|
|
2162
2162
|
//#endregion
|
|
2163
|
+
//#region src/composition/source-ref.ts
|
|
2164
|
+
/**
|
|
2165
|
+
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
2166
|
+
* id. Split out so helper schemas can name it without a cycle through
|
|
2167
|
+
* `composition.ts` (D659).
|
|
2168
|
+
*/
|
|
2169
|
+
var CompositionSourceRefSchema = zod.z.object({
|
|
2170
|
+
/** The owning addon; `stableId` is unique only within it. */
|
|
2171
|
+
addonId: zod.z.string().min(1),
|
|
2172
|
+
stableId: zod.z.string().min(1)
|
|
2173
|
+
});
|
|
2174
|
+
//#endregion
|
|
2175
|
+
//#region src/composition/helpers/spec.ts
|
|
2176
|
+
/**
|
|
2177
|
+
* A helper spec is what the editor stores and reads back (D944). The compiled
|
|
2178
|
+
* features are a projection; the editor never edits the expression.
|
|
2179
|
+
*/
|
|
2180
|
+
/** A group may name more members than an expression call (the 16-arg cap). */
|
|
2181
|
+
var MAX_HELPER_MEMBERS = 64;
|
|
2182
|
+
var GROUP_TEMPLATE_IDS = [
|
|
2183
|
+
"temperature",
|
|
2184
|
+
"humidity",
|
|
2185
|
+
"pressure",
|
|
2186
|
+
"illuminance",
|
|
2187
|
+
"power",
|
|
2188
|
+
"energy",
|
|
2189
|
+
"battery",
|
|
2190
|
+
"numeric",
|
|
2191
|
+
"motion",
|
|
2192
|
+
"contact",
|
|
2193
|
+
"leak",
|
|
2194
|
+
"smoke",
|
|
2195
|
+
"occupancy",
|
|
2196
|
+
"binary"
|
|
2197
|
+
];
|
|
2198
|
+
var NUMERIC_AGGREGATES = [
|
|
2199
|
+
"mean",
|
|
2200
|
+
"median",
|
|
2201
|
+
"min",
|
|
2202
|
+
"max",
|
|
2203
|
+
"sum"
|
|
2204
|
+
];
|
|
2205
|
+
var BINARY_AGGREGATES = ["any", "all"];
|
|
2206
|
+
var AGGREGATE_REDUCERS = [
|
|
2207
|
+
"mean",
|
|
2208
|
+
"median",
|
|
2209
|
+
"min",
|
|
2210
|
+
"max",
|
|
2211
|
+
"sum",
|
|
2212
|
+
"any",
|
|
2213
|
+
"all"
|
|
2214
|
+
];
|
|
2215
|
+
var GroupTemplateIdSchema = zod.z.enum(GROUP_TEMPLATE_IDS);
|
|
2216
|
+
var AggregateReducerSchema = zod.z.enum(AGGREGATE_REDUCERS);
|
|
2217
|
+
/** One member. The field is stored so occupancy can name motion or binary. */
|
|
2218
|
+
var HelperMemberSchema = zod.z.object({
|
|
2219
|
+
source: CompositionSourceRefSchema,
|
|
2220
|
+
cap: zod.z.string().min(1),
|
|
2221
|
+
fieldPath: zod.z.string().min(1)
|
|
2222
|
+
});
|
|
2223
|
+
/**
|
|
2224
|
+
* Phase 1a is groups only. Math, integral and statistics stay off this union
|
|
2225
|
+
* until the composer can run them — a control must not save a spec it cannot.
|
|
2226
|
+
*/
|
|
2227
|
+
var GroupHelperSpecSchema = zod.z.object({
|
|
2228
|
+
kind: zod.z.literal("group"),
|
|
2229
|
+
templateId: GroupTemplateIdSchema,
|
|
2230
|
+
aggregate: AggregateReducerSchema,
|
|
2231
|
+
members: zod.z.array(HelperMemberSchema).min(1).max(64)
|
|
2232
|
+
});
|
|
2233
|
+
var HelperSpecSchema = zod.z.discriminatedUnion("kind", [GroupHelperSpecSchema]);
|
|
2234
|
+
//#endregion
|
|
2163
2235
|
//#region src/composition/composition.ts
|
|
2164
2236
|
/**
|
|
2165
2237
|
* A COMPOSITION: a device assembled from other devices' state (D659).
|
|
@@ -2195,11 +2267,6 @@ var MAX_COMPOSITION_FEATURES = 16;
|
|
|
2195
2267
|
var MAX_COMPOSITION_FIELDS_PER_FEATURE = 32;
|
|
2196
2268
|
/** Longest snippet a `code` source may carry (slice 4). */
|
|
2197
2269
|
var MAX_COMPOSITION_CODE_LENGTH = 2e4;
|
|
2198
|
-
var CompositionSourceRefSchema = zod.z.object({
|
|
2199
|
-
/** The owning addon; `stableId` is unique only within it. */
|
|
2200
|
-
addonId: zod.z.string().min(1),
|
|
2201
|
-
stableId: zod.z.string().min(1)
|
|
2202
|
-
});
|
|
2203
2270
|
/** One field of one capability of one source device. */
|
|
2204
2271
|
var CompositionFieldReadSchema = zod.z.object({
|
|
2205
2272
|
source: CompositionSourceRefSchema,
|
|
@@ -2242,10 +2309,42 @@ var CompositionCodeSourceSchema = zod.z.object({
|
|
|
2242
2309
|
kind: zod.z.literal("code"),
|
|
2243
2310
|
code: zod.z.string().min(1).max(MAX_COMPOSITION_CODE_LENGTH)
|
|
2244
2311
|
});
|
|
2312
|
+
/**
|
|
2313
|
+
* `aggregate`: a group reducer. Offline and unknown reads are excluded, not
|
|
2314
|
+
* folded in as 0 or false (D944). Free expressions stay `expression` so a
|
|
2315
|
+
* stale member is still included there.
|
|
2316
|
+
*/
|
|
2317
|
+
var CompositionAggregateSourceSchema = zod.z.object({
|
|
2318
|
+
kind: zod.z.literal("aggregate"),
|
|
2319
|
+
reducer: zod.z.enum([
|
|
2320
|
+
"mean",
|
|
2321
|
+
"median",
|
|
2322
|
+
"min",
|
|
2323
|
+
"max",
|
|
2324
|
+
"sum",
|
|
2325
|
+
"any",
|
|
2326
|
+
"all"
|
|
2327
|
+
]),
|
|
2328
|
+
reads: zod.z.array(CompositionFieldReadSchema).min(1).max(64),
|
|
2329
|
+
/** `value` is the reading; the others are the member counts. */
|
|
2330
|
+
publish: zod.z.enum([
|
|
2331
|
+
"value",
|
|
2332
|
+
"included",
|
|
2333
|
+
"excluded",
|
|
2334
|
+
"total"
|
|
2335
|
+
]),
|
|
2336
|
+
/** What a `value` publish does when nobody is included. Counts ignore this. */
|
|
2337
|
+
empty: zod.z.enum([
|
|
2338
|
+
"null",
|
|
2339
|
+
"omit",
|
|
2340
|
+
"offline"
|
|
2341
|
+
])
|
|
2342
|
+
});
|
|
2245
2343
|
var CompositionFieldSourceSchema = zod.z.discriminatedUnion("kind", [
|
|
2246
2344
|
CompositionFromSourceSchema,
|
|
2247
2345
|
CompositionExpressionSourceSchema,
|
|
2248
|
-
CompositionCodeSourceSchema
|
|
2346
|
+
CompositionCodeSourceSchema,
|
|
2347
|
+
CompositionAggregateSourceSchema
|
|
2249
2348
|
]);
|
|
2250
2349
|
/** `forward`: RESERVED for slice 3. Argument mapping arrives there as an additive optional `args`. */
|
|
2251
2350
|
var CompositionForwardCommandSchema = zod.z.object({
|
|
@@ -2311,7 +2410,13 @@ var CompositionExistingTargetSchema = zod.z.object({
|
|
|
2311
2410
|
var CompositionTargetSchema = zod.z.discriminatedUnion("kind", [CompositionNewTargetSchema, CompositionExistingTargetSchema]);
|
|
2312
2411
|
var CompositionSchema = zod.z.object({
|
|
2313
2412
|
target: CompositionTargetSchema,
|
|
2314
|
-
features: zod.z.array(CompositionFeatureSchema).min(1).max(16)
|
|
2413
|
+
features: zod.z.array(CompositionFeatureSchema).min(1).max(16),
|
|
2414
|
+
/**
|
|
2415
|
+
* Present when the block is a helper template. Absent on a free
|
|
2416
|
+
* composition (the room example, device 4603). The editor reads this,
|
|
2417
|
+
* never the compiled features.
|
|
2418
|
+
*/
|
|
2419
|
+
helper: HelperSpecSchema.optional()
|
|
2315
2420
|
}).superRefine((composition, ctx) => {
|
|
2316
2421
|
const seen = /* @__PURE__ */ new Set();
|
|
2317
2422
|
composition.features.forEach((feature, index) => {
|
|
@@ -2358,6 +2463,7 @@ function fieldReads(source) {
|
|
|
2358
2463
|
cap: binding.cap,
|
|
2359
2464
|
fieldPath: binding.fieldPath
|
|
2360
2465
|
}] : []);
|
|
2466
|
+
case "aggregate": return source.reads;
|
|
2361
2467
|
case "code": return [];
|
|
2362
2468
|
}
|
|
2363
2469
|
}
|
|
@@ -2384,12 +2490,30 @@ function featureSources(feature) {
|
|
|
2384
2490
|
return featureFieldEntries(feature).map((e) => e.source);
|
|
2385
2491
|
}
|
|
2386
2492
|
//#endregion
|
|
2493
|
+
Object.defineProperty(exports, "AGGREGATE_REDUCERS", {
|
|
2494
|
+
enumerable: true,
|
|
2495
|
+
get: function() {
|
|
2496
|
+
return AGGREGATE_REDUCERS;
|
|
2497
|
+
}
|
|
2498
|
+
});
|
|
2387
2499
|
Object.defineProperty(exports, "AUDIO_PRESETS", {
|
|
2388
2500
|
enumerable: true,
|
|
2389
2501
|
get: function() {
|
|
2390
2502
|
return AUDIO_PRESETS;
|
|
2391
2503
|
}
|
|
2392
2504
|
});
|
|
2505
|
+
Object.defineProperty(exports, "AggregateReducerSchema", {
|
|
2506
|
+
enumerable: true,
|
|
2507
|
+
get: function() {
|
|
2508
|
+
return AggregateReducerSchema;
|
|
2509
|
+
}
|
|
2510
|
+
});
|
|
2511
|
+
Object.defineProperty(exports, "BINARY_AGGREGATES", {
|
|
2512
|
+
enumerable: true,
|
|
2513
|
+
get: function() {
|
|
2514
|
+
return BINARY_AGGREGATES;
|
|
2515
|
+
}
|
|
2516
|
+
});
|
|
2393
2517
|
Object.defineProperty(exports, "COMPOSED_DEVICE_STABLE_ID_PREFIX", {
|
|
2394
2518
|
enumerable: true,
|
|
2395
2519
|
get: function() {
|
|
@@ -2420,6 +2544,12 @@ Object.defineProperty(exports, "CUSTOMIZATION_BLOCK_NAME_PREFIX", {
|
|
|
2420
2544
|
return CUSTOMIZATION_BLOCK_NAME_PREFIX;
|
|
2421
2545
|
}
|
|
2422
2546
|
});
|
|
2547
|
+
Object.defineProperty(exports, "CompositionAggregateSourceSchema", {
|
|
2548
|
+
enumerable: true,
|
|
2549
|
+
get: function() {
|
|
2550
|
+
return CompositionAggregateSourceSchema;
|
|
2551
|
+
}
|
|
2552
|
+
});
|
|
2423
2553
|
Object.defineProperty(exports, "CompositionBindingSchema", {
|
|
2424
2554
|
enumerable: true,
|
|
2425
2555
|
get: function() {
|
|
@@ -2594,6 +2724,36 @@ Object.defineProperty(exports, "Fmp4BoxSplitter", {
|
|
|
2594
2724
|
return Fmp4BoxSplitter;
|
|
2595
2725
|
}
|
|
2596
2726
|
});
|
|
2727
|
+
Object.defineProperty(exports, "GROUP_TEMPLATE_IDS", {
|
|
2728
|
+
enumerable: true,
|
|
2729
|
+
get: function() {
|
|
2730
|
+
return GROUP_TEMPLATE_IDS;
|
|
2731
|
+
}
|
|
2732
|
+
});
|
|
2733
|
+
Object.defineProperty(exports, "GroupHelperSpecSchema", {
|
|
2734
|
+
enumerable: true,
|
|
2735
|
+
get: function() {
|
|
2736
|
+
return GroupHelperSpecSchema;
|
|
2737
|
+
}
|
|
2738
|
+
});
|
|
2739
|
+
Object.defineProperty(exports, "GroupTemplateIdSchema", {
|
|
2740
|
+
enumerable: true,
|
|
2741
|
+
get: function() {
|
|
2742
|
+
return GroupTemplateIdSchema;
|
|
2743
|
+
}
|
|
2744
|
+
});
|
|
2745
|
+
Object.defineProperty(exports, "HelperMemberSchema", {
|
|
2746
|
+
enumerable: true,
|
|
2747
|
+
get: function() {
|
|
2748
|
+
return HelperMemberSchema;
|
|
2749
|
+
}
|
|
2750
|
+
});
|
|
2751
|
+
Object.defineProperty(exports, "HelperSpecSchema", {
|
|
2752
|
+
enumerable: true,
|
|
2753
|
+
get: function() {
|
|
2754
|
+
return HelperSpecSchema;
|
|
2755
|
+
}
|
|
2756
|
+
});
|
|
2597
2757
|
Object.defineProperty(exports, "MAX_COMPOSITION_CODE_LENGTH", {
|
|
2598
2758
|
enumerable: true,
|
|
2599
2759
|
get: function() {
|
|
@@ -2648,6 +2808,18 @@ Object.defineProperty(exports, "MAX_EXPRESSION_SOURCE_LENGTH", {
|
|
|
2648
2808
|
return MAX_EXPRESSION_SOURCE_LENGTH;
|
|
2649
2809
|
}
|
|
2650
2810
|
});
|
|
2811
|
+
Object.defineProperty(exports, "MAX_HELPER_MEMBERS", {
|
|
2812
|
+
enumerable: true,
|
|
2813
|
+
get: function() {
|
|
2814
|
+
return MAX_HELPER_MEMBERS;
|
|
2815
|
+
}
|
|
2816
|
+
});
|
|
2817
|
+
Object.defineProperty(exports, "NUMERIC_AGGREGATES", {
|
|
2818
|
+
enumerable: true,
|
|
2819
|
+
get: function() {
|
|
2820
|
+
return NUMERIC_AGGREGATES;
|
|
2821
|
+
}
|
|
2822
|
+
});
|
|
2651
2823
|
Object.defineProperty(exports, "RESERVED_BINDING_NAMES", {
|
|
2652
2824
|
enumerable: true,
|
|
2653
2825
|
get: function() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CapVocabularySlice } from '../types.js';
|
|
2
|
-
type SensorCap = 'air-quality-sensor' | 'ambient-light-sensor' | 'binary' | 'carbon-monoxide' | 'connectivity' | 'contact' | 'enum-sensor' | 'flood' | 'gas' | 'humidity-sensor' | 'motion' | 'numeric-sensor' | 'power-meter' | 'presence' | 'pressure-sensor' | 'smoke' | 'tamper' | 'temperature-sensor' | 'vibration' | 'weather' | 'battery' | 'network-link' | 'device-status' | 'doorbell' | 'event-emitter';
|
|
2
|
+
type SensorCap = 'air-quality-sensor' | 'ambient-light-sensor' | 'binary' | 'carbon-monoxide' | 'connectivity' | 'contact' | 'enum-sensor' | 'flood' | 'gas' | 'group-status' | 'humidity-sensor' | 'motion' | 'numeric-sensor' | 'power-meter' | 'presence' | 'pressure-sensor' | 'smoke' | 'tamper' | 'temperature-sensor' | 'vibration' | 'weather' | 'battery' | 'network-link' | 'device-status' | 'doorbell' | 'event-emitter';
|
|
3
3
|
/** The sensor family of the vocabulary. */
|
|
4
4
|
export declare const SENSOR_CAP_VOCABULARY: CapVocabularySlice<SensorCap>;
|
|
5
5
|
export {};
|
|
@@ -3843,6 +3843,20 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
3843
3843
|
meta: object;
|
|
3844
3844
|
}>;
|
|
3845
3845
|
}>>;
|
|
3846
|
+
groupStatus: TRPCBuiltRouter<{
|
|
3847
|
+
ctx: TrpcContext;
|
|
3848
|
+
meta: object;
|
|
3849
|
+
errorShape: AugmentedErrorShape;
|
|
3850
|
+
transformer: true;
|
|
3851
|
+
}, TRPCDecorateCreateRouterOptions<{
|
|
3852
|
+
getStatus: TRPCQueryProcedure<{
|
|
3853
|
+
input: {
|
|
3854
|
+
[x: string]: unknown;
|
|
3855
|
+
} & z.input<typeof DEVICE_STATUS_METHOD.getStatus.input>;
|
|
3856
|
+
output: z.infer<typeof DEVICE_STATUS_METHOD.getStatus.output>;
|
|
3857
|
+
meta: object;
|
|
3858
|
+
}>;
|
|
3859
|
+
}>>;
|
|
3846
3860
|
heatingValve: TRPCBuiltRouter<{
|
|
3847
3861
|
ctx: TrpcContext;
|
|
3848
3862
|
meta: object;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `ALL_CAPABILITY_DEFINITIONS` (the whole Zod schema graph, ~+100 MB heap per
|
|
6
6
|
* runner). See docs/decisions/adr-0028.md.
|
|
7
7
|
*
|
|
8
|
-
* Coverage: 1 advance-derived caps,
|
|
8
|
+
* Coverage: 1 advance-derived caps, 75 caps with 351 state leaves.
|
|
9
9
|
*/
|
|
10
10
|
/** A bindable scalar in a capability's runtime state. */
|
|
11
11
|
export interface CapStateLeaf {
|
|
@@ -30,6 +30,7 @@ import type { FanControlStatusSchema } from '../capabilities/fan-control.cap.js'
|
|
|
30
30
|
import type { FeatureProbeStatusSchema } from '../capabilities/feature-probe.cap.js';
|
|
31
31
|
import type { FloodStatusSchema } from '../capabilities/flood.cap.js';
|
|
32
32
|
import type { GasStatusSchema } from '../capabilities/gas.cap.js';
|
|
33
|
+
import type { groupStatusCapability } from '../capabilities/group-status.cap.js';
|
|
33
34
|
import type { HeatingValveStatusSchema } from '../capabilities/heating-valve.cap.js';
|
|
34
35
|
import type { HumidifierStatusSchema } from '../capabilities/humidifier.cap.js';
|
|
35
36
|
import type { HumiditySensorStatusSchema } from '../capabilities/humidity-sensor.cap.js';
|
|
@@ -111,6 +112,7 @@ export type CapStatusTypeMap = {
|
|
|
111
112
|
readonly 'feature-probe': z.infer<typeof FeatureProbeStatusSchema>;
|
|
112
113
|
readonly 'flood': z.infer<typeof FloodStatusSchema>;
|
|
113
114
|
readonly 'gas': z.infer<typeof GasStatusSchema>;
|
|
115
|
+
readonly 'group-status': z.infer<(typeof groupStatusCapability)['status']['schema']>;
|
|
114
116
|
readonly 'heating-valve': z.infer<typeof HeatingValveStatusSchema>;
|
|
115
117
|
readonly 'humidifier': z.infer<typeof HumidifierStatusSchema>;
|
|
116
118
|
readonly 'humidity-sensor': z.infer<typeof HumiditySensorStatusSchema>;
|
|
@@ -163,4 +165,4 @@ export type CapNameWithStatus = keyof CapStatusTypeMap;
|
|
|
163
165
|
* aggregator to enumerate caps whose `status` should be polled +
|
|
164
166
|
* streamed via `subscribeDeviceStatusAggregate`.
|
|
165
167
|
*/
|
|
166
|
-
export declare const CAP_NAMES_WITH_STATUS: readonly ["accessories", "air-quality-sensor", "alarm-panel", "ambient-light-sensor", "automation-control", "battery", "binary", "brightness", "broker", "camera-credentials", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "cover", "day-night", "device-adoption", "device-discovery", "device-export", "device-status", "dishwasher", "doorbell", "enum-sensor", "event-emitter", "fan-control", "feature-probe", "flood", "gas", "heating-valve", "humidifier", "humidity-sensor", "image", "image-settings", "intercom", "lawn-mower-control", "lock-control", "media-player", "motion", "motion-trigger", "motion-zones", "mqtt-broker", "native-object-detection", "navigation", "network-link", "notifier", "numeric-sensor", "osd", "pet-feeder", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "recording-archive", "recording-onboard", "recording-signal", "running-state", "scene-monitor", "script-runner", "smoke", "snapshot", "stream-params", "switch", "tamper", "temperature-sensor", "update", "vacuum-control", "valve", "vibration", "water-heater", "weather"];
|
|
168
|
+
export declare const CAP_NAMES_WITH_STATUS: readonly ["accessories", "air-quality-sensor", "alarm-panel", "ambient-light-sensor", "automation-control", "battery", "binary", "brightness", "broker", "camera-credentials", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "cover", "day-night", "device-adoption", "device-discovery", "device-export", "device-status", "dishwasher", "doorbell", "enum-sensor", "event-emitter", "fan-control", "feature-probe", "flood", "gas", "group-status", "heating-valve", "humidifier", "humidity-sensor", "image", "image-settings", "intercom", "lawn-mower-control", "lock-control", "media-player", "motion", "motion-trigger", "motion-zones", "mqtt-broker", "native-object-detection", "navigation", "network-link", "notifier", "numeric-sensor", "osd", "pet-feeder", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "recording-archive", "recording-onboard", "recording-signal", "running-state", "scene-monitor", "script-runner", "smoke", "snapshot", "stream-params", "switch", "tamper", "temperature-sensor", "update", "vacuum-control", "valve", "vibration", "water-heater", "weather"];
|
|
@@ -72,6 +72,7 @@ export { featureProbeCapability } from '../capabilities/feature-probe.cap.js';
|
|
|
72
72
|
export { filesystemBrowseCapability } from '../capabilities/filesystem-browse.cap.js';
|
|
73
73
|
export { floodCapability } from '../capabilities/flood.cap.js';
|
|
74
74
|
export { gasCapability } from '../capabilities/gas.cap.js';
|
|
75
|
+
export { groupStatusCapability } from '../capabilities/group-status.cap.js';
|
|
75
76
|
export { heatingValveCapability } from '../capabilities/heating-valve.cap.js';
|
|
76
77
|
export { humidifierCapability } from '../capabilities/humidifier.cap.js';
|
|
77
78
|
export { humiditySensorCapability } from '../capabilities/humidity-sensor.cap.js';
|
|
@@ -254,6 +255,7 @@ export declare const CAPABILITY_NAMES: {
|
|
|
254
255
|
readonly filesystemBrowse: 'filesystem-browse';
|
|
255
256
|
readonly flood: 'flood';
|
|
256
257
|
readonly gas: 'gas';
|
|
258
|
+
readonly groupStatus: 'group-status';
|
|
257
259
|
readonly heatingValve: 'heating-valve';
|
|
258
260
|
readonly humidifier: 'humidifier';
|
|
259
261
|
readonly humiditySensor: 'humidity-sensor';
|
|
@@ -449,6 +451,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
|
|
|
449
451
|
readonly filesystemBrowse: TRouter;
|
|
450
452
|
readonly flood: TRouter;
|
|
451
453
|
readonly gas: TRouter;
|
|
454
|
+
readonly groupStatus: TRouter;
|
|
452
455
|
readonly heatingValve: TRouter;
|
|
453
456
|
readonly humidifier: TRouter;
|
|
454
457
|
readonly humiditySensor: TRouter;
|
|
@@ -557,8 +560,8 @@ export interface CapabilityRouterMap<TRouter = unknown> {
|
|
|
557
560
|
readonly zoneRules: TRouter;
|
|
558
561
|
readonly zones: TRouter;
|
|
559
562
|
}
|
|
560
|
-
/** Capability names whose mode is `singleton` (
|
|
561
|
-
export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'dishwasher', 'display-palette', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'heating-valve', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'record-entries', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'records', 'running-state', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
|
|
563
|
+
/** Capability names whose mode is `singleton` (147 caps). */
|
|
564
|
+
export declare const SINGLETON_CAPABILITY_NAMES: readonly ['accessories', 'addon-pages', 'addon-settings', 'addon-widgets', 'addons', 'admin-ui', 'air-quality-sensor', 'alarm-panel', 'alerts', 'ambient-light-sensor', 'audio-analysis', 'audio-analyzer', 'audio-codec', 'audio-metrics', 'automation-control', 'backup', 'battery', 'binary', 'brightness', 'button', 'calendars', 'camera-credentials', 'camera-grid-layout', 'camera-pipeline-config', 'camera-streams', 'carbon-monoxide', 'climate-control', 'color', 'composer', 'connectivity', 'consumables', 'contact', 'control', 'core-blocks', 'cover', 'database-snapshot', 'day-night', 'decoder', 'detection-pipeline', 'device-admin-link', 'device-credentials', 'device-discovery', 'device-history', 'device-manager', 'device-ops', 'device-state', 'device-status', 'dishwasher', 'display-palette', 'doorbell', 'enum-sensor', 'event-emitter', 'face-gallery', 'fan-control', 'feature-probe', 'filesystem-browse', 'flood', 'gas', 'group-status', 'heating-valve', 'humidifier', 'humidity-sensor', 'image', 'image-settings', 'integrations', 'intercom', 'keychain', 'keychain-admin', 'lawn-mower-control', 'llm-runtime', 'local-network', 'lock-control', 'media-player', 'metrics-provider', 'model-convert', 'model-distributor', 'motion', 'motion-detection', 'motion-trigger', 'motion-zones', 'native-object-detection', 'navigation', 'network-link', 'network-quality', 'node-certificates', 'nodes', 'notification-rules', 'notifier', 'numeric-sensor', 'oidc-connections', 'osd', 'osd-manager', 'pet-feeder', 'pipeline-analytics', 'pipeline-executor', 'pipeline-orchestrator', 'pipeline-runner', 'plate-gallery', 'platform-probe', 'power-meter', 'presence', 'pressure-sensor', 'privacy-mask', 'ptz', 'ptz-autotrack', 'reboot', 'record-entries', 'recording-archive', 'recording-export', 'recording-onboard', 'recording-signal', 'records', 'running-state', 'scene-monitor', 'script-runner', 'server-management', 'settings-store', 'smoke', 'snapshot', 'sso-bridge', 'storage', 'storage-admin', 'storage-migration', 'stream-broker', 'stream-catalog', 'stream-params', 'stream-signals', 'switch', 'system', 'tamper', 'temperature-sensor', 'terminal-session', 'toast', 'training', 'update', 'user-management', 'vacuum-control', 'valve', 'vector-store', 'vibration', 'viewer-ui', 'water-heater', 'weather', 'webrtc-session', 'zone-analytics', 'zone-rules', 'zones'];
|
|
562
565
|
/** Union of singleton capability names (literal string union). */
|
|
563
566
|
export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
|
|
564
567
|
/** Capability names whose mode is `collection` (35 caps). */
|
|
@@ -27,6 +27,7 @@ import { fanControlCapability } from '../capabilities/fan-control.cap.js';
|
|
|
27
27
|
import { featureProbeCapability } from '../capabilities/feature-probe.cap.js';
|
|
28
28
|
import { floodCapability } from '../capabilities/flood.cap.js';
|
|
29
29
|
import { gasCapability } from '../capabilities/gas.cap.js';
|
|
30
|
+
import { groupStatusCapability } from '../capabilities/group-status.cap.js';
|
|
30
31
|
import { heatingValveCapability } from '../capabilities/heating-valve.cap.js';
|
|
31
32
|
import { humidifierCapability } from '../capabilities/humidifier.cap.js';
|
|
32
33
|
import { humiditySensorCapability } from '../capabilities/humidity-sensor.cap.js';
|
|
@@ -111,6 +112,7 @@ export interface DeviceLocalState {
|
|
|
111
112
|
featureProbe: InferRuntimeState<typeof featureProbeCapability>;
|
|
112
113
|
flood: InferRuntimeState<typeof floodCapability>;
|
|
113
114
|
gas: InferRuntimeState<typeof gasCapability>;
|
|
115
|
+
groupStatus: InferRuntimeState<typeof groupStatusCapability>;
|
|
114
116
|
heatingValve: InferRuntimeState<typeof heatingValveCapability>;
|
|
115
117
|
humidifier: InferRuntimeState<typeof humidifierCapability>;
|
|
116
118
|
humiditySensor: InferRuntimeState<typeof humiditySensorCapability>;
|
|
@@ -205,6 +207,7 @@ export interface CapNameToRuntimeStateMap {
|
|
|
205
207
|
'feature-probe': InferRuntimeState<typeof featureProbeCapability>;
|
|
206
208
|
'flood': InferRuntimeState<typeof floodCapability>;
|
|
207
209
|
'gas': InferRuntimeState<typeof gasCapability>;
|
|
210
|
+
'group-status': InferRuntimeState<typeof groupStatusCapability>;
|
|
208
211
|
'heating-valve': InferRuntimeState<typeof heatingValveCapability>;
|
|
209
212
|
'humidifier': InferRuntimeState<typeof humidifierCapability>;
|
|
210
213
|
'humidity-sensor': InferRuntimeState<typeof humiditySensorCapability>;
|
|
@@ -40,6 +40,7 @@ import type { fanControlCapability } from '../capabilities/fan-control.cap.js';
|
|
|
40
40
|
import type { featureProbeCapability } from '../capabilities/feature-probe.cap.js';
|
|
41
41
|
import type { floodCapability } from '../capabilities/flood.cap.js';
|
|
42
42
|
import type { gasCapability } from '../capabilities/gas.cap.js';
|
|
43
|
+
import type { groupStatusCapability } from '../capabilities/group-status.cap.js';
|
|
43
44
|
import type { heatingValveCapability } from '../capabilities/heating-valve.cap.js';
|
|
44
45
|
import type { humidifierCapability } from '../capabilities/humidifier.cap.js';
|
|
45
46
|
import type { humiditySensorCapability } from '../capabilities/humidity-sensor.cap.js';
|
|
@@ -145,6 +146,7 @@ export interface DeviceProxyState {
|
|
|
145
146
|
readonly featureProbe: SliceHandle<InferRuntimeState<typeof featureProbeCapability>>;
|
|
146
147
|
readonly flood: SliceHandle<InferRuntimeState<typeof floodCapability>>;
|
|
147
148
|
readonly gas: SliceHandle<InferRuntimeState<typeof gasCapability>>;
|
|
149
|
+
readonly groupStatus: SliceHandle<InferRuntimeState<typeof groupStatusCapability>>;
|
|
148
150
|
readonly heatingValve: SliceHandle<InferRuntimeState<typeof heatingValveCapability>>;
|
|
149
151
|
readonly humidifier: SliceHandle<InferRuntimeState<typeof humidifierCapability>>;
|
|
150
152
|
readonly humiditySensor: SliceHandle<InferRuntimeState<typeof humiditySensorCapability>>;
|
|
@@ -246,6 +248,7 @@ export interface DeviceProxy {
|
|
|
246
248
|
readonly featureProbe?: InferDeviceProxyCap<typeof featureProbeCapability>;
|
|
247
249
|
readonly flood?: InferDeviceProxyCap<typeof floodCapability>;
|
|
248
250
|
readonly gas?: InferDeviceProxyCap<typeof gasCapability>;
|
|
251
|
+
readonly groupStatus?: InferDeviceProxyCap<typeof groupStatusCapability>;
|
|
249
252
|
readonly heatingValve?: InferDeviceProxyCap<typeof heatingValveCapability>;
|
|
250
253
|
readonly humidifier?: InferDeviceProxyCap<typeof humidifierCapability>;
|
|
251
254
|
readonly humiditySensor?: InferDeviceProxyCap<typeof humiditySensorCapability>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CapabilityHistoryField, CapabilityHistoryItems } from '../capabilities/capability-definition.js';
|
|
2
2
|
/**
|
|
3
3
|
* Cap history catalog, projected from every `*.cap.ts` `history` block.
|
|
4
|
-
* 41 caps with series (75 series),
|
|
4
|
+
* 41 caps with series (75 series), 31 caps answered `'none'`.
|
|
5
5
|
* Field keys are `runtimeState` paths (`a.b` into fixed objects only).
|
|
6
6
|
*/
|
|
7
7
|
export declare const HISTORY_CATALOG: Readonly<Record<string, Readonly<Record<string, CapabilityHistoryField>>>>;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* scope+access check inside `protectedProcedure` (see
|
|
7
7
|
* `server/backend/src/api/trpc/trpc.middleware.ts`).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
9
|
+
* Coverage: 1383 method paths across 182 capabilities.
|
|
10
10
|
*/
|
|
11
11
|
import type { MethodRole } from '../auth/viewer-access.js';
|
|
12
12
|
import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* system-scope cap that takes a deviceId was previously never device-filtered
|
|
7
7
|
* — see the generator header).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
9
|
+
* Coverage: 547 methods carry a device reference, of which
|
|
10
10
|
* 174 are on SYSTEM-scope caps.
|
|
11
11
|
*
|
|
12
12
|
* Top-level fields, number arrays, and one-level arrays of objects carrying
|
|
@@ -11,7 +11,7 @@ export interface RuntimeStatePolicy {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
|
|
14
|
-
* `runtimeState`.
|
|
14
|
+
* `runtimeState`. 73 caps: 38 `restored`, 35 `session`.
|
|
15
15
|
*
|
|
16
16
|
* A cap absent from this map has no runtime-state slice at all. A cap PRESENT
|
|
17
17
|
* with `durability: 'session'` has one and has decided not to keep it.
|