@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
@@ -4495,6 +4495,178 @@ function isRecord(value) {
4495
4495
  return typeof value === "object" && value !== null && !Array.isArray(value);
4496
4496
  }
4497
4497
 
4498
+ // src/assistant-configuration-schema.ts
4499
+ var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
4500
+ var resolvedBorderColorSchema = external_exports.union([
4501
+ hexColorSchema,
4502
+ external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
4503
+ ]);
4504
+ var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
4505
+ var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
4506
+ var brandAssetSchema = external_exports.object({
4507
+ uri: browserAssetUrlSchema,
4508
+ darkUri: browserAssetUrlSchema.optional(),
4509
+ alt: external_exports.string().trim().min(1).max(240)
4510
+ }).strict();
4511
+ var brandThemeSchema = external_exports.object({
4512
+ surface: hexColorSchema.optional(),
4513
+ surfaceRaised: hexColorSchema.optional(),
4514
+ surfaceMuted: hexColorSchema.optional(),
4515
+ text: hexColorSchema.optional(),
4516
+ textMuted: hexColorSchema.optional(),
4517
+ accent: hexColorSchema.optional(),
4518
+ accentText: hexColorSchema.optional(),
4519
+ link: hexColorSchema.optional(),
4520
+ border: resolvedBorderColorSchema.optional(),
4521
+ borderStrong: resolvedBorderColorSchema.optional(),
4522
+ focus: hexColorSchema.optional(),
4523
+ success: hexColorSchema.optional(),
4524
+ warning: hexColorSchema.optional(),
4525
+ danger: hexColorSchema.optional(),
4526
+ code: hexColorSchema.optional()
4527
+ }).strict();
4528
+ var brandingSchema = external_exports.object({
4529
+ name: external_exports.string().trim().min(1).max(160).optional(),
4530
+ accent: hexColorSchema.optional(),
4531
+ surface: hexColorSchema.optional(),
4532
+ surfaceDark: hexColorSchema.optional(),
4533
+ logo: brandAssetSchema.optional(),
4534
+ mark: brandAssetSchema.optional(),
4535
+ avatar: brandAssetSchema.optional(),
4536
+ theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
4537
+ radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
4538
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
4539
+ typography: external_exports.enum(["system", "serif", "mono"]).optional(),
4540
+ colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
4541
+ }).strict();
4542
+ var labelsSchema = external_exports.object({
4543
+ welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
4544
+ welcomeMessage: external_exports.string().max(1e3).optional(),
4545
+ launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
4546
+ composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
4547
+ thinking: external_exports.string().trim().min(1).max(80).optional(),
4548
+ send: external_exports.string().trim().min(1).max(80).optional(),
4549
+ stop: external_exports.string().trim().min(1).max(80).optional(),
4550
+ close: external_exports.string().trim().min(1).max(80).optional(),
4551
+ open: external_exports.string().trim().min(1).max(80).optional(),
4552
+ confirm: external_exports.string().trim().min(1).max(80).optional(),
4553
+ decline: external_exports.string().trim().min(1).max(80).optional(),
4554
+ cancel: external_exports.string().trim().min(1).max(80).optional(),
4555
+ confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
4556
+ additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
4557
+ redacted: external_exports.string().trim().min(1).max(120).optional(),
4558
+ completed: external_exports.string().trim().min(1).max(80).optional(),
4559
+ stopped: external_exports.string().trim().min(1).max(80).optional(),
4560
+ copy: external_exports.string().trim().min(1).max(80).optional(),
4561
+ newMessages: external_exports.string().trim().min(1).max(80).optional(),
4562
+ reconnect: external_exports.string().trim().min(1).max(80).optional(),
4563
+ newConversation: external_exports.string().trim().min(1).max(80).optional(),
4564
+ retry: external_exports.string().trim().min(1).max(80).optional(),
4565
+ unavailable: external_exports.string().trim().min(1).max(240).optional(),
4566
+ sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
4567
+ sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
4568
+ sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
4569
+ sessionReady: external_exports.string().trim().min(1).max(120).optional(),
4570
+ sessionError: external_exports.string().trim().min(1).max(120).optional(),
4571
+ signInHeading: external_exports.string().trim().min(1).max(120).optional(),
4572
+ signInBody: external_exports.string().max(240).optional(),
4573
+ signInAction: external_exports.string().trim().min(1).max(80).optional(),
4574
+ signUpAction: external_exports.string().trim().min(1).max(80).optional()
4575
+ }).strict();
4576
+ var presentationSchema = external_exports.object({
4577
+ panel: external_exports.object({
4578
+ surface: external_exports.enum(["solid", "glass"]).optional(),
4579
+ elevation: external_exports.enum(["soft", "dramatic"]).optional(),
4580
+ border: external_exports.enum(["subtle", "strong"]).optional(),
4581
+ radius: external_exports.number().int().min(0).max(64).optional()
4582
+ }).strict().optional(),
4583
+ launcher: external_exports.object({
4584
+ style: external_exports.enum(["pill", "bubble"]).optional(),
4585
+ icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
4586
+ size: external_exports.enum(["md", "lg"]).optional(),
4587
+ status: external_exports.enum(["none", "session"]).optional(),
4588
+ effect: external_exports.enum(["none", "pulse"]).optional()
4589
+ }).strict().optional(),
4590
+ header: external_exports.object({
4591
+ mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
4592
+ badge: external_exports.object({
4593
+ text: external_exports.string().trim().min(1).max(80),
4594
+ tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
4595
+ indicator: external_exports.boolean().optional()
4596
+ }).strict().optional()
4597
+ }).strict().optional(),
4598
+ composer: external_exports.object({
4599
+ leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
4600
+ sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
4601
+ shape: external_exports.enum(["rounded", "pill"]).optional()
4602
+ }).strict().optional(),
4603
+ messages: external_exports.object({
4604
+ userStyle: external_exports.enum(["bubble", "accent"]).optional(),
4605
+ assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
4606
+ }).strict().optional()
4607
+ }).strict();
4608
+ var assistantUiSchema = external_exports.object({
4609
+ theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
4610
+ layout: external_exports.object({
4611
+ mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
4612
+ position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
4613
+ panelWidth: external_exports.number().int().min(280).max(1200).optional(),
4614
+ panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
4615
+ panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
4616
+ edgeOffset: external_exports.number().int().min(0).max(96).optional(),
4617
+ zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
4618
+ density: external_exports.enum(["compact", "comfortable"]).optional(),
4619
+ mobileFullscreen: external_exports.boolean().optional()
4620
+ }).strict().optional(),
4621
+ behavior: external_exports.object({
4622
+ startOpen: external_exports.boolean().optional(),
4623
+ closeOnEscape: external_exports.boolean().optional(),
4624
+ closeOnOutsideClick: external_exports.boolean().optional(),
4625
+ showLauncher: external_exports.boolean().optional(),
4626
+ showHeader: external_exports.boolean().optional(),
4627
+ showAvatars: external_exports.boolean().optional(),
4628
+ showTimestamps: external_exports.boolean().optional(),
4629
+ showPoweredBy: external_exports.boolean().optional(),
4630
+ showConfirmationDetails: external_exports.boolean().optional()
4631
+ }).strict().optional(),
4632
+ labels: labelsSchema.optional(),
4633
+ presentation: presentationSchema.optional(),
4634
+ suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
4635
+ privacyUrl: httpsUrlSchema.optional(),
4636
+ termsUrl: httpsUrlSchema.optional(),
4637
+ locale: external_exports.string().trim().min(2).max(35).optional(),
4638
+ direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
4639
+ }).strict();
4640
+ var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
4641
+ function parseAssistantConfiguration(value) {
4642
+ const parsed = assistantConfigurationSchema.safeParse(value);
4643
+ return parsed.success ? parsed.data : void 0;
4644
+ }
4645
+ function isHttpsUrl(value) {
4646
+ try {
4647
+ return new URL(value).protocol === "https:";
4648
+ } catch {
4649
+ return false;
4650
+ }
4651
+ }
4652
+ function isSecureBrowserAssetUrl(value) {
4653
+ try {
4654
+ const url = new URL(value);
4655
+ if (url.protocol === "https:") return true;
4656
+ if (url.protocol !== "http:") return false;
4657
+ return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "[::1]";
4658
+ } catch {
4659
+ return false;
4660
+ }
4661
+ }
4662
+ function isBoundedRgbaColor(value) {
4663
+ 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(
4664
+ value
4665
+ );
4666
+ if (match === null) return false;
4667
+ return match.slice(1, 4).every((channel) => Number(channel) <= 255);
4668
+ }
4669
+
4498
4670
  // src/client-errors.ts
4499
4671
  async function refusalCode(response) {
4500
4672
  try {
@@ -4528,6 +4700,7 @@ function parseSession(value) {
4528
4700
  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") {
4529
4701
  throw clientError("session_failed", "Assistant session response is invalid", true);
4530
4702
  }
4703
+ const configuration = parseAssistantConfiguration(value.configuration);
4531
4704
  return {
4532
4705
  token: value.token,
4533
4706
  expiresAt: value.expiresAt,
@@ -4539,7 +4712,7 @@ function parseSession(value) {
4539
4712
  ...typeof sandbox === "string" ? { sandbox } : {},
4540
4713
  ...typeof transcript === "string" ? { transcript } : {}
4541
4714
  },
4542
- ...isRecord2(value.configuration) ? { configuration: value.configuration } : {},
4715
+ ...configuration === void 0 ? {} : { configuration },
4543
4716
  ...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
4544
4717
  };
4545
4718
  }
@@ -4633,9 +4806,9 @@ function toAssistantClientEvent(event) {
4633
4806
  return { event: "unrecognized", data: { name: event.event, payload: value } };
4634
4807
  }
4635
4808
  function isViewAvailableDetail(value) {
4636
- 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);
4809
+ 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);
4637
4810
  }
4638
- function isHttpsUrl(value) {
4811
+ function isHttpsUrl2(value) {
4639
4812
  if (typeof value !== "string") return false;
4640
4813
  try {
4641
4814
  return new URL(value).protocol === "https:";
@@ -5509,9 +5682,10 @@ function appInteractionStopped(action) {
5509
5682
  export {
5510
5683
  copyAssistantModelContext,
5511
5684
  copyAssistantPageContext,
5685
+ parseAssistantConfiguration,
5512
5686
  AssistantClientError,
5513
5687
  publicConfigurationUrl,
5514
5688
  sessionSourceKey,
5515
5689
  createAssistantClient
5516
5690
  };
5517
- //# sourceMappingURL=chunk-FNXAVRL5.js.map
5691
+ //# sourceMappingURL=chunk-WJV4MJUR.js.map