@camstack/addon-provider-rademacher 0.2.130 → 0.2.132
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 +496 -141
- package/dist/addon.mjs +496 -141
- package/package.json +1 -1
package/dist/addon.mjs
CHANGED
|
@@ -6398,7 +6398,7 @@ var ZodIssueCode = {
|
|
|
6398
6398
|
var ZodFirstPartyTypeKind;
|
|
6399
6399
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6400
6400
|
//#endregion
|
|
6401
|
-
//#region ../types/dist/sleep-
|
|
6401
|
+
//#region ../types/dist/sleep-BSuCCFjf.mjs
|
|
6402
6402
|
/**
|
|
6403
6403
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6404
6404
|
* window to float samples (D455).
|
|
@@ -8781,9 +8781,9 @@ function normalizeAddonInitResult(result) {
|
|
|
8781
8781
|
return result;
|
|
8782
8782
|
}
|
|
8783
8783
|
/**
|
|
8784
|
-
* The share-view scope kinds a
|
|
8785
|
-
* and validates them (`
|
|
8786
|
-
* list); a data plane names the kinds it ACCEPTS in `share`.
|
|
8784
|
+
* The share-view scope kinds a share-link token can carry. The hub mints
|
|
8785
|
+
* and validates them (`ShareViewGrantSchema` builds its
|
|
8786
|
+
* enum from this list); a data plane names the kinds it ACCEPTS in `share`.
|
|
8787
8787
|
*/
|
|
8788
8788
|
var SHARE_VIEW_KINDS = ["grid-view", "events-view"];
|
|
8789
8789
|
/** The wire shape of {@link PeerBytesTicket} — see the type for what it is. */
|
|
@@ -13473,7 +13473,7 @@ var ConvertResultSchema = object({
|
|
|
13473
13473
|
* `super_admin` — collapsed onto the single boolean because every
|
|
13474
13474
|
* non-admin caller is governed by the same scope-check rules; the
|
|
13475
13475
|
* distinction was only ever used to route role-specific procedures
|
|
13476
|
-
* which we no longer have. CLI / webhook integrations are `
|
|
13476
|
+
* which we no longer have. CLI / webhook integrations are tokens (`auth.mintToken`)
|
|
13477
13477
|
* with `isAdmin: false` + an explicit scope list.
|
|
13478
13478
|
*/
|
|
13479
13479
|
/** Per-method access flavour. Materialised on every cap method via codegen. */
|
|
@@ -13662,10 +13662,12 @@ var AddonRoutesScopeSchema = object({
|
|
|
13662
13662
|
type: literal("addon-routes"),
|
|
13663
13663
|
access: array(MethodAccessSchema).min(1)
|
|
13664
13664
|
});
|
|
13665
|
+
var PreferencesSelfScopeSchema = object({ type: literal("preferences-self") });
|
|
13665
13666
|
var CredentialScopeSchema = union([
|
|
13666
13667
|
literal("*"),
|
|
13667
13668
|
ShareViewScopeSchema,
|
|
13668
13669
|
AddonRoutesScopeSchema,
|
|
13670
|
+
PreferencesSelfScopeSchema,
|
|
13669
13671
|
TokenScopeSchema
|
|
13670
13672
|
]);
|
|
13671
13673
|
object({
|
|
@@ -13674,6 +13676,55 @@ object({
|
|
|
13674
13676
|
jti: string().min(16),
|
|
13675
13677
|
scopes: array(CredentialScopeSchema).min(1)
|
|
13676
13678
|
});
|
|
13679
|
+
var PreferenceNamespaceSchema = string().regex(/^[a-z][a-z0-9.-]{0,63}$/);
|
|
13680
|
+
/** A namespace's value: a JSON object, opaque to the hub. */
|
|
13681
|
+
var PreferenceValueSchema = record(string(), unknown());
|
|
13682
|
+
var PreferenceDeviceIdSchema = string().min(1).max(64);
|
|
13683
|
+
/** A stored row, as the owner reads it. */
|
|
13684
|
+
var PreferenceRowSchema = object({
|
|
13685
|
+
namespace: PreferenceNamespaceSchema,
|
|
13686
|
+
value: PreferenceValueSchema,
|
|
13687
|
+
/** Starts at 1, +1 on every write of this namespace. A delete ends the row and its count. */
|
|
13688
|
+
revision: number().int().positive(),
|
|
13689
|
+
updatedAt: number().int(),
|
|
13690
|
+
/** The client id the last writer sent; `null` when it sent none. */
|
|
13691
|
+
updatedByDevice: PreferenceDeviceIdSchema.nullable()
|
|
13692
|
+
});
|
|
13693
|
+
object({
|
|
13694
|
+
/** Absent: every namespace the caller holds. */
|
|
13695
|
+
namespaces: array(PreferenceNamespaceSchema).max(32).optional() });
|
|
13696
|
+
object({ rows: array(PreferenceRowSchema) });
|
|
13697
|
+
object({
|
|
13698
|
+
namespace: PreferenceNamespaceSchema,
|
|
13699
|
+
value: PreferenceValueSchema,
|
|
13700
|
+
/**
|
|
13701
|
+
* The revision the edit was based on. Absent: last write wins. `0`: the
|
|
13702
|
+
* namespace must not exist yet. Any other value that is not the current
|
|
13703
|
+
* revision answers `conflict` and writes nothing.
|
|
13704
|
+
*/
|
|
13705
|
+
baseRevision: number().int().nonnegative().optional(),
|
|
13706
|
+
deviceId: PreferenceDeviceIdSchema.optional()
|
|
13707
|
+
});
|
|
13708
|
+
discriminatedUnion("status", [object({
|
|
13709
|
+
status: literal("saved"),
|
|
13710
|
+
row: PreferenceRowSchema
|
|
13711
|
+
}), object({
|
|
13712
|
+
status: literal("conflict"),
|
|
13713
|
+
current: PreferenceRowSchema.nullable()
|
|
13714
|
+
})]);
|
|
13715
|
+
object({ namespace: PreferenceNamespaceSchema });
|
|
13716
|
+
object({
|
|
13717
|
+
/** `false` when the namespace did not exist. */
|
|
13718
|
+
deleted: boolean() });
|
|
13719
|
+
object({
|
|
13720
|
+
/** The revision the client holds per namespace; a namespace it does not list is new to it. */
|
|
13721
|
+
revisionByNamespace: record(PreferenceNamespaceSchema, number().int().nonnegative()).refine((map) => Object.keys(map).length <= 32, { message: `at most 32 namespaces` }) });
|
|
13722
|
+
object({
|
|
13723
|
+
/** Every row whose revision differs from the client's, and every row it did not list. */
|
|
13724
|
+
rows: array(PreferenceRowSchema),
|
|
13725
|
+
/** Namespaces the client listed that no longer exist. */
|
|
13726
|
+
deleted: array(PreferenceNamespaceSchema)
|
|
13727
|
+
});
|
|
13677
13728
|
_enum(["new-session", "step-up"]);
|
|
13678
13729
|
/** The languages the hub's app landing pages are written in (D858). */
|
|
13679
13730
|
var AppPageLangSchema = _enum(["en", "it"]);
|
|
@@ -17927,7 +17978,19 @@ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
|
17927
17978
|
kind: literal("node"),
|
|
17928
17979
|
nodeId: string().min(1)
|
|
17929
17980
|
})]);
|
|
17981
|
+
/**
|
|
17982
|
+
* `enum` stores a STATE as the ordinal of its value in the series' value list
|
|
17983
|
+
* (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
|
|
17984
|
+
* meaning); a rollup keeps the time spent in each state (`states`).
|
|
17985
|
+
*/
|
|
17930
17986
|
var DeviceHistoryKindSchema = _enum([
|
|
17987
|
+
"gauge",
|
|
17988
|
+
"counter",
|
|
17989
|
+
"boolean",
|
|
17990
|
+
"enum"
|
|
17991
|
+
]);
|
|
17992
|
+
/** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
|
|
17993
|
+
var DeviceHistoryProducerKindSchema = _enum([
|
|
17931
17994
|
"gauge",
|
|
17932
17995
|
"counter",
|
|
17933
17996
|
"boolean"
|
|
@@ -17964,7 +18027,13 @@ var SeriesInfoSchema = object({
|
|
|
17964
18027
|
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
17965
18028
|
unit: string().nullable(),
|
|
17966
18029
|
displayName: string(),
|
|
17967
|
-
source: _enum([
|
|
18030
|
+
source: _enum([
|
|
18031
|
+
"cap",
|
|
18032
|
+
"addon",
|
|
18033
|
+
"derived"
|
|
18034
|
+
]),
|
|
18035
|
+
/** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
|
|
18036
|
+
values: array(string()).readonly().nullable(),
|
|
17968
18037
|
firstTs: number(),
|
|
17969
18038
|
lastTs: number()
|
|
17970
18039
|
});
|
|
@@ -17978,17 +18047,31 @@ var QueryPointSchema = object({
|
|
|
17978
18047
|
twMean: number().nullable(),
|
|
17979
18048
|
min: number(),
|
|
17980
18049
|
max: number(),
|
|
17981
|
-
/** `null` is unknown, never zero (D393). */
|
|
17982
|
-
last: number().nullable()
|
|
18050
|
+
/** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
|
|
18051
|
+
last: number().nullable(),
|
|
18052
|
+
/**
|
|
18053
|
+
* The increase over the point: a `counter`'s growth since the previous point
|
|
18054
|
+
* or bucket (a drop is a reset, counted from zero), and for
|
|
18055
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
|
|
18056
|
+
* every other kind, and when it cannot be known.
|
|
18057
|
+
*/
|
|
18058
|
+
delta: number().nullable(),
|
|
18059
|
+
/** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
|
|
18060
|
+
state: string().nullable(),
|
|
18061
|
+
/** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
|
|
18062
|
+
states: record(string(), number()).nullable()
|
|
17983
18063
|
});
|
|
17984
18064
|
var QuerySeriesSchema = object({
|
|
17985
18065
|
scope: string(),
|
|
17986
18066
|
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
17987
18067
|
before: object({
|
|
17988
18068
|
t: number(),
|
|
17989
|
-
value: number().nullable()
|
|
18069
|
+
value: number().nullable(),
|
|
18070
|
+
state: string().nullable()
|
|
17990
18071
|
}).nullable(),
|
|
17991
|
-
points: array(QueryPointSchema).readonly()
|
|
18072
|
+
points: array(QueryPointSchema).readonly(),
|
|
18073
|
+
/** A derived key: the stored key its points were computed from; `null` for a stored series. */
|
|
18074
|
+
derivedFrom: string().nullable()
|
|
17992
18075
|
});
|
|
17993
18076
|
/** The window part of a query, shared by the device and node forms. */
|
|
17994
18077
|
var QueryWindowShape = {
|
|
@@ -18004,6 +18087,23 @@ var QueryResultSchema = object({
|
|
|
18004
18087
|
series: array(QuerySeriesSchema).readonly(),
|
|
18005
18088
|
truncated: boolean()
|
|
18006
18089
|
});
|
|
18090
|
+
/** One read of a batch: a device's key or a node's key (exactly one subject). */
|
|
18091
|
+
var QueryManyItemSchema = union([object({
|
|
18092
|
+
deviceId: number().int(),
|
|
18093
|
+
key: string(),
|
|
18094
|
+
scope: string().optional()
|
|
18095
|
+
}), object({
|
|
18096
|
+
forNodeId: string().min(1),
|
|
18097
|
+
key: string(),
|
|
18098
|
+
scope: string().optional()
|
|
18099
|
+
})]);
|
|
18100
|
+
var QueryManyEntrySchema = discriminatedUnion("ok", [object({
|
|
18101
|
+
ok: literal(true),
|
|
18102
|
+
result: QueryResultSchema
|
|
18103
|
+
}), object({
|
|
18104
|
+
ok: literal(false),
|
|
18105
|
+
error: string()
|
|
18106
|
+
})]);
|
|
18007
18107
|
var TierStatusSchema = object({
|
|
18008
18108
|
tier: DeviceHistoryResolutionSchema,
|
|
18009
18109
|
/** `null` until the first background count answered. */
|
|
@@ -18059,16 +18159,22 @@ var DeviceHistoryStatusSchema = object({
|
|
|
18059
18159
|
lastRefreshAt: number().nullable()
|
|
18060
18160
|
})
|
|
18061
18161
|
});
|
|
18062
|
-
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({
|
|
18162
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ forNodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
18063
18163
|
deviceId: number().int(),
|
|
18064
18164
|
...QueryWindowShape
|
|
18065
18165
|
}), QueryResultSchema), method(object({
|
|
18066
|
-
|
|
18166
|
+
forNodeId: string().min(1),
|
|
18067
18167
|
...QueryWindowShape
|
|
18068
18168
|
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
18169
|
+
items: array(QueryManyItemSchema).min(1).max(24),
|
|
18170
|
+
from: QueryWindowShape.from,
|
|
18171
|
+
to: QueryWindowShape.to,
|
|
18172
|
+
resolution: QueryWindowShape.resolution,
|
|
18173
|
+
maxPoints: QueryWindowShape.maxPoints
|
|
18174
|
+
}), object({ results: array(QueryManyEntrySchema).readonly() }), { auth: "admin" }), method(object({
|
|
18069
18175
|
name: string().regex(/^[a-z0-9-]+$/),
|
|
18070
18176
|
subjectKind: _enum(["device", "node"]),
|
|
18071
|
-
kind:
|
|
18177
|
+
kind: DeviceHistoryProducerKindSchema,
|
|
18072
18178
|
unit: string().optional(),
|
|
18073
18179
|
displayName: string().min(1),
|
|
18074
18180
|
ingest: _enum(["points", "buckets"])
|
|
@@ -40963,38 +41069,37 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
|
|
|
40963
41069
|
auth: "admin",
|
|
40964
41070
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
40965
41071
|
});
|
|
41072
|
+
var LlmProfileKindSchema = string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "a kind id is lower-case letters, digits and dashes");
|
|
41073
|
+
/** What a model (or, by default, every model of a kind) can do. */
|
|
41074
|
+
var LlmModelFeaturesSchema = object({
|
|
41075
|
+
vision: boolean(),
|
|
41076
|
+
tools: boolean(),
|
|
41077
|
+
streaming: boolean()
|
|
41078
|
+
});
|
|
41079
|
+
/** One model a provider offers. `features` overrides the kind's defaults, per field. */
|
|
41080
|
+
var LlmModelInfoSchema = object({
|
|
41081
|
+
id: string(),
|
|
41082
|
+
label: string().optional(),
|
|
41083
|
+
contextLength: number().int().positive().optional(),
|
|
41084
|
+
features: LlmModelFeaturesSchema.partial().optional()
|
|
41085
|
+
});
|
|
40966
41086
|
/**
|
|
40967
|
-
*
|
|
40968
|
-
*
|
|
40969
|
-
*
|
|
40970
|
-
*
|
|
40971
|
-
* (hub-placed); the cap stays open for future providers.
|
|
40972
|
-
*
|
|
40973
|
-
* Profiles are ROWS (data), not addons: one row = one usable model endpoint.
|
|
40974
|
-
* `apiKey` is a password field — providers REDACT it on read and merge on
|
|
40975
|
-
* write; a stored key NEVER round-trips to a client.
|
|
41087
|
+
* The provider-specific part of a profile, validated by the provider that owns
|
|
41088
|
+
* the kind (`upsertProfile` refuses what it does not accept). A field its
|
|
41089
|
+
* `connectionSchema` declares `type: 'password'` is a secret: it is held in the
|
|
41090
|
+
* keychain, never in the row, and reads back as the redaction marker.
|
|
40976
41091
|
*/
|
|
40977
|
-
var
|
|
40978
|
-
"openai-compatible",
|
|
40979
|
-
"openai",
|
|
40980
|
-
"anthropic",
|
|
40981
|
-
"google",
|
|
40982
|
-
"managed-local",
|
|
40983
|
-
"apple-foundation"
|
|
40984
|
-
]);
|
|
41092
|
+
var LlmProviderConfigSchema = record(string(), unknown());
|
|
40985
41093
|
var LlmProfileSchema = object({
|
|
40986
41094
|
id: string(),
|
|
40987
41095
|
name: string(),
|
|
41096
|
+
/** The provider-declared kind (`LlmProfileKindDescriptor.kind`). */
|
|
40988
41097
|
kind: LlmProfileKindSchema,
|
|
40989
41098
|
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
40990
41099
|
addonId: string(),
|
|
40991
41100
|
enabled: boolean(),
|
|
40992
41101
|
/** Vendor model id, or the managed runtime's loaded model. */
|
|
40993
41102
|
model: string(),
|
|
40994
|
-
/** Required for openai-compatible; override for cloud kinds. */
|
|
40995
|
-
baseUrl: string().optional(),
|
|
40996
|
-
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
40997
|
-
apiKey: string().optional(),
|
|
40998
41103
|
/** Vision on/off. A vision call against a `false` profile is REFUSED, never
|
|
40999
41104
|
* degraded to text — that shipped once and produced a confident answer to a
|
|
41000
41105
|
* question about a picture nobody sent. */
|
|
@@ -41002,15 +41107,11 @@ var LlmProfileSchema = object({
|
|
|
41002
41107
|
temperature: number().min(0).max(2).optional(),
|
|
41003
41108
|
/** Nucleus sampling. Every wire we speak has it. */
|
|
41004
41109
|
topP: number().min(0).max(1).optional(),
|
|
41005
|
-
/** Top-k sampling. Carried only by the wires that have it —
|
|
41006
|
-
*
|
|
41007
|
-
* `top_p` and no `top_k`). The profile editor hides the field wherever it
|
|
41008
|
-
* would change nothing; `KINDS_WITH_TOP_K` is the single owner of that list. */
|
|
41110
|
+
/** Top-k sampling. Carried only by the wires that have it — a kind offers the
|
|
41111
|
+
* field in its editor only when its descriptor lists it in `profileFields`. */
|
|
41009
41112
|
topK: number().int().positive().optional(),
|
|
41010
41113
|
maxTokens: number().int().positive().optional(),
|
|
41011
|
-
/** Prompt context window. Advisory for cloud kinds (they enforce their own)
|
|
41012
|
-
* for `managed-local` it is the llama.cpp `--ctx-size` the runtime starts
|
|
41013
|
-
* the model with, so it is the one field that changes a PROCESS. */
|
|
41114
|
+
/** Prompt context window. Advisory for cloud kinds (they enforce their own). */
|
|
41014
41115
|
contextLength: number().int().positive().optional(),
|
|
41015
41116
|
/** Default system prompt. A caller's `system` REPLACES it (never appends —
|
|
41016
41117
|
* two system prompts fighting is worse than either alone). */
|
|
@@ -41036,16 +41137,37 @@ var LlmProfileSchema = object({
|
|
|
41036
41137
|
* library; the REGISTRY of callable tools is ours and is empty in v1, so a
|
|
41037
41138
|
* `true` here buys the wiring, not behaviour, until tools are registered. */
|
|
41038
41139
|
toolsEnabled: boolean().default(false),
|
|
41039
|
-
|
|
41040
|
-
|
|
41041
|
-
|
|
41042
|
-
|
|
41043
|
-
|
|
41044
|
-
|
|
41045
|
-
|
|
41046
|
-
|
|
41047
|
-
|
|
41048
|
-
|
|
41140
|
+
/** Everything the kind's provider owns (endpoint, key, node, runtime…). */
|
|
41141
|
+
providerConfig: LlmProviderConfigSchema.default({})
|
|
41142
|
+
});
|
|
41143
|
+
/**
|
|
41144
|
+
* The common profile fields a kind's editor offers. The editor owns how each
|
|
41145
|
+
* one is drawn; the provider says which of them mean something on its wire.
|
|
41146
|
+
*/
|
|
41147
|
+
var LlmProfileFieldSchema = _enum([
|
|
41148
|
+
"temperature",
|
|
41149
|
+
"topP",
|
|
41150
|
+
"topK",
|
|
41151
|
+
"maxTokens",
|
|
41152
|
+
"contextLength",
|
|
41153
|
+
"systemPrompt",
|
|
41154
|
+
"timeoutMs",
|
|
41155
|
+
"connectTimeoutMs",
|
|
41156
|
+
"firstTokenTimeoutMs",
|
|
41157
|
+
"idleTimeoutMs",
|
|
41158
|
+
"retry",
|
|
41159
|
+
"toolsEnabled"
|
|
41160
|
+
]);
|
|
41161
|
+
/**
|
|
41162
|
+
* A provider-drawn part of the editor, by a generic widget id the admin UI
|
|
41163
|
+
* registers (`ai/apple-node`). `placement: 'model'` replaces the generic model
|
|
41164
|
+
* picker: that widget owns the model choice.
|
|
41165
|
+
*/
|
|
41166
|
+
var LlmProviderWidgetSchema = object({
|
|
41167
|
+
id: string(),
|
|
41168
|
+
placement: _enum(["connection", "model"]),
|
|
41169
|
+
/** `providerConfig` keys this widget must fill before the profile can be saved. */
|
|
41170
|
+
requires: array(string()).optional()
|
|
41049
41171
|
});
|
|
41050
41172
|
/** ConfigUISchema tree passed through untyped on the wire (the
|
|
41051
41173
|
* notification-output `ConfigSchemaPassthrough` precedent at
|
|
@@ -41054,11 +41176,56 @@ var ConfigSchemaPassthrough$3 = unknown();
|
|
|
41054
41176
|
var LlmProfileKindDescriptorSchema = object({
|
|
41055
41177
|
kind: LlmProfileKindSchema,
|
|
41056
41178
|
label: string(),
|
|
41179
|
+
/** A generic icon name (`cloud`, `plug`, `cpu`) — never a glyph or a logo. */
|
|
41057
41180
|
icon: string(),
|
|
41058
41181
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
41059
41182
|
addonId: string(),
|
|
41060
|
-
|
|
41183
|
+
/** The provider's own fields (`providerConfig`); `password` fields are keychain-held. */
|
|
41184
|
+
connectionSchema: ConfigSchemaPassthrough$3,
|
|
41185
|
+
/** Provider fields that belong under "Advanced" (extra headers, runtime tuning). */
|
|
41186
|
+
advancedSchema: ConfigSchemaPassthrough$3.optional(),
|
|
41187
|
+
/** The kind's defaults; a model from `listModels` may override any of them. */
|
|
41188
|
+
features: LlmModelFeaturesSchema,
|
|
41189
|
+
/** `false` = the provider stamps `supportsVision` itself (from what a node reports). */
|
|
41190
|
+
visionEditable: boolean(),
|
|
41191
|
+
/** Where the model list comes from: `listModels`, `staticModels`, or nowhere. */
|
|
41192
|
+
modelCatalog: _enum([
|
|
41193
|
+
"fetch",
|
|
41194
|
+
"static",
|
|
41195
|
+
"none"
|
|
41196
|
+
]),
|
|
41197
|
+
staticModels: array(LlmModelInfoSchema).optional(),
|
|
41198
|
+
/** The common fields that mean something on this kind's wire. */
|
|
41199
|
+
profileFields: array(LlmProfileFieldSchema),
|
|
41200
|
+
providerWidgets: array(LlmProviderWidgetSchema).optional()
|
|
41061
41201
|
});
|
|
41202
|
+
/**
|
|
41203
|
+
* `listModels` input. `connection` is an UNSAVED draft of `providerConfig`
|
|
41204
|
+
* (the editor's form); with `profileId` too, a secret the draft leaves
|
|
41205
|
+
* untouched (absent or the redaction marker) is resolved server-side from the
|
|
41206
|
+
* stored profile — the browser never receives it.
|
|
41207
|
+
*/
|
|
41208
|
+
var LlmListModelsInputSchema = object({
|
|
41209
|
+
addonId: string(),
|
|
41210
|
+
kind: LlmProfileKindSchema,
|
|
41211
|
+
profileId: string().optional(),
|
|
41212
|
+
connection: LlmProviderConfigSchema.optional()
|
|
41213
|
+
});
|
|
41214
|
+
var LlmListModelsErrorCodeSchema = _enum([
|
|
41215
|
+
"auth",
|
|
41216
|
+
"network",
|
|
41217
|
+
"unsupported",
|
|
41218
|
+
"invalid"
|
|
41219
|
+
]);
|
|
41220
|
+
/** A RESULT, never a throw: "wrong key" is an answer the editor renders inline. */
|
|
41221
|
+
var LlmListModelsResultSchema = discriminatedUnion("ok", [object({
|
|
41222
|
+
ok: literal(true),
|
|
41223
|
+
models: array(LlmModelInfoSchema)
|
|
41224
|
+
}), object({
|
|
41225
|
+
ok: literal(false),
|
|
41226
|
+
code: LlmListModelsErrorCodeSchema,
|
|
41227
|
+
message: string()
|
|
41228
|
+
})]);
|
|
41062
41229
|
var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
|
|
41063
41230
|
var LlmDefaultSchema = object({
|
|
41064
41231
|
selector: LlmDefaultSelectorSchema,
|
|
@@ -41158,7 +41325,10 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
|
41158
41325
|
kind: "mutation",
|
|
41159
41326
|
auth: "admin",
|
|
41160
41327
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
41161
|
-
}), method(
|
|
41328
|
+
}), method(LlmListModelsInputSchema, LlmListModelsResultSchema, {
|
|
41329
|
+
kind: "mutation",
|
|
41330
|
+
auth: "admin"
|
|
41331
|
+
}), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
41162
41332
|
selector: LlmDefaultSelectorSchema,
|
|
41163
41333
|
profileId: string().nullable()
|
|
41164
41334
|
}), _void(), {
|
|
@@ -41326,14 +41496,106 @@ var LogEntrySchema = object({
|
|
|
41326
41496
|
meta: record(string(), unknown()).optional(),
|
|
41327
41497
|
tags: record(string(), string()).optional()
|
|
41328
41498
|
});
|
|
41329
|
-
|
|
41330
|
-
|
|
41499
|
+
/**
|
|
41500
|
+
* A history READ against one destination (D898).
|
|
41501
|
+
*
|
|
41502
|
+
* Every filter is applied by the PROVIDER, before the limit — a filter the
|
|
41503
|
+
* browser applied after the limit is what made a rare device's lines
|
|
41504
|
+
* unreachable behind a busy one's. `before` / `after` are cursors the provider
|
|
41505
|
+
* minted (opaque to everyone else): a file position for the rotated files, a
|
|
41506
|
+
* nanosecond timestamp for Loki.
|
|
41507
|
+
*
|
|
41508
|
+
* A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
|
|
41509
|
+
* store answers `done: false` with the cursor it reached and the bytes it
|
|
41510
|
+
* scanned, and the caller decides whether to go on. That is what makes a long
|
|
41511
|
+
* scan show progress and stop when asked — `cancelRead` ends the slice in
|
|
41512
|
+
* flight, and not asking for the next slice ends the scan.
|
|
41513
|
+
*/
|
|
41514
|
+
var LogReadQuerySchema = object({
|
|
41515
|
+
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
41516
|
+
requestId: string().min(1).max(64).optional(),
|
|
41517
|
+
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
41518
|
+
deviceId: number().int().optional(),
|
|
41519
|
+
/**
|
|
41520
|
+
* The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
|
|
41521
|
+
* match. Not `addonId`: a cap router reads that name as "which provider".
|
|
41522
|
+
*/
|
|
41523
|
+
fromAddonId: string().min(1).max(200).optional(),
|
|
41524
|
+
/**
|
|
41525
|
+
* The emitting node: matches the agent that emitted the line, the node
|
|
41526
|
+
* itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
|
|
41527
|
+
* semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
|
|
41528
|
+
* name as "which node's provider".
|
|
41529
|
+
*/
|
|
41530
|
+
fromNodeId: string().min(1).max(200).optional(),
|
|
41531
|
+
/** Any other tag, exact match (AND). */
|
|
41532
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
41533
|
+
/** Severity FLOOR: this level and above. */
|
|
41331
41534
|
level: LogLevelSchema.optional(),
|
|
41332
|
-
|
|
41333
|
-
|
|
41334
|
-
|
|
41335
|
-
|
|
41336
|
-
|
|
41535
|
+
/** Case-insensitive substring over message, scope, tag values and meta values. */
|
|
41536
|
+
text: string().min(1).max(200).optional(),
|
|
41537
|
+
/** Epoch ms, inclusive. */
|
|
41538
|
+
since: number().optional(),
|
|
41539
|
+
/** Epoch ms, inclusive. */
|
|
41540
|
+
until: number().optional(),
|
|
41541
|
+
/** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
|
|
41542
|
+
before: string().min(1).max(1024).optional(),
|
|
41543
|
+
/** Newer than this cursor (exclusive). */
|
|
41544
|
+
after: string().min(1).max(1024).optional(),
|
|
41545
|
+
limit: number().int().min(1).max(1e3).optional(),
|
|
41546
|
+
/** Wall-clock bound of this slice. The provider caps it. */
|
|
41547
|
+
budgetMs: number().int().min(50).max(1e4).optional()
|
|
41548
|
+
});
|
|
41549
|
+
var LogReadResultSchema = object({
|
|
41550
|
+
/** Newest first. */
|
|
41551
|
+
entries: array(object({
|
|
41552
|
+
/** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
|
|
41553
|
+
id: string().optional(),
|
|
41554
|
+
/** Epoch ms. */
|
|
41555
|
+
timestamp: number(),
|
|
41556
|
+
level: LogLevelSchema,
|
|
41557
|
+
scope: string().optional(),
|
|
41558
|
+
message: string(),
|
|
41559
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
41560
|
+
meta: record(string(), unknown()).optional()
|
|
41561
|
+
})),
|
|
41562
|
+
/** Pass as `before` for the next older page; null when nothing older exists. */
|
|
41563
|
+
nextBefore: string().nullable(),
|
|
41564
|
+
/** Pass as `after` to read what arrived since; null when unknown. */
|
|
41565
|
+
nextAfter: string().nullable(),
|
|
41566
|
+
/** Bytes this slice read (files) or received (remote). Progress, not a promise. */
|
|
41567
|
+
scannedBytes: number().int().nonnegative(),
|
|
41568
|
+
/**
|
|
41569
|
+
* True when the scan in this direction reached the end of the store.
|
|
41570
|
+
* False with fewer than `limit` entries means the budget ran out first —
|
|
41571
|
+
* call again with `nextBefore` to go on.
|
|
41572
|
+
*/
|
|
41573
|
+
done: boolean(),
|
|
41574
|
+
/** True when `cancelRead` ended this slice early. */
|
|
41575
|
+
cancelled: boolean().optional()
|
|
41576
|
+
});
|
|
41577
|
+
var LogReadCapabilitiesSchema = object({
|
|
41578
|
+
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
41579
|
+
readable: boolean(),
|
|
41580
|
+
/** Why not, when `readable` is false — rendered next to the source. */
|
|
41581
|
+
reason: string().nullable(),
|
|
41582
|
+
/** Filters the provider applies itself. A false one is applied by nobody. */
|
|
41583
|
+
filters: object({
|
|
41584
|
+
deviceId: boolean(),
|
|
41585
|
+
addonId: boolean(),
|
|
41586
|
+
nodeId: boolean(),
|
|
41587
|
+
tags: boolean(),
|
|
41588
|
+
level: boolean(),
|
|
41589
|
+
text: boolean(),
|
|
41590
|
+
timeRange: boolean()
|
|
41591
|
+
}),
|
|
41592
|
+
/** How far back the store reaches, when the provider knows (days). */
|
|
41593
|
+
retentionDays: number().nullable()
|
|
41594
|
+
});
|
|
41595
|
+
method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(_void(), LogReadCapabilitiesSchema, { auth: "admin" }), optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }), optionalMethod(object({ requestId: string().min(1).max(64) }), object({ cancelled: boolean() }), {
|
|
41596
|
+
kind: "mutation",
|
|
41597
|
+
auth: "admin"
|
|
41598
|
+
});
|
|
41337
41599
|
/**
|
|
41338
41600
|
* `login-method` — collection cap through which auth addons contribute
|
|
41339
41601
|
* their pre-auth login surfaces to the login page. This is the SINGLE,
|
|
@@ -43051,9 +43313,11 @@ var alarmPanelCapability = {
|
|
|
43051
43313
|
*/
|
|
43052
43314
|
durability: "restored",
|
|
43053
43315
|
/**
|
|
43054
|
-
* History (D850):
|
|
43316
|
+
* History (D850): the panel's lifecycle state as an `enum` series —
|
|
43317
|
+
* change-only, no floor, so an `arming -> pending -> triggered` sequence of a
|
|
43318
|
+
* few seconds keeps every step. Who armed it stays in the events ledger.
|
|
43055
43319
|
*/
|
|
43056
|
-
history: "
|
|
43320
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
43057
43321
|
/** Clock fields: written, but excluded from the compare that decides
|
|
43058
43322
|
* whether persisting is worth a SQLite commit. */
|
|
43059
43323
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -43931,6 +44195,33 @@ var NcRuleTargetSchema = object({
|
|
|
43931
44195
|
params: record(string(), unknown()).optional()
|
|
43932
44196
|
});
|
|
43933
44197
|
/**
|
|
44198
|
+
* WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
|
|
44199
|
+
*
|
|
44200
|
+
* Every mode starts from the same CLEAN source frame of the trigger moment
|
|
44201
|
+
* (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
|
|
44202
|
+
* to the zone that fired the rule) and renders it once at send time:
|
|
44203
|
+
* - `scene-boxes` — the whole scene, the subject outlined thick in the accent
|
|
44204
|
+
* colour and every OTHER track visible at that instant outlined thin, each
|
|
44205
|
+
* labelled with class and confidence ("dog 87%").
|
|
44206
|
+
* - `crop` — the subject cut out of that frame around its box at that instant.
|
|
44207
|
+
* - `clean` — the whole scene with nothing drawn on it.
|
|
44208
|
+
* - `none` — no picture.
|
|
44209
|
+
*
|
|
44210
|
+
* A mode that cannot be honoured (no box at that instant, a photograph with no
|
|
44211
|
+
* tracked subject) ships `clean` and names the reason in the log, per camera.
|
|
44212
|
+
* It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
|
|
44213
|
+
* ship a crop on one event and a boxed scene on the next depending on which
|
|
44214
|
+
* stored kind had landed.
|
|
44215
|
+
*/
|
|
44216
|
+
var NcMediaImageSchema = _enum([
|
|
44217
|
+
"scene-boxes",
|
|
44218
|
+
"crop",
|
|
44219
|
+
"clean",
|
|
44220
|
+
"none"
|
|
44221
|
+
]);
|
|
44222
|
+
/**
|
|
44223
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
44224
|
+
*
|
|
43934
44225
|
* Media attachment policy (P1 still-image subset).
|
|
43935
44226
|
* - `best` — the best AVAILABLE subject image at dispatch time (D-3).
|
|
43936
44227
|
* - `best-matching` — the media that explains WHY the rule fired: a rule
|
|
@@ -43944,6 +44235,8 @@ var NcRuleTargetSchema = object({
|
|
|
43944
44235
|
* - `none` — no attachment.
|
|
43945
44236
|
*/
|
|
43946
44237
|
/**
|
|
44238
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
44239
|
+
*
|
|
43947
44240
|
* WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
|
|
43948
44241
|
* conflate it with the selection strategy and betray the request: asking for
|
|
43949
44242
|
* the clean scene frame on an object-event owner used to start at
|
|
@@ -43972,16 +44265,29 @@ var NcMediaFrameSchema = _enum([
|
|
|
43972
44265
|
*/
|
|
43973
44266
|
var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
|
|
43974
44267
|
var NcMediaPolicySchema = object({
|
|
44268
|
+
/**
|
|
44269
|
+
* The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
|
|
44270
|
+
* saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
|
|
44271
|
+
* triple below, at load and at every write, and the store keeps only this.
|
|
44272
|
+
*/
|
|
44273
|
+
image: NcMediaImageSchema.optional(),
|
|
44274
|
+
/**
|
|
44275
|
+
* Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
|
|
44276
|
+
* a `crop` never shows it). Valid only on a rule whose trigger is a zone —
|
|
44277
|
+
* `conditions.zones` or an occupancy zone — and refused on save otherwise.
|
|
44278
|
+
* Replaces `zoneCrop`.
|
|
44279
|
+
*/
|
|
44280
|
+
showTriggerZone: boolean().optional(),
|
|
44281
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
43975
44282
|
attach: _enum([
|
|
43976
44283
|
"best",
|
|
43977
44284
|
"best-matching",
|
|
43978
44285
|
"keyFrame",
|
|
43979
44286
|
"none"
|
|
43980
|
-
]).
|
|
43981
|
-
/**
|
|
44287
|
+
]).optional(),
|
|
44288
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
43982
44289
|
frame: NcMediaFrameSchema.optional(),
|
|
43983
|
-
/**
|
|
43984
|
-
* "show me the ZONE", not the whole scene or the subject crop. */
|
|
44290
|
+
/** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
|
|
43985
44291
|
zoneCrop: boolean().optional(),
|
|
43986
44292
|
/**
|
|
43987
44293
|
* Also attach a short GIF cut from the stream broker's clip ring around the
|
|
@@ -44153,7 +44459,9 @@ var NcRuleInputSchema = object({
|
|
|
44153
44459
|
* targets.
|
|
44154
44460
|
*/
|
|
44155
44461
|
targetUsers: array(string()).optional(),
|
|
44156
|
-
|
|
44462
|
+
/** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
|
|
44463
|
+
* detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
|
|
44464
|
+
media: NcMediaPolicySchema.default({}),
|
|
44157
44465
|
throttle: NcThrottleSchema.default({
|
|
44158
44466
|
cooldownSec: 60,
|
|
44159
44467
|
scope: "rule-device"
|
|
@@ -45090,13 +45398,37 @@ var NcAlarmModeOpeningsSchema = object({
|
|
|
45090
45398
|
/** Covered devices whose state could not be read (D49): neither open nor closed. */
|
|
45091
45399
|
unknown: array(number().int())
|
|
45092
45400
|
});
|
|
45401
|
+
/**
|
|
45402
|
+
* One alarm INPUT — a (rule, device) pair — the operator bypassed until the
|
|
45403
|
+
* next disarm ("Bypass this input until disarm" on a trigger notification, or
|
|
45404
|
+
* `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
|
|
45405
|
+
* never looks fully armed (D62: off must never look like broken).
|
|
45406
|
+
*/
|
|
45407
|
+
var NcAlarmInputBypassViewSchema = object({
|
|
45408
|
+
ruleId: string(),
|
|
45409
|
+
/** The rule's current name (its frozen name when the rule is gone). */
|
|
45410
|
+
ruleName: string(),
|
|
45411
|
+
/** The input: the sensor of the match, else its camera. */
|
|
45412
|
+
deviceId: number().int(),
|
|
45413
|
+
/** The input's current name. */
|
|
45414
|
+
name: string(),
|
|
45415
|
+
/** When it was bypassed (ms epoch). */
|
|
45416
|
+
since: number(),
|
|
45417
|
+
/** Triggers from this input dropped since. */
|
|
45418
|
+
dropped: number().int().min(0)
|
|
45419
|
+
});
|
|
45093
45420
|
var NcAlarmLiveSchema = object({
|
|
45094
45421
|
state: AlarmStateSchema,
|
|
45095
45422
|
/** The mode being armed into (exit delay) or held; null when disarmed. */
|
|
45096
45423
|
targetMode: AlarmArmModeSchema.nullable(),
|
|
45097
45424
|
availableModes: array(AlarmArmModeSchema),
|
|
45098
45425
|
openings: array(NcAlarmModeOpeningsSchema),
|
|
45099
|
-
exclusions: array(NcAlarmExclusionViewSchema)
|
|
45426
|
+
exclusions: array(NcAlarmExclusionViewSchema),
|
|
45427
|
+
/**
|
|
45428
|
+
* Inputs bypassed for the rest of this arm session; cleared on disarm.
|
|
45429
|
+
* Defaulted so an older hub answer still parses (as "none known").
|
|
45430
|
+
*/
|
|
45431
|
+
bypassedInputs: array(NcAlarmInputBypassViewSchema).default([])
|
|
45100
45432
|
});
|
|
45101
45433
|
var NcAlarmConfigSchema = object({
|
|
45102
45434
|
/**
|
|
@@ -55815,9 +56147,11 @@ var connectivityCapability = {
|
|
|
55815
56147
|
*/
|
|
55816
56148
|
durability: "restored",
|
|
55817
56149
|
/**
|
|
55818
|
-
* History (D850):
|
|
56150
|
+
* History (D850): `connected` as a boolean series — change-only, no floor. It
|
|
56151
|
+
* is the upstream entity's own link (a HA connectivity sensor), not the
|
|
56152
|
+
* device's reachability, which stays `device-status.online`.
|
|
55819
56153
|
*/
|
|
55820
|
-
history: "
|
|
56154
|
+
history: { fields: { connected: { kind: "boolean" } } },
|
|
55821
56155
|
/** Clock fields: written, but excluded from the compare that decides
|
|
55822
56156
|
* whether persisting is worth a SQLite commit. */
|
|
55823
56157
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -56641,11 +56975,22 @@ var dishwasherCapability = {
|
|
|
56641
56975
|
},
|
|
56642
56976
|
runtimeState: DishwasherStatusSchema,
|
|
56643
56977
|
durability: "session",
|
|
56644
|
-
history: { fields: {
|
|
56645
|
-
|
|
56646
|
-
|
|
56647
|
-
|
|
56648
|
-
|
|
56978
|
+
history: { fields: {
|
|
56979
|
+
progressPercent: {
|
|
56980
|
+
kind: "gauge",
|
|
56981
|
+
unit: "%",
|
|
56982
|
+
deadband: 2
|
|
56983
|
+
},
|
|
56984
|
+
state: { kind: "enum" },
|
|
56985
|
+
operationState: { kind: "enum" },
|
|
56986
|
+
remainingSeconds: {
|
|
56987
|
+
kind: "gauge",
|
|
56988
|
+
unit: "s",
|
|
56989
|
+
minIntervalMs: 6e4
|
|
56990
|
+
},
|
|
56991
|
+
doorOpen: { kind: "boolean" },
|
|
56992
|
+
powerOn: { kind: "boolean" }
|
|
56993
|
+
} }
|
|
56649
56994
|
};
|
|
56650
56995
|
var DoorbellStatusSchema = object({
|
|
56651
56996
|
/** Ms epoch of the last press. null = never observed since this provider started. */
|
|
@@ -56762,9 +57107,15 @@ var enumSensorCapability = {
|
|
|
56762
57107
|
*/
|
|
56763
57108
|
durability: "restored",
|
|
56764
57109
|
/**
|
|
56765
|
-
* History (D850):
|
|
57110
|
+
* History (D850): the value as an `enum` series (an appliance's program or
|
|
57111
|
+
* operation state, an HVAC action). The option set is per device, so the
|
|
57112
|
+
* value list is LEARNED as values are first seen (bounded). A sensor with a
|
|
57113
|
+
* `format` carries a timestamp, not a state, and is not recorded.
|
|
56766
57114
|
*/
|
|
56767
|
-
history:
|
|
57115
|
+
history: { fields: { value: {
|
|
57116
|
+
kind: "enum",
|
|
57117
|
+
skipWhenSet: "format"
|
|
57118
|
+
} } },
|
|
56768
57119
|
/** Clock fields: written, but excluded from the compare that decides
|
|
56769
57120
|
* whether persisting is worth a SQLite commit. */
|
|
56770
57121
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -58738,9 +59089,10 @@ var lockControlCapability = {
|
|
|
58738
59089
|
*/
|
|
58739
59090
|
durability: "restored",
|
|
58740
59091
|
/**
|
|
58741
|
-
* History (D850):
|
|
59092
|
+
* History (D850): the lock's state as an `enum` series — change-only, no
|
|
59093
|
+
* floor: a jam or an unlock lasting seconds is the edge an operator looks for.
|
|
58742
59094
|
*/
|
|
58743
|
-
history: "
|
|
59095
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
58744
59096
|
/** Clock fields: written, but excluded from the compare that decides
|
|
58745
59097
|
* whether persisting is worth a SQLite commit. */
|
|
58746
59098
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -58914,9 +59266,18 @@ var mediaPlayerCapability = {
|
|
|
58914
59266
|
*/
|
|
58915
59267
|
durability: "session",
|
|
58916
59268
|
/**
|
|
58917
|
-
* History (D850):
|
|
59269
|
+
* History (D850): volume (a level an operator or an automation sets; the
|
|
59270
|
+
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
59271
|
+
* `positionMs` is not recorded: it moves continuously while playing.
|
|
58918
59272
|
*/
|
|
58919
|
-
history:
|
|
59273
|
+
history: { fields: {
|
|
59274
|
+
volumeLevel: {
|
|
59275
|
+
kind: "gauge",
|
|
59276
|
+
unit: "%",
|
|
59277
|
+
deadband: 1
|
|
59278
|
+
},
|
|
59279
|
+
isMuted: { kind: "boolean" }
|
|
59280
|
+
} }
|
|
58920
59281
|
};
|
|
58921
59282
|
/**
|
|
58922
59283
|
* mesh-network — collection cap for mesh-VPN providers.
|
|
@@ -64209,9 +64570,29 @@ var streamParamsCapability = {
|
|
|
64209
64570
|
*/
|
|
64210
64571
|
durability: "restored",
|
|
64211
64572
|
/**
|
|
64212
|
-
* History (D850):
|
|
64573
|
+
* History (D850): the configured bitrate and frame rate of the main and sub
|
|
64574
|
+
* profiles. Configuration, so change-only on the default floor: a point is an
|
|
64575
|
+
* operator's (or a tuner's) edit, which is exactly what a chart of a stream's
|
|
64576
|
+
* quality over time must show.
|
|
64213
64577
|
*/
|
|
64214
|
-
history:
|
|
64578
|
+
history: { fields: {
|
|
64579
|
+
"main.bitrate": {
|
|
64580
|
+
kind: "gauge",
|
|
64581
|
+
unit: "kbps"
|
|
64582
|
+
},
|
|
64583
|
+
"main.framerate": {
|
|
64584
|
+
kind: "gauge",
|
|
64585
|
+
unit: "fps"
|
|
64586
|
+
},
|
|
64587
|
+
"sub.bitrate": {
|
|
64588
|
+
kind: "gauge",
|
|
64589
|
+
unit: "kbps"
|
|
64590
|
+
},
|
|
64591
|
+
"sub.framerate": {
|
|
64592
|
+
kind: "gauge",
|
|
64593
|
+
unit: "fps"
|
|
64594
|
+
}
|
|
64595
|
+
} },
|
|
64215
64596
|
/** Clock fields: written, but excluded from the compare that decides
|
|
64216
64597
|
* whether persisting is worth a SQLite commit. */
|
|
64217
64598
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -65046,26 +65427,6 @@ var ApiKeySummarySchema = object({
|
|
|
65046
65427
|
createdAt: number(),
|
|
65047
65428
|
lastUsedAt: number().optional()
|
|
65048
65429
|
});
|
|
65049
|
-
var ScopedTokenSummarySchema = object({
|
|
65050
|
-
id: string(),
|
|
65051
|
-
userId: string(),
|
|
65052
|
-
name: string(),
|
|
65053
|
-
tokenPrefix: string(),
|
|
65054
|
-
scopes: array(TokenScopeSchema),
|
|
65055
|
-
expiresAt: number().nullish(),
|
|
65056
|
-
lastUsedAt: number().nullish(),
|
|
65057
|
-
createdAt: number()
|
|
65058
|
-
});
|
|
65059
|
-
var CreateScopedTokenInputSchema = object({
|
|
65060
|
-
userId: string(),
|
|
65061
|
-
name: string(),
|
|
65062
|
-
scopes: array(TokenScopeSchema),
|
|
65063
|
-
expiresAt: number().optional()
|
|
65064
|
-
});
|
|
65065
|
-
var CreateScopedTokenResultSchema = object({
|
|
65066
|
-
token: string(),
|
|
65067
|
-
record: ScopedTokenSummarySchema
|
|
65068
|
-
});
|
|
65069
65430
|
var OauthSessionSummarySchema = object({
|
|
65070
65431
|
id: string(),
|
|
65071
65432
|
userId: string(),
|
|
@@ -65087,11 +65448,11 @@ var TotpStatusSchema = object({
|
|
|
65087
65448
|
confirmedAt: number().nullable()
|
|
65088
65449
|
});
|
|
65089
65450
|
/**
|
|
65090
|
-
* user-management — singleton capability for user accounts
|
|
65091
|
-
*
|
|
65451
|
+
* user-management — singleton capability for user accounts and the
|
|
65452
|
+
* legacy API-key rows.
|
|
65092
65453
|
*
|
|
65093
65454
|
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
65094
|
-
* — the subset check on `setUserScopes`
|
|
65455
|
+
* — the subset check on `setUserScopes` is moot
|
|
65095
65456
|
* because non-admins never reach these. If/when we open non-admin
|
|
65096
65457
|
* delegation, structural caller-scope subset check goes inside the
|
|
65097
65458
|
* provider.
|
|
@@ -65148,15 +65509,7 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
65148
65509
|
kind: "mutation",
|
|
65149
65510
|
auth: "admin",
|
|
65150
65511
|
access: "delete"
|
|
65151
|
-
}), method(
|
|
65152
|
-
kind: "mutation",
|
|
65153
|
-
auth: "admin",
|
|
65154
|
-
access: "create"
|
|
65155
|
-
}), method(object({ id: string() }), object({ success: literal(true) }), {
|
|
65156
|
-
kind: "mutation",
|
|
65157
|
-
auth: "admin",
|
|
65158
|
-
access: "delete"
|
|
65159
|
-
}), method(object({ token: string() }), ScopedTokenSummarySchema.nullable(), { access: "view" }), method(object({ userId: string() }), array(ScopedTokenSummarySchema), { auth: "admin" }), method(object({ userId: string() }), TotpSetupResultSchema, {
|
|
65512
|
+
}), method(object({ userId: string() }), TotpSetupResultSchema, {
|
|
65160
65513
|
kind: "mutation",
|
|
65161
65514
|
auth: "admin",
|
|
65162
65515
|
access: "create"
|
|
@@ -67417,6 +67770,15 @@ var BaseDevice = class {
|
|
|
67417
67770
|
* Drivers can use the `getProbeFlags()` helper to read the flag bag
|
|
67418
67771
|
* with a typed cast.
|
|
67419
67772
|
*
|
|
67773
|
+
* Answer what you KNOW. A plain array is read as the complete list only
|
|
67774
|
+
* while this device is `online` and probed; return
|
|
67775
|
+
* `accessoryChildrenUnknown(reason)` whenever you cannot know the list right
|
|
67776
|
+
* now (no credentials, parent not connected, a failed or partial read) —
|
|
67777
|
+
* the kernel then deletes nothing. Return `accessoryChildrenComplete(list)`
|
|
67778
|
+
* to say "connected, and this is the complete list" explicitly. A shrink is
|
|
67779
|
+
* deleted only after a second agreeing complete read on a later probe (D49;
|
|
67780
|
+
* `packages/system/src/kernel/moleculer/accessory-prune-gate.ts`).
|
|
67781
|
+
*
|
|
67420
67782
|
* Default: no children.
|
|
67421
67783
|
*/
|
|
67422
67784
|
getAccessoryChildren() {
|
|
@@ -71246,7 +71608,7 @@ Object.freeze({
|
|
|
71246
71608
|
capName: "llm",
|
|
71247
71609
|
capScope: "system",
|
|
71248
71610
|
addonId: null,
|
|
71249
|
-
access: "
|
|
71611
|
+
access: "create"
|
|
71250
71612
|
},
|
|
71251
71613
|
"llm.listNodeModels": {
|
|
71252
71614
|
capName: "llm",
|
|
@@ -71548,7 +71910,19 @@ Object.freeze({
|
|
|
71548
71910
|
addonId: null,
|
|
71549
71911
|
access: "view"
|
|
71550
71912
|
},
|
|
71551
|
-
"logDestination.
|
|
71913
|
+
"logDestination.cancelRead": {
|
|
71914
|
+
capName: "log-destination",
|
|
71915
|
+
capScope: "system",
|
|
71916
|
+
addonId: null,
|
|
71917
|
+
access: "create"
|
|
71918
|
+
},
|
|
71919
|
+
"logDestination.describeRead": {
|
|
71920
|
+
capName: "log-destination",
|
|
71921
|
+
capScope: "system",
|
|
71922
|
+
addonId: null,
|
|
71923
|
+
access: "view"
|
|
71924
|
+
},
|
|
71925
|
+
"logDestination.read": {
|
|
71552
71926
|
capName: "log-destination",
|
|
71553
71927
|
capScope: "system",
|
|
71554
71928
|
addonId: null,
|
|
@@ -75910,12 +76284,6 @@ Object.freeze({
|
|
|
75910
76284
|
addonId: null,
|
|
75911
76285
|
access: "create"
|
|
75912
76286
|
},
|
|
75913
|
-
"userManagement.createScopedToken": {
|
|
75914
|
-
capName: "user-management",
|
|
75915
|
-
capScope: "system",
|
|
75916
|
-
addonId: null,
|
|
75917
|
-
access: "create"
|
|
75918
|
-
},
|
|
75919
76287
|
"userManagement.createUser": {
|
|
75920
76288
|
capName: "user-management",
|
|
75921
76289
|
capScope: "system",
|
|
@@ -75964,12 +76332,6 @@ Object.freeze({
|
|
|
75964
76332
|
addonId: null,
|
|
75965
76333
|
access: "view"
|
|
75966
76334
|
},
|
|
75967
|
-
"userManagement.listScopedTokens": {
|
|
75968
|
-
capName: "user-management",
|
|
75969
|
-
capScope: "system",
|
|
75970
|
-
addonId: null,
|
|
75971
|
-
access: "view"
|
|
75972
|
-
},
|
|
75973
76335
|
"userManagement.listUsers": {
|
|
75974
76336
|
capName: "user-management",
|
|
75975
76337
|
capScope: "system",
|
|
@@ -76024,12 +76386,6 @@ Object.freeze({
|
|
|
76024
76386
|
addonId: null,
|
|
76025
76387
|
access: "delete"
|
|
76026
76388
|
},
|
|
76027
|
-
"userManagement.revokeScopedToken": {
|
|
76028
|
-
capName: "user-management",
|
|
76029
|
-
capScope: "system",
|
|
76030
|
-
addonId: null,
|
|
76031
|
-
access: "delete"
|
|
76032
|
-
},
|
|
76033
76389
|
"userManagement.setupTotp": {
|
|
76034
76390
|
capName: "user-management",
|
|
76035
76391
|
capScope: "system",
|
|
@@ -76060,12 +76416,6 @@ Object.freeze({
|
|
|
76060
76416
|
addonId: null,
|
|
76061
76417
|
access: "view"
|
|
76062
76418
|
},
|
|
76063
|
-
"userManagement.validateScopedToken": {
|
|
76064
|
-
capName: "user-management",
|
|
76065
|
-
capScope: "system",
|
|
76066
|
-
addonId: null,
|
|
76067
|
-
access: "view"
|
|
76068
|
-
},
|
|
76069
76419
|
"userManagement.verifyTotp": {
|
|
76070
76420
|
capName: "user-management",
|
|
76071
76421
|
capScope: "system",
|
|
@@ -77579,6 +77929,11 @@ Object.freeze({
|
|
|
77579
77929
|
form: "single",
|
|
77580
77930
|
optional: false
|
|
77581
77931
|
}],
|
|
77932
|
+
"logDestination.read": [{
|
|
77933
|
+
name: "deviceId",
|
|
77934
|
+
form: "single",
|
|
77935
|
+
optional: true
|
|
77936
|
+
}],
|
|
77582
77937
|
"mediaPlayer.getStatus": [{
|
|
77583
77938
|
name: "deviceId",
|
|
77584
77939
|
form: "single",
|