@executioncontrolprotocol/chrome-ai 0.11.3 → 0.13.0

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/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { type Registry } from "@executioncontrolprotocol/core";
2
2
  /** Chrome built-in AI provider. @category Extensions */
3
3
  export declare const chromeAiExtension: import("@executioncontrolprotocol/core").ExtensionDefinition;
4
- export type { ChromeAvailabilityStatus, ChromeModelInstallPhase, ChromeModelInstallState } from "./model-install.js";
5
- export { assertModelReady, getModelInstallState, readAvailability, resetModelInstallState, startModelDownload, } from "./model-install.js";
4
+ export type { ChromeAvailabilityStatus, ChromeModelInstallPhase, ChromeModelInstallState, ChromeModelStallCheckInput, PreferredChromeCreateOptions, } from "./model-install.js";
5
+ export { assertModelReady, CHROME_MODEL_STALL_HINT, CHROME_MODEL_STALL_MS, getModelInstallState, getPreferredCreateOptions, isChromeModelInstallStalled, readAvailability, resetModelInstallState, startModelDownload, } from "./model-install.js";
6
6
  /** Register Chrome AI extension. @category Extensions */
7
7
  export declare function registerChromeAiExtension(registry?: Registry): Promise<void>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,gCAAgC,CAAA;AAsDvC,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,8DAmCpB,CAAA;AAIV,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AACpH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,yDAAyD;AACzD,wBAAsB,yBAAyB,CAAC,QAAQ,GAAE,QAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,gCAAgC,CAAA;AA0DvC,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,8DAmCpB,CAAA;AAIV,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,yDAAyD;AACzD,wBAAsB,yBAAyB,CAAC,QAAQ,GAAE,QAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlG"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { catalogExtension, capabilityFor, defineExtension, globalRegistry, } from "@executioncontrolprotocol/core";
2
2
  import { modelGenerateInputSchema, modelGenerateOutputSchema, } from "@executioncontrolprotocol/types";
3
3
  import { z } from "zod";
4
- import { assertModelReady, getModelInstallState, readAvailability, startModelDownload, } from "./model-install.js";
4
+ import { assertModelReady, getModelInstallState, getPreferredCreateOptions, readAvailability, startModelDownload, } from "./model-install.js";
5
5
  import { createChromeLanguageModelSession, normalizePromptResponse, } from "./prompt-session.js";
6
6
  import { buildChromePromptWithContext } from "./format-model-context.js";
7
7
  function chromeAi() {
@@ -14,7 +14,9 @@ async function runChromePrompt(input, ctx) {
14
14
  throw new Error("Chrome LanguageModel API is not available");
15
15
  }
16
16
  ctx.usage.increment({ modelCalls: 1 });
17
- const session = await createChromeLanguageModelSession(model, input.system);
17
+ const preferred = getPreferredCreateOptions();
18
+ const sessionOptions = preferred.kind === "bare" ? {} : preferred.options;
19
+ const session = await createChromeLanguageModelSession(model, input.system, sessionOptions);
18
20
  const effectivePrompt = buildChromePromptWithContext(input.prompt, input.context);
19
21
  const response = await session.prompt(effectivePrompt);
20
22
  return { text: normalizePromptResponse(response) };
@@ -27,6 +29,7 @@ const InstallStateSchema = z.object({
27
29
  loaded: z.number().optional(),
28
30
  total: z.number().optional(),
29
31
  error: z.string().optional(),
32
+ hint: z.string().optional(),
30
33
  });
31
34
  /** Chrome built-in AI provider. @category Extensions */
32
35
  export const chromeAiExtension = defineExtension("@executioncontrolprotocol", "chrome-ai")
@@ -62,7 +65,7 @@ export const chromeAiExtension = defineExtension("@executioncontrolprotocol", "c
62
65
  ])
63
66
  .build();
64
67
  catalogExtension(chromeAiExtension);
65
- export { assertModelReady, getModelInstallState, readAvailability, resetModelInstallState, startModelDownload, } from "./model-install.js";
68
+ export { assertModelReady, CHROME_MODEL_STALL_HINT, CHROME_MODEL_STALL_MS, getModelInstallState, getPreferredCreateOptions, isChromeModelInstallStalled, readAvailability, resetModelInstallState, startModelDownload, } from "./model-install.js";
66
69
  /** Register Chrome AI extension. @category Extensions */
67
70
  export async function registerChromeAiExtension(registry = globalRegistry) {
68
71
  if (!registry.getExtension("@executioncontrolprotocol/chrome-ai")) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,GAGf,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAE1B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,gCAAgC,EAChC,uBAAuB,GAExB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAMxE,SAAS,QAAQ;IACf,OAAQ,UAA6B,CAAC,aAAa,CAAA;AACrD,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAAyB,EACzB,GAAsB;IAEtB,MAAM,gBAAgB,EAAE,CAAA;IACxB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,MAAM,gCAAgC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAC3E,MAAM,eAAe,GAAG,4BAA4B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACjF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IACtD,OAAO,EAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;SAChF,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAEF,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC,2BAA2B,EAAE,WAAW,CAAC;KACvF,qBAAqB,CAAC,CAAC,mCAAmC,CAAC,CAAC;KAC5D,gBAAgB,CAAC;IAChB,aAAa,CAAC,qCAAqC,EAAE,mBAAmB,CAAC;SACtE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB,UAAU,CACT,CAAC,CAAC,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;QACtB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,CACH;SACA,WAAW,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAA;QACvC,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAA;IACH,CAAC,CAAC;IACJ,aAAa,CAAC,qCAAqC,EAAE,oBAAoB,CAAC;SACvE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SAC9C,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAChD,aAAa,CAAC,qCAAqC,EAAE,sBAAsB,CAAC;SACzE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB,UAAU,CAAC,kBAAkB,CAAC;SAC9B,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,oBAAoB,EAAE,CAAC;IAClD,aAAa,CAAC,qCAAqC,EAAE,UAAU,CAAC;SAC7D,SAAS,CAAC,wBAAwB,CAAC;SACnC,UAAU,CAAC,yBAAyB,CAAC;SACrC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAC9B,eAAe,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAC1D;CACJ,CAAC;KACD,KAAK,EAAE,CAAA;AAEV,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;AAGnC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,WAAqB,cAAc;IACjF,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,qCAAqC,CAAC,EAAE,CAAC;QAClE,MAAM,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ChromeLanguageModelCreateOptions } from "./prompt-session.js";
1
2
  /** Chrome LanguageModel availability status from the browser API. @category Extensions */
2
3
  export type ChromeAvailabilityStatus = "unsupported" | "unavailable" | "downloadable" | "downloading" | "available";
3
4
  /** Install lifecycle phase for UI polling. @category Extensions */
@@ -8,13 +9,68 @@ export interface ChromeModelInstallState {
8
9
  phase: ChromeModelInstallPhase;
9
10
  /** Raw availability status from LanguageModel.availability(). */
10
11
  status?: ChromeAvailabilityStatus;
11
- /** Bytes loaded (when reported by downloadprogress). */
12
+ /** Progress numerator (normalized 0..100 when fraction-based). */
12
13
  loaded?: number;
13
- /** Total bytes (when reported by downloadprogress). */
14
+ /** Progress denominator. */
14
15
  total?: number;
15
16
  /** Error message when phase is error. */
16
17
  error?: string;
18
+ /**
19
+ * Soft guidance when the install looks stuck (no hard failure yet).
20
+ * Typical cause: Chrome on-device runtime wedged until browser/OS restart.
21
+ */
22
+ hint?: string;
17
23
  }
24
+ /** How long to wait with no progress before surfacing a restart hint. @category Extensions */
25
+ export declare const CHROME_MODEL_STALL_MS = 45000;
26
+ /**
27
+ * User-facing guidance when availability stays `downloading` / install shows
28
+ * no byte progress. Often cleared by quitting Chrome or an OS restart.
29
+ * @category Extensions
30
+ */
31
+ export declare const CHROME_MODEL_STALL_HINT = "Download looks stuck with no progress. Fully quit and reopen Chrome (check for a pending Chrome update), or restart your PC.";
32
+ /** Inputs for {@link isChromeModelInstallStalled}. @category Extensions */
33
+ export interface ChromeModelStallCheckInput {
34
+ /** Current install phase. */
35
+ phase: string;
36
+ /** Raw LanguageModel availability status. */
37
+ status?: string;
38
+ /** Last known progress numerator. */
39
+ loaded?: number;
40
+ /** Timestamp (ms) when we last saw progress advance. */
41
+ lastProgressAt: number;
42
+ /** Clock now (ms); injectable for tests. */
43
+ now?: number;
44
+ /** Stall threshold override (ms). */
45
+ stallMs?: number;
46
+ }
47
+ /**
48
+ * True when install has been downloading without progress long enough to
49
+ * suggest a Chrome restart rather than more app retries.
50
+ * @category Extensions
51
+ */
52
+ export declare function isChromeModelInstallStalled(input: ChromeModelStallCheckInput): boolean;
53
+ /**
54
+ * Session options that last reported the best availability.
55
+ * `bare` means `LanguageModel.create()` / `availability()` with no expectedInputs.
56
+ * @category Extensions
57
+ */
58
+ export type PreferredChromeCreateOptions = {
59
+ kind: "bare";
60
+ } | {
61
+ kind: "options";
62
+ options: ChromeLanguageModelCreateOptions;
63
+ };
64
+ /**
65
+ * Prompt API `downloadprogress` reports `loaded` as a 0..1 fraction (Chrome docs).
66
+ * Normalize to a 0..100 progress pair for UI.
67
+ */
68
+ export declare function normalizeDownloadProgress(loaded: number, total?: number): {
69
+ loaded: number;
70
+ total: number;
71
+ };
72
+ /** Options that should be used for LanguageModel.create / generate sessions. @category Extensions */
73
+ export declare function getPreferredCreateOptions(): PreferredChromeCreateOptions;
18
74
  /** Read current LanguageModel availability. @category Extensions */
19
75
  export declare function readAvailability(): Promise<{
20
76
  status: ChromeAvailabilityStatus;
@@ -26,7 +82,15 @@ export declare function getModelInstallState(): ChromeModelInstallState;
26
82
  /** Reset install state (for tests). @category Extensions */
27
83
  export declare function resetModelInstallState(): void;
28
84
  /**
29
- * Start Gemini Nano download if needed (idempotent).
85
+ * Start Gemini Nano download / session warm-up if needed (idempotent).
86
+ *
87
+ * Call this as the first statement in a click handler (not via `ecp.invoke`,
88
+ * and not after other awaits). Chrome requires transient user activation for
89
+ * `LanguageModel.create()` when a download is needed.
90
+ *
91
+ * Install always uses bare `create({ monitor })` per Chrome Prompt API docs.
92
+ * Option-specific sessions are used later for generate.
93
+ *
30
94
  * @category Extensions
31
95
  */
32
96
  export declare function startModelDownload(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"model-install.d.ts","sourceRoot":"","sources":["../src/model-install.ts"],"names":[],"mappings":"AAKA,0FAA0F;AAC1F,MAAM,MAAM,wBAAwB,GAChC,aAAa,GACb,aAAa,GACb,cAAc,GACd,aAAa,GACb,WAAW,CAAA;AAEf,mEAAmE;AACnE,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,UAAU,GACV,aAAa,GACb,SAAS,GACT,OAAO,GACP,OAAO,CAAA;AAEX,+EAA+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,KAAK,EAAE,uBAAuB,CAAA;IAC9B,iEAAiE;IACjE,MAAM,CAAC,EAAE,wBAAwB,CAAA;IACjC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAyBD,oEAAoE;AACpE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,MAAM,EAAE,wBAAwB,CAAA;IAChC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAC,CAWD;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,IAAI,uBAAuB,CAE9D;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAgED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBxE;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAStD"}
1
+ {"version":3,"file":"model-install.d.ts","sourceRoot":"","sources":["../src/model-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gCAAgC,EACtC,MAAM,qBAAqB,CAAA;AAE5B,0FAA0F;AAC1F,MAAM,MAAM,wBAAwB,GAChC,aAAa,GACb,aAAa,GACb,cAAc,GACd,aAAa,GACb,WAAW,CAAA;AAEf,mEAAmE;AACnE,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,UAAU,GACV,aAAa,GACb,SAAS,GACT,OAAO,GACP,OAAO,CAAA;AAEX,+EAA+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,KAAK,EAAE,uBAAuB,CAAA;IAC9B,iEAAiE;IACjE,MAAM,CAAC,EAAE,wBAAwB,CAAA;IACjC,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAE3C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iIAC4F,CAAA;AAEhI,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAA;IACtB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAatF;AAED;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GACpC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,gCAAgC,CAAA;CAAE,CAAA;AAwDlE;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAWnC;AAgDD,qGAAqG;AACrG,wBAAgB,yBAAyB,IAAI,4BAA4B,CAExE;AAED,oEAAoE;AACpE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,MAAM,EAAE,wBAAwB,CAAA;IAChC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAC,CAYD;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,IAAI,uBAAuB,CAE9D;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAoGD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuFxE;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAStD"}
@@ -1,6 +1,54 @@
1
1
  import { CHROME_LANGUAGE_MODEL_TEXT_OPTIONS, } from "./prompt-session.js";
2
- let installState = { phase: "idle" };
3
- let downloadPromise = null;
2
+ /** How long to wait with no progress before surfacing a restart hint. @category Extensions */
3
+ export const CHROME_MODEL_STALL_MS = 45_000;
4
+ /**
5
+ * User-facing guidance when availability stays `downloading` / install shows
6
+ * no byte progress. Often cleared by quitting Chrome or an OS restart.
7
+ * @category Extensions
8
+ */
9
+ export const CHROME_MODEL_STALL_HINT = "Download looks stuck with no progress. Fully quit and reopen Chrome (check for a pending Chrome update), or restart your PC.";
10
+ /**
11
+ * True when install has been downloading without progress long enough to
12
+ * suggest a Chrome restart rather than more app retries.
13
+ * @category Extensions
14
+ */
15
+ export function isChromeModelInstallStalled(input) {
16
+ if (input.phase === "ready" || input.phase === "error" || input.phase === "idle") {
17
+ return false;
18
+ }
19
+ const inFlight = input.phase === "downloading" ||
20
+ input.phase === "checking" ||
21
+ input.status === "downloading" ||
22
+ input.status === "downloadable";
23
+ if (!inFlight)
24
+ return false;
25
+ const now = input.now ?? Date.now();
26
+ const stallMs = input.stallMs ?? CHROME_MODEL_STALL_MS;
27
+ return now - input.lastProgressAt >= stallMs;
28
+ }
29
+ /** Max wait for LanguageModel.create() / background download. */
30
+ const DOWNLOAD_TIMEOUT_MS = 180_000;
31
+ /** How often to re-check availability while create() is in flight. */
32
+ const AVAILABILITY_POLL_MS = 750;
33
+ const STATUS_RANK = {
34
+ available: 4,
35
+ downloading: 3,
36
+ downloadable: 2,
37
+ unavailable: 1,
38
+ unsupported: 0,
39
+ };
40
+ const INSTALL_STORE_KEY = "__ecpChromeAiInstall";
41
+ function installStore() {
42
+ const g = globalThis;
43
+ if (!g[INSTALL_STORE_KEY]) {
44
+ g[INSTALL_STORE_KEY] = {
45
+ state: { phase: "idle" },
46
+ downloadPromise: null,
47
+ preferredCreate: { kind: "bare" },
48
+ };
49
+ }
50
+ return g[INSTALL_STORE_KEY];
51
+ }
4
52
  function languageModel() {
5
53
  return globalThis.LanguageModel;
6
54
  }
@@ -13,103 +61,268 @@ function normalizeStatus(raw) {
13
61
  }
14
62
  return "unsupported";
15
63
  }
64
+ /**
65
+ * Prompt API `downloadprogress` reports `loaded` as a 0..1 fraction (Chrome docs).
66
+ * Normalize to a 0..100 progress pair for UI.
67
+ */
68
+ export function normalizeDownloadProgress(loaded, total) {
69
+ if (total === undefined || total <= 0) {
70
+ if (loaded >= 0 && loaded <= 1) {
71
+ return { loaded: Math.round(loaded * 100), total: 100 };
72
+ }
73
+ return { loaded, total: Math.max(loaded, 1) };
74
+ }
75
+ if (total <= 1 && loaded <= 1) {
76
+ return { loaded: Math.round(loaded * 100), total: 100 };
77
+ }
78
+ return { loaded, total };
79
+ }
80
+ function sleep(ms) {
81
+ return new Promise((resolve) => setTimeout(resolve, ms));
82
+ }
83
+ /**
84
+ * Probe several option shapes. Availability is option-specific in Chrome;
85
+ * an already-downloaded base model can still report `downloadable` for a
86
+ * mismatched expectedInputs/languages config.
87
+ */
88
+ async function probeAvailability(model) {
89
+ const probes = [
90
+ { preferred: { kind: "bare" } },
91
+ { preferred: { kind: "options", options: { languages: ["en"] } } },
92
+ { preferred: { kind: "options", options: CHROME_LANGUAGE_MODEL_TEXT_OPTIONS } },
93
+ ];
94
+ let best = {
95
+ status: "unsupported",
96
+ preferred: { kind: "bare" },
97
+ };
98
+ for (const probe of probes) {
99
+ try {
100
+ const availArg = probe.preferred.kind === "bare" ? undefined : probe.preferred.options;
101
+ const raw = await model.availability(availArg);
102
+ const status = normalizeStatus(typeof raw === "string" ? raw : String(raw));
103
+ if (STATUS_RANK[status] > STATUS_RANK[best.status]) {
104
+ best = { status, preferred: probe.preferred };
105
+ }
106
+ if (status === "available") {
107
+ return best;
108
+ }
109
+ }
110
+ catch {
111
+ // Try the next probe shape.
112
+ }
113
+ }
114
+ return best;
115
+ }
116
+ /** Options that should be used for LanguageModel.create / generate sessions. @category Extensions */
117
+ export function getPreferredCreateOptions() {
118
+ return installStore().preferredCreate;
119
+ }
16
120
  /** Read current LanguageModel availability. @category Extensions */
17
121
  export async function readAvailability() {
18
122
  const model = languageModel();
19
123
  if (!model?.availability) {
20
124
  return { status: "unsupported", available: false, supported: false };
21
125
  }
22
- const status = normalizeStatus(await model.availability(CHROME_LANGUAGE_MODEL_TEXT_OPTIONS));
126
+ const probe = await probeAvailability(model);
127
+ installStore().preferredCreate = probe.preferred;
23
128
  return {
24
- status,
25
- available: status === "available",
26
- supported: status !== "unsupported",
129
+ status: probe.status,
130
+ available: probe.status === "available",
131
+ supported: probe.status !== "unsupported",
27
132
  };
28
133
  }
29
134
  /** Snapshot install state for polling. @category Extensions */
30
135
  export function getModelInstallState() {
31
- return { ...installState };
136
+ return { ...installStore().state };
32
137
  }
33
138
  /** Reset install state (for tests). @category Extensions */
34
139
  export function resetModelInstallState() {
35
- installState = { phase: "idle" };
36
- downloadPromise = null;
140
+ const store = installStore();
141
+ store.state = { phase: "idle" };
142
+ store.downloadPromise = null;
143
+ store.preferredCreate = { kind: "bare" };
37
144
  }
38
- async function runModelDownload() {
39
- const model = languageModel();
40
- if (!model?.create) {
41
- installState = { phase: "error", status: "unsupported", error: "LanguageModel API not supported" };
42
- return;
43
- }
44
- installState = { phase: "checking", status: installState.status ?? "downloadable" };
45
- const avail = await readAvailability();
46
- installState = { ...installState, status: avail.status };
47
- if (avail.status === "available") {
48
- installState = { phase: "ready", status: "available" };
49
- return;
50
- }
51
- if (avail.status === "unavailable" || avail.status === "unsupported") {
52
- installState = {
53
- phase: "error",
54
- status: avail.status,
55
- error: "Chrome built-in AI is not available on this device",
56
- };
57
- return;
58
- }
59
- installState = { phase: "downloading", status: avail.status, loaded: 0 };
60
- try {
61
- await model.create({
62
- ...CHROME_LANGUAGE_MODEL_TEXT_OPTIONS,
63
- monitor(m) {
64
- m.addEventListener("downloadprogress", (e) => {
65
- installState = {
145
+ function setInstallState(next) {
146
+ installStore().state = next;
147
+ }
148
+ async function settleAfterCreate(createPromise) {
149
+ const poll = (async () => {
150
+ const deadline = Date.now() + DOWNLOAD_TIMEOUT_MS;
151
+ while (Date.now() < deadline) {
152
+ const phase = installStore().state.phase;
153
+ if (phase === "ready" || phase === "error")
154
+ return;
155
+ try {
156
+ const avail = await readAvailability();
157
+ const prev = installStore().state;
158
+ setInstallState({ ...prev, status: avail.status });
159
+ if (avail.available) {
160
+ setInstallState({ phase: "ready", status: "available" });
161
+ return;
162
+ }
163
+ if (avail.status === "downloading") {
164
+ setInstallState({
66
165
  phase: "downloading",
67
166
  status: "downloading",
68
- loaded: e.loaded,
69
- total: e.total,
70
- };
71
- });
72
- },
73
- });
74
- installState = { phase: "loading", status: "downloading" };
167
+ loaded: prev.loaded,
168
+ total: prev.total,
169
+ });
170
+ }
171
+ }
172
+ catch {
173
+ // Keep waiting on create / timeout.
174
+ }
175
+ await sleep(AVAILABILITY_POLL_MS);
176
+ }
177
+ })();
178
+ const outcome = await Promise.race([
179
+ createPromise.then(() => "created").catch((err) => {
180
+ throw err;
181
+ }),
182
+ sleep(DOWNLOAD_TIMEOUT_MS).then(() => "timeout"),
183
+ poll.then(() => "polled"),
184
+ ]);
185
+ if (installStore().state.phase === "ready")
186
+ return;
187
+ if (outcome === "timeout") {
75
188
  const after = await readAvailability();
76
189
  if (after.available) {
77
- installState = { phase: "ready", status: "available" };
190
+ setInstallState({ phase: "ready", status: "available" });
191
+ return;
78
192
  }
79
- else {
80
- installState = {
193
+ setInstallState({
194
+ phase: "error",
195
+ status: after.status,
196
+ error: "Chrome AI model download timed out or never started. Fully quit and reopen Chrome (or restart your PC), then try Continue again.",
197
+ });
198
+ return;
199
+ }
200
+ if (outcome === "polled") {
201
+ const after = await readAvailability();
202
+ setInstallState(after.available
203
+ ? { phase: "ready", status: "available" }
204
+ : {
81
205
  phase: "error",
82
206
  status: after.status,
83
207
  error: "Model download did not complete",
84
- };
85
- }
208
+ });
209
+ return;
86
210
  }
87
- catch (err) {
88
- installState = {
211
+ setInstallState({
212
+ phase: "loading",
213
+ status: installStore().state.status ?? "downloading",
214
+ });
215
+ const after = await readAvailability();
216
+ if (after.available) {
217
+ setInstallState({ phase: "ready", status: "available" });
218
+ }
219
+ else {
220
+ setInstallState({
89
221
  phase: "error",
90
- status: installState.status,
91
- error: err instanceof Error ? err.message : String(err),
92
- };
222
+ status: after.status,
223
+ error: "Model download did not complete",
224
+ });
93
225
  }
94
226
  }
227
+ function hasTransientUserActivation() {
228
+ const ua = globalThis.navigator?.userActivation;
229
+ if (!ua || typeof ua.isActive !== "boolean")
230
+ return undefined;
231
+ return ua.isActive;
232
+ }
95
233
  /**
96
- * Start Gemini Nano download if needed (idempotent).
234
+ * Start Gemini Nano download / session warm-up if needed (idempotent).
235
+ *
236
+ * Call this as the first statement in a click handler (not via `ecp.invoke`,
237
+ * and not after other awaits). Chrome requires transient user activation for
238
+ * `LanguageModel.create()` when a download is needed.
239
+ *
240
+ * Install always uses bare `create({ monitor })` per Chrome Prompt API docs.
241
+ * Option-specific sessions are used later for generate.
242
+ *
97
243
  * @category Extensions
98
244
  */
99
245
  export async function startModelDownload() {
100
- if (installState.phase === "ready") {
246
+ const store = installStore();
247
+ if (store.state.phase === "ready") {
101
248
  return { started: false };
102
249
  }
103
- if (downloadPromise) {
250
+ if (store.downloadPromise) {
104
251
  return { started: false };
105
252
  }
106
- const avail = await readAvailability();
107
- if (avail.available) {
108
- installState = { phase: "ready", status: "available" };
253
+ const model = languageModel();
254
+ if (!model?.create) {
255
+ setInstallState({
256
+ phase: "error",
257
+ status: "unsupported",
258
+ error: "LanguageModel API is not available in this browser",
259
+ });
260
+ return { started: false };
261
+ }
262
+ const active = hasTransientUserActivation();
263
+ if (active === false) {
264
+ setInstallState({
265
+ phase: "error",
266
+ status: "downloadable",
267
+ error: "Chrome AI model download requires a user click. Open the provider dialog and click Continue.",
268
+ });
109
269
  return { started: false };
110
270
  }
111
- downloadPromise = runModelDownload().finally(() => {
112
- downloadPromise = null;
271
+ // Do NOT await availability before create() that consumes user activation.
272
+ setInstallState({ phase: "downloading", status: "downloadable" });
273
+ const monitor = (m) => {
274
+ m.addEventListener("downloadprogress", (e) => {
275
+ // Chrome docs: e.loaded is a 0..1 fraction (often no total).
276
+ const progress = normalizeDownloadProgress(e.loaded, e.total);
277
+ if (progress.loaded <= 0)
278
+ return;
279
+ setInstallState({
280
+ phase: "downloading",
281
+ status: "downloading",
282
+ loaded: progress.loaded,
283
+ total: progress.total,
284
+ });
285
+ });
286
+ };
287
+ // Prefer language-attested create (Chrome warns on bare create without
288
+ // expectedOutputs). Still kick create synchronously from the click stack.
289
+ let createPromise;
290
+ try {
291
+ createPromise = model.create({
292
+ ...CHROME_LANGUAGE_MODEL_TEXT_OPTIONS,
293
+ monitor,
294
+ });
295
+ store.preferredCreate = {
296
+ kind: "options",
297
+ options: CHROME_LANGUAGE_MODEL_TEXT_OPTIONS,
298
+ };
299
+ }
300
+ catch (err) {
301
+ try {
302
+ createPromise = model.create({ monitor });
303
+ store.preferredCreate = { kind: "bare" };
304
+ }
305
+ catch (bareErr) {
306
+ setInstallState({
307
+ phase: "error",
308
+ status: "downloadable",
309
+ error: bareErr instanceof Error ? bareErr.message : String(err),
310
+ });
311
+ return { started: false };
312
+ }
313
+ }
314
+ store.downloadPromise = settleAfterCreate(createPromise)
315
+ .catch((err) => {
316
+ if (installStore().state.phase === "ready")
317
+ return;
318
+ setInstallState({
319
+ phase: "error",
320
+ status: installStore().state.status,
321
+ error: err instanceof Error ? err.message : String(err),
322
+ });
323
+ })
324
+ .finally(() => {
325
+ installStore().downloadPromise = null;
113
326
  });
114
327
  return { started: true };
115
328
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-install.js","sourceRoot":"","sources":["../src/model-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-install.js","sourceRoot":"","sources":["../src/model-install.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,GAGnC,MAAM,qBAAqB,CAAA;AAsC5B,8FAA8F;AAC9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC,8HAA8H,CAAA;AAkBhI;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAiC;IAC3E,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QACjF,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,KAAK,aAAa;QAC7B,KAAK,CAAC,KAAK,KAAK,UAAU;QAC1B,KAAK,CAAC,MAAM,KAAK,aAAa;QAC9B,KAAK,CAAC,MAAM,KAAK,cAAc,CAAA;IACjC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAA;IACtD,OAAO,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,OAAO,CAAA;AAC9C,CAAC;AAqBD,iEAAiE;AACjE,MAAM,mBAAmB,GAAG,OAAO,CAAA;AAEnC,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAEhC,MAAM,WAAW,GAA6C;IAC5D,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;CACf,CAAA;AAED,MAAM,iBAAiB,GAAG,sBAA+B,CAAA;AAEzD,SAAS,YAAY;IACnB,MAAM,CAAC,GAAG,UAA4B,CAAA;IACtC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1B,CAAC,CAAC,iBAAiB,CAAC,GAAG;YACrB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YACxB,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAClC,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAC,iBAAiB,CAAE,CAAA;AAC9B,CAAC;AAED,SAAS,aAAa;IACpB,OAAQ,UAA6B,CAAC,aAAa,CAAA;AACrD,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IACE,GAAG,KAAK,aAAa;QACrB,GAAG,KAAK,cAAc;QACtB,GAAG,KAAK,aAAa;QACrB,GAAG,KAAK,WAAW,EACnB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAc,EACd,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;QACzD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;IAC/C,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;IACzD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAC1B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAOD;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAA6B;IAC5D,MAAM,MAAM,GAAuD;QACjE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC/B,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;QAClE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,kCAAkC,EAAE,EAAE;KAChF,CAAA;IAED,IAAI,IAAI,GAAsB;QAC5B,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KAC5B,CAAA;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GACZ,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAA;YACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3E,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,IAAI,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;YAC/C,CAAC;YACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,yBAAyB;IACvC,OAAO,YAAY,EAAE,CAAC,eAAe,CAAA;AACvC,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAKpC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACtE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC5C,YAAY,EAAE,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAA;IAChD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,WAAW;QACvC,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,aAAa;KAC1C,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB;IAClC,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC,KAAK,EAAE,CAAA;AACpC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB;IACpC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAC5B,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAC/B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAA;IAC5B,KAAK,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,IAA6B;IACpD,YAAY,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;AAC7B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,aAA+B;IAC9D,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAA;QACjD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAA;YACxC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO;gBAAE,OAAM;YAClD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAA;gBACtC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC,KAAK,CAAA;gBACjC,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;gBAClD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;oBACxD,OAAM;gBACR,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oBACnC,eAAe,CAAC;wBACd,KAAK,EAAE,aAAa;wBACpB,MAAM,EAAE,aAAa;wBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YACD,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACnC,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YAClE,MAAM,GAAG,CAAA;QACX,CAAC,CAAC;QACF,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAkB,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAiB,CAAC;KACnC,CAAC,CAAA;IAEF,IAAI,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO;QAAE,OAAM;IAElD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAA;QACtC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,eAAe,CAAC;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EACH,kIAAkI;SACrI,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAA;QACtC,eAAe,CACb,KAAK,CAAC,SAAS;YACb,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;YACzC,CAAC,CAAC;gBACE,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,iCAAiC;aACzC,CACN,CAAA;QACD,OAAM;IACR,CAAC;IAED,eAAe,CAAC;QACd,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,aAAa;KACrD,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAA;IACtC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;IAC1D,CAAC;SAAM,CAAC;QACN,eAAe,CAAC;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,iCAAiC;SACzC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B;IACjC,MAAM,EAAE,GACN,UAGD,CAAC,SAAS,EAAE,cAAc,CAAA;IAC3B,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC7D,OAAO,EAAE,CAAC,QAAQ,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,CAAC;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,oDAAoD;SAC5D,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAA;IAC3C,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,eAAe,CAAC;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,cAAc;YACtB,KAAK,EACH,8FAA8F;SACjG,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,6EAA6E;IAC7E,eAAe,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IAEjE,MAAM,OAAO,GAAgD,CAAC,CAAC,EAAE,EAAE;QACjE,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3C,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YAC7D,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAM;YAChC,eAAe,CAAC;gBACd,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,uEAAuE;IACvE,0EAA0E;IAC1E,IAAI,aAA+B,CAAA;IACnC,IAAI,CAAC;QACH,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,GAAG,kCAAkC;YACrC,OAAO;SACR,CAAC,CAAA;QACF,KAAK,CAAC,eAAe,GAAG;YACtB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,kCAAkC;SAC5C,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACzC,KAAK,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QAC1C,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,eAAe,CAAC;gBACd,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAChE,CAAC,CAAA;YACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,GAAG,iBAAiB,CAAC,aAAa,CAAC;SACrD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,IAAI,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO;YAAE,OAAM;QAClD,eAAe,CAAC;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,MAAM;YACnC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACZ,YAAY,EAAE,CAAC,eAAe,GAAG,IAAI,CAAA;IACvC,CAAC,CAAC,CAAA;IAEJ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAA;IACtC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc;YAC/D,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,qCAAqC,CAC1C,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -15,8 +15,11 @@ interface ChromePromptMessage {
15
15
  interface ChromeLanguageModelSession {
16
16
  prompt(input: string): Promise<unknown>;
17
17
  }
18
- interface ChromeLanguageModelCreateOptions {
18
+ /** Options accepted by LanguageModel.availability / create. @category Extensions */
19
+ export interface ChromeLanguageModelCreateOptions {
19
20
  initialPrompts?: ChromePromptMessage[];
21
+ /** Newer Prompt API language declaration (get-started docs). */
22
+ languages?: string[];
20
23
  expectedInputs?: Array<{
21
24
  type: "text";
22
25
  languages: string[];
@@ -39,6 +42,6 @@ export interface ChromeLanguageModelApi {
39
42
  /** Normalize Prompt API output (string or legacy `{ text }` shape). */
40
43
  export declare function normalizePromptResponse(response: unknown): string;
41
44
  /** Create a Prompt API session with optional system instruction. */
42
- export declare function createChromeLanguageModelSession(model: ChromeLanguageModelApi, system?: string): Promise<ChromeLanguageModelSession>;
45
+ export declare function createChromeLanguageModelSession(model: ChromeLanguageModelApi, system?: string, sessionOptions?: ChromeLanguageModelCreateOptions): Promise<ChromeLanguageModelSession>;
43
46
  export {};
44
47
  //# sourceMappingURL=prompt-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-session.d.ts","sourceRoot":"","sources":["../src/prompt-session.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kCAAkC;;;;;;;;;CAG9C,CAAA;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,0BAA0B;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxC;AAED,UAAU,gCAAgC;IACxC,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACtC,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC7D,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC9D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAClB,gBAAgB,CACd,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,GAC5D,IAAI,CAAA;KACR,KAAK,IAAI,CAAA;CACX;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,OAAO,CAAC,EAAE,gCAAgC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzE,MAAM,CAAC,OAAO,CAAC,EAAE,gCAAgC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;CACxF;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAWjE;AAOD,oEAAoE;AACpE,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,sBAAsB,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,0BAA0B,CAAC,CASrC"}
1
+ {"version":3,"file":"prompt-session.d.ts","sourceRoot":"","sources":["../src/prompt-session.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kCAAkC;;;;;;;;;CAG9C,CAAA;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,0BAA0B;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxC;AAED,oFAAoF;AACpF,MAAM,WAAW,gCAAgC;IAC/C,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACtC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC7D,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC9D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAClB,gBAAgB,CACd,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,GAC5D,IAAI,CAAA;KACR,KAAK,IAAI,CAAA;CACX;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,OAAO,CAAC,EAAE,gCAAgC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzE,MAAM,CAAC,OAAO,CAAC,EAAE,gCAAgC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;CACxF;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAWjE;AAOD,oEAAoE;AACpE,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,sBAAsB,EAC7B,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,gCAAgC,GAChD,OAAO,CAAC,0BAA0B,CAAC,CAiBrC"}
@@ -19,14 +19,22 @@ export function normalizePromptResponse(response) {
19
19
  }
20
20
  const DEFAULT_SESSION_OPTIONS = CHROME_LANGUAGE_MODEL_TEXT_OPTIONS;
21
21
  /** Create a Prompt API session with optional system instruction. */
22
- export async function createChromeLanguageModelSession(model, system) {
23
- const options = { ...DEFAULT_SESSION_OPTIONS };
22
+ export async function createChromeLanguageModelSession(model, system, sessionOptions) {
23
+ const preferred = sessionOptions ?? DEFAULT_SESSION_OPTIONS;
24
+ const options = { ...preferred };
24
25
  if (system?.trim()) {
25
26
  options.initialPrompts = [{ role: "system", content: system }];
26
27
  }
27
- if (model.availability) {
28
- await model.availability(options);
28
+ try {
29
+ return await model.create(options);
30
+ }
31
+ catch (err) {
32
+ if (!sessionOptions || Object.keys(sessionOptions).length === 0)
33
+ throw err;
34
+ // Fallback: bare create when option-specific session fails.
35
+ return model.create(system?.trim()
36
+ ? { initialPrompts: [{ role: "system", content: system }] }
37
+ : {});
29
38
  }
30
- return model.create(options);
31
39
  }
32
40
  //# sourceMappingURL=prompt-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-session.js","sourceRoot":"","sources":["../src/prompt-session.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAEjC,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC9E,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;CAChF,CAAA;AA4BD,uEAAuE;AACvE,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACjD,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtD,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAQ,QAA8B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnF,OAAQ,QAA6B,CAAC,IAAI,CAAA;QAC5C,CAAC;QACD,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAQ,QAAiC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5F,OAAQ,QAAgC,CAAC,OAAO,CAAA;QAClD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;AACvF,CAAC;AAED,MAAM,uBAAuB,GAGzB,kCAAkC,CAAA;AAEtC,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAA6B,EAC7B,MAAe;IAEf,MAAM,OAAO,GAAqC,EAAE,GAAG,uBAAuB,EAAE,CAAA;IAChF,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"prompt-session.js","sourceRoot":"","sources":["../src/prompt-session.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAEjC,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC9E,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;CAChF,CAAA;AA+BD,uEAAuE;AACvE,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACjD,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtD,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAQ,QAA8B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnF,OAAQ,QAA6B,CAAC,IAAI,CAAA;QAC5C,CAAC;QACD,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAQ,QAAiC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5F,OAAQ,QAAgC,CAAC,OAAO,CAAA;QAClD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;AACvF,CAAC;AAED,MAAM,uBAAuB,GAGzB,kCAAkC,CAAA;AAEtC,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAA6B,EAC7B,MAAe,EACf,cAAiD;IAEjD,MAAM,SAAS,GAAG,cAAc,IAAI,uBAAuB,CAAA;IAC3D,MAAM,OAAO,GAAqC,EAAE,GAAG,SAAS,EAAE,CAAA;IAClE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,GAAG,CAAA;QAC1E,4DAA4D;QAC5D,OAAO,KAAK,CAAC,MAAM,CACjB,MAAM,EAAE,IAAI,EAAE;YACZ,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;YAC3D,CAAC,CAAC,EAAE,CACP,CAAA;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@executioncontrolprotocol/chrome-ai",
3
- "version": "0.11.3",
3
+ "version": "0.13.0",
4
4
  "description": "Chrome built-in AI provider for ECP browser demo",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -20,13 +20,13 @@
20
20
  "build": "tsc -b"
21
21
  },
22
22
  "peerDependencies": {
23
- "@executioncontrolprotocol/core": "^0.11.3",
24
- "@executioncontrolprotocol/types": "^0.11.3",
23
+ "@executioncontrolprotocol/core": "^0.13.0",
24
+ "@executioncontrolprotocol/types": "^0.13.0",
25
25
  "zod": "^3.24.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@executioncontrolprotocol/core": "0.11.3",
29
- "@executioncontrolprotocol/types": "0.11.3",
28
+ "@executioncontrolprotocol/core": "0.13.0",
29
+ "@executioncontrolprotocol/types": "0.13.0",
30
30
  "typescript": "^5.7.0",
31
31
  "zod": "^3.24.0"
32
32
  }