@noodleseed/assistant 1.26.1 → 1.28.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.
Files changed (39) hide show
  1. package/README.md +25 -2
  2. package/dist/{app-view-element-CiFVNIke.d.cts → app-view-element-BjRkwNN1.d.cts} +1 -1
  3. package/dist/{app-view-element-C_ATXseu.d.ts → app-view-element-mXHvcAXc.d.ts} +1 -1
  4. package/dist/app-view.d.cts +3 -3
  5. package/dist/app-view.d.ts +3 -3
  6. package/dist/{appearance-C24W6BRj.d.cts → appearance-BpVu3lpk.d.cts} +1 -0
  7. package/dist/{appearance-C24W6BRj.d.ts → appearance-BpVu3lpk.d.ts} +1 -0
  8. package/dist/{chunk-OZVDL77T.js → chunk-QH7PL3GU.js} +52 -192
  9. package/dist/chunk-QH7PL3GU.js.map +1 -0
  10. package/dist/{chunk-FNXAVRL5.js → chunk-WJV4MJUR.js} +178 -4
  11. package/dist/chunk-WJV4MJUR.js.map +1 -0
  12. package/dist/{client-BheCOERq.d.ts → client-CPFw8tfo.d.ts} +1 -1
  13. package/dist/{client-BiMRVxjs.d.cts → client-_xivfs4q.d.cts} +1 -1
  14. package/dist/client.cjs +176 -3
  15. package/dist/client.cjs.map +1 -1
  16. package/dist/client.d.cts +2 -2
  17. package/dist/client.d.ts +2 -2
  18. package/dist/client.js +1 -1
  19. package/dist/embed.global.js +42 -50
  20. package/dist/index.cjs +225 -190
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +2 -2
  25. package/dist/react/client.cjs +176 -3
  26. package/dist/react/client.cjs.map +1 -1
  27. package/dist/react/client.d.cts +2 -2
  28. package/dist/react/client.d.ts +2 -2
  29. package/dist/react/client.js +1 -1
  30. package/dist/react.cjs +225 -190
  31. package/dist/react.cjs.map +1 -1
  32. package/dist/react.d.cts +3 -3
  33. package/dist/react.d.ts +3 -3
  34. package/dist/react.js +2 -2
  35. package/dist/server.d.cts +1 -1
  36. package/dist/server.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-FNXAVRL5.js.map +0 -1
  39. package/dist/chunk-OZVDL77T.js.map +0 -1
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { f as AssistantAppearance, c as AssistantContext, g as AssistantModelContextUpdate, b as AssistantPageContext, j as AssistantInteractionResponse } from './client-BiMRVxjs.cjs';
2
- export { k as AssistantAppearanceTheme, i as AssistantAppearanceWarning, e as AssistantErrorDetail, l as AssistantEvent, m as AssistantSurfaceAppearance, a as AssistantViewAvailableDetail, n as AssistantViewAvailableEvent } from './client-BiMRVxjs.cjs';
3
- import './appearance-C24W6BRj.cjs';
1
+ import { f as AssistantAppearance, c as AssistantContext, g as AssistantModelContextUpdate, b as AssistantPageContext, j as AssistantInteractionResponse } from './client-_xivfs4q.cjs';
2
+ export { k as AssistantAppearanceTheme, i as AssistantAppearanceWarning, e as AssistantErrorDetail, l as AssistantEvent, m as AssistantSurfaceAppearance, a as AssistantViewAvailableDetail, n as AssistantViewAvailableEvent } from './client-_xivfs4q.cjs';
3
+ import './appearance-BpVu3lpk.cjs';
4
4
  import 'ai';
5
5
 
6
6
  declare const ASSISTANT_TAG_NAME = "noodle-assistant";
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { f as AssistantAppearance, c as AssistantContext, g as AssistantModelContextUpdate, b as AssistantPageContext, j as AssistantInteractionResponse } from './client-BheCOERq.js';
2
- export { k as AssistantAppearanceTheme, i as AssistantAppearanceWarning, e as AssistantErrorDetail, l as AssistantEvent, m as AssistantSurfaceAppearance, a as AssistantViewAvailableDetail, n as AssistantViewAvailableEvent } from './client-BheCOERq.js';
3
- import './appearance-C24W6BRj.js';
1
+ import { f as AssistantAppearance, c as AssistantContext, g as AssistantModelContextUpdate, b as AssistantPageContext, j as AssistantInteractionResponse } from './client-CPFw8tfo.js';
2
+ export { k as AssistantAppearanceTheme, i as AssistantAppearanceWarning, e as AssistantErrorDetail, l as AssistantEvent, m as AssistantSurfaceAppearance, a as AssistantViewAvailableDetail, n as AssistantViewAvailableEvent } from './client-CPFw8tfo.js';
3
+ import './appearance-BpVu3lpk.js';
4
4
  import 'ai';
5
5
 
6
6
  declare const ASSISTANT_TAG_NAME = "noodle-assistant";
package/dist/index.js CHANGED
@@ -2,9 +2,9 @@ import {
2
2
  ASSISTANT_TAG_NAME,
3
3
  NoodleAssistantElement,
4
4
  registerNoodleAssistant
5
- } from "./chunk-OZVDL77T.js";
5
+ } from "./chunk-QH7PL3GU.js";
6
6
  import "./chunk-XKTUXFGX.js";
7
- import "./chunk-FNXAVRL5.js";
7
+ import "./chunk-WJV4MJUR.js";
8
8
  import "./chunk-P223CYPO.js";
9
9
  import "./chunk-3YYTUJPJ.js";
10
10
  import "./chunk-5FUTL2UF.js";
@@ -22904,6 +22904,178 @@ function isRecord(value) {
22904
22904
  return typeof value === "object" && value !== null && !Array.isArray(value);
22905
22905
  }
22906
22906
 
22907
+ // src/assistant-configuration-schema.ts
22908
+ var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
22909
+ var resolvedBorderColorSchema = external_exports.union([
22910
+ hexColorSchema,
22911
+ external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
22912
+ ]);
22913
+ var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
22914
+ var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
22915
+ var brandAssetSchema = external_exports.object({
22916
+ uri: browserAssetUrlSchema,
22917
+ darkUri: browserAssetUrlSchema.optional(),
22918
+ alt: external_exports.string().trim().min(1).max(240)
22919
+ }).strict();
22920
+ var brandThemeSchema = external_exports.object({
22921
+ surface: hexColorSchema.optional(),
22922
+ surfaceRaised: hexColorSchema.optional(),
22923
+ surfaceMuted: hexColorSchema.optional(),
22924
+ text: hexColorSchema.optional(),
22925
+ textMuted: hexColorSchema.optional(),
22926
+ accent: hexColorSchema.optional(),
22927
+ accentText: hexColorSchema.optional(),
22928
+ link: hexColorSchema.optional(),
22929
+ border: resolvedBorderColorSchema.optional(),
22930
+ borderStrong: resolvedBorderColorSchema.optional(),
22931
+ focus: hexColorSchema.optional(),
22932
+ success: hexColorSchema.optional(),
22933
+ warning: hexColorSchema.optional(),
22934
+ danger: hexColorSchema.optional(),
22935
+ code: hexColorSchema.optional()
22936
+ }).strict();
22937
+ var brandingSchema = external_exports.object({
22938
+ name: external_exports.string().trim().min(1).max(160).optional(),
22939
+ accent: hexColorSchema.optional(),
22940
+ surface: hexColorSchema.optional(),
22941
+ surfaceDark: hexColorSchema.optional(),
22942
+ logo: brandAssetSchema.optional(),
22943
+ mark: brandAssetSchema.optional(),
22944
+ avatar: brandAssetSchema.optional(),
22945
+ theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
22946
+ radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
22947
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
22948
+ typography: external_exports.enum(["system", "serif", "mono"]).optional(),
22949
+ colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
22950
+ }).strict();
22951
+ var labelsSchema = external_exports.object({
22952
+ welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
22953
+ welcomeMessage: external_exports.string().max(1e3).optional(),
22954
+ launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
22955
+ composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
22956
+ thinking: external_exports.string().trim().min(1).max(80).optional(),
22957
+ send: external_exports.string().trim().min(1).max(80).optional(),
22958
+ stop: external_exports.string().trim().min(1).max(80).optional(),
22959
+ close: external_exports.string().trim().min(1).max(80).optional(),
22960
+ open: external_exports.string().trim().min(1).max(80).optional(),
22961
+ confirm: external_exports.string().trim().min(1).max(80).optional(),
22962
+ decline: external_exports.string().trim().min(1).max(80).optional(),
22963
+ cancel: external_exports.string().trim().min(1).max(80).optional(),
22964
+ confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
22965
+ additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
22966
+ redacted: external_exports.string().trim().min(1).max(120).optional(),
22967
+ completed: external_exports.string().trim().min(1).max(80).optional(),
22968
+ stopped: external_exports.string().trim().min(1).max(80).optional(),
22969
+ copy: external_exports.string().trim().min(1).max(80).optional(),
22970
+ newMessages: external_exports.string().trim().min(1).max(80).optional(),
22971
+ reconnect: external_exports.string().trim().min(1).max(80).optional(),
22972
+ newConversation: external_exports.string().trim().min(1).max(80).optional(),
22973
+ retry: external_exports.string().trim().min(1).max(80).optional(),
22974
+ unavailable: external_exports.string().trim().min(1).max(240).optional(),
22975
+ sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
22976
+ sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
22977
+ sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
22978
+ sessionReady: external_exports.string().trim().min(1).max(120).optional(),
22979
+ sessionError: external_exports.string().trim().min(1).max(120).optional(),
22980
+ signInHeading: external_exports.string().trim().min(1).max(120).optional(),
22981
+ signInBody: external_exports.string().max(240).optional(),
22982
+ signInAction: external_exports.string().trim().min(1).max(80).optional(),
22983
+ signUpAction: external_exports.string().trim().min(1).max(80).optional()
22984
+ }).strict();
22985
+ var presentationSchema = external_exports.object({
22986
+ panel: external_exports.object({
22987
+ surface: external_exports.enum(["solid", "glass"]).optional(),
22988
+ elevation: external_exports.enum(["soft", "dramatic"]).optional(),
22989
+ border: external_exports.enum(["subtle", "strong"]).optional(),
22990
+ radius: external_exports.number().int().min(0).max(64).optional()
22991
+ }).strict().optional(),
22992
+ launcher: external_exports.object({
22993
+ style: external_exports.enum(["pill", "bubble"]).optional(),
22994
+ icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
22995
+ size: external_exports.enum(["md", "lg"]).optional(),
22996
+ status: external_exports.enum(["none", "session"]).optional(),
22997
+ effect: external_exports.enum(["none", "pulse"]).optional()
22998
+ }).strict().optional(),
22999
+ header: external_exports.object({
23000
+ mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
23001
+ badge: external_exports.object({
23002
+ text: external_exports.string().trim().min(1).max(80),
23003
+ tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
23004
+ indicator: external_exports.boolean().optional()
23005
+ }).strict().optional()
23006
+ }).strict().optional(),
23007
+ composer: external_exports.object({
23008
+ leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
23009
+ sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
23010
+ shape: external_exports.enum(["rounded", "pill"]).optional()
23011
+ }).strict().optional(),
23012
+ messages: external_exports.object({
23013
+ userStyle: external_exports.enum(["bubble", "accent"]).optional(),
23014
+ assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
23015
+ }).strict().optional()
23016
+ }).strict();
23017
+ var assistantUiSchema = external_exports.object({
23018
+ theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
23019
+ layout: external_exports.object({
23020
+ mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
23021
+ position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
23022
+ panelWidth: external_exports.number().int().min(280).max(1200).optional(),
23023
+ panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
23024
+ panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
23025
+ edgeOffset: external_exports.number().int().min(0).max(96).optional(),
23026
+ zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
23027
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
23028
+ mobileFullscreen: external_exports.boolean().optional()
23029
+ }).strict().optional(),
23030
+ behavior: external_exports.object({
23031
+ startOpen: external_exports.boolean().optional(),
23032
+ closeOnEscape: external_exports.boolean().optional(),
23033
+ closeOnOutsideClick: external_exports.boolean().optional(),
23034
+ showLauncher: external_exports.boolean().optional(),
23035
+ showHeader: external_exports.boolean().optional(),
23036
+ showAvatars: external_exports.boolean().optional(),
23037
+ showTimestamps: external_exports.boolean().optional(),
23038
+ showPoweredBy: external_exports.boolean().optional(),
23039
+ showConfirmationDetails: external_exports.boolean().optional()
23040
+ }).strict().optional(),
23041
+ labels: labelsSchema.optional(),
23042
+ presentation: presentationSchema.optional(),
23043
+ suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
23044
+ privacyUrl: httpsUrlSchema.optional(),
23045
+ termsUrl: httpsUrlSchema.optional(),
23046
+ locale: external_exports.string().trim().min(2).max(35).optional(),
23047
+ direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
23048
+ }).strict();
23049
+ var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
23050
+ function parseAssistantConfiguration(value) {
23051
+ const parsed = assistantConfigurationSchema.safeParse(value);
23052
+ return parsed.success ? parsed.data : void 0;
23053
+ }
23054
+ function isHttpsUrl(value) {
23055
+ try {
23056
+ return new URL(value).protocol === "https:";
23057
+ } catch {
23058
+ return false;
23059
+ }
23060
+ }
23061
+ function isSecureBrowserAssetUrl(value) {
23062
+ try {
23063
+ const url2 = new URL(value);
23064
+ if (url2.protocol === "https:") return true;
23065
+ if (url2.protocol !== "http:") return false;
23066
+ return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
23067
+ } catch {
23068
+ return false;
23069
+ }
23070
+ }
23071
+ function isBoundedRgbaColor(value) {
23072
+ const match = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0(?:\.\d{1,6})?|1(?:\.0{1,6})?)\s*\)$/.exec(
23073
+ value
23074
+ );
23075
+ if (match === null) return false;
23076
+ return match.slice(1, 4).every((channel) => Number(channel) <= 255);
23077
+ }
23078
+
22907
23079
  // src/client-errors.ts
22908
23080
  async function refusalCode(response) {
22909
23081
  try {
@@ -22937,6 +23109,7 @@ function parseSession(value) {
22937
23109
  if (typeof value.token !== "string" || typeof value.expiresAt !== "string" || typeof value.endpoints.turns !== "string" || typeof value.endpoints.toolConfirmations !== "string" || interactions !== void 0 && typeof interactions !== "string" || apps !== void 0 && typeof apps !== "string" || sandbox !== void 0 && typeof sandbox !== "string" || transcript !== void 0 && typeof transcript !== "string") {
22938
23110
  throw clientError("session_failed", "Assistant session response is invalid", true);
22939
23111
  }
23112
+ const configuration = parseAssistantConfiguration(value.configuration);
22940
23113
  return {
22941
23114
  token: value.token,
22942
23115
  expiresAt: value.expiresAt,
@@ -22948,7 +23121,7 @@ function parseSession(value) {
22948
23121
  ...typeof sandbox === "string" ? { sandbox } : {},
22949
23122
  ...typeof transcript === "string" ? { transcript } : {}
22950
23123
  },
22951
- ...isRecord2(value.configuration) ? { configuration: value.configuration } : {},
23124
+ ...configuration === void 0 ? {} : { configuration },
22952
23125
  ...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
22953
23126
  };
22954
23127
  }
@@ -23042,9 +23215,9 @@ function toAssistantClientEvent(event) {
23042
23215
  return { event: "unrecognized", data: { name: event.event, payload: value } };
23043
23216
  }
23044
23217
  function isViewAvailableDetail(value) {
23045
- return hasString(value, "id") && hasString(value, "tool") && typeof value.resourceUri === "string" && value.resourceUri.startsWith("ui://") && hasOptionalString(value.title) && (value.replayed === void 0 || value.replayed === true) && isJsonValue(value.result, 0) && hasOptionalJson(value.arguments) && hasOptionalString(value.html) && (value.resourceMeta === void 0 || isRecord3(value.resourceMeta)) && (value.allowedOpenDomains === void 0 || Array.isArray(value.allowedOpenDomains) && value.allowedOpenDomains.every(isHttpsUrl)) && hasOptionalTurnId(value);
23218
+ return hasString(value, "id") && hasString(value, "tool") && typeof value.resourceUri === "string" && value.resourceUri.startsWith("ui://") && hasOptionalString(value.title) && (value.replayed === void 0 || value.replayed === true) && isJsonValue(value.result, 0) && hasOptionalJson(value.arguments) && hasOptionalString(value.html) && (value.resourceMeta === void 0 || isRecord3(value.resourceMeta)) && (value.allowedOpenDomains === void 0 || Array.isArray(value.allowedOpenDomains) && value.allowedOpenDomains.every(isHttpsUrl2)) && hasOptionalTurnId(value);
23046
23219
  }
23047
- function isHttpsUrl(value) {
23220
+ function isHttpsUrl2(value) {
23048
23221
  if (typeof value !== "string") return false;
23049
23222
  try {
23050
23223
  return new URL(value).protocol === "https:";