@camstack/addon-agent-ui 1.2.55 → 1.2.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/addon.js +83 -8
  2. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -7721,7 +7721,8 @@ var OpsLogReasonSchema = _enum([
7721
7721
  "quota",
7722
7722
  "manual",
7723
7723
  "operator",
7724
- "maintenance"
7724
+ "maintenance",
7725
+ "orphaned-device"
7725
7726
  ]);
7726
7727
  /** One audit row, shared verbatim by both domains. */
7727
7728
  var OpsLogEntrySchema = object({
@@ -12752,10 +12753,39 @@ var DevicePersistConfigPayloadSchema = object({
12752
12753
  deviceId: number(),
12753
12754
  data: record(string(), unknown())
12754
12755
  });
12756
+ /** What a migration actually did, per switch. `unreachable` is a first-class
12757
+ * answer: a camera that could not be asked is not a camera that was silenced. */
12758
+ var MigrateSwitchOutcomeSchema = _enum([
12759
+ "off",
12760
+ "on",
12761
+ "not-offered",
12762
+ "unreachable"
12763
+ ]);
12764
+ var MigrateSwitchReportSchema = object({
12765
+ deviceId: number(),
12766
+ switchId: CameraSwitchIdSchema,
12767
+ outcome: MigrateSwitchOutcomeSchema,
12768
+ detail: string().optional()
12769
+ });
12770
+ var MigrateDeviceResultSchema = object({
12771
+ sourceId: number(),
12772
+ targetId: number(),
12773
+ switches: array(MigrateSwitchReportSchema).readonly(),
12774
+ /** Switches that could NOT be turned off on the source. Empty is the only
12775
+ * value meaning the replaced hardware is quiet. */
12776
+ sourceStillLive: array(CameraSwitchIdSchema).readonly(),
12777
+ swapped: boolean()
12778
+ });
12755
12779
  method(object({
12756
12780
  addonId: string(),
12757
12781
  stableId: string()
12758
- }), object({ id: number() }), { kind: "mutation" }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
12782
+ }), object({ id: number() }), { kind: "mutation" }), method(object({
12783
+ sourceId: number(),
12784
+ targetId: number()
12785
+ }), MigrateDeviceResultSchema, {
12786
+ kind: "mutation",
12787
+ auth: "admin"
12788
+ }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
12759
12789
  deviceId: number(),
12760
12790
  name: string()
12761
12791
  }), _void(), {
@@ -13230,6 +13260,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
13230
13260
  auth: "admin"
13231
13261
  });
13232
13262
  /**
13263
+ * Transport bounds for AI capability methods.
13264
+ *
13265
+ * Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
13266
+ * each other: declaring the constant in either one hands the other `undefined`
13267
+ * at module-init time, and an undefined `timeoutMs` silently falls back to the
13268
+ * kernel's 60 s default — the exact failure this constant exists to prevent,
13269
+ * reintroduced invisibly. Found by the guard, not by review.
13270
+ */
13271
+ /**
13272
+ * Ceiling for a cap method that runs inference or loads a model.
13273
+ *
13274
+ * Deliberately far above anything the AI layer itself may wait for (a summary
13275
+ * asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
13276
+ * never be the layer that gives up first: when it does, the failure is
13277
+ * reported as a transport error for a model that was still thinking, naming
13278
+ * the wrong layer and hiding the real one.
13279
+ *
13280
+ * Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
13281
+ * more on a cold model load. With no declaration every digest failed at
13282
+ * exactly 60 s and shipped without its text.
13283
+ *
13284
+ * A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
13285
+ * the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
13286
+ * decide when to stop, because only they can say WHY.
13287
+ */
13288
+ var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
13289
+ /** A multi-gigabyte download. An hour is not generous, it is honest. */
13290
+ var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
13291
+ /**
13233
13292
  * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
13234
13293
  * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
13235
13294
  * caps stay wire-compatible without a circular cap→cap import.
@@ -13501,16 +13560,19 @@ method(LlmGenerateBaseInputSchema.extend({
13501
13560
  timeoutMs: number().int().positive().optional()
13502
13561
  }), LlmGenerateResultSchema, {
13503
13562
  kind: "mutation",
13504
- auth: "admin"
13563
+ auth: "admin",
13564
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13505
13565
  }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
13506
13566
  kind: "mutation",
13507
- auth: "admin"
13567
+ auth: "admin",
13568
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13508
13569
  }), method(object({}), _void(), {
13509
13570
  kind: "mutation",
13510
13571
  auth: "admin"
13511
13572
  }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
13512
13573
  kind: "mutation",
13513
- auth: "admin"
13574
+ auth: "admin",
13575
+ timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
13514
13576
  }), method(object({ file: string() }), _void(), {
13515
13577
  kind: "mutation",
13516
13578
  auth: "admin"
@@ -13678,7 +13740,13 @@ var ProfileRefInputSchema = object({
13678
13740
  addonId: string(),
13679
13741
  profileId: string()
13680
13742
  });
13681
- method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({
13743
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
13744
+ kind: "mutation",
13745
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13746
+ }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
13747
+ kind: "mutation",
13748
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13749
+ }), method(object({
13682
13750
  addonId: string().optional(),
13683
13751
  requestId: string()
13684
13752
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
@@ -13689,7 +13757,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
13689
13757
  auth: "admin"
13690
13758
  }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
13691
13759
  kind: "mutation",
13692
- auth: "admin"
13760
+ auth: "admin",
13761
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13693
13762
  }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
13694
13763
  selector: LlmDefaultSelectorSchema,
13695
13764
  profileId: string().nullable()
@@ -30258,6 +30327,12 @@ Object.freeze({
30258
30327
  addonId: null,
30259
30328
  access: "view"
30260
30329
  },
30330
+ "deviceManager.migrateDevice": {
30331
+ capName: "device-manager",
30332
+ capScope: "system",
30333
+ addonId: null,
30334
+ access: "create"
30335
+ },
30261
30336
  "deviceManager.persistConfig": {
30262
30337
  capName: "device-manager",
30263
30338
  capScope: "system",
@@ -37116,7 +37191,7 @@ var AgentUIAddon = class extends BaseAddon {
37116
37191
  capability: adminUiCapability,
37117
37192
  provider: {
37118
37193
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
37119
- getVersion: async () => ({ version: "1.2.55" })
37194
+ getVersion: async () => ({ version: "1.2.58" })
37120
37195
  }
37121
37196
  }];
37122
37197
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-agent-ui",
3
- "version": "1.2.55",
3
+ "version": "1.2.58",
4
4
  "description": "Agent UI — lightweight status dashboard served by every agent node",
5
5
  "keywords": [
6
6
  "camstack",