@noodleseed/assistant 1.26.1 → 1.27.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-2A3ZEYZV.js} +51 -191
  9. package/dist/chunk-2A3ZEYZV.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 +41 -49
  20. package/dist/index.cjs +224 -189
  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 +224 -189
  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
@@ -1,4 +1,4 @@
1
- import { A as AssistantConfiguration } from './appearance-C24W6BRj.js';
1
+ import { A as AssistantConfiguration } from './appearance-BpVu3lpk.js';
2
2
  import { ChatStatus, UIMessage } from 'ai';
3
3
 
4
4
  interface AssistantSurfaceAppearance {
@@ -1,4 +1,4 @@
1
- import { A as AssistantConfiguration } from './appearance-C24W6BRj.cjs';
1
+ import { A as AssistantConfiguration } from './appearance-BpVu3lpk.cjs';
2
2
  import { ChatStatus, UIMessage } from 'ai';
3
3
 
4
4
  interface AssistantSurfaceAppearance {
package/dist/client.cjs CHANGED
@@ -22903,6 +22903,178 @@ function isRecord(value) {
22903
22903
  return typeof value === "object" && value !== null && !Array.isArray(value);
22904
22904
  }
22905
22905
 
22906
+ // src/assistant-configuration-schema.ts
22907
+ var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
22908
+ var resolvedBorderColorSchema = external_exports.union([
22909
+ hexColorSchema,
22910
+ external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
22911
+ ]);
22912
+ var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
22913
+ var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
22914
+ var brandAssetSchema = external_exports.object({
22915
+ uri: browserAssetUrlSchema,
22916
+ darkUri: browserAssetUrlSchema.optional(),
22917
+ alt: external_exports.string().trim().min(1).max(240)
22918
+ }).strict();
22919
+ var brandThemeSchema = external_exports.object({
22920
+ surface: hexColorSchema.optional(),
22921
+ surfaceRaised: hexColorSchema.optional(),
22922
+ surfaceMuted: hexColorSchema.optional(),
22923
+ text: hexColorSchema.optional(),
22924
+ textMuted: hexColorSchema.optional(),
22925
+ accent: hexColorSchema.optional(),
22926
+ accentText: hexColorSchema.optional(),
22927
+ link: hexColorSchema.optional(),
22928
+ border: resolvedBorderColorSchema.optional(),
22929
+ borderStrong: resolvedBorderColorSchema.optional(),
22930
+ focus: hexColorSchema.optional(),
22931
+ success: hexColorSchema.optional(),
22932
+ warning: hexColorSchema.optional(),
22933
+ danger: hexColorSchema.optional(),
22934
+ code: hexColorSchema.optional()
22935
+ }).strict();
22936
+ var brandingSchema = external_exports.object({
22937
+ name: external_exports.string().trim().min(1).max(160).optional(),
22938
+ accent: hexColorSchema.optional(),
22939
+ surface: hexColorSchema.optional(),
22940
+ surfaceDark: hexColorSchema.optional(),
22941
+ logo: brandAssetSchema.optional(),
22942
+ mark: brandAssetSchema.optional(),
22943
+ avatar: brandAssetSchema.optional(),
22944
+ theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
22945
+ radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
22946
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
22947
+ typography: external_exports.enum(["system", "serif", "mono"]).optional(),
22948
+ colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
22949
+ }).strict();
22950
+ var labelsSchema = external_exports.object({
22951
+ welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
22952
+ welcomeMessage: external_exports.string().max(1e3).optional(),
22953
+ launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
22954
+ composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
22955
+ thinking: external_exports.string().trim().min(1).max(80).optional(),
22956
+ send: external_exports.string().trim().min(1).max(80).optional(),
22957
+ stop: external_exports.string().trim().min(1).max(80).optional(),
22958
+ close: external_exports.string().trim().min(1).max(80).optional(),
22959
+ open: external_exports.string().trim().min(1).max(80).optional(),
22960
+ confirm: external_exports.string().trim().min(1).max(80).optional(),
22961
+ decline: external_exports.string().trim().min(1).max(80).optional(),
22962
+ cancel: external_exports.string().trim().min(1).max(80).optional(),
22963
+ confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
22964
+ additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
22965
+ redacted: external_exports.string().trim().min(1).max(120).optional(),
22966
+ completed: external_exports.string().trim().min(1).max(80).optional(),
22967
+ stopped: external_exports.string().trim().min(1).max(80).optional(),
22968
+ copy: external_exports.string().trim().min(1).max(80).optional(),
22969
+ newMessages: external_exports.string().trim().min(1).max(80).optional(),
22970
+ reconnect: external_exports.string().trim().min(1).max(80).optional(),
22971
+ newConversation: external_exports.string().trim().min(1).max(80).optional(),
22972
+ retry: external_exports.string().trim().min(1).max(80).optional(),
22973
+ unavailable: external_exports.string().trim().min(1).max(240).optional(),
22974
+ sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
22975
+ sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
22976
+ sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
22977
+ sessionReady: external_exports.string().trim().min(1).max(120).optional(),
22978
+ sessionError: external_exports.string().trim().min(1).max(120).optional(),
22979
+ signInHeading: external_exports.string().trim().min(1).max(120).optional(),
22980
+ signInBody: external_exports.string().max(240).optional(),
22981
+ signInAction: external_exports.string().trim().min(1).max(80).optional(),
22982
+ signUpAction: external_exports.string().trim().min(1).max(80).optional()
22983
+ }).strict();
22984
+ var presentationSchema = external_exports.object({
22985
+ panel: external_exports.object({
22986
+ surface: external_exports.enum(["solid", "glass"]).optional(),
22987
+ elevation: external_exports.enum(["soft", "dramatic"]).optional(),
22988
+ border: external_exports.enum(["subtle", "strong"]).optional(),
22989
+ radius: external_exports.number().int().min(0).max(64).optional()
22990
+ }).strict().optional(),
22991
+ launcher: external_exports.object({
22992
+ style: external_exports.enum(["pill", "bubble"]).optional(),
22993
+ icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
22994
+ size: external_exports.enum(["md", "lg"]).optional(),
22995
+ status: external_exports.enum(["none", "session"]).optional(),
22996
+ effect: external_exports.enum(["none", "pulse"]).optional()
22997
+ }).strict().optional(),
22998
+ header: external_exports.object({
22999
+ mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
23000
+ badge: external_exports.object({
23001
+ text: external_exports.string().trim().min(1).max(80),
23002
+ tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
23003
+ indicator: external_exports.boolean().optional()
23004
+ }).strict().optional()
23005
+ }).strict().optional(),
23006
+ composer: external_exports.object({
23007
+ leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
23008
+ sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
23009
+ shape: external_exports.enum(["rounded", "pill"]).optional()
23010
+ }).strict().optional(),
23011
+ messages: external_exports.object({
23012
+ userStyle: external_exports.enum(["bubble", "accent"]).optional(),
23013
+ assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
23014
+ }).strict().optional()
23015
+ }).strict();
23016
+ var assistantUiSchema = external_exports.object({
23017
+ theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
23018
+ layout: external_exports.object({
23019
+ mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
23020
+ position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
23021
+ panelWidth: external_exports.number().int().min(280).max(1200).optional(),
23022
+ panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
23023
+ panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
23024
+ edgeOffset: external_exports.number().int().min(0).max(96).optional(),
23025
+ zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
23026
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
23027
+ mobileFullscreen: external_exports.boolean().optional()
23028
+ }).strict().optional(),
23029
+ behavior: external_exports.object({
23030
+ startOpen: external_exports.boolean().optional(),
23031
+ closeOnEscape: external_exports.boolean().optional(),
23032
+ closeOnOutsideClick: external_exports.boolean().optional(),
23033
+ showLauncher: external_exports.boolean().optional(),
23034
+ showHeader: external_exports.boolean().optional(),
23035
+ showAvatars: external_exports.boolean().optional(),
23036
+ showTimestamps: external_exports.boolean().optional(),
23037
+ showPoweredBy: external_exports.boolean().optional(),
23038
+ showConfirmationDetails: external_exports.boolean().optional()
23039
+ }).strict().optional(),
23040
+ labels: labelsSchema.optional(),
23041
+ presentation: presentationSchema.optional(),
23042
+ suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
23043
+ privacyUrl: httpsUrlSchema.optional(),
23044
+ termsUrl: httpsUrlSchema.optional(),
23045
+ locale: external_exports.string().trim().min(2).max(35).optional(),
23046
+ direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
23047
+ }).strict();
23048
+ var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
23049
+ function parseAssistantConfiguration(value) {
23050
+ const parsed = assistantConfigurationSchema.safeParse(value);
23051
+ return parsed.success ? parsed.data : void 0;
23052
+ }
23053
+ function isHttpsUrl(value) {
23054
+ try {
23055
+ return new URL(value).protocol === "https:";
23056
+ } catch {
23057
+ return false;
23058
+ }
23059
+ }
23060
+ function isSecureBrowserAssetUrl(value) {
23061
+ try {
23062
+ const url2 = new URL(value);
23063
+ if (url2.protocol === "https:") return true;
23064
+ if (url2.protocol !== "http:") return false;
23065
+ return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
23066
+ } catch {
23067
+ return false;
23068
+ }
23069
+ }
23070
+ function isBoundedRgbaColor(value) {
23071
+ 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(
23072
+ value
23073
+ );
23074
+ if (match === null) return false;
23075
+ return match.slice(1, 4).every((channel) => Number(channel) <= 255);
23076
+ }
23077
+
22906
23078
  // src/client-errors.ts
22907
23079
  async function refusalCode(response) {
22908
23080
  try {
@@ -22936,6 +23108,7 @@ function parseSession(value) {
22936
23108
  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") {
22937
23109
  throw clientError("session_failed", "Assistant session response is invalid", true);
22938
23110
  }
23111
+ const configuration = parseAssistantConfiguration(value.configuration);
22939
23112
  return {
22940
23113
  token: value.token,
22941
23114
  expiresAt: value.expiresAt,
@@ -22947,7 +23120,7 @@ function parseSession(value) {
22947
23120
  ...typeof sandbox === "string" ? { sandbox } : {},
22948
23121
  ...typeof transcript === "string" ? { transcript } : {}
22949
23122
  },
22950
- ...isRecord2(value.configuration) ? { configuration: value.configuration } : {},
23123
+ ...configuration === void 0 ? {} : { configuration },
22951
23124
  ...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
22952
23125
  };
22953
23126
  }
@@ -23041,9 +23214,9 @@ function toAssistantClientEvent(event) {
23041
23214
  return { event: "unrecognized", data: { name: event.event, payload: value } };
23042
23215
  }
23043
23216
  function isViewAvailableDetail(value) {
23044
- 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);
23217
+ 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);
23045
23218
  }
23046
- function isHttpsUrl(value) {
23219
+ function isHttpsUrl2(value) {
23047
23220
  if (typeof value !== "string") return false;
23048
23221
  try {
23049
23222
  return new URL(value).protocol === "https:";