@webless/agent 0.2.6 → 0.2.8
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/{chunk-GMG4WJNF.js → chunk-4SMLPH3B.js} +141 -20
- package/dist/chunk-4SMLPH3B.js.map +1 -0
- package/dist/embed.cjs +193 -21
- package/dist/embed.cjs.map +1 -1
- package/dist/embed.d.cts +19 -5
- package/dist/embed.d.ts +19 -5
- package/dist/embed.js +52 -2
- package/dist/embed.js.map +1 -1
- package/dist/index.cjs +129 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -3
- package/dist/index.d.ts +10 -3
- package/dist/index.js +130 -14
- package/dist/index.js.map +1 -1
- package/dist/{placement-2d9GQGou.d.cts → placement-CXW_83AF.d.cts} +3 -1
- package/dist/{placement-2d9GQGou.d.ts → placement-CXW_83AF.d.ts} +3 -1
- package/dist/react.cjs +139 -18
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +6 -4
- package/dist/react.d.ts +6 -4
- package/dist/react.js +1 -1
- package/package.json +4 -4
- package/scripts/build-agent-manifest-bundle-impl.mjs +32 -32
- package/dist/chunk-GMG4WJNF.js.map +0 -1
package/dist/embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embed/mount.tsx","../src/embed/AgentWidget.tsx","../src/embed/manifest.ts"],"sourcesContent":["import { createRoot, type Root } from \"react-dom/client\";\nimport { closeAgentPanel, openAgentPanel } from \"./controller\";\nimport { AgentWidget } from \"./AgentWidget\";\nimport {\n normalizeAgentTagManifest,\n type AgentTagManifest,\n type NormalizedAgentTagManifest,\n} from \"./manifest\";\n\nexport type AgentRuntimeHandle = {\n customerId: string;\n manifest: NormalizedAgentTagManifest;\n host: HTMLElement;\n root: Root;\n open: () => void;\n close: () => void;\n unmount: () => void;\n};\n\nconst mountedHandles = new Map<string, AgentRuntimeHandle>();\nlet latestCustomerId: string | null = null;\n\nfunction resolveMountHost(manifest: NormalizedAgentTagManifest, script?: HTMLScriptElement | null) {\n const strategy = manifest.mount.strategy ?? \"body\";\n\n if (strategy === \"script-parent\" && script?.parentElement instanceof HTMLElement) {\n return script.parentElement;\n }\n\n if (strategy === \"selector\" && manifest.mount.selector) {\n const target = document.querySelector(manifest.mount.selector);\n if (target instanceof HTMLElement) return target;\n }\n\n return document.body;\n}\n\nfunction createHost(customerId: string) {\n const host = document.createElement(\"div\");\n host.dataset.weblessAgentCustomerId = customerId;\n host.setAttribute(\"data-webless-agent\", customerId);\n return host;\n}\n\nexport function mountAgent(input: {\n manifest: AgentTagManifest;\n script?: HTMLScriptElement | null;\n}): AgentRuntimeHandle {\n const manifest = normalizeAgentTagManifest(input.manifest);\n const existing = mountedHandles.get(manifest.customerId);\n if (existing) {\n return existing;\n }\n\n const mountTarget = resolveMountHost(manifest, input.script ?? null);\n const host = createHost(manifest.customerId);\n mountTarget.append(host);\n\n const root = createRoot(host);\n root.render(<AgentWidget manifest={manifest} />);\n\n const handle: AgentRuntimeHandle = {\n customerId: manifest.customerId,\n manifest,\n host,\n root,\n open: () => {\n openAgentPanel(manifest.customerId);\n },\n close: () => {\n closeAgentPanel(manifest.customerId);\n },\n unmount: () => {\n root.unmount();\n host.remove();\n mountedHandles.delete(manifest.customerId);\n if (latestCustomerId === manifest.customerId) {\n latestCustomerId = null;\n }\n },\n };\n\n mountedHandles.set(manifest.customerId, handle);\n latestCustomerId = manifest.customerId;\n return handle;\n}\n\nexport function unmountAgent(customerId?: string) {\n const id = customerId ?? latestCustomerId;\n if (!id) return false;\n const handle = mountedHandles.get(id);\n if (!handle) return false;\n handle.unmount();\n return true;\n}\n\nexport function getMountedAgent(customerId?: string) {\n if (customerId) return mountedHandles.get(customerId) ?? null;\n if (latestCustomerId) return mountedHandles.get(latestCustomerId) ?? null;\n return mountedHandles.values().next().value ?? null;\n}\n\nexport function bootstrapAgent(manifest: AgentTagManifest, script?: HTMLScriptElement | null) {\n return mountAgent({ manifest, script });\n}\n","import { AgentWidget as WeblessAgentWidget } from \"../react/components/AgentWidget\";\nimport type { NormalizedAgentTagManifest } from \"./manifest\";\n\nexport function AgentWidget({ manifest }: { manifest: NormalizedAgentTagManifest }) {\n return (\n <WeblessAgentWidget\n indexId={manifest.indexId}\n customerId={manifest.customerId}\n runtimeOrigin={manifest.runtimeOrigin}\n placement={manifest.placement}\n defaultCollapsed\n registerPanelController\n />\n );\n}\n","import { DEFAULT_RUNTIME_ORIGIN, resolveAgentRuntimeConfig } from \"../runtime/config\";\nimport {\n DEFAULT_AGENT_PLACEMENT,\n normalizeAgentPlacement,\n type AgentPlacementConfig,\n} from \"../react/placement\";\n\nexport type { AgentPlacementConfig };\nexport type AgentMountStrategy = \"body\" | \"selector\" | \"script-parent\";\n\nexport type AgentTabVariant = AgentPlacementConfig[\"variant\"];\nexport type AgentTabSide = AgentPlacementConfig[\"side\"];\n\nexport type AgentTagManifest = {\n customerId: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: string;\n mount?: {\n selector?: string;\n strategy?: AgentMountStrategy;\n };\n placement?: Partial<AgentPlacementConfig>;\n};\n\nexport { DEFAULT_AGENT_PLACEMENT, normalizeAgentPlacement };\n\nexport function normalizeAgentTagManifest(manifest: AgentTagManifest) {\n const indexId = manifest.indexId.trim();\n if (!indexId) {\n throw new Error(\"Agent manifest requires indexId.\");\n }\n\n const customerId = manifest.customerId.trim();\n if (!customerId) {\n throw new Error(\"Agent manifest requires customerId.\");\n }\n\n const runtime = resolveAgentRuntimeConfig({\n indexId,\n runtimeOrigin: manifest.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN,\n });\n\n return {\n customerId,\n indexId,\n runtimeOrigin: runtime.origin,\n version: manifest.version?.trim() || \"published\",\n mount: {\n selector: manifest.mount?.selector?.trim(),\n strategy: manifest.mount?.strategy ?? \"body\",\n },\n placement: normalizeAgentPlacement(manifest.placement),\n };\n}\n\nexport type NormalizedAgentTagManifest = ReturnType<typeof normalizeAgentTagManifest>;\n"],"mappings":"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","names":["AgentWidget","jsx","AgentWidget"]}
|
|
1
|
+
{"version":3,"sources":["../src/embed/mount.tsx","../src/embed/AgentWidget.tsx","../src/embed/manifest.ts","../src/embed/iife-bootstrap.ts"],"sourcesContent":["import { createRoot, type Root } from \"react-dom/client\";\nimport { closeAgentPanel, openAgentPanel } from \"./controller\";\nimport { AgentWidget } from \"./AgentWidget\";\nimport {\n normalizeAgentTagManifest,\n type AgentTagManifest,\n type NormalizedAgentTagManifest,\n} from \"./manifest\";\n\nexport type AgentRuntimeHandle = {\n customerId: string;\n manifest: NormalizedAgentTagManifest;\n host: HTMLElement;\n root: Root;\n open: () => void;\n close: () => void;\n unmount: () => void;\n};\n\nconst mountedHandles = new Map<string, AgentRuntimeHandle>();\nlet latestCustomerId: string | null = null;\n\nfunction resolveMountHost(manifest: NormalizedAgentTagManifest, script?: HTMLScriptElement | null) {\n const strategy = manifest.mount.strategy ?? \"body\";\n\n if (strategy === \"script-parent\" && script?.parentElement instanceof HTMLElement) {\n return script.parentElement;\n }\n\n if (strategy === \"selector\" && manifest.mount.selector) {\n const target = document.querySelector(manifest.mount.selector);\n if (target instanceof HTMLElement) return target;\n }\n\n return document.body;\n}\n\nfunction createHost(customerId: string) {\n const host = document.createElement(\"div\");\n host.dataset.weblessAgentCustomerId = customerId;\n host.setAttribute(\"data-webless-agent\", customerId);\n return host;\n}\n\nexport function mountAgent(input: {\n manifest: AgentTagManifest;\n script?: HTMLScriptElement | null;\n}): AgentRuntimeHandle {\n const manifest = normalizeAgentTagManifest(input.manifest);\n const existing = mountedHandles.get(manifest.customerId);\n if (existing) {\n return existing;\n }\n\n const mountTarget = resolveMountHost(manifest, input.script ?? null);\n const host = createHost(manifest.customerId);\n mountTarget.append(host);\n\n const root = createRoot(host);\n root.render(<AgentWidget manifest={manifest} />);\n\n const handle: AgentRuntimeHandle = {\n customerId: manifest.customerId,\n manifest,\n host,\n root,\n open: () => {\n openAgentPanel(manifest.customerId);\n },\n close: () => {\n closeAgentPanel(manifest.customerId);\n },\n unmount: () => {\n root.unmount();\n host.remove();\n mountedHandles.delete(manifest.customerId);\n if (latestCustomerId === manifest.customerId) {\n latestCustomerId = null;\n }\n },\n };\n\n mountedHandles.set(manifest.customerId, handle);\n latestCustomerId = manifest.customerId;\n return handle;\n}\n\nexport function unmountAgent(customerId?: string) {\n const id = customerId ?? latestCustomerId;\n if (!id) return false;\n const handle = mountedHandles.get(id);\n if (!handle) return false;\n handle.unmount();\n return true;\n}\n\nexport function getMountedAgent(customerId?: string) {\n if (customerId) return mountedHandles.get(customerId) ?? null;\n if (latestCustomerId) return mountedHandles.get(latestCustomerId) ?? null;\n return mountedHandles.values().next().value ?? null;\n}\n\nexport function bootstrapAgent(manifest: AgentTagManifest, script?: HTMLScriptElement | null) {\n return mountAgent({ manifest, script });\n}\n","import { AgentWidget as WeblessAgentWidget } from \"../react/components/AgentWidget\";\nimport type { NormalizedAgentTagManifest } from \"./manifest\";\n\nexport function AgentWidget({ manifest }: { manifest: NormalizedAgentTagManifest }) {\n return (\n <WeblessAgentWidget\n indexId={manifest.indexId}\n customerId={manifest.customerId}\n version={manifest.version}\n runtimeOrigin={manifest.runtimeOrigin}\n placement={manifest.placement}\n defaultCollapsed\n registerPanelController\n />\n );\n}\n","import { DEFAULT_RUNTIME_ORIGIN, resolveAgentRuntimeConfig } from \"../runtime/config\";\nimport type { AgentIndexVersion } from \"../runtime/types\";\nimport {\n DEFAULT_AGENT_PLACEMENT,\n normalizeAgentPlacement,\n type AgentPlacementConfig,\n} from \"../react/placement\";\n\nexport type { AgentPlacementConfig };\nexport type AgentMountStrategy = \"body\" | \"selector\" | \"script-parent\";\n\nexport type AgentTabVariant = AgentPlacementConfig[\"variant\"];\nexport type AgentTabSide = AgentPlacementConfig[\"side\"];\n\nexport type AgentTagManifest = {\n customerId: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n mount?: {\n selector?: string;\n strategy?: AgentMountStrategy;\n };\n placement?: Partial<AgentPlacementConfig>;\n};\n\nexport { DEFAULT_AGENT_PLACEMENT, normalizeAgentPlacement };\n\nexport function normalizeAgentTagManifest(manifest: AgentTagManifest) {\n const indexId = manifest.indexId.trim();\n if (!indexId) {\n throw new Error(\"Agent manifest requires indexId.\");\n }\n\n const customerId = manifest.customerId.trim();\n if (!customerId) {\n throw new Error(\"Agent manifest requires customerId.\");\n }\n\n const version = manifest.version ?? \"published\";\n if (version !== \"published\" && version !== \"unpublished\") {\n throw new Error(\"Agent manifest version must be published or unpublished.\");\n }\n\n const runtime = resolveAgentRuntimeConfig({\n indexId,\n version,\n runtimeOrigin: manifest.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN,\n });\n\n return {\n customerId,\n indexId,\n runtimeOrigin: runtime.origin,\n version,\n mount: {\n selector: manifest.mount?.selector?.trim(),\n strategy: manifest.mount?.strategy ?? \"body\",\n },\n placement: normalizeAgentPlacement(manifest.placement),\n };\n}\n\nexport type NormalizedAgentTagManifest = ReturnType<typeof normalizeAgentTagManifest>;\n","import {\n getMountedAgent,\n mountAgent,\n unmountAgent,\n} from \"./mount\";\nimport type { AgentTagManifest } from \"./manifest\";\n\ndeclare global {\n interface Window {\n WeblessAgent?: WeblessAgentPublicApi;\n }\n}\n\nexport type WeblessAgentPublicApi = {\n mount: (options?: Partial<AgentTagManifest>) => ReturnType<typeof mountAgent>;\n unmount: (customerId?: string) => boolean;\n open: (customerId?: string) => void;\n close: (customerId?: string) => void;\n get: (customerId?: string) => ReturnType<typeof getMountedAgent>;\n};\n\nexport function createWeblessAgentPublicApi(manifest: AgentTagManifest): WeblessAgentPublicApi {\n const script = document.currentScript instanceof HTMLScriptElement ? document.currentScript : null;\n\n function mount(options: Partial<AgentTagManifest> = {}) {\n return mountAgent({\n manifest: {\n ...manifest,\n ...options,\n customerId: manifest.customerId,\n },\n script,\n });\n }\n\n function unmount(customerId?: string) {\n return unmountAgent(customerId ?? manifest.customerId);\n }\n\n function open(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.open();\n }\n\n function close(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.close();\n }\n\n function get(customerId?: string) {\n return getMountedAgent(customerId ?? manifest.customerId);\n }\n\n const api: WeblessAgentPublicApi = {\n mount,\n unmount,\n open,\n close,\n get,\n };\n\n window.WeblessAgent = api;\n\n void (async () => {\n try {\n mount();\n } catch (error) {\n console.error(\"[Webless] Agent mount failed\", error);\n }\n })();\n\n return api;\n}\n"],"mappings":"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","names":["AgentWidget","jsx","AgentWidget"]}
|
package/dist/index.cjs
CHANGED
|
@@ -37,22 +37,110 @@ __export(index_exports, {
|
|
|
37
37
|
module.exports = __toCommonJS(index_exports);
|
|
38
38
|
|
|
39
39
|
// src/runtime/client.ts
|
|
40
|
+
var import_client2 = require("eve/client");
|
|
41
|
+
|
|
42
|
+
// src/runtime/capability.ts
|
|
40
43
|
var import_client = require("eve/client");
|
|
44
|
+
var MAX_REFRESH_SKEW_MS = 3e4;
|
|
45
|
+
function isRecord(value) {
|
|
46
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
47
|
+
}
|
|
48
|
+
function parseBootstrapResponse(value, indexId, now) {
|
|
49
|
+
if (!isRecord(value) || value.apiVersion !== "webless.ai/agent-runtime-bootstrap/v1" || typeof value.accessToken !== "string" || !value.accessToken || typeof value.expiresAt !== "string" || !isRecord(value.identity) || value.identity.indexId !== indexId || typeof value.identity.revision !== "string" || !value.identity.revision || typeof value.identity.tenantId !== "string" || !value.identity.tenantId || typeof value.origin !== "string" || !value.origin || value.tokenType !== "Bearer" || typeof value.visitorSubject !== "string" || !value.visitorSubject) {
|
|
50
|
+
throw new Error("Agent Runtime returned an invalid access response.");
|
|
51
|
+
}
|
|
52
|
+
const expiresAt = Date.parse(value.expiresAt);
|
|
53
|
+
if (!Number.isFinite(expiresAt) || expiresAt <= now) {
|
|
54
|
+
throw new Error("Agent Runtime returned an expired access response.");
|
|
55
|
+
}
|
|
56
|
+
const refreshSkew = Math.min(MAX_REFRESH_SKEW_MS, Math.floor((expiresAt - now) / 10));
|
|
57
|
+
return {
|
|
58
|
+
accessToken: value.accessToken,
|
|
59
|
+
refreshAt: expiresAt - refreshSkew
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function readBootstrapError(response) {
|
|
63
|
+
const fallback = `Agent Runtime is unavailable (${response.status}).`;
|
|
64
|
+
try {
|
|
65
|
+
const value = await response.json();
|
|
66
|
+
return isRecord(value) && typeof value.error === "string" && value.error ? value.error : fallback;
|
|
67
|
+
} catch {
|
|
68
|
+
return fallback;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function createAgentRuntimeCapability(options) {
|
|
72
|
+
const fetchImplementation = options.fetchImplementation ?? fetch;
|
|
73
|
+
const now = options.now ?? Date.now;
|
|
74
|
+
let capability;
|
|
75
|
+
let pendingBootstrap;
|
|
76
|
+
const bootstrap = async () => {
|
|
77
|
+
const response = await fetchImplementation(`${options.runtimeOrigin}/webless/v1/bootstrap`, {
|
|
78
|
+
body: JSON.stringify({
|
|
79
|
+
clientSessionId: options.visitorSessionId,
|
|
80
|
+
indexId: options.indexId
|
|
81
|
+
}),
|
|
82
|
+
headers: { "content-type": "application/json" },
|
|
83
|
+
method: "POST"
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
throw new Error(await readBootstrapError(response));
|
|
87
|
+
}
|
|
88
|
+
let value;
|
|
89
|
+
try {
|
|
90
|
+
value = await response.json();
|
|
91
|
+
} catch {
|
|
92
|
+
throw new Error("Agent Runtime returned an invalid access response.");
|
|
93
|
+
}
|
|
94
|
+
return parseBootstrapResponse(value, options.indexId, now());
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
getAccessToken: async () => {
|
|
98
|
+
if (capability && capability.refreshAt > now()) {
|
|
99
|
+
return capability.accessToken;
|
|
100
|
+
}
|
|
101
|
+
pendingBootstrap ??= bootstrap().finally(() => {
|
|
102
|
+
pendingBootstrap = void 0;
|
|
103
|
+
});
|
|
104
|
+
capability = await pendingBootstrap;
|
|
105
|
+
return capability.accessToken;
|
|
106
|
+
},
|
|
107
|
+
invalidate: () => {
|
|
108
|
+
capability = void 0;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async function withCapabilityRefresh(capability, request) {
|
|
113
|
+
try {
|
|
114
|
+
return await request();
|
|
115
|
+
} catch (error) {
|
|
116
|
+
if (!(error instanceof import_client.ClientError) || error.status !== 401) {
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
capability.invalidate();
|
|
120
|
+
return await request();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
41
123
|
|
|
42
124
|
// src/runtime/config.ts
|
|
43
125
|
var DEFAULT_RUNTIME_ORIGIN = "https://runtime.staging.webless.ai";
|
|
44
126
|
var trimTrailingSlash = (value) => value.replace(/\/+$/, "");
|
|
45
|
-
function buildEveHost(origin, indexId) {
|
|
127
|
+
function buildEveHost(origin, indexId, version = "published") {
|
|
46
128
|
const base = trimTrailingSlash(origin);
|
|
47
|
-
|
|
129
|
+
const searchParams = new URLSearchParams({ indexId: indexId.trim() });
|
|
130
|
+
if (version === "unpublished") {
|
|
131
|
+
searchParams.set("version", version);
|
|
132
|
+
}
|
|
133
|
+
return `${base}?${searchParams.toString()}`;
|
|
48
134
|
}
|
|
49
135
|
function resolveAgentRuntimeConfig(input) {
|
|
50
136
|
const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);
|
|
51
137
|
const resolvedIndexId = input.indexId.trim();
|
|
138
|
+
const version = input.version ?? "published";
|
|
52
139
|
return {
|
|
53
140
|
origin,
|
|
54
141
|
indexId: resolvedIndexId,
|
|
55
|
-
|
|
142
|
+
version,
|
|
143
|
+
host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId, version) : origin
|
|
56
144
|
};
|
|
57
145
|
}
|
|
58
146
|
function agentHealthUrl(runtimeOrigin) {
|
|
@@ -73,7 +161,8 @@ function buildAgentStorageKeyPrefix(input) {
|
|
|
73
161
|
if (!indexId) {
|
|
74
162
|
throw new Error("indexId is required to build agent storage keys.");
|
|
75
163
|
}
|
|
76
|
-
|
|
164
|
+
const versionSuffix = input.version === "unpublished" ? ":unpublished" : "";
|
|
165
|
+
return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}${versionSuffix}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;
|
|
77
166
|
}
|
|
78
167
|
function createSessionId() {
|
|
79
168
|
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
@@ -147,13 +236,20 @@ function mapStepLabel(event) {
|
|
|
147
236
|
};
|
|
148
237
|
}
|
|
149
238
|
var AgentSession = class {
|
|
150
|
-
constructor(indexId, runtimeOrigin, visitorSessionId, storeOptions) {
|
|
239
|
+
constructor(indexId, version, runtimeOrigin, visitorSessionId, storeOptions) {
|
|
151
240
|
this.indexId = indexId;
|
|
241
|
+
this.version = version;
|
|
152
242
|
this.runtimeOrigin = runtimeOrigin;
|
|
153
243
|
this.visitorSessionId = visitorSessionId;
|
|
154
244
|
this.storeOptions = storeOptions;
|
|
245
|
+
this.capability = createAgentRuntimeCapability({
|
|
246
|
+
indexId,
|
|
247
|
+
runtimeOrigin,
|
|
248
|
+
visitorSessionId
|
|
249
|
+
});
|
|
155
250
|
}
|
|
156
251
|
indexId;
|
|
252
|
+
version;
|
|
157
253
|
runtimeOrigin;
|
|
158
254
|
visitorSessionId;
|
|
159
255
|
storeOptions;
|
|
@@ -162,6 +258,7 @@ var AgentSession = class {
|
|
|
162
258
|
session;
|
|
163
259
|
activeResponse;
|
|
164
260
|
renderedPrefix = "";
|
|
261
|
+
capability;
|
|
165
262
|
getActiveSessionId() {
|
|
166
263
|
return this.session?.state.sessionId ?? loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)?.sessionId;
|
|
167
264
|
}
|
|
@@ -184,6 +281,7 @@ var AgentSession = class {
|
|
|
184
281
|
ensureClient() {
|
|
185
282
|
const config = resolveAgentRuntimeConfig({
|
|
186
283
|
indexId: this.indexId,
|
|
284
|
+
version: this.version,
|
|
187
285
|
runtimeOrigin: this.runtimeOrigin
|
|
188
286
|
});
|
|
189
287
|
if (!config.indexId) {
|
|
@@ -193,7 +291,11 @@ var AgentSession = class {
|
|
|
193
291
|
return this.client;
|
|
194
292
|
}
|
|
195
293
|
this.reset();
|
|
196
|
-
this.client = new
|
|
294
|
+
this.client = new import_client2.Client({
|
|
295
|
+
auth: { bearer: () => this.capability.getAccessToken() },
|
|
296
|
+
host: config.host,
|
|
297
|
+
redirect: "error"
|
|
298
|
+
});
|
|
197
299
|
this.clientHost = config.host;
|
|
198
300
|
return this.client;
|
|
199
301
|
}
|
|
@@ -212,9 +314,13 @@ var AgentSession = class {
|
|
|
212
314
|
if (session) {
|
|
213
315
|
this.session = session;
|
|
214
316
|
try {
|
|
215
|
-
|
|
317
|
+
const activeSession = session;
|
|
318
|
+
response = await withCapabilityRefresh(
|
|
319
|
+
this.capability,
|
|
320
|
+
() => activeSession.send(message, { signal })
|
|
321
|
+
);
|
|
216
322
|
} catch (error) {
|
|
217
|
-
if (error instanceof
|
|
323
|
+
if (error instanceof import_client2.ClientError && error.status === 409 && error.code === "session_not_active") {
|
|
218
324
|
clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);
|
|
219
325
|
this.session = void 0;
|
|
220
326
|
session = void 0;
|
|
@@ -224,7 +330,10 @@ var AgentSession = class {
|
|
|
224
330
|
}
|
|
225
331
|
}
|
|
226
332
|
if (!response) {
|
|
227
|
-
const created = await
|
|
333
|
+
const created = await withCapabilityRefresh(
|
|
334
|
+
this.capability,
|
|
335
|
+
() => client.sessions.create({ message, signal })
|
|
336
|
+
);
|
|
228
337
|
response = created.response;
|
|
229
338
|
session = created.session;
|
|
230
339
|
this.session = session;
|
|
@@ -282,18 +391,25 @@ function createAgentClient(options) {
|
|
|
282
391
|
if (!indexId) {
|
|
283
392
|
throw new Error("indexId is required.");
|
|
284
393
|
}
|
|
285
|
-
const
|
|
394
|
+
const version = options.version ?? "published";
|
|
395
|
+
const runtimeOrigin = resolveAgentRuntimeConfig({
|
|
396
|
+
indexId,
|
|
397
|
+
runtimeOrigin: options.runtimeOrigin,
|
|
398
|
+
version
|
|
399
|
+
}).origin;
|
|
286
400
|
const storeOptions = {
|
|
287
401
|
storageKeyPrefix: options.storageKeyPrefix?.trim() || buildAgentStorageKeyPrefix({
|
|
288
402
|
customerId: options.customerId,
|
|
289
403
|
indexId,
|
|
404
|
+
version,
|
|
290
405
|
runtimeOrigin
|
|
291
406
|
})
|
|
292
407
|
};
|
|
293
408
|
const visitorSessionId = options.visitorSessionId?.trim() || getOrCreateVisitorSessionId(storeOptions);
|
|
294
|
-
const session = new AgentSession(indexId, runtimeOrigin, visitorSessionId, storeOptions);
|
|
409
|
+
const session = new AgentSession(indexId, version, runtimeOrigin, visitorSessionId, storeOptions);
|
|
295
410
|
return {
|
|
296
411
|
indexId,
|
|
412
|
+
version,
|
|
297
413
|
runtimeOrigin,
|
|
298
414
|
visitorSessionId,
|
|
299
415
|
sendTurn: (message, sendOptions) => session.sendTurn(
|
|
@@ -308,9 +424,9 @@ function createAgentClient(options) {
|
|
|
308
424
|
}
|
|
309
425
|
|
|
310
426
|
// src/runtime/errors.ts
|
|
311
|
-
var
|
|
427
|
+
var import_client3 = require("eve/client");
|
|
312
428
|
function formatAgentError(error) {
|
|
313
|
-
if (error instanceof
|
|
429
|
+
if (error instanceof import_client3.ClientError) {
|
|
314
430
|
if (error.status === 401 && error.code === "index_required") {
|
|
315
431
|
return "Missing indexId \u2014 pass a published index id to createAgentClient().";
|
|
316
432
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/runtime/client.ts","../src/runtime/config.ts","../src/runtime/session-store.ts","../src/runtime/errors.ts","../src/runtime/health.ts"],"sourcesContent":["export { createAgentClient } from \"./runtime/client\";\nexport {\n DEFAULT_RUNTIME_ORIGIN,\n agentHealthUrl,\n buildEveHost,\n resolveAgentRuntimeConfig,\n} from \"./runtime/config\";\nexport { formatAgentError } from \"./runtime/errors\";\nexport { pingAgentHealth } from \"./runtime/health\";\nexport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n clearVisitorSessionId,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n} from \"./runtime/session-store\";\nexport type { SessionStoreOptions } from \"./runtime/session-store\";\nexport type {\n AgentClient,\n AgentClientOptions,\n AgentHealthResult,\n AgentRuntimeConfig,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n PersistedAgentSession,\n} from \"./runtime/types\";\n","import {\n Client,\n ClientError,\n type ClientSession,\n type MessageResponse,\n type MessageStreamEvent,\n} from \"eve/client\";\nimport { resolveAgentRuntimeConfig } from \"./config\";\nimport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n type SessionStoreOptions,\n} from \"./session-store\";\nimport type {\n AgentClient,\n AgentClientOptions,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n} from \"./types\";\n\nfunction mapStepLabel(event: MessageStreamEvent): { label: string; detail?: string } | null {\n if (event.type !== \"step.started\") return null;\n const stepIndex = event.data.stepIndex;\n return {\n label: \"Model step running\",\n detail: typeof stepIndex === \"number\" ? `Step ${stepIndex + 1}` : undefined,\n };\n}\n\nclass AgentSession {\n private client: Client | undefined;\n private clientHost: string | undefined;\n private session: ClientSession | undefined;\n private activeResponse: MessageResponse | undefined;\n private renderedPrefix = \"\";\n\n constructor(\n private readonly indexId: string,\n private readonly runtimeOrigin: string,\n private readonly visitorSessionId: string,\n private readonly storeOptions: SessionStoreOptions,\n ) {}\n\n getActiveSessionId(): string | undefined {\n return (\n this.session?.state.sessionId ??\n loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)?.sessionId\n );\n }\n\n reset() {\n void this.activeResponse?.cancel().catch(() => {});\n this.activeResponse = undefined;\n this.session = undefined;\n this.renderedPrefix = \"\";\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n }\n\n private persistSessionCursor(session: ClientSession) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n session.state.streamIndex,\n this.storeOptions,\n );\n }\n\n private ensureClient(): Client {\n const config = resolveAgentRuntimeConfig({\n indexId: this.indexId,\n runtimeOrigin: this.runtimeOrigin,\n });\n if (!config.indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n if (this.client && this.clientHost === config.host) {\n return this.client;\n }\n\n this.reset();\n this.client = new Client({ host: config.host });\n this.clientHost = config.host;\n return this.client;\n }\n\n private attachPersistedSession(client: Client): ClientSession | undefined {\n const persisted = loadPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n if (!persisted?.sessionId) return undefined;\n\n this.renderedPrefix = \"\";\n return client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n }\n\n async sendTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers,\n ): Promise<string> {\n const client = this.ensureClient();\n let response: MessageResponse | undefined;\n let session = this.session ?? this.attachPersistedSession(client);\n\n if (session) {\n this.session = session;\n try {\n response = await session.send(message, { signal });\n } catch (error) {\n if (\n error instanceof ClientError &&\n error.status === 409 &&\n error.code === \"session_not_active\"\n ) {\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n this.session = undefined;\n session = undefined;\n } else {\n throw error;\n }\n }\n }\n\n if (!response) {\n const created = await client.sessions.create({ message, signal });\n response = created.response;\n session = created.session;\n this.session = session;\n this.renderedPrefix = \"\";\n this.persistSessionCursor(session);\n }\n\n this.activeResponse = response;\n let rendered = this.renderedPrefix;\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n\n const step = mapStepLabel(event);\n if (step) handlers.onStep?.(step.label, step.detail);\n\n if (event.type === \"message.appended\") {\n const { messageDelta, messageSoFar } = event.data;\n let delta = messageDelta;\n if (messageSoFar.startsWith(rendered)) {\n delta = messageSoFar.slice(rendered.length);\n rendered = messageSoFar;\n } else if (messageDelta) {\n rendered += messageDelta;\n }\n if (delta) handlers.onDelta(delta);\n }\n\n if (event.type === \"message.completed\") {\n handlers.onComplete?.();\n }\n\n if (event.type === \"session.failed\") {\n throw new Error(event.data.message || event.data.code);\n }\n }\n } finally {\n this.activeResponse = undefined;\n this.renderedPrefix = rendered;\n if (session) {\n this.persistSessionCursor(session);\n }\n }\n\n if (!rendered.trim() && !signal.aborted) {\n throw new Error(\"Empty response from runtime\");\n }\n\n if (signal.aborted) {\n await response.cancel().catch(() => {});\n }\n\n return rendered.trim();\n }\n\n cancelActive() {\n this.activeResponse?.cancel().catch(() => {});\n }\n}\n\nexport function createAgentClient(options: AgentClientOptions): AgentClient {\n const indexId = options.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n const runtimeOrigin = options.runtimeOrigin?.trim() || resolveAgentRuntimeConfig({ indexId }).origin;\n const storeOptions: SessionStoreOptions = {\n storageKeyPrefix:\n options.storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId: options.customerId,\n indexId,\n runtimeOrigin,\n }),\n };\n const visitorSessionId =\n options.visitorSessionId?.trim() || getOrCreateVisitorSessionId(storeOptions);\n\n const session = new AgentSession(indexId, runtimeOrigin, visitorSessionId, storeOptions);\n\n return {\n indexId,\n runtimeOrigin,\n visitorSessionId,\n sendTurn: (message, sendOptions: AgentSendTurnOptions) =>\n session.sendTurn(\n message,\n sendOptions.signal ?? new AbortController().signal,\n sendOptions.handlers,\n ),\n reset: () => session.reset(),\n cancelActive: () => session.cancelActive(),\n getActiveSessionId: () => session.getActiveSessionId(),\n };\n}\n","import type { AgentRuntimeConfig } from \"./types\";\n\nexport const DEFAULT_RUNTIME_ORIGIN = \"https://runtime.staging.webless.ai\";\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, \"\");\n\nexport function buildEveHost(origin: string, indexId: string): string {\n const base = trimTrailingSlash(origin);\n return `${base}?indexId=${encodeURIComponent(indexId.trim())}`;\n}\n\nexport function resolveAgentRuntimeConfig(input: {\n indexId: string;\n runtimeOrigin?: string;\n}): AgentRuntimeConfig {\n const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n const resolvedIndexId = input.indexId.trim();\n\n return {\n origin,\n indexId: resolvedIndexId,\n host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId) : origin,\n };\n}\n\nexport function agentHealthUrl(runtimeOrigin?: string): string {\n const origin = trimTrailingSlash(runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n return `${origin}/eve/v1/health`;\n}\n","import type { PersistedAgentSession } from \"./types\";\n\nconst DEFAULT_STORAGE_KEY_PREFIX = \"webless:agent\";\n\nexport type SessionStoreOptions = {\n storageKeyPrefix?: string;\n};\n\nfunction normalizeRuntimeOrigin(runtimeOrigin?: string) {\n const trimmed = runtimeOrigin?.trim();\n if (!trimmed) return \"_\";\n return trimmed.replace(/\\/+$/, \"\");\n}\n\nexport function buildAgentStorageKeyPrefix(input: {\n customerId?: string;\n indexId: string;\n runtimeOrigin?: string;\n}) {\n const customerId = input.customerId?.trim() || \"_\";\n const indexId = input.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required to build agent storage keys.\");\n }\n\n return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;\n}\n\nfunction createSessionId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `sess_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nfunction resolvePrefix(options?: SessionStoreOptions) {\n return options?.storageKeyPrefix?.trim() || DEFAULT_STORAGE_KEY_PREFIX;\n}\n\nexport function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string {\n const prefix = resolvePrefix(options);\n const visitorKey = `${prefix}:visitorSessionId`;\n\n if (typeof sessionStorage === \"undefined\") {\n return createSessionId();\n }\n\n const existing = sessionStorage.getItem(visitorKey)?.trim();\n if (existing) return existing;\n\n const next = createSessionId();\n sessionStorage.setItem(visitorKey, next);\n return next;\n}\n\nexport function clearVisitorSessionId(options?: SessionStoreOptions) {\n if (typeof sessionStorage === \"undefined\") return;\n\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(`${prefix}:visitorSessionId`);\n}\n\nfunction runtimeSessionIdKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:sessionId`;\n}\n\nfunction runtimeStreamIndexKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:streamIndex`;\n}\n\nexport function loadPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n): PersistedAgentSession | null {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return null;\n\n const prefix = resolvePrefix(options);\n const sessionId = sessionStorage.getItem(runtimeSessionIdKey(visitorSessionId, prefix))?.trim();\n if (!sessionId) return null;\n\n const rawIndex = sessionStorage.getItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n const streamIndex = rawIndex ? Number.parseInt(rawIndex, 10) : 0;\n\n return {\n sessionId,\n streamIndex: Number.isFinite(streamIndex) && streamIndex >= 0 ? streamIndex : 0,\n };\n}\n\nexport function savePersistedAgentSession(\n visitorSessionId: string,\n sessionId: string,\n streamIndex: number,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !sessionId.trim()) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeSessionIdKey(visitorSessionId, prefix), sessionId);\n sessionStorage.setItem(\n runtimeStreamIndexKey(visitorSessionId, prefix),\n String(Math.max(0, streamIndex)),\n );\n}\n\nexport function clearPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return;\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(runtimeSessionIdKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n}\n","import { ClientError } from \"eve/client\";\n\nexport function formatAgentError(error: unknown): string {\n if (error instanceof ClientError) {\n if (error.status === 401 && error.code === \"index_required\") {\n return \"Missing indexId — pass a published index id to createAgentClient().\";\n }\n if (error.status === 403 && error.code === \"agent_unavailable\") {\n return \"Agent unavailable for this index (disabled or unpublished).\";\n }\n if (error.status === 409 && error.code === \"session_not_active\") {\n return \"Session expired — send a new message to start again.\";\n }\n return error.message || `Runtime error (${error.status})`;\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return \"\";\n }\n if (error instanceof Error) return error.message;\n return \"Runtime request failed\";\n}\n","import { formatAgentError } from \"./errors\";\nimport { agentHealthUrl } from \"./config\";\nimport type { AgentHealthResult } from \"./types\";\n\nexport async function pingAgentHealth(\n runtimeOrigin?: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<AgentHealthResult> {\n const healthUrl = agentHealthUrl(runtimeOrigin);\n\n try {\n const response = await fetchImpl(healthUrl, {\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n });\n if (!response.ok) {\n return { ok: false, detail: `Health check failed (${response.status})` };\n }\n const payload = (await response.json()) as { status?: string; ok?: boolean };\n if (payload.ok === true) {\n return { ok: true, detail: payload.status ?? \"ready\" };\n }\n return { ok: false, detail: \"Runtime health response was not ok\" };\n } catch (error) {\n return { ok: false, detail: formatAgentError(error) || \"Health check failed\" };\n }\n}\n"],"mappings":"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","names":["import_client"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/runtime/client.ts","../src/runtime/capability.ts","../src/runtime/config.ts","../src/runtime/session-store.ts","../src/runtime/errors.ts","../src/runtime/health.ts"],"sourcesContent":["export { createAgentClient } from \"./runtime/client\";\nexport {\n DEFAULT_RUNTIME_ORIGIN,\n agentHealthUrl,\n buildEveHost,\n resolveAgentRuntimeConfig,\n} from \"./runtime/config\";\nexport { formatAgentError } from \"./runtime/errors\";\nexport { pingAgentHealth } from \"./runtime/health\";\nexport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n clearVisitorSessionId,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n} from \"./runtime/session-store\";\nexport type { SessionStoreOptions } from \"./runtime/session-store\";\nexport type {\n AgentClient,\n AgentClientOptions,\n AgentHealthResult,\n AgentIndexVersion,\n AgentRuntimeConfig,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n PersistedAgentSession,\n} from \"./runtime/types\";\n","import {\n Client,\n ClientError,\n type ClientSession,\n type MessageResponse,\n type MessageStreamEvent,\n} from \"eve/client\";\nimport {\n createAgentRuntimeCapability,\n type AgentRuntimeCapability,\n withCapabilityRefresh,\n} from \"./capability\";\nimport { resolveAgentRuntimeConfig } from \"./config\";\nimport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n type SessionStoreOptions,\n} from \"./session-store\";\nimport type {\n AgentClient,\n AgentClientOptions,\n AgentIndexVersion,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n} from \"./types\";\n\nfunction mapStepLabel(event: MessageStreamEvent): { label: string; detail?: string } | null {\n if (event.type !== \"step.started\") return null;\n const stepIndex = event.data.stepIndex;\n return {\n label: \"Model step running\",\n detail: typeof stepIndex === \"number\" ? `Step ${stepIndex + 1}` : undefined,\n };\n}\n\nclass AgentSession {\n private client: Client | undefined;\n private clientHost: string | undefined;\n private session: ClientSession | undefined;\n private activeResponse: MessageResponse | undefined;\n private renderedPrefix = \"\";\n private readonly capability: AgentRuntimeCapability;\n\n constructor(\n private readonly indexId: string,\n private readonly version: AgentIndexVersion,\n private readonly runtimeOrigin: string,\n private readonly visitorSessionId: string,\n private readonly storeOptions: SessionStoreOptions,\n ) {\n this.capability = createAgentRuntimeCapability({\n indexId,\n runtimeOrigin,\n visitorSessionId,\n });\n }\n\n getActiveSessionId(): string | undefined {\n return (\n this.session?.state.sessionId ??\n loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)?.sessionId\n );\n }\n\n reset() {\n void this.activeResponse?.cancel().catch(() => {});\n this.activeResponse = undefined;\n this.session = undefined;\n this.renderedPrefix = \"\";\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n }\n\n private persistSessionCursor(session: ClientSession) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n session.state.streamIndex,\n this.storeOptions,\n );\n }\n\n private ensureClient(): Client {\n const config = resolveAgentRuntimeConfig({\n indexId: this.indexId,\n version: this.version,\n runtimeOrigin: this.runtimeOrigin,\n });\n if (!config.indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n if (this.client && this.clientHost === config.host) {\n return this.client;\n }\n\n this.reset();\n this.client = new Client({\n auth: { bearer: () => this.capability.getAccessToken() },\n host: config.host,\n redirect: \"error\",\n });\n this.clientHost = config.host;\n return this.client;\n }\n\n private attachPersistedSession(client: Client): ClientSession | undefined {\n const persisted = loadPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n if (!persisted?.sessionId) return undefined;\n\n this.renderedPrefix = \"\";\n return client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n }\n\n async sendTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers,\n ): Promise<string> {\n const client = this.ensureClient();\n let response: MessageResponse | undefined;\n let session = this.session ?? this.attachPersistedSession(client);\n\n if (session) {\n this.session = session;\n try {\n const activeSession = session;\n response = await withCapabilityRefresh(this.capability, () =>\n activeSession.send(message, { signal }),\n );\n } catch (error) {\n if (\n error instanceof ClientError &&\n error.status === 409 &&\n error.code === \"session_not_active\"\n ) {\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n this.session = undefined;\n session = undefined;\n } else {\n throw error;\n }\n }\n }\n\n if (!response) {\n const created = await withCapabilityRefresh(this.capability, () =>\n client.sessions.create({ message, signal }),\n );\n response = created.response;\n session = created.session;\n this.session = session;\n this.renderedPrefix = \"\";\n this.persistSessionCursor(session);\n }\n\n this.activeResponse = response;\n let rendered = this.renderedPrefix;\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n\n const step = mapStepLabel(event);\n if (step) handlers.onStep?.(step.label, step.detail);\n\n if (event.type === \"message.appended\") {\n const { messageDelta, messageSoFar } = event.data;\n let delta = messageDelta;\n if (messageSoFar.startsWith(rendered)) {\n delta = messageSoFar.slice(rendered.length);\n rendered = messageSoFar;\n } else if (messageDelta) {\n rendered += messageDelta;\n }\n if (delta) handlers.onDelta(delta);\n }\n\n if (event.type === \"message.completed\") {\n handlers.onComplete?.();\n }\n\n if (event.type === \"session.failed\") {\n throw new Error(event.data.message || event.data.code);\n }\n }\n } finally {\n this.activeResponse = undefined;\n this.renderedPrefix = rendered;\n if (session) {\n this.persistSessionCursor(session);\n }\n }\n\n if (!rendered.trim() && !signal.aborted) {\n throw new Error(\"Empty response from runtime\");\n }\n\n if (signal.aborted) {\n await response.cancel().catch(() => {});\n }\n\n return rendered.trim();\n }\n\n cancelActive() {\n this.activeResponse?.cancel().catch(() => {});\n }\n}\n\nexport function createAgentClient(options: AgentClientOptions): AgentClient {\n const indexId = options.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n const version = options.version ?? \"published\";\n const runtimeOrigin = resolveAgentRuntimeConfig({\n indexId,\n runtimeOrigin: options.runtimeOrigin,\n version,\n }).origin;\n const storeOptions: SessionStoreOptions = {\n storageKeyPrefix:\n options.storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId: options.customerId,\n indexId,\n version,\n runtimeOrigin,\n }),\n };\n const visitorSessionId =\n options.visitorSessionId?.trim() || getOrCreateVisitorSessionId(storeOptions);\n\n const session = new AgentSession(indexId, version, runtimeOrigin, visitorSessionId, storeOptions);\n\n return {\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n sendTurn: (message, sendOptions: AgentSendTurnOptions) =>\n session.sendTurn(\n message,\n sendOptions.signal ?? new AbortController().signal,\n sendOptions.handlers,\n ),\n reset: () => session.reset(),\n cancelActive: () => session.cancelActive(),\n getActiveSessionId: () => session.getActiveSessionId(),\n };\n}\n","import { ClientError } from \"eve/client\";\n\ntype RuntimeCapability = {\n accessToken: string;\n refreshAt: number;\n};\n\ntype AgentRuntimeCapabilityOptions = {\n indexId: string;\n runtimeOrigin: string;\n visitorSessionId: string;\n fetchImplementation?: typeof fetch;\n now?: () => number;\n};\n\nconst MAX_REFRESH_SKEW_MS = 30_000;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseBootstrapResponse(value: unknown, indexId: string, now: number): RuntimeCapability {\n if (\n !isRecord(value) ||\n value.apiVersion !== \"webless.ai/agent-runtime-bootstrap/v1\" ||\n typeof value.accessToken !== \"string\" ||\n !value.accessToken ||\n typeof value.expiresAt !== \"string\" ||\n !isRecord(value.identity) ||\n value.identity.indexId !== indexId ||\n typeof value.identity.revision !== \"string\" ||\n !value.identity.revision ||\n typeof value.identity.tenantId !== \"string\" ||\n !value.identity.tenantId ||\n typeof value.origin !== \"string\" ||\n !value.origin ||\n value.tokenType !== \"Bearer\" ||\n typeof value.visitorSubject !== \"string\" ||\n !value.visitorSubject\n ) {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n\n const expiresAt = Date.parse(value.expiresAt);\n if (!Number.isFinite(expiresAt) || expiresAt <= now) {\n throw new Error(\"Agent Runtime returned an expired access response.\");\n }\n\n const refreshSkew = Math.min(MAX_REFRESH_SKEW_MS, Math.floor((expiresAt - now) / 10));\n return {\n accessToken: value.accessToken,\n refreshAt: expiresAt - refreshSkew,\n };\n}\n\nasync function readBootstrapError(response: Response): Promise<string> {\n const fallback = `Agent Runtime is unavailable (${response.status}).`;\n try {\n const value: unknown = await response.json();\n return isRecord(value) && typeof value.error === \"string\" && value.error\n ? value.error\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nexport function createAgentRuntimeCapability(options: AgentRuntimeCapabilityOptions) {\n const fetchImplementation = options.fetchImplementation ?? fetch;\n const now = options.now ?? Date.now;\n let capability: RuntimeCapability | undefined;\n let pendingBootstrap: Promise<RuntimeCapability> | undefined;\n\n const bootstrap = async (): Promise<RuntimeCapability> => {\n const response = await fetchImplementation(`${options.runtimeOrigin}/webless/v1/bootstrap`, {\n body: JSON.stringify({\n clientSessionId: options.visitorSessionId,\n indexId: options.indexId,\n }),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n });\n if (!response.ok) {\n throw new Error(await readBootstrapError(response));\n }\n\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n return parseBootstrapResponse(value, options.indexId, now());\n };\n\n return {\n getAccessToken: async (): Promise<string> => {\n if (capability && capability.refreshAt > now()) {\n return capability.accessToken;\n }\n\n pendingBootstrap ??= bootstrap().finally(() => {\n pendingBootstrap = undefined;\n });\n capability = await pendingBootstrap;\n return capability.accessToken;\n },\n invalidate: () => {\n capability = undefined;\n },\n };\n}\n\nexport type AgentRuntimeCapability = ReturnType<typeof createAgentRuntimeCapability>;\n\nexport async function withCapabilityRefresh<T>(\n capability: AgentRuntimeCapability,\n request: () => Promise<T>,\n): Promise<T> {\n try {\n return await request();\n } catch (error) {\n if (!(error instanceof ClientError) || error.status !== 401) {\n throw error;\n }\n capability.invalidate();\n return await request();\n }\n}\n","import type { AgentIndexVersion, AgentRuntimeConfig } from \"./types\";\n\nexport const DEFAULT_RUNTIME_ORIGIN = \"https://runtime.staging.webless.ai\";\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, \"\");\n\nexport function buildEveHost(\n origin: string,\n indexId: string,\n version: AgentIndexVersion = \"published\",\n): string {\n const base = trimTrailingSlash(origin);\n const searchParams = new URLSearchParams({ indexId: indexId.trim() });\n if (version === \"unpublished\") {\n searchParams.set(\"version\", version);\n }\n return `${base}?${searchParams.toString()}`;\n}\n\nexport function resolveAgentRuntimeConfig(input: {\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}): AgentRuntimeConfig {\n const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n const resolvedIndexId = input.indexId.trim();\n const version = input.version ?? \"published\";\n\n return {\n origin,\n indexId: resolvedIndexId,\n version,\n host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId, version) : origin,\n };\n}\n\nexport function agentHealthUrl(runtimeOrigin?: string): string {\n const origin = trimTrailingSlash(runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n return `${origin}/eve/v1/health`;\n}\n","import type { AgentIndexVersion, PersistedAgentSession } from \"./types\";\n\nconst DEFAULT_STORAGE_KEY_PREFIX = \"webless:agent\";\n\nexport type SessionStoreOptions = {\n storageKeyPrefix?: string;\n};\n\nfunction normalizeRuntimeOrigin(runtimeOrigin?: string) {\n const trimmed = runtimeOrigin?.trim();\n if (!trimmed) return \"_\";\n return trimmed.replace(/\\/+$/, \"\");\n}\n\nexport function buildAgentStorageKeyPrefix(input: {\n customerId?: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}) {\n const customerId = input.customerId?.trim() || \"_\";\n const indexId = input.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required to build agent storage keys.\");\n }\n\n const versionSuffix = input.version === \"unpublished\" ? \":unpublished\" : \"\";\n return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}${versionSuffix}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;\n}\n\nfunction createSessionId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `sess_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nfunction resolvePrefix(options?: SessionStoreOptions) {\n return options?.storageKeyPrefix?.trim() || DEFAULT_STORAGE_KEY_PREFIX;\n}\n\nexport function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string {\n const prefix = resolvePrefix(options);\n const visitorKey = `${prefix}:visitorSessionId`;\n\n if (typeof sessionStorage === \"undefined\") {\n return createSessionId();\n }\n\n const existing = sessionStorage.getItem(visitorKey)?.trim();\n if (existing) return existing;\n\n const next = createSessionId();\n sessionStorage.setItem(visitorKey, next);\n return next;\n}\n\nexport function clearVisitorSessionId(options?: SessionStoreOptions) {\n if (typeof sessionStorage === \"undefined\") return;\n\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(`${prefix}:visitorSessionId`);\n}\n\nfunction runtimeSessionIdKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:sessionId`;\n}\n\nfunction runtimeStreamIndexKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:streamIndex`;\n}\n\nexport function loadPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n): PersistedAgentSession | null {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return null;\n\n const prefix = resolvePrefix(options);\n const sessionId = sessionStorage.getItem(runtimeSessionIdKey(visitorSessionId, prefix))?.trim();\n if (!sessionId) return null;\n\n const rawIndex = sessionStorage.getItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n const streamIndex = rawIndex ? Number.parseInt(rawIndex, 10) : 0;\n\n return {\n sessionId,\n streamIndex: Number.isFinite(streamIndex) && streamIndex >= 0 ? streamIndex : 0,\n };\n}\n\nexport function savePersistedAgentSession(\n visitorSessionId: string,\n sessionId: string,\n streamIndex: number,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !sessionId.trim()) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeSessionIdKey(visitorSessionId, prefix), sessionId);\n sessionStorage.setItem(\n runtimeStreamIndexKey(visitorSessionId, prefix),\n String(Math.max(0, streamIndex)),\n );\n}\n\nexport function clearPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return;\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(runtimeSessionIdKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n}\n","import { ClientError } from \"eve/client\";\n\nexport function formatAgentError(error: unknown): string {\n if (error instanceof ClientError) {\n if (error.status === 401 && error.code === \"index_required\") {\n return \"Missing indexId — pass a published index id to createAgentClient().\";\n }\n if (error.status === 403 && error.code === \"agent_unavailable\") {\n return \"Agent unavailable for this index (disabled or unpublished).\";\n }\n if (error.status === 409 && error.code === \"session_not_active\") {\n return \"Session expired — send a new message to start again.\";\n }\n return error.message || `Runtime error (${error.status})`;\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return \"\";\n }\n if (error instanceof Error) return error.message;\n return \"Runtime request failed\";\n}\n","import { formatAgentError } from \"./errors\";\nimport { agentHealthUrl } from \"./config\";\nimport type { AgentHealthResult } from \"./types\";\n\nexport async function pingAgentHealth(\n runtimeOrigin?: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<AgentHealthResult> {\n const healthUrl = agentHealthUrl(runtimeOrigin);\n\n try {\n const response = await fetchImpl(healthUrl, {\n headers: { Accept: \"application/json\" },\n cache: \"no-store\",\n });\n if (!response.ok) {\n return { ok: false, detail: `Health check failed (${response.status})` };\n }\n const payload = (await response.json()) as { status?: string; ok?: boolean };\n if (payload.ok === true) {\n return { ok: true, detail: payload.status ?? \"ready\" };\n }\n return { ok: false, detail: \"Runtime health response was not ok\" };\n } catch (error) {\n return { ok: false, detail: formatAgentError(error) || \"Health check failed\" };\n }\n}\n"],"mappings":"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","names":["import_client","import_client"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
type AgentIndexVersion = "published" | "unpublished";
|
|
1
2
|
type AgentRuntimeConfig = {
|
|
2
3
|
origin: string;
|
|
3
4
|
indexId: string;
|
|
5
|
+
version: AgentIndexVersion;
|
|
4
6
|
host: string;
|
|
5
7
|
};
|
|
6
8
|
type AgentStreamHandlers = {
|
|
@@ -17,8 +19,10 @@ type PersistedAgentSession = {
|
|
|
17
19
|
streamIndex: number;
|
|
18
20
|
};
|
|
19
21
|
type AgentClientOptions = {
|
|
20
|
-
/**
|
|
22
|
+
/** Index id sent as `indexId` query param to the runtime. */
|
|
21
23
|
indexId: string;
|
|
24
|
+
/** Selects the published index by default, or its unpublished preview. */
|
|
25
|
+
version?: AgentIndexVersion;
|
|
22
26
|
/** Customer id used to isolate browser session storage when omitted from storageKeyPrefix. */
|
|
23
27
|
customerId?: string;
|
|
24
28
|
/** Agent runtime origin, e.g. `https://runtime.staging.webless.ai`. */
|
|
@@ -30,6 +34,7 @@ type AgentClientOptions = {
|
|
|
30
34
|
};
|
|
31
35
|
type AgentClient = {
|
|
32
36
|
readonly indexId: string;
|
|
37
|
+
readonly version: AgentIndexVersion;
|
|
33
38
|
readonly runtimeOrigin: string;
|
|
34
39
|
readonly visitorSessionId: string;
|
|
35
40
|
sendTurn: (message: string, options: AgentSendTurnOptions) => Promise<string>;
|
|
@@ -45,10 +50,11 @@ type AgentHealthResult = {
|
|
|
45
50
|
declare function createAgentClient(options: AgentClientOptions): AgentClient;
|
|
46
51
|
|
|
47
52
|
declare const DEFAULT_RUNTIME_ORIGIN = "https://runtime.staging.webless.ai";
|
|
48
|
-
declare function buildEveHost(origin: string, indexId: string): string;
|
|
53
|
+
declare function buildEveHost(origin: string, indexId: string, version?: AgentIndexVersion): string;
|
|
49
54
|
declare function resolveAgentRuntimeConfig(input: {
|
|
50
55
|
indexId: string;
|
|
51
56
|
runtimeOrigin?: string;
|
|
57
|
+
version?: AgentIndexVersion;
|
|
52
58
|
}): AgentRuntimeConfig;
|
|
53
59
|
declare function agentHealthUrl(runtimeOrigin?: string): string;
|
|
54
60
|
|
|
@@ -63,6 +69,7 @@ declare function buildAgentStorageKeyPrefix(input: {
|
|
|
63
69
|
customerId?: string;
|
|
64
70
|
indexId: string;
|
|
65
71
|
runtimeOrigin?: string;
|
|
72
|
+
version?: AgentIndexVersion;
|
|
66
73
|
}): string;
|
|
67
74
|
declare function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string;
|
|
68
75
|
declare function clearVisitorSessionId(options?: SessionStoreOptions): void;
|
|
@@ -70,4 +77,4 @@ declare function loadPersistedAgentSession(visitorSessionId: string, options?: S
|
|
|
70
77
|
declare function savePersistedAgentSession(visitorSessionId: string, sessionId: string, streamIndex: number, options?: SessionStoreOptions): void;
|
|
71
78
|
declare function clearPersistedAgentSession(visitorSessionId: string, options?: SessionStoreOptions): void;
|
|
72
79
|
|
|
73
|
-
export { type AgentClient, type AgentClientOptions, type AgentHealthResult, type AgentRuntimeConfig, type AgentSendTurnOptions, type AgentStreamHandlers, DEFAULT_RUNTIME_ORIGIN, type PersistedAgentSession, type SessionStoreOptions, agentHealthUrl, buildAgentStorageKeyPrefix, buildEveHost, clearPersistedAgentSession, clearVisitorSessionId, createAgentClient, formatAgentError, getOrCreateVisitorSessionId, loadPersistedAgentSession, pingAgentHealth, resolveAgentRuntimeConfig, savePersistedAgentSession };
|
|
80
|
+
export { type AgentClient, type AgentClientOptions, type AgentHealthResult, type AgentIndexVersion, type AgentRuntimeConfig, type AgentSendTurnOptions, type AgentStreamHandlers, DEFAULT_RUNTIME_ORIGIN, type PersistedAgentSession, type SessionStoreOptions, agentHealthUrl, buildAgentStorageKeyPrefix, buildEveHost, clearPersistedAgentSession, clearVisitorSessionId, createAgentClient, formatAgentError, getOrCreateVisitorSessionId, loadPersistedAgentSession, pingAgentHealth, resolveAgentRuntimeConfig, savePersistedAgentSession };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
type AgentIndexVersion = "published" | "unpublished";
|
|
1
2
|
type AgentRuntimeConfig = {
|
|
2
3
|
origin: string;
|
|
3
4
|
indexId: string;
|
|
5
|
+
version: AgentIndexVersion;
|
|
4
6
|
host: string;
|
|
5
7
|
};
|
|
6
8
|
type AgentStreamHandlers = {
|
|
@@ -17,8 +19,10 @@ type PersistedAgentSession = {
|
|
|
17
19
|
streamIndex: number;
|
|
18
20
|
};
|
|
19
21
|
type AgentClientOptions = {
|
|
20
|
-
/**
|
|
22
|
+
/** Index id sent as `indexId` query param to the runtime. */
|
|
21
23
|
indexId: string;
|
|
24
|
+
/** Selects the published index by default, or its unpublished preview. */
|
|
25
|
+
version?: AgentIndexVersion;
|
|
22
26
|
/** Customer id used to isolate browser session storage when omitted from storageKeyPrefix. */
|
|
23
27
|
customerId?: string;
|
|
24
28
|
/** Agent runtime origin, e.g. `https://runtime.staging.webless.ai`. */
|
|
@@ -30,6 +34,7 @@ type AgentClientOptions = {
|
|
|
30
34
|
};
|
|
31
35
|
type AgentClient = {
|
|
32
36
|
readonly indexId: string;
|
|
37
|
+
readonly version: AgentIndexVersion;
|
|
33
38
|
readonly runtimeOrigin: string;
|
|
34
39
|
readonly visitorSessionId: string;
|
|
35
40
|
sendTurn: (message: string, options: AgentSendTurnOptions) => Promise<string>;
|
|
@@ -45,10 +50,11 @@ type AgentHealthResult = {
|
|
|
45
50
|
declare function createAgentClient(options: AgentClientOptions): AgentClient;
|
|
46
51
|
|
|
47
52
|
declare const DEFAULT_RUNTIME_ORIGIN = "https://runtime.staging.webless.ai";
|
|
48
|
-
declare function buildEveHost(origin: string, indexId: string): string;
|
|
53
|
+
declare function buildEveHost(origin: string, indexId: string, version?: AgentIndexVersion): string;
|
|
49
54
|
declare function resolveAgentRuntimeConfig(input: {
|
|
50
55
|
indexId: string;
|
|
51
56
|
runtimeOrigin?: string;
|
|
57
|
+
version?: AgentIndexVersion;
|
|
52
58
|
}): AgentRuntimeConfig;
|
|
53
59
|
declare function agentHealthUrl(runtimeOrigin?: string): string;
|
|
54
60
|
|
|
@@ -63,6 +69,7 @@ declare function buildAgentStorageKeyPrefix(input: {
|
|
|
63
69
|
customerId?: string;
|
|
64
70
|
indexId: string;
|
|
65
71
|
runtimeOrigin?: string;
|
|
72
|
+
version?: AgentIndexVersion;
|
|
66
73
|
}): string;
|
|
67
74
|
declare function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string;
|
|
68
75
|
declare function clearVisitorSessionId(options?: SessionStoreOptions): void;
|
|
@@ -70,4 +77,4 @@ declare function loadPersistedAgentSession(visitorSessionId: string, options?: S
|
|
|
70
77
|
declare function savePersistedAgentSession(visitorSessionId: string, sessionId: string, streamIndex: number, options?: SessionStoreOptions): void;
|
|
71
78
|
declare function clearPersistedAgentSession(visitorSessionId: string, options?: SessionStoreOptions): void;
|
|
72
79
|
|
|
73
|
-
export { type AgentClient, type AgentClientOptions, type AgentHealthResult, type AgentRuntimeConfig, type AgentSendTurnOptions, type AgentStreamHandlers, DEFAULT_RUNTIME_ORIGIN, type PersistedAgentSession, type SessionStoreOptions, agentHealthUrl, buildAgentStorageKeyPrefix, buildEveHost, clearPersistedAgentSession, clearVisitorSessionId, createAgentClient, formatAgentError, getOrCreateVisitorSessionId, loadPersistedAgentSession, pingAgentHealth, resolveAgentRuntimeConfig, savePersistedAgentSession };
|
|
80
|
+
export { type AgentClient, type AgentClientOptions, type AgentHealthResult, type AgentIndexVersion, type AgentRuntimeConfig, type AgentSendTurnOptions, type AgentStreamHandlers, DEFAULT_RUNTIME_ORIGIN, type PersistedAgentSession, type SessionStoreOptions, agentHealthUrl, buildAgentStorageKeyPrefix, buildEveHost, clearPersistedAgentSession, clearVisitorSessionId, createAgentClient, formatAgentError, getOrCreateVisitorSessionId, loadPersistedAgentSession, pingAgentHealth, resolveAgentRuntimeConfig, savePersistedAgentSession };
|