@noodleseed/assistant 1.2.0 → 1.4.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 (40) hide show
  1. package/README.md +136 -20
  2. package/dist/{appearance-KDbtkt2G.d.cts → appearance-BLO7kFYB.d.cts} +39 -0
  3. package/dist/{appearance-KDbtkt2G.d.ts → appearance-BLO7kFYB.d.ts} +39 -0
  4. package/dist/chunk-JIL4B5HD.js +7639 -0
  5. package/dist/chunk-JIL4B5HD.js.map +1 -0
  6. package/dist/chunk-NSBPE2FW.js +17 -0
  7. package/dist/chunk-NSBPE2FW.js.map +1 -0
  8. package/dist/{chunk-WUDHE5BD.js → chunk-P34VLBIK.js} +76 -4
  9. package/dist/chunk-P34VLBIK.js.map +1 -0
  10. package/dist/chunk-UXPKSCID.js +14767 -0
  11. package/dist/chunk-UXPKSCID.js.map +1 -0
  12. package/dist/{client-DkAfqcSb.d.ts → client-1uaN8-yl.d.cts} +17 -5
  13. package/dist/{client-CwvdK4O6.d.cts → client-nW-Zf4bU.d.ts} +17 -5
  14. package/dist/client.cjs +75 -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 +2 -1
  19. package/dist/index.cjs +22912 -1163
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +6 -3
  22. package/dist/index.d.ts +6 -3
  23. package/dist/index.js +4 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/react.cjs +22948 -1177
  26. package/dist/react.cjs.map +1 -1
  27. package/dist/react.d.cts +9 -5
  28. package/dist/react.d.ts +9 -5
  29. package/dist/react.js +33 -9
  30. package/dist/react.js.map +1 -1
  31. package/dist/server.d.cts +1 -1
  32. package/dist/server.d.ts +1 -1
  33. package/dist/server.js +2 -0
  34. package/dist/server.js.map +1 -1
  35. package/dist/v4-2UXPDMWJ.js +485 -0
  36. package/dist/v4-2UXPDMWJ.js.map +1 -0
  37. package/package.json +6 -1
  38. package/dist/chunk-J2YDKISA.js +0 -1113
  39. package/dist/chunk-J2YDKISA.js.map +0 -1
  40. package/dist/chunk-WUDHE5BD.js.map +0 -1
package/dist/react.d.cts CHANGED
@@ -1,17 +1,21 @@
1
- import * as react from 'react';
2
- import { A as AssistantThemeMode } from './appearance-KDbtkt2G.cjs';
1
+ import { RefAttributes, ReactElement } from 'react';
2
+ import { A as AssistantThemeMode } from './appearance-BLO7kFYB.cjs';
3
+ import { A as AssistantPageContext, a as AssistantContext, b as AssistantModelContextUpdate, c as AssistantClientEvent, d as AssistantErrorDetail } from './client-1uaN8-yl.cjs';
3
4
  import { NoodleAssistantElement } from './index.cjs';
4
- import { A as AssistantErrorDetail } from './client-CwvdK4O6.cjs';
5
5
 
6
- interface NoodleAssistantProps {
6
+ interface NoodleAssistantProps<TPageContext extends AssistantPageContext = AssistantContext> {
7
7
  readonly sessionEndpoint: string;
8
8
  readonly theme?: AssistantThemeMode;
9
9
  readonly open?: boolean;
10
10
  readonly className?: string;
11
+ readonly context?: AssistantContext;
12
+ readonly pageContext?: TPageContext;
13
+ readonly modelContext?: AssistantModelContextUpdate;
14
+ readonly onEvent?: (event: AssistantClientEvent) => void;
11
15
  readonly onReady?: () => void;
12
16
  readonly onError?: (error: AssistantErrorDetail) => void;
13
17
  readonly onSessionExpired?: () => void;
14
18
  }
15
- declare const NoodleAssistant: react.ForwardRefExoticComponent<NoodleAssistantProps & react.RefAttributes<NoodleAssistantElement>>;
19
+ declare const NoodleAssistant: <TPageContext extends AssistantPageContext = AssistantContext>(props: NoodleAssistantProps<TPageContext> & RefAttributes<NoodleAssistantElement>) => ReactElement;
16
20
 
17
21
  export { NoodleAssistant, type NoodleAssistantProps };
package/dist/react.d.ts CHANGED
@@ -1,17 +1,21 @@
1
- import * as react from 'react';
2
- import { A as AssistantThemeMode } from './appearance-KDbtkt2G.js';
1
+ import { RefAttributes, ReactElement } from 'react';
2
+ import { A as AssistantThemeMode } from './appearance-BLO7kFYB.js';
3
+ import { A as AssistantPageContext, a as AssistantContext, b as AssistantModelContextUpdate, c as AssistantClientEvent, d as AssistantErrorDetail } from './client-nW-Zf4bU.js';
3
4
  import { NoodleAssistantElement } from './index.js';
4
- import { A as AssistantErrorDetail } from './client-DkAfqcSb.js';
5
5
 
6
- interface NoodleAssistantProps {
6
+ interface NoodleAssistantProps<TPageContext extends AssistantPageContext = AssistantContext> {
7
7
  readonly sessionEndpoint: string;
8
8
  readonly theme?: AssistantThemeMode;
9
9
  readonly open?: boolean;
10
10
  readonly className?: string;
11
+ readonly context?: AssistantContext;
12
+ readonly pageContext?: TPageContext;
13
+ readonly modelContext?: AssistantModelContextUpdate;
14
+ readonly onEvent?: (event: AssistantClientEvent) => void;
11
15
  readonly onReady?: () => void;
12
16
  readonly onError?: (error: AssistantErrorDetail) => void;
13
17
  readonly onSessionExpired?: () => void;
14
18
  }
15
- declare const NoodleAssistant: react.ForwardRefExoticComponent<NoodleAssistantProps & react.RefAttributes<NoodleAssistantElement>>;
19
+ declare const NoodleAssistant: <TPageContext extends AssistantPageContext = AssistantContext>(props: NoodleAssistantProps<TPageContext> & RefAttributes<NoodleAssistantElement>) => ReactElement;
16
20
 
17
21
  export { NoodleAssistant, type NoodleAssistantProps };
package/dist/react.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import {
2
2
  registerNoodleAssistant
3
- } from "./chunk-J2YDKISA.js";
4
- import "./chunk-WUDHE5BD.js";
3
+ } from "./chunk-JIL4B5HD.js";
4
+ import "./chunk-P34VLBIK.js";
5
+ import "./chunk-UXPKSCID.js";
6
+ import "./chunk-NSBPE2FW.js";
5
7
 
6
8
  // src/react.ts
7
9
  import {
@@ -11,27 +13,48 @@ import {
11
13
  useImperativeHandle,
12
14
  useRef
13
15
  } from "react";
14
- var NoodleAssistant = forwardRef(
15
- function NoodleAssistant2(props, forwardedRef) {
16
+ var NoodleAssistantWithRef = forwardRef(
17
+ function NoodleAssistant(props, forwardedRef) {
16
18
  const ref = useRef(null);
19
+ const readyNotified = useRef(false);
17
20
  useImperativeHandle(forwardedRef, () => ref.current, []);
18
21
  useEffect(() => {
19
- registerNoodleAssistant();
20
22
  const element = ref.current;
21
23
  if (!element) return;
22
- element.sessionEndpoint = props.sessionEndpoint;
23
- const ready = () => props.onReady?.();
24
+ const ready = () => {
25
+ if (readyNotified.current) return;
26
+ readyNotified.current = true;
27
+ props.onReady?.();
28
+ };
24
29
  const error = (event) => props.onError?.(event.detail);
25
30
  const expired = () => props.onSessionExpired?.();
31
+ const assistantEvent = (event) => props.onEvent?.(event.detail);
26
32
  element.addEventListener("assistant-ready", ready);
27
33
  element.addEventListener("assistant-error", error);
28
34
  element.addEventListener("assistant-session-expired", expired);
35
+ element.addEventListener("assistant-event", assistantEvent);
36
+ registerNoodleAssistant();
37
+ element.sessionEndpoint = props.sessionEndpoint;
38
+ if (props.context) element.updateContext(props.context);
39
+ if (props.pageContext) element.updatePageContext(props.pageContext);
40
+ if (props.modelContext) element.updateModelContext(props.modelContext);
41
+ if (element.shadowRoot) ready();
29
42
  return () => {
30
43
  element.removeEventListener("assistant-ready", ready);
31
44
  element.removeEventListener("assistant-error", error);
32
45
  element.removeEventListener("assistant-session-expired", expired);
46
+ element.removeEventListener("assistant-event", assistantEvent);
33
47
  };
34
- }, [props.onError, props.onReady, props.onSessionExpired, props.sessionEndpoint]);
48
+ }, [
49
+ props.context,
50
+ props.modelContext,
51
+ props.onError,
52
+ props.onEvent,
53
+ props.onReady,
54
+ props.onSessionExpired,
55
+ props.pageContext,
56
+ props.sessionEndpoint
57
+ ]);
35
58
  return createElement("noodle-assistant", {
36
59
  ref,
37
60
  class: props.className,
@@ -41,7 +64,8 @@ var NoodleAssistant = forwardRef(
41
64
  });
42
65
  }
43
66
  );
67
+ var NoodleAssistant2 = NoodleAssistantWithRef;
44
68
  export {
45
- NoodleAssistant
69
+ NoodleAssistant2 as NoodleAssistant
46
70
  };
47
71
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.ts"],"sourcesContent":["import {\n createElement,\n forwardRef,\n type ReactElement,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport type { AssistantThemeMode } from './appearance.js';\nimport { type NoodleAssistantElement, registerNoodleAssistant } from './element.js';\nimport type { AssistantErrorDetail } from './transport.js';\n\nexport interface NoodleAssistantProps {\n readonly sessionEndpoint: string;\n readonly theme?: AssistantThemeMode;\n readonly open?: boolean;\n readonly className?: string;\n readonly onReady?: () => void;\n readonly onError?: (error: AssistantErrorDetail) => void;\n readonly onSessionExpired?: () => void;\n}\n\nexport const NoodleAssistant = forwardRef<NoodleAssistantElement, NoodleAssistantProps>(\n function NoodleAssistant(props, forwardedRef): ReactElement {\n const ref = useRef<NoodleAssistantElement>(null);\n useImperativeHandle(forwardedRef, () => ref.current as NoodleAssistantElement, []);\n useEffect(() => {\n registerNoodleAssistant();\n const element = ref.current;\n if (!element) return;\n element.sessionEndpoint = props.sessionEndpoint;\n const ready = () => props.onReady?.();\n const error = (event: Event) =>\n props.onError?.((event as CustomEvent<AssistantErrorDetail>).detail);\n const expired = () => props.onSessionExpired?.();\n element.addEventListener('assistant-ready', ready);\n element.addEventListener('assistant-error', error);\n element.addEventListener('assistant-session-expired', expired);\n return () => {\n element.removeEventListener('assistant-ready', ready);\n element.removeEventListener('assistant-error', error);\n element.removeEventListener('assistant-session-expired', expired);\n };\n }, [props.onError, props.onReady, props.onSessionExpired, props.sessionEndpoint]);\n return createElement('noodle-assistant', {\n ref,\n class: props.className,\n 'session-endpoint': props.sessionEndpoint,\n ...(props.theme ? { theme: props.theme } : {}),\n ...(props.open ? { open: '' } : {}),\n });\n },\n);\n"],"mappings":";;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeA,IAAM,kBAAkB;AAAA,EAC7B,SAASA,iBAAgB,OAAO,cAA4B;AAC1D,UAAM,MAAM,OAA+B,IAAI;AAC/C,wBAAoB,cAAc,MAAM,IAAI,SAAmC,CAAC,CAAC;AACjF,cAAU,MAAM;AACd,8BAAwB;AACxB,YAAM,UAAU,IAAI;AACpB,UAAI,CAAC,QAAS;AACd,cAAQ,kBAAkB,MAAM;AAChC,YAAM,QAAQ,MAAM,MAAM,UAAU;AACpC,YAAM,QAAQ,CAAC,UACb,MAAM,UAAW,MAA4C,MAAM;AACrE,YAAM,UAAU,MAAM,MAAM,mBAAmB;AAC/C,cAAQ,iBAAiB,mBAAmB,KAAK;AACjD,cAAQ,iBAAiB,mBAAmB,KAAK;AACjD,cAAQ,iBAAiB,6BAA6B,OAAO;AAC7D,aAAO,MAAM;AACX,gBAAQ,oBAAoB,mBAAmB,KAAK;AACpD,gBAAQ,oBAAoB,mBAAmB,KAAK;AACpD,gBAAQ,oBAAoB,6BAA6B,OAAO;AAAA,MAClE;AAAA,IACF,GAAG,CAAC,MAAM,SAAS,MAAM,SAAS,MAAM,kBAAkB,MAAM,eAAe,CAAC;AAChF,WAAO,cAAc,oBAAoB;AAAA,MACvC;AAAA,MACA,OAAO,MAAM;AAAA,MACb,oBAAoB,MAAM;AAAA,MAC1B,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,MAC5C,GAAI,MAAM,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AACF;","names":["NoodleAssistant"]}
1
+ {"version":3,"sources":["../src/react.ts"],"sourcesContent":["import {\n createElement,\n forwardRef,\n type ReactElement,\n type RefAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport type { AssistantThemeMode } from './appearance.js';\nimport type {\n AssistantClientEvent,\n AssistantContext,\n AssistantModelContextUpdate,\n AssistantPageContext,\n} from './client.js';\nimport { type NoodleAssistantElement, registerNoodleAssistant } from './element.js';\nimport type { AssistantErrorDetail } from './transport.js';\n\nexport interface NoodleAssistantProps<\n TPageContext extends AssistantPageContext = AssistantContext,\n> {\n readonly sessionEndpoint: string;\n readonly theme?: AssistantThemeMode;\n readonly open?: boolean;\n readonly className?: string;\n readonly context?: AssistantContext;\n readonly pageContext?: TPageContext;\n readonly modelContext?: AssistantModelContextUpdate;\n readonly onEvent?: (event: AssistantClientEvent) => void;\n readonly onReady?: () => void;\n readonly onError?: (error: AssistantErrorDetail) => void;\n readonly onSessionExpired?: () => void;\n}\n\nconst NoodleAssistantWithRef = forwardRef<NoodleAssistantElement, NoodleAssistantProps>(\n function NoodleAssistant(props, forwardedRef): ReactElement {\n const ref = useRef<NoodleAssistantElement>(null);\n const readyNotified = useRef(false);\n useImperativeHandle(forwardedRef, () => ref.current as NoodleAssistantElement, []);\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const ready = () => {\n if (readyNotified.current) return;\n readyNotified.current = true;\n props.onReady?.();\n };\n const error = (event: Event) =>\n props.onError?.((event as CustomEvent<AssistantErrorDetail>).detail);\n const expired = () => props.onSessionExpired?.();\n const assistantEvent = (event: Event) =>\n props.onEvent?.((event as CustomEvent<AssistantClientEvent>).detail);\n element.addEventListener('assistant-ready', ready);\n element.addEventListener('assistant-error', error);\n element.addEventListener('assistant-session-expired', expired);\n element.addEventListener('assistant-event', assistantEvent);\n registerNoodleAssistant();\n element.sessionEndpoint = props.sessionEndpoint;\n if (props.context) element.updateContext(props.context);\n if (props.pageContext) element.updatePageContext(props.pageContext);\n if (props.modelContext) element.updateModelContext(props.modelContext);\n // The canonical entry may have registered and upgraded the element before this effect ran.\n // Readiness is sticky once the shadow root exists, so late React listeners still fire once.\n if (element.shadowRoot) ready();\n return () => {\n element.removeEventListener('assistant-ready', ready);\n element.removeEventListener('assistant-error', error);\n element.removeEventListener('assistant-session-expired', expired);\n element.removeEventListener('assistant-event', assistantEvent);\n };\n }, [\n props.context,\n props.modelContext,\n props.onError,\n props.onEvent,\n props.onReady,\n props.onSessionExpired,\n props.pageContext,\n props.sessionEndpoint,\n ]);\n return createElement('noodle-assistant', {\n ref,\n class: props.className,\n 'session-endpoint': props.sessionEndpoint,\n ...(props.theme ? { theme: props.theme } : {}),\n ...(props.open ? { open: '' } : {}),\n });\n },\n);\n\nexport const NoodleAssistant = NoodleAssistantWithRef as <\n TPageContext extends AssistantPageContext = AssistantContext,\n>(\n props: NoodleAssistantProps<TPageContext> & RefAttributes<NoodleAssistantElement>,\n) => ReactElement;\n"],"mappings":";;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA2BP,IAAM,yBAAyB;AAAA,EAC7B,SAAS,gBAAgB,OAAO,cAA4B;AAC1D,UAAM,MAAM,OAA+B,IAAI;AAC/C,UAAM,gBAAgB,OAAO,KAAK;AAClC,wBAAoB,cAAc,MAAM,IAAI,SAAmC,CAAC,CAAC;AACjF,cAAU,MAAM;AACd,YAAM,UAAU,IAAI;AACpB,UAAI,CAAC,QAAS;AACd,YAAM,QAAQ,MAAM;AAClB,YAAI,cAAc,QAAS;AAC3B,sBAAc,UAAU;AACxB,cAAM,UAAU;AAAA,MAClB;AACA,YAAM,QAAQ,CAAC,UACb,MAAM,UAAW,MAA4C,MAAM;AACrE,YAAM,UAAU,MAAM,MAAM,mBAAmB;AAC/C,YAAM,iBAAiB,CAAC,UACtB,MAAM,UAAW,MAA4C,MAAM;AACrE,cAAQ,iBAAiB,mBAAmB,KAAK;AACjD,cAAQ,iBAAiB,mBAAmB,KAAK;AACjD,cAAQ,iBAAiB,6BAA6B,OAAO;AAC7D,cAAQ,iBAAiB,mBAAmB,cAAc;AAC1D,8BAAwB;AACxB,cAAQ,kBAAkB,MAAM;AAChC,UAAI,MAAM,QAAS,SAAQ,cAAc,MAAM,OAAO;AACtD,UAAI,MAAM,YAAa,SAAQ,kBAAkB,MAAM,WAAW;AAClE,UAAI,MAAM,aAAc,SAAQ,mBAAmB,MAAM,YAAY;AAGrE,UAAI,QAAQ,WAAY,OAAM;AAC9B,aAAO,MAAM;AACX,gBAAQ,oBAAoB,mBAAmB,KAAK;AACpD,gBAAQ,oBAAoB,mBAAmB,KAAK;AACpD,gBAAQ,oBAAoB,6BAA6B,OAAO;AAChE,gBAAQ,oBAAoB,mBAAmB,cAAc;AAAA,MAC/D;AAAA,IACF,GAAG;AAAA,MACD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR,CAAC;AACD,WAAO,cAAc,oBAAoB;AAAA,MACvC;AAAA,MACA,OAAO,MAAM;AAAA,MACb,oBAAoB,MAAM;AAAA,MAC1B,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,MAC5C,GAAI,MAAM,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEO,IAAMA,mBAAkB;","names":["NoodleAssistant"]}
package/dist/server.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as AssistantConfiguration } from './appearance-KDbtkt2G.cjs';
1
+ import { a as AssistantConfiguration } from './appearance-BLO7kFYB.cjs';
2
2
 
3
3
  interface CreateAssistantSessionInput {
4
4
  readonly serviceUrl: string;
package/dist/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as AssistantConfiguration } from './appearance-KDbtkt2G.js';
1
+ import { a as AssistantConfiguration } from './appearance-BLO7kFYB.js';
2
2
 
3
3
  interface CreateAssistantSessionInput {
4
4
  readonly serviceUrl: string;
package/dist/server.js CHANGED
@@ -1,3 +1,5 @@
1
+ import "./chunk-NSBPE2FW.js";
2
+
1
3
  // src/server.ts
2
4
  async function createAssistantSession(input, dependencies = {}) {
3
5
  const request = dependencies.fetch ?? fetch;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts"],"sourcesContent":["import type { AssistantConfiguration } from './appearance.js';\n\nexport interface CreateAssistantSessionInput {\n readonly serviceUrl: string;\n readonly clientId: string;\n readonly clientSecret: string;\n /** Browser origin to bind into the short-lived assistant session. */\n readonly origin: string;\n readonly user: {\n readonly id: string;\n readonly email?: string;\n readonly name?: string;\n readonly tenant?: string;\n readonly roles?: readonly string[];\n };\n readonly context?: Readonly<Record<string, string | number | boolean | null>>;\n /** Backend-verified user preferences; these outrank untrusted browser presentation hints. */\n readonly preferences?: {\n readonly locale?: string;\n readonly timeZone?: string;\n };\n /**\n * Verified session claims from your authenticated backend. Only claims the server declares in\n * `embeddedAssistant({ sessionClaims })` reach tools (`\\${user.claims.<key>}`) and, when marked\n * `exposeToModel`, the assistant's identity context. Flat scalars only.\n */\n readonly claims?: Readonly<Record<string, string | number | boolean | null>>;\n}\n\nexport interface AssistantSession {\n readonly token: string;\n readonly expiresAt: string;\n readonly endpoints: {\n readonly turns: string;\n readonly toolConfirmations: string;\n readonly interactions?: string;\n };\n readonly configuration?: AssistantConfiguration;\n}\n\nexport async function createAssistantSession(\n input: CreateAssistantSessionInput,\n dependencies: { readonly fetch?: typeof fetch } = {},\n): Promise<AssistantSession> {\n const request = dependencies.fetch ?? fetch;\n const serviceUrl = input.serviceUrl.replace(/\\/$/, '');\n const credentials = Buffer.from(`${input.clientId}:${input.clientSecret}`, 'utf8').toString(\n 'base64',\n );\n const response = await request(`${serviceUrl}/v1/assistant/sessions`, {\n method: 'POST',\n headers: {\n Authorization: `Basic ${credentials}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n origin: input.origin,\n user: input.user,\n ...(input.claims ? { claims: input.claims } : {}),\n ...(input.context ? { context: input.context } : {}),\n ...(input.preferences ? { preferences: input.preferences } : {}),\n }),\n });\n if (!response.ok) throw new Error(`Assistant session exchange failed (${response.status})`);\n return (await response.json()) as AssistantSession;\n}\n"],"mappings":";AAwCA,eAAsB,uBACpB,OACA,eAAkD,CAAC,GACxB;AAC3B,QAAM,UAAU,aAAa,SAAS;AACtC,QAAM,aAAa,MAAM,WAAW,QAAQ,OAAO,EAAE;AACrD,QAAM,cAAc,OAAO,KAAK,GAAG,MAAM,QAAQ,IAAI,MAAM,YAAY,IAAI,MAAM,EAAE;AAAA,IACjF;AAAA,EACF;AACA,QAAM,WAAW,MAAM,QAAQ,GAAG,UAAU,0BAA0B;AAAA,IACpE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAe,SAAS,WAAW;AAAA,MACnC,QAAQ;AAAA,MACR,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,MACZ,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MAC/C,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAClD,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,IAChE,CAAC;AAAA,EACH,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,sCAAsC,SAAS,MAAM,GAAG;AAC1F,SAAQ,MAAM,SAAS,KAAK;AAC9B;","names":[]}
1
+ {"version":3,"sources":["../src/server.ts"],"sourcesContent":["import type { AssistantConfiguration } from './appearance.js';\n\nexport interface CreateAssistantSessionInput {\n readonly serviceUrl: string;\n readonly clientId: string;\n readonly clientSecret: string;\n /** Browser origin to bind into the short-lived assistant session. */\n readonly origin: string;\n readonly user: {\n readonly id: string;\n readonly email?: string;\n readonly name?: string;\n readonly tenant?: string;\n readonly roles?: readonly string[];\n };\n readonly context?: Readonly<Record<string, string | number | boolean | null>>;\n /** Backend-verified user preferences; these outrank untrusted browser presentation hints. */\n readonly preferences?: {\n readonly locale?: string;\n readonly timeZone?: string;\n };\n /**\n * Verified session claims from your authenticated backend. Only claims the server declares in\n * `embeddedAssistant({ sessionClaims })` reach tools (`\\${user.claims.<key>}`) and, when marked\n * `exposeToModel`, the assistant's identity context. Flat scalars only.\n */\n readonly claims?: Readonly<Record<string, string | number | boolean | null>>;\n}\n\nexport interface AssistantSession {\n readonly token: string;\n readonly expiresAt: string;\n readonly endpoints: {\n readonly turns: string;\n readonly toolConfirmations: string;\n readonly interactions?: string;\n };\n readonly configuration?: AssistantConfiguration;\n}\n\nexport async function createAssistantSession(\n input: CreateAssistantSessionInput,\n dependencies: { readonly fetch?: typeof fetch } = {},\n): Promise<AssistantSession> {\n const request = dependencies.fetch ?? fetch;\n const serviceUrl = input.serviceUrl.replace(/\\/$/, '');\n const credentials = Buffer.from(`${input.clientId}:${input.clientSecret}`, 'utf8').toString(\n 'base64',\n );\n const response = await request(`${serviceUrl}/v1/assistant/sessions`, {\n method: 'POST',\n headers: {\n Authorization: `Basic ${credentials}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n origin: input.origin,\n user: input.user,\n ...(input.claims ? { claims: input.claims } : {}),\n ...(input.context ? { context: input.context } : {}),\n ...(input.preferences ? { preferences: input.preferences } : {}),\n }),\n });\n if (!response.ok) throw new Error(`Assistant session exchange failed (${response.status})`);\n return (await response.json()) as AssistantSession;\n}\n"],"mappings":";;;AAwCA,eAAsB,uBACpB,OACA,eAAkD,CAAC,GACxB;AAC3B,QAAM,UAAU,aAAa,SAAS;AACtC,QAAM,aAAa,MAAM,WAAW,QAAQ,OAAO,EAAE;AACrD,QAAM,cAAc,OAAO,KAAK,GAAG,MAAM,QAAQ,IAAI,MAAM,YAAY,IAAI,MAAM,EAAE;AAAA,IACjF;AAAA,EACF;AACA,QAAM,WAAW,MAAM,QAAQ,GAAG,UAAU,0BAA0B;AAAA,IACpE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAe,SAAS,WAAW;AAAA,MACnC,QAAQ;AAAA,MACR,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,MACZ,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MAC/C,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAClD,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,IAChE,CAAC;AAAA,EACH,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,sCAAsC,SAAS,MAAM,GAAG;AAC1F,SAAQ,MAAM,SAAS,KAAK;AAC9B;","names":[]}
@@ -0,0 +1,485 @@
1
+ import {
2
+ $brand,
3
+ $input,
4
+ $output,
5
+ NEVER,
6
+ TimePrecision,
7
+ ZodAny,
8
+ ZodArray,
9
+ ZodBase64,
10
+ ZodBase64URL,
11
+ ZodBigInt,
12
+ ZodBigIntFormat,
13
+ ZodBoolean,
14
+ ZodCIDRv4,
15
+ ZodCIDRv6,
16
+ ZodCUID,
17
+ ZodCUID2,
18
+ ZodCatch,
19
+ ZodCodec,
20
+ ZodCustom,
21
+ ZodCustomStringFormat,
22
+ ZodDate,
23
+ ZodDefault,
24
+ ZodDiscriminatedUnion,
25
+ ZodE164,
26
+ ZodEmail,
27
+ ZodEmoji,
28
+ ZodEnum,
29
+ ZodError,
30
+ ZodExactOptional,
31
+ ZodFile,
32
+ ZodFirstPartyTypeKind,
33
+ ZodFunction,
34
+ ZodGUID,
35
+ ZodIPv4,
36
+ ZodIPv6,
37
+ ZodISODate,
38
+ ZodISODateTime,
39
+ ZodISODuration,
40
+ ZodISOTime,
41
+ ZodIntersection,
42
+ ZodIssueCode,
43
+ ZodJWT,
44
+ ZodKSUID,
45
+ ZodLazy,
46
+ ZodLiteral,
47
+ ZodMAC,
48
+ ZodMap,
49
+ ZodNaN,
50
+ ZodNanoID,
51
+ ZodNever,
52
+ ZodNonOptional,
53
+ ZodNull,
54
+ ZodNullable,
55
+ ZodNumber,
56
+ ZodNumberFormat,
57
+ ZodObject,
58
+ ZodOptional,
59
+ ZodPipe,
60
+ ZodPrefault,
61
+ ZodPreprocess,
62
+ ZodPromise,
63
+ ZodReadonly,
64
+ ZodRealError,
65
+ ZodRecord,
66
+ ZodSet,
67
+ ZodString,
68
+ ZodStringFormat,
69
+ ZodSuccess,
70
+ ZodSymbol,
71
+ ZodTemplateLiteral,
72
+ ZodTransform,
73
+ ZodTuple,
74
+ ZodType,
75
+ ZodULID,
76
+ ZodURL,
77
+ ZodUUID,
78
+ ZodUndefined,
79
+ ZodUnion,
80
+ ZodUnknown,
81
+ ZodVoid,
82
+ ZodXID,
83
+ ZodXor,
84
+ _ZodString,
85
+ _catch,
86
+ _default,
87
+ _endsWith,
88
+ _enum,
89
+ _function,
90
+ _gt,
91
+ _gte,
92
+ _includes,
93
+ _instanceof,
94
+ _length,
95
+ _lowercase,
96
+ _lt,
97
+ _lte,
98
+ _maxLength,
99
+ _maxSize,
100
+ _mime,
101
+ _minLength,
102
+ _minSize,
103
+ _multipleOf,
104
+ _negative,
105
+ _nonnegative,
106
+ _nonpositive,
107
+ _normalize,
108
+ _null,
109
+ _overwrite,
110
+ _positive,
111
+ _property,
112
+ _regex,
113
+ _size,
114
+ _slugify,
115
+ _startsWith,
116
+ _toLowerCase,
117
+ _toUpperCase,
118
+ _trim,
119
+ _undefined,
120
+ _uppercase,
121
+ _void,
122
+ any,
123
+ array,
124
+ base64,
125
+ base64url,
126
+ bigint,
127
+ boolean,
128
+ check,
129
+ cidrv4,
130
+ cidrv6,
131
+ clone,
132
+ codec,
133
+ coerce_exports,
134
+ config,
135
+ core_exports,
136
+ cuid,
137
+ cuid2,
138
+ custom,
139
+ date,
140
+ decode,
141
+ decodeAsync,
142
+ describe,
143
+ discriminatedUnion,
144
+ e164,
145
+ email,
146
+ emoji,
147
+ encode,
148
+ encodeAsync,
149
+ exactOptional,
150
+ external_exports,
151
+ file,
152
+ flattenError,
153
+ float32,
154
+ float64,
155
+ formatError,
156
+ fromJSONSchema,
157
+ getErrorMap,
158
+ globalRegistry,
159
+ guid,
160
+ hash,
161
+ hex,
162
+ hostname,
163
+ httpUrl,
164
+ int,
165
+ int32,
166
+ int64,
167
+ intersection,
168
+ invertCodec,
169
+ ipv4,
170
+ ipv6,
171
+ iso_exports,
172
+ json,
173
+ jwt,
174
+ keyof,
175
+ ksuid,
176
+ lazy,
177
+ literal,
178
+ locales_exports,
179
+ looseObject,
180
+ looseRecord,
181
+ mac,
182
+ map,
183
+ meta,
184
+ nan,
185
+ nanoid,
186
+ nativeEnum,
187
+ never,
188
+ nonoptional,
189
+ nullable,
190
+ nullish,
191
+ number,
192
+ object,
193
+ optional,
194
+ parse,
195
+ parseAsync,
196
+ partialRecord,
197
+ pipe,
198
+ prefault,
199
+ preprocess,
200
+ prettifyError,
201
+ promise,
202
+ readonly,
203
+ record,
204
+ refine,
205
+ regexes_exports,
206
+ registry,
207
+ safeDecode,
208
+ safeDecodeAsync,
209
+ safeEncode,
210
+ safeEncodeAsync,
211
+ safeParse2 as safeParse,
212
+ safeParseAsync,
213
+ set,
214
+ setErrorMap,
215
+ strictObject,
216
+ string,
217
+ stringFormat,
218
+ stringbool,
219
+ success,
220
+ superRefine,
221
+ symbol,
222
+ templateLiteral,
223
+ toJSONSchema,
224
+ transform,
225
+ treeifyError,
226
+ tuple,
227
+ uint32,
228
+ uint64,
229
+ ulid,
230
+ union,
231
+ unknown,
232
+ url,
233
+ util_exports,
234
+ uuid,
235
+ uuidv4,
236
+ uuidv6,
237
+ uuidv7,
238
+ v4_default,
239
+ xid,
240
+ xor
241
+ } from "./chunk-UXPKSCID.js";
242
+ import "./chunk-NSBPE2FW.js";
243
+ export {
244
+ $brand,
245
+ $input,
246
+ $output,
247
+ NEVER,
248
+ TimePrecision,
249
+ ZodAny,
250
+ ZodArray,
251
+ ZodBase64,
252
+ ZodBase64URL,
253
+ ZodBigInt,
254
+ ZodBigIntFormat,
255
+ ZodBoolean,
256
+ ZodCIDRv4,
257
+ ZodCIDRv6,
258
+ ZodCUID,
259
+ ZodCUID2,
260
+ ZodCatch,
261
+ ZodCodec,
262
+ ZodCustom,
263
+ ZodCustomStringFormat,
264
+ ZodDate,
265
+ ZodDefault,
266
+ ZodDiscriminatedUnion,
267
+ ZodE164,
268
+ ZodEmail,
269
+ ZodEmoji,
270
+ ZodEnum,
271
+ ZodError,
272
+ ZodExactOptional,
273
+ ZodFile,
274
+ ZodFirstPartyTypeKind,
275
+ ZodFunction,
276
+ ZodGUID,
277
+ ZodIPv4,
278
+ ZodIPv6,
279
+ ZodISODate,
280
+ ZodISODateTime,
281
+ ZodISODuration,
282
+ ZodISOTime,
283
+ ZodIntersection,
284
+ ZodIssueCode,
285
+ ZodJWT,
286
+ ZodKSUID,
287
+ ZodLazy,
288
+ ZodLiteral,
289
+ ZodMAC,
290
+ ZodMap,
291
+ ZodNaN,
292
+ ZodNanoID,
293
+ ZodNever,
294
+ ZodNonOptional,
295
+ ZodNull,
296
+ ZodNullable,
297
+ ZodNumber,
298
+ ZodNumberFormat,
299
+ ZodObject,
300
+ ZodOptional,
301
+ ZodPipe,
302
+ ZodPrefault,
303
+ ZodPreprocess,
304
+ ZodPromise,
305
+ ZodReadonly,
306
+ ZodRealError,
307
+ ZodRecord,
308
+ ZodSet,
309
+ ZodString,
310
+ ZodStringFormat,
311
+ ZodSuccess,
312
+ ZodSymbol,
313
+ ZodTemplateLiteral,
314
+ ZodTransform,
315
+ ZodTuple,
316
+ ZodType,
317
+ ZodULID,
318
+ ZodURL,
319
+ ZodUUID,
320
+ ZodUndefined,
321
+ ZodUnion,
322
+ ZodUnknown,
323
+ ZodVoid,
324
+ ZodXID,
325
+ ZodXor,
326
+ _ZodString,
327
+ _default,
328
+ _function,
329
+ any,
330
+ array,
331
+ base64,
332
+ base64url,
333
+ bigint,
334
+ boolean,
335
+ _catch as catch,
336
+ check,
337
+ cidrv4,
338
+ cidrv6,
339
+ clone,
340
+ codec,
341
+ coerce_exports as coerce,
342
+ config,
343
+ core_exports as core,
344
+ cuid,
345
+ cuid2,
346
+ custom,
347
+ date,
348
+ decode,
349
+ decodeAsync,
350
+ v4_default as default,
351
+ describe,
352
+ discriminatedUnion,
353
+ e164,
354
+ email,
355
+ emoji,
356
+ encode,
357
+ encodeAsync,
358
+ _endsWith as endsWith,
359
+ _enum as enum,
360
+ exactOptional,
361
+ file,
362
+ flattenError,
363
+ float32,
364
+ float64,
365
+ formatError,
366
+ fromJSONSchema,
367
+ _function as function,
368
+ getErrorMap,
369
+ globalRegistry,
370
+ _gt as gt,
371
+ _gte as gte,
372
+ guid,
373
+ hash,
374
+ hex,
375
+ hostname,
376
+ httpUrl,
377
+ _includes as includes,
378
+ _instanceof as instanceof,
379
+ int,
380
+ int32,
381
+ int64,
382
+ intersection,
383
+ invertCodec,
384
+ ipv4,
385
+ ipv6,
386
+ iso_exports as iso,
387
+ json,
388
+ jwt,
389
+ keyof,
390
+ ksuid,
391
+ lazy,
392
+ _length as length,
393
+ literal,
394
+ locales_exports as locales,
395
+ looseObject,
396
+ looseRecord,
397
+ _lowercase as lowercase,
398
+ _lt as lt,
399
+ _lte as lte,
400
+ mac,
401
+ map,
402
+ _maxLength as maxLength,
403
+ _maxSize as maxSize,
404
+ meta,
405
+ _mime as mime,
406
+ _minLength as minLength,
407
+ _minSize as minSize,
408
+ _multipleOf as multipleOf,
409
+ nan,
410
+ nanoid,
411
+ nativeEnum,
412
+ _negative as negative,
413
+ never,
414
+ _nonnegative as nonnegative,
415
+ nonoptional,
416
+ _nonpositive as nonpositive,
417
+ _normalize as normalize,
418
+ _null as null,
419
+ nullable,
420
+ nullish,
421
+ number,
422
+ object,
423
+ optional,
424
+ _overwrite as overwrite,
425
+ parse,
426
+ parseAsync,
427
+ partialRecord,
428
+ pipe,
429
+ _positive as positive,
430
+ prefault,
431
+ preprocess,
432
+ prettifyError,
433
+ promise,
434
+ _property as property,
435
+ readonly,
436
+ record,
437
+ refine,
438
+ _regex as regex,
439
+ regexes_exports as regexes,
440
+ registry,
441
+ safeDecode,
442
+ safeDecodeAsync,
443
+ safeEncode,
444
+ safeEncodeAsync,
445
+ safeParse,
446
+ safeParseAsync,
447
+ set,
448
+ setErrorMap,
449
+ _size as size,
450
+ _slugify as slugify,
451
+ _startsWith as startsWith,
452
+ strictObject,
453
+ string,
454
+ stringFormat,
455
+ stringbool,
456
+ success,
457
+ superRefine,
458
+ symbol,
459
+ templateLiteral,
460
+ toJSONSchema,
461
+ _toLowerCase as toLowerCase,
462
+ _toUpperCase as toUpperCase,
463
+ transform,
464
+ treeifyError,
465
+ _trim as trim,
466
+ tuple,
467
+ uint32,
468
+ uint64,
469
+ ulid,
470
+ _undefined as undefined,
471
+ union,
472
+ unknown,
473
+ _uppercase as uppercase,
474
+ url,
475
+ util_exports as util,
476
+ uuid,
477
+ uuidv4,
478
+ uuidv6,
479
+ uuidv7,
480
+ _void as void,
481
+ xid,
482
+ xor,
483
+ external_exports as z
484
+ };
485
+ //# sourceMappingURL=v4-2UXPDMWJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/assistant",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Embed the Noodle Seed customer-branded assistant in your web app: Web Component, React wrapper, and backend session helper. Authoring and deploying the server is @noodleseed/one.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -81,5 +81,10 @@
81
81
  "./dist/server.d.ts"
82
82
  ]
83
83
  }
84
+ },
85
+ "dependencies": {
86
+ "@modelcontextprotocol/ext-apps": "^1.7.4",
87
+ "dompurify": "^3.4.11",
88
+ "marked": "^16.4.2"
84
89
  }
85
90
  }