@noodleseed/assistant 1.25.0 → 1.26.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 (45) hide show
  1. package/README.md +63 -24
  2. package/dist/{app-view-element-BM4lral-.d.ts → app-view-element-C_ATXseu.d.ts} +2 -3
  3. package/dist/{app-view-element-9ojWWYov.d.cts → app-view-element-CiFVNIke.d.cts} +2 -3
  4. package/dist/app-view.cjs +41 -213
  5. package/dist/app-view.cjs.map +1 -1
  6. package/dist/app-view.d.cts +3 -3
  7. package/dist/app-view.d.ts +3 -3
  8. package/dist/app-view.js +2 -2
  9. package/dist/{appearance-B6vSg8Ub.d.cts → appearance-C24W6BRj.d.cts} +7 -3
  10. package/dist/{appearance-B6vSg8Ub.d.ts → appearance-C24W6BRj.d.ts} +7 -3
  11. package/dist/{chunk-LNBUYHL7.js → chunk-5NBHHNI3.js} +2 -2
  12. package/dist/chunk-5NBHHNI3.js.map +1 -0
  13. package/dist/{chunk-SGMECNNU.js → chunk-5PW6PXCI.js} +702 -122
  14. package/dist/chunk-5PW6PXCI.js.map +1 -0
  15. package/dist/{chunk-7BQHW37I.js → chunk-FNXAVRL5.js} +7 -1
  16. package/dist/{chunk-7BQHW37I.js.map → chunk-FNXAVRL5.js.map} +1 -1
  17. package/dist/{chunk-P32MAR4K.js → chunk-XKTUXFGX.js} +42 -214
  18. package/dist/chunk-XKTUXFGX.js.map +1 -0
  19. package/dist/{client-BkogON2A.d.ts → client-BheCOERq.d.ts} +51 -2
  20. package/dist/{client-C07ppTU_.d.cts → client-BiMRVxjs.d.cts} +51 -2
  21. package/dist/client.cjs.map +1 -1
  22. package/dist/client.d.cts +2 -2
  23. package/dist/client.d.ts +2 -2
  24. package/dist/client.js +1 -1
  25. package/dist/embed.global.js +210 -161
  26. package/dist/index.cjs +767 -354
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.cts +6 -53
  29. package/dist/index.d.ts +6 -53
  30. package/dist/index.js +3 -3
  31. package/dist/react/client.cjs.map +1 -1
  32. package/dist/react/client.d.cts +2 -2
  33. package/dist/react/client.d.ts +2 -2
  34. package/dist/react/client.js +1 -1
  35. package/dist/react.cjs +767 -354
  36. package/dist/react.cjs.map +1 -1
  37. package/dist/react.d.cts +4 -4
  38. package/dist/react.d.ts +4 -4
  39. package/dist/react.js +4 -4
  40. package/dist/server.d.cts +1 -1
  41. package/dist/server.d.ts +1 -1
  42. package/package.json +1 -1
  43. package/dist/chunk-LNBUYHL7.js.map +0 -1
  44. package/dist/chunk-P32MAR4K.js.map +0 -1
  45. package/dist/chunk-SGMECNNU.js.map +0 -1
@@ -1,6 +1,6 @@
1
- export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-9ojWWYov.cjs';
2
- export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-C07ppTU_.cjs';
3
- import './appearance-B6vSg8Ub.cjs';
1
+ export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-CiFVNIke.cjs';
2
+ export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-BiMRVxjs.cjs';
3
+ import './appearance-C24W6BRj.cjs';
4
4
  import 'ai';
5
5
 
6
6
  /** Register the framework-neutral MCP App host. Safe to call more than once or during SSR. */
@@ -1,6 +1,6 @@
1
- export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-BM4lral-.js';
2
- export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-BkogON2A.js';
3
- import './appearance-B6vSg8Ub.js';
1
+ export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-C_ATXseu.js';
2
+ export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-BheCOERq.js';
3
+ import './appearance-C24W6BRj.js';
4
4
  import 'ai';
5
5
 
6
6
  /** Register the framework-neutral MCP App host. Safe to call more than once or during SSR. */
package/dist/app-view.js CHANGED
@@ -2,8 +2,8 @@ import {
2
2
  APP_VIEW_TAG_NAME,
3
3
  NoodleAppViewElement,
4
4
  registerNoodleAppView
5
- } from "./chunk-LNBUYHL7.js";
6
- import "./chunk-P32MAR4K.js";
5
+ } from "./chunk-5NBHHNI3.js";
6
+ import "./chunk-XKTUXFGX.js";
7
7
  import "./chunk-P223CYPO.js";
8
8
  import "./chunk-3YYTUJPJ.js";
9
9
  import "./chunk-5FUTL2UF.js";
@@ -1,6 +1,6 @@
1
- type AssistantThemeMode = 'auto' | 'light' | 'dark';
1
+ type AssistantThemeMode = 'auto' | 'light' | 'dark' | 'invert';
2
2
  type AssistantLayoutMode = 'floating' | 'inline' | 'drawer';
3
- type AssistantPosition = 'bottom-left' | 'bottom-right';
3
+ type AssistantPosition = 'bottom-left' | 'bottom-center' | 'bottom-right';
4
4
  type AssistantPresentationTone = 'neutral' | 'success' | 'warning' | 'danger';
5
5
  interface AssistantPresentationConfiguration {
6
6
  readonly panel?: {
@@ -10,6 +10,7 @@ interface AssistantPresentationConfiguration {
10
10
  readonly radius?: number;
11
11
  };
12
12
  readonly launcher?: {
13
+ readonly style?: 'pill' | 'bubble';
13
14
  readonly icon?: 'brand-mark' | 'chat' | 'none';
14
15
  readonly size?: 'md' | 'lg';
15
16
  readonly status?: 'none' | 'session';
@@ -49,7 +50,7 @@ interface AssistantConfiguration {
49
50
  readonly radius?: 'none' | 'sm' | 'md' | 'lg';
50
51
  readonly density?: 'compact' | 'comfortable';
51
52
  readonly typography?: 'system' | 'serif' | 'mono';
52
- readonly colorScheme?: AssistantThemeMode;
53
+ readonly colorScheme?: Exclude<AssistantThemeMode, 'invert'>;
53
54
  };
54
55
  readonly assistant?: AssistantUiConfiguration;
55
56
  }
@@ -76,6 +77,7 @@ interface BrandThemeOverrides {
76
77
  readonly code?: string;
77
78
  }
78
79
  interface AssistantUiConfiguration {
80
+ readonly theme?: AssistantThemeMode;
79
81
  readonly layout?: {
80
82
  readonly mode?: AssistantLayoutMode;
81
83
  readonly position?: AssistantPosition;
@@ -95,6 +97,7 @@ interface AssistantUiConfiguration {
95
97
  readonly showHeader?: boolean;
96
98
  readonly showAvatars?: boolean;
97
99
  readonly showTimestamps?: boolean;
100
+ readonly showPoweredBy?: boolean;
98
101
  };
99
102
  readonly labels?: Partial<AssistantLabels>;
100
103
  readonly presentation?: AssistantPresentationConfiguration;
@@ -107,6 +110,7 @@ interface AssistantUiConfiguration {
107
110
  interface AssistantLabels {
108
111
  readonly welcomeHeading: string;
109
112
  readonly welcomeMessage: string;
113
+ readonly launcherPlaceholder: string;
110
114
  readonly composerPlaceholder: string;
111
115
  readonly thinking: string;
112
116
  readonly send: string;
@@ -1,6 +1,6 @@
1
- type AssistantThemeMode = 'auto' | 'light' | 'dark';
1
+ type AssistantThemeMode = 'auto' | 'light' | 'dark' | 'invert';
2
2
  type AssistantLayoutMode = 'floating' | 'inline' | 'drawer';
3
- type AssistantPosition = 'bottom-left' | 'bottom-right';
3
+ type AssistantPosition = 'bottom-left' | 'bottom-center' | 'bottom-right';
4
4
  type AssistantPresentationTone = 'neutral' | 'success' | 'warning' | 'danger';
5
5
  interface AssistantPresentationConfiguration {
6
6
  readonly panel?: {
@@ -10,6 +10,7 @@ interface AssistantPresentationConfiguration {
10
10
  readonly radius?: number;
11
11
  };
12
12
  readonly launcher?: {
13
+ readonly style?: 'pill' | 'bubble';
13
14
  readonly icon?: 'brand-mark' | 'chat' | 'none';
14
15
  readonly size?: 'md' | 'lg';
15
16
  readonly status?: 'none' | 'session';
@@ -49,7 +50,7 @@ interface AssistantConfiguration {
49
50
  readonly radius?: 'none' | 'sm' | 'md' | 'lg';
50
51
  readonly density?: 'compact' | 'comfortable';
51
52
  readonly typography?: 'system' | 'serif' | 'mono';
52
- readonly colorScheme?: AssistantThemeMode;
53
+ readonly colorScheme?: Exclude<AssistantThemeMode, 'invert'>;
53
54
  };
54
55
  readonly assistant?: AssistantUiConfiguration;
55
56
  }
@@ -76,6 +77,7 @@ interface BrandThemeOverrides {
76
77
  readonly code?: string;
77
78
  }
78
79
  interface AssistantUiConfiguration {
80
+ readonly theme?: AssistantThemeMode;
79
81
  readonly layout?: {
80
82
  readonly mode?: AssistantLayoutMode;
81
83
  readonly position?: AssistantPosition;
@@ -95,6 +97,7 @@ interface AssistantUiConfiguration {
95
97
  readonly showHeader?: boolean;
96
98
  readonly showAvatars?: boolean;
97
99
  readonly showTimestamps?: boolean;
100
+ readonly showPoweredBy?: boolean;
98
101
  };
99
102
  readonly labels?: Partial<AssistantLabels>;
100
103
  readonly presentation?: AssistantPresentationConfiguration;
@@ -107,6 +110,7 @@ interface AssistantUiConfiguration {
107
110
  interface AssistantLabels {
108
111
  readonly welcomeHeading: string;
109
112
  readonly welcomeMessage: string;
113
+ readonly launcherPlaceholder: string;
110
114
  readonly composerPlaceholder: string;
111
115
  readonly thinking: string;
112
116
  readonly send: string;
@@ -3,7 +3,7 @@ import {
3
3
  mountAssistantApp,
4
4
  unmountAssistantApp,
5
5
  updateAssistantAppTheme
6
- } from "./chunk-P32MAR4K.js";
6
+ } from "./chunk-XKTUXFGX.js";
7
7
 
8
8
  // src/app-view-element.ts
9
9
  var APP_VIEW_TAG_NAME = "noodle-app-view";
@@ -177,4 +177,4 @@ export {
177
177
  NoodleAppViewElement,
178
178
  registerNoodleAppView
179
179
  };
180
- //# sourceMappingURL=chunk-LNBUYHL7.js.map
180
+ //# sourceMappingURL=chunk-5NBHHNI3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app-view-element.ts","../src/app-view.ts"],"sourcesContent":["import { mountAssistantApp, unmountAssistantApp, updateAssistantAppTheme } from './app-host.js';\nimport { ASSISTANT_APP_VIEW_STYLES } from './app-view-styles.js';\nimport type { AssistantClient, AssistantViewAvailableDetail } from './client.js';\nimport type { AssistantErrorDetail } from './transport.js';\n\nexport const APP_VIEW_TAG_NAME = 'noodle-app-view';\n\nexport interface AssistantAppViewErrorDetail {\n readonly code: 'view_render_timeout';\n readonly retryable: false;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'noodle-app-view': NoodleAppViewElement;\n }\n\n interface HTMLElementEventMap {\n 'assistant-error': CustomEvent<AssistantErrorDetail>;\n }\n}\n\nconst HTMLElementBase: typeof HTMLElement =\n globalThis.HTMLElement ?? (class {} as unknown as typeof HTMLElement);\n\nfunction viewIdentity(view: AssistantViewAvailableDetail): string {\n return `${view.id}\\u0000${view.resourceUri}`;\n}\n\n/**\n * Framework-neutral host for one service-resolved MCP App view.\n *\n * `client` and `view` are object properties, not serialized attributes. Vue, Angular, and plain DOM\n * renderers can therefore pass the same `data-view` payload without taking a React dependency.\n */\nexport class NoodleAppViewElement extends HTMLElementBase {\n static readonly observedAttributes = ['allow-fullscreen', 'theme'];\n\n #allowFullscreen = false;\n #client: AssistantClient | undefined;\n #view: AssistantViewAvailableDetail | undefined;\n #theme: 'light' | 'dark' = 'light';\n #container: HTMLElement | undefined;\n #mounted: HTMLElement | undefined;\n #mountedClient: AssistantClient | undefined;\n #mountedAllowFullscreen = false;\n #mountedIdentity: string | undefined;\n #requestedTeardown: { readonly client: AssistantClient; readonly identity: string } | undefined;\n\n get client(): AssistantClient | undefined {\n return this.#client;\n }\n\n /** Allow the hosted App to request fullscreen. Disabled by default. */\n get allowFullscreen(): boolean {\n return this.#allowFullscreen;\n }\n\n set allowFullscreen(value: boolean) {\n const next = value === true;\n if (next === this.#allowFullscreen) return;\n this.#allowFullscreen = next;\n this.toggleAttribute('allow-fullscreen', next);\n this.#reconcile();\n }\n\n set client(value: AssistantClient | undefined) {\n if (value === this.#client) return;\n this.#client = value;\n this.#reconcile();\n }\n\n get view(): AssistantViewAvailableDetail | undefined {\n return this.#view;\n }\n\n set view(value: AssistantViewAvailableDetail | undefined) {\n this.#view = value;\n this.#reconcile();\n }\n\n get theme(): 'light' | 'dark' {\n return this.#theme;\n }\n\n set theme(value: 'light' | 'dark') {\n const next = value === 'dark' ? 'dark' : 'light';\n const changed = next !== this.#theme;\n this.#theme = next;\n if (this.getAttribute('data-theme') !== next) this.setAttribute('data-theme', next);\n if (changed && this.#mounted) updateAssistantAppTheme(this.#mounted, next);\n }\n\n connectedCallback(): void {\n this.#ensureContainer();\n this.#upgradeProperty('allowFullscreen');\n this.#upgradeProperty('client');\n this.#upgradeProperty('theme');\n this.#upgradeProperty('view');\n this.#reconcile();\n }\n\n disconnectedCallback(): void {\n this.#requestedTeardown = undefined;\n this.#releaseMount();\n }\n\n attributeChangedCallback(name: string, _previous: string | null, value: string | null): void {\n if (name === 'allow-fullscreen') this.allowFullscreen = value !== null;\n if (name === 'theme') this.theme = value === 'dark' ? 'dark' : 'light';\n }\n\n #ensureContainer(): HTMLElement {\n if (this.#container) return this.#container;\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' });\n root.innerHTML = ASSISTANT_APP_VIEW_STYLES;\n const container = document.createElement('div');\n container.className = 'noodle-app-mount';\n container.setAttribute('part', 'mount');\n root.append(container);\n this.#container = container;\n return container;\n }\n\n #upgradeProperty(name: 'allowFullscreen' | 'client' | 'theme' | 'view'): void {\n const property = Object.getOwnPropertyDescriptor(this, name);\n if (!property) return;\n Reflect.deleteProperty(this, name);\n Reflect.set(this, name, property.value);\n }\n\n #releaseMount(): void {\n const mounted = this.#mounted;\n this.#mounted = undefined;\n this.#mountedClient = undefined;\n this.#mountedAllowFullscreen = false;\n this.#mountedIdentity = undefined;\n this.#container?.replaceChildren();\n if (mounted) void unmountAssistantApp(mounted);\n }\n\n #reconcile(): void {\n if (!this.isConnected) return;\n const client = this.#client;\n const detail = this.#view;\n const identity = detail ? viewIdentity(detail) : undefined;\n\n if (this.#mounted) {\n if (\n client === this.#mountedClient &&\n identity === this.#mountedIdentity &&\n this.#allowFullscreen === this.#mountedAllowFullscreen\n ) {\n return;\n }\n this.#releaseMount();\n }\n\n if (\n this.#requestedTeardown &&\n (client !== this.#requestedTeardown.client || identity !== this.#requestedTeardown.identity)\n ) {\n this.#requestedTeardown = undefined;\n }\n if (!client || !detail?.html || !identity || this.#requestedTeardown) return;\n\n const initialHtml = detail.html;\n const sandboxUrl = client.appSandboxUrl?.();\n let card: HTMLElement | undefined;\n card = mountAssistantApp(\n detail,\n {\n client,\n sendMessage: (message) => client.sendMessage(message),\n updateModelContext: (update) => client.updateModelContext(update),\n theme: this.#theme,\n },\n {\n allowFullscreen: this.#allowFullscreen,\n ...(sandboxUrl ? { sandboxUrl } : {}),\n getDetail: () => {\n const latest = this.#view;\n if (this.#client !== client || !latest || viewIdentity(latest) !== identity)\n return detail;\n return latest.html ? latest : { ...latest, html: initialHtml };\n },\n onRenderFailure: (failure) => {\n this.dispatchEvent(\n new CustomEvent<AssistantAppViewErrorDetail>('assistant-error', {\n detail: failure,\n bubbles: true,\n composed: true,\n }),\n );\n },\n onTeardownRequest: () => {\n if (this.#mounted !== card) return;\n this.#mounted = undefined;\n this.#mountedClient = undefined;\n this.#mountedIdentity = undefined;\n this.#requestedTeardown = { client, identity };\n },\n },\n );\n if (!card) return;\n this.#mounted = card;\n this.#mountedClient = client;\n this.#mountedAllowFullscreen = this.#allowFullscreen;\n this.#mountedIdentity = identity;\n this.#ensureContainer().replaceChildren(card);\n }\n}\n","import { APP_VIEW_TAG_NAME, NoodleAppViewElement } from './app-view-element.js';\n\nexport {\n APP_VIEW_TAG_NAME,\n type AssistantAppViewErrorDetail,\n NoodleAppViewElement,\n} from './app-view-element.js';\nexport type { AssistantClient, AssistantViewAvailableDetail } from './client.js';\n\n/** Register the framework-neutral MCP App host. Safe to call more than once or during SSR. */\nexport function registerNoodleAppView(): void {\n if (!globalThis.customElements?.get(APP_VIEW_TAG_NAME)) {\n globalThis.customElements?.define(APP_VIEW_TAG_NAME, NoodleAppViewElement);\n }\n}\n\nregisterNoodleAppView();\n"],"mappings":"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","names":[]}