@camstack/addon-export-google 0.1.17 → 0.1.19

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.
@@ -13523,6 +13523,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
13523
13523
  auth: "admin"
13524
13524
  });
13525
13525
  /**
13526
+ * Transport bounds for AI capability methods.
13527
+ *
13528
+ * Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
13529
+ * each other: declaring the constant in either one hands the other `undefined`
13530
+ * at module-init time, and an undefined `timeoutMs` silently falls back to the
13531
+ * kernel's 60 s default — the exact failure this constant exists to prevent,
13532
+ * reintroduced invisibly. Found by the guard, not by review.
13533
+ */
13534
+ /**
13535
+ * Ceiling for a cap method that runs inference or loads a model.
13536
+ *
13537
+ * Deliberately far above anything the AI layer itself may wait for (a summary
13538
+ * asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
13539
+ * never be the layer that gives up first: when it does, the failure is
13540
+ * reported as a transport error for a model that was still thinking, naming
13541
+ * the wrong layer and hiding the real one.
13542
+ *
13543
+ * Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
13544
+ * more on a cold model load. With no declaration every digest failed at
13545
+ * exactly 60 s and shipped without its text.
13546
+ *
13547
+ * A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
13548
+ * the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
13549
+ * decide when to stop, because only they can say WHY.
13550
+ */
13551
+ var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
13552
+ /** A multi-gigabyte download. An hour is not generous, it is honest. */
13553
+ var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
13554
+ /**
13526
13555
  * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
13527
13556
  * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
13528
13557
  * caps stay wire-compatible without a circular cap→cap import.
@@ -13794,16 +13823,19 @@ method(LlmGenerateBaseInputSchema.extend({
13794
13823
  timeoutMs: number().int().positive().optional()
13795
13824
  }), LlmGenerateResultSchema, {
13796
13825
  kind: "mutation",
13797
- auth: "admin"
13826
+ auth: "admin",
13827
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13798
13828
  }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
13799
13829
  kind: "mutation",
13800
- auth: "admin"
13830
+ auth: "admin",
13831
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13801
13832
  }), method(object({}), _void(), {
13802
13833
  kind: "mutation",
13803
13834
  auth: "admin"
13804
13835
  }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
13805
13836
  kind: "mutation",
13806
- auth: "admin"
13837
+ auth: "admin",
13838
+ timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
13807
13839
  }), method(object({ file: string() }), _void(), {
13808
13840
  kind: "mutation",
13809
13841
  auth: "admin"
@@ -13971,7 +14003,13 @@ var ProfileRefInputSchema = object({
13971
14003
  addonId: string(),
13972
14004
  profileId: string()
13973
14005
  });
13974
- method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({
14006
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
14007
+ kind: "mutation",
14008
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
14009
+ }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
14010
+ kind: "mutation",
14011
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
14012
+ }), method(object({
13975
14013
  addonId: string().optional(),
13976
14014
  requestId: string()
13977
14015
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
@@ -13982,7 +14020,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
13982
14020
  auth: "admin"
13983
14021
  }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
13984
14022
  kind: "mutation",
13985
- auth: "admin"
14023
+ auth: "admin",
14024
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13986
14025
  }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
13987
14026
  selector: LlmDefaultSelectorSchema,
13988
14027
  profileId: string().nullable()
@@ -13519,6 +13519,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
13519
13519
  auth: "admin"
13520
13520
  });
13521
13521
  /**
13522
+ * Transport bounds for AI capability methods.
13523
+ *
13524
+ * Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
13525
+ * each other: declaring the constant in either one hands the other `undefined`
13526
+ * at module-init time, and an undefined `timeoutMs` silently falls back to the
13527
+ * kernel's 60 s default — the exact failure this constant exists to prevent,
13528
+ * reintroduced invisibly. Found by the guard, not by review.
13529
+ */
13530
+ /**
13531
+ * Ceiling for a cap method that runs inference or loads a model.
13532
+ *
13533
+ * Deliberately far above anything the AI layer itself may wait for (a summary
13534
+ * asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
13535
+ * never be the layer that gives up first: when it does, the failure is
13536
+ * reported as a transport error for a model that was still thinking, naming
13537
+ * the wrong layer and hiding the real one.
13538
+ *
13539
+ * Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
13540
+ * more on a cold model load. With no declaration every digest failed at
13541
+ * exactly 60 s and shipped without its text.
13542
+ *
13543
+ * A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
13544
+ * the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
13545
+ * decide when to stop, because only they can say WHY.
13546
+ */
13547
+ var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
13548
+ /** A multi-gigabyte download. An hour is not generous, it is honest. */
13549
+ var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
13550
+ /**
13522
13551
  * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
13523
13552
  * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
13524
13553
  * caps stay wire-compatible without a circular cap→cap import.
@@ -13790,16 +13819,19 @@ method(LlmGenerateBaseInputSchema.extend({
13790
13819
  timeoutMs: number().int().positive().optional()
13791
13820
  }), LlmGenerateResultSchema, {
13792
13821
  kind: "mutation",
13793
- auth: "admin"
13822
+ auth: "admin",
13823
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13794
13824
  }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
13795
13825
  kind: "mutation",
13796
- auth: "admin"
13826
+ auth: "admin",
13827
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13797
13828
  }), method(object({}), _void(), {
13798
13829
  kind: "mutation",
13799
13830
  auth: "admin"
13800
13831
  }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
13801
13832
  kind: "mutation",
13802
- auth: "admin"
13833
+ auth: "admin",
13834
+ timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
13803
13835
  }), method(object({ file: string() }), _void(), {
13804
13836
  kind: "mutation",
13805
13837
  auth: "admin"
@@ -13967,7 +13999,13 @@ var ProfileRefInputSchema = object({
13967
13999
  addonId: string(),
13968
14000
  profileId: string()
13969
14001
  });
13970
- method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({
14002
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
14003
+ kind: "mutation",
14004
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
14005
+ }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
14006
+ kind: "mutation",
14007
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
14008
+ }), method(object({
13971
14009
  addonId: string().optional(),
13972
14010
  requestId: string()
13973
14011
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
@@ -13978,7 +14016,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
13978
14016
  auth: "admin"
13979
14017
  }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
13980
14018
  kind: "mutation",
13981
- auth: "admin"
14019
+ auth: "admin",
14020
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13982
14021
  }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
13983
14022
  selector: LlmDefaultSelectorSchema,
13984
14023
  profileId: string().nullable()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-google",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "Google Home export — hub-side smart-home fulfillment (SYNC / QUERY / EXECUTE / DISCONNECT) for the non-camera fleet, served over the hub's own OAuth account link. No Google credential is stored, sent or required.",
5
5
  "keywords": [
6
6
  "camstack",