@camstack/addon-post-analysis 1.2.667 → 1.2.668
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/CHANGELOG.md +6 -0
- package/dist/{clip-model-registry-DpzRS8q3.mjs → clip-model-registry-BYJ5lbPi.mjs} +197 -30
- package/dist/{clip-model-registry-D7cqhFK3.js → clip-model-registry-DTC5bkf8.js} +197 -30
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DmTIEp0m.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DBEA3TPX.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DxtNkzmw.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CU7mDiJp.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-ODebWXu_.mjs → hostInit-ChYqK-gn.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +12 -3
- package/dist/pipeline-analytics/index.mjs +12 -3
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DAAkZRnK.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-znrgUrN1.mjs +0 -26
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.668] - 2026-11-05
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- The finish notification's cycle facts match a run that ended up to 30 minutes before the announcement
|
|
15
|
+
|
|
10
16
|
## [1.2.667] - 2026-11-03
|
|
11
17
|
|
|
12
18
|
### Changed
|
|
@@ -6038,7 +6038,7 @@ var ZodIssueCode = {
|
|
|
6038
6038
|
var ZodFirstPartyTypeKind;
|
|
6039
6039
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6040
6040
|
//#endregion
|
|
6041
|
-
//#region ../types/dist/sleep-
|
|
6041
|
+
//#region ../types/dist/sleep-D1jjWAr8.mjs
|
|
6042
6042
|
/**
|
|
6043
6043
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6044
6044
|
* window to float samples (D455).
|
|
@@ -6631,7 +6631,7 @@ var NOT_RUN = {
|
|
|
6631
6631
|
* throws: an unreachable or refusing engine is logged and reported `declared: false`,
|
|
6632
6632
|
* because the hub (and this addon's boot) must not hang on a migration.
|
|
6633
6633
|
*/
|
|
6634
|
-
async function runAddonMigrations(host, migrations, logger) {
|
|
6634
|
+
async function runAddonMigrations(host, migrations, logger, options = {}) {
|
|
6635
6635
|
const first = migrations[0];
|
|
6636
6636
|
if (first === void 0) return NOT_RUN;
|
|
6637
6637
|
const owner = first.meta.owner;
|
|
@@ -6660,7 +6660,9 @@ async function runAddonMigrations(host, migrations, logger) {
|
|
|
6660
6660
|
else if (status === "blocked") blocked.push(id);
|
|
6661
6661
|
else skipped.push(id);
|
|
6662
6662
|
};
|
|
6663
|
+
const selected = options.only === void 0 ? null : new Set(options.only);
|
|
6663
6664
|
for (const step of declaration.steps) {
|
|
6665
|
+
if (selected !== null && !selected.has(step.id)) continue;
|
|
6664
6666
|
const bound = byId.get(step.id);
|
|
6665
6667
|
if (bound === void 0 || step.action === "skip") {
|
|
6666
6668
|
skipped.push(step.id);
|
|
@@ -7778,14 +7780,18 @@ var BaseAddon = class {
|
|
|
7778
7780
|
* nothing; the boot continues. A migration that FAILED (or was blocked by one)
|
|
7779
7781
|
* and declares `onFailure: 'block-owner'` makes this throw, so the addon does not
|
|
7780
7782
|
* serve data whose shape it cannot trust; `tolerate` migrations never do.
|
|
7783
|
+
*
|
|
7784
|
+
* ALWAYS pass the whole catalogue; a phase that must run only some of it passes
|
|
7785
|
+
* `{ only: [ids] }` — never a filtered catalogue (the engine would judge the
|
|
7786
|
+
* omitted applied ids "newer").
|
|
7781
7787
|
*/
|
|
7782
|
-
async runMigrations(migrations) {
|
|
7788
|
+
async runMigrations(migrations, options) {
|
|
7783
7789
|
const api = this.ctx.api.migrations;
|
|
7784
7790
|
const report = await runAddonMigrations({
|
|
7785
7791
|
declareOwner: (input) => api.declareOwner.mutate(input),
|
|
7786
7792
|
startMigration: (input) => api.startMigration.mutate(input),
|
|
7787
7793
|
finishMigration: (input) => api.finishMigration.mutate(input)
|
|
7788
|
-
}, migrations, this.ctx.logger);
|
|
7794
|
+
}, migrations, this.ctx.logger, options);
|
|
7789
7795
|
if (report.blockOwner.length > 0) throw new AddonMigrationsBlockedError(report.blockOwner);
|
|
7790
7796
|
return report;
|
|
7791
7797
|
}
|
|
@@ -8816,6 +8822,10 @@ var RECORD_SETTINGS_MAX_ROWS = 5e4;
|
|
|
8816
8822
|
* (`collectZodSecretPaths`): dotted keys, `[]` for "each element of this array"
|
|
8817
8823
|
* (`auth.accessToken`, `headers[].value`).
|
|
8818
8824
|
*
|
|
8825
|
+
* `{}` after a key means "each value of this map" (`applianceSecrets{}`): the map's own key
|
|
8826
|
+
* names the value (`applianceSecrets{fridge}`), so no id key is declared and a body that drops a
|
|
8827
|
+
* key releases exactly that key's secret.
|
|
8828
|
+
*
|
|
8819
8829
|
* Array elements are matched by a DECLARED id key (`secretArrayKeys`:
|
|
8820
8830
|
* `{ headers: 'name' }`), never by index, so reordering a list keeps every
|
|
8821
8831
|
* keychain ref (the same rule as `arrayItemFieldPath`). The concrete path of a
|
|
@@ -8828,11 +8838,13 @@ function parseSecretPath(path) {
|
|
|
8828
8838
|
if (path.length === 0) throw new InvalidRecordError("an empty secret path");
|
|
8829
8839
|
return path.split(".").map((raw) => {
|
|
8830
8840
|
const each = raw.endsWith("[]");
|
|
8831
|
-
const
|
|
8841
|
+
const map = raw.endsWith("{}");
|
|
8842
|
+
const key = each || map ? raw.slice(0, -2) : raw;
|
|
8832
8843
|
if (key.length === 0) throw new InvalidRecordError(`secret path "${path}" has an empty segment`);
|
|
8833
8844
|
return {
|
|
8834
8845
|
key,
|
|
8835
|
-
each
|
|
8846
|
+
each,
|
|
8847
|
+
map
|
|
8836
8848
|
};
|
|
8837
8849
|
});
|
|
8838
8850
|
}
|
|
@@ -8919,7 +8931,8 @@ function isZodSecret(schema) {
|
|
|
8919
8931
|
}
|
|
8920
8932
|
/**
|
|
8921
8933
|
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
8922
|
-
* element of this array" (`connection.password`, `rows[].token`)
|
|
8934
|
+
* element of this array" (`connection.password`, `rows[].token`), `{}` for "each value of this
|
|
8935
|
+
* map" (`applianceSecrets{}`). A declared
|
|
8923
8936
|
* object or array is reported as one path and not descended into — everything
|
|
8924
8937
|
* under it is secret.
|
|
8925
8938
|
*/
|
|
@@ -8930,6 +8943,7 @@ function collectZodSecretPaths(schema, prefix = "") {
|
|
|
8930
8943
|
const def = defOf(layer);
|
|
8931
8944
|
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
8932
8945
|
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
8946
|
+
else if (def.type === "record" && def.valueType) paths.push(...collectZodSecretPaths(def.valueType, `${prefix}{}`));
|
|
8933
8947
|
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
8934
8948
|
else if (def.type === "intersection") {
|
|
8935
8949
|
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
@@ -9069,7 +9083,7 @@ function defineRecordKinds(specs) {
|
|
|
9069
9083
|
retention: spec.retention,
|
|
9070
9084
|
deviceRemoval: spec.deviceRemoval,
|
|
9071
9085
|
maxDataBytes: spec.maxDataBytes,
|
|
9072
|
-
secretPaths: [...secretPaths],
|
|
9086
|
+
secretPaths: [...new Set([...secretPaths, ...spec.retiredSecretPaths ?? []])],
|
|
9073
9087
|
secretArrayKeys: spec.secretArrayKeys === void 0 ? void 0 : { ...spec.secretArrayKeys },
|
|
9074
9088
|
transactFamily: spec.transactFamily,
|
|
9075
9089
|
entry: spec.entry === void 0 ? void 0 : {
|
|
@@ -11978,7 +11992,7 @@ function sleep(ms) {
|
|
|
11978
11992
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
11979
11993
|
}
|
|
11980
11994
|
//#endregion
|
|
11981
|
-
//#region ../types/dist/composition-
|
|
11995
|
+
//#region ../types/dist/composition-pOHbTzRB.mjs
|
|
11982
11996
|
/**
|
|
11983
11997
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
11984
11998
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -14647,7 +14661,13 @@ var MigrationLedgerEntrySchema = object({
|
|
|
14647
14661
|
* joined by the engine from the catalogues it knows this boot. Absent when no
|
|
14648
14662
|
* catalogue lists the id (a newer database).
|
|
14649
14663
|
*/
|
|
14650
|
-
meta: MigrationMetaSchema.optional()
|
|
14664
|
+
meta: MigrationMetaSchema.optional(),
|
|
14665
|
+
/**
|
|
14666
|
+
* Set when this is an applied row of an addon owner whose catalogue the answering
|
|
14667
|
+
* process has not loaded (the owner has not declared yet): the row is applied, the
|
|
14668
|
+
* process just cannot judge it. Never `skipped-newer` — that needs the owner loaded.
|
|
14669
|
+
*/
|
|
14670
|
+
ownerNotLoaded: boolean().optional()
|
|
14651
14671
|
});
|
|
14652
14672
|
/** A catalogued migration that is not applied, with where it stands. */
|
|
14653
14673
|
var MigrationPendingEntrySchema = object({
|
|
@@ -51179,6 +51199,9 @@ var RunningProposalEvidenceSchema = object({
|
|
|
51179
51199
|
runsFound: number().int().nonnegative(),
|
|
51180
51200
|
pausesFound: number().int().nonnegative(),
|
|
51181
51201
|
longestPauseMs: number().nonnegative(),
|
|
51202
|
+
/** Episodes shorter than ~90 s (an anti-crease pulse, a display waking): never a run, never a pause. */
|
|
51203
|
+
pulsesFound: number().int().nonnegative(),
|
|
51204
|
+
longestPulseMs: number().nonnegative(),
|
|
51182
51205
|
idleFloorW: number(),
|
|
51183
51206
|
noiseCeilingW: number(),
|
|
51184
51207
|
plateauW: number(),
|
|
@@ -52469,7 +52492,27 @@ method(object({
|
|
|
52469
52492
|
* exposes only the COMMON surface: link state, supported device
|
|
52470
52493
|
* kinds (so the UI can filter the device picker), and per-device
|
|
52471
52494
|
* expose/unexpose.
|
|
52472
|
-
|
|
52495
|
+
*
|
|
52496
|
+
* INSTANCES. One export addon can serve several independent targets (a
|
|
52497
|
+
* HomeKit bridge, a Home Assistant broker). `listInstances` names them.
|
|
52498
|
+
* `instanceId` on a READ is optional: absent = the whole addon (linked if any
|
|
52499
|
+
* enabled instance is, `exposedDeviceCount` = distinct devices, `setup` = the
|
|
52500
|
+
* default instance's); present = that instance; an id the provider does not
|
|
52501
|
+
* serve is refused with `ExportInstanceUnknownError` (`export-instance-unknown`),
|
|
52502
|
+
* never answered empty. `instanceId` on a WRITE is REQUIRED: a membership
|
|
52503
|
+
* change always names the target it changes. A single-instance provider
|
|
52504
|
+
* accepts an absent id on a read or its own id, and refuses any other.
|
|
52505
|
+
*/
|
|
52506
|
+
/** Which instance of an export addon a call addresses. Absent on a read = the whole addon. */
|
|
52507
|
+
var InstanceIdSchema$1 = string().min(1);
|
|
52508
|
+
var InstancePinSchema = object({ instanceId: InstanceIdSchema$1.optional() });
|
|
52509
|
+
/** One independent export target of an addon. */
|
|
52510
|
+
var ExportInstanceSchema = object({
|
|
52511
|
+
instanceId: InstanceIdSchema$1,
|
|
52512
|
+
name: string(),
|
|
52513
|
+
enabled: boolean(),
|
|
52514
|
+
kind: string().optional()
|
|
52515
|
+
});
|
|
52473
52516
|
var LinkStateSchema = _enum([
|
|
52474
52517
|
"unlinked",
|
|
52475
52518
|
"linked",
|
|
@@ -52520,10 +52563,14 @@ var ExposedDeviceSchema = object({
|
|
|
52520
52563
|
capabilities: array(string()).optional()
|
|
52521
52564
|
});
|
|
52522
52565
|
var ExposeInputSchema = object({
|
|
52566
|
+
instanceId: InstanceIdSchema$1,
|
|
52523
52567
|
deviceId: string(),
|
|
52524
52568
|
capabilities: array(string()).optional()
|
|
52525
52569
|
});
|
|
52526
|
-
var UnexposeInputSchema = object({
|
|
52570
|
+
var UnexposeInputSchema = object({
|
|
52571
|
+
instanceId: InstanceIdSchema$1,
|
|
52572
|
+
deviceId: string()
|
|
52573
|
+
});
|
|
52527
52574
|
/**
|
|
52528
52575
|
* What an exporter may expose besides devices (D968). An action and a
|
|
52529
52576
|
* notification target are LIST ENTRIES, never devices (D954): they enter an
|
|
@@ -52552,15 +52599,21 @@ var ExposedEntitySchema = object({
|
|
|
52552
52599
|
entity: ExportEntityRefSchema,
|
|
52553
52600
|
exposedAs: string().optional()
|
|
52554
52601
|
});
|
|
52555
|
-
var ExposeEntityInputSchema = object({
|
|
52556
|
-
|
|
52557
|
-
|
|
52602
|
+
var ExposeEntityInputSchema = object({
|
|
52603
|
+
instanceId: InstanceIdSchema$1,
|
|
52604
|
+
entity: ExportEntityRefSchema
|
|
52605
|
+
});
|
|
52606
|
+
var UnexposeEntityInputSchema = object({
|
|
52607
|
+
instanceId: InstanceIdSchema$1,
|
|
52608
|
+
entity: ExportEntityRefSchema
|
|
52609
|
+
});
|
|
52610
|
+
method(InstancePinSchema, DeviceExportStatusSchema), method(_void(), array(ExportInstanceSchema)), method(InstancePinSchema, array(DeviceKindSchema)), method(InstancePinSchema, array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), {
|
|
52558
52611
|
kind: "mutation",
|
|
52559
52612
|
auth: "admin"
|
|
52560
52613
|
}), method(UnexposeInputSchema, _void(), {
|
|
52561
52614
|
kind: "mutation",
|
|
52562
52615
|
auth: "admin"
|
|
52563
|
-
}), optionalMethod(_void(), array(ExportEntityKindSchema)), optionalMethod(
|
|
52616
|
+
}), optionalMethod(_void(), array(ExportEntityKindSchema)), optionalMethod(InstancePinSchema, array(ExposedEntitySchema)), optionalMethod(ExposeEntityInputSchema, _void(), {
|
|
52564
52617
|
kind: "mutation",
|
|
52565
52618
|
auth: "admin"
|
|
52566
52619
|
}), optionalMethod(UnexposeEntityInputSchema, _void(), {
|
|
@@ -57096,6 +57149,12 @@ method(_void(), array(IntegrationWithStateSchema)), method(object({ id: string()
|
|
|
57096
57149
|
}), object({ success: boolean() }), {
|
|
57097
57150
|
kind: "mutation",
|
|
57098
57151
|
auth: "admin"
|
|
57152
|
+
}), method(object({ id: string() }), object({
|
|
57153
|
+
rows: number().int().nonnegative(),
|
|
57154
|
+
secrets: number().int().nonnegative()
|
|
57155
|
+
}), {
|
|
57156
|
+
kind: "mutation",
|
|
57157
|
+
auth: "admin"
|
|
57099
57158
|
}), method(_void(), array(AvailableIntegrationTypeSchema), { auth: "admin" }), method(object({
|
|
57100
57159
|
addonId: string(),
|
|
57101
57160
|
settings: record(string(), unknown())
|
|
@@ -57124,13 +57183,65 @@ method(_void(), array(IntegrationWithStateSchema)), method(object({ id: string()
|
|
|
57124
57183
|
*/
|
|
57125
57184
|
var ConfigSchemaPassthrough$3 = custom();
|
|
57126
57185
|
var IntegrationInstanceIdSchema = string().min(1);
|
|
57186
|
+
var IntegrationInstanceModeSchema = _enum(["single", "multiple"]);
|
|
57187
|
+
/**
|
|
57188
|
+
* One kind of instance a provider can create (an adapter, an account type). The sign-in and
|
|
57189
|
+
* connect fields follow the `broker` contract (`broker.cap.ts`): `signIn.basePath` is a
|
|
57190
|
+
* hub-relative route set speaking the sign-in contract, `connectPath` / `disconnectPath` open an
|
|
57191
|
+
* interactive account link (popup) and may carry `{{brokerId}}`, which the UI replaces with the
|
|
57192
|
+
* instance id.
|
|
57193
|
+
*/
|
|
57194
|
+
var IntegrationInstanceKindSchema = object({
|
|
57195
|
+
/** Stable id of the kind, sent back as `createInstance.kind`. */
|
|
57196
|
+
id: string().min(1),
|
|
57197
|
+
label: string().min(1),
|
|
57198
|
+
/** The kind signs in through a server-held interactive session. */
|
|
57199
|
+
signIn: object({
|
|
57200
|
+
basePath: string().min(1),
|
|
57201
|
+
methods: array(_enum(["device-code", "proxy"])).optional()
|
|
57202
|
+
}).optional(),
|
|
57203
|
+
/** Relative hub path to start an interactive account link of an instance of this kind. */
|
|
57204
|
+
connectPath: string().min(1).optional(),
|
|
57205
|
+
/** Relative hub path to disconnect that account. */
|
|
57206
|
+
disconnectPath: string().min(1).optional()
|
|
57207
|
+
});
|
|
57127
57208
|
var IntegrationInstanceDescriptionSchema = object({
|
|
57209
|
+
/** What the instances are for the Integrations page; see {@link IntegrationInstanceRoleSchema}. */
|
|
57210
|
+
role: _enum([
|
|
57211
|
+
"devices",
|
|
57212
|
+
"services",
|
|
57213
|
+
"both"
|
|
57214
|
+
]),
|
|
57215
|
+
/** How the devices of an instance are found; absent means `{ mode: 'none' }`. */
|
|
57216
|
+
discovery: object({
|
|
57217
|
+
mode: _enum([
|
|
57218
|
+
"none",
|
|
57219
|
+
"lan",
|
|
57220
|
+
"account"
|
|
57221
|
+
]),
|
|
57222
|
+
scopedToInstance: boolean()
|
|
57223
|
+
}).optional(),
|
|
57128
57224
|
/** `single`: at most one instance can exist (Loki). `multiple`: an account each. */
|
|
57129
|
-
instanceMode:
|
|
57225
|
+
instanceMode: IntegrationInstanceModeSchema,
|
|
57130
57226
|
/** What the instance is, for the UI (`destination`, `relay`, `account`). */
|
|
57131
57227
|
kind: string(),
|
|
57132
57228
|
/** True when `testInstance` really probes the remote. */
|
|
57133
|
-
canTest: boolean()
|
|
57229
|
+
canTest: boolean(),
|
|
57230
|
+
/**
|
|
57231
|
+
* The kinds an instance can be of. Absent or one entry: nothing to choose; more than one: the
|
|
57232
|
+
* Add flow asks which first and sends it as `createInstance.kind`.
|
|
57233
|
+
*/
|
|
57234
|
+
kinds: array(IntegrationInstanceKindSchema).optional(),
|
|
57235
|
+
/**
|
|
57236
|
+
* The provider accepts `createInstance.id` for an id that once existed (an adopted id, because
|
|
57237
|
+
* devices carry it). The UI then offers "restore under its old id" on Add. Absent means no.
|
|
57238
|
+
*/
|
|
57239
|
+
allowRestoreId: boolean().optional(),
|
|
57240
|
+
/**
|
|
57241
|
+
* `createInstance` without an `id` works: the provider mints it. Absent means the caller must
|
|
57242
|
+
* send an id (the UI then mints an opaque one).
|
|
57243
|
+
*/
|
|
57244
|
+
mintsId: boolean().optional()
|
|
57134
57245
|
});
|
|
57135
57246
|
var IntegrationInstanceStatusSchema = object({
|
|
57136
57247
|
state: _enum([
|
|
@@ -57139,7 +57250,9 @@ var IntegrationInstanceStatusSchema = object({
|
|
|
57139
57250
|
"error",
|
|
57140
57251
|
"unknown"
|
|
57141
57252
|
]),
|
|
57142
|
-
detail: string().optional()
|
|
57253
|
+
detail: string().optional(),
|
|
57254
|
+
/** A short human word for the state ("Signed in", "Token expired"); shown instead of `state`. */
|
|
57255
|
+
label: string().optional()
|
|
57143
57256
|
});
|
|
57144
57257
|
var IntegrationInstanceSchema = object({
|
|
57145
57258
|
id: IntegrationInstanceIdSchema,
|
|
@@ -57147,13 +57260,18 @@ var IntegrationInstanceSchema = object({
|
|
|
57147
57260
|
/** The addon's own rule (an URL is present, a client id is present...). */
|
|
57148
57261
|
configured: boolean(),
|
|
57149
57262
|
/**
|
|
57150
|
-
* The instance's own on/off switch (D996)
|
|
57151
|
-
*
|
|
57263
|
+
* The instance's own on/off switch (D996), derived from the record body (`enabled !== false`,
|
|
57264
|
+
* so a row written before the field existed is on). Absent when the `integrations` registry
|
|
57265
|
+
* owns the switch (`describe().role` is `devices`): read it from the registry row.
|
|
57152
57266
|
*/
|
|
57153
|
-
enabled: boolean(),
|
|
57267
|
+
enabled: boolean().optional(),
|
|
57268
|
+
/** The kind of this instance (one of `describe().kinds[].id`), when the provider has kinds. */
|
|
57269
|
+
kind: string().optional(),
|
|
57154
57270
|
/** Values for the instance form; a secret is a `SecretFieldView`, never text. */
|
|
57155
57271
|
formValues: record(string(), unknown()),
|
|
57156
|
-
status: IntegrationInstanceStatusSchema.optional()
|
|
57272
|
+
status: IntegrationInstanceStatusSchema.optional(),
|
|
57273
|
+
/** Epoch ms of the last probe of the remote that produced `status`; absent when never checked. */
|
|
57274
|
+
lastCheckedAt: number().optional()
|
|
57157
57275
|
});
|
|
57158
57276
|
var IntegrationInstancePatchSchema = object({
|
|
57159
57277
|
id: IntegrationInstanceIdSchema,
|
|
@@ -57162,8 +57280,9 @@ var IntegrationInstancePatchSchema = object({
|
|
|
57162
57280
|
values: record(string(), unknown())
|
|
57163
57281
|
});
|
|
57164
57282
|
method(_void(), IntegrationInstanceDescriptionSchema, { auth: "admin" }), method(object({ id: IntegrationInstanceIdSchema.nullable() }), ConfigSchemaPassthrough$3, { auth: "admin" }), method(_void(), array(IntegrationInstanceSchema).readonly(), { auth: "admin" }), method(object({ id: IntegrationInstanceIdSchema }), IntegrationInstanceSchema.nullable(), { auth: "admin" }), method(object({
|
|
57165
|
-
id: IntegrationInstanceIdSchema,
|
|
57166
|
-
name: string().min(1)
|
|
57283
|
+
id: IntegrationInstanceIdSchema.optional(),
|
|
57284
|
+
name: string().min(1),
|
|
57285
|
+
kind: string().min(1).optional()
|
|
57167
57286
|
}), object({ id: string() }), {
|
|
57168
57287
|
kind: "mutation",
|
|
57169
57288
|
auth: "admin"
|
|
@@ -59323,6 +59442,11 @@ var LogEntrySchema = object({
|
|
|
59323
59442
|
* flight, and not asking for the next slice ends the scan.
|
|
59324
59443
|
*/
|
|
59325
59444
|
var LogReadQuerySchema = object({
|
|
59445
|
+
/**
|
|
59446
|
+
* Which destination INSTANCE answers (a destination addon may hold several records). Absent ⇒
|
|
59447
|
+
* the provider's first readable one, so a caller written before instances existed is unchanged.
|
|
59448
|
+
*/
|
|
59449
|
+
instanceId: string().min(1).max(200).optional(),
|
|
59326
59450
|
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
59327
59451
|
requestId: string().min(1).max(64).optional(),
|
|
59328
59452
|
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
@@ -59385,6 +59509,8 @@ var LogReadResultSchema = object({
|
|
|
59385
59509
|
/** True when `cancelRead` ended this slice early. */
|
|
59386
59510
|
cancelled: boolean().optional()
|
|
59387
59511
|
});
|
|
59512
|
+
/** Names one destination instance; absent ⇒ the provider's first readable one. */
|
|
59513
|
+
var LogInstanceSelectorSchema = object({ instanceId: string().min(1).max(200).optional() });
|
|
59388
59514
|
var LogReadCapabilitiesSchema = object({
|
|
59389
59515
|
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
59390
59516
|
readable: boolean(),
|
|
@@ -59403,7 +59529,7 @@ var LogReadCapabilitiesSchema = object({
|
|
|
59403
59529
|
/** How far back the store reaches, when the provider knows (days). */
|
|
59404
59530
|
retentionDays: number().nullable()
|
|
59405
59531
|
});
|
|
59406
|
-
method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(
|
|
59532
|
+
method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(LogInstanceSelectorSchema, LogReadCapabilitiesSchema, { auth: "admin" }), optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }), optionalMethod(object({ requestId: string().min(1).max(64) }), object({ cancelled: boolean() }), {
|
|
59407
59533
|
kind: "mutation",
|
|
59408
59534
|
auth: "admin"
|
|
59409
59535
|
});
|
|
@@ -83245,6 +83371,25 @@ function buildEventKindDescriptor(kind, source) {
|
|
|
83245
83371
|
}
|
|
83246
83372
|
};
|
|
83247
83373
|
}
|
|
83374
|
+
/**
|
|
83375
|
+
* What a remote key is CALLED and what it LOOKS like, for every role (D963),
|
|
83376
|
+
* shared by the admin UI and the viewer. A role is data on the wire; each
|
|
83377
|
+
* client resolves its name from `label` (English and Italian side by side) and
|
|
83378
|
+
* its glyph from `icon`, a lucide id from the shared icon catalogue — the
|
|
83379
|
+
* server sends an id, a client maps it to its own icon set.
|
|
83380
|
+
*
|
|
83381
|
+
* `legend` is text printed on the key INSTEAD of a glyph (a digit has no
|
|
83382
|
+
* pictogram): a client that can draw text shows it, one that cannot falls back
|
|
83383
|
+
* to `icon`.
|
|
83384
|
+
*/
|
|
83385
|
+
function digit(n) {
|
|
83386
|
+
return {
|
|
83387
|
+
label: t(n, n),
|
|
83388
|
+
icon: "hash",
|
|
83389
|
+
legend: n
|
|
83390
|
+
};
|
|
83391
|
+
}
|
|
83392
|
+
digit("0"), digit("1"), digit("2"), digit("3"), digit("4"), digit("5"), digit("6"), digit("7"), digit("8"), digit("9");
|
|
83248
83393
|
DeviceFeature.MediaPlayerPower, DeviceFeature.MediaPlayerVolumeStep, DeviceFeature.MediaPlayerChannelStep, DeviceFeature.MediaPlayerMute, DeviceFeature.MediaPlayerStop, DeviceFeature.MediaPlayerNext, DeviceFeature.MediaPlayerPrevious;
|
|
83249
83394
|
var btn = (idSuffix, row, col, init) => ({
|
|
83250
83395
|
idSuffix,
|
|
@@ -83383,11 +83528,15 @@ discriminatedUnion("kind", [object({
|
|
|
83383
83528
|
* 1. idle floor F = time-weighted median; noise ceiling N = highest value seen
|
|
83384
83529
|
* near F. A device that is not near one level most of the time has no floor.
|
|
83385
83530
|
* 2. coarse activity = above max(2N, N + 5 W); consecutive stretches are episodes.
|
|
83386
|
-
* 3.
|
|
83387
|
-
*
|
|
83531
|
+
* 3. an episode shorter than `PULSE_MAX_MS` is a PULSE (an anti-crease tumble, a
|
|
83532
|
+
* display waking): it is neither a run nor a pause. Among the remaining
|
|
83533
|
+
* episodes, gaps over `PAUSE_MAX_MS` always separate runs; the rest split in
|
|
83534
|
+
* two by the largest log-scale jump (>= 3x): the short ones are pauses INSIDE
|
|
83535
|
+
* a run (a soak), the long ones separate runs. A stretch under `MIN_RUN_MS`
|
|
83536
|
+
* is no run.
|
|
83388
83537
|
* 4. T = geometric mean of N and the plateau's 10th percentile, snapped to a
|
|
83389
|
-
* grid a person would type; stop dwell covers the longest pause
|
|
83390
|
-
* covers the longest standby blip above T.
|
|
83538
|
+
* grid a person would type; stop dwell covers the longest pause and the
|
|
83539
|
+
* kind's floor; start dwell covers the longest pulse and standby blip above T.
|
|
83391
83540
|
* 5. the numbers are proved by REPLAY through the real `dwell` evaluation: each
|
|
83392
83541
|
* run must hold exactly one true interval and nothing may flap outside.
|
|
83393
83542
|
*/
|
|
@@ -83398,6 +83547,10 @@ var MINUTE_MS$1 = 60 * SECOND_MS;
|
|
|
83398
83547
|
30 * SECOND_MS;
|
|
83399
83548
|
60 * SECOND_MS;
|
|
83400
83549
|
20 * MINUTE_MS$1;
|
|
83550
|
+
90 * SECOND_MS;
|
|
83551
|
+
30 * MINUTE_MS$1;
|
|
83552
|
+
10 * MINUTE_MS$1;
|
|
83553
|
+
DeviceType.Dryer, 3 * MINUTE_MS$1, DeviceType.Dishwasher, 3 * MINUTE_MS$1, DeviceType.Washer, 10 * MINUTE_MS$1;
|
|
83401
83554
|
10 * SECOND_MS;
|
|
83402
83555
|
10 * SECOND_MS;
|
|
83403
83556
|
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverStoppable, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
@@ -86582,6 +86735,13 @@ Object.freeze({
|
|
|
86582
86735
|
access: "view",
|
|
86583
86736
|
role: "admin"
|
|
86584
86737
|
},
|
|
86738
|
+
"deviceExport.listInstances": {
|
|
86739
|
+
capName: "device-export",
|
|
86740
|
+
capScope: "system",
|
|
86741
|
+
addonId: null,
|
|
86742
|
+
access: "view",
|
|
86743
|
+
role: "admin"
|
|
86744
|
+
},
|
|
86585
86745
|
"deviceExport.listSupportedDeviceKinds": {
|
|
86586
86746
|
capName: "device-export",
|
|
86587
86747
|
capScope: "system",
|
|
@@ -88234,6 +88394,13 @@ Object.freeze({
|
|
|
88234
88394
|
access: "create",
|
|
88235
88395
|
role: "admin"
|
|
88236
88396
|
},
|
|
88397
|
+
"integrations.clearSettings": {
|
|
88398
|
+
capName: "integrations",
|
|
88399
|
+
capScope: "system",
|
|
88400
|
+
addonId: null,
|
|
88401
|
+
access: "delete",
|
|
88402
|
+
role: "admin"
|
|
88403
|
+
},
|
|
88237
88404
|
"integrations.create": {
|
|
88238
88405
|
capName: "integrations",
|
|
88239
88406
|
capScope: "system",
|