@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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/model-install.d.ts +67 -3
- package/dist/model-install.d.ts.map +1 -1
- package/dist/model-install.js +275 -62
- package/dist/model-install.js.map +1 -1
- package/dist/prompt-session.d.ts +5 -2
- package/dist/prompt-session.d.ts.map +1 -1
- package/dist/prompt-session.js +13 -5
- package/dist/prompt-session.js.map +1 -1
- package/package.json +5 -5
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/model-install.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
12
|
+
/** Progress numerator (normalized 0..100 when fraction-based). */
|
|
12
13
|
loaded?: number;
|
|
13
|
-
/**
|
|
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":"
|
|
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"}
|
package/dist/model-install.js
CHANGED
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
import { CHROME_LANGUAGE_MODEL_TEXT_OPTIONS, } from "./prompt-session.js";
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
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 { ...
|
|
136
|
+
return { ...installStore().state };
|
|
32
137
|
}
|
|
33
138
|
/** Reset install state (for tests). @category Extensions */
|
|
34
139
|
export function resetModelInstallState() {
|
|
35
|
-
|
|
36
|
-
|
|
140
|
+
const store = installStore();
|
|
141
|
+
store.state = { phase: "idle" };
|
|
142
|
+
store.downloadPromise = null;
|
|
143
|
+
store.preferredCreate = { kind: "bare" };
|
|
37
144
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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:
|
|
69
|
-
total:
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
190
|
+
setInstallState({ phase: "ready", status: "available" });
|
|
191
|
+
return;
|
|
78
192
|
}
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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:
|
|
91
|
-
error:
|
|
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
|
-
|
|
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
|
|
107
|
-
if (
|
|
108
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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":"AAAA,OAAO,EACL,kCAAkC,
|
|
1
|
+
{"version":3,"file":"model-install.js","sourceRoot":"","sources":["../src/model-install.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt-session.d.ts
CHANGED
|
@@ -15,8 +15,11 @@ interface ChromePromptMessage {
|
|
|
15
15
|
interface ChromeLanguageModelSession {
|
|
16
16
|
prompt(input: string): Promise<unknown>;
|
|
17
17
|
}
|
|
18
|
-
|
|
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,
|
|
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"}
|
package/dist/prompt-session.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
28
|
-
await model.
|
|
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;
|
|
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.
|
|
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.
|
|
24
|
-
"@executioncontrolprotocol/types": "^0.
|
|
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.
|
|
29
|
-
"@executioncontrolprotocol/types": "0.
|
|
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
|
}
|