camstack 1.2.191 → 1.2.193
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/cli.js +555 -145
- package/dist/{launcher-AZI5I6X5.js → launcher-MJFET7GO.js} +6250 -3627
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -37,7 +37,7 @@ async function runServe(args) {
|
|
|
37
37
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
38
38
|
};
|
|
39
39
|
Object.assign(process.env, buildServeEnv(opts));
|
|
40
|
-
await import("./launcher-
|
|
40
|
+
await import("./launcher-MJFET7GO.js");
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// src/commands/agent.ts
|
|
@@ -82,7 +82,7 @@ async function runAgent(args) {
|
|
|
82
82
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
83
83
|
};
|
|
84
84
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
85
|
-
await import("./launcher-
|
|
85
|
+
await import("./launcher-MJFET7GO.js");
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// src/commands/setup.ts
|
|
@@ -14773,7 +14773,7 @@ function date4(params) {
|
|
|
14773
14773
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14774
14774
|
config(en_default());
|
|
14775
14775
|
|
|
14776
|
-
// ../types/dist/sleep-
|
|
14776
|
+
// ../types/dist/sleep-BSuCCFjf.mjs
|
|
14777
14777
|
var AUDIO_CHUNK_FORMATS = [
|
|
14778
14778
|
"f32le",
|
|
14779
14779
|
"pcmu",
|
|
@@ -18584,10 +18584,12 @@ var AddonRoutesScopeSchema = external_exports.object({
|
|
|
18584
18584
|
type: external_exports.literal("addon-routes"),
|
|
18585
18585
|
access: external_exports.array(MethodAccessSchema).min(1)
|
|
18586
18586
|
});
|
|
18587
|
+
var PreferencesSelfScopeSchema = external_exports.object({ type: external_exports.literal("preferences-self") });
|
|
18587
18588
|
var CredentialScopeSchema = external_exports.union([
|
|
18588
18589
|
external_exports.literal("*"),
|
|
18589
18590
|
ShareViewScopeSchema,
|
|
18590
18591
|
AddonRoutesScopeSchema,
|
|
18592
|
+
PreferencesSelfScopeSchema,
|
|
18591
18593
|
TokenScopeSchema
|
|
18592
18594
|
]);
|
|
18593
18595
|
var CREDENTIAL_TOKEN_KIND = "credential";
|
|
@@ -18597,6 +18599,58 @@ var CredentialTokenClaimsSchema = external_exports.object({
|
|
|
18597
18599
|
jti: external_exports.string().min(16),
|
|
18598
18600
|
scopes: external_exports.array(CredentialScopeSchema).min(1)
|
|
18599
18601
|
});
|
|
18602
|
+
var PREFERENCES_NAMESPACE_PATTERN = /^[a-z][a-z0-9.-]{0,63}$/;
|
|
18603
|
+
var PREFERENCES_MAX_VALUE_BYTES = 256 * 1024;
|
|
18604
|
+
var PreferenceNamespaceSchema = external_exports.string().regex(PREFERENCES_NAMESPACE_PATTERN);
|
|
18605
|
+
var PreferenceValueSchema = external_exports.record(external_exports.string(), external_exports.unknown());
|
|
18606
|
+
var PreferenceDeviceIdSchema = external_exports.string().min(1).max(64);
|
|
18607
|
+
var PreferenceRowSchema = external_exports.object({
|
|
18608
|
+
namespace: PreferenceNamespaceSchema,
|
|
18609
|
+
value: PreferenceValueSchema,
|
|
18610
|
+
/** Starts at 1, +1 on every write of this namespace. A delete ends the row and its count. */
|
|
18611
|
+
revision: external_exports.number().int().positive(),
|
|
18612
|
+
updatedAt: external_exports.number().int(),
|
|
18613
|
+
/** The client id the last writer sent; `null` when it sent none. */
|
|
18614
|
+
updatedByDevice: PreferenceDeviceIdSchema.nullable()
|
|
18615
|
+
});
|
|
18616
|
+
var PreferencesGetInputSchema = external_exports.object({
|
|
18617
|
+
/** Absent: every namespace the caller holds. */
|
|
18618
|
+
namespaces: external_exports.array(PreferenceNamespaceSchema).max(32).optional()
|
|
18619
|
+
});
|
|
18620
|
+
var PreferencesGetOutputSchema = external_exports.object({ rows: external_exports.array(PreferenceRowSchema) });
|
|
18621
|
+
var PreferencesPutInputSchema = external_exports.object({
|
|
18622
|
+
namespace: PreferenceNamespaceSchema,
|
|
18623
|
+
value: PreferenceValueSchema,
|
|
18624
|
+
/**
|
|
18625
|
+
* The revision the edit was based on. Absent: last write wins. `0`: the
|
|
18626
|
+
* namespace must not exist yet. Any other value that is not the current
|
|
18627
|
+
* revision answers `conflict` and writes nothing.
|
|
18628
|
+
*/
|
|
18629
|
+
baseRevision: external_exports.number().int().nonnegative().optional(),
|
|
18630
|
+
deviceId: PreferenceDeviceIdSchema.optional()
|
|
18631
|
+
});
|
|
18632
|
+
var PreferencesPutOutputSchema = external_exports.discriminatedUnion("status", [external_exports.object({
|
|
18633
|
+
status: external_exports.literal("saved"),
|
|
18634
|
+
row: PreferenceRowSchema
|
|
18635
|
+
}), external_exports.object({
|
|
18636
|
+
status: external_exports.literal("conflict"),
|
|
18637
|
+
current: PreferenceRowSchema.nullable()
|
|
18638
|
+
})]);
|
|
18639
|
+
var PreferencesDeleteInputSchema = external_exports.object({ namespace: PreferenceNamespaceSchema });
|
|
18640
|
+
var PreferencesDeleteOutputSchema = external_exports.object({
|
|
18641
|
+
/** `false` when the namespace did not exist. */
|
|
18642
|
+
deleted: external_exports.boolean()
|
|
18643
|
+
});
|
|
18644
|
+
var PreferencesChangedSinceInputSchema = external_exports.object({
|
|
18645
|
+
/** The revision the client holds per namespace; a namespace it does not list is new to it. */
|
|
18646
|
+
revisionByNamespace: external_exports.record(PreferenceNamespaceSchema, external_exports.number().int().nonnegative()).refine((map2) => Object.keys(map2).length <= 32, { message: `at most 32 namespaces` })
|
|
18647
|
+
});
|
|
18648
|
+
var PreferencesChangedSinceOutputSchema = external_exports.object({
|
|
18649
|
+
/** Every row whose revision differs from the client's, and every row it did not list. */
|
|
18650
|
+
rows: external_exports.array(PreferenceRowSchema),
|
|
18651
|
+
/** Namespaces the client listed that no longer exist. */
|
|
18652
|
+
deleted: external_exports.array(PreferenceNamespaceSchema)
|
|
18653
|
+
});
|
|
18600
18654
|
var AppFlowPurposeSchema = external_exports.enum(["new-session", "step-up"]);
|
|
18601
18655
|
var AppPageLangSchema = external_exports.enum(["en", "it"]);
|
|
18602
18656
|
var APP_FLOW_REFUSAL_MESSAGES = {
|
|
@@ -23308,6 +23362,12 @@ var DeviceHistorySubjectSchema = external_exports.discriminatedUnion("kind", [ex
|
|
|
23308
23362
|
nodeId: external_exports.string().min(1)
|
|
23309
23363
|
})]);
|
|
23310
23364
|
var DeviceHistoryKindSchema = external_exports.enum([
|
|
23365
|
+
"gauge",
|
|
23366
|
+
"counter",
|
|
23367
|
+
"boolean",
|
|
23368
|
+
"enum"
|
|
23369
|
+
]);
|
|
23370
|
+
var DeviceHistoryProducerKindSchema = external_exports.enum([
|
|
23311
23371
|
"gauge",
|
|
23312
23372
|
"counter",
|
|
23313
23373
|
"boolean"
|
|
@@ -23343,7 +23403,13 @@ var SeriesInfoSchema = external_exports.object({
|
|
|
23343
23403
|
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
23344
23404
|
unit: external_exports.string().nullable(),
|
|
23345
23405
|
displayName: external_exports.string(),
|
|
23346
|
-
source: external_exports.enum([
|
|
23406
|
+
source: external_exports.enum([
|
|
23407
|
+
"cap",
|
|
23408
|
+
"addon",
|
|
23409
|
+
"derived"
|
|
23410
|
+
]),
|
|
23411
|
+
/** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
|
|
23412
|
+
values: external_exports.array(external_exports.string()).readonly().nullable(),
|
|
23347
23413
|
firstTs: external_exports.number(),
|
|
23348
23414
|
lastTs: external_exports.number()
|
|
23349
23415
|
});
|
|
@@ -23357,17 +23423,31 @@ var QueryPointSchema = external_exports.object({
|
|
|
23357
23423
|
twMean: external_exports.number().nullable(),
|
|
23358
23424
|
min: external_exports.number(),
|
|
23359
23425
|
max: external_exports.number(),
|
|
23360
|
-
/** `null` is unknown, never zero (D393). */
|
|
23361
|
-
last: external_exports.number().nullable()
|
|
23426
|
+
/** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
|
|
23427
|
+
last: external_exports.number().nullable(),
|
|
23428
|
+
/**
|
|
23429
|
+
* The increase over the point: a `counter`'s growth since the previous point
|
|
23430
|
+
* or bucket (a drop is a reset, counted from zero), and for
|
|
23431
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
|
|
23432
|
+
* every other kind, and when it cannot be known.
|
|
23433
|
+
*/
|
|
23434
|
+
delta: external_exports.number().nullable(),
|
|
23435
|
+
/** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
|
|
23436
|
+
state: external_exports.string().nullable(),
|
|
23437
|
+
/** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
|
|
23438
|
+
states: external_exports.record(external_exports.string(), external_exports.number()).nullable()
|
|
23362
23439
|
});
|
|
23363
23440
|
var QuerySeriesSchema = external_exports.object({
|
|
23364
23441
|
scope: external_exports.string(),
|
|
23365
23442
|
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
23366
23443
|
before: external_exports.object({
|
|
23367
23444
|
t: external_exports.number(),
|
|
23368
|
-
value: external_exports.number().nullable()
|
|
23445
|
+
value: external_exports.number().nullable(),
|
|
23446
|
+
state: external_exports.string().nullable()
|
|
23369
23447
|
}).nullable(),
|
|
23370
|
-
points: external_exports.array(QueryPointSchema).readonly()
|
|
23448
|
+
points: external_exports.array(QueryPointSchema).readonly(),
|
|
23449
|
+
/** A derived key: the stored key its points were computed from; `null` for a stored series. */
|
|
23450
|
+
derivedFrom: external_exports.string().nullable()
|
|
23371
23451
|
});
|
|
23372
23452
|
var QueryWindowShape = {
|
|
23373
23453
|
key: external_exports.string(),
|
|
@@ -23382,6 +23462,22 @@ var QueryResultSchema = external_exports.object({
|
|
|
23382
23462
|
series: external_exports.array(QuerySeriesSchema).readonly(),
|
|
23383
23463
|
truncated: external_exports.boolean()
|
|
23384
23464
|
});
|
|
23465
|
+
var QueryManyItemSchema = external_exports.union([external_exports.object({
|
|
23466
|
+
deviceId: external_exports.number().int(),
|
|
23467
|
+
key: external_exports.string(),
|
|
23468
|
+
scope: external_exports.string().optional()
|
|
23469
|
+
}), external_exports.object({
|
|
23470
|
+
forNodeId: external_exports.string().min(1),
|
|
23471
|
+
key: external_exports.string(),
|
|
23472
|
+
scope: external_exports.string().optional()
|
|
23473
|
+
})]);
|
|
23474
|
+
var QueryManyEntrySchema = external_exports.discriminatedUnion("ok", [external_exports.object({
|
|
23475
|
+
ok: external_exports.literal(true),
|
|
23476
|
+
result: QueryResultSchema
|
|
23477
|
+
}), external_exports.object({
|
|
23478
|
+
ok: external_exports.literal(false),
|
|
23479
|
+
error: external_exports.string()
|
|
23480
|
+
})]);
|
|
23385
23481
|
var TierStatusSchema = external_exports.object({
|
|
23386
23482
|
tier: DeviceHistoryResolutionSchema,
|
|
23387
23483
|
/** `null` until the first background count answered. */
|
|
@@ -23449,26 +23545,45 @@ var deviceHistoryCapability = {
|
|
|
23449
23545
|
* `listNodeSeries` / `queryNode`.
|
|
23450
23546
|
*/
|
|
23451
23547
|
listSeries: method(external_exports.object({ deviceId: external_exports.number().int() }), external_exports.array(SeriesInfoSchema).readonly()),
|
|
23452
|
-
|
|
23548
|
+
/**
|
|
23549
|
+
* A NODE's series. The subject is `forNodeId`, never `nodeId`: a top-level
|
|
23550
|
+
* `nodeId` is the cap ROUTING key, and `nodeId: 'little-unraid'` sent the
|
|
23551
|
+
* read to that agent, which hosts no device-history.
|
|
23552
|
+
*/
|
|
23553
|
+
listNodeSeries: method(external_exports.object({ forNodeId: external_exports.string().min(1) }), external_exports.array(SeriesInfoSchema).readonly(), { auth: "admin" }),
|
|
23453
23554
|
/**
|
|
23454
23555
|
* One series (or every scope of it) at one resolution. `auto` picks the
|
|
23455
23556
|
* finest tier whose retention covers `from` and whose point count fits
|
|
23456
23557
|
* `maxPoints`; when even the coarsest tier does not fit, the newest
|
|
23457
|
-
* `maxPoints` points are returned and `truncated` is true.
|
|
23558
|
+
* `maxPoints` points are returned and `truncated` is true. A series fed by
|
|
23559
|
+
* closed buckets has no raw rows, so `auto` never answers it from raw; nor
|
|
23560
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY}, which is computed from rollups.
|
|
23458
23561
|
*/
|
|
23459
23562
|
query: method(external_exports.object({
|
|
23460
23563
|
deviceId: external_exports.number().int(),
|
|
23461
23564
|
...QueryWindowShape
|
|
23462
23565
|
}), QueryResultSchema),
|
|
23463
23566
|
queryNode: method(external_exports.object({
|
|
23464
|
-
|
|
23567
|
+
forNodeId: external_exports.string().min(1),
|
|
23465
23568
|
...QueryWindowShape
|
|
23466
23569
|
}), QueryResultSchema, { auth: "admin" }),
|
|
23570
|
+
/**
|
|
23571
|
+
* Several reads over ONE window, answered in order (one entry per item).
|
|
23572
|
+
* Admin-only: its subjects are nested in `items`, where the device scope
|
|
23573
|
+
* gate cannot see them — a principal limited to one device uses `query`.
|
|
23574
|
+
*/
|
|
23575
|
+
queryMany: method(external_exports.object({
|
|
23576
|
+
items: external_exports.array(QueryManyItemSchema).min(1).max(24),
|
|
23577
|
+
from: QueryWindowShape.from,
|
|
23578
|
+
to: QueryWindowShape.to,
|
|
23579
|
+
resolution: QueryWindowShape.resolution,
|
|
23580
|
+
maxPoints: QueryWindowShape.maxPoints
|
|
23581
|
+
}), external_exports.object({ results: external_exports.array(QueryManyEntrySchema).readonly() }), { auth: "admin" }),
|
|
23467
23582
|
/** Producer: declare (idempotent) a series key this addon owns: `addon:<callerAddonId>/<name>`. */
|
|
23468
23583
|
declareSeries: method(external_exports.object({
|
|
23469
23584
|
name: external_exports.string().regex(/^[a-z0-9-]+$/),
|
|
23470
23585
|
subjectKind: external_exports.enum(["device", "node"]),
|
|
23471
|
-
kind:
|
|
23586
|
+
kind: DeviceHistoryProducerKindSchema,
|
|
23472
23587
|
unit: external_exports.string().optional(),
|
|
23473
23588
|
displayName: external_exports.string().min(1),
|
|
23474
23589
|
ingest: external_exports.enum(["points", "buckets"])
|
|
@@ -46576,27 +46691,30 @@ var llmRuntimeCapability = {
|
|
|
46576
46691
|
})
|
|
46577
46692
|
}
|
|
46578
46693
|
};
|
|
46579
|
-
var
|
|
46580
|
-
|
|
46581
|
-
|
|
46582
|
-
|
|
46583
|
-
|
|
46584
|
-
|
|
46585
|
-
|
|
46586
|
-
|
|
46694
|
+
var LLM_PROFILE_KIND_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
46695
|
+
var LlmProfileKindSchema = external_exports.string().regex(LLM_PROFILE_KIND_PATTERN, "a kind id is lower-case letters, digits and dashes");
|
|
46696
|
+
var LlmModelFeaturesSchema = external_exports.object({
|
|
46697
|
+
vision: external_exports.boolean(),
|
|
46698
|
+
tools: external_exports.boolean(),
|
|
46699
|
+
streaming: external_exports.boolean()
|
|
46700
|
+
});
|
|
46701
|
+
var LlmModelInfoSchema = external_exports.object({
|
|
46702
|
+
id: external_exports.string(),
|
|
46703
|
+
label: external_exports.string().optional(),
|
|
46704
|
+
contextLength: external_exports.number().int().positive().optional(),
|
|
46705
|
+
features: LlmModelFeaturesSchema.partial().optional()
|
|
46706
|
+
});
|
|
46707
|
+
var LlmProviderConfigSchema = external_exports.record(external_exports.string(), external_exports.unknown());
|
|
46587
46708
|
var LlmProfileSchema = external_exports.object({
|
|
46588
46709
|
id: external_exports.string(),
|
|
46589
46710
|
name: external_exports.string(),
|
|
46711
|
+
/** The provider-declared kind (`LlmProfileKindDescriptor.kind`). */
|
|
46590
46712
|
kind: LlmProfileKindSchema,
|
|
46591
46713
|
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
46592
46714
|
addonId: external_exports.string(),
|
|
46593
46715
|
enabled: external_exports.boolean(),
|
|
46594
46716
|
/** Vendor model id, or the managed runtime's loaded model. */
|
|
46595
46717
|
model: external_exports.string(),
|
|
46596
|
-
/** Required for openai-compatible; override for cloud kinds. */
|
|
46597
|
-
baseUrl: external_exports.string().optional(),
|
|
46598
|
-
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
46599
|
-
apiKey: external_exports.string().optional(),
|
|
46600
46718
|
/** Vision on/off. A vision call against a `false` profile is REFUSED, never
|
|
46601
46719
|
* degraded to text — that shipped once and produced a confident answer to a
|
|
46602
46720
|
* question about a picture nobody sent. */
|
|
@@ -46604,15 +46722,11 @@ var LlmProfileSchema = external_exports.object({
|
|
|
46604
46722
|
temperature: external_exports.number().min(0).max(2).optional(),
|
|
46605
46723
|
/** Nucleus sampling. Every wire we speak has it. */
|
|
46606
46724
|
topP: external_exports.number().min(0).max(1).optional(),
|
|
46607
|
-
/** Top-k sampling. Carried only by the wires that have it —
|
|
46608
|
-
*
|
|
46609
|
-
* `top_p` and no `top_k`). The profile editor hides the field wherever it
|
|
46610
|
-
* would change nothing; `KINDS_WITH_TOP_K` is the single owner of that list. */
|
|
46725
|
+
/** Top-k sampling. Carried only by the wires that have it — a kind offers the
|
|
46726
|
+
* field in its editor only when its descriptor lists it in `profileFields`. */
|
|
46611
46727
|
topK: external_exports.number().int().positive().optional(),
|
|
46612
46728
|
maxTokens: external_exports.number().int().positive().optional(),
|
|
46613
|
-
/** Prompt context window. Advisory for cloud kinds (they enforce their own)
|
|
46614
|
-
* for `managed-local` it is the llama.cpp `--ctx-size` the runtime starts
|
|
46615
|
-
* the model with, so it is the one field that changes a PROCESS. */
|
|
46729
|
+
/** Prompt context window. Advisory for cloud kinds (they enforce their own). */
|
|
46616
46730
|
contextLength: external_exports.number().int().positive().optional(),
|
|
46617
46731
|
/** Default system prompt. A caller's `system` REPLACES it (never appends —
|
|
46618
46732
|
* two system prompts fighting is worse than either alone). */
|
|
@@ -46638,26 +46752,76 @@ var LlmProfileSchema = external_exports.object({
|
|
|
46638
46752
|
* library; the REGISTRY of callable tools is ours and is empty in v1, so a
|
|
46639
46753
|
* `true` here buys the wiring, not behaviour, until tools are registered. */
|
|
46640
46754
|
toolsEnabled: external_exports.boolean().default(false),
|
|
46641
|
-
|
|
46642
|
-
|
|
46643
|
-
|
|
46644
|
-
|
|
46645
|
-
|
|
46646
|
-
|
|
46647
|
-
|
|
46648
|
-
|
|
46649
|
-
|
|
46650
|
-
|
|
46755
|
+
/** Everything the kind's provider owns (endpoint, key, node, runtime…). */
|
|
46756
|
+
providerConfig: LlmProviderConfigSchema.default({})
|
|
46757
|
+
});
|
|
46758
|
+
var LlmProfileFieldSchema = external_exports.enum([
|
|
46759
|
+
"temperature",
|
|
46760
|
+
"topP",
|
|
46761
|
+
"topK",
|
|
46762
|
+
"maxTokens",
|
|
46763
|
+
"contextLength",
|
|
46764
|
+
"systemPrompt",
|
|
46765
|
+
"timeoutMs",
|
|
46766
|
+
"connectTimeoutMs",
|
|
46767
|
+
"firstTokenTimeoutMs",
|
|
46768
|
+
"idleTimeoutMs",
|
|
46769
|
+
"retry",
|
|
46770
|
+
"toolsEnabled"
|
|
46771
|
+
]);
|
|
46772
|
+
var LlmProviderWidgetSchema = external_exports.object({
|
|
46773
|
+
id: external_exports.string(),
|
|
46774
|
+
placement: external_exports.enum(["connection", "model"]),
|
|
46775
|
+
/** `providerConfig` keys this widget must fill before the profile can be saved. */
|
|
46776
|
+
requires: external_exports.array(external_exports.string()).optional()
|
|
46651
46777
|
});
|
|
46652
46778
|
var ConfigSchemaPassthrough$3 = external_exports.unknown();
|
|
46653
46779
|
var LlmProfileKindDescriptorSchema = external_exports.object({
|
|
46654
46780
|
kind: LlmProfileKindSchema,
|
|
46655
46781
|
label: external_exports.string(),
|
|
46782
|
+
/** A generic icon name (`cloud`, `plug`, `cpu`) — never a glyph or a logo. */
|
|
46656
46783
|
icon: external_exports.string(),
|
|
46657
46784
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
46658
46785
|
addonId: external_exports.string(),
|
|
46659
|
-
|
|
46786
|
+
/** The provider's own fields (`providerConfig`); `password` fields are keychain-held. */
|
|
46787
|
+
connectionSchema: ConfigSchemaPassthrough$3,
|
|
46788
|
+
/** Provider fields that belong under "Advanced" (extra headers, runtime tuning). */
|
|
46789
|
+
advancedSchema: ConfigSchemaPassthrough$3.optional(),
|
|
46790
|
+
/** The kind's defaults; a model from `listModels` may override any of them. */
|
|
46791
|
+
features: LlmModelFeaturesSchema,
|
|
46792
|
+
/** `false` = the provider stamps `supportsVision` itself (from what a node reports). */
|
|
46793
|
+
visionEditable: external_exports.boolean(),
|
|
46794
|
+
/** Where the model list comes from: `listModels`, `staticModels`, or nowhere. */
|
|
46795
|
+
modelCatalog: external_exports.enum([
|
|
46796
|
+
"fetch",
|
|
46797
|
+
"static",
|
|
46798
|
+
"none"
|
|
46799
|
+
]),
|
|
46800
|
+
staticModels: external_exports.array(LlmModelInfoSchema).optional(),
|
|
46801
|
+
/** The common fields that mean something on this kind's wire. */
|
|
46802
|
+
profileFields: external_exports.array(LlmProfileFieldSchema),
|
|
46803
|
+
providerWidgets: external_exports.array(LlmProviderWidgetSchema).optional()
|
|
46660
46804
|
});
|
|
46805
|
+
var LlmListModelsInputSchema = external_exports.object({
|
|
46806
|
+
addonId: external_exports.string(),
|
|
46807
|
+
kind: LlmProfileKindSchema,
|
|
46808
|
+
profileId: external_exports.string().optional(),
|
|
46809
|
+
connection: LlmProviderConfigSchema.optional()
|
|
46810
|
+
});
|
|
46811
|
+
var LlmListModelsErrorCodeSchema = external_exports.enum([
|
|
46812
|
+
"auth",
|
|
46813
|
+
"network",
|
|
46814
|
+
"unsupported",
|
|
46815
|
+
"invalid"
|
|
46816
|
+
]);
|
|
46817
|
+
var LlmListModelsResultSchema = external_exports.discriminatedUnion("ok", [external_exports.object({
|
|
46818
|
+
ok: external_exports.literal(true),
|
|
46819
|
+
models: external_exports.array(LlmModelInfoSchema)
|
|
46820
|
+
}), external_exports.object({
|
|
46821
|
+
ok: external_exports.literal(false),
|
|
46822
|
+
code: LlmListModelsErrorCodeSchema,
|
|
46823
|
+
message: external_exports.string()
|
|
46824
|
+
})]);
|
|
46661
46825
|
var LlmDefaultSelectorSchema = external_exports.union([external_exports.object({ consumer: external_exports.string() }), external_exports.object({ purpose: external_exports.enum(["text", "vision"]) })]);
|
|
46662
46826
|
var LlmDefaultSchema = external_exports.object({
|
|
46663
46827
|
selector: LlmDefaultSelectorSchema,
|
|
@@ -46777,8 +46941,17 @@ var llmCapability = {
|
|
|
46777
46941
|
auth: "admin",
|
|
46778
46942
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
46779
46943
|
}),
|
|
46780
|
-
/**
|
|
46781
|
-
|
|
46944
|
+
/**
|
|
46945
|
+
* The models a kind offers, for a SAVED profile or an unsaved draft
|
|
46946
|
+
* (`connection`). A mutation, not a query: a draft may carry a key, and a
|
|
46947
|
+
* query's input travels in the URL. Admin: it dials whatever endpoint the
|
|
46948
|
+
* draft names and may resolve a stored key to do it. The answer never
|
|
46949
|
+
* carries a secret — failures are a typed result, never a throw.
|
|
46950
|
+
*/
|
|
46951
|
+
listModels: method(LlmListModelsInputSchema, LlmListModelsResultSchema, {
|
|
46952
|
+
kind: "mutation",
|
|
46953
|
+
auth: "admin"
|
|
46954
|
+
}),
|
|
46782
46955
|
getDefaults: method(external_exports.object({}), external_exports.array(LlmDefaultSchema)),
|
|
46783
46956
|
setDefault: method(external_exports.object({
|
|
46784
46957
|
selector: LlmDefaultSelectorSchema,
|
|
@@ -46965,6 +47138,88 @@ var LogEntrySchema = external_exports.object({
|
|
|
46965
47138
|
meta: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
46966
47139
|
tags: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
46967
47140
|
});
|
|
47141
|
+
var LogReadQuerySchema = external_exports.object({
|
|
47142
|
+
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
47143
|
+
requestId: external_exports.string().min(1).max(64).optional(),
|
|
47144
|
+
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
47145
|
+
deviceId: external_exports.number().int().optional(),
|
|
47146
|
+
/**
|
|
47147
|
+
* The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
|
|
47148
|
+
* match. Not `addonId`: a cap router reads that name as "which provider".
|
|
47149
|
+
*/
|
|
47150
|
+
fromAddonId: external_exports.string().min(1).max(200).optional(),
|
|
47151
|
+
/**
|
|
47152
|
+
* The emitting node: matches the agent that emitted the line, the node
|
|
47153
|
+
* itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
|
|
47154
|
+
* semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
|
|
47155
|
+
* name as "which node's provider".
|
|
47156
|
+
*/
|
|
47157
|
+
fromNodeId: external_exports.string().min(1).max(200).optional(),
|
|
47158
|
+
/** Any other tag, exact match (AND). */
|
|
47159
|
+
tags: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number()])).optional(),
|
|
47160
|
+
/** Severity FLOOR: this level and above. */
|
|
47161
|
+
level: LogLevelSchema.optional(),
|
|
47162
|
+
/** Case-insensitive substring over message, scope, tag values and meta values. */
|
|
47163
|
+
text: external_exports.string().min(1).max(200).optional(),
|
|
47164
|
+
/** Epoch ms, inclusive. */
|
|
47165
|
+
since: external_exports.number().optional(),
|
|
47166
|
+
/** Epoch ms, inclusive. */
|
|
47167
|
+
until: external_exports.number().optional(),
|
|
47168
|
+
/** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
|
|
47169
|
+
before: external_exports.string().min(1).max(1024).optional(),
|
|
47170
|
+
/** Newer than this cursor (exclusive). */
|
|
47171
|
+
after: external_exports.string().min(1).max(1024).optional(),
|
|
47172
|
+
limit: external_exports.number().int().min(1).max(1e3).optional(),
|
|
47173
|
+
/** Wall-clock bound of this slice. The provider caps it. */
|
|
47174
|
+
budgetMs: external_exports.number().int().min(50).max(1e4).optional()
|
|
47175
|
+
});
|
|
47176
|
+
var LogReadEntrySchema = external_exports.object({
|
|
47177
|
+
/** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
|
|
47178
|
+
id: external_exports.string().optional(),
|
|
47179
|
+
/** Epoch ms. */
|
|
47180
|
+
timestamp: external_exports.number(),
|
|
47181
|
+
level: LogLevelSchema,
|
|
47182
|
+
scope: external_exports.string().optional(),
|
|
47183
|
+
message: external_exports.string(),
|
|
47184
|
+
tags: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number()])).optional(),
|
|
47185
|
+
meta: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
47186
|
+
});
|
|
47187
|
+
var LogReadResultSchema = external_exports.object({
|
|
47188
|
+
/** Newest first. */
|
|
47189
|
+
entries: external_exports.array(LogReadEntrySchema),
|
|
47190
|
+
/** Pass as `before` for the next older page; null when nothing older exists. */
|
|
47191
|
+
nextBefore: external_exports.string().nullable(),
|
|
47192
|
+
/** Pass as `after` to read what arrived since; null when unknown. */
|
|
47193
|
+
nextAfter: external_exports.string().nullable(),
|
|
47194
|
+
/** Bytes this slice read (files) or received (remote). Progress, not a promise. */
|
|
47195
|
+
scannedBytes: external_exports.number().int().nonnegative(),
|
|
47196
|
+
/**
|
|
47197
|
+
* True when the scan in this direction reached the end of the store.
|
|
47198
|
+
* False with fewer than `limit` entries means the budget ran out first —
|
|
47199
|
+
* call again with `nextBefore` to go on.
|
|
47200
|
+
*/
|
|
47201
|
+
done: external_exports.boolean(),
|
|
47202
|
+
/** True when `cancelRead` ended this slice early. */
|
|
47203
|
+
cancelled: external_exports.boolean().optional()
|
|
47204
|
+
});
|
|
47205
|
+
var LogReadCapabilitiesSchema = external_exports.object({
|
|
47206
|
+
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
47207
|
+
readable: external_exports.boolean(),
|
|
47208
|
+
/** Why not, when `readable` is false — rendered next to the source. */
|
|
47209
|
+
reason: external_exports.string().nullable(),
|
|
47210
|
+
/** Filters the provider applies itself. A false one is applied by nobody. */
|
|
47211
|
+
filters: external_exports.object({
|
|
47212
|
+
deviceId: external_exports.boolean(),
|
|
47213
|
+
addonId: external_exports.boolean(),
|
|
47214
|
+
nodeId: external_exports.boolean(),
|
|
47215
|
+
tags: external_exports.boolean(),
|
|
47216
|
+
level: external_exports.boolean(),
|
|
47217
|
+
text: external_exports.boolean(),
|
|
47218
|
+
timeRange: external_exports.boolean()
|
|
47219
|
+
}),
|
|
47220
|
+
/** How far back the store reaches, when the provider knows (days). */
|
|
47221
|
+
retentionDays: external_exports.number().nullable()
|
|
47222
|
+
});
|
|
46968
47223
|
var logDestinationCapability = {
|
|
46969
47224
|
name: "log-destination",
|
|
46970
47225
|
scope: "system",
|
|
@@ -46972,14 +47227,13 @@ var logDestinationCapability = {
|
|
|
46972
47227
|
internal: true,
|
|
46973
47228
|
methods: {
|
|
46974
47229
|
write: method(LogEntrySchema, external_exports.void(), { kind: "mutation" }),
|
|
46975
|
-
|
|
46976
|
-
|
|
46977
|
-
|
|
46978
|
-
|
|
46979
|
-
|
|
46980
|
-
|
|
46981
|
-
|
|
46982
|
-
}), external_exports.array(LogEntrySchema).readonly())
|
|
47230
|
+
/** Absent ⇒ the destination cannot read back (same as `readable: false`). */
|
|
47231
|
+
describeRead: optionalMethod(external_exports.void(), LogReadCapabilitiesSchema, { auth: "admin" }),
|
|
47232
|
+
read: optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }),
|
|
47233
|
+
cancelRead: optionalMethod(external_exports.object({ requestId: external_exports.string().min(1).max(64) }), external_exports.object({ cancelled: external_exports.boolean() }), {
|
|
47234
|
+
kind: "mutation",
|
|
47235
|
+
auth: "admin"
|
|
47236
|
+
})
|
|
46983
47237
|
},
|
|
46984
47238
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
46985
47239
|
mount: { kind: "skip" }
|
|
@@ -48586,9 +48840,11 @@ var alarmPanelCapability = {
|
|
|
48586
48840
|
*/
|
|
48587
48841
|
durability: "restored",
|
|
48588
48842
|
/**
|
|
48589
|
-
* History (D850):
|
|
48843
|
+
* History (D850): the panel's lifecycle state as an `enum` series —
|
|
48844
|
+
* change-only, no floor, so an `arming -> pending -> triggered` sequence of a
|
|
48845
|
+
* few seconds keeps every step. Who armed it stays in the events ledger.
|
|
48590
48846
|
*/
|
|
48591
|
-
history: "
|
|
48847
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
48592
48848
|
/** Clock fields: written, but excluded from the compare that decides
|
|
48593
48849
|
* whether persisting is worth a SQLite commit. */
|
|
48594
48850
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -49156,6 +49412,12 @@ var NcRuleTargetSchema = external_exports.object({
|
|
|
49156
49412
|
*/
|
|
49157
49413
|
params: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
49158
49414
|
});
|
|
49415
|
+
var NcMediaImageSchema = external_exports.enum([
|
|
49416
|
+
"scene-boxes",
|
|
49417
|
+
"crop",
|
|
49418
|
+
"clean",
|
|
49419
|
+
"none"
|
|
49420
|
+
]);
|
|
49159
49421
|
var NcMediaFrameSchema = external_exports.enum([
|
|
49160
49422
|
"cropped",
|
|
49161
49423
|
"full",
|
|
@@ -49163,16 +49425,29 @@ var NcMediaFrameSchema = external_exports.enum([
|
|
|
49163
49425
|
]);
|
|
49164
49426
|
var NcLinkedCameraModeSchema = external_exports.enum(["mosaic", "each"]);
|
|
49165
49427
|
var NcMediaPolicySchema = external_exports.object({
|
|
49428
|
+
/**
|
|
49429
|
+
* The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
|
|
49430
|
+
* saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
|
|
49431
|
+
* triple below, at load and at every write, and the store keeps only this.
|
|
49432
|
+
*/
|
|
49433
|
+
image: NcMediaImageSchema.optional(),
|
|
49434
|
+
/**
|
|
49435
|
+
* Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
|
|
49436
|
+
* a `crop` never shows it). Valid only on a rule whose trigger is a zone —
|
|
49437
|
+
* `conditions.zones` or an occupancy zone — and refused on save otherwise.
|
|
49438
|
+
* Replaces `zoneCrop`.
|
|
49439
|
+
*/
|
|
49440
|
+
showTriggerZone: external_exports.boolean().optional(),
|
|
49441
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
49166
49442
|
attach: external_exports.enum([
|
|
49167
49443
|
"best",
|
|
49168
49444
|
"best-matching",
|
|
49169
49445
|
"keyFrame",
|
|
49170
49446
|
"none"
|
|
49171
|
-
]).
|
|
49172
|
-
/**
|
|
49447
|
+
]).optional(),
|
|
49448
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
49173
49449
|
frame: NcMediaFrameSchema.optional(),
|
|
49174
|
-
/**
|
|
49175
|
-
* "show me the ZONE", not the whole scene or the subject crop. */
|
|
49450
|
+
/** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
|
|
49176
49451
|
zoneCrop: external_exports.boolean().optional(),
|
|
49177
49452
|
/**
|
|
49178
49453
|
* Also attach a short GIF cut from the stream broker's clip ring around the
|
|
@@ -49299,7 +49574,9 @@ var NcRuleInputSchema = external_exports.object({
|
|
|
49299
49574
|
* targets.
|
|
49300
49575
|
*/
|
|
49301
49576
|
targetUsers: external_exports.array(external_exports.string()).optional(),
|
|
49302
|
-
|
|
49577
|
+
/** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
|
|
49578
|
+
* detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
|
|
49579
|
+
media: NcMediaPolicySchema.default({}),
|
|
49303
49580
|
throttle: NcThrottleSchema.default({
|
|
49304
49581
|
cooldownSec: 60,
|
|
49305
49582
|
scope: "rule-device"
|
|
@@ -50056,13 +50333,31 @@ var NcAlarmModeOpeningsSchema = external_exports.object({
|
|
|
50056
50333
|
/** Covered devices whose state could not be read (D49): neither open nor closed. */
|
|
50057
50334
|
unknown: external_exports.array(external_exports.number().int())
|
|
50058
50335
|
});
|
|
50336
|
+
var NcAlarmInputBypassViewSchema = external_exports.object({
|
|
50337
|
+
ruleId: external_exports.string(),
|
|
50338
|
+
/** The rule's current name (its frozen name when the rule is gone). */
|
|
50339
|
+
ruleName: external_exports.string(),
|
|
50340
|
+
/** The input: the sensor of the match, else its camera. */
|
|
50341
|
+
deviceId: external_exports.number().int(),
|
|
50342
|
+
/** The input's current name. */
|
|
50343
|
+
name: external_exports.string(),
|
|
50344
|
+
/** When it was bypassed (ms epoch). */
|
|
50345
|
+
since: external_exports.number(),
|
|
50346
|
+
/** Triggers from this input dropped since. */
|
|
50347
|
+
dropped: external_exports.number().int().min(0)
|
|
50348
|
+
});
|
|
50059
50349
|
var NcAlarmLiveSchema = external_exports.object({
|
|
50060
50350
|
state: AlarmStateSchema,
|
|
50061
50351
|
/** The mode being armed into (exit delay) or held; null when disarmed. */
|
|
50062
50352
|
targetMode: AlarmArmModeSchema.nullable(),
|
|
50063
50353
|
availableModes: external_exports.array(AlarmArmModeSchema),
|
|
50064
50354
|
openings: external_exports.array(NcAlarmModeOpeningsSchema),
|
|
50065
|
-
exclusions: external_exports.array(NcAlarmExclusionViewSchema)
|
|
50355
|
+
exclusions: external_exports.array(NcAlarmExclusionViewSchema),
|
|
50356
|
+
/**
|
|
50357
|
+
* Inputs bypassed for the rest of this arm session; cleared on disarm.
|
|
50358
|
+
* Defaulted so an older hub answer still parses (as "none known").
|
|
50359
|
+
*/
|
|
50360
|
+
bypassedInputs: external_exports.array(NcAlarmInputBypassViewSchema).default([])
|
|
50066
50361
|
});
|
|
50067
50362
|
var NcAlarmConfigSchema = external_exports.object({
|
|
50068
50363
|
/**
|
|
@@ -61710,9 +62005,11 @@ var connectivityCapability = {
|
|
|
61710
62005
|
*/
|
|
61711
62006
|
durability: "restored",
|
|
61712
62007
|
/**
|
|
61713
|
-
* History (D850):
|
|
62008
|
+
* History (D850): `connected` as a boolean series — change-only, no floor. It
|
|
62009
|
+
* is the upstream entity's own link (a HA connectivity sensor), not the
|
|
62010
|
+
* device's reachability, which stays `device-status.online`.
|
|
61714
62011
|
*/
|
|
61715
|
-
history: "
|
|
62012
|
+
history: { fields: { connected: { kind: "boolean" } } },
|
|
61716
62013
|
/** Clock fields: written, but excluded from the compare that decides
|
|
61717
62014
|
* whether persisting is worth a SQLite commit. */
|
|
61718
62015
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -62409,11 +62706,22 @@ var dishwasherCapability = {
|
|
|
62409
62706
|
},
|
|
62410
62707
|
runtimeState: DishwasherStatusSchema,
|
|
62411
62708
|
durability: "session",
|
|
62412
|
-
history: { fields: {
|
|
62413
|
-
|
|
62414
|
-
|
|
62415
|
-
|
|
62416
|
-
|
|
62709
|
+
history: { fields: {
|
|
62710
|
+
progressPercent: {
|
|
62711
|
+
kind: "gauge",
|
|
62712
|
+
unit: "%",
|
|
62713
|
+
deadband: 2
|
|
62714
|
+
},
|
|
62715
|
+
state: { kind: "enum" },
|
|
62716
|
+
operationState: { kind: "enum" },
|
|
62717
|
+
remainingSeconds: {
|
|
62718
|
+
kind: "gauge",
|
|
62719
|
+
unit: "s",
|
|
62720
|
+
minIntervalMs: 6e4
|
|
62721
|
+
},
|
|
62722
|
+
doorOpen: { kind: "boolean" },
|
|
62723
|
+
powerOn: { kind: "boolean" }
|
|
62724
|
+
} }
|
|
62417
62725
|
};
|
|
62418
62726
|
var DoorbellStatusSchema = external_exports.object({
|
|
62419
62727
|
/** Ms epoch of the last press. null = never observed since this provider started. */
|
|
@@ -62506,9 +62814,15 @@ var enumSensorCapability = {
|
|
|
62506
62814
|
*/
|
|
62507
62815
|
durability: "restored",
|
|
62508
62816
|
/**
|
|
62509
|
-
* History (D850):
|
|
62817
|
+
* History (D850): the value as an `enum` series (an appliance's program or
|
|
62818
|
+
* operation state, an HVAC action). The option set is per device, so the
|
|
62819
|
+
* value list is LEARNED as values are first seen (bounded). A sensor with a
|
|
62820
|
+
* `format` carries a timestamp, not a state, and is not recorded.
|
|
62510
62821
|
*/
|
|
62511
|
-
history:
|
|
62822
|
+
history: { fields: { value: {
|
|
62823
|
+
kind: "enum",
|
|
62824
|
+
skipWhenSet: "format"
|
|
62825
|
+
} } },
|
|
62512
62826
|
/** Clock fields: written, but excluded from the compare that decides
|
|
62513
62827
|
* whether persisting is worth a SQLite commit. */
|
|
62514
62828
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -64377,9 +64691,10 @@ var lockControlCapability = {
|
|
|
64377
64691
|
*/
|
|
64378
64692
|
durability: "restored",
|
|
64379
64693
|
/**
|
|
64380
|
-
* History (D850):
|
|
64694
|
+
* History (D850): the lock's state as an `enum` series — change-only, no
|
|
64695
|
+
* floor: a jam or an unlock lasting seconds is the edge an operator looks for.
|
|
64381
64696
|
*/
|
|
64382
|
-
history: "
|
|
64697
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
64383
64698
|
/** Clock fields: written, but excluded from the compare that decides
|
|
64384
64699
|
* whether persisting is worth a SQLite commit. */
|
|
64385
64700
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -64541,9 +64856,18 @@ var mediaPlayerCapability = {
|
|
|
64541
64856
|
*/
|
|
64542
64857
|
durability: "session",
|
|
64543
64858
|
/**
|
|
64544
|
-
* History (D850):
|
|
64859
|
+
* History (D850): volume (a level an operator or an automation sets; the
|
|
64860
|
+
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
64861
|
+
* `positionMs` is not recorded: it moves continuously while playing.
|
|
64545
64862
|
*/
|
|
64546
|
-
history:
|
|
64863
|
+
history: { fields: {
|
|
64864
|
+
volumeLevel: {
|
|
64865
|
+
kind: "gauge",
|
|
64866
|
+
unit: "%",
|
|
64867
|
+
deadband: 1
|
|
64868
|
+
},
|
|
64869
|
+
isMuted: { kind: "boolean" }
|
|
64870
|
+
} }
|
|
64547
64871
|
};
|
|
64548
64872
|
var MeshEndpointSchema = external_exports.object({
|
|
64549
64873
|
/** Stable identifier within the provider (e.g. `mesh-ipv4`, `magicdns`, `funnel`). */
|
|
@@ -69342,9 +69666,29 @@ var streamParamsCapability = {
|
|
|
69342
69666
|
*/
|
|
69343
69667
|
durability: "restored",
|
|
69344
69668
|
/**
|
|
69345
|
-
* History (D850):
|
|
69669
|
+
* History (D850): the configured bitrate and frame rate of the main and sub
|
|
69670
|
+
* profiles. Configuration, so change-only on the default floor: a point is an
|
|
69671
|
+
* operator's (or a tuner's) edit, which is exactly what a chart of a stream's
|
|
69672
|
+
* quality over time must show.
|
|
69346
69673
|
*/
|
|
69347
|
-
history:
|
|
69674
|
+
history: { fields: {
|
|
69675
|
+
"main.bitrate": {
|
|
69676
|
+
kind: "gauge",
|
|
69677
|
+
unit: "kbps"
|
|
69678
|
+
},
|
|
69679
|
+
"main.framerate": {
|
|
69680
|
+
kind: "gauge",
|
|
69681
|
+
unit: "fps"
|
|
69682
|
+
},
|
|
69683
|
+
"sub.bitrate": {
|
|
69684
|
+
kind: "gauge",
|
|
69685
|
+
unit: "kbps"
|
|
69686
|
+
},
|
|
69687
|
+
"sub.framerate": {
|
|
69688
|
+
kind: "gauge",
|
|
69689
|
+
unit: "fps"
|
|
69690
|
+
}
|
|
69691
|
+
} },
|
|
69348
69692
|
/** Clock fields: written, but excluded from the compare that decides
|
|
69349
69693
|
* whether persisting is worth a SQLite commit. */
|
|
69350
69694
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -70044,26 +70388,6 @@ var ApiKeySummarySchema = external_exports.object({
|
|
|
70044
70388
|
createdAt: external_exports.number(),
|
|
70045
70389
|
lastUsedAt: external_exports.number().optional()
|
|
70046
70390
|
});
|
|
70047
|
-
var ScopedTokenSummarySchema = external_exports.object({
|
|
70048
|
-
id: external_exports.string(),
|
|
70049
|
-
userId: external_exports.string(),
|
|
70050
|
-
name: external_exports.string(),
|
|
70051
|
-
tokenPrefix: external_exports.string(),
|
|
70052
|
-
scopes: external_exports.array(TokenScopeSchema),
|
|
70053
|
-
expiresAt: external_exports.number().nullish(),
|
|
70054
|
-
lastUsedAt: external_exports.number().nullish(),
|
|
70055
|
-
createdAt: external_exports.number()
|
|
70056
|
-
});
|
|
70057
|
-
var CreateScopedTokenInputSchema = external_exports.object({
|
|
70058
|
-
userId: external_exports.string(),
|
|
70059
|
-
name: external_exports.string(),
|
|
70060
|
-
scopes: external_exports.array(TokenScopeSchema),
|
|
70061
|
-
expiresAt: external_exports.number().optional()
|
|
70062
|
-
});
|
|
70063
|
-
var CreateScopedTokenResultSchema = external_exports.object({
|
|
70064
|
-
token: external_exports.string(),
|
|
70065
|
-
record: ScopedTokenSummarySchema
|
|
70066
|
-
});
|
|
70067
70391
|
var OauthSessionSummarySchema = external_exports.object({
|
|
70068
70392
|
id: external_exports.string(),
|
|
70069
70393
|
userId: external_exports.string(),
|
|
@@ -70150,18 +70474,6 @@ var userManagementCapability = {
|
|
|
70150
70474
|
auth: "admin",
|
|
70151
70475
|
access: "delete"
|
|
70152
70476
|
}),
|
|
70153
|
-
createScopedToken: method(CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, {
|
|
70154
|
-
kind: "mutation",
|
|
70155
|
-
auth: "admin",
|
|
70156
|
-
access: "create"
|
|
70157
|
-
}),
|
|
70158
|
-
revokeScopedToken: method(external_exports.object({ id: external_exports.string() }), external_exports.object({ success: external_exports.literal(true) }), {
|
|
70159
|
-
kind: "mutation",
|
|
70160
|
-
auth: "admin",
|
|
70161
|
-
access: "delete"
|
|
70162
|
-
}),
|
|
70163
|
-
validateScopedToken: method(external_exports.object({ token: external_exports.string() }), ScopedTokenSummarySchema.nullable(), { access: "view" }),
|
|
70164
|
-
listScopedTokens: method(external_exports.object({ userId: external_exports.string() }), external_exports.array(ScopedTokenSummarySchema), { auth: "admin" }),
|
|
70165
70477
|
setupTotp: method(external_exports.object({ userId: external_exports.string() }), TotpSetupResultSchema, {
|
|
70166
70478
|
kind: "mutation",
|
|
70167
70479
|
auth: "admin",
|
|
@@ -74839,7 +75151,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
74839
75151
|
capName: "llm",
|
|
74840
75152
|
capScope: "system",
|
|
74841
75153
|
addonId: null,
|
|
74842
|
-
access: "
|
|
75154
|
+
access: "create"
|
|
74843
75155
|
},
|
|
74844
75156
|
"llm.listNodeModels": {
|
|
74845
75157
|
capName: "llm",
|
|
@@ -75141,7 +75453,19 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
75141
75453
|
addonId: null,
|
|
75142
75454
|
access: "view"
|
|
75143
75455
|
},
|
|
75144
|
-
"logDestination.
|
|
75456
|
+
"logDestination.cancelRead": {
|
|
75457
|
+
capName: "log-destination",
|
|
75458
|
+
capScope: "system",
|
|
75459
|
+
addonId: null,
|
|
75460
|
+
access: "create"
|
|
75461
|
+
},
|
|
75462
|
+
"logDestination.describeRead": {
|
|
75463
|
+
capName: "log-destination",
|
|
75464
|
+
capScope: "system",
|
|
75465
|
+
addonId: null,
|
|
75466
|
+
access: "view"
|
|
75467
|
+
},
|
|
75468
|
+
"logDestination.read": {
|
|
75145
75469
|
capName: "log-destination",
|
|
75146
75470
|
capScope: "system",
|
|
75147
75471
|
addonId: null,
|
|
@@ -79503,12 +79827,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
79503
79827
|
addonId: null,
|
|
79504
79828
|
access: "create"
|
|
79505
79829
|
},
|
|
79506
|
-
"userManagement.createScopedToken": {
|
|
79507
|
-
capName: "user-management",
|
|
79508
|
-
capScope: "system",
|
|
79509
|
-
addonId: null,
|
|
79510
|
-
access: "create"
|
|
79511
|
-
},
|
|
79512
79830
|
"userManagement.createUser": {
|
|
79513
79831
|
capName: "user-management",
|
|
79514
79832
|
capScope: "system",
|
|
@@ -79557,12 +79875,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
79557
79875
|
addonId: null,
|
|
79558
79876
|
access: "view"
|
|
79559
79877
|
},
|
|
79560
|
-
"userManagement.listScopedTokens": {
|
|
79561
|
-
capName: "user-management",
|
|
79562
|
-
capScope: "system",
|
|
79563
|
-
addonId: null,
|
|
79564
|
-
access: "view"
|
|
79565
|
-
},
|
|
79566
79878
|
"userManagement.listUsers": {
|
|
79567
79879
|
capName: "user-management",
|
|
79568
79880
|
capScope: "system",
|
|
@@ -79617,12 +79929,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
79617
79929
|
addonId: null,
|
|
79618
79930
|
access: "delete"
|
|
79619
79931
|
},
|
|
79620
|
-
"userManagement.revokeScopedToken": {
|
|
79621
|
-
capName: "user-management",
|
|
79622
|
-
capScope: "system",
|
|
79623
|
-
addonId: null,
|
|
79624
|
-
access: "delete"
|
|
79625
|
-
},
|
|
79626
79932
|
"userManagement.setupTotp": {
|
|
79627
79933
|
capName: "user-management",
|
|
79628
79934
|
capScope: "system",
|
|
@@ -79653,12 +79959,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
79653
79959
|
addonId: null,
|
|
79654
79960
|
access: "view"
|
|
79655
79961
|
},
|
|
79656
|
-
"userManagement.validateScopedToken": {
|
|
79657
|
-
capName: "user-management",
|
|
79658
|
-
capScope: "system",
|
|
79659
|
-
addonId: null,
|
|
79660
|
-
access: "view"
|
|
79661
|
-
},
|
|
79662
79962
|
"userManagement.verifyTotp": {
|
|
79663
79963
|
capName: "user-management",
|
|
79664
79964
|
capScope: "system",
|
|
@@ -81222,6 +81522,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
81222
81522
|
form: "single",
|
|
81223
81523
|
optional: false
|
|
81224
81524
|
}],
|
|
81525
|
+
"logDestination.read": [{
|
|
81526
|
+
name: "deviceId",
|
|
81527
|
+
form: "single",
|
|
81528
|
+
optional: true
|
|
81529
|
+
}],
|
|
81225
81530
|
"mediaPlayer.getStatus": [{
|
|
81226
81531
|
name: "deviceId",
|
|
81227
81532
|
form: "single",
|
|
@@ -82949,6 +83254,21 @@ var HISTORY_CATALOG = {
|
|
|
82949
83254
|
deadband: 1
|
|
82950
83255
|
}
|
|
82951
83256
|
},
|
|
83257
|
+
"alarm-panel": { "state": {
|
|
83258
|
+
kind: "enum",
|
|
83259
|
+
values: [
|
|
83260
|
+
"disarmed",
|
|
83261
|
+
"armed_home",
|
|
83262
|
+
"armed_away",
|
|
83263
|
+
"armed_night",
|
|
83264
|
+
"armed_vacation",
|
|
83265
|
+
"armed_custom_bypass",
|
|
83266
|
+
"arming",
|
|
83267
|
+
"disarming",
|
|
83268
|
+
"pending",
|
|
83269
|
+
"triggered"
|
|
83270
|
+
]
|
|
83271
|
+
} },
|
|
82952
83272
|
"ambient-light-sensor": { "lux": {
|
|
82953
83273
|
kind: "gauge",
|
|
82954
83274
|
unit: "lx",
|
|
@@ -82993,6 +83313,7 @@ var HISTORY_CATALOG = {
|
|
|
82993
83313
|
minIntervalMs: 0
|
|
82994
83314
|
}
|
|
82995
83315
|
},
|
|
83316
|
+
"connectivity": { "connected": { kind: "boolean" } },
|
|
82996
83317
|
"contact": { "entryOpen": { kind: "boolean" } },
|
|
82997
83318
|
"cover": { "position": {
|
|
82998
83319
|
kind: "gauge",
|
|
@@ -83000,10 +83321,48 @@ var HISTORY_CATALOG = {
|
|
|
83000
83321
|
minIntervalMs: 0
|
|
83001
83322
|
} },
|
|
83002
83323
|
"device-status": { "online": { kind: "boolean" } },
|
|
83003
|
-
"dishwasher": {
|
|
83004
|
-
|
|
83005
|
-
|
|
83006
|
-
|
|
83324
|
+
"dishwasher": {
|
|
83325
|
+
"progressPercent": {
|
|
83326
|
+
kind: "gauge",
|
|
83327
|
+
unit: "%",
|
|
83328
|
+
deadband: 2
|
|
83329
|
+
},
|
|
83330
|
+
"state": {
|
|
83331
|
+
kind: "enum",
|
|
83332
|
+
values: [
|
|
83333
|
+
"idle",
|
|
83334
|
+
"running",
|
|
83335
|
+
"paused",
|
|
83336
|
+
"finished",
|
|
83337
|
+
"error",
|
|
83338
|
+
"unavailable"
|
|
83339
|
+
]
|
|
83340
|
+
},
|
|
83341
|
+
"operationState": {
|
|
83342
|
+
kind: "enum",
|
|
83343
|
+
values: [
|
|
83344
|
+
"Inactive",
|
|
83345
|
+
"Ready",
|
|
83346
|
+
"DelayedStart",
|
|
83347
|
+
"Run",
|
|
83348
|
+
"Pause",
|
|
83349
|
+
"ActionRequired",
|
|
83350
|
+
"Finished",
|
|
83351
|
+
"Error",
|
|
83352
|
+
"Aborting"
|
|
83353
|
+
]
|
|
83354
|
+
},
|
|
83355
|
+
"remainingSeconds": {
|
|
83356
|
+
kind: "gauge",
|
|
83357
|
+
unit: "s",
|
|
83358
|
+
minIntervalMs: 6e4
|
|
83359
|
+
},
|
|
83360
|
+
"doorOpen": { kind: "boolean" },
|
|
83361
|
+
"powerOn": { kind: "boolean" }
|
|
83362
|
+
},
|
|
83363
|
+
"enum-sensor": { "value": {
|
|
83364
|
+
kind: "enum",
|
|
83365
|
+
skipWhenSet: "format"
|
|
83007
83366
|
} },
|
|
83008
83367
|
"fan-control": {
|
|
83009
83368
|
"percentage": {
|
|
@@ -83038,6 +83397,24 @@ var HISTORY_CATALOG = {
|
|
|
83038
83397
|
unit: "%",
|
|
83039
83398
|
deadband: 2
|
|
83040
83399
|
} },
|
|
83400
|
+
"lock-control": { "state": {
|
|
83401
|
+
kind: "enum",
|
|
83402
|
+
values: [
|
|
83403
|
+
"locked",
|
|
83404
|
+
"unlocked",
|
|
83405
|
+
"locking",
|
|
83406
|
+
"unlocking",
|
|
83407
|
+
"jammed"
|
|
83408
|
+
]
|
|
83409
|
+
} },
|
|
83410
|
+
"media-player": {
|
|
83411
|
+
"volumeLevel": {
|
|
83412
|
+
kind: "gauge",
|
|
83413
|
+
unit: "%",
|
|
83414
|
+
deadband: 1
|
|
83415
|
+
},
|
|
83416
|
+
"isMuted": { kind: "boolean" }
|
|
83417
|
+
},
|
|
83041
83418
|
"motion": { "detected": {
|
|
83042
83419
|
kind: "boolean",
|
|
83043
83420
|
excludeDeviceTypes: [DeviceType.Camera]
|
|
@@ -83124,6 +83501,24 @@ var HISTORY_CATALOG = {
|
|
|
83124
83501
|
deadband: 0.1
|
|
83125
83502
|
} },
|
|
83126
83503
|
"smoke": { "detected": { kind: "boolean" } },
|
|
83504
|
+
"stream-params": {
|
|
83505
|
+
"main.bitrate": {
|
|
83506
|
+
kind: "gauge",
|
|
83507
|
+
unit: "kbps"
|
|
83508
|
+
},
|
|
83509
|
+
"main.framerate": {
|
|
83510
|
+
kind: "gauge",
|
|
83511
|
+
unit: "fps"
|
|
83512
|
+
},
|
|
83513
|
+
"sub.bitrate": {
|
|
83514
|
+
kind: "gauge",
|
|
83515
|
+
unit: "kbps"
|
|
83516
|
+
},
|
|
83517
|
+
"sub.framerate": {
|
|
83518
|
+
kind: "gauge",
|
|
83519
|
+
unit: "fps"
|
|
83520
|
+
}
|
|
83521
|
+
},
|
|
83127
83522
|
"switch": { "on": { kind: "boolean" } },
|
|
83128
83523
|
"tamper": { "tampered": { kind: "boolean" } },
|
|
83129
83524
|
"temperature-sensor": { "celsius": {
|
|
@@ -85976,6 +86371,23 @@ function resolveLoginServer(flag, positionals, env) {
|
|
|
85976
86371
|
return flagged ?? positional ?? (fromEnv ? normalizeHubAddress(fromEnv) : void 0);
|
|
85977
86372
|
}
|
|
85978
86373
|
|
|
86374
|
+
// src/commands/login-legacy-flags.ts
|
|
86375
|
+
var LEGACY_LOGIN_FLAG_OPTIONS = {
|
|
86376
|
+
admin: { type: "boolean" },
|
|
86377
|
+
"admin-days": { type: "string" }
|
|
86378
|
+
};
|
|
86379
|
+
var LEGACY_LOGIN_FLAG_MESSAGES = {
|
|
86380
|
+
admin: "--admin is ignored: one login, one token \u2014 drop --admin (admin rights follow your account).",
|
|
86381
|
+
"admin-days": "--admin-days is ignored: one login, one token \u2014 drop --admin-days (the session renews itself)."
|
|
86382
|
+
};
|
|
86383
|
+
function legacyLoginFlagWarnings(values) {
|
|
86384
|
+
const names = Object.keys(LEGACY_LOGIN_FLAG_MESSAGES).filter(isLegacyFlagName);
|
|
86385
|
+
return names.filter((name) => values[name] !== void 0).map((name) => LEGACY_LOGIN_FLAG_MESSAGES[name]);
|
|
86386
|
+
}
|
|
86387
|
+
function isLegacyFlagName(name) {
|
|
86388
|
+
return name in LEGACY_LOGIN_FLAG_OPTIONS;
|
|
86389
|
+
}
|
|
86390
|
+
|
|
85979
86391
|
// src/commands/auth.ts
|
|
85980
86392
|
import * as clack from "@clack/prompts";
|
|
85981
86393
|
import {
|
|
@@ -86154,7 +86566,7 @@ function isLoginPayload(value) {
|
|
|
86154
86566
|
function revocationFor(session) {
|
|
86155
86567
|
if (session.tokenId) {
|
|
86156
86568
|
return {
|
|
86157
|
-
procedure: "
|
|
86569
|
+
procedure: "auth.revokeToken",
|
|
86158
86570
|
input: { id: session.tokenId },
|
|
86159
86571
|
bearer: "fresh"
|
|
86160
86572
|
};
|
|
@@ -87466,9 +87878,7 @@ function buildCommands() {
|
|
|
87466
87878
|
" -n, --namespace <ns> Ignored (kept so old scripts do not fail): hubs are found over mDNS",
|
|
87467
87879
|
" -u, --username <name> Username (skips prompt)",
|
|
87468
87880
|
" -p, --password <pwd> Password (skips prompt \u2014 prefer letting the CLI prompt)",
|
|
87469
|
-
` --token-name <name> Ignored (kept for scripts); login uses your hub session JWT
|
|
87470
|
-
" --admin Ignored (kept for muscle memory); admin follows your account role",
|
|
87471
|
-
" --admin-days <n> Ignored (kept for muscle memory); one login, one token format"
|
|
87881
|
+
` --token-name <name> Ignored (kept for scripts); login uses your hub session JWT`
|
|
87472
87882
|
].join("\n")
|
|
87473
87883
|
},
|
|
87474
87884
|
{
|
|
@@ -87693,10 +88103,9 @@ async function runLogin(args) {
|
|
|
87693
88103
|
username: { type: "string", short: "u" },
|
|
87694
88104
|
password: { type: "string", short: "p" },
|
|
87695
88105
|
"token-name": { type: "string" },
|
|
87696
|
-
//
|
|
87697
|
-
//
|
|
87698
|
-
|
|
87699
|
-
"admin-days": { type: "string" },
|
|
88106
|
+
// Removed (D895), still parsed so an old script does not abort: each one
|
|
88107
|
+
// present prints a one-line warning and the login goes on.
|
|
88108
|
+
...LEGACY_LOGIN_FLAG_OPTIONS,
|
|
87700
88109
|
// Accepted-and-ignored: `--no-verify` is a `deploy`-only flag (skip the
|
|
87701
88110
|
// post-deploy health gate). Login has no verify step, but operators
|
|
87702
88111
|
// muscle-memory it in — we swallow it here so `camstack login --no-verify`
|
|
@@ -87717,6 +88126,7 @@ async function runLogin(args) {
|
|
|
87717
88126
|
if (stringOpt(parsed.values, "namespace") !== void 0) {
|
|
87718
88127
|
console.warn("--namespace is ignored: hubs are found over mDNS, not the mesh channel.");
|
|
87719
88128
|
}
|
|
88129
|
+
for (const warning of legacyLoginFlagWarnings(parsed.values)) console.warn(warning);
|
|
87720
88130
|
await loginCommand({
|
|
87721
88131
|
...explicitServer ? { server: explicitServer } : {},
|
|
87722
88132
|
...optionalString(parsed.values, "username"),
|